OSDN Git Service

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