OSDN Git Service

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