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