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