typeck.c revision 259268
1/* Build expressions with type checking for C++ compiler.
2   Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3   1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
4   Hacked by Michael Tiemann (tiemann@cygnus.com)
5
6This file is part of GCC.
7
8GCC is free software; you can redistribute it and/or modify
9it under the terms of the GNU General Public License as published by
10the Free Software Foundation; either version 2, or (at your option)
11any later version.
12
13GCC is distributed in the hope that it will be useful,
14but WITHOUT ANY WARRANTY; without even the implied warranty of
15MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16GNU General Public License for more details.
17
18You should have received a copy of the GNU General Public License
19along with GCC; see the file COPYING.  If not, write to
20the Free Software Foundation, 51 Franklin Street, Fifth Floor,
21Boston, MA 02110-1301, USA.  */
22
23
24/* This file is part of the C++ front end.
25   It contains routines to build C++ expressions given their operands,
26   including computing the types of the result, C and C++ specific error
27   checks, and some optimization.  */
28
29#include "config.h"
30#include "system.h"
31#include "coretypes.h"
32#include "tm.h"
33#include "tree.h"
34#include "rtl.h"
35#include "expr.h"
36#include "cp-tree.h"
37#include "tm_p.h"
38#include "flags.h"
39#include "output.h"
40#include "toplev.h"
41#include "diagnostic.h"
42#include "target.h"
43#include "convert.h"
44#include "c-common.h"
45
46static tree pfn_from_ptrmemfunc (tree);
47static tree convert_for_assignment (tree, tree, const char *, tree, int);
48static tree cp_pointer_int_sum (enum tree_code, tree, tree);
49static tree rationalize_conditional_expr (enum tree_code, tree);
50static int comp_ptr_ttypes_real (tree, tree, int);
51static bool comp_except_types (tree, tree, bool);
52static bool comp_array_types (tree, tree, bool);
53static tree common_base_type (tree, tree);
54static tree pointer_diff (tree, tree, tree);
55static tree get_delta_difference (tree, tree, bool, bool);
56static void casts_away_constness_r (tree *, tree *);
57static bool casts_away_constness (tree, tree);
58static void maybe_warn_about_returning_address_of_local (tree);
59static tree lookup_destructor (tree, tree, tree);
60static tree convert_arguments (tree, tree, tree, int);
61
62/* Do `exp = require_complete_type (exp);' to make sure exp
63   does not have an incomplete type.  (That includes void types.)
64   Returns the error_mark_node if the VALUE does not have
65   complete type when this function returns.  */
66
67tree
68require_complete_type (tree value)
69{
70  tree type;
71
72  if (processing_template_decl || value == error_mark_node)
73    return value;
74
75  if (TREE_CODE (value) == OVERLOAD)
76    type = unknown_type_node;
77  else
78    type = TREE_TYPE (value);
79
80  if (type == error_mark_node)
81    return error_mark_node;
82
83  /* First, detect a valid value with a complete type.  */
84  if (COMPLETE_TYPE_P (type))
85    return value;
86
87  if (complete_type_or_else (type, value))
88    return value;
89  else
90    return error_mark_node;
91}
92
93/* Try to complete TYPE, if it is incomplete.  For example, if TYPE is
94   a template instantiation, do the instantiation.  Returns TYPE,
95   whether or not it could be completed, unless something goes
96   horribly wrong, in which case the error_mark_node is returned.  */
97
98tree
99complete_type (tree type)
100{
101  if (type == NULL_TREE)
102    /* Rather than crash, we return something sure to cause an error
103       at some point.  */
104    return error_mark_node;
105
106  if (type == error_mark_node || COMPLETE_TYPE_P (type))
107    ;
108  else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
109    {
110      tree t = complete_type (TREE_TYPE (type));
111      unsigned int needs_constructing, has_nontrivial_dtor;
112      if (COMPLETE_TYPE_P (t) && !dependent_type_p (type))
113	layout_type (type);
114      needs_constructing
115	= TYPE_NEEDS_CONSTRUCTING (TYPE_MAIN_VARIANT (t));
116      has_nontrivial_dtor
117	= TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TYPE_MAIN_VARIANT (t));
118      for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
119	{
120	  TYPE_NEEDS_CONSTRUCTING (t) = needs_constructing;
121	  TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t) = has_nontrivial_dtor;
122	}
123    }
124  else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INSTANTIATION (type))
125    instantiate_class_template (TYPE_MAIN_VARIANT (type));
126
127  return type;
128}
129
130/* Like complete_type, but issue an error if the TYPE cannot be completed.
131   VALUE is used for informative diagnostics.
132   Returns NULL_TREE if the type cannot be made complete.  */
133
134tree
135complete_type_or_else (tree type, tree value)
136{
137  type = complete_type (type);
138  if (type == error_mark_node)
139    /* We already issued an error.  */
140    return NULL_TREE;
141  else if (!COMPLETE_TYPE_P (type))
142    {
143      cxx_incomplete_type_diagnostic (value, type, 0);
144      return NULL_TREE;
145    }
146  else
147    return type;
148}
149
150/* Return truthvalue of whether type of EXP is instantiated.  */
151
152int
153type_unknown_p (tree exp)
154{
155  return (TREE_CODE (exp) == TREE_LIST
156	  || TREE_TYPE (exp) == unknown_type_node);
157}
158
159
160/* Return the common type of two parameter lists.
161   We assume that comptypes has already been done and returned 1;
162   if that isn't so, this may crash.
163
164   As an optimization, free the space we allocate if the parameter
165   lists are already common.  */
166
167static tree
168commonparms (tree p1, tree p2)
169{
170  tree oldargs = p1, newargs, n;
171  int i, len;
172  int any_change = 0;
173
174  len = list_length (p1);
175  newargs = tree_last (p1);
176
177  if (newargs == void_list_node)
178    i = 1;
179  else
180    {
181      i = 0;
182      newargs = 0;
183    }
184
185  for (; i < len; i++)
186    newargs = tree_cons (NULL_TREE, NULL_TREE, newargs);
187
188  n = newargs;
189
190  for (i = 0; p1;
191       p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2), n = TREE_CHAIN (n), i++)
192    {
193      if (TREE_PURPOSE (p1) && !TREE_PURPOSE (p2))
194	{
195	  TREE_PURPOSE (n) = TREE_PURPOSE (p1);
196	  any_change = 1;
197	}
198      else if (! TREE_PURPOSE (p1))
199	{
200	  if (TREE_PURPOSE (p2))
201	    {
202	      TREE_PURPOSE (n) = TREE_PURPOSE (p2);
203	      any_change = 1;
204	    }
205	}
206      else
207	{
208	  if (1 != simple_cst_equal (TREE_PURPOSE (p1), TREE_PURPOSE (p2)))
209	    any_change = 1;
210	  TREE_PURPOSE (n) = TREE_PURPOSE (p2);
211	}
212      if (TREE_VALUE (p1) != TREE_VALUE (p2))
213	{
214	  any_change = 1;
215	  TREE_VALUE (n) = merge_types (TREE_VALUE (p1), TREE_VALUE (p2));
216	}
217      else
218	TREE_VALUE (n) = TREE_VALUE (p1);
219    }
220  if (! any_change)
221    return oldargs;
222
223  return newargs;
224}
225
226/* Given a type, perhaps copied for a typedef,
227   find the "original" version of it.  */
228static tree
229original_type (tree t)
230{
231  int quals = cp_type_quals (t);
232  while (t != error_mark_node
233	 && TYPE_NAME (t) != NULL_TREE)
234    {
235      tree x = TYPE_NAME (t);
236      if (TREE_CODE (x) != TYPE_DECL)
237	break;
238      x = DECL_ORIGINAL_TYPE (x);
239      if (x == NULL_TREE)
240	break;
241      t = x;
242    }
243  return cp_build_qualified_type (t, quals);
244}
245
246/* T1 and T2 are arithmetic or enumeration types.  Return the type
247   that will result from the "usual arithmetic conversions" on T1 and
248   T2 as described in [expr].  */
249
250tree
251type_after_usual_arithmetic_conversions (tree t1, tree t2)
252{
253  enum tree_code code1 = TREE_CODE (t1);
254  enum tree_code code2 = TREE_CODE (t2);
255  tree attributes;
256
257  /* FIXME: Attributes.  */
258  gcc_assert (ARITHMETIC_TYPE_P (t1)
259	      || TREE_CODE (t1) == VECTOR_TYPE
260	      || TREE_CODE (t1) == ENUMERAL_TYPE);
261  gcc_assert (ARITHMETIC_TYPE_P (t2)
262	      || TREE_CODE (t2) == VECTOR_TYPE
263	      || TREE_CODE (t2) == ENUMERAL_TYPE);
264
265  /* In what follows, we slightly generalize the rules given in [expr] so
266     as to deal with `long long' and `complex'.  First, merge the
267     attributes.  */
268  attributes = (*targetm.merge_type_attributes) (t1, t2);
269
270  /* If one type is complex, form the common type of the non-complex
271     components, then make that complex.  Use T1 or T2 if it is the
272     required type.  */
273  if (code1 == COMPLEX_TYPE || code2 == COMPLEX_TYPE)
274    {
275      tree subtype1 = code1 == COMPLEX_TYPE ? TREE_TYPE (t1) : t1;
276      tree subtype2 = code2 == COMPLEX_TYPE ? TREE_TYPE (t2) : t2;
277      tree subtype
278	= type_after_usual_arithmetic_conversions (subtype1, subtype2);
279
280      if (code1 == COMPLEX_TYPE && TREE_TYPE (t1) == subtype)
281	return build_type_attribute_variant (t1, attributes);
282      else if (code2 == COMPLEX_TYPE && TREE_TYPE (t2) == subtype)
283	return build_type_attribute_variant (t2, attributes);
284      else
285	return build_type_attribute_variant (build_complex_type (subtype),
286					     attributes);
287    }
288
289  if (code1 == VECTOR_TYPE)
290    {
291      /* When we get here we should have two vectors of the same size.
292	 Just prefer the unsigned one if present.  */
293      if (TYPE_UNSIGNED (t1))
294	return build_type_attribute_variant (t1, attributes);
295      else
296	return build_type_attribute_variant (t2, attributes);
297    }
298
299  /* If only one is real, use it as the result.  */
300  if (code1 == REAL_TYPE && code2 != REAL_TYPE)
301    return build_type_attribute_variant (t1, attributes);
302  if (code2 == REAL_TYPE && code1 != REAL_TYPE)
303    return build_type_attribute_variant (t2, attributes);
304
305  /* Perform the integral promotions.  */
306  if (code1 != REAL_TYPE)
307    {
308      t1 = type_promotes_to (t1);
309      t2 = type_promotes_to (t2);
310    }
311
312  /* Both real or both integers; use the one with greater precision.  */
313  if (TYPE_PRECISION (t1) > TYPE_PRECISION (t2))
314    return build_type_attribute_variant (t1, attributes);
315  else if (TYPE_PRECISION (t2) > TYPE_PRECISION (t1))
316    return build_type_attribute_variant (t2, attributes);
317
318  /* The types are the same; no need to do anything fancy.  */
319  if (TYPE_MAIN_VARIANT (t1) == TYPE_MAIN_VARIANT (t2))
320    return build_type_attribute_variant (t1, attributes);
321
322  if (code1 != REAL_TYPE)
323    {
324      /* If one is a sizetype, use it so size_binop doesn't blow up.  */
325      if (TYPE_IS_SIZETYPE (t1) > TYPE_IS_SIZETYPE (t2))
326	return build_type_attribute_variant (t1, attributes);
327      if (TYPE_IS_SIZETYPE (t2) > TYPE_IS_SIZETYPE (t1))
328	return build_type_attribute_variant (t2, attributes);
329
330      /* If one is unsigned long long, then convert the other to unsigned
331	 long long.  */
332      if (same_type_p (TYPE_MAIN_VARIANT (t1), long_long_unsigned_type_node)
333	  || same_type_p (TYPE_MAIN_VARIANT (t2), long_long_unsigned_type_node))
334	return build_type_attribute_variant (long_long_unsigned_type_node,
335					     attributes);
336      /* If one is a long long, and the other is an unsigned long, and
337	 long long can represent all the values of an unsigned long, then
338	 convert to a long long.  Otherwise, convert to an unsigned long
339	 long.  Otherwise, if either operand is long long, convert the
340	 other to long long.
341
342	 Since we're here, we know the TYPE_PRECISION is the same;
343	 therefore converting to long long cannot represent all the values
344	 of an unsigned long, so we choose unsigned long long in that
345	 case.  */
346      if (same_type_p (TYPE_MAIN_VARIANT (t1), long_long_integer_type_node)
347	  || same_type_p (TYPE_MAIN_VARIANT (t2), long_long_integer_type_node))
348	{
349	  tree t = ((TYPE_UNSIGNED (t1) || TYPE_UNSIGNED (t2))
350		    ? long_long_unsigned_type_node
351		    : long_long_integer_type_node);
352	  return build_type_attribute_variant (t, attributes);
353	}
354
355      /* Go through the same procedure, but for longs.  */
356      if (same_type_p (TYPE_MAIN_VARIANT (t1), long_unsigned_type_node)
357	  || same_type_p (TYPE_MAIN_VARIANT (t2), long_unsigned_type_node))
358	return build_type_attribute_variant (long_unsigned_type_node,
359					     attributes);
360      if (same_type_p (TYPE_MAIN_VARIANT (t1), long_integer_type_node)
361	  || same_type_p (TYPE_MAIN_VARIANT (t2), long_integer_type_node))
362	{
363	  tree t = ((TYPE_UNSIGNED (t1) || TYPE_UNSIGNED (t2))
364		    ? long_unsigned_type_node : long_integer_type_node);
365	  return build_type_attribute_variant (t, attributes);
366	}
367      /* Otherwise prefer the unsigned one.  */
368      if (TYPE_UNSIGNED (t1))
369	return build_type_attribute_variant (t1, attributes);
370      else
371	return build_type_attribute_variant (t2, attributes);
372    }
373  else
374    {
375      if (same_type_p (TYPE_MAIN_VARIANT (t1), long_double_type_node)
376	  || same_type_p (TYPE_MAIN_VARIANT (t2), long_double_type_node))
377	return build_type_attribute_variant (long_double_type_node,
378					     attributes);
379      if (same_type_p (TYPE_MAIN_VARIANT (t1), double_type_node)
380	  || same_type_p (TYPE_MAIN_VARIANT (t2), double_type_node))
381	return build_type_attribute_variant (double_type_node,
382					     attributes);
383      if (same_type_p (TYPE_MAIN_VARIANT (t1), float_type_node)
384	  || same_type_p (TYPE_MAIN_VARIANT (t2), float_type_node))
385	return build_type_attribute_variant (float_type_node,
386					     attributes);
387
388      /* Two floating-point types whose TYPE_MAIN_VARIANTs are none of
389	 the standard C++ floating-point types.  Logic earlier in this
390	 function has already eliminated the possibility that
391	 TYPE_PRECISION (t2) != TYPE_PRECISION (t1), so there's no
392	 compelling reason to choose one or the other.  */
393      return build_type_attribute_variant (t1, attributes);
394    }
395}
396
397/* Subroutine of composite_pointer_type to implement the recursive
398   case.  See that function for documentation fo the parameters.  */
399
400static tree
401composite_pointer_type_r (tree t1, tree t2, const char* location)
402{
403  tree pointee1;
404  tree pointee2;
405  tree result_type;
406  tree attributes;
407
408  /* Determine the types pointed to by T1 and T2.  */
409  if (TREE_CODE (t1) == POINTER_TYPE)
410    {
411      pointee1 = TREE_TYPE (t1);
412      pointee2 = TREE_TYPE (t2);
413    }
414  else
415    {
416      pointee1 = TYPE_PTRMEM_POINTED_TO_TYPE (t1);
417      pointee2 = TYPE_PTRMEM_POINTED_TO_TYPE (t2);
418    }
419
420  /* [expr.rel]
421
422     Otherwise, the composite pointer type is a pointer type
423     similar (_conv.qual_) to the type of one of the operands,
424     with a cv-qualification signature (_conv.qual_) that is the
425     union of the cv-qualification signatures of the operand
426     types.  */
427  if (same_type_ignoring_top_level_qualifiers_p (pointee1, pointee2))
428    result_type = pointee1;
429  else if ((TREE_CODE (pointee1) == POINTER_TYPE
430	    && TREE_CODE (pointee2) == POINTER_TYPE)
431	   || (TYPE_PTR_TO_MEMBER_P (pointee1)
432	       && TYPE_PTR_TO_MEMBER_P (pointee2)))
433    result_type = composite_pointer_type_r (pointee1, pointee2, location);
434  else
435    {
436      pedwarn ("%s between distinct pointer types %qT and %qT "
437	       "lacks a cast",
438	       location, t1, t2);
439      result_type = void_type_node;
440    }
441  result_type = cp_build_qualified_type (result_type,
442					 (cp_type_quals (pointee1)
443					  | cp_type_quals (pointee2)));
444  /* If the original types were pointers to members, so is the
445     result.  */
446  if (TYPE_PTR_TO_MEMBER_P (t1))
447    {
448      if (!same_type_p (TYPE_PTRMEM_CLASS_TYPE (t1),
449			TYPE_PTRMEM_CLASS_TYPE (t2)))
450	pedwarn ("%s between distinct pointer types %qT and %qT "
451		 "lacks a cast",
452		 location, t1, t2);
453      result_type = build_ptrmem_type (TYPE_PTRMEM_CLASS_TYPE (t1),
454				       result_type);
455    }
456  else
457    result_type = build_pointer_type (result_type);
458
459  /* Merge the attributes.  */
460  attributes = (*targetm.merge_type_attributes) (t1, t2);
461  return build_type_attribute_variant (result_type, attributes);
462}
463
464/* Return the composite pointer type (see [expr.rel]) for T1 and T2.
465   ARG1 and ARG2 are the values with those types.  The LOCATION is a
466   string describing the current location, in case an error occurs.
467
468   This routine also implements the computation of a common type for
469   pointers-to-members as per [expr.eq].  */
470
471tree
472composite_pointer_type (tree t1, tree t2, tree arg1, tree arg2,
473			const char* location)
474{
475  tree class1;
476  tree class2;
477
478  /* [expr.rel]
479
480     If one operand is a null pointer constant, the composite pointer
481     type is the type of the other operand.  */
482  if (null_ptr_cst_p (arg1))
483    return t2;
484  if (null_ptr_cst_p (arg2))
485    return t1;
486
487  /* We have:
488
489       [expr.rel]
490
491       If one of the operands has type "pointer to cv1 void*", then
492       the other has type "pointer to cv2T", and the composite pointer
493       type is "pointer to cv12 void", where cv12 is the union of cv1
494       and cv2.
495
496    If either type is a pointer to void, make sure it is T1.  */
497  if (TREE_CODE (t2) == POINTER_TYPE && VOID_TYPE_P (TREE_TYPE (t2)))
498    {
499      tree t;
500      t = t1;
501      t1 = t2;
502      t2 = t;
503    }
504
505  /* Now, if T1 is a pointer to void, merge the qualifiers.  */
506  if (TREE_CODE (t1) == POINTER_TYPE && VOID_TYPE_P (TREE_TYPE (t1)))
507    {
508      tree attributes;
509      tree result_type;
510
511      if (pedantic && TYPE_PTRFN_P (t2))
512	pedwarn ("ISO C++ forbids %s between pointer of type %<void *%> "
513		 "and pointer-to-function", location);
514      result_type
515	= cp_build_qualified_type (void_type_node,
516				   (cp_type_quals (TREE_TYPE (t1))
517				    | cp_type_quals (TREE_TYPE (t2))));
518      result_type = build_pointer_type (result_type);
519      /* Merge the attributes.  */
520      attributes = (*targetm.merge_type_attributes) (t1, t2);
521      return build_type_attribute_variant (result_type, attributes);
522    }
523
524  if (c_dialect_objc () && TREE_CODE (t1) == POINTER_TYPE
525      && TREE_CODE (t2) == POINTER_TYPE)
526    {
527      if (objc_compare_types (t1, t2, -3, NULL_TREE))
528	return t1;
529    }
530
531  /* [expr.eq] permits the application of a pointer conversion to
532     bring the pointers to a common type.  */
533  if (TREE_CODE (t1) == POINTER_TYPE && TREE_CODE (t2) == POINTER_TYPE
534      && CLASS_TYPE_P (TREE_TYPE (t1))
535      && CLASS_TYPE_P (TREE_TYPE (t2))
536      && !same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (t1),
537						     TREE_TYPE (t2)))
538    {
539      class1 = TREE_TYPE (t1);
540      class2 = TREE_TYPE (t2);
541
542      if (DERIVED_FROM_P (class1, class2))
543	t2 = (build_pointer_type
544	      (cp_build_qualified_type (class1, TYPE_QUALS (class2))));
545      else if (DERIVED_FROM_P (class2, class1))
546	t1 = (build_pointer_type
547	      (cp_build_qualified_type (class2, TYPE_QUALS (class1))));
548      else
549	{
550	  error ("%s between distinct pointer types %qT and %qT "
551		 "lacks a cast", location, t1, t2);
552	  return error_mark_node;
553	}
554    }
555  /* [expr.eq] permits the application of a pointer-to-member
556     conversion to change the class type of one of the types.  */
557  else if (TYPE_PTR_TO_MEMBER_P (t1)
558	   && !same_type_p (TYPE_PTRMEM_CLASS_TYPE (t1),
559			    TYPE_PTRMEM_CLASS_TYPE (t2)))
560    {
561      class1 = TYPE_PTRMEM_CLASS_TYPE (t1);
562      class2 = TYPE_PTRMEM_CLASS_TYPE (t2);
563
564      if (DERIVED_FROM_P (class1, class2))
565	t1 = build_ptrmem_type (class2, TYPE_PTRMEM_POINTED_TO_TYPE (t1));
566      else if (DERIVED_FROM_P (class2, class1))
567	t2 = build_ptrmem_type (class1, TYPE_PTRMEM_POINTED_TO_TYPE (t2));
568      else
569	{
570	  error ("%s between distinct pointer-to-member types %qT and %qT "
571		 "lacks a cast", location, t1, t2);
572	  return error_mark_node;
573	}
574    }
575
576  return composite_pointer_type_r (t1, t2, location);
577}
578
579/* Return the merged type of two types.
580   We assume that comptypes has already been done and returned 1;
581   if that isn't so, this may crash.
582
583   This just combines attributes and default arguments; any other
584   differences would cause the two types to compare unalike.  */
585
586tree
587merge_types (tree t1, tree t2)
588{
589  enum tree_code code1;
590  enum tree_code code2;
591  tree attributes;
592
593  /* Save time if the two types are the same.  */
594  if (t1 == t2)
595    return t1;
596  if (original_type (t1) == original_type (t2))
597    return t1;
598
599  /* If one type is nonsense, use the other.  */
600  if (t1 == error_mark_node)
601    return t2;
602  if (t2 == error_mark_node)
603    return t1;
604
605  /* Merge the attributes.  */
606  attributes = (*targetm.merge_type_attributes) (t1, t2);
607
608  if (TYPE_PTRMEMFUNC_P (t1))
609    t1 = TYPE_PTRMEMFUNC_FN_TYPE (t1);
610  if (TYPE_PTRMEMFUNC_P (t2))
611    t2 = TYPE_PTRMEMFUNC_FN_TYPE (t2);
612
613  code1 = TREE_CODE (t1);
614  code2 = TREE_CODE (t2);
615
616  switch (code1)
617    {
618    case POINTER_TYPE:
619    case REFERENCE_TYPE:
620      /* For two pointers, do this recursively on the target type.  */
621      {
622	tree target = merge_types (TREE_TYPE (t1), TREE_TYPE (t2));
623	int quals = cp_type_quals (t1);
624
625	if (code1 == POINTER_TYPE)
626	  t1 = build_pointer_type (target);
627	else
628	  t1 = build_reference_type (target);
629	t1 = build_type_attribute_variant (t1, attributes);
630	t1 = cp_build_qualified_type (t1, quals);
631
632	if (TREE_CODE (target) == METHOD_TYPE)
633	  t1 = build_ptrmemfunc_type (t1);
634
635	return t1;
636      }
637
638    case OFFSET_TYPE:
639      {
640	int quals;
641	tree pointee;
642	quals = cp_type_quals (t1);
643	pointee = merge_types (TYPE_PTRMEM_POINTED_TO_TYPE (t1),
644			       TYPE_PTRMEM_POINTED_TO_TYPE (t2));
645	t1 = build_ptrmem_type (TYPE_PTRMEM_CLASS_TYPE (t1),
646				pointee);
647	t1 = cp_build_qualified_type (t1, quals);
648	break;
649      }
650
651    case ARRAY_TYPE:
652      {
653	tree elt = merge_types (TREE_TYPE (t1), TREE_TYPE (t2));
654	/* Save space: see if the result is identical to one of the args.  */
655	if (elt == TREE_TYPE (t1) && TYPE_DOMAIN (t1))
656	  return build_type_attribute_variant (t1, attributes);
657	if (elt == TREE_TYPE (t2) && TYPE_DOMAIN (t2))
658	  return build_type_attribute_variant (t2, attributes);
659	/* Merge the element types, and have a size if either arg has one.  */
660	t1 = build_cplus_array_type
661	  (elt, TYPE_DOMAIN (TYPE_DOMAIN (t1) ? t1 : t2));
662	break;
663      }
664
665    case FUNCTION_TYPE:
666      /* Function types: prefer the one that specified arg types.
667	 If both do, merge the arg types.  Also merge the return types.  */
668      {
669	tree valtype = merge_types (TREE_TYPE (t1), TREE_TYPE (t2));
670	tree p1 = TYPE_ARG_TYPES (t1);
671	tree p2 = TYPE_ARG_TYPES (t2);
672	tree rval, raises;
673
674	/* Save space: see if the result is identical to one of the args.  */
675	if (valtype == TREE_TYPE (t1) && ! p2)
676	  return cp_build_type_attribute_variant (t1, attributes);
677	if (valtype == TREE_TYPE (t2) && ! p1)
678	  return cp_build_type_attribute_variant (t2, attributes);
679
680	/* Simple way if one arg fails to specify argument types.  */
681	if (p1 == NULL_TREE || TREE_VALUE (p1) == void_type_node)
682	  {
683	    rval = build_function_type (valtype, p2);
684	    if ((raises = TYPE_RAISES_EXCEPTIONS (t2)))
685	      rval = build_exception_variant (rval, raises);
686	    return cp_build_type_attribute_variant (rval, attributes);
687	  }
688	raises = TYPE_RAISES_EXCEPTIONS (t1);
689	if (p2 == NULL_TREE || TREE_VALUE (p2) == void_type_node)
690	  {
691	    rval = build_function_type (valtype, p1);
692	    if (raises)
693	      rval = build_exception_variant (rval, raises);
694	    return cp_build_type_attribute_variant (rval, attributes);
695	  }
696
697	rval = build_function_type (valtype, commonparms (p1, p2));
698	t1 = build_exception_variant (rval, raises);
699	break;
700      }
701
702    case METHOD_TYPE:
703      {
704	/* Get this value the long way, since TYPE_METHOD_BASETYPE
705	   is just the main variant of this.  */
706	tree basetype = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (t2)));
707	tree raises = TYPE_RAISES_EXCEPTIONS (t1);
708	tree t3;
709
710	/* If this was a member function type, get back to the
711	   original type of type member function (i.e., without
712	   the class instance variable up front.  */
713	t1 = build_function_type (TREE_TYPE (t1),
714				  TREE_CHAIN (TYPE_ARG_TYPES (t1)));
715	t2 = build_function_type (TREE_TYPE (t2),
716				  TREE_CHAIN (TYPE_ARG_TYPES (t2)));
717	t3 = merge_types (t1, t2);
718	t3 = build_method_type_directly (basetype, TREE_TYPE (t3),
719					 TYPE_ARG_TYPES (t3));
720	t1 = build_exception_variant (t3, raises);
721	break;
722      }
723
724    case TYPENAME_TYPE:
725      /* There is no need to merge attributes into a TYPENAME_TYPE.
726	 When the type is instantiated it will have whatever
727	 attributes result from the instantiation.  */
728      return t1;
729
730    default:;
731    }
732
733  if (attribute_list_equal (TYPE_ATTRIBUTES (t1), attributes))
734    return t1;
735  else if (attribute_list_equal (TYPE_ATTRIBUTES (t2), attributes))
736    return t2;
737  else
738    return cp_build_type_attribute_variant (t1, attributes);
739}
740
741/* Return the common type of two types.
742   We assume that comptypes has already been done and returned 1;
743   if that isn't so, this may crash.
744
745   This is the type for the result of most arithmetic operations
746   if the operands have the given two types.  */
747
748tree
749common_type (tree t1, tree t2)
750{
751  enum tree_code code1;
752  enum tree_code code2;
753
754  /* If one type is nonsense, bail.  */
755  if (t1 == error_mark_node || t2 == error_mark_node)
756    return error_mark_node;
757
758  code1 = TREE_CODE (t1);
759  code2 = TREE_CODE (t2);
760
761  if ((ARITHMETIC_TYPE_P (t1) || code1 == ENUMERAL_TYPE
762       || code1 == VECTOR_TYPE)
763      && (ARITHMETIC_TYPE_P (t2) || code2 == ENUMERAL_TYPE
764	  || code2 == VECTOR_TYPE))
765    return type_after_usual_arithmetic_conversions (t1, t2);
766
767  else if ((TYPE_PTR_P (t1) && TYPE_PTR_P (t2))
768	   || (TYPE_PTRMEM_P (t1) && TYPE_PTRMEM_P (t2))
769	   || (TYPE_PTRMEMFUNC_P (t1) && TYPE_PTRMEMFUNC_P (t2)))
770    return composite_pointer_type (t1, t2, error_mark_node, error_mark_node,
771				   "conversion");
772  else
773    gcc_unreachable ();
774}
775
776/* Compare two exception specifier types for exactness or subsetness, if
777   allowed. Returns false for mismatch, true for match (same, or
778   derived and !exact).
779
780   [except.spec] "If a class X ... objects of class X or any class publicly
781   and unambiguously derived from X. Similarly, if a pointer type Y * ...
782   exceptions of type Y * or that are pointers to any type publicly and
783   unambiguously derived from Y. Otherwise a function only allows exceptions
784   that have the same type ..."
785   This does not mention cv qualifiers and is different to what throw
786   [except.throw] and catch [except.catch] will do. They will ignore the
787   top level cv qualifiers, and allow qualifiers in the pointer to class
788   example.
789
790   We implement the letter of the standard.  */
791
792static bool
793comp_except_types (tree a, tree b, bool exact)
794{
795  if (same_type_p (a, b))
796    return true;
797  else if (!exact)
798    {
799      if (cp_type_quals (a) || cp_type_quals (b))
800	return false;
801
802      if (TREE_CODE (a) == POINTER_TYPE
803	  && TREE_CODE (b) == POINTER_TYPE)
804	{
805	  a = TREE_TYPE (a);
806	  b = TREE_TYPE (b);
807	  if (cp_type_quals (a) || cp_type_quals (b))
808	    return false;
809	}
810
811      if (TREE_CODE (a) != RECORD_TYPE
812	  || TREE_CODE (b) != RECORD_TYPE)
813	return false;
814
815      if (PUBLICLY_UNIQUELY_DERIVED_P (a, b))
816	return true;
817    }
818  return false;
819}
820
821/* Return true if TYPE1 and TYPE2 are equivalent exception specifiers.
822   If EXACT is false, T2 can be stricter than T1 (according to 15.4/7),
823   otherwise it must be exact. Exception lists are unordered, but
824   we've already filtered out duplicates. Most lists will be in order,
825   we should try to make use of that.  */
826
827bool
828comp_except_specs (tree t1, tree t2, bool exact)
829{
830  tree probe;
831  tree base;
832  int  length = 0;
833
834  if (t1 == t2)
835    return true;
836
837  if (t1 == NULL_TREE)			   /* T1 is ...  */
838    return t2 == NULL_TREE || !exact;
839  if (!TREE_VALUE (t1))			   /* t1 is EMPTY */
840    return t2 != NULL_TREE && !TREE_VALUE (t2);
841  if (t2 == NULL_TREE)			   /* T2 is ...  */
842    return false;
843  if (TREE_VALUE (t1) && !TREE_VALUE (t2)) /* T2 is EMPTY, T1 is not */
844    return !exact;
845
846  /* Neither set is ... or EMPTY, make sure each part of T2 is in T1.
847     Count how many we find, to determine exactness. For exact matching and
848     ordered T1, T2, this is an O(n) operation, otherwise its worst case is
849     O(nm).  */
850  for (base = t1; t2 != NULL_TREE; t2 = TREE_CHAIN (t2))
851    {
852      for (probe = base; probe != NULL_TREE; probe = TREE_CHAIN (probe))
853	{
854	  tree a = TREE_VALUE (probe);
855	  tree b = TREE_VALUE (t2);
856
857	  if (comp_except_types (a, b, exact))
858	    {
859	      if (probe == base && exact)
860		base = TREE_CHAIN (probe);
861	      length++;
862	      break;
863	    }
864	}
865      if (probe == NULL_TREE)
866	return false;
867    }
868  return !exact || base == NULL_TREE || length == list_length (t1);
869}
870
871/* Compare the array types T1 and T2.  ALLOW_REDECLARATION is true if
872   [] can match [size].  */
873
874static bool
875comp_array_types (tree t1, tree t2, bool allow_redeclaration)
876{
877  tree d1;
878  tree d2;
879  tree max1, max2;
880
881  if (t1 == t2)
882    return true;
883
884  /* The type of the array elements must be the same.  */
885  if (!same_type_p (TREE_TYPE (t1), TREE_TYPE (t2)))
886    return false;
887
888  d1 = TYPE_DOMAIN (t1);
889  d2 = TYPE_DOMAIN (t2);
890
891  if (d1 == d2)
892    return true;
893
894  /* If one of the arrays is dimensionless, and the other has a
895     dimension, they are of different types.  However, it is valid to
896     write:
897
898       extern int a[];
899       int a[3];
900
901     by [basic.link]:
902
903       declarations for an array object can specify
904       array types that differ by the presence or absence of a major
905       array bound (_dcl.array_).  */
906  if (!d1 || !d2)
907    return allow_redeclaration;
908
909  /* Check that the dimensions are the same.  */
910
911  if (!cp_tree_equal (TYPE_MIN_VALUE (d1), TYPE_MIN_VALUE (d2)))
912    return false;
913  max1 = TYPE_MAX_VALUE (d1);
914  max2 = TYPE_MAX_VALUE (d2);
915  if (processing_template_decl && !abi_version_at_least (2)
916      && !value_dependent_expression_p (max1)
917      && !value_dependent_expression_p (max2))
918    {
919      /* With abi-1 we do not fold non-dependent array bounds, (and
920	 consequently mangle them incorrectly).  We must therefore
921	 fold them here, to verify the domains have the same
922	 value.  */
923      max1 = fold (max1);
924      max2 = fold (max2);
925    }
926
927  if (!cp_tree_equal (max1, max2))
928    return false;
929
930  return true;
931}
932
933/* Return true if T1 and T2 are related as allowed by STRICT.  STRICT
934   is a bitwise-or of the COMPARE_* flags.  */
935
936bool
937comptypes (tree t1, tree t2, int strict)
938{
939  if (t1 == t2)
940    return true;
941
942  /* Suppress errors caused by previously reported errors.  */
943  if (t1 == error_mark_node || t2 == error_mark_node)
944    return false;
945
946  gcc_assert (TYPE_P (t1) && TYPE_P (t2));
947
948  /* TYPENAME_TYPEs should be resolved if the qualifying scope is the
949     current instantiation.  */
950  if (TREE_CODE (t1) == TYPENAME_TYPE)
951    {
952      tree resolved = resolve_typename_type (t1, /*only_current_p=*/true);
953
954      if (resolved != error_mark_node)
955	t1 = resolved;
956    }
957
958  if (TREE_CODE (t2) == TYPENAME_TYPE)
959    {
960      tree resolved = resolve_typename_type (t2, /*only_current_p=*/true);
961
962      if (resolved != error_mark_node)
963	t2 = resolved;
964    }
965
966  /* If either type is the internal version of sizetype, use the
967     language version.  */
968  if (TREE_CODE (t1) == INTEGER_TYPE && TYPE_IS_SIZETYPE (t1)
969      && TYPE_ORIG_SIZE_TYPE (t1))
970    t1 = TYPE_ORIG_SIZE_TYPE (t1);
971
972  if (TREE_CODE (t2) == INTEGER_TYPE && TYPE_IS_SIZETYPE (t2)
973      && TYPE_ORIG_SIZE_TYPE (t2))
974    t2 = TYPE_ORIG_SIZE_TYPE (t2);
975
976  if (TYPE_PTRMEMFUNC_P (t1))
977    t1 = TYPE_PTRMEMFUNC_FN_TYPE (t1);
978  if (TYPE_PTRMEMFUNC_P (t2))
979    t2 = TYPE_PTRMEMFUNC_FN_TYPE (t2);
980
981  /* Different classes of types can't be compatible.  */
982  if (TREE_CODE (t1) != TREE_CODE (t2))
983    return false;
984
985  /* Qualifiers must match.  For array types, we will check when we
986     recur on the array element types.  */
987  if (TREE_CODE (t1) != ARRAY_TYPE
988      && TYPE_QUALS (t1) != TYPE_QUALS (t2))
989    return false;
990  if (TYPE_FOR_JAVA (t1) != TYPE_FOR_JAVA (t2))
991    return false;
992
993  /* Allow for two different type nodes which have essentially the same
994     definition.  Note that we already checked for equality of the type
995     qualifiers (just above).  */
996
997  if (TREE_CODE (t1) != ARRAY_TYPE
998      && TYPE_MAIN_VARIANT (t1) == TYPE_MAIN_VARIANT (t2))
999    return true;
1000
1001  /* Compare the types.  Break out if they could be the same.  */
1002  switch (TREE_CODE (t1))
1003    {
1004    case TEMPLATE_TEMPLATE_PARM:
1005    case BOUND_TEMPLATE_TEMPLATE_PARM:
1006      if (TEMPLATE_TYPE_IDX (t1) != TEMPLATE_TYPE_IDX (t2)
1007	  || TEMPLATE_TYPE_LEVEL (t1) != TEMPLATE_TYPE_LEVEL (t2))
1008	return false;
1009      if (!comp_template_parms
1010	  (DECL_TEMPLATE_PARMS (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (t1)),
1011	   DECL_TEMPLATE_PARMS (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (t2))))
1012	return false;
1013      if (TREE_CODE (t1) == TEMPLATE_TEMPLATE_PARM)
1014	break;
1015      /* Don't check inheritance.  */
1016      strict = COMPARE_STRICT;
1017      /* Fall through.  */
1018
1019    case RECORD_TYPE:
1020    case UNION_TYPE:
1021      if (TYPE_TEMPLATE_INFO (t1) && TYPE_TEMPLATE_INFO (t2)
1022	  && (TYPE_TI_TEMPLATE (t1) == TYPE_TI_TEMPLATE (t2)
1023	      || TREE_CODE (t1) == BOUND_TEMPLATE_TEMPLATE_PARM)
1024	  && comp_template_args (TYPE_TI_ARGS (t1), TYPE_TI_ARGS (t2)))
1025	break;
1026
1027      if ((strict & COMPARE_BASE) && DERIVED_FROM_P (t1, t2))
1028	break;
1029      else if ((strict & COMPARE_DERIVED) && DERIVED_FROM_P (t2, t1))
1030	break;
1031
1032      return false;
1033
1034    case OFFSET_TYPE:
1035      if (!comptypes (TYPE_OFFSET_BASETYPE (t1), TYPE_OFFSET_BASETYPE (t2),
1036		      strict & ~COMPARE_REDECLARATION))
1037	return false;
1038      if (!same_type_p (TREE_TYPE (t1), TREE_TYPE (t2)))
1039	return false;
1040      break;
1041
1042    case POINTER_TYPE:
1043    case REFERENCE_TYPE:
1044      if (TYPE_MODE (t1) != TYPE_MODE (t2)
1045	  || TYPE_REF_CAN_ALIAS_ALL (t1) != TYPE_REF_CAN_ALIAS_ALL (t2)
1046	  || !same_type_p (TREE_TYPE (t1), TREE_TYPE (t2)))
1047	return false;
1048      break;
1049
1050    case METHOD_TYPE:
1051    case FUNCTION_TYPE:
1052      if (!same_type_p (TREE_TYPE (t1), TREE_TYPE (t2)))
1053	return false;
1054      if (!compparms (TYPE_ARG_TYPES (t1), TYPE_ARG_TYPES (t2)))
1055	return false;
1056      break;
1057
1058    case ARRAY_TYPE:
1059      /* Target types must match incl. qualifiers.  */
1060      if (!comp_array_types (t1, t2, !!(strict & COMPARE_REDECLARATION)))
1061	return false;
1062      break;
1063
1064    case TEMPLATE_TYPE_PARM:
1065      if (TEMPLATE_TYPE_IDX (t1) != TEMPLATE_TYPE_IDX (t2)
1066	  || TEMPLATE_TYPE_LEVEL (t1) != TEMPLATE_TYPE_LEVEL (t2))
1067	return false;
1068      break;
1069
1070    case TYPENAME_TYPE:
1071      if (!cp_tree_equal (TYPENAME_TYPE_FULLNAME (t1),
1072			  TYPENAME_TYPE_FULLNAME (t2)))
1073	return false;
1074      if (!same_type_p (TYPE_CONTEXT (t1), TYPE_CONTEXT (t2)))
1075	return false;
1076      break;
1077
1078    case UNBOUND_CLASS_TEMPLATE:
1079      if (!cp_tree_equal (TYPE_IDENTIFIER (t1), TYPE_IDENTIFIER (t2)))
1080	return false;
1081      if (!same_type_p (TYPE_CONTEXT (t1), TYPE_CONTEXT (t2)))
1082	return false;
1083      break;
1084
1085    case COMPLEX_TYPE:
1086      if (!same_type_p (TREE_TYPE (t1), TREE_TYPE (t2)))
1087	return false;
1088      break;
1089
1090    case VECTOR_TYPE:
1091      if (TYPE_VECTOR_SUBPARTS (t1) != TYPE_VECTOR_SUBPARTS (t2)
1092	  || !same_type_p (TREE_TYPE (t1), TREE_TYPE (t2)))
1093	return false;
1094      break;
1095
1096    default:
1097      return false;
1098    }
1099
1100  /* If we get here, we know that from a target independent POV the
1101     types are the same.  Make sure the target attributes are also
1102     the same.  */
1103  return targetm.comp_type_attributes (t1, t2);
1104}
1105
1106/* Returns 1 if TYPE1 is at least as qualified as TYPE2.  */
1107
1108bool
1109at_least_as_qualified_p (tree type1, tree type2)
1110{
1111  int q1 = cp_type_quals (type1);
1112  int q2 = cp_type_quals (type2);
1113
1114  /* All qualifiers for TYPE2 must also appear in TYPE1.  */
1115  return (q1 & q2) == q2;
1116}
1117
1118/* Returns 1 if TYPE1 is more cv-qualified than TYPE2, -1 if TYPE2 is
1119   more cv-qualified that TYPE1, and 0 otherwise.  */
1120
1121int
1122comp_cv_qualification (tree type1, tree type2)
1123{
1124  int q1 = cp_type_quals (type1);
1125  int q2 = cp_type_quals (type2);
1126
1127  if (q1 == q2)
1128    return 0;
1129
1130  if ((q1 & q2) == q2)
1131    return 1;
1132  else if ((q1 & q2) == q1)
1133    return -1;
1134
1135  return 0;
1136}
1137
1138/* Returns 1 if the cv-qualification signature of TYPE1 is a proper
1139   subset of the cv-qualification signature of TYPE2, and the types
1140   are similar.  Returns -1 if the other way 'round, and 0 otherwise.  */
1141
1142int
1143comp_cv_qual_signature (tree type1, tree type2)
1144{
1145  if (comp_ptr_ttypes_real (type2, type1, -1))
1146    return 1;
1147  else if (comp_ptr_ttypes_real (type1, type2, -1))
1148    return -1;
1149  else
1150    return 0;
1151}
1152
1153/* If two types share a common base type, return that basetype.
1154   If there is not a unique most-derived base type, this function
1155   returns ERROR_MARK_NODE.  */
1156
1157static tree
1158common_base_type (tree tt1, tree tt2)
1159{
1160  tree best = NULL_TREE;
1161  int i;
1162
1163  /* If one is a baseclass of another, that's good enough.  */
1164  if (UNIQUELY_DERIVED_FROM_P (tt1, tt2))
1165    return tt1;
1166  if (UNIQUELY_DERIVED_FROM_P (tt2, tt1))
1167    return tt2;
1168
1169  /* Otherwise, try to find a unique baseclass of TT1
1170     that is shared by TT2, and follow that down.  */
1171  for (i = BINFO_N_BASE_BINFOS (TYPE_BINFO (tt1))-1; i >= 0; i--)
1172    {
1173      tree basetype = BINFO_TYPE (BINFO_BASE_BINFO (TYPE_BINFO (tt1), i));
1174      tree trial = common_base_type (basetype, tt2);
1175
1176      if (trial)
1177	{
1178	  if (trial == error_mark_node)
1179	    return trial;
1180	  if (best == NULL_TREE)
1181	    best = trial;
1182	  else if (best != trial)
1183	    return error_mark_node;
1184	}
1185    }
1186
1187  /* Same for TT2.  */
1188  for (i = BINFO_N_BASE_BINFOS (TYPE_BINFO (tt2))-1; i >= 0; i--)
1189    {
1190      tree basetype = BINFO_TYPE (BINFO_BASE_BINFO (TYPE_BINFO (tt2), i));
1191      tree trial = common_base_type (tt1, basetype);
1192
1193      if (trial)
1194	{
1195	  if (trial == error_mark_node)
1196	    return trial;
1197	  if (best == NULL_TREE)
1198	    best = trial;
1199	  else if (best != trial)
1200	    return error_mark_node;
1201	}
1202    }
1203  return best;
1204}
1205
1206/* Subroutines of `comptypes'.  */
1207
1208/* Return true if two parameter type lists PARMS1 and PARMS2 are
1209   equivalent in the sense that functions with those parameter types
1210   can have equivalent types.  The two lists must be equivalent,
1211   element by element.  */
1212
1213bool
1214compparms (tree parms1, tree parms2)
1215{
1216  tree t1, t2;
1217
1218  /* An unspecified parmlist matches any specified parmlist
1219     whose argument types don't need default promotions.  */
1220
1221  for (t1 = parms1, t2 = parms2;
1222       t1 || t2;
1223       t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1224    {
1225      /* If one parmlist is shorter than the other,
1226	 they fail to match.  */
1227      if (!t1 || !t2)
1228	return false;
1229      if (!same_type_p (TREE_VALUE (t1), TREE_VALUE (t2)))
1230	return false;
1231    }
1232  return true;
1233}
1234
1235
1236/* Process a sizeof or alignof expression where the operand is a
1237   type.  */
1238
1239tree
1240cxx_sizeof_or_alignof_type (tree type, enum tree_code op, bool complain)
1241{
1242  tree value;
1243  bool dependent_p;
1244
1245  gcc_assert (op == SIZEOF_EXPR || op == ALIGNOF_EXPR);
1246  if (type == error_mark_node)
1247    return error_mark_node;
1248
1249  type = non_reference (type);
1250  if (TREE_CODE (type) == METHOD_TYPE)
1251    {
1252      if (complain && (pedantic || warn_pointer_arith))
1253	pedwarn ("invalid application of %qs to a member function",
1254		 operator_name_info[(int) op].name);
1255      value = size_one_node;
1256    }
1257
1258  dependent_p = dependent_type_p (type);
1259  if (!dependent_p)
1260    complete_type (type);
1261  if (dependent_p
1262      /* VLA types will have a non-constant size.  In the body of an
1263	 uninstantiated template, we don't need to try to compute the
1264	 value, because the sizeof expression is not an integral
1265	 constant expression in that case.  And, if we do try to
1266	 compute the value, we'll likely end up with SAVE_EXPRs, which
1267	 the template substitution machinery does not expect to see.  */
1268      || (processing_template_decl
1269	  && COMPLETE_TYPE_P (type)
1270	  && TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST))
1271    {
1272      value = build_min (op, size_type_node, type);
1273      TREE_READONLY (value) = 1;
1274      return value;
1275    }
1276
1277  return c_sizeof_or_alignof_type (complete_type (type),
1278				   op == SIZEOF_EXPR,
1279				   complain);
1280}
1281
1282/* Process a sizeof expression where the operand is an expression.  */
1283
1284static tree
1285cxx_sizeof_expr (tree e)
1286{
1287  if (e == error_mark_node)
1288    return error_mark_node;
1289
1290  if (processing_template_decl)
1291    {
1292      e = build_min (SIZEOF_EXPR, size_type_node, e);
1293      TREE_SIDE_EFFECTS (e) = 0;
1294      TREE_READONLY (e) = 1;
1295
1296      return e;
1297    }
1298
1299  if (TREE_CODE (e) == COMPONENT_REF
1300      && TREE_CODE (TREE_OPERAND (e, 1)) == FIELD_DECL
1301      && DECL_C_BIT_FIELD (TREE_OPERAND (e, 1)))
1302    {
1303      error ("invalid application of %<sizeof%> to a bit-field");
1304      e = char_type_node;
1305    }
1306  else if (is_overloaded_fn (e))
1307    {
1308      pedwarn ("ISO C++ forbids applying %<sizeof%> to an expression of "
1309	       "function type");
1310      e = char_type_node;
1311    }
1312  else if (type_unknown_p (e))
1313    {
1314      cxx_incomplete_type_error (e, TREE_TYPE (e));
1315      e = char_type_node;
1316    }
1317  else
1318    e = TREE_TYPE (e);
1319
1320  return cxx_sizeof_or_alignof_type (e, SIZEOF_EXPR, true);
1321}
1322
1323/* Implement the __alignof keyword: Return the minimum required
1324   alignment of E, measured in bytes.  For VAR_DECL's and
1325   FIELD_DECL's return DECL_ALIGN (which can be set from an
1326   "aligned" __attribute__ specification).  */
1327
1328static tree
1329cxx_alignof_expr (tree e)
1330{
1331  tree t;
1332
1333  if (e == error_mark_node)
1334    return error_mark_node;
1335
1336  if (processing_template_decl)
1337    {
1338      e = build_min (ALIGNOF_EXPR, size_type_node, e);
1339      TREE_SIDE_EFFECTS (e) = 0;
1340      TREE_READONLY (e) = 1;
1341
1342      return e;
1343    }
1344
1345  if (TREE_CODE (e) == VAR_DECL)
1346    t = size_int (DECL_ALIGN_UNIT (e));
1347  else if (TREE_CODE (e) == COMPONENT_REF
1348	   && TREE_CODE (TREE_OPERAND (e, 1)) == FIELD_DECL
1349	   && DECL_C_BIT_FIELD (TREE_OPERAND (e, 1)))
1350    {
1351      error ("invalid application of %<__alignof%> to a bit-field");
1352      t = size_one_node;
1353    }
1354  else if (TREE_CODE (e) == COMPONENT_REF
1355	   && TREE_CODE (TREE_OPERAND (e, 1)) == FIELD_DECL)
1356    t = size_int (DECL_ALIGN_UNIT (TREE_OPERAND (e, 1)));
1357  else if (is_overloaded_fn (e))
1358    {
1359      pedwarn ("ISO C++ forbids applying %<__alignof%> to an expression of "
1360	       "function type");
1361      t = size_one_node;
1362    }
1363  else if (type_unknown_p (e))
1364    {
1365      cxx_incomplete_type_error (e, TREE_TYPE (e));
1366      t = size_one_node;
1367    }
1368  else
1369    return cxx_sizeof_or_alignof_type (TREE_TYPE (e), ALIGNOF_EXPR, true);
1370
1371  return fold_convert (size_type_node, t);
1372}
1373
1374/* Process a sizeof or alignof expression E with code OP where the operand
1375   is an expression.  */
1376
1377tree
1378cxx_sizeof_or_alignof_expr (tree e, enum tree_code op)
1379{
1380  if (op == SIZEOF_EXPR)
1381    return cxx_sizeof_expr (e);
1382  else
1383    return cxx_alignof_expr (e);
1384}
1385
1386/* EXPR is being used in a context that is not a function call.
1387   Enforce:
1388
1389     [expr.ref]
1390
1391     The expression can be used only as the left-hand operand of a
1392     member function call.
1393
1394     [expr.mptr.operator]
1395
1396     If the result of .* or ->* is a function, then that result can be
1397     used only as the operand for the function call operator ().
1398
1399   by issuing an error message if appropriate.  Returns true iff EXPR
1400   violates these rules.  */
1401
1402bool
1403invalid_nonstatic_memfn_p (tree expr)
1404{
1405  if (TREE_CODE (TREE_TYPE (expr)) == METHOD_TYPE)
1406    {
1407      error ("invalid use of non-static member function");
1408      return true;
1409    }
1410  return false;
1411}
1412
1413/* If EXP is a reference to a bitfield, and the type of EXP does not
1414   match the declared type of the bitfield, return the declared type
1415   of the bitfield.  Otherwise, return NULL_TREE.  */
1416
1417tree
1418is_bitfield_expr_with_lowered_type (tree exp)
1419{
1420  switch (TREE_CODE (exp))
1421    {
1422    case COND_EXPR:
1423      if (!is_bitfield_expr_with_lowered_type (TREE_OPERAND (exp, 1)))
1424	return NULL_TREE;
1425      return is_bitfield_expr_with_lowered_type (TREE_OPERAND (exp, 2));
1426
1427    case COMPOUND_EXPR:
1428      return is_bitfield_expr_with_lowered_type (TREE_OPERAND (exp, 1));
1429
1430    case MODIFY_EXPR:
1431    case SAVE_EXPR:
1432      return is_bitfield_expr_with_lowered_type (TREE_OPERAND (exp, 0));
1433
1434    case COMPONENT_REF:
1435      {
1436	tree field;
1437
1438	field = TREE_OPERAND (exp, 1);
1439	if (TREE_CODE (field) != FIELD_DECL || !DECL_C_BIT_FIELD (field))
1440	  return NULL_TREE;
1441	if (same_type_ignoring_top_level_qualifiers_p
1442	    (TREE_TYPE (exp), DECL_BIT_FIELD_TYPE (field)))
1443	  return NULL_TREE;
1444	return DECL_BIT_FIELD_TYPE (field);
1445      }
1446
1447    default:
1448      return NULL_TREE;
1449    }
1450}
1451
1452/* Like is_bitfield_with_lowered_type, except that if EXP is not a
1453   bitfield with a lowered type, the type of EXP is returned, rather
1454   than NULL_TREE.  */
1455
1456tree
1457unlowered_expr_type (tree exp)
1458{
1459  tree type;
1460
1461  type = is_bitfield_expr_with_lowered_type (exp);
1462  if (!type)
1463    type = TREE_TYPE (exp);
1464
1465  return type;
1466}
1467
1468/* Perform the conversions in [expr] that apply when an lvalue appears
1469   in an rvalue context: the lvalue-to-rvalue, array-to-pointer, and
1470   function-to-pointer conversions.  In addition, manifest constants
1471   are replaced by their values, and bitfield references are converted
1472   to their declared types.
1473
1474   Although the returned value is being used as an rvalue, this
1475   function does not wrap the returned expression in a
1476   NON_LVALUE_EXPR; the caller is expected to be mindful of the fact
1477   that the return value is no longer an lvalue.  */
1478
1479tree
1480decay_conversion (tree exp)
1481{
1482  tree type;
1483  enum tree_code code;
1484
1485  type = TREE_TYPE (exp);
1486  if (type == error_mark_node)
1487    return error_mark_node;
1488
1489  if (type_unknown_p (exp))
1490    {
1491      cxx_incomplete_type_error (exp, TREE_TYPE (exp));
1492      return error_mark_node;
1493    }
1494
1495  exp = decl_constant_value (exp);
1496  if (error_operand_p (exp))
1497    return error_mark_node;
1498
1499  /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
1500     Leave such NOP_EXPRs, since RHS is being used in non-lvalue context.  */
1501  code = TREE_CODE (type);
1502  if (code == VOID_TYPE)
1503    {
1504      error ("void value not ignored as it ought to be");
1505      return error_mark_node;
1506    }
1507  if (invalid_nonstatic_memfn_p (exp))
1508    return error_mark_node;
1509  if (code == FUNCTION_TYPE || is_overloaded_fn (exp))
1510    return build_unary_op (ADDR_EXPR, exp, 0);
1511  if (code == ARRAY_TYPE)
1512    {
1513      tree adr;
1514      tree ptrtype;
1515
1516      if (TREE_CODE (exp) == INDIRECT_REF)
1517	return build_nop (build_pointer_type (TREE_TYPE (type)),
1518			  TREE_OPERAND (exp, 0));
1519
1520      if (TREE_CODE (exp) == COMPOUND_EXPR)
1521	{
1522	  tree op1 = decay_conversion (TREE_OPERAND (exp, 1));
1523	  return build2 (COMPOUND_EXPR, TREE_TYPE (op1),
1524			 TREE_OPERAND (exp, 0), op1);
1525	}
1526
1527      if (!lvalue_p (exp)
1528	  && ! (TREE_CODE (exp) == CONSTRUCTOR && TREE_STATIC (exp)))
1529	{
1530	  error ("invalid use of non-lvalue array");
1531	  return error_mark_node;
1532	}
1533
1534      ptrtype = build_pointer_type (TREE_TYPE (type));
1535
1536      if (TREE_CODE (exp) == VAR_DECL)
1537	{
1538	  if (!cxx_mark_addressable (exp))
1539	    return error_mark_node;
1540	  adr = build_nop (ptrtype, build_address (exp));
1541	  return adr;
1542	}
1543      /* This way is better for a COMPONENT_REF since it can
1544	 simplify the offset for a component.  */
1545      adr = build_unary_op (ADDR_EXPR, exp, 1);
1546      return cp_convert (ptrtype, adr);
1547    }
1548
1549  /* If a bitfield is used in a context where integral promotion
1550     applies, then the caller is expected to have used
1551     default_conversion.  That function promotes bitfields correctly
1552     before calling this function.  At this point, if we have a
1553     bitfield referenced, we may assume that is not subject to
1554     promotion, and that, therefore, the type of the resulting rvalue
1555     is the declared type of the bitfield.  */
1556  exp = convert_bitfield_to_declared_type (exp);
1557
1558  /* We do not call rvalue() here because we do not want to wrap EXP
1559     in a NON_LVALUE_EXPR.  */
1560
1561  /* [basic.lval]
1562
1563     Non-class rvalues always have cv-unqualified types.  */
1564  type = TREE_TYPE (exp);
1565  if (!CLASS_TYPE_P (type) && cp_type_quals (type))
1566    exp = build_nop (TYPE_MAIN_VARIANT (type), exp);
1567
1568  return exp;
1569}
1570
1571/* Perform prepatory conversions, as part of the "usual arithmetic
1572   conversions".  In particular, as per [expr]:
1573
1574     Whenever an lvalue expression appears as an operand of an
1575     operator that expects the rvalue for that operand, the
1576     lvalue-to-rvalue, array-to-pointer, or function-to-pointer
1577     standard conversions are applied to convert the expression to an
1578     rvalue.
1579
1580   In addition, we perform integral promotions here, as those are
1581   applied to both operands to a binary operator before determining
1582   what additional conversions should apply.  */
1583
1584tree
1585default_conversion (tree exp)
1586{
1587  /* Perform the integral promotions first so that bitfield
1588     expressions (which may promote to "int", even if the bitfield is
1589     declared "unsigned") are promoted correctly.  */
1590  if (INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (exp)))
1591    exp = perform_integral_promotions (exp);
1592  /* Perform the other conversions.  */
1593  exp = decay_conversion (exp);
1594
1595  return exp;
1596}
1597
1598/* EXPR is an expression with an integral or enumeration type.
1599   Perform the integral promotions in [conv.prom], and return the
1600   converted value.  */
1601
1602tree
1603perform_integral_promotions (tree expr)
1604{
1605  tree type;
1606  tree promoted_type;
1607
1608  /* [conv.prom]
1609
1610     If the bitfield has an enumerated type, it is treated as any
1611     other value of that type for promotion purposes.  */
1612  type = is_bitfield_expr_with_lowered_type (expr);
1613  if (!type || TREE_CODE (type) != ENUMERAL_TYPE)
1614    type = TREE_TYPE (expr);
1615  gcc_assert (INTEGRAL_OR_ENUMERATION_TYPE_P (type));
1616  promoted_type = type_promotes_to (type);
1617  if (type != promoted_type)
1618    expr = cp_convert (promoted_type, expr);
1619  return expr;
1620}
1621
1622/* Take the address of an inline function without setting TREE_ADDRESSABLE
1623   or TREE_USED.  */
1624
1625tree
1626inline_conversion (tree exp)
1627{
1628  if (TREE_CODE (exp) == FUNCTION_DECL)
1629    exp = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (exp)), exp);
1630
1631  return exp;
1632}
1633
1634/* Returns nonzero iff exp is a STRING_CST or the result of applying
1635   decay_conversion to one.  */
1636
1637int
1638string_conv_p (tree totype, tree exp, int warn)
1639{
1640  tree t;
1641
1642  if (TREE_CODE (totype) != POINTER_TYPE)
1643    return 0;
1644
1645  t = TREE_TYPE (totype);
1646  if (!same_type_p (t, char_type_node)
1647      && !same_type_p (t, wchar_type_node))
1648    return 0;
1649
1650  if (TREE_CODE (exp) == STRING_CST)
1651    {
1652      /* Make sure that we don't try to convert between char and wchar_t.  */
1653      if (!same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (exp))), t))
1654	return 0;
1655    }
1656  else
1657    {
1658      /* Is this a string constant which has decayed to 'const char *'?  */
1659      t = build_pointer_type (build_qualified_type (t, TYPE_QUAL_CONST));
1660      if (!same_type_p (TREE_TYPE (exp), t))
1661	return 0;
1662      STRIP_NOPS (exp);
1663      if (TREE_CODE (exp) != ADDR_EXPR
1664	  || TREE_CODE (TREE_OPERAND (exp, 0)) != STRING_CST)
1665	return 0;
1666    }
1667
1668  /* This warning is not very useful, as it complains about printf.  */
1669  if (warn)
1670    warning (OPT_Wwrite_strings,
1671	     "deprecated conversion from string constant to %qT",
1672	     totype);
1673
1674  return 1;
1675}
1676
1677/* Given a COND_EXPR, MIN_EXPR, or MAX_EXPR in T, return it in a form that we
1678   can, for example, use as an lvalue.  This code used to be in
1679   unary_complex_lvalue, but we needed it to deal with `a = (d == c) ? b : c'
1680   expressions, where we're dealing with aggregates.  But now it's again only
1681   called from unary_complex_lvalue.  The case (in particular) that led to
1682   this was with CODE == ADDR_EXPR, since it's not an lvalue when we'd
1683   get it there.  */
1684
1685static tree
1686rationalize_conditional_expr (enum tree_code code, tree t)
1687{
1688  /* For MIN_EXPR or MAX_EXPR, fold-const.c has arranged things so that
1689     the first operand is always the one to be used if both operands
1690     are equal, so we know what conditional expression this used to be.  */
1691  if (TREE_CODE (t) == MIN_EXPR || TREE_CODE (t) == MAX_EXPR)
1692    {
1693      tree op0 = TREE_OPERAND (t, 0);
1694      tree op1 = TREE_OPERAND (t, 1);
1695
1696      /* The following code is incorrect if either operand side-effects.  */
1697      gcc_assert (!TREE_SIDE_EFFECTS (op0)
1698		  && !TREE_SIDE_EFFECTS (op1));
1699      return
1700	build_conditional_expr (build_x_binary_op ((TREE_CODE (t) == MIN_EXPR
1701						    ? LE_EXPR : GE_EXPR),
1702						   op0, TREE_CODE (op0),
1703						   op1, TREE_CODE (op1),
1704						   /*overloaded_p=*/NULL),
1705			    build_unary_op (code, op0, 0),
1706			    build_unary_op (code, op1, 0));
1707    }
1708
1709  return
1710    build_conditional_expr (TREE_OPERAND (t, 0),
1711			    build_unary_op (code, TREE_OPERAND (t, 1), 0),
1712			    build_unary_op (code, TREE_OPERAND (t, 2), 0));
1713}
1714
1715/* Given the TYPE of an anonymous union field inside T, return the
1716   FIELD_DECL for the field.  If not found return NULL_TREE.  Because
1717   anonymous unions can nest, we must also search all anonymous unions
1718   that are directly reachable.  */
1719
1720tree
1721lookup_anon_field (tree t, tree type)
1722{
1723  tree field;
1724
1725  for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
1726    {
1727      if (TREE_STATIC (field))
1728	continue;
1729      if (TREE_CODE (field) != FIELD_DECL || DECL_ARTIFICIAL (field))
1730	continue;
1731
1732      /* If we find it directly, return the field.  */
1733      if (DECL_NAME (field) == NULL_TREE
1734	  && type == TYPE_MAIN_VARIANT (TREE_TYPE (field)))
1735	{
1736	  return field;
1737	}
1738
1739      /* Otherwise, it could be nested, search harder.  */
1740      if (DECL_NAME (field) == NULL_TREE
1741	  && ANON_AGGR_TYPE_P (TREE_TYPE (field)))
1742	{
1743	  tree subfield = lookup_anon_field (TREE_TYPE (field), type);
1744	  if (subfield)
1745	    return subfield;
1746	}
1747    }
1748  return NULL_TREE;
1749}
1750
1751/* Build an expression representing OBJECT.MEMBER.  OBJECT is an
1752   expression; MEMBER is a DECL or baselink.  If ACCESS_PATH is
1753   non-NULL, it indicates the path to the base used to name MEMBER.
1754   If PRESERVE_REFERENCE is true, the expression returned will have
1755   REFERENCE_TYPE if the MEMBER does.  Otherwise, the expression
1756   returned will have the type referred to by the reference.
1757
1758   This function does not perform access control; that is either done
1759   earlier by the parser when the name of MEMBER is resolved to MEMBER
1760   itself, or later when overload resolution selects one of the
1761   functions indicated by MEMBER.  */
1762
1763tree
1764build_class_member_access_expr (tree object, tree member,
1765				tree access_path, bool preserve_reference)
1766{
1767  tree object_type;
1768  tree member_scope;
1769  tree result = NULL_TREE;
1770
1771  if (error_operand_p (object) || error_operand_p (member))
1772    return error_mark_node;
1773
1774  gcc_assert (DECL_P (member) || BASELINK_P (member));
1775
1776  /* [expr.ref]
1777
1778     The type of the first expression shall be "class object" (of a
1779     complete type).  */
1780  object_type = TREE_TYPE (object);
1781  if (!currently_open_class (object_type)
1782      && !complete_type_or_else (object_type, object))
1783    return error_mark_node;
1784  if (!CLASS_TYPE_P (object_type))
1785    {
1786      error ("request for member %qD in %qE, which is of non-class type %qT",
1787	     member, object, object_type);
1788      return error_mark_node;
1789    }
1790
1791  /* The standard does not seem to actually say that MEMBER must be a
1792     member of OBJECT_TYPE.  However, that is clearly what is
1793     intended.  */
1794  if (DECL_P (member))
1795    {
1796      member_scope = DECL_CLASS_CONTEXT (member);
1797      mark_used (member);
1798      if (TREE_DEPRECATED (member))
1799	warn_deprecated_use (member);
1800    }
1801  else
1802    member_scope = BINFO_TYPE (BASELINK_BINFO (member));
1803  /* If MEMBER is from an anonymous aggregate, MEMBER_SCOPE will
1804     presently be the anonymous union.  Go outwards until we find a
1805     type related to OBJECT_TYPE.  */
1806  while (ANON_AGGR_TYPE_P (member_scope)
1807	 && !same_type_ignoring_top_level_qualifiers_p (member_scope,
1808							object_type))
1809    member_scope = TYPE_CONTEXT (member_scope);
1810  if (!member_scope || !DERIVED_FROM_P (member_scope, object_type))
1811    {
1812      if (TREE_CODE (member) == FIELD_DECL)
1813	error ("invalid use of nonstatic data member %qE", member);
1814      else
1815	error ("%qD is not a member of %qT", member, object_type);
1816      return error_mark_node;
1817    }
1818
1819  /* Transform `(a, b).x' into `(*(a, &b)).x', `(a ? b : c).x' into
1820     `(*(a ?  &b : &c)).x', and so on.  A COND_EXPR is only an lvalue
1821     in the frontend; only _DECLs and _REFs are lvalues in the backend.  */
1822  {
1823    tree temp = unary_complex_lvalue (ADDR_EXPR, object);
1824    if (temp)
1825      object = build_indirect_ref (temp, NULL);
1826  }
1827
1828  /* In [expr.ref], there is an explicit list of the valid choices for
1829     MEMBER.  We check for each of those cases here.  */
1830  if (TREE_CODE (member) == VAR_DECL)
1831    {
1832      /* A static data member.  */
1833      result = member;
1834      /* If OBJECT has side-effects, they are supposed to occur.  */
1835      if (TREE_SIDE_EFFECTS (object))
1836	result = build2 (COMPOUND_EXPR, TREE_TYPE (result), object, result);
1837    }
1838  else if (TREE_CODE (member) == FIELD_DECL)
1839    {
1840      /* A non-static data member.  */
1841      bool null_object_p;
1842      int type_quals;
1843      tree member_type;
1844
1845      null_object_p = (TREE_CODE (object) == INDIRECT_REF
1846		       && integer_zerop (TREE_OPERAND (object, 0)));
1847
1848      /* Convert OBJECT to the type of MEMBER.  */
1849      if (!same_type_p (TYPE_MAIN_VARIANT (object_type),
1850			TYPE_MAIN_VARIANT (member_scope)))
1851	{
1852	  tree binfo;
1853	  base_kind kind;
1854
1855	  binfo = lookup_base (access_path ? access_path : object_type,
1856			       member_scope, ba_unique,  &kind);
1857	  if (binfo == error_mark_node)
1858	    return error_mark_node;
1859
1860	  /* It is invalid to try to get to a virtual base of a
1861	     NULL object.  The most common cause is invalid use of
1862	     offsetof macro.  */
1863	  if (null_object_p && kind == bk_via_virtual)
1864	    {
1865	      error ("invalid access to non-static data member %qD of "
1866		     "NULL object",
1867		     member);
1868	      error ("(perhaps the %<offsetof%> macro was used incorrectly)");
1869	      return error_mark_node;
1870	    }
1871
1872	  /* Convert to the base.  */
1873	  object = build_base_path (PLUS_EXPR, object, binfo,
1874				    /*nonnull=*/1);
1875	  /* If we found the base successfully then we should be able
1876	     to convert to it successfully.  */
1877	  gcc_assert (object != error_mark_node);
1878	}
1879
1880      /* Complain about other invalid uses of offsetof, even though they will
1881	 give the right answer.  Note that we complain whether or not they
1882	 actually used the offsetof macro, since there's no way to know at this
1883	 point.  So we just give a warning, instead of a pedwarn.  */
1884      /* Do not produce this warning for base class field references, because
1885	 we know for a fact that didn't come from offsetof.  This does occur
1886	 in various testsuite cases where a null object is passed where a
1887	 vtable access is required.  */
1888      if (null_object_p && warn_invalid_offsetof
1889	  && CLASSTYPE_NON_POD_P (object_type)
1890	  && !DECL_FIELD_IS_BASE (member)
1891	  && !skip_evaluation)
1892	{
1893	  warning (0, "invalid access to non-static data member %qD of NULL object",
1894		   member);
1895	  warning (0, "(perhaps the %<offsetof%> macro was used incorrectly)");
1896	}
1897
1898      /* If MEMBER is from an anonymous aggregate, we have converted
1899	 OBJECT so that it refers to the class containing the
1900	 anonymous union.  Generate a reference to the anonymous union
1901	 itself, and recur to find MEMBER.  */
1902      if (ANON_AGGR_TYPE_P (DECL_CONTEXT (member))
1903	  /* When this code is called from build_field_call, the
1904	     object already has the type of the anonymous union.
1905	     That is because the COMPONENT_REF was already
1906	     constructed, and was then disassembled before calling
1907	     build_field_call.  After the function-call code is
1908	     cleaned up, this waste can be eliminated.  */
1909	  && (!same_type_ignoring_top_level_qualifiers_p
1910	      (TREE_TYPE (object), DECL_CONTEXT (member))))
1911	{
1912	  tree anonymous_union;
1913
1914	  anonymous_union = lookup_anon_field (TREE_TYPE (object),
1915					       DECL_CONTEXT (member));
1916	  object = build_class_member_access_expr (object,
1917						   anonymous_union,
1918						   /*access_path=*/NULL_TREE,
1919						   preserve_reference);
1920	}
1921
1922      /* Compute the type of the field, as described in [expr.ref].  */
1923      type_quals = TYPE_UNQUALIFIED;
1924      member_type = TREE_TYPE (member);
1925      if (TREE_CODE (member_type) != REFERENCE_TYPE)
1926	{
1927	  type_quals = (cp_type_quals (member_type)
1928			| cp_type_quals (object_type));
1929
1930	  /* A field is const (volatile) if the enclosing object, or the
1931	     field itself, is const (volatile).  But, a mutable field is
1932	     not const, even within a const object.  */
1933	  if (DECL_MUTABLE_P (member))
1934	    type_quals &= ~TYPE_QUAL_CONST;
1935	  member_type = cp_build_qualified_type (member_type, type_quals);
1936	}
1937
1938      result = build3 (COMPONENT_REF, member_type, object, member,
1939		       NULL_TREE);
1940      result = fold_if_not_in_template (result);
1941
1942      /* Mark the expression const or volatile, as appropriate.  Even
1943	 though we've dealt with the type above, we still have to mark the
1944	 expression itself.  */
1945      if (type_quals & TYPE_QUAL_CONST)
1946	TREE_READONLY (result) = 1;
1947      if (type_quals & TYPE_QUAL_VOLATILE)
1948	TREE_THIS_VOLATILE (result) = 1;
1949    }
1950  else if (BASELINK_P (member))
1951    {
1952      /* The member is a (possibly overloaded) member function.  */
1953      tree functions;
1954      tree type;
1955
1956      /* If the MEMBER is exactly one static member function, then we
1957	 know the type of the expression.  Otherwise, we must wait
1958	 until overload resolution has been performed.  */
1959      functions = BASELINK_FUNCTIONS (member);
1960      if (TREE_CODE (functions) == FUNCTION_DECL
1961	  && DECL_STATIC_FUNCTION_P (functions))
1962	type = TREE_TYPE (functions);
1963      else
1964	type = unknown_type_node;
1965      /* Note that we do not convert OBJECT to the BASELINK_BINFO
1966	 base.  That will happen when the function is called.  */
1967      result = build3 (COMPONENT_REF, type, object, member, NULL_TREE);
1968    }
1969  else if (TREE_CODE (member) == CONST_DECL)
1970    {
1971      /* The member is an enumerator.  */
1972      result = member;
1973      /* If OBJECT has side-effects, they are supposed to occur.  */
1974      if (TREE_SIDE_EFFECTS (object))
1975	result = build2 (COMPOUND_EXPR, TREE_TYPE (result),
1976			 object, result);
1977    }
1978  else
1979    {
1980      error ("invalid use of %qD", member);
1981      return error_mark_node;
1982    }
1983
1984  if (!preserve_reference)
1985    /* [expr.ref]
1986
1987       If E2 is declared to have type "reference to T", then ... the
1988       type of E1.E2 is T.  */
1989    result = convert_from_reference (result);
1990
1991  return result;
1992}
1993
1994/* Return the destructor denoted by OBJECT.SCOPE::~DTOR_NAME, or, if
1995   SCOPE is NULL, by OBJECT.~DTOR_NAME.  */
1996
1997static tree
1998lookup_destructor (tree object, tree scope, tree dtor_name)
1999{
2000  tree object_type = TREE_TYPE (object);
2001  tree dtor_type = TREE_OPERAND (dtor_name, 0);
2002  tree expr;
2003
2004  if (scope && !check_dtor_name (scope, dtor_type))
2005    {
2006      error ("qualified type %qT does not match destructor name ~%qT",
2007	     scope, dtor_type);
2008      return error_mark_node;
2009    }
2010  if (!DERIVED_FROM_P (dtor_type, TYPE_MAIN_VARIANT (object_type)))
2011    {
2012      error ("the type being destroyed is %qT, but the destructor refers to %qT",
2013	     TYPE_MAIN_VARIANT (object_type), dtor_type);
2014      return error_mark_node;
2015    }
2016  expr = lookup_member (dtor_type, complete_dtor_identifier,
2017			/*protect=*/1, /*want_type=*/false);
2018  expr = (adjust_result_of_qualified_name_lookup
2019	  (expr, dtor_type, object_type));
2020  return expr;
2021}
2022
2023/* An expression of the form "A::template B" has been resolved to
2024   DECL.  Issue a diagnostic if B is not a template or template
2025   specialization.  */
2026
2027void
2028check_template_keyword (tree decl)
2029{
2030  /* The standard says:
2031
2032      [temp.names]
2033
2034      If a name prefixed by the keyword template is not a member
2035      template, the program is ill-formed.
2036
2037     DR 228 removed the restriction that the template be a member
2038     template.
2039
2040     DR 96, if accepted would add the further restriction that explicit
2041     template arguments must be provided if the template keyword is
2042     used, but, as of 2005-10-16, that DR is still in "drafting".  If
2043     this DR is accepted, then the semantic checks here can be
2044     simplified, as the entity named must in fact be a template
2045     specialization, rather than, as at present, a set of overloaded
2046     functions containing at least one template function.  */
2047  if (TREE_CODE (decl) != TEMPLATE_DECL
2048      && TREE_CODE (decl) != TEMPLATE_ID_EXPR)
2049    {
2050      if (!is_overloaded_fn (decl))
2051	pedwarn ("%qD is not a template", decl);
2052      else
2053	{
2054	  tree fns;
2055	  fns = decl;
2056	  if (BASELINK_P (fns))
2057	    fns = BASELINK_FUNCTIONS (fns);
2058	  while (fns)
2059	    {
2060	      tree fn = OVL_CURRENT (fns);
2061	      if (TREE_CODE (fn) == TEMPLATE_DECL
2062		  || TREE_CODE (fn) == TEMPLATE_ID_EXPR)
2063		break;
2064	      if (TREE_CODE (fn) == FUNCTION_DECL
2065		  && DECL_USE_TEMPLATE (fn)
2066		  && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (fn)))
2067		break;
2068	      fns = OVL_NEXT (fns);
2069	    }
2070	  if (!fns)
2071	    pedwarn ("%qD is not a template", decl);
2072	}
2073    }
2074}
2075
2076/* This function is called by the parser to process a class member
2077   access expression of the form OBJECT.NAME.  NAME is a node used by
2078   the parser to represent a name; it is not yet a DECL.  It may,
2079   however, be a BASELINK where the BASELINK_FUNCTIONS is a
2080   TEMPLATE_ID_EXPR.  Templates must be looked up by the parser, and
2081   there is no reason to do the lookup twice, so the parser keeps the
2082   BASELINK.  TEMPLATE_P is true iff NAME was explicitly declared to
2083   be a template via the use of the "A::template B" syntax.  */
2084
2085tree
2086finish_class_member_access_expr (tree object, tree name, bool template_p)
2087{
2088  tree expr;
2089  tree object_type;
2090  tree member;
2091  tree access_path = NULL_TREE;
2092  tree orig_object = object;
2093  tree orig_name = name;
2094
2095  if (object == error_mark_node || name == error_mark_node)
2096    return error_mark_node;
2097
2098  /* If OBJECT is an ObjC class instance, we must obey ObjC access rules.  */
2099  if (!objc_is_public (object, name))
2100    return error_mark_node;
2101
2102  object_type = TREE_TYPE (object);
2103
2104  if (processing_template_decl)
2105    {
2106      if (/* If OBJECT_TYPE is dependent, so is OBJECT.NAME.  */
2107	  dependent_type_p (object_type)
2108	  /* If NAME is just an IDENTIFIER_NODE, then the expression
2109	     is dependent.  */
2110	  || TREE_CODE (object) == IDENTIFIER_NODE
2111	  /* If NAME is "f<args>", where either 'f' or 'args' is
2112	     dependent, then the expression is dependent.  */
2113	  || (TREE_CODE (name) == TEMPLATE_ID_EXPR
2114	      && dependent_template_id_p (TREE_OPERAND (name, 0),
2115					  TREE_OPERAND (name, 1)))
2116	  /* If NAME is "T::X" where "T" is dependent, then the
2117	     expression is dependent.  */
2118	  || (TREE_CODE (name) == SCOPE_REF
2119	      && TYPE_P (TREE_OPERAND (name, 0))
2120	      && dependent_type_p (TREE_OPERAND (name, 0))))
2121	return build_min_nt (COMPONENT_REF, object, name, NULL_TREE);
2122      object = build_non_dependent_expr (object);
2123    }
2124
2125  /* [expr.ref]
2126
2127     The type of the first expression shall be "class object" (of a
2128     complete type).  */
2129  if (!currently_open_class (object_type)
2130      && !complete_type_or_else (object_type, object))
2131    return error_mark_node;
2132  if (!CLASS_TYPE_P (object_type))
2133    {
2134      error ("request for member %qD in %qE, which is of non-class type %qT",
2135	     name, object, object_type);
2136      return error_mark_node;
2137    }
2138
2139  if (BASELINK_P (name))
2140    /* A member function that has already been looked up.  */
2141    member = name;
2142  else
2143    {
2144      bool is_template_id = false;
2145      tree template_args = NULL_TREE;
2146      tree scope;
2147
2148      if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
2149	{
2150	  is_template_id = true;
2151	  template_args = TREE_OPERAND (name, 1);
2152	  name = TREE_OPERAND (name, 0);
2153
2154	  if (TREE_CODE (name) == OVERLOAD)
2155	    name = DECL_NAME (get_first_fn (name));
2156	  else if (DECL_P (name))
2157	    name = DECL_NAME (name);
2158	}
2159
2160      if (TREE_CODE (name) == SCOPE_REF)
2161	{
2162	  /* A qualified name.  The qualifying class or namespace `S'
2163	     has already been looked up; it is either a TYPE or a
2164	     NAMESPACE_DECL.  */
2165	  scope = TREE_OPERAND (name, 0);
2166	  name = TREE_OPERAND (name, 1);
2167
2168	  /* If SCOPE is a namespace, then the qualified name does not
2169	     name a member of OBJECT_TYPE.  */
2170	  if (TREE_CODE (scope) == NAMESPACE_DECL)
2171	    {
2172	      error ("%<%D::%D%> is not a member of %qT",
2173		     scope, name, object_type);
2174	      return error_mark_node;
2175	    }
2176
2177	  gcc_assert (CLASS_TYPE_P (scope));
2178	  gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE
2179		      || TREE_CODE (name) == BIT_NOT_EXPR);
2180
2181	  /* Find the base of OBJECT_TYPE corresponding to SCOPE.  */
2182	  access_path = lookup_base (object_type, scope, ba_check, NULL);
2183	  if (access_path == error_mark_node)
2184	    return error_mark_node;
2185	  if (!access_path)
2186	    {
2187	      error ("%qT is not a base of %qT", scope, object_type);
2188	      return error_mark_node;
2189	    }
2190	}
2191      else
2192	{
2193	  scope = NULL_TREE;
2194	  access_path = object_type;
2195	}
2196
2197      if (TREE_CODE (name) == BIT_NOT_EXPR)
2198	member = lookup_destructor (object, scope, name);
2199      else
2200	{
2201	  /* Look up the member.  */
2202	  member = lookup_member (access_path, name, /*protect=*/1,
2203				  /*want_type=*/false);
2204	  if (member == NULL_TREE)
2205	    {
2206	      error ("%qD has no member named %qE", object_type, name);
2207	      return error_mark_node;
2208	    }
2209	  if (member == error_mark_node)
2210	    return error_mark_node;
2211	}
2212
2213      if (is_template_id)
2214	{
2215	  tree template = member;
2216
2217	  if (BASELINK_P (template))
2218	    template = lookup_template_function (template, template_args);
2219	  else
2220	    {
2221	      error ("%qD is not a member template function", name);
2222	      return error_mark_node;
2223	    }
2224	}
2225    }
2226
2227  if (TREE_DEPRECATED (member))
2228    warn_deprecated_use (member);
2229
2230  if (template_p)
2231    check_template_keyword (member);
2232
2233  expr = build_class_member_access_expr (object, member, access_path,
2234					 /*preserve_reference=*/false);
2235  if (processing_template_decl && expr != error_mark_node)
2236    {
2237      if (BASELINK_P (member))
2238	{
2239	  if (TREE_CODE (orig_name) == SCOPE_REF)
2240	    BASELINK_QUALIFIED_P (member) = 1;
2241	  orig_name = member;
2242	}
2243      return build_min_non_dep (COMPONENT_REF, expr,
2244				orig_object, orig_name,
2245				NULL_TREE);
2246    }
2247
2248  return expr;
2249}
2250
2251/* Return an expression for the MEMBER_NAME field in the internal
2252   representation of PTRMEM, a pointer-to-member function.  (Each
2253   pointer-to-member function type gets its own RECORD_TYPE so it is
2254   more convenient to access the fields by name than by FIELD_DECL.)
2255   This routine converts the NAME to a FIELD_DECL and then creates the
2256   node for the complete expression.  */
2257
2258tree
2259build_ptrmemfunc_access_expr (tree ptrmem, tree member_name)
2260{
2261  tree ptrmem_type;
2262  tree member;
2263  tree member_type;
2264
2265  /* This code is a stripped down version of
2266     build_class_member_access_expr.  It does not work to use that
2267     routine directly because it expects the object to be of class
2268     type.  */
2269  ptrmem_type = TREE_TYPE (ptrmem);
2270  gcc_assert (TYPE_PTRMEMFUNC_P (ptrmem_type));
2271  member = lookup_member (ptrmem_type, member_name, /*protect=*/0,
2272			  /*want_type=*/false);
2273  member_type = cp_build_qualified_type (TREE_TYPE (member),
2274					 cp_type_quals (ptrmem_type));
2275  return fold_build3 (COMPONENT_REF, member_type,
2276		      ptrmem, member, NULL_TREE);
2277}
2278
2279/* Given an expression PTR for a pointer, return an expression
2280   for the value pointed to.
2281   ERRORSTRING is the name of the operator to appear in error messages.
2282
2283   This function may need to overload OPERATOR_FNNAME.
2284   Must also handle REFERENCE_TYPEs for C++.  */
2285
2286tree
2287build_x_indirect_ref (tree expr, const char *errorstring)
2288{
2289  tree orig_expr = expr;
2290  tree rval;
2291
2292  if (processing_template_decl)
2293    {
2294      if (type_dependent_expression_p (expr))
2295	return build_min_nt (INDIRECT_REF, expr);
2296      expr = build_non_dependent_expr (expr);
2297    }
2298
2299  rval = build_new_op (INDIRECT_REF, LOOKUP_NORMAL, expr, NULL_TREE,
2300		       NULL_TREE, /*overloaded_p=*/NULL);
2301  if (!rval)
2302    rval = build_indirect_ref (expr, errorstring);
2303
2304  if (processing_template_decl && rval != error_mark_node)
2305    return build_min_non_dep (INDIRECT_REF, rval, orig_expr);
2306  else
2307    return rval;
2308}
2309
2310tree
2311build_indirect_ref (tree ptr, const char *errorstring)
2312{
2313  tree pointer, type;
2314
2315  if (ptr == error_mark_node)
2316    return error_mark_node;
2317
2318  if (ptr == current_class_ptr)
2319    return current_class_ref;
2320
2321  pointer = (TREE_CODE (TREE_TYPE (ptr)) == REFERENCE_TYPE
2322	     ? ptr : decay_conversion (ptr));
2323  type = TREE_TYPE (pointer);
2324
2325  if (POINTER_TYPE_P (type))
2326    {
2327      /* [expr.unary.op]
2328
2329	 If the type of the expression is "pointer to T," the type
2330	 of  the  result  is  "T."
2331
2332	 We must use the canonical variant because certain parts of
2333	 the back end, like fold, do pointer comparisons between
2334	 types.  */
2335      tree t = canonical_type_variant (TREE_TYPE (type));
2336
2337      if (VOID_TYPE_P (t))
2338	{
2339	  /* A pointer to incomplete type (other than cv void) can be
2340	     dereferenced [expr.unary.op]/1  */
2341	  error ("%qT is not a pointer-to-object type", type);
2342	  return error_mark_node;
2343	}
2344      else if (TREE_CODE (pointer) == ADDR_EXPR
2345	       && same_type_p (t, TREE_TYPE (TREE_OPERAND (pointer, 0))))
2346	/* The POINTER was something like `&x'.  We simplify `*&x' to
2347	   `x'.  */
2348	return TREE_OPERAND (pointer, 0);
2349      else
2350	{
2351	  tree ref = build1 (INDIRECT_REF, t, pointer);
2352
2353	  /* We *must* set TREE_READONLY when dereferencing a pointer to const,
2354	     so that we get the proper error message if the result is used
2355	     to assign to.  Also, &* is supposed to be a no-op.  */
2356	  TREE_READONLY (ref) = CP_TYPE_CONST_P (t);
2357	  TREE_THIS_VOLATILE (ref) = CP_TYPE_VOLATILE_P (t);
2358	  TREE_SIDE_EFFECTS (ref)
2359	    = (TREE_THIS_VOLATILE (ref) || TREE_SIDE_EFFECTS (pointer));
2360	  return ref;
2361	}
2362    }
2363  /* `pointer' won't be an error_mark_node if we were given a
2364     pointer to member, so it's cool to check for this here.  */
2365  else if (TYPE_PTR_TO_MEMBER_P (type))
2366    error ("invalid use of %qs on pointer to member", errorstring);
2367  else if (pointer != error_mark_node)
2368    {
2369      if (errorstring)
2370	error ("invalid type argument of %qs", errorstring);
2371      else
2372	error ("invalid type argument");
2373    }
2374  return error_mark_node;
2375}
2376
2377/* This handles expressions of the form "a[i]", which denotes
2378   an array reference.
2379
2380   This is logically equivalent in C to *(a+i), but we may do it differently.
2381   If A is a variable or a member, we generate a primitive ARRAY_REF.
2382   This avoids forcing the array out of registers, and can work on
2383   arrays that are not lvalues (for example, members of structures returned
2384   by functions).
2385
2386   If INDEX is of some user-defined type, it must be converted to
2387   integer type.  Otherwise, to make a compatible PLUS_EXPR, it
2388   will inherit the type of the array, which will be some pointer type.  */
2389
2390tree
2391build_array_ref (tree array, tree idx)
2392{
2393  if (idx == 0)
2394    {
2395      error ("subscript missing in array reference");
2396      return error_mark_node;
2397    }
2398
2399  if (TREE_TYPE (array) == error_mark_node
2400      || TREE_TYPE (idx) == error_mark_node)
2401    return error_mark_node;
2402
2403  /* If ARRAY is a COMPOUND_EXPR or COND_EXPR, move our reference
2404     inside it.  */
2405  switch (TREE_CODE (array))
2406    {
2407    case COMPOUND_EXPR:
2408      {
2409	tree value = build_array_ref (TREE_OPERAND (array, 1), idx);
2410	return build2 (COMPOUND_EXPR, TREE_TYPE (value),
2411		       TREE_OPERAND (array, 0), value);
2412      }
2413
2414    case COND_EXPR:
2415      return build_conditional_expr
2416	(TREE_OPERAND (array, 0),
2417	 build_array_ref (TREE_OPERAND (array, 1), idx),
2418	 build_array_ref (TREE_OPERAND (array, 2), idx));
2419
2420    default:
2421      break;
2422    }
2423
2424  if (TREE_CODE (TREE_TYPE (array)) == ARRAY_TYPE)
2425    {
2426      tree rval, type;
2427
2428      warn_array_subscript_with_type_char (idx);
2429
2430      if (!INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (idx)))
2431	{
2432	  error ("array subscript is not an integer");
2433	  return error_mark_node;
2434	}
2435
2436      /* Apply integral promotions *after* noticing character types.
2437	 (It is unclear why we do these promotions -- the standard
2438	 does not say that we should.  In fact, the natural thing would
2439	 seem to be to convert IDX to ptrdiff_t; we're performing
2440	 pointer arithmetic.)  */
2441      idx = perform_integral_promotions (idx);
2442
2443      /* An array that is indexed by a non-constant
2444	 cannot be stored in a register; we must be able to do
2445	 address arithmetic on its address.
2446	 Likewise an array of elements of variable size.  */
2447      if (TREE_CODE (idx) != INTEGER_CST
2448	  || (COMPLETE_TYPE_P (TREE_TYPE (TREE_TYPE (array)))
2449	      && (TREE_CODE (TYPE_SIZE (TREE_TYPE (TREE_TYPE (array))))
2450		  != INTEGER_CST)))
2451	{
2452	  if (!cxx_mark_addressable (array))
2453	    return error_mark_node;
2454	}
2455
2456      /* An array that is indexed by a constant value which is not within
2457	 the array bounds cannot be stored in a register either; because we
2458	 would get a crash in store_bit_field/extract_bit_field when trying
2459	 to access a non-existent part of the register.  */
2460      if (TREE_CODE (idx) == INTEGER_CST
2461	  && TYPE_DOMAIN (TREE_TYPE (array))
2462	  && ! int_fits_type_p (idx, TYPE_DOMAIN (TREE_TYPE (array))))
2463	{
2464	  if (!cxx_mark_addressable (array))
2465	    return error_mark_node;
2466	}
2467
2468      if (pedantic && !lvalue_p (array))
2469	pedwarn ("ISO C++ forbids subscripting non-lvalue array");
2470
2471      /* Note in C++ it is valid to subscript a `register' array, since
2472	 it is valid to take the address of something with that
2473	 storage specification.  */
2474      if (extra_warnings)
2475	{
2476	  tree foo = array;
2477	  while (TREE_CODE (foo) == COMPONENT_REF)
2478	    foo = TREE_OPERAND (foo, 0);
2479	  if (TREE_CODE (foo) == VAR_DECL && DECL_REGISTER (foo))
2480	    warning (OPT_Wextra, "subscripting array declared %<register%>");
2481	}
2482
2483      type = TREE_TYPE (TREE_TYPE (array));
2484      rval = build4 (ARRAY_REF, type, array, idx, NULL_TREE, NULL_TREE);
2485      /* Array ref is const/volatile if the array elements are
2486	 or if the array is..  */
2487      TREE_READONLY (rval)
2488	|= (CP_TYPE_CONST_P (type) | TREE_READONLY (array));
2489      TREE_SIDE_EFFECTS (rval)
2490	|= (CP_TYPE_VOLATILE_P (type) | TREE_SIDE_EFFECTS (array));
2491      TREE_THIS_VOLATILE (rval)
2492	|= (CP_TYPE_VOLATILE_P (type) | TREE_THIS_VOLATILE (array));
2493      return require_complete_type (fold_if_not_in_template (rval));
2494    }
2495
2496  {
2497    tree ar = default_conversion (array);
2498    tree ind = default_conversion (idx);
2499
2500    /* Put the integer in IND to simplify error checking.  */
2501    if (TREE_CODE (TREE_TYPE (ar)) == INTEGER_TYPE)
2502      {
2503	tree temp = ar;
2504	ar = ind;
2505	ind = temp;
2506      }
2507
2508    if (ar == error_mark_node)
2509      return ar;
2510
2511    if (TREE_CODE (TREE_TYPE (ar)) != POINTER_TYPE)
2512      {
2513	error ("subscripted value is neither array nor pointer");
2514	return error_mark_node;
2515      }
2516    if (TREE_CODE (TREE_TYPE (ind)) != INTEGER_TYPE)
2517      {
2518	error ("array subscript is not an integer");
2519	return error_mark_node;
2520      }
2521
2522    return build_indirect_ref (cp_build_binary_op (PLUS_EXPR, ar, ind),
2523			       "array indexing");
2524  }
2525}
2526
2527/* Resolve a pointer to member function.  INSTANCE is the object
2528   instance to use, if the member points to a virtual member.
2529
2530   This used to avoid checking for virtual functions if basetype
2531   has no virtual functions, according to an earlier ANSI draft.
2532   With the final ISO C++ rules, such an optimization is
2533   incorrect: A pointer to a derived member can be static_cast
2534   to pointer-to-base-member, as long as the dynamic object
2535   later has the right member.  */
2536
2537tree
2538get_member_function_from_ptrfunc (tree *instance_ptrptr, tree function)
2539{
2540  if (TREE_CODE (function) == OFFSET_REF)
2541    function = TREE_OPERAND (function, 1);
2542
2543  if (TYPE_PTRMEMFUNC_P (TREE_TYPE (function)))
2544    {
2545      tree idx, delta, e1, e2, e3, vtbl, basetype;
2546      tree fntype = TYPE_PTRMEMFUNC_FN_TYPE (TREE_TYPE (function));
2547
2548      tree instance_ptr = *instance_ptrptr;
2549      tree instance_save_expr = 0;
2550      if (instance_ptr == error_mark_node)
2551	{
2552	  if (TREE_CODE (function) == PTRMEM_CST)
2553	    {
2554	      /* Extracting the function address from a pmf is only
2555		 allowed with -Wno-pmf-conversions. It only works for
2556		 pmf constants.  */
2557	      e1 = build_addr_func (PTRMEM_CST_MEMBER (function));
2558	      e1 = convert (fntype, e1);
2559	      return e1;
2560	    }
2561	  else
2562	    {
2563	      error ("object missing in use of %qE", function);
2564	      return error_mark_node;
2565	    }
2566	}
2567
2568      if (TREE_SIDE_EFFECTS (instance_ptr))
2569	instance_ptr = instance_save_expr = save_expr (instance_ptr);
2570
2571      if (TREE_SIDE_EFFECTS (function))
2572	function = save_expr (function);
2573
2574      /* Start by extracting all the information from the PMF itself.  */
2575      e3 = pfn_from_ptrmemfunc (function);
2576      delta = build_ptrmemfunc_access_expr (function, delta_identifier);
2577      idx = build1 (NOP_EXPR, vtable_index_type, e3);
2578      switch (TARGET_PTRMEMFUNC_VBIT_LOCATION)
2579	{
2580	case ptrmemfunc_vbit_in_pfn:
2581	  e1 = cp_build_binary_op (BIT_AND_EXPR, idx, integer_one_node);
2582	  idx = cp_build_binary_op (MINUS_EXPR, idx, integer_one_node);
2583	  break;
2584
2585	case ptrmemfunc_vbit_in_delta:
2586	  e1 = cp_build_binary_op (BIT_AND_EXPR, delta, integer_one_node);
2587	  delta = cp_build_binary_op (RSHIFT_EXPR, delta, integer_one_node);
2588	  break;
2589
2590	default:
2591	  gcc_unreachable ();
2592	}
2593
2594      /* Convert down to the right base before using the instance.  A
2595	 special case is that in a pointer to member of class C, C may
2596	 be incomplete.  In that case, the function will of course be
2597	 a member of C, and no conversion is required.  In fact,
2598	 lookup_base will fail in that case, because incomplete
2599	 classes do not have BINFOs.  */
2600      basetype = TYPE_METHOD_BASETYPE (TREE_TYPE (fntype));
2601      if (!same_type_ignoring_top_level_qualifiers_p
2602	  (basetype, TREE_TYPE (TREE_TYPE (instance_ptr))))
2603	{
2604	  basetype = lookup_base (TREE_TYPE (TREE_TYPE (instance_ptr)),
2605				  basetype, ba_check, NULL);
2606	  instance_ptr = build_base_path (PLUS_EXPR, instance_ptr, basetype,
2607					  1);
2608	  if (instance_ptr == error_mark_node)
2609	    return error_mark_node;
2610	}
2611      /* ...and then the delta in the PMF.  */
2612      instance_ptr = build2 (PLUS_EXPR, TREE_TYPE (instance_ptr),
2613			     instance_ptr, delta);
2614
2615      /* Hand back the adjusted 'this' argument to our caller.  */
2616      *instance_ptrptr = instance_ptr;
2617
2618      /* Next extract the vtable pointer from the object.  */
2619      vtbl = build1 (NOP_EXPR, build_pointer_type (vtbl_ptr_type_node),
2620		     instance_ptr);
2621      vtbl = build_indirect_ref (vtbl, NULL);
2622
2623      /* Finally, extract the function pointer from the vtable.  */
2624      e2 = fold_build2 (PLUS_EXPR, TREE_TYPE (vtbl), vtbl, idx);
2625      e2 = build_indirect_ref (e2, NULL);
2626      TREE_CONSTANT (e2) = 1;
2627      TREE_INVARIANT (e2) = 1;
2628
2629      /* When using function descriptors, the address of the
2630	 vtable entry is treated as a function pointer.  */
2631      if (TARGET_VTABLE_USES_DESCRIPTORS)
2632	e2 = build1 (NOP_EXPR, TREE_TYPE (e2),
2633		     build_unary_op (ADDR_EXPR, e2, /*noconvert=*/1));
2634
2635      TREE_TYPE (e2) = TREE_TYPE (e3);
2636      e1 = build_conditional_expr (e1, e2, e3);
2637
2638      /* Make sure this doesn't get evaluated first inside one of the
2639	 branches of the COND_EXPR.  */
2640      if (instance_save_expr)
2641	e1 = build2 (COMPOUND_EXPR, TREE_TYPE (e1),
2642		     instance_save_expr, e1);
2643
2644      function = e1;
2645    }
2646  return function;
2647}
2648
2649tree
2650build_function_call (tree function, tree params)
2651{
2652  tree fntype, fndecl;
2653  tree coerced_params;
2654  tree name = NULL_TREE;
2655  int is_method;
2656  tree original = function;
2657
2658  /* For Objective-C, convert any calls via a cast to OBJC_TYPE_REF
2659     expressions, like those used for ObjC messenger dispatches.  */
2660  function = objc_rewrite_function_call (function, params);
2661
2662  /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
2663     Strip such NOP_EXPRs, since FUNCTION is used in non-lvalue context.  */
2664  if (TREE_CODE (function) == NOP_EXPR
2665      && TREE_TYPE (function) == TREE_TYPE (TREE_OPERAND (function, 0)))
2666    function = TREE_OPERAND (function, 0);
2667
2668  if (TREE_CODE (function) == FUNCTION_DECL)
2669    {
2670      name = DECL_NAME (function);
2671
2672      mark_used (function);
2673      fndecl = function;
2674
2675      /* Convert anything with function type to a pointer-to-function.  */
2676      if (pedantic && DECL_MAIN_P (function))
2677	pedwarn ("ISO C++ forbids calling %<::main%> from within program");
2678
2679      /* Differs from default_conversion by not setting TREE_ADDRESSABLE
2680	 (because calling an inline function does not mean the function
2681	 needs to be separately compiled).  */
2682
2683      if (DECL_INLINE (function))
2684	function = inline_conversion (function);
2685      else
2686	function = build_addr_func (function);
2687    }
2688  else
2689    {
2690      fndecl = NULL_TREE;
2691
2692      function = build_addr_func (function);
2693    }
2694
2695  if (function == error_mark_node)
2696    return error_mark_node;
2697
2698  fntype = TREE_TYPE (function);
2699
2700  if (TYPE_PTRMEMFUNC_P (fntype))
2701    {
2702      error ("must use %<.*%> or %<->*%> to call pointer-to-member "
2703	     "function in %<%E (...)%>",
2704	     original);
2705      return error_mark_node;
2706    }
2707
2708  is_method = (TREE_CODE (fntype) == POINTER_TYPE
2709	       && TREE_CODE (TREE_TYPE (fntype)) == METHOD_TYPE);
2710
2711  if (!((TREE_CODE (fntype) == POINTER_TYPE
2712	 && TREE_CODE (TREE_TYPE (fntype)) == FUNCTION_TYPE)
2713	|| is_method
2714	|| TREE_CODE (function) == TEMPLATE_ID_EXPR))
2715    {
2716      error ("%qE cannot be used as a function", original);
2717      return error_mark_node;
2718    }
2719
2720  /* fntype now gets the type of function pointed to.  */
2721  fntype = TREE_TYPE (fntype);
2722
2723  /* Convert the parameters to the types declared in the
2724     function prototype, or apply default promotions.  */
2725
2726  coerced_params = convert_arguments (TYPE_ARG_TYPES (fntype),
2727				      params, fndecl, LOOKUP_NORMAL);
2728  if (coerced_params == error_mark_node)
2729    return error_mark_node;
2730
2731  /* Check for errors in format strings and inappropriately
2732     null parameters.  */
2733
2734  check_function_arguments (TYPE_ATTRIBUTES (fntype), coerced_params,
2735			    TYPE_ARG_TYPES (fntype));
2736
2737  return build_cxx_call (function, coerced_params);
2738}
2739
2740/* Convert the actual parameter expressions in the list VALUES
2741   to the types in the list TYPELIST.
2742   If parmdecls is exhausted, or when an element has NULL as its type,
2743   perform the default conversions.
2744
2745   NAME is an IDENTIFIER_NODE or 0.  It is used only for error messages.
2746
2747   This is also where warnings about wrong number of args are generated.
2748
2749   Return a list of expressions for the parameters as converted.
2750
2751   Both VALUES and the returned value are chains of TREE_LIST nodes
2752   with the elements of the list in the TREE_VALUE slots of those nodes.
2753
2754   In C++, unspecified trailing parameters can be filled in with their
2755   default arguments, if such were specified.  Do so here.  */
2756
2757static tree
2758convert_arguments (tree typelist, tree values, tree fndecl, int flags)
2759{
2760  tree typetail, valtail;
2761  tree result = NULL_TREE;
2762  const char *called_thing = 0;
2763  int i = 0;
2764
2765  /* Argument passing is always copy-initialization.  */
2766  flags |= LOOKUP_ONLYCONVERTING;
2767
2768  if (fndecl)
2769    {
2770      if (TREE_CODE (TREE_TYPE (fndecl)) == METHOD_TYPE)
2771	{
2772	  if (DECL_NAME (fndecl) == NULL_TREE
2773	      || IDENTIFIER_HAS_TYPE_VALUE (DECL_NAME (fndecl)))
2774	    called_thing = "constructor";
2775	  else
2776	    called_thing = "member function";
2777	}
2778      else
2779	called_thing = "function";
2780    }
2781
2782  for (valtail = values, typetail = typelist;
2783       valtail;
2784       valtail = TREE_CHAIN (valtail), i++)
2785    {
2786      tree type = typetail ? TREE_VALUE (typetail) : 0;
2787      tree val = TREE_VALUE (valtail);
2788
2789      if (val == error_mark_node || type == error_mark_node)
2790	return error_mark_node;
2791
2792      if (type == void_type_node)
2793	{
2794	  if (fndecl)
2795	    {
2796	      error ("too many arguments to %s %q+#D", called_thing, fndecl);
2797	      error ("at this point in file");
2798	    }
2799	  else
2800	    error ("too many arguments to function");
2801	  /* In case anybody wants to know if this argument
2802	     list is valid.  */
2803	  if (result)
2804	    TREE_TYPE (tree_last (result)) = error_mark_node;
2805	  break;
2806	}
2807
2808      /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
2809	 Strip such NOP_EXPRs, since VAL is used in non-lvalue context.  */
2810      if (TREE_CODE (val) == NOP_EXPR
2811	  && TREE_TYPE (val) == TREE_TYPE (TREE_OPERAND (val, 0))
2812	  && (type == 0 || TREE_CODE (type) != REFERENCE_TYPE))
2813	val = TREE_OPERAND (val, 0);
2814
2815      if (type == 0 || TREE_CODE (type) != REFERENCE_TYPE)
2816	{
2817	  if (TREE_CODE (TREE_TYPE (val)) == ARRAY_TYPE
2818	      || TREE_CODE (TREE_TYPE (val)) == FUNCTION_TYPE
2819	      || TREE_CODE (TREE_TYPE (val)) == METHOD_TYPE)
2820	    val = decay_conversion (val);
2821	}
2822
2823      if (val == error_mark_node)
2824	return error_mark_node;
2825
2826      if (type != 0)
2827	{
2828	  /* Formal parm type is specified by a function prototype.  */
2829	  tree parmval;
2830
2831	  if (!COMPLETE_TYPE_P (complete_type (type)))
2832	    {
2833	      if (fndecl)
2834		error ("parameter %P of %qD has incomplete type %qT",
2835		       i, fndecl, type);
2836	      else
2837		error ("parameter %P has incomplete type %qT", i, type);
2838	      parmval = error_mark_node;
2839	    }
2840	  else
2841	    {
2842	      parmval = convert_for_initialization
2843		(NULL_TREE, type, val, flags,
2844		 "argument passing", fndecl, i);
2845	      parmval = convert_for_arg_passing (type, parmval);
2846	    }
2847
2848	  if (parmval == error_mark_node)
2849	    return error_mark_node;
2850
2851	  result = tree_cons (NULL_TREE, parmval, result);
2852	}
2853      else
2854	{
2855	  if (fndecl && DECL_BUILT_IN (fndecl)
2856	      && DECL_FUNCTION_CODE (fndecl) == BUILT_IN_CONSTANT_P)
2857	    /* Don't do ellipsis conversion for __built_in_constant_p
2858	       as this will result in spurious warnings for non-POD
2859	       types.  */
2860	    val = require_complete_type (val);
2861	  else
2862	    val = convert_arg_to_ellipsis (val);
2863
2864	  result = tree_cons (NULL_TREE, val, result);
2865	}
2866
2867      if (typetail)
2868	typetail = TREE_CHAIN (typetail);
2869    }
2870
2871  if (typetail != 0 && typetail != void_list_node)
2872    {
2873      /* See if there are default arguments that can be used.  */
2874      if (TREE_PURPOSE (typetail)
2875	  && TREE_CODE (TREE_PURPOSE (typetail)) != DEFAULT_ARG)
2876	{
2877	  for (; typetail != void_list_node; ++i)
2878	    {
2879	      tree parmval
2880		= convert_default_arg (TREE_VALUE (typetail),
2881				       TREE_PURPOSE (typetail),
2882				       fndecl, i);
2883
2884	      if (parmval == error_mark_node)
2885		return error_mark_node;
2886
2887	      result = tree_cons (0, parmval, result);
2888	      typetail = TREE_CHAIN (typetail);
2889	      /* ends with `...'.  */
2890	      if (typetail == NULL_TREE)
2891		break;
2892	    }
2893	}
2894      else
2895	{
2896	  if (fndecl)
2897	    {
2898	      error ("too few arguments to %s %q+#D", called_thing, fndecl);
2899	      error ("at this point in file");
2900	    }
2901	  else
2902	    error ("too few arguments to function");
2903	  return error_mark_node;
2904	}
2905    }
2906
2907  return nreverse (result);
2908}
2909
2910/* Build a binary-operation expression, after performing default
2911   conversions on the operands.  CODE is the kind of expression to build.  */
2912
2913tree
2914build_x_binary_op (enum tree_code code, tree arg1, enum tree_code arg1_code,
2915		   tree arg2, enum tree_code arg2_code, bool *overloaded_p)
2916{
2917  tree orig_arg1;
2918  tree orig_arg2;
2919  tree expr;
2920
2921  orig_arg1 = arg1;
2922  orig_arg2 = arg2;
2923
2924  if (processing_template_decl)
2925    {
2926      if (type_dependent_expression_p (arg1)
2927	  || type_dependent_expression_p (arg2))
2928	return build_min_nt (code, arg1, arg2);
2929      arg1 = build_non_dependent_expr (arg1);
2930      arg2 = build_non_dependent_expr (arg2);
2931    }
2932
2933  if (code == DOTSTAR_EXPR)
2934    expr = build_m_component_ref (arg1, arg2);
2935  else
2936    expr = build_new_op (code, LOOKUP_NORMAL, arg1, arg2, NULL_TREE,
2937			 overloaded_p);
2938
2939  /* Check for cases such as x+y<<z which users are likely to
2940     misinterpret.  But don't warn about obj << x + y, since that is a
2941     common idiom for I/O.  */
2942  if (warn_parentheses
2943      && !processing_template_decl
2944      && !error_operand_p (arg1)
2945      && !error_operand_p (arg2)
2946      && (code != LSHIFT_EXPR
2947	  || !IS_AGGR_TYPE (TREE_TYPE (arg1))))
2948    warn_about_parentheses (code, arg1_code, arg2_code);
2949
2950  if (processing_template_decl && expr != error_mark_node)
2951    return build_min_non_dep (code, expr, orig_arg1, orig_arg2);
2952
2953  return expr;
2954}
2955
2956/* Build a binary-operation expression without default conversions.
2957   CODE is the kind of expression to build.
2958   This function differs from `build' in several ways:
2959   the data type of the result is computed and recorded in it,
2960   warnings are generated if arg data types are invalid,
2961   special handling for addition and subtraction of pointers is known,
2962   and some optimization is done (operations on narrow ints
2963   are done in the narrower type when that gives the same result).
2964   Constant folding is also done before the result is returned.
2965
2966   Note that the operands will never have enumeral types
2967   because either they have just had the default conversions performed
2968   or they have both just been converted to some other type in which
2969   the arithmetic is to be done.
2970
2971   C++: must do special pointer arithmetic when implementing
2972   multiple inheritance, and deal with pointer to member functions.  */
2973
2974tree
2975build_binary_op (enum tree_code code, tree orig_op0, tree orig_op1,
2976		 int convert_p ATTRIBUTE_UNUSED)
2977{
2978  tree op0, op1;
2979  enum tree_code code0, code1;
2980  tree type0, type1;
2981  const char *invalid_op_diag;
2982
2983  /* Expression code to give to the expression when it is built.
2984     Normally this is CODE, which is what the caller asked for,
2985     but in some special cases we change it.  */
2986  enum tree_code resultcode = code;
2987
2988  /* Data type in which the computation is to be performed.
2989     In the simplest cases this is the common type of the arguments.  */
2990  tree result_type = NULL;
2991
2992  /* Nonzero means operands have already been type-converted
2993     in whatever way is necessary.
2994     Zero means they need to be converted to RESULT_TYPE.  */
2995  int converted = 0;
2996
2997  /* Nonzero means create the expression with this type, rather than
2998     RESULT_TYPE.  */
2999  tree build_type = 0;
3000
3001  /* Nonzero means after finally constructing the expression
3002     convert it to this type.  */
3003  tree final_type = 0;
3004
3005  tree result;
3006
3007  /* Nonzero if this is an operation like MIN or MAX which can
3008     safely be computed in short if both args are promoted shorts.
3009     Also implies COMMON.
3010     -1 indicates a bitwise operation; this makes a difference
3011     in the exact conditions for when it is safe to do the operation
3012     in a narrower mode.  */
3013  int shorten = 0;
3014
3015  /* Nonzero if this is a comparison operation;
3016     if both args are promoted shorts, compare the original shorts.
3017     Also implies COMMON.  */
3018  int short_compare = 0;
3019
3020  /* Nonzero if this is a right-shift operation, which can be computed on the
3021     original short and then promoted if the operand is a promoted short.  */
3022  int short_shift = 0;
3023
3024  /* Nonzero means set RESULT_TYPE to the common type of the args.  */
3025  int common = 0;
3026
3027  /* True if both operands have arithmetic type.  */
3028  bool arithmetic_types_p;
3029
3030  /* Apply default conversions.  */
3031  op0 = orig_op0;
3032  op1 = orig_op1;
3033
3034  if (code == TRUTH_AND_EXPR || code == TRUTH_ANDIF_EXPR
3035      || code == TRUTH_OR_EXPR || code == TRUTH_ORIF_EXPR
3036      || code == TRUTH_XOR_EXPR)
3037    {
3038      if (!really_overloaded_fn (op0))
3039	op0 = decay_conversion (op0);
3040      if (!really_overloaded_fn (op1))
3041	op1 = decay_conversion (op1);
3042    }
3043  else
3044    {
3045      if (!really_overloaded_fn (op0))
3046	op0 = default_conversion (op0);
3047      if (!really_overloaded_fn (op1))
3048	op1 = default_conversion (op1);
3049    }
3050
3051  /* Strip NON_LVALUE_EXPRs, etc., since we aren't using as an lvalue.  */
3052  STRIP_TYPE_NOPS (op0);
3053  STRIP_TYPE_NOPS (op1);
3054
3055  /* DTRT if one side is an overloaded function, but complain about it.  */
3056  if (type_unknown_p (op0))
3057    {
3058      tree t = instantiate_type (TREE_TYPE (op1), op0, tf_none);
3059      if (t != error_mark_node)
3060	{
3061	  pedwarn ("assuming cast to type %qT from overloaded function",
3062		   TREE_TYPE (t));
3063	  op0 = t;
3064	}
3065    }
3066  if (type_unknown_p (op1))
3067    {
3068      tree t = instantiate_type (TREE_TYPE (op0), op1, tf_none);
3069      if (t != error_mark_node)
3070	{
3071	  pedwarn ("assuming cast to type %qT from overloaded function",
3072		   TREE_TYPE (t));
3073	  op1 = t;
3074	}
3075    }
3076
3077  type0 = TREE_TYPE (op0);
3078  type1 = TREE_TYPE (op1);
3079
3080  /* The expression codes of the data types of the arguments tell us
3081     whether the arguments are integers, floating, pointers, etc.  */
3082  code0 = TREE_CODE (type0);
3083  code1 = TREE_CODE (type1);
3084
3085  /* If an error was already reported for one of the arguments,
3086     avoid reporting another error.  */
3087
3088  if (code0 == ERROR_MARK || code1 == ERROR_MARK)
3089    return error_mark_node;
3090
3091  if ((invalid_op_diag
3092       = targetm.invalid_binary_op (code, type0, type1)))
3093    {
3094      error (invalid_op_diag);
3095      return error_mark_node;
3096    }
3097
3098  switch (code)
3099    {
3100    case MINUS_EXPR:
3101      /* Subtraction of two similar pointers.
3102	 We must subtract them as integers, then divide by object size.  */
3103      if (code0 == POINTER_TYPE && code1 == POINTER_TYPE
3104	  && same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type0),
3105							TREE_TYPE (type1)))
3106	return pointer_diff (op0, op1, common_type (type0, type1));
3107      /* In all other cases except pointer - int, the usual arithmetic
3108	 rules aply.  */
3109      else if (!(code0 == POINTER_TYPE && code1 == INTEGER_TYPE))
3110	{
3111	  common = 1;
3112	  break;
3113	}
3114      /* The pointer - int case is just like pointer + int; fall
3115	 through.  */
3116    case PLUS_EXPR:
3117      if ((code0 == POINTER_TYPE || code1 == POINTER_TYPE)
3118	  && (code0 == INTEGER_TYPE || code1 == INTEGER_TYPE))
3119	{
3120	  tree ptr_operand;
3121	  tree int_operand;
3122	  ptr_operand = ((code0 == POINTER_TYPE) ? op0 : op1);
3123	  int_operand = ((code0 == INTEGER_TYPE) ? op0 : op1);
3124	  if (processing_template_decl)
3125	    {
3126	      result_type = TREE_TYPE (ptr_operand);
3127	      break;
3128	    }
3129	  return cp_pointer_int_sum (code,
3130				     ptr_operand,
3131				     int_operand);
3132	}
3133      common = 1;
3134      break;
3135
3136    case MULT_EXPR:
3137      common = 1;
3138      break;
3139
3140    case TRUNC_DIV_EXPR:
3141    case CEIL_DIV_EXPR:
3142    case FLOOR_DIV_EXPR:
3143    case ROUND_DIV_EXPR:
3144    case EXACT_DIV_EXPR:
3145      if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
3146	   || code0 == COMPLEX_TYPE || code0 == VECTOR_TYPE)
3147	  && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
3148	      || code1 == COMPLEX_TYPE || code1 == VECTOR_TYPE))
3149	{
3150	  enum tree_code tcode0 = code0, tcode1 = code1;
3151
3152	  if (TREE_CODE (op1) == INTEGER_CST && integer_zerop (op1))
3153	    warning (OPT_Wdiv_by_zero, "division by zero in %<%E / 0%>", op0);
3154	  else if (TREE_CODE (op1) == REAL_CST && real_zerop (op1))
3155	    warning (OPT_Wdiv_by_zero, "division by zero in %<%E / 0.%>", op0);
3156
3157	  if (tcode0 == COMPLEX_TYPE || tcode0 == VECTOR_TYPE)
3158	    tcode0 = TREE_CODE (TREE_TYPE (TREE_TYPE (op0)));
3159	  if (tcode1 == COMPLEX_TYPE || tcode1 == VECTOR_TYPE)
3160	    tcode1 = TREE_CODE (TREE_TYPE (TREE_TYPE (op1)));
3161
3162	  if (!(tcode0 == INTEGER_TYPE && tcode1 == INTEGER_TYPE))
3163	    resultcode = RDIV_EXPR;
3164	  else
3165	    /* When dividing two signed integers, we have to promote to int.
3166	       unless we divide by a constant != -1.  Note that default
3167	       conversion will have been performed on the operands at this
3168	       point, so we have to dig out the original type to find out if
3169	       it was unsigned.  */
3170	    shorten = ((TREE_CODE (op0) == NOP_EXPR
3171			&& TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op0, 0))))
3172		       || (TREE_CODE (op1) == INTEGER_CST
3173			   && ! integer_all_onesp (op1)));
3174
3175	  common = 1;
3176	}
3177      break;
3178
3179    case BIT_AND_EXPR:
3180    case BIT_IOR_EXPR:
3181    case BIT_XOR_EXPR:
3182      if ((code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
3183	  || (code0 == VECTOR_TYPE && code1 == VECTOR_TYPE))
3184	shorten = -1;
3185      break;
3186
3187    case TRUNC_MOD_EXPR:
3188    case FLOOR_MOD_EXPR:
3189      if (code1 == INTEGER_TYPE && integer_zerop (op1))
3190	warning (OPT_Wdiv_by_zero, "division by zero in %<%E %% 0%>", op0);
3191      else if (code1 == REAL_TYPE && real_zerop (op1))
3192	warning (OPT_Wdiv_by_zero, "division by zero in %<%E %% 0.%>", op0);
3193
3194      if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
3195	{
3196	  /* Although it would be tempting to shorten always here, that loses
3197	     on some targets, since the modulo instruction is undefined if the
3198	     quotient can't be represented in the computation mode.  We shorten
3199	     only if unsigned or if dividing by something we know != -1.  */
3200	  shorten = ((TREE_CODE (op0) == NOP_EXPR
3201		      && TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op0, 0))))
3202		     || (TREE_CODE (op1) == INTEGER_CST
3203			 && ! integer_all_onesp (op1)));
3204	  common = 1;
3205	}
3206      break;
3207
3208    case TRUTH_ANDIF_EXPR:
3209    case TRUTH_ORIF_EXPR:
3210    case TRUTH_AND_EXPR:
3211    case TRUTH_OR_EXPR:
3212      result_type = boolean_type_node;
3213      break;
3214
3215      /* Shift operations: result has same type as first operand;
3216	 always convert second operand to int.
3217	 Also set SHORT_SHIFT if shifting rightward.  */
3218
3219    case RSHIFT_EXPR:
3220      if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
3221	{
3222	  result_type = type0;
3223	  if (TREE_CODE (op1) == INTEGER_CST)
3224	    {
3225	      if (tree_int_cst_lt (op1, integer_zero_node))
3226		warning (0, "right shift count is negative");
3227	      else
3228		{
3229		  if (! integer_zerop (op1))
3230		    short_shift = 1;
3231		  if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
3232		    warning (0, "right shift count >= width of type");
3233		}
3234	    }
3235	  /* Convert the shift-count to an integer, regardless of
3236	     size of value being shifted.  */
3237	  if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
3238	    op1 = cp_convert (integer_type_node, op1);
3239	  /* Avoid converting op1 to result_type later.  */
3240	  converted = 1;
3241	}
3242      break;
3243
3244    case LSHIFT_EXPR:
3245      if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
3246	{
3247	  result_type = type0;
3248	  if (TREE_CODE (op1) == INTEGER_CST)
3249	    {
3250	      if (tree_int_cst_lt (op1, integer_zero_node))
3251		warning (0, "left shift count is negative");
3252	      else if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
3253		warning (0, "left shift count >= width of type");
3254	    }
3255	  /* Convert the shift-count to an integer, regardless of
3256	     size of value being shifted.  */
3257	  if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
3258	    op1 = cp_convert (integer_type_node, op1);
3259	  /* Avoid converting op1 to result_type later.  */
3260	  converted = 1;
3261	}
3262      break;
3263
3264    case RROTATE_EXPR:
3265    case LROTATE_EXPR:
3266      if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
3267	{
3268	  result_type = type0;
3269	  if (TREE_CODE (op1) == INTEGER_CST)
3270	    {
3271	      if (tree_int_cst_lt (op1, integer_zero_node))
3272		warning (0, "%s rotate count is negative",
3273			 (code == LROTATE_EXPR) ? "left" : "right");
3274	      else if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
3275		warning (0, "%s rotate count >= width of type",
3276			 (code == LROTATE_EXPR) ? "left" : "right");
3277	    }
3278	  /* Convert the shift-count to an integer, regardless of
3279	     size of value being shifted.  */
3280	  if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
3281	    op1 = cp_convert (integer_type_node, op1);
3282	}
3283      break;
3284
3285    case EQ_EXPR:
3286    case NE_EXPR:
3287      if (code0 == REAL_TYPE || code1 == REAL_TYPE)
3288	warning (OPT_Wfloat_equal,
3289		 "comparing floating point with == or != is unsafe");
3290      if ((TREE_CODE (orig_op0) == STRING_CST && !integer_zerop (op1))
3291	  || (TREE_CODE (orig_op1) == STRING_CST && !integer_zerop (op0)))
3292	warning (OPT_Waddress,
3293                 "comparison with string literal results in unspecified behaviour");
3294
3295      build_type = boolean_type_node;
3296      if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
3297	   || code0 == COMPLEX_TYPE)
3298	  && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
3299	      || code1 == COMPLEX_TYPE))
3300	short_compare = 1;
3301      else if ((code0 == POINTER_TYPE && code1 == POINTER_TYPE)
3302	       || (TYPE_PTRMEM_P (type0) && TYPE_PTRMEM_P (type1)))
3303	result_type = composite_pointer_type (type0, type1, op0, op1,
3304					      "comparison");
3305      else if ((code0 == POINTER_TYPE || TYPE_PTRMEM_P (type0))
3306	       && null_ptr_cst_p (op1))
3307	result_type = type0;
3308      else if ((code1 == POINTER_TYPE || TYPE_PTRMEM_P (type1))
3309	       && null_ptr_cst_p (op0))
3310	result_type = type1;
3311      else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
3312	{
3313	  result_type = type0;
3314	  error ("ISO C++ forbids comparison between pointer and integer");
3315	}
3316      else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE)
3317	{
3318	  result_type = type1;
3319	  error ("ISO C++ forbids comparison between pointer and integer");
3320	}
3321      else if (TYPE_PTRMEMFUNC_P (type0) && null_ptr_cst_p (op1))
3322	{
3323	  op0 = build_ptrmemfunc_access_expr (op0, pfn_identifier);
3324	  op1 = cp_convert (TREE_TYPE (op0), integer_zero_node);
3325	  result_type = TREE_TYPE (op0);
3326	}
3327      else if (TYPE_PTRMEMFUNC_P (type1) && null_ptr_cst_p (op0))
3328	return cp_build_binary_op (code, op1, op0);
3329      else if (TYPE_PTRMEMFUNC_P (type0) && TYPE_PTRMEMFUNC_P (type1)
3330	       && same_type_p (type0, type1))
3331	{
3332	  /* E will be the final comparison.  */
3333	  tree e;
3334	  /* E1 and E2 are for scratch.  */
3335	  tree e1;
3336	  tree e2;
3337	  tree pfn0;
3338	  tree pfn1;
3339	  tree delta0;
3340	  tree delta1;
3341
3342	  if (TREE_SIDE_EFFECTS (op0))
3343	    op0 = save_expr (op0);
3344	  if (TREE_SIDE_EFFECTS (op1))
3345	    op1 = save_expr (op1);
3346
3347	  /* We generate:
3348
3349	     (op0.pfn == op1.pfn
3350	      && (!op0.pfn || op0.delta == op1.delta))
3351
3352	     The reason for the `!op0.pfn' bit is that a NULL
3353	     pointer-to-member is any member with a zero PFN; the
3354	     DELTA field is unspecified.  */
3355	  pfn0 = pfn_from_ptrmemfunc (op0);
3356	  pfn1 = pfn_from_ptrmemfunc (op1);
3357	  delta0 = build_ptrmemfunc_access_expr (op0,
3358						 delta_identifier);
3359	  delta1 = build_ptrmemfunc_access_expr (op1,
3360						 delta_identifier);
3361	  e1 = cp_build_binary_op (EQ_EXPR, delta0, delta1);
3362	  e2 = cp_build_binary_op (EQ_EXPR,
3363				   pfn0,
3364				   cp_convert (TREE_TYPE (pfn0),
3365					       integer_zero_node));
3366	  e1 = cp_build_binary_op (TRUTH_ORIF_EXPR, e1, e2);
3367	  e2 = build2 (EQ_EXPR, boolean_type_node, pfn0, pfn1);
3368	  e = cp_build_binary_op (TRUTH_ANDIF_EXPR, e2, e1);
3369	  if (code == EQ_EXPR)
3370	    return e;
3371	  return cp_build_binary_op (EQ_EXPR, e, integer_zero_node);
3372	}
3373      else
3374	{
3375	  gcc_assert (!TYPE_PTRMEMFUNC_P (type0)
3376		      || !same_type_p (TYPE_PTRMEMFUNC_FN_TYPE (type0),
3377				       type1));
3378	  gcc_assert (!TYPE_PTRMEMFUNC_P (type1)
3379		      || !same_type_p (TYPE_PTRMEMFUNC_FN_TYPE (type1),
3380				       type0));
3381	}
3382
3383      break;
3384
3385    case MAX_EXPR:
3386    case MIN_EXPR:
3387      if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE)
3388	   && (code1 == INTEGER_TYPE || code1 == REAL_TYPE))
3389	shorten = 1;
3390      else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
3391	result_type = composite_pointer_type (type0, type1, op0, op1,
3392					      "comparison");
3393      break;
3394
3395    case LE_EXPR:
3396    case GE_EXPR:
3397    case LT_EXPR:
3398    case GT_EXPR:
3399      if (TREE_CODE (orig_op0) == STRING_CST
3400	  || TREE_CODE (orig_op1) == STRING_CST)
3401	warning (OPT_Waddress,
3402                 "comparison with string literal results in unspecified behaviour");
3403
3404      build_type = boolean_type_node;
3405      if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE)
3406	   && (code1 == INTEGER_TYPE || code1 == REAL_TYPE))
3407	short_compare = 1;
3408      else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
3409	result_type = composite_pointer_type (type0, type1, op0, op1,
3410					      "comparison");
3411      else if (code0 == POINTER_TYPE && TREE_CODE (op1) == INTEGER_CST
3412	       && integer_zerop (op1))
3413	result_type = type0;
3414      else if (code1 == POINTER_TYPE && TREE_CODE (op0) == INTEGER_CST
3415	       && integer_zerop (op0))
3416	result_type = type1;
3417      else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
3418	{
3419	  result_type = type0;
3420	  pedwarn ("ISO C++ forbids comparison between pointer and integer");
3421	}
3422      else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE)
3423	{
3424	  result_type = type1;
3425	  pedwarn ("ISO C++ forbids comparison between pointer and integer");
3426	}
3427      break;
3428
3429    case UNORDERED_EXPR:
3430    case ORDERED_EXPR:
3431    case UNLT_EXPR:
3432    case UNLE_EXPR:
3433    case UNGT_EXPR:
3434    case UNGE_EXPR:
3435    case UNEQ_EXPR:
3436      build_type = integer_type_node;
3437      if (code0 != REAL_TYPE || code1 != REAL_TYPE)
3438	{
3439	  error ("unordered comparison on non-floating point argument");
3440	  return error_mark_node;
3441	}
3442      common = 1;
3443      break;
3444
3445    default:
3446      break;
3447    }
3448
3449  if (((code0 == INTEGER_TYPE || code0 == REAL_TYPE || code0 == COMPLEX_TYPE)
3450       && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
3451	   || code1 == COMPLEX_TYPE)))
3452    arithmetic_types_p = 1;
3453  else
3454    {
3455      arithmetic_types_p = 0;
3456      /* Vector arithmetic is only allowed when both sides are vectors.  */
3457      if (code0 == VECTOR_TYPE && code1 == VECTOR_TYPE)
3458	{
3459	  if (!tree_int_cst_equal (TYPE_SIZE (type0), TYPE_SIZE (type1))
3460	      || !same_scalar_type_ignoring_signedness (TREE_TYPE (type0),
3461							TREE_TYPE (type1)))
3462	    {
3463	      binary_op_error (code);
3464	      return error_mark_node;
3465	    }
3466	  arithmetic_types_p = 1;
3467	}
3468    }
3469  /* Determine the RESULT_TYPE, if it is not already known.  */
3470  if (!result_type
3471      && arithmetic_types_p
3472      && (shorten || common || short_compare))
3473    result_type = common_type (type0, type1);
3474
3475  if (!result_type)
3476    {
3477      error ("invalid operands of types %qT and %qT to binary %qO",
3478	     TREE_TYPE (orig_op0), TREE_TYPE (orig_op1), code);
3479      return error_mark_node;
3480    }
3481
3482  /* If we're in a template, the only thing we need to know is the
3483     RESULT_TYPE.  */
3484  if (processing_template_decl)
3485    return build2 (resultcode,
3486		   build_type ? build_type : result_type,
3487		   op0, op1);
3488
3489  if (arithmetic_types_p)
3490    {
3491      int none_complex = (code0 != COMPLEX_TYPE && code1 != COMPLEX_TYPE);
3492
3493      /* For certain operations (which identify themselves by shorten != 0)
3494	 if both args were extended from the same smaller type,
3495	 do the arithmetic in that type and then extend.
3496
3497	 shorten !=0 and !=1 indicates a bitwise operation.
3498	 For them, this optimization is safe only if
3499	 both args are zero-extended or both are sign-extended.
3500	 Otherwise, we might change the result.
3501	 Eg, (short)-1 | (unsigned short)-1 is (int)-1
3502	 but calculated in (unsigned short) it would be (unsigned short)-1.  */
3503
3504      if (shorten && none_complex)
3505	{
3506	  int unsigned0, unsigned1;
3507	  tree arg0 = get_narrower (op0, &unsigned0);
3508	  tree arg1 = get_narrower (op1, &unsigned1);
3509	  /* UNS is 1 if the operation to be done is an unsigned one.  */
3510	  int uns = TYPE_UNSIGNED (result_type);
3511	  tree type;
3512
3513	  final_type = result_type;
3514
3515	  /* Handle the case that OP0 does not *contain* a conversion
3516	     but it *requires* conversion to FINAL_TYPE.  */
3517
3518	  if (op0 == arg0 && TREE_TYPE (op0) != final_type)
3519	    unsigned0 = TYPE_UNSIGNED (TREE_TYPE (op0));
3520	  if (op1 == arg1 && TREE_TYPE (op1) != final_type)
3521	    unsigned1 = TYPE_UNSIGNED (TREE_TYPE (op1));
3522
3523	  /* Now UNSIGNED0 is 1 if ARG0 zero-extends to FINAL_TYPE.  */
3524
3525	  /* For bitwise operations, signedness of nominal type
3526	     does not matter.  Consider only how operands were extended.  */
3527	  if (shorten == -1)
3528	    uns = unsigned0;
3529
3530	  /* Note that in all three cases below we refrain from optimizing
3531	     an unsigned operation on sign-extended args.
3532	     That would not be valid.  */
3533
3534	  /* Both args variable: if both extended in same way
3535	     from same width, do it in that width.
3536	     Do it unsigned if args were zero-extended.  */
3537	  if ((TYPE_PRECISION (TREE_TYPE (arg0))
3538	       < TYPE_PRECISION (result_type))
3539	      && (TYPE_PRECISION (TREE_TYPE (arg1))
3540		  == TYPE_PRECISION (TREE_TYPE (arg0)))
3541	      && unsigned0 == unsigned1
3542	      && (unsigned0 || !uns))
3543	    result_type = c_common_signed_or_unsigned_type
3544	      (unsigned0, common_type (TREE_TYPE (arg0), TREE_TYPE (arg1)));
3545	  else if (TREE_CODE (arg0) == INTEGER_CST
3546		   && (unsigned1 || !uns)
3547		   && (TYPE_PRECISION (TREE_TYPE (arg1))
3548		       < TYPE_PRECISION (result_type))
3549		   && (type = c_common_signed_or_unsigned_type
3550		       (unsigned1, TREE_TYPE (arg1)),
3551		       int_fits_type_p (arg0, type)))
3552	    result_type = type;
3553	  else if (TREE_CODE (arg1) == INTEGER_CST
3554		   && (unsigned0 || !uns)
3555		   && (TYPE_PRECISION (TREE_TYPE (arg0))
3556		       < TYPE_PRECISION (result_type))
3557		   && (type = c_common_signed_or_unsigned_type
3558		       (unsigned0, TREE_TYPE (arg0)),
3559		       int_fits_type_p (arg1, type)))
3560	    result_type = type;
3561	}
3562
3563      /* Shifts can be shortened if shifting right.  */
3564
3565      if (short_shift)
3566	{
3567	  int unsigned_arg;
3568	  tree arg0 = get_narrower (op0, &unsigned_arg);
3569
3570	  final_type = result_type;
3571
3572	  if (arg0 == op0 && final_type == TREE_TYPE (op0))
3573	    unsigned_arg = TYPE_UNSIGNED (TREE_TYPE (op0));
3574
3575	  if (TYPE_PRECISION (TREE_TYPE (arg0)) < TYPE_PRECISION (result_type)
3576	      /* We can shorten only if the shift count is less than the
3577		 number of bits in the smaller type size.  */
3578	      && compare_tree_int (op1, TYPE_PRECISION (TREE_TYPE (arg0))) < 0
3579	      /* If arg is sign-extended and then unsigned-shifted,
3580		 we can simulate this with a signed shift in arg's type
3581		 only if the extended result is at least twice as wide
3582		 as the arg.  Otherwise, the shift could use up all the
3583		 ones made by sign-extension and bring in zeros.
3584		 We can't optimize that case at all, but in most machines
3585		 it never happens because available widths are 2**N.  */
3586	      && (!TYPE_UNSIGNED (final_type)
3587		  || unsigned_arg
3588		  || (((unsigned) 2 * TYPE_PRECISION (TREE_TYPE (arg0)))
3589		      <= TYPE_PRECISION (result_type))))
3590	    {
3591	      /* Do an unsigned shift if the operand was zero-extended.  */
3592	      result_type
3593		= c_common_signed_or_unsigned_type (unsigned_arg,
3594						    TREE_TYPE (arg0));
3595	      /* Convert value-to-be-shifted to that type.  */
3596	      if (TREE_TYPE (op0) != result_type)
3597		op0 = cp_convert (result_type, op0);
3598	      converted = 1;
3599	    }
3600	}
3601
3602      /* Comparison operations are shortened too but differently.
3603	 They identify themselves by setting short_compare = 1.  */
3604
3605      if (short_compare)
3606	{
3607	  /* Don't write &op0, etc., because that would prevent op0
3608	     from being kept in a register.
3609	     Instead, make copies of the our local variables and
3610	     pass the copies by reference, then copy them back afterward.  */
3611	  tree xop0 = op0, xop1 = op1, xresult_type = result_type;
3612	  enum tree_code xresultcode = resultcode;
3613	  tree val
3614	    = shorten_compare (&xop0, &xop1, &xresult_type, &xresultcode);
3615	  if (val != 0)
3616	    return cp_convert (boolean_type_node, val);
3617	  op0 = xop0, op1 = xop1;
3618	  converted = 1;
3619	  resultcode = xresultcode;
3620	}
3621
3622      if ((short_compare || code == MIN_EXPR || code == MAX_EXPR)
3623	  && warn_sign_compare
3624	  /* Do not warn until the template is instantiated; we cannot
3625	     bound the ranges of the arguments until that point.  */
3626	  && !processing_template_decl)
3627	{
3628	  int op0_signed = !TYPE_UNSIGNED (TREE_TYPE (orig_op0));
3629	  int op1_signed = !TYPE_UNSIGNED (TREE_TYPE (orig_op1));
3630
3631	  int unsignedp0, unsignedp1;
3632	  tree primop0 = get_narrower (op0, &unsignedp0);
3633	  tree primop1 = get_narrower (op1, &unsignedp1);
3634
3635	  /* Check for comparison of different enum types.  */
3636	  if (TREE_CODE (TREE_TYPE (orig_op0)) == ENUMERAL_TYPE
3637	      && TREE_CODE (TREE_TYPE (orig_op1)) == ENUMERAL_TYPE
3638	      && TYPE_MAIN_VARIANT (TREE_TYPE (orig_op0))
3639		 != TYPE_MAIN_VARIANT (TREE_TYPE (orig_op1)))
3640	    {
3641	      warning (0, "comparison between types %q#T and %q#T",
3642		       TREE_TYPE (orig_op0), TREE_TYPE (orig_op1));
3643	    }
3644
3645	  /* Give warnings for comparisons between signed and unsigned
3646	     quantities that may fail.  */
3647	  /* Do the checking based on the original operand trees, so that
3648	     casts will be considered, but default promotions won't be.  */
3649
3650	  /* Do not warn if the comparison is being done in a signed type,
3651	     since the signed type will only be chosen if it can represent
3652	     all the values of the unsigned type.  */
3653	  if (!TYPE_UNSIGNED (result_type))
3654	    /* OK */;
3655	  /* Do not warn if both operands are unsigned.  */
3656	  else if (op0_signed == op1_signed)
3657	    /* OK */;
3658	  /* Do not warn if the signed quantity is an unsuffixed
3659	     integer literal (or some static constant expression
3660	     involving such literals or a conditional expression
3661	     involving such literals) and it is non-negative.  */
3662	  else if ((op0_signed && tree_expr_nonnegative_p (orig_op0))
3663		   || (op1_signed && tree_expr_nonnegative_p (orig_op1)))
3664	    /* OK */;
3665	  /* Do not warn if the comparison is an equality operation,
3666	     the unsigned quantity is an integral constant and it does
3667	     not use the most significant bit of result_type.  */
3668	  else if ((resultcode == EQ_EXPR || resultcode == NE_EXPR)
3669		   && ((op0_signed && TREE_CODE (orig_op1) == INTEGER_CST
3670			&& int_fits_type_p (orig_op1, c_common_signed_type
3671					    (result_type)))
3672			|| (op1_signed && TREE_CODE (orig_op0) == INTEGER_CST
3673			    && int_fits_type_p (orig_op0, c_common_signed_type
3674						(result_type)))))
3675	    /* OK */;
3676	  else
3677	    warning (0, "comparison between signed and unsigned integer expressions");
3678
3679	  /* Warn if two unsigned values are being compared in a size
3680	     larger than their original size, and one (and only one) is the
3681	     result of a `~' operator.  This comparison will always fail.
3682
3683	     Also warn if one operand is a constant, and the constant does not
3684	     have all bits set that are set in the ~ operand when it is
3685	     extended.  */
3686
3687	  if ((TREE_CODE (primop0) == BIT_NOT_EXPR)
3688	      ^ (TREE_CODE (primop1) == BIT_NOT_EXPR))
3689	    {
3690	      if (TREE_CODE (primop0) == BIT_NOT_EXPR)
3691		primop0 = get_narrower (TREE_OPERAND (op0, 0), &unsignedp0);
3692	      if (TREE_CODE (primop1) == BIT_NOT_EXPR)
3693		primop1 = get_narrower (TREE_OPERAND (op1, 0), &unsignedp1);
3694
3695	      if (host_integerp (primop0, 0) || host_integerp (primop1, 0))
3696		{
3697		  tree primop;
3698		  HOST_WIDE_INT constant, mask;
3699		  int unsignedp;
3700		  unsigned int bits;
3701
3702		  if (host_integerp (primop0, 0))
3703		    {
3704		      primop = primop1;
3705		      unsignedp = unsignedp1;
3706		      constant = tree_low_cst (primop0, 0);
3707		    }
3708		  else
3709		    {
3710		      primop = primop0;
3711		      unsignedp = unsignedp0;
3712		      constant = tree_low_cst (primop1, 0);
3713		    }
3714
3715		  bits = TYPE_PRECISION (TREE_TYPE (primop));
3716		  if (bits < TYPE_PRECISION (result_type)
3717		      && bits < HOST_BITS_PER_LONG && unsignedp)
3718		    {
3719		      mask = (~ (HOST_WIDE_INT) 0) << bits;
3720		      if ((mask & constant) != mask)
3721			warning (0, "comparison of promoted ~unsigned with constant");
3722		    }
3723		}
3724	      else if (unsignedp0 && unsignedp1
3725		       && (TYPE_PRECISION (TREE_TYPE (primop0))
3726			   < TYPE_PRECISION (result_type))
3727		       && (TYPE_PRECISION (TREE_TYPE (primop1))
3728			   < TYPE_PRECISION (result_type)))
3729		warning (0, "comparison of promoted ~unsigned with unsigned");
3730	    }
3731	}
3732    }
3733
3734  /* If CONVERTED is zero, both args will be converted to type RESULT_TYPE.
3735     Then the expression will be built.
3736     It will be given type FINAL_TYPE if that is nonzero;
3737     otherwise, it will be given type RESULT_TYPE.  */
3738
3739  /* Issue warnings about peculiar, but valid, uses of NULL.  */
3740  if (/* It's reasonable to use pointer values as operands of &&
3741	 and ||, so NULL is no exception.  */
3742      !(code == TRUTH_ANDIF_EXPR || code == TRUTH_ORIF_EXPR)
3743      && (/* If OP0 is NULL and OP1 is not a pointer, or vice versa.  */
3744	  (orig_op0 == null_node
3745	   && TREE_CODE (TREE_TYPE (op1)) != POINTER_TYPE)
3746	  /* Or vice versa.  */
3747	  || (orig_op1 == null_node
3748	      && TREE_CODE (TREE_TYPE (op0)) != POINTER_TYPE)
3749	  /* Or, both are NULL and the operation was not a comparison.  */
3750	  || (orig_op0 == null_node && orig_op1 == null_node
3751	      && code != EQ_EXPR && code != NE_EXPR)))
3752    /* Some sort of arithmetic operation involving NULL was
3753       performed.  Note that pointer-difference and pointer-addition
3754       have already been handled above, and so we don't end up here in
3755       that case.  */
3756    warning (0, "NULL used in arithmetic");
3757
3758  if (! converted)
3759    {
3760      if (TREE_TYPE (op0) != result_type)
3761	op0 = cp_convert (result_type, op0);
3762      if (TREE_TYPE (op1) != result_type)
3763	op1 = cp_convert (result_type, op1);
3764
3765      if (op0 == error_mark_node || op1 == error_mark_node)
3766	return error_mark_node;
3767    }
3768
3769  if (build_type == NULL_TREE)
3770    build_type = result_type;
3771
3772  result = build2 (resultcode, build_type, op0, op1);
3773  result = fold_if_not_in_template (result);
3774  if (final_type != 0)
3775    result = cp_convert (final_type, result);
3776
3777  if (TREE_OVERFLOW_P (result)
3778      && !TREE_OVERFLOW_P (op0)
3779      && !TREE_OVERFLOW_P (op1))
3780    overflow_warning (result);
3781
3782  return result;
3783}
3784
3785/* Return a tree for the sum or difference (RESULTCODE says which)
3786   of pointer PTROP and integer INTOP.  */
3787
3788static tree
3789cp_pointer_int_sum (enum tree_code resultcode, tree ptrop, tree intop)
3790{
3791  tree res_type = TREE_TYPE (ptrop);
3792
3793  /* pointer_int_sum() uses size_in_bytes() on the TREE_TYPE(res_type)
3794     in certain circumstance (when it's valid to do so).  So we need
3795     to make sure it's complete.  We don't need to check here, if we
3796     can actually complete it at all, as those checks will be done in
3797     pointer_int_sum() anyway.  */
3798  complete_type (TREE_TYPE (res_type));
3799
3800  return pointer_int_sum (resultcode, ptrop,
3801			  fold_if_not_in_template (intop));
3802}
3803
3804/* Return a tree for the difference of pointers OP0 and OP1.
3805   The resulting tree has type int.  */
3806
3807static tree
3808pointer_diff (tree op0, tree op1, tree ptrtype)
3809{
3810  tree result;
3811  tree restype = ptrdiff_type_node;
3812  tree target_type = TREE_TYPE (ptrtype);
3813
3814  if (!complete_type_or_else (target_type, NULL_TREE))
3815    return error_mark_node;
3816
3817  if (pedantic || warn_pointer_arith)
3818    {
3819      if (TREE_CODE (target_type) == VOID_TYPE)
3820	pedwarn ("ISO C++ forbids using pointer of type %<void *%> in subtraction");
3821      if (TREE_CODE (target_type) == FUNCTION_TYPE)
3822	pedwarn ("ISO C++ forbids using pointer to a function in subtraction");
3823      if (TREE_CODE (target_type) == METHOD_TYPE)
3824	pedwarn ("ISO C++ forbids using pointer to a method in subtraction");
3825    }
3826
3827  /* First do the subtraction as integers;
3828     then drop through to build the divide operator.  */
3829
3830  op0 = cp_build_binary_op (MINUS_EXPR,
3831			    cp_convert (restype, op0),
3832			    cp_convert (restype, op1));
3833
3834  /* This generates an error if op1 is a pointer to an incomplete type.  */
3835  if (!COMPLETE_TYPE_P (TREE_TYPE (TREE_TYPE (op1))))
3836    error ("invalid use of a pointer to an incomplete type in pointer arithmetic");
3837
3838  op1 = (TYPE_PTROB_P (ptrtype)
3839	 ? size_in_bytes (target_type)
3840	 : integer_one_node);
3841
3842  /* Do the division.  */
3843
3844  result = build2 (EXACT_DIV_EXPR, restype, op0, cp_convert (restype, op1));
3845  return fold_if_not_in_template (result);
3846}
3847
3848/* Construct and perhaps optimize a tree representation
3849   for a unary operation.  CODE, a tree_code, specifies the operation
3850   and XARG is the operand.  */
3851
3852tree
3853build_x_unary_op (enum tree_code code, tree xarg)
3854{
3855  tree orig_expr = xarg;
3856  tree exp;
3857  int ptrmem = 0;
3858
3859  if (processing_template_decl)
3860    {
3861      if (type_dependent_expression_p (xarg))
3862	return build_min_nt (code, xarg, NULL_TREE);
3863
3864      xarg = build_non_dependent_expr (xarg);
3865    }
3866
3867  exp = NULL_TREE;
3868
3869  /* [expr.unary.op] says:
3870
3871       The address of an object of incomplete type can be taken.
3872
3873     (And is just the ordinary address operator, not an overloaded
3874     "operator &".)  However, if the type is a template
3875     specialization, we must complete the type at this point so that
3876     an overloaded "operator &" will be available if required.  */
3877  if (code == ADDR_EXPR
3878      && TREE_CODE (xarg) != TEMPLATE_ID_EXPR
3879      && ((CLASS_TYPE_P (TREE_TYPE (xarg))
3880	   && !COMPLETE_TYPE_P (complete_type (TREE_TYPE (xarg))))
3881	  || (TREE_CODE (xarg) == OFFSET_REF)))
3882    /* Don't look for a function.  */;
3883  else
3884    exp = build_new_op (code, LOOKUP_NORMAL, xarg, NULL_TREE, NULL_TREE,
3885			/*overloaded_p=*/NULL);
3886  if (!exp && code == ADDR_EXPR)
3887    {
3888      /*  A pointer to member-function can be formed only by saying
3889	  &X::mf.  */
3890      if (!flag_ms_extensions && TREE_CODE (TREE_TYPE (xarg)) == METHOD_TYPE
3891	  && (TREE_CODE (xarg) != OFFSET_REF || !PTRMEM_OK_P (xarg)))
3892	{
3893	  if (TREE_CODE (xarg) != OFFSET_REF
3894	      || !TYPE_P (TREE_OPERAND (xarg, 0)))
3895	    {
3896	      error ("invalid use of %qE to form a pointer-to-member-function",
3897		     xarg);
3898	      if (TREE_CODE (xarg) != OFFSET_REF)
3899		inform ("  a qualified-id is required");
3900	      return error_mark_node;
3901	    }
3902	  else
3903	    {
3904	      error ("parentheses around %qE cannot be used to form a"
3905		     " pointer-to-member-function",
3906		     xarg);
3907	      PTRMEM_OK_P (xarg) = 1;
3908	    }
3909	}
3910
3911      if (TREE_CODE (xarg) == OFFSET_REF)
3912	{
3913	  ptrmem = PTRMEM_OK_P (xarg);
3914
3915	  if (!ptrmem && !flag_ms_extensions
3916	      && TREE_CODE (TREE_TYPE (TREE_OPERAND (xarg, 1))) == METHOD_TYPE)
3917	    {
3918	      /* A single non-static member, make sure we don't allow a
3919		 pointer-to-member.  */
3920	      xarg = build2 (OFFSET_REF, TREE_TYPE (xarg),
3921			     TREE_OPERAND (xarg, 0),
3922			     ovl_cons (TREE_OPERAND (xarg, 1), NULL_TREE));
3923	      PTRMEM_OK_P (xarg) = ptrmem;
3924	    }
3925	}
3926      else if (TREE_CODE (xarg) == TARGET_EXPR)
3927	warning (0, "taking address of temporary");
3928      exp = build_unary_op (ADDR_EXPR, xarg, 0);
3929    }
3930
3931  if (processing_template_decl && exp != error_mark_node)
3932    exp = build_min_non_dep (code, exp, orig_expr,
3933			     /*For {PRE,POST}{INC,DEC}REMENT_EXPR*/NULL_TREE);
3934  if (TREE_CODE (exp) == ADDR_EXPR)
3935    PTRMEM_OK_P (exp) = ptrmem;
3936  return exp;
3937}
3938
3939/* Like c_common_truthvalue_conversion, but handle pointer-to-member
3940   constants, where a null value is represented by an INTEGER_CST of
3941   -1.  */
3942
3943tree
3944cp_truthvalue_conversion (tree expr)
3945{
3946  tree type = TREE_TYPE (expr);
3947  if (TYPE_PTRMEM_P (type))
3948    return build_binary_op (NE_EXPR, expr, integer_zero_node, 1);
3949  else
3950    return c_common_truthvalue_conversion (expr);
3951}
3952
3953/* Just like cp_truthvalue_conversion, but we want a CLEANUP_POINT_EXPR.  */
3954
3955tree
3956condition_conversion (tree expr)
3957{
3958  tree t;
3959  if (processing_template_decl)
3960    return expr;
3961  t = perform_implicit_conversion (boolean_type_node, expr);
3962  t = fold_build_cleanup_point_expr (boolean_type_node, t);
3963  return t;
3964}
3965
3966/* Return an ADDR_EXPR giving the address of T.  This function
3967   attempts no optimizations or simplifications; it is a low-level
3968   primitive.  */
3969
3970tree
3971build_address (tree t)
3972{
3973  tree addr;
3974
3975  if (error_operand_p (t) || !cxx_mark_addressable (t))
3976    return error_mark_node;
3977
3978  addr = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (t)), t);
3979
3980  return addr;
3981}
3982
3983/* Return a NOP_EXPR converting EXPR to TYPE.  */
3984
3985tree
3986build_nop (tree type, tree expr)
3987{
3988  if (type == error_mark_node || error_operand_p (expr))
3989    return expr;
3990  return build1 (NOP_EXPR, type, expr);
3991}
3992
3993/* C++: Must handle pointers to members.
3994
3995   Perhaps type instantiation should be extended to handle conversion
3996   from aggregates to types we don't yet know we want?  (Or are those
3997   cases typically errors which should be reported?)
3998
3999   NOCONVERT nonzero suppresses the default promotions
4000   (such as from short to int).  */
4001
4002tree
4003build_unary_op (enum tree_code code, tree xarg, int noconvert)
4004{
4005  /* No default_conversion here.  It causes trouble for ADDR_EXPR.  */
4006  tree arg = xarg;
4007  tree argtype = 0;
4008  const char *errstring = NULL;
4009  tree val;
4010  const char *invalid_op_diag;
4011
4012  if (arg == error_mark_node)
4013    return error_mark_node;
4014
4015  if ((invalid_op_diag
4016       = targetm.invalid_unary_op ((code == UNARY_PLUS_EXPR
4017				    ? CONVERT_EXPR
4018				    : code),
4019				   TREE_TYPE (xarg))))
4020    {
4021      error (invalid_op_diag);
4022      return error_mark_node;
4023    }
4024
4025  switch (code)
4026    {
4027    case UNARY_PLUS_EXPR:
4028    case NEGATE_EXPR:
4029      {
4030	int flags = WANT_ARITH | WANT_ENUM;
4031	/* Unary plus (but not unary minus) is allowed on pointers.  */
4032	if (code == UNARY_PLUS_EXPR)
4033	  flags |= WANT_POINTER;
4034	arg = build_expr_type_conversion (flags, arg, true);
4035	if (!arg)
4036	  errstring = (code == NEGATE_EXPR
4037		       ? "wrong type argument to unary minus"
4038		       : "wrong type argument to unary plus");
4039	else
4040	  {
4041	    if (!noconvert && CP_INTEGRAL_TYPE_P (TREE_TYPE (arg)))
4042	      arg = perform_integral_promotions (arg);
4043
4044	    /* Make sure the result is not an lvalue: a unary plus or minus
4045	       expression is always a rvalue.  */
4046	    arg = rvalue (arg);
4047	  }
4048      }
4049      break;
4050
4051    case BIT_NOT_EXPR:
4052      if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
4053	{
4054	  code = CONJ_EXPR;
4055	  if (!noconvert)
4056	    arg = default_conversion (arg);
4057	}
4058      else if (!(arg = build_expr_type_conversion (WANT_INT | WANT_ENUM
4059						   | WANT_VECTOR,
4060						   arg, true)))
4061	errstring = "wrong type argument to bit-complement";
4062      else if (!noconvert && CP_INTEGRAL_TYPE_P (TREE_TYPE (arg)))
4063	arg = perform_integral_promotions (arg);
4064      break;
4065
4066    case ABS_EXPR:
4067      if (!(arg = build_expr_type_conversion (WANT_ARITH | WANT_ENUM, arg, true)))
4068	errstring = "wrong type argument to abs";
4069      else if (!noconvert)
4070	arg = default_conversion (arg);
4071      break;
4072
4073    case CONJ_EXPR:
4074      /* Conjugating a real value is a no-op, but allow it anyway.  */
4075      if (!(arg = build_expr_type_conversion (WANT_ARITH | WANT_ENUM, arg, true)))
4076	errstring = "wrong type argument to conjugation";
4077      else if (!noconvert)
4078	arg = default_conversion (arg);
4079      break;
4080
4081    case TRUTH_NOT_EXPR:
4082      arg = perform_implicit_conversion (boolean_type_node, arg);
4083      val = invert_truthvalue (arg);
4084      if (arg != error_mark_node)
4085	return val;
4086      errstring = "in argument to unary !";
4087      break;
4088
4089    case NOP_EXPR:
4090      break;
4091
4092    case REALPART_EXPR:
4093      if (TREE_CODE (arg) == COMPLEX_CST)
4094	return TREE_REALPART (arg);
4095      else if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
4096	{
4097	  arg = build1 (REALPART_EXPR, TREE_TYPE (TREE_TYPE (arg)), arg);
4098	  return fold_if_not_in_template (arg);
4099	}
4100      else
4101	return arg;
4102
4103    case IMAGPART_EXPR:
4104      if (TREE_CODE (arg) == COMPLEX_CST)
4105	return TREE_IMAGPART (arg);
4106      else if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
4107	{
4108	  arg = build1 (IMAGPART_EXPR, TREE_TYPE (TREE_TYPE (arg)), arg);
4109	  return fold_if_not_in_template (arg);
4110	}
4111      else
4112	return cp_convert (TREE_TYPE (arg), integer_zero_node);
4113
4114    case PREINCREMENT_EXPR:
4115    case POSTINCREMENT_EXPR:
4116    case PREDECREMENT_EXPR:
4117    case POSTDECREMENT_EXPR:
4118      /* Handle complex lvalues (when permitted)
4119	 by reduction to simpler cases.  */
4120
4121      val = unary_complex_lvalue (code, arg);
4122      if (val != 0)
4123	return val;
4124
4125      /* Increment or decrement the real part of the value,
4126	 and don't change the imaginary part.  */
4127      if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
4128	{
4129	  tree real, imag;
4130
4131	  arg = stabilize_reference (arg);
4132	  real = build_unary_op (REALPART_EXPR, arg, 1);
4133	  imag = build_unary_op (IMAGPART_EXPR, arg, 1);
4134	  return build2 (COMPLEX_EXPR, TREE_TYPE (arg),
4135			 build_unary_op (code, real, 1), imag);
4136	}
4137
4138      /* Report invalid types.  */
4139
4140      if (!(arg = build_expr_type_conversion (WANT_ARITH | WANT_POINTER,
4141					      arg, true)))
4142	{
4143	  if (code == PREINCREMENT_EXPR)
4144	    errstring ="no pre-increment operator for type";
4145	  else if (code == POSTINCREMENT_EXPR)
4146	    errstring ="no post-increment operator for type";
4147	  else if (code == PREDECREMENT_EXPR)
4148	    errstring ="no pre-decrement operator for type";
4149	  else
4150	    errstring ="no post-decrement operator for type";
4151	  break;
4152	}
4153
4154      /* Report something read-only.  */
4155
4156      if (CP_TYPE_CONST_P (TREE_TYPE (arg))
4157	  || TREE_READONLY (arg))
4158	readonly_error (arg, ((code == PREINCREMENT_EXPR
4159			       || code == POSTINCREMENT_EXPR)
4160			      ? "increment" : "decrement"),
4161			0);
4162
4163      {
4164	tree inc;
4165	tree declared_type;
4166	tree result_type = TREE_TYPE (arg);
4167
4168	declared_type = unlowered_expr_type (arg);
4169
4170	arg = get_unwidened (arg, 0);
4171	argtype = TREE_TYPE (arg);
4172
4173	/* ARM $5.2.5 last annotation says this should be forbidden.  */
4174	if (TREE_CODE (argtype) == ENUMERAL_TYPE)
4175	  pedwarn ("ISO C++ forbids %sing an enum",
4176		   (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR)
4177		   ? "increment" : "decrement");
4178
4179	/* Compute the increment.  */
4180
4181	if (TREE_CODE (argtype) == POINTER_TYPE)
4182	  {
4183	    tree type = complete_type (TREE_TYPE (argtype));
4184
4185	    if (!COMPLETE_OR_VOID_TYPE_P (type))
4186	      error ("cannot %s a pointer to incomplete type %qT",
4187		     ((code == PREINCREMENT_EXPR
4188		       || code == POSTINCREMENT_EXPR)
4189		      ? "increment" : "decrement"), TREE_TYPE (argtype));
4190	    else if ((pedantic || warn_pointer_arith)
4191		     && !TYPE_PTROB_P (argtype))
4192	      pedwarn ("ISO C++ forbids %sing a pointer of type %qT",
4193		       ((code == PREINCREMENT_EXPR
4194			 || code == POSTINCREMENT_EXPR)
4195			? "increment" : "decrement"), argtype);
4196	    inc = cxx_sizeof_nowarn (TREE_TYPE (argtype));
4197	  }
4198	else
4199	  inc = integer_one_node;
4200
4201	inc = cp_convert (argtype, inc);
4202
4203	/* Handle incrementing a cast-expression.  */
4204
4205	switch (TREE_CODE (arg))
4206	  {
4207	  case NOP_EXPR:
4208	  case CONVERT_EXPR:
4209	  case FLOAT_EXPR:
4210	  case FIX_TRUNC_EXPR:
4211	  case FIX_FLOOR_EXPR:
4212	  case FIX_ROUND_EXPR:
4213	  case FIX_CEIL_EXPR:
4214	    {
4215	      tree incremented, modify, value, compound;
4216	      if (! lvalue_p (arg) && pedantic)
4217		pedwarn ("cast to non-reference type used as lvalue");
4218	      arg = stabilize_reference (arg);
4219	      if (code == PREINCREMENT_EXPR || code == PREDECREMENT_EXPR)
4220		value = arg;
4221	      else
4222		value = save_expr (arg);
4223	      incremented = build2 (((code == PREINCREMENT_EXPR
4224				      || code == POSTINCREMENT_EXPR)
4225				     ? PLUS_EXPR : MINUS_EXPR),
4226				    argtype, value, inc);
4227
4228	      modify = build_modify_expr (arg, NOP_EXPR, incremented);
4229	      compound = build2 (COMPOUND_EXPR, TREE_TYPE (arg),
4230				 modify, value);
4231
4232	      /* Eliminate warning about unused result of + or -.  */
4233	      TREE_NO_WARNING (compound) = 1;
4234	      return compound;
4235	    }
4236
4237	  default:
4238	    break;
4239	  }
4240
4241	/* Complain about anything else that is not a true lvalue.  */
4242	if (!lvalue_or_else (arg, ((code == PREINCREMENT_EXPR
4243				    || code == POSTINCREMENT_EXPR)
4244				   ? lv_increment : lv_decrement)))
4245	  return error_mark_node;
4246
4247	/* Forbid using -- on `bool'.  */
4248	if (same_type_p (declared_type, boolean_type_node))
4249	  {
4250	    if (code == POSTDECREMENT_EXPR || code == PREDECREMENT_EXPR)
4251	      {
4252		error ("invalid use of %<--%> on bool variable %qD", arg);
4253		return error_mark_node;
4254	      }
4255	    val = boolean_increment (code, arg);
4256	  }
4257	else
4258	  val = build2 (code, TREE_TYPE (arg), arg, inc);
4259
4260	TREE_SIDE_EFFECTS (val) = 1;
4261	return cp_convert (result_type, val);
4262      }
4263
4264    case ADDR_EXPR:
4265      /* Note that this operation never does default_conversion
4266	 regardless of NOCONVERT.  */
4267
4268      argtype = lvalue_type (arg);
4269
4270      if (TREE_CODE (arg) == OFFSET_REF)
4271	goto offset_ref;
4272
4273      if (TREE_CODE (argtype) == REFERENCE_TYPE)
4274	{
4275	  tree type = build_pointer_type (TREE_TYPE (argtype));
4276	  arg = build1 (CONVERT_EXPR, type, arg);
4277	  return arg;
4278	}
4279      else if (pedantic && DECL_MAIN_P (arg))
4280	/* ARM $3.4 */
4281	pedwarn ("ISO C++ forbids taking address of function %<::main%>");
4282
4283      /* Let &* cancel out to simplify resulting code.  */
4284      if (TREE_CODE (arg) == INDIRECT_REF)
4285	{
4286	  /* We don't need to have `current_class_ptr' wrapped in a
4287	     NON_LVALUE_EXPR node.  */
4288	  if (arg == current_class_ref)
4289	    return current_class_ptr;
4290
4291	  arg = TREE_OPERAND (arg, 0);
4292	  if (TREE_CODE (TREE_TYPE (arg)) == REFERENCE_TYPE)
4293	    {
4294	      tree type = build_pointer_type (TREE_TYPE (TREE_TYPE (arg)));
4295	      arg = build1 (CONVERT_EXPR, type, arg);
4296	    }
4297	  else
4298	    /* Don't let this be an lvalue.  */
4299	    arg = rvalue (arg);
4300	  return arg;
4301	}
4302
4303      /* Uninstantiated types are all functions.  Taking the
4304	 address of a function is a no-op, so just return the
4305	 argument.  */
4306
4307      gcc_assert (TREE_CODE (arg) != IDENTIFIER_NODE
4308		  || !IDENTIFIER_OPNAME_P (arg));
4309
4310      if (TREE_CODE (arg) == COMPONENT_REF && type_unknown_p (arg)
4311	  && !really_overloaded_fn (TREE_OPERAND (arg, 1)))
4312	{
4313	  /* They're trying to take the address of a unique non-static
4314	     member function.  This is ill-formed (except in MS-land),
4315	     but let's try to DTRT.
4316	     Note: We only handle unique functions here because we don't
4317	     want to complain if there's a static overload; non-unique
4318	     cases will be handled by instantiate_type.  But we need to
4319	     handle this case here to allow casts on the resulting PMF.
4320	     We could defer this in non-MS mode, but it's easier to give
4321	     a useful error here.  */
4322
4323	  /* Inside constant member functions, the `this' pointer
4324	     contains an extra const qualifier.  TYPE_MAIN_VARIANT
4325	     is used here to remove this const from the diagnostics
4326	     and the created OFFSET_REF.  */
4327	  tree base = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (arg, 0)));
4328	  tree fn = get_first_fn (TREE_OPERAND (arg, 1));
4329	  mark_used (fn);
4330
4331	  if (! flag_ms_extensions)
4332	    {
4333	      tree name = DECL_NAME (fn);
4334	      if (current_class_type
4335		  && TREE_OPERAND (arg, 0) == current_class_ref)
4336		/* An expression like &memfn.  */
4337		pedwarn ("ISO C++ forbids taking the address of an unqualified"
4338			 " or parenthesized non-static member function to form"
4339			 " a pointer to member function.  Say %<&%T::%D%>",
4340			 base, name);
4341	      else
4342		pedwarn ("ISO C++ forbids taking the address of a bound member"
4343			 " function to form a pointer to member function."
4344			 "  Say %<&%T::%D%>",
4345			 base, name);
4346	    }
4347	  arg = build_offset_ref (base, fn, /*address_p=*/true);
4348	}
4349
4350    offset_ref:
4351      if (type_unknown_p (arg))
4352	return build1 (ADDR_EXPR, unknown_type_node, arg);
4353
4354      /* Handle complex lvalues (when permitted)
4355	 by reduction to simpler cases.  */
4356      val = unary_complex_lvalue (code, arg);
4357      if (val != 0)
4358	return val;
4359
4360      switch (TREE_CODE (arg))
4361	{
4362	case NOP_EXPR:
4363	case CONVERT_EXPR:
4364	case FLOAT_EXPR:
4365	case FIX_TRUNC_EXPR:
4366	case FIX_FLOOR_EXPR:
4367	case FIX_ROUND_EXPR:
4368	case FIX_CEIL_EXPR:
4369	  if (! lvalue_p (arg) && pedantic)
4370	    pedwarn ("ISO C++ forbids taking the address of a cast to a non-lvalue expression");
4371	  break;
4372
4373	case BASELINK:
4374	  arg = BASELINK_FUNCTIONS (arg);
4375	  /* Fall through.  */
4376
4377	case OVERLOAD:
4378	  arg = OVL_CURRENT (arg);
4379	  break;
4380
4381	case OFFSET_REF:
4382	  /* Turn a reference to a non-static data member into a
4383	     pointer-to-member.  */
4384	  {
4385	    tree type;
4386	    tree t;
4387
4388	    if (!PTRMEM_OK_P (arg))
4389	      return build_unary_op (code, arg, 0);
4390
4391	    t = TREE_OPERAND (arg, 1);
4392	    if (TREE_CODE (TREE_TYPE (t)) == REFERENCE_TYPE)
4393	      {
4394		error ("cannot create pointer to reference member %qD", t);
4395		return error_mark_node;
4396	      }
4397
4398	    type = build_ptrmem_type (context_for_name_lookup (t),
4399				      TREE_TYPE (t));
4400	    t = make_ptrmem_cst (type, TREE_OPERAND (arg, 1));
4401	    return t;
4402	  }
4403
4404	default:
4405	  break;
4406	}
4407
4408      /* Anything not already handled and not a true memory reference
4409	 is an error.  */
4410      if (TREE_CODE (argtype) != FUNCTION_TYPE
4411	  && TREE_CODE (argtype) != METHOD_TYPE
4412	  && TREE_CODE (arg) != OFFSET_REF
4413	  && !lvalue_or_else (arg, lv_addressof))
4414	return error_mark_node;
4415
4416      if (argtype != error_mark_node)
4417	argtype = build_pointer_type (argtype);
4418
4419      /* In a template, we are processing a non-dependent expression
4420	 so we can just form an ADDR_EXPR with the correct type.  */
4421      if (processing_template_decl)
4422	{
4423	  val = build_address (arg);
4424	  if (TREE_CODE (arg) == OFFSET_REF)
4425	    PTRMEM_OK_P (val) = PTRMEM_OK_P (arg);
4426	  return val;
4427	}
4428
4429      if (TREE_CODE (arg) != COMPONENT_REF)
4430	{
4431	  val = build_address (arg);
4432	  if (TREE_CODE (arg) == OFFSET_REF)
4433	    PTRMEM_OK_P (val) = PTRMEM_OK_P (arg);
4434	}
4435      else if (TREE_CODE (TREE_OPERAND (arg, 1)) == BASELINK)
4436	{
4437	  tree fn = BASELINK_FUNCTIONS (TREE_OPERAND (arg, 1));
4438
4439	  /* We can only get here with a single static member
4440	     function.  */
4441	  gcc_assert (TREE_CODE (fn) == FUNCTION_DECL
4442		      && DECL_STATIC_FUNCTION_P (fn));
4443	  mark_used (fn);
4444	  val = build_address (fn);
4445	  if (TREE_SIDE_EFFECTS (TREE_OPERAND (arg, 0)))
4446	    /* Do not lose object's side effects.  */
4447	    val = build2 (COMPOUND_EXPR, TREE_TYPE (val),
4448			  TREE_OPERAND (arg, 0), val);
4449	}
4450      else if (DECL_C_BIT_FIELD (TREE_OPERAND (arg, 1)))
4451	{
4452	  error ("attempt to take address of bit-field structure member %qD",
4453		 TREE_OPERAND (arg, 1));
4454	  return error_mark_node;
4455	}
4456      else
4457	{
4458	  tree object = TREE_OPERAND (arg, 0);
4459	  tree field = TREE_OPERAND (arg, 1);
4460	  gcc_assert (same_type_ignoring_top_level_qualifiers_p
4461		      (TREE_TYPE (object), decl_type_context (field)));
4462	  val = build_address (arg);
4463	}
4464
4465      if (TREE_CODE (argtype) == POINTER_TYPE
4466	  && TREE_CODE (TREE_TYPE (argtype)) == METHOD_TYPE)
4467	{
4468	  build_ptrmemfunc_type (argtype);
4469	  val = build_ptrmemfunc (argtype, val, 0,
4470				  /*c_cast_p=*/false);
4471	}
4472
4473      return val;
4474
4475    default:
4476      break;
4477    }
4478
4479  if (!errstring)
4480    {
4481      if (argtype == 0)
4482	argtype = TREE_TYPE (arg);
4483      return fold_if_not_in_template (build1 (code, argtype, arg));
4484    }
4485
4486  error ("%s", errstring);
4487  return error_mark_node;
4488}
4489
4490/* Apply unary lvalue-demanding operator CODE to the expression ARG
4491   for certain kinds of expressions which are not really lvalues
4492   but which we can accept as lvalues.
4493
4494   If ARG is not a kind of expression we can handle, return
4495   NULL_TREE.  */
4496
4497tree
4498unary_complex_lvalue (enum tree_code code, tree arg)
4499{
4500  /* Inside a template, making these kinds of adjustments is
4501     pointless; we are only concerned with the type of the
4502     expression.  */
4503  if (processing_template_decl)
4504    return NULL_TREE;
4505
4506  /* Handle (a, b) used as an "lvalue".  */
4507  if (TREE_CODE (arg) == COMPOUND_EXPR)
4508    {
4509      tree real_result = build_unary_op (code, TREE_OPERAND (arg, 1), 0);
4510      return build2 (COMPOUND_EXPR, TREE_TYPE (real_result),
4511		     TREE_OPERAND (arg, 0), real_result);
4512    }
4513
4514  /* Handle (a ? b : c) used as an "lvalue".  */
4515  if (TREE_CODE (arg) == COND_EXPR
4516      || TREE_CODE (arg) == MIN_EXPR || TREE_CODE (arg) == MAX_EXPR)
4517    return rationalize_conditional_expr (code, arg);
4518
4519  /* Handle (a = b), (++a), and (--a) used as an "lvalue".  */
4520  if (TREE_CODE (arg) == MODIFY_EXPR
4521      || TREE_CODE (arg) == PREINCREMENT_EXPR
4522      || TREE_CODE (arg) == PREDECREMENT_EXPR)
4523    {
4524      tree lvalue = TREE_OPERAND (arg, 0);
4525      if (TREE_SIDE_EFFECTS (lvalue))
4526	{
4527	  lvalue = stabilize_reference (lvalue);
4528	  arg = build2 (TREE_CODE (arg), TREE_TYPE (arg),
4529			lvalue, TREE_OPERAND (arg, 1));
4530	}
4531      return unary_complex_lvalue
4532	(code, build2 (COMPOUND_EXPR, TREE_TYPE (lvalue), arg, lvalue));
4533    }
4534
4535  if (code != ADDR_EXPR)
4536    return NULL_TREE;
4537
4538  /* Handle (a = b) used as an "lvalue" for `&'.  */
4539  if (TREE_CODE (arg) == MODIFY_EXPR
4540      || TREE_CODE (arg) == INIT_EXPR)
4541    {
4542      tree real_result = build_unary_op (code, TREE_OPERAND (arg, 0), 0);
4543      arg = build2 (COMPOUND_EXPR, TREE_TYPE (real_result),
4544		    arg, real_result);
4545      TREE_NO_WARNING (arg) = 1;
4546      return arg;
4547    }
4548
4549  if (TREE_CODE (TREE_TYPE (arg)) == FUNCTION_TYPE
4550      || TREE_CODE (TREE_TYPE (arg)) == METHOD_TYPE
4551      || TREE_CODE (arg) == OFFSET_REF)
4552    return NULL_TREE;
4553
4554  /* We permit compiler to make function calls returning
4555     objects of aggregate type look like lvalues.  */
4556  {
4557    tree targ = arg;
4558
4559    if (TREE_CODE (targ) == SAVE_EXPR)
4560      targ = TREE_OPERAND (targ, 0);
4561
4562    if (TREE_CODE (targ) == CALL_EXPR && IS_AGGR_TYPE (TREE_TYPE (targ)))
4563      {
4564	if (TREE_CODE (arg) == SAVE_EXPR)
4565	  targ = arg;
4566	else
4567	  targ = build_cplus_new (TREE_TYPE (arg), arg);
4568	return build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (arg)), targ);
4569      }
4570
4571    if (TREE_CODE (arg) == SAVE_EXPR && TREE_CODE (targ) == INDIRECT_REF)
4572      return build3 (SAVE_EXPR, build_pointer_type (TREE_TYPE (arg)),
4573		     TREE_OPERAND (targ, 0), current_function_decl, NULL);
4574  }
4575
4576  /* Don't let anything else be handled specially.  */
4577  return NULL_TREE;
4578}
4579
4580/* Mark EXP saying that we need to be able to take the
4581   address of it; it should not be allocated in a register.
4582   Value is true if successful.
4583
4584   C++: we do not allow `current_class_ptr' to be addressable.  */
4585
4586bool
4587cxx_mark_addressable (tree exp)
4588{
4589  tree x = exp;
4590
4591  while (1)
4592    switch (TREE_CODE (x))
4593      {
4594      case ADDR_EXPR:
4595      case COMPONENT_REF:
4596      case ARRAY_REF:
4597      case REALPART_EXPR:
4598      case IMAGPART_EXPR:
4599	x = TREE_OPERAND (x, 0);
4600	break;
4601
4602      case PARM_DECL:
4603	if (x == current_class_ptr)
4604	  {
4605	    error ("cannot take the address of %<this%>, which is an rvalue expression");
4606	    TREE_ADDRESSABLE (x) = 1; /* so compiler doesn't die later.  */
4607	    return true;
4608	  }
4609	/* Fall through.  */
4610
4611      case VAR_DECL:
4612	/* Caller should not be trying to mark initialized
4613	   constant fields addressable.  */
4614	gcc_assert (DECL_LANG_SPECIFIC (x) == 0
4615		    || DECL_IN_AGGR_P (x) == 0
4616		    || TREE_STATIC (x)
4617		    || DECL_EXTERNAL (x));
4618	/* Fall through.  */
4619
4620      case CONST_DECL:
4621      case RESULT_DECL:
4622	if (DECL_REGISTER (x) && !TREE_ADDRESSABLE (x)
4623	    && !DECL_ARTIFICIAL (x))
4624	  {
4625	    if (TREE_CODE (x) == VAR_DECL && DECL_HARD_REGISTER (x))
4626	      {
4627		error
4628		  ("address of explicit register variable %qD requested", x);
4629		return false;
4630	      }
4631	    else if (extra_warnings)
4632	      warning
4633		(OPT_Wextra, "address requested for %qD, which is declared %<register%>", x);
4634	  }
4635	TREE_ADDRESSABLE (x) = 1;
4636	return true;
4637
4638      case FUNCTION_DECL:
4639	TREE_ADDRESSABLE (x) = 1;
4640	return true;
4641
4642      case CONSTRUCTOR:
4643	TREE_ADDRESSABLE (x) = 1;
4644	return true;
4645
4646      case TARGET_EXPR:
4647	TREE_ADDRESSABLE (x) = 1;
4648	cxx_mark_addressable (TREE_OPERAND (x, 0));
4649	return true;
4650
4651      default:
4652	return true;
4653    }
4654}
4655
4656/* Build and return a conditional expression IFEXP ? OP1 : OP2.  */
4657
4658tree
4659build_x_conditional_expr (tree ifexp, tree op1, tree op2)
4660{
4661  tree orig_ifexp = ifexp;
4662  tree orig_op1 = op1;
4663  tree orig_op2 = op2;
4664  tree expr;
4665
4666  if (processing_template_decl)
4667    {
4668      /* The standard says that the expression is type-dependent if
4669	 IFEXP is type-dependent, even though the eventual type of the
4670	 expression doesn't dependent on IFEXP.  */
4671      if (type_dependent_expression_p (ifexp)
4672	  /* As a GNU extension, the middle operand may be omitted.  */
4673	  || (op1 && type_dependent_expression_p (op1))
4674	  || type_dependent_expression_p (op2))
4675	return build_min_nt (COND_EXPR, ifexp, op1, op2);
4676      ifexp = build_non_dependent_expr (ifexp);
4677      if (op1)
4678	op1 = build_non_dependent_expr (op1);
4679      op2 = build_non_dependent_expr (op2);
4680    }
4681
4682  expr = build_conditional_expr (ifexp, op1, op2);
4683  if (processing_template_decl && expr != error_mark_node)
4684    return build_min_non_dep (COND_EXPR, expr,
4685			      orig_ifexp, orig_op1, orig_op2);
4686  return expr;
4687}
4688
4689/* Given a list of expressions, return a compound expression
4690   that performs them all and returns the value of the last of them.  */
4691
4692tree build_x_compound_expr_from_list (tree list, const char *msg)
4693{
4694  tree expr = TREE_VALUE (list);
4695
4696  if (TREE_CHAIN (list))
4697    {
4698      if (msg)
4699	pedwarn ("%s expression list treated as compound expression", msg);
4700
4701      for (list = TREE_CHAIN (list); list; list = TREE_CHAIN (list))
4702	expr = build_x_compound_expr (expr, TREE_VALUE (list));
4703    }
4704
4705  return expr;
4706}
4707
4708/* Handle overloading of the ',' operator when needed.  */
4709
4710tree
4711build_x_compound_expr (tree op1, tree op2)
4712{
4713  tree result;
4714  tree orig_op1 = op1;
4715  tree orig_op2 = op2;
4716
4717  if (processing_template_decl)
4718    {
4719      if (type_dependent_expression_p (op1)
4720	  || type_dependent_expression_p (op2))
4721	return build_min_nt (COMPOUND_EXPR, op1, op2);
4722      op1 = build_non_dependent_expr (op1);
4723      op2 = build_non_dependent_expr (op2);
4724    }
4725
4726  result = build_new_op (COMPOUND_EXPR, LOOKUP_NORMAL, op1, op2, NULL_TREE,
4727			 /*overloaded_p=*/NULL);
4728  if (!result)
4729    result = build_compound_expr (op1, op2);
4730
4731  if (processing_template_decl && result != error_mark_node)
4732    return build_min_non_dep (COMPOUND_EXPR, result, orig_op1, orig_op2);
4733
4734  return result;
4735}
4736
4737/* Build a compound expression.  */
4738
4739tree
4740build_compound_expr (tree lhs, tree rhs)
4741{
4742  lhs = convert_to_void (lhs, "left-hand operand of comma");
4743
4744  if (lhs == error_mark_node || rhs == error_mark_node)
4745    return error_mark_node;
4746
4747  if (TREE_CODE (rhs) == TARGET_EXPR)
4748    {
4749      /* If the rhs is a TARGET_EXPR, then build the compound
4750	 expression inside the target_expr's initializer. This
4751	 helps the compiler to eliminate unnecessary temporaries.  */
4752      tree init = TREE_OPERAND (rhs, 1);
4753
4754      init = build2 (COMPOUND_EXPR, TREE_TYPE (init), lhs, init);
4755      TREE_OPERAND (rhs, 1) = init;
4756
4757      return rhs;
4758    }
4759
4760  return build2 (COMPOUND_EXPR, TREE_TYPE (rhs), lhs, rhs);
4761}
4762
4763/* Issue a diagnostic message if casting from SRC_TYPE to DEST_TYPE
4764   casts away constness.  DIAG_FN gives the function to call if we
4765   need to issue a diagnostic; if it is NULL, no diagnostic will be
4766   issued.  DESCRIPTION explains what operation is taking place.  */
4767
4768static void
4769check_for_casting_away_constness (tree src_type, tree dest_type,
4770				  void (*diag_fn)(const char *, ...) ATTRIBUTE_GCC_CXXDIAG(1,2),
4771				  const char *description)
4772{
4773  if (diag_fn && casts_away_constness (src_type, dest_type))
4774    diag_fn ("%s from type %qT to type %qT casts away constness",
4775	     description, src_type, dest_type);
4776}
4777
4778/* Convert EXPR (an expression with pointer-to-member type) to TYPE
4779   (another pointer-to-member type in the same hierarchy) and return
4780   the converted expression.  If ALLOW_INVERSE_P is permitted, a
4781   pointer-to-derived may be converted to pointer-to-base; otherwise,
4782   only the other direction is permitted.  If C_CAST_P is true, this
4783   conversion is taking place as part of a C-style cast.  */
4784
4785tree
4786convert_ptrmem (tree type, tree expr, bool allow_inverse_p,
4787		bool c_cast_p)
4788{
4789  if (TYPE_PTRMEM_P (type))
4790    {
4791      tree delta;
4792
4793      if (TREE_CODE (expr) == PTRMEM_CST)
4794	expr = cplus_expand_constant (expr);
4795      delta = get_delta_difference (TYPE_PTRMEM_CLASS_TYPE (TREE_TYPE (expr)),
4796				    TYPE_PTRMEM_CLASS_TYPE (type),
4797				    allow_inverse_p,
4798				    c_cast_p);
4799      if (!integer_zerop (delta))
4800	expr = cp_build_binary_op (PLUS_EXPR,
4801				   build_nop (ptrdiff_type_node, expr),
4802				   delta);
4803      return build_nop (type, expr);
4804    }
4805  else
4806    return build_ptrmemfunc (TYPE_PTRMEMFUNC_FN_TYPE (type), expr,
4807			     allow_inverse_p, c_cast_p);
4808}
4809
4810/* If EXPR is an INTEGER_CST and ORIG is an arithmetic constant, return
4811   a version of EXPR that has TREE_OVERFLOW and/or TREE_CONSTANT_OVERFLOW
4812   set iff they are set in ORIG.  Otherwise, return EXPR unchanged.  */
4813
4814static tree
4815ignore_overflows (tree expr, tree orig)
4816{
4817  if (TREE_CODE (expr) == INTEGER_CST
4818      && CONSTANT_CLASS_P (orig)
4819      && TREE_CODE (orig) != STRING_CST
4820      && (TREE_OVERFLOW (expr) != TREE_OVERFLOW (orig)
4821	  || TREE_CONSTANT_OVERFLOW (expr)
4822	     != TREE_CONSTANT_OVERFLOW (orig)))
4823    {
4824      if (!TREE_OVERFLOW (orig) && !TREE_CONSTANT_OVERFLOW (orig))
4825	/* Ensure constant sharing.  */
4826	expr = build_int_cst_wide (TREE_TYPE (expr),
4827				   TREE_INT_CST_LOW (expr),
4828				   TREE_INT_CST_HIGH (expr));
4829      else
4830	{
4831	  /* Avoid clobbering a shared constant.  */
4832	  expr = copy_node (expr);
4833	  TREE_OVERFLOW (expr) = TREE_OVERFLOW (orig);
4834	  TREE_CONSTANT_OVERFLOW (expr)
4835	    = TREE_CONSTANT_OVERFLOW (orig);
4836	}
4837    }
4838  return expr;
4839}
4840
4841/* Perform a static_cast from EXPR to TYPE.  When C_CAST_P is true,
4842   this static_cast is being attempted as one of the possible casts
4843   allowed by a C-style cast.  (In that case, accessibility of base
4844   classes is not considered, and it is OK to cast away
4845   constness.)  Return the result of the cast.  *VALID_P is set to
4846   indicate whether or not the cast was valid.  */
4847
4848static tree
4849build_static_cast_1 (tree type, tree expr, bool c_cast_p,
4850		     bool *valid_p)
4851{
4852  tree intype;
4853  tree result;
4854  tree orig;
4855  void (*diag_fn)(const char*, ...) ATTRIBUTE_GCC_CXXDIAG(1,2);
4856  const char *desc;
4857
4858  /* Assume the cast is valid.  */
4859  *valid_p = true;
4860
4861  intype = TREE_TYPE (expr);
4862
4863  /* Save casted types in the function's used types hash table.  */
4864  used_types_insert (type);
4865
4866  /* Determine what to do when casting away constness.  */
4867  if (c_cast_p)
4868    {
4869      /* C-style casts are allowed to cast away constness.  With
4870	 WARN_CAST_QUAL, we still want to issue a warning.  */
4871      diag_fn = warn_cast_qual ? warning0 : NULL;
4872      desc = "cast";
4873    }
4874  else
4875    {
4876      /* A static_cast may not cast away constness.  */
4877      diag_fn = error;
4878      desc = "static_cast";
4879    }
4880
4881  /* [expr.static.cast]
4882
4883     An lvalue of type "cv1 B", where B is a class type, can be cast
4884     to type "reference to cv2 D", where D is a class derived (clause
4885     _class.derived_) from B, if a valid standard conversion from
4886     "pointer to D" to "pointer to B" exists (_conv.ptr_), cv2 is the
4887     same cv-qualification as, or greater cv-qualification than, cv1,
4888     and B is not a virtual base class of D.  */
4889  /* We check this case before checking the validity of "TYPE t =
4890     EXPR;" below because for this case:
4891
4892       struct B {};
4893       struct D : public B { D(const B&); };
4894       extern B& b;
4895       void f() { static_cast<const D&>(b); }
4896
4897     we want to avoid constructing a new D.  The standard is not
4898     completely clear about this issue, but our interpretation is
4899     consistent with other compilers.  */
4900  if (TREE_CODE (type) == REFERENCE_TYPE
4901      && CLASS_TYPE_P (TREE_TYPE (type))
4902      && CLASS_TYPE_P (intype)
4903      && real_lvalue_p (expr)
4904      && DERIVED_FROM_P (intype, TREE_TYPE (type))
4905      && can_convert (build_pointer_type (TYPE_MAIN_VARIANT (intype)),
4906		      build_pointer_type (TYPE_MAIN_VARIANT
4907					  (TREE_TYPE (type))))
4908      && (c_cast_p
4909	  || at_least_as_qualified_p (TREE_TYPE (type), intype)))
4910    {
4911      tree base;
4912
4913      /* There is a standard conversion from "D*" to "B*" even if "B"
4914	 is ambiguous or inaccessible.  If this is really a
4915	 static_cast, then we check both for inaccessibility and
4916	 ambiguity.  However, if this is a static_cast being performed
4917	 because the user wrote a C-style cast, then accessibility is
4918	 not considered.  */
4919      base = lookup_base (TREE_TYPE (type), intype,
4920			  c_cast_p ? ba_unique : ba_check,
4921			  NULL);
4922
4923      /* Convert from "B*" to "D*".  This function will check that "B"
4924	 is not a virtual base of "D".  */
4925      expr = build_base_path (MINUS_EXPR, build_address (expr),
4926			      base, /*nonnull=*/false);
4927      /* Convert the pointer to a reference -- but then remember that
4928	 there are no expressions with reference type in C++.  */
4929      return convert_from_reference (build_nop (type, expr));
4930    }
4931
4932  orig = expr;
4933
4934  /* [expr.static.cast]
4935
4936     An expression e can be explicitly converted to a type T using a
4937     static_cast of the form static_cast<T>(e) if the declaration T
4938     t(e);" is well-formed, for some invented temporary variable
4939     t.  */
4940  result = perform_direct_initialization_if_possible (type, expr,
4941						      c_cast_p);
4942  if (result)
4943    {
4944      result = convert_from_reference (result);
4945
4946      /* Ignore any integer overflow caused by the cast.  */
4947      result = ignore_overflows (result, orig);
4948
4949      /* [expr.static.cast]
4950
4951	 If T is a reference type, the result is an lvalue; otherwise,
4952	 the result is an rvalue.  */
4953      if (TREE_CODE (type) != REFERENCE_TYPE)
4954	result = rvalue (result);
4955      return result;
4956    }
4957
4958  /* [expr.static.cast]
4959
4960     Any expression can be explicitly converted to type cv void.  */
4961  if (TREE_CODE (type) == VOID_TYPE)
4962    return convert_to_void (expr, /*implicit=*/NULL);
4963
4964  /* [expr.static.cast]
4965
4966     The inverse of any standard conversion sequence (clause _conv_),
4967     other than the lvalue-to-rvalue (_conv.lval_), array-to-pointer
4968     (_conv.array_), function-to-pointer (_conv.func_), and boolean
4969     (_conv.bool_) conversions, can be performed explicitly using
4970     static_cast subject to the restriction that the explicit
4971     conversion does not cast away constness (_expr.const.cast_), and
4972     the following additional rules for specific cases:  */
4973  /* For reference, the conversions not excluded are: integral
4974     promotions, floating point promotion, integral conversions,
4975     floating point conversions, floating-integral conversions,
4976     pointer conversions, and pointer to member conversions.  */
4977  /* DR 128
4978
4979     A value of integral _or enumeration_ type can be explicitly
4980     converted to an enumeration type.  */
4981  /* The effect of all that is that any conversion between any two
4982     types which are integral, floating, or enumeration types can be
4983     performed.  */
4984  if ((INTEGRAL_TYPE_P (type) || SCALAR_FLOAT_TYPE_P (type))
4985      && (INTEGRAL_TYPE_P (intype) || SCALAR_FLOAT_TYPE_P (intype)))
4986    {
4987      expr = ocp_convert (type, expr, CONV_C_CAST, LOOKUP_NORMAL);
4988
4989      /* Ignore any integer overflow caused by the cast.  */
4990      expr = ignore_overflows (expr, orig);
4991      return expr;
4992    }
4993
4994  if (TYPE_PTR_P (type) && TYPE_PTR_P (intype)
4995      && CLASS_TYPE_P (TREE_TYPE (type))
4996      && CLASS_TYPE_P (TREE_TYPE (intype))
4997      && can_convert (build_pointer_type (TYPE_MAIN_VARIANT
4998					  (TREE_TYPE (intype))),
4999		      build_pointer_type (TYPE_MAIN_VARIANT
5000					  (TREE_TYPE (type)))))
5001    {
5002      tree base;
5003
5004      if (!c_cast_p)
5005	check_for_casting_away_constness (intype, type, diag_fn, desc);
5006      base = lookup_base (TREE_TYPE (type), TREE_TYPE (intype),
5007			  c_cast_p ? ba_unique : ba_check,
5008			  NULL);
5009      return build_base_path (MINUS_EXPR, expr, base, /*nonnull=*/false);
5010    }
5011
5012  if ((TYPE_PTRMEM_P (type) && TYPE_PTRMEM_P (intype))
5013      || (TYPE_PTRMEMFUNC_P (type) && TYPE_PTRMEMFUNC_P (intype)))
5014    {
5015      tree c1;
5016      tree c2;
5017      tree t1;
5018      tree t2;
5019
5020      c1 = TYPE_PTRMEM_CLASS_TYPE (intype);
5021      c2 = TYPE_PTRMEM_CLASS_TYPE (type);
5022
5023      if (TYPE_PTRMEM_P (type))
5024	{
5025	  t1 = (build_ptrmem_type
5026		(c1,
5027		 TYPE_MAIN_VARIANT (TYPE_PTRMEM_POINTED_TO_TYPE (intype))));
5028	  t2 = (build_ptrmem_type
5029		(c2,
5030		 TYPE_MAIN_VARIANT (TYPE_PTRMEM_POINTED_TO_TYPE (type))));
5031	}
5032      else
5033	{
5034	  t1 = intype;
5035	  t2 = type;
5036	}
5037      if (can_convert (t1, t2))
5038	{
5039	  if (!c_cast_p)
5040	    check_for_casting_away_constness (intype, type, diag_fn,
5041					      desc);
5042	  return convert_ptrmem (type, expr, /*allow_inverse_p=*/1,
5043				 c_cast_p);
5044	}
5045    }
5046
5047  /* [expr.static.cast]
5048
5049     An rvalue of type "pointer to cv void" can be explicitly
5050     converted to a pointer to object type.  A value of type pointer
5051     to object converted to "pointer to cv void" and back to the
5052     original pointer type will have its original value.  */
5053  if (TREE_CODE (intype) == POINTER_TYPE
5054      && VOID_TYPE_P (TREE_TYPE (intype))
5055      && TYPE_PTROB_P (type))
5056    {
5057      if (!c_cast_p)
5058	check_for_casting_away_constness (intype, type, diag_fn, desc);
5059      return build_nop (type, expr);
5060    }
5061
5062  *valid_p = false;
5063  return error_mark_node;
5064}
5065
5066/* Return an expression representing static_cast<TYPE>(EXPR).  */
5067
5068tree
5069build_static_cast (tree type, tree expr)
5070{
5071  tree result;
5072  bool valid_p;
5073
5074  if (type == error_mark_node || expr == error_mark_node)
5075    return error_mark_node;
5076
5077  if (processing_template_decl)
5078    {
5079      expr = build_min (STATIC_CAST_EXPR, type, expr);
5080      /* We don't know if it will or will not have side effects.  */
5081      TREE_SIDE_EFFECTS (expr) = 1;
5082      return convert_from_reference (expr);
5083    }
5084
5085  /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
5086     Strip such NOP_EXPRs if VALUE is being used in non-lvalue context.  */
5087  if (TREE_CODE (type) != REFERENCE_TYPE
5088      && TREE_CODE (expr) == NOP_EXPR
5089      && TREE_TYPE (expr) == TREE_TYPE (TREE_OPERAND (expr, 0)))
5090    expr = TREE_OPERAND (expr, 0);
5091
5092  result = build_static_cast_1 (type, expr, /*c_cast_p=*/false, &valid_p);
5093  if (valid_p)
5094    return result;
5095
5096  error ("invalid static_cast from type %qT to type %qT",
5097	 TREE_TYPE (expr), type);
5098  return error_mark_node;
5099}
5100
5101/* EXPR is an expression with member function or pointer-to-member
5102   function type.  TYPE is a pointer type.  Converting EXPR to TYPE is
5103   not permitted by ISO C++, but we accept it in some modes.  If we
5104   are not in one of those modes, issue a diagnostic.  Return the
5105   converted expression.  */
5106
5107tree
5108convert_member_func_to_ptr (tree type, tree expr)
5109{
5110  tree intype;
5111  tree decl;
5112
5113  intype = TREE_TYPE (expr);
5114  gcc_assert (TYPE_PTRMEMFUNC_P (intype)
5115	      || TREE_CODE (intype) == METHOD_TYPE);
5116
5117  if (pedantic || warn_pmf2ptr)
5118    pedwarn ("converting from %qT to %qT", intype, type);
5119
5120  if (TREE_CODE (intype) == METHOD_TYPE)
5121    expr = build_addr_func (expr);
5122  else if (TREE_CODE (expr) == PTRMEM_CST)
5123    expr = build_address (PTRMEM_CST_MEMBER (expr));
5124  else
5125    {
5126      decl = maybe_dummy_object (TYPE_PTRMEM_CLASS_TYPE (intype), 0);
5127      decl = build_address (decl);
5128      expr = get_member_function_from_ptrfunc (&decl, expr);
5129    }
5130
5131  return build_nop (type, expr);
5132}
5133
5134/* Return a representation for a reinterpret_cast from EXPR to TYPE.
5135   If C_CAST_P is true, this reinterpret cast is being done as part of
5136   a C-style cast.  If VALID_P is non-NULL, *VALID_P is set to
5137   indicate whether or not reinterpret_cast was valid.  */
5138
5139static tree
5140build_reinterpret_cast_1 (tree type, tree expr, bool c_cast_p,
5141			  bool *valid_p)
5142{
5143  tree intype;
5144
5145  /* Assume the cast is invalid.  */
5146  if (valid_p)
5147    *valid_p = true;
5148
5149  if (type == error_mark_node || error_operand_p (expr))
5150    return error_mark_node;
5151
5152  intype = TREE_TYPE (expr);
5153
5154  /* Save casted types in the function's used types hash table.  */
5155  used_types_insert (type);
5156
5157  /* [expr.reinterpret.cast]
5158     An lvalue expression of type T1 can be cast to the type
5159     "reference to T2" if an expression of type "pointer to T1" can be
5160     explicitly converted to the type "pointer to T2" using a
5161     reinterpret_cast.  */
5162  if (TREE_CODE (type) == REFERENCE_TYPE)
5163    {
5164      if (! real_lvalue_p (expr))
5165	{
5166	  error ("invalid cast of an rvalue expression of type "
5167		 "%qT to type %qT",
5168		 intype, type);
5169	  return error_mark_node;
5170	}
5171
5172      /* Warn about a reinterpret_cast from "A*" to "B&" if "A" and
5173	 "B" are related class types; the reinterpret_cast does not
5174	 adjust the pointer.  */
5175      if (TYPE_PTR_P (intype)
5176	  && (comptypes (TREE_TYPE (intype), TREE_TYPE (type),
5177			 COMPARE_BASE | COMPARE_DERIVED)))
5178	warning (0, "casting %qT to %qT does not dereference pointer",
5179		 intype, type);
5180
5181      expr = build_unary_op (ADDR_EXPR, expr, 0);
5182      if (expr != error_mark_node)
5183	expr = build_reinterpret_cast_1
5184	  (build_pointer_type (TREE_TYPE (type)), expr, c_cast_p,
5185	   valid_p);
5186      if (expr != error_mark_node)
5187	expr = build_indirect_ref (expr, 0);
5188      return expr;
5189    }
5190
5191  /* As a G++ extension, we consider conversions from member
5192     functions, and pointers to member functions to
5193     pointer-to-function and pointer-to-void types.  If
5194     -Wno-pmf-conversions has not been specified,
5195     convert_member_func_to_ptr will issue an error message.  */
5196  if ((TYPE_PTRMEMFUNC_P (intype)
5197       || TREE_CODE (intype) == METHOD_TYPE)
5198      && TYPE_PTR_P (type)
5199      && (TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE
5200	  || VOID_TYPE_P (TREE_TYPE (type))))
5201    return convert_member_func_to_ptr (type, expr);
5202
5203  /* If the cast is not to a reference type, the lvalue-to-rvalue,
5204     array-to-pointer, and function-to-pointer conversions are
5205     performed.  */
5206  expr = decay_conversion (expr);
5207
5208  /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
5209     Strip such NOP_EXPRs if VALUE is being used in non-lvalue context.  */
5210  if (TREE_CODE (expr) == NOP_EXPR
5211      && TREE_TYPE (expr) == TREE_TYPE (TREE_OPERAND (expr, 0)))
5212    expr = TREE_OPERAND (expr, 0);
5213
5214  if (error_operand_p (expr))
5215    return error_mark_node;
5216
5217  intype = TREE_TYPE (expr);
5218
5219  /* [expr.reinterpret.cast]
5220     A pointer can be converted to any integral type large enough to
5221     hold it.  */
5222  if (CP_INTEGRAL_TYPE_P (type) && TYPE_PTR_P (intype))
5223    {
5224      if (TYPE_PRECISION (type) < TYPE_PRECISION (intype))
5225	pedwarn ("cast from %qT to %qT loses precision",
5226		 intype, type);
5227    }
5228  /* [expr.reinterpret.cast]
5229     A value of integral or enumeration type can be explicitly
5230     converted to a pointer.  */
5231  else if (TYPE_PTR_P (type) && INTEGRAL_OR_ENUMERATION_TYPE_P (intype))
5232    /* OK */
5233    ;
5234  else if ((TYPE_PTRFN_P (type) && TYPE_PTRFN_P (intype))
5235	   || (TYPE_PTRMEMFUNC_P (type) && TYPE_PTRMEMFUNC_P (intype)))
5236    return fold_if_not_in_template (build_nop (type, expr));
5237  else if ((TYPE_PTRMEM_P (type) && TYPE_PTRMEM_P (intype))
5238	   || (TYPE_PTROBV_P (type) && TYPE_PTROBV_P (intype)))
5239    {
5240      tree sexpr = expr;
5241
5242      if (!c_cast_p)
5243	check_for_casting_away_constness (intype, type, error,
5244					  "reinterpret_cast");
5245      /* Warn about possible alignment problems.  */
5246      if (STRICT_ALIGNMENT && warn_cast_align
5247	  && !VOID_TYPE_P (type)
5248	  && TREE_CODE (TREE_TYPE (intype)) != FUNCTION_TYPE
5249	  && COMPLETE_TYPE_P (TREE_TYPE (type))
5250	  && COMPLETE_TYPE_P (TREE_TYPE (intype))
5251	  && TYPE_ALIGN (TREE_TYPE (type)) > TYPE_ALIGN (TREE_TYPE (intype)))
5252	warning (0, "cast from %qT to %qT increases required alignment of "
5253		 "target type",
5254		 intype, type);
5255
5256      /* We need to strip nops here, because the frontend likes to
5257	 create (int *)&a for array-to-pointer decay, instead of &a[0].  */
5258      STRIP_NOPS (sexpr);
5259      strict_aliasing_warning (intype, type, sexpr);
5260
5261      return fold_if_not_in_template (build_nop (type, expr));
5262    }
5263  else if ((TYPE_PTRFN_P (type) && TYPE_PTROBV_P (intype))
5264	   || (TYPE_PTRFN_P (intype) && TYPE_PTROBV_P (type)))
5265    {
5266      if (pedantic)
5267	/* Only issue a warning, as we have always supported this
5268	   where possible, and it is necessary in some cases.  DR 195
5269	   addresses this issue, but as of 2004/10/26 is still in
5270	   drafting.  */
5271	warning (0, "ISO C++ forbids casting between pointer-to-function and pointer-to-object");
5272      return fold_if_not_in_template (build_nop (type, expr));
5273    }
5274  else if (TREE_CODE (type) == VECTOR_TYPE)
5275    return fold_if_not_in_template (convert_to_vector (type, expr));
5276  else if (TREE_CODE (intype) == VECTOR_TYPE && INTEGRAL_TYPE_P (type))
5277    return fold_if_not_in_template (convert_to_integer (type, expr));
5278  else
5279    {
5280      if (valid_p)
5281	*valid_p = false;
5282      error ("invalid cast from type %qT to type %qT", intype, type);
5283      return error_mark_node;
5284    }
5285
5286  return cp_convert (type, expr);
5287}
5288
5289tree
5290build_reinterpret_cast (tree type, tree expr)
5291{
5292  if (type == error_mark_node || expr == error_mark_node)
5293    return error_mark_node;
5294
5295  if (processing_template_decl)
5296    {
5297      tree t = build_min (REINTERPRET_CAST_EXPR, type, expr);
5298
5299      if (!TREE_SIDE_EFFECTS (t)
5300	  && type_dependent_expression_p (expr))
5301	/* There might turn out to be side effects inside expr.  */
5302	TREE_SIDE_EFFECTS (t) = 1;
5303      return convert_from_reference (t);
5304    }
5305
5306  return build_reinterpret_cast_1 (type, expr, /*c_cast_p=*/false,
5307				   /*valid_p=*/NULL);
5308}
5309
5310/* Perform a const_cast from EXPR to TYPE.  If the cast is valid,
5311   return an appropriate expression.  Otherwise, return
5312   error_mark_node.  If the cast is not valid, and COMPLAIN is true,
5313   then a diagnostic will be issued.  If VALID_P is non-NULL, we are
5314   performing a C-style cast, its value upon return will indicate
5315   whether or not the conversion succeeded.  */
5316
5317static tree
5318build_const_cast_1 (tree dst_type, tree expr, bool complain,
5319		    bool *valid_p)
5320{
5321  tree src_type;
5322  tree reference_type;
5323
5324  /* Callers are responsible for handling error_mark_node as a
5325     destination type.  */
5326  gcc_assert (dst_type != error_mark_node);
5327  /* In a template, callers should be building syntactic
5328     representations of casts, not using this machinery.  */
5329  gcc_assert (!processing_template_decl);
5330
5331  /* Assume the conversion is invalid.  */
5332  if (valid_p)
5333    *valid_p = false;
5334
5335  if (!POINTER_TYPE_P (dst_type) && !TYPE_PTRMEM_P (dst_type))
5336    {
5337      if (complain)
5338	error ("invalid use of const_cast with type %qT, "
5339	       "which is not a pointer, "
5340	       "reference, nor a pointer-to-data-member type", dst_type);
5341      return error_mark_node;
5342    }
5343
5344  if (TREE_CODE (TREE_TYPE (dst_type)) == FUNCTION_TYPE)
5345    {
5346      if (complain)
5347	error ("invalid use of const_cast with type %qT, which is a pointer "
5348	       "or reference to a function type", dst_type);
5349      return error_mark_node;
5350    }
5351
5352  /* Save casted types in the function's used types hash table.  */
5353  used_types_insert (dst_type);
5354
5355  src_type = TREE_TYPE (expr);
5356  /* Expressions do not really have reference types.  */
5357  if (TREE_CODE (src_type) == REFERENCE_TYPE)
5358    src_type = TREE_TYPE (src_type);
5359
5360  /* [expr.const.cast]
5361
5362     An lvalue of type T1 can be explicitly converted to an lvalue of
5363     type T2 using the cast const_cast<T2&> (where T1 and T2 are object
5364     types) if a pointer to T1 can be explicitly converted to the type
5365     pointer to T2 using a const_cast.  */
5366  if (TREE_CODE (dst_type) == REFERENCE_TYPE)
5367    {
5368      reference_type = dst_type;
5369      if (! real_lvalue_p (expr))
5370	{
5371	  if (complain)
5372	    error ("invalid const_cast of an rvalue of type %qT to type %qT",
5373		   src_type, dst_type);
5374	  return error_mark_node;
5375	}
5376      dst_type = build_pointer_type (TREE_TYPE (dst_type));
5377      src_type = build_pointer_type (src_type);
5378    }
5379  else
5380    {
5381      reference_type = NULL_TREE;
5382      /* If the destination type is not a reference type, the
5383	 lvalue-to-rvalue, array-to-pointer, and function-to-pointer
5384	 conversions are performed.  */
5385      src_type = type_decays_to (src_type);
5386      if (src_type == error_mark_node)
5387	return error_mark_node;
5388    }
5389
5390  if ((TYPE_PTR_P (src_type) || TYPE_PTRMEM_P (src_type))
5391      && comp_ptr_ttypes_const (dst_type, src_type))
5392    {
5393      if (valid_p)
5394	{
5395	  *valid_p = true;
5396	  /* This cast is actually a C-style cast.  Issue a warning if
5397	     the user is making a potentially unsafe cast.  */
5398	  if (warn_cast_qual)
5399	    check_for_casting_away_constness (src_type, dst_type,
5400					      warning0,
5401					      "cast");
5402	}
5403      if (reference_type)
5404	{
5405	  expr = build_unary_op (ADDR_EXPR, expr, 0);
5406	  expr = build_nop (reference_type, expr);
5407	  return convert_from_reference (expr);
5408	}
5409      else
5410	{
5411	  expr = decay_conversion (expr);
5412	  /* build_c_cast puts on a NOP_EXPR to make the result not an
5413	     lvalue.  Strip such NOP_EXPRs if VALUE is being used in
5414	     non-lvalue context.  */
5415	  if (TREE_CODE (expr) == NOP_EXPR
5416	      && TREE_TYPE (expr) == TREE_TYPE (TREE_OPERAND (expr, 0)))
5417	    expr = TREE_OPERAND (expr, 0);
5418	  return build_nop (dst_type, expr);
5419	}
5420    }
5421
5422  if (complain)
5423    error ("invalid const_cast from type %qT to type %qT",
5424	   src_type, dst_type);
5425  return error_mark_node;
5426}
5427
5428tree
5429build_const_cast (tree type, tree expr)
5430{
5431  if (type == error_mark_node || error_operand_p (expr))
5432    return error_mark_node;
5433
5434  if (processing_template_decl)
5435    {
5436      tree t = build_min (CONST_CAST_EXPR, type, expr);
5437
5438      if (!TREE_SIDE_EFFECTS (t)
5439	  && type_dependent_expression_p (expr))
5440	/* There might turn out to be side effects inside expr.  */
5441	TREE_SIDE_EFFECTS (t) = 1;
5442      return convert_from_reference (t);
5443    }
5444
5445  return build_const_cast_1 (type, expr, /*complain=*/true,
5446			     /*valid_p=*/NULL);
5447}
5448
5449/* Build an expression representing an explicit C-style cast to type
5450   TYPE of expression EXPR.  */
5451
5452tree
5453build_c_cast (tree type, tree expr)
5454{
5455  tree value = expr;
5456  tree result;
5457  bool valid_p;
5458
5459  if (type == error_mark_node || error_operand_p (expr))
5460    return error_mark_node;
5461
5462  if (processing_template_decl)
5463    {
5464      tree t = build_min (CAST_EXPR, type,
5465			  tree_cons (NULL_TREE, value, NULL_TREE));
5466      /* We don't know if it will or will not have side effects.  */
5467      TREE_SIDE_EFFECTS (t) = 1;
5468      return convert_from_reference (t);
5469    }
5470
5471  /* Casts to a (pointer to a) specific ObjC class (or 'id' or
5472     'Class') should always be retained, because this information aids
5473     in method lookup.  */
5474  if (objc_is_object_ptr (type)
5475      && objc_is_object_ptr (TREE_TYPE (expr)))
5476    return build_nop (type, expr);
5477
5478  /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
5479     Strip such NOP_EXPRs if VALUE is being used in non-lvalue context.  */
5480  if (TREE_CODE (type) != REFERENCE_TYPE
5481      && TREE_CODE (value) == NOP_EXPR
5482      && TREE_TYPE (value) == TREE_TYPE (TREE_OPERAND (value, 0)))
5483    value = TREE_OPERAND (value, 0);
5484
5485  if (TREE_CODE (type) == ARRAY_TYPE)
5486    {
5487      /* Allow casting from T1* to T2[] because Cfront allows it.
5488	 NIHCL uses it. It is not valid ISO C++ however.  */
5489      if (TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE)
5490	{
5491	  pedwarn ("ISO C++ forbids casting to an array type %qT", type);
5492	  type = build_pointer_type (TREE_TYPE (type));
5493	}
5494      else
5495	{
5496	  error ("ISO C++ forbids casting to an array type %qT", type);
5497	  return error_mark_node;
5498	}
5499    }
5500
5501  if (TREE_CODE (type) == FUNCTION_TYPE
5502      || TREE_CODE (type) == METHOD_TYPE)
5503    {
5504      error ("invalid cast to function type %qT", type);
5505      return error_mark_node;
5506    }
5507
5508  /* A C-style cast can be a const_cast.  */
5509  result = build_const_cast_1 (type, value, /*complain=*/false,
5510			       &valid_p);
5511  if (valid_p)
5512    return result;
5513
5514  /* Or a static cast.  */
5515  result = build_static_cast_1 (type, value, /*c_cast_p=*/true,
5516				&valid_p);
5517  /* Or a reinterpret_cast.  */
5518  if (!valid_p)
5519    result = build_reinterpret_cast_1 (type, value, /*c_cast_p=*/true,
5520				       &valid_p);
5521  /* The static_cast or reinterpret_cast may be followed by a
5522     const_cast.  */
5523  if (valid_p
5524      /* A valid cast may result in errors if, for example, a
5525	 conversion to am ambiguous base class is required.  */
5526      && !error_operand_p (result))
5527    {
5528      tree result_type;
5529
5530      /* Non-class rvalues always have cv-unqualified type.  */
5531      if (!CLASS_TYPE_P (type))
5532	type = TYPE_MAIN_VARIANT (type);
5533      result_type = TREE_TYPE (result);
5534      if (!CLASS_TYPE_P (result_type))
5535	result_type = TYPE_MAIN_VARIANT (result_type);
5536      /* If the type of RESULT does not match TYPE, perform a
5537	 const_cast to make it match.  If the static_cast or
5538	 reinterpret_cast succeeded, we will differ by at most
5539	 cv-qualification, so the follow-on const_cast is guaranteed
5540	 to succeed.  */
5541      if (!same_type_p (non_reference (type), non_reference (result_type)))
5542	{
5543	  result = build_const_cast_1 (type, result, false, &valid_p);
5544	  gcc_assert (valid_p);
5545	}
5546      return result;
5547    }
5548
5549  return error_mark_node;
5550}
5551
5552/* Build an assignment expression of lvalue LHS from value RHS.
5553   MODIFYCODE is the code for a binary operator that we use
5554   to combine the old value of LHS with RHS to get the new value.
5555   Or else MODIFYCODE is NOP_EXPR meaning do a simple assignment.
5556
5557   C++: If MODIFYCODE is INIT_EXPR, then leave references unbashed.  */
5558
5559tree
5560build_modify_expr (tree lhs, enum tree_code modifycode, tree rhs)
5561{
5562  tree result;
5563  tree newrhs = rhs;
5564  tree lhstype = TREE_TYPE (lhs);
5565  tree olhstype = lhstype;
5566  tree olhs = NULL_TREE;
5567  bool plain_assign = (modifycode == NOP_EXPR);
5568
5569  /* Avoid duplicate error messages from operands that had errors.  */
5570  if (error_operand_p (lhs) || error_operand_p (rhs))
5571    return error_mark_node;
5572
5573  /* Handle control structure constructs used as "lvalues".  */
5574  switch (TREE_CODE (lhs))
5575    {
5576      /* Handle --foo = 5; as these are valid constructs in C++.  */
5577    case PREDECREMENT_EXPR:
5578    case PREINCREMENT_EXPR:
5579      if (TREE_SIDE_EFFECTS (TREE_OPERAND (lhs, 0)))
5580	lhs = build2 (TREE_CODE (lhs), TREE_TYPE (lhs),
5581		      stabilize_reference (TREE_OPERAND (lhs, 0)),
5582		      TREE_OPERAND (lhs, 1));
5583      return build2 (COMPOUND_EXPR, lhstype,
5584		     lhs,
5585		     build_modify_expr (TREE_OPERAND (lhs, 0),
5586					modifycode, rhs));
5587
5588      /* Handle (a, b) used as an "lvalue".  */
5589    case COMPOUND_EXPR:
5590      newrhs = build_modify_expr (TREE_OPERAND (lhs, 1),
5591				  modifycode, rhs);
5592      if (newrhs == error_mark_node)
5593	return error_mark_node;
5594      return build2 (COMPOUND_EXPR, lhstype,
5595		     TREE_OPERAND (lhs, 0), newrhs);
5596
5597    case MODIFY_EXPR:
5598      if (TREE_SIDE_EFFECTS (TREE_OPERAND (lhs, 0)))
5599	lhs = build2 (TREE_CODE (lhs), TREE_TYPE (lhs),
5600		      stabilize_reference (TREE_OPERAND (lhs, 0)),
5601		      TREE_OPERAND (lhs, 1));
5602      newrhs = build_modify_expr (TREE_OPERAND (lhs, 0), modifycode, rhs);
5603      if (newrhs == error_mark_node)
5604	return error_mark_node;
5605      return build2 (COMPOUND_EXPR, lhstype, lhs, newrhs);
5606
5607    case MIN_EXPR:
5608    case MAX_EXPR:
5609      /* MIN_EXPR and MAX_EXPR are currently only permitted as lvalues,
5610	 when neither operand has side-effects.  */
5611      if (!lvalue_or_else (lhs, lv_assign))
5612	return error_mark_node;
5613
5614      gcc_assert (!TREE_SIDE_EFFECTS (TREE_OPERAND (lhs, 0))
5615		  && !TREE_SIDE_EFFECTS (TREE_OPERAND (lhs, 1)));
5616
5617      lhs = build3 (COND_EXPR, TREE_TYPE (lhs),
5618		    build2 (TREE_CODE (lhs) == MIN_EXPR ? LE_EXPR : GE_EXPR,
5619			    boolean_type_node,
5620			    TREE_OPERAND (lhs, 0),
5621			    TREE_OPERAND (lhs, 1)),
5622		    TREE_OPERAND (lhs, 0),
5623		    TREE_OPERAND (lhs, 1));
5624      /* Fall through.  */
5625
5626      /* Handle (a ? b : c) used as an "lvalue".  */
5627    case COND_EXPR:
5628      {
5629	/* Produce (a ? (b = rhs) : (c = rhs))
5630	   except that the RHS goes through a save-expr
5631	   so the code to compute it is only emitted once.  */
5632	tree cond;
5633	tree preeval = NULL_TREE;
5634
5635	if (VOID_TYPE_P (TREE_TYPE (rhs)))
5636	  {
5637	    error ("void value not ignored as it ought to be");
5638	    return error_mark_node;
5639	  }
5640
5641	rhs = stabilize_expr (rhs, &preeval);
5642
5643	/* Check this here to avoid odd errors when trying to convert
5644	   a throw to the type of the COND_EXPR.  */
5645	if (!lvalue_or_else (lhs, lv_assign))
5646	  return error_mark_node;
5647
5648	cond = build_conditional_expr
5649	  (TREE_OPERAND (lhs, 0),
5650	   build_modify_expr (TREE_OPERAND (lhs, 1),
5651			      modifycode, rhs),
5652	   build_modify_expr (TREE_OPERAND (lhs, 2),
5653			      modifycode, rhs));
5654
5655	if (cond == error_mark_node)
5656	  return cond;
5657	/* Make sure the code to compute the rhs comes out
5658	   before the split.  */
5659	if (preeval)
5660	  cond = build2 (COMPOUND_EXPR, TREE_TYPE (lhs), preeval, cond);
5661	return cond;
5662      }
5663
5664    default:
5665      break;
5666    }
5667
5668  if (modifycode == INIT_EXPR)
5669    {
5670      if (TREE_CODE (rhs) == CONSTRUCTOR)
5671	{
5672	  if (! same_type_p (TREE_TYPE (rhs), lhstype))
5673	    /* Call convert to generate an error; see PR 11063.  */
5674	    rhs = convert (lhstype, rhs);
5675	  result = build2 (INIT_EXPR, lhstype, lhs, rhs);
5676	  TREE_SIDE_EFFECTS (result) = 1;
5677	  return result;
5678	}
5679      else if (! IS_AGGR_TYPE (lhstype))
5680	/* Do the default thing.  */;
5681      else
5682	{
5683	  result = build_special_member_call (lhs, complete_ctor_identifier,
5684					      build_tree_list (NULL_TREE, rhs),
5685					      lhstype, LOOKUP_NORMAL);
5686	  if (result == NULL_TREE)
5687	    return error_mark_node;
5688	  return result;
5689	}
5690    }
5691  else
5692    {
5693      lhs = require_complete_type (lhs);
5694      if (lhs == error_mark_node)
5695	return error_mark_node;
5696
5697      if (modifycode == NOP_EXPR)
5698	{
5699	  /* `operator=' is not an inheritable operator.  */
5700	  if (! IS_AGGR_TYPE (lhstype))
5701	    /* Do the default thing.  */;
5702	  else
5703	    {
5704	      result = build_new_op (MODIFY_EXPR, LOOKUP_NORMAL,
5705				     lhs, rhs, make_node (NOP_EXPR),
5706				     /*overloaded_p=*/NULL);
5707	      if (result == NULL_TREE)
5708		return error_mark_node;
5709	      return result;
5710	    }
5711	  lhstype = olhstype;
5712	}
5713      else
5714	{
5715	  /* A binary op has been requested.  Combine the old LHS
5716	     value with the RHS producing the value we should actually
5717	     store into the LHS.  */
5718
5719	  gcc_assert (!PROMOTES_TO_AGGR_TYPE (lhstype, REFERENCE_TYPE));
5720	  lhs = stabilize_reference (lhs);
5721	  newrhs = cp_build_binary_op (modifycode, lhs, rhs);
5722	  if (newrhs == error_mark_node)
5723	    {
5724	      error ("  in evaluation of %<%Q(%#T, %#T)%>", modifycode,
5725		     TREE_TYPE (lhs), TREE_TYPE (rhs));
5726	      return error_mark_node;
5727	    }
5728
5729	  /* Now it looks like a plain assignment.  */
5730	  modifycode = NOP_EXPR;
5731	}
5732      gcc_assert (TREE_CODE (lhstype) != REFERENCE_TYPE);
5733      gcc_assert (TREE_CODE (TREE_TYPE (newrhs)) != REFERENCE_TYPE);
5734    }
5735
5736  /* The left-hand side must be an lvalue.  */
5737  if (!lvalue_or_else (lhs, lv_assign))
5738    return error_mark_node;
5739
5740  /* Warn about modifying something that is `const'.  Don't warn if
5741     this is initialization.  */
5742  if (modifycode != INIT_EXPR
5743      && (TREE_READONLY (lhs) || CP_TYPE_CONST_P (lhstype)
5744	  /* Functions are not modifiable, even though they are
5745	     lvalues.  */
5746	  || TREE_CODE (TREE_TYPE (lhs)) == FUNCTION_TYPE
5747	  || TREE_CODE (TREE_TYPE (lhs)) == METHOD_TYPE
5748	  /* If it's an aggregate and any field is const, then it is
5749	     effectively const.  */
5750	  || (CLASS_TYPE_P (lhstype)
5751	      && C_TYPE_FIELDS_READONLY (lhstype))))
5752    readonly_error (lhs, "assignment", 0);
5753
5754  /* If storing into a structure or union member, it has probably been
5755     given type `int'.  Compute the type that would go with the actual
5756     amount of storage the member occupies.  */
5757
5758  if (TREE_CODE (lhs) == COMPONENT_REF
5759      && (TREE_CODE (lhstype) == INTEGER_TYPE
5760	  || TREE_CODE (lhstype) == REAL_TYPE
5761	  || TREE_CODE (lhstype) == ENUMERAL_TYPE))
5762    {
5763      lhstype = TREE_TYPE (get_unwidened (lhs, 0));
5764
5765      /* If storing in a field that is in actuality a short or narrower
5766	 than one, we must store in the field in its actual type.  */
5767
5768      if (lhstype != TREE_TYPE (lhs))
5769	{
5770	  /* Avoid warnings converting integral types back into enums for
5771	     enum bit fields.  */
5772	  if (TREE_CODE (lhstype) == INTEGER_TYPE
5773	      && TREE_CODE (olhstype) == ENUMERAL_TYPE)
5774	    {
5775	      if (TREE_SIDE_EFFECTS (lhs))
5776		lhs = stabilize_reference (lhs);
5777	      olhs = lhs;
5778	    }
5779	  lhs = copy_node (lhs);
5780	  TREE_TYPE (lhs) = lhstype;
5781	}
5782    }
5783
5784  /* Convert new value to destination type.  */
5785
5786  if (TREE_CODE (lhstype) == ARRAY_TYPE)
5787    {
5788      int from_array;
5789
5790      if (!same_or_base_type_p (TYPE_MAIN_VARIANT (lhstype),
5791				TYPE_MAIN_VARIANT (TREE_TYPE (rhs))))
5792	{
5793	  error ("incompatible types in assignment of %qT to %qT",
5794		 TREE_TYPE (rhs), lhstype);
5795	  return error_mark_node;
5796	}
5797
5798      /* Allow array assignment in compiler-generated code.  */
5799      if (! DECL_ARTIFICIAL (current_function_decl))
5800	{
5801          /* This routine is used for both initialization and assignment.
5802             Make sure the diagnostic message differentiates the context.  */
5803          if (modifycode == INIT_EXPR)
5804            error ("array used as initializer");
5805          else
5806            error ("invalid array assignment");
5807	  return error_mark_node;
5808	}
5809
5810      from_array = TREE_CODE (TREE_TYPE (newrhs)) == ARRAY_TYPE
5811		   ? 1 + (modifycode != INIT_EXPR): 0;
5812      return build_vec_init (lhs, NULL_TREE, newrhs,
5813			     /*explicit_default_init_p=*/false,
5814			     from_array);
5815    }
5816
5817  if (modifycode == INIT_EXPR)
5818    newrhs = convert_for_initialization (lhs, lhstype, newrhs, LOOKUP_NORMAL,
5819					 "initialization", NULL_TREE, 0);
5820  else
5821    {
5822      /* Avoid warnings on enum bit fields.  */
5823      if (TREE_CODE (olhstype) == ENUMERAL_TYPE
5824	  && TREE_CODE (lhstype) == INTEGER_TYPE)
5825	{
5826	  newrhs = convert_for_assignment (olhstype, newrhs, "assignment",
5827					   NULL_TREE, 0);
5828	  newrhs = convert_force (lhstype, newrhs, 0);
5829	}
5830      else
5831	newrhs = convert_for_assignment (lhstype, newrhs, "assignment",
5832					 NULL_TREE, 0);
5833      if (TREE_CODE (newrhs) == CALL_EXPR
5834	  && TYPE_NEEDS_CONSTRUCTING (lhstype))
5835	newrhs = build_cplus_new (lhstype, newrhs);
5836
5837      /* Can't initialize directly from a TARGET_EXPR, since that would
5838	 cause the lhs to be constructed twice, and possibly result in
5839	 accidental self-initialization.  So we force the TARGET_EXPR to be
5840	 expanded without a target.  */
5841      if (TREE_CODE (newrhs) == TARGET_EXPR)
5842	newrhs = build2 (COMPOUND_EXPR, TREE_TYPE (newrhs), newrhs,
5843			 TREE_OPERAND (newrhs, 0));
5844    }
5845
5846  if (newrhs == error_mark_node)
5847    return error_mark_node;
5848
5849  if (c_dialect_objc () && flag_objc_gc)
5850    {
5851      result = objc_generate_write_barrier (lhs, modifycode, newrhs);
5852
5853      if (result)
5854	return result;
5855    }
5856
5857  result = build2 (modifycode == NOP_EXPR ? MODIFY_EXPR : INIT_EXPR,
5858		   lhstype, lhs, newrhs);
5859
5860  TREE_SIDE_EFFECTS (result) = 1;
5861  if (!plain_assign)
5862    TREE_NO_WARNING (result) = 1;
5863
5864  /* If we got the LHS in a different type for storing in,
5865     convert the result back to the nominal type of LHS
5866     so that the value we return always has the same type
5867     as the LHS argument.  */
5868
5869  if (olhstype == TREE_TYPE (result))
5870    return result;
5871  if (olhs)
5872    {
5873      result = build2 (COMPOUND_EXPR, olhstype, result, olhs);
5874      TREE_NO_WARNING (result) = 1;
5875      return result;
5876    }
5877  return convert_for_assignment (olhstype, result, "assignment",
5878				 NULL_TREE, 0);
5879}
5880
5881tree
5882build_x_modify_expr (tree lhs, enum tree_code modifycode, tree rhs)
5883{
5884  if (processing_template_decl)
5885    return build_min_nt (MODOP_EXPR, lhs,
5886			 build_min_nt (modifycode, NULL_TREE, NULL_TREE), rhs);
5887
5888  if (modifycode != NOP_EXPR)
5889    {
5890      tree rval = build_new_op (MODIFY_EXPR, LOOKUP_NORMAL, lhs, rhs,
5891				make_node (modifycode),
5892				/*overloaded_p=*/NULL);
5893      if (rval)
5894	{
5895	  TREE_NO_WARNING (rval) = 1;
5896	  return rval;
5897	}
5898    }
5899  return build_modify_expr (lhs, modifycode, rhs);
5900}
5901
5902
5903/* Get difference in deltas for different pointer to member function
5904   types.  Returns an integer constant of type PTRDIFF_TYPE_NODE.  If
5905   the conversion is invalid, the constant is zero.  If
5906   ALLOW_INVERSE_P is true, then allow reverse conversions as well.
5907   If C_CAST_P is true this conversion is taking place as part of a
5908   C-style cast.
5909
5910   Note that the naming of FROM and TO is kind of backwards; the return
5911   value is what we add to a TO in order to get a FROM.  They are named
5912   this way because we call this function to find out how to convert from
5913   a pointer to member of FROM to a pointer to member of TO.  */
5914
5915static tree
5916get_delta_difference (tree from, tree to,
5917		      bool allow_inverse_p,
5918		      bool c_cast_p)
5919{
5920  tree binfo;
5921  base_kind kind;
5922  tree result;
5923
5924  /* Assume no conversion is required.  */
5925  result = integer_zero_node;
5926  binfo = lookup_base (to, from, c_cast_p ? ba_unique : ba_check, &kind);
5927  if (kind == bk_inaccessible || kind == bk_ambig)
5928    error ("   in pointer to member function conversion");
5929  else if (binfo)
5930    {
5931      if (kind != bk_via_virtual)
5932	result = BINFO_OFFSET (binfo);
5933      else
5934	{
5935	  tree virt_binfo = binfo_from_vbase (binfo);
5936
5937	  /* This is a reinterpret cast, we choose to do nothing.  */
5938	  if (allow_inverse_p)
5939	    warning (0, "pointer to member cast via virtual base %qT",
5940		     BINFO_TYPE (virt_binfo));
5941	  else
5942	    error ("pointer to member conversion via virtual base %qT",
5943		   BINFO_TYPE (virt_binfo));
5944	}
5945    }
5946  else if (same_type_ignoring_top_level_qualifiers_p (from, to))
5947    /* Pointer to member of incomplete class is permitted*/;
5948  else if (!allow_inverse_p)
5949    {
5950      error_not_base_type (from, to);
5951      error ("   in pointer to member conversion");
5952    }
5953  else
5954    {
5955      binfo = lookup_base (from, to, c_cast_p ? ba_unique : ba_check, &kind);
5956      if (binfo)
5957	{
5958	  if (kind != bk_via_virtual)
5959	    result = size_diffop (size_zero_node, BINFO_OFFSET (binfo));
5960	  else
5961	    {
5962	      /* This is a reinterpret cast, we choose to do nothing.  */
5963	      tree virt_binfo = binfo_from_vbase (binfo);
5964
5965	      warning (0, "pointer to member cast via virtual base %qT",
5966		       BINFO_TYPE (virt_binfo));
5967	    }
5968	}
5969    }
5970
5971  return fold_if_not_in_template (convert_to_integer (ptrdiff_type_node,
5972						      result));
5973}
5974
5975/* Return a constructor for the pointer-to-member-function TYPE using
5976   the other components as specified.  */
5977
5978tree
5979build_ptrmemfunc1 (tree type, tree delta, tree pfn)
5980{
5981  tree u = NULL_TREE;
5982  tree delta_field;
5983  tree pfn_field;
5984  VEC(constructor_elt, gc) *v;
5985
5986  /* Pull the FIELD_DECLs out of the type.  */
5987  pfn_field = TYPE_FIELDS (type);
5988  delta_field = TREE_CHAIN (pfn_field);
5989
5990  /* Make sure DELTA has the type we want.  */
5991  delta = convert_and_check (delta_type_node, delta);
5992
5993  /* Finish creating the initializer.  */
5994  v = VEC_alloc(constructor_elt, gc, 2);
5995  CONSTRUCTOR_APPEND_ELT(v, pfn_field, pfn);
5996  CONSTRUCTOR_APPEND_ELT(v, delta_field, delta);
5997  u = build_constructor (type, v);
5998  TREE_CONSTANT (u) = TREE_CONSTANT (pfn) & TREE_CONSTANT (delta);
5999  TREE_INVARIANT (u) = TREE_INVARIANT (pfn) & TREE_INVARIANT (delta);
6000  TREE_STATIC (u) = (TREE_CONSTANT (u)
6001		     && (initializer_constant_valid_p (pfn, TREE_TYPE (pfn))
6002			 != NULL_TREE)
6003		     && (initializer_constant_valid_p (delta, TREE_TYPE (delta))
6004			 != NULL_TREE));
6005  return u;
6006}
6007
6008/* Build a constructor for a pointer to member function.  It can be
6009   used to initialize global variables, local variable, or used
6010   as a value in expressions.  TYPE is the POINTER to METHOD_TYPE we
6011   want to be.
6012
6013   If FORCE is nonzero, then force this conversion, even if
6014   we would rather not do it.  Usually set when using an explicit
6015   cast.  A C-style cast is being processed iff C_CAST_P is true.
6016
6017   Return error_mark_node, if something goes wrong.  */
6018
6019tree
6020build_ptrmemfunc (tree type, tree pfn, int force, bool c_cast_p)
6021{
6022  tree fn;
6023  tree pfn_type;
6024  tree to_type;
6025
6026  if (error_operand_p (pfn))
6027    return error_mark_node;
6028
6029  pfn_type = TREE_TYPE (pfn);
6030  to_type = build_ptrmemfunc_type (type);
6031
6032  /* Handle multiple conversions of pointer to member functions.  */
6033  if (TYPE_PTRMEMFUNC_P (pfn_type))
6034    {
6035      tree delta = NULL_TREE;
6036      tree npfn = NULL_TREE;
6037      tree n;
6038
6039      if (!force
6040	  && !can_convert_arg (to_type, TREE_TYPE (pfn), pfn, LOOKUP_NORMAL))
6041	error ("invalid conversion to type %qT from type %qT",
6042	       to_type, pfn_type);
6043
6044      n = get_delta_difference (TYPE_PTRMEMFUNC_OBJECT_TYPE (pfn_type),
6045				TYPE_PTRMEMFUNC_OBJECT_TYPE (to_type),
6046				force,
6047				c_cast_p);
6048
6049      /* We don't have to do any conversion to convert a
6050	 pointer-to-member to its own type.  But, we don't want to
6051	 just return a PTRMEM_CST if there's an explicit cast; that
6052	 cast should make the expression an invalid template argument.  */
6053      if (TREE_CODE (pfn) != PTRMEM_CST)
6054	{
6055	  if (same_type_p (to_type, pfn_type))
6056	    return pfn;
6057	  else if (integer_zerop (n))
6058	    return build_reinterpret_cast (to_type, pfn);
6059	}
6060
6061      if (TREE_SIDE_EFFECTS (pfn))
6062	pfn = save_expr (pfn);
6063
6064      /* Obtain the function pointer and the current DELTA.  */
6065      if (TREE_CODE (pfn) == PTRMEM_CST)
6066	expand_ptrmemfunc_cst (pfn, &delta, &npfn);
6067      else
6068	{
6069	  npfn = build_ptrmemfunc_access_expr (pfn, pfn_identifier);
6070	  delta = build_ptrmemfunc_access_expr (pfn, delta_identifier);
6071	}
6072
6073      /* Just adjust the DELTA field.  */
6074      gcc_assert  (same_type_ignoring_top_level_qualifiers_p
6075		   (TREE_TYPE (delta), ptrdiff_type_node));
6076      if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_delta)
6077	n = cp_build_binary_op (LSHIFT_EXPR, n, integer_one_node);
6078      delta = cp_build_binary_op (PLUS_EXPR, delta, n);
6079      return build_ptrmemfunc1 (to_type, delta, npfn);
6080    }
6081
6082  /* Handle null pointer to member function conversions.  */
6083  if (integer_zerop (pfn))
6084    {
6085      pfn = build_c_cast (type, integer_zero_node);
6086      return build_ptrmemfunc1 (to_type,
6087				integer_zero_node,
6088				pfn);
6089    }
6090
6091  if (type_unknown_p (pfn))
6092    return instantiate_type (type, pfn, tf_warning_or_error);
6093
6094  fn = TREE_OPERAND (pfn, 0);
6095  gcc_assert (TREE_CODE (fn) == FUNCTION_DECL
6096	      /* In a template, we will have preserved the
6097		 OFFSET_REF.  */
6098	      || (processing_template_decl && TREE_CODE (fn) == OFFSET_REF));
6099  return make_ptrmem_cst (to_type, fn);
6100}
6101
6102/* Return the DELTA, IDX, PFN, and DELTA2 values for the PTRMEM_CST
6103   given by CST.
6104
6105   ??? There is no consistency as to the types returned for the above
6106   values.  Some code acts as if it were a sizetype and some as if it were
6107   integer_type_node.  */
6108
6109void
6110expand_ptrmemfunc_cst (tree cst, tree *delta, tree *pfn)
6111{
6112  tree type = TREE_TYPE (cst);
6113  tree fn = PTRMEM_CST_MEMBER (cst);
6114  tree ptr_class, fn_class;
6115
6116  gcc_assert (TREE_CODE (fn) == FUNCTION_DECL);
6117
6118  /* The class that the function belongs to.  */
6119  fn_class = DECL_CONTEXT (fn);
6120
6121  /* The class that we're creating a pointer to member of.  */
6122  ptr_class = TYPE_PTRMEMFUNC_OBJECT_TYPE (type);
6123
6124  /* First, calculate the adjustment to the function's class.  */
6125  *delta = get_delta_difference (fn_class, ptr_class, /*force=*/0,
6126				 /*c_cast_p=*/0);
6127
6128  if (!DECL_VIRTUAL_P (fn))
6129    *pfn = convert (TYPE_PTRMEMFUNC_FN_TYPE (type), build_addr_func (fn));
6130  else
6131    {
6132      /* If we're dealing with a virtual function, we have to adjust 'this'
6133	 again, to point to the base which provides the vtable entry for
6134	 fn; the call will do the opposite adjustment.  */
6135      tree orig_class = DECL_CONTEXT (fn);
6136      tree binfo = binfo_or_else (orig_class, fn_class);
6137      *delta = build2 (PLUS_EXPR, TREE_TYPE (*delta),
6138		       *delta, BINFO_OFFSET (binfo));
6139      *delta = fold_if_not_in_template (*delta);
6140
6141      /* We set PFN to the vtable offset at which the function can be
6142	 found, plus one (unless ptrmemfunc_vbit_in_delta, in which
6143	 case delta is shifted left, and then incremented).  */
6144      *pfn = DECL_VINDEX (fn);
6145      *pfn = build2 (MULT_EXPR, integer_type_node, *pfn,
6146		     TYPE_SIZE_UNIT (vtable_entry_type));
6147      *pfn = fold_if_not_in_template (*pfn);
6148
6149      switch (TARGET_PTRMEMFUNC_VBIT_LOCATION)
6150	{
6151	case ptrmemfunc_vbit_in_pfn:
6152	  *pfn = build2 (PLUS_EXPR, integer_type_node, *pfn,
6153			 integer_one_node);
6154	  *pfn = fold_if_not_in_template (*pfn);
6155	  break;
6156
6157	case ptrmemfunc_vbit_in_delta:
6158	  *delta = build2 (LSHIFT_EXPR, TREE_TYPE (*delta),
6159			   *delta, integer_one_node);
6160	  *delta = fold_if_not_in_template (*delta);
6161	  *delta = build2 (PLUS_EXPR, TREE_TYPE (*delta),
6162			   *delta, integer_one_node);
6163	  *delta = fold_if_not_in_template (*delta);
6164	  break;
6165
6166	default:
6167	  gcc_unreachable ();
6168	}
6169
6170      *pfn = build_nop (TYPE_PTRMEMFUNC_FN_TYPE (type), *pfn);
6171      *pfn = fold_if_not_in_template (*pfn);
6172    }
6173}
6174
6175/* Return an expression for PFN from the pointer-to-member function
6176   given by T.  */
6177
6178static tree
6179pfn_from_ptrmemfunc (tree t)
6180{
6181  if (TREE_CODE (t) == PTRMEM_CST)
6182    {
6183      tree delta;
6184      tree pfn;
6185
6186      expand_ptrmemfunc_cst (t, &delta, &pfn);
6187      if (pfn)
6188	return pfn;
6189    }
6190
6191  return build_ptrmemfunc_access_expr (t, pfn_identifier);
6192}
6193
6194/* Convert value RHS to type TYPE as preparation for an assignment to
6195   an lvalue of type TYPE.  ERRTYPE is a string to use in error
6196   messages: "assignment", "return", etc.  If FNDECL is non-NULL, we
6197   are doing the conversion in order to pass the PARMNUMth argument of
6198   FNDECL.  */
6199
6200static tree
6201convert_for_assignment (tree type, tree rhs,
6202			const char *errtype, tree fndecl, int parmnum)
6203{
6204  tree rhstype;
6205  enum tree_code coder;
6206
6207  /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue.  */
6208  if (TREE_CODE (rhs) == NON_LVALUE_EXPR)
6209    rhs = TREE_OPERAND (rhs, 0);
6210
6211  rhstype = TREE_TYPE (rhs);
6212  coder = TREE_CODE (rhstype);
6213
6214  if (TREE_CODE (type) == VECTOR_TYPE && coder == VECTOR_TYPE
6215      && vector_types_convertible_p (type, rhstype))
6216    return convert (type, rhs);
6217
6218  if (rhs == error_mark_node || rhstype == error_mark_node)
6219    return error_mark_node;
6220  if (TREE_CODE (rhs) == TREE_LIST && TREE_VALUE (rhs) == error_mark_node)
6221    return error_mark_node;
6222
6223  /* The RHS of an assignment cannot have void type.  */
6224  if (coder == VOID_TYPE)
6225    {
6226      error ("void value not ignored as it ought to be");
6227      return error_mark_node;
6228    }
6229
6230  /* Simplify the RHS if possible.  */
6231  if (TREE_CODE (rhs) == CONST_DECL)
6232    rhs = DECL_INITIAL (rhs);
6233
6234  if (c_dialect_objc ())
6235    {
6236      int parmno;
6237      tree rname = fndecl;
6238
6239      if (!strcmp (errtype, "assignment"))
6240	parmno = -1;
6241      else if (!strcmp (errtype, "initialization"))
6242	parmno = -2;
6243      else
6244	{
6245	  tree selector = objc_message_selector ();
6246
6247	  parmno = parmnum;
6248
6249	  if (selector && parmno > 1)
6250	    {
6251	      rname = selector;
6252	      parmno -= 1;
6253	    }
6254	}
6255
6256      if (objc_compare_types (type, rhstype, parmno, rname))
6257	return convert (type, rhs);
6258    }
6259
6260  /* [expr.ass]
6261
6262     The expression is implicitly converted (clause _conv_) to the
6263     cv-unqualified type of the left operand.
6264
6265     We allow bad conversions here because by the time we get to this point
6266     we are committed to doing the conversion.  If we end up doing a bad
6267     conversion, convert_like will complain.  */
6268  if (!can_convert_arg_bad (type, rhstype, rhs))
6269    {
6270      /* When -Wno-pmf-conversions is use, we just silently allow
6271	 conversions from pointers-to-members to plain pointers.  If
6272	 the conversion doesn't work, cp_convert will complain.  */
6273      if (!warn_pmf2ptr
6274	  && TYPE_PTR_P (type)
6275	  && TYPE_PTRMEMFUNC_P (rhstype))
6276	rhs = cp_convert (strip_top_quals (type), rhs);
6277      else
6278	{
6279	  /* If the right-hand side has unknown type, then it is an
6280	     overloaded function.  Call instantiate_type to get error
6281	     messages.  */
6282	  if (rhstype == unknown_type_node)
6283	    instantiate_type (type, rhs, tf_warning_or_error);
6284	  else if (fndecl)
6285	    error ("cannot convert %qT to %qT for argument %qP to %qD",
6286		   rhstype, type, parmnum, fndecl);
6287	  else
6288	    error ("cannot convert %qT to %qT in %s", rhstype, type, errtype);
6289	  return error_mark_node;
6290	}
6291    }
6292  if (warn_missing_format_attribute)
6293    {
6294      const enum tree_code codel = TREE_CODE (type);
6295      if ((codel == POINTER_TYPE || codel == REFERENCE_TYPE)
6296	  && coder == codel
6297	  && check_missing_format_attribute (type, rhstype))
6298	warning (OPT_Wmissing_format_attribute,
6299		 "%s might be a candidate for a format attribute",
6300		 errtype);
6301    }
6302
6303  /* If -Wparentheses, warn about a = b = c when a has type bool and b
6304     does not.  */
6305  if (warn_parentheses
6306      && type == boolean_type_node
6307      && TREE_CODE (rhs) == MODIFY_EXPR
6308      && !TREE_NO_WARNING (rhs)
6309      && TREE_TYPE (rhs) != boolean_type_node)
6310    {
6311      warning (OPT_Wparentheses,
6312	       "suggest parentheses around assignment used as truth value");
6313      TREE_NO_WARNING (rhs) = 1;
6314    }
6315
6316  return perform_implicit_conversion (strip_top_quals (type), rhs);
6317}
6318
6319/* Convert RHS to be of type TYPE.
6320   If EXP is nonzero, it is the target of the initialization.
6321   ERRTYPE is a string to use in error messages.
6322
6323   Two major differences between the behavior of
6324   `convert_for_assignment' and `convert_for_initialization'
6325   are that references are bashed in the former, while
6326   copied in the latter, and aggregates are assigned in
6327   the former (operator=) while initialized in the
6328   latter (X(X&)).
6329
6330   If using constructor make sure no conversion operator exists, if one does
6331   exist, an ambiguity exists.
6332
6333   If flags doesn't include LOOKUP_COMPLAIN, don't complain about anything.  */
6334
6335tree
6336convert_for_initialization (tree exp, tree type, tree rhs, int flags,
6337			    const char *errtype, tree fndecl, int parmnum)
6338{
6339  enum tree_code codel = TREE_CODE (type);
6340  tree rhstype;
6341  enum tree_code coder;
6342
6343  /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
6344     Strip such NOP_EXPRs, since RHS is used in non-lvalue context.  */
6345  if (TREE_CODE (rhs) == NOP_EXPR
6346      && TREE_TYPE (rhs) == TREE_TYPE (TREE_OPERAND (rhs, 0))
6347      && codel != REFERENCE_TYPE)
6348    rhs = TREE_OPERAND (rhs, 0);
6349
6350  if (type == error_mark_node
6351      || rhs == error_mark_node
6352      || (TREE_CODE (rhs) == TREE_LIST && TREE_VALUE (rhs) == error_mark_node))
6353    return error_mark_node;
6354
6355  if ((TREE_CODE (TREE_TYPE (rhs)) == ARRAY_TYPE
6356       && TREE_CODE (type) != ARRAY_TYPE
6357       && (TREE_CODE (type) != REFERENCE_TYPE
6358	   || TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE))
6359      || (TREE_CODE (TREE_TYPE (rhs)) == FUNCTION_TYPE
6360	  && (TREE_CODE (type) != REFERENCE_TYPE
6361	      || TREE_CODE (TREE_TYPE (type)) != FUNCTION_TYPE))
6362      || TREE_CODE (TREE_TYPE (rhs)) == METHOD_TYPE)
6363    rhs = decay_conversion (rhs);
6364
6365  rhstype = TREE_TYPE (rhs);
6366  coder = TREE_CODE (rhstype);
6367
6368  if (coder == ERROR_MARK)
6369    return error_mark_node;
6370
6371  /* We accept references to incomplete types, so we can
6372     return here before checking if RHS is of complete type.  */
6373
6374  if (codel == REFERENCE_TYPE)
6375    {
6376      /* This should eventually happen in convert_arguments.  */
6377      int savew = 0, savee = 0;
6378
6379      if (fndecl)
6380	savew = warningcount, savee = errorcount;
6381      rhs = initialize_reference (type, rhs, /*decl=*/NULL_TREE,
6382				  /*cleanup=*/NULL);
6383      if (fndecl)
6384	{
6385	  if (warningcount > savew)
6386	    warning (0, "in passing argument %P of %q+D", parmnum, fndecl);
6387	  else if (errorcount > savee)
6388	    error ("in passing argument %P of %q+D", parmnum, fndecl);
6389	}
6390      return rhs;
6391    }
6392
6393  if (exp != 0)
6394    exp = require_complete_type (exp);
6395  if (exp == error_mark_node)
6396    return error_mark_node;
6397
6398  rhstype = non_reference (rhstype);
6399
6400  type = complete_type (type);
6401
6402  if (IS_AGGR_TYPE (type))
6403    return ocp_convert (type, rhs, CONV_IMPLICIT|CONV_FORCE_TEMP, flags);
6404
6405  return convert_for_assignment (type, rhs, errtype, fndecl, parmnum);
6406}
6407
6408/* If RETVAL is the address of, or a reference to, a local variable or
6409   temporary give an appropriate warning.  */
6410
6411static void
6412maybe_warn_about_returning_address_of_local (tree retval)
6413{
6414  tree valtype = TREE_TYPE (DECL_RESULT (current_function_decl));
6415  tree whats_returned = retval;
6416
6417  for (;;)
6418    {
6419      if (TREE_CODE (whats_returned) == COMPOUND_EXPR)
6420	whats_returned = TREE_OPERAND (whats_returned, 1);
6421      else if (TREE_CODE (whats_returned) == CONVERT_EXPR
6422	       || TREE_CODE (whats_returned) == NON_LVALUE_EXPR
6423	       || TREE_CODE (whats_returned) == NOP_EXPR)
6424	whats_returned = TREE_OPERAND (whats_returned, 0);
6425      else
6426	break;
6427    }
6428
6429  if (TREE_CODE (whats_returned) != ADDR_EXPR)
6430    return;
6431  whats_returned = TREE_OPERAND (whats_returned, 0);
6432
6433  if (TREE_CODE (valtype) == REFERENCE_TYPE)
6434    {
6435      if (TREE_CODE (whats_returned) == AGGR_INIT_EXPR
6436	  || TREE_CODE (whats_returned) == TARGET_EXPR)
6437	{
6438	  warning (0, "returning reference to temporary");
6439	  return;
6440	}
6441      if (TREE_CODE (whats_returned) == VAR_DECL
6442	  && DECL_NAME (whats_returned)
6443	  && TEMP_NAME_P (DECL_NAME (whats_returned)))
6444	{
6445	  warning (0, "reference to non-lvalue returned");
6446	  return;
6447	}
6448    }
6449
6450  while (TREE_CODE (whats_returned) == COMPONENT_REF
6451	 || TREE_CODE (whats_returned) == ARRAY_REF)
6452    whats_returned = TREE_OPERAND (whats_returned, 0);
6453
6454  if (DECL_P (whats_returned)
6455      && DECL_NAME (whats_returned)
6456      && DECL_FUNCTION_SCOPE_P (whats_returned)
6457      && !(TREE_STATIC (whats_returned)
6458	   || TREE_PUBLIC (whats_returned)))
6459    {
6460      if (TREE_CODE (valtype) == REFERENCE_TYPE)
6461	warning (0, "reference to local variable %q+D returned",
6462		 whats_returned);
6463      else
6464	warning (0, "address of local variable %q+D returned",
6465		 whats_returned);
6466      return;
6467    }
6468}
6469
6470/* Check that returning RETVAL from the current function is valid.
6471   Return an expression explicitly showing all conversions required to
6472   change RETVAL into the function return type, and to assign it to
6473   the DECL_RESULT for the function.  Set *NO_WARNING to true if
6474   code reaches end of non-void function warning shouldn't be issued
6475   on this RETURN_EXPR.  */
6476
6477tree
6478check_return_expr (tree retval, bool *no_warning)
6479{
6480  tree result;
6481  /* The type actually returned by the function, after any
6482     promotions.  */
6483  tree valtype;
6484  int fn_returns_value_p;
6485
6486  *no_warning = false;
6487
6488  /* A `volatile' function is one that isn't supposed to return, ever.
6489     (This is a G++ extension, used to get better code for functions
6490     that call the `volatile' function.)  */
6491  if (TREE_THIS_VOLATILE (current_function_decl))
6492    warning (0, "function declared %<noreturn%> has a %<return%> statement");
6493
6494  /* Check for various simple errors.  */
6495  if (DECL_DESTRUCTOR_P (current_function_decl))
6496    {
6497      if (retval)
6498	error ("returning a value from a destructor");
6499      return NULL_TREE;
6500    }
6501  else if (DECL_CONSTRUCTOR_P (current_function_decl))
6502    {
6503      if (in_function_try_handler)
6504	/* If a return statement appears in a handler of the
6505	   function-try-block of a constructor, the program is ill-formed.  */
6506	error ("cannot return from a handler of a function-try-block of a constructor");
6507      else if (retval)
6508	/* You can't return a value from a constructor.  */
6509	error ("returning a value from a constructor");
6510      return NULL_TREE;
6511    }
6512
6513  if (processing_template_decl)
6514    {
6515      current_function_returns_value = 1;
6516      return retval;
6517    }
6518
6519  /* When no explicit return-value is given in a function with a named
6520     return value, the named return value is used.  */
6521  result = DECL_RESULT (current_function_decl);
6522  valtype = TREE_TYPE (result);
6523  gcc_assert (valtype != NULL_TREE);
6524  fn_returns_value_p = !VOID_TYPE_P (valtype);
6525  if (!retval && DECL_NAME (result) && fn_returns_value_p)
6526    retval = result;
6527
6528  /* Check for a return statement with no return value in a function
6529     that's supposed to return a value.  */
6530  if (!retval && fn_returns_value_p)
6531    {
6532      pedwarn ("return-statement with no value, in function returning %qT",
6533	       valtype);
6534      /* Clear this, so finish_function won't say that we reach the
6535	 end of a non-void function (which we don't, we gave a
6536	 return!).  */
6537      current_function_returns_null = 0;
6538      /* And signal caller that TREE_NO_WARNING should be set on the
6539	 RETURN_EXPR to avoid control reaches end of non-void function
6540	 warnings in tree-cfg.c.  */
6541      *no_warning = true;
6542    }
6543  /* Check for a return statement with a value in a function that
6544     isn't supposed to return a value.  */
6545  else if (retval && !fn_returns_value_p)
6546    {
6547      if (VOID_TYPE_P (TREE_TYPE (retval)))
6548	/* You can return a `void' value from a function of `void'
6549	   type.  In that case, we have to evaluate the expression for
6550	   its side-effects.  */
6551	  finish_expr_stmt (retval);
6552      else
6553	pedwarn ("return-statement with a value, in function "
6554		 "returning 'void'");
6555
6556      current_function_returns_null = 1;
6557
6558      /* There's really no value to return, after all.  */
6559      return NULL_TREE;
6560    }
6561  else if (!retval)
6562    /* Remember that this function can sometimes return without a
6563       value.  */
6564    current_function_returns_null = 1;
6565  else
6566    /* Remember that this function did return a value.  */
6567    current_function_returns_value = 1;
6568
6569  /* Check for erroneous operands -- but after giving ourselves a
6570     chance to provide an error about returning a value from a void
6571     function.  */
6572  if (error_operand_p (retval))
6573    {
6574      current_function_return_value = error_mark_node;
6575      return error_mark_node;
6576    }
6577
6578  /* Only operator new(...) throw(), can return NULL [expr.new/13].  */
6579  if ((DECL_OVERLOADED_OPERATOR_P (current_function_decl) == NEW_EXPR
6580       || DECL_OVERLOADED_OPERATOR_P (current_function_decl) == VEC_NEW_EXPR)
6581      && !TYPE_NOTHROW_P (TREE_TYPE (current_function_decl))
6582      && ! flag_check_new
6583      && null_ptr_cst_p (retval))
6584    warning (0, "%<operator new%> must not return NULL unless it is "
6585	     "declared %<throw()%> (or -fcheck-new is in effect)");
6586
6587  /* Effective C++ rule 15.  See also start_function.  */
6588  if (warn_ecpp
6589      && DECL_NAME (current_function_decl) == ansi_assopname(NOP_EXPR))
6590    {
6591      bool warn = true;
6592
6593      /* The function return type must be a reference to the current
6594	class.  */
6595      if (TREE_CODE (valtype) == REFERENCE_TYPE
6596	  && same_type_ignoring_top_level_qualifiers_p
6597	      (TREE_TYPE (valtype), TREE_TYPE (current_class_ref)))
6598	{
6599	  /* Returning '*this' is obviously OK.  */
6600	  if (retval == current_class_ref)
6601	    warn = false;
6602	  /* If we are calling a function whose return type is the same of
6603	     the current class reference, it is ok.  */
6604	  else if (TREE_CODE (retval) == INDIRECT_REF
6605		   && TREE_CODE (TREE_OPERAND (retval, 0)) == CALL_EXPR)
6606	    warn = false;
6607	}
6608
6609      if (warn)
6610	warning (OPT_Weffc__, "%<operator=%> should return a reference to %<*this%>");
6611    }
6612
6613  /* The fabled Named Return Value optimization, as per [class.copy]/15:
6614
6615     [...]      For  a function with a class return type, if the expression
6616     in the return statement is the name of a local  object,  and  the  cv-
6617     unqualified  type  of  the  local  object  is the same as the function
6618     return type, an implementation is permitted to omit creating the  tem-
6619     porary  object  to  hold  the function return value [...]
6620
6621     So, if this is a value-returning function that always returns the same
6622     local variable, remember it.
6623
6624     It might be nice to be more flexible, and choose the first suitable
6625     variable even if the function sometimes returns something else, but
6626     then we run the risk of clobbering the variable we chose if the other
6627     returned expression uses the chosen variable somehow.  And people expect
6628     this restriction, anyway.  (jason 2000-11-19)
6629
6630     See finish_function and finalize_nrv for the rest of this optimization.  */
6631
6632  if (fn_returns_value_p && flag_elide_constructors)
6633    {
6634      if (retval != NULL_TREE
6635	  && (current_function_return_value == NULL_TREE
6636	      || current_function_return_value == retval)
6637	  && TREE_CODE (retval) == VAR_DECL
6638	  && DECL_CONTEXT (retval) == current_function_decl
6639	  && ! TREE_STATIC (retval)
6640	  && ! DECL_ANON_UNION_VAR_P (retval)
6641	  && (DECL_ALIGN (retval)
6642	      >= DECL_ALIGN (DECL_RESULT (current_function_decl)))
6643	  && same_type_p ((TYPE_MAIN_VARIANT
6644			   (TREE_TYPE (retval))),
6645			  (TYPE_MAIN_VARIANT
6646			   (TREE_TYPE (TREE_TYPE (current_function_decl))))))
6647	current_function_return_value = retval;
6648      else
6649	current_function_return_value = error_mark_node;
6650    }
6651
6652  /* We don't need to do any conversions when there's nothing being
6653     returned.  */
6654  if (!retval)
6655    return NULL_TREE;
6656
6657  /* Do any required conversions.  */
6658  if (retval == result || DECL_CONSTRUCTOR_P (current_function_decl))
6659    /* No conversions are required.  */
6660    ;
6661  else
6662    {
6663      /* The type the function is declared to return.  */
6664      tree functype = TREE_TYPE (TREE_TYPE (current_function_decl));
6665
6666      /* The functype's return type will have been set to void, if it
6667	 was an incomplete type.  Just treat this as 'return;' */
6668      if (VOID_TYPE_P (functype))
6669	return error_mark_node;
6670
6671      /* First convert the value to the function's return type, then
6672	 to the type of return value's location to handle the
6673	 case that functype is smaller than the valtype.  */
6674      retval = convert_for_initialization
6675	(NULL_TREE, functype, retval, LOOKUP_NORMAL|LOOKUP_ONLYCONVERTING,
6676	 "return", NULL_TREE, 0);
6677      retval = convert (valtype, retval);
6678
6679      /* If the conversion failed, treat this just like `return;'.  */
6680      if (retval == error_mark_node)
6681	return retval;
6682      /* We can't initialize a register from a AGGR_INIT_EXPR.  */
6683      else if (! current_function_returns_struct
6684	       && TREE_CODE (retval) == TARGET_EXPR
6685	       && TREE_CODE (TREE_OPERAND (retval, 1)) == AGGR_INIT_EXPR)
6686	retval = build2 (COMPOUND_EXPR, TREE_TYPE (retval), retval,
6687			 TREE_OPERAND (retval, 0));
6688      else
6689	maybe_warn_about_returning_address_of_local (retval);
6690    }
6691
6692  /* Actually copy the value returned into the appropriate location.  */
6693  if (retval && retval != result)
6694    retval = build2 (INIT_EXPR, TREE_TYPE (result), result, retval);
6695
6696  return retval;
6697}
6698
6699
6700/* Returns nonzero if the pointer-type FROM can be converted to the
6701   pointer-type TO via a qualification conversion.  If CONSTP is -1,
6702   then we return nonzero if the pointers are similar, and the
6703   cv-qualification signature of FROM is a proper subset of that of TO.
6704
6705   If CONSTP is positive, then all outer pointers have been
6706   const-qualified.  */
6707
6708static int
6709comp_ptr_ttypes_real (tree to, tree from, int constp)
6710{
6711  bool to_more_cv_qualified = false;
6712
6713  for (; ; to = TREE_TYPE (to), from = TREE_TYPE (from))
6714    {
6715      if (TREE_CODE (to) != TREE_CODE (from))
6716	return 0;
6717
6718      if (TREE_CODE (from) == OFFSET_TYPE
6719	  && !same_type_p (TYPE_OFFSET_BASETYPE (from),
6720			   TYPE_OFFSET_BASETYPE (to)))
6721	return 0;
6722
6723      /* Const and volatile mean something different for function types,
6724	 so the usual checks are not appropriate.  */
6725      if (TREE_CODE (to) != FUNCTION_TYPE && TREE_CODE (to) != METHOD_TYPE)
6726	{
6727	  /* In Objective-C++, some types may have been 'volatilized' by
6728	     the compiler for EH; when comparing them here, the volatile
6729	     qualification must be ignored.  */
6730	  bool objc_quals_match = objc_type_quals_match (to, from);
6731
6732	  if (!at_least_as_qualified_p (to, from) && !objc_quals_match)
6733	    return 0;
6734
6735	  if (!at_least_as_qualified_p (from, to) && !objc_quals_match)
6736	    {
6737	      if (constp == 0)
6738		return 0;
6739	      to_more_cv_qualified = true;
6740	    }
6741
6742	  if (constp > 0)
6743	    constp &= TYPE_READONLY (to);
6744	}
6745
6746      if (TREE_CODE (to) != POINTER_TYPE && !TYPE_PTRMEM_P (to))
6747	return ((constp >= 0 || to_more_cv_qualified)
6748		&& same_type_ignoring_top_level_qualifiers_p (to, from));
6749    }
6750}
6751
6752/* When comparing, say, char ** to char const **, this function takes
6753   the 'char *' and 'char const *'.  Do not pass non-pointer/reference
6754   types to this function.  */
6755
6756int
6757comp_ptr_ttypes (tree to, tree from)
6758{
6759  return comp_ptr_ttypes_real (to, from, 1);
6760}
6761
6762/* Returns 1 if to and from are (possibly multi-level) pointers to the same
6763   type or inheritance-related types, regardless of cv-quals.  */
6764
6765int
6766ptr_reasonably_similar (tree to, tree from)
6767{
6768  for (; ; to = TREE_TYPE (to), from = TREE_TYPE (from))
6769    {
6770      /* Any target type is similar enough to void.  */
6771      if (TREE_CODE (to) == VOID_TYPE
6772	  || TREE_CODE (from) == VOID_TYPE)
6773	return 1;
6774
6775      if (TREE_CODE (to) != TREE_CODE (from))
6776	return 0;
6777
6778      if (TREE_CODE (from) == OFFSET_TYPE
6779	  && comptypes (TYPE_OFFSET_BASETYPE (to),
6780			TYPE_OFFSET_BASETYPE (from),
6781			COMPARE_BASE | COMPARE_DERIVED))
6782	continue;
6783
6784      if (TREE_CODE (to) == VECTOR_TYPE
6785	  && vector_types_convertible_p (to, from))
6786	return 1;
6787
6788      if (TREE_CODE (to) == INTEGER_TYPE
6789	  && TYPE_PRECISION (to) == TYPE_PRECISION (from))
6790	return 1;
6791
6792      if (TREE_CODE (to) == FUNCTION_TYPE)
6793	return 1;
6794
6795      if (TREE_CODE (to) != POINTER_TYPE)
6796	return comptypes
6797	  (TYPE_MAIN_VARIANT (to), TYPE_MAIN_VARIANT (from),
6798	   COMPARE_BASE | COMPARE_DERIVED);
6799    }
6800}
6801
6802/* Return true if TO and FROM (both of which are POINTER_TYPEs or
6803   pointer-to-member types) are the same, ignoring cv-qualification at
6804   all levels.  */
6805
6806bool
6807comp_ptr_ttypes_const (tree to, tree from)
6808{
6809  for (; ; to = TREE_TYPE (to), from = TREE_TYPE (from))
6810    {
6811      if (TREE_CODE (to) != TREE_CODE (from))
6812	return false;
6813
6814      if (TREE_CODE (from) == OFFSET_TYPE
6815	  && same_type_p (TYPE_OFFSET_BASETYPE (from),
6816			  TYPE_OFFSET_BASETYPE (to)))
6817	  continue;
6818
6819      if (TREE_CODE (to) != POINTER_TYPE)
6820	return same_type_ignoring_top_level_qualifiers_p (to, from);
6821    }
6822}
6823
6824/* Returns the type qualifiers for this type, including the qualifiers on the
6825   elements for an array type.  */
6826
6827int
6828cp_type_quals (tree type)
6829{
6830  type = strip_array_types (type);
6831  if (type == error_mark_node)
6832    return TYPE_UNQUALIFIED;
6833  return TYPE_QUALS (type);
6834}
6835
6836/* Returns nonzero if the TYPE is const from a C++ perspective: look inside
6837   arrays.  */
6838
6839bool
6840cp_type_readonly (tree type)
6841{
6842  type = strip_array_types (type);
6843  return TYPE_READONLY (type);
6844}
6845
6846/* Returns nonzero if the TYPE contains a mutable member.  */
6847
6848bool
6849cp_has_mutable_p (tree type)
6850{
6851  type = strip_array_types (type);
6852
6853  return CLASS_TYPE_P (type) && CLASSTYPE_HAS_MUTABLE (type);
6854}
6855
6856/* Apply the TYPE_QUALS to the new DECL.  */
6857void
6858cp_apply_type_quals_to_decl (int type_quals, tree decl)
6859{
6860  tree type = TREE_TYPE (decl);
6861
6862  if (type == error_mark_node)
6863    return;
6864
6865  if (TREE_CODE (type) == FUNCTION_TYPE
6866      && type_quals != TYPE_UNQUALIFIED)
6867    {
6868      /* This was an error in C++98 (cv-qualifiers cannot be added to
6869	 a function type), but DR 295 makes the code well-formed by
6870	 dropping the extra qualifiers. */
6871      if (pedantic)
6872	{
6873	  tree bad_type = build_qualified_type (type, type_quals);
6874	  pedwarn ("ignoring %qV qualifiers added to function type %qT",
6875		   bad_type, type);
6876	}
6877
6878      TREE_TYPE (decl) = TYPE_MAIN_VARIANT (type);
6879      return;
6880    }
6881
6882  /* Avoid setting TREE_READONLY incorrectly.  */
6883  if (/* If the object has a constructor, the constructor may modify
6884	 the object.  */
6885      TYPE_NEEDS_CONSTRUCTING (type)
6886      /* If the type isn't complete, we don't know yet if it will need
6887	 constructing.  */
6888      || !COMPLETE_TYPE_P (type)
6889      /* If the type has a mutable component, that component might be
6890	 modified.  */
6891      || TYPE_HAS_MUTABLE_P (type))
6892    type_quals &= ~TYPE_QUAL_CONST;
6893
6894  c_apply_type_quals_to_decl (type_quals, decl);
6895}
6896
6897/* Subroutine of casts_away_constness.  Make T1 and T2 point at
6898   exemplar types such that casting T1 to T2 is casting away constness
6899   if and only if there is no implicit conversion from T1 to T2.  */
6900
6901static void
6902casts_away_constness_r (tree *t1, tree *t2)
6903{
6904  int quals1;
6905  int quals2;
6906
6907  /* [expr.const.cast]
6908
6909     For multi-level pointer to members and multi-level mixed pointers
6910     and pointers to members (conv.qual), the "member" aspect of a
6911     pointer to member level is ignored when determining if a const
6912     cv-qualifier has been cast away.  */
6913  /* [expr.const.cast]
6914
6915     For  two  pointer types:
6916
6917	    X1 is T1cv1,1 * ... cv1,N *   where T1 is not a pointer type
6918	    X2 is T2cv2,1 * ... cv2,M *   where T2 is not a pointer type
6919	    K is min(N,M)
6920
6921     casting from X1 to X2 casts away constness if, for a non-pointer
6922     type T there does not exist an implicit conversion (clause
6923     _conv_) from:
6924
6925	    Tcv1,(N-K+1) * cv1,(N-K+2) * ... cv1,N *
6926
6927     to
6928
6929	    Tcv2,(M-K+1) * cv2,(M-K+2) * ... cv2,M *.  */
6930  if ((!TYPE_PTR_P (*t1) && !TYPE_PTRMEM_P (*t1))
6931      || (!TYPE_PTR_P (*t2) && !TYPE_PTRMEM_P (*t2)))
6932    {
6933      *t1 = cp_build_qualified_type (void_type_node,
6934				     cp_type_quals (*t1));
6935      *t2 = cp_build_qualified_type (void_type_node,
6936				     cp_type_quals (*t2));
6937      return;
6938    }
6939
6940  quals1 = cp_type_quals (*t1);
6941  quals2 = cp_type_quals (*t2);
6942
6943  if (TYPE_PTRMEM_P (*t1))
6944    *t1 = TYPE_PTRMEM_POINTED_TO_TYPE (*t1);
6945  else
6946    *t1 = TREE_TYPE (*t1);
6947  if (TYPE_PTRMEM_P (*t2))
6948    *t2 = TYPE_PTRMEM_POINTED_TO_TYPE (*t2);
6949  else
6950    *t2 = TREE_TYPE (*t2);
6951
6952  casts_away_constness_r (t1, t2);
6953  *t1 = build_pointer_type (*t1);
6954  *t2 = build_pointer_type (*t2);
6955  *t1 = cp_build_qualified_type (*t1, quals1);
6956  *t2 = cp_build_qualified_type (*t2, quals2);
6957}
6958
6959/* Returns nonzero if casting from TYPE1 to TYPE2 casts away
6960   constness.  */
6961
6962static bool
6963casts_away_constness (tree t1, tree t2)
6964{
6965  if (TREE_CODE (t2) == REFERENCE_TYPE)
6966    {
6967      /* [expr.const.cast]
6968
6969	 Casting from an lvalue of type T1 to an lvalue of type T2
6970	 using a reference cast casts away constness if a cast from an
6971	 rvalue of type "pointer to T1" to the type "pointer to T2"
6972	 casts away constness.  */
6973      t1 = (TREE_CODE (t1) == REFERENCE_TYPE ? TREE_TYPE (t1) : t1);
6974      return casts_away_constness (build_pointer_type (t1),
6975				   build_pointer_type (TREE_TYPE (t2)));
6976    }
6977
6978  if (TYPE_PTRMEM_P (t1) && TYPE_PTRMEM_P (t2))
6979    /* [expr.const.cast]
6980
6981       Casting from an rvalue of type "pointer to data member of X
6982       of type T1" to the type "pointer to data member of Y of type
6983       T2" casts away constness if a cast from an rvalue of type
6984       "pointer to T1" to the type "pointer to T2" casts away
6985       constness.  */
6986    return casts_away_constness
6987      (build_pointer_type (TYPE_PTRMEM_POINTED_TO_TYPE (t1)),
6988       build_pointer_type (TYPE_PTRMEM_POINTED_TO_TYPE (t2)));
6989
6990  /* Casting away constness is only something that makes sense for
6991     pointer or reference types.  */
6992  if (TREE_CODE (t1) != POINTER_TYPE
6993      || TREE_CODE (t2) != POINTER_TYPE)
6994    return false;
6995
6996  /* Top-level qualifiers don't matter.  */
6997  t1 = TYPE_MAIN_VARIANT (t1);
6998  t2 = TYPE_MAIN_VARIANT (t2);
6999  casts_away_constness_r (&t1, &t2);
7000  if (!can_convert (t2, t1))
7001    return true;
7002
7003  return false;
7004}
7005
7006/* If T is a REFERENCE_TYPE return the type to which T refers.
7007   Otherwise, return T itself.  */
7008
7009tree
7010non_reference (tree t)
7011{
7012  if (TREE_CODE (t) == REFERENCE_TYPE)
7013    t = TREE_TYPE (t);
7014  return t;
7015}
7016
7017
7018/* Return nonzero if REF is an lvalue valid for this language;
7019   otherwise, print an error message and return zero.  USE says
7020   how the lvalue is being used and so selects the error message.  */
7021
7022int
7023lvalue_or_else (tree ref, enum lvalue_use use)
7024{
7025  int win = lvalue_p (ref);
7026
7027  if (!win)
7028    lvalue_error (use);
7029
7030  return win;
7031}
7032