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