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