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