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