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