typeck.c revision 259405
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 (TREE_CODE (ptr) == CONVERT_EXPR
2338          || TREE_CODE (ptr) == NOP_EXPR
2339          || TREE_CODE (ptr) == VIEW_CONVERT_EXPR)
2340	{
2341	  /* If a warning is issued, mark it to avoid duplicates from
2342	     the backend.  This only needs to be done at
2343	     warn_strict_aliasing > 2.  */
2344	  if (warn_strict_aliasing > 2)
2345	    if (strict_aliasing_warning (TREE_TYPE (TREE_OPERAND (ptr, 0)),
2346					 type, TREE_OPERAND (ptr, 0)))
2347	      TREE_NO_WARNING (ptr) = 1;
2348	}
2349
2350      if (VOID_TYPE_P (t))
2351	{
2352	  /* A pointer to incomplete type (other than cv void) can be
2353	     dereferenced [expr.unary.op]/1  */
2354	  error ("%qT is not a pointer-to-object type", type);
2355	  return error_mark_node;
2356	}
2357      else if (TREE_CODE (pointer) == ADDR_EXPR
2358	       && same_type_p (t, TREE_TYPE (TREE_OPERAND (pointer, 0))))
2359	/* The POINTER was something like `&x'.  We simplify `*&x' to
2360	   `x'.  */
2361	return TREE_OPERAND (pointer, 0);
2362      else
2363	{
2364	  tree ref = build1 (INDIRECT_REF, t, pointer);
2365
2366	  /* We *must* set TREE_READONLY when dereferencing a pointer to const,
2367	     so that we get the proper error message if the result is used
2368	     to assign to.  Also, &* is supposed to be a no-op.  */
2369	  TREE_READONLY (ref) = CP_TYPE_CONST_P (t);
2370	  TREE_THIS_VOLATILE (ref) = CP_TYPE_VOLATILE_P (t);
2371	  TREE_SIDE_EFFECTS (ref)
2372	    = (TREE_THIS_VOLATILE (ref) || TREE_SIDE_EFFECTS (pointer));
2373	  return ref;
2374	}
2375    }
2376  /* `pointer' won't be an error_mark_node if we were given a
2377     pointer to member, so it's cool to check for this here.  */
2378  else if (TYPE_PTR_TO_MEMBER_P (type))
2379    error ("invalid use of %qs on pointer to member", errorstring);
2380  else if (pointer != error_mark_node)
2381    {
2382      if (errorstring)
2383	error ("invalid type argument of %qs", errorstring);
2384      else
2385	error ("invalid type argument");
2386    }
2387  return error_mark_node;
2388}
2389
2390/* This handles expressions of the form "a[i]", which denotes
2391   an array reference.
2392
2393   This is logically equivalent in C to *(a+i), but we may do it differently.
2394   If A is a variable or a member, we generate a primitive ARRAY_REF.
2395   This avoids forcing the array out of registers, and can work on
2396   arrays that are not lvalues (for example, members of structures returned
2397   by functions).
2398
2399   If INDEX is of some user-defined type, it must be converted to
2400   integer type.  Otherwise, to make a compatible PLUS_EXPR, it
2401   will inherit the type of the array, which will be some pointer type.  */
2402
2403tree
2404build_array_ref (tree array, tree idx)
2405{
2406  if (idx == 0)
2407    {
2408      error ("subscript missing in array reference");
2409      return error_mark_node;
2410    }
2411
2412  if (TREE_TYPE (array) == error_mark_node
2413      || TREE_TYPE (idx) == error_mark_node)
2414    return error_mark_node;
2415
2416  /* If ARRAY is a COMPOUND_EXPR or COND_EXPR, move our reference
2417     inside it.  */
2418  switch (TREE_CODE (array))
2419    {
2420    case COMPOUND_EXPR:
2421      {
2422	tree value = build_array_ref (TREE_OPERAND (array, 1), idx);
2423	return build2 (COMPOUND_EXPR, TREE_TYPE (value),
2424		       TREE_OPERAND (array, 0), value);
2425      }
2426
2427    case COND_EXPR:
2428      return build_conditional_expr
2429	(TREE_OPERAND (array, 0),
2430	 build_array_ref (TREE_OPERAND (array, 1), idx),
2431	 build_array_ref (TREE_OPERAND (array, 2), idx));
2432
2433    default:
2434      break;
2435    }
2436
2437  if (TREE_CODE (TREE_TYPE (array)) == ARRAY_TYPE)
2438    {
2439      tree rval, type;
2440
2441      warn_array_subscript_with_type_char (idx);
2442
2443      if (!INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (idx)))
2444	{
2445	  error ("array subscript is not an integer");
2446	  return error_mark_node;
2447	}
2448
2449      /* Apply integral promotions *after* noticing character types.
2450	 (It is unclear why we do these promotions -- the standard
2451	 does not say that we should.  In fact, the natural thing would
2452	 seem to be to convert IDX to ptrdiff_t; we're performing
2453	 pointer arithmetic.)  */
2454      idx = perform_integral_promotions (idx);
2455
2456      /* An array that is indexed by a non-constant
2457	 cannot be stored in a register; we must be able to do
2458	 address arithmetic on its address.
2459	 Likewise an array of elements of variable size.  */
2460      if (TREE_CODE (idx) != INTEGER_CST
2461	  || (COMPLETE_TYPE_P (TREE_TYPE (TREE_TYPE (array)))
2462	      && (TREE_CODE (TYPE_SIZE (TREE_TYPE (TREE_TYPE (array))))
2463		  != INTEGER_CST)))
2464	{
2465	  if (!cxx_mark_addressable (array))
2466	    return error_mark_node;
2467	}
2468
2469      /* An array that is indexed by a constant value which is not within
2470	 the array bounds cannot be stored in a register either; because we
2471	 would get a crash in store_bit_field/extract_bit_field when trying
2472	 to access a non-existent part of the register.  */
2473      if (TREE_CODE (idx) == INTEGER_CST
2474	  && TYPE_DOMAIN (TREE_TYPE (array))
2475	  && ! int_fits_type_p (idx, TYPE_DOMAIN (TREE_TYPE (array))))
2476	{
2477	  if (!cxx_mark_addressable (array))
2478	    return error_mark_node;
2479	}
2480
2481      if (pedantic && !lvalue_p (array))
2482	pedwarn ("ISO C++ forbids subscripting non-lvalue array");
2483
2484      /* Note in C++ it is valid to subscript a `register' array, since
2485	 it is valid to take the address of something with that
2486	 storage specification.  */
2487      if (extra_warnings)
2488	{
2489	  tree foo = array;
2490	  while (TREE_CODE (foo) == COMPONENT_REF)
2491	    foo = TREE_OPERAND (foo, 0);
2492	  if (TREE_CODE (foo) == VAR_DECL && DECL_REGISTER (foo))
2493	    warning (OPT_Wextra, "subscripting array declared %<register%>");
2494	}
2495
2496      type = TREE_TYPE (TREE_TYPE (array));
2497      rval = build4 (ARRAY_REF, type, array, idx, NULL_TREE, NULL_TREE);
2498      /* Array ref is const/volatile if the array elements are
2499	 or if the array is..  */
2500      TREE_READONLY (rval)
2501	|= (CP_TYPE_CONST_P (type) | TREE_READONLY (array));
2502      TREE_SIDE_EFFECTS (rval)
2503	|= (CP_TYPE_VOLATILE_P (type) | TREE_SIDE_EFFECTS (array));
2504      TREE_THIS_VOLATILE (rval)
2505	|= (CP_TYPE_VOLATILE_P (type) | TREE_THIS_VOLATILE (array));
2506      return require_complete_type (fold_if_not_in_template (rval));
2507    }
2508
2509  {
2510    tree ar = default_conversion (array);
2511    tree ind = default_conversion (idx);
2512
2513    /* Put the integer in IND to simplify error checking.  */
2514    if (TREE_CODE (TREE_TYPE (ar)) == INTEGER_TYPE)
2515      {
2516	tree temp = ar;
2517	ar = ind;
2518	ind = temp;
2519      }
2520
2521    if (ar == error_mark_node)
2522      return ar;
2523
2524    if (TREE_CODE (TREE_TYPE (ar)) != POINTER_TYPE)
2525      {
2526	error ("subscripted value is neither array nor pointer");
2527	return error_mark_node;
2528      }
2529    if (TREE_CODE (TREE_TYPE (ind)) != INTEGER_TYPE)
2530      {
2531	error ("array subscript is not an integer");
2532	return error_mark_node;
2533      }
2534
2535    return build_indirect_ref (cp_build_binary_op (PLUS_EXPR, ar, ind),
2536			       "array indexing");
2537  }
2538}
2539
2540/* Resolve a pointer to member function.  INSTANCE is the object
2541   instance to use, if the member points to a virtual member.
2542
2543   This used to avoid checking for virtual functions if basetype
2544   has no virtual functions, according to an earlier ANSI draft.
2545   With the final ISO C++ rules, such an optimization is
2546   incorrect: A pointer to a derived member can be static_cast
2547   to pointer-to-base-member, as long as the dynamic object
2548   later has the right member.  */
2549
2550tree
2551get_member_function_from_ptrfunc (tree *instance_ptrptr, tree function)
2552{
2553  if (TREE_CODE (function) == OFFSET_REF)
2554    function = TREE_OPERAND (function, 1);
2555
2556  if (TYPE_PTRMEMFUNC_P (TREE_TYPE (function)))
2557    {
2558      tree idx, delta, e1, e2, e3, vtbl, basetype;
2559      tree fntype = TYPE_PTRMEMFUNC_FN_TYPE (TREE_TYPE (function));
2560
2561      tree instance_ptr = *instance_ptrptr;
2562      tree instance_save_expr = 0;
2563      if (instance_ptr == error_mark_node)
2564	{
2565	  if (TREE_CODE (function) == PTRMEM_CST)
2566	    {
2567	      /* Extracting the function address from a pmf is only
2568		 allowed with -Wno-pmf-conversions. It only works for
2569		 pmf constants.  */
2570	      e1 = build_addr_func (PTRMEM_CST_MEMBER (function));
2571	      e1 = convert (fntype, e1);
2572	      return e1;
2573	    }
2574	  else
2575	    {
2576	      error ("object missing in use of %qE", function);
2577	      return error_mark_node;
2578	    }
2579	}
2580
2581      if (TREE_SIDE_EFFECTS (instance_ptr))
2582	instance_ptr = instance_save_expr = save_expr (instance_ptr);
2583
2584      if (TREE_SIDE_EFFECTS (function))
2585	function = save_expr (function);
2586
2587      /* Start by extracting all the information from the PMF itself.  */
2588      e3 = pfn_from_ptrmemfunc (function);
2589      delta = build_ptrmemfunc_access_expr (function, delta_identifier);
2590      idx = build1 (NOP_EXPR, vtable_index_type, e3);
2591      switch (TARGET_PTRMEMFUNC_VBIT_LOCATION)
2592	{
2593	case ptrmemfunc_vbit_in_pfn:
2594	  e1 = cp_build_binary_op (BIT_AND_EXPR, idx, integer_one_node);
2595	  idx = cp_build_binary_op (MINUS_EXPR, idx, integer_one_node);
2596	  break;
2597
2598	case ptrmemfunc_vbit_in_delta:
2599	  e1 = cp_build_binary_op (BIT_AND_EXPR, delta, integer_one_node);
2600	  delta = cp_build_binary_op (RSHIFT_EXPR, delta, integer_one_node);
2601	  break;
2602
2603	default:
2604	  gcc_unreachable ();
2605	}
2606
2607      /* Convert down to the right base before using the instance.  A
2608	 special case is that in a pointer to member of class C, C may
2609	 be incomplete.  In that case, the function will of course be
2610	 a member of C, and no conversion is required.  In fact,
2611	 lookup_base will fail in that case, because incomplete
2612	 classes do not have BINFOs.  */
2613      basetype = TYPE_METHOD_BASETYPE (TREE_TYPE (fntype));
2614      if (!same_type_ignoring_top_level_qualifiers_p
2615	  (basetype, TREE_TYPE (TREE_TYPE (instance_ptr))))
2616	{
2617	  basetype = lookup_base (TREE_TYPE (TREE_TYPE (instance_ptr)),
2618				  basetype, ba_check, NULL);
2619	  instance_ptr = build_base_path (PLUS_EXPR, instance_ptr, basetype,
2620					  1);
2621	  if (instance_ptr == error_mark_node)
2622	    return error_mark_node;
2623	}
2624      /* ...and then the delta in the PMF.  */
2625      instance_ptr = build2 (PLUS_EXPR, TREE_TYPE (instance_ptr),
2626			     instance_ptr, delta);
2627
2628      /* Hand back the adjusted 'this' argument to our caller.  */
2629      *instance_ptrptr = instance_ptr;
2630
2631      /* Next extract the vtable pointer from the object.  */
2632      vtbl = build1 (NOP_EXPR, build_pointer_type (vtbl_ptr_type_node),
2633		     instance_ptr);
2634      vtbl = build_indirect_ref (vtbl, NULL);
2635
2636      /* Finally, extract the function pointer from the vtable.  */
2637      e2 = fold_build2 (PLUS_EXPR, TREE_TYPE (vtbl), vtbl, idx);
2638      e2 = build_indirect_ref (e2, NULL);
2639      TREE_CONSTANT (e2) = 1;
2640      TREE_INVARIANT (e2) = 1;
2641
2642      /* When using function descriptors, the address of the
2643	 vtable entry is treated as a function pointer.  */
2644      if (TARGET_VTABLE_USES_DESCRIPTORS)
2645	e2 = build1 (NOP_EXPR, TREE_TYPE (e2),
2646		     build_unary_op (ADDR_EXPR, e2, /*noconvert=*/1));
2647
2648      TREE_TYPE (e2) = TREE_TYPE (e3);
2649      e1 = build_conditional_expr (e1, e2, e3);
2650
2651      /* Make sure this doesn't get evaluated first inside one of the
2652	 branches of the COND_EXPR.  */
2653      if (instance_save_expr)
2654	e1 = build2 (COMPOUND_EXPR, TREE_TYPE (e1),
2655		     instance_save_expr, e1);
2656
2657      function = e1;
2658    }
2659  return function;
2660}
2661
2662tree
2663build_function_call (tree function, tree params)
2664{
2665  tree fntype, fndecl;
2666  tree coerced_params;
2667  tree name = NULL_TREE;
2668  int is_method;
2669  tree original = function;
2670
2671  /* For Objective-C, convert any calls via a cast to OBJC_TYPE_REF
2672     expressions, like those used for ObjC messenger dispatches.  */
2673  function = objc_rewrite_function_call (function, params);
2674
2675  /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
2676     Strip such NOP_EXPRs, since FUNCTION is used in non-lvalue context.  */
2677  if (TREE_CODE (function) == NOP_EXPR
2678      && TREE_TYPE (function) == TREE_TYPE (TREE_OPERAND (function, 0)))
2679    function = TREE_OPERAND (function, 0);
2680
2681  if (TREE_CODE (function) == FUNCTION_DECL)
2682    {
2683      name = DECL_NAME (function);
2684
2685      mark_used (function);
2686      fndecl = function;
2687
2688      /* Convert anything with function type to a pointer-to-function.  */
2689      if (pedantic && DECL_MAIN_P (function))
2690	pedwarn ("ISO C++ forbids calling %<::main%> from within program");
2691
2692      /* Differs from default_conversion by not setting TREE_ADDRESSABLE
2693	 (because calling an inline function does not mean the function
2694	 needs to be separately compiled).  */
2695
2696      if (DECL_INLINE (function))
2697	function = inline_conversion (function);
2698      else
2699	function = build_addr_func (function);
2700    }
2701  else
2702    {
2703      fndecl = NULL_TREE;
2704
2705      function = build_addr_func (function);
2706    }
2707
2708  if (function == error_mark_node)
2709    return error_mark_node;
2710
2711  fntype = TREE_TYPE (function);
2712
2713  if (TYPE_PTRMEMFUNC_P (fntype))
2714    {
2715      error ("must use %<.*%> or %<->*%> to call pointer-to-member "
2716	     "function in %<%E (...)%>",
2717	     original);
2718      return error_mark_node;
2719    }
2720
2721  is_method = (TREE_CODE (fntype) == POINTER_TYPE
2722	       && TREE_CODE (TREE_TYPE (fntype)) == METHOD_TYPE);
2723
2724  if (!((TREE_CODE (fntype) == POINTER_TYPE
2725	 && TREE_CODE (TREE_TYPE (fntype)) == FUNCTION_TYPE)
2726	|| is_method
2727	|| TREE_CODE (function) == TEMPLATE_ID_EXPR))
2728    {
2729      error ("%qE cannot be used as a function", original);
2730      return error_mark_node;
2731    }
2732
2733  /* fntype now gets the type of function pointed to.  */
2734  fntype = TREE_TYPE (fntype);
2735
2736  /* Convert the parameters to the types declared in the
2737     function prototype, or apply default promotions.  */
2738
2739  coerced_params = convert_arguments (TYPE_ARG_TYPES (fntype),
2740				      params, fndecl, LOOKUP_NORMAL);
2741  if (coerced_params == error_mark_node)
2742    return error_mark_node;
2743
2744  /* Check for errors in format strings and inappropriately
2745     null parameters.  */
2746
2747  check_function_arguments (TYPE_ATTRIBUTES (fntype), coerced_params,
2748			    TYPE_ARG_TYPES (fntype));
2749
2750  return build_cxx_call (function, coerced_params);
2751}
2752
2753/* Convert the actual parameter expressions in the list VALUES
2754   to the types in the list TYPELIST.
2755   If parmdecls is exhausted, or when an element has NULL as its type,
2756   perform the default conversions.
2757
2758   NAME is an IDENTIFIER_NODE or 0.  It is used only for error messages.
2759
2760   This is also where warnings about wrong number of args are generated.
2761
2762   Return a list of expressions for the parameters as converted.
2763
2764   Both VALUES and the returned value are chains of TREE_LIST nodes
2765   with the elements of the list in the TREE_VALUE slots of those nodes.
2766
2767   In C++, unspecified trailing parameters can be filled in with their
2768   default arguments, if such were specified.  Do so here.  */
2769
2770static tree
2771convert_arguments (tree typelist, tree values, tree fndecl, int flags)
2772{
2773  tree typetail, valtail;
2774  tree result = NULL_TREE;
2775  const char *called_thing = 0;
2776  int i = 0;
2777
2778  /* Argument passing is always copy-initialization.  */
2779  flags |= LOOKUP_ONLYCONVERTING;
2780
2781  if (fndecl)
2782    {
2783      if (TREE_CODE (TREE_TYPE (fndecl)) == METHOD_TYPE)
2784	{
2785	  if (DECL_NAME (fndecl) == NULL_TREE
2786	      || IDENTIFIER_HAS_TYPE_VALUE (DECL_NAME (fndecl)))
2787	    called_thing = "constructor";
2788	  else
2789	    called_thing = "member function";
2790	}
2791      else
2792	called_thing = "function";
2793    }
2794
2795  for (valtail = values, typetail = typelist;
2796       valtail;
2797       valtail = TREE_CHAIN (valtail), i++)
2798    {
2799      tree type = typetail ? TREE_VALUE (typetail) : 0;
2800      tree val = TREE_VALUE (valtail);
2801
2802      if (val == error_mark_node || type == error_mark_node)
2803	return error_mark_node;
2804
2805      if (type == void_type_node)
2806	{
2807	  if (fndecl)
2808	    {
2809	      error ("too many arguments to %s %q+#D", called_thing, fndecl);
2810	      error ("at this point in file");
2811	    }
2812	  else
2813	    error ("too many arguments to function");
2814	  /* In case anybody wants to know if this argument
2815	     list is valid.  */
2816	  if (result)
2817	    TREE_TYPE (tree_last (result)) = error_mark_node;
2818	  break;
2819	}
2820
2821      /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
2822	 Strip such NOP_EXPRs, since VAL is used in non-lvalue context.  */
2823      if (TREE_CODE (val) == NOP_EXPR
2824	  && TREE_TYPE (val) == TREE_TYPE (TREE_OPERAND (val, 0))
2825	  && (type == 0 || TREE_CODE (type) != REFERENCE_TYPE))
2826	val = TREE_OPERAND (val, 0);
2827
2828      if (type == 0 || TREE_CODE (type) != REFERENCE_TYPE)
2829	{
2830	  if (TREE_CODE (TREE_TYPE (val)) == ARRAY_TYPE
2831	      || TREE_CODE (TREE_TYPE (val)) == FUNCTION_TYPE
2832	      || TREE_CODE (TREE_TYPE (val)) == METHOD_TYPE)
2833	    val = decay_conversion (val);
2834	}
2835
2836      if (val == error_mark_node)
2837	return error_mark_node;
2838
2839      if (type != 0)
2840	{
2841	  /* Formal parm type is specified by a function prototype.  */
2842	  tree parmval;
2843
2844	  if (!COMPLETE_TYPE_P (complete_type (type)))
2845	    {
2846	      if (fndecl)
2847		error ("parameter %P of %qD has incomplete type %qT",
2848		       i, fndecl, type);
2849	      else
2850		error ("parameter %P has incomplete type %qT", i, type);
2851	      parmval = error_mark_node;
2852	    }
2853	  else
2854	    {
2855	      parmval = convert_for_initialization
2856		(NULL_TREE, type, val, flags,
2857		 "argument passing", fndecl, i);
2858	      parmval = convert_for_arg_passing (type, parmval);
2859	    }
2860
2861	  if (parmval == error_mark_node)
2862	    return error_mark_node;
2863
2864	  result = tree_cons (NULL_TREE, parmval, result);
2865	}
2866      else
2867	{
2868	  if (fndecl && DECL_BUILT_IN (fndecl)
2869	      && DECL_FUNCTION_CODE (fndecl) == BUILT_IN_CONSTANT_P)
2870	    /* Don't do ellipsis conversion for __built_in_constant_p
2871	       as this will result in spurious warnings for non-POD
2872	       types.  */
2873	    val = require_complete_type (val);
2874	  else
2875	    val = convert_arg_to_ellipsis (val);
2876
2877	  result = tree_cons (NULL_TREE, val, result);
2878	}
2879
2880      if (typetail)
2881	typetail = TREE_CHAIN (typetail);
2882    }
2883
2884  if (typetail != 0 && typetail != void_list_node)
2885    {
2886      /* See if there are default arguments that can be used.  */
2887      if (TREE_PURPOSE (typetail)
2888	  && TREE_CODE (TREE_PURPOSE (typetail)) != DEFAULT_ARG)
2889	{
2890	  for (; typetail != void_list_node; ++i)
2891	    {
2892	      tree parmval
2893		= convert_default_arg (TREE_VALUE (typetail),
2894				       TREE_PURPOSE (typetail),
2895				       fndecl, i);
2896
2897	      if (parmval == error_mark_node)
2898		return error_mark_node;
2899
2900	      result = tree_cons (0, parmval, result);
2901	      typetail = TREE_CHAIN (typetail);
2902	      /* ends with `...'.  */
2903	      if (typetail == NULL_TREE)
2904		break;
2905	    }
2906	}
2907      else
2908	{
2909	  if (fndecl)
2910	    {
2911	      error ("too few arguments to %s %q+#D", called_thing, fndecl);
2912	      error ("at this point in file");
2913	    }
2914	  else
2915	    error ("too few arguments to function");
2916	  return error_mark_node;
2917	}
2918    }
2919
2920  return nreverse (result);
2921}
2922
2923/* Build a binary-operation expression, after performing default
2924   conversions on the operands.  CODE is the kind of expression to build.  */
2925
2926tree
2927build_x_binary_op (enum tree_code code, tree arg1, enum tree_code arg1_code,
2928		   tree arg2, enum tree_code arg2_code, bool *overloaded_p)
2929{
2930  tree orig_arg1;
2931  tree orig_arg2;
2932  tree expr;
2933
2934  orig_arg1 = arg1;
2935  orig_arg2 = arg2;
2936
2937  if (processing_template_decl)
2938    {
2939      if (type_dependent_expression_p (arg1)
2940	  || type_dependent_expression_p (arg2))
2941	return build_min_nt (code, arg1, arg2);
2942      arg1 = build_non_dependent_expr (arg1);
2943      arg2 = build_non_dependent_expr (arg2);
2944    }
2945
2946  if (code == DOTSTAR_EXPR)
2947    expr = build_m_component_ref (arg1, arg2);
2948  else
2949    expr = build_new_op (code, LOOKUP_NORMAL, arg1, arg2, NULL_TREE,
2950			 overloaded_p);
2951
2952  /* Check for cases such as x+y<<z which users are likely to
2953     misinterpret.  But don't warn about obj << x + y, since that is a
2954     common idiom for I/O.  */
2955  if (warn_parentheses
2956      && !processing_template_decl
2957      && !error_operand_p (arg1)
2958      && !error_operand_p (arg2)
2959      && (code != LSHIFT_EXPR
2960	  || !IS_AGGR_TYPE (TREE_TYPE (arg1))))
2961    warn_about_parentheses (code, arg1_code, arg2_code);
2962
2963  if (processing_template_decl && expr != error_mark_node)
2964    return build_min_non_dep (code, expr, orig_arg1, orig_arg2);
2965
2966  return expr;
2967}
2968
2969/* Build a binary-operation expression without default conversions.
2970   CODE is the kind of expression to build.
2971   This function differs from `build' in several ways:
2972   the data type of the result is computed and recorded in it,
2973   warnings are generated if arg data types are invalid,
2974   special handling for addition and subtraction of pointers is known,
2975   and some optimization is done (operations on narrow ints
2976   are done in the narrower type when that gives the same result).
2977   Constant folding is also done before the result is returned.
2978
2979   Note that the operands will never have enumeral types
2980   because either they have just had the default conversions performed
2981   or they have both just been converted to some other type in which
2982   the arithmetic is to be done.
2983
2984   C++: must do special pointer arithmetic when implementing
2985   multiple inheritance, and deal with pointer to member functions.  */
2986
2987tree
2988build_binary_op (enum tree_code code, tree orig_op0, tree orig_op1,
2989		 int convert_p ATTRIBUTE_UNUSED)
2990{
2991  tree op0, op1;
2992  enum tree_code code0, code1;
2993  tree type0, type1;
2994  const char *invalid_op_diag;
2995
2996  /* Expression code to give to the expression when it is built.
2997     Normally this is CODE, which is what the caller asked for,
2998     but in some special cases we change it.  */
2999  enum tree_code resultcode = code;
3000
3001  /* Data type in which the computation is to be performed.
3002     In the simplest cases this is the common type of the arguments.  */
3003  tree result_type = NULL;
3004
3005  /* Nonzero means operands have already been type-converted
3006     in whatever way is necessary.
3007     Zero means they need to be converted to RESULT_TYPE.  */
3008  int converted = 0;
3009
3010  /* Nonzero means create the expression with this type, rather than
3011     RESULT_TYPE.  */
3012  tree build_type = 0;
3013
3014  /* Nonzero means after finally constructing the expression
3015     convert it to this type.  */
3016  tree final_type = 0;
3017
3018  tree result;
3019
3020  /* Nonzero if this is an operation like MIN or MAX which can
3021     safely be computed in short if both args are promoted shorts.
3022     Also implies COMMON.
3023     -1 indicates a bitwise operation; this makes a difference
3024     in the exact conditions for when it is safe to do the operation
3025     in a narrower mode.  */
3026  int shorten = 0;
3027
3028  /* Nonzero if this is a comparison operation;
3029     if both args are promoted shorts, compare the original shorts.
3030     Also implies COMMON.  */
3031  int short_compare = 0;
3032
3033  /* Nonzero if this is a right-shift operation, which can be computed on the
3034     original short and then promoted if the operand is a promoted short.  */
3035  int short_shift = 0;
3036
3037  /* Nonzero means set RESULT_TYPE to the common type of the args.  */
3038  int common = 0;
3039
3040  /* True if both operands have arithmetic type.  */
3041  bool arithmetic_types_p;
3042
3043  /* Apply default conversions.  */
3044  op0 = orig_op0;
3045  op1 = orig_op1;
3046
3047  if (code == TRUTH_AND_EXPR || code == TRUTH_ANDIF_EXPR
3048      || code == TRUTH_OR_EXPR || code == TRUTH_ORIF_EXPR
3049      || code == TRUTH_XOR_EXPR)
3050    {
3051      if (!really_overloaded_fn (op0))
3052	op0 = decay_conversion (op0);
3053      if (!really_overloaded_fn (op1))
3054	op1 = decay_conversion (op1);
3055    }
3056  else
3057    {
3058      if (!really_overloaded_fn (op0))
3059	op0 = default_conversion (op0);
3060      if (!really_overloaded_fn (op1))
3061	op1 = default_conversion (op1);
3062    }
3063
3064  /* Strip NON_LVALUE_EXPRs, etc., since we aren't using as an lvalue.  */
3065  STRIP_TYPE_NOPS (op0);
3066  STRIP_TYPE_NOPS (op1);
3067
3068  /* DTRT if one side is an overloaded function, but complain about it.  */
3069  if (type_unknown_p (op0))
3070    {
3071      tree t = instantiate_type (TREE_TYPE (op1), op0, tf_none);
3072      if (t != error_mark_node)
3073	{
3074	  pedwarn ("assuming cast to type %qT from overloaded function",
3075		   TREE_TYPE (t));
3076	  op0 = t;
3077	}
3078    }
3079  if (type_unknown_p (op1))
3080    {
3081      tree t = instantiate_type (TREE_TYPE (op0), op1, tf_none);
3082      if (t != error_mark_node)
3083	{
3084	  pedwarn ("assuming cast to type %qT from overloaded function",
3085		   TREE_TYPE (t));
3086	  op1 = t;
3087	}
3088    }
3089
3090  type0 = TREE_TYPE (op0);
3091  type1 = TREE_TYPE (op1);
3092
3093  /* The expression codes of the data types of the arguments tell us
3094     whether the arguments are integers, floating, pointers, etc.  */
3095  code0 = TREE_CODE (type0);
3096  code1 = TREE_CODE (type1);
3097
3098  /* If an error was already reported for one of the arguments,
3099     avoid reporting another error.  */
3100
3101  if (code0 == ERROR_MARK || code1 == ERROR_MARK)
3102    return error_mark_node;
3103
3104  if ((invalid_op_diag
3105       = targetm.invalid_binary_op (code, type0, type1)))
3106    {
3107      error (invalid_op_diag);
3108      return error_mark_node;
3109    }
3110
3111  switch (code)
3112    {
3113    case MINUS_EXPR:
3114      /* Subtraction of two similar pointers.
3115	 We must subtract them as integers, then divide by object size.  */
3116      if (code0 == POINTER_TYPE && code1 == POINTER_TYPE
3117	  && same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type0),
3118							TREE_TYPE (type1)))
3119	return pointer_diff (op0, op1, common_type (type0, type1));
3120      /* In all other cases except pointer - int, the usual arithmetic
3121	 rules aply.  */
3122      else if (!(code0 == POINTER_TYPE && code1 == INTEGER_TYPE))
3123	{
3124	  common = 1;
3125	  break;
3126	}
3127      /* The pointer - int case is just like pointer + int; fall
3128	 through.  */
3129    case PLUS_EXPR:
3130      if ((code0 == POINTER_TYPE || code1 == POINTER_TYPE)
3131	  && (code0 == INTEGER_TYPE || code1 == INTEGER_TYPE))
3132	{
3133	  tree ptr_operand;
3134	  tree int_operand;
3135	  ptr_operand = ((code0 == POINTER_TYPE) ? op0 : op1);
3136	  int_operand = ((code0 == INTEGER_TYPE) ? op0 : op1);
3137	  if (processing_template_decl)
3138	    {
3139	      result_type = TREE_TYPE (ptr_operand);
3140	      break;
3141	    }
3142	  return cp_pointer_int_sum (code,
3143				     ptr_operand,
3144				     int_operand);
3145	}
3146      common = 1;
3147      break;
3148
3149    case MULT_EXPR:
3150      common = 1;
3151      break;
3152
3153    case TRUNC_DIV_EXPR:
3154    case CEIL_DIV_EXPR:
3155    case FLOOR_DIV_EXPR:
3156    case ROUND_DIV_EXPR:
3157    case EXACT_DIV_EXPR:
3158      if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
3159	   || code0 == COMPLEX_TYPE || code0 == VECTOR_TYPE)
3160	  && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
3161	      || code1 == COMPLEX_TYPE || code1 == VECTOR_TYPE))
3162	{
3163	  enum tree_code tcode0 = code0, tcode1 = code1;
3164
3165	  if (TREE_CODE (op1) == INTEGER_CST && integer_zerop (op1))
3166	    warning (OPT_Wdiv_by_zero, "division by zero in %<%E / 0%>", op0);
3167	  else if (TREE_CODE (op1) == REAL_CST && real_zerop (op1))
3168	    warning (OPT_Wdiv_by_zero, "division by zero in %<%E / 0.%>", op0);
3169
3170	  if (tcode0 == COMPLEX_TYPE || tcode0 == VECTOR_TYPE)
3171	    tcode0 = TREE_CODE (TREE_TYPE (TREE_TYPE (op0)));
3172	  if (tcode1 == COMPLEX_TYPE || tcode1 == VECTOR_TYPE)
3173	    tcode1 = TREE_CODE (TREE_TYPE (TREE_TYPE (op1)));
3174
3175	  if (!(tcode0 == INTEGER_TYPE && tcode1 == INTEGER_TYPE))
3176	    resultcode = RDIV_EXPR;
3177	  else
3178	    /* When dividing two signed integers, we have to promote to int.
3179	       unless we divide by a constant != -1.  Note that default
3180	       conversion will have been performed on the operands at this
3181	       point, so we have to dig out the original type to find out if
3182	       it was unsigned.  */
3183	    shorten = ((TREE_CODE (op0) == NOP_EXPR
3184			&& TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op0, 0))))
3185		       || (TREE_CODE (op1) == INTEGER_CST
3186			   && ! integer_all_onesp (op1)));
3187
3188	  common = 1;
3189	}
3190      break;
3191
3192    case BIT_AND_EXPR:
3193    case BIT_IOR_EXPR:
3194    case BIT_XOR_EXPR:
3195      if ((code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
3196	  || (code0 == VECTOR_TYPE && code1 == VECTOR_TYPE))
3197	shorten = -1;
3198      break;
3199
3200    case TRUNC_MOD_EXPR:
3201    case FLOOR_MOD_EXPR:
3202      if (code1 == INTEGER_TYPE && integer_zerop (op1))
3203	warning (OPT_Wdiv_by_zero, "division by zero in %<%E %% 0%>", op0);
3204      else if (code1 == REAL_TYPE && real_zerop (op1))
3205	warning (OPT_Wdiv_by_zero, "division by zero in %<%E %% 0.%>", op0);
3206
3207      if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
3208	{
3209	  /* Although it would be tempting to shorten always here, that loses
3210	     on some targets, since the modulo instruction is undefined if the
3211	     quotient can't be represented in the computation mode.  We shorten
3212	     only if unsigned or if dividing by something we know != -1.  */
3213	  shorten = ((TREE_CODE (op0) == NOP_EXPR
3214		      && TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op0, 0))))
3215		     || (TREE_CODE (op1) == INTEGER_CST
3216			 && ! integer_all_onesp (op1)));
3217	  common = 1;
3218	}
3219      break;
3220
3221    case TRUTH_ANDIF_EXPR:
3222    case TRUTH_ORIF_EXPR:
3223    case TRUTH_AND_EXPR:
3224    case TRUTH_OR_EXPR:
3225      result_type = boolean_type_node;
3226      break;
3227
3228      /* Shift operations: result has same type as first operand;
3229	 always convert second operand to int.
3230	 Also set SHORT_SHIFT if shifting rightward.  */
3231
3232    case RSHIFT_EXPR:
3233      if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
3234	{
3235	  result_type = type0;
3236	  if (TREE_CODE (op1) == INTEGER_CST)
3237	    {
3238	      if (tree_int_cst_lt (op1, integer_zero_node))
3239		warning (0, "right shift count is negative");
3240	      else
3241		{
3242		  if (! integer_zerop (op1))
3243		    short_shift = 1;
3244		  if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
3245		    warning (0, "right shift count >= width of type");
3246		}
3247	    }
3248	  /* Convert the shift-count to an integer, regardless of
3249	     size of value being shifted.  */
3250	  if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
3251	    op1 = cp_convert (integer_type_node, op1);
3252	  /* Avoid converting op1 to result_type later.  */
3253	  converted = 1;
3254	}
3255      break;
3256
3257    case LSHIFT_EXPR:
3258      if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
3259	{
3260	  result_type = type0;
3261	  if (TREE_CODE (op1) == INTEGER_CST)
3262	    {
3263	      if (tree_int_cst_lt (op1, integer_zero_node))
3264		warning (0, "left shift count is negative");
3265	      else if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
3266		warning (0, "left shift count >= width of type");
3267	    }
3268	  /* Convert the shift-count to an integer, regardless of
3269	     size of value being shifted.  */
3270	  if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
3271	    op1 = cp_convert (integer_type_node, op1);
3272	  /* Avoid converting op1 to result_type later.  */
3273	  converted = 1;
3274	}
3275      break;
3276
3277    case RROTATE_EXPR:
3278    case LROTATE_EXPR:
3279      if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
3280	{
3281	  result_type = type0;
3282	  if (TREE_CODE (op1) == INTEGER_CST)
3283	    {
3284	      if (tree_int_cst_lt (op1, integer_zero_node))
3285		warning (0, "%s rotate count is negative",
3286			 (code == LROTATE_EXPR) ? "left" : "right");
3287	      else if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
3288		warning (0, "%s rotate count >= width of type",
3289			 (code == LROTATE_EXPR) ? "left" : "right");
3290	    }
3291	  /* Convert the shift-count to an integer, regardless of
3292	     size of value being shifted.  */
3293	  if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
3294	    op1 = cp_convert (integer_type_node, op1);
3295	}
3296      break;
3297
3298    case EQ_EXPR:
3299    case NE_EXPR:
3300      if (code0 == REAL_TYPE || code1 == REAL_TYPE)
3301	warning (OPT_Wfloat_equal,
3302		 "comparing floating point with == or != is unsafe");
3303      if ((TREE_CODE (orig_op0) == STRING_CST && !integer_zerop (op1))
3304	  || (TREE_CODE (orig_op1) == STRING_CST && !integer_zerop (op0)))
3305	warning (OPT_Waddress,
3306                 "comparison with string literal results in unspecified behaviour");
3307
3308      build_type = boolean_type_node;
3309      if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
3310	   || code0 == COMPLEX_TYPE)
3311	  && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
3312	      || code1 == COMPLEX_TYPE))
3313	short_compare = 1;
3314      else if ((code0 == POINTER_TYPE && code1 == POINTER_TYPE)
3315	       || (TYPE_PTRMEM_P (type0) && TYPE_PTRMEM_P (type1)))
3316	result_type = composite_pointer_type (type0, type1, op0, op1,
3317					      "comparison");
3318      else if ((code0 == POINTER_TYPE || TYPE_PTRMEM_P (type0))
3319	       && null_ptr_cst_p (op1))
3320	result_type = type0;
3321      else if ((code1 == POINTER_TYPE || TYPE_PTRMEM_P (type1))
3322	       && null_ptr_cst_p (op0))
3323	result_type = type1;
3324      else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
3325	{
3326	  result_type = type0;
3327	  error ("ISO C++ forbids comparison between pointer and integer");
3328	}
3329      else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE)
3330	{
3331	  result_type = type1;
3332	  error ("ISO C++ forbids comparison between pointer and integer");
3333	}
3334      else if (TYPE_PTRMEMFUNC_P (type0) && null_ptr_cst_p (op1))
3335	{
3336	  op0 = build_ptrmemfunc_access_expr (op0, pfn_identifier);
3337	  op1 = cp_convert (TREE_TYPE (op0), integer_zero_node);
3338	  result_type = TREE_TYPE (op0);
3339	}
3340      else if (TYPE_PTRMEMFUNC_P (type1) && null_ptr_cst_p (op0))
3341	return cp_build_binary_op (code, op1, op0);
3342      else if (TYPE_PTRMEMFUNC_P (type0) && TYPE_PTRMEMFUNC_P (type1)
3343	       && same_type_p (type0, type1))
3344	{
3345	  /* E will be the final comparison.  */
3346	  tree e;
3347	  /* E1 and E2 are for scratch.  */
3348	  tree e1;
3349	  tree e2;
3350	  tree pfn0;
3351	  tree pfn1;
3352	  tree delta0;
3353	  tree delta1;
3354
3355	  if (TREE_SIDE_EFFECTS (op0))
3356	    op0 = save_expr (op0);
3357	  if (TREE_SIDE_EFFECTS (op1))
3358	    op1 = save_expr (op1);
3359
3360	  /* We generate:
3361
3362	     (op0.pfn == op1.pfn
3363	      && (!op0.pfn || op0.delta == op1.delta))
3364
3365	     The reason for the `!op0.pfn' bit is that a NULL
3366	     pointer-to-member is any member with a zero PFN; the
3367	     DELTA field is unspecified.  */
3368	  pfn0 = pfn_from_ptrmemfunc (op0);
3369	  pfn1 = pfn_from_ptrmemfunc (op1);
3370	  delta0 = build_ptrmemfunc_access_expr (op0,
3371						 delta_identifier);
3372	  delta1 = build_ptrmemfunc_access_expr (op1,
3373						 delta_identifier);
3374	  e1 = cp_build_binary_op (EQ_EXPR, delta0, delta1);
3375	  e2 = cp_build_binary_op (EQ_EXPR,
3376				   pfn0,
3377				   cp_convert (TREE_TYPE (pfn0),
3378					       integer_zero_node));
3379	  e1 = cp_build_binary_op (TRUTH_ORIF_EXPR, e1, e2);
3380	  e2 = build2 (EQ_EXPR, boolean_type_node, pfn0, pfn1);
3381	  e = cp_build_binary_op (TRUTH_ANDIF_EXPR, e2, e1);
3382	  if (code == EQ_EXPR)
3383	    return e;
3384	  return cp_build_binary_op (EQ_EXPR, e, integer_zero_node);
3385	}
3386      else
3387	{
3388	  gcc_assert (!TYPE_PTRMEMFUNC_P (type0)
3389		      || !same_type_p (TYPE_PTRMEMFUNC_FN_TYPE (type0),
3390				       type1));
3391	  gcc_assert (!TYPE_PTRMEMFUNC_P (type1)
3392		      || !same_type_p (TYPE_PTRMEMFUNC_FN_TYPE (type1),
3393				       type0));
3394	}
3395
3396      break;
3397
3398    case MAX_EXPR:
3399    case MIN_EXPR:
3400      if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE)
3401	   && (code1 == INTEGER_TYPE || code1 == REAL_TYPE))
3402	shorten = 1;
3403      else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
3404	result_type = composite_pointer_type (type0, type1, op0, op1,
3405					      "comparison");
3406      break;
3407
3408    case LE_EXPR:
3409    case GE_EXPR:
3410    case LT_EXPR:
3411    case GT_EXPR:
3412      if (TREE_CODE (orig_op0) == STRING_CST
3413	  || TREE_CODE (orig_op1) == STRING_CST)
3414	warning (OPT_Waddress,
3415                 "comparison with string literal results in unspecified behaviour");
3416
3417      build_type = boolean_type_node;
3418      if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE)
3419	   && (code1 == INTEGER_TYPE || code1 == REAL_TYPE))
3420	short_compare = 1;
3421      else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
3422	result_type = composite_pointer_type (type0, type1, op0, op1,
3423					      "comparison");
3424      else if (code0 == POINTER_TYPE && TREE_CODE (op1) == INTEGER_CST
3425	       && integer_zerop (op1))
3426	result_type = type0;
3427      else if (code1 == POINTER_TYPE && TREE_CODE (op0) == INTEGER_CST
3428	       && integer_zerop (op0))
3429	result_type = type1;
3430      else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
3431	{
3432	  result_type = type0;
3433	  pedwarn ("ISO C++ forbids comparison between pointer and integer");
3434	}
3435      else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE)
3436	{
3437	  result_type = type1;
3438	  pedwarn ("ISO C++ forbids comparison between pointer and integer");
3439	}
3440      break;
3441
3442    case UNORDERED_EXPR:
3443    case ORDERED_EXPR:
3444    case UNLT_EXPR:
3445    case UNLE_EXPR:
3446    case UNGT_EXPR:
3447    case UNGE_EXPR:
3448    case UNEQ_EXPR:
3449      build_type = integer_type_node;
3450      if (code0 != REAL_TYPE || code1 != REAL_TYPE)
3451	{
3452	  error ("unordered comparison on non-floating point argument");
3453	  return error_mark_node;
3454	}
3455      common = 1;
3456      break;
3457
3458    default:
3459      break;
3460    }
3461
3462  if (((code0 == INTEGER_TYPE || code0 == REAL_TYPE || code0 == COMPLEX_TYPE)
3463       && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
3464	   || code1 == COMPLEX_TYPE)))
3465    arithmetic_types_p = 1;
3466  else
3467    {
3468      arithmetic_types_p = 0;
3469      /* Vector arithmetic is only allowed when both sides are vectors.  */
3470      if (code0 == VECTOR_TYPE && code1 == VECTOR_TYPE)
3471	{
3472	  if (!tree_int_cst_equal (TYPE_SIZE (type0), TYPE_SIZE (type1))
3473	      || !same_scalar_type_ignoring_signedness (TREE_TYPE (type0),
3474							TREE_TYPE (type1)))
3475	    {
3476	      binary_op_error (code);
3477	      return error_mark_node;
3478	    }
3479	  arithmetic_types_p = 1;
3480	}
3481    }
3482  /* Determine the RESULT_TYPE, if it is not already known.  */
3483  if (!result_type
3484      && arithmetic_types_p
3485      && (shorten || common || short_compare))
3486    result_type = common_type (type0, type1);
3487
3488  if (!result_type)
3489    {
3490      error ("invalid operands of types %qT and %qT to binary %qO",
3491	     TREE_TYPE (orig_op0), TREE_TYPE (orig_op1), code);
3492      return error_mark_node;
3493    }
3494
3495  /* If we're in a template, the only thing we need to know is the
3496     RESULT_TYPE.  */
3497  if (processing_template_decl)
3498    return build2 (resultcode,
3499		   build_type ? build_type : result_type,
3500		   op0, op1);
3501
3502  if (arithmetic_types_p)
3503    {
3504      int none_complex = (code0 != COMPLEX_TYPE && code1 != COMPLEX_TYPE);
3505
3506      /* For certain operations (which identify themselves by shorten != 0)
3507	 if both args were extended from the same smaller type,
3508	 do the arithmetic in that type and then extend.
3509
3510	 shorten !=0 and !=1 indicates a bitwise operation.
3511	 For them, this optimization is safe only if
3512	 both args are zero-extended or both are sign-extended.
3513	 Otherwise, we might change the result.
3514	 Eg, (short)-1 | (unsigned short)-1 is (int)-1
3515	 but calculated in (unsigned short) it would be (unsigned short)-1.  */
3516
3517      if (shorten && none_complex)
3518	{
3519	  int unsigned0, unsigned1;
3520	  tree arg0 = get_narrower (op0, &unsigned0);
3521	  tree arg1 = get_narrower (op1, &unsigned1);
3522	  /* UNS is 1 if the operation to be done is an unsigned one.  */
3523	  int uns = TYPE_UNSIGNED (result_type);
3524	  tree type;
3525
3526	  final_type = result_type;
3527
3528	  /* Handle the case that OP0 does not *contain* a conversion
3529	     but it *requires* conversion to FINAL_TYPE.  */
3530
3531	  if (op0 == arg0 && TREE_TYPE (op0) != final_type)
3532	    unsigned0 = TYPE_UNSIGNED (TREE_TYPE (op0));
3533	  if (op1 == arg1 && TREE_TYPE (op1) != final_type)
3534	    unsigned1 = TYPE_UNSIGNED (TREE_TYPE (op1));
3535
3536	  /* Now UNSIGNED0 is 1 if ARG0 zero-extends to FINAL_TYPE.  */
3537
3538	  /* For bitwise operations, signedness of nominal type
3539	     does not matter.  Consider only how operands were extended.  */
3540	  if (shorten == -1)
3541	    uns = unsigned0;
3542
3543	  /* Note that in all three cases below we refrain from optimizing
3544	     an unsigned operation on sign-extended args.
3545	     That would not be valid.  */
3546
3547	  /* Both args variable: if both extended in same way
3548	     from same width, do it in that width.
3549	     Do it unsigned if args were zero-extended.  */
3550	  if ((TYPE_PRECISION (TREE_TYPE (arg0))
3551	       < TYPE_PRECISION (result_type))
3552	      && (TYPE_PRECISION (TREE_TYPE (arg1))
3553		  == TYPE_PRECISION (TREE_TYPE (arg0)))
3554	      && unsigned0 == unsigned1
3555	      && (unsigned0 || !uns))
3556	    result_type = c_common_signed_or_unsigned_type
3557	      (unsigned0, common_type (TREE_TYPE (arg0), TREE_TYPE (arg1)));
3558	  else if (TREE_CODE (arg0) == INTEGER_CST
3559		   && (unsigned1 || !uns)
3560		   && (TYPE_PRECISION (TREE_TYPE (arg1))
3561		       < TYPE_PRECISION (result_type))
3562		   && (type = c_common_signed_or_unsigned_type
3563		       (unsigned1, TREE_TYPE (arg1)),
3564		       int_fits_type_p (arg0, type)))
3565	    result_type = type;
3566	  else if (TREE_CODE (arg1) == INTEGER_CST
3567		   && (unsigned0 || !uns)
3568		   && (TYPE_PRECISION (TREE_TYPE (arg0))
3569		       < TYPE_PRECISION (result_type))
3570		   && (type = c_common_signed_or_unsigned_type
3571		       (unsigned0, TREE_TYPE (arg0)),
3572		       int_fits_type_p (arg1, type)))
3573	    result_type = type;
3574	}
3575
3576      /* Shifts can be shortened if shifting right.  */
3577
3578      if (short_shift)
3579	{
3580	  int unsigned_arg;
3581	  tree arg0 = get_narrower (op0, &unsigned_arg);
3582
3583	  final_type = result_type;
3584
3585	  if (arg0 == op0 && final_type == TREE_TYPE (op0))
3586	    unsigned_arg = TYPE_UNSIGNED (TREE_TYPE (op0));
3587
3588	  if (TYPE_PRECISION (TREE_TYPE (arg0)) < TYPE_PRECISION (result_type)
3589	      /* We can shorten only if the shift count is less than the
3590		 number of bits in the smaller type size.  */
3591	      && compare_tree_int (op1, TYPE_PRECISION (TREE_TYPE (arg0))) < 0
3592	      /* If arg is sign-extended and then unsigned-shifted,
3593		 we can simulate this with a signed shift in arg's type
3594		 only if the extended result is at least twice as wide
3595		 as the arg.  Otherwise, the shift could use up all the
3596		 ones made by sign-extension and bring in zeros.
3597		 We can't optimize that case at all, but in most machines
3598		 it never happens because available widths are 2**N.  */
3599	      && (!TYPE_UNSIGNED (final_type)
3600		  || unsigned_arg
3601		  || (((unsigned) 2 * TYPE_PRECISION (TREE_TYPE (arg0)))
3602		      <= TYPE_PRECISION (result_type))))
3603	    {
3604	      /* Do an unsigned shift if the operand was zero-extended.  */
3605	      result_type
3606		= c_common_signed_or_unsigned_type (unsigned_arg,
3607						    TREE_TYPE (arg0));
3608	      /* Convert value-to-be-shifted to that type.  */
3609	      if (TREE_TYPE (op0) != result_type)
3610		op0 = cp_convert (result_type, op0);
3611	      converted = 1;
3612	    }
3613	}
3614
3615      /* Comparison operations are shortened too but differently.
3616	 They identify themselves by setting short_compare = 1.  */
3617
3618      if (short_compare)
3619	{
3620	  /* Don't write &op0, etc., because that would prevent op0
3621	     from being kept in a register.
3622	     Instead, make copies of the our local variables and
3623	     pass the copies by reference, then copy them back afterward.  */
3624	  tree xop0 = op0, xop1 = op1, xresult_type = result_type;
3625	  enum tree_code xresultcode = resultcode;
3626	  tree val
3627	    = shorten_compare (&xop0, &xop1, &xresult_type, &xresultcode);
3628	  if (val != 0)
3629	    return cp_convert (boolean_type_node, val);
3630	  op0 = xop0, op1 = xop1;
3631	  converted = 1;
3632	  resultcode = xresultcode;
3633	}
3634
3635      if ((short_compare || code == MIN_EXPR || code == MAX_EXPR)
3636	  && warn_sign_compare
3637	  /* Do not warn until the template is instantiated; we cannot
3638	     bound the ranges of the arguments until that point.  */
3639	  && !processing_template_decl)
3640	{
3641	  int op0_signed = !TYPE_UNSIGNED (TREE_TYPE (orig_op0));
3642	  int op1_signed = !TYPE_UNSIGNED (TREE_TYPE (orig_op1));
3643
3644	  int unsignedp0, unsignedp1;
3645	  tree primop0 = get_narrower (op0, &unsignedp0);
3646	  tree primop1 = get_narrower (op1, &unsignedp1);
3647
3648	  /* Check for comparison of different enum types.  */
3649	  if (TREE_CODE (TREE_TYPE (orig_op0)) == ENUMERAL_TYPE
3650	      && TREE_CODE (TREE_TYPE (orig_op1)) == ENUMERAL_TYPE
3651	      && TYPE_MAIN_VARIANT (TREE_TYPE (orig_op0))
3652		 != TYPE_MAIN_VARIANT (TREE_TYPE (orig_op1)))
3653	    {
3654	      warning (0, "comparison between types %q#T and %q#T",
3655		       TREE_TYPE (orig_op0), TREE_TYPE (orig_op1));
3656	    }
3657
3658	  /* Give warnings for comparisons between signed and unsigned
3659	     quantities that may fail.  */
3660	  /* Do the checking based on the original operand trees, so that
3661	     casts will be considered, but default promotions won't be.  */
3662
3663	  /* Do not warn if the comparison is being done in a signed type,
3664	     since the signed type will only be chosen if it can represent
3665	     all the values of the unsigned type.  */
3666	  if (!TYPE_UNSIGNED (result_type))
3667	    /* OK */;
3668	  /* Do not warn if both operands are unsigned.  */
3669	  else if (op0_signed == op1_signed)
3670	    /* OK */;
3671	  /* Do not warn if the signed quantity is an unsuffixed
3672	     integer literal (or some static constant expression
3673	     involving such literals or a conditional expression
3674	     involving such literals) and it is non-negative.  */
3675	  else if ((op0_signed && tree_expr_nonnegative_p (orig_op0))
3676		   || (op1_signed && tree_expr_nonnegative_p (orig_op1)))
3677	    /* OK */;
3678	  /* Do not warn if the comparison is an equality operation,
3679	     the unsigned quantity is an integral constant and it does
3680	     not use the most significant bit of result_type.  */
3681	  else if ((resultcode == EQ_EXPR || resultcode == NE_EXPR)
3682		   && ((op0_signed && TREE_CODE (orig_op1) == INTEGER_CST
3683			&& int_fits_type_p (orig_op1, c_common_signed_type
3684					    (result_type)))
3685			|| (op1_signed && TREE_CODE (orig_op0) == INTEGER_CST
3686			    && int_fits_type_p (orig_op0, c_common_signed_type
3687						(result_type)))))
3688	    /* OK */;
3689	  else
3690	    warning (0, "comparison between signed and unsigned integer expressions");
3691
3692	  /* Warn if two unsigned values are being compared in a size
3693	     larger than their original size, and one (and only one) is the
3694	     result of a `~' operator.  This comparison will always fail.
3695
3696	     Also warn if one operand is a constant, and the constant does not
3697	     have all bits set that are set in the ~ operand when it is
3698	     extended.  */
3699
3700	  if ((TREE_CODE (primop0) == BIT_NOT_EXPR)
3701	      ^ (TREE_CODE (primop1) == BIT_NOT_EXPR))
3702	    {
3703	      if (TREE_CODE (primop0) == BIT_NOT_EXPR)
3704		primop0 = get_narrower (TREE_OPERAND (op0, 0), &unsignedp0);
3705	      if (TREE_CODE (primop1) == BIT_NOT_EXPR)
3706		primop1 = get_narrower (TREE_OPERAND (op1, 0), &unsignedp1);
3707
3708	      if (host_integerp (primop0, 0) || host_integerp (primop1, 0))
3709		{
3710		  tree primop;
3711		  HOST_WIDE_INT constant, mask;
3712		  int unsignedp;
3713		  unsigned int bits;
3714
3715		  if (host_integerp (primop0, 0))
3716		    {
3717		      primop = primop1;
3718		      unsignedp = unsignedp1;
3719		      constant = tree_low_cst (primop0, 0);
3720		    }
3721		  else
3722		    {
3723		      primop = primop0;
3724		      unsignedp = unsignedp0;
3725		      constant = tree_low_cst (primop1, 0);
3726		    }
3727
3728		  bits = TYPE_PRECISION (TREE_TYPE (primop));
3729		  if (bits < TYPE_PRECISION (result_type)
3730		      && bits < HOST_BITS_PER_LONG && unsignedp)
3731		    {
3732		      mask = (~ (HOST_WIDE_INT) 0) << bits;
3733		      if ((mask & constant) != mask)
3734			warning (0, "comparison of promoted ~unsigned with constant");
3735		    }
3736		}
3737	      else if (unsignedp0 && unsignedp1
3738		       && (TYPE_PRECISION (TREE_TYPE (primop0))
3739			   < TYPE_PRECISION (result_type))
3740		       && (TYPE_PRECISION (TREE_TYPE (primop1))
3741			   < TYPE_PRECISION (result_type)))
3742		warning (0, "comparison of promoted ~unsigned with unsigned");
3743	    }
3744	}
3745    }
3746
3747  /* If CONVERTED is zero, both args will be converted to type RESULT_TYPE.
3748     Then the expression will be built.
3749     It will be given type FINAL_TYPE if that is nonzero;
3750     otherwise, it will be given type RESULT_TYPE.  */
3751
3752  /* Issue warnings about peculiar, but valid, uses of NULL.  */
3753  if (/* It's reasonable to use pointer values as operands of &&
3754	 and ||, so NULL is no exception.  */
3755      !(code == TRUTH_ANDIF_EXPR || code == TRUTH_ORIF_EXPR)
3756      && (/* If OP0 is NULL and OP1 is not a pointer, or vice versa.  */
3757	  (orig_op0 == null_node
3758	   && TREE_CODE (TREE_TYPE (op1)) != POINTER_TYPE)
3759	  /* Or vice versa.  */
3760	  || (orig_op1 == null_node
3761	      && TREE_CODE (TREE_TYPE (op0)) != POINTER_TYPE)
3762	  /* Or, both are NULL and the operation was not a comparison.  */
3763	  || (orig_op0 == null_node && orig_op1 == null_node
3764	      && code != EQ_EXPR && code != NE_EXPR)))
3765    /* Some sort of arithmetic operation involving NULL was
3766       performed.  Note that pointer-difference and pointer-addition
3767       have already been handled above, and so we don't end up here in
3768       that case.  */
3769    warning (0, "NULL used in arithmetic");
3770
3771  if (! converted)
3772    {
3773      if (TREE_TYPE (op0) != result_type)
3774	op0 = cp_convert (result_type, op0);
3775      if (TREE_TYPE (op1) != result_type)
3776	op1 = cp_convert (result_type, op1);
3777
3778      if (op0 == error_mark_node || op1 == error_mark_node)
3779	return error_mark_node;
3780    }
3781
3782  if (build_type == NULL_TREE)
3783    build_type = result_type;
3784
3785  result = build2 (resultcode, build_type, op0, op1);
3786  result = fold_if_not_in_template (result);
3787  if (final_type != 0)
3788    result = cp_convert (final_type, result);
3789
3790  if (TREE_OVERFLOW_P (result)
3791      && !TREE_OVERFLOW_P (op0)
3792      && !TREE_OVERFLOW_P (op1))
3793    overflow_warning (result);
3794
3795  return result;
3796}
3797
3798/* Return a tree for the sum or difference (RESULTCODE says which)
3799   of pointer PTROP and integer INTOP.  */
3800
3801static tree
3802cp_pointer_int_sum (enum tree_code resultcode, tree ptrop, tree intop)
3803{
3804  tree res_type = TREE_TYPE (ptrop);
3805
3806  /* pointer_int_sum() uses size_in_bytes() on the TREE_TYPE(res_type)
3807     in certain circumstance (when it's valid to do so).  So we need
3808     to make sure it's complete.  We don't need to check here, if we
3809     can actually complete it at all, as those checks will be done in
3810     pointer_int_sum() anyway.  */
3811  complete_type (TREE_TYPE (res_type));
3812
3813  return pointer_int_sum (resultcode, ptrop,
3814			  fold_if_not_in_template (intop));
3815}
3816
3817/* Return a tree for the difference of pointers OP0 and OP1.
3818   The resulting tree has type int.  */
3819
3820static tree
3821pointer_diff (tree op0, tree op1, tree ptrtype)
3822{
3823  tree result;
3824  tree restype = ptrdiff_type_node;
3825  tree target_type = TREE_TYPE (ptrtype);
3826
3827  if (!complete_type_or_else (target_type, NULL_TREE))
3828    return error_mark_node;
3829
3830  if (pedantic || warn_pointer_arith)
3831    {
3832      if (TREE_CODE (target_type) == VOID_TYPE)
3833	pedwarn ("ISO C++ forbids using pointer of type %<void *%> in subtraction");
3834      if (TREE_CODE (target_type) == FUNCTION_TYPE)
3835	pedwarn ("ISO C++ forbids using pointer to a function in subtraction");
3836      if (TREE_CODE (target_type) == METHOD_TYPE)
3837	pedwarn ("ISO C++ forbids using pointer to a method in subtraction");
3838    }
3839
3840  /* First do the subtraction as integers;
3841     then drop through to build the divide operator.  */
3842
3843  op0 = cp_build_binary_op (MINUS_EXPR,
3844			    cp_convert (restype, op0),
3845			    cp_convert (restype, op1));
3846
3847  /* This generates an error if op1 is a pointer to an incomplete type.  */
3848  if (!COMPLETE_TYPE_P (TREE_TYPE (TREE_TYPE (op1))))
3849    error ("invalid use of a pointer to an incomplete type in pointer arithmetic");
3850
3851  op1 = (TYPE_PTROB_P (ptrtype)
3852	 ? size_in_bytes (target_type)
3853	 : integer_one_node);
3854
3855  /* Do the division.  */
3856
3857  result = build2 (EXACT_DIV_EXPR, restype, op0, cp_convert (restype, op1));
3858  return fold_if_not_in_template (result);
3859}
3860
3861/* Construct and perhaps optimize a tree representation
3862   for a unary operation.  CODE, a tree_code, specifies the operation
3863   and XARG is the operand.  */
3864
3865tree
3866build_x_unary_op (enum tree_code code, tree xarg)
3867{
3868  tree orig_expr = xarg;
3869  tree exp;
3870  int ptrmem = 0;
3871
3872  if (processing_template_decl)
3873    {
3874      if (type_dependent_expression_p (xarg))
3875	return build_min_nt (code, xarg, NULL_TREE);
3876
3877      xarg = build_non_dependent_expr (xarg);
3878    }
3879
3880  exp = NULL_TREE;
3881
3882  /* [expr.unary.op] says:
3883
3884       The address of an object of incomplete type can be taken.
3885
3886     (And is just the ordinary address operator, not an overloaded
3887     "operator &".)  However, if the type is a template
3888     specialization, we must complete the type at this point so that
3889     an overloaded "operator &" will be available if required.  */
3890  if (code == ADDR_EXPR
3891      && TREE_CODE (xarg) != TEMPLATE_ID_EXPR
3892      && ((CLASS_TYPE_P (TREE_TYPE (xarg))
3893	   && !COMPLETE_TYPE_P (complete_type (TREE_TYPE (xarg))))
3894	  || (TREE_CODE (xarg) == OFFSET_REF)))
3895    /* Don't look for a function.  */;
3896  else
3897    exp = build_new_op (code, LOOKUP_NORMAL, xarg, NULL_TREE, NULL_TREE,
3898			/*overloaded_p=*/NULL);
3899  if (!exp && code == ADDR_EXPR)
3900    {
3901      /*  A pointer to member-function can be formed only by saying
3902	  &X::mf.  */
3903      if (!flag_ms_extensions && TREE_CODE (TREE_TYPE (xarg)) == METHOD_TYPE
3904	  && (TREE_CODE (xarg) != OFFSET_REF || !PTRMEM_OK_P (xarg)))
3905	{
3906	  if (TREE_CODE (xarg) != OFFSET_REF
3907	      || !TYPE_P (TREE_OPERAND (xarg, 0)))
3908	    {
3909	      error ("invalid use of %qE to form a pointer-to-member-function",
3910		     xarg);
3911	      if (TREE_CODE (xarg) != OFFSET_REF)
3912		inform ("  a qualified-id is required");
3913	      return error_mark_node;
3914	    }
3915	  else
3916	    {
3917	      error ("parentheses around %qE cannot be used to form a"
3918		     " pointer-to-member-function",
3919		     xarg);
3920	      PTRMEM_OK_P (xarg) = 1;
3921	    }
3922	}
3923
3924      if (TREE_CODE (xarg) == OFFSET_REF)
3925	{
3926	  ptrmem = PTRMEM_OK_P (xarg);
3927
3928	  if (!ptrmem && !flag_ms_extensions
3929	      && TREE_CODE (TREE_TYPE (TREE_OPERAND (xarg, 1))) == METHOD_TYPE)
3930	    {
3931	      /* A single non-static member, make sure we don't allow a
3932		 pointer-to-member.  */
3933	      xarg = build2 (OFFSET_REF, TREE_TYPE (xarg),
3934			     TREE_OPERAND (xarg, 0),
3935			     ovl_cons (TREE_OPERAND (xarg, 1), NULL_TREE));
3936	      PTRMEM_OK_P (xarg) = ptrmem;
3937	    }
3938	}
3939      else if (TREE_CODE (xarg) == TARGET_EXPR)
3940	warning (0, "taking address of temporary");
3941      exp = build_unary_op (ADDR_EXPR, xarg, 0);
3942    }
3943
3944  if (processing_template_decl && exp != error_mark_node)
3945    exp = build_min_non_dep (code, exp, orig_expr,
3946			     /*For {PRE,POST}{INC,DEC}REMENT_EXPR*/NULL_TREE);
3947  if (TREE_CODE (exp) == ADDR_EXPR)
3948    PTRMEM_OK_P (exp) = ptrmem;
3949  return exp;
3950}
3951
3952/* Like c_common_truthvalue_conversion, but handle pointer-to-member
3953   constants, where a null value is represented by an INTEGER_CST of
3954   -1.  */
3955
3956tree
3957cp_truthvalue_conversion (tree expr)
3958{
3959  tree type = TREE_TYPE (expr);
3960  if (TYPE_PTRMEM_P (type))
3961    return build_binary_op (NE_EXPR, expr, integer_zero_node, 1);
3962  else
3963    return c_common_truthvalue_conversion (expr);
3964}
3965
3966/* Just like cp_truthvalue_conversion, but we want a CLEANUP_POINT_EXPR.  */
3967
3968tree
3969condition_conversion (tree expr)
3970{
3971  tree t;
3972  if (processing_template_decl)
3973    return expr;
3974  t = perform_implicit_conversion (boolean_type_node, expr);
3975  t = fold_build_cleanup_point_expr (boolean_type_node, t);
3976  return t;
3977}
3978
3979/* Return an ADDR_EXPR giving the address of T.  This function
3980   attempts no optimizations or simplifications; it is a low-level
3981   primitive.  */
3982
3983tree
3984build_address (tree t)
3985{
3986  tree addr;
3987
3988  if (error_operand_p (t) || !cxx_mark_addressable (t))
3989    return error_mark_node;
3990
3991  addr = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (t)), t);
3992
3993  return addr;
3994}
3995
3996/* Return a NOP_EXPR converting EXPR to TYPE.  */
3997
3998tree
3999build_nop (tree type, tree expr)
4000{
4001  if (type == error_mark_node || error_operand_p (expr))
4002    return expr;
4003  return build1 (NOP_EXPR, type, expr);
4004}
4005
4006/* C++: Must handle pointers to members.
4007
4008   Perhaps type instantiation should be extended to handle conversion
4009   from aggregates to types we don't yet know we want?  (Or are those
4010   cases typically errors which should be reported?)
4011
4012   NOCONVERT nonzero suppresses the default promotions
4013   (such as from short to int).  */
4014
4015tree
4016build_unary_op (enum tree_code code, tree xarg, int noconvert)
4017{
4018  /* No default_conversion here.  It causes trouble for ADDR_EXPR.  */
4019  tree arg = xarg;
4020  tree argtype = 0;
4021  const char *errstring = NULL;
4022  tree val;
4023  const char *invalid_op_diag;
4024
4025  if (arg == error_mark_node)
4026    return error_mark_node;
4027
4028  if ((invalid_op_diag
4029       = targetm.invalid_unary_op ((code == UNARY_PLUS_EXPR
4030				    ? CONVERT_EXPR
4031				    : code),
4032				   TREE_TYPE (xarg))))
4033    {
4034      error (invalid_op_diag);
4035      return error_mark_node;
4036    }
4037
4038  switch (code)
4039    {
4040    case UNARY_PLUS_EXPR:
4041    case NEGATE_EXPR:
4042      {
4043	int flags = WANT_ARITH | WANT_ENUM;
4044	/* Unary plus (but not unary minus) is allowed on pointers.  */
4045	if (code == UNARY_PLUS_EXPR)
4046	  flags |= WANT_POINTER;
4047	arg = build_expr_type_conversion (flags, arg, true);
4048	if (!arg)
4049	  errstring = (code == NEGATE_EXPR
4050		       ? "wrong type argument to unary minus"
4051		       : "wrong type argument to unary plus");
4052	else
4053	  {
4054	    if (!noconvert && CP_INTEGRAL_TYPE_P (TREE_TYPE (arg)))
4055	      arg = perform_integral_promotions (arg);
4056
4057	    /* Make sure the result is not an lvalue: a unary plus or minus
4058	       expression is always a rvalue.  */
4059	    arg = rvalue (arg);
4060	  }
4061      }
4062      break;
4063
4064    case BIT_NOT_EXPR:
4065      if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
4066	{
4067	  code = CONJ_EXPR;
4068	  if (!noconvert)
4069	    arg = default_conversion (arg);
4070	}
4071      else if (!(arg = build_expr_type_conversion (WANT_INT | WANT_ENUM
4072						   | WANT_VECTOR,
4073						   arg, true)))
4074	errstring = "wrong type argument to bit-complement";
4075      else if (!noconvert && CP_INTEGRAL_TYPE_P (TREE_TYPE (arg)))
4076	arg = perform_integral_promotions (arg);
4077      break;
4078
4079    case ABS_EXPR:
4080      if (!(arg = build_expr_type_conversion (WANT_ARITH | WANT_ENUM, arg, true)))
4081	errstring = "wrong type argument to abs";
4082      else if (!noconvert)
4083	arg = default_conversion (arg);
4084      break;
4085
4086    case CONJ_EXPR:
4087      /* Conjugating a real value is a no-op, but allow it anyway.  */
4088      if (!(arg = build_expr_type_conversion (WANT_ARITH | WANT_ENUM, arg, true)))
4089	errstring = "wrong type argument to conjugation";
4090      else if (!noconvert)
4091	arg = default_conversion (arg);
4092      break;
4093
4094    case TRUTH_NOT_EXPR:
4095      arg = perform_implicit_conversion (boolean_type_node, arg);
4096      val = invert_truthvalue (arg);
4097      if (arg != error_mark_node)
4098	return val;
4099      errstring = "in argument to unary !";
4100      break;
4101
4102    case NOP_EXPR:
4103      break;
4104
4105    case REALPART_EXPR:
4106      if (TREE_CODE (arg) == COMPLEX_CST)
4107	return TREE_REALPART (arg);
4108      else if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
4109	{
4110	  arg = build1 (REALPART_EXPR, TREE_TYPE (TREE_TYPE (arg)), arg);
4111	  return fold_if_not_in_template (arg);
4112	}
4113      else
4114	return arg;
4115
4116    case IMAGPART_EXPR:
4117      if (TREE_CODE (arg) == COMPLEX_CST)
4118	return TREE_IMAGPART (arg);
4119      else if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
4120	{
4121	  arg = build1 (IMAGPART_EXPR, TREE_TYPE (TREE_TYPE (arg)), arg);
4122	  return fold_if_not_in_template (arg);
4123	}
4124      else
4125	return cp_convert (TREE_TYPE (arg), integer_zero_node);
4126
4127    case PREINCREMENT_EXPR:
4128    case POSTINCREMENT_EXPR:
4129    case PREDECREMENT_EXPR:
4130    case POSTDECREMENT_EXPR:
4131      /* Handle complex lvalues (when permitted)
4132	 by reduction to simpler cases.  */
4133
4134      val = unary_complex_lvalue (code, arg);
4135      if (val != 0)
4136	return val;
4137
4138      /* Increment or decrement the real part of the value,
4139	 and don't change the imaginary part.  */
4140      if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
4141	{
4142	  tree real, imag;
4143
4144	  arg = stabilize_reference (arg);
4145	  real = build_unary_op (REALPART_EXPR, arg, 1);
4146	  imag = build_unary_op (IMAGPART_EXPR, arg, 1);
4147	  return build2 (COMPLEX_EXPR, TREE_TYPE (arg),
4148			 build_unary_op (code, real, 1), imag);
4149	}
4150
4151      /* Report invalid types.  */
4152
4153      if (!(arg = build_expr_type_conversion (WANT_ARITH | WANT_POINTER,
4154					      arg, true)))
4155	{
4156	  if (code == PREINCREMENT_EXPR)
4157	    errstring ="no pre-increment operator for type";
4158	  else if (code == POSTINCREMENT_EXPR)
4159	    errstring ="no post-increment operator for type";
4160	  else if (code == PREDECREMENT_EXPR)
4161	    errstring ="no pre-decrement operator for type";
4162	  else
4163	    errstring ="no post-decrement operator for type";
4164	  break;
4165	}
4166
4167      /* Report something read-only.  */
4168
4169      if (CP_TYPE_CONST_P (TREE_TYPE (arg))
4170	  || TREE_READONLY (arg))
4171	readonly_error (arg, ((code == PREINCREMENT_EXPR
4172			       || code == POSTINCREMENT_EXPR)
4173			      ? "increment" : "decrement"),
4174			0);
4175
4176      {
4177	tree inc;
4178	tree declared_type;
4179	tree result_type = TREE_TYPE (arg);
4180
4181	declared_type = unlowered_expr_type (arg);
4182
4183	arg = get_unwidened (arg, 0);
4184	argtype = TREE_TYPE (arg);
4185
4186	/* ARM $5.2.5 last annotation says this should be forbidden.  */
4187	if (TREE_CODE (argtype) == ENUMERAL_TYPE)
4188	  pedwarn ("ISO C++ forbids %sing an enum",
4189		   (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR)
4190		   ? "increment" : "decrement");
4191
4192	/* Compute the increment.  */
4193
4194	if (TREE_CODE (argtype) == POINTER_TYPE)
4195	  {
4196	    tree type = complete_type (TREE_TYPE (argtype));
4197
4198	    if (!COMPLETE_OR_VOID_TYPE_P (type))
4199	      error ("cannot %s a pointer to incomplete type %qT",
4200		     ((code == PREINCREMENT_EXPR
4201		       || code == POSTINCREMENT_EXPR)
4202		      ? "increment" : "decrement"), TREE_TYPE (argtype));
4203	    else if ((pedantic || warn_pointer_arith)
4204		     && !TYPE_PTROB_P (argtype))
4205	      pedwarn ("ISO C++ forbids %sing a pointer of type %qT",
4206		       ((code == PREINCREMENT_EXPR
4207			 || code == POSTINCREMENT_EXPR)
4208			? "increment" : "decrement"), argtype);
4209	    inc = cxx_sizeof_nowarn (TREE_TYPE (argtype));
4210	  }
4211	else
4212	  inc = integer_one_node;
4213
4214	inc = cp_convert (argtype, inc);
4215
4216	/* Handle incrementing a cast-expression.  */
4217
4218	switch (TREE_CODE (arg))
4219	  {
4220	  case NOP_EXPR:
4221	  case CONVERT_EXPR:
4222	  case FLOAT_EXPR:
4223	  case FIX_TRUNC_EXPR:
4224	  case FIX_FLOOR_EXPR:
4225	  case FIX_ROUND_EXPR:
4226	  case FIX_CEIL_EXPR:
4227	    {
4228	      tree incremented, modify, value, compound;
4229	      if (! lvalue_p (arg) && pedantic)
4230		pedwarn ("cast to non-reference type used as lvalue");
4231	      arg = stabilize_reference (arg);
4232	      if (code == PREINCREMENT_EXPR || code == PREDECREMENT_EXPR)
4233		value = arg;
4234	      else
4235		value = save_expr (arg);
4236	      incremented = build2 (((code == PREINCREMENT_EXPR
4237				      || code == POSTINCREMENT_EXPR)
4238				     ? PLUS_EXPR : MINUS_EXPR),
4239				    argtype, value, inc);
4240
4241	      modify = build_modify_expr (arg, NOP_EXPR, incremented);
4242	      compound = build2 (COMPOUND_EXPR, TREE_TYPE (arg),
4243				 modify, value);
4244
4245	      /* Eliminate warning about unused result of + or -.  */
4246	      TREE_NO_WARNING (compound) = 1;
4247	      return compound;
4248	    }
4249
4250	  default:
4251	    break;
4252	  }
4253
4254	/* Complain about anything else that is not a true lvalue.  */
4255	if (!lvalue_or_else (arg, ((code == PREINCREMENT_EXPR
4256				    || code == POSTINCREMENT_EXPR)
4257				   ? lv_increment : lv_decrement)))
4258	  return error_mark_node;
4259
4260	/* Forbid using -- on `bool'.  */
4261	if (same_type_p (declared_type, boolean_type_node))
4262	  {
4263	    if (code == POSTDECREMENT_EXPR || code == PREDECREMENT_EXPR)
4264	      {
4265		error ("invalid use of %<--%> on bool variable %qD", arg);
4266		return error_mark_node;
4267	      }
4268	    val = boolean_increment (code, arg);
4269	  }
4270	else
4271	  val = build2 (code, TREE_TYPE (arg), arg, inc);
4272
4273	TREE_SIDE_EFFECTS (val) = 1;
4274	return cp_convert (result_type, val);
4275      }
4276
4277    case ADDR_EXPR:
4278      /* Note that this operation never does default_conversion
4279	 regardless of NOCONVERT.  */
4280
4281      argtype = lvalue_type (arg);
4282
4283      if (TREE_CODE (arg) == OFFSET_REF)
4284	goto offset_ref;
4285
4286      if (TREE_CODE (argtype) == REFERENCE_TYPE)
4287	{
4288	  tree type = build_pointer_type (TREE_TYPE (argtype));
4289	  arg = build1 (CONVERT_EXPR, type, arg);
4290	  return arg;
4291	}
4292      else if (pedantic && DECL_MAIN_P (arg))
4293	/* ARM $3.4 */
4294	pedwarn ("ISO C++ forbids taking address of function %<::main%>");
4295
4296      /* Let &* cancel out to simplify resulting code.  */
4297      if (TREE_CODE (arg) == INDIRECT_REF)
4298	{
4299	  /* We don't need to have `current_class_ptr' wrapped in a
4300	     NON_LVALUE_EXPR node.  */
4301	  if (arg == current_class_ref)
4302	    return current_class_ptr;
4303
4304	  arg = TREE_OPERAND (arg, 0);
4305	  if (TREE_CODE (TREE_TYPE (arg)) == REFERENCE_TYPE)
4306	    {
4307	      tree type = build_pointer_type (TREE_TYPE (TREE_TYPE (arg)));
4308	      arg = build1 (CONVERT_EXPR, type, arg);
4309	    }
4310	  else
4311	    /* Don't let this be an lvalue.  */
4312	    arg = rvalue (arg);
4313	  return arg;
4314	}
4315
4316      /* Uninstantiated types are all functions.  Taking the
4317	 address of a function is a no-op, so just return the
4318	 argument.  */
4319
4320      gcc_assert (TREE_CODE (arg) != IDENTIFIER_NODE
4321		  || !IDENTIFIER_OPNAME_P (arg));
4322
4323      if (TREE_CODE (arg) == COMPONENT_REF && type_unknown_p (arg)
4324	  && !really_overloaded_fn (TREE_OPERAND (arg, 1)))
4325	{
4326	  /* They're trying to take the address of a unique non-static
4327	     member function.  This is ill-formed (except in MS-land),
4328	     but let's try to DTRT.
4329	     Note: We only handle unique functions here because we don't
4330	     want to complain if there's a static overload; non-unique
4331	     cases will be handled by instantiate_type.  But we need to
4332	     handle this case here to allow casts on the resulting PMF.
4333	     We could defer this in non-MS mode, but it's easier to give
4334	     a useful error here.  */
4335
4336	  /* Inside constant member functions, the `this' pointer
4337	     contains an extra const qualifier.  TYPE_MAIN_VARIANT
4338	     is used here to remove this const from the diagnostics
4339	     and the created OFFSET_REF.  */
4340	  tree base = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (arg, 0)));
4341	  tree fn = get_first_fn (TREE_OPERAND (arg, 1));
4342	  mark_used (fn);
4343
4344	  if (! flag_ms_extensions)
4345	    {
4346	      tree name = DECL_NAME (fn);
4347	      if (current_class_type
4348		  && TREE_OPERAND (arg, 0) == current_class_ref)
4349		/* An expression like &memfn.  */
4350		pedwarn ("ISO C++ forbids taking the address of an unqualified"
4351			 " or parenthesized non-static member function to form"
4352			 " a pointer to member function.  Say %<&%T::%D%>",
4353			 base, name);
4354	      else
4355		pedwarn ("ISO C++ forbids taking the address of a bound member"
4356			 " function to form a pointer to member function."
4357			 "  Say %<&%T::%D%>",
4358			 base, name);
4359	    }
4360	  arg = build_offset_ref (base, fn, /*address_p=*/true);
4361	}
4362
4363    offset_ref:
4364      if (type_unknown_p (arg))
4365	return build1 (ADDR_EXPR, unknown_type_node, arg);
4366
4367      /* Handle complex lvalues (when permitted)
4368	 by reduction to simpler cases.  */
4369      val = unary_complex_lvalue (code, arg);
4370      if (val != 0)
4371	return val;
4372
4373      switch (TREE_CODE (arg))
4374	{
4375	case NOP_EXPR:
4376	case CONVERT_EXPR:
4377	case FLOAT_EXPR:
4378	case FIX_TRUNC_EXPR:
4379	case FIX_FLOOR_EXPR:
4380	case FIX_ROUND_EXPR:
4381	case FIX_CEIL_EXPR:
4382	  if (! lvalue_p (arg) && pedantic)
4383	    pedwarn ("ISO C++ forbids taking the address of a cast to a non-lvalue expression");
4384	  break;
4385
4386	case BASELINK:
4387	  arg = BASELINK_FUNCTIONS (arg);
4388	  /* Fall through.  */
4389
4390	case OVERLOAD:
4391	  arg = OVL_CURRENT (arg);
4392	  break;
4393
4394	case OFFSET_REF:
4395	  /* Turn a reference to a non-static data member into a
4396	     pointer-to-member.  */
4397	  {
4398	    tree type;
4399	    tree t;
4400
4401	    if (!PTRMEM_OK_P (arg))
4402	      return build_unary_op (code, arg, 0);
4403
4404	    t = TREE_OPERAND (arg, 1);
4405	    if (TREE_CODE (TREE_TYPE (t)) == REFERENCE_TYPE)
4406	      {
4407		error ("cannot create pointer to reference member %qD", t);
4408		return error_mark_node;
4409	      }
4410
4411	    type = build_ptrmem_type (context_for_name_lookup (t),
4412				      TREE_TYPE (t));
4413	    t = make_ptrmem_cst (type, TREE_OPERAND (arg, 1));
4414	    return t;
4415	  }
4416
4417	default:
4418	  break;
4419	}
4420
4421      /* Anything not already handled and not a true memory reference
4422	 is an error.  */
4423      if (TREE_CODE (argtype) != FUNCTION_TYPE
4424	  && TREE_CODE (argtype) != METHOD_TYPE
4425	  && TREE_CODE (arg) != OFFSET_REF
4426	  && !lvalue_or_else (arg, lv_addressof))
4427	return error_mark_node;
4428
4429      if (argtype != error_mark_node)
4430	argtype = build_pointer_type (argtype);
4431
4432      /* In a template, we are processing a non-dependent expression
4433	 so we can just form an ADDR_EXPR with the correct type.  */
4434      if (processing_template_decl)
4435	{
4436	  val = build_address (arg);
4437	  if (TREE_CODE (arg) == OFFSET_REF)
4438	    PTRMEM_OK_P (val) = PTRMEM_OK_P (arg);
4439	  return val;
4440	}
4441
4442      if (TREE_CODE (arg) != COMPONENT_REF)
4443	{
4444	  val = build_address (arg);
4445	  if (TREE_CODE (arg) == OFFSET_REF)
4446	    PTRMEM_OK_P (val) = PTRMEM_OK_P (arg);
4447	}
4448      else if (TREE_CODE (TREE_OPERAND (arg, 1)) == BASELINK)
4449	{
4450	  tree fn = BASELINK_FUNCTIONS (TREE_OPERAND (arg, 1));
4451
4452	  /* We can only get here with a single static member
4453	     function.  */
4454	  gcc_assert (TREE_CODE (fn) == FUNCTION_DECL
4455		      && DECL_STATIC_FUNCTION_P (fn));
4456	  mark_used (fn);
4457	  val = build_address (fn);
4458	  if (TREE_SIDE_EFFECTS (TREE_OPERAND (arg, 0)))
4459	    /* Do not lose object's side effects.  */
4460	    val = build2 (COMPOUND_EXPR, TREE_TYPE (val),
4461			  TREE_OPERAND (arg, 0), val);
4462	}
4463      else if (DECL_C_BIT_FIELD (TREE_OPERAND (arg, 1)))
4464	{
4465	  error ("attempt to take address of bit-field structure member %qD",
4466		 TREE_OPERAND (arg, 1));
4467	  return error_mark_node;
4468	}
4469      else
4470	{
4471	  tree object = TREE_OPERAND (arg, 0);
4472	  tree field = TREE_OPERAND (arg, 1);
4473	  gcc_assert (same_type_ignoring_top_level_qualifiers_p
4474		      (TREE_TYPE (object), decl_type_context (field)));
4475	  val = build_address (arg);
4476	}
4477
4478      if (TREE_CODE (argtype) == POINTER_TYPE
4479	  && TREE_CODE (TREE_TYPE (argtype)) == METHOD_TYPE)
4480	{
4481	  build_ptrmemfunc_type (argtype);
4482	  val = build_ptrmemfunc (argtype, val, 0,
4483				  /*c_cast_p=*/false);
4484	}
4485
4486      return val;
4487
4488    default:
4489      break;
4490    }
4491
4492  if (!errstring)
4493    {
4494      if (argtype == 0)
4495	argtype = TREE_TYPE (arg);
4496      return fold_if_not_in_template (build1 (code, argtype, arg));
4497    }
4498
4499  error ("%s", errstring);
4500  return error_mark_node;
4501}
4502
4503/* Apply unary lvalue-demanding operator CODE to the expression ARG
4504   for certain kinds of expressions which are not really lvalues
4505   but which we can accept as lvalues.
4506
4507   If ARG is not a kind of expression we can handle, return
4508   NULL_TREE.  */
4509
4510tree
4511unary_complex_lvalue (enum tree_code code, tree arg)
4512{
4513  /* Inside a template, making these kinds of adjustments is
4514     pointless; we are only concerned with the type of the
4515     expression.  */
4516  if (processing_template_decl)
4517    return NULL_TREE;
4518
4519  /* Handle (a, b) used as an "lvalue".  */
4520  if (TREE_CODE (arg) == COMPOUND_EXPR)
4521    {
4522      tree real_result = build_unary_op (code, TREE_OPERAND (arg, 1), 0);
4523      return build2 (COMPOUND_EXPR, TREE_TYPE (real_result),
4524		     TREE_OPERAND (arg, 0), real_result);
4525    }
4526
4527  /* Handle (a ? b : c) used as an "lvalue".  */
4528  if (TREE_CODE (arg) == COND_EXPR
4529      || TREE_CODE (arg) == MIN_EXPR || TREE_CODE (arg) == MAX_EXPR)
4530    return rationalize_conditional_expr (code, arg);
4531
4532  /* Handle (a = b), (++a), and (--a) used as an "lvalue".  */
4533  if (TREE_CODE (arg) == MODIFY_EXPR
4534      || TREE_CODE (arg) == PREINCREMENT_EXPR
4535      || TREE_CODE (arg) == PREDECREMENT_EXPR)
4536    {
4537      tree lvalue = TREE_OPERAND (arg, 0);
4538      if (TREE_SIDE_EFFECTS (lvalue))
4539	{
4540	  lvalue = stabilize_reference (lvalue);
4541	  arg = build2 (TREE_CODE (arg), TREE_TYPE (arg),
4542			lvalue, TREE_OPERAND (arg, 1));
4543	}
4544      return unary_complex_lvalue
4545	(code, build2 (COMPOUND_EXPR, TREE_TYPE (lvalue), arg, lvalue));
4546    }
4547
4548  if (code != ADDR_EXPR)
4549    return NULL_TREE;
4550
4551  /* Handle (a = b) used as an "lvalue" for `&'.  */
4552  if (TREE_CODE (arg) == MODIFY_EXPR
4553      || TREE_CODE (arg) == INIT_EXPR)
4554    {
4555      tree real_result = build_unary_op (code, TREE_OPERAND (arg, 0), 0);
4556      arg = build2 (COMPOUND_EXPR, TREE_TYPE (real_result),
4557		    arg, real_result);
4558      TREE_NO_WARNING (arg) = 1;
4559      return arg;
4560    }
4561
4562  if (TREE_CODE (TREE_TYPE (arg)) == FUNCTION_TYPE
4563      || TREE_CODE (TREE_TYPE (arg)) == METHOD_TYPE
4564      || TREE_CODE (arg) == OFFSET_REF)
4565    return NULL_TREE;
4566
4567  /* We permit compiler to make function calls returning
4568     objects of aggregate type look like lvalues.  */
4569  {
4570    tree targ = arg;
4571
4572    if (TREE_CODE (targ) == SAVE_EXPR)
4573      targ = TREE_OPERAND (targ, 0);
4574
4575    if (TREE_CODE (targ) == CALL_EXPR && IS_AGGR_TYPE (TREE_TYPE (targ)))
4576      {
4577	if (TREE_CODE (arg) == SAVE_EXPR)
4578	  targ = arg;
4579	else
4580	  targ = build_cplus_new (TREE_TYPE (arg), arg);
4581	return build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (arg)), targ);
4582      }
4583
4584    if (TREE_CODE (arg) == SAVE_EXPR && TREE_CODE (targ) == INDIRECT_REF)
4585      return build3 (SAVE_EXPR, build_pointer_type (TREE_TYPE (arg)),
4586		     TREE_OPERAND (targ, 0), current_function_decl, NULL);
4587  }
4588
4589  /* Don't let anything else be handled specially.  */
4590  return NULL_TREE;
4591}
4592
4593/* Mark EXP saying that we need to be able to take the
4594   address of it; it should not be allocated in a register.
4595   Value is true if successful.
4596
4597   C++: we do not allow `current_class_ptr' to be addressable.  */
4598
4599bool
4600cxx_mark_addressable (tree exp)
4601{
4602  tree x = exp;
4603
4604  while (1)
4605    switch (TREE_CODE (x))
4606      {
4607      case ADDR_EXPR:
4608      case COMPONENT_REF:
4609      case ARRAY_REF:
4610      case REALPART_EXPR:
4611      case IMAGPART_EXPR:
4612	x = TREE_OPERAND (x, 0);
4613	break;
4614
4615      case PARM_DECL:
4616	if (x == current_class_ptr)
4617	  {
4618	    error ("cannot take the address of %<this%>, which is an rvalue expression");
4619	    TREE_ADDRESSABLE (x) = 1; /* so compiler doesn't die later.  */
4620	    return true;
4621	  }
4622	/* Fall through.  */
4623
4624      case VAR_DECL:
4625	/* Caller should not be trying to mark initialized
4626	   constant fields addressable.  */
4627	gcc_assert (DECL_LANG_SPECIFIC (x) == 0
4628		    || DECL_IN_AGGR_P (x) == 0
4629		    || TREE_STATIC (x)
4630		    || DECL_EXTERNAL (x));
4631	/* Fall through.  */
4632
4633      case CONST_DECL:
4634      case RESULT_DECL:
4635	if (DECL_REGISTER (x) && !TREE_ADDRESSABLE (x)
4636	    && !DECL_ARTIFICIAL (x))
4637	  {
4638	    if (TREE_CODE (x) == VAR_DECL && DECL_HARD_REGISTER (x))
4639	      {
4640		error
4641		  ("address of explicit register variable %qD requested", x);
4642		return false;
4643	      }
4644	    else if (extra_warnings)
4645	      warning
4646		(OPT_Wextra, "address requested for %qD, which is declared %<register%>", x);
4647	  }
4648	TREE_ADDRESSABLE (x) = 1;
4649	return true;
4650
4651      case FUNCTION_DECL:
4652	TREE_ADDRESSABLE (x) = 1;
4653	return true;
4654
4655      case CONSTRUCTOR:
4656	TREE_ADDRESSABLE (x) = 1;
4657	return true;
4658
4659      case TARGET_EXPR:
4660	TREE_ADDRESSABLE (x) = 1;
4661	cxx_mark_addressable (TREE_OPERAND (x, 0));
4662	return true;
4663
4664      default:
4665	return true;
4666    }
4667}
4668
4669/* Build and return a conditional expression IFEXP ? OP1 : OP2.  */
4670
4671tree
4672build_x_conditional_expr (tree ifexp, tree op1, tree op2)
4673{
4674  tree orig_ifexp = ifexp;
4675  tree orig_op1 = op1;
4676  tree orig_op2 = op2;
4677  tree expr;
4678
4679  if (processing_template_decl)
4680    {
4681      /* The standard says that the expression is type-dependent if
4682	 IFEXP is type-dependent, even though the eventual type of the
4683	 expression doesn't dependent on IFEXP.  */
4684      if (type_dependent_expression_p (ifexp)
4685	  /* As a GNU extension, the middle operand may be omitted.  */
4686	  || (op1 && type_dependent_expression_p (op1))
4687	  || type_dependent_expression_p (op2))
4688	return build_min_nt (COND_EXPR, ifexp, op1, op2);
4689      ifexp = build_non_dependent_expr (ifexp);
4690      if (op1)
4691	op1 = build_non_dependent_expr (op1);
4692      op2 = build_non_dependent_expr (op2);
4693    }
4694
4695  expr = build_conditional_expr (ifexp, op1, op2);
4696  if (processing_template_decl && expr != error_mark_node)
4697    return build_min_non_dep (COND_EXPR, expr,
4698			      orig_ifexp, orig_op1, orig_op2);
4699  return expr;
4700}
4701
4702/* Given a list of expressions, return a compound expression
4703   that performs them all and returns the value of the last of them.  */
4704
4705tree build_x_compound_expr_from_list (tree list, const char *msg)
4706{
4707  tree expr = TREE_VALUE (list);
4708
4709  if (TREE_CHAIN (list))
4710    {
4711      if (msg)
4712	pedwarn ("%s expression list treated as compound expression", msg);
4713
4714      for (list = TREE_CHAIN (list); list; list = TREE_CHAIN (list))
4715	expr = build_x_compound_expr (expr, TREE_VALUE (list));
4716    }
4717
4718  return expr;
4719}
4720
4721/* Handle overloading of the ',' operator when needed.  */
4722
4723tree
4724build_x_compound_expr (tree op1, tree op2)
4725{
4726  tree result;
4727  tree orig_op1 = op1;
4728  tree orig_op2 = op2;
4729
4730  if (processing_template_decl)
4731    {
4732      if (type_dependent_expression_p (op1)
4733	  || type_dependent_expression_p (op2))
4734	return build_min_nt (COMPOUND_EXPR, op1, op2);
4735      op1 = build_non_dependent_expr (op1);
4736      op2 = build_non_dependent_expr (op2);
4737    }
4738
4739  result = build_new_op (COMPOUND_EXPR, LOOKUP_NORMAL, op1, op2, NULL_TREE,
4740			 /*overloaded_p=*/NULL);
4741  if (!result)
4742    result = build_compound_expr (op1, op2);
4743
4744  if (processing_template_decl && result != error_mark_node)
4745    return build_min_non_dep (COMPOUND_EXPR, result, orig_op1, orig_op2);
4746
4747  return result;
4748}
4749
4750/* Build a compound expression.  */
4751
4752tree
4753build_compound_expr (tree lhs, tree rhs)
4754{
4755  lhs = convert_to_void (lhs, "left-hand operand of comma");
4756
4757  if (lhs == error_mark_node || rhs == error_mark_node)
4758    return error_mark_node;
4759
4760  if (TREE_CODE (rhs) == TARGET_EXPR)
4761    {
4762      /* If the rhs is a TARGET_EXPR, then build the compound
4763	 expression inside the target_expr's initializer. This
4764	 helps the compiler to eliminate unnecessary temporaries.  */
4765      tree init = TREE_OPERAND (rhs, 1);
4766
4767      init = build2 (COMPOUND_EXPR, TREE_TYPE (init), lhs, init);
4768      TREE_OPERAND (rhs, 1) = init;
4769
4770      return rhs;
4771    }
4772
4773  return build2 (COMPOUND_EXPR, TREE_TYPE (rhs), lhs, rhs);
4774}
4775
4776/* Issue a diagnostic message if casting from SRC_TYPE to DEST_TYPE
4777   casts away constness.  DIAG_FN gives the function to call if we
4778   need to issue a diagnostic; if it is NULL, no diagnostic will be
4779   issued.  DESCRIPTION explains what operation is taking place.  */
4780
4781static void
4782check_for_casting_away_constness (tree src_type, tree dest_type,
4783				  void (*diag_fn)(const char *, ...) ATTRIBUTE_GCC_CXXDIAG(1,2),
4784				  const char *description)
4785{
4786  if (diag_fn && casts_away_constness (src_type, dest_type))
4787    diag_fn ("%s from type %qT to type %qT casts away constness",
4788	     description, src_type, dest_type);
4789}
4790
4791/* Convert EXPR (an expression with pointer-to-member type) to TYPE
4792   (another pointer-to-member type in the same hierarchy) and return
4793   the converted expression.  If ALLOW_INVERSE_P is permitted, a
4794   pointer-to-derived may be converted to pointer-to-base; otherwise,
4795   only the other direction is permitted.  If C_CAST_P is true, this
4796   conversion is taking place as part of a C-style cast.  */
4797
4798tree
4799convert_ptrmem (tree type, tree expr, bool allow_inverse_p,
4800		bool c_cast_p)
4801{
4802  if (TYPE_PTRMEM_P (type))
4803    {
4804      tree delta;
4805
4806      if (TREE_CODE (expr) == PTRMEM_CST)
4807	expr = cplus_expand_constant (expr);
4808      delta = get_delta_difference (TYPE_PTRMEM_CLASS_TYPE (TREE_TYPE (expr)),
4809				    TYPE_PTRMEM_CLASS_TYPE (type),
4810				    allow_inverse_p,
4811				    c_cast_p);
4812      if (!integer_zerop (delta))
4813	expr = cp_build_binary_op (PLUS_EXPR,
4814				   build_nop (ptrdiff_type_node, expr),
4815				   delta);
4816      return build_nop (type, expr);
4817    }
4818  else
4819    return build_ptrmemfunc (TYPE_PTRMEMFUNC_FN_TYPE (type), expr,
4820			     allow_inverse_p, c_cast_p);
4821}
4822
4823/* If EXPR is an INTEGER_CST and ORIG is an arithmetic constant, return
4824   a version of EXPR that has TREE_OVERFLOW and/or TREE_CONSTANT_OVERFLOW
4825   set iff they are set in ORIG.  Otherwise, return EXPR unchanged.  */
4826
4827static tree
4828ignore_overflows (tree expr, tree orig)
4829{
4830  if (TREE_CODE (expr) == INTEGER_CST
4831      && CONSTANT_CLASS_P (orig)
4832      && TREE_CODE (orig) != STRING_CST
4833      && (TREE_OVERFLOW (expr) != TREE_OVERFLOW (orig)
4834	  || TREE_CONSTANT_OVERFLOW (expr)
4835	     != TREE_CONSTANT_OVERFLOW (orig)))
4836    {
4837      if (!TREE_OVERFLOW (orig) && !TREE_CONSTANT_OVERFLOW (orig))
4838	/* Ensure constant sharing.  */
4839	expr = build_int_cst_wide (TREE_TYPE (expr),
4840				   TREE_INT_CST_LOW (expr),
4841				   TREE_INT_CST_HIGH (expr));
4842      else
4843	{
4844	  /* Avoid clobbering a shared constant.  */
4845	  expr = copy_node (expr);
4846	  TREE_OVERFLOW (expr) = TREE_OVERFLOW (orig);
4847	  TREE_CONSTANT_OVERFLOW (expr)
4848	    = TREE_CONSTANT_OVERFLOW (orig);
4849	}
4850    }
4851  return expr;
4852}
4853
4854/* Perform a static_cast from EXPR to TYPE.  When C_CAST_P is true,
4855   this static_cast is being attempted as one of the possible casts
4856   allowed by a C-style cast.  (In that case, accessibility of base
4857   classes is not considered, and it is OK to cast away
4858   constness.)  Return the result of the cast.  *VALID_P is set to
4859   indicate whether or not the cast was valid.  */
4860
4861static tree
4862build_static_cast_1 (tree type, tree expr, bool c_cast_p,
4863		     bool *valid_p)
4864{
4865  tree intype;
4866  tree result;
4867  tree orig;
4868  void (*diag_fn)(const char*, ...) ATTRIBUTE_GCC_CXXDIAG(1,2);
4869  const char *desc;
4870
4871  /* Assume the cast is valid.  */
4872  *valid_p = true;
4873
4874  intype = TREE_TYPE (expr);
4875
4876  /* Save casted types in the function's used types hash table.  */
4877  used_types_insert (type);
4878
4879  /* Determine what to do when casting away constness.  */
4880  if (c_cast_p)
4881    {
4882      /* C-style casts are allowed to cast away constness.  With
4883	 WARN_CAST_QUAL, we still want to issue a warning.  */
4884      diag_fn = warn_cast_qual ? warning0 : NULL;
4885      desc = "cast";
4886    }
4887  else
4888    {
4889      /* A static_cast may not cast away constness.  */
4890      diag_fn = error;
4891      desc = "static_cast";
4892    }
4893
4894  /* [expr.static.cast]
4895
4896     An lvalue of type "cv1 B", where B is a class type, can be cast
4897     to type "reference to cv2 D", where D is a class derived (clause
4898     _class.derived_) from B, if a valid standard conversion from
4899     "pointer to D" to "pointer to B" exists (_conv.ptr_), cv2 is the
4900     same cv-qualification as, or greater cv-qualification than, cv1,
4901     and B is not a virtual base class of D.  */
4902  /* We check this case before checking the validity of "TYPE t =
4903     EXPR;" below because for this case:
4904
4905       struct B {};
4906       struct D : public B { D(const B&); };
4907       extern B& b;
4908       void f() { static_cast<const D&>(b); }
4909
4910     we want to avoid constructing a new D.  The standard is not
4911     completely clear about this issue, but our interpretation is
4912     consistent with other compilers.  */
4913  if (TREE_CODE (type) == REFERENCE_TYPE
4914      && CLASS_TYPE_P (TREE_TYPE (type))
4915      && CLASS_TYPE_P (intype)
4916      && real_lvalue_p (expr)
4917      && DERIVED_FROM_P (intype, TREE_TYPE (type))
4918      && can_convert (build_pointer_type (TYPE_MAIN_VARIANT (intype)),
4919		      build_pointer_type (TYPE_MAIN_VARIANT
4920					  (TREE_TYPE (type))))
4921      && (c_cast_p
4922	  || at_least_as_qualified_p (TREE_TYPE (type), intype)))
4923    {
4924      tree base;
4925
4926      /* There is a standard conversion from "D*" to "B*" even if "B"
4927	 is ambiguous or inaccessible.  If this is really a
4928	 static_cast, then we check both for inaccessibility and
4929	 ambiguity.  However, if this is a static_cast being performed
4930	 because the user wrote a C-style cast, then accessibility is
4931	 not considered.  */
4932      base = lookup_base (TREE_TYPE (type), intype,
4933			  c_cast_p ? ba_unique : ba_check,
4934			  NULL);
4935
4936      /* Convert from "B*" to "D*".  This function will check that "B"
4937	 is not a virtual base of "D".  */
4938      expr = build_base_path (MINUS_EXPR, build_address (expr),
4939			      base, /*nonnull=*/false);
4940      /* Convert the pointer to a reference -- but then remember that
4941	 there are no expressions with reference type in C++.  */
4942      return convert_from_reference (build_nop (type, expr));
4943    }
4944
4945  orig = expr;
4946
4947  /* [expr.static.cast]
4948
4949     An expression e can be explicitly converted to a type T using a
4950     static_cast of the form static_cast<T>(e) if the declaration T
4951     t(e);" is well-formed, for some invented temporary variable
4952     t.  */
4953  result = perform_direct_initialization_if_possible (type, expr,
4954						      c_cast_p);
4955  if (result)
4956    {
4957      result = convert_from_reference (result);
4958
4959      /* Ignore any integer overflow caused by the cast.  */
4960      result = ignore_overflows (result, orig);
4961
4962      /* [expr.static.cast]
4963
4964	 If T is a reference type, the result is an lvalue; otherwise,
4965	 the result is an rvalue.  */
4966      if (TREE_CODE (type) != REFERENCE_TYPE)
4967	result = rvalue (result);
4968      return result;
4969    }
4970
4971  /* [expr.static.cast]
4972
4973     Any expression can be explicitly converted to type cv void.  */
4974  if (TREE_CODE (type) == VOID_TYPE)
4975    return convert_to_void (expr, /*implicit=*/NULL);
4976
4977  /* [expr.static.cast]
4978
4979     The inverse of any standard conversion sequence (clause _conv_),
4980     other than the lvalue-to-rvalue (_conv.lval_), array-to-pointer
4981     (_conv.array_), function-to-pointer (_conv.func_), and boolean
4982     (_conv.bool_) conversions, can be performed explicitly using
4983     static_cast subject to the restriction that the explicit
4984     conversion does not cast away constness (_expr.const.cast_), and
4985     the following additional rules for specific cases:  */
4986  /* For reference, the conversions not excluded are: integral
4987     promotions, floating point promotion, integral conversions,
4988     floating point conversions, floating-integral conversions,
4989     pointer conversions, and pointer to member conversions.  */
4990  /* DR 128
4991
4992     A value of integral _or enumeration_ type can be explicitly
4993     converted to an enumeration type.  */
4994  /* The effect of all that is that any conversion between any two
4995     types which are integral, floating, or enumeration types can be
4996     performed.  */
4997  if ((INTEGRAL_TYPE_P (type) || SCALAR_FLOAT_TYPE_P (type))
4998      && (INTEGRAL_TYPE_P (intype) || SCALAR_FLOAT_TYPE_P (intype)))
4999    {
5000      expr = ocp_convert (type, expr, CONV_C_CAST, LOOKUP_NORMAL);
5001
5002      /* Ignore any integer overflow caused by the cast.  */
5003      expr = ignore_overflows (expr, orig);
5004      return expr;
5005    }
5006
5007  if (TYPE_PTR_P (type) && TYPE_PTR_P (intype)
5008      && CLASS_TYPE_P (TREE_TYPE (type))
5009      && CLASS_TYPE_P (TREE_TYPE (intype))
5010      && can_convert (build_pointer_type (TYPE_MAIN_VARIANT
5011					  (TREE_TYPE (intype))),
5012		      build_pointer_type (TYPE_MAIN_VARIANT
5013					  (TREE_TYPE (type)))))
5014    {
5015      tree base;
5016
5017      if (!c_cast_p)
5018	check_for_casting_away_constness (intype, type, diag_fn, desc);
5019      base = lookup_base (TREE_TYPE (type), TREE_TYPE (intype),
5020			  c_cast_p ? ba_unique : ba_check,
5021			  NULL);
5022      return build_base_path (MINUS_EXPR, expr, base, /*nonnull=*/false);
5023    }
5024
5025  if ((TYPE_PTRMEM_P (type) && TYPE_PTRMEM_P (intype))
5026      || (TYPE_PTRMEMFUNC_P (type) && TYPE_PTRMEMFUNC_P (intype)))
5027    {
5028      tree c1;
5029      tree c2;
5030      tree t1;
5031      tree t2;
5032
5033      c1 = TYPE_PTRMEM_CLASS_TYPE (intype);
5034      c2 = TYPE_PTRMEM_CLASS_TYPE (type);
5035
5036      if (TYPE_PTRMEM_P (type))
5037	{
5038	  t1 = (build_ptrmem_type
5039		(c1,
5040		 TYPE_MAIN_VARIANT (TYPE_PTRMEM_POINTED_TO_TYPE (intype))));
5041	  t2 = (build_ptrmem_type
5042		(c2,
5043		 TYPE_MAIN_VARIANT (TYPE_PTRMEM_POINTED_TO_TYPE (type))));
5044	}
5045      else
5046	{
5047	  t1 = intype;
5048	  t2 = type;
5049	}
5050      if (can_convert (t1, t2))
5051	{
5052	  if (!c_cast_p)
5053	    check_for_casting_away_constness (intype, type, diag_fn,
5054					      desc);
5055	  return convert_ptrmem (type, expr, /*allow_inverse_p=*/1,
5056				 c_cast_p);
5057	}
5058    }
5059
5060  /* [expr.static.cast]
5061
5062     An rvalue of type "pointer to cv void" can be explicitly
5063     converted to a pointer to object type.  A value of type pointer
5064     to object converted to "pointer to cv void" and back to the
5065     original pointer type will have its original value.  */
5066  if (TREE_CODE (intype) == POINTER_TYPE
5067      && VOID_TYPE_P (TREE_TYPE (intype))
5068      && TYPE_PTROB_P (type))
5069    {
5070      if (!c_cast_p)
5071	check_for_casting_away_constness (intype, type, diag_fn, desc);
5072      return build_nop (type, expr);
5073    }
5074
5075  *valid_p = false;
5076  return error_mark_node;
5077}
5078
5079/* Return an expression representing static_cast<TYPE>(EXPR).  */
5080
5081tree
5082build_static_cast (tree type, tree expr)
5083{
5084  tree result;
5085  bool valid_p;
5086
5087  if (type == error_mark_node || expr == error_mark_node)
5088    return error_mark_node;
5089
5090  if (processing_template_decl)
5091    {
5092      expr = build_min (STATIC_CAST_EXPR, type, expr);
5093      /* We don't know if it will or will not have side effects.  */
5094      TREE_SIDE_EFFECTS (expr) = 1;
5095      return convert_from_reference (expr);
5096    }
5097
5098  /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
5099     Strip such NOP_EXPRs if VALUE is being used in non-lvalue context.  */
5100  if (TREE_CODE (type) != REFERENCE_TYPE
5101      && TREE_CODE (expr) == NOP_EXPR
5102      && TREE_TYPE (expr) == TREE_TYPE (TREE_OPERAND (expr, 0)))
5103    expr = TREE_OPERAND (expr, 0);
5104
5105  result = build_static_cast_1 (type, expr, /*c_cast_p=*/false, &valid_p);
5106  if (valid_p)
5107    return result;
5108
5109  error ("invalid static_cast from type %qT to type %qT",
5110	 TREE_TYPE (expr), type);
5111  return error_mark_node;
5112}
5113
5114/* EXPR is an expression with member function or pointer-to-member
5115   function type.  TYPE is a pointer type.  Converting EXPR to TYPE is
5116   not permitted by ISO C++, but we accept it in some modes.  If we
5117   are not in one of those modes, issue a diagnostic.  Return the
5118   converted expression.  */
5119
5120tree
5121convert_member_func_to_ptr (tree type, tree expr)
5122{
5123  tree intype;
5124  tree decl;
5125
5126  intype = TREE_TYPE (expr);
5127  gcc_assert (TYPE_PTRMEMFUNC_P (intype)
5128	      || TREE_CODE (intype) == METHOD_TYPE);
5129
5130  if (pedantic || warn_pmf2ptr)
5131    pedwarn ("converting from %qT to %qT", intype, type);
5132
5133  if (TREE_CODE (intype) == METHOD_TYPE)
5134    expr = build_addr_func (expr);
5135  else if (TREE_CODE (expr) == PTRMEM_CST)
5136    expr = build_address (PTRMEM_CST_MEMBER (expr));
5137  else
5138    {
5139      decl = maybe_dummy_object (TYPE_PTRMEM_CLASS_TYPE (intype), 0);
5140      decl = build_address (decl);
5141      expr = get_member_function_from_ptrfunc (&decl, expr);
5142    }
5143
5144  return build_nop (type, expr);
5145}
5146
5147/* Return a representation for a reinterpret_cast from EXPR to TYPE.
5148   If C_CAST_P is true, this reinterpret cast is being done as part of
5149   a C-style cast.  If VALID_P is non-NULL, *VALID_P is set to
5150   indicate whether or not reinterpret_cast was valid.  */
5151
5152static tree
5153build_reinterpret_cast_1 (tree type, tree expr, bool c_cast_p,
5154			  bool *valid_p)
5155{
5156  tree intype;
5157
5158  /* Assume the cast is invalid.  */
5159  if (valid_p)
5160    *valid_p = true;
5161
5162  if (type == error_mark_node || error_operand_p (expr))
5163    return error_mark_node;
5164
5165  intype = TREE_TYPE (expr);
5166
5167  /* Save casted types in the function's used types hash table.  */
5168  used_types_insert (type);
5169
5170  /* [expr.reinterpret.cast]
5171     An lvalue expression of type T1 can be cast to the type
5172     "reference to T2" if an expression of type "pointer to T1" can be
5173     explicitly converted to the type "pointer to T2" using a
5174     reinterpret_cast.  */
5175  if (TREE_CODE (type) == REFERENCE_TYPE)
5176    {
5177      if (! real_lvalue_p (expr))
5178	{
5179	  error ("invalid cast of an rvalue expression of type "
5180		 "%qT to type %qT",
5181		 intype, type);
5182	  return error_mark_node;
5183	}
5184
5185      /* Warn about a reinterpret_cast from "A*" to "B&" if "A" and
5186	 "B" are related class types; the reinterpret_cast does not
5187	 adjust the pointer.  */
5188      if (TYPE_PTR_P (intype)
5189	  && (comptypes (TREE_TYPE (intype), TREE_TYPE (type),
5190			 COMPARE_BASE | COMPARE_DERIVED)))
5191	warning (0, "casting %qT to %qT does not dereference pointer",
5192		 intype, type);
5193
5194      expr = build_unary_op (ADDR_EXPR, expr, 0);
5195      if (expr != error_mark_node)
5196	expr = build_reinterpret_cast_1
5197	  (build_pointer_type (TREE_TYPE (type)), expr, c_cast_p,
5198	   valid_p);
5199      if (expr != error_mark_node)
5200	expr = build_indirect_ref (expr, 0);
5201      return expr;
5202    }
5203
5204  /* As a G++ extension, we consider conversions from member
5205     functions, and pointers to member functions to
5206     pointer-to-function and pointer-to-void types.  If
5207     -Wno-pmf-conversions has not been specified,
5208     convert_member_func_to_ptr will issue an error message.  */
5209  if ((TYPE_PTRMEMFUNC_P (intype)
5210       || TREE_CODE (intype) == METHOD_TYPE)
5211      && TYPE_PTR_P (type)
5212      && (TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE
5213	  || VOID_TYPE_P (TREE_TYPE (type))))
5214    return convert_member_func_to_ptr (type, expr);
5215
5216  /* If the cast is not to a reference type, the lvalue-to-rvalue,
5217     array-to-pointer, and function-to-pointer conversions are
5218     performed.  */
5219  expr = decay_conversion (expr);
5220
5221  /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
5222     Strip such NOP_EXPRs if VALUE is being used in non-lvalue context.  */
5223  if (TREE_CODE (expr) == NOP_EXPR
5224      && TREE_TYPE (expr) == TREE_TYPE (TREE_OPERAND (expr, 0)))
5225    expr = TREE_OPERAND (expr, 0);
5226
5227  if (error_operand_p (expr))
5228    return error_mark_node;
5229
5230  intype = TREE_TYPE (expr);
5231
5232  /* [expr.reinterpret.cast]
5233     A pointer can be converted to any integral type large enough to
5234     hold it.  */
5235  if (CP_INTEGRAL_TYPE_P (type) && TYPE_PTR_P (intype))
5236    {
5237      if (TYPE_PRECISION (type) < TYPE_PRECISION (intype))
5238	pedwarn ("cast from %qT to %qT loses precision",
5239		 intype, type);
5240    }
5241  /* [expr.reinterpret.cast]
5242     A value of integral or enumeration type can be explicitly
5243     converted to a pointer.  */
5244  else if (TYPE_PTR_P (type) && INTEGRAL_OR_ENUMERATION_TYPE_P (intype))
5245    /* OK */
5246    ;
5247  else if ((TYPE_PTRFN_P (type) && TYPE_PTRFN_P (intype))
5248	   || (TYPE_PTRMEMFUNC_P (type) && TYPE_PTRMEMFUNC_P (intype)))
5249    return fold_if_not_in_template (build_nop (type, expr));
5250  else if ((TYPE_PTRMEM_P (type) && TYPE_PTRMEM_P (intype))
5251	   || (TYPE_PTROBV_P (type) && TYPE_PTROBV_P (intype)))
5252    {
5253      tree sexpr = expr;
5254
5255      if (!c_cast_p)
5256	check_for_casting_away_constness (intype, type, error,
5257					  "reinterpret_cast");
5258      /* Warn about possible alignment problems.  */
5259      if (STRICT_ALIGNMENT && warn_cast_align
5260	  && !VOID_TYPE_P (type)
5261	  && TREE_CODE (TREE_TYPE (intype)) != FUNCTION_TYPE
5262	  && COMPLETE_TYPE_P (TREE_TYPE (type))
5263	  && COMPLETE_TYPE_P (TREE_TYPE (intype))
5264	  && TYPE_ALIGN (TREE_TYPE (type)) > TYPE_ALIGN (TREE_TYPE (intype)))
5265	warning (0, "cast from %qT to %qT increases required alignment of "
5266		 "target type",
5267		 intype, type);
5268
5269      /* We need to strip nops here, because the frontend likes to
5270	 create (int *)&a for array-to-pointer decay, instead of &a[0].  */
5271      STRIP_NOPS (sexpr);
5272      if (warn_strict_aliasing <= 2)
5273	strict_aliasing_warning (intype, type, sexpr);
5274
5275      return fold_if_not_in_template (build_nop (type, expr));
5276    }
5277  else if ((TYPE_PTRFN_P (type) && TYPE_PTROBV_P (intype))
5278	   || (TYPE_PTRFN_P (intype) && TYPE_PTROBV_P (type)))
5279    {
5280      if (pedantic)
5281	/* Only issue a warning, as we have always supported this
5282	   where possible, and it is necessary in some cases.  DR 195
5283	   addresses this issue, but as of 2004/10/26 is still in
5284	   drafting.  */
5285	warning (0, "ISO C++ forbids casting between pointer-to-function and pointer-to-object");
5286      return fold_if_not_in_template (build_nop (type, expr));
5287    }
5288  else if (TREE_CODE (type) == VECTOR_TYPE)
5289    return fold_if_not_in_template (convert_to_vector (type, expr));
5290  else if (TREE_CODE (intype) == VECTOR_TYPE && INTEGRAL_TYPE_P (type))
5291    return fold_if_not_in_template (convert_to_integer (type, expr));
5292  else
5293    {
5294      if (valid_p)
5295	*valid_p = false;
5296      error ("invalid cast from type %qT to type %qT", intype, type);
5297      return error_mark_node;
5298    }
5299
5300  return cp_convert (type, expr);
5301}
5302
5303tree
5304build_reinterpret_cast (tree type, tree expr)
5305{
5306  if (type == error_mark_node || expr == error_mark_node)
5307    return error_mark_node;
5308
5309  if (processing_template_decl)
5310    {
5311      tree t = build_min (REINTERPRET_CAST_EXPR, type, expr);
5312
5313      if (!TREE_SIDE_EFFECTS (t)
5314	  && type_dependent_expression_p (expr))
5315	/* There might turn out to be side effects inside expr.  */
5316	TREE_SIDE_EFFECTS (t) = 1;
5317      return convert_from_reference (t);
5318    }
5319
5320  return build_reinterpret_cast_1 (type, expr, /*c_cast_p=*/false,
5321				   /*valid_p=*/NULL);
5322}
5323
5324/* Perform a const_cast from EXPR to TYPE.  If the cast is valid,
5325   return an appropriate expression.  Otherwise, return
5326   error_mark_node.  If the cast is not valid, and COMPLAIN is true,
5327   then a diagnostic will be issued.  If VALID_P is non-NULL, we are
5328   performing a C-style cast, its value upon return will indicate
5329   whether or not the conversion succeeded.  */
5330
5331static tree
5332build_const_cast_1 (tree dst_type, tree expr, bool complain,
5333		    bool *valid_p)
5334{
5335  tree src_type;
5336  tree reference_type;
5337
5338  /* Callers are responsible for handling error_mark_node as a
5339     destination type.  */
5340  gcc_assert (dst_type != error_mark_node);
5341  /* In a template, callers should be building syntactic
5342     representations of casts, not using this machinery.  */
5343  gcc_assert (!processing_template_decl);
5344
5345  /* Assume the conversion is invalid.  */
5346  if (valid_p)
5347    *valid_p = false;
5348
5349  if (!POINTER_TYPE_P (dst_type) && !TYPE_PTRMEM_P (dst_type))
5350    {
5351      if (complain)
5352	error ("invalid use of const_cast with type %qT, "
5353	       "which is not a pointer, "
5354	       "reference, nor a pointer-to-data-member type", dst_type);
5355      return error_mark_node;
5356    }
5357
5358  if (TREE_CODE (TREE_TYPE (dst_type)) == FUNCTION_TYPE)
5359    {
5360      if (complain)
5361	error ("invalid use of const_cast with type %qT, which is a pointer "
5362	       "or reference to a function type", dst_type);
5363      return error_mark_node;
5364    }
5365
5366  /* Save casted types in the function's used types hash table.  */
5367  used_types_insert (dst_type);
5368
5369  src_type = TREE_TYPE (expr);
5370  /* Expressions do not really have reference types.  */
5371  if (TREE_CODE (src_type) == REFERENCE_TYPE)
5372    src_type = TREE_TYPE (src_type);
5373
5374  /* [expr.const.cast]
5375
5376     An lvalue of type T1 can be explicitly converted to an lvalue of
5377     type T2 using the cast const_cast<T2&> (where T1 and T2 are object
5378     types) if a pointer to T1 can be explicitly converted to the type
5379     pointer to T2 using a const_cast.  */
5380  if (TREE_CODE (dst_type) == REFERENCE_TYPE)
5381    {
5382      reference_type = dst_type;
5383      if (! real_lvalue_p (expr))
5384	{
5385	  if (complain)
5386	    error ("invalid const_cast of an rvalue of type %qT to type %qT",
5387		   src_type, dst_type);
5388	  return error_mark_node;
5389	}
5390      dst_type = build_pointer_type (TREE_TYPE (dst_type));
5391      src_type = build_pointer_type (src_type);
5392    }
5393  else
5394    {
5395      reference_type = NULL_TREE;
5396      /* If the destination type is not a reference type, the
5397	 lvalue-to-rvalue, array-to-pointer, and function-to-pointer
5398	 conversions are performed.  */
5399      src_type = type_decays_to (src_type);
5400      if (src_type == error_mark_node)
5401	return error_mark_node;
5402    }
5403
5404  if ((TYPE_PTR_P (src_type) || TYPE_PTRMEM_P (src_type))
5405      && comp_ptr_ttypes_const (dst_type, src_type))
5406    {
5407      if (valid_p)
5408	{
5409	  *valid_p = true;
5410	  /* This cast is actually a C-style cast.  Issue a warning if
5411	     the user is making a potentially unsafe cast.  */
5412	  if (warn_cast_qual)
5413	    check_for_casting_away_constness (src_type, dst_type,
5414					      warning0,
5415					      "cast");
5416	}
5417      if (reference_type)
5418	{
5419	  expr = build_unary_op (ADDR_EXPR, expr, 0);
5420	  expr = build_nop (reference_type, expr);
5421	  return convert_from_reference (expr);
5422	}
5423      else
5424	{
5425	  expr = decay_conversion (expr);
5426	  /* build_c_cast puts on a NOP_EXPR to make the result not an
5427	     lvalue.  Strip such NOP_EXPRs if VALUE is being used in
5428	     non-lvalue context.  */
5429	  if (TREE_CODE (expr) == NOP_EXPR
5430	      && TREE_TYPE (expr) == TREE_TYPE (TREE_OPERAND (expr, 0)))
5431	    expr = TREE_OPERAND (expr, 0);
5432	  return build_nop (dst_type, expr);
5433	}
5434    }
5435
5436  if (complain)
5437    error ("invalid const_cast from type %qT to type %qT",
5438	   src_type, dst_type);
5439  return error_mark_node;
5440}
5441
5442tree
5443build_const_cast (tree type, tree expr)
5444{
5445  if (type == error_mark_node || error_operand_p (expr))
5446    return error_mark_node;
5447
5448  if (processing_template_decl)
5449    {
5450      tree t = build_min (CONST_CAST_EXPR, type, expr);
5451
5452      if (!TREE_SIDE_EFFECTS (t)
5453	  && type_dependent_expression_p (expr))
5454	/* There might turn out to be side effects inside expr.  */
5455	TREE_SIDE_EFFECTS (t) = 1;
5456      return convert_from_reference (t);
5457    }
5458
5459  return build_const_cast_1 (type, expr, /*complain=*/true,
5460			     /*valid_p=*/NULL);
5461}
5462
5463/* Build an expression representing an explicit C-style cast to type
5464   TYPE of expression EXPR.  */
5465
5466tree
5467build_c_cast (tree type, tree expr)
5468{
5469  tree value = expr;
5470  tree result;
5471  bool valid_p;
5472
5473  if (type == error_mark_node || error_operand_p (expr))
5474    return error_mark_node;
5475
5476  if (processing_template_decl)
5477    {
5478      tree t = build_min (CAST_EXPR, type,
5479			  tree_cons (NULL_TREE, value, NULL_TREE));
5480      /* We don't know if it will or will not have side effects.  */
5481      TREE_SIDE_EFFECTS (t) = 1;
5482      return convert_from_reference (t);
5483    }
5484
5485  /* Casts to a (pointer to a) specific ObjC class (or 'id' or
5486     'Class') should always be retained, because this information aids
5487     in method lookup.  */
5488  if (objc_is_object_ptr (type)
5489      && objc_is_object_ptr (TREE_TYPE (expr)))
5490    return build_nop (type, expr);
5491
5492  /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
5493     Strip such NOP_EXPRs if VALUE is being used in non-lvalue context.  */
5494  if (TREE_CODE (type) != REFERENCE_TYPE
5495      && TREE_CODE (value) == NOP_EXPR
5496      && TREE_TYPE (value) == TREE_TYPE (TREE_OPERAND (value, 0)))
5497    value = TREE_OPERAND (value, 0);
5498
5499  if (TREE_CODE (type) == ARRAY_TYPE)
5500    {
5501      /* Allow casting from T1* to T2[] because Cfront allows it.
5502	 NIHCL uses it. It is not valid ISO C++ however.  */
5503      if (TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE)
5504	{
5505	  pedwarn ("ISO C++ forbids casting to an array type %qT", type);
5506	  type = build_pointer_type (TREE_TYPE (type));
5507	}
5508      else
5509	{
5510	  error ("ISO C++ forbids casting to an array type %qT", type);
5511	  return error_mark_node;
5512	}
5513    }
5514
5515  if (TREE_CODE (type) == FUNCTION_TYPE
5516      || TREE_CODE (type) == METHOD_TYPE)
5517    {
5518      error ("invalid cast to function type %qT", type);
5519      return error_mark_node;
5520    }
5521
5522  /* A C-style cast can be a const_cast.  */
5523  result = build_const_cast_1 (type, value, /*complain=*/false,
5524			       &valid_p);
5525  if (valid_p)
5526    return result;
5527
5528  /* Or a static cast.  */
5529  result = build_static_cast_1 (type, value, /*c_cast_p=*/true,
5530				&valid_p);
5531  /* Or a reinterpret_cast.  */
5532  if (!valid_p)
5533    result = build_reinterpret_cast_1 (type, value, /*c_cast_p=*/true,
5534				       &valid_p);
5535  /* The static_cast or reinterpret_cast may be followed by a
5536     const_cast.  */
5537  if (valid_p
5538      /* A valid cast may result in errors if, for example, a
5539	 conversion to am ambiguous base class is required.  */
5540      && !error_operand_p (result))
5541    {
5542      tree result_type;
5543
5544      /* Non-class rvalues always have cv-unqualified type.  */
5545      if (!CLASS_TYPE_P (type))
5546	type = TYPE_MAIN_VARIANT (type);
5547      result_type = TREE_TYPE (result);
5548      if (!CLASS_TYPE_P (result_type))
5549	result_type = TYPE_MAIN_VARIANT (result_type);
5550      /* If the type of RESULT does not match TYPE, perform a
5551	 const_cast to make it match.  If the static_cast or
5552	 reinterpret_cast succeeded, we will differ by at most
5553	 cv-qualification, so the follow-on const_cast is guaranteed
5554	 to succeed.  */
5555      if (!same_type_p (non_reference (type), non_reference (result_type)))
5556	{
5557	  result = build_const_cast_1 (type, result, false, &valid_p);
5558	  gcc_assert (valid_p);
5559	}
5560      return result;
5561    }
5562
5563  return error_mark_node;
5564}
5565
5566/* Build an assignment expression of lvalue LHS from value RHS.
5567   MODIFYCODE is the code for a binary operator that we use
5568   to combine the old value of LHS with RHS to get the new value.
5569   Or else MODIFYCODE is NOP_EXPR meaning do a simple assignment.
5570
5571   C++: If MODIFYCODE is INIT_EXPR, then leave references unbashed.  */
5572
5573tree
5574build_modify_expr (tree lhs, enum tree_code modifycode, tree rhs)
5575{
5576  tree result;
5577  tree newrhs = rhs;
5578  tree lhstype = TREE_TYPE (lhs);
5579  tree olhstype = lhstype;
5580  tree olhs = NULL_TREE;
5581  bool plain_assign = (modifycode == NOP_EXPR);
5582
5583  /* Avoid duplicate error messages from operands that had errors.  */
5584  if (error_operand_p (lhs) || error_operand_p (rhs))
5585    return error_mark_node;
5586
5587  /* Handle control structure constructs used as "lvalues".  */
5588  switch (TREE_CODE (lhs))
5589    {
5590      /* Handle --foo = 5; as these are valid constructs in C++.  */
5591    case PREDECREMENT_EXPR:
5592    case PREINCREMENT_EXPR:
5593      if (TREE_SIDE_EFFECTS (TREE_OPERAND (lhs, 0)))
5594	lhs = build2 (TREE_CODE (lhs), TREE_TYPE (lhs),
5595		      stabilize_reference (TREE_OPERAND (lhs, 0)),
5596		      TREE_OPERAND (lhs, 1));
5597      return build2 (COMPOUND_EXPR, lhstype,
5598		     lhs,
5599		     build_modify_expr (TREE_OPERAND (lhs, 0),
5600					modifycode, rhs));
5601
5602      /* Handle (a, b) used as an "lvalue".  */
5603    case COMPOUND_EXPR:
5604      newrhs = build_modify_expr (TREE_OPERAND (lhs, 1),
5605				  modifycode, rhs);
5606      if (newrhs == error_mark_node)
5607	return error_mark_node;
5608      return build2 (COMPOUND_EXPR, lhstype,
5609		     TREE_OPERAND (lhs, 0), newrhs);
5610
5611    case MODIFY_EXPR:
5612      if (TREE_SIDE_EFFECTS (TREE_OPERAND (lhs, 0)))
5613	lhs = build2 (TREE_CODE (lhs), TREE_TYPE (lhs),
5614		      stabilize_reference (TREE_OPERAND (lhs, 0)),
5615		      TREE_OPERAND (lhs, 1));
5616      newrhs = build_modify_expr (TREE_OPERAND (lhs, 0), modifycode, rhs);
5617      if (newrhs == error_mark_node)
5618	return error_mark_node;
5619      return build2 (COMPOUND_EXPR, lhstype, lhs, newrhs);
5620
5621    case MIN_EXPR:
5622    case MAX_EXPR:
5623      /* MIN_EXPR and MAX_EXPR are currently only permitted as lvalues,
5624	 when neither operand has side-effects.  */
5625      if (!lvalue_or_else (lhs, lv_assign))
5626	return error_mark_node;
5627
5628      gcc_assert (!TREE_SIDE_EFFECTS (TREE_OPERAND (lhs, 0))
5629		  && !TREE_SIDE_EFFECTS (TREE_OPERAND (lhs, 1)));
5630
5631      lhs = build3 (COND_EXPR, TREE_TYPE (lhs),
5632		    build2 (TREE_CODE (lhs) == MIN_EXPR ? LE_EXPR : GE_EXPR,
5633			    boolean_type_node,
5634			    TREE_OPERAND (lhs, 0),
5635			    TREE_OPERAND (lhs, 1)),
5636		    TREE_OPERAND (lhs, 0),
5637		    TREE_OPERAND (lhs, 1));
5638      /* Fall through.  */
5639
5640      /* Handle (a ? b : c) used as an "lvalue".  */
5641    case COND_EXPR:
5642      {
5643	/* Produce (a ? (b = rhs) : (c = rhs))
5644	   except that the RHS goes through a save-expr
5645	   so the code to compute it is only emitted once.  */
5646	tree cond;
5647	tree preeval = NULL_TREE;
5648
5649	if (VOID_TYPE_P (TREE_TYPE (rhs)))
5650	  {
5651	    error ("void value not ignored as it ought to be");
5652	    return error_mark_node;
5653	  }
5654
5655	rhs = stabilize_expr (rhs, &preeval);
5656
5657	/* Check this here to avoid odd errors when trying to convert
5658	   a throw to the type of the COND_EXPR.  */
5659	if (!lvalue_or_else (lhs, lv_assign))
5660	  return error_mark_node;
5661
5662	cond = build_conditional_expr
5663	  (TREE_OPERAND (lhs, 0),
5664	   build_modify_expr (TREE_OPERAND (lhs, 1),
5665			      modifycode, rhs),
5666	   build_modify_expr (TREE_OPERAND (lhs, 2),
5667			      modifycode, rhs));
5668
5669	if (cond == error_mark_node)
5670	  return cond;
5671	/* Make sure the code to compute the rhs comes out
5672	   before the split.  */
5673	if (preeval)
5674	  cond = build2 (COMPOUND_EXPR, TREE_TYPE (lhs), preeval, cond);
5675	return cond;
5676      }
5677
5678    default:
5679      break;
5680    }
5681
5682  if (modifycode == INIT_EXPR)
5683    {
5684      if (TREE_CODE (rhs) == CONSTRUCTOR)
5685	{
5686	  if (! same_type_p (TREE_TYPE (rhs), lhstype))
5687	    /* Call convert to generate an error; see PR 11063.  */
5688	    rhs = convert (lhstype, rhs);
5689	  result = build2 (INIT_EXPR, lhstype, lhs, rhs);
5690	  TREE_SIDE_EFFECTS (result) = 1;
5691	  return result;
5692	}
5693      else if (! IS_AGGR_TYPE (lhstype))
5694	/* Do the default thing.  */;
5695      else
5696	{
5697	  result = build_special_member_call (lhs, complete_ctor_identifier,
5698					      build_tree_list (NULL_TREE, rhs),
5699					      lhstype, LOOKUP_NORMAL);
5700	  if (result == NULL_TREE)
5701	    return error_mark_node;
5702	  return result;
5703	}
5704    }
5705  else
5706    {
5707      lhs = require_complete_type (lhs);
5708      if (lhs == error_mark_node)
5709	return error_mark_node;
5710
5711      if (modifycode == NOP_EXPR)
5712	{
5713	  /* `operator=' is not an inheritable operator.  */
5714	  if (! IS_AGGR_TYPE (lhstype))
5715	    /* Do the default thing.  */;
5716	  else
5717	    {
5718	      result = build_new_op (MODIFY_EXPR, LOOKUP_NORMAL,
5719				     lhs, rhs, make_node (NOP_EXPR),
5720				     /*overloaded_p=*/NULL);
5721	      if (result == NULL_TREE)
5722		return error_mark_node;
5723	      return result;
5724	    }
5725	  lhstype = olhstype;
5726	}
5727      else
5728	{
5729	  /* A binary op has been requested.  Combine the old LHS
5730	     value with the RHS producing the value we should actually
5731	     store into the LHS.  */
5732
5733	  gcc_assert (!PROMOTES_TO_AGGR_TYPE (lhstype, REFERENCE_TYPE));
5734	  lhs = stabilize_reference (lhs);
5735	  newrhs = cp_build_binary_op (modifycode, lhs, rhs);
5736	  if (newrhs == error_mark_node)
5737	    {
5738	      error ("  in evaluation of %<%Q(%#T, %#T)%>", modifycode,
5739		     TREE_TYPE (lhs), TREE_TYPE (rhs));
5740	      return error_mark_node;
5741	    }
5742
5743	  /* Now it looks like a plain assignment.  */
5744	  modifycode = NOP_EXPR;
5745	}
5746      gcc_assert (TREE_CODE (lhstype) != REFERENCE_TYPE);
5747      gcc_assert (TREE_CODE (TREE_TYPE (newrhs)) != REFERENCE_TYPE);
5748    }
5749
5750  /* The left-hand side must be an lvalue.  */
5751  if (!lvalue_or_else (lhs, lv_assign))
5752    return error_mark_node;
5753
5754  /* Warn about modifying something that is `const'.  Don't warn if
5755     this is initialization.  */
5756  if (modifycode != INIT_EXPR
5757      && (TREE_READONLY (lhs) || CP_TYPE_CONST_P (lhstype)
5758	  /* Functions are not modifiable, even though they are
5759	     lvalues.  */
5760	  || TREE_CODE (TREE_TYPE (lhs)) == FUNCTION_TYPE
5761	  || TREE_CODE (TREE_TYPE (lhs)) == METHOD_TYPE
5762	  /* If it's an aggregate and any field is const, then it is
5763	     effectively const.  */
5764	  || (CLASS_TYPE_P (lhstype)
5765	      && C_TYPE_FIELDS_READONLY (lhstype))))
5766    readonly_error (lhs, "assignment", 0);
5767
5768  /* If storing into a structure or union member, it has probably been
5769     given type `int'.  Compute the type that would go with the actual
5770     amount of storage the member occupies.  */
5771
5772  if (TREE_CODE (lhs) == COMPONENT_REF
5773      && (TREE_CODE (lhstype) == INTEGER_TYPE
5774	  || TREE_CODE (lhstype) == REAL_TYPE
5775	  || TREE_CODE (lhstype) == ENUMERAL_TYPE))
5776    {
5777      lhstype = TREE_TYPE (get_unwidened (lhs, 0));
5778
5779      /* If storing in a field that is in actuality a short or narrower
5780	 than one, we must store in the field in its actual type.  */
5781
5782      if (lhstype != TREE_TYPE (lhs))
5783	{
5784	  /* Avoid warnings converting integral types back into enums for
5785	     enum bit fields.  */
5786	  if (TREE_CODE (lhstype) == INTEGER_TYPE
5787	      && TREE_CODE (olhstype) == ENUMERAL_TYPE)
5788	    {
5789	      if (TREE_SIDE_EFFECTS (lhs))
5790		lhs = stabilize_reference (lhs);
5791	      olhs = lhs;
5792	    }
5793	  lhs = copy_node (lhs);
5794	  TREE_TYPE (lhs) = lhstype;
5795	}
5796    }
5797
5798  /* Convert new value to destination type.  */
5799
5800  if (TREE_CODE (lhstype) == ARRAY_TYPE)
5801    {
5802      int from_array;
5803
5804      if (!same_or_base_type_p (TYPE_MAIN_VARIANT (lhstype),
5805				TYPE_MAIN_VARIANT (TREE_TYPE (rhs))))
5806	{
5807	  error ("incompatible types in assignment of %qT to %qT",
5808		 TREE_TYPE (rhs), lhstype);
5809	  return error_mark_node;
5810	}
5811
5812      /* Allow array assignment in compiler-generated code.  */
5813      if (! DECL_ARTIFICIAL (current_function_decl))
5814	{
5815          /* This routine is used for both initialization and assignment.
5816             Make sure the diagnostic message differentiates the context.  */
5817          if (modifycode == INIT_EXPR)
5818            error ("array used as initializer");
5819          else
5820            error ("invalid array assignment");
5821	  return error_mark_node;
5822	}
5823
5824      from_array = TREE_CODE (TREE_TYPE (newrhs)) == ARRAY_TYPE
5825		   ? 1 + (modifycode != INIT_EXPR): 0;
5826      return build_vec_init (lhs, NULL_TREE, newrhs,
5827			     /*explicit_default_init_p=*/false,
5828			     from_array);
5829    }
5830
5831  if (modifycode == INIT_EXPR)
5832    newrhs = convert_for_initialization (lhs, lhstype, newrhs, LOOKUP_NORMAL,
5833					 "initialization", NULL_TREE, 0);
5834  else
5835    {
5836      /* Avoid warnings on enum bit fields.  */
5837      if (TREE_CODE (olhstype) == ENUMERAL_TYPE
5838	  && TREE_CODE (lhstype) == INTEGER_TYPE)
5839	{
5840	  newrhs = convert_for_assignment (olhstype, newrhs, "assignment",
5841					   NULL_TREE, 0);
5842	  newrhs = convert_force (lhstype, newrhs, 0);
5843	}
5844      else
5845	newrhs = convert_for_assignment (lhstype, newrhs, "assignment",
5846					 NULL_TREE, 0);
5847      if (TREE_CODE (newrhs) == CALL_EXPR
5848	  && TYPE_NEEDS_CONSTRUCTING (lhstype))
5849	newrhs = build_cplus_new (lhstype, newrhs);
5850
5851      /* Can't initialize directly from a TARGET_EXPR, since that would
5852	 cause the lhs to be constructed twice, and possibly result in
5853	 accidental self-initialization.  So we force the TARGET_EXPR to be
5854	 expanded without a target.  */
5855      if (TREE_CODE (newrhs) == TARGET_EXPR)
5856	newrhs = build2 (COMPOUND_EXPR, TREE_TYPE (newrhs), newrhs,
5857			 TREE_OPERAND (newrhs, 0));
5858    }
5859
5860  if (newrhs == error_mark_node)
5861    return error_mark_node;
5862
5863  if (c_dialect_objc () && flag_objc_gc)
5864    {
5865      result = objc_generate_write_barrier (lhs, modifycode, newrhs);
5866
5867      if (result)
5868	return result;
5869    }
5870
5871  result = build2 (modifycode == NOP_EXPR ? MODIFY_EXPR : INIT_EXPR,
5872		   lhstype, lhs, newrhs);
5873
5874  TREE_SIDE_EFFECTS (result) = 1;
5875  if (!plain_assign)
5876    TREE_NO_WARNING (result) = 1;
5877
5878  /* If we got the LHS in a different type for storing in,
5879     convert the result back to the nominal type of LHS
5880     so that the value we return always has the same type
5881     as the LHS argument.  */
5882
5883  if (olhstype == TREE_TYPE (result))
5884    return result;
5885  if (olhs)
5886    {
5887      result = build2 (COMPOUND_EXPR, olhstype, result, olhs);
5888      TREE_NO_WARNING (result) = 1;
5889      return result;
5890    }
5891  return convert_for_assignment (olhstype, result, "assignment",
5892				 NULL_TREE, 0);
5893}
5894
5895tree
5896build_x_modify_expr (tree lhs, enum tree_code modifycode, tree rhs)
5897{
5898  if (processing_template_decl)
5899    return build_min_nt (MODOP_EXPR, lhs,
5900			 build_min_nt (modifycode, NULL_TREE, NULL_TREE), rhs);
5901
5902  if (modifycode != NOP_EXPR)
5903    {
5904      tree rval = build_new_op (MODIFY_EXPR, LOOKUP_NORMAL, lhs, rhs,
5905				make_node (modifycode),
5906				/*overloaded_p=*/NULL);
5907      if (rval)
5908	{
5909	  TREE_NO_WARNING (rval) = 1;
5910	  return rval;
5911	}
5912    }
5913  return build_modify_expr (lhs, modifycode, rhs);
5914}
5915
5916
5917/* Get difference in deltas for different pointer to member function
5918   types.  Returns an integer constant of type PTRDIFF_TYPE_NODE.  If
5919   the conversion is invalid, the constant is zero.  If
5920   ALLOW_INVERSE_P is true, then allow reverse conversions as well.
5921   If C_CAST_P is true this conversion is taking place as part of a
5922   C-style cast.
5923
5924   Note that the naming of FROM and TO is kind of backwards; the return
5925   value is what we add to a TO in order to get a FROM.  They are named
5926   this way because we call this function to find out how to convert from
5927   a pointer to member of FROM to a pointer to member of TO.  */
5928
5929static tree
5930get_delta_difference (tree from, tree to,
5931		      bool allow_inverse_p,
5932		      bool c_cast_p)
5933{
5934  tree binfo;
5935  base_kind kind;
5936  tree result;
5937
5938  /* Assume no conversion is required.  */
5939  result = integer_zero_node;
5940  binfo = lookup_base (to, from, c_cast_p ? ba_unique : ba_check, &kind);
5941  if (kind == bk_inaccessible || kind == bk_ambig)
5942    error ("   in pointer to member function conversion");
5943  else if (binfo)
5944    {
5945      if (kind != bk_via_virtual)
5946	result = BINFO_OFFSET (binfo);
5947      else
5948	{
5949	  tree virt_binfo = binfo_from_vbase (binfo);
5950
5951	  /* This is a reinterpret cast, we choose to do nothing.  */
5952	  if (allow_inverse_p)
5953	    warning (0, "pointer to member cast via virtual base %qT",
5954		     BINFO_TYPE (virt_binfo));
5955	  else
5956	    error ("pointer to member conversion via virtual base %qT",
5957		   BINFO_TYPE (virt_binfo));
5958	}
5959    }
5960  else if (same_type_ignoring_top_level_qualifiers_p (from, to))
5961    /* Pointer to member of incomplete class is permitted*/;
5962  else if (!allow_inverse_p)
5963    {
5964      error_not_base_type (from, to);
5965      error ("   in pointer to member conversion");
5966    }
5967  else
5968    {
5969      binfo = lookup_base (from, to, c_cast_p ? ba_unique : ba_check, &kind);
5970      if (binfo)
5971	{
5972	  if (kind != bk_via_virtual)
5973	    result = size_diffop (size_zero_node, BINFO_OFFSET (binfo));
5974	  else
5975	    {
5976	      /* This is a reinterpret cast, we choose to do nothing.  */
5977	      tree virt_binfo = binfo_from_vbase (binfo);
5978
5979	      warning (0, "pointer to member cast via virtual base %qT",
5980		       BINFO_TYPE (virt_binfo));
5981	    }
5982	}
5983    }
5984
5985  return fold_if_not_in_template (convert_to_integer (ptrdiff_type_node,
5986						      result));
5987}
5988
5989/* Return a constructor for the pointer-to-member-function TYPE using
5990   the other components as specified.  */
5991
5992tree
5993build_ptrmemfunc1 (tree type, tree delta, tree pfn)
5994{
5995  tree u = NULL_TREE;
5996  tree delta_field;
5997  tree pfn_field;
5998  VEC(constructor_elt, gc) *v;
5999
6000  /* Pull the FIELD_DECLs out of the type.  */
6001  pfn_field = TYPE_FIELDS (type);
6002  delta_field = TREE_CHAIN (pfn_field);
6003
6004  /* Make sure DELTA has the type we want.  */
6005  delta = convert_and_check (delta_type_node, delta);
6006
6007  /* Finish creating the initializer.  */
6008  v = VEC_alloc(constructor_elt, gc, 2);
6009  CONSTRUCTOR_APPEND_ELT(v, pfn_field, pfn);
6010  CONSTRUCTOR_APPEND_ELT(v, delta_field, delta);
6011  u = build_constructor (type, v);
6012  TREE_CONSTANT (u) = TREE_CONSTANT (pfn) & TREE_CONSTANT (delta);
6013  TREE_INVARIANT (u) = TREE_INVARIANT (pfn) & TREE_INVARIANT (delta);
6014  TREE_STATIC (u) = (TREE_CONSTANT (u)
6015		     && (initializer_constant_valid_p (pfn, TREE_TYPE (pfn))
6016			 != NULL_TREE)
6017		     && (initializer_constant_valid_p (delta, TREE_TYPE (delta))
6018			 != NULL_TREE));
6019  return u;
6020}
6021
6022/* Build a constructor for a pointer to member function.  It can be
6023   used to initialize global variables, local variable, or used
6024   as a value in expressions.  TYPE is the POINTER to METHOD_TYPE we
6025   want to be.
6026
6027   If FORCE is nonzero, then force this conversion, even if
6028   we would rather not do it.  Usually set when using an explicit
6029   cast.  A C-style cast is being processed iff C_CAST_P is true.
6030
6031   Return error_mark_node, if something goes wrong.  */
6032
6033tree
6034build_ptrmemfunc (tree type, tree pfn, int force, bool c_cast_p)
6035{
6036  tree fn;
6037  tree pfn_type;
6038  tree to_type;
6039
6040  if (error_operand_p (pfn))
6041    return error_mark_node;
6042
6043  pfn_type = TREE_TYPE (pfn);
6044  to_type = build_ptrmemfunc_type (type);
6045
6046  /* Handle multiple conversions of pointer to member functions.  */
6047  if (TYPE_PTRMEMFUNC_P (pfn_type))
6048    {
6049      tree delta = NULL_TREE;
6050      tree npfn = NULL_TREE;
6051      tree n;
6052
6053      if (!force
6054	  && !can_convert_arg (to_type, TREE_TYPE (pfn), pfn, LOOKUP_NORMAL))
6055	error ("invalid conversion to type %qT from type %qT",
6056	       to_type, pfn_type);
6057
6058      n = get_delta_difference (TYPE_PTRMEMFUNC_OBJECT_TYPE (pfn_type),
6059				TYPE_PTRMEMFUNC_OBJECT_TYPE (to_type),
6060				force,
6061				c_cast_p);
6062
6063      /* We don't have to do any conversion to convert a
6064	 pointer-to-member to its own type.  But, we don't want to
6065	 just return a PTRMEM_CST if there's an explicit cast; that
6066	 cast should make the expression an invalid template argument.  */
6067      if (TREE_CODE (pfn) != PTRMEM_CST)
6068	{
6069	  if (same_type_p (to_type, pfn_type))
6070	    return pfn;
6071	  else if (integer_zerop (n))
6072	    return build_reinterpret_cast (to_type, pfn);
6073	}
6074
6075      if (TREE_SIDE_EFFECTS (pfn))
6076	pfn = save_expr (pfn);
6077
6078      /* Obtain the function pointer and the current DELTA.  */
6079      if (TREE_CODE (pfn) == PTRMEM_CST)
6080	expand_ptrmemfunc_cst (pfn, &delta, &npfn);
6081      else
6082	{
6083	  npfn = build_ptrmemfunc_access_expr (pfn, pfn_identifier);
6084	  delta = build_ptrmemfunc_access_expr (pfn, delta_identifier);
6085	}
6086
6087      /* Just adjust the DELTA field.  */
6088      gcc_assert  (same_type_ignoring_top_level_qualifiers_p
6089		   (TREE_TYPE (delta), ptrdiff_type_node));
6090      if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_delta)
6091	n = cp_build_binary_op (LSHIFT_EXPR, n, integer_one_node);
6092      delta = cp_build_binary_op (PLUS_EXPR, delta, n);
6093      return build_ptrmemfunc1 (to_type, delta, npfn);
6094    }
6095
6096  /* Handle null pointer to member function conversions.  */
6097  if (integer_zerop (pfn))
6098    {
6099      pfn = build_c_cast (type, integer_zero_node);
6100      return build_ptrmemfunc1 (to_type,
6101				integer_zero_node,
6102				pfn);
6103    }
6104
6105  if (type_unknown_p (pfn))
6106    return instantiate_type (type, pfn, tf_warning_or_error);
6107
6108  fn = TREE_OPERAND (pfn, 0);
6109  gcc_assert (TREE_CODE (fn) == FUNCTION_DECL
6110	      /* In a template, we will have preserved the
6111		 OFFSET_REF.  */
6112	      || (processing_template_decl && TREE_CODE (fn) == OFFSET_REF));
6113  return make_ptrmem_cst (to_type, fn);
6114}
6115
6116/* Return the DELTA, IDX, PFN, and DELTA2 values for the PTRMEM_CST
6117   given by CST.
6118
6119   ??? There is no consistency as to the types returned for the above
6120   values.  Some code acts as if it were a sizetype and some as if it were
6121   integer_type_node.  */
6122
6123void
6124expand_ptrmemfunc_cst (tree cst, tree *delta, tree *pfn)
6125{
6126  tree type = TREE_TYPE (cst);
6127  tree fn = PTRMEM_CST_MEMBER (cst);
6128  tree ptr_class, fn_class;
6129
6130  gcc_assert (TREE_CODE (fn) == FUNCTION_DECL);
6131
6132  /* The class that the function belongs to.  */
6133  fn_class = DECL_CONTEXT (fn);
6134
6135  /* The class that we're creating a pointer to member of.  */
6136  ptr_class = TYPE_PTRMEMFUNC_OBJECT_TYPE (type);
6137
6138  /* First, calculate the adjustment to the function's class.  */
6139  *delta = get_delta_difference (fn_class, ptr_class, /*force=*/0,
6140				 /*c_cast_p=*/0);
6141
6142  if (!DECL_VIRTUAL_P (fn))
6143    *pfn = convert (TYPE_PTRMEMFUNC_FN_TYPE (type), build_addr_func (fn));
6144  else
6145    {
6146      /* If we're dealing with a virtual function, we have to adjust 'this'
6147	 again, to point to the base which provides the vtable entry for
6148	 fn; the call will do the opposite adjustment.  */
6149      tree orig_class = DECL_CONTEXT (fn);
6150      tree binfo = binfo_or_else (orig_class, fn_class);
6151      *delta = build2 (PLUS_EXPR, TREE_TYPE (*delta),
6152		       *delta, BINFO_OFFSET (binfo));
6153      *delta = fold_if_not_in_template (*delta);
6154
6155      /* We set PFN to the vtable offset at which the function can be
6156	 found, plus one (unless ptrmemfunc_vbit_in_delta, in which
6157	 case delta is shifted left, and then incremented).  */
6158      *pfn = DECL_VINDEX (fn);
6159      *pfn = build2 (MULT_EXPR, integer_type_node, *pfn,
6160		     TYPE_SIZE_UNIT (vtable_entry_type));
6161      *pfn = fold_if_not_in_template (*pfn);
6162
6163      switch (TARGET_PTRMEMFUNC_VBIT_LOCATION)
6164	{
6165	case ptrmemfunc_vbit_in_pfn:
6166	  *pfn = build2 (PLUS_EXPR, integer_type_node, *pfn,
6167			 integer_one_node);
6168	  *pfn = fold_if_not_in_template (*pfn);
6169	  break;
6170
6171	case ptrmemfunc_vbit_in_delta:
6172	  *delta = build2 (LSHIFT_EXPR, TREE_TYPE (*delta),
6173			   *delta, integer_one_node);
6174	  *delta = fold_if_not_in_template (*delta);
6175	  *delta = build2 (PLUS_EXPR, TREE_TYPE (*delta),
6176			   *delta, integer_one_node);
6177	  *delta = fold_if_not_in_template (*delta);
6178	  break;
6179
6180	default:
6181	  gcc_unreachable ();
6182	}
6183
6184      *pfn = build_nop (TYPE_PTRMEMFUNC_FN_TYPE (type), *pfn);
6185      *pfn = fold_if_not_in_template (*pfn);
6186    }
6187}
6188
6189/* Return an expression for PFN from the pointer-to-member function
6190   given by T.  */
6191
6192static tree
6193pfn_from_ptrmemfunc (tree t)
6194{
6195  if (TREE_CODE (t) == PTRMEM_CST)
6196    {
6197      tree delta;
6198      tree pfn;
6199
6200      expand_ptrmemfunc_cst (t, &delta, &pfn);
6201      if (pfn)
6202	return pfn;
6203    }
6204
6205  return build_ptrmemfunc_access_expr (t, pfn_identifier);
6206}
6207
6208/* Convert value RHS to type TYPE as preparation for an assignment to
6209   an lvalue of type TYPE.  ERRTYPE is a string to use in error
6210   messages: "assignment", "return", etc.  If FNDECL is non-NULL, we
6211   are doing the conversion in order to pass the PARMNUMth argument of
6212   FNDECL.  */
6213
6214static tree
6215convert_for_assignment (tree type, tree rhs,
6216			const char *errtype, tree fndecl, int parmnum)
6217{
6218  tree rhstype;
6219  enum tree_code coder;
6220
6221  /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue.  */
6222  if (TREE_CODE (rhs) == NON_LVALUE_EXPR)
6223    rhs = TREE_OPERAND (rhs, 0);
6224
6225  rhstype = TREE_TYPE (rhs);
6226  coder = TREE_CODE (rhstype);
6227
6228  if (TREE_CODE (type) == VECTOR_TYPE && coder == VECTOR_TYPE
6229      && vector_types_convertible_p (type, rhstype))
6230    return convert (type, rhs);
6231
6232  if (rhs == error_mark_node || rhstype == error_mark_node)
6233    return error_mark_node;
6234  if (TREE_CODE (rhs) == TREE_LIST && TREE_VALUE (rhs) == error_mark_node)
6235    return error_mark_node;
6236
6237  /* The RHS of an assignment cannot have void type.  */
6238  if (coder == VOID_TYPE)
6239    {
6240      error ("void value not ignored as it ought to be");
6241      return error_mark_node;
6242    }
6243
6244  /* Simplify the RHS if possible.  */
6245  if (TREE_CODE (rhs) == CONST_DECL)
6246    rhs = DECL_INITIAL (rhs);
6247
6248  if (c_dialect_objc ())
6249    {
6250      int parmno;
6251      tree rname = fndecl;
6252
6253      if (!strcmp (errtype, "assignment"))
6254	parmno = -1;
6255      else if (!strcmp (errtype, "initialization"))
6256	parmno = -2;
6257      else
6258	{
6259	  tree selector = objc_message_selector ();
6260
6261	  parmno = parmnum;
6262
6263	  if (selector && parmno > 1)
6264	    {
6265	      rname = selector;
6266	      parmno -= 1;
6267	    }
6268	}
6269
6270      if (objc_compare_types (type, rhstype, parmno, rname))
6271	return convert (type, rhs);
6272    }
6273
6274  /* [expr.ass]
6275
6276     The expression is implicitly converted (clause _conv_) to the
6277     cv-unqualified type of the left operand.
6278
6279     We allow bad conversions here because by the time we get to this point
6280     we are committed to doing the conversion.  If we end up doing a bad
6281     conversion, convert_like will complain.  */
6282  if (!can_convert_arg_bad (type, rhstype, rhs))
6283    {
6284      /* When -Wno-pmf-conversions is use, we just silently allow
6285	 conversions from pointers-to-members to plain pointers.  If
6286	 the conversion doesn't work, cp_convert will complain.  */
6287      if (!warn_pmf2ptr
6288	  && TYPE_PTR_P (type)
6289	  && TYPE_PTRMEMFUNC_P (rhstype))
6290	rhs = cp_convert (strip_top_quals (type), rhs);
6291      else
6292	{
6293	  /* If the right-hand side has unknown type, then it is an
6294	     overloaded function.  Call instantiate_type to get error
6295	     messages.  */
6296	  if (rhstype == unknown_type_node)
6297	    instantiate_type (type, rhs, tf_warning_or_error);
6298	  else if (fndecl)
6299	    error ("cannot convert %qT to %qT for argument %qP to %qD",
6300		   rhstype, type, parmnum, fndecl);
6301	  else
6302	    error ("cannot convert %qT to %qT in %s", rhstype, type, errtype);
6303	  return error_mark_node;
6304	}
6305    }
6306  if (warn_missing_format_attribute)
6307    {
6308      const enum tree_code codel = TREE_CODE (type);
6309      if ((codel == POINTER_TYPE || codel == REFERENCE_TYPE)
6310	  && coder == codel
6311	  && check_missing_format_attribute (type, rhstype))
6312	warning (OPT_Wmissing_format_attribute,
6313		 "%s might be a candidate for a format attribute",
6314		 errtype);
6315    }
6316
6317  /* If -Wparentheses, warn about a = b = c when a has type bool and b
6318     does not.  */
6319  if (warn_parentheses
6320      && type == boolean_type_node
6321      && TREE_CODE (rhs) == MODIFY_EXPR
6322      && !TREE_NO_WARNING (rhs)
6323      && TREE_TYPE (rhs) != boolean_type_node)
6324    {
6325      warning (OPT_Wparentheses,
6326	       "suggest parentheses around assignment used as truth value");
6327      TREE_NO_WARNING (rhs) = 1;
6328    }
6329
6330  return perform_implicit_conversion (strip_top_quals (type), rhs);
6331}
6332
6333/* Convert RHS to be of type TYPE.
6334   If EXP is nonzero, it is the target of the initialization.
6335   ERRTYPE is a string to use in error messages.
6336
6337   Two major differences between the behavior of
6338   `convert_for_assignment' and `convert_for_initialization'
6339   are that references are bashed in the former, while
6340   copied in the latter, and aggregates are assigned in
6341   the former (operator=) while initialized in the
6342   latter (X(X&)).
6343
6344   If using constructor make sure no conversion operator exists, if one does
6345   exist, an ambiguity exists.
6346
6347   If flags doesn't include LOOKUP_COMPLAIN, don't complain about anything.  */
6348
6349tree
6350convert_for_initialization (tree exp, tree type, tree rhs, int flags,
6351			    const char *errtype, tree fndecl, int parmnum)
6352{
6353  enum tree_code codel = TREE_CODE (type);
6354  tree rhstype;
6355  enum tree_code coder;
6356
6357  /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
6358     Strip such NOP_EXPRs, since RHS is used in non-lvalue context.  */
6359  if (TREE_CODE (rhs) == NOP_EXPR
6360      && TREE_TYPE (rhs) == TREE_TYPE (TREE_OPERAND (rhs, 0))
6361      && codel != REFERENCE_TYPE)
6362    rhs = TREE_OPERAND (rhs, 0);
6363
6364  if (type == error_mark_node
6365      || rhs == error_mark_node
6366      || (TREE_CODE (rhs) == TREE_LIST && TREE_VALUE (rhs) == error_mark_node))
6367    return error_mark_node;
6368
6369  if ((TREE_CODE (TREE_TYPE (rhs)) == ARRAY_TYPE
6370       && TREE_CODE (type) != ARRAY_TYPE
6371       && (TREE_CODE (type) != REFERENCE_TYPE
6372	   || TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE))
6373      || (TREE_CODE (TREE_TYPE (rhs)) == FUNCTION_TYPE
6374	  && (TREE_CODE (type) != REFERENCE_TYPE
6375	      || TREE_CODE (TREE_TYPE (type)) != FUNCTION_TYPE))
6376      || TREE_CODE (TREE_TYPE (rhs)) == METHOD_TYPE)
6377    rhs = decay_conversion (rhs);
6378
6379  rhstype = TREE_TYPE (rhs);
6380  coder = TREE_CODE (rhstype);
6381
6382  if (coder == ERROR_MARK)
6383    return error_mark_node;
6384
6385  /* We accept references to incomplete types, so we can
6386     return here before checking if RHS is of complete type.  */
6387
6388  if (codel == REFERENCE_TYPE)
6389    {
6390      /* This should eventually happen in convert_arguments.  */
6391      int savew = 0, savee = 0;
6392
6393      if (fndecl)
6394	savew = warningcount, savee = errorcount;
6395      rhs = initialize_reference (type, rhs, /*decl=*/NULL_TREE,
6396				  /*cleanup=*/NULL);
6397      if (fndecl)
6398	{
6399	  if (warningcount > savew)
6400	    warning (0, "in passing argument %P of %q+D", parmnum, fndecl);
6401	  else if (errorcount > savee)
6402	    error ("in passing argument %P of %q+D", parmnum, fndecl);
6403	}
6404      return rhs;
6405    }
6406
6407  if (exp != 0)
6408    exp = require_complete_type (exp);
6409  if (exp == error_mark_node)
6410    return error_mark_node;
6411
6412  rhstype = non_reference (rhstype);
6413
6414  type = complete_type (type);
6415
6416  if (IS_AGGR_TYPE (type))
6417    return ocp_convert (type, rhs, CONV_IMPLICIT|CONV_FORCE_TEMP, flags);
6418
6419  return convert_for_assignment (type, rhs, errtype, fndecl, parmnum);
6420}
6421
6422/* If RETVAL is the address of, or a reference to, a local variable or
6423   temporary give an appropriate warning.  */
6424
6425static void
6426maybe_warn_about_returning_address_of_local (tree retval)
6427{
6428  tree valtype = TREE_TYPE (DECL_RESULT (current_function_decl));
6429  tree whats_returned = retval;
6430
6431  for (;;)
6432    {
6433      if (TREE_CODE (whats_returned) == COMPOUND_EXPR)
6434	whats_returned = TREE_OPERAND (whats_returned, 1);
6435      else if (TREE_CODE (whats_returned) == CONVERT_EXPR
6436	       || TREE_CODE (whats_returned) == NON_LVALUE_EXPR
6437	       || TREE_CODE (whats_returned) == NOP_EXPR)
6438	whats_returned = TREE_OPERAND (whats_returned, 0);
6439      else
6440	break;
6441    }
6442
6443  if (TREE_CODE (whats_returned) != ADDR_EXPR)
6444    return;
6445  whats_returned = TREE_OPERAND (whats_returned, 0);
6446
6447  if (TREE_CODE (valtype) == REFERENCE_TYPE)
6448    {
6449      if (TREE_CODE (whats_returned) == AGGR_INIT_EXPR
6450	  || TREE_CODE (whats_returned) == TARGET_EXPR)
6451	{
6452	  warning (0, "returning reference to temporary");
6453	  return;
6454	}
6455      if (TREE_CODE (whats_returned) == VAR_DECL
6456	  && DECL_NAME (whats_returned)
6457	  && TEMP_NAME_P (DECL_NAME (whats_returned)))
6458	{
6459	  warning (0, "reference to non-lvalue returned");
6460	  return;
6461	}
6462    }
6463
6464  while (TREE_CODE (whats_returned) == COMPONENT_REF
6465	 || TREE_CODE (whats_returned) == ARRAY_REF)
6466    whats_returned = TREE_OPERAND (whats_returned, 0);
6467
6468  if (DECL_P (whats_returned)
6469      && DECL_NAME (whats_returned)
6470      && DECL_FUNCTION_SCOPE_P (whats_returned)
6471      && !(TREE_STATIC (whats_returned)
6472	   || TREE_PUBLIC (whats_returned)))
6473    {
6474      if (TREE_CODE (valtype) == REFERENCE_TYPE)
6475	warning (0, "reference to local variable %q+D returned",
6476		 whats_returned);
6477      else
6478	warning (0, "address of local variable %q+D returned",
6479		 whats_returned);
6480      return;
6481    }
6482}
6483
6484/* Check that returning RETVAL from the current function is valid.
6485   Return an expression explicitly showing all conversions required to
6486   change RETVAL into the function return type, and to assign it to
6487   the DECL_RESULT for the function.  Set *NO_WARNING to true if
6488   code reaches end of non-void function warning shouldn't be issued
6489   on this RETURN_EXPR.  */
6490
6491tree
6492check_return_expr (tree retval, bool *no_warning)
6493{
6494  tree result;
6495  /* The type actually returned by the function, after any
6496     promotions.  */
6497  tree valtype;
6498  int fn_returns_value_p;
6499
6500  *no_warning = false;
6501
6502  /* A `volatile' function is one that isn't supposed to return, ever.
6503     (This is a G++ extension, used to get better code for functions
6504     that call the `volatile' function.)  */
6505  if (TREE_THIS_VOLATILE (current_function_decl))
6506    warning (0, "function declared %<noreturn%> has a %<return%> statement");
6507
6508  /* Check for various simple errors.  */
6509  if (DECL_DESTRUCTOR_P (current_function_decl))
6510    {
6511      if (retval)
6512	error ("returning a value from a destructor");
6513      return NULL_TREE;
6514    }
6515  else if (DECL_CONSTRUCTOR_P (current_function_decl))
6516    {
6517      if (in_function_try_handler)
6518	/* If a return statement appears in a handler of the
6519	   function-try-block of a constructor, the program is ill-formed.  */
6520	error ("cannot return from a handler of a function-try-block of a constructor");
6521      else if (retval)
6522	/* You can't return a value from a constructor.  */
6523	error ("returning a value from a constructor");
6524      return NULL_TREE;
6525    }
6526
6527  if (processing_template_decl)
6528    {
6529      current_function_returns_value = 1;
6530      return retval;
6531    }
6532
6533  /* When no explicit return-value is given in a function with a named
6534     return value, the named return value is used.  */
6535  result = DECL_RESULT (current_function_decl);
6536  valtype = TREE_TYPE (result);
6537  gcc_assert (valtype != NULL_TREE);
6538  fn_returns_value_p = !VOID_TYPE_P (valtype);
6539  if (!retval && DECL_NAME (result) && fn_returns_value_p)
6540    retval = result;
6541
6542  /* Check for a return statement with no return value in a function
6543     that's supposed to return a value.  */
6544  if (!retval && fn_returns_value_p)
6545    {
6546      pedwarn ("return-statement with no value, in function returning %qT",
6547	       valtype);
6548      /* Clear this, so finish_function won't say that we reach the
6549	 end of a non-void function (which we don't, we gave a
6550	 return!).  */
6551      current_function_returns_null = 0;
6552      /* And signal caller that TREE_NO_WARNING should be set on the
6553	 RETURN_EXPR to avoid control reaches end of non-void function
6554	 warnings in tree-cfg.c.  */
6555      *no_warning = true;
6556    }
6557  /* Check for a return statement with a value in a function that
6558     isn't supposed to return a value.  */
6559  else if (retval && !fn_returns_value_p)
6560    {
6561      if (VOID_TYPE_P (TREE_TYPE (retval)))
6562	/* You can return a `void' value from a function of `void'
6563	   type.  In that case, we have to evaluate the expression for
6564	   its side-effects.  */
6565	  finish_expr_stmt (retval);
6566      else
6567	pedwarn ("return-statement with a value, in function "
6568		 "returning 'void'");
6569
6570      current_function_returns_null = 1;
6571
6572      /* There's really no value to return, after all.  */
6573      return NULL_TREE;
6574    }
6575  else if (!retval)
6576    /* Remember that this function can sometimes return without a
6577       value.  */
6578    current_function_returns_null = 1;
6579  else
6580    /* Remember that this function did return a value.  */
6581    current_function_returns_value = 1;
6582
6583  /* Check for erroneous operands -- but after giving ourselves a
6584     chance to provide an error about returning a value from a void
6585     function.  */
6586  if (error_operand_p (retval))
6587    {
6588      current_function_return_value = error_mark_node;
6589      return error_mark_node;
6590    }
6591
6592  /* Only operator new(...) throw(), can return NULL [expr.new/13].  */
6593  if ((DECL_OVERLOADED_OPERATOR_P (current_function_decl) == NEW_EXPR
6594       || DECL_OVERLOADED_OPERATOR_P (current_function_decl) == VEC_NEW_EXPR)
6595      && !TYPE_NOTHROW_P (TREE_TYPE (current_function_decl))
6596      && ! flag_check_new
6597      && null_ptr_cst_p (retval))
6598    warning (0, "%<operator new%> must not return NULL unless it is "
6599	     "declared %<throw()%> (or -fcheck-new is in effect)");
6600
6601  /* Effective C++ rule 15.  See also start_function.  */
6602  if (warn_ecpp
6603      && DECL_NAME (current_function_decl) == ansi_assopname(NOP_EXPR))
6604    {
6605      bool warn = true;
6606
6607      /* The function return type must be a reference to the current
6608	class.  */
6609      if (TREE_CODE (valtype) == REFERENCE_TYPE
6610	  && same_type_ignoring_top_level_qualifiers_p
6611	      (TREE_TYPE (valtype), TREE_TYPE (current_class_ref)))
6612	{
6613	  /* Returning '*this' is obviously OK.  */
6614	  if (retval == current_class_ref)
6615	    warn = false;
6616	  /* If we are calling a function whose return type is the same of
6617	     the current class reference, it is ok.  */
6618	  else if (TREE_CODE (retval) == INDIRECT_REF
6619		   && TREE_CODE (TREE_OPERAND (retval, 0)) == CALL_EXPR)
6620	    warn = false;
6621	}
6622
6623      if (warn)
6624	warning (OPT_Weffc__, "%<operator=%> should return a reference to %<*this%>");
6625    }
6626
6627  /* The fabled Named Return Value optimization, as per [class.copy]/15:
6628
6629     [...]      For  a function with a class return type, if the expression
6630     in the return statement is the name of a local  object,  and  the  cv-
6631     unqualified  type  of  the  local  object  is the same as the function
6632     return type, an implementation is permitted to omit creating the  tem-
6633     porary  object  to  hold  the function return value [...]
6634
6635     So, if this is a value-returning function that always returns the same
6636     local variable, remember it.
6637
6638     It might be nice to be more flexible, and choose the first suitable
6639     variable even if the function sometimes returns something else, but
6640     then we run the risk of clobbering the variable we chose if the other
6641     returned expression uses the chosen variable somehow.  And people expect
6642     this restriction, anyway.  (jason 2000-11-19)
6643
6644     See finish_function and finalize_nrv for the rest of this optimization.  */
6645
6646  if (fn_returns_value_p && flag_elide_constructors)
6647    {
6648      if (retval != NULL_TREE
6649	  && (current_function_return_value == NULL_TREE
6650	      || current_function_return_value == retval)
6651	  && TREE_CODE (retval) == VAR_DECL
6652	  && DECL_CONTEXT (retval) == current_function_decl
6653	  && ! TREE_STATIC (retval)
6654	  && ! DECL_ANON_UNION_VAR_P (retval)
6655	  && (DECL_ALIGN (retval)
6656	      >= DECL_ALIGN (DECL_RESULT (current_function_decl)))
6657	  && same_type_p ((TYPE_MAIN_VARIANT
6658			   (TREE_TYPE (retval))),
6659			  (TYPE_MAIN_VARIANT
6660			   (TREE_TYPE (TREE_TYPE (current_function_decl))))))
6661	current_function_return_value = retval;
6662      else
6663	current_function_return_value = error_mark_node;
6664    }
6665
6666  /* We don't need to do any conversions when there's nothing being
6667     returned.  */
6668  if (!retval)
6669    return NULL_TREE;
6670
6671  /* Do any required conversions.  */
6672  if (retval == result || DECL_CONSTRUCTOR_P (current_function_decl))
6673    /* No conversions are required.  */
6674    ;
6675  else
6676    {
6677      /* The type the function is declared to return.  */
6678      tree functype = TREE_TYPE (TREE_TYPE (current_function_decl));
6679
6680      /* The functype's return type will have been set to void, if it
6681	 was an incomplete type.  Just treat this as 'return;' */
6682      if (VOID_TYPE_P (functype))
6683	return error_mark_node;
6684
6685      /* First convert the value to the function's return type, then
6686	 to the type of return value's location to handle the
6687	 case that functype is smaller than the valtype.  */
6688      retval = convert_for_initialization
6689	(NULL_TREE, functype, retval, LOOKUP_NORMAL|LOOKUP_ONLYCONVERTING,
6690	 "return", NULL_TREE, 0);
6691      retval = convert (valtype, retval);
6692
6693      /* If the conversion failed, treat this just like `return;'.  */
6694      if (retval == error_mark_node)
6695	return retval;
6696      /* We can't initialize a register from a AGGR_INIT_EXPR.  */
6697      else if (! current_function_returns_struct
6698	       && TREE_CODE (retval) == TARGET_EXPR
6699	       && TREE_CODE (TREE_OPERAND (retval, 1)) == AGGR_INIT_EXPR)
6700	retval = build2 (COMPOUND_EXPR, TREE_TYPE (retval), retval,
6701			 TREE_OPERAND (retval, 0));
6702      else
6703	maybe_warn_about_returning_address_of_local (retval);
6704    }
6705
6706  /* Actually copy the value returned into the appropriate location.  */
6707  if (retval && retval != result)
6708    retval = build2 (INIT_EXPR, TREE_TYPE (result), result, retval);
6709
6710  return retval;
6711}
6712
6713
6714/* Returns nonzero if the pointer-type FROM can be converted to the
6715   pointer-type TO via a qualification conversion.  If CONSTP is -1,
6716   then we return nonzero if the pointers are similar, and the
6717   cv-qualification signature of FROM is a proper subset of that of TO.
6718
6719   If CONSTP is positive, then all outer pointers have been
6720   const-qualified.  */
6721
6722static int
6723comp_ptr_ttypes_real (tree to, tree from, int constp)
6724{
6725  bool to_more_cv_qualified = false;
6726
6727  for (; ; to = TREE_TYPE (to), from = TREE_TYPE (from))
6728    {
6729      if (TREE_CODE (to) != TREE_CODE (from))
6730	return 0;
6731
6732      if (TREE_CODE (from) == OFFSET_TYPE
6733	  && !same_type_p (TYPE_OFFSET_BASETYPE (from),
6734			   TYPE_OFFSET_BASETYPE (to)))
6735	return 0;
6736
6737      /* Const and volatile mean something different for function types,
6738	 so the usual checks are not appropriate.  */
6739      if (TREE_CODE (to) != FUNCTION_TYPE && TREE_CODE (to) != METHOD_TYPE)
6740	{
6741	  /* In Objective-C++, some types may have been 'volatilized' by
6742	     the compiler for EH; when comparing them here, the volatile
6743	     qualification must be ignored.  */
6744	  bool objc_quals_match = objc_type_quals_match (to, from);
6745
6746	  if (!at_least_as_qualified_p (to, from) && !objc_quals_match)
6747	    return 0;
6748
6749	  if (!at_least_as_qualified_p (from, to) && !objc_quals_match)
6750	    {
6751	      if (constp == 0)
6752		return 0;
6753	      to_more_cv_qualified = true;
6754	    }
6755
6756	  if (constp > 0)
6757	    constp &= TYPE_READONLY (to);
6758	}
6759
6760      if (TREE_CODE (to) != POINTER_TYPE && !TYPE_PTRMEM_P (to))
6761	return ((constp >= 0 || to_more_cv_qualified)
6762		&& same_type_ignoring_top_level_qualifiers_p (to, from));
6763    }
6764}
6765
6766/* When comparing, say, char ** to char const **, this function takes
6767   the 'char *' and 'char const *'.  Do not pass non-pointer/reference
6768   types to this function.  */
6769
6770int
6771comp_ptr_ttypes (tree to, tree from)
6772{
6773  return comp_ptr_ttypes_real (to, from, 1);
6774}
6775
6776/* Returns 1 if to and from are (possibly multi-level) pointers to the same
6777   type or inheritance-related types, regardless of cv-quals.  */
6778
6779int
6780ptr_reasonably_similar (tree to, tree from)
6781{
6782  for (; ; to = TREE_TYPE (to), from = TREE_TYPE (from))
6783    {
6784      /* Any target type is similar enough to void.  */
6785      if (TREE_CODE (to) == VOID_TYPE
6786	  || TREE_CODE (from) == VOID_TYPE)
6787	return 1;
6788
6789      if (TREE_CODE (to) != TREE_CODE (from))
6790	return 0;
6791
6792      if (TREE_CODE (from) == OFFSET_TYPE
6793	  && comptypes (TYPE_OFFSET_BASETYPE (to),
6794			TYPE_OFFSET_BASETYPE (from),
6795			COMPARE_BASE | COMPARE_DERIVED))
6796	continue;
6797
6798      if (TREE_CODE (to) == VECTOR_TYPE
6799	  && vector_types_convertible_p (to, from))
6800	return 1;
6801
6802      if (TREE_CODE (to) == INTEGER_TYPE
6803	  && TYPE_PRECISION (to) == TYPE_PRECISION (from))
6804	return 1;
6805
6806      if (TREE_CODE (to) == FUNCTION_TYPE)
6807	return 1;
6808
6809      if (TREE_CODE (to) != POINTER_TYPE)
6810	return comptypes
6811	  (TYPE_MAIN_VARIANT (to), TYPE_MAIN_VARIANT (from),
6812	   COMPARE_BASE | COMPARE_DERIVED);
6813    }
6814}
6815
6816/* Return true if TO and FROM (both of which are POINTER_TYPEs or
6817   pointer-to-member types) are the same, ignoring cv-qualification at
6818   all levels.  */
6819
6820bool
6821comp_ptr_ttypes_const (tree to, tree from)
6822{
6823  for (; ; to = TREE_TYPE (to), from = TREE_TYPE (from))
6824    {
6825      if (TREE_CODE (to) != TREE_CODE (from))
6826	return false;
6827
6828      if (TREE_CODE (from) == OFFSET_TYPE
6829	  && same_type_p (TYPE_OFFSET_BASETYPE (from),
6830			  TYPE_OFFSET_BASETYPE (to)))
6831	  continue;
6832
6833      if (TREE_CODE (to) != POINTER_TYPE)
6834	return same_type_ignoring_top_level_qualifiers_p (to, from);
6835    }
6836}
6837
6838/* Returns the type qualifiers for this type, including the qualifiers on the
6839   elements for an array type.  */
6840
6841int
6842cp_type_quals (tree type)
6843{
6844  type = strip_array_types (type);
6845  if (type == error_mark_node)
6846    return TYPE_UNQUALIFIED;
6847  return TYPE_QUALS (type);
6848}
6849
6850/* Returns nonzero if the TYPE is const from a C++ perspective: look inside
6851   arrays.  */
6852
6853bool
6854cp_type_readonly (tree type)
6855{
6856  type = strip_array_types (type);
6857  return TYPE_READONLY (type);
6858}
6859
6860/* Returns nonzero if the TYPE contains a mutable member.  */
6861
6862bool
6863cp_has_mutable_p (tree type)
6864{
6865  type = strip_array_types (type);
6866
6867  return CLASS_TYPE_P (type) && CLASSTYPE_HAS_MUTABLE (type);
6868}
6869
6870/* Apply the TYPE_QUALS to the new DECL.  */
6871void
6872cp_apply_type_quals_to_decl (int type_quals, tree decl)
6873{
6874  tree type = TREE_TYPE (decl);
6875
6876  if (type == error_mark_node)
6877    return;
6878
6879  if (TREE_CODE (type) == FUNCTION_TYPE
6880      && type_quals != TYPE_UNQUALIFIED)
6881    {
6882      /* This was an error in C++98 (cv-qualifiers cannot be added to
6883	 a function type), but DR 295 makes the code well-formed by
6884	 dropping the extra qualifiers. */
6885      if (pedantic)
6886	{
6887	  tree bad_type = build_qualified_type (type, type_quals);
6888	  pedwarn ("ignoring %qV qualifiers added to function type %qT",
6889		   bad_type, type);
6890	}
6891
6892      TREE_TYPE (decl) = TYPE_MAIN_VARIANT (type);
6893      return;
6894    }
6895
6896  /* Avoid setting TREE_READONLY incorrectly.  */
6897  if (/* If the object has a constructor, the constructor may modify
6898	 the object.  */
6899      TYPE_NEEDS_CONSTRUCTING (type)
6900      /* If the type isn't complete, we don't know yet if it will need
6901	 constructing.  */
6902      || !COMPLETE_TYPE_P (type)
6903      /* If the type has a mutable component, that component might be
6904	 modified.  */
6905      || TYPE_HAS_MUTABLE_P (type))
6906    type_quals &= ~TYPE_QUAL_CONST;
6907
6908  c_apply_type_quals_to_decl (type_quals, decl);
6909}
6910
6911/* Subroutine of casts_away_constness.  Make T1 and T2 point at
6912   exemplar types such that casting T1 to T2 is casting away constness
6913   if and only if there is no implicit conversion from T1 to T2.  */
6914
6915static void
6916casts_away_constness_r (tree *t1, tree *t2)
6917{
6918  int quals1;
6919  int quals2;
6920
6921  /* [expr.const.cast]
6922
6923     For multi-level pointer to members and multi-level mixed pointers
6924     and pointers to members (conv.qual), the "member" aspect of a
6925     pointer to member level is ignored when determining if a const
6926     cv-qualifier has been cast away.  */
6927  /* [expr.const.cast]
6928
6929     For  two  pointer types:
6930
6931	    X1 is T1cv1,1 * ... cv1,N *   where T1 is not a pointer type
6932	    X2 is T2cv2,1 * ... cv2,M *   where T2 is not a pointer type
6933	    K is min(N,M)
6934
6935     casting from X1 to X2 casts away constness if, for a non-pointer
6936     type T there does not exist an implicit conversion (clause
6937     _conv_) from:
6938
6939	    Tcv1,(N-K+1) * cv1,(N-K+2) * ... cv1,N *
6940
6941     to
6942
6943	    Tcv2,(M-K+1) * cv2,(M-K+2) * ... cv2,M *.  */
6944  if ((!TYPE_PTR_P (*t1) && !TYPE_PTRMEM_P (*t1))
6945      || (!TYPE_PTR_P (*t2) && !TYPE_PTRMEM_P (*t2)))
6946    {
6947      *t1 = cp_build_qualified_type (void_type_node,
6948				     cp_type_quals (*t1));
6949      *t2 = cp_build_qualified_type (void_type_node,
6950				     cp_type_quals (*t2));
6951      return;
6952    }
6953
6954  quals1 = cp_type_quals (*t1);
6955  quals2 = cp_type_quals (*t2);
6956
6957  if (TYPE_PTRMEM_P (*t1))
6958    *t1 = TYPE_PTRMEM_POINTED_TO_TYPE (*t1);
6959  else
6960    *t1 = TREE_TYPE (*t1);
6961  if (TYPE_PTRMEM_P (*t2))
6962    *t2 = TYPE_PTRMEM_POINTED_TO_TYPE (*t2);
6963  else
6964    *t2 = TREE_TYPE (*t2);
6965
6966  casts_away_constness_r (t1, t2);
6967  *t1 = build_pointer_type (*t1);
6968  *t2 = build_pointer_type (*t2);
6969  *t1 = cp_build_qualified_type (*t1, quals1);
6970  *t2 = cp_build_qualified_type (*t2, quals2);
6971}
6972
6973/* Returns nonzero if casting from TYPE1 to TYPE2 casts away
6974   constness.  */
6975
6976static bool
6977casts_away_constness (tree t1, tree t2)
6978{
6979  if (TREE_CODE (t2) == REFERENCE_TYPE)
6980    {
6981      /* [expr.const.cast]
6982
6983	 Casting from an lvalue of type T1 to an lvalue of type T2
6984	 using a reference cast casts away constness if a cast from an
6985	 rvalue of type "pointer to T1" to the type "pointer to T2"
6986	 casts away constness.  */
6987      t1 = (TREE_CODE (t1) == REFERENCE_TYPE ? TREE_TYPE (t1) : t1);
6988      return casts_away_constness (build_pointer_type (t1),
6989				   build_pointer_type (TREE_TYPE (t2)));
6990    }
6991
6992  if (TYPE_PTRMEM_P (t1) && TYPE_PTRMEM_P (t2))
6993    /* [expr.const.cast]
6994
6995       Casting from an rvalue of type "pointer to data member of X
6996       of type T1" to the type "pointer to data member of Y of type
6997       T2" casts away constness if a cast from an rvalue of type
6998       "pointer to T1" to the type "pointer to T2" casts away
6999       constness.  */
7000    return casts_away_constness
7001      (build_pointer_type (TYPE_PTRMEM_POINTED_TO_TYPE (t1)),
7002       build_pointer_type (TYPE_PTRMEM_POINTED_TO_TYPE (t2)));
7003
7004  /* Casting away constness is only something that makes sense for
7005     pointer or reference types.  */
7006  if (TREE_CODE (t1) != POINTER_TYPE
7007      || TREE_CODE (t2) != POINTER_TYPE)
7008    return false;
7009
7010  /* Top-level qualifiers don't matter.  */
7011  t1 = TYPE_MAIN_VARIANT (t1);
7012  t2 = TYPE_MAIN_VARIANT (t2);
7013  casts_away_constness_r (&t1, &t2);
7014  if (!can_convert (t2, t1))
7015    return true;
7016
7017  return false;
7018}
7019
7020/* If T is a REFERENCE_TYPE return the type to which T refers.
7021   Otherwise, return T itself.  */
7022
7023tree
7024non_reference (tree t)
7025{
7026  if (TREE_CODE (t) == REFERENCE_TYPE)
7027    t = TREE_TYPE (t);
7028  return t;
7029}
7030
7031
7032/* Return nonzero if REF is an lvalue valid for this language;
7033   otherwise, print an error message and return zero.  USE says
7034   how the lvalue is being used and so selects the error message.  */
7035
7036int
7037lvalue_or_else (tree ref, enum lvalue_use use)
7038{
7039  int win = lvalue_p (ref);
7040
7041  if (!win)
7042    lvalue_error (use);
7043
7044  return win;
7045}
7046