OSDN Git Service

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