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