OSDN Git Service

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