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