OSDN Git Service

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