OSDN Git Service

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