OSDN Git Service

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