OSDN Git Service

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