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