OSDN Git Service

* diagnostic.c (warning): Accept parameter to classify warning option.
[pf3gnuchains/gcc-fork.git] / gcc / c-typeck.c
1 /* Build expressions with type checking for C compiler.
2    Copyright (C) 1987, 1988, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 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            && !(TREE_CODE (expr1) == CONVERT_EXPR
3113                 && VOID_TYPE_P (TREE_TYPE (expr1))))
3114         warning (0, "left-hand operand of comma expression has no effect");
3115     }
3116
3117   /* With -Wunused, we should also warn if the left-hand operand does have
3118      side-effects, but computes a value which is not used.  For example, in
3119      `foo() + bar(), baz()' the result of the `+' operator is not used,
3120      so we should issue a warning.  */
3121   else if (warn_unused_value)
3122     warn_if_unused_value (expr1, input_location);
3123
3124   return build2 (COMPOUND_EXPR, TREE_TYPE (expr2), expr1, expr2);
3125 }
3126
3127 /* Build an expression representing a cast to type TYPE of expression EXPR.  */
3128
3129 tree
3130 build_c_cast (tree type, tree expr)
3131 {
3132   tree value = expr;
3133
3134   if (type == error_mark_node || expr == error_mark_node)
3135     return error_mark_node;
3136
3137   /* The ObjC front-end uses TYPE_MAIN_VARIANT to tie together types differing
3138      only in <protocol> qualifications.  But when constructing cast expressions,
3139      the protocols do matter and must be kept around.  */
3140   if (objc_is_object_ptr (type) && objc_is_object_ptr (TREE_TYPE (expr)))
3141     return build1 (NOP_EXPR, type, expr);
3142
3143   type = TYPE_MAIN_VARIANT (type);
3144
3145   if (TREE_CODE (type) == ARRAY_TYPE)
3146     {
3147       error ("cast specifies array type");
3148       return error_mark_node;
3149     }
3150
3151   if (TREE_CODE (type) == FUNCTION_TYPE)
3152     {
3153       error ("cast specifies function type");
3154       return error_mark_node;
3155     }
3156
3157   if (type == TYPE_MAIN_VARIANT (TREE_TYPE (value)))
3158     {
3159       if (pedantic)
3160         {
3161           if (TREE_CODE (type) == RECORD_TYPE
3162               || TREE_CODE (type) == UNION_TYPE)
3163             pedwarn ("ISO C forbids casting nonscalar to the same type");
3164         }
3165     }
3166   else if (TREE_CODE (type) == UNION_TYPE)
3167     {
3168       tree field;
3169       value = default_function_array_conversion (value);
3170
3171       for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
3172         if (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (field)),
3173                        TYPE_MAIN_VARIANT (TREE_TYPE (value))))
3174           break;
3175
3176       if (field)
3177         {
3178           tree t;
3179
3180           if (pedantic)
3181             pedwarn ("ISO C forbids casts to union type");
3182           t = digest_init (type,
3183                            build_constructor (type,
3184                                               build_tree_list (field, value)),
3185                            true, 0);
3186           TREE_CONSTANT (t) = TREE_CONSTANT (value);
3187           TREE_INVARIANT (t) = TREE_INVARIANT (value);
3188           return t;
3189         }
3190       error ("cast to union type from type not present in union");
3191       return error_mark_node;
3192     }
3193   else
3194     {
3195       tree otype, ovalue;
3196
3197       /* If casting to void, avoid the error that would come
3198          from default_conversion in the case of a non-lvalue array.  */
3199       if (type == void_type_node)
3200         return build1 (CONVERT_EXPR, type, value);
3201
3202       /* Convert functions and arrays to pointers,
3203          but don't convert any other types.  */
3204       value = default_function_array_conversion (value);
3205       otype = TREE_TYPE (value);
3206
3207       /* Optionally warn about potentially worrisome casts.  */
3208
3209       if (warn_cast_qual
3210           && TREE_CODE (type) == POINTER_TYPE
3211           && TREE_CODE (otype) == POINTER_TYPE)
3212         {
3213           tree in_type = type;
3214           tree in_otype = otype;
3215           int added = 0;
3216           int discarded = 0;
3217
3218           /* Check that the qualifiers on IN_TYPE are a superset of
3219              the qualifiers of IN_OTYPE.  The outermost level of
3220              POINTER_TYPE nodes is uninteresting and we stop as soon
3221              as we hit a non-POINTER_TYPE node on either type.  */
3222           do
3223             {
3224               in_otype = TREE_TYPE (in_otype);
3225               in_type = TREE_TYPE (in_type);
3226
3227               /* GNU C allows cv-qualified function types.  'const'
3228                  means the function is very pure, 'volatile' means it
3229                  can't return.  We need to warn when such qualifiers
3230                  are added, not when they're taken away.  */
3231               if (TREE_CODE (in_otype) == FUNCTION_TYPE
3232                   && TREE_CODE (in_type) == FUNCTION_TYPE)
3233                 added |= (TYPE_QUALS (in_type) & ~TYPE_QUALS (in_otype));
3234               else
3235                 discarded |= (TYPE_QUALS (in_otype) & ~TYPE_QUALS (in_type));
3236             }
3237           while (TREE_CODE (in_type) == POINTER_TYPE
3238                  && TREE_CODE (in_otype) == POINTER_TYPE);
3239
3240           if (added)
3241             warning (0, "cast adds new qualifiers to function type");
3242
3243           if (discarded)
3244             /* There are qualifiers present in IN_OTYPE that are not
3245                present in IN_TYPE.  */
3246             warning (0, "cast discards qualifiers from pointer target type");
3247         }
3248
3249       /* Warn about possible alignment problems.  */
3250       if (STRICT_ALIGNMENT && warn_cast_align
3251           && TREE_CODE (type) == POINTER_TYPE
3252           && TREE_CODE (otype) == POINTER_TYPE
3253           && TREE_CODE (TREE_TYPE (otype)) != VOID_TYPE
3254           && TREE_CODE (TREE_TYPE (otype)) != FUNCTION_TYPE
3255           /* Don't warn about opaque types, where the actual alignment
3256              restriction is unknown.  */
3257           && !((TREE_CODE (TREE_TYPE (otype)) == UNION_TYPE
3258                 || TREE_CODE (TREE_TYPE (otype)) == RECORD_TYPE)
3259                && TYPE_MODE (TREE_TYPE (otype)) == VOIDmode)
3260           && TYPE_ALIGN (TREE_TYPE (type)) > TYPE_ALIGN (TREE_TYPE (otype)))
3261         warning (0, "cast increases required alignment of target type");
3262
3263       if (warn_pointer_to_int_cast
3264           && TREE_CODE (type) == INTEGER_TYPE
3265           && TREE_CODE (otype) == POINTER_TYPE
3266           && TYPE_PRECISION (type) != TYPE_PRECISION (otype)
3267           && !TREE_CONSTANT (value))
3268         warning (0, "cast from pointer to integer of different size");
3269
3270       if (warn_bad_function_cast
3271           && TREE_CODE (value) == CALL_EXPR
3272           && TREE_CODE (type) != TREE_CODE (otype))
3273         warning (0, "cast from function call of type %qT to non-matching "
3274                  "type %qT", otype, type);
3275
3276       if (warn_int_to_pointer_cast
3277           && TREE_CODE (type) == POINTER_TYPE
3278           && TREE_CODE (otype) == INTEGER_TYPE
3279           && TYPE_PRECISION (type) != TYPE_PRECISION (otype)
3280           /* Don't warn about converting any constant.  */
3281           && !TREE_CONSTANT (value))
3282         warning (0, "cast to pointer from integer of different size");
3283
3284       if (TREE_CODE (type) == POINTER_TYPE
3285           && TREE_CODE (otype) == POINTER_TYPE
3286           && TREE_CODE (expr) == ADDR_EXPR
3287           && DECL_P (TREE_OPERAND (expr, 0))
3288           && flag_strict_aliasing && warn_strict_aliasing
3289           && !VOID_TYPE_P (TREE_TYPE (type)))
3290         {
3291           /* Casting the address of a decl to non void pointer. Warn
3292              if the cast breaks type based aliasing.  */
3293           if (!COMPLETE_TYPE_P (TREE_TYPE (type)))
3294             warning (0, "type-punning to incomplete type might break strict-aliasing rules");
3295           else
3296             {
3297               HOST_WIDE_INT set1 = get_alias_set (TREE_TYPE (TREE_OPERAND (expr, 0)));
3298               HOST_WIDE_INT set2 = get_alias_set (TREE_TYPE (type));
3299
3300               if (!alias_sets_conflict_p (set1, set2))
3301                 warning (0, "dereferencing type-punned pointer will break strict-aliasing rules");
3302               else if (warn_strict_aliasing > 1
3303                        && !alias_sets_might_conflict_p (set1, set2))
3304                 warning (0, "dereferencing type-punned pointer might break strict-aliasing rules");
3305             }
3306         }
3307
3308       /* If pedantic, warn for conversions between function and object
3309          pointer types, except for converting a null pointer constant
3310          to function pointer type.  */
3311       if (pedantic
3312           && TREE_CODE (type) == POINTER_TYPE
3313           && TREE_CODE (otype) == POINTER_TYPE
3314           && TREE_CODE (TREE_TYPE (otype)) == FUNCTION_TYPE
3315           && TREE_CODE (TREE_TYPE (type)) != FUNCTION_TYPE)
3316         pedwarn ("ISO C forbids conversion of function pointer to object pointer type");
3317
3318       if (pedantic
3319           && TREE_CODE (type) == POINTER_TYPE
3320           && TREE_CODE (otype) == POINTER_TYPE
3321           && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE
3322           && TREE_CODE (TREE_TYPE (otype)) != FUNCTION_TYPE
3323           && !(integer_zerop (value) && TREE_TYPE (otype) == void_type_node
3324                && TREE_CODE (expr) != NOP_EXPR))
3325         pedwarn ("ISO C forbids conversion of object pointer to function pointer type");
3326
3327       ovalue = value;
3328       value = convert (type, value);
3329
3330       /* Ignore any integer overflow caused by the cast.  */
3331       if (TREE_CODE (value) == INTEGER_CST)
3332         {
3333           if (EXPR_P (ovalue))
3334             /* If OVALUE had overflow set, then so will VALUE, so it
3335                is safe to overwrite.  */
3336             TREE_OVERFLOW (value) = TREE_OVERFLOW (ovalue);
3337           else
3338             TREE_OVERFLOW (value) = 0;
3339           
3340           if (CONSTANT_CLASS_P (ovalue))
3341             /* Similarly, constant_overflow cannot have become
3342                cleared.  */
3343             TREE_CONSTANT_OVERFLOW (value) = TREE_CONSTANT_OVERFLOW (ovalue);
3344         }
3345     }
3346
3347   /* Don't let a cast be an lvalue.  */
3348   if (value == expr)
3349     value = non_lvalue (value);
3350
3351   return value;
3352 }
3353
3354 /* Interpret a cast of expression EXPR to type TYPE.  */
3355 tree
3356 c_cast_expr (struct c_type_name *type_name, tree expr)
3357 {
3358   tree type;
3359   int saved_wsp = warn_strict_prototypes;
3360
3361   /* This avoids warnings about unprototyped casts on
3362      integers.  E.g. "#define SIG_DFL (void(*)())0".  */
3363   if (TREE_CODE (expr) == INTEGER_CST)
3364     warn_strict_prototypes = 0;
3365   type = groktypename (type_name);
3366   warn_strict_prototypes = saved_wsp;
3367
3368   return build_c_cast (type, expr);
3369 }
3370
3371 \f
3372 /* Build an assignment expression of lvalue LHS from value RHS.
3373    MODIFYCODE is the code for a binary operator that we use
3374    to combine the old value of LHS with RHS to get the new value.
3375    Or else MODIFYCODE is NOP_EXPR meaning do a simple assignment.  */
3376
3377 tree
3378 build_modify_expr (tree lhs, enum tree_code modifycode, tree rhs)
3379 {
3380   tree result;
3381   tree newrhs;
3382   tree lhstype = TREE_TYPE (lhs);
3383   tree olhstype = lhstype;
3384
3385   /* Types that aren't fully specified cannot be used in assignments.  */
3386   lhs = require_complete_type (lhs);
3387
3388   /* Avoid duplicate error messages from operands that had errors.  */
3389   if (TREE_CODE (lhs) == ERROR_MARK || TREE_CODE (rhs) == ERROR_MARK)
3390     return error_mark_node;
3391
3392   STRIP_TYPE_NOPS (rhs);
3393
3394   newrhs = rhs;
3395
3396   /* If a binary op has been requested, combine the old LHS value with the RHS
3397      producing the value we should actually store into the LHS.  */
3398
3399   if (modifycode != NOP_EXPR)
3400     {
3401       lhs = stabilize_reference (lhs);
3402       newrhs = build_binary_op (modifycode, lhs, rhs, 1);
3403     }
3404
3405   if (!lvalue_or_else (lhs, lv_assign))
3406     return error_mark_node;
3407
3408   /* Give an error for storing in something that is 'const'.  */
3409
3410   if (TREE_READONLY (lhs) || TYPE_READONLY (lhstype)
3411       || ((TREE_CODE (lhstype) == RECORD_TYPE
3412            || TREE_CODE (lhstype) == UNION_TYPE)
3413           && C_TYPE_FIELDS_READONLY (lhstype)))
3414     readonly_error (lhs, lv_assign);
3415
3416   /* If storing into a structure or union member,
3417      it has probably been given type `int'.
3418      Compute the type that would go with
3419      the actual amount of storage the member occupies.  */
3420
3421   if (TREE_CODE (lhs) == COMPONENT_REF
3422       && (TREE_CODE (lhstype) == INTEGER_TYPE
3423           || TREE_CODE (lhstype) == BOOLEAN_TYPE
3424           || TREE_CODE (lhstype) == REAL_TYPE
3425           || TREE_CODE (lhstype) == ENUMERAL_TYPE))
3426     lhstype = TREE_TYPE (get_unwidened (lhs, 0));
3427
3428   /* If storing in a field that is in actuality a short or narrower than one,
3429      we must store in the field in its actual type.  */
3430
3431   if (lhstype != TREE_TYPE (lhs))
3432     {
3433       lhs = copy_node (lhs);
3434       TREE_TYPE (lhs) = lhstype;
3435     }
3436
3437   /* Convert new value to destination type.  */
3438
3439   newrhs = convert_for_assignment (lhstype, newrhs, ic_assign,
3440                                    NULL_TREE, NULL_TREE, 0);
3441   if (TREE_CODE (newrhs) == ERROR_MARK)
3442     return error_mark_node;
3443
3444   /* Scan operands.  */
3445
3446   result = build2 (MODIFY_EXPR, lhstype, lhs, newrhs);
3447   TREE_SIDE_EFFECTS (result) = 1;
3448
3449   /* If we got the LHS in a different type for storing in,
3450      convert the result back to the nominal type of LHS
3451      so that the value we return always has the same type
3452      as the LHS argument.  */
3453
3454   if (olhstype == TREE_TYPE (result))
3455     return result;
3456   return convert_for_assignment (olhstype, result, ic_assign,
3457                                  NULL_TREE, NULL_TREE, 0);
3458 }
3459 \f
3460 /* Convert value RHS to type TYPE as preparation for an assignment
3461    to an lvalue of type TYPE.
3462    The real work of conversion is done by `convert'.
3463    The purpose of this function is to generate error messages
3464    for assignments that are not allowed in C.
3465    ERRTYPE says whether it is argument passing, assignment,
3466    initialization or return.
3467
3468    FUNCTION is a tree for the function being called.
3469    PARMNUM is the number of the argument, for printing in error messages.  */
3470
3471 static tree
3472 convert_for_assignment (tree type, tree rhs, enum impl_conv errtype,
3473                         tree fundecl, tree function, int parmnum)
3474 {
3475   enum tree_code codel = TREE_CODE (type);
3476   tree rhstype;
3477   enum tree_code coder;
3478   tree rname = NULL_TREE;
3479
3480   if (errtype == ic_argpass || errtype == ic_argpass_nonproto)
3481     {
3482       tree selector;
3483       /* Change pointer to function to the function itself for
3484          diagnostics.  */
3485       if (TREE_CODE (function) == ADDR_EXPR
3486           && TREE_CODE (TREE_OPERAND (function, 0)) == FUNCTION_DECL)
3487         function = TREE_OPERAND (function, 0);
3488
3489       /* Handle an ObjC selector specially for diagnostics.  */
3490       selector = objc_message_selector ();
3491       rname = function;
3492       if (selector && parmnum > 2)
3493         {
3494           rname = selector;
3495           parmnum -= 2;
3496         }
3497     }
3498
3499   /* This macro is used to emit diagnostics to ensure that all format
3500      strings are complete sentences, visible to gettext and checked at
3501      compile time.  */
3502 #define WARN_FOR_ASSIGNMENT(AR, AS, IN, RE)     \
3503   do {                                          \
3504     switch (errtype)                            \
3505       {                                         \
3506       case ic_argpass:                          \
3507         pedwarn (AR, parmnum, rname);           \
3508         break;                                  \
3509       case ic_argpass_nonproto:                 \
3510         warning (0, AR, parmnum, rname);                \
3511         break;                                  \
3512       case ic_assign:                           \
3513         pedwarn (AS);                           \
3514         break;                                  \
3515       case ic_init:                             \
3516         pedwarn (IN);                           \
3517         break;                                  \
3518       case ic_return:                           \
3519         pedwarn (RE);                           \
3520         break;                                  \
3521       default:                                  \
3522         gcc_unreachable ();                     \
3523       }                                         \
3524   } while (0)
3525
3526   STRIP_TYPE_NOPS (rhs);
3527
3528   if (TREE_CODE (TREE_TYPE (rhs)) == ARRAY_TYPE
3529       || TREE_CODE (TREE_TYPE (rhs)) == FUNCTION_TYPE)
3530     rhs = default_conversion (rhs);
3531   else if (optimize && TREE_CODE (rhs) == VAR_DECL)
3532     rhs = decl_constant_value_for_broken_optimization (rhs);
3533
3534   rhstype = TREE_TYPE (rhs);
3535   coder = TREE_CODE (rhstype);
3536
3537   if (coder == ERROR_MARK)
3538     return error_mark_node;
3539
3540   if (TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (rhstype))
3541     {
3542       overflow_warning (rhs);
3543       /* Check for Objective-C protocols.  This will automatically
3544          issue a warning if there are protocol violations.  No need to
3545          use the return value.  */
3546       if (c_dialect_objc ())
3547         objc_comptypes (type, rhstype, 0);
3548       return rhs;
3549     }
3550
3551   if (coder == VOID_TYPE)
3552     {
3553       /* Except for passing an argument to an unprototyped function,
3554          this is a constraint violation.  When passing an argument to
3555          an unprototyped function, it is compile-time undefined;
3556          making it a constraint in that case was rejected in
3557          DR#252.  */
3558       error ("void value not ignored as it ought to be");
3559       return error_mark_node;
3560     }
3561   /* A type converts to a reference to it.
3562      This code doesn't fully support references, it's just for the
3563      special case of va_start and va_copy.  */
3564   if (codel == REFERENCE_TYPE
3565       && comptypes (TREE_TYPE (type), TREE_TYPE (rhs)) == 1)
3566     {
3567       if (!lvalue_p (rhs))
3568         {
3569           error ("cannot pass rvalue to reference parameter");
3570           return error_mark_node;
3571         }
3572       if (!c_mark_addressable (rhs))
3573         return error_mark_node;
3574       rhs = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (rhs)), rhs);
3575
3576       /* We already know that these two types are compatible, but they
3577          may not be exactly identical.  In fact, `TREE_TYPE (type)' is
3578          likely to be __builtin_va_list and `TREE_TYPE (rhs)' is
3579          likely to be va_list, a typedef to __builtin_va_list, which
3580          is different enough that it will cause problems later.  */
3581       if (TREE_TYPE (TREE_TYPE (rhs)) != TREE_TYPE (type))
3582         rhs = build1 (NOP_EXPR, build_pointer_type (TREE_TYPE (type)), rhs);
3583
3584       rhs = build1 (NOP_EXPR, type, rhs);
3585       return rhs;
3586     }
3587   /* Some types can interconvert without explicit casts.  */
3588   else if (codel == VECTOR_TYPE && coder == VECTOR_TYPE
3589            && vector_types_convertible_p (type, TREE_TYPE (rhs)))
3590     return convert (type, rhs);
3591   /* Arithmetic types all interconvert, and enum is treated like int.  */
3592   else if ((codel == INTEGER_TYPE || codel == REAL_TYPE
3593             || codel == ENUMERAL_TYPE || codel == COMPLEX_TYPE
3594             || codel == BOOLEAN_TYPE)
3595            && (coder == INTEGER_TYPE || coder == REAL_TYPE
3596                || coder == ENUMERAL_TYPE || coder == COMPLEX_TYPE
3597                || coder == BOOLEAN_TYPE))
3598     return convert_and_check (type, rhs);
3599
3600   /* Conversion to a transparent union from its member types.
3601      This applies only to function arguments.  */
3602   else if (codel == UNION_TYPE && TYPE_TRANSPARENT_UNION (type)
3603            && (errtype == ic_argpass || errtype == ic_argpass_nonproto))
3604     {
3605       tree memb_types;
3606       tree marginal_memb_type = 0;
3607
3608       for (memb_types = TYPE_FIELDS (type); memb_types;
3609            memb_types = TREE_CHAIN (memb_types))
3610         {
3611           tree memb_type = TREE_TYPE (memb_types);
3612
3613           if (comptypes (TYPE_MAIN_VARIANT (memb_type),
3614                          TYPE_MAIN_VARIANT (rhstype)))
3615             break;
3616
3617           if (TREE_CODE (memb_type) != POINTER_TYPE)
3618             continue;
3619
3620           if (coder == POINTER_TYPE)
3621             {
3622               tree ttl = TREE_TYPE (memb_type);
3623               tree ttr = TREE_TYPE (rhstype);
3624
3625               /* Any non-function converts to a [const][volatile] void *
3626                  and vice versa; otherwise, targets must be the same.
3627                  Meanwhile, the lhs target must have all the qualifiers of
3628                  the rhs.  */
3629               if (VOID_TYPE_P (ttl) || VOID_TYPE_P (ttr)
3630                   || comp_target_types (memb_type, rhstype, 0))
3631                 {
3632                   /* If this type won't generate any warnings, use it.  */
3633                   if (TYPE_QUALS (ttl) == TYPE_QUALS (ttr)
3634                       || ((TREE_CODE (ttr) == FUNCTION_TYPE
3635                            && TREE_CODE (ttl) == FUNCTION_TYPE)
3636                           ? ((TYPE_QUALS (ttl) | TYPE_QUALS (ttr))
3637                              == TYPE_QUALS (ttr))
3638                           : ((TYPE_QUALS (ttl) | TYPE_QUALS (ttr))
3639                              == TYPE_QUALS (ttl))))
3640                     break;
3641
3642                   /* Keep looking for a better type, but remember this one.  */
3643                   if (!marginal_memb_type)
3644                     marginal_memb_type = memb_type;
3645                 }
3646             }
3647
3648           /* Can convert integer zero to any pointer type.  */
3649           if (integer_zerop (rhs)
3650               || (TREE_CODE (rhs) == NOP_EXPR
3651                   && integer_zerop (TREE_OPERAND (rhs, 0))))
3652             {
3653               rhs = null_pointer_node;
3654               break;
3655             }
3656         }
3657
3658       if (memb_types || marginal_memb_type)
3659         {
3660           if (!memb_types)
3661             {
3662               /* We have only a marginally acceptable member type;
3663                  it needs a warning.  */
3664               tree ttl = TREE_TYPE (marginal_memb_type);
3665               tree ttr = TREE_TYPE (rhstype);
3666
3667               /* Const and volatile mean something different for function
3668                  types, so the usual warnings are not appropriate.  */
3669               if (TREE_CODE (ttr) == FUNCTION_TYPE
3670                   && TREE_CODE (ttl) == FUNCTION_TYPE)
3671                 {
3672                   /* Because const and volatile on functions are
3673                      restrictions that say the function will not do
3674                      certain things, it is okay to use a const or volatile
3675                      function where an ordinary one is wanted, but not
3676                      vice-versa.  */
3677                   if (TYPE_QUALS (ttl) & ~TYPE_QUALS (ttr))
3678                     WARN_FOR_ASSIGNMENT (N_("passing argument %d of %qE "
3679                                             "makes qualified function "
3680                                             "pointer from unqualified"),
3681                                          N_("assignment makes qualified "
3682                                             "function pointer from "
3683                                             "unqualified"),
3684                                          N_("initialization makes qualified "
3685                                             "function pointer from "
3686                                             "unqualified"),
3687                                          N_("return makes qualified function "
3688                                             "pointer from unqualified"));
3689                 }
3690               else if (TYPE_QUALS (ttr) & ~TYPE_QUALS (ttl))
3691                 WARN_FOR_ASSIGNMENT (N_("passing argument %d of %qE discards "
3692                                         "qualifiers from pointer target type"),
3693                                      N_("assignment discards qualifiers "
3694                                         "from pointer target type"),
3695                                      N_("initialization discards qualifiers "
3696                                         "from pointer target type"),
3697                                      N_("return discards qualifiers from "
3698                                         "pointer target type"));
3699             }
3700
3701           if (pedantic && !DECL_IN_SYSTEM_HEADER (fundecl))
3702             pedwarn ("ISO C prohibits argument conversion to union type");
3703
3704           return build1 (NOP_EXPR, type, rhs);
3705         }
3706     }
3707
3708   /* Conversions among pointers */
3709   else if ((codel == POINTER_TYPE || codel == REFERENCE_TYPE)
3710            && (coder == codel))
3711     {
3712       tree ttl = TREE_TYPE (type);
3713       tree ttr = TREE_TYPE (rhstype);
3714       tree mvl = ttl;
3715       tree mvr = ttr;
3716       bool is_opaque_pointer;
3717       int target_cmp = 0;   /* Cache comp_target_types () result.  */
3718
3719       if (TREE_CODE (mvl) != ARRAY_TYPE)
3720         mvl = TYPE_MAIN_VARIANT (mvl);
3721       if (TREE_CODE (mvr) != ARRAY_TYPE)
3722         mvr = TYPE_MAIN_VARIANT (mvr);
3723       /* Opaque pointers are treated like void pointers.  */
3724       is_opaque_pointer = (targetm.vector_opaque_p (type)
3725                            || targetm.vector_opaque_p (rhstype))
3726         && TREE_CODE (ttl) == VECTOR_TYPE
3727         && TREE_CODE (ttr) == VECTOR_TYPE;
3728
3729       /* Any non-function converts to a [const][volatile] void *
3730          and vice versa; otherwise, targets must be the same.
3731          Meanwhile, the lhs target must have all the qualifiers of the rhs.  */
3732       if (VOID_TYPE_P (ttl) || VOID_TYPE_P (ttr)
3733           || (target_cmp = comp_target_types (type, rhstype, 0))
3734           || is_opaque_pointer
3735           || (c_common_unsigned_type (mvl)
3736               == c_common_unsigned_type (mvr)))
3737         {
3738           if (pedantic
3739               && ((VOID_TYPE_P (ttl) && TREE_CODE (ttr) == FUNCTION_TYPE)
3740                   ||
3741                   (VOID_TYPE_P (ttr)
3742                    /* Check TREE_CODE to catch cases like (void *) (char *) 0
3743                       which are not ANSI null ptr constants.  */
3744                    && (!integer_zerop (rhs) || TREE_CODE (rhs) == NOP_EXPR)
3745                    && TREE_CODE (ttl) == FUNCTION_TYPE)))
3746             WARN_FOR_ASSIGNMENT (N_("ISO C forbids passing argument %d of "
3747                                     "%qE between function pointer "
3748                                     "and %<void *%>"),
3749                                  N_("ISO C forbids assignment between "
3750                                     "function pointer and %<void *%>"),
3751                                  N_("ISO C forbids initialization between "
3752                                     "function pointer and %<void *%>"),
3753                                  N_("ISO C forbids return between function "
3754                                     "pointer and %<void *%>"));
3755           /* Const and volatile mean something different for function types,
3756              so the usual warnings are not appropriate.  */
3757           else if (TREE_CODE (ttr) != FUNCTION_TYPE
3758                    && TREE_CODE (ttl) != FUNCTION_TYPE)
3759             {
3760               if (TYPE_QUALS (ttr) & ~TYPE_QUALS (ttl))
3761                 WARN_FOR_ASSIGNMENT (N_("passing argument %d of %qE discards "
3762                                         "qualifiers from pointer target type"),
3763                                      N_("assignment discards qualifiers "
3764                                         "from pointer target type"),
3765                                      N_("initialization discards qualifiers "
3766                                         "from pointer target type"),
3767                                      N_("return discards qualifiers from "
3768                                         "pointer target type"));
3769               /* If this is not a case of ignoring a mismatch in signedness,
3770                  no warning.  */
3771               else if (VOID_TYPE_P (ttl) || VOID_TYPE_P (ttr)
3772                        || target_cmp)
3773                 ;
3774               /* If there is a mismatch, do warn.  */
3775               else if (warn_pointer_sign)
3776                 WARN_FOR_ASSIGNMENT (N_("pointer targets in passing argument "
3777                                         "%d of %qE differ in signedness"),
3778                                      N_("pointer targets in assignment "
3779                                         "differ in signedness"),
3780                                      N_("pointer targets in initialization "
3781                                         "differ in signedness"),
3782                                      N_("pointer targets in return differ "
3783                                         "in signedness"));
3784             }
3785           else if (TREE_CODE (ttl) == FUNCTION_TYPE
3786                    && TREE_CODE (ttr) == FUNCTION_TYPE)
3787             {
3788               /* Because const and volatile on functions are restrictions
3789                  that say the function will not do certain things,
3790                  it is okay to use a const or volatile function
3791                  where an ordinary one is wanted, but not vice-versa.  */
3792               if (TYPE_QUALS (ttl) & ~TYPE_QUALS (ttr))
3793                 WARN_FOR_ASSIGNMENT (N_("passing argument %d of %qE makes "
3794                                         "qualified function pointer "
3795                                         "from unqualified"),
3796                                      N_("assignment makes qualified function "
3797                                         "pointer from unqualified"),
3798                                      N_("initialization makes qualified "
3799                                         "function pointer from unqualified"),
3800                                      N_("return makes qualified function "
3801                                         "pointer from unqualified"));
3802             }
3803         }
3804       else
3805         WARN_FOR_ASSIGNMENT (N_("passing argument %d of %qE from "
3806                                 "incompatible pointer type"),
3807                              N_("assignment from incompatible pointer type"),
3808                              N_("initialization from incompatible "
3809                                 "pointer type"),
3810                              N_("return from incompatible pointer type"));
3811       return convert (type, rhs);
3812     }
3813   else if (codel == POINTER_TYPE && coder == ARRAY_TYPE)
3814     {
3815       /* ??? This should not be an error when inlining calls to
3816          unprototyped functions.  */
3817       error ("invalid use of non-lvalue array");
3818       return error_mark_node;
3819     }
3820   else if (codel == POINTER_TYPE && coder == INTEGER_TYPE)
3821     {
3822       /* An explicit constant 0 can convert to a pointer,
3823          or one that results from arithmetic, even including
3824          a cast to integer type.  */
3825       if (!(TREE_CODE (rhs) == INTEGER_CST && integer_zerop (rhs))
3826           &&
3827           !(TREE_CODE (rhs) == NOP_EXPR
3828             && TREE_CODE (TREE_TYPE (rhs)) == INTEGER_TYPE
3829             && TREE_CODE (TREE_OPERAND (rhs, 0)) == INTEGER_CST
3830             && integer_zerop (TREE_OPERAND (rhs, 0))))
3831         WARN_FOR_ASSIGNMENT (N_("passing argument %d of %qE makes "
3832                                 "pointer from integer without a cast"),
3833                              N_("assignment makes pointer from integer "
3834                                 "without a cast"),
3835                              N_("initialization makes pointer from "
3836                                 "integer without a cast"),
3837                              N_("return makes pointer from integer "
3838                                 "without a cast"));
3839
3840       return convert (type, rhs);
3841     }
3842   else if (codel == INTEGER_TYPE && coder == POINTER_TYPE)
3843     {
3844       WARN_FOR_ASSIGNMENT (N_("passing argument %d of %qE makes integer "
3845                               "from pointer without a cast"),
3846                            N_("assignment makes integer from pointer "
3847                               "without a cast"),
3848                            N_("initialization makes integer from pointer "
3849                               "without a cast"),
3850                            N_("return makes integer from pointer "
3851                               "without a cast"));
3852       return convert (type, rhs);
3853     }
3854   else if (codel == BOOLEAN_TYPE && coder == POINTER_TYPE)
3855     return convert (type, rhs);
3856
3857   switch (errtype)
3858     {
3859     case ic_argpass:
3860     case ic_argpass_nonproto:
3861       /* ??? This should not be an error when inlining calls to
3862          unprototyped functions.  */
3863       error ("incompatible type for argument %d of %qE", parmnum, rname);
3864       break;
3865     case ic_assign:
3866       error ("incompatible types in assignment");
3867       break;
3868     case ic_init:
3869       error ("incompatible types in initialization");
3870       break;
3871     case ic_return:
3872       error ("incompatible types in return");
3873       break;
3874     default:
3875       gcc_unreachable ();
3876     }
3877
3878   return error_mark_node;
3879 }
3880
3881 /* Convert VALUE for assignment into inlined parameter PARM.  ARGNUM
3882    is used for error and waring reporting and indicates which argument
3883    is being processed.  */
3884
3885 tree
3886 c_convert_parm_for_inlining (tree parm, tree value, tree fn, int argnum)
3887 {
3888   tree ret, type;
3889
3890   /* If FN was prototyped, the value has been converted already
3891      in convert_arguments.  */
3892   if (!value || TYPE_ARG_TYPES (TREE_TYPE (fn)))
3893     return value;
3894
3895   type = TREE_TYPE (parm);
3896   ret = convert_for_assignment (type, value,
3897                                 ic_argpass_nonproto, fn,
3898                                 fn, argnum);
3899   if (targetm.calls.promote_prototypes (TREE_TYPE (fn))
3900       && INTEGRAL_TYPE_P (type)
3901       && (TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node)))
3902     ret = default_conversion (ret);
3903   return ret;
3904 }
3905 \f
3906 /* If VALUE is a compound expr all of whose expressions are constant, then
3907    return its value.  Otherwise, return error_mark_node.
3908
3909    This is for handling COMPOUND_EXPRs as initializer elements
3910    which is allowed with a warning when -pedantic is specified.  */
3911
3912 static tree
3913 valid_compound_expr_initializer (tree value, tree endtype)
3914 {
3915   if (TREE_CODE (value) == COMPOUND_EXPR)
3916     {
3917       if (valid_compound_expr_initializer (TREE_OPERAND (value, 0), endtype)
3918           == error_mark_node)
3919         return error_mark_node;
3920       return valid_compound_expr_initializer (TREE_OPERAND (value, 1),
3921                                               endtype);
3922     }
3923   else if (!initializer_constant_valid_p (value, endtype))
3924     return error_mark_node;
3925   else
3926     return value;
3927 }
3928 \f
3929 /* Perform appropriate conversions on the initial value of a variable,
3930    store it in the declaration DECL,
3931    and print any error messages that are appropriate.
3932    If the init is invalid, store an ERROR_MARK.  */
3933
3934 void
3935 store_init_value (tree decl, tree init)
3936 {
3937   tree value, type;
3938
3939   /* If variable's type was invalidly declared, just ignore it.  */
3940
3941   type = TREE_TYPE (decl);
3942   if (TREE_CODE (type) == ERROR_MARK)
3943     return;
3944
3945   /* Digest the specified initializer into an expression.  */
3946
3947   value = digest_init (type, init, true, TREE_STATIC (decl));
3948
3949   /* Store the expression if valid; else report error.  */
3950
3951   if (warn_traditional && !in_system_header
3952       && AGGREGATE_TYPE_P (TREE_TYPE (decl)) && !TREE_STATIC (decl))
3953     warning (0, "traditional C rejects automatic aggregate initialization");
3954
3955   DECL_INITIAL (decl) = value;
3956
3957   /* ANSI wants warnings about out-of-range constant initializers.  */
3958   STRIP_TYPE_NOPS (value);
3959   constant_expression_warning (value);
3960
3961   /* Check if we need to set array size from compound literal size.  */
3962   if (TREE_CODE (type) == ARRAY_TYPE
3963       && TYPE_DOMAIN (type) == 0
3964       && value != error_mark_node)
3965     {
3966       tree inside_init = init;
3967
3968       STRIP_TYPE_NOPS (inside_init);
3969       inside_init = fold (inside_init);
3970
3971       if (TREE_CODE (inside_init) == COMPOUND_LITERAL_EXPR)
3972         {
3973           tree decl = COMPOUND_LITERAL_EXPR_DECL (inside_init);
3974
3975           if (TYPE_DOMAIN (TREE_TYPE (decl)))
3976             {
3977               /* For int foo[] = (int [3]){1}; we need to set array size
3978                  now since later on array initializer will be just the
3979                  brace enclosed list of the compound literal.  */
3980               TYPE_DOMAIN (type) = TYPE_DOMAIN (TREE_TYPE (decl));
3981               layout_type (type);
3982               layout_decl (decl, 0);
3983             }
3984         }
3985     }
3986 }
3987 \f
3988 /* Methods for storing and printing names for error messages.  */
3989
3990 /* Implement a spelling stack that allows components of a name to be pushed
3991    and popped.  Each element on the stack is this structure.  */
3992
3993 struct spelling
3994 {
3995   int kind;
3996   union
3997     {
3998       int i;
3999       const char *s;
4000     } u;
4001 };
4002
4003 #define SPELLING_STRING 1
4004 #define SPELLING_MEMBER 2
4005 #define SPELLING_BOUNDS 3
4006
4007 static struct spelling *spelling;       /* Next stack element (unused).  */
4008 static struct spelling *spelling_base;  /* Spelling stack base.  */
4009 static int spelling_size;               /* Size of the spelling stack.  */
4010
4011 /* Macros to save and restore the spelling stack around push_... functions.
4012    Alternative to SAVE_SPELLING_STACK.  */
4013
4014 #define SPELLING_DEPTH() (spelling - spelling_base)
4015 #define RESTORE_SPELLING_DEPTH(DEPTH) (spelling = spelling_base + (DEPTH))
4016
4017 /* Push an element on the spelling stack with type KIND and assign VALUE
4018    to MEMBER.  */
4019
4020 #define PUSH_SPELLING(KIND, VALUE, MEMBER)                              \
4021 {                                                                       \
4022   int depth = SPELLING_DEPTH ();                                        \
4023                                                                         \
4024   if (depth >= spelling_size)                                           \
4025     {                                                                   \
4026       spelling_size += 10;                                              \
4027       spelling_base = XRESIZEVEC (struct spelling, spelling_base,       \
4028                                   spelling_size);                       \
4029       RESTORE_SPELLING_DEPTH (depth);                                   \
4030     }                                                                   \
4031                                                                         \
4032   spelling->kind = (KIND);                                              \
4033   spelling->MEMBER = (VALUE);                                           \
4034   spelling++;                                                           \
4035 }
4036
4037 /* Push STRING on the stack.  Printed literally.  */
4038
4039 static void
4040 push_string (const char *string)
4041 {
4042   PUSH_SPELLING (SPELLING_STRING, string, u.s);
4043 }
4044
4045 /* Push a member name on the stack.  Printed as '.' STRING.  */
4046
4047 static void
4048 push_member_name (tree decl)
4049 {
4050   const char *const string
4051     = DECL_NAME (decl) ? IDENTIFIER_POINTER (DECL_NAME (decl)) : "<anonymous>";
4052   PUSH_SPELLING (SPELLING_MEMBER, string, u.s);
4053 }
4054
4055 /* Push an array bounds on the stack.  Printed as [BOUNDS].  */
4056
4057 static void
4058 push_array_bounds (int bounds)
4059 {
4060   PUSH_SPELLING (SPELLING_BOUNDS, bounds, u.i);
4061 }
4062
4063 /* Compute the maximum size in bytes of the printed spelling.  */
4064
4065 static int
4066 spelling_length (void)
4067 {
4068   int size = 0;
4069   struct spelling *p;
4070
4071   for (p = spelling_base; p < spelling; p++)
4072     {
4073       if (p->kind == SPELLING_BOUNDS)
4074         size += 25;
4075       else
4076         size += strlen (p->u.s) + 1;
4077     }
4078
4079   return size;
4080 }
4081
4082 /* Print the spelling to BUFFER and return it.  */
4083
4084 static char *
4085 print_spelling (char *buffer)
4086 {
4087   char *d = buffer;
4088   struct spelling *p;
4089
4090   for (p = spelling_base; p < spelling; p++)
4091     if (p->kind == SPELLING_BOUNDS)
4092       {
4093         sprintf (d, "[%d]", p->u.i);
4094         d += strlen (d);
4095       }
4096     else
4097       {
4098         const char *s;
4099         if (p->kind == SPELLING_MEMBER)
4100           *d++ = '.';
4101         for (s = p->u.s; (*d = *s++); d++)
4102           ;
4103       }
4104   *d++ = '\0';
4105   return buffer;
4106 }
4107
4108 /* Issue an error message for a bad initializer component.
4109    MSGID identifies the message.
4110    The component name is taken from the spelling stack.  */
4111
4112 void
4113 error_init (const char *msgid)
4114 {
4115   char *ofwhat;
4116
4117   error ("%s", _(msgid));
4118   ofwhat = print_spelling ((char *) alloca (spelling_length () + 1));
4119   if (*ofwhat)
4120     error ("(near initialization for %qs)", ofwhat);
4121 }
4122
4123 /* Issue a pedantic warning for a bad initializer component.
4124    MSGID identifies the message.
4125    The component name is taken from the spelling stack.  */
4126
4127 void
4128 pedwarn_init (const char *msgid)
4129 {
4130   char *ofwhat;
4131
4132   pedwarn ("%s", _(msgid));
4133   ofwhat = print_spelling ((char *) alloca (spelling_length () + 1));
4134   if (*ofwhat)
4135     pedwarn ("(near initialization for %qs)", ofwhat);
4136 }
4137
4138 /* Issue a warning for a bad initializer component.
4139    MSGID identifies the message.
4140    The component name is taken from the spelling stack.  */
4141
4142 static void
4143 warning_init (const char *msgid)
4144 {
4145   char *ofwhat;
4146
4147   warning (0, "%s", _(msgid));
4148   ofwhat = print_spelling ((char *) alloca (spelling_length () + 1));
4149   if (*ofwhat)
4150     warning (0, "(near initialization for %qs)", ofwhat);
4151 }
4152 \f
4153 /* If TYPE is an array type and EXPR is a parenthesized string
4154    constant, warn if pedantic that EXPR is being used to initialize an
4155    object of type TYPE.  */
4156
4157 void
4158 maybe_warn_string_init (tree type, struct c_expr expr)
4159 {
4160   if (pedantic
4161       && TREE_CODE (type) == ARRAY_TYPE
4162       && TREE_CODE (expr.value) == STRING_CST
4163       && expr.original_code != STRING_CST)
4164     pedwarn_init ("array initialized from parenthesized string constant");
4165 }
4166
4167 /* Digest the parser output INIT as an initializer for type TYPE.
4168    Return a C expression of type TYPE to represent the initial value.
4169
4170    If INIT is a string constant, STRICT_STRING is true if it is
4171    unparenthesized or we should not warn here for it being parenthesized.
4172    For other types of INIT, STRICT_STRING is not used.
4173
4174    REQUIRE_CONSTANT requests an error if non-constant initializers or
4175    elements are seen.  */
4176
4177 static tree
4178 digest_init (tree type, tree init, bool strict_string, int require_constant)
4179 {
4180   enum tree_code code = TREE_CODE (type);
4181   tree inside_init = init;
4182
4183   if (type == error_mark_node
4184       || init == error_mark_node
4185       || TREE_TYPE (init) == error_mark_node)
4186     return error_mark_node;
4187
4188   STRIP_TYPE_NOPS (inside_init);
4189
4190   inside_init = fold (inside_init);
4191
4192   /* Initialization of an array of chars from a string constant
4193      optionally enclosed in braces.  */
4194
4195   if (code == ARRAY_TYPE && inside_init
4196       && TREE_CODE (inside_init) == STRING_CST)
4197     {
4198       tree typ1 = TYPE_MAIN_VARIANT (TREE_TYPE (type));
4199       /* Note that an array could be both an array of character type
4200          and an array of wchar_t if wchar_t is signed char or unsigned
4201          char.  */
4202       bool char_array = (typ1 == char_type_node
4203                          || typ1 == signed_char_type_node
4204                          || typ1 == unsigned_char_type_node);
4205       bool wchar_array = !!comptypes (typ1, wchar_type_node);
4206       if (char_array || wchar_array)
4207         {
4208           struct c_expr expr;
4209           bool char_string;
4210           expr.value = inside_init;
4211           expr.original_code = (strict_string ? STRING_CST : ERROR_MARK);
4212           maybe_warn_string_init (type, expr);
4213
4214           char_string
4215             = (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (inside_init)))
4216                == char_type_node);
4217
4218           if (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (inside_init)),
4219                          TYPE_MAIN_VARIANT (type)))
4220             return inside_init;
4221
4222           if (!wchar_array && !char_string)
4223             {
4224               error_init ("char-array initialized from wide string");
4225               return error_mark_node;
4226             }
4227           if (char_string && !char_array)
4228             {
4229               error_init ("wchar_t-array initialized from non-wide string");
4230               return error_mark_node;
4231             }
4232
4233           TREE_TYPE (inside_init) = type;
4234           if (TYPE_DOMAIN (type) != 0
4235               && TYPE_SIZE (type) != 0
4236               && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST
4237               /* Subtract 1 (or sizeof (wchar_t))
4238                  because it's ok to ignore the terminating null char
4239                  that is counted in the length of the constant.  */
4240               && 0 > compare_tree_int (TYPE_SIZE_UNIT (type),
4241                                        TREE_STRING_LENGTH (inside_init)
4242                                        - ((TYPE_PRECISION (typ1)
4243                                            != TYPE_PRECISION (char_type_node))
4244                                           ? (TYPE_PRECISION (wchar_type_node)
4245                                              / BITS_PER_UNIT)
4246                                           : 1)))
4247             pedwarn_init ("initializer-string for array of chars is too long");
4248
4249           return inside_init;
4250         }
4251       else if (INTEGRAL_TYPE_P (typ1))
4252         {
4253           error_init ("array of inappropriate type initialized "
4254                       "from string constant");
4255           return error_mark_node;
4256         }
4257     }
4258
4259   /* Build a VECTOR_CST from a *constant* vector constructor.  If the
4260      vector constructor is not constant (e.g. {1,2,3,foo()}) then punt
4261      below and handle as a constructor.  */
4262   if (code == VECTOR_TYPE
4263       && TREE_CODE (TREE_TYPE (inside_init)) == VECTOR_TYPE
4264       && vector_types_convertible_p (TREE_TYPE (inside_init), type)
4265       && TREE_CONSTANT (inside_init))
4266     {
4267       if (TREE_CODE (inside_init) == VECTOR_CST
4268           && comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (inside_init)),
4269                         TYPE_MAIN_VARIANT (type)))
4270         return inside_init;
4271
4272       if (TREE_CODE (inside_init) == CONSTRUCTOR)
4273         {
4274           tree link;
4275
4276           /* Iterate through elements and check if all constructor
4277              elements are *_CSTs.  */
4278           for (link = CONSTRUCTOR_ELTS (inside_init);
4279                link;
4280                link = TREE_CHAIN (link))
4281             if (! CONSTANT_CLASS_P (TREE_VALUE (link)))
4282               break;
4283
4284           if (link == NULL)
4285             return build_vector (type, CONSTRUCTOR_ELTS (inside_init));
4286         }
4287     }
4288
4289   /* Any type can be initialized
4290      from an expression of the same type, optionally with braces.  */
4291
4292   if (inside_init && TREE_TYPE (inside_init) != 0
4293       && (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (inside_init)),
4294                      TYPE_MAIN_VARIANT (type))
4295           || (code == ARRAY_TYPE
4296               && comptypes (TREE_TYPE (inside_init), type))
4297           || (code == VECTOR_TYPE
4298               && comptypes (TREE_TYPE (inside_init), type))
4299           || (code == POINTER_TYPE
4300               && TREE_CODE (TREE_TYPE (inside_init)) == ARRAY_TYPE
4301               && comptypes (TREE_TYPE (TREE_TYPE (inside_init)),
4302                             TREE_TYPE (type)))
4303           || (code == POINTER_TYPE
4304               && TREE_CODE (TREE_TYPE (inside_init)) == FUNCTION_TYPE
4305               && comptypes (TREE_TYPE (inside_init),
4306                             TREE_TYPE (type)))))
4307     {
4308       if (code == POINTER_TYPE)
4309         {
4310           inside_init = default_function_array_conversion (inside_init);
4311
4312           if (TREE_CODE (TREE_TYPE (inside_init)) == ARRAY_TYPE)
4313             {
4314               error_init ("invalid use of non-lvalue array");
4315               return error_mark_node;
4316             }
4317          }
4318
4319       if (code == VECTOR_TYPE)
4320         /* Although the types are compatible, we may require a
4321            conversion.  */
4322         inside_init = convert (type, inside_init);
4323
4324       if (require_constant && !flag_isoc99
4325           && TREE_CODE (inside_init) == COMPOUND_LITERAL_EXPR)
4326         {
4327           /* As an extension, allow initializing objects with static storage
4328              duration with compound literals (which are then treated just as
4329              the brace enclosed list they contain).  */
4330           tree decl = COMPOUND_LITERAL_EXPR_DECL (inside_init);
4331           inside_init = DECL_INITIAL (decl);
4332         }
4333
4334       if (code == ARRAY_TYPE && TREE_CODE (inside_init) != STRING_CST
4335           && TREE_CODE (inside_init) != CONSTRUCTOR)
4336         {
4337           error_init ("array initialized from non-constant array expression");
4338           return error_mark_node;
4339         }
4340
4341       if (optimize && TREE_CODE (inside_init) == VAR_DECL)
4342         inside_init = decl_constant_value_for_broken_optimization (inside_init);
4343
4344       /* Compound expressions can only occur here if -pedantic or
4345          -pedantic-errors is specified.  In the later case, we always want
4346          an error.  In the former case, we simply want a warning.  */
4347       if (require_constant && pedantic
4348           && TREE_CODE (inside_init) == COMPOUND_EXPR)
4349         {
4350           inside_init
4351             = valid_compound_expr_initializer (inside_init,
4352                                                TREE_TYPE (inside_init));
4353           if (inside_init == error_mark_node)
4354             error_init ("initializer element is not constant");
4355           else
4356             pedwarn_init ("initializer element is not constant");
4357           if (flag_pedantic_errors)
4358             inside_init = error_mark_node;
4359         }
4360       else if (require_constant
4361                && !initializer_constant_valid_p (inside_init,
4362                                                  TREE_TYPE (inside_init)))
4363         {
4364           error_init ("initializer element is not constant");
4365           inside_init = error_mark_node;
4366         }
4367
4368       return inside_init;
4369     }
4370
4371   /* Handle scalar types, including conversions.  */
4372
4373   if (code == INTEGER_TYPE || code == REAL_TYPE || code == POINTER_TYPE
4374       || code == ENUMERAL_TYPE || code == BOOLEAN_TYPE || code == COMPLEX_TYPE
4375       || code == VECTOR_TYPE)
4376     {
4377       /* Note that convert_for_assignment calls default_conversion
4378          for arrays and functions.  We must not call it in the
4379          case where inside_init is a null pointer constant.  */
4380       inside_init
4381         = convert_for_assignment (type, init, ic_init,
4382                                   NULL_TREE, NULL_TREE, 0);
4383
4384       /* Check to see if we have already given an error message.  */
4385       if (inside_init == error_mark_node)
4386         ;
4387       else if (require_constant && !TREE_CONSTANT (inside_init))
4388         {
4389           error_init ("initializer element is not constant");
4390           inside_init = error_mark_node;
4391         }
4392       else if (require_constant
4393                && !initializer_constant_valid_p (inside_init,
4394                                                  TREE_TYPE (inside_init)))
4395         {
4396           error_init ("initializer element is not computable at load time");
4397           inside_init = error_mark_node;
4398         }
4399
4400       return inside_init;
4401     }
4402
4403   /* Come here only for records and arrays.  */
4404
4405   if (COMPLETE_TYPE_P (type) && TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
4406     {
4407       error_init ("variable-sized object may not be initialized");
4408       return error_mark_node;
4409     }
4410
4411   error_init ("invalid initializer");
4412   return error_mark_node;
4413 }
4414 \f
4415 /* Handle initializers that use braces.  */
4416
4417 /* Type of object we are accumulating a constructor for.
4418    This type is always a RECORD_TYPE, UNION_TYPE or ARRAY_TYPE.  */
4419 static tree constructor_type;
4420
4421 /* For a RECORD_TYPE or UNION_TYPE, this is the chain of fields
4422    left to fill.  */
4423 static tree constructor_fields;
4424
4425 /* For an ARRAY_TYPE, this is the specified index
4426    at which to store the next element we get.  */
4427 static tree constructor_index;
4428
4429 /* For an ARRAY_TYPE, this is the maximum index.  */
4430 static tree constructor_max_index;
4431
4432 /* For a RECORD_TYPE, this is the first field not yet written out.  */
4433 static tree constructor_unfilled_fields;
4434
4435 /* For an ARRAY_TYPE, this is the index of the first element
4436    not yet written out.  */
4437 static tree constructor_unfilled_index;
4438
4439 /* In a RECORD_TYPE, the byte index of the next consecutive field.
4440    This is so we can generate gaps between fields, when appropriate.  */
4441 static tree constructor_bit_index;
4442
4443 /* If we are saving up the elements rather than allocating them,
4444    this is the list of elements so far (in reverse order,
4445    most recent first).  */
4446 static tree constructor_elements;
4447
4448 /* 1 if constructor should be incrementally stored into a constructor chain,
4449    0 if all the elements should be kept in AVL tree.  */
4450 static int constructor_incremental;
4451
4452 /* 1 if so far this constructor's elements are all compile-time constants.  */
4453 static int constructor_constant;
4454
4455 /* 1 if so far this constructor's elements are all valid address constants.  */
4456 static int constructor_simple;
4457
4458 /* 1 if this constructor is erroneous so far.  */
4459 static int constructor_erroneous;
4460
4461 /* Structure for managing pending initializer elements, organized as an
4462    AVL tree.  */
4463
4464 struct init_node
4465 {
4466   struct init_node *left, *right;
4467   struct init_node *parent;
4468   int balance;
4469   tree purpose;
4470   tree value;
4471 };
4472
4473 /* Tree of pending elements at this constructor level.
4474    These are elements encountered out of order
4475    which belong at places we haven't reached yet in actually
4476    writing the output.
4477    Will never hold tree nodes across GC runs.  */
4478 static struct init_node *constructor_pending_elts;
4479
4480 /* The SPELLING_DEPTH of this constructor.  */
4481 static int constructor_depth;
4482
4483 /* DECL node for which an initializer is being read.
4484    0 means we are reading a constructor expression
4485    such as (struct foo) {...}.  */
4486 static tree constructor_decl;
4487
4488 /* Nonzero if this is an initializer for a top-level decl.  */
4489 static int constructor_top_level;
4490
4491 /* Nonzero if there were any member designators in this initializer.  */
4492 static int constructor_designated;
4493
4494 /* Nesting depth of designator list.  */
4495 static int designator_depth;
4496
4497 /* Nonzero if there were diagnosed errors in this designator list.  */
4498 static int designator_errorneous;
4499
4500 \f
4501 /* This stack has a level for each implicit or explicit level of
4502    structuring in the initializer, including the outermost one.  It
4503    saves the values of most of the variables above.  */
4504
4505 struct constructor_range_stack;
4506
4507 struct constructor_stack
4508 {
4509   struct constructor_stack *next;
4510   tree type;
4511   tree fields;
4512   tree index;
4513   tree max_index;
4514   tree unfilled_index;
4515   tree unfilled_fields;
4516   tree bit_index;
4517   tree elements;
4518   struct init_node *pending_elts;
4519   int offset;
4520   int depth;
4521   /* If value nonzero, this value should replace the entire
4522      constructor at this level.  */
4523   struct c_expr replacement_value;
4524   struct constructor_range_stack *range_stack;
4525   char constant;
4526   char simple;
4527   char implicit;
4528   char erroneous;
4529   char outer;
4530   char incremental;
4531   char designated;
4532 };
4533
4534 static struct constructor_stack *constructor_stack;
4535
4536 /* This stack represents designators from some range designator up to
4537    the last designator in the list.  */
4538
4539 struct constructor_range_stack
4540 {
4541   struct constructor_range_stack *next, *prev;
4542   struct constructor_stack *stack;
4543   tree range_start;
4544   tree index;
4545   tree range_end;
4546   tree fields;
4547 };
4548
4549 static struct constructor_range_stack *constructor_range_stack;
4550
4551 /* This stack records separate initializers that are nested.
4552    Nested initializers can't happen in ANSI C, but GNU C allows them
4553    in cases like { ... (struct foo) { ... } ... }.  */
4554
4555 struct initializer_stack
4556 {
4557   struct initializer_stack *next;
4558   tree decl;
4559   struct constructor_stack *constructor_stack;
4560   struct constructor_range_stack *constructor_range_stack;
4561   tree elements;
4562   struct spelling *spelling;
4563   struct spelling *spelling_base;
4564   int spelling_size;
4565   char top_level;
4566   char require_constant_value;
4567   char require_constant_elements;
4568 };
4569
4570 static struct initializer_stack *initializer_stack;
4571 \f
4572 /* Prepare to parse and output the initializer for variable DECL.  */
4573
4574 void
4575 start_init (tree decl, tree asmspec_tree ATTRIBUTE_UNUSED, int top_level)
4576 {
4577   const char *locus;
4578   struct initializer_stack *p = xmalloc (sizeof (struct initializer_stack));
4579
4580   p->decl = constructor_decl;
4581   p->require_constant_value = require_constant_value;
4582   p->require_constant_elements = require_constant_elements;
4583   p->constructor_stack = constructor_stack;
4584   p->constructor_range_stack = constructor_range_stack;
4585   p->elements = constructor_elements;
4586   p->spelling = spelling;
4587   p->spelling_base = spelling_base;
4588   p->spelling_size = spelling_size;
4589   p->top_level = constructor_top_level;
4590   p->next = initializer_stack;
4591   initializer_stack = p;
4592
4593   constructor_decl = decl;
4594   constructor_designated = 0;
4595   constructor_top_level = top_level;
4596
4597   if (decl != 0 && decl != error_mark_node)
4598     {
4599       require_constant_value = TREE_STATIC (decl);
4600       require_constant_elements
4601         = ((TREE_STATIC (decl) || (pedantic && !flag_isoc99))
4602            /* For a scalar, you can always use any value to initialize,
4603               even within braces.  */
4604            && (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
4605                || TREE_CODE (TREE_TYPE (decl)) == RECORD_TYPE
4606                || TREE_CODE (TREE_TYPE (decl)) == UNION_TYPE
4607                || TREE_CODE (TREE_TYPE (decl)) == QUAL_UNION_TYPE));
4608       locus = IDENTIFIER_POINTER (DECL_NAME (decl));
4609     }
4610   else
4611     {
4612       require_constant_value = 0;
4613       require_constant_elements = 0;
4614       locus = "(anonymous)";
4615     }
4616
4617   constructor_stack = 0;
4618   constructor_range_stack = 0;
4619
4620   missing_braces_mentioned = 0;
4621
4622   spelling_base = 0;
4623   spelling_size = 0;
4624   RESTORE_SPELLING_DEPTH (0);
4625
4626   if (locus)
4627     push_string (locus);
4628 }
4629
4630 void
4631 finish_init (void)
4632 {
4633   struct initializer_stack *p = initializer_stack;
4634
4635   /* Free the whole constructor stack of this initializer.  */
4636   while (constructor_stack)
4637     {
4638       struct constructor_stack *q = constructor_stack;
4639       constructor_stack = q->next;
4640       free (q);
4641     }
4642
4643   gcc_assert (!constructor_range_stack);
4644
4645   /* Pop back to the data of the outer initializer (if any).  */
4646   free (spelling_base);
4647
4648   constructor_decl = p->decl;
4649   require_constant_value = p->require_constant_value;
4650   require_constant_elements = p->require_constant_elements;
4651   constructor_stack = p->constructor_stack;
4652   constructor_range_stack = p->constructor_range_stack;
4653   constructor_elements = p->elements;
4654   spelling = p->spelling;
4655   spelling_base = p->spelling_base;
4656   spelling_size = p->spelling_size;
4657   constructor_top_level = p->top_level;
4658   initializer_stack = p->next;
4659   free (p);
4660 }
4661 \f
4662 /* Call here when we see the initializer is surrounded by braces.
4663    This is instead of a call to push_init_level;
4664    it is matched by a call to pop_init_level.
4665
4666    TYPE is the type to initialize, for a constructor expression.
4667    For an initializer for a decl, TYPE is zero.  */
4668
4669 void
4670 really_start_incremental_init (tree type)
4671 {
4672   struct constructor_stack *p = XNEW (struct constructor_stack);
4673
4674   if (type == 0)
4675     type = TREE_TYPE (constructor_decl);
4676
4677   if (targetm.vector_opaque_p (type))
4678     error ("opaque vector types cannot be initialized");
4679
4680   p->type = constructor_type;
4681   p->fields = constructor_fields;
4682   p->index = constructor_index;
4683   p->max_index = constructor_max_index;
4684   p->unfilled_index = constructor_unfilled_index;
4685   p->unfilled_fields = constructor_unfilled_fields;
4686   p->bit_index = constructor_bit_index;
4687   p->elements = constructor_elements;
4688   p->constant = constructor_constant;
4689   p->simple = constructor_simple;
4690   p->erroneous = constructor_erroneous;
4691   p->pending_elts = constructor_pending_elts;
4692   p->depth = constructor_depth;
4693   p->replacement_value.value = 0;
4694   p->replacement_value.original_code = ERROR_MARK;
4695   p->implicit = 0;
4696   p->range_stack = 0;
4697   p->outer = 0;
4698   p->incremental = constructor_incremental;
4699   p->designated = constructor_designated;
4700   p->next = 0;
4701   constructor_stack = p;
4702
4703   constructor_constant = 1;
4704   constructor_simple = 1;
4705   constructor_depth = SPELLING_DEPTH ();
4706   constructor_elements = 0;
4707   constructor_pending_elts = 0;
4708   constructor_type = type;
4709   constructor_incremental = 1;
4710   constructor_designated = 0;
4711   designator_depth = 0;
4712   designator_errorneous = 0;
4713
4714   if (TREE_CODE (constructor_type) == RECORD_TYPE
4715       || TREE_CODE (constructor_type) == UNION_TYPE)
4716     {
4717       constructor_fields = TYPE_FIELDS (constructor_type);
4718       /* Skip any nameless bit fields at the beginning.  */
4719       while (constructor_fields != 0 && DECL_C_BIT_FIELD (constructor_fields)
4720              && DECL_NAME (constructor_fields) == 0)
4721         constructor_fields = TREE_CHAIN (constructor_fields);
4722
4723       constructor_unfilled_fields = constructor_fields;
4724       constructor_bit_index = bitsize_zero_node;
4725     }
4726   else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
4727     {
4728       if (TYPE_DOMAIN (constructor_type))
4729         {
4730           constructor_max_index
4731             = TYPE_MAX_VALUE (TYPE_DOMAIN (constructor_type));
4732
4733           /* Detect non-empty initializations of zero-length arrays.  */
4734           if (constructor_max_index == NULL_TREE
4735               && TYPE_SIZE (constructor_type))
4736             constructor_max_index = build_int_cst (NULL_TREE, -1);
4737
4738           /* constructor_max_index needs to be an INTEGER_CST.  Attempts
4739              to initialize VLAs will cause a proper error; avoid tree
4740              checking errors as well by setting a safe value.  */
4741           if (constructor_max_index
4742               && TREE_CODE (constructor_max_index) != INTEGER_CST)
4743             constructor_max_index = build_int_cst (NULL_TREE, -1);
4744
4745           constructor_index
4746             = convert (bitsizetype,
4747                        TYPE_MIN_VALUE (TYPE_DOMAIN (constructor_type)));
4748         }
4749       else
4750         {
4751           constructor_index = bitsize_zero_node;
4752           constructor_max_index = NULL_TREE;
4753         }
4754
4755       constructor_unfilled_index = constructor_index;
4756     }
4757   else if (TREE_CODE (constructor_type) == VECTOR_TYPE)
4758     {
4759       /* Vectors are like simple fixed-size arrays.  */
4760       constructor_max_index =
4761         build_int_cst (NULL_TREE, TYPE_VECTOR_SUBPARTS (constructor_type) - 1);
4762       constructor_index = convert (bitsizetype, bitsize_zero_node);
4763       constructor_unfilled_index = constructor_index;
4764     }
4765   else
4766     {
4767       /* Handle the case of int x = {5}; */
4768       constructor_fields = constructor_type;
4769       constructor_unfilled_fields = constructor_type;
4770     }
4771 }
4772 \f
4773 /* Push down into a subobject, for initialization.
4774    If this is for an explicit set of braces, IMPLICIT is 0.
4775    If it is because the next element belongs at a lower level,
4776    IMPLICIT is 1 (or 2 if the push is because of designator list).  */
4777
4778 void
4779 push_init_level (int implicit)
4780 {
4781   struct constructor_stack *p;
4782   tree value = NULL_TREE;
4783
4784   /* If we've exhausted any levels that didn't have braces,
4785      pop them now.  */
4786   while (constructor_stack->implicit)
4787     {
4788       if ((TREE_CODE (constructor_type) == RECORD_TYPE
4789            || TREE_CODE (constructor_type) == UNION_TYPE)
4790           && constructor_fields == 0)
4791         process_init_element (pop_init_level (1));
4792       else if (TREE_CODE (constructor_type) == ARRAY_TYPE
4793                && constructor_max_index
4794                && tree_int_cst_lt (constructor_max_index, constructor_index))
4795         process_init_element (pop_init_level (1));
4796       else
4797         break;
4798     }
4799
4800   /* Unless this is an explicit brace, we need to preserve previous
4801      content if any.  */
4802   if (implicit)
4803     {
4804       if ((TREE_CODE (constructor_type) == RECORD_TYPE
4805            || TREE_CODE (constructor_type) == UNION_TYPE)
4806           && constructor_fields)
4807         value = find_init_member (constructor_fields);
4808       else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
4809         value = find_init_member (constructor_index);
4810     }
4811
4812   p = XNEW (struct constructor_stack);
4813   p->type = constructor_type;
4814   p->fields = constructor_fields;
4815   p->index = constructor_index;
4816   p->max_index = constructor_max_index;
4817   p->unfilled_index = constructor_unfilled_index;
4818   p->unfilled_fields = constructor_unfilled_fields;
4819   p->bit_index = constructor_bit_index;
4820   p->elements = constructor_elements;
4821   p->constant = constructor_constant;
4822   p->simple = constructor_simple;
4823   p->erroneous = constructor_erroneous;
4824   p->pending_elts = constructor_pending_elts;
4825   p->depth = constructor_depth;
4826   p->replacement_value.value = 0;
4827   p->replacement_value.original_code = ERROR_MARK;
4828   p->implicit = implicit;
4829   p->outer = 0;
4830   p->incremental = constructor_incremental;
4831   p->designated = constructor_designated;
4832   p->next = constructor_stack;
4833   p->range_stack = 0;
4834   constructor_stack = p;
4835
4836   constructor_constant = 1;
4837   constructor_simple = 1;
4838   constructor_depth = SPELLING_DEPTH ();
4839   constructor_elements = 0;
4840   constructor_incremental = 1;
4841   constructor_designated = 0;
4842   constructor_pending_elts = 0;
4843   if (!implicit)
4844     {
4845       p->range_stack = constructor_range_stack;
4846       constructor_range_stack = 0;
4847       designator_depth = 0;
4848       designator_errorneous = 0;
4849     }
4850
4851   /* Don't die if an entire brace-pair level is superfluous
4852      in the containing level.  */
4853   if (constructor_type == 0)
4854     ;
4855   else if (TREE_CODE (constructor_type) == RECORD_TYPE
4856            || TREE_CODE (constructor_type) == UNION_TYPE)
4857     {
4858       /* Don't die if there are extra init elts at the end.  */
4859       if (constructor_fields == 0)
4860         constructor_type = 0;
4861       else
4862         {
4863           constructor_type = TREE_TYPE (constructor_fields);
4864           push_member_name (constructor_fields);
4865           constructor_depth++;
4866         }
4867     }
4868   else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
4869     {
4870       constructor_type = TREE_TYPE (constructor_type);
4871       push_array_bounds (tree_low_cst (constructor_index, 0));
4872       constructor_depth++;
4873     }
4874
4875   if (constructor_type == 0)
4876     {
4877       error_init ("extra brace group at end of initializer");
4878       constructor_fields = 0;
4879       constructor_unfilled_fields = 0;
4880       return;
4881     }
4882
4883   if (value && TREE_CODE (value) == CONSTRUCTOR)
4884     {
4885       constructor_constant = TREE_CONSTANT (value);
4886       constructor_simple = TREE_STATIC (value);
4887       constructor_elements = CONSTRUCTOR_ELTS (value);
4888       if (constructor_elements
4889           && (TREE_CODE (constructor_type) == RECORD_TYPE
4890               || TREE_CODE (constructor_type) == ARRAY_TYPE))
4891         set_nonincremental_init ();
4892     }
4893
4894   if (implicit == 1 && warn_missing_braces && !missing_braces_mentioned)
4895     {
4896       missing_braces_mentioned = 1;
4897       warning_init ("missing braces around initializer");
4898     }
4899
4900   if (TREE_CODE (constructor_type) == RECORD_TYPE
4901            || TREE_CODE (constructor_type) == UNION_TYPE)
4902     {
4903       constructor_fields = TYPE_FIELDS (constructor_type);
4904       /* Skip any nameless bit fields at the beginning.  */
4905       while (constructor_fields != 0 && DECL_C_BIT_FIELD (constructor_fields)
4906              && DECL_NAME (constructor_fields) == 0)
4907         constructor_fields = TREE_CHAIN (constructor_fields);
4908
4909       constructor_unfilled_fields = constructor_fields;
4910       constructor_bit_index = bitsize_zero_node;
4911     }
4912   else if (TREE_CODE (constructor_type) == VECTOR_TYPE)
4913     {
4914       /* Vectors are like simple fixed-size arrays.  */
4915       constructor_max_index =
4916         build_int_cst (NULL_TREE, TYPE_VECTOR_SUBPARTS (constructor_type) - 1);
4917       constructor_index = convert (bitsizetype, integer_zero_node);
4918       constructor_unfilled_index = constructor_index;
4919     }
4920   else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
4921     {
4922       if (TYPE_DOMAIN (constructor_type))
4923         {
4924           constructor_max_index
4925             = TYPE_MAX_VALUE (TYPE_DOMAIN (constructor_type));
4926
4927           /* Detect non-empty initializations of zero-length arrays.  */
4928           if (constructor_max_index == NULL_TREE
4929               && TYPE_SIZE (constructor_type))
4930             constructor_max_index = build_int_cst (NULL_TREE, -1);
4931
4932           /* constructor_max_index needs to be an INTEGER_CST.  Attempts
4933              to initialize VLAs will cause a proper error; avoid tree
4934              checking errors as well by setting a safe value.  */
4935           if (constructor_max_index
4936               && TREE_CODE (constructor_max_index) != INTEGER_CST)
4937             constructor_max_index = build_int_cst (NULL_TREE, -1);
4938
4939           constructor_index
4940             = convert (bitsizetype,
4941                        TYPE_MIN_VALUE (TYPE_DOMAIN (constructor_type)));
4942         }
4943       else
4944         constructor_index = bitsize_zero_node;
4945
4946       constructor_unfilled_index = constructor_index;
4947       if (value && TREE_CODE (value) == STRING_CST)
4948         {
4949           /* We need to split the char/wchar array into individual
4950              characters, so that we don't have to special case it
4951              everywhere.  */
4952           set_nonincremental_init_from_string (value);
4953         }
4954     }
4955   else
4956     {
4957       if (constructor_type != error_mark_node)
4958         warning_init ("braces around scalar initializer");
4959       constructor_fields = constructor_type;
4960       constructor_unfilled_fields = constructor_type;
4961     }
4962 }
4963
4964 /* At the end of an implicit or explicit brace level,
4965    finish up that level of constructor.  If a single expression
4966    with redundant braces initialized that level, return the
4967    c_expr structure for that expression.  Otherwise, the original_code
4968    element is set to ERROR_MARK.
4969    If we were outputting the elements as they are read, return 0 as the value
4970    from inner levels (process_init_element ignores that),
4971    but return error_mark_node as the value from the outermost level
4972    (that's what we want to put in DECL_INITIAL).
4973    Otherwise, return a CONSTRUCTOR expression as the value.  */
4974
4975 struct c_expr
4976 pop_init_level (int implicit)
4977 {
4978   struct constructor_stack *p;
4979   struct c_expr ret;
4980   ret.value = 0;
4981   ret.original_code = ERROR_MARK;
4982
4983   if (implicit == 0)
4984     {
4985       /* When we come to an explicit close brace,
4986          pop any inner levels that didn't have explicit braces.  */
4987       while (constructor_stack->implicit)
4988         process_init_element (pop_init_level (1));
4989
4990       gcc_assert (!constructor_range_stack);
4991     }
4992
4993   /* Now output all pending elements.  */
4994   constructor_incremental = 1;
4995   output_pending_init_elements (1);
4996
4997   p = constructor_stack;
4998
4999   /* Error for initializing a flexible array member, or a zero-length
5000      array member in an inappropriate context.  */
5001   if (constructor_type && constructor_fields
5002       && TREE_CODE (constructor_type) == ARRAY_TYPE
5003       && TYPE_DOMAIN (constructor_type)
5004       && !TYPE_MAX_VALUE (TYPE_DOMAIN (constructor_type)))
5005     {
5006       /* Silently discard empty initializations.  The parser will
5007          already have pedwarned for empty brackets.  */
5008       if (integer_zerop (constructor_unfilled_index))
5009         constructor_type = NULL_TREE;
5010       else
5011         {
5012           gcc_assert (!TYPE_SIZE (constructor_type));
5013           
5014           if (constructor_depth > 2)
5015             error_init ("initialization of flexible array member in a nested context");
5016           else if (pedantic)
5017             pedwarn_init ("initialization of a flexible array member");
5018
5019           /* We have already issued an error message for the existence
5020              of a flexible array member not at the end of the structure.
5021              Discard the initializer so that we do not die later.  */
5022           if (TREE_CHAIN (constructor_fields) != NULL_TREE)
5023             constructor_type = NULL_TREE;
5024         }
5025     }
5026
5027   /* Warn when some struct elements are implicitly initialized to zero.  */
5028   if (warn_missing_field_initializers
5029       && constructor_type
5030       && TREE_CODE (constructor_type) == RECORD_TYPE
5031       && constructor_unfilled_fields)
5032     {
5033         /* Do not warn for flexible array members or zero-length arrays.  */
5034         while (constructor_unfilled_fields
5035                && (!DECL_SIZE (constructor_unfilled_fields)
5036                    || integer_zerop (DECL_SIZE (constructor_unfilled_fields))))
5037           constructor_unfilled_fields = TREE_CHAIN (constructor_unfilled_fields);
5038
5039         /* Do not warn if this level of the initializer uses member
5040            designators; it is likely to be deliberate.  */
5041         if (constructor_unfilled_fields && !constructor_designated)
5042           {
5043             push_member_name (constructor_unfilled_fields);
5044             warning_init ("missing initializer");
5045             RESTORE_SPELLING_DEPTH (constructor_depth);
5046           }
5047     }
5048
5049   /* Pad out the end of the structure.  */
5050   if (p->replacement_value.value)
5051     /* If this closes a superfluous brace pair,
5052        just pass out the element between them.  */
5053     ret = p->replacement_value;
5054   else if (constructor_type == 0)
5055     ;
5056   else if (TREE_CODE (constructor_type) != RECORD_TYPE
5057            && TREE_CODE (constructor_type) != UNION_TYPE
5058            && TREE_CODE (constructor_type) != ARRAY_TYPE
5059            && TREE_CODE (constructor_type) != VECTOR_TYPE)
5060     {
5061       /* A nonincremental scalar initializer--just return
5062          the element, after verifying there is just one.  */
5063       if (constructor_elements == 0)
5064         {
5065           if (!constructor_erroneous)
5066             error_init ("empty scalar initializer");
5067           ret.value = error_mark_node;
5068         }
5069       else if (TREE_CHAIN (constructor_elements) != 0)
5070         {
5071           error_init ("extra elements in scalar initializer");
5072           ret.value = TREE_VALUE (constructor_elements);
5073         }
5074       else
5075         ret.value = TREE_VALUE (constructor_elements);
5076     }
5077   else
5078     {
5079       if (constructor_erroneous)
5080         ret.value = error_mark_node;
5081       else
5082         {
5083           ret.value = build_constructor (constructor_type,
5084                                          nreverse (constructor_elements));
5085           if (constructor_constant)
5086             TREE_CONSTANT (ret.value) = TREE_INVARIANT (ret.value) = 1;
5087           if (constructor_constant && constructor_simple)
5088             TREE_STATIC (ret.value) = 1;
5089         }
5090     }
5091
5092   constructor_type = p->type;
5093   constructor_fields = p->fields;
5094   constructor_index = p->index;
5095   constructor_max_index = p->max_index;
5096   constructor_unfilled_index = p->unfilled_index;
5097   constructor_unfilled_fields = p->unfilled_fields;
5098   constructor_bit_index = p->bit_index;
5099   constructor_elements = p->elements;
5100   constructor_constant = p->constant;
5101   constructor_simple = p->simple;
5102   constructor_erroneous = p->erroneous;
5103   constructor_incremental = p->incremental;
5104   constructor_designated = p->designated;
5105   constructor_pending_elts = p->pending_elts;
5106   constructor_depth = p->depth;
5107   if (!p->implicit)
5108     constructor_range_stack = p->range_stack;
5109   RESTORE_SPELLING_DEPTH (constructor_depth);
5110
5111   constructor_stack = p->next;
5112   free (p);
5113
5114   if (ret.value == 0)
5115     {
5116       if (constructor_stack == 0)
5117         {
5118           ret.value = error_mark_node;
5119           return ret;
5120         }
5121       return ret;
5122     }
5123   return ret;
5124 }
5125
5126 /* Common handling for both array range and field name designators.
5127    ARRAY argument is nonzero for array ranges.  Returns zero for success.  */
5128
5129 static int
5130 set_designator (int array)
5131 {
5132   tree subtype;
5133   enum tree_code subcode;
5134
5135   /* Don't die if an entire brace-pair level is superfluous
5136      in the containing level.  */
5137   if (constructor_type == 0)
5138     return 1;
5139
5140   /* If there were errors in this designator list already, bail out
5141      silently.  */
5142   if (designator_errorneous)
5143     return 1;
5144
5145   if (!designator_depth)
5146     {
5147       gcc_assert (!constructor_range_stack);
5148
5149       /* Designator list starts at the level of closest explicit
5150          braces.  */
5151       while (constructor_stack->implicit)
5152         process_init_element (pop_init_level (1));
5153       constructor_designated = 1;
5154       return 0;
5155     }
5156
5157   switch (TREE_CODE (constructor_type))
5158     {
5159     case  RECORD_TYPE:
5160     case  UNION_TYPE:
5161       subtype = TREE_TYPE (constructor_fields);
5162       if (subtype != error_mark_node)
5163         subtype = TYPE_MAIN_VARIANT (subtype);
5164       break;
5165     case ARRAY_TYPE:
5166       subtype = TYPE_MAIN_VARIANT (TREE_TYPE (constructor_type));
5167       break;
5168     default:
5169       gcc_unreachable ();
5170     }
5171
5172   subcode = TREE_CODE (subtype);
5173   if (array && subcode != ARRAY_TYPE)
5174     {
5175       error_init ("array index in non-array initializer");
5176       return 1;
5177     }
5178   else if (!array && subcode != RECORD_TYPE && subcode != UNION_TYPE)
5179     {
5180       error_init ("field name not in record or union initializer");
5181       return 1;
5182     }
5183
5184   constructor_designated = 1;
5185   push_init_level (2);
5186   return 0;
5187 }
5188
5189 /* If there are range designators in designator list, push a new designator
5190    to constructor_range_stack.  RANGE_END is end of such stack range or
5191    NULL_TREE if there is no range designator at this level.  */
5192
5193 static void
5194 push_range_stack (tree range_end)
5195 {
5196   struct constructor_range_stack *p;
5197
5198   p = GGC_NEW (struct constructor_range_stack);
5199   p->prev = constructor_range_stack;
5200   p->next = 0;
5201   p->fields = constructor_fields;
5202   p->range_start = constructor_index;
5203   p->index = constructor_index;
5204   p->stack = constructor_stack;
5205   p->range_end = range_end;
5206   if (constructor_range_stack)
5207     constructor_range_stack->next = p;
5208   constructor_range_stack = p;
5209 }
5210
5211 /* Within an array initializer, specify the next index to be initialized.
5212    FIRST is that index.  If LAST is nonzero, then initialize a range
5213    of indices, running from FIRST through LAST.  */
5214
5215 void
5216 set_init_index (tree first, tree last)
5217 {
5218   if (set_designator (1))
5219     return;
5220
5221   designator_errorneous = 1;
5222
5223   if (!INTEGRAL_TYPE_P (TREE_TYPE (first))
5224       || (last && !INTEGRAL_TYPE_P (TREE_TYPE (last))))
5225     {
5226       error_init ("array index in initializer not of integer type");
5227       return;
5228     }
5229
5230   if (TREE_CODE (first) != INTEGER_CST)
5231     error_init ("nonconstant array index in initializer");
5232   else if (last != 0 && TREE_CODE (last) != INTEGER_CST)
5233     error_init ("nonconstant array index in initializer");
5234   else if (TREE_CODE (constructor_type) != ARRAY_TYPE)
5235     error_init ("array index in non-array initializer");
5236   else if (tree_int_cst_sgn (first) == -1)
5237     error_init ("array index in initializer exceeds array bounds");
5238   else if (constructor_max_index
5239            && tree_int_cst_lt (constructor_max_index, first))
5240     error_init ("array index in initializer exceeds array bounds");
5241   else
5242     {
5243       constructor_index = convert (bitsizetype, first);
5244
5245       if (last)
5246         {
5247           if (tree_int_cst_equal (first, last))
5248             last = 0;
5249           else if (tree_int_cst_lt (last, first))
5250             {
5251               error_init ("empty index range in initializer");
5252               last = 0;
5253             }
5254           else
5255             {
5256               last = convert (bitsizetype, last);
5257               if (constructor_max_index != 0
5258                   && tree_int_cst_lt (constructor_max_index, last))
5259                 {
5260                   error_init ("array index range in initializer exceeds array bounds");
5261                   last = 0;
5262                 }
5263             }
5264         }
5265
5266       designator_depth++;
5267       designator_errorneous = 0;
5268       if (constructor_range_stack || last)
5269         push_range_stack (last);
5270     }
5271 }
5272
5273 /* Within a struct initializer, specify the next field to be initialized.  */
5274
5275 void
5276 set_init_label (tree fieldname)
5277 {
5278   tree tail;
5279
5280   if (set_designator (0))
5281     return;
5282
5283   designator_errorneous = 1;
5284
5285   if (TREE_CODE (constructor_type) != RECORD_TYPE
5286       && TREE_CODE (constructor_type) != UNION_TYPE)
5287     {
5288       error_init ("field name not in record or union initializer");
5289       return;
5290     }
5291
5292   for (tail = TYPE_FIELDS (constructor_type); tail;
5293        tail = TREE_CHAIN (tail))
5294     {
5295       if (DECL_NAME (tail) == fieldname)
5296         break;
5297     }
5298
5299   if (tail == 0)
5300     error ("unknown field %qE specified in initializer", fieldname);
5301   else
5302     {
5303       constructor_fields = tail;
5304       designator_depth++;
5305       designator_errorneous = 0;
5306       if (constructor_range_stack)
5307         push_range_stack (NULL_TREE);
5308     }
5309 }
5310 \f
5311 /* Add a new initializer to the tree of pending initializers.  PURPOSE
5312    identifies the initializer, either array index or field in a structure.
5313    VALUE is the value of that index or field.  */
5314
5315 static void
5316 add_pending_init (tree purpose, tree value)
5317 {
5318   struct init_node *p, **q, *r;
5319
5320   q = &constructor_pending_elts;
5321   p = 0;
5322
5323   if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5324     {
5325       while (*q != 0)
5326         {
5327           p = *q;
5328           if (tree_int_cst_lt (purpose, p->purpose))
5329             q = &p->left;
5330           else if (tree_int_cst_lt (p->purpose, purpose))
5331             q = &p->right;
5332           else
5333             {
5334               if (TREE_SIDE_EFFECTS (p->value))
5335                 warning_init ("initialized field with side-effects overwritten");
5336               p->value = value;
5337               return;
5338             }
5339         }
5340     }
5341   else
5342     {
5343       tree bitpos;
5344
5345       bitpos = bit_position (purpose);
5346       while (*q != NULL)
5347         {
5348           p = *q;
5349           if (tree_int_cst_lt (bitpos, bit_position (p->purpose)))
5350             q = &p->left;
5351           else if (p->purpose != purpose)
5352             q = &p->right;
5353           else
5354             {
5355               if (TREE_SIDE_EFFECTS (p->value))
5356                 warning_init ("initialized field with side-effects overwritten");
5357               p->value = value;
5358               return;
5359             }
5360         }
5361     }
5362
5363   r = GGC_NEW (struct init_node);
5364   r->purpose = purpose;
5365   r->value = value;
5366
5367   *q = r;
5368   r->parent = p;
5369   r->left = 0;
5370   r->right = 0;
5371   r->balance = 0;
5372
5373   while (p)
5374     {
5375       struct init_node *s;
5376
5377       if (r == p->left)
5378         {
5379           if (p->balance == 0)
5380             p->balance = -1;
5381           else if (p->balance < 0)
5382             {
5383               if (r->balance < 0)
5384                 {
5385                   /* L rotation.  */
5386                   p->left = r->right;
5387                   if (p->left)
5388                     p->left->parent = p;
5389                   r->right = p;
5390
5391                   p->balance = 0;
5392                   r->balance = 0;
5393
5394                   s = p->parent;
5395                   p->parent = r;
5396                   r->parent = s;
5397                   if (s)
5398                     {
5399                       if (s->left == p)
5400                         s->left = r;
5401                       else
5402                         s->right = r;
5403                     }
5404                   else
5405                     constructor_pending_elts = r;
5406                 }
5407               else
5408                 {
5409                   /* LR rotation.  */
5410                   struct init_node *t = r->right;
5411
5412                   r->right = t->left;
5413                   if (r->right)
5414                     r->right->parent = r;
5415                   t->left = r;
5416
5417                   p->left = t->right;
5418                   if (p->left)
5419                     p->left->parent = p;
5420                   t->right = p;
5421
5422                   p->balance = t->balance < 0;
5423                   r->balance = -(t->balance > 0);
5424                   t->balance = 0;
5425
5426                   s = p->parent;
5427                   p->parent = t;
5428                   r->parent = t;
5429                   t->parent = s;
5430                   if (s)
5431                     {
5432                       if (s->left == p)
5433                         s->left = t;
5434                       else
5435                         s->right = t;
5436                     }
5437                   else
5438                     constructor_pending_elts = t;
5439                 }
5440               break;
5441             }
5442           else
5443             {
5444               /* p->balance == +1; growth of left side balances the node.  */
5445               p->balance = 0;
5446               break;
5447             }
5448         }
5449       else /* r == p->right */
5450         {
5451           if (p->balance == 0)
5452             /* Growth propagation from right side.  */
5453             p->balance++;
5454           else if (p->balance > 0)
5455             {
5456               if (r->balance > 0)
5457                 {
5458                   /* R rotation.  */
5459                   p->right = r->left;
5460                   if (p->right)
5461                     p->right->parent = p;
5462                   r->left = p;
5463
5464                   p->balance = 0;
5465                   r->balance = 0;
5466
5467                   s = p->parent;
5468                   p->parent = r;
5469                   r->parent = s;
5470                   if (s)
5471                     {
5472                       if (s->left == p)
5473                         s->left = r;
5474                       else
5475                         s->right = r;
5476                     }
5477                   else
5478                     constructor_pending_elts = r;
5479                 }
5480               else /* r->balance == -1 */
5481                 {
5482                   /* RL rotation */
5483                   struct init_node *t = r->left;
5484
5485                   r->left = t->right;
5486                   if (r->left)
5487                     r->left->parent = r;
5488                   t->right = r;
5489
5490                   p->right = t->left;
5491                   if (p->right)
5492                     p->right->parent = p;
5493                   t->left = p;
5494
5495                   r->balance = (t->balance < 0);
5496                   p->balance = -(t->balance > 0);
5497                   t->balance = 0;
5498
5499                   s = p->parent;
5500                   p->parent = t;
5501                   r->parent = t;
5502                   t->parent = s;
5503                   if (s)
5504                     {
5505                       if (s->left == p)
5506                         s->left = t;
5507                       else
5508                         s->right = t;
5509                     }
5510                   else
5511                     constructor_pending_elts = t;
5512                 }
5513               break;
5514             }
5515           else
5516             {
5517               /* p->balance == -1; growth of right side balances the node.  */
5518               p->balance = 0;
5519               break;
5520             }
5521         }
5522
5523       r = p;
5524       p = p->parent;
5525     }
5526 }
5527
5528 /* Build AVL tree from a sorted chain.  */
5529
5530 static void
5531 set_nonincremental_init (void)
5532 {
5533   tree chain;
5534
5535   if (TREE_CODE (constructor_type) != RECORD_TYPE
5536       && TREE_CODE (constructor_type) != ARRAY_TYPE)
5537     return;
5538
5539   for (chain = constructor_elements; chain; chain = TREE_CHAIN (chain))
5540     add_pending_init (TREE_PURPOSE (chain), TREE_VALUE (chain));
5541   constructor_elements = 0;
5542   if (TREE_CODE (constructor_type) == RECORD_TYPE)
5543     {
5544       constructor_unfilled_fields = TYPE_FIELDS (constructor_type);
5545       /* Skip any nameless bit fields at the beginning.  */
5546       while (constructor_unfilled_fields != 0
5547              && DECL_C_BIT_FIELD (constructor_unfilled_fields)
5548              && DECL_NAME (constructor_unfilled_fields) == 0)
5549         constructor_unfilled_fields = TREE_CHAIN (constructor_unfilled_fields);
5550
5551     }
5552   else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5553     {
5554       if (TYPE_DOMAIN (constructor_type))
5555         constructor_unfilled_index
5556             = convert (bitsizetype,
5557                        TYPE_MIN_VALUE (TYPE_DOMAIN (constructor_type)));
5558       else
5559         constructor_unfilled_index = bitsize_zero_node;
5560     }
5561   constructor_incremental = 0;
5562 }
5563
5564 /* Build AVL tree from a string constant.  */
5565
5566 static void
5567 set_nonincremental_init_from_string (tree str)
5568 {
5569   tree value, purpose, type;
5570   HOST_WIDE_INT val[2];
5571   const char *p, *end;
5572   int byte, wchar_bytes, charwidth, bitpos;
5573
5574   gcc_assert (TREE_CODE (constructor_type) == ARRAY_TYPE);
5575
5576   if (TYPE_PRECISION (TREE_TYPE (TREE_TYPE (str)))
5577       == TYPE_PRECISION (char_type_node))
5578     wchar_bytes = 1;
5579   else
5580     {
5581       gcc_assert (TYPE_PRECISION (TREE_TYPE (TREE_TYPE (str)))
5582                   == TYPE_PRECISION (wchar_type_node));
5583       wchar_bytes = TYPE_PRECISION (wchar_type_node) / BITS_PER_UNIT;
5584     }
5585   charwidth = TYPE_PRECISION (char_type_node);
5586   type = TREE_TYPE (constructor_type);
5587   p = TREE_STRING_POINTER (str);
5588   end = p + TREE_STRING_LENGTH (str);
5589
5590   for (purpose = bitsize_zero_node;
5591        p < end && !tree_int_cst_lt (constructor_max_index, purpose);
5592        purpose = size_binop (PLUS_EXPR, purpose, bitsize_one_node))
5593     {
5594       if (wchar_bytes == 1)
5595         {
5596           val[1] = (unsigned char) *p++;
5597           val[0] = 0;
5598         }
5599       else
5600         {
5601           val[0] = 0;
5602           val[1] = 0;
5603           for (byte = 0; byte < wchar_bytes; byte++)
5604             {
5605               if (BYTES_BIG_ENDIAN)
5606                 bitpos = (wchar_bytes - byte - 1) * charwidth;
5607               else
5608                 bitpos = byte * charwidth;
5609               val[bitpos < HOST_BITS_PER_WIDE_INT]
5610                 |= ((unsigned HOST_WIDE_INT) ((unsigned char) *p++))
5611                    << (bitpos % HOST_BITS_PER_WIDE_INT);
5612             }
5613         }
5614
5615       if (!TYPE_UNSIGNED (type))
5616         {
5617           bitpos = ((wchar_bytes - 1) * charwidth) + HOST_BITS_PER_CHAR;
5618           if (bitpos < HOST_BITS_PER_WIDE_INT)
5619             {
5620               if (val[1] & (((HOST_WIDE_INT) 1) << (bitpos - 1)))
5621                 {
5622                   val[1] |= ((HOST_WIDE_INT) -1) << bitpos;
5623                   val[0] = -1;
5624                 }
5625             }
5626           else if (bitpos == HOST_BITS_PER_WIDE_INT)
5627             {
5628               if (val[1] < 0)
5629                 val[0] = -1;
5630             }
5631           else if (val[0] & (((HOST_WIDE_INT) 1)
5632                              << (bitpos - 1 - HOST_BITS_PER_WIDE_INT)))
5633             val[0] |= ((HOST_WIDE_INT) -1)
5634                       << (bitpos - HOST_BITS_PER_WIDE_INT);
5635         }
5636
5637       value = build_int_cst_wide (type, val[1], val[0]);
5638       add_pending_init (purpose, value);
5639     }
5640
5641   constructor_incremental = 0;
5642 }
5643
5644 /* Return value of FIELD in pending initializer or zero if the field was
5645    not initialized yet.  */
5646
5647 static tree
5648 find_init_member (tree field)
5649 {
5650   struct init_node *p;
5651
5652   if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5653     {
5654       if (constructor_incremental
5655           && tree_int_cst_lt (field, constructor_unfilled_index))
5656         set_nonincremental_init ();
5657
5658       p = constructor_pending_elts;
5659       while (p)
5660         {
5661           if (tree_int_cst_lt (field, p->purpose))
5662             p = p->left;
5663           else if (tree_int_cst_lt (p->purpose, field))
5664             p = p->right;
5665           else
5666             return p->value;
5667         }
5668     }
5669   else if (TREE_CODE (constructor_type) == RECORD_TYPE)
5670     {
5671       tree bitpos = bit_position (field);
5672
5673       if (constructor_incremental
5674           && (!constructor_unfilled_fields
5675               || tree_int_cst_lt (bitpos,
5676                                   bit_position (constructor_unfilled_fields))))
5677         set_nonincremental_init ();
5678
5679       p = constructor_pending_elts;
5680       while (p)
5681         {
5682           if (field == p->purpose)
5683             return p->value;
5684           else if (tree_int_cst_lt (bitpos, bit_position (p->purpose)))
5685             p = p->left;
5686           else
5687             p = p->right;
5688         }
5689     }
5690   else if (TREE_CODE (constructor_type) == UNION_TYPE)
5691     {
5692       if (constructor_elements
5693           && TREE_PURPOSE (constructor_elements) == field)
5694         return TREE_VALUE (constructor_elements);
5695     }
5696   return 0;
5697 }
5698
5699 /* "Output" the next constructor element.
5700    At top level, really output it to assembler code now.
5701    Otherwise, collect it in a list from which we will make a CONSTRUCTOR.
5702    TYPE is the data type that the containing data type wants here.
5703    FIELD is the field (a FIELD_DECL) or the index that this element fills.
5704    If VALUE is a string constant, STRICT_STRING is true if it is
5705    unparenthesized or we should not warn here for it being parenthesized.
5706    For other types of VALUE, STRICT_STRING is not used.
5707
5708    PENDING if non-nil means output pending elements that belong
5709    right after this element.  (PENDING is normally 1;
5710    it is 0 while outputting pending elements, to avoid recursion.)  */
5711
5712 static void
5713 output_init_element (tree value, bool strict_string, tree type, tree field,
5714                      int pending)
5715 {
5716   if (type == error_mark_node || value == error_mark_node)
5717     {
5718       constructor_erroneous = 1;
5719       return;
5720     }
5721   if (TREE_CODE (TREE_TYPE (value)) == FUNCTION_TYPE
5722       || (TREE_CODE (TREE_TYPE (value)) == ARRAY_TYPE
5723           && !(TREE_CODE (value) == STRING_CST
5724                && TREE_CODE (type) == ARRAY_TYPE
5725                && INTEGRAL_TYPE_P (TREE_TYPE (type)))
5726           && !comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (value)),
5727                          TYPE_MAIN_VARIANT (type))))
5728     value = default_conversion (value);
5729
5730   if (TREE_CODE (value) == COMPOUND_LITERAL_EXPR
5731       && require_constant_value && !flag_isoc99 && pending)
5732     {
5733       /* As an extension, allow initializing objects with static storage
5734          duration with compound literals (which are then treated just as
5735          the brace enclosed list they contain).  */
5736       tree decl = COMPOUND_LITERAL_EXPR_DECL (value);
5737       value = DECL_INITIAL (decl);
5738     }
5739
5740   if (value == error_mark_node)
5741     constructor_erroneous = 1;
5742   else if (!TREE_CONSTANT (value))
5743     constructor_constant = 0;
5744   else if (!initializer_constant_valid_p (value, TREE_TYPE (value))
5745            || ((TREE_CODE (constructor_type) == RECORD_TYPE
5746                 || TREE_CODE (constructor_type) == UNION_TYPE)
5747                && DECL_C_BIT_FIELD (field)
5748                && TREE_CODE (value) != INTEGER_CST))
5749     constructor_simple = 0;
5750
5751   if (!initializer_constant_valid_p (value, TREE_TYPE (value)))
5752     {
5753       if (require_constant_value)
5754         {
5755           error_init ("initializer element is not constant");
5756           value = error_mark_node;
5757         }
5758       else if (require_constant_elements)
5759         pedwarn ("initializer element is not computable at load time");
5760     }
5761
5762   /* If this field is empty (and not at the end of structure),
5763      don't do anything other than checking the initializer.  */
5764   if (field
5765       && (TREE_TYPE (field) == error_mark_node
5766           || (COMPLETE_TYPE_P (TREE_TYPE (field))
5767               && integer_zerop (TYPE_SIZE (TREE_TYPE (field)))
5768               && (TREE_CODE (constructor_type) == ARRAY_TYPE
5769                   || TREE_CHAIN (field)))))
5770     return;
5771
5772   value = digest_init (type, value, strict_string, require_constant_value);
5773   if (value == error_mark_node)
5774     {
5775       constructor_erroneous = 1;
5776       return;
5777     }
5778
5779   /* If this element doesn't come next in sequence,
5780      put it on constructor_pending_elts.  */
5781   if (TREE_CODE (constructor_type) == ARRAY_TYPE
5782       && (!constructor_incremental
5783           || !tree_int_cst_equal (field, constructor_unfilled_index)))
5784     {
5785       if (constructor_incremental
5786           && tree_int_cst_lt (field, constructor_unfilled_index))
5787         set_nonincremental_init ();
5788
5789       add_pending_init (field, value);
5790       return;
5791     }
5792   else if (TREE_CODE (constructor_type) == RECORD_TYPE
5793            && (!constructor_incremental
5794                || field != constructor_unfilled_fields))
5795     {
5796       /* We do this for records but not for unions.  In a union,
5797          no matter which field is specified, it can be initialized
5798          right away since it starts at the beginning of the union.  */
5799       if (constructor_incremental)
5800         {
5801           if (!constructor_unfilled_fields)
5802             set_nonincremental_init ();
5803           else
5804             {
5805               tree bitpos, unfillpos;
5806
5807               bitpos = bit_position (field);
5808               unfillpos = bit_position (constructor_unfilled_fields);
5809
5810               if (tree_int_cst_lt (bitpos, unfillpos))
5811                 set_nonincremental_init ();
5812             }
5813         }
5814
5815       add_pending_init (field, value);
5816       return;
5817     }
5818   else if (TREE_CODE (constructor_type) == UNION_TYPE
5819            && constructor_elements)
5820     {
5821       if (TREE_SIDE_EFFECTS (TREE_VALUE (constructor_elements)))
5822         warning_init ("initialized field with side-effects overwritten");
5823
5824       /* We can have just one union field set.  */
5825       constructor_elements = 0;
5826     }
5827
5828   /* Otherwise, output this element either to
5829      constructor_elements or to the assembler file.  */
5830
5831   if (field && TREE_CODE (field) == INTEGER_CST)
5832     field = copy_node (field);
5833   constructor_elements
5834     = tree_cons (field, value, constructor_elements);
5835
5836   /* Advance the variable that indicates sequential elements output.  */
5837   if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5838     constructor_unfilled_index
5839       = size_binop (PLUS_EXPR, constructor_unfilled_index,
5840                     bitsize_one_node);
5841   else if (TREE_CODE (constructor_type) == RECORD_TYPE)
5842     {
5843       constructor_unfilled_fields
5844         = TREE_CHAIN (constructor_unfilled_fields);
5845
5846       /* Skip any nameless bit fields.  */
5847       while (constructor_unfilled_fields != 0
5848              && DECL_C_BIT_FIELD (constructor_unfilled_fields)
5849              && DECL_NAME (constructor_unfilled_fields) == 0)
5850         constructor_unfilled_fields =
5851           TREE_CHAIN (constructor_unfilled_fields);
5852     }
5853   else if (TREE_CODE (constructor_type) == UNION_TYPE)
5854     constructor_unfilled_fields = 0;
5855
5856   /* Now output any pending elements which have become next.  */
5857   if (pending)
5858     output_pending_init_elements (0);
5859 }
5860
5861 /* Output any pending elements which have become next.
5862    As we output elements, constructor_unfilled_{fields,index}
5863    advances, which may cause other elements to become next;
5864    if so, they too are output.
5865
5866    If ALL is 0, we return when there are
5867    no more pending elements to output now.
5868
5869    If ALL is 1, we output space as necessary so that
5870    we can output all the pending elements.  */
5871
5872 static void
5873 output_pending_init_elements (int all)
5874 {
5875   struct init_node *elt = constructor_pending_elts;
5876   tree next;
5877
5878  retry:
5879
5880   /* Look through the whole pending tree.
5881      If we find an element that should be output now,
5882      output it.  Otherwise, set NEXT to the element
5883      that comes first among those still pending.  */
5884
5885   next = 0;
5886   while (elt)
5887     {
5888       if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5889         {
5890           if (tree_int_cst_equal (elt->purpose,
5891                                   constructor_unfilled_index))
5892             output_init_element (elt->value, true,
5893                                  TREE_TYPE (constructor_type),
5894                                  constructor_unfilled_index, 0);
5895           else if (tree_int_cst_lt (constructor_unfilled_index,
5896                                     elt->purpose))
5897             {
5898               /* Advance to the next smaller node.  */
5899               if (elt->left)
5900                 elt = elt->left;
5901               else
5902                 {
5903                   /* We have reached the smallest node bigger than the
5904                      current unfilled index.  Fill the space first.  */
5905                   next = elt->purpose;
5906                   break;
5907                 }
5908             }
5909           else
5910             {
5911               /* Advance to the next bigger node.  */
5912               if (elt->right)
5913                 elt = elt->right;
5914               else
5915                 {
5916                   /* We have reached the biggest node in a subtree.  Find
5917                      the parent of it, which is the next bigger node.  */
5918                   while (elt->parent && elt->parent->right == elt)
5919                     elt = elt->parent;
5920                   elt = elt->parent;
5921                   if (elt && tree_int_cst_lt (constructor_unfilled_index,
5922                                               elt->purpose))
5923                     {
5924                       next = elt->purpose;
5925                       break;
5926                     }
5927                 }
5928             }
5929         }
5930       else if (TREE_CODE (constructor_type) == RECORD_TYPE
5931                || TREE_CODE (constructor_type) == UNION_TYPE)
5932         {
5933           tree ctor_unfilled_bitpos, elt_bitpos;
5934
5935           /* If the current record is complete we are done.  */
5936           if (constructor_unfilled_fields == 0)
5937             break;
5938
5939           ctor_unfilled_bitpos = bit_position (constructor_unfilled_fields);
5940           elt_bitpos = bit_position (elt->purpose);
5941           /* We can't compare fields here because there might be empty
5942              fields in between.  */
5943           if (tree_int_cst_equal (elt_bitpos, ctor_unfilled_bitpos))
5944             {
5945               constructor_unfilled_fields = elt->purpose;
5946               output_init_element (elt->value, true, TREE_TYPE (elt->purpose),
5947                                    elt->purpose, 0);
5948             }
5949           else if (tree_int_cst_lt (ctor_unfilled_bitpos, elt_bitpos))
5950             {
5951               /* Advance to the next smaller node.  */
5952               if (elt->left)
5953                 elt = elt->left;
5954               else
5955                 {
5956                   /* We have reached the smallest node bigger than the
5957                      current unfilled field.  Fill the space first.  */
5958                   next = elt->purpose;
5959                   break;
5960                 }
5961             }
5962           else
5963             {
5964               /* Advance to the next bigger node.  */
5965               if (elt->right)
5966                 elt = elt->right;
5967               else
5968                 {
5969                   /* We have reached the biggest node in a subtree.  Find
5970                      the parent of it, which is the next bigger node.  */
5971                   while (elt->parent && elt->parent->right == elt)
5972                     elt = elt->parent;
5973                   elt = elt->parent;
5974                   if (elt
5975                       && (tree_int_cst_lt (ctor_unfilled_bitpos,
5976                                            bit_position (elt->purpose))))
5977                     {
5978                       next = elt->purpose;
5979                       break;
5980                     }
5981                 }
5982             }
5983         }
5984     }
5985
5986   /* Ordinarily return, but not if we want to output all
5987      and there are elements left.  */
5988   if (!(all && next != 0))
5989     return;
5990
5991   /* If it's not incremental, just skip over the gap, so that after
5992      jumping to retry we will output the next successive element.  */
5993   if (TREE_CODE (constructor_type) == RECORD_TYPE
5994       || TREE_CODE (constructor_type) == UNION_TYPE)
5995     constructor_unfilled_fields = next;
5996   else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5997     constructor_unfilled_index = next;
5998
5999   /* ELT now points to the node in the pending tree with the next
6000      initializer to output.  */
6001   goto retry;
6002 }
6003 \f
6004 /* Add one non-braced element to the current constructor level.
6005    This adjusts the current position within the constructor's type.
6006    This may also start or terminate implicit levels
6007    to handle a partly-braced initializer.
6008
6009    Once this has found the correct level for the new element,
6010    it calls output_init_element.  */
6011
6012 void
6013 process_init_element (struct c_expr value)
6014 {
6015   tree orig_value = value.value;
6016   int string_flag = orig_value != 0 && TREE_CODE (orig_value) == STRING_CST;
6017   bool strict_string = value.original_code == STRING_CST;
6018
6019   designator_depth = 0;
6020   designator_errorneous = 0;
6021
6022   /* Handle superfluous braces around string cst as in
6023      char x[] = {"foo"}; */
6024   if (string_flag
6025       && constructor_type
6026       && TREE_CODE (constructor_type) == ARRAY_TYPE
6027       && INTEGRAL_TYPE_P (TREE_TYPE (constructor_type))
6028       && integer_zerop (constructor_unfilled_index))
6029     {
6030       if (constructor_stack->replacement_value.value)
6031         error_init ("excess elements in char array initializer");
6032       constructor_stack->replacement_value = value;
6033       return;
6034     }
6035
6036   if (constructor_stack->replacement_value.value != 0)
6037     {
6038       error_init ("excess elements in struct initializer");
6039       return;
6040     }
6041
6042   /* Ignore elements of a brace group if it is entirely superfluous
6043      and has already been diagnosed.  */
6044   if (constructor_type == 0)
6045     return;
6046
6047   /* If we've exhausted any levels that didn't have braces,
6048      pop them now.  */
6049   while (constructor_stack->implicit)
6050     {
6051       if ((TREE_CODE (constructor_type) == RECORD_TYPE
6052            || TREE_CODE (constructor_type) == UNION_TYPE)
6053           && constructor_fields == 0)
6054         process_init_element (pop_init_level (1));
6055       else if (TREE_CODE (constructor_type) == ARRAY_TYPE
6056                && (constructor_max_index == 0
6057                    || tree_int_cst_lt (constructor_max_index,
6058                                        constructor_index)))
6059         process_init_element (pop_init_level (1));
6060       else
6061         break;
6062     }
6063
6064   /* In the case of [LO ... HI] = VALUE, only evaluate VALUE once.  */
6065   if (constructor_range_stack)
6066     {
6067       /* If value is a compound literal and we'll be just using its
6068          content, don't put it into a SAVE_EXPR.  */
6069       if (TREE_CODE (value.value) != COMPOUND_LITERAL_EXPR
6070           || !require_constant_value
6071           || flag_isoc99)
6072         value.value = save_expr (value.value);
6073     }
6074
6075   while (1)
6076     {
6077       if (TREE_CODE (constructor_type) == RECORD_TYPE)
6078         {
6079           tree fieldtype;
6080           enum tree_code fieldcode;
6081
6082           if (constructor_fields == 0)
6083             {
6084               pedwarn_init ("excess elements in struct initializer");
6085               break;
6086             }
6087
6088           fieldtype = TREE_TYPE (constructor_fields);
6089           if (fieldtype != error_mark_node)
6090             fieldtype = TYPE_MAIN_VARIANT (fieldtype);
6091           fieldcode = TREE_CODE (fieldtype);
6092
6093           /* Error for non-static initialization of a flexible array member.  */
6094           if (fieldcode == ARRAY_TYPE
6095               && !require_constant_value
6096               && TYPE_SIZE (fieldtype) == NULL_TREE
6097               && TREE_CHAIN (constructor_fields) == NULL_TREE)
6098             {
6099               error_init ("non-static initialization of a flexible array member");
6100               break;
6101             }
6102
6103           /* Accept a string constant to initialize a subarray.  */
6104           if (value.value != 0
6105               && fieldcode == ARRAY_TYPE
6106               && INTEGRAL_TYPE_P (TREE_TYPE (fieldtype))
6107               && string_flag)
6108             value.value = orig_value;
6109           /* Otherwise, if we have come to a subaggregate,
6110              and we don't have an element of its type, push into it.  */
6111           else if (value.value != 0
6112                    && value.value != error_mark_node
6113                    && TYPE_MAIN_VARIANT (TREE_TYPE (value.value)) != fieldtype
6114                    && (fieldcode == RECORD_TYPE || fieldcode == ARRAY_TYPE
6115                        || fieldcode == UNION_TYPE))
6116             {
6117               push_init_level (1);
6118               continue;
6119             }
6120
6121           if (value.value)
6122             {
6123               push_member_name (constructor_fields);
6124               output_init_element (value.value, strict_string,
6125                                    fieldtype, constructor_fields, 1);
6126               RESTORE_SPELLING_DEPTH (constructor_depth);
6127             }
6128           else
6129             /* Do the bookkeeping for an element that was
6130                directly output as a constructor.  */
6131             {
6132               /* For a record, keep track of end position of last field.  */
6133               if (DECL_SIZE (constructor_fields))
6134                 constructor_bit_index
6135                   = size_binop (PLUS_EXPR,
6136                                 bit_position (constructor_fields),
6137                                 DECL_SIZE (constructor_fields));
6138
6139               /* If the current field was the first one not yet written out,
6140                  it isn't now, so update.  */
6141               if (constructor_unfilled_fields == constructor_fields)
6142                 {
6143                   constructor_unfilled_fields = TREE_CHAIN (constructor_fields);
6144                   /* Skip any nameless bit fields.  */
6145                   while (constructor_unfilled_fields != 0
6146                          && DECL_C_BIT_FIELD (constructor_unfilled_fields)
6147                          && DECL_NAME (constructor_unfilled_fields) == 0)
6148                     constructor_unfilled_fields =
6149                       TREE_CHAIN (constructor_unfilled_fields);
6150                 }
6151             }
6152
6153           constructor_fields = TREE_CHAIN (constructor_fields);
6154           /* Skip any nameless bit fields at the beginning.  */
6155           while (constructor_fields != 0
6156                  && DECL_C_BIT_FIELD (constructor_fields)
6157                  && DECL_NAME (constructor_fields) == 0)
6158             constructor_fields = TREE_CHAIN (constructor_fields);
6159         }
6160       else if (TREE_CODE (constructor_type) == UNION_TYPE)
6161         {
6162           tree fieldtype;
6163           enum tree_code fieldcode;
6164
6165           if (constructor_fields == 0)
6166             {
6167               pedwarn_init ("excess elements in union initializer");
6168               break;
6169             }
6170
6171           fieldtype = TREE_TYPE (constructor_fields);
6172           if (fieldtype != error_mark_node)
6173             fieldtype = TYPE_MAIN_VARIANT (fieldtype);
6174           fieldcode = TREE_CODE (fieldtype);
6175
6176           /* Warn that traditional C rejects initialization of unions.
6177              We skip the warning if the value is zero.  This is done
6178              under the assumption that the zero initializer in user
6179              code appears conditioned on e.g. __STDC__ to avoid
6180              "missing initializer" warnings and relies on default
6181              initialization to zero in the traditional C case.
6182              We also skip the warning if the initializer is designated,
6183              again on the assumption that this must be conditional on
6184              __STDC__ anyway (and we've already complained about the
6185              member-designator already).  */
6186           if (warn_traditional && !in_system_header && !constructor_designated
6187               && !(value.value && (integer_zerop (value.value)
6188                                    || real_zerop (value.value))))
6189             warning (0, "traditional C rejects initialization of unions");
6190
6191           /* Accept a string constant to initialize a subarray.  */
6192           if (value.value != 0
6193               && fieldcode == ARRAY_TYPE
6194               && INTEGRAL_TYPE_P (TREE_TYPE (fieldtype))
6195               && string_flag)
6196             value.value = orig_value;
6197           /* Otherwise, if we have come to a subaggregate,
6198              and we don't have an element of its type, push into it.  */
6199           else if (value.value != 0
6200                    && value.value != error_mark_node
6201                    && TYPE_MAIN_VARIANT (TREE_TYPE (value.value)) != fieldtype
6202                    && (fieldcode == RECORD_TYPE || fieldcode == ARRAY_TYPE
6203                        || fieldcode == UNION_TYPE))
6204             {
6205               push_init_level (1);
6206               continue;
6207             }
6208
6209           if (value.value)
6210             {
6211               push_member_name (constructor_fields);
6212               output_init_element (value.value, strict_string,
6213                                    fieldtype, constructor_fields, 1);
6214               RESTORE_SPELLING_DEPTH (constructor_depth);
6215             }
6216           else
6217             /* Do the bookkeeping for an element that was
6218                directly output as a constructor.  */
6219             {
6220               constructor_bit_index = DECL_SIZE (constructor_fields);
6221               constructor_unfilled_fields = TREE_CHAIN (constructor_fields);
6222             }
6223
6224           constructor_fields = 0;
6225         }
6226       else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
6227         {
6228           tree elttype = TYPE_MAIN_VARIANT (TREE_TYPE (constructor_type));
6229           enum tree_code eltcode = TREE_CODE (elttype);
6230
6231           /* Accept a string constant to initialize a subarray.  */
6232           if (value.value != 0
6233               && eltcode == ARRAY_TYPE
6234               && INTEGRAL_TYPE_P (TREE_TYPE (elttype))
6235               && string_flag)
6236             value.value = orig_value;
6237           /* Otherwise, if we have come to a subaggregate,
6238              and we don't have an element of its type, push into it.  */
6239           else if (value.value != 0
6240                    && value.value != error_mark_node
6241                    && TYPE_MAIN_VARIANT (TREE_TYPE (value.value)) != elttype
6242                    && (eltcode == RECORD_TYPE || eltcode == ARRAY_TYPE
6243                        || eltcode == UNION_TYPE))
6244             {
6245               push_init_level (1);
6246               continue;
6247             }
6248
6249           if (constructor_max_index != 0
6250               && (tree_int_cst_lt (constructor_max_index, constructor_index)
6251                   || integer_all_onesp (constructor_max_index)))
6252             {
6253               pedwarn_init ("excess elements in array initializer");
6254               break;
6255             }
6256
6257           /* Now output the actual element.  */
6258           if (value.value)
6259             {
6260               push_array_bounds (tree_low_cst (constructor_index, 0));
6261               output_init_element (value.value, strict_string,
6262                                    elttype, constructor_index, 1);
6263               RESTORE_SPELLING_DEPTH (constructor_depth);
6264             }
6265
6266           constructor_index
6267             = size_binop (PLUS_EXPR, constructor_index, bitsize_one_node);
6268
6269           if (!value.value)
6270             /* If we are doing the bookkeeping for an element that was
6271                directly output as a constructor, we must update
6272                constructor_unfilled_index.  */
6273             constructor_unfilled_index = constructor_index;
6274         }
6275       else if (TREE_CODE (constructor_type) == VECTOR_TYPE)
6276         {
6277           tree elttype = TYPE_MAIN_VARIANT (TREE_TYPE (constructor_type));
6278
6279          /* Do a basic check of initializer size.  Note that vectors
6280             always have a fixed size derived from their type.  */
6281           if (tree_int_cst_lt (constructor_max_index, constructor_index))
6282             {
6283               pedwarn_init ("excess elements in vector initializer");
6284               break;
6285             }
6286
6287           /* Now output the actual element.  */
6288           if (value.value)
6289             output_init_element (value.value, strict_string,
6290                                  elttype, constructor_index, 1);
6291
6292           constructor_index
6293             = size_binop (PLUS_EXPR, constructor_index, bitsize_one_node);
6294
6295           if (!value.value)
6296             /* If we are doing the bookkeeping for an element that was
6297                directly output as a constructor, we must update
6298                constructor_unfilled_index.  */
6299             constructor_unfilled_index = constructor_index;
6300         }
6301
6302       /* Handle the sole element allowed in a braced initializer
6303          for a scalar variable.  */
6304       else if (constructor_type != error_mark_node
6305                && constructor_fields == 0)
6306         {
6307           pedwarn_init ("excess elements in scalar initializer");
6308           break;
6309         }
6310       else
6311         {
6312           if (value.value)
6313             output_init_element (value.value, strict_string,
6314                                  constructor_type, NULL_TREE, 1);
6315           constructor_fields = 0;
6316         }
6317
6318       /* Handle range initializers either at this level or anywhere higher
6319          in the designator stack.  */
6320       if (constructor_range_stack)
6321         {
6322           struct constructor_range_stack *p, *range_stack;
6323           int finish = 0;
6324
6325           range_stack = constructor_range_stack;
6326           constructor_range_stack = 0;
6327           while (constructor_stack != range_stack->stack)
6328             {
6329               gcc_assert (constructor_stack->implicit);
6330               process_init_element (pop_init_level (1));
6331             }
6332           for (p = range_stack;
6333                !p->range_end || tree_int_cst_equal (p->index, p->range_end);
6334                p = p->prev)
6335             {
6336               gcc_assert (constructor_stack->implicit);
6337               process_init_element (pop_init_level (1));
6338             }
6339
6340           p->index = size_binop (PLUS_EXPR, p->index, bitsize_one_node);
6341           if (tree_int_cst_equal (p->index, p->range_end) && !p->prev)
6342             finish = 1;
6343
6344           while (1)
6345             {
6346               constructor_index = p->index;
6347               constructor_fields = p->fields;
6348               if (finish && p->range_end && p->index == p->range_start)
6349                 {
6350                   finish = 0;
6351                   p->prev = 0;
6352                 }
6353               p = p->next;
6354               if (!p)
6355                 break;
6356               push_init_level (2);
6357               p->stack = constructor_stack;
6358               if (p->range_end && tree_int_cst_equal (p->index, p->range_end))
6359                 p->index = p->range_start;
6360             }
6361
6362           if (!finish)
6363             constructor_range_stack = range_stack;
6364           continue;
6365         }
6366
6367       break;
6368     }
6369
6370   constructor_range_stack = 0;
6371 }
6372 \f
6373 /* Build a complete asm-statement, whose components are a CV_QUALIFIER
6374    (guaranteed to be 'volatile' or null) and ARGS (represented using
6375    an ASM_EXPR node).  */
6376 tree
6377 build_asm_stmt (tree cv_qualifier, tree args)
6378 {
6379   if (!ASM_VOLATILE_P (args) && cv_qualifier)
6380     ASM_VOLATILE_P (args) = 1;
6381   return add_stmt (args);
6382 }
6383
6384 /* Build an asm-expr, whose components are a STRING, some OUTPUTS,
6385    some INPUTS, and some CLOBBERS.  The latter three may be NULL.
6386    SIMPLE indicates whether there was anything at all after the
6387    string in the asm expression -- asm("blah") and asm("blah" : )
6388    are subtly different.  We use a ASM_EXPR node to represent this.  */
6389 tree
6390 build_asm_expr (tree string, tree outputs, tree inputs, tree clobbers,
6391                 bool simple)
6392 {
6393   tree tail;
6394   tree args;
6395   int i;
6396   const char *constraint;
6397   const char **oconstraints;
6398   bool allows_mem, allows_reg, is_inout;
6399   int ninputs, noutputs;
6400
6401   ninputs = list_length (inputs);
6402   noutputs = list_length (outputs);
6403   oconstraints = (const char **) alloca (noutputs * sizeof (const char *));
6404
6405   string = resolve_asm_operand_names (string, outputs, inputs);
6406
6407   /* Remove output conversions that change the type but not the mode.  */
6408   for (i = 0, tail = outputs; tail; ++i, tail = TREE_CHAIN (tail))
6409     {
6410       tree output = TREE_VALUE (tail);
6411
6412       /* ??? Really, this should not be here.  Users should be using a
6413          proper lvalue, dammit.  But there's a long history of using casts
6414          in the output operands.  In cases like longlong.h, this becomes a
6415          primitive form of typechecking -- if the cast can be removed, then
6416          the output operand had a type of the proper width; otherwise we'll
6417          get an error.  Gross, but ...  */
6418       STRIP_NOPS (output);
6419
6420       if (!lvalue_or_else (output, lv_asm))
6421         output = error_mark_node;
6422
6423       constraint = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (tail)));
6424       oconstraints[i] = constraint;
6425
6426       if (parse_output_constraint (&constraint, i, ninputs, noutputs,
6427                                    &allows_mem, &allows_reg, &is_inout))
6428         {
6429           /* If the operand is going to end up in memory,
6430              mark it addressable.  */
6431           if (!allows_reg && !c_mark_addressable (output))
6432             output = error_mark_node;
6433         }
6434       else
6435         output = error_mark_node;
6436
6437       TREE_VALUE (tail) = output;
6438     }
6439
6440   /* Perform default conversions on array and function inputs.
6441      Don't do this for other types as it would screw up operands
6442      expected to be in memory.  */
6443   for (i = 0, tail = inputs; tail; ++i, tail = TREE_CHAIN (tail))
6444     {
6445       tree input;
6446
6447       constraint = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (tail)));
6448       input = TREE_VALUE (tail);
6449
6450       input = default_function_array_conversion (input);
6451
6452       if (parse_input_constraint (&constraint, i, ninputs, noutputs, 0,
6453                                   oconstraints, &allows_mem, &allows_reg))
6454         {
6455           /* If the operand is going to end up in memory,
6456              mark it addressable.  */
6457           if (!allows_reg && allows_mem)
6458             {
6459               /* Strip the nops as we allow this case.  FIXME, this really
6460                  should be rejected or made deprecated.  */
6461               STRIP_NOPS (input);
6462               if (!c_mark_addressable (input))
6463                 input = error_mark_node;
6464           }
6465         }
6466       else
6467         input = error_mark_node;
6468
6469       TREE_VALUE (tail) = input;
6470     }
6471
6472   args = build_stmt (ASM_EXPR, string, outputs, inputs, clobbers);
6473
6474   /* Simple asm statements are treated as volatile.  */
6475   if (simple)
6476     {
6477       ASM_VOLATILE_P (args) = 1;
6478       ASM_INPUT_P (args) = 1;
6479     }
6480
6481   return args;
6482 }
6483 \f
6484 /* Generate a goto statement to LABEL.  */
6485
6486 tree
6487 c_finish_goto_label (tree label)
6488 {
6489   tree decl = lookup_label (label);
6490   if (!decl)
6491     return NULL_TREE;
6492
6493   if (C_DECL_UNJUMPABLE_STMT_EXPR (decl))
6494     {
6495       error ("jump into statement expression");
6496       return NULL_TREE;
6497     }
6498
6499   if (C_DECL_UNJUMPABLE_VM (decl))
6500     {
6501       error ("jump into scope of identifier with variably modified type");
6502       return NULL_TREE;
6503     }
6504
6505   if (!C_DECL_UNDEFINABLE_STMT_EXPR (decl))
6506     {
6507       /* No jump from outside this statement expression context, so
6508          record that there is a jump from within this context.  */
6509       struct c_label_list *nlist;
6510       nlist = XOBNEW (&parser_obstack, struct c_label_list);
6511       nlist->next = label_context_stack_se->labels_used;
6512       nlist->label = decl;
6513       label_context_stack_se->labels_used = nlist;
6514     }
6515
6516   if (!C_DECL_UNDEFINABLE_VM (decl))
6517     {
6518       /* No jump from outside this context context of identifiers with
6519          variably modified type, so record that there is a jump from
6520          within this context.  */
6521       struct c_label_list *nlist;
6522       nlist = XOBNEW (&parser_obstack, struct c_label_list);
6523       nlist->next = label_context_stack_vm->labels_used;
6524       nlist->label = decl;
6525       label_context_stack_vm->labels_used = nlist;
6526     }
6527
6528   TREE_USED (decl) = 1;
6529   return add_stmt (build1 (GOTO_EXPR, void_type_node, decl));
6530 }
6531
6532 /* Generate a computed goto statement to EXPR.  */
6533
6534 tree
6535 c_finish_goto_ptr (tree expr)
6536 {
6537   if (pedantic)
6538     pedwarn ("ISO C forbids %<goto *expr;%>");
6539   expr = convert (ptr_type_node, expr);
6540   return add_stmt (build1 (GOTO_EXPR, void_type_node, expr));
6541 }
6542
6543 /* Generate a C `return' statement.  RETVAL is the expression for what
6544    to return, or a null pointer for `return;' with no value.  */
6545
6546 tree
6547 c_finish_return (tree retval)
6548 {
6549   tree valtype = TREE_TYPE (TREE_TYPE (current_function_decl));
6550
6551   if (TREE_THIS_VOLATILE (current_function_decl))
6552     warning (0, "function declared %<noreturn%> has a %<return%> statement");
6553
6554   if (!retval)
6555     {
6556       current_function_returns_null = 1;
6557       if ((warn_return_type || flag_isoc99)
6558           && valtype != 0 && TREE_CODE (valtype) != VOID_TYPE)
6559         pedwarn_c99 ("%<return%> with no value, in "
6560                      "function returning non-void");
6561     }
6562   else if (valtype == 0 || TREE_CODE (valtype) == VOID_TYPE)
6563     {
6564       current_function_returns_null = 1;
6565       if (pedantic || TREE_CODE (TREE_TYPE (retval)) != VOID_TYPE)
6566         pedwarn ("%<return%> with a value, in function returning void");
6567     }
6568   else
6569     {
6570       tree t = convert_for_assignment (valtype, retval, ic_return,
6571                                        NULL_TREE, NULL_TREE, 0);
6572       tree res = DECL_RESULT (current_function_decl);
6573       tree inner;
6574
6575       current_function_returns_value = 1;
6576       if (t == error_mark_node)
6577         return NULL_TREE;
6578
6579       inner = t = convert (TREE_TYPE (res), t);
6580
6581       /* Strip any conversions, additions, and subtractions, and see if
6582          we are returning the address of a local variable.  Warn if so.  */
6583       while (1)
6584         {
6585           switch (TREE_CODE (inner))
6586             {
6587             case NOP_EXPR:   case NON_LVALUE_EXPR:  case CONVERT_EXPR:
6588             case PLUS_EXPR:
6589               inner = TREE_OPERAND (inner, 0);
6590               continue;
6591
6592             case MINUS_EXPR:
6593               /* If the second operand of the MINUS_EXPR has a pointer
6594                  type (or is converted from it), this may be valid, so
6595                  don't give a warning.  */
6596               {
6597                 tree op1 = TREE_OPERAND (inner, 1);
6598
6599                 while (!POINTER_TYPE_P (TREE_TYPE (op1))
6600                        && (TREE_CODE (op1) == NOP_EXPR
6601                            || TREE_CODE (op1) == NON_LVALUE_EXPR
6602                            || TREE_CODE (op1) == CONVERT_EXPR))
6603                   op1 = TREE_OPERAND (op1, 0);
6604
6605                 if (POINTER_TYPE_P (TREE_TYPE (op1)))
6606                   break;
6607
6608                 inner = TREE_OPERAND (inner, 0);
6609                 continue;
6610               }
6611
6612             case ADDR_EXPR:
6613               inner = TREE_OPERAND (inner, 0);
6614
6615               while (REFERENCE_CLASS_P (inner)
6616                      && TREE_CODE (inner) != INDIRECT_REF)
6617                 inner = TREE_OPERAND (inner, 0);
6618
6619               if (DECL_P (inner)
6620                   && !DECL_EXTERNAL (inner)
6621                   && !TREE_STATIC (inner)
6622                   && DECL_CONTEXT (inner) == current_function_decl)
6623                 warning (0, "function returns address of local variable");
6624               break;
6625
6626             default:
6627               break;
6628             }
6629
6630           break;
6631         }
6632
6633       retval = build2 (MODIFY_EXPR, TREE_TYPE (res), res, t);
6634     }
6635
6636   return add_stmt (build_stmt (RETURN_EXPR, retval));
6637 }
6638 \f
6639 struct c_switch {
6640   /* The SWITCH_EXPR being built.  */
6641   tree switch_expr;
6642
6643   /* The original type of the testing expression, i.e. before the
6644      default conversion is applied.  */
6645   tree orig_type;
6646
6647   /* A splay-tree mapping the low element of a case range to the high
6648      element, or NULL_TREE if there is no high element.  Used to
6649      determine whether or not a new case label duplicates an old case
6650      label.  We need a tree, rather than simply a hash table, because
6651      of the GNU case range extension.  */
6652   splay_tree cases;
6653
6654   /* Number of nested statement expressions within this switch
6655      statement; if nonzero, case and default labels may not
6656      appear.  */
6657   unsigned int blocked_stmt_expr;
6658
6659   /* Scope of outermost declarations of identifiers with variably
6660      modified type within this switch statement; if nonzero, case and
6661      default labels may not appear.  */
6662   unsigned int blocked_vm;
6663
6664   /* The next node on the stack.  */
6665   struct c_switch *next;
6666 };
6667
6668 /* A stack of the currently active switch statements.  The innermost
6669    switch statement is on the top of the stack.  There is no need to
6670    mark the stack for garbage collection because it is only active
6671    during the processing of the body of a function, and we never
6672    collect at that point.  */
6673
6674 struct c_switch *c_switch_stack;
6675
6676 /* Start a C switch statement, testing expression EXP.  Return the new
6677    SWITCH_EXPR.  */
6678
6679 tree
6680 c_start_case (tree exp)
6681 {
6682   enum tree_code code;
6683   tree type, orig_type = error_mark_node;
6684   struct c_switch *cs;
6685
6686   if (exp != error_mark_node)
6687     {
6688       code = TREE_CODE (TREE_TYPE (exp));
6689       orig_type = TREE_TYPE (exp);
6690
6691       if (!INTEGRAL_TYPE_P (orig_type)
6692           && code != ERROR_MARK)
6693         {
6694           error ("switch quantity not an integer");
6695           exp = integer_zero_node;
6696           orig_type = error_mark_node;
6697         }
6698       else
6699         {
6700           type = TYPE_MAIN_VARIANT (TREE_TYPE (exp));
6701
6702           if (warn_traditional && !in_system_header
6703               && (type == long_integer_type_node
6704                   || type == long_unsigned_type_node))
6705             warning (0, "%<long%> switch expression not converted to "
6706                      "%<int%> in ISO C");
6707
6708           exp = default_conversion (exp);
6709           type = TREE_TYPE (exp);
6710         }
6711     }
6712
6713   /* Add this new SWITCH_EXPR to the stack.  */
6714   cs = XNEW (struct c_switch);
6715   cs->switch_expr = build3 (SWITCH_EXPR, orig_type, exp, NULL_TREE, NULL_TREE);
6716   cs->orig_type = orig_type;
6717   cs->cases = splay_tree_new (case_compare, NULL, NULL);
6718   cs->blocked_stmt_expr = 0;
6719   cs->blocked_vm = 0;
6720   cs->next = c_switch_stack;
6721   c_switch_stack = cs;
6722
6723   return add_stmt (cs->switch_expr);
6724 }
6725
6726 /* Process a case label.  */
6727
6728 tree
6729 do_case (tree low_value, tree high_value)
6730 {
6731   tree label = NULL_TREE;
6732
6733   if (c_switch_stack && !c_switch_stack->blocked_stmt_expr
6734       && !c_switch_stack->blocked_vm)
6735     {
6736       label = c_add_case_label (c_switch_stack->cases,
6737                                 SWITCH_COND (c_switch_stack->switch_expr),
6738                                 c_switch_stack->orig_type,
6739                                 low_value, high_value);
6740       if (label == error_mark_node)
6741         label = NULL_TREE;
6742     }
6743   else if (c_switch_stack && c_switch_stack->blocked_stmt_expr)
6744     {
6745       if (low_value)
6746         error ("case label in statement expression not containing "
6747                "enclosing switch statement");
6748       else
6749         error ("%<default%> label in statement expression not containing "
6750                "enclosing switch statement");
6751     }
6752   else if (c_switch_stack && c_switch_stack->blocked_vm)
6753     {
6754       if (low_value)
6755         error ("case label in scope of identifier with variably modified "
6756                "type not containing enclosing switch statement");
6757       else
6758         error ("%<default%> label in scope of identifier with variably "
6759                "modified type not containing enclosing switch statement");
6760     }
6761   else if (low_value)
6762     error ("case label not within a switch statement");
6763   else
6764     error ("%<default%> label not within a switch statement");
6765
6766   return label;
6767 }
6768
6769 /* Finish the switch statement.  */
6770
6771 void
6772 c_finish_case (tree body)
6773 {
6774   struct c_switch *cs = c_switch_stack;
6775   location_t switch_location;
6776
6777   SWITCH_BODY (cs->switch_expr) = body;
6778
6779   /* We must not be within a statement expression nested in the switch
6780      at this point; we might, however, be within the scope of an
6781      identifier with variably modified type nested in the switch.  */
6782   gcc_assert (!cs->blocked_stmt_expr);
6783
6784   /* Emit warnings as needed.  */
6785   if (EXPR_HAS_LOCATION (cs->switch_expr))
6786     switch_location = EXPR_LOCATION (cs->switch_expr);
6787   else
6788     switch_location = input_location;
6789   c_do_switch_warnings (cs->cases, switch_location,
6790                         TREE_TYPE (cs->switch_expr),
6791                         SWITCH_COND (cs->switch_expr));
6792
6793   /* Pop the stack.  */
6794   c_switch_stack = cs->next;
6795   splay_tree_delete (cs->cases);
6796   XDELETE (cs);
6797 }
6798 \f
6799 /* Emit an if statement.  IF_LOCUS is the location of the 'if'.  COND,
6800    THEN_BLOCK and ELSE_BLOCK are expressions to be used; ELSE_BLOCK
6801    may be null.  NESTED_IF is true if THEN_BLOCK contains another IF
6802    statement, and was not surrounded with parenthesis.  */
6803
6804 void
6805 c_finish_if_stmt (location_t if_locus, tree cond, tree then_block,
6806                   tree else_block, bool nested_if)
6807 {
6808   tree stmt;
6809
6810   /* Diagnose an ambiguous else if if-then-else is nested inside if-then.  */
6811   if (warn_parentheses && nested_if && else_block == NULL)
6812     {
6813       tree inner_if = then_block;
6814
6815       /* We know from the grammar productions that there is an IF nested
6816          within THEN_BLOCK.  Due to labels and c99 conditional declarations,
6817          it might not be exactly THEN_BLOCK, but should be the last
6818          non-container statement within.  */
6819       while (1)
6820         switch (TREE_CODE (inner_if))
6821           {
6822           case COND_EXPR:
6823             goto found;
6824           case BIND_EXPR:
6825             inner_if = BIND_EXPR_BODY (inner_if);
6826             break;
6827           case STATEMENT_LIST:
6828             inner_if = expr_last (then_block);
6829             break;
6830           case TRY_FINALLY_EXPR:
6831           case TRY_CATCH_EXPR:
6832             inner_if = TREE_OPERAND (inner_if, 0);
6833             break;
6834           default:
6835             gcc_unreachable ();
6836           }
6837     found:
6838
6839       if (COND_EXPR_ELSE (inner_if))
6840          warning (0, "%Hsuggest explicit braces to avoid ambiguous %<else%>",
6841                   &if_locus);
6842     }
6843
6844   /* Diagnose ";" via the special empty statement node that we create.  */
6845   if (extra_warnings)
6846     {
6847       if (TREE_CODE (then_block) == NOP_EXPR && !TREE_TYPE (then_block))
6848         {
6849           if (!else_block)
6850             warning (0, "%Hempty body in an if-statement",
6851                      EXPR_LOCUS (then_block));
6852           then_block = alloc_stmt_list ();
6853         }
6854       if (else_block
6855           && TREE_CODE (else_block) == NOP_EXPR
6856           && !TREE_TYPE (else_block))
6857         {
6858           warning (0, "%Hempty body in an else-statement",
6859                    EXPR_LOCUS (else_block));
6860           else_block = alloc_stmt_list ();
6861         }
6862     }
6863
6864   stmt = build3 (COND_EXPR, NULL_TREE, cond, then_block, else_block);
6865   SET_EXPR_LOCATION (stmt, if_locus);
6866   add_stmt (stmt);
6867 }
6868
6869 /* Emit a general-purpose loop construct.  START_LOCUS is the location of
6870    the beginning of the loop.  COND is the loop condition.  COND_IS_FIRST
6871    is false for DO loops.  INCR is the FOR increment expression.  BODY is
6872    the statement controlled by the loop.  BLAB is the break label.  CLAB is
6873    the continue label.  Everything is allowed to be NULL.  */
6874
6875 void
6876 c_finish_loop (location_t start_locus, tree cond, tree incr, tree body,
6877                tree blab, tree clab, bool cond_is_first)
6878 {
6879   tree entry = NULL, exit = NULL, t;
6880
6881   /* If the condition is zero don't generate a loop construct.  */
6882   if (cond && integer_zerop (cond))
6883     {
6884       if (cond_is_first)
6885         {
6886           t = build_and_jump (&blab);
6887           SET_EXPR_LOCATION (t, start_locus);
6888           add_stmt (t);
6889         }
6890     }
6891   else
6892     {
6893       tree top = build1 (LABEL_EXPR, void_type_node, NULL_TREE);
6894  
6895       /* If we have an exit condition, then we build an IF with gotos either
6896          out of the loop, or to the top of it.  If there's no exit condition,
6897          then we just build a jump back to the top.  */
6898       exit = build_and_jump (&LABEL_EXPR_LABEL (top));
6899  
6900       if (cond && !integer_nonzerop (cond))
6901         {
6902           /* Canonicalize the loop condition to the end.  This means
6903              generating a branch to the loop condition.  Reuse the
6904              continue label, if possible.  */
6905           if (cond_is_first)
6906             {
6907               if (incr || !clab)
6908                 {
6909                   entry = build1 (LABEL_EXPR, void_type_node, NULL_TREE);
6910                   t = build_and_jump (&LABEL_EXPR_LABEL (entry));
6911                 }
6912               else
6913                 t = build1 (GOTO_EXPR, void_type_node, clab);
6914               SET_EXPR_LOCATION (t, start_locus);
6915               add_stmt (t);
6916             }
6917  
6918           t = build_and_jump (&blab);
6919           exit = build3 (COND_EXPR, void_type_node, cond, exit, t);
6920           exit = fold (exit);
6921           if (cond_is_first)
6922             SET_EXPR_LOCATION (exit, start_locus);
6923           else
6924             SET_EXPR_LOCATION (exit, input_location);
6925         }
6926  
6927       add_stmt (top);
6928     }
6929  
6930   if (body)
6931     add_stmt (body);
6932   if (clab)
6933     add_stmt (build1 (LABEL_EXPR, void_type_node, clab));
6934   if (incr)
6935     add_stmt (incr);
6936   if (entry)
6937     add_stmt (entry);
6938   if (exit)
6939     add_stmt (exit);
6940   if (blab)
6941     add_stmt (build1 (LABEL_EXPR, void_type_node, blab));
6942 }
6943
6944 tree
6945 c_finish_bc_stmt (tree *label_p, bool is_break)
6946 {
6947   bool skip;
6948   tree label = *label_p;
6949
6950   /* In switch statements break is sometimes stylistically used after
6951      a return statement.  This can lead to spurious warnings about
6952      control reaching the end of a non-void function when it is
6953      inlined.  Note that we are calling block_may_fallthru with
6954      language specific tree nodes; this works because
6955      block_may_fallthru returns true when given something it does not
6956      understand.  */
6957   skip = !block_may_fallthru (cur_stmt_list);
6958
6959   if (!label)
6960     {
6961       if (!skip)
6962         *label_p = label = create_artificial_label ();
6963     }
6964   else if (TREE_CODE (label) != LABEL_DECL)
6965     {
6966       if (is_break)
6967         error ("break statement not within loop or switch");
6968       else
6969         error ("continue statement not within a loop");
6970       return NULL_TREE;
6971     }
6972
6973   if (skip)
6974     return NULL_TREE;
6975
6976   return add_stmt (build1 (GOTO_EXPR, void_type_node, label));
6977 }
6978
6979 /* A helper routine for c_process_expr_stmt and c_finish_stmt_expr.  */
6980
6981 static void
6982 emit_side_effect_warnings (tree expr)
6983 {
6984   if (expr == error_mark_node)
6985     ;
6986   else if (!TREE_SIDE_EFFECTS (expr))
6987     {
6988       if (!VOID_TYPE_P (TREE_TYPE (expr)) && !TREE_NO_WARNING (expr))
6989         warning (0, "%Hstatement with no effect",
6990                  EXPR_HAS_LOCATION (expr) ? EXPR_LOCUS (expr) : &input_location);
6991     }
6992   else if (warn_unused_value)
6993     warn_if_unused_value (expr, input_location);
6994 }
6995
6996 /* Process an expression as if it were a complete statement.  Emit
6997    diagnostics, but do not call ADD_STMT.  */
6998
6999 tree
7000 c_process_expr_stmt (tree expr)
7001 {
7002   if (!expr)
7003     return NULL_TREE;
7004
7005   /* Do default conversion if safe and possibly important,
7006      in case within ({...}).  */
7007   if ((TREE_CODE (TREE_TYPE (expr)) == ARRAY_TYPE
7008        && (flag_isoc99 || lvalue_p (expr)))
7009       || TREE_CODE (TREE_TYPE (expr)) == FUNCTION_TYPE)
7010     expr = default_conversion (expr);
7011
7012   if (warn_sequence_point)
7013     verify_sequence_points (expr);
7014
7015   if (TREE_TYPE (expr) != error_mark_node
7016       && !COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (expr))
7017       && TREE_CODE (TREE_TYPE (expr)) != ARRAY_TYPE)
7018     error ("expression statement has incomplete type");
7019
7020   /* If we're not processing a statement expression, warn about unused values.
7021      Warnings for statement expressions will be emitted later, once we figure
7022      out which is the result.  */
7023   if (!STATEMENT_LIST_STMT_EXPR (cur_stmt_list)
7024       && (extra_warnings || warn_unused_value))
7025     emit_side_effect_warnings (expr);
7026
7027   /* If the expression is not of a type to which we cannot assign a line
7028      number, wrap the thing in a no-op NOP_EXPR.  */
7029   if (DECL_P (expr) || CONSTANT_CLASS_P (expr))
7030     expr = build1 (NOP_EXPR, TREE_TYPE (expr), expr);
7031
7032   if (EXPR_P (expr))
7033     SET_EXPR_LOCATION (expr, input_location);
7034
7035   return expr;
7036 }
7037
7038 /* Emit an expression as a statement.  */
7039
7040 tree
7041 c_finish_expr_stmt (tree expr)
7042 {
7043   if (expr)
7044     return add_stmt (c_process_expr_stmt (expr));
7045   else
7046     return NULL;
7047 }
7048
7049 /* Do the opposite and emit a statement as an expression.  To begin,
7050    create a new binding level and return it.  */
7051
7052 tree
7053 c_begin_stmt_expr (void)
7054 {
7055   tree ret;
7056   struct c_label_context_se *nstack;
7057   struct c_label_list *glist;
7058
7059   /* We must force a BLOCK for this level so that, if it is not expanded
7060      later, there is a way to turn off the entire subtree of blocks that
7061      are contained in it.  */
7062   keep_next_level ();
7063   ret = c_begin_compound_stmt (true);
7064   if (c_switch_stack)
7065     {
7066       c_switch_stack->blocked_stmt_expr++;
7067       gcc_assert (c_switch_stack->blocked_stmt_expr != 0);
7068     }
7069   for (glist = label_context_stack_se->labels_used;
7070        glist != NULL;
7071        glist = glist->next)
7072     {
7073       C_DECL_UNDEFINABLE_STMT_EXPR (glist->label) = 1;
7074     }
7075   nstack = XOBNEW (&parser_obstack, struct c_label_context_se);
7076   nstack->labels_def = NULL;
7077   nstack->labels_used = NULL;
7078   nstack->next = label_context_stack_se;
7079   label_context_stack_se = nstack;
7080
7081   /* Mark the current statement list as belonging to a statement list.  */
7082   STATEMENT_LIST_STMT_EXPR (ret) = 1;
7083
7084   return ret;
7085 }
7086
7087 tree
7088 c_finish_stmt_expr (tree body)
7089 {
7090   tree last, type, tmp, val;
7091   tree *last_p;
7092   struct c_label_list *dlist, *glist, *glist_prev = NULL;
7093
7094   body = c_end_compound_stmt (body, true);
7095   if (c_switch_stack)
7096     {
7097       gcc_assert (c_switch_stack->blocked_stmt_expr != 0);
7098       c_switch_stack->blocked_stmt_expr--;
7099     }
7100   /* It is no longer possible to jump to labels defined within this
7101      statement expression.  */
7102   for (dlist = label_context_stack_se->labels_def;
7103        dlist != NULL;
7104        dlist = dlist->next)
7105     {
7106       C_DECL_UNJUMPABLE_STMT_EXPR (dlist->label) = 1;
7107     }
7108   /* It is again possible to define labels with a goto just outside
7109      this statement expression.  */
7110   for (glist = label_context_stack_se->next->labels_used;
7111        glist != NULL;
7112        glist = glist->next)
7113     {
7114       C_DECL_UNDEFINABLE_STMT_EXPR (glist->label) = 0;
7115       glist_prev = glist;
7116     }
7117   if (glist_prev != NULL)
7118     glist_prev->next = label_context_stack_se->labels_used;
7119   else
7120     label_context_stack_se->next->labels_used
7121       = label_context_stack_se->labels_used;
7122   label_context_stack_se = label_context_stack_se->next;
7123
7124   /* Locate the last statement in BODY.  See c_end_compound_stmt
7125      about always returning a BIND_EXPR.  */
7126   last_p = &BIND_EXPR_BODY (body);
7127   last = BIND_EXPR_BODY (body);
7128
7129  continue_searching:
7130   if (TREE_CODE (last) == STATEMENT_LIST)
7131     {
7132       tree_stmt_iterator i;
7133
7134       /* This can happen with degenerate cases like ({ }).  No value.  */
7135       if (!TREE_SIDE_EFFECTS (last))
7136         return body;
7137
7138       /* If we're supposed to generate side effects warnings, process
7139          all of the statements except the last.  */
7140       if (extra_warnings || warn_unused_value)
7141         {
7142           for (i = tsi_start (last); !tsi_one_before_end_p (i); tsi_next (&i))
7143             emit_side_effect_warnings (tsi_stmt (i));
7144         }
7145       else
7146         i = tsi_last (last);
7147       last_p = tsi_stmt_ptr (i);
7148       last = *last_p;
7149     }
7150
7151   /* If the end of the list is exception related, then the list was split
7152      by a call to push_cleanup.  Continue searching.  */
7153   if (TREE_CODE (last) == TRY_FINALLY_EXPR
7154       || TREE_CODE (last) == TRY_CATCH_EXPR)
7155     {
7156       last_p = &TREE_OPERAND (last, 0);
7157       last = *last_p;
7158       goto continue_searching;
7159     }
7160
7161   /* In the case that the BIND_EXPR is not necessary, return the
7162      expression out from inside it.  */
7163   if (last == error_mark_node
7164       || (last == BIND_EXPR_BODY (body)
7165           && BIND_EXPR_VARS (body) == NULL))
7166     return last;
7167
7168   /* Extract the type of said expression.  */
7169   type = TREE_TYPE (last);
7170
7171   /* If we're not returning a value at all, then the BIND_EXPR that
7172      we already have is a fine expression to return.  */
7173   if (!type || VOID_TYPE_P (type))
7174     return body;
7175
7176   /* Now that we've located the expression containing the value, it seems
7177      silly to make voidify_wrapper_expr repeat the process.  Create a
7178      temporary of the appropriate type and stick it in a TARGET_EXPR.  */
7179   tmp = create_tmp_var_raw (type, NULL);
7180
7181   /* Unwrap a no-op NOP_EXPR as added by c_finish_expr_stmt.  This avoids
7182      tree_expr_nonnegative_p giving up immediately.  */
7183   val = last;
7184   if (TREE_CODE (val) == NOP_EXPR
7185       && TREE_TYPE (val) == TREE_TYPE (TREE_OPERAND (val, 0)))
7186     val = TREE_OPERAND (val, 0);
7187
7188   *last_p = build2 (MODIFY_EXPR, void_type_node, tmp, val);
7189   SET_EXPR_LOCUS (*last_p, EXPR_LOCUS (last));
7190
7191   return build4 (TARGET_EXPR, type, tmp, body, NULL_TREE, NULL_TREE);
7192 }
7193
7194 /* Begin the scope of an identifier of variably modified type, scope
7195    number SCOPE.  Jumping from outside this scope to inside it is not
7196    permitted.  */
7197
7198 void
7199 c_begin_vm_scope (unsigned int scope)
7200 {
7201   struct c_label_context_vm *nstack;
7202   struct c_label_list *glist;
7203
7204   gcc_assert (scope > 0);
7205   if (c_switch_stack && !c_switch_stack->blocked_vm)
7206     c_switch_stack->blocked_vm = scope;
7207   for (glist = label_context_stack_vm->labels_used;
7208        glist != NULL;
7209        glist = glist->next)
7210     {
7211       C_DECL_UNDEFINABLE_VM (glist->label) = 1;
7212     }
7213   nstack = XOBNEW (&parser_obstack, struct c_label_context_vm);
7214   nstack->labels_def = NULL;
7215   nstack->labels_used = NULL;
7216   nstack->scope = scope;
7217   nstack->next = label_context_stack_vm;
7218   label_context_stack_vm = nstack;
7219 }
7220
7221 /* End a scope which may contain identifiers of variably modified
7222    type, scope number SCOPE.  */
7223
7224 void
7225 c_end_vm_scope (unsigned int scope)
7226 {
7227   if (label_context_stack_vm == NULL)
7228     return;
7229   if (c_switch_stack && c_switch_stack->blocked_vm == scope)
7230     c_switch_stack->blocked_vm = 0;
7231   /* We may have a number of nested scopes of identifiers with
7232      variably modified type, all at this depth.  Pop each in turn.  */
7233   while (label_context_stack_vm->scope == scope)
7234     {
7235       struct c_label_list *dlist, *glist, *glist_prev = NULL;
7236
7237       /* It is no longer possible to jump to labels defined within this
7238          scope.  */
7239       for (dlist = label_context_stack_vm->labels_def;
7240            dlist != NULL;
7241            dlist = dlist->next)
7242         {
7243           C_DECL_UNJUMPABLE_VM (dlist->label) = 1;
7244         }
7245       /* It is again possible to define labels with a goto just outside
7246          this scope.  */
7247       for (glist = label_context_stack_vm->next->labels_used;
7248            glist != NULL;
7249            glist = glist->next)
7250         {
7251           C_DECL_UNDEFINABLE_VM (glist->label) = 0;
7252           glist_prev = glist;
7253         }
7254       if (glist_prev != NULL)
7255         glist_prev->next = label_context_stack_vm->labels_used;
7256       else
7257         label_context_stack_vm->next->labels_used
7258           = label_context_stack_vm->labels_used;
7259       label_context_stack_vm = label_context_stack_vm->next;
7260     }
7261 }
7262 \f
7263 /* Begin and end compound statements.  This is as simple as pushing
7264    and popping new statement lists from the tree.  */
7265
7266 tree
7267 c_begin_compound_stmt (bool do_scope)
7268 {
7269   tree stmt = push_stmt_list ();
7270   if (do_scope)
7271     push_scope ();
7272   return stmt;
7273 }
7274
7275 tree
7276 c_end_compound_stmt (tree stmt, bool do_scope)
7277 {
7278   tree block = NULL;
7279
7280   if (do_scope)
7281     {
7282       if (c_dialect_objc ())
7283         objc_clear_super_receiver ();
7284       block = pop_scope ();
7285     }
7286
7287   stmt = pop_stmt_list (stmt);
7288   stmt = c_build_bind_expr (block, stmt);
7289
7290   /* If this compound statement is nested immediately inside a statement
7291      expression, then force a BIND_EXPR to be created.  Otherwise we'll
7292      do the wrong thing for ({ { 1; } }) or ({ 1; { } }).  In particular,
7293      STATEMENT_LISTs merge, and thus we can lose track of what statement
7294      was really last.  */
7295   if (cur_stmt_list
7296       && STATEMENT_LIST_STMT_EXPR (cur_stmt_list)
7297       && TREE_CODE (stmt) != BIND_EXPR)
7298     {
7299       stmt = build3 (BIND_EXPR, void_type_node, NULL, stmt, NULL);
7300       TREE_SIDE_EFFECTS (stmt) = 1;
7301     }
7302
7303   return stmt;
7304 }
7305
7306 /* Queue a cleanup.  CLEANUP is an expression/statement to be executed
7307    when the current scope is exited.  EH_ONLY is true when this is not
7308    meant to apply to normal control flow transfer.  */
7309
7310 void
7311 push_cleanup (tree ARG_UNUSED (decl), tree cleanup, bool eh_only)
7312 {
7313   enum tree_code code;
7314   tree stmt, list;
7315   bool stmt_expr;
7316
7317   code = eh_only ? TRY_CATCH_EXPR : TRY_FINALLY_EXPR;
7318   stmt = build_stmt (code, NULL, cleanup);
7319   add_stmt (stmt);
7320   stmt_expr = STATEMENT_LIST_STMT_EXPR (cur_stmt_list);
7321   list = push_stmt_list ();
7322   TREE_OPERAND (stmt, 0) = list;
7323   STATEMENT_LIST_STMT_EXPR (list) = stmt_expr;
7324 }
7325 \f
7326 /* Build a binary-operation expression without default conversions.
7327    CODE is the kind of expression to build.
7328    This function differs from `build' in several ways:
7329    the data type of the result is computed and recorded in it,
7330    warnings are generated if arg data types are invalid,
7331    special handling for addition and subtraction of pointers is known,
7332    and some optimization is done (operations on narrow ints
7333    are done in the narrower type when that gives the same result).
7334    Constant folding is also done before the result is returned.
7335
7336    Note that the operands will never have enumeral types, or function
7337    or array types, because either they will have the default conversions
7338    performed or they have both just been converted to some other type in which
7339    the arithmetic is to be done.  */
7340
7341 tree
7342 build_binary_op (enum tree_code code, tree orig_op0, tree orig_op1,
7343                  int convert_p)
7344 {
7345   tree type0, type1;
7346   enum tree_code code0, code1;
7347   tree op0, op1;
7348
7349   /* Expression code to give to the expression when it is built.
7350      Normally this is CODE, which is what the caller asked for,
7351      but in some special cases we change it.  */
7352   enum tree_code resultcode = code;
7353
7354   /* Data type in which the computation is to be performed.
7355      In the simplest cases this is the common type of the arguments.  */
7356   tree result_type = NULL;
7357
7358   /* Nonzero means operands have already been type-converted
7359      in whatever way is necessary.
7360      Zero means they need to be converted to RESULT_TYPE.  */
7361   int converted = 0;
7362
7363   /* Nonzero means create the expression with this type, rather than
7364      RESULT_TYPE.  */
7365   tree build_type = 0;
7366
7367   /* Nonzero means after finally constructing the expression
7368      convert it to this type.  */
7369   tree final_type = 0;
7370
7371   /* Nonzero if this is an operation like MIN or MAX which can
7372      safely be computed in short if both args are promoted shorts.
7373      Also implies COMMON.
7374      -1 indicates a bitwise operation; this makes a difference
7375      in the exact conditions for when it is safe to do the operation
7376      in a narrower mode.  */
7377   int shorten = 0;
7378
7379   /* Nonzero if this is a comparison operation;
7380      if both args are promoted shorts, compare the original shorts.
7381      Also implies COMMON.  */
7382   int short_compare = 0;
7383
7384   /* Nonzero if this is a right-shift operation, which can be computed on the
7385      original short and then promoted if the operand is a promoted short.  */
7386   int short_shift = 0;
7387
7388   /* Nonzero means set RESULT_TYPE to the common type of the args.  */
7389   int common = 0;
7390
7391   if (convert_p)
7392     {
7393       op0 = default_conversion (orig_op0);
7394       op1 = default_conversion (orig_op1);
7395     }
7396   else
7397     {
7398       op0 = orig_op0;
7399       op1 = orig_op1;
7400     }
7401
7402   type0 = TREE_TYPE (op0);
7403   type1 = TREE_TYPE (op1);
7404
7405   /* The expression codes of the data types of the arguments tell us
7406      whether the arguments are integers, floating, pointers, etc.  */
7407   code0 = TREE_CODE (type0);
7408   code1 = TREE_CODE (type1);
7409
7410   /* Strip NON_LVALUE_EXPRs, etc., since we aren't using as an lvalue.  */
7411   STRIP_TYPE_NOPS (op0);
7412   STRIP_TYPE_NOPS (op1);
7413
7414   /* If an error was already reported for one of the arguments,
7415      avoid reporting another error.  */
7416
7417   if (code0 == ERROR_MARK || code1 == ERROR_MARK)
7418     return error_mark_node;
7419
7420   switch (code)
7421     {
7422     case PLUS_EXPR:
7423       /* Handle the pointer + int case.  */
7424       if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
7425         return pointer_int_sum (PLUS_EXPR, op0, op1);
7426       else if (code1 == POINTER_TYPE && code0 == INTEGER_TYPE)
7427         return pointer_int_sum (PLUS_EXPR, op1, op0);
7428       else
7429         common = 1;
7430       break;
7431
7432     case MINUS_EXPR:
7433       /* Subtraction of two similar pointers.
7434          We must subtract them as integers, then divide by object size.  */
7435       if (code0 == POINTER_TYPE && code1 == POINTER_TYPE
7436           && comp_target_types (type0, type1, 1))
7437         return pointer_diff (op0, op1);
7438       /* Handle pointer minus int.  Just like pointer plus int.  */
7439       else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
7440         return pointer_int_sum (MINUS_EXPR, op0, op1);
7441       else
7442         common = 1;
7443       break;
7444
7445     case MULT_EXPR:
7446       common = 1;
7447       break;
7448
7449     case TRUNC_DIV_EXPR:
7450     case CEIL_DIV_EXPR:
7451     case FLOOR_DIV_EXPR:
7452     case ROUND_DIV_EXPR:
7453     case EXACT_DIV_EXPR:
7454       /* Floating point division by zero is a legitimate way to obtain
7455          infinities and NaNs.  */
7456       if (warn_div_by_zero && skip_evaluation == 0 && integer_zerop (op1))
7457         warning (0, "division by zero");
7458
7459       if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
7460            || code0 == COMPLEX_TYPE || code0 == VECTOR_TYPE)
7461           && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
7462               || code1 == COMPLEX_TYPE || code1 == VECTOR_TYPE))
7463         {
7464           if (code0 == COMPLEX_TYPE || code0 == VECTOR_TYPE)
7465             code0 = TREE_CODE (TREE_TYPE (TREE_TYPE (op0)));
7466           if (code1 == COMPLEX_TYPE || code1 == VECTOR_TYPE)
7467             code1 = TREE_CODE (TREE_TYPE (TREE_TYPE (op1)));
7468
7469           if (!(code0 == INTEGER_TYPE && code1 == INTEGER_TYPE))
7470             resultcode = RDIV_EXPR;
7471           else
7472             /* Although it would be tempting to shorten always here, that
7473                loses on some targets, since the modulo instruction is
7474                undefined if the quotient can't be represented in the
7475                computation mode.  We shorten only if unsigned or if
7476                dividing by something we know != -1.  */
7477             shorten = (TYPE_UNSIGNED (TREE_TYPE (orig_op0))
7478                        || (TREE_CODE (op1) == INTEGER_CST
7479                            && !integer_all_onesp (op1)));
7480           common = 1;
7481         }
7482       break;
7483
7484     case BIT_AND_EXPR:
7485     case BIT_IOR_EXPR:
7486     case BIT_XOR_EXPR:
7487       if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
7488         shorten = -1;
7489       else if (code0 == VECTOR_TYPE && code1 == VECTOR_TYPE)
7490         common = 1;
7491       break;
7492
7493     case TRUNC_MOD_EXPR:
7494     case FLOOR_MOD_EXPR:
7495       if (warn_div_by_zero && skip_evaluation == 0 && integer_zerop (op1))
7496         warning (0, "division by zero");
7497
7498       if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
7499         {
7500           /* Although it would be tempting to shorten always here, that loses
7501              on some targets, since the modulo instruction is undefined if the
7502              quotient can't be represented in the computation mode.  We shorten
7503              only if unsigned or if dividing by something we know != -1.  */
7504           shorten = (TYPE_UNSIGNED (TREE_TYPE (orig_op0))
7505                      || (TREE_CODE (op1) == INTEGER_CST
7506                          && !integer_all_onesp (op1)));
7507           common = 1;
7508         }
7509       break;
7510
7511     case TRUTH_ANDIF_EXPR:
7512     case TRUTH_ORIF_EXPR:
7513     case TRUTH_AND_EXPR:
7514     case TRUTH_OR_EXPR:
7515     case TRUTH_XOR_EXPR:
7516       if ((code0 == INTEGER_TYPE || code0 == POINTER_TYPE
7517            || code0 == REAL_TYPE || code0 == COMPLEX_TYPE)
7518           && (code1 == INTEGER_TYPE || code1 == POINTER_TYPE
7519               || code1 == REAL_TYPE || code1 == COMPLEX_TYPE))
7520         {
7521           /* Result of these operations is always an int,
7522              but that does not mean the operands should be
7523              converted to ints!  */
7524           result_type = integer_type_node;
7525           op0 = c_common_truthvalue_conversion (op0);
7526           op1 = c_common_truthvalue_conversion (op1);
7527           converted = 1;
7528         }
7529       break;
7530
7531       /* Shift operations: result has same type as first operand;
7532          always convert second operand to int.
7533          Also set SHORT_SHIFT if shifting rightward.  */
7534
7535     case RSHIFT_EXPR:
7536       if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
7537         {
7538           if (TREE_CODE (op1) == INTEGER_CST && skip_evaluation == 0)
7539             {
7540               if (tree_int_cst_sgn (op1) < 0)
7541                 warning (0, "right shift count is negative");
7542               else
7543                 {
7544                   if (!integer_zerop (op1))
7545                     short_shift = 1;
7546
7547                   if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
7548                     warning (0, "right shift count >= width of type");
7549                 }
7550             }
7551
7552           /* Use the type of the value to be shifted.  */
7553           result_type = type0;
7554           /* Convert the shift-count to an integer, regardless of size
7555              of value being shifted.  */
7556           if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
7557             op1 = convert (integer_type_node, op1);
7558           /* Avoid converting op1 to result_type later.  */
7559           converted = 1;
7560         }
7561       break;
7562
7563     case LSHIFT_EXPR:
7564       if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
7565         {
7566           if (TREE_CODE (op1) == INTEGER_CST && skip_evaluation == 0)
7567             {
7568               if (tree_int_cst_sgn (op1) < 0)
7569                 warning (0, "left shift count is negative");
7570
7571               else if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
7572                 warning (0, "left shift count >= width of type");
7573             }
7574
7575           /* Use the type of the value to be shifted.  */
7576           result_type = type0;
7577           /* Convert the shift-count to an integer, regardless of size
7578              of value being shifted.  */
7579           if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
7580             op1 = convert (integer_type_node, op1);
7581           /* Avoid converting op1 to result_type later.  */
7582           converted = 1;
7583         }
7584       break;
7585
7586     case EQ_EXPR:
7587     case NE_EXPR:
7588       if (warn_float_equal && (code0 == REAL_TYPE || code1 == REAL_TYPE))
7589         warning (0, "comparing floating point with == or != is unsafe");
7590       /* Result of comparison is always int,
7591          but don't convert the args to int!  */
7592       build_type = integer_type_node;
7593       if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
7594            || code0 == COMPLEX_TYPE)
7595           && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
7596               || code1 == COMPLEX_TYPE))
7597         short_compare = 1;
7598       else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
7599         {
7600           tree tt0 = TREE_TYPE (type0);
7601           tree tt1 = TREE_TYPE (type1);
7602           /* Anything compares with void *.  void * compares with anything.
7603              Otherwise, the targets must be compatible
7604              and both must be object or both incomplete.  */
7605           if (comp_target_types (type0, type1, 1))
7606             result_type = common_pointer_type (type0, type1);
7607           else if (VOID_TYPE_P (tt0))
7608             {
7609               /* op0 != orig_op0 detects the case of something
7610                  whose value is 0 but which isn't a valid null ptr const.  */
7611               if (pedantic && (!integer_zerop (op0) || op0 != orig_op0)
7612                   && TREE_CODE (tt1) == FUNCTION_TYPE)
7613                 pedwarn ("ISO C forbids comparison of %<void *%>"
7614                          " with function pointer");
7615             }
7616           else if (VOID_TYPE_P (tt1))
7617             {
7618               if (pedantic && (!integer_zerop (op1) || op1 != orig_op1)
7619                   && TREE_CODE (tt0) == FUNCTION_TYPE)
7620                 pedwarn ("ISO C forbids comparison of %<void *%>"
7621                          " with function pointer");
7622             }
7623           else
7624             pedwarn ("comparison of distinct pointer types lacks a cast");
7625
7626           if (result_type == NULL_TREE)
7627             result_type = ptr_type_node;
7628         }
7629       else if (code0 == POINTER_TYPE && TREE_CODE (op1) == INTEGER_CST
7630                && integer_zerop (op1))
7631         result_type = type0;
7632       else if (code1 == POINTER_TYPE && TREE_CODE (op0) == INTEGER_CST
7633                && integer_zerop (op0))
7634         result_type = type1;
7635       else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
7636         {
7637           result_type = type0;
7638           pedwarn ("comparison between pointer and integer");
7639         }
7640       else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE)
7641         {
7642           result_type = type1;
7643           pedwarn ("comparison between pointer and integer");
7644         }
7645       break;
7646
7647     case LE_EXPR:
7648     case GE_EXPR:
7649     case LT_EXPR:
7650     case GT_EXPR:
7651       build_type = integer_type_node;
7652       if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE)
7653           && (code1 == INTEGER_TYPE || code1 == REAL_TYPE))
7654         short_compare = 1;
7655       else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
7656         {
7657           if (comp_target_types (type0, type1, 1))
7658             {
7659               result_type = common_pointer_type (type0, type1);
7660               if (!COMPLETE_TYPE_P (TREE_TYPE (type0))
7661                   != !COMPLETE_TYPE_P (TREE_TYPE (type1)))
7662                 pedwarn ("comparison of complete and incomplete pointers");
7663               else if (pedantic
7664                        && TREE_CODE (TREE_TYPE (type0)) == FUNCTION_TYPE)
7665                 pedwarn ("ISO C forbids ordered comparisons of pointers to functions");
7666             }
7667           else
7668             {
7669               result_type = ptr_type_node;
7670               pedwarn ("comparison of distinct pointer types lacks a cast");
7671             }
7672         }
7673       else if (code0 == POINTER_TYPE && TREE_CODE (op1) == INTEGER_CST
7674                && integer_zerop (op1))
7675         {
7676           result_type = type0;
7677           if (pedantic || extra_warnings)
7678             pedwarn ("ordered comparison of pointer with integer zero");
7679         }
7680       else if (code1 == POINTER_TYPE && TREE_CODE (op0) == INTEGER_CST
7681                && integer_zerop (op0))
7682         {
7683           result_type = type1;
7684           if (pedantic)
7685             pedwarn ("ordered comparison of pointer with integer zero");
7686         }
7687       else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
7688         {
7689           result_type = type0;
7690           pedwarn ("comparison between pointer and integer");
7691         }
7692       else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE)
7693         {
7694           result_type = type1;
7695           pedwarn ("comparison between pointer and integer");
7696         }
7697       break;
7698
7699     default:
7700       gcc_unreachable ();
7701     }
7702
7703   if (code0 == ERROR_MARK || code1 == ERROR_MARK)
7704     return error_mark_node;
7705
7706   if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE || code0 == COMPLEX_TYPE
7707        || code0 == VECTOR_TYPE)
7708       &&
7709       (code1 == INTEGER_TYPE || code1 == REAL_TYPE || code1 == COMPLEX_TYPE
7710        || code1 == VECTOR_TYPE))
7711     {
7712       int none_complex = (code0 != COMPLEX_TYPE && code1 != COMPLEX_TYPE);
7713
7714       if (shorten || common || short_compare)
7715         result_type = c_common_type (type0, type1);
7716
7717       /* For certain operations (which identify themselves by shorten != 0)
7718          if both args were extended from the same smaller type,
7719          do the arithmetic in that type and then extend.
7720
7721          shorten !=0 and !=1 indicates a bitwise operation.
7722          For them, this optimization is safe only if
7723          both args are zero-extended or both are sign-extended.
7724          Otherwise, we might change the result.
7725          Eg, (short)-1 | (unsigned short)-1 is (int)-1
7726          but calculated in (unsigned short) it would be (unsigned short)-1.  */
7727
7728       if (shorten && none_complex)
7729         {
7730           int unsigned0, unsigned1;
7731           tree arg0 = get_narrower (op0, &unsigned0);
7732           tree arg1 = get_narrower (op1, &unsigned1);
7733           /* UNS is 1 if the operation to be done is an unsigned one.  */
7734           int uns = TYPE_UNSIGNED (result_type);
7735           tree type;
7736
7737           final_type = result_type;
7738
7739           /* Handle the case that OP0 (or OP1) does not *contain* a conversion
7740              but it *requires* conversion to FINAL_TYPE.  */
7741
7742           if ((TYPE_PRECISION (TREE_TYPE (op0))
7743                == TYPE_PRECISION (TREE_TYPE (arg0)))
7744               && TREE_TYPE (op0) != final_type)
7745             unsigned0 = TYPE_UNSIGNED (TREE_TYPE (op0));
7746           if ((TYPE_PRECISION (TREE_TYPE (op1))
7747                == TYPE_PRECISION (TREE_TYPE (arg1)))
7748               && TREE_TYPE (op1) != final_type)
7749             unsigned1 = TYPE_UNSIGNED (TREE_TYPE (op1));
7750
7751           /* Now UNSIGNED0 is 1 if ARG0 zero-extends to FINAL_TYPE.  */
7752
7753           /* For bitwise operations, signedness of nominal type
7754              does not matter.  Consider only how operands were extended.  */
7755           if (shorten == -1)
7756             uns = unsigned0;
7757
7758           /* Note that in all three cases below we refrain from optimizing
7759              an unsigned operation on sign-extended args.
7760              That would not be valid.  */
7761
7762           /* Both args variable: if both extended in same way
7763              from same width, do it in that width.
7764              Do it unsigned if args were zero-extended.  */
7765           if ((TYPE_PRECISION (TREE_TYPE (arg0))
7766                < TYPE_PRECISION (result_type))
7767               && (TYPE_PRECISION (TREE_TYPE (arg1))
7768                   == TYPE_PRECISION (TREE_TYPE (arg0)))
7769               && unsigned0 == unsigned1
7770               && (unsigned0 || !uns))
7771             result_type
7772               = c_common_signed_or_unsigned_type
7773               (unsigned0, c_common_type (TREE_TYPE (arg0), TREE_TYPE (arg1)));
7774           else if (TREE_CODE (arg0) == INTEGER_CST
7775                    && (unsigned1 || !uns)
7776                    && (TYPE_PRECISION (TREE_TYPE (arg1))
7777                        < TYPE_PRECISION (result_type))
7778                    && (type
7779                        = c_common_signed_or_unsigned_type (unsigned1,
7780                                                            TREE_TYPE (arg1)),
7781                        int_fits_type_p (arg0, type)))
7782             result_type = type;
7783           else if (TREE_CODE (arg1) == INTEGER_CST
7784                    && (unsigned0 || !uns)
7785                    && (TYPE_PRECISION (TREE_TYPE (arg0))
7786                        < TYPE_PRECISION (result_type))
7787                    && (type
7788                        = c_common_signed_or_unsigned_type (unsigned0,
7789                                                            TREE_TYPE (arg0)),
7790                        int_fits_type_p (arg1, type)))
7791             result_type = type;
7792         }
7793
7794       /* Shifts can be shortened if shifting right.  */
7795
7796       if (short_shift)
7797         {
7798           int unsigned_arg;
7799           tree arg0 = get_narrower (op0, &unsigned_arg);
7800
7801           final_type = result_type;
7802
7803           if (arg0 == op0 && final_type == TREE_TYPE (op0))
7804             unsigned_arg = TYPE_UNSIGNED (TREE_TYPE (op0));
7805
7806           if (TYPE_PRECISION (TREE_TYPE (arg0)) < TYPE_PRECISION (result_type)
7807               /* We can shorten only if the shift count is less than the
7808                  number of bits in the smaller type size.  */
7809               && compare_tree_int (op1, TYPE_PRECISION (TREE_TYPE (arg0))) < 0
7810               /* We cannot drop an unsigned shift after sign-extension.  */
7811               && (!TYPE_UNSIGNED (final_type) || unsigned_arg))
7812             {
7813               /* Do an unsigned shift if the operand was zero-extended.  */
7814               result_type
7815                 = c_common_signed_or_unsigned_type (unsigned_arg,
7816                                                     TREE_TYPE (arg0));
7817               /* Convert value-to-be-shifted to that type.  */
7818               if (TREE_TYPE (op0) != result_type)
7819                 op0 = convert (result_type, op0);
7820               converted = 1;
7821             }
7822         }
7823
7824       /* Comparison operations are shortened too but differently.
7825          They identify themselves by setting short_compare = 1.  */
7826
7827       if (short_compare)
7828         {
7829           /* Don't write &op0, etc., because that would prevent op0
7830              from being kept in a register.
7831              Instead, make copies of the our local variables and
7832              pass the copies by reference, then copy them back afterward.  */
7833           tree xop0 = op0, xop1 = op1, xresult_type = result_type;
7834           enum tree_code xresultcode = resultcode;
7835           tree val
7836             = shorten_compare (&xop0, &xop1, &xresult_type, &xresultcode);
7837
7838           if (val != 0)
7839             return val;
7840
7841           op0 = xop0, op1 = xop1;
7842           converted = 1;
7843           resultcode = xresultcode;
7844
7845           if (warn_sign_compare && skip_evaluation == 0)
7846             {
7847               int op0_signed = !TYPE_UNSIGNED (TREE_TYPE (orig_op0));
7848               int op1_signed = !TYPE_UNSIGNED (TREE_TYPE (orig_op1));
7849               int unsignedp0, unsignedp1;
7850               tree primop0 = get_narrower (op0, &unsignedp0);
7851               tree primop1 = get_narrower (op1, &unsignedp1);
7852
7853               xop0 = orig_op0;
7854               xop1 = orig_op1;
7855               STRIP_TYPE_NOPS (xop0);
7856               STRIP_TYPE_NOPS (xop1);
7857
7858               /* Give warnings for comparisons between signed and unsigned
7859                  quantities that may fail.
7860
7861                  Do the checking based on the original operand trees, so that
7862                  casts will be considered, but default promotions won't be.
7863
7864                  Do not warn if the comparison is being done in a signed type,
7865                  since the signed type will only be chosen if it can represent
7866                  all the values of the unsigned type.  */
7867               if (!TYPE_UNSIGNED (result_type))
7868                 /* OK */;
7869               /* Do not warn if both operands are the same signedness.  */
7870               else if (op0_signed == op1_signed)
7871                 /* OK */;
7872               else
7873                 {
7874                   tree sop, uop;
7875
7876                   if (op0_signed)
7877                     sop = xop0, uop = xop1;
7878                   else
7879                     sop = xop1, uop = xop0;
7880
7881                   /* Do not warn if the signed quantity is an
7882                      unsuffixed integer literal (or some static
7883                      constant expression involving such literals or a
7884                      conditional expression involving such literals)
7885                      and it is non-negative.  */
7886                   if (tree_expr_nonnegative_p (sop))
7887                     /* OK */;
7888                   /* Do not warn if the comparison is an equality operation,
7889                      the unsigned quantity is an integral constant, and it
7890                      would fit in the result if the result were signed.  */
7891                   else if (TREE_CODE (uop) == INTEGER_CST
7892                            && (resultcode == EQ_EXPR || resultcode == NE_EXPR)
7893                            && int_fits_type_p
7894                            (uop, c_common_signed_type (result_type)))
7895                     /* OK */;
7896                   /* Do not warn if the unsigned quantity is an enumeration
7897                      constant and its maximum value would fit in the result
7898                      if the result were signed.  */
7899                   else if (TREE_CODE (uop) == INTEGER_CST
7900                            && TREE_CODE (TREE_TYPE (uop)) == ENUMERAL_TYPE
7901                            && int_fits_type_p
7902                            (TYPE_MAX_VALUE (TREE_TYPE (uop)),
7903                             c_common_signed_type (result_type)))
7904                     /* OK */;
7905                   else
7906                     warning (0, "comparison between signed and unsigned");
7907                 }
7908
7909               /* Warn if two unsigned values are being compared in a size
7910                  larger than their original size, and one (and only one) is the
7911                  result of a `~' operator.  This comparison will always fail.
7912
7913                  Also warn if one operand is a constant, and the constant
7914                  does not have all bits set that are set in the ~ operand
7915                  when it is extended.  */
7916
7917               if ((TREE_CODE (primop0) == BIT_NOT_EXPR)
7918                   != (TREE_CODE (primop1) == BIT_NOT_EXPR))
7919                 {
7920                   if (TREE_CODE (primop0) == BIT_NOT_EXPR)
7921                     primop0 = get_narrower (TREE_OPERAND (primop0, 0),
7922                                             &unsignedp0);
7923                   else
7924                     primop1 = get_narrower (TREE_OPERAND (primop1, 0),
7925                                             &unsignedp1);
7926
7927                   if (host_integerp (primop0, 0) || host_integerp (primop1, 0))
7928                     {
7929                       tree primop;
7930                       HOST_WIDE_INT constant, mask;
7931                       int unsignedp, bits;
7932
7933                       if (host_integerp (primop0, 0))
7934                         {
7935                           primop = primop1;
7936                           unsignedp = unsignedp1;
7937                           constant = tree_low_cst (primop0, 0);
7938                         }
7939                       else
7940                         {
7941                           primop = primop0;
7942                           unsignedp = unsignedp0;
7943                           constant = tree_low_cst (primop1, 0);
7944                         }
7945
7946                       bits = TYPE_PRECISION (TREE_TYPE (primop));
7947                       if (bits < TYPE_PRECISION (result_type)
7948                           && bits < HOST_BITS_PER_WIDE_INT && unsignedp)
7949                         {
7950                           mask = (~(HOST_WIDE_INT) 0) << bits;
7951                           if ((mask & constant) != mask)
7952                             warning (0, "comparison of promoted ~unsigned with constant");
7953                         }
7954                     }
7955                   else if (unsignedp0 && unsignedp1
7956                            && (TYPE_PRECISION (TREE_TYPE (primop0))
7957                                < TYPE_PRECISION (result_type))
7958                            && (TYPE_PRECISION (TREE_TYPE (primop1))
7959                                < TYPE_PRECISION (result_type)))
7960                     warning (0, "comparison of promoted ~unsigned with unsigned");
7961                 }
7962             }
7963         }
7964     }
7965
7966   /* At this point, RESULT_TYPE must be nonzero to avoid an error message.
7967      If CONVERTED is zero, both args will be converted to type RESULT_TYPE.
7968      Then the expression will be built.
7969      It will be given type FINAL_TYPE if that is nonzero;
7970      otherwise, it will be given type RESULT_TYPE.  */
7971
7972   if (!result_type)
7973     {
7974       binary_op_error (code);
7975       return error_mark_node;
7976     }
7977
7978   if (!converted)
7979     {
7980       if (TREE_TYPE (op0) != result_type)
7981         op0 = convert (result_type, op0);
7982       if (TREE_TYPE (op1) != result_type)
7983         op1 = convert (result_type, op1);
7984
7985       /* This can happen if one operand has a vector type, and the other
7986          has a different type.  */
7987       if (TREE_CODE (op0) == ERROR_MARK || TREE_CODE (op1) == ERROR_MARK)
7988         return error_mark_node;
7989     }
7990
7991   if (build_type == NULL_TREE)
7992     build_type = result_type;
7993
7994   {
7995     tree result = build2 (resultcode, build_type, op0, op1);
7996
7997     /* Treat expressions in initializers specially as they can't trap.  */
7998     result = require_constant_value ? fold_initializer (result)
7999                                     : fold (result);
8000
8001     if (final_type != 0)
8002       result = convert (final_type, result);
8003     return result;
8004   }
8005 }
8006
8007
8008 /* Convert EXPR to be a truth-value, validating its type for this
8009    purpose.  Passes EXPR to default_function_array_conversion.  */
8010
8011 tree
8012 c_objc_common_truthvalue_conversion (tree expr)
8013 {
8014   expr = default_function_array_conversion (expr);
8015   switch (TREE_CODE (TREE_TYPE (expr)))
8016     {
8017     case ARRAY_TYPE:
8018       error ("used array that cannot be converted to pointer where scalar is required");
8019       return error_mark_node;
8020
8021     case RECORD_TYPE:
8022       error ("used struct type value where scalar is required");
8023       return error_mark_node;
8024
8025     case UNION_TYPE:
8026       error ("used union type value where scalar is required");
8027       return error_mark_node;
8028
8029     default:
8030       break;
8031     }
8032
8033   /* ??? Should we also give an error for void and vectors rather than
8034      leaving those to give errors later?  */
8035   return c_common_truthvalue_conversion (expr);
8036 }