OSDN Git Service

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