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