]> gcc.gnu.org Git - gcc.git/blame - gcc/c-typeck.c
expr.c (java_check_reference): Use the semantics of COND_EXPRs with void-type branche...
[gcc.git] / gcc / c-typeck.c
CommitLineData
400fbf9f 1/* Build expressions with type checking for C compiler.
06ceef4e 2 Copyright (C) 1987, 1988, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
339a28b9 3 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
400fbf9f 4
1322177d 5This file is part of GCC.
400fbf9f 6
1322177d
LB
7GCC is free software; you can redistribute it and/or modify it under
8the terms of the GNU General Public License as published by the Free
9Software Foundation; either version 2, or (at your option) any later
10version.
400fbf9f 11
1322177d
LB
12GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13WARRANTY; without even the implied warranty of MERCHANTABILITY or
14FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15for more details.
400fbf9f
JW
16
17You should have received a copy of the GNU General Public License
1322177d
LB
18along with GCC; see the file COPYING. If not, write to the Free
19Software Foundation, 59 Temple Place - Suite 330, Boston, MA
2002111-1307, USA. */
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,
26 and some optimization.
27
28 There are also routines to build RETURN_STMT nodes and CASE_STMT nodes,
29 and to process initializations in declarations (since they work
30 like a strange sort of assignment). */
31
32#include "config.h"
670ee920 33#include "system.h"
4977bab6
ZW
34#include "coretypes.h"
35#include "tm.h"
742b62e7 36#include "rtl.h"
400fbf9f
JW
37#include "tree.h"
38#include "c-tree.h"
6baf1cc8 39#include "tm_p.h"
400fbf9f 40#include "flags.h"
e14417fa 41#include "output.h"
234042f4 42#include "expr.h"
5f6da302 43#include "toplev.h"
ab87f8c8 44#include "intl.h"
4dd7201e 45#include "ggc.h"
672a6f42 46#include "target.h"
400fbf9f 47
b71c7f8a 48/* Nonzero if we've already printed a "missing braces around initializer"
103b7b17 49 message within this initializer. */
b71c7f8a 50static int missing_braces_mentioned;
103b7b17 51
f55ade6e 52static tree qualify_type (tree, tree);
766beae1 53static int same_translation_unit_p (tree, tree);
d1bd0ded 54static int tagged_types_tu_compatible_p (tree, tree, int);
f55ade6e 55static int comp_target_types (tree, tree, int);
d1bd0ded
GK
56static int function_types_compatible_p (tree, tree, int);
57static int type_lists_compatible_p (tree, tree, int);
f55ade6e
AJ
58static tree decl_constant_value_for_broken_optimization (tree);
59static tree default_function_array_conversion (tree);
60static tree lookup_field (tree, tree);
f55ade6e
AJ
61static tree convert_arguments (tree, tree, tree, tree);
62static tree pointer_diff (tree, tree);
63static tree unary_complex_lvalue (enum tree_code, tree, int);
64static void pedantic_lvalue_warning (enum tree_code);
65static tree internal_build_compound_expr (tree, int);
66static tree convert_for_assignment (tree, tree, const char *, tree, tree,
67 int);
68static void warn_for_assignment (const char *, const char *, tree, int);
69static tree valid_compound_expr_initializer (tree, tree);
70static void push_string (const char *);
71static void push_member_name (tree);
72static void push_array_bounds (int);
73static int spelling_length (void);
74static char *print_spelling (char *);
75static void warning_init (const char *);
76static tree digest_init (tree, tree, int);
77static void output_init_element (tree, tree, tree, int);
78static void output_pending_init_elements (int);
79static int set_designator (int);
80static void push_range_stack (tree);
81static void add_pending_init (tree, tree);
82static void set_nonincremental_init (void);
83static void set_nonincremental_init_from_string (tree);
84static tree find_init_member (tree);
400fbf9f
JW
85\f
86/* Do `exp = require_complete_type (exp);' to make sure exp
87 does not have an incomplete type. (That includes void types.) */
88
89tree
2f6e4e97 90require_complete_type (tree value)
400fbf9f
JW
91{
92 tree type = TREE_TYPE (value);
93
c3d5c3fa 94 if (value == error_mark_node || type == error_mark_node)
ea0f786b
CB
95 return error_mark_node;
96
400fbf9f 97 /* First, detect a valid value with a complete type. */
d0f062fb 98 if (COMPLETE_TYPE_P (type))
400fbf9f
JW
99 return value;
100
7a228918 101 c_incomplete_type_error (value, type);
400fbf9f
JW
102 return error_mark_node;
103}
104
105/* Print an error message for invalid use of an incomplete type.
106 VALUE is the expression that was used (or 0 if that isn't known)
107 and TYPE is the type that was invalid. */
108
109void
2f6e4e97 110c_incomplete_type_error (tree value, tree type)
400fbf9f 111{
5d5993dd 112 const char *type_code_string;
400fbf9f
JW
113
114 /* Avoid duplicate error message. */
115 if (TREE_CODE (type) == ERROR_MARK)
116 return;
117
118 if (value != 0 && (TREE_CODE (value) == VAR_DECL
119 || TREE_CODE (value) == PARM_DECL))
120 error ("`%s' has an incomplete type",
121 IDENTIFIER_POINTER (DECL_NAME (value)));
122 else
123 {
124 retry:
125 /* We must print an error message. Be clever about what it says. */
126
127 switch (TREE_CODE (type))
128 {
129 case RECORD_TYPE:
ab87f8c8 130 type_code_string = "struct";
400fbf9f
JW
131 break;
132
133 case UNION_TYPE:
ab87f8c8 134 type_code_string = "union";
400fbf9f
JW
135 break;
136
137 case ENUMERAL_TYPE:
ab87f8c8 138 type_code_string = "enum";
400fbf9f
JW
139 break;
140
141 case VOID_TYPE:
142 error ("invalid use of void expression");
143 return;
144
145 case ARRAY_TYPE:
146 if (TYPE_DOMAIN (type))
147 {
fba78abb
RH
148 if (TYPE_MAX_VALUE (TYPE_DOMAIN (type)) == NULL)
149 {
150 error ("invalid use of flexible array member");
151 return;
152 }
400fbf9f
JW
153 type = TREE_TYPE (type);
154 goto retry;
155 }
156 error ("invalid use of array with unspecified bounds");
157 return;
158
159 default:
160 abort ();
161 }
162
163 if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
ab87f8c8
JL
164 error ("invalid use of undefined type `%s %s'",
165 type_code_string, IDENTIFIER_POINTER (TYPE_NAME (type)));
400fbf9f
JW
166 else
167 /* If this type has a typedef-name, the TYPE_NAME is a TYPE_DECL. */
168 error ("invalid use of incomplete typedef `%s'",
169 IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type))));
170 }
171}
172
ab393bf1
NB
173/* Given a type, apply default promotions wrt unnamed function
174 arguments and return the new type. */
175
176tree
2f6e4e97 177c_type_promotes_to (tree type)
ab393bf1
NB
178{
179 if (TYPE_MAIN_VARIANT (type) == float_type_node)
180 return double_type_node;
181
182 if (c_promoting_integer_type_p (type))
183 {
184 /* Preserve unsignedness if not really getting any wider. */
185 if (TREE_UNSIGNED (type)
186 && (TYPE_PRECISION (type) == TYPE_PRECISION (integer_type_node)))
187 return unsigned_type_node;
188 return integer_type_node;
189 }
190
191 return type;
192}
193
400fbf9f
JW
194/* Return a variant of TYPE which has all the type qualifiers of LIKE
195 as well as those of TYPE. */
196
197static tree
2f6e4e97 198qualify_type (tree type, tree like)
400fbf9f 199{
2f6e4e97 200 return c_build_qualified_type (type,
afbadaa7 201 TYPE_QUALS (type) | TYPE_QUALS (like));
400fbf9f
JW
202}
203\f
204/* Return the common type of two types.
205 We assume that comptypes has already been done and returned 1;
6cb72a7d
RS
206 if that isn't so, this may crash. In particular, we assume that qualifiers
207 match.
400fbf9f
JW
208
209 This is the type for the result of most arithmetic operations
6cb72a7d 210 if the operands have the given two types. */
400fbf9f
JW
211
212tree
2f6e4e97 213common_type (tree t1, tree t2)
400fbf9f 214{
b3694847
SS
215 enum tree_code code1;
216 enum tree_code code2;
4b027d16 217 tree attributes;
400fbf9f
JW
218
219 /* Save time if the two types are the same. */
220
221 if (t1 == t2) return t1;
222
223 /* If one type is nonsense, use the other. */
224 if (t1 == error_mark_node)
225 return t2;
226 if (t2 == error_mark_node)
227 return t1;
228
d9525bec 229 /* Merge the attributes. */
f6897b10 230 attributes = (*targetm.merge_type_attributes) (t1, t2);
4b027d16 231
400fbf9f
JW
232 /* Treat an enum type as the unsigned integer type of the same width. */
233
234 if (TREE_CODE (t1) == ENUMERAL_TYPE)
b0c48229 235 t1 = c_common_type_for_size (TYPE_PRECISION (t1), 1);
400fbf9f 236 if (TREE_CODE (t2) == ENUMERAL_TYPE)
b0c48229 237 t2 = c_common_type_for_size (TYPE_PRECISION (t2), 1);
400fbf9f
JW
238
239 code1 = TREE_CODE (t1);
240 code2 = TREE_CODE (t2);
241
75326e8c
RK
242 /* If one type is complex, form the common type of the non-complex
243 components, then make that complex. Use T1 or T2 if it is the
244 required type. */
b6a10c9f
RS
245 if (code1 == COMPLEX_TYPE || code2 == COMPLEX_TYPE)
246 {
75326e8c
RK
247 tree subtype1 = code1 == COMPLEX_TYPE ? TREE_TYPE (t1) : t1;
248 tree subtype2 = code2 == COMPLEX_TYPE ? TREE_TYPE (t2) : t2;
249 tree subtype = common_type (subtype1, subtype2);
250
251 if (code1 == COMPLEX_TYPE && TREE_TYPE (t1) == subtype)
4b027d16 252 return build_type_attribute_variant (t1, attributes);
75326e8c 253 else if (code2 == COMPLEX_TYPE && TREE_TYPE (t2) == subtype)
4b027d16 254 return build_type_attribute_variant (t2, attributes);
b6a10c9f 255 else
4b027d16
RK
256 return build_type_attribute_variant (build_complex_type (subtype),
257 attributes);
b6a10c9f
RS
258 }
259
400fbf9f
JW
260 switch (code1)
261 {
262 case INTEGER_TYPE:
263 case REAL_TYPE:
264 /* If only one is real, use it as the result. */
265
266 if (code1 == REAL_TYPE && code2 != REAL_TYPE)
4b027d16 267 return build_type_attribute_variant (t1, attributes);
400fbf9f
JW
268
269 if (code2 == REAL_TYPE && code1 != REAL_TYPE)
4b027d16 270 return build_type_attribute_variant (t2, attributes);
400fbf9f
JW
271
272 /* Both real or both integers; use the one with greater precision. */
273
274 if (TYPE_PRECISION (t1) > TYPE_PRECISION (t2))
4b027d16 275 return build_type_attribute_variant (t1, attributes);
400fbf9f 276 else if (TYPE_PRECISION (t2) > TYPE_PRECISION (t1))
4b027d16 277 return build_type_attribute_variant (t2, attributes);
400fbf9f
JW
278
279 /* Same precision. Prefer longs to ints even when same size. */
280
36618528
RS
281 if (TYPE_MAIN_VARIANT (t1) == long_unsigned_type_node
282 || TYPE_MAIN_VARIANT (t2) == long_unsigned_type_node)
4b027d16
RK
283 return build_type_attribute_variant (long_unsigned_type_node,
284 attributes);
400fbf9f 285
36618528
RS
286 if (TYPE_MAIN_VARIANT (t1) == long_integer_type_node
287 || TYPE_MAIN_VARIANT (t2) == long_integer_type_node)
400fbf9f
JW
288 {
289 /* But preserve unsignedness from the other type,
290 since long cannot hold all the values of an unsigned int. */
291 if (TREE_UNSIGNED (t1) || TREE_UNSIGNED (t2))
4b027d16
RK
292 t1 = long_unsigned_type_node;
293 else
294 t1 = long_integer_type_node;
295 return build_type_attribute_variant (t1, attributes);
400fbf9f
JW
296 }
297
e9a25f70
JL
298 /* Likewise, prefer long double to double even if same size. */
299 if (TYPE_MAIN_VARIANT (t1) == long_double_type_node
300 || TYPE_MAIN_VARIANT (t2) == long_double_type_node)
301 return build_type_attribute_variant (long_double_type_node,
302 attributes);
303
400fbf9f
JW
304 /* Otherwise prefer the unsigned one. */
305
306 if (TREE_UNSIGNED (t1))
4b027d16
RK
307 return build_type_attribute_variant (t1, attributes);
308 else
309 return build_type_attribute_variant (t2, attributes);
400fbf9f
JW
310
311 case POINTER_TYPE:
400fbf9f
JW
312 /* For two pointers, do this recursively on the target type,
313 and combine the qualifiers of the two types' targets. */
8706edbc
RS
314 /* This code was turned off; I don't know why.
315 But ANSI C specifies doing this with the qualifiers.
316 So I turned it on again. */
400fbf9f 317 {
3932261a
MM
318 tree pointed_to_1 = TREE_TYPE (t1);
319 tree pointed_to_2 = TREE_TYPE (t2);
320 tree target = common_type (TYPE_MAIN_VARIANT (pointed_to_1),
321 TYPE_MAIN_VARIANT (pointed_to_2));
2f6e4e97
AJ
322 t1 = build_pointer_type (c_build_qualified_type
323 (target,
324 TYPE_QUALS (pointed_to_1) |
3932261a 325 TYPE_QUALS (pointed_to_2)));
4b027d16 326 return build_type_attribute_variant (t1, attributes);
400fbf9f 327 }
400fbf9f
JW
328
329 case ARRAY_TYPE:
330 {
331 tree elt = common_type (TREE_TYPE (t1), TREE_TYPE (t2));
332 /* Save space: see if the result is identical to one of the args. */
333 if (elt == TREE_TYPE (t1) && TYPE_DOMAIN (t1))
4b027d16 334 return build_type_attribute_variant (t1, attributes);
400fbf9f 335 if (elt == TREE_TYPE (t2) && TYPE_DOMAIN (t2))
4b027d16 336 return build_type_attribute_variant (t2, attributes);
400fbf9f 337 /* Merge the element types, and have a size if either arg has one. */
4b027d16
RK
338 t1 = build_array_type (elt, TYPE_DOMAIN (TYPE_DOMAIN (t1) ? t1 : t2));
339 return build_type_attribute_variant (t1, attributes);
400fbf9f
JW
340 }
341
342 case FUNCTION_TYPE:
343 /* Function types: prefer the one that specified arg types.
344 If both do, merge the arg types. Also merge the return types. */
345 {
346 tree valtype = common_type (TREE_TYPE (t1), TREE_TYPE (t2));
347 tree p1 = TYPE_ARG_TYPES (t1);
348 tree p2 = TYPE_ARG_TYPES (t2);
349 int len;
350 tree newargs, n;
351 int i;
352
353 /* Save space: see if the result is identical to one of the args. */
354 if (valtype == TREE_TYPE (t1) && ! TYPE_ARG_TYPES (t2))
4b027d16 355 return build_type_attribute_variant (t1, attributes);
400fbf9f 356 if (valtype == TREE_TYPE (t2) && ! TYPE_ARG_TYPES (t1))
4b027d16 357 return build_type_attribute_variant (t2, attributes);
400fbf9f
JW
358
359 /* Simple way if one arg fails to specify argument types. */
360 if (TYPE_ARG_TYPES (t1) == 0)
4b027d16
RK
361 {
362 t1 = build_function_type (valtype, TYPE_ARG_TYPES (t2));
363 return build_type_attribute_variant (t1, attributes);
364 }
400fbf9f 365 if (TYPE_ARG_TYPES (t2) == 0)
4b027d16
RK
366 {
367 t1 = build_function_type (valtype, TYPE_ARG_TYPES (t1));
368 return build_type_attribute_variant (t1, attributes);
369 }
400fbf9f
JW
370
371 /* If both args specify argument types, we must merge the two
372 lists, argument by argument. */
373
2f4e8f2b 374 pushlevel (0);
eb1dfbb2 375 declare_parm_level ();
2f4e8f2b 376
400fbf9f
JW
377 len = list_length (p1);
378 newargs = 0;
379
380 for (i = 0; i < len; i++)
8d9bfdc5 381 newargs = tree_cons (NULL_TREE, NULL_TREE, newargs);
400fbf9f
JW
382
383 n = newargs;
384
385 for (; p1;
386 p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2), n = TREE_CHAIN (n))
387 {
388 /* A null type means arg type is not specified.
389 Take whatever the other function type has. */
390 if (TREE_VALUE (p1) == 0)
391 {
392 TREE_VALUE (n) = TREE_VALUE (p2);
393 goto parm_done;
394 }
395 if (TREE_VALUE (p2) == 0)
396 {
397 TREE_VALUE (n) = TREE_VALUE (p1);
398 goto parm_done;
399 }
2f6e4e97 400
400fbf9f
JW
401 /* Given wait (union {union wait *u; int *i} *)
402 and wait (union wait *),
403 prefer union wait * as type of parm. */
404 if (TREE_CODE (TREE_VALUE (p1)) == UNION_TYPE
405 && TREE_VALUE (p1) != TREE_VALUE (p2))
406 {
407 tree memb;
408 for (memb = TYPE_FIELDS (TREE_VALUE (p1));
409 memb; memb = TREE_CHAIN (memb))
d1bd0ded
GK
410 if (comptypes (TREE_TYPE (memb), TREE_VALUE (p2),
411 COMPARE_STRICT))
400fbf9f
JW
412 {
413 TREE_VALUE (n) = TREE_VALUE (p2);
414 if (pedantic)
89abf8d1 415 pedwarn ("function types not truly compatible in ISO C");
400fbf9f
JW
416 goto parm_done;
417 }
418 }
419 if (TREE_CODE (TREE_VALUE (p2)) == UNION_TYPE
420 && TREE_VALUE (p2) != TREE_VALUE (p1))
421 {
422 tree memb;
423 for (memb = TYPE_FIELDS (TREE_VALUE (p2));
424 memb; memb = TREE_CHAIN (memb))
d1bd0ded
GK
425 if (comptypes (TREE_TYPE (memb), TREE_VALUE (p1),
426 COMPARE_STRICT))
400fbf9f
JW
427 {
428 TREE_VALUE (n) = TREE_VALUE (p1);
429 if (pedantic)
89abf8d1 430 pedwarn ("function types not truly compatible in ISO C");
400fbf9f
JW
431 goto parm_done;
432 }
433 }
434 TREE_VALUE (n) = common_type (TREE_VALUE (p1), TREE_VALUE (p2));
435 parm_done: ;
436 }
437
2f4e8f2b
JJ
438 poplevel (0, 0, 0);
439
4b027d16 440 t1 = build_function_type (valtype, newargs);
0f41302f 441 /* ... falls through ... */
400fbf9f
JW
442 }
443
444 default:
4b027d16 445 return build_type_attribute_variant (t1, attributes);
400fbf9f
JW
446 }
447
448}
449\f
450/* Return 1 if TYPE1 and TYPE2 are compatible types for assignment
451 or various other operations. Return 2 if they are compatible
452 but a warning may be needed if you use them together. */
453
454int
d1bd0ded 455comptypes (tree type1, tree type2, int flags)
400fbf9f 456{
b3694847
SS
457 tree t1 = type1;
458 tree t2 = type2;
4b027d16 459 int attrval, val;
400fbf9f
JW
460
461 /* Suppress errors caused by previously reported errors. */
462
8d47dfc5
RH
463 if (t1 == t2 || !t1 || !t2
464 || TREE_CODE (t1) == ERROR_MARK || TREE_CODE (t2) == ERROR_MARK)
400fbf9f
JW
465 return 1;
466
21318741
RK
467 /* If either type is the internal version of sizetype, return the
468 language version. */
469 if (TREE_CODE (t1) == INTEGER_TYPE && TYPE_IS_SIZETYPE (t1)
470 && TYPE_DOMAIN (t1) != 0)
471 t1 = TYPE_DOMAIN (t1);
472
473 if (TREE_CODE (t2) == INTEGER_TYPE && TYPE_IS_SIZETYPE (t2)
474 && TYPE_DOMAIN (t2) != 0)
475 t2 = TYPE_DOMAIN (t2);
476
2f6e4e97 477 /* Treat an enum type as the integer type of the same width and
b8c21346 478 signedness. */
400fbf9f
JW
479
480 if (TREE_CODE (t1) == ENUMERAL_TYPE)
b0c48229 481 t1 = c_common_type_for_size (TYPE_PRECISION (t1), TREE_UNSIGNED (t1));
400fbf9f 482 if (TREE_CODE (t2) == ENUMERAL_TYPE)
b0c48229 483 t2 = c_common_type_for_size (TYPE_PRECISION (t2), TREE_UNSIGNED (t2));
400fbf9f
JW
484
485 if (t1 == t2)
486 return 1;
487
488 /* Different classes of types can't be compatible. */
489
490 if (TREE_CODE (t1) != TREE_CODE (t2)) return 0;
491
492 /* Qualifiers must match. */
493
3932261a 494 if (TYPE_QUALS (t1) != TYPE_QUALS (t2))
400fbf9f
JW
495 return 0;
496
08632da2
RS
497 /* Allow for two different type nodes which have essentially the same
498 definition. Note that we already checked for equality of the type
38e01259 499 qualifiers (just above). */
400fbf9f
JW
500
501 if (TYPE_MAIN_VARIANT (t1) == TYPE_MAIN_VARIANT (t2))
502 return 1;
503
4b027d16 504 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
f6897b10 505 if (! (attrval = (*targetm.comp_type_attributes) (t1, t2)))
4b027d16
RK
506 return 0;
507
508 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
509 val = 0;
510
400fbf9f
JW
511 switch (TREE_CODE (t1))
512 {
513 case POINTER_TYPE:
264fa2db
ZL
514 /* We must give ObjC the first crack at comparing pointers, since
515 protocol qualifiers may be involved. */
516 if (c_dialect_objc () && (val = objc_comptypes (t1, t2, 0)) >= 0)
517 break;
4b027d16 518 val = (TREE_TYPE (t1) == TREE_TYPE (t2)
264fa2db 519 ? 1 : comptypes (TREE_TYPE (t1), TREE_TYPE (t2), flags));
4b027d16 520 break;
400fbf9f
JW
521
522 case FUNCTION_TYPE:
d1bd0ded 523 val = function_types_compatible_p (t1, t2, flags);
4b027d16 524 break;
400fbf9f
JW
525
526 case ARRAY_TYPE:
527 {
400fbf9f
JW
528 tree d1 = TYPE_DOMAIN (t1);
529 tree d2 = TYPE_DOMAIN (t2);
3f85558f
RH
530 bool d1_variable, d2_variable;
531 bool d1_zero, d2_zero;
4b027d16 532 val = 1;
400fbf9f
JW
533
534 /* Target types must match incl. qualifiers. */
535 if (TREE_TYPE (t1) != TREE_TYPE (t2)
d1bd0ded
GK
536 && 0 == (val = comptypes (TREE_TYPE (t1), TREE_TYPE (t2),
537 flags)))
400fbf9f
JW
538 return 0;
539
540 /* Sizes must match unless one is missing or variable. */
3f85558f 541 if (d1 == 0 || d2 == 0 || d1 == d2)
4b027d16 542 break;
400fbf9f 543
3f85558f
RH
544 d1_zero = ! TYPE_MAX_VALUE (d1);
545 d2_zero = ! TYPE_MAX_VALUE (d2);
546
547 d1_variable = (! d1_zero
548 && (TREE_CODE (TYPE_MIN_VALUE (d1)) != INTEGER_CST
549 || TREE_CODE (TYPE_MAX_VALUE (d1)) != INTEGER_CST));
550 d2_variable = (! d2_zero
551 && (TREE_CODE (TYPE_MIN_VALUE (d2)) != INTEGER_CST
552 || TREE_CODE (TYPE_MAX_VALUE (d2)) != INTEGER_CST));
553
554 if (d1_variable || d2_variable)
555 break;
556 if (d1_zero && d2_zero)
557 break;
558 if (d1_zero || d2_zero
559 || ! tree_int_cst_equal (TYPE_MIN_VALUE (d1), TYPE_MIN_VALUE (d2))
05bccae2
RK
560 || ! tree_int_cst_equal (TYPE_MAX_VALUE (d1), TYPE_MAX_VALUE (d2)))
561 val = 0;
562
4b027d16 563 break;
400fbf9f
JW
564 }
565
566 case RECORD_TYPE:
264fa2db
ZL
567 /* We are dealing with two distinct structs. In assorted Objective-C
568 corner cases, however, these can still be deemed equivalent. */
37fa72e9 569 if (c_dialect_objc () && objc_comptypes (t1, t2, 0) == 1)
4b027d16 570 val = 1;
d1bd0ded
GK
571
572 case ENUMERAL_TYPE:
573 case UNION_TYPE:
766beae1 574 if (val != 1 && !same_translation_unit_p (t1, t2))
d1bd0ded 575 val = tagged_types_tu_compatible_p (t1, t2, flags);
4b027d16 576 break;
e9a25f70 577
62e1dfcf
NC
578 case VECTOR_TYPE:
579 /* The target might allow certain vector types to be compatible. */
c8e4f0e9
AH
580 val = (*targetm.vector_opaque_p) (t1)
581 || (*targetm.vector_opaque_p) (t2);
62e1dfcf
NC
582 break;
583
e9a25f70
JL
584 default:
585 break;
400fbf9f 586 }
4b027d16 587 return attrval == 2 && val == 1 ? 2 : val;
400fbf9f
JW
588}
589
590/* Return 1 if TTL and TTR are pointers to types that are equivalent,
1074d9d4
NP
591 ignoring their qualifiers. REFLEXIVE is only used by ObjC - set it
592 to 1 or 0 depending if the check of the pointer types is meant to
593 be reflexive or not (typically, assignments are not reflexive,
594 while comparisons are reflexive).
595*/
400fbf9f
JW
596
597static int
2f6e4e97 598comp_target_types (tree ttl, tree ttr, int reflexive)
400fbf9f 599{
392202b0 600 int val;
8b40563c 601
b50d021d 602 /* Give objc_comptypes a crack at letting these types through. */
1074d9d4 603 if ((val = objc_comptypes (ttl, ttr, reflexive)) >= 0)
392202b0 604 return val;
8b40563c 605
392202b0 606 val = comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (ttl)),
d1bd0ded 607 TYPE_MAIN_VARIANT (TREE_TYPE (ttr)), COMPARE_STRICT);
8b40563c 608
400fbf9f
JW
609 if (val == 2 && pedantic)
610 pedwarn ("types are not quite compatible");
611 return val;
612}
613\f
614/* Subroutines of `comptypes'. */
615
766beae1
ZW
616/* Determine whether two types derive from the same translation unit.
617 If the CONTEXT chain ends in a null, that type's context is still
618 being parsed, so if two types have context chains ending in null,
619 they're in the same translation unit. */
620static int
621same_translation_unit_p (tree t1, tree t2)
622{
623 while (t1 && TREE_CODE (t1) != TRANSLATION_UNIT_DECL)
624 switch (TREE_CODE_CLASS (TREE_CODE (t1)))
625 {
626 case 'd': t1 = DECL_CONTEXT (t1); break;
627 case 't': t1 = TYPE_CONTEXT (t1); break;
628 case 'b': t1 = BLOCK_SUPERCONTEXT (t1); break;
629 default: abort ();
630 }
631
632 while (t2 && TREE_CODE (t2) != TRANSLATION_UNIT_DECL)
633 switch (TREE_CODE_CLASS (TREE_CODE (t2)))
634 {
635 case 'd': t2 = DECL_CONTEXT (t1); break;
636 case 't': t2 = TYPE_CONTEXT (t2); break;
637 case 'b': t2 = BLOCK_SUPERCONTEXT (t2); break;
638 default: abort ();
639 }
640
641 return t1 == t2;
642}
643
d1bd0ded
GK
644/* The C standard says that two structures in different translation
645 units are compatible with each other only if the types of their
646 fields are compatible (among other things). So, consider two copies
647 of this structure: */
648
649struct tagged_tu_seen {
650 const struct tagged_tu_seen * next;
651 tree t1;
652 tree t2;
653};
654
655/* Can they be compatible with each other? We choose to break the
656 recursion by allowing those types to be compatible. */
657
658static const struct tagged_tu_seen * tagged_tu_seen_base;
659
660/* Return 1 if two 'struct', 'union', or 'enum' types T1 and T2 are
661 compatible. If the two types are not the same (which has been
662 checked earlier), this can only happen when multiple translation
663 units are being compiled. See C99 6.2.7 paragraph 1 for the exact
664 rules. */
665
666static int
667tagged_types_tu_compatible_p (tree t1, tree t2, int flags)
668{
669 tree s1, s2;
670 bool needs_warning = false;
671
672 /* We have to verify that the tags of the types are the same. This
673 is harder than it looks because this may be a typedef, so we have
674 to go look at the original type. It may even be a typedef of a
4ed43216 675 typedef... */
d1bd0ded
GK
676 while (TYPE_NAME (t1) && TREE_CODE (TYPE_NAME (t1)) == TYPE_DECL)
677 t1 = DECL_ORIGINAL_TYPE (TYPE_NAME (t1));
678
679 while (TYPE_NAME (t2) && TREE_CODE (TYPE_NAME (t2)) == TYPE_DECL)
680 t2 = DECL_ORIGINAL_TYPE (TYPE_NAME (t2));
681
682 /* C90 didn't have the requirement that the two tags be the same. */
683 if (flag_isoc99 && TYPE_NAME (t1) != TYPE_NAME (t2))
684 return 0;
685
686 /* C90 didn't say what happened if one or both of the types were
687 incomplete; we choose to follow C99 rules here, which is that they
688 are compatible. */
689 if (TYPE_SIZE (t1) == NULL
690 || TYPE_SIZE (t2) == NULL)
691 return 1;
692
693 {
694 const struct tagged_tu_seen * tts_i;
695 for (tts_i = tagged_tu_seen_base; tts_i != NULL; tts_i = tts_i->next)
696 if (tts_i->t1 == t1 && tts_i->t2 == t2)
697 return 1;
698 }
699
700 switch (TREE_CODE (t1))
701 {
702 case ENUMERAL_TYPE:
703 {
704 if (list_length (TYPE_VALUES (t1)) != list_length (TYPE_VALUES (t2)))
705 return 0;
706
707 for (s1 = TYPE_VALUES (t1); s1; s1 = TREE_CHAIN (s1))
708 {
709 s2 = purpose_member (TREE_PURPOSE (s1), TYPE_VALUES (t2));
710 if (s2 == NULL
711 || simple_cst_equal (TREE_VALUE (s1), TREE_VALUE (s2)) != 1)
712 return 0;
713 }
714 return 1;
715 }
716
717 case UNION_TYPE:
718 {
719 if (list_length (TYPE_FIELDS (t1)) != list_length (TYPE_FIELDS (t2)))
720 return 0;
721
722 for (s1 = TYPE_FIELDS (t1); s1; s1 = TREE_CHAIN (s1))
723 {
724 bool ok = false;
725 struct tagged_tu_seen tts;
726
727 tts.next = tagged_tu_seen_base;
728 tts.t1 = t1;
729 tts.t2 = t2;
730 tagged_tu_seen_base = &tts;
731
732 if (DECL_NAME (s1) != NULL)
733 for (s2 = TYPE_VALUES (t2); s2; s2 = TREE_CHAIN (s2))
734 if (DECL_NAME (s1) == DECL_NAME (s2))
735 {
736 int result;
737 result = comptypes (TREE_TYPE (s1), TREE_TYPE (s2), flags);
738 if (result == 0)
739 break;
740 if (result == 2)
741 needs_warning = true;
742
743 if (TREE_CODE (s1) == FIELD_DECL
744 && simple_cst_equal (DECL_FIELD_BIT_OFFSET (s1),
745 DECL_FIELD_BIT_OFFSET (s2)) != 1)
746 break;
747
748 ok = true;
749 break;
750 }
751 tagged_tu_seen_base = tts.next;
752 if (! ok)
753 return 0;
754 }
755 return needs_warning ? 2 : 1;
756 }
757
758 case RECORD_TYPE:
759 {
760 struct tagged_tu_seen tts;
761
762 tts.next = tagged_tu_seen_base;
763 tts.t1 = t1;
764 tts.t2 = t2;
765 tagged_tu_seen_base = &tts;
766
767 for (s1 = TYPE_FIELDS (t1), s2 = TYPE_FIELDS (t2);
768 s1 && s2;
769 s1 = TREE_CHAIN (s1), s2 = TREE_CHAIN (s2))
770 {
771 int result;
772 if (TREE_CODE (s1) != TREE_CODE (s2)
773 || DECL_NAME (s1) != DECL_NAME (s2))
774 break;
775 result = comptypes (TREE_TYPE (s1), TREE_TYPE (s2), flags);
776 if (result == 0)
777 break;
778 if (result == 2)
779 needs_warning = true;
780
781 if (TREE_CODE (s1) == FIELD_DECL
782 && simple_cst_equal (DECL_FIELD_BIT_OFFSET (s1),
783 DECL_FIELD_BIT_OFFSET (s2)) != 1)
784 break;
785 }
786 tagged_tu_seen_base = tts.next;
787 if (s1 && s2)
788 return 0;
789 return needs_warning ? 2 : 1;
790 }
791
792 default:
793 abort ();
794 }
795}
796
400fbf9f
JW
797/* Return 1 if two function types F1 and F2 are compatible.
798 If either type specifies no argument types,
799 the other must specify a fixed number of self-promoting arg types.
2f6e4e97 800 Otherwise, if one type specifies only the number of arguments,
400fbf9f
JW
801 the other must specify that number of self-promoting arg types.
802 Otherwise, the argument types must match. */
803
804static int
d1bd0ded 805function_types_compatible_p (tree f1, tree f2, int flags)
400fbf9f
JW
806{
807 tree args1, args2;
808 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
809 int val = 1;
810 int val1;
a6fdc086
GK
811 tree ret1, ret2;
812
813 ret1 = TREE_TYPE (f1);
814 ret2 = TREE_TYPE (f2);
815
816 /* 'volatile' qualifiers on a function's return type mean the function
817 is noreturn. */
818 if (pedantic && TYPE_VOLATILE (ret1) != TYPE_VOLATILE (ret2))
819 pedwarn ("function return types not compatible due to `volatile'");
820 if (TYPE_VOLATILE (ret1))
821 ret1 = build_qualified_type (TYPE_MAIN_VARIANT (ret1),
822 TYPE_QUALS (ret1) & ~TYPE_QUAL_VOLATILE);
823 if (TYPE_VOLATILE (ret2))
824 ret2 = build_qualified_type (TYPE_MAIN_VARIANT (ret2),
825 TYPE_QUALS (ret2) & ~TYPE_QUAL_VOLATILE);
d1bd0ded 826 val = comptypes (ret1, ret2, flags);
a6fdc086 827 if (val == 0)
400fbf9f
JW
828 return 0;
829
830 args1 = TYPE_ARG_TYPES (f1);
831 args2 = TYPE_ARG_TYPES (f2);
832
833 /* An unspecified parmlist matches any specified parmlist
834 whose argument types don't need default promotions. */
835
836 if (args1 == 0)
837 {
838 if (!self_promoting_args_p (args2))
839 return 0;
840 /* If one of these types comes from a non-prototype fn definition,
841 compare that with the other type's arglist.
842 If they don't match, ask for a warning (but no error). */
843 if (TYPE_ACTUAL_ARG_TYPES (f1)
d1bd0ded
GK
844 && 1 != type_lists_compatible_p (args2, TYPE_ACTUAL_ARG_TYPES (f1),
845 flags))
400fbf9f
JW
846 val = 2;
847 return val;
848 }
849 if (args2 == 0)
850 {
851 if (!self_promoting_args_p (args1))
852 return 0;
853 if (TYPE_ACTUAL_ARG_TYPES (f2)
d1bd0ded
GK
854 && 1 != type_lists_compatible_p (args1, TYPE_ACTUAL_ARG_TYPES (f2),
855 flags))
400fbf9f
JW
856 val = 2;
857 return val;
858 }
859
860 /* Both types have argument lists: compare them and propagate results. */
d1bd0ded 861 val1 = type_lists_compatible_p (args1, args2, flags);
400fbf9f
JW
862 return val1 != 1 ? val1 : val;
863}
864
865/* Check two lists of types for compatibility,
866 returning 0 for incompatible, 1 for compatible,
867 or 2 for compatible with warning. */
868
869static int
d1bd0ded 870type_lists_compatible_p (tree args1, tree args2, int flags)
400fbf9f
JW
871{
872 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
873 int val = 1;
9d5f3e49 874 int newval = 0;
400fbf9f
JW
875
876 while (1)
877 {
878 if (args1 == 0 && args2 == 0)
879 return val;
880 /* If one list is shorter than the other,
881 they fail to match. */
882 if (args1 == 0 || args2 == 0)
883 return 0;
884 /* A null pointer instead of a type
885 means there is supposed to be an argument
886 but nothing is specified about what type it has.
887 So match anything that self-promotes. */
888 if (TREE_VALUE (args1) == 0)
889 {
ab393bf1 890 if (c_type_promotes_to (TREE_VALUE (args2)) != TREE_VALUE (args2))
400fbf9f
JW
891 return 0;
892 }
893 else if (TREE_VALUE (args2) == 0)
894 {
ab393bf1 895 if (c_type_promotes_to (TREE_VALUE (args1)) != TREE_VALUE (args1))
400fbf9f
JW
896 return 0;
897 }
8f5b6d29
SB
898 /* If one of the lists has an error marker, ignore this arg. */
899 else if (TREE_CODE (TREE_VALUE (args1)) == ERROR_MARK
900 || TREE_CODE (TREE_VALUE (args2)) == ERROR_MARK)
901 ;
2f6e4e97 902 else if (! (newval = comptypes (TYPE_MAIN_VARIANT (TREE_VALUE (args1)),
d1bd0ded
GK
903 TYPE_MAIN_VARIANT (TREE_VALUE (args2)),
904 flags)))
400fbf9f
JW
905 {
906 /* Allow wait (union {union wait *u; int *i} *)
907 and wait (union wait *) to be compatible. */
908 if (TREE_CODE (TREE_VALUE (args1)) == UNION_TYPE
ea3373cd
RK
909 && (TYPE_NAME (TREE_VALUE (args1)) == 0
910 || TYPE_TRANSPARENT_UNION (TREE_VALUE (args1)))
400fbf9f
JW
911 && TREE_CODE (TYPE_SIZE (TREE_VALUE (args1))) == INTEGER_CST
912 && tree_int_cst_equal (TYPE_SIZE (TREE_VALUE (args1)),
913 TYPE_SIZE (TREE_VALUE (args2))))
914 {
915 tree memb;
916 for (memb = TYPE_FIELDS (TREE_VALUE (args1));
917 memb; memb = TREE_CHAIN (memb))
d1bd0ded
GK
918 if (comptypes (TREE_TYPE (memb), TREE_VALUE (args2),
919 flags))
400fbf9f
JW
920 break;
921 if (memb == 0)
922 return 0;
923 }
924 else if (TREE_CODE (TREE_VALUE (args2)) == UNION_TYPE
ea3373cd
RK
925 && (TYPE_NAME (TREE_VALUE (args2)) == 0
926 || TYPE_TRANSPARENT_UNION (TREE_VALUE (args2)))
400fbf9f
JW
927 && TREE_CODE (TYPE_SIZE (TREE_VALUE (args2))) == INTEGER_CST
928 && tree_int_cst_equal (TYPE_SIZE (TREE_VALUE (args2)),
929 TYPE_SIZE (TREE_VALUE (args1))))
930 {
931 tree memb;
932 for (memb = TYPE_FIELDS (TREE_VALUE (args2));
933 memb; memb = TREE_CHAIN (memb))
d1bd0ded
GK
934 if (comptypes (TREE_TYPE (memb), TREE_VALUE (args1),
935 flags))
400fbf9f
JW
936 break;
937 if (memb == 0)
938 return 0;
939 }
940 else
941 return 0;
942 }
943
944 /* comptypes said ok, but record if it said to warn. */
945 if (newval > val)
946 val = newval;
947
948 args1 = TREE_CHAIN (args1);
949 args2 = TREE_CHAIN (args2);
950 }
951}
400fbf9f 952\f
400fbf9f
JW
953/* Compute the size to increment a pointer by. */
954
955tree
2f6e4e97 956c_size_in_bytes (tree type)
400fbf9f
JW
957{
958 enum tree_code code = TREE_CODE (type);
959
fed3cef0
RK
960 if (code == FUNCTION_TYPE || code == VOID_TYPE || code == ERROR_MARK)
961 return size_one_node;
962
d0f062fb 963 if (!COMPLETE_OR_VOID_TYPE_P (type))
400fbf9f
JW
964 {
965 error ("arithmetic on pointer to an incomplete type");
fed3cef0 966 return size_one_node;
400fbf9f
JW
967 }
968
969 /* Convert in case a char is more than one unit. */
fed3cef0
RK
970 return size_binop (CEIL_DIV_EXPR, TYPE_SIZE_UNIT (type),
971 size_int (TYPE_PRECISION (char_type_node)
972 / BITS_PER_UNIT));
400fbf9f 973}
400fbf9f 974\f
400fbf9f
JW
975/* Return either DECL or its known constant value (if it has one). */
976
56cb9733 977tree
2f6e4e97 978decl_constant_value (tree decl)
400fbf9f 979{
a7c1916a 980 if (/* Don't change a variable array bound or initial value to a constant
400fbf9f 981 in a place where a variable is invalid. */
a7c1916a 982 current_function_decl != 0
400fbf9f 983 && ! TREE_THIS_VOLATILE (decl)
83bab8db 984 && TREE_READONLY (decl)
400fbf9f
JW
985 && DECL_INITIAL (decl) != 0
986 && TREE_CODE (DECL_INITIAL (decl)) != ERROR_MARK
987 /* This is invalid if initial value is not constant.
988 If it has either a function call, a memory reference,
989 or a variable, then re-evaluating it could give different results. */
990 && TREE_CONSTANT (DECL_INITIAL (decl))
991 /* Check for cases where this is sub-optimal, even though valid. */
2f74f7e9 992 && TREE_CODE (DECL_INITIAL (decl)) != CONSTRUCTOR)
400fbf9f
JW
993 return DECL_INITIAL (decl);
994 return decl;
995}
996
2f74f7e9
JM
997/* Return either DECL or its known constant value (if it has one), but
998 return DECL if pedantic or DECL has mode BLKmode. This is for
999 bug-compatibility with the old behavior of decl_constant_value
1000 (before GCC 3.0); every use of this function is a bug and it should
1001 be removed before GCC 3.1. It is not appropriate to use pedantic
1002 in a way that affects optimization, and BLKmode is probably not the
1003 right test for avoiding misoptimizations either. */
1004
1005static tree
2f6e4e97 1006decl_constant_value_for_broken_optimization (tree decl)
2f74f7e9
JM
1007{
1008 if (pedantic || DECL_MODE (decl) == BLKmode)
1009 return decl;
1010 else
1011 return decl_constant_value (decl);
1012}
1013
207bf485
JM
1014
1015/* Perform the default conversion of arrays and functions to pointers.
1016 Return the result of converting EXP. For any other expression, just
1017 return EXP. */
1018
1019static tree
2f6e4e97 1020default_function_array_conversion (tree exp)
207bf485
JM
1021{
1022 tree orig_exp;
1023 tree type = TREE_TYPE (exp);
1024 enum tree_code code = TREE_CODE (type);
1025 int not_lvalue = 0;
1026
1027 /* Strip NON_LVALUE_EXPRs and no-op conversions, since we aren't using as
2f6e4e97 1028 an lvalue.
207bf485
JM
1029
1030 Do not use STRIP_NOPS here! It will remove conversions from pointer
1031 to integer and cause infinite recursion. */
1032 orig_exp = exp;
1033 while (TREE_CODE (exp) == NON_LVALUE_EXPR
1034 || (TREE_CODE (exp) == NOP_EXPR
1035 && TREE_TYPE (TREE_OPERAND (exp, 0)) == TREE_TYPE (exp)))
1036 {
1037 if (TREE_CODE (exp) == NON_LVALUE_EXPR)
1038 not_lvalue = 1;
1039 exp = TREE_OPERAND (exp, 0);
1040 }
1041
1042 /* Preserve the original expression code. */
1043 if (IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (TREE_CODE (exp))))
1044 C_SET_EXP_ORIGINAL_CODE (exp, C_EXP_ORIGINAL_CODE (orig_exp));
1045
1046 if (code == FUNCTION_TYPE)
1047 {
1048 return build_unary_op (ADDR_EXPR, exp, 0);
1049 }
1050 if (code == ARRAY_TYPE)
1051 {
1052 tree adr;
1053 tree restype = TREE_TYPE (type);
1054 tree ptrtype;
1055 int constp = 0;
1056 int volatilep = 0;
1057 int lvalue_array_p;
1058
1059 if (TREE_CODE_CLASS (TREE_CODE (exp)) == 'r' || DECL_P (exp))
1060 {
1061 constp = TREE_READONLY (exp);
1062 volatilep = TREE_THIS_VOLATILE (exp);
1063 }
1064
1065 if (TYPE_QUALS (type) || constp || volatilep)
2f6e4e97 1066 restype
207bf485 1067 = c_build_qualified_type (restype,
2f6e4e97 1068 TYPE_QUALS (type)
207bf485
JM
1069 | (constp * TYPE_QUAL_CONST)
1070 | (volatilep * TYPE_QUAL_VOLATILE));
1071
1072 if (TREE_CODE (exp) == INDIRECT_REF)
1073 return convert (TYPE_POINTER_TO (restype),
1074 TREE_OPERAND (exp, 0));
1075
1076 if (TREE_CODE (exp) == COMPOUND_EXPR)
1077 {
1078 tree op1 = default_conversion (TREE_OPERAND (exp, 1));
1079 return build (COMPOUND_EXPR, TREE_TYPE (op1),
1080 TREE_OPERAND (exp, 0), op1);
1081 }
1082
1083 lvalue_array_p = !not_lvalue && lvalue_p (exp);
db3acfa5 1084 if (!flag_isoc99 && !lvalue_array_p)
207bf485
JM
1085 {
1086 /* Before C99, non-lvalue arrays do not decay to pointers.
1087 Normally, using such an array would be invalid; but it can
1088 be used correctly inside sizeof or as a statement expression.
1089 Thus, do not give an error here; an error will result later. */
1090 return exp;
1091 }
1092
1093 ptrtype = build_pointer_type (restype);
1094
1095 if (TREE_CODE (exp) == VAR_DECL)
1096 {
1097 /* ??? This is not really quite correct
1098 in that the type of the operand of ADDR_EXPR
1099 is not the target type of the type of the ADDR_EXPR itself.
1100 Question is, can this lossage be avoided? */
1101 adr = build1 (ADDR_EXPR, ptrtype, exp);
dffd7eb6 1102 if (!c_mark_addressable (exp))
207bf485
JM
1103 return error_mark_node;
1104 TREE_CONSTANT (adr) = staticp (exp);
1105 TREE_SIDE_EFFECTS (adr) = 0; /* Default would be, same as EXP. */
1106 return adr;
1107 }
1108 /* This way is better for a COMPONENT_REF since it can
1109 simplify the offset for a component. */
1110 adr = build_unary_op (ADDR_EXPR, exp, 1);
1111 return convert (ptrtype, adr);
1112 }
1113 return exp;
1114}
1115
400fbf9f
JW
1116/* Perform default promotions for C data used in expressions.
1117 Arrays and functions are converted to pointers;
1118 enumeral types or short or char, to int.
1119 In addition, manifest constants symbols are replaced by their values. */
1120
1121tree
2f6e4e97 1122default_conversion (tree exp)
400fbf9f 1123{
157689c6 1124 tree orig_exp;
b3694847
SS
1125 tree type = TREE_TYPE (exp);
1126 enum tree_code code = TREE_CODE (type);
400fbf9f 1127
207bf485
JM
1128 if (code == FUNCTION_TYPE || code == ARRAY_TYPE)
1129 return default_function_array_conversion (exp);
1130
400fbf9f
JW
1131 /* Constants can be used directly unless they're not loadable. */
1132 if (TREE_CODE (exp) == CONST_DECL)
1133 exp = DECL_INITIAL (exp);
d4424a75
RK
1134
1135 /* Replace a nonvolatile const static variable with its value unless
1136 it is an array, in which case we must be sure that taking the
1137 address of the array produces consistent results. */
1138 else if (optimize && TREE_CODE (exp) == VAR_DECL && code != ARRAY_TYPE)
400fbf9f 1139 {
2f74f7e9 1140 exp = decl_constant_value_for_broken_optimization (exp);
400fbf9f
JW
1141 type = TREE_TYPE (exp);
1142 }
1143
a7d53fce 1144 /* Strip NON_LVALUE_EXPRs and no-op conversions, since we aren't using as
2f6e4e97 1145 an lvalue.
05bccae2
RK
1146
1147 Do not use STRIP_NOPS here! It will remove conversions from pointer
a7d53fce 1148 to integer and cause infinite recursion. */
157689c6 1149 orig_exp = exp;
a7d53fce
RS
1150 while (TREE_CODE (exp) == NON_LVALUE_EXPR
1151 || (TREE_CODE (exp) == NOP_EXPR
1152 && TREE_TYPE (TREE_OPERAND (exp, 0)) == TREE_TYPE (exp)))
1153 exp = TREE_OPERAND (exp, 0);
400fbf9f 1154
157689c6
NB
1155 /* Preserve the original expression code. */
1156 if (IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (TREE_CODE (exp))))
1157 C_SET_EXP_ORIGINAL_CODE (exp, C_EXP_ORIGINAL_CODE (orig_exp));
1158
400fbf9f
JW
1159 /* Normally convert enums to int,
1160 but convert wide enums to something wider. */
1161 if (code == ENUMERAL_TYPE)
1162 {
b0c48229
NB
1163 type = c_common_type_for_size (MAX (TYPE_PRECISION (type),
1164 TYPE_PRECISION (integer_type_node)),
1165 ((TYPE_PRECISION (type)
1166 >= TYPE_PRECISION (integer_type_node))
1167 && TREE_UNSIGNED (type)));
05bccae2 1168
400fbf9f
JW
1169 return convert (type, exp);
1170 }
1171
9753f113 1172 if (TREE_CODE (exp) == COMPONENT_REF
05bccae2 1173 && DECL_C_BIT_FIELD (TREE_OPERAND (exp, 1))
cff9c407 1174 /* If it's thinner than an int, promote it like a
d72040f5 1175 c_promoting_integer_type_p, otherwise leave it alone. */
05bccae2
RK
1176 && 0 > compare_tree_int (DECL_SIZE (TREE_OPERAND (exp, 1)),
1177 TYPE_PRECISION (integer_type_node)))
f458d1d5 1178 return convert (integer_type_node, exp);
9753f113 1179
d72040f5 1180 if (c_promoting_integer_type_p (type))
400fbf9f 1181 {
f458d1d5 1182 /* Preserve unsignedness if not really getting any wider. */
e83d45c4 1183 if (TREE_UNSIGNED (type)
f458d1d5 1184 && TYPE_PRECISION (type) == TYPE_PRECISION (integer_type_node))
400fbf9f 1185 return convert (unsigned_type_node, exp);
05bccae2 1186
400fbf9f
JW
1187 return convert (integer_type_node, exp);
1188 }
05bccae2 1189
400fbf9f
JW
1190 if (code == VOID_TYPE)
1191 {
1192 error ("void value not ignored as it ought to be");
1193 return error_mark_node;
1194 }
400fbf9f
JW
1195 return exp;
1196}
1197\f
e9b2c823
NB
1198/* Look up COMPONENT in a structure or union DECL.
1199
1200 If the component name is not found, returns NULL_TREE. Otherwise,
1201 the return value is a TREE_LIST, with each TREE_VALUE a FIELD_DECL
1202 stepping down the chain to the component, which is in the last
1203 TREE_VALUE of the list. Normally the list is of length one, but if
1204 the component is embedded within (nested) anonymous structures or
1205 unions, the list steps down the chain to the component. */
2f6e4e97 1206
2f2d13da 1207static tree
2f6e4e97 1208lookup_field (tree decl, tree component)
2f2d13da 1209{
e9b2c823 1210 tree type = TREE_TYPE (decl);
2f2d13da
DE
1211 tree field;
1212
1213 /* If TYPE_LANG_SPECIFIC is set, then it is a sorted array of pointers
1214 to the field elements. Use a binary search on this array to quickly
1215 find the element. Otherwise, do a linear search. TYPE_LANG_SPECIFIC
1216 will always be set for structures which have many elements. */
1217
1218 if (TYPE_LANG_SPECIFIC (type))
1219 {
1220 int bot, top, half;
d07605f5 1221 tree *field_array = &TYPE_LANG_SPECIFIC (type)->s->elts[0];
2f2d13da
DE
1222
1223 field = TYPE_FIELDS (type);
1224 bot = 0;
d07605f5 1225 top = TYPE_LANG_SPECIFIC (type)->s->len;
2f2d13da
DE
1226 while (top - bot > 1)
1227 {
2f2d13da
DE
1228 half = (top - bot + 1) >> 1;
1229 field = field_array[bot+half];
1230
1231 if (DECL_NAME (field) == NULL_TREE)
1232 {
1233 /* Step through all anon unions in linear fashion. */
1234 while (DECL_NAME (field_array[bot]) == NULL_TREE)
1235 {
2f2d13da 1236 field = field_array[bot++];
a68b98cf
RK
1237 if (TREE_CODE (TREE_TYPE (field)) == RECORD_TYPE
1238 || TREE_CODE (TREE_TYPE (field)) == UNION_TYPE)
19d76e60 1239 {
e9b2c823
NB
1240 tree anon = lookup_field (field, component);
1241
1242 if (anon)
1243 return tree_cons (NULL_TREE, field, anon);
2f6e4e97 1244 }
2f2d13da
DE
1245 }
1246
1247 /* Entire record is only anon unions. */
1248 if (bot > top)
1249 return NULL_TREE;
1250
1251 /* Restart the binary search, with new lower bound. */
1252 continue;
1253 }
1254
e8b87aac 1255 if (DECL_NAME (field) == component)
2f2d13da 1256 break;
e8b87aac 1257 if (DECL_NAME (field) < component)
2f2d13da
DE
1258 bot += half;
1259 else
1260 top = bot + half;
1261 }
1262
1263 if (DECL_NAME (field_array[bot]) == component)
1264 field = field_array[bot];
1265 else if (DECL_NAME (field) != component)
e9b2c823 1266 return NULL_TREE;
2f2d13da
DE
1267 }
1268 else
1269 {
1270 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
1271 {
e9b2c823
NB
1272 if (DECL_NAME (field) == NULL_TREE
1273 && (TREE_CODE (TREE_TYPE (field)) == RECORD_TYPE
1274 || TREE_CODE (TREE_TYPE (field)) == UNION_TYPE))
2f2d13da 1275 {
e9b2c823 1276 tree anon = lookup_field (field, component);
a68b98cf 1277
e9b2c823
NB
1278 if (anon)
1279 return tree_cons (NULL_TREE, field, anon);
2f2d13da
DE
1280 }
1281
1282 if (DECL_NAME (field) == component)
1283 break;
1284 }
e9b2c823
NB
1285
1286 if (field == NULL_TREE)
1287 return NULL_TREE;
2f2d13da
DE
1288 }
1289
e9b2c823 1290 return tree_cons (NULL_TREE, field, NULL_TREE);
2f2d13da
DE
1291}
1292
400fbf9f
JW
1293/* Make an expression to refer to the COMPONENT field of
1294 structure or union value DATUM. COMPONENT is an IDENTIFIER_NODE. */
1295
1296tree
2f6e4e97 1297build_component_ref (tree datum, tree component)
400fbf9f 1298{
b3694847
SS
1299 tree type = TREE_TYPE (datum);
1300 enum tree_code code = TREE_CODE (type);
1301 tree field = NULL;
1302 tree ref;
400fbf9f 1303
207bf485
JM
1304 /* If DATUM is a COMPOUND_EXPR, move our reference inside it.
1305 If pedantic ensure that the arguments are not lvalues; otherwise,
1306 if the component is an array, it would wrongly decay to a pointer in
1307 C89 mode.
1308 We cannot do this with a COND_EXPR, because in a conditional expression
1309 the default promotions are applied to both sides, and this would yield
1310 the wrong type of the result; for example, if the components have
1311 type "char". */
400fbf9f
JW
1312 switch (TREE_CODE (datum))
1313 {
1314 case COMPOUND_EXPR:
1315 {
1316 tree value = build_component_ref (TREE_OPERAND (datum, 1), component);
400fbf9f 1317 return build (COMPOUND_EXPR, TREE_TYPE (value),
207bf485 1318 TREE_OPERAND (datum, 0), pedantic_non_lvalue (value));
400fbf9f 1319 }
e9a25f70
JL
1320 default:
1321 break;
400fbf9f
JW
1322 }
1323
1324 /* See if there is a field or component with name COMPONENT. */
1325
1326 if (code == RECORD_TYPE || code == UNION_TYPE)
1327 {
d0f062fb 1328 if (!COMPLETE_TYPE_P (type))
400fbf9f 1329 {
7a228918 1330 c_incomplete_type_error (NULL_TREE, type);
400fbf9f
JW
1331 return error_mark_node;
1332 }
1333
e9b2c823 1334 field = lookup_field (datum, component);
400fbf9f
JW
1335
1336 if (!field)
1337 {
913d0833
KG
1338 error ("%s has no member named `%s'",
1339 code == RECORD_TYPE ? "structure" : "union",
400fbf9f
JW
1340 IDENTIFIER_POINTER (component));
1341 return error_mark_node;
1342 }
400fbf9f 1343
e9b2c823
NB
1344 /* Chain the COMPONENT_REFs if necessary down to the FIELD.
1345 This might be better solved in future the way the C++ front
1346 end does it - by giving the anonymous entities each a
1347 separate name and type, and then have build_component_ref
1348 recursively call itself. We can't do that here. */
46ea50cb 1349 do
19d76e60 1350 {
e9b2c823
NB
1351 tree subdatum = TREE_VALUE (field);
1352
1353 if (TREE_TYPE (subdatum) == error_mark_node)
1354 return error_mark_node;
1355
1356 ref = build (COMPONENT_REF, TREE_TYPE (subdatum), datum, subdatum);
1357 if (TREE_READONLY (datum) || TREE_READONLY (subdatum))
19d76e60 1358 TREE_READONLY (ref) = 1;
e9b2c823 1359 if (TREE_THIS_VOLATILE (datum) || TREE_THIS_VOLATILE (subdatum))
19d76e60 1360 TREE_THIS_VOLATILE (ref) = 1;
e23bd218
IR
1361
1362 if (TREE_DEPRECATED (subdatum))
1363 warn_deprecated_use (subdatum);
1364
19d76e60 1365 datum = ref;
46ea50cb
RS
1366
1367 field = TREE_CHAIN (field);
19d76e60 1368 }
46ea50cb 1369 while (field);
19d76e60 1370
400fbf9f
JW
1371 return ref;
1372 }
1373 else if (code != ERROR_MARK)
1374 error ("request for member `%s' in something not a structure or union",
1375 IDENTIFIER_POINTER (component));
1376
1377 return error_mark_node;
1378}
1379\f
1380/* Given an expression PTR for a pointer, return an expression
1381 for the value pointed to.
1382 ERRORSTRING is the name of the operator to appear in error messages. */
1383
1384tree
2f6e4e97 1385build_indirect_ref (tree ptr, const char *errorstring)
400fbf9f 1386{
b3694847
SS
1387 tree pointer = default_conversion (ptr);
1388 tree type = TREE_TYPE (pointer);
400fbf9f
JW
1389
1390 if (TREE_CODE (type) == POINTER_TYPE)
870cc33b
RS
1391 {
1392 if (TREE_CODE (pointer) == ADDR_EXPR
870cc33b
RS
1393 && (TREE_TYPE (TREE_OPERAND (pointer, 0))
1394 == TREE_TYPE (type)))
1395 return TREE_OPERAND (pointer, 0);
1396 else
1397 {
1398 tree t = TREE_TYPE (type);
b3694847 1399 tree ref = build1 (INDIRECT_REF, TYPE_MAIN_VARIANT (t), pointer);
400fbf9f 1400
baae9b65 1401 if (!COMPLETE_OR_VOID_TYPE_P (t) && TREE_CODE (t) != ARRAY_TYPE)
870cc33b
RS
1402 {
1403 error ("dereferencing pointer to incomplete type");
1404 return error_mark_node;
1405 }
baae9b65 1406 if (VOID_TYPE_P (t) && skip_evaluation == 0)
870cc33b
RS
1407 warning ("dereferencing `void *' pointer");
1408
1409 /* We *must* set TREE_READONLY when dereferencing a pointer to const,
1410 so that we get the proper error message if the result is used
1411 to assign to. Also, &* is supposed to be a no-op.
1412 And ANSI C seems to specify that the type of the result
1413 should be the const type. */
1414 /* A de-reference of a pointer to const is not a const. It is valid
1415 to change it via some other pointer. */
1416 TREE_READONLY (ref) = TYPE_READONLY (t);
1417 TREE_SIDE_EFFECTS (ref)
271bd540 1418 = TYPE_VOLATILE (t) || TREE_SIDE_EFFECTS (pointer);
493692cd 1419 TREE_THIS_VOLATILE (ref) = TYPE_VOLATILE (t);
870cc33b
RS
1420 return ref;
1421 }
1422 }
400fbf9f
JW
1423 else if (TREE_CODE (pointer) != ERROR_MARK)
1424 error ("invalid type argument of `%s'", errorstring);
1425 return error_mark_node;
1426}
1427
1428/* This handles expressions of the form "a[i]", which denotes
1429 an array reference.
1430
1431 This is logically equivalent in C to *(a+i), but we may do it differently.
1432 If A is a variable or a member, we generate a primitive ARRAY_REF.
1433 This avoids forcing the array out of registers, and can work on
1434 arrays that are not lvalues (for example, members of structures returned
1435 by functions). */
1436
1437tree
2f6e4e97 1438build_array_ref (tree array, tree index)
400fbf9f
JW
1439{
1440 if (index == 0)
1441 {
1442 error ("subscript missing in array reference");
1443 return error_mark_node;
1444 }
1445
1446 if (TREE_TYPE (array) == error_mark_node
1447 || TREE_TYPE (index) == error_mark_node)
1448 return error_mark_node;
1449
1450 if (TREE_CODE (TREE_TYPE (array)) == ARRAY_TYPE
1451 && TREE_CODE (array) != INDIRECT_REF)
1452 {
1453 tree rval, type;
1454
400fbf9f
JW
1455 /* Subscripting with type char is likely to lose
1456 on a machine where chars are signed.
1457 So warn on any machine, but optionally.
1458 Don't warn for unsigned char since that type is safe.
1459 Don't warn for signed char because anyone who uses that
1460 must have done so deliberately. */
1461 if (warn_char_subscripts
1462 && TYPE_MAIN_VARIANT (TREE_TYPE (index)) == char_type_node)
1463 warning ("array subscript has type `char'");
1464
0e51ef9b
RS
1465 /* Apply default promotions *after* noticing character types. */
1466 index = default_conversion (index);
1467
fdeefd49
RS
1468 /* Require integer *after* promotion, for sake of enums. */
1469 if (TREE_CODE (TREE_TYPE (index)) != INTEGER_TYPE)
1470 {
1471 error ("array subscript is not an integer");
1472 return error_mark_node;
1473 }
1474
400fbf9f
JW
1475 /* An array that is indexed by a non-constant
1476 cannot be stored in a register; we must be able to do
1477 address arithmetic on its address.
1478 Likewise an array of elements of variable size. */
1479 if (TREE_CODE (index) != INTEGER_CST
d0f062fb 1480 || (COMPLETE_TYPE_P (TREE_TYPE (TREE_TYPE (array)))
400fbf9f
JW
1481 && TREE_CODE (TYPE_SIZE (TREE_TYPE (TREE_TYPE (array)))) != INTEGER_CST))
1482 {
dffd7eb6 1483 if (!c_mark_addressable (array))
400fbf9f
JW
1484 return error_mark_node;
1485 }
e6d52559
JW
1486 /* An array that is indexed by a constant value which is not within
1487 the array bounds cannot be stored in a register either; because we
1488 would get a crash in store_bit_field/extract_bit_field when trying
1489 to access a non-existent part of the register. */
1490 if (TREE_CODE (index) == INTEGER_CST
1491 && TYPE_VALUES (TREE_TYPE (array))
1492 && ! int_fits_type_p (index, TYPE_VALUES (TREE_TYPE (array))))
1493 {
dffd7eb6 1494 if (!c_mark_addressable (array))
e6d52559
JW
1495 return error_mark_node;
1496 }
400fbf9f 1497
400fbf9f
JW
1498 if (pedantic)
1499 {
1500 tree foo = array;
1501 while (TREE_CODE (foo) == COMPONENT_REF)
1502 foo = TREE_OPERAND (foo, 0);
1394aabd 1503 if (TREE_CODE (foo) == VAR_DECL && DECL_REGISTER (foo))
05273f08
GK
1504 pedwarn ("ISO C forbids subscripting `register' array");
1505 else if (! flag_isoc99 && ! lvalue_p (foo))
56508306 1506 pedwarn ("ISO C90 forbids subscripting non-lvalue array");
400fbf9f
JW
1507 }
1508
1509 type = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (array)));
1510 rval = build (ARRAY_REF, type, array, index);
1511 /* Array ref is const/volatile if the array elements are
1512 or if the array is. */
1513 TREE_READONLY (rval)
1514 |= (TYPE_READONLY (TREE_TYPE (TREE_TYPE (array)))
1515 | TREE_READONLY (array));
1516 TREE_SIDE_EFFECTS (rval)
1517 |= (TYPE_VOLATILE (TREE_TYPE (TREE_TYPE (array)))
1518 | TREE_SIDE_EFFECTS (array));
1519 TREE_THIS_VOLATILE (rval)
1520 |= (TYPE_VOLATILE (TREE_TYPE (TREE_TYPE (array)))
1521 /* This was added by rms on 16 Nov 91.
2f6e4e97 1522 It fixes vol struct foo *a; a->elts[1]
400fbf9f
JW
1523 in an inline function.
1524 Hope it doesn't break something else. */
1525 | TREE_THIS_VOLATILE (array));
1526 return require_complete_type (fold (rval));
1527 }
1528
1529 {
1530 tree ar = default_conversion (array);
1531 tree ind = default_conversion (index);
1532
aed11452
RK
1533 /* Do the same warning check as above, but only on the part that's
1534 syntactically the index and only if it is also semantically
1535 the index. */
1536 if (warn_char_subscripts
1537 && TREE_CODE (TREE_TYPE (index)) == INTEGER_TYPE
1538 && TYPE_MAIN_VARIANT (TREE_TYPE (index)) == char_type_node)
1539 warning ("subscript has type `char'");
1540
400fbf9f
JW
1541 /* Put the integer in IND to simplify error checking. */
1542 if (TREE_CODE (TREE_TYPE (ar)) == INTEGER_TYPE)
1543 {
1544 tree temp = ar;
1545 ar = ind;
1546 ind = temp;
1547 }
1548
1549 if (ar == error_mark_node)
1550 return ar;
1551
004252d7
RK
1552 if (TREE_CODE (TREE_TYPE (ar)) != POINTER_TYPE
1553 || TREE_CODE (TREE_TYPE (TREE_TYPE (ar))) == FUNCTION_TYPE)
400fbf9f
JW
1554 {
1555 error ("subscripted value is neither array nor pointer");
1556 return error_mark_node;
1557 }
1558 if (TREE_CODE (TREE_TYPE (ind)) != INTEGER_TYPE)
1559 {
1560 error ("array subscript is not an integer");
1561 return error_mark_node;
1562 }
1563
1564 return build_indirect_ref (build_binary_op (PLUS_EXPR, ar, ind, 0),
1565 "array indexing");
1566 }
1567}
1568\f
7e585d16
ZW
1569/* Build an external reference to identifier ID. FUN indicates
1570 whether this will be used for a function call. */
1571tree
2f6e4e97 1572build_external_ref (tree id, int fun)
7e585d16
ZW
1573{
1574 tree ref;
1575 tree decl = lookup_name (id);
1576 tree objc_ivar = lookup_objc_ivar (id);
1577
339a28b9 1578 if (decl && decl != error_mark_node)
7e585d16
ZW
1579 {
1580 /* Properly declared variable or function reference. */
1581 if (!objc_ivar)
1582 ref = decl;
4b1e44be 1583 else if (decl != objc_ivar && !DECL_FILE_SCOPE_P (decl))
7e585d16
ZW
1584 {
1585 warning ("local declaration of `%s' hides instance variable",
1586 IDENTIFIER_POINTER (id));
1587 ref = decl;
1588 }
1589 else
1590 ref = objc_ivar;
1591 }
339a28b9
ZW
1592 else if (objc_ivar)
1593 ref = objc_ivar;
1594 else if (fun)
1595 /* Implicit function declaration. */
1596 ref = implicitly_declare (id);
1597 else if (decl == error_mark_node)
1598 /* Don't complain about something that's already been
1599 complained about. */
1600 return error_mark_node;
1601 else
1602 {
1603 undeclared_variable (id);
1604 return error_mark_node;
1605 }
7e585d16
ZW
1606
1607 if (TREE_TYPE (ref) == error_mark_node)
1608 return error_mark_node;
1609
339a28b9
ZW
1610 if (TREE_DEPRECATED (ref))
1611 warn_deprecated_use (ref);
1612
25587e40
AO
1613 if (!skip_evaluation)
1614 assemble_external (ref);
7e585d16
ZW
1615 TREE_USED (ref) = 1;
1616
1617 if (TREE_CODE (ref) == CONST_DECL)
1618 {
1619 ref = DECL_INITIAL (ref);
1620 TREE_CONSTANT (ref) = 1;
1621 }
6a29edea 1622 else if (current_function_decl != 0
4b1e44be 1623 && !DECL_FILE_SCOPE_P (current_function_decl)
6a29edea
EB
1624 && (TREE_CODE (ref) == VAR_DECL
1625 || TREE_CODE (ref) == PARM_DECL
1626 || TREE_CODE (ref) == FUNCTION_DECL))
1627 {
1628 tree context = decl_function_context (ref);
2f6e4e97 1629
6a29edea
EB
1630 if (context != 0 && context != current_function_decl)
1631 DECL_NONLOCAL (ref) = 1;
1632 }
7e585d16
ZW
1633
1634 return ref;
1635}
1636
400fbf9f
JW
1637/* Build a function call to function FUNCTION with parameters PARAMS.
1638 PARAMS is a list--a chain of TREE_LIST nodes--in which the
1639 TREE_VALUE of each node is a parameter-expression.
1640 FUNCTION's data type may be a function type or a pointer-to-function. */
1641
1642tree
2f6e4e97 1643build_function_call (tree function, tree params)
400fbf9f 1644{
b3694847
SS
1645 tree fntype, fundecl = 0;
1646 tree coerced_params;
4977bab6 1647 tree name = NULL_TREE, result;
400fbf9f 1648
fc76e425 1649 /* Strip NON_LVALUE_EXPRs, etc., since we aren't using as an lvalue. */
a7d53fce 1650 STRIP_TYPE_NOPS (function);
400fbf9f
JW
1651
1652 /* Convert anything with function type to a pointer-to-function. */
1653 if (TREE_CODE (function) == FUNCTION_DECL)
1654 {
1655 name = DECL_NAME (function);
19d76e60 1656
400fbf9f
JW
1657 /* Differs from default_conversion by not setting TREE_ADDRESSABLE
1658 (because calling an inline function does not mean the function
1659 needs to be separately compiled). */
1660 fntype = build_type_variant (TREE_TYPE (function),
1661 TREE_READONLY (function),
1662 TREE_THIS_VOLATILE (function));
9b7267b8 1663 fundecl = function;
400fbf9f
JW
1664 function = build1 (ADDR_EXPR, build_pointer_type (fntype), function);
1665 }
1666 else
1667 function = default_conversion (function);
1668
1669 fntype = TREE_TYPE (function);
1670
1671 if (TREE_CODE (fntype) == ERROR_MARK)
1672 return error_mark_node;
1673
1674 if (!(TREE_CODE (fntype) == POINTER_TYPE
1675 && TREE_CODE (TREE_TYPE (fntype)) == FUNCTION_TYPE))
1676 {
1677 error ("called object is not a function");
1678 return error_mark_node;
1679 }
1680
5ce89b2e
JM
1681 if (fundecl && TREE_THIS_VOLATILE (fundecl))
1682 current_function_returns_abnormally = 1;
1683
400fbf9f
JW
1684 /* fntype now gets the type of function pointed to. */
1685 fntype = TREE_TYPE (fntype);
1686
1687 /* Convert the parameters to the types declared in the
1688 function prototype, or apply default promotions. */
1689
1690 coerced_params
9b7267b8 1691 = convert_arguments (TYPE_ARG_TYPES (fntype), params, name, fundecl);
400fbf9f 1692
b34c7881 1693 /* Check that the arguments to the function are valid. */
400fbf9f 1694
b34c7881 1695 check_function_arguments (TYPE_ATTRIBUTES (fntype), coerced_params);
400fbf9f
JW
1696
1697 /* Recognize certain built-in functions so we can make tree-codes
1698 other than CALL_EXPR. We do this when it enables fold-const.c
1699 to do something useful. */
1700
1701 if (TREE_CODE (function) == ADDR_EXPR
1702 && TREE_CODE (TREE_OPERAND (function, 0)) == FUNCTION_DECL
1eb8759b
RH
1703 && DECL_BUILT_IN (TREE_OPERAND (function, 0)))
1704 {
1705 result = expand_tree_builtin (TREE_OPERAND (function, 0),
1706 params, coerced_params);
1707 if (result)
1708 return result;
1709 }
400fbf9f 1710
1eb8759b
RH
1711 result = build (CALL_EXPR, TREE_TYPE (fntype),
1712 function, coerced_params, NULL_TREE);
1eb8759b 1713 TREE_SIDE_EFFECTS (result) = 1;
b0b3afb2
BS
1714 result = fold (result);
1715
71653180 1716 if (VOID_TYPE_P (TREE_TYPE (result)))
1eb8759b
RH
1717 return result;
1718 return require_complete_type (result);
400fbf9f
JW
1719}
1720\f
1721/* Convert the argument expressions in the list VALUES
1722 to the types in the list TYPELIST. The result is a list of converted
1723 argument expressions.
1724
1725 If TYPELIST is exhausted, or when an element has NULL as its type,
1726 perform the default conversions.
1727
1728 PARMLIST is the chain of parm decls for the function being called.
1729 It may be 0, if that info is not available.
1730 It is used only for generating error messages.
1731
1732 NAME is an IDENTIFIER_NODE or 0. It is used only for error messages.
1733
1734 This is also where warnings about wrong number of args are generated.
1735
1736 Both VALUES and the returned value are chains of TREE_LIST nodes
1737 with the elements of the list in the TREE_VALUE slots of those nodes. */
1738
1739static tree
2f6e4e97 1740convert_arguments (tree typelist, tree values, tree name, tree fundecl)
400fbf9f 1741{
b3694847
SS
1742 tree typetail, valtail;
1743 tree result = NULL;
400fbf9f
JW
1744 int parmnum;
1745
1746 /* Scan the given expressions and types, producing individual
1747 converted arguments and pushing them on RESULT in reverse order. */
1748
1749 for (valtail = values, typetail = typelist, parmnum = 0;
1750 valtail;
1751 valtail = TREE_CHAIN (valtail), parmnum++)
1752 {
b3694847
SS
1753 tree type = typetail ? TREE_VALUE (typetail) : 0;
1754 tree val = TREE_VALUE (valtail);
400fbf9f
JW
1755
1756 if (type == void_type_node)
1757 {
1758 if (name)
1759 error ("too many arguments to function `%s'",
1760 IDENTIFIER_POINTER (name));
1761 else
1762 error ("too many arguments to function");
1763 break;
1764 }
1765
1766 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
fc76e425
RS
1767 /* Do not use STRIP_NOPS here! We do not want an enumerator with value 0
1768 to convert automatically to a pointer. */
400fbf9f
JW
1769 if (TREE_CODE (val) == NON_LVALUE_EXPR)
1770 val = TREE_OPERAND (val, 0);
1771
207bf485 1772 val = default_function_array_conversion (val);
400fbf9f
JW
1773
1774 val = require_complete_type (val);
1775
1776 if (type != 0)
1777 {
1778 /* Formal parm type is specified by a function prototype. */
1779 tree parmval;
1780
d0f062fb 1781 if (!COMPLETE_TYPE_P (type))
400fbf9f
JW
1782 {
1783 error ("type of formal parameter %d is incomplete", parmnum + 1);
1784 parmval = val;
1785 }
1786 else
1787 {
d45cf215
RS
1788 /* Optionally warn about conversions that
1789 differ from the default conversions. */
03829ad2 1790 if (warn_conversion || warn_traditional)
400fbf9f
JW
1791 {
1792 int formal_prec = TYPE_PRECISION (type);
400fbf9f 1793
aae43c5f 1794 if (INTEGRAL_TYPE_P (type)
400fbf9f 1795 && TREE_CODE (TREE_TYPE (val)) == REAL_TYPE)
754a4d82 1796 warn_for_assignment ("%s as integer rather than floating due to prototype", (char *) 0, name, parmnum + 1);
03829ad2
KG
1797 if (INTEGRAL_TYPE_P (type)
1798 && TREE_CODE (TREE_TYPE (val)) == COMPLEX_TYPE)
1799 warn_for_assignment ("%s as integer rather than complex due to prototype", (char *) 0, name, parmnum + 1);
aae43c5f
RK
1800 else if (TREE_CODE (type) == COMPLEX_TYPE
1801 && TREE_CODE (TREE_TYPE (val)) == REAL_TYPE)
1802 warn_for_assignment ("%s as complex rather than floating due to prototype", (char *) 0, name, parmnum + 1);
400fbf9f 1803 else if (TREE_CODE (type) == REAL_TYPE
aae43c5f 1804 && INTEGRAL_TYPE_P (TREE_TYPE (val)))
754a4d82 1805 warn_for_assignment ("%s as floating rather than integer due to prototype", (char *) 0, name, parmnum + 1);
03829ad2
KG
1806 else if (TREE_CODE (type) == COMPLEX_TYPE
1807 && INTEGRAL_TYPE_P (TREE_TYPE (val)))
1808 warn_for_assignment ("%s as complex rather than integer due to prototype", (char *) 0, name, parmnum + 1);
aae43c5f
RK
1809 else if (TREE_CODE (type) == REAL_TYPE
1810 && TREE_CODE (TREE_TYPE (val)) == COMPLEX_TYPE)
1811 warn_for_assignment ("%s as floating rather than complex due to prototype", (char *) 0, name, parmnum + 1);
1812 /* ??? At some point, messages should be written about
1813 conversions between complex types, but that's too messy
1814 to do now. */
d45cf215
RS
1815 else if (TREE_CODE (type) == REAL_TYPE
1816 && TREE_CODE (TREE_TYPE (val)) == REAL_TYPE)
1817 {
1818 /* Warn if any argument is passed as `float',
047de90b 1819 since without a prototype it would be `double'. */
d45cf215 1820 if (formal_prec == TYPE_PRECISION (float_type_node))
754a4d82 1821 warn_for_assignment ("%s as `float' rather than `double' due to prototype", (char *) 0, name, parmnum + 1);
d45cf215 1822 }
3ed56f8a
KG
1823 /* Detect integer changing in width or signedness.
1824 These warnings are only activated with
1825 -Wconversion, not with -Wtraditional. */
1826 else if (warn_conversion && INTEGRAL_TYPE_P (type)
aae43c5f 1827 && INTEGRAL_TYPE_P (TREE_TYPE (val)))
400fbf9f 1828 {
d45cf215
RS
1829 tree would_have_been = default_conversion (val);
1830 tree type1 = TREE_TYPE (would_have_been);
1831
754a4d82 1832 if (TREE_CODE (type) == ENUMERAL_TYPE
a38b987a
NB
1833 && (TYPE_MAIN_VARIANT (type)
1834 == TYPE_MAIN_VARIANT (TREE_TYPE (val))))
754a4d82
RS
1835 /* No warning if function asks for enum
1836 and the actual arg is that enum type. */
1837 ;
1838 else if (formal_prec != TYPE_PRECISION (type1))
1839 warn_for_assignment ("%s with different width due to prototype", (char *) 0, name, parmnum + 1);
d45cf215
RS
1840 else if (TREE_UNSIGNED (type) == TREE_UNSIGNED (type1))
1841 ;
800cd3b9
RS
1842 /* Don't complain if the formal parameter type
1843 is an enum, because we can't tell now whether
1844 the value was an enum--even the same enum. */
1845 else if (TREE_CODE (type) == ENUMERAL_TYPE)
1846 ;
400fbf9f
JW
1847 else if (TREE_CODE (val) == INTEGER_CST
1848 && int_fits_type_p (val, type))
1849 /* Change in signedness doesn't matter
1850 if a constant value is unaffected. */
1851 ;
4bbbc5d9
RS
1852 /* Likewise for a constant in a NOP_EXPR. */
1853 else if (TREE_CODE (val) == NOP_EXPR
1854 && TREE_CODE (TREE_OPERAND (val, 0)) == INTEGER_CST
1855 && int_fits_type_p (TREE_OPERAND (val, 0), type))
1856 ;
ce9895ae
RS
1857 /* If the value is extended from a narrower
1858 unsigned type, it doesn't matter whether we
1859 pass it as signed or unsigned; the value
1860 certainly is the same either way. */
1861 else if (TYPE_PRECISION (TREE_TYPE (val)) < TYPE_PRECISION (type)
1862 && TREE_UNSIGNED (TREE_TYPE (val)))
1863 ;
3ed56f8a
KG
1864 else if (TREE_UNSIGNED (type))
1865 warn_for_assignment ("%s as unsigned due to prototype", (char *) 0, name, parmnum + 1);
1866 else
1867 warn_for_assignment ("%s as signed due to prototype", (char *) 0, name, parmnum + 1);
400fbf9f
JW
1868 }
1869 }
1870
2f6e4e97 1871 parmval = convert_for_assignment (type, val,
0f41302f 1872 (char *) 0, /* arg passing */
9b7267b8 1873 fundecl, name, parmnum + 1);
2f6e4e97 1874
61f71b34 1875 if (targetm.calls.promote_prototypes (fundecl ? TREE_TYPE (fundecl) : 0)
b6d6aa84 1876 && INTEGRAL_TYPE_P (type)
400fbf9f
JW
1877 && (TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node)))
1878 parmval = default_conversion (parmval);
400fbf9f 1879 }
8d9bfdc5 1880 result = tree_cons (NULL_TREE, parmval, result);
400fbf9f
JW
1881 }
1882 else if (TREE_CODE (TREE_TYPE (val)) == REAL_TYPE
1883 && (TYPE_PRECISION (TREE_TYPE (val))
1884 < TYPE_PRECISION (double_type_node)))
1885 /* Convert `float' to `double'. */
1886 result = tree_cons (NULL_TREE, convert (double_type_node, val), result);
1887 else
1888 /* Convert `short' and `char' to full-size `int'. */
1889 result = tree_cons (NULL_TREE, default_conversion (val), result);
1890
1891 if (typetail)
1892 typetail = TREE_CHAIN (typetail);
1893 }
1894
1895 if (typetail != 0 && TREE_VALUE (typetail) != void_type_node)
1896 {
1897 if (name)
1898 error ("too few arguments to function `%s'",
1899 IDENTIFIER_POINTER (name));
1900 else
1901 error ("too few arguments to function");
1902 }
1903
1904 return nreverse (result);
1905}
1906\f
1907/* This is the entry point used by the parser
1908 for binary operators in the input.
1909 In addition to constructing the expression,
1910 we check for operands that were written with other binary operators
1911 in a way that is likely to confuse the user. */
edc7c4ec 1912
400fbf9f 1913tree
2f6e4e97 1914parser_build_binary_op (enum tree_code code, tree arg1, tree arg2)
400fbf9f
JW
1915{
1916 tree result = build_binary_op (code, arg1, arg2, 1);
1917
1918 char class;
1919 char class1 = TREE_CODE_CLASS (TREE_CODE (arg1));
1920 char class2 = TREE_CODE_CLASS (TREE_CODE (arg2));
1921 enum tree_code code1 = ERROR_MARK;
1922 enum tree_code code2 = ERROR_MARK;
1923
58bf601b
HPN
1924 if (TREE_CODE (result) == ERROR_MARK)
1925 return error_mark_node;
1926
686deecb 1927 if (IS_EXPR_CODE_CLASS (class1))
400fbf9f 1928 code1 = C_EXP_ORIGINAL_CODE (arg1);
686deecb 1929 if (IS_EXPR_CODE_CLASS (class2))
400fbf9f
JW
1930 code2 = C_EXP_ORIGINAL_CODE (arg2);
1931
1932 /* Check for cases such as x+y<<z which users are likely
1933 to misinterpret. If parens are used, C_EXP_ORIGINAL_CODE
1934 is cleared to prevent these warnings. */
1935 if (warn_parentheses)
1936 {
1937 if (code == LSHIFT_EXPR || code == RSHIFT_EXPR)
1938 {
1939 if (code1 == PLUS_EXPR || code1 == MINUS_EXPR
1940 || code2 == PLUS_EXPR || code2 == MINUS_EXPR)
1941 warning ("suggest parentheses around + or - inside shift");
1942 }
1943
1944 if (code == TRUTH_ORIF_EXPR)
1945 {
1946 if (code1 == TRUTH_ANDIF_EXPR
1947 || code2 == TRUTH_ANDIF_EXPR)
1948 warning ("suggest parentheses around && within ||");
1949 }
1950
1951 if (code == BIT_IOR_EXPR)
1952 {
1953 if (code1 == BIT_AND_EXPR || code1 == BIT_XOR_EXPR
1954 || code1 == PLUS_EXPR || code1 == MINUS_EXPR
1955 || code2 == BIT_AND_EXPR || code2 == BIT_XOR_EXPR
1956 || code2 == PLUS_EXPR || code2 == MINUS_EXPR)
1957 warning ("suggest parentheses around arithmetic in operand of |");
7e9d002a
RK
1958 /* Check cases like x|y==z */
1959 if (TREE_CODE_CLASS (code1) == '<' || TREE_CODE_CLASS (code2) == '<')
1960 warning ("suggest parentheses around comparison in operand of |");
400fbf9f
JW
1961 }
1962
1963 if (code == BIT_XOR_EXPR)
1964 {
1965 if (code1 == BIT_AND_EXPR
1966 || code1 == PLUS_EXPR || code1 == MINUS_EXPR
1967 || code2 == BIT_AND_EXPR
1968 || code2 == PLUS_EXPR || code2 == MINUS_EXPR)
1969 warning ("suggest parentheses around arithmetic in operand of ^");
7e9d002a
RK
1970 /* Check cases like x^y==z */
1971 if (TREE_CODE_CLASS (code1) == '<' || TREE_CODE_CLASS (code2) == '<')
1972 warning ("suggest parentheses around comparison in operand of ^");
400fbf9f
JW
1973 }
1974
1975 if (code == BIT_AND_EXPR)
1976 {
1977 if (code1 == PLUS_EXPR || code1 == MINUS_EXPR
1978 || code2 == PLUS_EXPR || code2 == MINUS_EXPR)
1979 warning ("suggest parentheses around + or - in operand of &");
7e9d002a
RK
1980 /* Check cases like x&y==z */
1981 if (TREE_CODE_CLASS (code1) == '<' || TREE_CODE_CLASS (code2) == '<')
1982 warning ("suggest parentheses around comparison in operand of &");
400fbf9f
JW
1983 }
1984 }
1985
001af587 1986 /* Similarly, check for cases like 1<=i<=10 that are probably errors. */
edc7c4ec 1987 if (TREE_CODE_CLASS (code) == '<' && extra_warnings
001af587
RS
1988 && (TREE_CODE_CLASS (code1) == '<' || TREE_CODE_CLASS (code2) == '<'))
1989 warning ("comparisons like X<=Y<=Z do not have their mathematical meaning");
1990
e58cd767
RS
1991 unsigned_conversion_warning (result, arg1);
1992 unsigned_conversion_warning (result, arg2);
1993 overflow_warning (result);
1994
edc7c4ec
RS
1995 class = TREE_CODE_CLASS (TREE_CODE (result));
1996
400fbf9f
JW
1997 /* Record the code that was specified in the source,
1998 for the sake of warnings about confusing nesting. */
686deecb 1999 if (IS_EXPR_CODE_CLASS (class))
400fbf9f
JW
2000 C_SET_EXP_ORIGINAL_CODE (result, code);
2001 else
2002 {
2003 int flag = TREE_CONSTANT (result);
d11fdb45
RS
2004 /* We used to use NOP_EXPR rather than NON_LVALUE_EXPR
2005 so that convert_for_assignment wouldn't strip it.
2006 That way, we got warnings for things like p = (1 - 1).
2007 But it turns out we should not get those warnings. */
2008 result = build1 (NON_LVALUE_EXPR, TREE_TYPE (result), result);
400fbf9f
JW
2009 C_SET_EXP_ORIGINAL_CODE (result, code);
2010 TREE_CONSTANT (result) = flag;
2011 }
2012
2013 return result;
2014}
3e4093b6 2015\f
400fbf9f 2016
3e4093b6 2017/* Return true if `t' is known to be non-negative. */
400fbf9f 2018
3e4093b6
RS
2019int
2020c_tree_expr_nonnegative_p (tree t)
400fbf9f 2021{
3e4093b6
RS
2022 if (TREE_CODE (t) == STMT_EXPR)
2023 {
2024 t = COMPOUND_BODY (STMT_EXPR_STMT (t));
400fbf9f 2025
3e4093b6
RS
2026 /* Find the last statement in the chain, ignoring the final
2027 * scope statement */
2028 while (TREE_CHAIN (t) != NULL_TREE
2029 && TREE_CODE (TREE_CHAIN (t)) != SCOPE_STMT)
2030 t = TREE_CHAIN (t);
2031 return tree_expr_nonnegative_p (TREE_OPERAND (t, 0));
2032 }
2033 return tree_expr_nonnegative_p (t);
2034}
400fbf9f 2035
3e4093b6
RS
2036/* Return a tree for the difference of pointers OP0 and OP1.
2037 The resulting tree has type int. */
293c9fdd 2038
3e4093b6
RS
2039static tree
2040pointer_diff (tree op0, tree op1)
2041{
2042 tree result, folded;
2043 tree restype = ptrdiff_type_node;
400fbf9f 2044
3e4093b6
RS
2045 tree target_type = TREE_TYPE (TREE_TYPE (op0));
2046 tree con0, con1, lit0, lit1;
2047 tree orig_op1 = op1;
400fbf9f 2048
3e4093b6
RS
2049 if (pedantic || warn_pointer_arith)
2050 {
2051 if (TREE_CODE (target_type) == VOID_TYPE)
2052 pedwarn ("pointer of type `void *' used in subtraction");
2053 if (TREE_CODE (target_type) == FUNCTION_TYPE)
2054 pedwarn ("pointer to a function used in subtraction");
2055 }
400fbf9f 2056
3e4093b6
RS
2057 /* If the conversion to ptrdiff_type does anything like widening or
2058 converting a partial to an integral mode, we get a convert_expression
2059 that is in the way to do any simplifications.
2060 (fold-const.c doesn't know that the extra bits won't be needed.
2061 split_tree uses STRIP_SIGN_NOPS, which leaves conversions to a
2062 different mode in place.)
2063 So first try to find a common term here 'by hand'; we want to cover
2064 at least the cases that occur in legal static initializers. */
2065 con0 = TREE_CODE (op0) == NOP_EXPR ? TREE_OPERAND (op0, 0) : op0;
2066 con1 = TREE_CODE (op1) == NOP_EXPR ? TREE_OPERAND (op1, 0) : op1;
400fbf9f 2067
3e4093b6
RS
2068 if (TREE_CODE (con0) == PLUS_EXPR)
2069 {
2070 lit0 = TREE_OPERAND (con0, 1);
2071 con0 = TREE_OPERAND (con0, 0);
2072 }
2073 else
2074 lit0 = integer_zero_node;
400fbf9f 2075
3e4093b6 2076 if (TREE_CODE (con1) == PLUS_EXPR)
400fbf9f 2077 {
3e4093b6
RS
2078 lit1 = TREE_OPERAND (con1, 1);
2079 con1 = TREE_OPERAND (con1, 0);
400fbf9f
JW
2080 }
2081 else
3e4093b6
RS
2082 lit1 = integer_zero_node;
2083
2084 if (operand_equal_p (con0, con1, 0))
400fbf9f 2085 {
3e4093b6
RS
2086 op0 = lit0;
2087 op1 = lit1;
400fbf9f
JW
2088 }
2089
400fbf9f 2090
3e4093b6
RS
2091 /* First do the subtraction as integers;
2092 then drop through to build the divide operator.
2093 Do not do default conversions on the minus operator
2094 in case restype is a short type. */
400fbf9f 2095
3e4093b6
RS
2096 op0 = build_binary_op (MINUS_EXPR, convert (restype, op0),
2097 convert (restype, op1), 0);
2098 /* This generates an error if op1 is pointer to incomplete type. */
2099 if (!COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (TREE_TYPE (orig_op1))))
2100 error ("arithmetic on pointer to an incomplete type");
400fbf9f 2101
3e4093b6
RS
2102 /* This generates an error if op0 is pointer to incomplete type. */
2103 op1 = c_size_in_bytes (target_type);
400fbf9f 2104
3e4093b6 2105 /* Divide by the size, in easiest possible way. */
400fbf9f 2106
3e4093b6 2107 result = build (EXACT_DIV_EXPR, restype, op0, convert (restype, op1));
400fbf9f 2108
3e4093b6
RS
2109 folded = fold (result);
2110 if (folded == result)
2111 TREE_CONSTANT (folded) = TREE_CONSTANT (op0) & TREE_CONSTANT (op1);
2112 return folded;
2113}
2114\f
2115/* Construct and perhaps optimize a tree representation
2116 for a unary operation. CODE, a tree_code, specifies the operation
2117 and XARG is the operand.
2118 For any CODE other than ADDR_EXPR, FLAG nonzero suppresses
2119 the default promotions (such as from short to int).
2120 For ADDR_EXPR, the default promotions are not applied; FLAG nonzero
2121 allows non-lvalues; this is only used to handle conversion of non-lvalue
2122 arrays to pointers in C99. */
400fbf9f 2123
3e4093b6
RS
2124tree
2125build_unary_op (enum tree_code code, tree xarg, int flag)
2126{
2127 /* No default_conversion here. It causes trouble for ADDR_EXPR. */
2128 tree arg = xarg;
2129 tree argtype = 0;
2130 enum tree_code typecode = TREE_CODE (TREE_TYPE (arg));
2131 tree val;
2132 int noconvert = flag;
400fbf9f 2133
3e4093b6
RS
2134 if (typecode == ERROR_MARK)
2135 return error_mark_node;
2136 if (typecode == ENUMERAL_TYPE || typecode == BOOLEAN_TYPE)
2137 typecode = INTEGER_TYPE;
6c36d76b 2138
3e4093b6
RS
2139 switch (code)
2140 {
2141 case CONVERT_EXPR:
2142 /* This is used for unary plus, because a CONVERT_EXPR
2143 is enough to prevent anybody from looking inside for
2144 associativity, but won't generate any code. */
2145 if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE
2146 || typecode == COMPLEX_TYPE))
400fbf9f 2147 {
3e4093b6
RS
2148 error ("wrong type argument to unary plus");
2149 return error_mark_node;
400fbf9f 2150 }
3e4093b6
RS
2151 else if (!noconvert)
2152 arg = default_conversion (arg);
2153 arg = non_lvalue (arg);
400fbf9f
JW
2154 break;
2155
3e4093b6
RS
2156 case NEGATE_EXPR:
2157 if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE
2158 || typecode == COMPLEX_TYPE
2159 || typecode == VECTOR_TYPE))
2160 {
2161 error ("wrong type argument to unary minus");
2162 return error_mark_node;
2163 }
2164 else if (!noconvert)
2165 arg = default_conversion (arg);
400fbf9f
JW
2166 break;
2167
3e4093b6
RS
2168 case BIT_NOT_EXPR:
2169 if (typecode == INTEGER_TYPE || typecode == VECTOR_TYPE)
03d5b1f5 2170 {
3e4093b6
RS
2171 if (!noconvert)
2172 arg = default_conversion (arg);
03d5b1f5 2173 }
3e4093b6 2174 else if (typecode == COMPLEX_TYPE)
400fbf9f 2175 {
3e4093b6
RS
2176 code = CONJ_EXPR;
2177 if (pedantic)
2178 pedwarn ("ISO C does not support `~' for complex conjugation");
2179 if (!noconvert)
2180 arg = default_conversion (arg);
2181 }
2182 else
2183 {
2184 error ("wrong type argument to bit-complement");
2185 return error_mark_node;
400fbf9f
JW
2186 }
2187 break;
2188
3e4093b6 2189 case ABS_EXPR:
11017cc7 2190 if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE))
400fbf9f 2191 {
3e4093b6
RS
2192 error ("wrong type argument to abs");
2193 return error_mark_node;
400fbf9f 2194 }
3e4093b6
RS
2195 else if (!noconvert)
2196 arg = default_conversion (arg);
400fbf9f
JW
2197 break;
2198
3e4093b6
RS
2199 case CONJ_EXPR:
2200 /* Conjugating a real value is a no-op, but allow it anyway. */
2201 if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE
2202 || typecode == COMPLEX_TYPE))
400fbf9f 2203 {
3e4093b6
RS
2204 error ("wrong type argument to conjugation");
2205 return error_mark_node;
400fbf9f 2206 }
3e4093b6
RS
2207 else if (!noconvert)
2208 arg = default_conversion (arg);
400fbf9f
JW
2209 break;
2210
3e4093b6
RS
2211 case TRUTH_NOT_EXPR:
2212 if (typecode != INTEGER_TYPE
2213 && typecode != REAL_TYPE && typecode != POINTER_TYPE
2214 && typecode != COMPLEX_TYPE
2215 /* These will convert to a pointer. */
2216 && typecode != ARRAY_TYPE && typecode != FUNCTION_TYPE)
400fbf9f 2217 {
3e4093b6
RS
2218 error ("wrong type argument to unary exclamation mark");
2219 return error_mark_node;
400fbf9f 2220 }
3e4093b6
RS
2221 arg = c_common_truthvalue_conversion (arg);
2222 return invert_truthvalue (arg);
2223
2224 case NOP_EXPR:
400fbf9f
JW
2225 break;
2226
3e4093b6
RS
2227 case REALPART_EXPR:
2228 if (TREE_CODE (arg) == COMPLEX_CST)
2229 return TREE_REALPART (arg);
2230 else if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
2231 return fold (build1 (REALPART_EXPR, TREE_TYPE (TREE_TYPE (arg)), arg));
2232 else
2233 return arg;
605a99f6 2234
3e4093b6
RS
2235 case IMAGPART_EXPR:
2236 if (TREE_CODE (arg) == COMPLEX_CST)
2237 return TREE_IMAGPART (arg);
2238 else if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
2239 return fold (build1 (IMAGPART_EXPR, TREE_TYPE (TREE_TYPE (arg)), arg));
2240 else
2241 return convert (TREE_TYPE (arg), integer_zero_node);
2242
2243 case PREINCREMENT_EXPR:
2244 case POSTINCREMENT_EXPR:
2245 case PREDECREMENT_EXPR:
2246 case POSTDECREMENT_EXPR:
2247 /* Handle complex lvalues (when permitted)
2248 by reduction to simpler cases. */
2249
2250 val = unary_complex_lvalue (code, arg, 0);
2251 if (val != 0)
2252 return val;
2253
2254 /* Increment or decrement the real part of the value,
2255 and don't change the imaginary part. */
2256 if (typecode == COMPLEX_TYPE)
400fbf9f 2257 {
3e4093b6
RS
2258 tree real, imag;
2259
2260 if (pedantic)
2261 pedwarn ("ISO C does not support `++' and `--' on complex types");
2262
2263 arg = stabilize_reference (arg);
2264 real = build_unary_op (REALPART_EXPR, arg, 1);
2265 imag = build_unary_op (IMAGPART_EXPR, arg, 1);
2266 return build (COMPLEX_EXPR, TREE_TYPE (arg),
2267 build_unary_op (code, real, 1), imag);
400fbf9f 2268 }
3e4093b6
RS
2269
2270 /* Report invalid types. */
2271
2272 if (typecode != POINTER_TYPE
2273 && typecode != INTEGER_TYPE && typecode != REAL_TYPE)
400fbf9f 2274 {
3e4093b6
RS
2275 if (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR)
2276 error ("wrong type argument to increment");
2277 else
2278 error ("wrong type argument to decrement");
2279
2280 return error_mark_node;
400fbf9f 2281 }
400fbf9f 2282
3e4093b6
RS
2283 {
2284 tree inc;
2285 tree result_type = TREE_TYPE (arg);
400fbf9f 2286
3e4093b6
RS
2287 arg = get_unwidened (arg, 0);
2288 argtype = TREE_TYPE (arg);
2289
2290 /* Compute the increment. */
2291
2292 if (typecode == POINTER_TYPE)
2293 {
2294 /* If pointer target is an undefined struct,
2295 we just cannot know how to do the arithmetic. */
2296 if (!COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (result_type)))
2297 {
2298 if (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR)
2299 error ("increment of pointer to unknown structure");
2300 else
2301 error ("decrement of pointer to unknown structure");
2302 }
2303 else if ((pedantic || warn_pointer_arith)
2304 && (TREE_CODE (TREE_TYPE (result_type)) == FUNCTION_TYPE
2305 || TREE_CODE (TREE_TYPE (result_type)) == VOID_TYPE))
2306 {
2307 if (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR)
2308 pedwarn ("wrong type argument to increment");
2309 else
2310 pedwarn ("wrong type argument to decrement");
2311 }
2312
2313 inc = c_size_in_bytes (TREE_TYPE (result_type));
2314 }
2315 else
2316 inc = integer_one_node;
2317
2318 inc = convert (argtype, inc);
2319
2320 /* Handle incrementing a cast-expression. */
2321
2322 while (1)
2323 switch (TREE_CODE (arg))
605a99f6 2324 {
3e4093b6
RS
2325 case NOP_EXPR:
2326 case CONVERT_EXPR:
2327 case FLOAT_EXPR:
2328 case FIX_TRUNC_EXPR:
2329 case FIX_FLOOR_EXPR:
2330 case FIX_ROUND_EXPR:
2331 case FIX_CEIL_EXPR:
2332 pedantic_lvalue_warning (CONVERT_EXPR);
2333 /* If the real type has the same machine representation
2334 as the type it is cast to, we can make better output
2335 by adding directly to the inside of the cast. */
2336 if ((TREE_CODE (TREE_TYPE (arg))
2337 == TREE_CODE (TREE_TYPE (TREE_OPERAND (arg, 0))))
2338 && (TYPE_MODE (TREE_TYPE (arg))
2339 == TYPE_MODE (TREE_TYPE (TREE_OPERAND (arg, 0)))))
2340 arg = TREE_OPERAND (arg, 0);
2341 else
2342 {
2343 tree incremented, modify, value;
2344 if (TREE_CODE (TREE_TYPE (arg)) == BOOLEAN_TYPE)
2345 value = boolean_increment (code, arg);
2346 else
2347 {
2348 arg = stabilize_reference (arg);
2349 if (code == PREINCREMENT_EXPR || code == PREDECREMENT_EXPR)
2350 value = arg;
2351 else
2352 value = save_expr (arg);
2353 incremented = build (((code == PREINCREMENT_EXPR
2354 || code == POSTINCREMENT_EXPR)
2355 ? PLUS_EXPR : MINUS_EXPR),
2356 argtype, value, inc);
2357 TREE_SIDE_EFFECTS (incremented) = 1;
2358 modify = build_modify_expr (arg, NOP_EXPR, incremented);
2359 value = build (COMPOUND_EXPR, TREE_TYPE (arg), modify, value);
2360 }
2361 TREE_USED (value) = 1;
2362 return value;
2363 }
2364 break;
2365
2366 default:
2367 goto give_up;
605a99f6 2368 }
3e4093b6
RS
2369 give_up:
2370
2371 /* Complain about anything else that is not a true lvalue. */
2372 if (!lvalue_or_else (arg, ((code == PREINCREMENT_EXPR
2373 || code == POSTINCREMENT_EXPR)
2374 ? "invalid lvalue in increment"
2375 : "invalid lvalue in decrement")))
2376 return error_mark_node;
2377
2378 /* Report a read-only lvalue. */
2379 if (TREE_READONLY (arg))
2380 readonly_warning (arg,
2381 ((code == PREINCREMENT_EXPR
2382 || code == POSTINCREMENT_EXPR)
2383 ? "increment" : "decrement"));
2384
2385 if (TREE_CODE (TREE_TYPE (arg)) == BOOLEAN_TYPE)
2386 val = boolean_increment (code, arg);
2387 else
2388 val = build (code, TREE_TYPE (arg), arg, inc);
2389 TREE_SIDE_EFFECTS (val) = 1;
2390 val = convert (result_type, val);
2391 if (TREE_CODE (val) != code)
2392 TREE_NO_UNUSED_WARNING (val) = 1;
2393 return val;
2394 }
2395
2396 case ADDR_EXPR:
2397 /* Note that this operation never does default_conversion. */
2398
2399 /* Let &* cancel out to simplify resulting code. */
2400 if (TREE_CODE (arg) == INDIRECT_REF)
400fbf9f 2401 {
3e4093b6
RS
2402 /* Don't let this be an lvalue. */
2403 if (lvalue_p (TREE_OPERAND (arg, 0)))
2404 return non_lvalue (TREE_OPERAND (arg, 0));
2405 return TREE_OPERAND (arg, 0);
400fbf9f 2406 }
1eb8759b 2407
3e4093b6
RS
2408 /* For &x[y], return x+y */
2409 if (TREE_CODE (arg) == ARRAY_REF)
1eb8759b 2410 {
3e4093b6
RS
2411 if (!c_mark_addressable (TREE_OPERAND (arg, 0)))
2412 return error_mark_node;
2413 return build_binary_op (PLUS_EXPR, TREE_OPERAND (arg, 0),
2414 TREE_OPERAND (arg, 1), 1);
1eb8759b 2415 }
1eb8759b 2416
3e4093b6
RS
2417 /* Handle complex lvalues (when permitted)
2418 by reduction to simpler cases. */
2419 val = unary_complex_lvalue (code, arg, flag);
2420 if (val != 0)
2421 return val;
400fbf9f 2422
3e4093b6
RS
2423 /* Anything not already handled and not a true memory reference
2424 or a non-lvalue array is an error. */
2425 else if (typecode != FUNCTION_TYPE && !flag
2426 && !lvalue_or_else (arg, "invalid lvalue in unary `&'"))
2427 return error_mark_node;
b6a10c9f 2428
3e4093b6
RS
2429 /* Ordinary case; arg is a COMPONENT_REF or a decl. */
2430 argtype = TREE_TYPE (arg);
400fbf9f 2431
3e4093b6
RS
2432 /* If the lvalue is const or volatile, merge that into the type
2433 to which the address will point. Note that you can't get a
2434 restricted pointer by taking the address of something, so we
2435 only have to deal with `const' and `volatile' here. */
2436 if ((DECL_P (arg) || TREE_CODE_CLASS (TREE_CODE (arg)) == 'r')
2437 && (TREE_READONLY (arg) || TREE_THIS_VOLATILE (arg)))
2438 argtype = c_build_type_variant (argtype,
2439 TREE_READONLY (arg),
2440 TREE_THIS_VOLATILE (arg));
400fbf9f 2441
3e4093b6 2442 argtype = build_pointer_type (argtype);
400fbf9f 2443
3e4093b6
RS
2444 if (!c_mark_addressable (arg))
2445 return error_mark_node;
400fbf9f 2446
3e4093b6
RS
2447 {
2448 tree addr;
400fbf9f 2449
3e4093b6
RS
2450 if (TREE_CODE (arg) == COMPONENT_REF)
2451 {
2452 tree field = TREE_OPERAND (arg, 1);
400fbf9f 2453
3e4093b6 2454 addr = build_unary_op (ADDR_EXPR, TREE_OPERAND (arg, 0), flag);
400fbf9f 2455
3e4093b6
RS
2456 if (DECL_C_BIT_FIELD (field))
2457 {
2458 error ("attempt to take address of bit-field structure member `%s'",
2459 IDENTIFIER_POINTER (DECL_NAME (field)));
2460 return error_mark_node;
2461 }
400fbf9f 2462
3e4093b6
RS
2463 addr = fold (build (PLUS_EXPR, argtype,
2464 convert (argtype, addr),
2465 convert (argtype, byte_position (field))));
2466 }
2467 else
2468 addr = build1 (code, argtype, arg);
400fbf9f 2469
3e4093b6
RS
2470 /* Address of a static or external variable or
2471 file-scope function counts as a constant. */
2472 if (staticp (arg)
2473 && ! (TREE_CODE (arg) == FUNCTION_DECL
4b1e44be 2474 && !DECL_FILE_SCOPE_P (arg)))
3e4093b6
RS
2475 TREE_CONSTANT (addr) = 1;
2476 return addr;
2477 }
400fbf9f 2478
3e4093b6
RS
2479 default:
2480 break;
2481 }
400fbf9f 2482
3e4093b6
RS
2483 if (argtype == 0)
2484 argtype = TREE_TYPE (arg);
2485 return fold (build1 (code, argtype, arg));
2486}
400fbf9f 2487
3e4093b6
RS
2488/* Return nonzero if REF is an lvalue valid for this language.
2489 Lvalues can be assigned, unless their type has TYPE_READONLY.
2490 Lvalues can have their address taken, unless they have DECL_REGISTER. */
400fbf9f 2491
3e4093b6
RS
2492int
2493lvalue_p (tree ref)
2494{
2495 enum tree_code code = TREE_CODE (ref);
400fbf9f 2496
3e4093b6
RS
2497 switch (code)
2498 {
2499 case REALPART_EXPR:
2500 case IMAGPART_EXPR:
2501 case COMPONENT_REF:
2502 return lvalue_p (TREE_OPERAND (ref, 0));
400fbf9f 2503
3e4093b6
RS
2504 case COMPOUND_LITERAL_EXPR:
2505 case STRING_CST:
2506 return 1;
400fbf9f 2507
3e4093b6
RS
2508 case INDIRECT_REF:
2509 case ARRAY_REF:
2510 case VAR_DECL:
2511 case PARM_DECL:
2512 case RESULT_DECL:
2513 case ERROR_MARK:
2514 return (TREE_CODE (TREE_TYPE (ref)) != FUNCTION_TYPE
2515 && TREE_CODE (TREE_TYPE (ref)) != METHOD_TYPE);
665f2503 2516
3e4093b6
RS
2517 case BIND_EXPR:
2518 case RTL_EXPR:
2519 return TREE_CODE (TREE_TYPE (ref)) == ARRAY_TYPE;
665f2503 2520
3e4093b6
RS
2521 default:
2522 return 0;
2523 }
2524}
400fbf9f 2525
3e4093b6
RS
2526/* Return nonzero if REF is an lvalue valid for this language;
2527 otherwise, print an error message and return zero. */
64c01f80 2528
3e4093b6
RS
2529int
2530lvalue_or_else (tree ref, const char *msgid)
2531{
2532 int win = lvalue_p (ref);
912b4fc3 2533
3e4093b6
RS
2534 if (! win)
2535 error ("%s", msgid);
293c9fdd 2536
3e4093b6
RS
2537 return win;
2538}
665f2503 2539
3e4093b6
RS
2540/* Apply unary lvalue-demanding operator CODE to the expression ARG
2541 for certain kinds of expressions which are not really lvalues
2542 but which we can accept as lvalues. If FLAG is nonzero, then
2543 non-lvalues are OK since we may be converting a non-lvalue array to
2544 a pointer in C99.
665f2503 2545
3e4093b6 2546 If ARG is not a kind of expression we can handle, return zero. */
cb3ca04e 2547
3e4093b6
RS
2548static tree
2549unary_complex_lvalue (enum tree_code code, tree arg, int flag)
2550{
2551 /* Handle (a, b) used as an "lvalue". */
2552 if (TREE_CODE (arg) == COMPOUND_EXPR)
2553 {
2554 tree real_result = build_unary_op (code, TREE_OPERAND (arg, 1), 0);
64c01f80 2555
3e4093b6
RS
2556 /* If this returns a function type, it isn't really being used as
2557 an lvalue, so don't issue a warning about it. */
2558 if (TREE_CODE (TREE_TYPE (arg)) != FUNCTION_TYPE && !flag)
2559 pedantic_lvalue_warning (COMPOUND_EXPR);
64c01f80 2560
3e4093b6
RS
2561 return build (COMPOUND_EXPR, TREE_TYPE (real_result),
2562 TREE_OPERAND (arg, 0), real_result);
2563 }
64c01f80 2564
3e4093b6
RS
2565 /* Handle (a ? b : c) used as an "lvalue". */
2566 if (TREE_CODE (arg) == COND_EXPR)
2567 {
2568 if (!flag)
2569 pedantic_lvalue_warning (COND_EXPR);
2570 if (TREE_CODE (TREE_TYPE (arg)) != FUNCTION_TYPE && !flag)
2571 pedantic_lvalue_warning (COMPOUND_EXPR);
2f6e4e97 2572
3e4093b6
RS
2573 return (build_conditional_expr
2574 (TREE_OPERAND (arg, 0),
2575 build_unary_op (code, TREE_OPERAND (arg, 1), flag),
2576 build_unary_op (code, TREE_OPERAND (arg, 2), flag)));
400fbf9f
JW
2577 }
2578
3e4093b6
RS
2579 return 0;
2580}
293c9fdd 2581
3e4093b6
RS
2582/* If pedantic, warn about improper lvalue. CODE is either COND_EXPR
2583 COMPOUND_EXPR, or CONVERT_EXPR (for casts). */
400fbf9f 2584
3e4093b6
RS
2585static void
2586pedantic_lvalue_warning (enum tree_code code)
2587{
2588 if (pedantic)
2589 switch (code)
2590 {
2591 case COND_EXPR:
2592 pedwarn ("ISO C forbids use of conditional expressions as lvalues");
2593 break;
2594 case COMPOUND_EXPR:
2595 pedwarn ("ISO C forbids use of compound expressions as lvalues");
2596 break;
2597 default:
2598 pedwarn ("ISO C forbids use of cast expressions as lvalues");
2599 break;
2600 }
400fbf9f
JW
2601}
2602\f
3e4093b6 2603/* Warn about storing in something that is `const'. */
54c93c30 2604
3e4093b6
RS
2605void
2606readonly_warning (tree arg, const char *msgid)
54c93c30 2607{
3e4093b6 2608 if (TREE_CODE (arg) == COMPONENT_REF)
54c93c30 2609 {
3e4093b6
RS
2610 if (TYPE_READONLY (TREE_TYPE (TREE_OPERAND (arg, 0))))
2611 readonly_warning (TREE_OPERAND (arg, 0), msgid);
2612 else
2613 pedwarn ("%s of read-only member `%s'", _(msgid),
2614 IDENTIFIER_POINTER (DECL_NAME (TREE_OPERAND (arg, 1))));
54c93c30 2615 }
3e4093b6
RS
2616 else if (TREE_CODE (arg) == VAR_DECL)
2617 pedwarn ("%s of read-only variable `%s'", _(msgid),
2618 IDENTIFIER_POINTER (DECL_NAME (arg)));
2619 else
2620 pedwarn ("%s of read-only location", _(msgid));
54c93c30 2621}
3e4093b6
RS
2622\f
2623/* Mark EXP saying that we need to be able to take the
2624 address of it; it should not be allocated in a register.
2625 Returns true if successful. */
54c93c30 2626
3e4093b6
RS
2627bool
2628c_mark_addressable (tree exp)
400fbf9f 2629{
3e4093b6 2630 tree x = exp;
95602da1 2631
3e4093b6
RS
2632 while (1)
2633 switch (TREE_CODE (x))
2634 {
2635 case COMPONENT_REF:
2636 if (DECL_C_BIT_FIELD (TREE_OPERAND (x, 1)))
2637 {
2638 error ("cannot take address of bit-field `%s'",
2639 IDENTIFIER_POINTER (DECL_NAME (TREE_OPERAND (x, 1))));
2640 return false;
2641 }
95602da1 2642
3e4093b6 2643 /* ... fall through ... */
95602da1 2644
3e4093b6
RS
2645 case ADDR_EXPR:
2646 case ARRAY_REF:
2647 case REALPART_EXPR:
2648 case IMAGPART_EXPR:
2649 x = TREE_OPERAND (x, 0);
2650 break;
95602da1 2651
3e4093b6
RS
2652 case COMPOUND_LITERAL_EXPR:
2653 case CONSTRUCTOR:
2654 TREE_ADDRESSABLE (x) = 1;
2655 return true;
95602da1 2656
3e4093b6
RS
2657 case VAR_DECL:
2658 case CONST_DECL:
2659 case PARM_DECL:
2660 case RESULT_DECL:
2661 if (DECL_REGISTER (x) && !TREE_ADDRESSABLE (x)
2662 && DECL_NONLOCAL (x))
2663 {
2664 if (TREE_PUBLIC (x))
2665 {
2666 error ("global register variable `%s' used in nested function",
2667 IDENTIFIER_POINTER (DECL_NAME (x)));
2668 return false;
2669 }
2670 pedwarn ("register variable `%s' used in nested function",
2671 IDENTIFIER_POINTER (DECL_NAME (x)));
2672 }
2673 else if (DECL_REGISTER (x) && !TREE_ADDRESSABLE (x))
2674 {
2675 if (TREE_PUBLIC (x))
2676 {
2677 error ("address of global register variable `%s' requested",
2678 IDENTIFIER_POINTER (DECL_NAME (x)));
2679 return false;
2680 }
400fbf9f 2681
3e4093b6
RS
2682 /* If we are making this addressable due to its having
2683 volatile components, give a different error message. Also
2684 handle the case of an unnamed parameter by not trying
2685 to give the name. */
6946afd3 2686
3e4093b6
RS
2687 else if (C_TYPE_FIELDS_VOLATILE (TREE_TYPE (x)))
2688 {
2689 error ("cannot put object with volatile field into register");
2690 return false;
2691 }
400fbf9f 2692
3e4093b6
RS
2693 pedwarn ("address of register variable `%s' requested",
2694 IDENTIFIER_POINTER (DECL_NAME (x)));
2695 }
2696 put_var_into_stack (x, /*rescan=*/true);
400fbf9f 2697
3e4093b6
RS
2698 /* drops in */
2699 case FUNCTION_DECL:
2700 TREE_ADDRESSABLE (x) = 1;
2701 /* drops out */
2702 default:
2703 return true;
2704 }
2705}
2706\f
2707/* Build and return a conditional expression IFEXP ? OP1 : OP2. */
400fbf9f
JW
2708
2709tree
3e4093b6 2710build_conditional_expr (tree ifexp, tree op1, tree op2)
400fbf9f 2711{
3e4093b6
RS
2712 tree type1;
2713 tree type2;
2714 enum tree_code code1;
2715 enum tree_code code2;
2716 tree result_type = NULL;
2717 tree orig_op1 = op1, orig_op2 = op2;
400fbf9f 2718
3e4093b6
RS
2719 ifexp = c_common_truthvalue_conversion (default_conversion (ifexp));
2720
2721 /* Promote both alternatives. */
2722
2723 if (TREE_CODE (TREE_TYPE (op1)) != VOID_TYPE)
2724 op1 = default_conversion (op1);
2725 if (TREE_CODE (TREE_TYPE (op2)) != VOID_TYPE)
2726 op2 = default_conversion (op2);
2727
2728 if (TREE_CODE (ifexp) == ERROR_MARK
2729 || TREE_CODE (TREE_TYPE (op1)) == ERROR_MARK
2730 || TREE_CODE (TREE_TYPE (op2)) == ERROR_MARK)
400fbf9f 2731 return error_mark_node;
400fbf9f 2732
3e4093b6
RS
2733 type1 = TREE_TYPE (op1);
2734 code1 = TREE_CODE (type1);
2735 type2 = TREE_TYPE (op2);
2736 code2 = TREE_CODE (type2);
2737
2738 /* Quickly detect the usual case where op1 and op2 have the same type
2739 after promotion. */
2740 if (TYPE_MAIN_VARIANT (type1) == TYPE_MAIN_VARIANT (type2))
400fbf9f 2741 {
3e4093b6
RS
2742 if (type1 == type2)
2743 result_type = type1;
2744 else
2745 result_type = TYPE_MAIN_VARIANT (type1);
2746 }
2747 else if ((code1 == INTEGER_TYPE || code1 == REAL_TYPE
2748 || code1 == COMPLEX_TYPE)
2749 && (code2 == INTEGER_TYPE || code2 == REAL_TYPE
2750 || code2 == COMPLEX_TYPE))
2751 {
2752 result_type = common_type (type1, type2);
400fbf9f 2753
3e4093b6
RS
2754 /* If -Wsign-compare, warn here if type1 and type2 have
2755 different signedness. We'll promote the signed to unsigned
2756 and later code won't know it used to be different.
2757 Do this check on the original types, so that explicit casts
2758 will be considered, but default promotions won't. */
2759 if (warn_sign_compare && !skip_evaluation)
ab87f8c8 2760 {
3e4093b6
RS
2761 int unsigned_op1 = TREE_UNSIGNED (TREE_TYPE (orig_op1));
2762 int unsigned_op2 = TREE_UNSIGNED (TREE_TYPE (orig_op2));
400fbf9f 2763
3e4093b6
RS
2764 if (unsigned_op1 ^ unsigned_op2)
2765 {
2766 /* Do not warn if the result type is signed, since the
2767 signed type will only be chosen if it can represent
2768 all the values of the unsigned type. */
2769 if (! TREE_UNSIGNED (result_type))
2770 /* OK */;
2771 /* Do not warn if the signed quantity is an unsuffixed
2772 integer literal (or some static constant expression
2773 involving such literals) and it is non-negative. */
2774 else if ((unsigned_op2 && c_tree_expr_nonnegative_p (op1))
2775 || (unsigned_op1 && c_tree_expr_nonnegative_p (op2)))
2776 /* OK */;
2777 else
2778 warning ("signed and unsigned type in conditional expression");
2779 }
2780 }
2781 }
2782 else if (code1 == VOID_TYPE || code2 == VOID_TYPE)
2783 {
2784 if (pedantic && (code1 != VOID_TYPE || code2 != VOID_TYPE))
2785 pedwarn ("ISO C forbids conditional expr with only one void side");
2786 result_type = void_type_node;
2787 }
2788 else if (code1 == POINTER_TYPE && code2 == POINTER_TYPE)
2789 {
2790 if (comp_target_types (type1, type2, 1))
2791 result_type = common_type (type1, type2);
2792 else if (integer_zerop (op1) && TREE_TYPE (type1) == void_type_node
2793 && TREE_CODE (orig_op1) != NOP_EXPR)
2794 result_type = qualify_type (type2, type1);
2795 else if (integer_zerop (op2) && TREE_TYPE (type2) == void_type_node
2796 && TREE_CODE (orig_op2) != NOP_EXPR)
2797 result_type = qualify_type (type1, type2);
2798 else if (VOID_TYPE_P (TREE_TYPE (type1)))
34a80643 2799 {
3e4093b6
RS
2800 if (pedantic && TREE_CODE (TREE_TYPE (type2)) == FUNCTION_TYPE)
2801 pedwarn ("ISO C forbids conditional expr between `void *' and function pointer");
2802 result_type = build_pointer_type (qualify_type (TREE_TYPE (type1),
2803 TREE_TYPE (type2)));
34a80643 2804 }
3e4093b6 2805 else if (VOID_TYPE_P (TREE_TYPE (type2)))
1c2a9b35 2806 {
3e4093b6
RS
2807 if (pedantic && TREE_CODE (TREE_TYPE (type1)) == FUNCTION_TYPE)
2808 pedwarn ("ISO C forbids conditional expr between `void *' and function pointer");
2809 result_type = build_pointer_type (qualify_type (TREE_TYPE (type2),
2810 TREE_TYPE (type1)));
1c2a9b35 2811 }
34a80643 2812 else
ab87f8c8 2813 {
3e4093b6
RS
2814 pedwarn ("pointer type mismatch in conditional expression");
2815 result_type = build_pointer_type (void_type_node);
ab87f8c8 2816 }
3e4093b6
RS
2817 }
2818 else if (code1 == POINTER_TYPE && code2 == INTEGER_TYPE)
2819 {
2820 if (! integer_zerop (op2))
2821 pedwarn ("pointer/integer type mismatch in conditional expression");
2822 else
ab87f8c8 2823 {
3e4093b6 2824 op2 = null_pointer_node;
ab87f8c8 2825 }
3e4093b6
RS
2826 result_type = type1;
2827 }
2828 else if (code2 == POINTER_TYPE && code1 == INTEGER_TYPE)
2829 {
2830 if (!integer_zerop (op1))
2831 pedwarn ("pointer/integer type mismatch in conditional expression");
2832 else
ab87f8c8 2833 {
3e4093b6 2834 op1 = null_pointer_node;
ab87f8c8 2835 }
3e4093b6
RS
2836 result_type = type2;
2837 }
1c2a9b35 2838
3e4093b6
RS
2839 if (!result_type)
2840 {
2841 if (flag_cond_mismatch)
2842 result_type = void_type_node;
2843 else
400fbf9f 2844 {
3e4093b6 2845 error ("type mismatch in conditional expression");
ab87f8c8 2846 return error_mark_node;
400fbf9f 2847 }
3e4093b6 2848 }
400fbf9f 2849
3e4093b6
RS
2850 /* Merge const and volatile flags of the incoming types. */
2851 result_type
2852 = build_type_variant (result_type,
2853 TREE_READONLY (op1) || TREE_READONLY (op2),
2854 TREE_THIS_VOLATILE (op1) || TREE_THIS_VOLATILE (op2));
b6a10c9f 2855
3e4093b6
RS
2856 if (result_type != TREE_TYPE (op1))
2857 op1 = convert_and_check (result_type, op1);
2858 if (result_type != TREE_TYPE (op2))
2859 op2 = convert_and_check (result_type, op2);
b6a10c9f 2860
3e4093b6
RS
2861 if (TREE_CODE (ifexp) == INTEGER_CST)
2862 return pedantic_non_lvalue (integer_zerop (ifexp) ? op2 : op1);
2f6e4e97 2863
3e4093b6
RS
2864 return fold (build (COND_EXPR, result_type, ifexp, op1, op2));
2865}
2866\f
2867/* Given a list of expressions, return a compound expression
2868 that performs them all and returns the value of the last of them. */
400fbf9f 2869
3e4093b6
RS
2870tree
2871build_compound_expr (tree list)
2872{
2873 return internal_build_compound_expr (list, TRUE);
2874}
400fbf9f 2875
3e4093b6
RS
2876static tree
2877internal_build_compound_expr (tree list, int first_p)
2878{
2879 tree rest;
400fbf9f 2880
3e4093b6
RS
2881 if (TREE_CHAIN (list) == 0)
2882 {
2883 /* Convert arrays and functions to pointers when there
2884 really is a comma operator. */
2885 if (!first_p)
2886 TREE_VALUE (list)
2887 = default_function_array_conversion (TREE_VALUE (list));
400fbf9f 2888
3e4093b6
RS
2889 /* Don't let (0, 0) be null pointer constant. */
2890 if (!first_p && integer_zerop (TREE_VALUE (list)))
2891 return non_lvalue (TREE_VALUE (list));
2892 return TREE_VALUE (list);
2893 }
400fbf9f 2894
3e4093b6 2895 rest = internal_build_compound_expr (TREE_CHAIN (list), FALSE);
400fbf9f 2896
3e4093b6
RS
2897 if (! TREE_SIDE_EFFECTS (TREE_VALUE (list)))
2898 {
2899 /* The left-hand operand of a comma expression is like an expression
2900 statement: with -Wextra or -Wunused, we should warn if it doesn't have
2901 any side-effects, unless it was explicitly cast to (void). */
2902 if (warn_unused_value
2903 && ! (TREE_CODE (TREE_VALUE (list)) == CONVERT_EXPR
2904 && VOID_TYPE_P (TREE_TYPE (TREE_VALUE (list)))))
2905 warning ("left-hand operand of comma expression has no effect");
53fcdc76 2906
3e4093b6
RS
2907 /* When pedantic, a compound expression can be neither an lvalue
2908 nor an integer constant expression. */
2909 if (! pedantic)
2910 return rest;
2911 }
400fbf9f 2912
3e4093b6
RS
2913 /* With -Wunused, we should also warn if the left-hand operand does have
2914 side-effects, but computes a value which is not used. For example, in
2915 `foo() + bar(), baz()' the result of the `+' operator is not used,
2916 so we should issue a warning. */
2917 else if (warn_unused_value)
2918 warn_if_unused_value (TREE_VALUE (list));
400fbf9f 2919
3e4093b6
RS
2920 return build (COMPOUND_EXPR, TREE_TYPE (rest), TREE_VALUE (list), rest);
2921}
400fbf9f 2922
3e4093b6 2923/* Build an expression representing a cast to type TYPE of expression EXPR. */
400fbf9f 2924
3e4093b6
RS
2925tree
2926build_c_cast (tree type, tree expr)
2927{
2928 tree value = expr;
400fbf9f 2929
3e4093b6
RS
2930 if (type == error_mark_node || expr == error_mark_node)
2931 return error_mark_node;
400fbf9f 2932
3e4093b6
RS
2933 /* The ObjC front-end uses TYPE_MAIN_VARIANT to tie together types differing
2934 only in <protocol> qualifications. But when constructing cast expressions,
2935 the protocols do matter and must be kept around. */
264fa2db 2936 if (!c_dialect_objc () || !objc_is_object_ptr (type))
3e4093b6 2937 type = TYPE_MAIN_VARIANT (type);
400fbf9f 2938
3e4093b6
RS
2939 if (TREE_CODE (type) == ARRAY_TYPE)
2940 {
2941 error ("cast specifies array type");
2942 return error_mark_node;
2943 }
400fbf9f 2944
3e4093b6
RS
2945 if (TREE_CODE (type) == FUNCTION_TYPE)
2946 {
2947 error ("cast specifies function type");
2948 return error_mark_node;
2949 }
400fbf9f 2950
3e4093b6
RS
2951 if (type == TYPE_MAIN_VARIANT (TREE_TYPE (value)))
2952 {
2953 if (pedantic)
400fbf9f 2954 {
3e4093b6
RS
2955 if (TREE_CODE (type) == RECORD_TYPE
2956 || TREE_CODE (type) == UNION_TYPE)
2957 pedwarn ("ISO C forbids casting nonscalar to the same type");
400fbf9f 2958 }
3e4093b6
RS
2959 }
2960 else if (TREE_CODE (type) == UNION_TYPE)
2961 {
2962 tree field;
2963 value = default_function_array_conversion (value);
400fbf9f 2964
3e4093b6
RS
2965 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
2966 if (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (field)),
2967 TYPE_MAIN_VARIANT (TREE_TYPE (value)), COMPARE_STRICT))
2968 break;
2969
2970 if (field)
400fbf9f 2971 {
3e4093b6
RS
2972 tree t;
2973
2974 if (pedantic)
2975 pedwarn ("ISO C forbids casts to union type");
2976 t = digest_init (type,
2977 build_constructor (type,
2978 build_tree_list (field, value)),
2979 0);
2980 TREE_CONSTANT (t) = TREE_CONSTANT (value);
2981 return t;
400fbf9f 2982 }
3e4093b6
RS
2983 error ("cast to union type from type not present in union");
2984 return error_mark_node;
2985 }
2986 else
2987 {
2988 tree otype, ovalue;
400fbf9f 2989
3e4093b6
RS
2990 /* If casting to void, avoid the error that would come
2991 from default_conversion in the case of a non-lvalue array. */
2992 if (type == void_type_node)
2993 return build1 (CONVERT_EXPR, type, value);
400fbf9f 2994
3e4093b6
RS
2995 /* Convert functions and arrays to pointers,
2996 but don't convert any other types. */
2997 value = default_function_array_conversion (value);
2998 otype = TREE_TYPE (value);
400fbf9f 2999
3e4093b6 3000 /* Optionally warn about potentially worrisome casts. */
770ae6cc 3001
3e4093b6
RS
3002 if (warn_cast_qual
3003 && TREE_CODE (type) == POINTER_TYPE
3004 && TREE_CODE (otype) == POINTER_TYPE)
3005 {
3006 tree in_type = type;
3007 tree in_otype = otype;
3008 int added = 0;
3009 int discarded = 0;
400fbf9f 3010
3e4093b6
RS
3011 /* Check that the qualifiers on IN_TYPE are a superset of
3012 the qualifiers of IN_OTYPE. The outermost level of
3013 POINTER_TYPE nodes is uninteresting and we stop as soon
3014 as we hit a non-POINTER_TYPE node on either type. */
3015 do
3016 {
3017 in_otype = TREE_TYPE (in_otype);
3018 in_type = TREE_TYPE (in_type);
400fbf9f 3019
3e4093b6
RS
3020 /* GNU C allows cv-qualified function types. 'const'
3021 means the function is very pure, 'volatile' means it
3022 can't return. We need to warn when such qualifiers
3023 are added, not when they're taken away. */
3024 if (TREE_CODE (in_otype) == FUNCTION_TYPE
3025 && TREE_CODE (in_type) == FUNCTION_TYPE)
3026 added |= (TYPE_QUALS (in_type) & ~TYPE_QUALS (in_otype));
3027 else
3028 discarded |= (TYPE_QUALS (in_otype) & ~TYPE_QUALS (in_type));
3029 }
3030 while (TREE_CODE (in_type) == POINTER_TYPE
3031 && TREE_CODE (in_otype) == POINTER_TYPE);
400fbf9f 3032
3e4093b6
RS
3033 if (added)
3034 warning ("cast adds new qualifiers to function type");
400fbf9f 3035
3e4093b6
RS
3036 if (discarded)
3037 /* There are qualifiers present in IN_OTYPE that are not
3038 present in IN_TYPE. */
3039 warning ("cast discards qualifiers from pointer target type");
3040 }
400fbf9f 3041
3e4093b6
RS
3042 /* Warn about possible alignment problems. */
3043 if (STRICT_ALIGNMENT && warn_cast_align
3044 && TREE_CODE (type) == POINTER_TYPE
3045 && TREE_CODE (otype) == POINTER_TYPE
3046 && TREE_CODE (TREE_TYPE (otype)) != VOID_TYPE
3047 && TREE_CODE (TREE_TYPE (otype)) != FUNCTION_TYPE
3048 /* Don't warn about opaque types, where the actual alignment
3049 restriction is unknown. */
3050 && !((TREE_CODE (TREE_TYPE (otype)) == UNION_TYPE
3051 || TREE_CODE (TREE_TYPE (otype)) == RECORD_TYPE)
3052 && TYPE_MODE (TREE_TYPE (otype)) == VOIDmode)
3053 && TYPE_ALIGN (TREE_TYPE (type)) > TYPE_ALIGN (TREE_TYPE (otype)))
3054 warning ("cast increases required alignment of target type");
e9a25f70 3055
3e4093b6
RS
3056 if (TREE_CODE (type) == INTEGER_TYPE
3057 && TREE_CODE (otype) == POINTER_TYPE
3058 && TYPE_PRECISION (type) != TYPE_PRECISION (otype)
3059 && !TREE_CONSTANT (value))
3060 warning ("cast from pointer to integer of different size");
400fbf9f 3061
3e4093b6
RS
3062 if (warn_bad_function_cast
3063 && TREE_CODE (value) == CALL_EXPR
3064 && TREE_CODE (type) != TREE_CODE (otype))
3065 warning ("cast does not match function type");
400fbf9f 3066
3e4093b6
RS
3067 if (TREE_CODE (type) == POINTER_TYPE
3068 && TREE_CODE (otype) == INTEGER_TYPE
3069 && TYPE_PRECISION (type) != TYPE_PRECISION (otype)
3070 /* Don't warn about converting any constant. */
3071 && !TREE_CONSTANT (value))
3072 warning ("cast to pointer from integer of different size");
400fbf9f 3073
3e4093b6
RS
3074 if (TREE_CODE (type) == POINTER_TYPE
3075 && TREE_CODE (otype) == POINTER_TYPE
3076 && TREE_CODE (expr) == ADDR_EXPR
3077 && DECL_P (TREE_OPERAND (expr, 0))
3078 && flag_strict_aliasing && warn_strict_aliasing
3079 && !VOID_TYPE_P (TREE_TYPE (type)))
3080 {
3081 /* Casting the address of a decl to non void pointer. Warn
3082 if the cast breaks type based aliasing. */
3083 if (!COMPLETE_TYPE_P (TREE_TYPE (type)))
3084 warning ("type-punning to incomplete type might break strict-aliasing rules");
3085 else if (!alias_sets_conflict_p
3086 (get_alias_set (TREE_TYPE (TREE_OPERAND (expr, 0))),
3087 get_alias_set (TREE_TYPE (type))))
3088 warning ("dereferencing type-punned pointer will break strict-aliasing rules");
3089 }
400fbf9f 3090
3e4093b6
RS
3091 ovalue = value;
3092 /* Replace a nonvolatile const static variable with its value. */
3093 if (optimize && TREE_CODE (value) == VAR_DECL)
3094 value = decl_constant_value (value);
3095 value = convert (type, value);
400fbf9f 3096
3e4093b6
RS
3097 /* Ignore any integer overflow caused by the cast. */
3098 if (TREE_CODE (value) == INTEGER_CST)
3099 {
3100 TREE_OVERFLOW (value) = TREE_OVERFLOW (ovalue);
3101 TREE_CONSTANT_OVERFLOW (value) = TREE_CONSTANT_OVERFLOW (ovalue);
3102 }
3103 }
400fbf9f 3104
3e4093b6
RS
3105 /* Pedantically, don't let (void *) (FOO *) 0 be a null pointer constant. */
3106 if (pedantic && TREE_CODE (value) == INTEGER_CST
3107 && TREE_CODE (expr) == INTEGER_CST
3108 && TREE_CODE (TREE_TYPE (expr)) != INTEGER_TYPE)
3109 value = non_lvalue (value);
cff9c407 3110
3e4093b6
RS
3111 /* If pedantic, don't let a cast be an lvalue. */
3112 if (value == expr && pedantic)
3113 value = non_lvalue (value);
e9a25f70 3114
3e4093b6 3115 return value;
400fbf9f
JW
3116}
3117
3e4093b6
RS
3118/* Interpret a cast of expression EXPR to type TYPE. */
3119tree
3120c_cast_expr (tree type, tree expr)
400fbf9f 3121{
3e4093b6 3122 int saved_wsp = warn_strict_prototypes;
c5c76735 3123
3e4093b6
RS
3124 /* This avoids warnings about unprototyped casts on
3125 integers. E.g. "#define SIG_DFL (void(*)())0". */
3126 if (TREE_CODE (expr) == INTEGER_CST)
3127 warn_strict_prototypes = 0;
3128 type = groktypename (type);
3129 warn_strict_prototypes = saved_wsp;
c5c76735 3130
3e4093b6 3131 return build_c_cast (type, expr);
400fbf9f
JW
3132}
3133
3e4093b6
RS
3134\f
3135/* Build an assignment expression of lvalue LHS from value RHS.
3136 MODIFYCODE is the code for a binary operator that we use
3137 to combine the old value of LHS with RHS to get the new value.
3138 Or else MODIFYCODE is NOP_EXPR meaning do a simple assignment. */
2f6e4e97 3139
3e4093b6
RS
3140tree
3141build_modify_expr (tree lhs, enum tree_code modifycode, tree rhs)
400fbf9f 3142{
3e4093b6
RS
3143 tree result;
3144 tree newrhs;
3145 tree lhstype = TREE_TYPE (lhs);
3146 tree olhstype = lhstype;
e9a25f70 3147
3e4093b6
RS
3148 /* Types that aren't fully specified cannot be used in assignments. */
3149 lhs = require_complete_type (lhs);
e9a25f70 3150
3e4093b6
RS
3151 /* Avoid duplicate error messages from operands that had errors. */
3152 if (TREE_CODE (lhs) == ERROR_MARK || TREE_CODE (rhs) == ERROR_MARK)
3153 return error_mark_node;
400fbf9f 3154
3e4093b6
RS
3155 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
3156 /* Do not use STRIP_NOPS here. We do not want an enumerator
3157 whose value is 0 to count as a null pointer constant. */
3158 if (TREE_CODE (rhs) == NON_LVALUE_EXPR)
3159 rhs = TREE_OPERAND (rhs, 0);
e9a25f70 3160
3e4093b6 3161 newrhs = rhs;
400fbf9f 3162
3e4093b6 3163 /* Handle control structure constructs used as "lvalues". */
400fbf9f 3164
3e4093b6
RS
3165 switch (TREE_CODE (lhs))
3166 {
3167 /* Handle (a, b) used as an "lvalue". */
3168 case COMPOUND_EXPR:
3169 pedantic_lvalue_warning (COMPOUND_EXPR);
3170 newrhs = build_modify_expr (TREE_OPERAND (lhs, 1), modifycode, rhs);
3171 if (TREE_CODE (newrhs) == ERROR_MARK)
3172 return error_mark_node;
3173 return build (COMPOUND_EXPR, lhstype,
3174 TREE_OPERAND (lhs, 0), newrhs);
400fbf9f 3175
3e4093b6
RS
3176 /* Handle (a ? b : c) used as an "lvalue". */
3177 case COND_EXPR:
3178 pedantic_lvalue_warning (COND_EXPR);
3179 rhs = save_expr (rhs);
913d0833 3180 {
3e4093b6
RS
3181 /* Produce (a ? (b = rhs) : (c = rhs))
3182 except that the RHS goes through a save-expr
3183 so the code to compute it is only emitted once. */
3184 tree cond
3185 = build_conditional_expr (TREE_OPERAND (lhs, 0),
3186 build_modify_expr (TREE_OPERAND (lhs, 1),
3187 modifycode, rhs),
3188 build_modify_expr (TREE_OPERAND (lhs, 2),
3189 modifycode, rhs));
3190 if (TREE_CODE (cond) == ERROR_MARK)
3191 return cond;
3192 /* Make sure the code to compute the rhs comes out
3193 before the split. */
3194 return build (COMPOUND_EXPR, TREE_TYPE (lhs),
3195 /* But cast it to void to avoid an "unused" error. */
3196 convert (void_type_node, rhs), cond);
913d0833 3197 }
3e4093b6
RS
3198 default:
3199 break;
3200 }
400fbf9f 3201
3e4093b6
RS
3202 /* If a binary op has been requested, combine the old LHS value with the RHS
3203 producing the value we should actually store into the LHS. */
3204
3205 if (modifycode != NOP_EXPR)
400fbf9f 3206 {
3e4093b6
RS
3207 lhs = stabilize_reference (lhs);
3208 newrhs = build_binary_op (modifycode, lhs, rhs, 1);
400fbf9f 3209 }
400fbf9f 3210
3e4093b6
RS
3211 /* Handle a cast used as an "lvalue".
3212 We have already performed any binary operator using the value as cast.
3213 Now convert the result to the cast type of the lhs,
3214 and then true type of the lhs and store it there;
3215 then convert result back to the cast type to be the value
3216 of the assignment. */
dffd7eb6 3217
3e4093b6
RS
3218 switch (TREE_CODE (lhs))
3219 {
3220 case NOP_EXPR:
3221 case CONVERT_EXPR:
3222 case FLOAT_EXPR:
3223 case FIX_TRUNC_EXPR:
3224 case FIX_FLOOR_EXPR:
3225 case FIX_ROUND_EXPR:
3226 case FIX_CEIL_EXPR:
3227 newrhs = default_function_array_conversion (newrhs);
400fbf9f 3228 {
3e4093b6
RS
3229 tree inner_lhs = TREE_OPERAND (lhs, 0);
3230 tree result;
3231 result = build_modify_expr (inner_lhs, NOP_EXPR,
3232 convert (TREE_TYPE (inner_lhs),
3233 convert (lhstype, newrhs)));
3234 if (TREE_CODE (result) == ERROR_MARK)
3235 return result;
3236 pedantic_lvalue_warning (CONVERT_EXPR);
3237 return convert (TREE_TYPE (lhs), result);
3238 }
1598f4da 3239
3e4093b6
RS
3240 default:
3241 break;
3242 }
1598f4da 3243
3e4093b6
RS
3244 /* Now we have handled acceptable kinds of LHS that are not truly lvalues.
3245 Reject anything strange now. */
400fbf9f 3246
3e4093b6
RS
3247 if (!lvalue_or_else (lhs, "invalid lvalue in assignment"))
3248 return error_mark_node;
400fbf9f 3249
3e4093b6 3250 /* Warn about storing in something that is `const'. */
bbbd6700 3251
3e4093b6
RS
3252 if (TREE_READONLY (lhs) || TYPE_READONLY (lhstype)
3253 || ((TREE_CODE (lhstype) == RECORD_TYPE
3254 || TREE_CODE (lhstype) == UNION_TYPE)
3255 && C_TYPE_FIELDS_READONLY (lhstype)))
3256 readonly_warning (lhs, "assignment");
bbbd6700 3257
3e4093b6
RS
3258 /* If storing into a structure or union member,
3259 it has probably been given type `int'.
3260 Compute the type that would go with
3261 the actual amount of storage the member occupies. */
bbbd6700 3262
3e4093b6
RS
3263 if (TREE_CODE (lhs) == COMPONENT_REF
3264 && (TREE_CODE (lhstype) == INTEGER_TYPE
3265 || TREE_CODE (lhstype) == BOOLEAN_TYPE
3266 || TREE_CODE (lhstype) == REAL_TYPE
3267 || TREE_CODE (lhstype) == ENUMERAL_TYPE))
3268 lhstype = TREE_TYPE (get_unwidened (lhs, 0));
400fbf9f 3269
3e4093b6
RS
3270 /* If storing in a field that is in actuality a short or narrower than one,
3271 we must store in the field in its actual type. */
3272
3273 if (lhstype != TREE_TYPE (lhs))
3274 {
3275 lhs = copy_node (lhs);
3276 TREE_TYPE (lhs) = lhstype;
400fbf9f 3277 }
400fbf9f 3278
3e4093b6 3279 /* Convert new value to destination type. */
400fbf9f 3280
3e4093b6
RS
3281 newrhs = convert_for_assignment (lhstype, newrhs, _("assignment"),
3282 NULL_TREE, NULL_TREE, 0);
3283 if (TREE_CODE (newrhs) == ERROR_MARK)
3284 return error_mark_node;
400fbf9f 3285
3e4093b6 3286 /* Scan operands */
400fbf9f 3287
3e4093b6
RS
3288 result = build (MODIFY_EXPR, lhstype, lhs, newrhs);
3289 TREE_SIDE_EFFECTS (result) = 1;
400fbf9f 3290
3e4093b6
RS
3291 /* If we got the LHS in a different type for storing in,
3292 convert the result back to the nominal type of LHS
3293 so that the value we return always has the same type
3294 as the LHS argument. */
e855c5ce 3295
3e4093b6
RS
3296 if (olhstype == TREE_TYPE (result))
3297 return result;
3298 return convert_for_assignment (olhstype, result, _("assignment"),
3299 NULL_TREE, NULL_TREE, 0);
3300}
3301\f
3302/* Convert value RHS to type TYPE as preparation for an assignment
3303 to an lvalue of type TYPE.
3304 The real work of conversion is done by `convert'.
3305 The purpose of this function is to generate error messages
3306 for assignments that are not allowed in C.
3307 ERRTYPE is a string to use in error messages:
3308 "assignment", "return", etc. If it is null, this is parameter passing
3309 for a function call (and different error messages are output).
2f6e4e97 3310
3e4093b6
RS
3311 FUNNAME is the name of the function being called,
3312 as an IDENTIFIER_NODE, or null.
3313 PARMNUM is the number of the argument, for printing in error messages. */
cb3ca04e 3314
3e4093b6
RS
3315static tree
3316convert_for_assignment (tree type, tree rhs, const char *errtype,
3317 tree fundecl, tree funname, int parmnum)
3318{
3319 enum tree_code codel = TREE_CODE (type);
3320 tree rhstype;
3321 enum tree_code coder;
cb3ca04e 3322
3e4093b6
RS
3323 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
3324 /* Do not use STRIP_NOPS here. We do not want an enumerator
3325 whose value is 0 to count as a null pointer constant. */
3326 if (TREE_CODE (rhs) == NON_LVALUE_EXPR)
3327 rhs = TREE_OPERAND (rhs, 0);
3328
3329 if (TREE_CODE (TREE_TYPE (rhs)) == ARRAY_TYPE
3330 || TREE_CODE (TREE_TYPE (rhs)) == FUNCTION_TYPE)
3331 rhs = default_conversion (rhs);
3332 else if (optimize && TREE_CODE (rhs) == VAR_DECL)
3333 rhs = decl_constant_value_for_broken_optimization (rhs);
3334
3335 rhstype = TREE_TYPE (rhs);
3336 coder = TREE_CODE (rhstype);
3337
3338 if (coder == ERROR_MARK)
3339 return error_mark_node;
3340
3341 if (TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (rhstype))
400fbf9f 3342 {
3e4093b6
RS
3343 overflow_warning (rhs);
3344 /* Check for Objective-C protocols. This will automatically
3345 issue a warning if there are protocol violations. No need to
3346 use the return value. */
3347 if (c_dialect_objc ())
3348 objc_comptypes (type, rhstype, 0);
3349 return rhs;
400fbf9f 3350 }
3e4093b6
RS
3351
3352 if (coder == VOID_TYPE)
400fbf9f 3353 {
3e4093b6
RS
3354 error ("void value not ignored as it ought to be");
3355 return error_mark_node;
400fbf9f 3356 }
3e4093b6
RS
3357 /* A type converts to a reference to it.
3358 This code doesn't fully support references, it's just for the
3359 special case of va_start and va_copy. */
3360 if (codel == REFERENCE_TYPE
3361 && comptypes (TREE_TYPE (type), TREE_TYPE (rhs), COMPARE_STRICT) == 1)
400fbf9f 3362 {
3e4093b6 3363 if (!lvalue_p (rhs))
400fbf9f 3364 {
3e4093b6
RS
3365 error ("cannot pass rvalue to reference parameter");
3366 return error_mark_node;
400fbf9f 3367 }
3e4093b6
RS
3368 if (!c_mark_addressable (rhs))
3369 return error_mark_node;
3370 rhs = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (rhs)), rhs);
3371
3372 /* We already know that these two types are compatible, but they
3373 may not be exactly identical. In fact, `TREE_TYPE (type)' is
3374 likely to be __builtin_va_list and `TREE_TYPE (rhs)' is
3375 likely to be va_list, a typedef to __builtin_va_list, which
3376 is different enough that it will cause problems later. */
3377 if (TREE_TYPE (TREE_TYPE (rhs)) != TREE_TYPE (type))
3378 rhs = build1 (NOP_EXPR, build_pointer_type (TREE_TYPE (type)), rhs);
3379
3380 rhs = build1 (NOP_EXPR, type, rhs);
3381 return rhs;
400fbf9f 3382 }
3e4093b6
RS
3383 /* Some types can interconvert without explicit casts. */
3384 else if (codel == VECTOR_TYPE && coder == VECTOR_TYPE
3385 && ((*targetm.vector_opaque_p) (type)
3386 || (*targetm.vector_opaque_p) (rhstype)))
3387 return convert (type, rhs);
3388 /* Arithmetic types all interconvert, and enum is treated like int. */
3389 else if ((codel == INTEGER_TYPE || codel == REAL_TYPE
3390 || codel == ENUMERAL_TYPE || codel == COMPLEX_TYPE
3391 || codel == BOOLEAN_TYPE)
3392 && (coder == INTEGER_TYPE || coder == REAL_TYPE
3393 || coder == ENUMERAL_TYPE || coder == COMPLEX_TYPE
3394 || coder == BOOLEAN_TYPE))
3395 return convert_and_check (type, rhs);
400fbf9f 3396
3e4093b6
RS
3397 /* Conversion to a transparent union from its member types.
3398 This applies only to function arguments. */
3399 else if (codel == UNION_TYPE && TYPE_TRANSPARENT_UNION (type) && ! errtype)
400fbf9f 3400 {
3e4093b6
RS
3401 tree memb_types;
3402 tree marginal_memb_type = 0;
3403
3404 for (memb_types = TYPE_FIELDS (type); memb_types;
3405 memb_types = TREE_CHAIN (memb_types))
400fbf9f 3406 {
3e4093b6 3407 tree memb_type = TREE_TYPE (memb_types);
400fbf9f 3408
3e4093b6
RS
3409 if (comptypes (TYPE_MAIN_VARIANT (memb_type),
3410 TYPE_MAIN_VARIANT (rhstype), COMPARE_STRICT))
3411 break;
e58cd767 3412
3e4093b6
RS
3413 if (TREE_CODE (memb_type) != POINTER_TYPE)
3414 continue;
2f6e4e97 3415
3e4093b6
RS
3416 if (coder == POINTER_TYPE)
3417 {
3418 tree ttl = TREE_TYPE (memb_type);
3419 tree ttr = TREE_TYPE (rhstype);
400fbf9f 3420
3e4093b6
RS
3421 /* Any non-function converts to a [const][volatile] void *
3422 and vice versa; otherwise, targets must be the same.
3423 Meanwhile, the lhs target must have all the qualifiers of
3424 the rhs. */
3425 if (VOID_TYPE_P (ttl) || VOID_TYPE_P (ttr)
3426 || comp_target_types (memb_type, rhstype, 0))
3427 {
3428 /* If this type won't generate any warnings, use it. */
3429 if (TYPE_QUALS (ttl) == TYPE_QUALS (ttr)
3430 || ((TREE_CODE (ttr) == FUNCTION_TYPE
3431 && TREE_CODE (ttl) == FUNCTION_TYPE)
3432 ? ((TYPE_QUALS (ttl) | TYPE_QUALS (ttr))
3433 == TYPE_QUALS (ttr))
3434 : ((TYPE_QUALS (ttl) | TYPE_QUALS (ttr))
3435 == TYPE_QUALS (ttl))))
3436 break;
400fbf9f 3437
3e4093b6
RS
3438 /* Keep looking for a better type, but remember this one. */
3439 if (! marginal_memb_type)
3440 marginal_memb_type = memb_type;
3441 }
3442 }
82bde854 3443
3e4093b6
RS
3444 /* Can convert integer zero to any pointer type. */
3445 if (integer_zerop (rhs)
3446 || (TREE_CODE (rhs) == NOP_EXPR
3447 && integer_zerop (TREE_OPERAND (rhs, 0))))
3448 {
3449 rhs = null_pointer_node;
3450 break;
3451 }
3452 }
400fbf9f 3453
3e4093b6
RS
3454 if (memb_types || marginal_memb_type)
3455 {
3456 if (! memb_types)
3457 {
3458 /* We have only a marginally acceptable member type;
3459 it needs a warning. */
3460 tree ttl = TREE_TYPE (marginal_memb_type);
3461 tree ttr = TREE_TYPE (rhstype);
714a0864 3462
3e4093b6
RS
3463 /* Const and volatile mean something different for function
3464 types, so the usual warnings are not appropriate. */
3465 if (TREE_CODE (ttr) == FUNCTION_TYPE
3466 && TREE_CODE (ttl) == FUNCTION_TYPE)
3467 {
3468 /* Because const and volatile on functions are
3469 restrictions that say the function will not do
3470 certain things, it is okay to use a const or volatile
3471 function where an ordinary one is wanted, but not
3472 vice-versa. */
3473 if (TYPE_QUALS (ttl) & ~TYPE_QUALS (ttr))
3474 warn_for_assignment ("%s makes qualified function pointer from unqualified",
3475 errtype, funname, parmnum);
3476 }
3477 else if (TYPE_QUALS (ttr) & ~TYPE_QUALS (ttl))
3478 warn_for_assignment ("%s discards qualifiers from pointer target type",
3479 errtype, funname,
3480 parmnum);
3481 }
400fbf9f 3482
3e4093b6
RS
3483 if (pedantic && ! DECL_IN_SYSTEM_HEADER (fundecl))
3484 pedwarn ("ISO C prohibits argument conversion to union type");
0e7c47fa 3485
3e4093b6
RS
3486 return build1 (NOP_EXPR, type, rhs);
3487 }
0e7c47fa
RK
3488 }
3489
3e4093b6
RS
3490 /* Conversions among pointers */
3491 else if ((codel == POINTER_TYPE || codel == REFERENCE_TYPE)
3492 && (coder == codel))
400fbf9f 3493 {
3e4093b6
RS
3494 tree ttl = TREE_TYPE (type);
3495 tree ttr = TREE_TYPE (rhstype);
3496 bool is_opaque_pointer;
264fa2db 3497 int target_cmp = 0; /* Cache comp_target_types () result. */
400fbf9f 3498
3e4093b6
RS
3499 /* Opaque pointers are treated like void pointers. */
3500 is_opaque_pointer = ((*targetm.vector_opaque_p) (type)
3501 || (*targetm.vector_opaque_p) (rhstype))
3502 && TREE_CODE (ttl) == VECTOR_TYPE
3503 && TREE_CODE (ttr) == VECTOR_TYPE;
400fbf9f 3504
3e4093b6
RS
3505 /* Any non-function converts to a [const][volatile] void *
3506 and vice versa; otherwise, targets must be the same.
3507 Meanwhile, the lhs target must have all the qualifiers of the rhs. */
3508 if (VOID_TYPE_P (ttl) || VOID_TYPE_P (ttr)
264fa2db 3509 || (target_cmp = comp_target_types (type, rhstype, 0))
3e4093b6
RS
3510 || is_opaque_pointer
3511 || (c_common_unsigned_type (TYPE_MAIN_VARIANT (ttl))
3512 == c_common_unsigned_type (TYPE_MAIN_VARIANT (ttr))))
3513 {
3514 if (pedantic
3515 && ((VOID_TYPE_P (ttl) && TREE_CODE (ttr) == FUNCTION_TYPE)
3516 ||
3517 (VOID_TYPE_P (ttr)
3518 /* Check TREE_CODE to catch cases like (void *) (char *) 0
3519 which are not ANSI null ptr constants. */
3520 && (!integer_zerop (rhs) || TREE_CODE (rhs) == NOP_EXPR)
3521 && TREE_CODE (ttl) == FUNCTION_TYPE)))
3522 warn_for_assignment ("ISO C forbids %s between function pointer and `void *'",
3523 errtype, funname, parmnum);
3524 /* Const and volatile mean something different for function types,
3525 so the usual warnings are not appropriate. */
3526 else if (TREE_CODE (ttr) != FUNCTION_TYPE
3527 && TREE_CODE (ttl) != FUNCTION_TYPE)
3528 {
3529 if (TYPE_QUALS (ttr) & ~TYPE_QUALS (ttl))
3530 warn_for_assignment ("%s discards qualifiers from pointer target type",
3531 errtype, funname, parmnum);
3532 /* If this is not a case of ignoring a mismatch in signedness,
3533 no warning. */
3534 else if (VOID_TYPE_P (ttl) || VOID_TYPE_P (ttr)
264fa2db 3535 || target_cmp)
3e4093b6
RS
3536 ;
3537 /* If there is a mismatch, do warn. */
3538 else if (pedantic)
3539 warn_for_assignment ("pointer targets in %s differ in signedness",
3540 errtype, funname, parmnum);
3541 }
3542 else if (TREE_CODE (ttl) == FUNCTION_TYPE
3543 && TREE_CODE (ttr) == FUNCTION_TYPE)
3544 {
3545 /* Because const and volatile on functions are restrictions
3546 that say the function will not do certain things,
3547 it is okay to use a const or volatile function
3548 where an ordinary one is wanted, but not vice-versa. */
3549 if (TYPE_QUALS (ttl) & ~TYPE_QUALS (ttr))
3550 warn_for_assignment ("%s makes qualified function pointer from unqualified",
3551 errtype, funname, parmnum);
3552 }
3553 }
3554 else
3555 warn_for_assignment ("%s from incompatible pointer type",
3556 errtype, funname, parmnum);
3557 return convert (type, rhs);
3558 }
3559 else if (codel == POINTER_TYPE && coder == INTEGER_TYPE)
400fbf9f 3560 {
3e4093b6
RS
3561 /* An explicit constant 0 can convert to a pointer,
3562 or one that results from arithmetic, even including
3563 a cast to integer type. */
3564 if (! (TREE_CODE (rhs) == INTEGER_CST && integer_zerop (rhs))
3565 &&
3566 ! (TREE_CODE (rhs) == NOP_EXPR
3567 && TREE_CODE (TREE_TYPE (rhs)) == INTEGER_TYPE
3568 && TREE_CODE (TREE_OPERAND (rhs, 0)) == INTEGER_CST
3569 && integer_zerop (TREE_OPERAND (rhs, 0))))
400fbf9f 3570 {
3e4093b6
RS
3571 warn_for_assignment ("%s makes pointer from integer without a cast",
3572 errtype, funname, parmnum);
3573 return convert (type, rhs);
400fbf9f 3574 }
3e4093b6 3575 return null_pointer_node;
400fbf9f 3576 }
3e4093b6 3577 else if (codel == INTEGER_TYPE && coder == POINTER_TYPE)
400fbf9f 3578 {
3e4093b6
RS
3579 warn_for_assignment ("%s makes integer from pointer without a cast",
3580 errtype, funname, parmnum);
3581 return convert (type, rhs);
3582 }
3583 else if (codel == BOOLEAN_TYPE && coder == POINTER_TYPE)
3584 return convert (type, rhs);
400fbf9f 3585
3e4093b6
RS
3586 if (!errtype)
3587 {
3588 if (funname)
400fbf9f 3589 {
3e4093b6 3590 tree selector = objc_message_selector ();
805f961c 3591
3e4093b6
RS
3592 if (selector && parmnum > 2)
3593 error ("incompatible type for argument %d of `%s'",
3594 parmnum - 2, IDENTIFIER_POINTER (selector));
3595 else
3596 error ("incompatible type for argument %d of `%s'",
3597 parmnum, IDENTIFIER_POINTER (funname));
400fbf9f 3598 }
3e4093b6
RS
3599 else
3600 error ("incompatible type for argument %d of indirect function call",
3601 parmnum);
400fbf9f
JW
3602 }
3603 else
3e4093b6 3604 error ("incompatible types in %s", errtype);
53b01f59 3605
3e4093b6
RS
3606 return error_mark_node;
3607}
53b01f59 3608
3e4093b6 3609/* Convert VALUE for assignment into inlined parameter PARM. */
400fbf9f 3610
3e4093b6
RS
3611tree
3612c_convert_parm_for_inlining (tree parm, tree value, tree fn)
3613{
3614 tree ret, type;
400fbf9f 3615
3e4093b6
RS
3616 /* If FN was prototyped, the value has been converted already
3617 in convert_arguments. */
3618 if (! value || TYPE_ARG_TYPES (TREE_TYPE (fn)))
3619 return value;
f5963e61 3620
3e4093b6
RS
3621 type = TREE_TYPE (parm);
3622 ret = convert_for_assignment (type, value,
3623 (char *) 0 /* arg passing */, fn,
3624 DECL_NAME (fn), 0);
61f71b34 3625 if (targetm.calls.promote_prototypes (TREE_TYPE (fn))
3e4093b6
RS
3626 && INTEGRAL_TYPE_P (type)
3627 && (TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node)))
3628 ret = default_conversion (ret);
3629 return ret;
3630}
af702de8 3631
3e4093b6
RS
3632/* Print a warning using MSGID.
3633 It gets OPNAME as its one parameter.
3634 if OPNAME is null and ARGNUM is 0, it is replaced by "passing arg of `FUNCTION'".
3635 Otherwise if OPNAME is null, it is replaced by "passing arg ARGNUM of `FUNCTION'".
3636 FUNCTION and ARGNUM are handled specially if we are building an
3637 Objective-C selector. */
cd6311ef 3638
3e4093b6
RS
3639static void
3640warn_for_assignment (const char *msgid, const char *opname, tree function,
3641 int argnum)
3642{
3643 if (opname == 0)
3644 {
3645 tree selector = objc_message_selector ();
3646 char * new_opname;
af702de8 3647
3e4093b6
RS
3648 if (selector && argnum > 2)
3649 {
3650 function = selector;
3651 argnum -= 2;
400fbf9f 3652 }
3e4093b6 3653 if (argnum == 0)
73a73768 3654 {
3e4093b6
RS
3655 if (function)
3656 {
3657 /* Function name is known; supply it. */
3658 const char *const argstring = _("passing arg of `%s'");
703ad42b
KG
3659 new_opname = alloca (IDENTIFIER_LENGTH (function)
3660 + strlen (argstring) + 1 + 1);
3e4093b6
RS
3661 sprintf (new_opname, argstring,
3662 IDENTIFIER_POINTER (function));
3663 }
3664 else
3665 {
3666 /* Function name unknown (call through ptr). */
3667 const char *const argnofun = _("passing arg of pointer to function");
703ad42b 3668 new_opname = alloca (strlen (argnofun) + 1 + 1);
3e4093b6
RS
3669 sprintf (new_opname, argnofun);
3670 }
73a73768 3671 }
3e4093b6 3672 else if (function)
10d5caec 3673 {
3e4093b6
RS
3674 /* Function name is known; supply it. */
3675 const char *const argstring = _("passing arg %d of `%s'");
703ad42b
KG
3676 new_opname = alloca (IDENTIFIER_LENGTH (function)
3677 + strlen (argstring) + 1 + 25 /*%d*/ + 1);
3e4093b6
RS
3678 sprintf (new_opname, argstring, argnum,
3679 IDENTIFIER_POINTER (function));
3680 }
3681 else
3682 {
3683 /* Function name unknown (call through ptr); just give arg number. */
3684 const char *const argnofun = _("passing arg %d of pointer to function");
703ad42b 3685 new_opname = alloca (strlen (argnofun) + 1 + 25 /*%d*/ + 1);
3e4093b6 3686 sprintf (new_opname, argnofun, argnum);
10d5caec 3687 }
3e4093b6 3688 opname = new_opname;
400fbf9f 3689 }
3e4093b6 3690 pedwarn (msgid, opname);
400fbf9f 3691}
3e4093b6
RS
3692\f
3693/* If VALUE is a compound expr all of whose expressions are constant, then
3694 return its value. Otherwise, return error_mark_node.
15b732b2 3695
3e4093b6
RS
3696 This is for handling COMPOUND_EXPRs as initializer elements
3697 which is allowed with a warning when -pedantic is specified. */
15b732b2 3698
3e4093b6
RS
3699static tree
3700valid_compound_expr_initializer (tree value, tree endtype)
3701{
3702 if (TREE_CODE (value) == COMPOUND_EXPR)
3703 {
3704 if (valid_compound_expr_initializer (TREE_OPERAND (value, 0), endtype)
3705 == error_mark_node)
3706 return error_mark_node;
3707 return valid_compound_expr_initializer (TREE_OPERAND (value, 1),
3708 endtype);
3709 }
3710 else if (! TREE_CONSTANT (value)
3711 && ! initializer_constant_valid_p (value, endtype))
3712 return error_mark_node;
3713 else
3714 return value;
15b732b2 3715}
400fbf9f 3716\f
3e4093b6
RS
3717/* Perform appropriate conversions on the initial value of a variable,
3718 store it in the declaration DECL,
3719 and print any error messages that are appropriate.
3720 If the init is invalid, store an ERROR_MARK. */
400fbf9f 3721
3e4093b6
RS
3722void
3723store_init_value (tree decl, tree init)
400fbf9f 3724{
3e4093b6 3725 tree value, type;
400fbf9f 3726
3e4093b6 3727 /* If variable's type was invalidly declared, just ignore it. */
400fbf9f 3728
3e4093b6
RS
3729 type = TREE_TYPE (decl);
3730 if (TREE_CODE (type) == ERROR_MARK)
3731 return;
400fbf9f 3732
3e4093b6 3733 /* Digest the specified initializer into an expression. */
400fbf9f 3734
3e4093b6 3735 value = digest_init (type, init, TREE_STATIC (decl));
400fbf9f 3736
3e4093b6 3737 /* Store the expression if valid; else report error. */
400fbf9f 3738
3e4093b6
RS
3739 if (warn_traditional && !in_system_header
3740 && AGGREGATE_TYPE_P (TREE_TYPE (decl)) && ! TREE_STATIC (decl))
3741 warning ("traditional C rejects automatic aggregate initialization");
2f6e4e97 3742
3e4093b6 3743 DECL_INITIAL (decl) = value;
400fbf9f 3744
3e4093b6
RS
3745 /* ANSI wants warnings about out-of-range constant initializers. */
3746 STRIP_TYPE_NOPS (value);
3747 constant_expression_warning (value);
400fbf9f 3748
3e4093b6
RS
3749 /* Check if we need to set array size from compound literal size. */
3750 if (TREE_CODE (type) == ARRAY_TYPE
3751 && TYPE_DOMAIN (type) == 0
3752 && value != error_mark_node)
400fbf9f 3753 {
3e4093b6
RS
3754 tree inside_init = init;
3755
3756 if (TREE_CODE (init) == NON_LVALUE_EXPR)
3757 inside_init = TREE_OPERAND (init, 0);
3758 inside_init = fold (inside_init);
3759
3760 if (TREE_CODE (inside_init) == COMPOUND_LITERAL_EXPR)
3761 {
3762 tree decl = COMPOUND_LITERAL_EXPR_DECL (inside_init);
3763
3764 if (TYPE_DOMAIN (TREE_TYPE (decl)))
3765 {
3766 /* For int foo[] = (int [3]){1}; we need to set array size
3767 now since later on array initializer will be just the
3768 brace enclosed list of the compound literal. */
3769 TYPE_DOMAIN (type) = TYPE_DOMAIN (TREE_TYPE (decl));
3770 layout_type (type);
3771 layout_decl (decl, 0);
3772 }
3773 }
400fbf9f 3774 }
3e4093b6
RS
3775}
3776\f
3777/* Methods for storing and printing names for error messages. */
400fbf9f 3778
3e4093b6
RS
3779/* Implement a spelling stack that allows components of a name to be pushed
3780 and popped. Each element on the stack is this structure. */
400fbf9f 3781
3e4093b6
RS
3782struct spelling
3783{
3784 int kind;
3785 union
400fbf9f 3786 {
3e4093b6
RS
3787 int i;
3788 const char *s;
3789 } u;
3790};
2f6e4e97 3791
3e4093b6
RS
3792#define SPELLING_STRING 1
3793#define SPELLING_MEMBER 2
3794#define SPELLING_BOUNDS 3
400fbf9f 3795
3e4093b6
RS
3796static struct spelling *spelling; /* Next stack element (unused). */
3797static struct spelling *spelling_base; /* Spelling stack base. */
3798static int spelling_size; /* Size of the spelling stack. */
400fbf9f 3799
3e4093b6
RS
3800/* Macros to save and restore the spelling stack around push_... functions.
3801 Alternative to SAVE_SPELLING_STACK. */
400fbf9f 3802
3e4093b6
RS
3803#define SPELLING_DEPTH() (spelling - spelling_base)
3804#define RESTORE_SPELLING_DEPTH(DEPTH) (spelling = spelling_base + (DEPTH))
400fbf9f 3805
3e4093b6
RS
3806/* Push an element on the spelling stack with type KIND and assign VALUE
3807 to MEMBER. */
400fbf9f 3808
3e4093b6
RS
3809#define PUSH_SPELLING(KIND, VALUE, MEMBER) \
3810{ \
3811 int depth = SPELLING_DEPTH (); \
3812 \
3813 if (depth >= spelling_size) \
3814 { \
3815 spelling_size += 10; \
3816 if (spelling_base == 0) \
703ad42b 3817 spelling_base = xmalloc (spelling_size * sizeof (struct spelling)); \
3e4093b6 3818 else \
703ad42b
KG
3819 spelling_base = xrealloc (spelling_base, \
3820 spelling_size * sizeof (struct spelling)); \
3e4093b6
RS
3821 RESTORE_SPELLING_DEPTH (depth); \
3822 } \
3823 \
3824 spelling->kind = (KIND); \
3825 spelling->MEMBER = (VALUE); \
3826 spelling++; \
3827}
400fbf9f 3828
3e4093b6 3829/* Push STRING on the stack. Printed literally. */
400fbf9f 3830
3e4093b6
RS
3831static void
3832push_string (const char *string)
3833{
3834 PUSH_SPELLING (SPELLING_STRING, string, u.s);
3835}
400fbf9f 3836
3e4093b6 3837/* Push a member name on the stack. Printed as '.' STRING. */
400fbf9f 3838
3e4093b6
RS
3839static void
3840push_member_name (tree decl)
3841{
3842 const char *const string
3843 = DECL_NAME (decl) ? IDENTIFIER_POINTER (DECL_NAME (decl)) : "<anonymous>";
3844 PUSH_SPELLING (SPELLING_MEMBER, string, u.s);
3845}
400fbf9f 3846
3e4093b6 3847/* Push an array bounds on the stack. Printed as [BOUNDS]. */
400fbf9f 3848
3e4093b6
RS
3849static void
3850push_array_bounds (int bounds)
3851{
3852 PUSH_SPELLING (SPELLING_BOUNDS, bounds, u.i);
3853}
bb58bec5 3854
3e4093b6 3855/* Compute the maximum size in bytes of the printed spelling. */
400fbf9f 3856
3e4093b6
RS
3857static int
3858spelling_length (void)
3859{
3860 int size = 0;
3861 struct spelling *p;
400fbf9f 3862
3e4093b6
RS
3863 for (p = spelling_base; p < spelling; p++)
3864 {
3865 if (p->kind == SPELLING_BOUNDS)
3866 size += 25;
3867 else
3868 size += strlen (p->u.s) + 1;
3869 }
3870
3871 return size;
400fbf9f 3872}
400fbf9f 3873
3e4093b6 3874/* Print the spelling to BUFFER and return it. */
400fbf9f 3875
3e4093b6
RS
3876static char *
3877print_spelling (char *buffer)
400fbf9f 3878{
3e4093b6
RS
3879 char *d = buffer;
3880 struct spelling *p;
400fbf9f 3881
3e4093b6
RS
3882 for (p = spelling_base; p < spelling; p++)
3883 if (p->kind == SPELLING_BOUNDS)
3884 {
3885 sprintf (d, "[%d]", p->u.i);
3886 d += strlen (d);
3887 }
3888 else
3889 {
3890 const char *s;
3891 if (p->kind == SPELLING_MEMBER)
3892 *d++ = '.';
3893 for (s = p->u.s; (*d = *s++); d++)
3894 ;
3895 }
3896 *d++ = '\0';
3897 return buffer;
3898}
400fbf9f 3899
3e4093b6
RS
3900/* Issue an error message for a bad initializer component.
3901 MSGID identifies the message.
3902 The component name is taken from the spelling stack. */
400fbf9f 3903
3e4093b6
RS
3904void
3905error_init (const char *msgid)
3906{
3907 char *ofwhat;
400fbf9f 3908
3e4093b6 3909 error ("%s", _(msgid));
703ad42b 3910 ofwhat = print_spelling (alloca (spelling_length () + 1));
3e4093b6
RS
3911 if (*ofwhat)
3912 error ("(near initialization for `%s')", ofwhat);
3913}
400fbf9f 3914
3e4093b6
RS
3915/* Issue a pedantic warning for a bad initializer component.
3916 MSGID identifies the message.
3917 The component name is taken from the spelling stack. */
400fbf9f 3918
3e4093b6
RS
3919void
3920pedwarn_init (const char *msgid)
3921{
3922 char *ofwhat;
9f720c3e 3923
3e4093b6 3924 pedwarn ("%s", _(msgid));
703ad42b 3925 ofwhat = print_spelling (alloca (spelling_length () + 1));
3e4093b6
RS
3926 if (*ofwhat)
3927 pedwarn ("(near initialization for `%s')", ofwhat);
3928}
9f720c3e 3929
3e4093b6
RS
3930/* Issue a warning for a bad initializer component.
3931 MSGID identifies the message.
3932 The component name is taken from the spelling stack. */
61179109 3933
3e4093b6
RS
3934static void
3935warning_init (const char *msgid)
3936{
3937 char *ofwhat;
7e842ef8 3938
3e4093b6 3939 warning ("%s", _(msgid));
703ad42b 3940 ofwhat = print_spelling (alloca (spelling_length () + 1));
3e4093b6
RS
3941 if (*ofwhat)
3942 warning ("(near initialization for `%s')", ofwhat);
3943}
3944\f
3945/* Digest the parser output INIT as an initializer for type TYPE.
3946 Return a C expression of type TYPE to represent the initial value.
7e842ef8 3947
3e4093b6
RS
3948 REQUIRE_CONSTANT requests an error if non-constant initializers or
3949 elements are seen. */
7e842ef8 3950
3e4093b6
RS
3951static tree
3952digest_init (tree type, tree init, int require_constant)
3953{
3954 enum tree_code code = TREE_CODE (type);
3955 tree inside_init = init;
7e842ef8 3956
3e4093b6
RS
3957 if (type == error_mark_node
3958 || init == error_mark_node
3959 || TREE_TYPE (init) == error_mark_node)
3960 return error_mark_node;
7e842ef8 3961
3e4093b6
RS
3962 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
3963 /* Do not use STRIP_NOPS here. We do not want an enumerator
3964 whose value is 0 to count as a null pointer constant. */
3965 if (TREE_CODE (init) == NON_LVALUE_EXPR)
3966 inside_init = TREE_OPERAND (init, 0);
7e842ef8 3967
3e4093b6 3968 inside_init = fold (inside_init);
7e842ef8 3969
3e4093b6
RS
3970 /* Initialization of an array of chars from a string constant
3971 optionally enclosed in braces. */
7e842ef8 3972
3e4093b6
RS
3973 if (code == ARRAY_TYPE)
3974 {
3975 tree typ1 = TYPE_MAIN_VARIANT (TREE_TYPE (type));
3976 if ((typ1 == char_type_node
3977 || typ1 == signed_char_type_node
3978 || typ1 == unsigned_char_type_node
3979 || typ1 == unsigned_wchar_type_node
3980 || typ1 == signed_wchar_type_node)
3981 && ((inside_init && TREE_CODE (inside_init) == STRING_CST)))
7e842ef8 3982 {
3e4093b6
RS
3983 if (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (inside_init)),
3984 TYPE_MAIN_VARIANT (type), COMPARE_STRICT))
3985 return inside_init;
7e842ef8 3986
3e4093b6
RS
3987 if ((TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (inside_init)))
3988 != char_type_node)
3989 && TYPE_PRECISION (typ1) == TYPE_PRECISION (char_type_node))
3990 {
3991 error_init ("char-array initialized from wide string");
3992 return error_mark_node;
3993 }
3994 if ((TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (inside_init)))
3995 == char_type_node)
3996 && TYPE_PRECISION (typ1) != TYPE_PRECISION (char_type_node))
3997 {
3998 error_init ("int-array initialized from non-wide string");
3999 return error_mark_node;
7e842ef8 4000 }
2f6e4e97 4001
3e4093b6
RS
4002 TREE_TYPE (inside_init) = type;
4003 if (TYPE_DOMAIN (type) != 0
4004 && TYPE_SIZE (type) != 0
4005 && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST
4006 /* Subtract 1 (or sizeof (wchar_t))
4007 because it's ok to ignore the terminating null char
4008 that is counted in the length of the constant. */
4009 && 0 > compare_tree_int (TYPE_SIZE_UNIT (type),
4010 TREE_STRING_LENGTH (inside_init)
4011 - ((TYPE_PRECISION (typ1)
4012 != TYPE_PRECISION (char_type_node))
4013 ? (TYPE_PRECISION (wchar_type_node)
4014 / BITS_PER_UNIT)
4015 : 1)))
4016 pedwarn_init ("initializer-string for array of chars is too long");
7e842ef8 4017
3e4093b6 4018 return inside_init;
7e842ef8
PE
4019 }
4020 }
4021
3e4093b6
RS
4022 /* Build a VECTOR_CST from a *constant* vector constructor. If the
4023 vector constructor is not constant (e.g. {1,2,3,foo()}) then punt
4024 below and handle as a constructor. */
4025 if (code == VECTOR_TYPE
4026 && comptypes (TREE_TYPE (inside_init), type, COMPARE_STRICT)
4027 && TREE_CONSTANT (inside_init))
4028 {
4029 if (TREE_CODE (inside_init) == VECTOR_CST
4030 && comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (inside_init)),
4031 TYPE_MAIN_VARIANT (type),
4032 COMPARE_STRICT))
4033 return inside_init;
4034 else
4035 return build_vector (type, CONSTRUCTOR_ELTS (inside_init));
4036 }
6035d635 4037
3e4093b6
RS
4038 /* Any type can be initialized
4039 from an expression of the same type, optionally with braces. */
400fbf9f 4040
3e4093b6
RS
4041 if (inside_init && TREE_TYPE (inside_init) != 0
4042 && (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (inside_init)),
4043 TYPE_MAIN_VARIANT (type), COMPARE_STRICT)
4044 || (code == ARRAY_TYPE
4045 && comptypes (TREE_TYPE (inside_init), type, COMPARE_STRICT))
4046 || (code == VECTOR_TYPE
4047 && comptypes (TREE_TYPE (inside_init), type, COMPARE_STRICT))
4048 || (code == POINTER_TYPE
4049 && (TREE_CODE (TREE_TYPE (inside_init)) == ARRAY_TYPE
4050 || TREE_CODE (TREE_TYPE (inside_init)) == FUNCTION_TYPE)
4051 && comptypes (TREE_TYPE (TREE_TYPE (inside_init)),
4052 TREE_TYPE (type), COMPARE_STRICT))))
4053 {
4054 if (code == POINTER_TYPE)
4055 inside_init = default_function_array_conversion (inside_init);
bae39a73
NS
4056
4057 if (code == VECTOR_TYPE)
4058 /* Although the types are compatible, we may require a
4059 conversion. */
4060 inside_init = convert (type, inside_init);
3e4093b6
RS
4061
4062 if (require_constant && !flag_isoc99
4063 && TREE_CODE (inside_init) == COMPOUND_LITERAL_EXPR)
400fbf9f 4064 {
3e4093b6
RS
4065 /* As an extension, allow initializing objects with static storage
4066 duration with compound literals (which are then treated just as
4067 the brace enclosed list they contain). */
4068 tree decl = COMPOUND_LITERAL_EXPR_DECL (inside_init);
4069 inside_init = DECL_INITIAL (decl);
400fbf9f 4070 }
3e4093b6
RS
4071
4072 if (code == ARRAY_TYPE && TREE_CODE (inside_init) != STRING_CST
4073 && TREE_CODE (inside_init) != CONSTRUCTOR)
400fbf9f 4074 {
3e4093b6
RS
4075 error_init ("array initialized from non-constant array expression");
4076 return error_mark_node;
400fbf9f 4077 }
400fbf9f 4078
3e4093b6
RS
4079 if (optimize && TREE_CODE (inside_init) == VAR_DECL)
4080 inside_init = decl_constant_value_for_broken_optimization (inside_init);
2f6e4e97 4081
3e4093b6
RS
4082 /* Compound expressions can only occur here if -pedantic or
4083 -pedantic-errors is specified. In the later case, we always want
4084 an error. In the former case, we simply want a warning. */
4085 if (require_constant && pedantic
4086 && TREE_CODE (inside_init) == COMPOUND_EXPR)
4087 {
4088 inside_init
4089 = valid_compound_expr_initializer (inside_init,
4090 TREE_TYPE (inside_init));
4091 if (inside_init == error_mark_node)
4092 error_init ("initializer element is not constant");
2f6e4e97 4093 else
3e4093b6
RS
4094 pedwarn_init ("initializer element is not constant");
4095 if (flag_pedantic_errors)
4096 inside_init = error_mark_node;
4097 }
4098 else if (require_constant
4099 && (!TREE_CONSTANT (inside_init)
4100 /* This test catches things like `7 / 0' which
4101 result in an expression for which TREE_CONSTANT
4102 is true, but which is not actually something
4103 that is a legal constant. We really should not
4104 be using this function, because it is a part of
4105 the back-end. Instead, the expression should
4106 already have been turned into ERROR_MARK_NODE. */
4107 || !initializer_constant_valid_p (inside_init,
4108 TREE_TYPE (inside_init))))
4109 {
4110 error_init ("initializer element is not constant");
4111 inside_init = error_mark_node;
8b40563c 4112 }
f735a153 4113
3e4093b6
RS
4114 return inside_init;
4115 }
f735a153 4116
3e4093b6 4117 /* Handle scalar types, including conversions. */
400fbf9f 4118
3e4093b6
RS
4119 if (code == INTEGER_TYPE || code == REAL_TYPE || code == POINTER_TYPE
4120 || code == ENUMERAL_TYPE || code == BOOLEAN_TYPE || code == COMPLEX_TYPE)
400fbf9f 4121 {
3e4093b6
RS
4122 /* Note that convert_for_assignment calls default_conversion
4123 for arrays and functions. We must not call it in the
4124 case where inside_init is a null pointer constant. */
4125 inside_init
4126 = convert_for_assignment (type, init, _("initialization"),
4127 NULL_TREE, NULL_TREE, 0);
2f6e4e97 4128
3e4093b6 4129 if (require_constant && ! TREE_CONSTANT (inside_init))
400fbf9f 4130 {
3e4093b6
RS
4131 error_init ("initializer element is not constant");
4132 inside_init = error_mark_node;
400fbf9f 4133 }
3e4093b6
RS
4134 else if (require_constant
4135 && initializer_constant_valid_p (inside_init, TREE_TYPE (inside_init)) == 0)
400fbf9f 4136 {
3e4093b6
RS
4137 error_init ("initializer element is not computable at load time");
4138 inside_init = error_mark_node;
400fbf9f 4139 }
3e4093b6
RS
4140
4141 return inside_init;
400fbf9f 4142 }
d9fc6069 4143
3e4093b6 4144 /* Come here only for records and arrays. */
d9fc6069 4145
3e4093b6 4146 if (COMPLETE_TYPE_P (type) && TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
d9fc6069 4147 {
3e4093b6
RS
4148 error_init ("variable-sized object may not be initialized");
4149 return error_mark_node;
d9fc6069 4150 }
3e4093b6
RS
4151
4152 error_init ("invalid initializer");
4153 return error_mark_node;
d9fc6069 4154}
400fbf9f 4155\f
3e4093b6 4156/* Handle initializers that use braces. */
400fbf9f 4157
3e4093b6
RS
4158/* Type of object we are accumulating a constructor for.
4159 This type is always a RECORD_TYPE, UNION_TYPE or ARRAY_TYPE. */
4160static tree constructor_type;
400fbf9f 4161
3e4093b6
RS
4162/* For a RECORD_TYPE or UNION_TYPE, this is the chain of fields
4163 left to fill. */
4164static tree constructor_fields;
400fbf9f 4165
3e4093b6
RS
4166/* For an ARRAY_TYPE, this is the specified index
4167 at which to store the next element we get. */
4168static tree constructor_index;
400fbf9f 4169
3e4093b6
RS
4170/* For an ARRAY_TYPE, this is the maximum index. */
4171static tree constructor_max_index;
400fbf9f 4172
3e4093b6
RS
4173/* For a RECORD_TYPE, this is the first field not yet written out. */
4174static tree constructor_unfilled_fields;
400fbf9f 4175
3e4093b6
RS
4176/* For an ARRAY_TYPE, this is the index of the first element
4177 not yet written out. */
4178static tree constructor_unfilled_index;
895ea614 4179
3e4093b6
RS
4180/* In a RECORD_TYPE, the byte index of the next consecutive field.
4181 This is so we can generate gaps between fields, when appropriate. */
4182static tree constructor_bit_index;
10d5caec 4183
3e4093b6
RS
4184/* If we are saving up the elements rather than allocating them,
4185 this is the list of elements so far (in reverse order,
4186 most recent first). */
4187static tree constructor_elements;
ad47f1e5 4188
3e4093b6
RS
4189/* 1 if constructor should be incrementally stored into a constructor chain,
4190 0 if all the elements should be kept in AVL tree. */
4191static int constructor_incremental;
ad47f1e5 4192
3e4093b6
RS
4193/* 1 if so far this constructor's elements are all compile-time constants. */
4194static int constructor_constant;
ad47f1e5 4195
3e4093b6
RS
4196/* 1 if so far this constructor's elements are all valid address constants. */
4197static int constructor_simple;
ad47f1e5 4198
3e4093b6
RS
4199/* 1 if this constructor is erroneous so far. */
4200static int constructor_erroneous;
d45cf215 4201
3e4093b6
RS
4202/* Structure for managing pending initializer elements, organized as an
4203 AVL tree. */
d45cf215 4204
3e4093b6 4205struct init_node
d45cf215 4206{
3e4093b6
RS
4207 struct init_node *left, *right;
4208 struct init_node *parent;
4209 int balance;
4210 tree purpose;
4211 tree value;
d45cf215
RS
4212};
4213
3e4093b6
RS
4214/* Tree of pending elements at this constructor level.
4215 These are elements encountered out of order
4216 which belong at places we haven't reached yet in actually
4217 writing the output.
4218 Will never hold tree nodes across GC runs. */
4219static struct init_node *constructor_pending_elts;
d45cf215 4220
3e4093b6
RS
4221/* The SPELLING_DEPTH of this constructor. */
4222static int constructor_depth;
d45cf215 4223
3e4093b6
RS
4224/* 0 if implicitly pushing constructor levels is allowed. */
4225int constructor_no_implicit = 0; /* 0 for C; 1 for some other languages. */
d45cf215 4226
3e4093b6
RS
4227static int require_constant_value;
4228static int require_constant_elements;
d45cf215 4229
3e4093b6
RS
4230/* DECL node for which an initializer is being read.
4231 0 means we are reading a constructor expression
4232 such as (struct foo) {...}. */
4233static tree constructor_decl;
d45cf215 4234
3e4093b6
RS
4235/* start_init saves the ASMSPEC arg here for really_start_incremental_init. */
4236static const char *constructor_asmspec;
d45cf215 4237
3e4093b6
RS
4238/* Nonzero if this is an initializer for a top-level decl. */
4239static int constructor_top_level;
d45cf215 4240
3e4093b6
RS
4241/* Nonzero if there were any member designators in this initializer. */
4242static int constructor_designated;
d45cf215 4243
3e4093b6
RS
4244/* Nesting depth of designator list. */
4245static int designator_depth;
d45cf215 4246
3e4093b6
RS
4247/* Nonzero if there were diagnosed errors in this designator list. */
4248static int designator_errorneous;
d45cf215 4249
3e4093b6
RS
4250\f
4251/* This stack has a level for each implicit or explicit level of
4252 structuring in the initializer, including the outermost one. It
4253 saves the values of most of the variables above. */
d45cf215 4254
3e4093b6
RS
4255struct constructor_range_stack;
4256
4257struct constructor_stack
d45cf215 4258{
3e4093b6
RS
4259 struct constructor_stack *next;
4260 tree type;
4261 tree fields;
4262 tree index;
4263 tree max_index;
4264 tree unfilled_index;
4265 tree unfilled_fields;
4266 tree bit_index;
4267 tree elements;
4268 struct init_node *pending_elts;
4269 int offset;
4270 int depth;
4271 /* If nonzero, this value should replace the entire
4272 constructor at this level. */
4273 tree replacement_value;
4274 struct constructor_range_stack *range_stack;
4275 char constant;
4276 char simple;
4277 char implicit;
4278 char erroneous;
4279 char outer;
4280 char incremental;
4281 char designated;
4282};
d45cf215 4283
3e4093b6 4284struct constructor_stack *constructor_stack;
d45cf215 4285
3e4093b6
RS
4286/* This stack represents designators from some range designator up to
4287 the last designator in the list. */
d45cf215 4288
3e4093b6
RS
4289struct constructor_range_stack
4290{
4291 struct constructor_range_stack *next, *prev;
4292 struct constructor_stack *stack;
4293 tree range_start;
4294 tree index;
4295 tree range_end;
4296 tree fields;
4297};
d45cf215 4298
3e4093b6 4299struct constructor_range_stack *constructor_range_stack;
d45cf215 4300
3e4093b6
RS
4301/* This stack records separate initializers that are nested.
4302 Nested initializers can't happen in ANSI C, but GNU C allows them
4303 in cases like { ... (struct foo) { ... } ... }. */
d45cf215 4304
3e4093b6 4305struct initializer_stack
d45cf215 4306{
3e4093b6
RS
4307 struct initializer_stack *next;
4308 tree decl;
4309 const char *asmspec;
4310 struct constructor_stack *constructor_stack;
4311 struct constructor_range_stack *constructor_range_stack;
4312 tree elements;
4313 struct spelling *spelling;
4314 struct spelling *spelling_base;
4315 int spelling_size;
4316 char top_level;
4317 char require_constant_value;
4318 char require_constant_elements;
4319};
d45cf215 4320
3e4093b6
RS
4321struct initializer_stack *initializer_stack;
4322\f
4323/* Prepare to parse and output the initializer for variable DECL. */
400fbf9f
JW
4324
4325void
3e4093b6 4326start_init (tree decl, tree asmspec_tree, int top_level)
400fbf9f 4327{
3e4093b6 4328 const char *locus;
703ad42b 4329 struct initializer_stack *p = xmalloc (sizeof (struct initializer_stack));
3e4093b6 4330 const char *asmspec = 0;
400fbf9f 4331
3e4093b6
RS
4332 if (asmspec_tree)
4333 asmspec = TREE_STRING_POINTER (asmspec_tree);
400fbf9f 4334
3e4093b6
RS
4335 p->decl = constructor_decl;
4336 p->asmspec = constructor_asmspec;
4337 p->require_constant_value = require_constant_value;
4338 p->require_constant_elements = require_constant_elements;
4339 p->constructor_stack = constructor_stack;
4340 p->constructor_range_stack = constructor_range_stack;
4341 p->elements = constructor_elements;
4342 p->spelling = spelling;
4343 p->spelling_base = spelling_base;
4344 p->spelling_size = spelling_size;
4345 p->top_level = constructor_top_level;
4346 p->next = initializer_stack;
4347 initializer_stack = p;
400fbf9f 4348
3e4093b6
RS
4349 constructor_decl = decl;
4350 constructor_asmspec = asmspec;
4351 constructor_designated = 0;
4352 constructor_top_level = top_level;
400fbf9f 4353
3e4093b6
RS
4354 if (decl != 0)
4355 {
4356 require_constant_value = TREE_STATIC (decl);
4357 require_constant_elements
4358 = ((TREE_STATIC (decl) || (pedantic && !flag_isoc99))
4359 /* For a scalar, you can always use any value to initialize,
4360 even within braces. */
4361 && (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
4362 || TREE_CODE (TREE_TYPE (decl)) == RECORD_TYPE
4363 || TREE_CODE (TREE_TYPE (decl)) == UNION_TYPE
4364 || TREE_CODE (TREE_TYPE (decl)) == QUAL_UNION_TYPE));
4365 locus = IDENTIFIER_POINTER (DECL_NAME (decl));
4366 }
4367 else
4368 {
4369 require_constant_value = 0;
4370 require_constant_elements = 0;
4371 locus = "(anonymous)";
4372 }
b71c7f8a 4373
3e4093b6
RS
4374 constructor_stack = 0;
4375 constructor_range_stack = 0;
b71c7f8a 4376
3e4093b6
RS
4377 missing_braces_mentioned = 0;
4378
4379 spelling_base = 0;
4380 spelling_size = 0;
4381 RESTORE_SPELLING_DEPTH (0);
4382
4383 if (locus)
4384 push_string (locus);
4385}
4386
4387void
4388finish_init (void)
b71c7f8a 4389{
3e4093b6 4390 struct initializer_stack *p = initializer_stack;
b71c7f8a 4391
3e4093b6
RS
4392 /* Free the whole constructor stack of this initializer. */
4393 while (constructor_stack)
4394 {
4395 struct constructor_stack *q = constructor_stack;
4396 constructor_stack = q->next;
4397 free (q);
4398 }
4399
4400 if (constructor_range_stack)
4401 abort ();
4402
4403 /* Pop back to the data of the outer initializer (if any). */
4404 constructor_decl = p->decl;
4405 constructor_asmspec = p->asmspec;
4406 require_constant_value = p->require_constant_value;
4407 require_constant_elements = p->require_constant_elements;
4408 constructor_stack = p->constructor_stack;
4409 constructor_range_stack = p->constructor_range_stack;
4410 constructor_elements = p->elements;
4411 spelling = p->spelling;
4412 spelling_base = p->spelling_base;
4413 spelling_size = p->spelling_size;
4414 constructor_top_level = p->top_level;
4415 initializer_stack = p->next;
4416 free (p);
b71c7f8a 4417}
400fbf9f 4418\f
3e4093b6
RS
4419/* Call here when we see the initializer is surrounded by braces.
4420 This is instead of a call to push_init_level;
4421 it is matched by a call to pop_init_level.
400fbf9f 4422
3e4093b6
RS
4423 TYPE is the type to initialize, for a constructor expression.
4424 For an initializer for a decl, TYPE is zero. */
400fbf9f 4425
3e4093b6
RS
4426void
4427really_start_incremental_init (tree type)
400fbf9f 4428{
703ad42b 4429 struct constructor_stack *p = xmalloc (sizeof (struct constructor_stack));
400fbf9f 4430
3e4093b6
RS
4431 if (type == 0)
4432 type = TREE_TYPE (constructor_decl);
400fbf9f 4433
3e4093b6
RS
4434 if ((*targetm.vector_opaque_p) (type))
4435 error ("opaque vector types cannot be initialized");
400fbf9f 4436
3e4093b6
RS
4437 p->type = constructor_type;
4438 p->fields = constructor_fields;
4439 p->index = constructor_index;
4440 p->max_index = constructor_max_index;
4441 p->unfilled_index = constructor_unfilled_index;
4442 p->unfilled_fields = constructor_unfilled_fields;
4443 p->bit_index = constructor_bit_index;
4444 p->elements = constructor_elements;
4445 p->constant = constructor_constant;
4446 p->simple = constructor_simple;
4447 p->erroneous = constructor_erroneous;
4448 p->pending_elts = constructor_pending_elts;
4449 p->depth = constructor_depth;
4450 p->replacement_value = 0;
4451 p->implicit = 0;
4452 p->range_stack = 0;
4453 p->outer = 0;
4454 p->incremental = constructor_incremental;
4455 p->designated = constructor_designated;
4456 p->next = 0;
4457 constructor_stack = p;
b13aca19 4458
3e4093b6
RS
4459 constructor_constant = 1;
4460 constructor_simple = 1;
4461 constructor_depth = SPELLING_DEPTH ();
4462 constructor_elements = 0;
4463 constructor_pending_elts = 0;
4464 constructor_type = type;
4465 constructor_incremental = 1;
4466 constructor_designated = 0;
4467 designator_depth = 0;
4468 designator_errorneous = 0;
400fbf9f 4469
3e4093b6
RS
4470 if (TREE_CODE (constructor_type) == RECORD_TYPE
4471 || TREE_CODE (constructor_type) == UNION_TYPE)
400fbf9f 4472 {
3e4093b6
RS
4473 constructor_fields = TYPE_FIELDS (constructor_type);
4474 /* Skip any nameless bit fields at the beginning. */
4475 while (constructor_fields != 0 && DECL_C_BIT_FIELD (constructor_fields)
4476 && DECL_NAME (constructor_fields) == 0)
4477 constructor_fields = TREE_CHAIN (constructor_fields);
05bccae2 4478
3e4093b6
RS
4479 constructor_unfilled_fields = constructor_fields;
4480 constructor_bit_index = bitsize_zero_node;
400fbf9f 4481 }
3e4093b6
RS
4482 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
4483 {
4484 if (TYPE_DOMAIN (constructor_type))
4485 {
4486 constructor_max_index
4487 = TYPE_MAX_VALUE (TYPE_DOMAIN (constructor_type));
400fbf9f 4488
3e4093b6
RS
4489 /* Detect non-empty initializations of zero-length arrays. */
4490 if (constructor_max_index == NULL_TREE
4491 && TYPE_SIZE (constructor_type))
4492 constructor_max_index = build_int_2 (-1, -1);
400fbf9f 4493
3e4093b6
RS
4494 /* constructor_max_index needs to be an INTEGER_CST. Attempts
4495 to initialize VLAs will cause a proper error; avoid tree
4496 checking errors as well by setting a safe value. */
4497 if (constructor_max_index
4498 && TREE_CODE (constructor_max_index) != INTEGER_CST)
4499 constructor_max_index = build_int_2 (-1, -1);
59c83dbf 4500
3e4093b6
RS
4501 constructor_index
4502 = convert (bitsizetype,
4503 TYPE_MIN_VALUE (TYPE_DOMAIN (constructor_type)));
59c83dbf 4504 }
3e4093b6
RS
4505 else
4506 constructor_index = bitsize_zero_node;
59c83dbf 4507
3e4093b6
RS
4508 constructor_unfilled_index = constructor_index;
4509 }
4510 else if (TREE_CODE (constructor_type) == VECTOR_TYPE)
4511 {
4512 /* Vectors are like simple fixed-size arrays. */
4513 constructor_max_index =
4514 build_int_2 (TYPE_VECTOR_SUBPARTS (constructor_type) - 1, 0);
4515 constructor_index = convert (bitsizetype, bitsize_zero_node);
4516 constructor_unfilled_index = constructor_index;
4517 }
4518 else
4519 {
4520 /* Handle the case of int x = {5}; */
4521 constructor_fields = constructor_type;
4522 constructor_unfilled_fields = constructor_type;
4523 }
4524}
4525\f
4526/* Push down into a subobject, for initialization.
4527 If this is for an explicit set of braces, IMPLICIT is 0.
4528 If it is because the next element belongs at a lower level,
4529 IMPLICIT is 1 (or 2 if the push is because of designator list). */
400fbf9f 4530
3e4093b6
RS
4531void
4532push_init_level (int implicit)
4533{
4534 struct constructor_stack *p;
4535 tree value = NULL_TREE;
400fbf9f 4536
3e4093b6
RS
4537 /* If we've exhausted any levels that didn't have braces,
4538 pop them now. */
4539 while (constructor_stack->implicit)
4540 {
4541 if ((TREE_CODE (constructor_type) == RECORD_TYPE
4542 || TREE_CODE (constructor_type) == UNION_TYPE)
4543 && constructor_fields == 0)
4544 process_init_element (pop_init_level (1));
4545 else if (TREE_CODE (constructor_type) == ARRAY_TYPE
4546 && constructor_max_index
4547 && tree_int_cst_lt (constructor_max_index, constructor_index))
4548 process_init_element (pop_init_level (1));
4549 else
4550 break;
4551 }
400fbf9f 4552
3e4093b6
RS
4553 /* Unless this is an explicit brace, we need to preserve previous
4554 content if any. */
4555 if (implicit)
4556 {
4557 if ((TREE_CODE (constructor_type) == RECORD_TYPE
4558 || TREE_CODE (constructor_type) == UNION_TYPE)
4559 && constructor_fields)
4560 value = find_init_member (constructor_fields);
4561 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
4562 value = find_init_member (constructor_index);
400fbf9f
JW
4563 }
4564
703ad42b 4565 p = xmalloc (sizeof (struct constructor_stack));
3e4093b6
RS
4566 p->type = constructor_type;
4567 p->fields = constructor_fields;
4568 p->index = constructor_index;
4569 p->max_index = constructor_max_index;
4570 p->unfilled_index = constructor_unfilled_index;
4571 p->unfilled_fields = constructor_unfilled_fields;
4572 p->bit_index = constructor_bit_index;
4573 p->elements = constructor_elements;
4574 p->constant = constructor_constant;
4575 p->simple = constructor_simple;
4576 p->erroneous = constructor_erroneous;
4577 p->pending_elts = constructor_pending_elts;
4578 p->depth = constructor_depth;
4579 p->replacement_value = 0;
4580 p->implicit = implicit;
4581 p->outer = 0;
4582 p->incremental = constructor_incremental;
4583 p->designated = constructor_designated;
4584 p->next = constructor_stack;
4585 p->range_stack = 0;
4586 constructor_stack = p;
400fbf9f 4587
3e4093b6
RS
4588 constructor_constant = 1;
4589 constructor_simple = 1;
4590 constructor_depth = SPELLING_DEPTH ();
4591 constructor_elements = 0;
4592 constructor_incremental = 1;
4593 constructor_designated = 0;
4594 constructor_pending_elts = 0;
4595 if (!implicit)
400fbf9f 4596 {
3e4093b6
RS
4597 p->range_stack = constructor_range_stack;
4598 constructor_range_stack = 0;
4599 designator_depth = 0;
4600 designator_errorneous = 0;
4601 }
400fbf9f 4602
3e4093b6
RS
4603 /* Don't die if an entire brace-pair level is superfluous
4604 in the containing level. */
4605 if (constructor_type == 0)
4606 ;
4607 else if (TREE_CODE (constructor_type) == RECORD_TYPE
4608 || TREE_CODE (constructor_type) == UNION_TYPE)
4609 {
4610 /* Don't die if there are extra init elts at the end. */
4611 if (constructor_fields == 0)
4612 constructor_type = 0;
4613 else
400fbf9f 4614 {
3e4093b6
RS
4615 constructor_type = TREE_TYPE (constructor_fields);
4616 push_member_name (constructor_fields);
4617 constructor_depth++;
400fbf9f 4618 }
3e4093b6
RS
4619 }
4620 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
4621 {
4622 constructor_type = TREE_TYPE (constructor_type);
4623 push_array_bounds (tree_low_cst (constructor_index, 0));
4624 constructor_depth++;
400fbf9f
JW
4625 }
4626
3e4093b6 4627 if (constructor_type == 0)
400fbf9f 4628 {
3e4093b6
RS
4629 error_init ("extra brace group at end of initializer");
4630 constructor_fields = 0;
4631 constructor_unfilled_fields = 0;
4632 return;
400fbf9f
JW
4633 }
4634
3e4093b6
RS
4635 if (value && TREE_CODE (value) == CONSTRUCTOR)
4636 {
4637 constructor_constant = TREE_CONSTANT (value);
4638 constructor_simple = TREE_STATIC (value);
4639 constructor_elements = CONSTRUCTOR_ELTS (value);
4640 if (constructor_elements
4641 && (TREE_CODE (constructor_type) == RECORD_TYPE
4642 || TREE_CODE (constructor_type) == ARRAY_TYPE))
4643 set_nonincremental_init ();
4644 }
400fbf9f 4645
3e4093b6
RS
4646 if (implicit == 1 && warn_missing_braces && !missing_braces_mentioned)
4647 {
4648 missing_braces_mentioned = 1;
4649 warning_init ("missing braces around initializer");
4650 }
400fbf9f 4651
3e4093b6
RS
4652 if (TREE_CODE (constructor_type) == RECORD_TYPE
4653 || TREE_CODE (constructor_type) == UNION_TYPE)
4654 {
4655 constructor_fields = TYPE_FIELDS (constructor_type);
4656 /* Skip any nameless bit fields at the beginning. */
4657 while (constructor_fields != 0 && DECL_C_BIT_FIELD (constructor_fields)
4658 && DECL_NAME (constructor_fields) == 0)
4659 constructor_fields = TREE_CHAIN (constructor_fields);
103b7b17 4660
3e4093b6
RS
4661 constructor_unfilled_fields = constructor_fields;
4662 constructor_bit_index = bitsize_zero_node;
4663 }
4664 else if (TREE_CODE (constructor_type) == VECTOR_TYPE)
4665 {
4666 /* Vectors are like simple fixed-size arrays. */
4667 constructor_max_index =
4668 build_int_2 (TYPE_VECTOR_SUBPARTS (constructor_type) - 1, 0);
4669 constructor_index = convert (bitsizetype, integer_zero_node);
4670 constructor_unfilled_index = constructor_index;
4671 }
4672 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
4673 {
4674 if (TYPE_DOMAIN (constructor_type))
4675 {
4676 constructor_max_index
4677 = TYPE_MAX_VALUE (TYPE_DOMAIN (constructor_type));
400fbf9f 4678
3e4093b6
RS
4679 /* Detect non-empty initializations of zero-length arrays. */
4680 if (constructor_max_index == NULL_TREE
4681 && TYPE_SIZE (constructor_type))
4682 constructor_max_index = build_int_2 (-1, -1);
de520661 4683
3e4093b6
RS
4684 /* constructor_max_index needs to be an INTEGER_CST. Attempts
4685 to initialize VLAs will cause a proper error; avoid tree
4686 checking errors as well by setting a safe value. */
4687 if (constructor_max_index
4688 && TREE_CODE (constructor_max_index) != INTEGER_CST)
4689 constructor_max_index = build_int_2 (-1, -1);
b62acd60 4690
3e4093b6
RS
4691 constructor_index
4692 = convert (bitsizetype,
4693 TYPE_MIN_VALUE (TYPE_DOMAIN (constructor_type)));
4694 }
4695 else
4696 constructor_index = bitsize_zero_node;
de520661 4697
3e4093b6
RS
4698 constructor_unfilled_index = constructor_index;
4699 if (value && TREE_CODE (value) == STRING_CST)
4700 {
4701 /* We need to split the char/wchar array into individual
4702 characters, so that we don't have to special case it
4703 everywhere. */
4704 set_nonincremental_init_from_string (value);
4705 }
4706 }
4707 else
4708 {
4709 warning_init ("braces around scalar initializer");
4710 constructor_fields = constructor_type;
4711 constructor_unfilled_fields = constructor_type;
4712 }
4713}
8b6a5902 4714
3e4093b6
RS
4715/* At the end of an implicit or explicit brace level,
4716 finish up that level of constructor.
4717 If we were outputting the elements as they are read, return 0
4718 from inner levels (process_init_element ignores that),
4719 but return error_mark_node from the outermost level
4720 (that's what we want to put in DECL_INITIAL).
4721 Otherwise, return a CONSTRUCTOR expression. */
de520661 4722
3e4093b6
RS
4723tree
4724pop_init_level (int implicit)
4725{
4726 struct constructor_stack *p;
4727 tree constructor = 0;
de520661 4728
3e4093b6
RS
4729 if (implicit == 0)
4730 {
4731 /* When we come to an explicit close brace,
4732 pop any inner levels that didn't have explicit braces. */
4733 while (constructor_stack->implicit)
4734 process_init_element (pop_init_level (1));
de520661 4735
3e4093b6
RS
4736 if (constructor_range_stack)
4737 abort ();
4738 }
e5e809f4 4739
3e4093b6 4740 p = constructor_stack;
e5e809f4 4741
3e4093b6
RS
4742 /* Error for initializing a flexible array member, or a zero-length
4743 array member in an inappropriate context. */
4744 if (constructor_type && constructor_fields
4745 && TREE_CODE (constructor_type) == ARRAY_TYPE
4746 && TYPE_DOMAIN (constructor_type)
4747 && ! TYPE_MAX_VALUE (TYPE_DOMAIN (constructor_type)))
4748 {
4749 /* Silently discard empty initializations. The parser will
4750 already have pedwarned for empty brackets. */
4751 if (integer_zerop (constructor_unfilled_index))
4752 constructor_type = NULL_TREE;
4753 else if (! TYPE_SIZE (constructor_type))
4754 {
4755 if (constructor_depth > 2)
4756 error_init ("initialization of flexible array member in a nested context");
4757 else if (pedantic)
4758 pedwarn_init ("initialization of a flexible array member");
de520661 4759
3e4093b6
RS
4760 /* We have already issued an error message for the existence
4761 of a flexible array member not at the end of the structure.
4762 Discard the initializer so that we do not abort later. */
4763 if (TREE_CHAIN (constructor_fields) != NULL_TREE)
4764 constructor_type = NULL_TREE;
4765 }
4766 else
4767 /* Zero-length arrays are no longer special, so we should no longer
4768 get here. */
4769 abort ();
4770 }
de520661 4771
3e4093b6
RS
4772 /* Warn when some struct elements are implicitly initialized to zero. */
4773 if (extra_warnings
4774 && constructor_type
4775 && TREE_CODE (constructor_type) == RECORD_TYPE
4776 && constructor_unfilled_fields)
4777 {
4778 /* Do not warn for flexible array members or zero-length arrays. */
4779 while (constructor_unfilled_fields
4780 && (! DECL_SIZE (constructor_unfilled_fields)
4781 || integer_zerop (DECL_SIZE (constructor_unfilled_fields))))
4782 constructor_unfilled_fields = TREE_CHAIN (constructor_unfilled_fields);
cc77d4d5 4783
3e4093b6
RS
4784 /* Do not warn if this level of the initializer uses member
4785 designators; it is likely to be deliberate. */
4786 if (constructor_unfilled_fields && !constructor_designated)
4787 {
4788 push_member_name (constructor_unfilled_fields);
4789 warning_init ("missing initializer");
4790 RESTORE_SPELLING_DEPTH (constructor_depth);
4791 }
4792 }
de520661 4793
3e4093b6
RS
4794 /* Now output all pending elements. */
4795 constructor_incremental = 1;
4796 output_pending_init_elements (1);
de520661 4797
3e4093b6
RS
4798 /* Pad out the end of the structure. */
4799 if (p->replacement_value)
4800 /* If this closes a superfluous brace pair,
4801 just pass out the element between them. */
4802 constructor = p->replacement_value;
4803 else if (constructor_type == 0)
4804 ;
4805 else if (TREE_CODE (constructor_type) != RECORD_TYPE
4806 && TREE_CODE (constructor_type) != UNION_TYPE
4807 && TREE_CODE (constructor_type) != ARRAY_TYPE
4808 && TREE_CODE (constructor_type) != VECTOR_TYPE)
4809 {
4810 /* A nonincremental scalar initializer--just return
4811 the element, after verifying there is just one. */
4812 if (constructor_elements == 0)
4813 {
4814 if (!constructor_erroneous)
4815 error_init ("empty scalar initializer");
4816 constructor = error_mark_node;
4817 }
4818 else if (TREE_CHAIN (constructor_elements) != 0)
4819 {
4820 error_init ("extra elements in scalar initializer");
4821 constructor = TREE_VALUE (constructor_elements);
4822 }
4823 else
4824 constructor = TREE_VALUE (constructor_elements);
4825 }
4826 else
4827 {
4828 if (constructor_erroneous)
4829 constructor = error_mark_node;
4830 else
4831 {
4832 constructor = build_constructor (constructor_type,
4833 nreverse (constructor_elements));
4834 if (constructor_constant)
4835 TREE_CONSTANT (constructor) = 1;
4836 if (constructor_constant && constructor_simple)
4837 TREE_STATIC (constructor) = 1;
4838 }
4839 }
de520661 4840
3e4093b6
RS
4841 constructor_type = p->type;
4842 constructor_fields = p->fields;
4843 constructor_index = p->index;
4844 constructor_max_index = p->max_index;
4845 constructor_unfilled_index = p->unfilled_index;
4846 constructor_unfilled_fields = p->unfilled_fields;
4847 constructor_bit_index = p->bit_index;
4848 constructor_elements = p->elements;
4849 constructor_constant = p->constant;
4850 constructor_simple = p->simple;
4851 constructor_erroneous = p->erroneous;
4852 constructor_incremental = p->incremental;
4853 constructor_designated = p->designated;
4854 constructor_pending_elts = p->pending_elts;
4855 constructor_depth = p->depth;
4856 if (!p->implicit)
4857 constructor_range_stack = p->range_stack;
4858 RESTORE_SPELLING_DEPTH (constructor_depth);
de520661 4859
3e4093b6
RS
4860 constructor_stack = p->next;
4861 free (p);
b621a4dd 4862
3e4093b6
RS
4863 if (constructor == 0)
4864 {
4865 if (constructor_stack == 0)
4866 return error_mark_node;
4867 return NULL_TREE;
4868 }
4869 return constructor;
4870}
8b6a5902 4871
3e4093b6
RS
4872/* Common handling for both array range and field name designators.
4873 ARRAY argument is nonzero for array ranges. Returns zero for success. */
400fbf9f 4874
3e4093b6
RS
4875static int
4876set_designator (int array)
de520661 4877{
3e4093b6
RS
4878 tree subtype;
4879 enum tree_code subcode;
de520661 4880
3e4093b6
RS
4881 /* Don't die if an entire brace-pair level is superfluous
4882 in the containing level. */
4883 if (constructor_type == 0)
4884 return 1;
de520661 4885
3e4093b6
RS
4886 /* If there were errors in this designator list already, bail out silently. */
4887 if (designator_errorneous)
4888 return 1;
e28cae4f 4889
3e4093b6
RS
4890 if (!designator_depth)
4891 {
4892 if (constructor_range_stack)
4893 abort ();
de520661 4894
3e4093b6
RS
4895 /* Designator list starts at the level of closest explicit
4896 braces. */
4897 while (constructor_stack->implicit)
4898 process_init_element (pop_init_level (1));
4899 constructor_designated = 1;
4900 return 0;
4901 }
de520661 4902
3e4093b6
RS
4903 if (constructor_no_implicit)
4904 {
4905 error_init ("initialization designators may not nest");
4906 return 1;
4907 }
de520661 4908
3e4093b6
RS
4909 if (TREE_CODE (constructor_type) == RECORD_TYPE
4910 || TREE_CODE (constructor_type) == UNION_TYPE)
3c3fa147 4911 {
3e4093b6
RS
4912 subtype = TREE_TYPE (constructor_fields);
4913 if (subtype != error_mark_node)
4914 subtype = TYPE_MAIN_VARIANT (subtype);
3c3fa147 4915 }
3e4093b6 4916 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
de520661 4917 {
3e4093b6 4918 subtype = TYPE_MAIN_VARIANT (TREE_TYPE (constructor_type));
de520661 4919 }
3e4093b6
RS
4920 else
4921 abort ();
400fbf9f 4922
3e4093b6
RS
4923 subcode = TREE_CODE (subtype);
4924 if (array && subcode != ARRAY_TYPE)
4925 {
4926 error_init ("array index in non-array initializer");
4927 return 1;
4928 }
4929 else if (!array && subcode != RECORD_TYPE && subcode != UNION_TYPE)
4930 {
4931 error_init ("field name not in record or union initializer");
4932 return 1;
4933 }
d45cf215 4934
3e4093b6
RS
4935 constructor_designated = 1;
4936 push_init_level (2);
4937 return 0;
de520661 4938}
400fbf9f 4939
3e4093b6
RS
4940/* If there are range designators in designator list, push a new designator
4941 to constructor_range_stack. RANGE_END is end of such stack range or
4942 NULL_TREE if there is no range designator at this level. */
400fbf9f 4943
3e4093b6
RS
4944static void
4945push_range_stack (tree range_end)
4946{
4947 struct constructor_range_stack *p;
400fbf9f 4948
703ad42b 4949 p = ggc_alloc (sizeof (struct constructor_range_stack));
3e4093b6
RS
4950 p->prev = constructor_range_stack;
4951 p->next = 0;
4952 p->fields = constructor_fields;
4953 p->range_start = constructor_index;
4954 p->index = constructor_index;
4955 p->stack = constructor_stack;
4956 p->range_end = range_end;
8b6a5902 4957 if (constructor_range_stack)
3e4093b6
RS
4958 constructor_range_stack->next = p;
4959 constructor_range_stack = p;
de520661 4960}
400fbf9f 4961
3e4093b6
RS
4962/* Within an array initializer, specify the next index to be initialized.
4963 FIRST is that index. If LAST is nonzero, then initialize a range
4964 of indices, running from FIRST through LAST. */
5a7ec9d9 4965
de520661 4966void
3e4093b6 4967set_init_index (tree first, tree last)
de520661 4968{
3e4093b6
RS
4969 if (set_designator (1))
4970 return;
de520661 4971
3e4093b6 4972 designator_errorneous = 1;
de520661 4973
3e4093b6
RS
4974 while ((TREE_CODE (first) == NOP_EXPR
4975 || TREE_CODE (first) == CONVERT_EXPR
4976 || TREE_CODE (first) == NON_LVALUE_EXPR)
4977 && (TYPE_MODE (TREE_TYPE (first))
4978 == TYPE_MODE (TREE_TYPE (TREE_OPERAND (first, 0)))))
4979 first = TREE_OPERAND (first, 0);
c8e4f0e9 4980
3e4093b6
RS
4981 if (last)
4982 while ((TREE_CODE (last) == NOP_EXPR
4983 || TREE_CODE (last) == CONVERT_EXPR
4984 || TREE_CODE (last) == NON_LVALUE_EXPR)
4985 && (TYPE_MODE (TREE_TYPE (last))
4986 == TYPE_MODE (TREE_TYPE (TREE_OPERAND (last, 0)))))
4987 last = TREE_OPERAND (last, 0);
de520661 4988
3e4093b6
RS
4989 if (TREE_CODE (first) != INTEGER_CST)
4990 error_init ("nonconstant array index in initializer");
4991 else if (last != 0 && TREE_CODE (last) != INTEGER_CST)
4992 error_init ("nonconstant array index in initializer");
4993 else if (TREE_CODE (constructor_type) != ARRAY_TYPE)
4994 error_init ("array index in non-array initializer");
622adc7e
MK
4995 else if (tree_int_cst_sgn (first) == -1)
4996 error_init ("array index in initializer exceeds array bounds");
3e4093b6
RS
4997 else if (constructor_max_index
4998 && tree_int_cst_lt (constructor_max_index, first))
4999 error_init ("array index in initializer exceeds array bounds");
5000 else
de520661 5001 {
3e4093b6 5002 constructor_index = convert (bitsizetype, first);
665f2503 5003
3e4093b6 5004 if (last)
2bede729 5005 {
3e4093b6
RS
5006 if (tree_int_cst_equal (first, last))
5007 last = 0;
5008 else if (tree_int_cst_lt (last, first))
5009 {
5010 error_init ("empty index range in initializer");
5011 last = 0;
5012 }
5013 else
5014 {
5015 last = convert (bitsizetype, last);
5016 if (constructor_max_index != 0
5017 && tree_int_cst_lt (constructor_max_index, last))
5018 {
5019 error_init ("array index range in initializer exceeds array bounds");
5020 last = 0;
5021 }
5022 }
2bede729 5023 }
fed3cef0 5024
3e4093b6
RS
5025 designator_depth++;
5026 designator_errorneous = 0;
5027 if (constructor_range_stack || last)
5028 push_range_stack (last);
de520661 5029 }
de520661 5030}
3e4093b6
RS
5031
5032/* Within a struct initializer, specify the next field to be initialized. */
400fbf9f 5033
de520661 5034void
3e4093b6 5035set_init_label (tree fieldname)
de520661 5036{
3e4093b6 5037 tree tail;
94ba5069 5038
3e4093b6
RS
5039 if (set_designator (0))
5040 return;
5041
5042 designator_errorneous = 1;
5043
5044 if (TREE_CODE (constructor_type) != RECORD_TYPE
5045 && TREE_CODE (constructor_type) != UNION_TYPE)
94ba5069 5046 {
3e4093b6
RS
5047 error_init ("field name not in record or union initializer");
5048 return;
94ba5069
RS
5049 }
5050
3e4093b6
RS
5051 for (tail = TYPE_FIELDS (constructor_type); tail;
5052 tail = TREE_CHAIN (tail))
8b6a5902 5053 {
3e4093b6
RS
5054 if (DECL_NAME (tail) == fieldname)
5055 break;
8b6a5902
JJ
5056 }
5057
3e4093b6
RS
5058 if (tail == 0)
5059 error ("unknown field `%s' specified in initializer",
5060 IDENTIFIER_POINTER (fieldname));
5061 else
8b6a5902 5062 {
3e4093b6
RS
5063 constructor_fields = tail;
5064 designator_depth++;
8b6a5902 5065 designator_errorneous = 0;
3e4093b6
RS
5066 if (constructor_range_stack)
5067 push_range_stack (NULL_TREE);
8b6a5902 5068 }
3e4093b6
RS
5069}
5070\f
5071/* Add a new initializer to the tree of pending initializers. PURPOSE
5072 identifies the initializer, either array index or field in a structure.
5073 VALUE is the value of that index or field. */
de520661 5074
3e4093b6
RS
5075static void
5076add_pending_init (tree purpose, tree value)
5077{
5078 struct init_node *p, **q, *r;
5079
5080 q = &constructor_pending_elts;
5081 p = 0;
5082
5083 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
de520661 5084 {
3e4093b6 5085 while (*q != 0)
91fa3c30 5086 {
3e4093b6
RS
5087 p = *q;
5088 if (tree_int_cst_lt (purpose, p->purpose))
5089 q = &p->left;
5090 else if (tree_int_cst_lt (p->purpose, purpose))
5091 q = &p->right;
5092 else
5093 {
5094 if (TREE_SIDE_EFFECTS (p->value))
5095 warning_init ("initialized field with side-effects overwritten");
5096 p->value = value;
5097 return;
5098 }
91fa3c30 5099 }
de520661 5100 }
3e4093b6 5101 else
de520661 5102 {
3e4093b6 5103 tree bitpos;
400fbf9f 5104
3e4093b6
RS
5105 bitpos = bit_position (purpose);
5106 while (*q != NULL)
5107 {
5108 p = *q;
5109 if (tree_int_cst_lt (bitpos, bit_position (p->purpose)))
5110 q = &p->left;
5111 else if (p->purpose != purpose)
5112 q = &p->right;
5113 else
5114 {
5115 if (TREE_SIDE_EFFECTS (p->value))
5116 warning_init ("initialized field with side-effects overwritten");
5117 p->value = value;
5118 return;
5119 }
5120 }
91fa3c30 5121 }
b71c7f8a 5122
703ad42b 5123 r = ggc_alloc (sizeof (struct init_node));
3e4093b6
RS
5124 r->purpose = purpose;
5125 r->value = value;
8b6a5902 5126
3e4093b6
RS
5127 *q = r;
5128 r->parent = p;
5129 r->left = 0;
5130 r->right = 0;
5131 r->balance = 0;
b71c7f8a 5132
3e4093b6 5133 while (p)
de520661 5134 {
3e4093b6 5135 struct init_node *s;
665f2503 5136
3e4093b6 5137 if (r == p->left)
2bede729 5138 {
3e4093b6
RS
5139 if (p->balance == 0)
5140 p->balance = -1;
5141 else if (p->balance < 0)
5142 {
5143 if (r->balance < 0)
5144 {
5145 /* L rotation. */
5146 p->left = r->right;
5147 if (p->left)
5148 p->left->parent = p;
5149 r->right = p;
e7b6a0ee 5150
3e4093b6
RS
5151 p->balance = 0;
5152 r->balance = 0;
39bc99c2 5153
3e4093b6
RS
5154 s = p->parent;
5155 p->parent = r;
5156 r->parent = s;
5157 if (s)
5158 {
5159 if (s->left == p)
5160 s->left = r;
5161 else
5162 s->right = r;
5163 }
5164 else
5165 constructor_pending_elts = r;
5166 }
5167 else
5168 {
5169 /* LR rotation. */
5170 struct init_node *t = r->right;
e7b6a0ee 5171
3e4093b6
RS
5172 r->right = t->left;
5173 if (r->right)
5174 r->right->parent = r;
5175 t->left = r;
5176
5177 p->left = t->right;
5178 if (p->left)
5179 p->left->parent = p;
5180 t->right = p;
5181
5182 p->balance = t->balance < 0;
5183 r->balance = -(t->balance > 0);
5184 t->balance = 0;
5185
5186 s = p->parent;
5187 p->parent = t;
5188 r->parent = t;
5189 t->parent = s;
5190 if (s)
5191 {
5192 if (s->left == p)
5193 s->left = t;
5194 else
5195 s->right = t;
5196 }
5197 else
5198 constructor_pending_elts = t;
5199 }
5200 break;
5201 }
5202 else
5203 {
5204 /* p->balance == +1; growth of left side balances the node. */
5205 p->balance = 0;
5206 break;
5207 }
2bede729 5208 }
3e4093b6
RS
5209 else /* r == p->right */
5210 {
5211 if (p->balance == 0)
5212 /* Growth propagation from right side. */
5213 p->balance++;
5214 else if (p->balance > 0)
5215 {
5216 if (r->balance > 0)
5217 {
5218 /* R rotation. */
5219 p->right = r->left;
5220 if (p->right)
5221 p->right->parent = p;
5222 r->left = p;
5223
5224 p->balance = 0;
5225 r->balance = 0;
5226
5227 s = p->parent;
5228 p->parent = r;
5229 r->parent = s;
5230 if (s)
5231 {
5232 if (s->left == p)
5233 s->left = r;
5234 else
5235 s->right = r;
5236 }
5237 else
5238 constructor_pending_elts = r;
5239 }
5240 else /* r->balance == -1 */
5241 {
5242 /* RL rotation */
5243 struct init_node *t = r->left;
5244
5245 r->left = t->right;
5246 if (r->left)
5247 r->left->parent = r;
5248 t->right = r;
5249
5250 p->right = t->left;
5251 if (p->right)
5252 p->right->parent = p;
5253 t->left = p;
5254
5255 r->balance = (t->balance < 0);
5256 p->balance = -(t->balance > 0);
5257 t->balance = 0;
5258
5259 s = p->parent;
5260 p->parent = t;
5261 r->parent = t;
5262 t->parent = s;
5263 if (s)
5264 {
5265 if (s->left == p)
5266 s->left = t;
5267 else
5268 s->right = t;
5269 }
5270 else
5271 constructor_pending_elts = t;
5272 }
5273 break;
5274 }
5275 else
5276 {
5277 /* p->balance == -1; growth of right side balances the node. */
5278 p->balance = 0;
5279 break;
5280 }
5281 }
5282
5283 r = p;
5284 p = p->parent;
5285 }
5286}
5287
5288/* Build AVL tree from a sorted chain. */
5289
5290static void
5291set_nonincremental_init (void)
5292{
5293 tree chain;
5294
5295 if (TREE_CODE (constructor_type) != RECORD_TYPE
5296 && TREE_CODE (constructor_type) != ARRAY_TYPE)
5297 return;
5298
5299 for (chain = constructor_elements; chain; chain = TREE_CHAIN (chain))
5300 add_pending_init (TREE_PURPOSE (chain), TREE_VALUE (chain));
5301 constructor_elements = 0;
5302 if (TREE_CODE (constructor_type) == RECORD_TYPE)
5303 {
5304 constructor_unfilled_fields = TYPE_FIELDS (constructor_type);
5305 /* Skip any nameless bit fields at the beginning. */
5306 while (constructor_unfilled_fields != 0
5307 && DECL_C_BIT_FIELD (constructor_unfilled_fields)
5308 && DECL_NAME (constructor_unfilled_fields) == 0)
5309 constructor_unfilled_fields = TREE_CHAIN (constructor_unfilled_fields);
fed3cef0 5310
de520661 5311 }
3e4093b6 5312 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
de520661 5313 {
3e4093b6
RS
5314 if (TYPE_DOMAIN (constructor_type))
5315 constructor_unfilled_index
5316 = convert (bitsizetype,
5317 TYPE_MIN_VALUE (TYPE_DOMAIN (constructor_type)));
5318 else
5319 constructor_unfilled_index = bitsize_zero_node;
de520661 5320 }
3e4093b6 5321 constructor_incremental = 0;
de520661 5322}
400fbf9f 5323
3e4093b6 5324/* Build AVL tree from a string constant. */
de520661 5325
3e4093b6
RS
5326static void
5327set_nonincremental_init_from_string (tree str)
de520661 5328{
3e4093b6
RS
5329 tree value, purpose, type;
5330 HOST_WIDE_INT val[2];
5331 const char *p, *end;
5332 int byte, wchar_bytes, charwidth, bitpos;
de520661 5333
3e4093b6
RS
5334 if (TREE_CODE (constructor_type) != ARRAY_TYPE)
5335 abort ();
940ff66d 5336
3e4093b6
RS
5337 if (TYPE_PRECISION (TREE_TYPE (TREE_TYPE (str)))
5338 == TYPE_PRECISION (char_type_node))
5339 wchar_bytes = 1;
5340 else if (TYPE_PRECISION (TREE_TYPE (TREE_TYPE (str)))
5341 == TYPE_PRECISION (wchar_type_node))
5342 wchar_bytes = TYPE_PRECISION (wchar_type_node) / BITS_PER_UNIT;
5343 else
5344 abort ();
400fbf9f 5345
3e4093b6
RS
5346 charwidth = TYPE_PRECISION (char_type_node);
5347 type = TREE_TYPE (constructor_type);
5348 p = TREE_STRING_POINTER (str);
5349 end = p + TREE_STRING_LENGTH (str);
91fa3c30 5350
3e4093b6
RS
5351 for (purpose = bitsize_zero_node;
5352 p < end && !tree_int_cst_lt (constructor_max_index, purpose);
5353 purpose = size_binop (PLUS_EXPR, purpose, bitsize_one_node))
584ef5fe 5354 {
3e4093b6 5355 if (wchar_bytes == 1)
ffc5c6a9 5356 {
3e4093b6
RS
5357 val[1] = (unsigned char) *p++;
5358 val[0] = 0;
ffc5c6a9
RH
5359 }
5360 else
3e4093b6
RS
5361 {
5362 val[0] = 0;
5363 val[1] = 0;
5364 for (byte = 0; byte < wchar_bytes; byte++)
5365 {
5366 if (BYTES_BIG_ENDIAN)
5367 bitpos = (wchar_bytes - byte - 1) * charwidth;
5368 else
5369 bitpos = byte * charwidth;
5370 val[bitpos < HOST_BITS_PER_WIDE_INT]
5371 |= ((unsigned HOST_WIDE_INT) ((unsigned char) *p++))
5372 << (bitpos % HOST_BITS_PER_WIDE_INT);
5373 }
5374 }
584ef5fe 5375
3e4093b6
RS
5376 if (!TREE_UNSIGNED (type))
5377 {
5378 bitpos = ((wchar_bytes - 1) * charwidth) + HOST_BITS_PER_CHAR;
5379 if (bitpos < HOST_BITS_PER_WIDE_INT)
5380 {
5381 if (val[1] & (((HOST_WIDE_INT) 1) << (bitpos - 1)))
5382 {
5383 val[1] |= ((HOST_WIDE_INT) -1) << bitpos;
5384 val[0] = -1;
5385 }
5386 }
5387 else if (bitpos == HOST_BITS_PER_WIDE_INT)
5388 {
5389 if (val[1] < 0)
5390 val[0] = -1;
5391 }
5392 else if (val[0] & (((HOST_WIDE_INT) 1)
5393 << (bitpos - 1 - HOST_BITS_PER_WIDE_INT)))
5394 val[0] |= ((HOST_WIDE_INT) -1)
5395 << (bitpos - HOST_BITS_PER_WIDE_INT);
5396 }
ffc5c6a9 5397
3e4093b6
RS
5398 value = build_int_2 (val[1], val[0]);
5399 TREE_TYPE (value) = type;
5400 add_pending_init (purpose, value);
9dfcc8db
BH
5401 }
5402
3e4093b6
RS
5403 constructor_incremental = 0;
5404}
de520661 5405
3e4093b6
RS
5406/* Return value of FIELD in pending initializer or zero if the field was
5407 not initialized yet. */
5408
5409static tree
5410find_init_member (tree field)
5411{
5412 struct init_node *p;
5413
5414 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
19d76e60 5415 {
3e4093b6
RS
5416 if (constructor_incremental
5417 && tree_int_cst_lt (field, constructor_unfilled_index))
5418 set_nonincremental_init ();
5419
5420 p = constructor_pending_elts;
5421 while (p)
19d76e60 5422 {
3e4093b6
RS
5423 if (tree_int_cst_lt (field, p->purpose))
5424 p = p->left;
5425 else if (tree_int_cst_lt (p->purpose, field))
5426 p = p->right;
5427 else
5428 return p->value;
19d76e60 5429 }
19d76e60 5430 }
3e4093b6 5431 else if (TREE_CODE (constructor_type) == RECORD_TYPE)
de520661 5432 {
3e4093b6 5433 tree bitpos = bit_position (field);
de520661 5434
3e4093b6
RS
5435 if (constructor_incremental
5436 && (!constructor_unfilled_fields
5437 || tree_int_cst_lt (bitpos,
5438 bit_position (constructor_unfilled_fields))))
5439 set_nonincremental_init ();
de520661 5440
3e4093b6
RS
5441 p = constructor_pending_elts;
5442 while (p)
5443 {
5444 if (field == p->purpose)
5445 return p->value;
5446 else if (tree_int_cst_lt (bitpos, bit_position (p->purpose)))
5447 p = p->left;
5448 else
5449 p = p->right;
5450 }
5451 }
5452 else if (TREE_CODE (constructor_type) == UNION_TYPE)
de520661 5453 {
3e4093b6
RS
5454 if (constructor_elements
5455 && TREE_PURPOSE (constructor_elements) == field)
5456 return TREE_VALUE (constructor_elements);
de520661 5457 }
3e4093b6 5458 return 0;
de520661
RS
5459}
5460
3e4093b6
RS
5461/* "Output" the next constructor element.
5462 At top level, really output it to assembler code now.
5463 Otherwise, collect it in a list from which we will make a CONSTRUCTOR.
5464 TYPE is the data type that the containing data type wants here.
5465 FIELD is the field (a FIELD_DECL) or the index that this element fills.
8b6a5902 5466
3e4093b6
RS
5467 PENDING if non-nil means output pending elements that belong
5468 right after this element. (PENDING is normally 1;
5469 it is 0 while outputting pending elements, to avoid recursion.) */
8b6a5902 5470
3e4093b6
RS
5471static void
5472output_init_element (tree value, tree type, tree field, int pending)
5473{
5474 if (type == error_mark_node)
8b6a5902 5475 {
3e4093b6
RS
5476 constructor_erroneous = 1;
5477 return;
8b6a5902 5478 }
3e4093b6
RS
5479 if (TREE_CODE (TREE_TYPE (value)) == FUNCTION_TYPE
5480 || (TREE_CODE (TREE_TYPE (value)) == ARRAY_TYPE
5481 && !(TREE_CODE (value) == STRING_CST
5482 && TREE_CODE (type) == ARRAY_TYPE
5483 && TREE_CODE (TREE_TYPE (type)) == INTEGER_TYPE)
5484 && !comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (value)),
5485 TYPE_MAIN_VARIANT (type), COMPARE_STRICT)))
5486 value = default_conversion (value);
8b6a5902 5487
3e4093b6
RS
5488 if (TREE_CODE (value) == COMPOUND_LITERAL_EXPR
5489 && require_constant_value && !flag_isoc99 && pending)
8b6a5902 5490 {
3e4093b6
RS
5491 /* As an extension, allow initializing objects with static storage
5492 duration with compound literals (which are then treated just as
5493 the brace enclosed list they contain). */
5494 tree decl = COMPOUND_LITERAL_EXPR_DECL (value);
5495 value = DECL_INITIAL (decl);
8b6a5902
JJ
5496 }
5497
3e4093b6
RS
5498 if (value == error_mark_node)
5499 constructor_erroneous = 1;
5500 else if (!TREE_CONSTANT (value))
5501 constructor_constant = 0;
5502 else if (initializer_constant_valid_p (value, TREE_TYPE (value)) == 0
5503 || ((TREE_CODE (constructor_type) == RECORD_TYPE
5504 || TREE_CODE (constructor_type) == UNION_TYPE)
5505 && DECL_C_BIT_FIELD (field)
5506 && TREE_CODE (value) != INTEGER_CST))
5507 constructor_simple = 0;
5508
5509 if (require_constant_value && ! TREE_CONSTANT (value))
8b6a5902 5510 {
3e4093b6
RS
5511 error_init ("initializer element is not constant");
5512 value = error_mark_node;
8b6a5902 5513 }
3e4093b6
RS
5514 else if (require_constant_elements
5515 && initializer_constant_valid_p (value, TREE_TYPE (value)) == 0)
5516 pedwarn ("initializer element is not computable at load time");
5517
5518 /* If this field is empty (and not at the end of structure),
5519 don't do anything other than checking the initializer. */
5520 if (field
5521 && (TREE_TYPE (field) == error_mark_node
5522 || (COMPLETE_TYPE_P (TREE_TYPE (field))
5523 && integer_zerop (TYPE_SIZE (TREE_TYPE (field)))
5524 && (TREE_CODE (constructor_type) == ARRAY_TYPE
5525 || TREE_CHAIN (field)))))
5526 return;
5527
5528 value = digest_init (type, value, require_constant_value);
5529 if (value == error_mark_node)
8b6a5902 5530 {
3e4093b6
RS
5531 constructor_erroneous = 1;
5532 return;
8b6a5902 5533 }
8b6a5902 5534
3e4093b6
RS
5535 /* If this element doesn't come next in sequence,
5536 put it on constructor_pending_elts. */
5537 if (TREE_CODE (constructor_type) == ARRAY_TYPE
5538 && (!constructor_incremental
5539 || !tree_int_cst_equal (field, constructor_unfilled_index)))
8b6a5902 5540 {
3e4093b6
RS
5541 if (constructor_incremental
5542 && tree_int_cst_lt (field, constructor_unfilled_index))
5543 set_nonincremental_init ();
5544
5545 add_pending_init (field, value);
5546 return;
8b6a5902 5547 }
3e4093b6
RS
5548 else if (TREE_CODE (constructor_type) == RECORD_TYPE
5549 && (!constructor_incremental
5550 || field != constructor_unfilled_fields))
8b6a5902 5551 {
3e4093b6
RS
5552 /* We do this for records but not for unions. In a union,
5553 no matter which field is specified, it can be initialized
5554 right away since it starts at the beginning of the union. */
5555 if (constructor_incremental)
5556 {
5557 if (!constructor_unfilled_fields)
5558 set_nonincremental_init ();
5559 else
5560 {
5561 tree bitpos, unfillpos;
5562
5563 bitpos = bit_position (field);
5564 unfillpos = bit_position (constructor_unfilled_fields);
5565
5566 if (tree_int_cst_lt (bitpos, unfillpos))
5567 set_nonincremental_init ();
5568 }
5569 }
5570
5571 add_pending_init (field, value);
5572 return;
8b6a5902 5573 }
3e4093b6
RS
5574 else if (TREE_CODE (constructor_type) == UNION_TYPE
5575 && constructor_elements)
5576 {
5577 if (TREE_SIDE_EFFECTS (TREE_VALUE (constructor_elements)))
5578 warning_init ("initialized field with side-effects overwritten");
8b6a5902 5579
3e4093b6
RS
5580 /* We can have just one union field set. */
5581 constructor_elements = 0;
5582 }
8b6a5902 5583
3e4093b6
RS
5584 /* Otherwise, output this element either to
5585 constructor_elements or to the assembler file. */
8b6a5902 5586
3e4093b6
RS
5587 if (field && TREE_CODE (field) == INTEGER_CST)
5588 field = copy_node (field);
5589 constructor_elements
5590 = tree_cons (field, value, constructor_elements);
8b6a5902 5591
3e4093b6
RS
5592 /* Advance the variable that indicates sequential elements output. */
5593 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5594 constructor_unfilled_index
5595 = size_binop (PLUS_EXPR, constructor_unfilled_index,
5596 bitsize_one_node);
5597 else if (TREE_CODE (constructor_type) == RECORD_TYPE)
5598 {
5599 constructor_unfilled_fields
5600 = TREE_CHAIN (constructor_unfilled_fields);
8b6a5902 5601
3e4093b6
RS
5602 /* Skip any nameless bit fields. */
5603 while (constructor_unfilled_fields != 0
5604 && DECL_C_BIT_FIELD (constructor_unfilled_fields)
5605 && DECL_NAME (constructor_unfilled_fields) == 0)
5606 constructor_unfilled_fields =
5607 TREE_CHAIN (constructor_unfilled_fields);
5608 }
5609 else if (TREE_CODE (constructor_type) == UNION_TYPE)
5610 constructor_unfilled_fields = 0;
de520661 5611
3e4093b6
RS
5612 /* Now output any pending elements which have become next. */
5613 if (pending)
5614 output_pending_init_elements (0);
5615}
8b6a5902 5616
3e4093b6
RS
5617/* Output any pending elements which have become next.
5618 As we output elements, constructor_unfilled_{fields,index}
5619 advances, which may cause other elements to become next;
5620 if so, they too are output.
8b6a5902 5621
3e4093b6
RS
5622 If ALL is 0, we return when there are
5623 no more pending elements to output now.
665f2503 5624
3e4093b6
RS
5625 If ALL is 1, we output space as necessary so that
5626 we can output all the pending elements. */
19d76e60 5627
3e4093b6
RS
5628static void
5629output_pending_init_elements (int all)
5630{
5631 struct init_node *elt = constructor_pending_elts;
5632 tree next;
de520661 5633
3e4093b6
RS
5634 retry:
5635
5636 /* Look thru the whole pending tree.
5637 If we find an element that should be output now,
5638 output it. Otherwise, set NEXT to the element
5639 that comes first among those still pending. */
5640
5641 next = 0;
5642 while (elt)
5643 {
5644 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
8b6a5902 5645 {
3e4093b6
RS
5646 if (tree_int_cst_equal (elt->purpose,
5647 constructor_unfilled_index))
5648 output_init_element (elt->value,
5649 TREE_TYPE (constructor_type),
5650 constructor_unfilled_index, 0);
5651 else if (tree_int_cst_lt (constructor_unfilled_index,
5652 elt->purpose))
8b6a5902 5653 {
3e4093b6
RS
5654 /* Advance to the next smaller node. */
5655 if (elt->left)
5656 elt = elt->left;
5657 else
5658 {
5659 /* We have reached the smallest node bigger than the
5660 current unfilled index. Fill the space first. */
5661 next = elt->purpose;
5662 break;
5663 }
8b6a5902 5664 }
ce662d4c
JJ
5665 else
5666 {
3e4093b6
RS
5667 /* Advance to the next bigger node. */
5668 if (elt->right)
5669 elt = elt->right;
5670 else
ce662d4c 5671 {
3e4093b6
RS
5672 /* We have reached the biggest node in a subtree. Find
5673 the parent of it, which is the next bigger node. */
5674 while (elt->parent && elt->parent->right == elt)
5675 elt = elt->parent;
5676 elt = elt->parent;
5677 if (elt && tree_int_cst_lt (constructor_unfilled_index,
5678 elt->purpose))
5679 {
5680 next = elt->purpose;
5681 break;
5682 }
ce662d4c
JJ
5683 }
5684 }
8b6a5902 5685 }
3e4093b6
RS
5686 else if (TREE_CODE (constructor_type) == RECORD_TYPE
5687 || TREE_CODE (constructor_type) == UNION_TYPE)
5688 {
5689 tree ctor_unfilled_bitpos, elt_bitpos;
ce662d4c 5690
3e4093b6
RS
5691 /* If the current record is complete we are done. */
5692 if (constructor_unfilled_fields == 0)
5693 break;
de520661 5694
3e4093b6
RS
5695 ctor_unfilled_bitpos = bit_position (constructor_unfilled_fields);
5696 elt_bitpos = bit_position (elt->purpose);
5697 /* We can't compare fields here because there might be empty
5698 fields in between. */
5699 if (tree_int_cst_equal (elt_bitpos, ctor_unfilled_bitpos))
5700 {
5701 constructor_unfilled_fields = elt->purpose;
5702 output_init_element (elt->value, TREE_TYPE (elt->purpose),
5703 elt->purpose, 0);
5704 }
5705 else if (tree_int_cst_lt (ctor_unfilled_bitpos, elt_bitpos))
5706 {
5707 /* Advance to the next smaller node. */
5708 if (elt->left)
5709 elt = elt->left;
5710 else
5711 {
5712 /* We have reached the smallest node bigger than the
5713 current unfilled field. Fill the space first. */
5714 next = elt->purpose;
5715 break;
5716 }
5717 }
5718 else
5719 {
5720 /* Advance to the next bigger node. */
5721 if (elt->right)
5722 elt = elt->right;
5723 else
5724 {
5725 /* We have reached the biggest node in a subtree. Find
5726 the parent of it, which is the next bigger node. */
5727 while (elt->parent && elt->parent->right == elt)
5728 elt = elt->parent;
5729 elt = elt->parent;
5730 if (elt
5731 && (tree_int_cst_lt (ctor_unfilled_bitpos,
5732 bit_position (elt->purpose))))
5733 {
5734 next = elt->purpose;
5735 break;
5736 }
5737 }
5738 }
5739 }
5740 }
de520661 5741
3e4093b6
RS
5742 /* Ordinarily return, but not if we want to output all
5743 and there are elements left. */
5744 if (! (all && next != 0))
e5cfb88f
RK
5745 return;
5746
3e4093b6
RS
5747 /* If it's not incremental, just skip over the gap, so that after
5748 jumping to retry we will output the next successive element. */
5749 if (TREE_CODE (constructor_type) == RECORD_TYPE
5750 || TREE_CODE (constructor_type) == UNION_TYPE)
5751 constructor_unfilled_fields = next;
5752 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5753 constructor_unfilled_index = next;
de520661 5754
3e4093b6
RS
5755 /* ELT now points to the node in the pending tree with the next
5756 initializer to output. */
5757 goto retry;
de520661
RS
5758}
5759\f
3e4093b6
RS
5760/* Add one non-braced element to the current constructor level.
5761 This adjusts the current position within the constructor's type.
5762 This may also start or terminate implicit levels
5763 to handle a partly-braced initializer.
e5e809f4 5764
3e4093b6
RS
5765 Once this has found the correct level for the new element,
5766 it calls output_init_element. */
5767
5768void
5769process_init_element (tree value)
e5e809f4 5770{
3e4093b6
RS
5771 tree orig_value = value;
5772 int string_flag = value != 0 && TREE_CODE (value) == STRING_CST;
e5e809f4 5773
3e4093b6
RS
5774 designator_depth = 0;
5775 designator_errorneous = 0;
e5e809f4 5776
3e4093b6
RS
5777 /* Handle superfluous braces around string cst as in
5778 char x[] = {"foo"}; */
5779 if (string_flag
5780 && constructor_type
5781 && TREE_CODE (constructor_type) == ARRAY_TYPE
5782 && TREE_CODE (TREE_TYPE (constructor_type)) == INTEGER_TYPE
5783 && integer_zerop (constructor_unfilled_index))
e5e809f4 5784 {
3e4093b6
RS
5785 if (constructor_stack->replacement_value)
5786 error_init ("excess elements in char array initializer");
5787 constructor_stack->replacement_value = value;
5788 return;
e5e809f4 5789 }
8b6a5902 5790
3e4093b6
RS
5791 if (constructor_stack->replacement_value != 0)
5792 {
5793 error_init ("excess elements in struct initializer");
5794 return;
e5e809f4
JL
5795 }
5796
3e4093b6
RS
5797 /* Ignore elements of a brace group if it is entirely superfluous
5798 and has already been diagnosed. */
5799 if (constructor_type == 0)
5800 return;
e5e809f4 5801
3e4093b6
RS
5802 /* If we've exhausted any levels that didn't have braces,
5803 pop them now. */
5804 while (constructor_stack->implicit)
5805 {
5806 if ((TREE_CODE (constructor_type) == RECORD_TYPE
5807 || TREE_CODE (constructor_type) == UNION_TYPE)
5808 && constructor_fields == 0)
5809 process_init_element (pop_init_level (1));
5810 else if (TREE_CODE (constructor_type) == ARRAY_TYPE
5811 && (constructor_max_index == 0
5812 || tree_int_cst_lt (constructor_max_index,
5813 constructor_index)))
5814 process_init_element (pop_init_level (1));
5815 else
5816 break;
5817 }
e5e809f4 5818
3e4093b6
RS
5819 /* In the case of [LO ... HI] = VALUE, only evaluate VALUE once. */
5820 if (constructor_range_stack)
e5e809f4 5821 {
3e4093b6
RS
5822 /* If value is a compound literal and we'll be just using its
5823 content, don't put it into a SAVE_EXPR. */
5824 if (TREE_CODE (value) != COMPOUND_LITERAL_EXPR
5825 || !require_constant_value
5826 || flag_isoc99)
5827 value = save_expr (value);
5828 }
e5e809f4 5829
3e4093b6
RS
5830 while (1)
5831 {
5832 if (TREE_CODE (constructor_type) == RECORD_TYPE)
e5e809f4 5833 {
3e4093b6
RS
5834 tree fieldtype;
5835 enum tree_code fieldcode;
e5e809f4 5836
3e4093b6
RS
5837 if (constructor_fields == 0)
5838 {
5839 pedwarn_init ("excess elements in struct initializer");
5840 break;
5841 }
e5e809f4 5842
3e4093b6
RS
5843 fieldtype = TREE_TYPE (constructor_fields);
5844 if (fieldtype != error_mark_node)
5845 fieldtype = TYPE_MAIN_VARIANT (fieldtype);
5846 fieldcode = TREE_CODE (fieldtype);
e5e809f4 5847
3e4093b6
RS
5848 /* Error for non-static initialization of a flexible array member. */
5849 if (fieldcode == ARRAY_TYPE
5850 && !require_constant_value
5851 && TYPE_SIZE (fieldtype) == NULL_TREE
5852 && TREE_CHAIN (constructor_fields) == NULL_TREE)
5853 {
5854 error_init ("non-static initialization of a flexible array member");
5855 break;
5856 }
e5e809f4 5857
3e4093b6
RS
5858 /* Accept a string constant to initialize a subarray. */
5859 if (value != 0
5860 && fieldcode == ARRAY_TYPE
5861 && TREE_CODE (TREE_TYPE (fieldtype)) == INTEGER_TYPE
5862 && string_flag)
5863 value = orig_value;
5864 /* Otherwise, if we have come to a subaggregate,
5865 and we don't have an element of its type, push into it. */
5866 else if (value != 0 && !constructor_no_implicit
5867 && value != error_mark_node
5868 && TYPE_MAIN_VARIANT (TREE_TYPE (value)) != fieldtype
5869 && (fieldcode == RECORD_TYPE || fieldcode == ARRAY_TYPE
5870 || fieldcode == UNION_TYPE))
5871 {
5872 push_init_level (1);
5873 continue;
5874 }
e5e809f4 5875
3e4093b6
RS
5876 if (value)
5877 {
5878 push_member_name (constructor_fields);
5879 output_init_element (value, fieldtype, constructor_fields, 1);
5880 RESTORE_SPELLING_DEPTH (constructor_depth);
e5e809f4
JL
5881 }
5882 else
3e4093b6
RS
5883 /* Do the bookkeeping for an element that was
5884 directly output as a constructor. */
e5e809f4 5885 {
3e4093b6
RS
5886 /* For a record, keep track of end position of last field. */
5887 if (DECL_SIZE (constructor_fields))
5888 constructor_bit_index
5889 = size_binop (PLUS_EXPR,
5890 bit_position (constructor_fields),
5891 DECL_SIZE (constructor_fields));
5892
5893 /* If the current field was the first one not yet written out,
5894 it isn't now, so update. */
5895 if (constructor_unfilled_fields == constructor_fields)
5896 {
5897 constructor_unfilled_fields = TREE_CHAIN (constructor_fields);
5898 /* Skip any nameless bit fields. */
5899 while (constructor_unfilled_fields != 0
5900 && DECL_C_BIT_FIELD (constructor_unfilled_fields)
5901 && DECL_NAME (constructor_unfilled_fields) == 0)
5902 constructor_unfilled_fields =
5903 TREE_CHAIN (constructor_unfilled_fields);
5904 }
e5e809f4 5905 }
3e4093b6
RS
5906
5907 constructor_fields = TREE_CHAIN (constructor_fields);
5908 /* Skip any nameless bit fields at the beginning. */
5909 while (constructor_fields != 0
5910 && DECL_C_BIT_FIELD (constructor_fields)
5911 && DECL_NAME (constructor_fields) == 0)
5912 constructor_fields = TREE_CHAIN (constructor_fields);
e5e809f4 5913 }
3e4093b6 5914 else if (TREE_CODE (constructor_type) == UNION_TYPE)
e5e809f4 5915 {
3e4093b6
RS
5916 tree fieldtype;
5917 enum tree_code fieldcode;
e5e809f4 5918
3e4093b6
RS
5919 if (constructor_fields == 0)
5920 {
5921 pedwarn_init ("excess elements in union initializer");
5922 break;
5923 }
e5e809f4 5924
3e4093b6
RS
5925 fieldtype = TREE_TYPE (constructor_fields);
5926 if (fieldtype != error_mark_node)
5927 fieldtype = TYPE_MAIN_VARIANT (fieldtype);
5928 fieldcode = TREE_CODE (fieldtype);
e5e809f4 5929
3e4093b6
RS
5930 /* Warn that traditional C rejects initialization of unions.
5931 We skip the warning if the value is zero. This is done
5932 under the assumption that the zero initializer in user
5933 code appears conditioned on e.g. __STDC__ to avoid
5934 "missing initializer" warnings and relies on default
5935 initialization to zero in the traditional C case.
5936 We also skip the warning if the initializer is designated,
5937 again on the assumption that this must be conditional on
5938 __STDC__ anyway (and we've already complained about the
5939 member-designator already). */
5940 if (warn_traditional && !in_system_header && !constructor_designated
5941 && !(value && (integer_zerop (value) || real_zerop (value))))
5942 warning ("traditional C rejects initialization of unions");
e5e809f4 5943
3e4093b6
RS
5944 /* Accept a string constant to initialize a subarray. */
5945 if (value != 0
5946 && fieldcode == ARRAY_TYPE
5947 && TREE_CODE (TREE_TYPE (fieldtype)) == INTEGER_TYPE
5948 && string_flag)
5949 value = orig_value;
5950 /* Otherwise, if we have come to a subaggregate,
5951 and we don't have an element of its type, push into it. */
5952 else if (value != 0 && !constructor_no_implicit
5953 && value != error_mark_node
5954 && TYPE_MAIN_VARIANT (TREE_TYPE (value)) != fieldtype
5955 && (fieldcode == RECORD_TYPE || fieldcode == ARRAY_TYPE
5956 || fieldcode == UNION_TYPE))
5957 {
5958 push_init_level (1);
5959 continue;
5960 }
e5e809f4 5961
3e4093b6
RS
5962 if (value)
5963 {
5964 push_member_name (constructor_fields);
5965 output_init_element (value, fieldtype, constructor_fields, 1);
5966 RESTORE_SPELLING_DEPTH (constructor_depth);
e5e809f4
JL
5967 }
5968 else
3e4093b6
RS
5969 /* Do the bookkeeping for an element that was
5970 directly output as a constructor. */
e5e809f4 5971 {
3e4093b6
RS
5972 constructor_bit_index = DECL_SIZE (constructor_fields);
5973 constructor_unfilled_fields = TREE_CHAIN (constructor_fields);
e5e809f4 5974 }
e5e809f4 5975
3e4093b6
RS
5976 constructor_fields = 0;
5977 }
5978 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5979 {
5980 tree elttype = TYPE_MAIN_VARIANT (TREE_TYPE (constructor_type));
5981 enum tree_code eltcode = TREE_CODE (elttype);
e5e809f4 5982
3e4093b6
RS
5983 /* Accept a string constant to initialize a subarray. */
5984 if (value != 0
5985 && eltcode == ARRAY_TYPE
5986 && TREE_CODE (TREE_TYPE (elttype)) == INTEGER_TYPE
5987 && string_flag)
5988 value = orig_value;
5989 /* Otherwise, if we have come to a subaggregate,
5990 and we don't have an element of its type, push into it. */
5991 else if (value != 0 && !constructor_no_implicit
5992 && value != error_mark_node
5993 && TYPE_MAIN_VARIANT (TREE_TYPE (value)) != elttype
5994 && (eltcode == RECORD_TYPE || eltcode == ARRAY_TYPE
5995 || eltcode == UNION_TYPE))
5996 {
5997 push_init_level (1);
5998 continue;
5999 }
8b6a5902 6000
3e4093b6
RS
6001 if (constructor_max_index != 0
6002 && (tree_int_cst_lt (constructor_max_index, constructor_index)
6003 || integer_all_onesp (constructor_max_index)))
6004 {
6005 pedwarn_init ("excess elements in array initializer");
6006 break;
6007 }
8b6a5902 6008
3e4093b6
RS
6009 /* Now output the actual element. */
6010 if (value)
6011 {
6012 push_array_bounds (tree_low_cst (constructor_index, 0));
6013 output_init_element (value, elttype, constructor_index, 1);
6014 RESTORE_SPELLING_DEPTH (constructor_depth);
6015 }
2f6e4e97 6016
3e4093b6
RS
6017 constructor_index
6018 = size_binop (PLUS_EXPR, constructor_index, bitsize_one_node);
8b6a5902 6019
3e4093b6
RS
6020 if (! value)
6021 /* If we are doing the bookkeeping for an element that was
6022 directly output as a constructor, we must update
6023 constructor_unfilled_index. */
6024 constructor_unfilled_index = constructor_index;
6025 }
6026 else if (TREE_CODE (constructor_type) == VECTOR_TYPE)
6027 {
6028 tree elttype = TYPE_MAIN_VARIANT (TREE_TYPE (constructor_type));
8b6a5902 6029
3e4093b6
RS
6030 /* Do a basic check of initializer size. Note that vectors
6031 always have a fixed size derived from their type. */
6032 if (tree_int_cst_lt (constructor_max_index, constructor_index))
6033 {
6034 pedwarn_init ("excess elements in vector initializer");
6035 break;
6036 }
8b6a5902 6037
3e4093b6
RS
6038 /* Now output the actual element. */
6039 if (value)
6040 output_init_element (value, elttype, constructor_index, 1);
8b6a5902 6041
3e4093b6
RS
6042 constructor_index
6043 = size_binop (PLUS_EXPR, constructor_index, bitsize_one_node);
8b6a5902 6044
3e4093b6
RS
6045 if (! value)
6046 /* If we are doing the bookkeeping for an element that was
6047 directly output as a constructor, we must update
6048 constructor_unfilled_index. */
6049 constructor_unfilled_index = constructor_index;
6050 }
8b6a5902 6051
3e4093b6
RS
6052 /* Handle the sole element allowed in a braced initializer
6053 for a scalar variable. */
6054 else if (constructor_fields == 0)
8b6a5902 6055 {
3e4093b6
RS
6056 pedwarn_init ("excess elements in scalar initializer");
6057 break;
8b6a5902
JJ
6058 }
6059 else
6060 {
3e4093b6
RS
6061 if (value)
6062 output_init_element (value, constructor_type, NULL_TREE, 1);
6063 constructor_fields = 0;
8b6a5902
JJ
6064 }
6065
3e4093b6
RS
6066 /* Handle range initializers either at this level or anywhere higher
6067 in the designator stack. */
6068 if (constructor_range_stack)
8b6a5902 6069 {
3e4093b6
RS
6070 struct constructor_range_stack *p, *range_stack;
6071 int finish = 0;
6072
6073 range_stack = constructor_range_stack;
6074 constructor_range_stack = 0;
6075 while (constructor_stack != range_stack->stack)
8b6a5902 6076 {
3e4093b6
RS
6077 if (!constructor_stack->implicit)
6078 abort ();
6079 process_init_element (pop_init_level (1));
8b6a5902 6080 }
3e4093b6
RS
6081 for (p = range_stack;
6082 !p->range_end || tree_int_cst_equal (p->index, p->range_end);
6083 p = p->prev)
8b6a5902 6084 {
3e4093b6
RS
6085 if (!constructor_stack->implicit)
6086 abort ();
6087 process_init_element (pop_init_level (1));
8b6a5902 6088 }
3e4093b6
RS
6089
6090 p->index = size_binop (PLUS_EXPR, p->index, bitsize_one_node);
6091 if (tree_int_cst_equal (p->index, p->range_end) && !p->prev)
6092 finish = 1;
6093
6094 while (1)
6095 {
6096 constructor_index = p->index;
6097 constructor_fields = p->fields;
6098 if (finish && p->range_end && p->index == p->range_start)
6099 {
6100 finish = 0;
6101 p->prev = 0;
6102 }
6103 p = p->next;
6104 if (!p)
6105 break;
6106 push_init_level (2);
6107 p->stack = constructor_stack;
6108 if (p->range_end && tree_int_cst_equal (p->index, p->range_end))
6109 p->index = p->range_start;
6110 }
6111
6112 if (!finish)
6113 constructor_range_stack = range_stack;
6114 continue;
8b6a5902
JJ
6115 }
6116
3e4093b6 6117 break;
8b6a5902
JJ
6118 }
6119
3e4093b6
RS
6120 constructor_range_stack = 0;
6121}
6122\f
6123/* Build a simple asm-statement, from one string literal. */
6124tree
6125simple_asm_stmt (tree expr)
6126{
6127 STRIP_NOPS (expr);
6128
6129 if (TREE_CODE (expr) == ADDR_EXPR)
6130 expr = TREE_OPERAND (expr, 0);
6131
6132 if (TREE_CODE (expr) == STRING_CST)
6133 {
6134 tree stmt;
6135
6136 /* Simple asm statements are treated as volatile. */
6137 stmt = add_stmt (build_stmt (ASM_STMT, ridpointers[(int) RID_VOLATILE],
6138 expr, NULL_TREE, NULL_TREE, NULL_TREE));
6139 ASM_INPUT_P (stmt) = 1;
6140 return stmt;
6141 }
6142
6143 error ("argument of `asm' is not a constant string");
6144 return NULL_TREE;
8b6a5902
JJ
6145}
6146
3e4093b6
RS
6147/* Build an asm-statement, whose components are a CV_QUALIFIER, a
6148 STRING, some OUTPUTS, some INPUTS, and some CLOBBERS. */
8b6a5902 6149
3e4093b6
RS
6150tree
6151build_asm_stmt (tree cv_qualifier, tree string, tree outputs, tree inputs,
6152 tree clobbers)
e5e809f4 6153{
3e4093b6 6154 tree tail;
e5e809f4 6155
3e4093b6 6156 if (TREE_CODE (string) != STRING_CST)
e5e809f4 6157 {
3e4093b6
RS
6158 error ("asm template is not a string constant");
6159 return NULL_TREE;
6160 }
8b6a5902 6161
3e4093b6
RS
6162 if (cv_qualifier != NULL_TREE
6163 && cv_qualifier != ridpointers[(int) RID_VOLATILE])
6164 {
6165 warning ("%s qualifier ignored on asm",
6166 IDENTIFIER_POINTER (cv_qualifier));
6167 cv_qualifier = NULL_TREE;
e5e809f4 6168 }
3e4093b6
RS
6169
6170 /* We can remove output conversions that change the type,
6171 but not the mode. */
6172 for (tail = outputs; tail; tail = TREE_CHAIN (tail))
e5e809f4 6173 {
3e4093b6 6174 tree output = TREE_VALUE (tail);
8b6a5902 6175
3e4093b6
RS
6176 STRIP_NOPS (output);
6177 TREE_VALUE (tail) = output;
8b6a5902 6178
3e4093b6
RS
6179 /* Allow conversions as LHS here. build_modify_expr as called below
6180 will do the right thing with them. */
6181 while (TREE_CODE (output) == NOP_EXPR
6182 || TREE_CODE (output) == CONVERT_EXPR
6183 || TREE_CODE (output) == FLOAT_EXPR
6184 || TREE_CODE (output) == FIX_TRUNC_EXPR
6185 || TREE_CODE (output) == FIX_FLOOR_EXPR
6186 || TREE_CODE (output) == FIX_ROUND_EXPR
6187 || TREE_CODE (output) == FIX_CEIL_EXPR)
6188 output = TREE_OPERAND (output, 0);
6189
6190 lvalue_or_else (TREE_VALUE (tail), "invalid lvalue in asm statement");
e5e809f4 6191 }
3e4093b6
RS
6192
6193 /* Remove output conversions that change the type but not the mode. */
6194 for (tail = outputs; tail; tail = TREE_CHAIN (tail))
8b6a5902 6195 {
3e4093b6
RS
6196 tree output = TREE_VALUE (tail);
6197 STRIP_NOPS (output);
6198 TREE_VALUE (tail) = output;
8b6a5902 6199 }
3e4093b6
RS
6200
6201 /* Perform default conversions on array and function inputs.
6202 Don't do this for other types as it would screw up operands
6203 expected to be in memory. */
6204 for (tail = inputs; tail; tail = TREE_CHAIN (tail))
6205 TREE_VALUE (tail) = default_function_array_conversion (TREE_VALUE (tail));
6206
6207 return add_stmt (build_stmt (ASM_STMT, cv_qualifier, string,
6208 outputs, inputs, clobbers));
e5e809f4
JL
6209}
6210
3e4093b6
RS
6211/* Expand an ASM statement with operands, handling output operands
6212 that are not variables or INDIRECT_REFS by transforming such
6213 cases into cases that expand_asm_operands can handle.
de520661 6214
3e4093b6 6215 Arguments are same as for expand_asm_operands. */
de520661 6216
3e4093b6
RS
6217void
6218c_expand_asm_operands (tree string, tree outputs, tree inputs,
6219 tree clobbers, int vol, const char *filename,
6220 int line)
de520661 6221{
3e4093b6
RS
6222 int noutputs = list_length (outputs);
6223 int i;
6224 /* o[I] is the place that output number I should be written. */
703ad42b 6225 tree *o = alloca (noutputs * sizeof (tree));
3e4093b6 6226 tree tail;
d3ab9753 6227
3e4093b6
RS
6228 /* Record the contents of OUTPUTS before it is modified. */
6229 for (i = 0, tail = outputs; tail; tail = TREE_CHAIN (tail), i++)
e6ecc89b 6230 {
3e4093b6
RS
6231 o[i] = TREE_VALUE (tail);
6232 if (o[i] == error_mark_node)
6233 return;
e6ecc89b
JJ
6234 }
6235
3e4093b6
RS
6236 /* Generate the ASM_OPERANDS insn; store into the TREE_VALUEs of
6237 OUTPUTS some trees for where the values were actually stored. */
6238 expand_asm_operands (string, outputs, inputs, clobbers, vol, filename, line);
d3ab9753 6239
3e4093b6
RS
6240 /* Copy all the intermediate outputs into the specified outputs. */
6241 for (i = 0, tail = outputs; tail; tail = TREE_CHAIN (tail), i++)
de520661 6242 {
3e4093b6
RS
6243 if (o[i] != TREE_VALUE (tail))
6244 {
6245 expand_expr (build_modify_expr (o[i], NOP_EXPR, TREE_VALUE (tail)),
6246 NULL_RTX, VOIDmode, EXPAND_NORMAL);
6247 free_temp_slots ();
6248
6249 /* Restore the original value so that it's correct the next
6250 time we expand this function. */
6251 TREE_VALUE (tail) = o[i];
6252 }
6253 /* Detect modification of read-only values.
6254 (Otherwise done by build_modify_expr.) */
6255 else
6256 {
6257 tree type = TREE_TYPE (o[i]);
6258 if (TREE_READONLY (o[i])
6259 || TYPE_READONLY (type)
6260 || ((TREE_CODE (type) == RECORD_TYPE
6261 || TREE_CODE (type) == UNION_TYPE)
6262 && C_TYPE_FIELDS_READONLY (type)))
6263 readonly_warning (o[i], "modification by `asm'");
6264 }
de520661 6265 }
8b6a5902 6266
3e4093b6
RS
6267 /* Those MODIFY_EXPRs could do autoincrements. */
6268 emit_queue ();
6269}
6270\f
6271/* Expand a C `return' statement.
6272 RETVAL is the expression for what to return,
6273 or a null pointer for `return;' with no value. */
de520661 6274
3e4093b6
RS
6275tree
6276c_expand_return (tree retval)
6277{
6278 tree valtype = TREE_TYPE (TREE_TYPE (current_function_decl));
6279
6280 if (TREE_THIS_VOLATILE (current_function_decl))
6281 warning ("function declared `noreturn' has a `return' statement");
6282
6283 if (!retval)
de520661 6284 {
3e4093b6
RS
6285 current_function_returns_null = 1;
6286 if ((warn_return_type || flag_isoc99)
6287 && valtype != 0 && TREE_CODE (valtype) != VOID_TYPE)
6288 pedwarn_c99 ("`return' with no value, in function returning non-void");
400fbf9f 6289 }
3e4093b6 6290 else if (valtype == 0 || TREE_CODE (valtype) == VOID_TYPE)
de520661 6291 {
3e4093b6
RS
6292 current_function_returns_null = 1;
6293 if (pedantic || TREE_CODE (TREE_TYPE (retval)) != VOID_TYPE)
6294 pedwarn ("`return' with a value, in function returning void");
de520661 6295 }
3e4093b6 6296 else
de520661 6297 {
3e4093b6
RS
6298 tree t = convert_for_assignment (valtype, retval, _("return"),
6299 NULL_TREE, NULL_TREE, 0);
6300 tree res = DECL_RESULT (current_function_decl);
6301 tree inner;
6302
6303 current_function_returns_value = 1;
6304 if (t == error_mark_node)
6305 return NULL_TREE;
6306
6307 inner = t = convert (TREE_TYPE (res), t);
6308
6309 /* Strip any conversions, additions, and subtractions, and see if
6310 we are returning the address of a local variable. Warn if so. */
6311 while (1)
8b6a5902 6312 {
3e4093b6 6313 switch (TREE_CODE (inner))
8b6a5902 6314 {
3e4093b6
RS
6315 case NOP_EXPR: case NON_LVALUE_EXPR: case CONVERT_EXPR:
6316 case PLUS_EXPR:
6317 inner = TREE_OPERAND (inner, 0);
6318 continue;
6319
6320 case MINUS_EXPR:
6321 /* If the second operand of the MINUS_EXPR has a pointer
6322 type (or is converted from it), this may be valid, so
6323 don't give a warning. */
6324 {
6325 tree op1 = TREE_OPERAND (inner, 1);
8b6a5902 6326
3e4093b6
RS
6327 while (! POINTER_TYPE_P (TREE_TYPE (op1))
6328 && (TREE_CODE (op1) == NOP_EXPR
6329 || TREE_CODE (op1) == NON_LVALUE_EXPR
6330 || TREE_CODE (op1) == CONVERT_EXPR))
6331 op1 = TREE_OPERAND (op1, 0);
8b6a5902 6332
3e4093b6
RS
6333 if (POINTER_TYPE_P (TREE_TYPE (op1)))
6334 break;
8b6a5902 6335
3e4093b6
RS
6336 inner = TREE_OPERAND (inner, 0);
6337 continue;
6338 }
400fbf9f 6339
3e4093b6
RS
6340 case ADDR_EXPR:
6341 inner = TREE_OPERAND (inner, 0);
c2f4acb7 6342
3e4093b6
RS
6343 while (TREE_CODE_CLASS (TREE_CODE (inner)) == 'r')
6344 inner = TREE_OPERAND (inner, 0);
8b6a5902 6345
3e4093b6
RS
6346 if (TREE_CODE (inner) == VAR_DECL
6347 && ! DECL_EXTERNAL (inner)
6348 && ! TREE_STATIC (inner)
6349 && DECL_CONTEXT (inner) == current_function_decl)
6350 warning ("function returns address of local variable");
6351 break;
8b6a5902 6352
3e4093b6
RS
6353 default:
6354 break;
6355 }
de520661 6356
3e4093b6
RS
6357 break;
6358 }
6359
6360 retval = build (MODIFY_EXPR, TREE_TYPE (res), res, t);
de520661 6361 }
8b6a5902 6362
3e4093b6 6363 return add_stmt (build_return_stmt (retval));
de520661 6364}
3e4093b6
RS
6365\f
6366struct c_switch {
6367 /* The SWITCH_STMT being built. */
6368 tree switch_stmt;
6369 /* A splay-tree mapping the low element of a case range to the high
6370 element, or NULL_TREE if there is no high element. Used to
6371 determine whether or not a new case label duplicates an old case
6372 label. We need a tree, rather than simply a hash table, because
6373 of the GNU case range extension. */
6374 splay_tree cases;
6375 /* The next node on the stack. */
6376 struct c_switch *next;
6377};
400fbf9f 6378
3e4093b6
RS
6379/* A stack of the currently active switch statements. The innermost
6380 switch statement is on the top of the stack. There is no need to
6381 mark the stack for garbage collection because it is only active
6382 during the processing of the body of a function, and we never
6383 collect at that point. */
de520661 6384
3e4093b6 6385static struct c_switch *switch_stack;
de520661 6386
3e4093b6
RS
6387/* Start a C switch statement, testing expression EXP. Return the new
6388 SWITCH_STMT. */
de520661 6389
3e4093b6
RS
6390tree
6391c_start_case (tree exp)
de520661 6392{
3e4093b6
RS
6393 enum tree_code code;
6394 tree type, orig_type = error_mark_node;
6395 struct c_switch *cs;
2f6e4e97 6396
3e4093b6 6397 if (exp != error_mark_node)
de520661 6398 {
3e4093b6
RS
6399 code = TREE_CODE (TREE_TYPE (exp));
6400 orig_type = TREE_TYPE (exp);
6401
6402 if (! INTEGRAL_TYPE_P (orig_type)
6403 && code != ERROR_MARK)
de520661 6404 {
3e4093b6
RS
6405 error ("switch quantity not an integer");
6406 exp = integer_zero_node;
de520661 6407 }
3e4093b6 6408 else
de520661 6409 {
3e4093b6 6410 type = TYPE_MAIN_VARIANT (TREE_TYPE (exp));
8b6a5902 6411
3e4093b6
RS
6412 if (warn_traditional && !in_system_header
6413 && (type == long_integer_type_node
6414 || type == long_unsigned_type_node))
6415 warning ("`long' switch expression not converted to `int' in ISO C");
8b6a5902 6416
3e4093b6
RS
6417 exp = default_conversion (exp);
6418 type = TREE_TYPE (exp);
6419 }
6420 }
6421
6422 /* Add this new SWITCH_STMT to the stack. */
703ad42b 6423 cs = xmalloc (sizeof (*cs));
3e4093b6
RS
6424 cs->switch_stmt = build_stmt (SWITCH_STMT, exp, NULL_TREE, orig_type);
6425 cs->cases = splay_tree_new (case_compare, NULL, NULL);
6426 cs->next = switch_stack;
6427 switch_stack = cs;
6428
6429 return add_stmt (switch_stack->switch_stmt);
6430}
6431
6432/* Process a case label. */
6433
6434tree
6435do_case (tree low_value, tree high_value)
6436{
6437 tree label = NULL_TREE;
6438
6439 if (switch_stack)
6440 {
6441 bool switch_was_empty_p = (SWITCH_BODY (switch_stack->switch_stmt) == NULL_TREE);
6442
6443 label = c_add_case_label (switch_stack->cases,
6444 SWITCH_COND (switch_stack->switch_stmt),
6445 low_value, high_value);
6446 if (label == error_mark_node)
6447 label = NULL_TREE;
6448 else if (switch_was_empty_p)
6449 {
6450 /* Attach the first case label to the SWITCH_BODY. */
6451 SWITCH_BODY (switch_stack->switch_stmt) = TREE_CHAIN (switch_stack->switch_stmt);
6452 TREE_CHAIN (switch_stack->switch_stmt) = NULL_TREE;
400fbf9f 6453 }
de520661 6454 }
3e4093b6
RS
6455 else if (low_value)
6456 error ("case label not within a switch statement");
6457 else
6458 error ("`default' label not within a switch statement");
de520661 6459
3e4093b6
RS
6460 return label;
6461}
de520661 6462
3e4093b6 6463/* Finish the switch statement. */
de520661 6464
3e4093b6
RS
6465void
6466c_finish_case (void)
6467{
6468 struct c_switch *cs = switch_stack;
6469
6470 /* Rechain the next statements to the SWITCH_STMT. */
6471 last_tree = cs->switch_stmt;
6472
6473 /* Pop the stack. */
6474 switch_stack = switch_stack->next;
6475 splay_tree_delete (cs->cases);
6476 free (cs);
de520661 6477}
de520661 6478
3e4093b6
RS
6479/* Build a binary-operation expression without default conversions.
6480 CODE is the kind of expression to build.
6481 This function differs from `build' in several ways:
6482 the data type of the result is computed and recorded in it,
6483 warnings are generated if arg data types are invalid,
6484 special handling for addition and subtraction of pointers is known,
6485 and some optimization is done (operations on narrow ints
6486 are done in the narrower type when that gives the same result).
6487 Constant folding is also done before the result is returned.
de520661 6488
3e4093b6
RS
6489 Note that the operands will never have enumeral types, or function
6490 or array types, because either they will have the default conversions
6491 performed or they have both just been converted to some other type in which
6492 the arithmetic is to be done. */
6493
6494tree
6495build_binary_op (enum tree_code code, tree orig_op0, tree orig_op1,
6496 int convert_p)
de520661 6497{
3e4093b6
RS
6498 tree type0, type1;
6499 enum tree_code code0, code1;
6500 tree op0, op1;
b62acd60 6501
3e4093b6
RS
6502 /* Expression code to give to the expression when it is built.
6503 Normally this is CODE, which is what the caller asked for,
6504 but in some special cases we change it. */
6505 enum tree_code resultcode = code;
8b6a5902 6506
3e4093b6
RS
6507 /* Data type in which the computation is to be performed.
6508 In the simplest cases this is the common type of the arguments. */
6509 tree result_type = NULL;
6510
6511 /* Nonzero means operands have already been type-converted
6512 in whatever way is necessary.
6513 Zero means they need to be converted to RESULT_TYPE. */
6514 int converted = 0;
6515
6516 /* Nonzero means create the expression with this type, rather than
6517 RESULT_TYPE. */
6518 tree build_type = 0;
6519
6520 /* Nonzero means after finally constructing the expression
6521 convert it to this type. */
6522 tree final_type = 0;
6523
6524 /* Nonzero if this is an operation like MIN or MAX which can
6525 safely be computed in short if both args are promoted shorts.
6526 Also implies COMMON.
6527 -1 indicates a bitwise operation; this makes a difference
6528 in the exact conditions for when it is safe to do the operation
6529 in a narrower mode. */
6530 int shorten = 0;
6531
6532 /* Nonzero if this is a comparison operation;
6533 if both args are promoted shorts, compare the original shorts.
6534 Also implies COMMON. */
6535 int short_compare = 0;
6536
6537 /* Nonzero if this is a right-shift operation, which can be computed on the
6538 original short and then promoted if the operand is a promoted short. */
6539 int short_shift = 0;
6540
6541 /* Nonzero means set RESULT_TYPE to the common type of the args. */
6542 int common = 0;
6543
6544 if (convert_p)
790e9490 6545 {
3e4093b6
RS
6546 op0 = default_conversion (orig_op0);
6547 op1 = default_conversion (orig_op1);
790e9490 6548 }
3e4093b6 6549 else
790e9490 6550 {
3e4093b6
RS
6551 op0 = orig_op0;
6552 op1 = orig_op1;
790e9490
RS
6553 }
6554
3e4093b6
RS
6555 type0 = TREE_TYPE (op0);
6556 type1 = TREE_TYPE (op1);
91fa3c30 6557
3e4093b6
RS
6558 /* The expression codes of the data types of the arguments tell us
6559 whether the arguments are integers, floating, pointers, etc. */
6560 code0 = TREE_CODE (type0);
6561 code1 = TREE_CODE (type1);
6562
6563 /* Strip NON_LVALUE_EXPRs, etc., since we aren't using as an lvalue. */
6564 STRIP_TYPE_NOPS (op0);
6565 STRIP_TYPE_NOPS (op1);
6566
6567 /* If an error was already reported for one of the arguments,
6568 avoid reporting another error. */
6569
6570 if (code0 == ERROR_MARK || code1 == ERROR_MARK)
6571 return error_mark_node;
6572
6573 switch (code)
de520661 6574 {
3e4093b6
RS
6575 case PLUS_EXPR:
6576 /* Handle the pointer + int case. */
6577 if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
6578 return pointer_int_sum (PLUS_EXPR, op0, op1);
6579 else if (code1 == POINTER_TYPE && code0 == INTEGER_TYPE)
6580 return pointer_int_sum (PLUS_EXPR, op1, op0);
fe67cf58 6581 else
3e4093b6
RS
6582 common = 1;
6583 break;
400fbf9f 6584
3e4093b6
RS
6585 case MINUS_EXPR:
6586 /* Subtraction of two similar pointers.
6587 We must subtract them as integers, then divide by object size. */
6588 if (code0 == POINTER_TYPE && code1 == POINTER_TYPE
6589 && comp_target_types (type0, type1, 1))
6590 return pointer_diff (op0, op1);
6591 /* Handle pointer minus int. Just like pointer plus int. */
6592 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
6593 return pointer_int_sum (MINUS_EXPR, op0, op1);
6594 else
6595 common = 1;
6596 break;
8b6a5902 6597
3e4093b6
RS
6598 case MULT_EXPR:
6599 common = 1;
6600 break;
6601
6602 case TRUNC_DIV_EXPR:
6603 case CEIL_DIV_EXPR:
6604 case FLOOR_DIV_EXPR:
6605 case ROUND_DIV_EXPR:
6606 case EXACT_DIV_EXPR:
6607 /* Floating point division by zero is a legitimate way to obtain
6608 infinities and NaNs. */
6609 if (warn_div_by_zero && skip_evaluation == 0 && integer_zerop (op1))
6610 warning ("division by zero");
6611
6612 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
6613 || code0 == COMPLEX_TYPE || code0 == VECTOR_TYPE)
6614 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
6615 || code1 == COMPLEX_TYPE || code1 == VECTOR_TYPE))
400fbf9f 6616 {
3e4093b6
RS
6617 if (!(code0 == INTEGER_TYPE && code1 == INTEGER_TYPE))
6618 resultcode = RDIV_EXPR;
6619 else
6620 /* Although it would be tempting to shorten always here, that
6621 loses on some targets, since the modulo instruction is
6622 undefined if the quotient can't be represented in the
6623 computation mode. We shorten only if unsigned or if
6624 dividing by something we know != -1. */
6625 shorten = (TREE_UNSIGNED (TREE_TYPE (orig_op0))
6626 || (TREE_CODE (op1) == INTEGER_CST
6627 && ! integer_all_onesp (op1)));
6628 common = 1;
6629 }
6630 break;
de520661 6631
3e4093b6 6632 case BIT_AND_EXPR:
3e4093b6
RS
6633 case BIT_IOR_EXPR:
6634 case BIT_XOR_EXPR:
6635 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
6636 shorten = -1;
6637 else if (code0 == VECTOR_TYPE && code1 == VECTOR_TYPE)
6638 common = 1;
6639 break;
6640
6641 case TRUNC_MOD_EXPR:
6642 case FLOOR_MOD_EXPR:
6643 if (warn_div_by_zero && skip_evaluation == 0 && integer_zerop (op1))
6644 warning ("division by zero");
de520661 6645
3e4093b6
RS
6646 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
6647 {
6648 /* Although it would be tempting to shorten always here, that loses
6649 on some targets, since the modulo instruction is undefined if the
6650 quotient can't be represented in the computation mode. We shorten
6651 only if unsigned or if dividing by something we know != -1. */
6652 shorten = (TREE_UNSIGNED (TREE_TYPE (orig_op0))
6653 || (TREE_CODE (op1) == INTEGER_CST
6654 && ! integer_all_onesp (op1)));
6655 common = 1;
6656 }
6657 break;
de520661 6658
3e4093b6
RS
6659 case TRUTH_ANDIF_EXPR:
6660 case TRUTH_ORIF_EXPR:
6661 case TRUTH_AND_EXPR:
6662 case TRUTH_OR_EXPR:
6663 case TRUTH_XOR_EXPR:
6664 if ((code0 == INTEGER_TYPE || code0 == POINTER_TYPE
6665 || code0 == REAL_TYPE || code0 == COMPLEX_TYPE)
6666 && (code1 == INTEGER_TYPE || code1 == POINTER_TYPE
6667 || code1 == REAL_TYPE || code1 == COMPLEX_TYPE))
6668 {
6669 /* Result of these operations is always an int,
6670 but that does not mean the operands should be
6671 converted to ints! */
6672 result_type = integer_type_node;
6673 op0 = c_common_truthvalue_conversion (op0);
6674 op1 = c_common_truthvalue_conversion (op1);
6675 converted = 1;
6676 }
6677 break;
eba80994 6678
3e4093b6
RS
6679 /* Shift operations: result has same type as first operand;
6680 always convert second operand to int.
6681 Also set SHORT_SHIFT if shifting rightward. */
de520661 6682
3e4093b6
RS
6683 case RSHIFT_EXPR:
6684 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
6685 {
6686 if (TREE_CODE (op1) == INTEGER_CST && skip_evaluation == 0)
b62acd60 6687 {
3e4093b6
RS
6688 if (tree_int_cst_sgn (op1) < 0)
6689 warning ("right shift count is negative");
6690 else
bbb818c6 6691 {
3e4093b6
RS
6692 if (! integer_zerop (op1))
6693 short_shift = 1;
6694
6695 if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
6696 warning ("right shift count >= width of type");
bbb818c6 6697 }
b62acd60 6698 }
de520661 6699
3e4093b6
RS
6700 /* Use the type of the value to be shifted. */
6701 result_type = type0;
6702 /* Convert the shift-count to an integer, regardless of size
6703 of value being shifted. */
6704 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
6705 op1 = convert (integer_type_node, op1);
6706 /* Avoid converting op1 to result_type later. */
6707 converted = 1;
400fbf9f 6708 }
3e4093b6 6709 break;
253b6b82 6710
3e4093b6
RS
6711 case LSHIFT_EXPR:
6712 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
6713 {
6714 if (TREE_CODE (op1) == INTEGER_CST && skip_evaluation == 0)
de520661 6715 {
3e4093b6
RS
6716 if (tree_int_cst_sgn (op1) < 0)
6717 warning ("left shift count is negative");
de520661 6718
3e4093b6
RS
6719 else if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
6720 warning ("left shift count >= width of type");
94ba5069 6721 }
de520661 6722
3e4093b6
RS
6723 /* Use the type of the value to be shifted. */
6724 result_type = type0;
6725 /* Convert the shift-count to an integer, regardless of size
6726 of value being shifted. */
6727 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
6728 op1 = convert (integer_type_node, op1);
6729 /* Avoid converting op1 to result_type later. */
6730 converted = 1;
400fbf9f 6731 }
3e4093b6 6732 break;
de520661 6733
3e4093b6
RS
6734 case RROTATE_EXPR:
6735 case LROTATE_EXPR:
6736 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
6737 {
6738 if (TREE_CODE (op1) == INTEGER_CST && skip_evaluation == 0)
de520661 6739 {
3e4093b6
RS
6740 if (tree_int_cst_sgn (op1) < 0)
6741 warning ("shift count is negative");
6742 else if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
6743 warning ("shift count >= width of type");
de520661
RS
6744 }
6745
3e4093b6
RS
6746 /* Use the type of the value to be shifted. */
6747 result_type = type0;
6748 /* Convert the shift-count to an integer, regardless of size
6749 of value being shifted. */
6750 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
6751 op1 = convert (integer_type_node, op1);
6752 /* Avoid converting op1 to result_type later. */
6753 converted = 1;
6754 }
6755 break;
400fbf9f 6756
3e4093b6
RS
6757 case EQ_EXPR:
6758 case NE_EXPR:
6759 if (warn_float_equal && (code0 == REAL_TYPE || code1 == REAL_TYPE))
6760 warning ("comparing floating point with == or != is unsafe");
6761 /* Result of comparison is always int,
6762 but don't convert the args to int! */
6763 build_type = integer_type_node;
6764 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
6765 || code0 == COMPLEX_TYPE
6766 || code0 == VECTOR_TYPE)
6767 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
6768 || code1 == COMPLEX_TYPE
6769 || code1 == VECTOR_TYPE))
6770 short_compare = 1;
6771 else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
6772 {
6773 tree tt0 = TREE_TYPE (type0);
6774 tree tt1 = TREE_TYPE (type1);
6775 /* Anything compares with void *. void * compares with anything.
6776 Otherwise, the targets must be compatible
6777 and both must be object or both incomplete. */
6778 if (comp_target_types (type0, type1, 1))
6779 result_type = common_type (type0, type1);
6780 else if (VOID_TYPE_P (tt0))
ee2990e7 6781 {
3e4093b6
RS
6782 /* op0 != orig_op0 detects the case of something
6783 whose value is 0 but which isn't a valid null ptr const. */
6784 if (pedantic && (!integer_zerop (op0) || op0 != orig_op0)
6785 && TREE_CODE (tt1) == FUNCTION_TYPE)
6786 pedwarn ("ISO C forbids comparison of `void *' with function pointer");
ee2990e7 6787 }
3e4093b6 6788 else if (VOID_TYPE_P (tt1))
e6834654 6789 {
3e4093b6
RS
6790 if (pedantic && (!integer_zerop (op1) || op1 != orig_op1)
6791 && TREE_CODE (tt0) == FUNCTION_TYPE)
6792 pedwarn ("ISO C forbids comparison of `void *' with function pointer");
e6834654 6793 }
3e4093b6
RS
6794 else
6795 pedwarn ("comparison of distinct pointer types lacks a cast");
e6834654 6796
3e4093b6
RS
6797 if (result_type == NULL_TREE)
6798 result_type = ptr_type_node;
e6834654 6799 }
3e4093b6
RS
6800 else if (code0 == POINTER_TYPE && TREE_CODE (op1) == INTEGER_CST
6801 && integer_zerop (op1))
6802 result_type = type0;
6803 else if (code1 == POINTER_TYPE && TREE_CODE (op0) == INTEGER_CST
6804 && integer_zerop (op0))
6805 result_type = type1;
6806 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
de520661 6807 {
3e4093b6
RS
6808 result_type = type0;
6809 pedwarn ("comparison between pointer and integer");
de520661 6810 }
3e4093b6 6811 else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE)
8b6a5902 6812 {
3e4093b6
RS
6813 result_type = type1;
6814 pedwarn ("comparison between pointer and integer");
8b6a5902 6815 }
3e4093b6 6816 break;
8b6a5902 6817
3e4093b6
RS
6818 case MAX_EXPR:
6819 case MIN_EXPR:
6820 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE)
6821 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE))
6822 shorten = 1;
6823 else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
8b6a5902 6824 {
3e4093b6 6825 if (comp_target_types (type0, type1, 1))
8b6a5902 6826 {
3e4093b6
RS
6827 result_type = common_type (type0, type1);
6828 if (pedantic
6829 && TREE_CODE (TREE_TYPE (type0)) == FUNCTION_TYPE)
6830 pedwarn ("ISO C forbids ordered comparisons of pointers to functions");
8b6a5902 6831 }
3e4093b6 6832 else
8b6a5902 6833 {
3e4093b6
RS
6834 result_type = ptr_type_node;
6835 pedwarn ("comparison of distinct pointer types lacks a cast");
8b6a5902 6836 }
8b6a5902 6837 }
de520661 6838 break;
400fbf9f 6839
3e4093b6
RS
6840 case LE_EXPR:
6841 case GE_EXPR:
6842 case LT_EXPR:
6843 case GT_EXPR:
6844 build_type = integer_type_node;
6845 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE)
6846 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE))
6847 short_compare = 1;
6848 else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
6849 {
6850 if (comp_target_types (type0, type1, 1))
6851 {
6852 result_type = common_type (type0, type1);
6853 if (!COMPLETE_TYPE_P (TREE_TYPE (type0))
6854 != !COMPLETE_TYPE_P (TREE_TYPE (type1)))
6855 pedwarn ("comparison of complete and incomplete pointers");
6856 else if (pedantic
6857 && TREE_CODE (TREE_TYPE (type0)) == FUNCTION_TYPE)
6858 pedwarn ("ISO C forbids ordered comparisons of pointers to functions");
6859 }
6860 else
6861 {
6862 result_type = ptr_type_node;
6863 pedwarn ("comparison of distinct pointer types lacks a cast");
6864 }
6865 }
6866 else if (code0 == POINTER_TYPE && TREE_CODE (op1) == INTEGER_CST
6867 && integer_zerop (op1))
6868 {
6869 result_type = type0;
6870 if (pedantic || extra_warnings)
6871 pedwarn ("ordered comparison of pointer with integer zero");
6872 }
6873 else if (code1 == POINTER_TYPE && TREE_CODE (op0) == INTEGER_CST
6874 && integer_zerop (op0))
6875 {
6876 result_type = type1;
6877 if (pedantic)
6878 pedwarn ("ordered comparison of pointer with integer zero");
6879 }
6880 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
6881 {
6882 result_type = type0;
6883 pedwarn ("comparison between pointer and integer");
6884 }
6885 else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE)
6886 {
6887 result_type = type1;
6888 pedwarn ("comparison between pointer and integer");
6889 }
6890 break;
64094f6a 6891
3e4093b6
RS
6892 case UNORDERED_EXPR:
6893 case ORDERED_EXPR:
6894 case UNLT_EXPR:
6895 case UNLE_EXPR:
6896 case UNGT_EXPR:
6897 case UNGE_EXPR:
6898 case UNEQ_EXPR:
6899 build_type = integer_type_node;
6900 if (code0 != REAL_TYPE || code1 != REAL_TYPE)
6901 {
6902 error ("unordered comparison on non-floating point argument");
6903 return error_mark_node;
6904 }
6905 common = 1;
6906 break;
64094f6a 6907
3e4093b6
RS
6908 default:
6909 break;
c9fe6f9f 6910 }
8f17b5c5 6911
3e4093b6
RS
6912 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE || code0 == COMPLEX_TYPE
6913 || code0 == VECTOR_TYPE)
6914 &&
6915 (code1 == INTEGER_TYPE || code1 == REAL_TYPE || code1 == COMPLEX_TYPE
6916 || code1 == VECTOR_TYPE))
400fbf9f 6917 {
3e4093b6 6918 int none_complex = (code0 != COMPLEX_TYPE && code1 != COMPLEX_TYPE);
39b726dd 6919
3e4093b6
RS
6920 if (shorten || common || short_compare)
6921 result_type = common_type (type0, type1);
400fbf9f 6922
3e4093b6
RS
6923 /* For certain operations (which identify themselves by shorten != 0)
6924 if both args were extended from the same smaller type,
6925 do the arithmetic in that type and then extend.
400fbf9f 6926
3e4093b6
RS
6927 shorten !=0 and !=1 indicates a bitwise operation.
6928 For them, this optimization is safe only if
6929 both args are zero-extended or both are sign-extended.
6930 Otherwise, we might change the result.
6931 Eg, (short)-1 | (unsigned short)-1 is (int)-1
6932 but calculated in (unsigned short) it would be (unsigned short)-1. */
400fbf9f 6933
3e4093b6
RS
6934 if (shorten && none_complex)
6935 {
6936 int unsigned0, unsigned1;
6937 tree arg0 = get_narrower (op0, &unsigned0);
6938 tree arg1 = get_narrower (op1, &unsigned1);
6939 /* UNS is 1 if the operation to be done is an unsigned one. */
6940 int uns = TREE_UNSIGNED (result_type);
6941 tree type;
400fbf9f 6942
3e4093b6 6943 final_type = result_type;
70768eda 6944
3e4093b6
RS
6945 /* Handle the case that OP0 (or OP1) does not *contain* a conversion
6946 but it *requires* conversion to FINAL_TYPE. */
70768eda 6947
3e4093b6
RS
6948 if ((TYPE_PRECISION (TREE_TYPE (op0))
6949 == TYPE_PRECISION (TREE_TYPE (arg0)))
6950 && TREE_TYPE (op0) != final_type)
6951 unsigned0 = TREE_UNSIGNED (TREE_TYPE (op0));
6952 if ((TYPE_PRECISION (TREE_TYPE (op1))
6953 == TYPE_PRECISION (TREE_TYPE (arg1)))
6954 && TREE_TYPE (op1) != final_type)
6955 unsigned1 = TREE_UNSIGNED (TREE_TYPE (op1));
88a3dbc1 6956
3e4093b6 6957 /* Now UNSIGNED0 is 1 if ARG0 zero-extends to FINAL_TYPE. */
abe80e6d 6958
3e4093b6
RS
6959 /* For bitwise operations, signedness of nominal type
6960 does not matter. Consider only how operands were extended. */
6961 if (shorten == -1)
6962 uns = unsigned0;
abe80e6d 6963
3e4093b6
RS
6964 /* Note that in all three cases below we refrain from optimizing
6965 an unsigned operation on sign-extended args.
6966 That would not be valid. */
abe80e6d 6967
3e4093b6
RS
6968 /* Both args variable: if both extended in same way
6969 from same width, do it in that width.
6970 Do it unsigned if args were zero-extended. */
6971 if ((TYPE_PRECISION (TREE_TYPE (arg0))
6972 < TYPE_PRECISION (result_type))
6973 && (TYPE_PRECISION (TREE_TYPE (arg1))
6974 == TYPE_PRECISION (TREE_TYPE (arg0)))
6975 && unsigned0 == unsigned1
6976 && (unsigned0 || !uns))
6977 result_type
6978 = c_common_signed_or_unsigned_type
6979 (unsigned0, common_type (TREE_TYPE (arg0), TREE_TYPE (arg1)));
6980 else if (TREE_CODE (arg0) == INTEGER_CST
6981 && (unsigned1 || !uns)
6982 && (TYPE_PRECISION (TREE_TYPE (arg1))
6983 < TYPE_PRECISION (result_type))
6984 && (type
6985 = c_common_signed_or_unsigned_type (unsigned1,
6986 TREE_TYPE (arg1)),
6987 int_fits_type_p (arg0, type)))
6988 result_type = type;
6989 else if (TREE_CODE (arg1) == INTEGER_CST
6990 && (unsigned0 || !uns)
6991 && (TYPE_PRECISION (TREE_TYPE (arg0))
6992 < TYPE_PRECISION (result_type))
6993 && (type
6994 = c_common_signed_or_unsigned_type (unsigned0,
6995 TREE_TYPE (arg0)),
6996 int_fits_type_p (arg1, type)))
6997 result_type = type;
6998 }
88a3dbc1 6999
3e4093b6 7000 /* Shifts can be shortened if shifting right. */
2f6e4e97 7001
3e4093b6
RS
7002 if (short_shift)
7003 {
7004 int unsigned_arg;
7005 tree arg0 = get_narrower (op0, &unsigned_arg);
88a3dbc1 7006
3e4093b6 7007 final_type = result_type;
abe80e6d 7008
3e4093b6
RS
7009 if (arg0 == op0 && final_type == TREE_TYPE (op0))
7010 unsigned_arg = TREE_UNSIGNED (TREE_TYPE (op0));
e9a25f70 7011
3e4093b6
RS
7012 if (TYPE_PRECISION (TREE_TYPE (arg0)) < TYPE_PRECISION (result_type)
7013 /* We can shorten only if the shift count is less than the
7014 number of bits in the smaller type size. */
7015 && compare_tree_int (op1, TYPE_PRECISION (TREE_TYPE (arg0))) < 0
7016 /* We cannot drop an unsigned shift after sign-extension. */
7017 && (!TREE_UNSIGNED (final_type) || unsigned_arg))
7018 {
7019 /* Do an unsigned shift if the operand was zero-extended. */
7020 result_type
7021 = c_common_signed_or_unsigned_type (unsigned_arg,
7022 TREE_TYPE (arg0));
7023 /* Convert value-to-be-shifted to that type. */
7024 if (TREE_TYPE (op0) != result_type)
7025 op0 = convert (result_type, op0);
7026 converted = 1;
abe80e6d 7027 }
88a3dbc1
RK
7028 }
7029
3e4093b6
RS
7030 /* Comparison operations are shortened too but differently.
7031 They identify themselves by setting short_compare = 1. */
56cb9733 7032
3e4093b6
RS
7033 if (short_compare)
7034 {
7035 /* Don't write &op0, etc., because that would prevent op0
7036 from being kept in a register.
7037 Instead, make copies of the our local variables and
7038 pass the copies by reference, then copy them back afterward. */
7039 tree xop0 = op0, xop1 = op1, xresult_type = result_type;
7040 enum tree_code xresultcode = resultcode;
7041 tree val
7042 = shorten_compare (&xop0, &xop1, &xresult_type, &xresultcode);
8f17b5c5 7043
3e4093b6
RS
7044 if (val != 0)
7045 return val;
8f17b5c5 7046
3e4093b6
RS
7047 op0 = xop0, op1 = xop1;
7048 converted = 1;
7049 resultcode = xresultcode;
8f17b5c5 7050
3e4093b6
RS
7051 if (warn_sign_compare && skip_evaluation == 0)
7052 {
7053 int op0_signed = ! TREE_UNSIGNED (TREE_TYPE (orig_op0));
7054 int op1_signed = ! TREE_UNSIGNED (TREE_TYPE (orig_op1));
7055 int unsignedp0, unsignedp1;
7056 tree primop0 = get_narrower (op0, &unsignedp0);
7057 tree primop1 = get_narrower (op1, &unsignedp1);
400fbf9f 7058
3e4093b6
RS
7059 xop0 = orig_op0;
7060 xop1 = orig_op1;
7061 STRIP_TYPE_NOPS (xop0);
7062 STRIP_TYPE_NOPS (xop1);
e89a9554 7063
3e4093b6
RS
7064 /* Give warnings for comparisons between signed and unsigned
7065 quantities that may fail.
e89a9554 7066
3e4093b6
RS
7067 Do the checking based on the original operand trees, so that
7068 casts will be considered, but default promotions won't be.
400fbf9f 7069
3e4093b6
RS
7070 Do not warn if the comparison is being done in a signed type,
7071 since the signed type will only be chosen if it can represent
7072 all the values of the unsigned type. */
7073 if (! TREE_UNSIGNED (result_type))
7074 /* OK */;
7075 /* Do not warn if both operands are the same signedness. */
7076 else if (op0_signed == op1_signed)
7077 /* OK */;
7078 else
7079 {
7080 tree sop, uop;
8f17b5c5 7081
3e4093b6
RS
7082 if (op0_signed)
7083 sop = xop0, uop = xop1;
7084 else
7085 sop = xop1, uop = xop0;
8f17b5c5 7086
3e4093b6
RS
7087 /* Do not warn if the signed quantity is an
7088 unsuffixed integer literal (or some static
7089 constant expression involving such literals or a
7090 conditional expression involving such literals)
7091 and it is non-negative. */
7092 if (c_tree_expr_nonnegative_p (sop))
7093 /* OK */;
7094 /* Do not warn if the comparison is an equality operation,
7095 the unsigned quantity is an integral constant, and it
7096 would fit in the result if the result were signed. */
7097 else if (TREE_CODE (uop) == INTEGER_CST
7098 && (resultcode == EQ_EXPR || resultcode == NE_EXPR)
7099 && int_fits_type_p
7100 (uop, c_common_signed_type (result_type)))
7101 /* OK */;
7102 /* Do not warn if the unsigned quantity is an enumeration
7103 constant and its maximum value would fit in the result
7104 if the result were signed. */
7105 else if (TREE_CODE (uop) == INTEGER_CST
7106 && TREE_CODE (TREE_TYPE (uop)) == ENUMERAL_TYPE
7107 && int_fits_type_p
7108 (TYPE_MAX_VALUE (TREE_TYPE(uop)),
7109 c_common_signed_type (result_type)))
7110 /* OK */;
7111 else
7112 warning ("comparison between signed and unsigned");
7113 }
8f17b5c5 7114
3e4093b6
RS
7115 /* Warn if two unsigned values are being compared in a size
7116 larger than their original size, and one (and only one) is the
7117 result of a `~' operator. This comparison will always fail.
8f17b5c5 7118
3e4093b6
RS
7119 Also warn if one operand is a constant, and the constant
7120 does not have all bits set that are set in the ~ operand
7121 when it is extended. */
8f17b5c5 7122
3e4093b6
RS
7123 if ((TREE_CODE (primop0) == BIT_NOT_EXPR)
7124 != (TREE_CODE (primop1) == BIT_NOT_EXPR))
7125 {
7126 if (TREE_CODE (primop0) == BIT_NOT_EXPR)
7127 primop0 = get_narrower (TREE_OPERAND (primop0, 0),
7128 &unsignedp0);
7129 else
7130 primop1 = get_narrower (TREE_OPERAND (primop1, 0),
7131 &unsignedp1);
64094f6a 7132
3e4093b6
RS
7133 if (host_integerp (primop0, 0) || host_integerp (primop1, 0))
7134 {
7135 tree primop;
7136 HOST_WIDE_INT constant, mask;
7137 int unsignedp, bits;
2ad1815d 7138
3e4093b6
RS
7139 if (host_integerp (primop0, 0))
7140 {
7141 primop = primop1;
7142 unsignedp = unsignedp1;
7143 constant = tree_low_cst (primop0, 0);
7144 }
7145 else
7146 {
7147 primop = primop0;
7148 unsignedp = unsignedp0;
7149 constant = tree_low_cst (primop1, 0);
7150 }
7151
7152 bits = TYPE_PRECISION (TREE_TYPE (primop));
7153 if (bits < TYPE_PRECISION (result_type)
7154 && bits < HOST_BITS_PER_WIDE_INT && unsignedp)
7155 {
7156 mask = (~ (HOST_WIDE_INT) 0) << bits;
7157 if ((mask & constant) != mask)
7158 warning ("comparison of promoted ~unsigned with constant");
7159 }
7160 }
7161 else if (unsignedp0 && unsignedp1
7162 && (TYPE_PRECISION (TREE_TYPE (primop0))
7163 < TYPE_PRECISION (result_type))
7164 && (TYPE_PRECISION (TREE_TYPE (primop1))
7165 < TYPE_PRECISION (result_type)))
7166 warning ("comparison of promoted ~unsigned with unsigned");
7167 }
7168 }
2ad1815d 7169 }
64094f6a 7170 }
64094f6a 7171
3e4093b6
RS
7172 /* At this point, RESULT_TYPE must be nonzero to avoid an error message.
7173 If CONVERTED is zero, both args will be converted to type RESULT_TYPE.
7174 Then the expression will be built.
7175 It will be given type FINAL_TYPE if that is nonzero;
7176 otherwise, it will be given type RESULT_TYPE. */
400fbf9f 7177
3e4093b6
RS
7178 if (!result_type)
7179 {
7180 binary_op_error (code);
7181 return error_mark_node;
7182 }
400fbf9f 7183
3e4093b6
RS
7184 if (! converted)
7185 {
7186 if (TREE_TYPE (op0) != result_type)
7187 op0 = convert (result_type, op0);
7188 if (TREE_TYPE (op1) != result_type)
7189 op1 = convert (result_type, op1);
7190 }
400fbf9f 7191
3e4093b6
RS
7192 if (build_type == NULL_TREE)
7193 build_type = result_type;
400fbf9f 7194
3e4093b6
RS
7195 {
7196 tree result = build (resultcode, build_type, op0, op1);
7197 tree folded;
7198
7199 /* Treat expressions in initializers specially as they can't trap. */
7200 folded = initializer_stack ? fold_initializer (result)
7201 : fold (result);
7202 if (folded == result)
7203 TREE_CONSTANT (folded) = TREE_CONSTANT (op0) & TREE_CONSTANT (op1);
7204 if (final_type != 0)
7205 return convert (final_type, folded);
7206 return folded;
7207 }
400fbf9f 7208}
3e4093b6 7209
This page took 2.782502 seconds and 5 git commands to generate.