c-typeck.c revision 132718
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
5This file is part of GCC.
6
7GCC is free software; you can redistribute it and/or modify it under
8the terms of the GNU General Public License as published by the Free
9Software Foundation; either version 2, or (at your option) any later
10version.
11
12GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13WARRANTY; without even the implied warranty of MERCHANTABILITY or
14FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
15for more details.
16
17You should have received a copy of the GNU General Public License
18along with GCC; see the file COPYING.  If not, write to the Free
19Software Foundation, 59 Temple Place - Suite 330, Boston, MA
2002111-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.  */
50static int missing_braces_mentioned;
51
52static int require_constant_value;
53static int require_constant_elements;
54
55static tree qualify_type (tree, tree);
56static int same_translation_unit_p (tree, tree);
57static int tagged_types_tu_compatible_p (tree, tree, int);
58static int comp_target_types (tree, tree, int);
59static int function_types_compatible_p (tree, tree, int);
60static int type_lists_compatible_p (tree, tree, int);
61static tree decl_constant_value_for_broken_optimization (tree);
62static tree default_function_array_conversion (tree);
63static tree lookup_field (tree, tree);
64static tree convert_arguments (tree, tree, tree, tree);
65static tree pointer_diff (tree, tree);
66static tree unary_complex_lvalue (enum tree_code, tree, int);
67static void pedantic_lvalue_warning (enum tree_code);
68static tree internal_build_compound_expr (tree, int);
69static tree convert_for_assignment (tree, tree, const char *, tree, tree,
70				    int);
71static void warn_for_assignment (const char *, const char *, tree, int);
72static tree valid_compound_expr_initializer (tree, tree);
73static void push_string (const char *);
74static void push_member_name (tree);
75static void push_array_bounds (int);
76static int spelling_length (void);
77static char *print_spelling (char *);
78static void warning_init (const char *);
79static tree digest_init (tree, tree, int);
80static void output_init_element (tree, tree, tree, int);
81static void output_pending_init_elements (int);
82static int set_designator (int);
83static void push_range_stack (tree);
84static void add_pending_init (tree, tree);
85static void set_nonincremental_init (void);
86static void set_nonincremental_init_from_string (tree);
87static 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
92tree
93require_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
112void
113c_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
179tree
180c_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
200static tree
201qualify_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
215tree
216common_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
467int
468comptypes (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
612static int
613comp_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.  */
635static int
636same_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
664struct 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
673static 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
681static int
682tagged_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
823static int
824function_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
888static int
889type_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
974tree
975c_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
996tree
997decl_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
1024static tree
1025decl_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
1038static tree
1039default_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
1140tree
1141default_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
1226static tree
1227lookup_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
1315tree
1316build_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
1403tree
1404build_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
1456tree
1457build_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.  */
1590tree
1591build_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
1661tree
1662build_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
1815static tree
1816convert_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
1989tree
1990parser_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
2095int
2096c_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
2115static tree
2116pointer_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
2200tree
2201build_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
2569int
2570lvalue_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
2606int
2607lvalue_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
2625static tree
2626unary_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
2662static void
2663pedantic_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
2681void
2682readonly_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
2703bool
2704c_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
2785tree
2786build_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
2946tree
2947build_compound_expr (tree list)
2948{
2949  return internal_build_compound_expr (list, TRUE);
2950}
2951
2952static tree
2953internal_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
2996tree
2997build_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.  */
3209tree
3210c_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
3230tree
3231build_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
3405static tree
3406convert_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
3706tree
3707c_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
3734static void
3735warn_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
3794static tree
3795valid_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
3817void
3818store_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
3877struct 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
3891static struct spelling *spelling;	/* Next stack element (unused).  */
3892static struct spelling *spelling_base;	/* Spelling stack base.  */
3893static 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
3926static void
3927push_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
3934static void
3935push_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
3944static void
3945push_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
3952static int
3953spelling_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
3971static char *
3972print_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
3999void
4000error_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
4014void
4015pedwarn_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
4029static void
4030warning_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
4046static tree
4047digest_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.  */
4266static tree constructor_type;
4267
4268/* For a RECORD_TYPE or UNION_TYPE, this is the chain of fields
4269   left to fill.  */
4270static tree constructor_fields;
4271
4272/* For an ARRAY_TYPE, this is the specified index
4273   at which to store the next element we get.  */
4274static tree constructor_index;
4275
4276/* For an ARRAY_TYPE, this is the maximum index.  */
4277static tree constructor_max_index;
4278
4279/* For a RECORD_TYPE, this is the first field not yet written out.  */
4280static tree constructor_unfilled_fields;
4281
4282/* For an ARRAY_TYPE, this is the index of the first element
4283   not yet written out.  */
4284static 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.  */
4288static 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).  */
4293static 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.  */
4297static int constructor_incremental;
4298
4299/* 1 if so far this constructor's elements are all compile-time constants.  */
4300static int constructor_constant;
4301
4302/* 1 if so far this constructor's elements are all valid address constants.  */
4303static int constructor_simple;
4304
4305/* 1 if this constructor is erroneous so far.  */
4306static int constructor_erroneous;
4307
4308/* Structure for managing pending initializer elements, organized as an
4309   AVL tree.  */
4310
4311struct 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.  */
4325static struct init_node *constructor_pending_elts;
4326
4327/* The SPELLING_DEPTH of this constructor.  */
4328static int constructor_depth;
4329
4330/* 0 if implicitly pushing constructor levels is allowed.  */
4331int 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) {...}.  */
4336static tree constructor_decl;
4337
4338/* start_init saves the ASMSPEC arg here for really_start_incremental_init.  */
4339static const char *constructor_asmspec;
4340
4341/* Nonzero if this is an initializer for a top-level decl.  */
4342static int constructor_top_level;
4343
4344/* Nonzero if there were any member designators in this initializer.  */
4345static int constructor_designated;
4346
4347/* Nesting depth of designator list.  */
4348static int designator_depth;
4349
4350/* Nonzero if there were diagnosed errors in this designator list.  */
4351static 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
4358struct constructor_range_stack;
4359
4360struct 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
4387struct constructor_stack *constructor_stack;
4388
4389/* This stack represents designators from some range designator up to
4390   the last designator in the list.  */
4391
4392struct 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
4402struct 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
4408struct 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
4424struct initializer_stack *initializer_stack;
4425
4426/* Prepare to parse and output the initializer for variable DECL.  */
4427
4428void
4429start_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
4490void
4491finish_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
4531void
4532really_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
4636void
4637push_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
4828tree
4829pop_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
4980static int
4981set_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
5049static void
5050push_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
5071void
5072set_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
5139void
5140set_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
5180static void
5181add_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
5395static void
5396set_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
5431static void
5432set_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
5514static tree
5515find_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
5576static void
5577output_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
5733static void
5734output_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
5873void
5874process_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.  */
6229tree
6230simple_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
6255tree
6256build_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
6322void
6323c_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
6379tree
6380c_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
6470struct 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
6489static struct c_switch *switch_stack;
6490
6491/* Start a C switch statement, testing expression EXP.  Return the new
6492   SWITCH_STMT.  */
6493
6494tree
6495c_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
6538tree
6539do_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
6569void
6570c_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
6598tree
6599build_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