OSDN Git Service

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