OSDN Git Service

3d8e17f67fef684911dc757066a3e74fc4a46ae7
[pf3gnuchains/gcc-fork.git] / gcc / cp / call.c
1 /* Functions related to invoking methods and overloaded functions.
2    Copyright (C) 1987, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 
3    1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
4    Contributed by Michael Tiemann (tiemann@cygnus.com) and
5    modified by Brendan Kehoe (brendan@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 2, 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 COPYING.  If not, write to
21 the Free Software Foundation, 59 Temple Place - Suite 330,
22 Boston, MA 02111-1307, USA.  */
23
24
25 /* High-level class interface.  */
26
27 #include "config.h"
28 #include "system.h"
29 #include "coretypes.h"
30 #include "tm.h"
31 #include "tree.h"
32 #include "cp-tree.h"
33 #include "output.h"
34 #include "flags.h"
35 #include "rtl.h"
36 #include "toplev.h"
37 #include "expr.h"
38 #include "diagnostic.h"
39
40 extern int inhibit_warnings;
41
42 static tree build_field_call (tree, tree, tree);
43 static struct z_candidate * tourney (struct z_candidate *);
44 static int equal_functions (tree, tree);
45 static int joust (struct z_candidate *, struct z_candidate *, bool);
46 static int compare_ics (tree, tree);
47 static tree build_over_call (struct z_candidate *, int);
48 static tree build_java_interface_fn_ref (tree, tree);
49 #define convert_like(CONV, EXPR) \
50   convert_like_real ((CONV), (EXPR), NULL_TREE, 0, 0)
51 #define convert_like_with_context(CONV, EXPR, FN, ARGNO) \
52   convert_like_real ((CONV), (EXPR), (FN), (ARGNO), 0)
53 static tree convert_like_real (tree, tree, tree, int, int);
54 static void op_error (enum tree_code, enum tree_code, tree, tree,
55                             tree, const char *);
56 static tree build_object_call (tree, tree);
57 static tree resolve_args (tree);
58 static struct z_candidate *build_user_type_conversion_1 (tree, tree, int);
59 static void print_z_candidates (struct z_candidate *);
60 static tree build_this (tree);
61 static struct z_candidate *splice_viable (struct z_candidate *, bool, bool *);
62 static bool any_strictly_viable (struct z_candidate *);
63 static struct z_candidate *add_template_candidate
64         (struct z_candidate **, tree, tree, tree, tree, tree, 
65          tree, tree, int, unification_kind_t);
66 static struct z_candidate *add_template_candidate_real
67         (struct z_candidate **, tree, tree, tree, tree, tree, 
68            tree, tree, int, tree, unification_kind_t);
69 static struct z_candidate *add_template_conv_candidate 
70         (struct z_candidate **, tree, tree, tree, tree, tree, tree);
71 static void add_builtin_candidates
72         (struct z_candidate **, enum tree_code, enum tree_code,
73                tree, tree *, int);
74 static void add_builtin_candidate
75         (struct z_candidate **, enum tree_code, enum tree_code,
76                tree, tree, tree, tree *, tree *, int);
77 static bool is_complete (tree);
78 static void build_builtin_candidate 
79         (struct z_candidate **, tree, tree, tree, tree *, tree *,
80                int);
81 static struct z_candidate *add_conv_candidate 
82         (struct z_candidate **, tree, tree, tree, tree, tree);
83 static struct z_candidate *add_function_candidate 
84         (struct z_candidate **, tree, tree, tree, tree, tree, int);
85 static tree implicit_conversion (tree, tree, tree, int);
86 static tree standard_conversion (tree, tree, tree);
87 static tree reference_binding (tree, tree, tree, int);
88 static tree non_reference (tree);
89 static tree build_conv (enum tree_code, tree, tree);
90 static bool is_subseq (tree, tree);
91 static tree maybe_handle_ref_bind (tree *);
92 static void maybe_handle_implicit_object (tree *);
93 static struct z_candidate *add_candidate 
94         (struct z_candidate **, tree, tree, tree, tree, tree, int);
95 static tree source_type (tree);
96 static void add_warning (struct z_candidate *, struct z_candidate *);
97 static bool reference_related_p (tree, tree);
98 static bool reference_compatible_p (tree, tree);
99 static tree convert_class_to_reference (tree, tree, tree);
100 static tree direct_reference_binding (tree, tree);
101 static bool promoted_arithmetic_type_p (tree);
102 static tree conditional_conversion (tree, tree);
103 static char *name_as_c_string (tree, tree, bool *);
104 static tree call_builtin_trap (void);
105 static tree prep_operand (tree);
106 static void add_candidates (tree, tree, tree, bool, tree, tree,
107                             int, struct z_candidate **);
108 static tree merge_conversion_sequences (tree, tree);
109
110 tree
111 build_vfield_ref (tree datum, tree type)
112 {
113   if (datum == error_mark_node)
114     return error_mark_node;
115
116   if (TREE_CODE (TREE_TYPE (datum)) == REFERENCE_TYPE)
117     datum = convert_from_reference (datum);
118
119   if (TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (type)
120       && !same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (datum), type))
121     datum = convert_to_base (datum, type, /*check_access=*/false);
122
123   return build (COMPONENT_REF, TREE_TYPE (TYPE_VFIELD (type)),
124                 datum, TYPE_VFIELD (type));
125 }
126
127 /* Build a call to a member of an object.  I.e., one that overloads
128    operator ()(), or is a pointer-to-function or pointer-to-method.  */
129
130 static tree
131 build_field_call (tree instance_ptr, tree decl, tree parms)
132 {
133   tree instance;
134
135   if (decl == error_mark_node || decl == NULL_TREE)
136     return decl;
137
138   if (TREE_CODE (decl) == FIELD_DECL || TREE_CODE (decl) == VAR_DECL)
139     {
140       /* If it's a field, try overloading operator (),
141          or calling if the field is a pointer-to-function.  */
142       instance = build_indirect_ref (instance_ptr, NULL);
143       instance = build_class_member_access_expr (instance, decl, 
144                                                  /*access_path=*/NULL_TREE,
145                                                  /*preserve_reference=*/false);
146
147       if (instance == error_mark_node)
148         return error_mark_node;
149
150       if (IS_AGGR_TYPE (TREE_TYPE (instance)))
151         return build_new_op (CALL_EXPR, LOOKUP_NORMAL,
152                              instance, parms, NULL_TREE);
153       else if (TREE_CODE (TREE_TYPE (instance)) == FUNCTION_TYPE
154                || (TREE_CODE (TREE_TYPE (instance)) == POINTER_TYPE
155                    && (TREE_CODE (TREE_TYPE (TREE_TYPE (instance)))
156                        == FUNCTION_TYPE)))
157         return build_function_call (instance, parms);
158     }
159
160   return NULL_TREE;
161 }
162
163 /* Returns nonzero iff the destructor name specified in NAME
164    (a BIT_NOT_EXPR) matches BASETYPE.  The operand of NAME can take many
165    forms...  */
166
167 bool
168 check_dtor_name (tree basetype, tree name)
169 {
170   name = TREE_OPERAND (name, 0);
171
172   /* Just accept something we've already complained about.  */
173   if (name == error_mark_node)
174     return true;
175
176   if (TREE_CODE (name) == TYPE_DECL)
177     name = TREE_TYPE (name);
178   else if (TYPE_P (name))
179     /* OK */;
180   else if (TREE_CODE (name) == IDENTIFIER_NODE)
181     {
182       if ((IS_AGGR_TYPE (basetype) && name == constructor_name (basetype))
183           || (TREE_CODE (basetype) == ENUMERAL_TYPE
184               && name == TYPE_IDENTIFIER (basetype)))
185         name = basetype;
186       else
187         name = get_type_value (name);
188     }
189   /* In the case of:
190       
191        template <class T> struct S { ~S(); };
192        int i;
193        i.~S();
194
195      NAME will be a class template.  */
196   else if (DECL_CLASS_TEMPLATE_P (name))
197     return false;
198   else
199     abort ();
200
201   if (name && TYPE_MAIN_VARIANT (basetype) == TYPE_MAIN_VARIANT (name))
202     return true;
203   return false;
204 }
205
206 /* Build a method call of the form `EXP->SCOPES::NAME (PARMS)'.
207    This is how virtual function calls are avoided.  */
208
209 tree
210 build_scoped_method_call (tree exp, tree basetype, tree name, tree parms)
211 {
212   /* Because this syntactic form does not allow
213      a pointer to a base class to be `stolen',
214      we need not protect the derived->base conversion
215      that happens here.
216      
217      @@ But we do have to check access privileges later.  */
218   tree binfo, decl;
219   tree type = TREE_TYPE (exp);
220
221   if (type == error_mark_node
222       || basetype == error_mark_node)
223     return error_mark_node;
224
225   if (processing_template_decl)
226     {
227       name = build_min_nt (SCOPE_REF, basetype, name);
228       return build_min_nt (METHOD_CALL_EXPR, name, exp, parms, NULL_TREE);
229     }
230
231   if (TREE_CODE (type) == REFERENCE_TYPE)
232     type = TREE_TYPE (type);
233
234   if (TREE_CODE (basetype) == TREE_VEC)
235     {
236       binfo = basetype;
237       basetype = BINFO_TYPE (binfo);
238     }
239   else
240     binfo = NULL_TREE;
241
242   /* Check the destructor call syntax.  */
243   if (TREE_CODE (name) == BIT_NOT_EXPR)
244     {
245       /* We can get here if someone writes their destructor call like
246          `obj.NS::~T()'; this isn't really a scoped method call, so hand
247          it off.  */
248       if (TREE_CODE (basetype) == NAMESPACE_DECL)
249         return build_method_call (exp, name, parms, NULL_TREE, LOOKUP_NORMAL);
250
251       if (! check_dtor_name (basetype, name))
252         error ("qualified type `%T' does not match destructor name `~%T'",
253                   basetype, TREE_OPERAND (name, 0));
254
255       /* Destructors can be "called" for simple types; see 5.2.4 and 12.4 Note
256          that explicit ~int is caught in the parser; this deals with typedefs
257          and template parms.  */
258       if (! IS_AGGR_TYPE (basetype))
259         {
260           if (TYPE_MAIN_VARIANT (type) != TYPE_MAIN_VARIANT (basetype))
261             error ("type of `%E' does not match destructor type `%T' (type was `%T')",
262                       exp, basetype, type);
263
264           return cp_convert (void_type_node, exp);
265         }
266     }
267
268   if (TREE_CODE (basetype) == NAMESPACE_DECL)
269     {
270       error ("`%D' is a namespace", basetype);
271       return error_mark_node;
272     }
273   if (! is_aggr_type (basetype, 1))
274     return error_mark_node;
275
276   if (! IS_AGGR_TYPE (type))
277     {
278       error ("base object `%E' of scoped method call is of non-aggregate type `%T'",
279                 exp, type);
280       return error_mark_node;
281     }
282
283   decl = build_scoped_ref (exp, basetype, &binfo);
284
285   if (binfo)
286     {
287       /* Call to a destructor.  */
288       if (TREE_CODE (name) == BIT_NOT_EXPR)
289         {
290           if (! TYPE_HAS_DESTRUCTOR (TREE_TYPE (decl)))
291             return cp_convert (void_type_node, exp);
292           
293           return build_delete (TREE_TYPE (decl), decl, 
294                                sfk_complete_destructor,
295                                LOOKUP_NORMAL|LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR,
296                                0);
297         }
298
299       /* Call to a method.  */
300       return build_method_call (decl, name, parms, binfo,
301                                 LOOKUP_NORMAL|LOOKUP_NONVIRTUAL);
302     }
303   return error_mark_node;
304 }
305
306 /* We want the address of a function or method.  We avoid creating a
307    pointer-to-member function.  */
308
309 tree
310 build_addr_func (tree function)
311 {
312   tree type = TREE_TYPE (function);
313
314   /* We have to do these by hand to avoid real pointer to member
315      functions.  */
316   if (TREE_CODE (type) == METHOD_TYPE)
317     {
318       tree addr;
319
320       type = build_pointer_type (type);
321
322       if (!cxx_mark_addressable (function))
323         return error_mark_node;
324
325       addr = build1 (ADDR_EXPR, type, function);
326
327       /* Address of a static or external variable or function counts
328          as a constant */
329       if (staticp (function))
330         TREE_CONSTANT (addr) = 1;
331
332       function = addr;
333     }
334   else
335     function = default_conversion (function);
336
337   return function;
338 }
339
340 /* Build a CALL_EXPR, we can handle FUNCTION_TYPEs, METHOD_TYPEs, or
341    POINTER_TYPE to those.  Note, pointer to member function types
342    (TYPE_PTRMEMFUNC_P) must be handled by our callers.  */
343
344 tree
345 build_call (tree function, tree parms)
346 {
347   int is_constructor = 0;
348   int nothrow;
349   tree tmp;
350   tree decl;
351   tree result_type;
352   tree fntype;
353
354   function = build_addr_func (function);
355
356   if (TYPE_PTRMEMFUNC_P (TREE_TYPE (function)))
357     {
358       sorry ("unable to call pointer to member function here");
359       return error_mark_node;
360     }
361
362   fntype = TREE_TYPE (TREE_TYPE (function));
363   result_type = TREE_TYPE (fntype);
364
365   if (TREE_CODE (function) == ADDR_EXPR
366       && TREE_CODE (TREE_OPERAND (function, 0)) == FUNCTION_DECL)
367     decl = TREE_OPERAND (function, 0);
368   else
369     decl = NULL_TREE;
370
371   /* We check both the decl and the type; a function may be known not to
372      throw without being declared throw().  */
373   nothrow = ((decl && TREE_NOTHROW (decl))
374              || TYPE_NOTHROW_P (TREE_TYPE (TREE_TYPE (function))));
375
376   if (decl && TREE_THIS_VOLATILE (decl) && cfun)
377     current_function_returns_abnormally = 1;
378
379   if (decl && TREE_DEPRECATED (decl))
380     warn_deprecated_use (decl);
381   require_complete_eh_spec_types (fntype, decl);
382
383   if (decl && DECL_CONSTRUCTOR_P (decl))
384     is_constructor = 1;
385
386   if (decl && ! TREE_USED (decl))
387     {
388       /* We invoke build_call directly for several library functions.
389          These may have been declared normally if we're building libgcc,
390          so we can't just check DECL_ARTIFICIAL.  */
391       if (DECL_ARTIFICIAL (decl)
392           || !strncmp (IDENTIFIER_POINTER (DECL_NAME (decl)), "__", 2))
393         mark_used (decl);
394       else
395         abort ();
396     }
397
398   /* Don't pass empty class objects by value.  This is useful
399      for tags in STL, which are used to control overload resolution.
400      We don't need to handle other cases of copying empty classes.  */
401   if (! decl || ! DECL_BUILT_IN (decl))
402     for (tmp = parms; tmp; tmp = TREE_CHAIN (tmp))
403       if (is_empty_class (TREE_TYPE (TREE_VALUE (tmp)))
404           && ! TREE_ADDRESSABLE (TREE_TYPE (TREE_VALUE (tmp))))
405         {
406           tree t = build (EMPTY_CLASS_EXPR, TREE_TYPE (TREE_VALUE (tmp)));
407           TREE_VALUE (tmp) = build (COMPOUND_EXPR, TREE_TYPE (t),
408                                     TREE_VALUE (tmp), t);
409         }
410
411   function = build_nt (CALL_EXPR, function, parms, NULL_TREE);
412   TREE_HAS_CONSTRUCTOR (function) = is_constructor;
413   TREE_TYPE (function) = result_type;
414   TREE_SIDE_EFFECTS (function) = 1;
415   TREE_NOTHROW (function) = nothrow;
416   
417   return function;
418 }
419
420 /* Build something of the form ptr->method (args)
421    or object.method (args).  This can also build
422    calls to constructors, and find friends.
423
424    Member functions always take their class variable
425    as a pointer.
426
427    INSTANCE is a class instance.
428
429    NAME is the name of the method desired, usually an IDENTIFIER_NODE.
430
431    PARMS help to figure out what that NAME really refers to.
432
433    BASETYPE_PATH, if non-NULL, contains a chain from the type of INSTANCE
434    down to the real instance type to use for access checking.  We need this
435    information to get protected accesses correct.  This parameter is used
436    by build_member_call.
437
438    FLAGS is the logical disjunction of zero or more LOOKUP_
439    flags.  See cp-tree.h for more info.
440
441    If this is all OK, calls build_function_call with the resolved
442    member function.
443
444    This function must also handle being called to perform
445    initialization, promotion/coercion of arguments, and
446    instantiation of default parameters.
447
448    Note that NAME may refer to an instance variable name.  If
449    `operator()()' is defined for the type of that field, then we return
450    that result.  */
451
452 #ifdef GATHER_STATISTICS
453 extern int n_build_method_call;
454 #endif
455
456 tree
457 build_method_call (tree instance, tree name, tree parms,
458                    tree basetype_path, int flags)
459 {
460   tree fn;
461   tree object_type;
462   tree template_args = NULL_TREE;
463   bool has_template_args = false;
464
465 #ifdef GATHER_STATISTICS
466   n_build_method_call++;
467 #endif
468
469   if (instance == error_mark_node
470       || name == error_mark_node
471       || parms == error_mark_node
472       || (instance && TREE_TYPE (instance) == error_mark_node))
473     return error_mark_node;
474
475   if (processing_template_decl)
476     return build_min_nt (METHOD_CALL_EXPR, name, instance, parms, NULL_TREE);
477
478   if (TREE_CODE (instance) == OFFSET_REF)
479     instance = resolve_offset_ref (instance);
480   if (TREE_CODE (TREE_TYPE (instance)) == REFERENCE_TYPE)
481     instance = convert_from_reference (instance);
482   object_type = TREE_TYPE (instance);
483
484   if (TREE_CODE (name) == BIT_NOT_EXPR)
485     {
486       tree instance_ptr;
487
488       if (parms)
489         error ("destructors take no parameters");
490
491       if (! check_dtor_name (object_type, name))
492         error
493           ("destructor name `~%T' does not match type `%T' of expression",
494            TREE_OPERAND (name, 0), object_type);
495
496       if (! TYPE_HAS_DESTRUCTOR (complete_type (object_type)))
497         return cp_convert (void_type_node, instance);
498       instance = default_conversion (instance);
499       instance_ptr = build_unary_op (ADDR_EXPR, instance, 0);
500       return build_delete (build_pointer_type (object_type),
501                            instance_ptr, sfk_complete_destructor,
502                            LOOKUP_NORMAL|LOOKUP_DESTRUCTOR, 0);
503     }
504
505   if (!CLASS_TYPE_P (object_type))
506     {
507       if ((flags & LOOKUP_COMPLAIN) 
508           && TREE_TYPE (instance) != error_mark_node)
509         error ("request for member `%D' in `%E', which is of non-aggregate type `%T'",
510                name, instance, object_type);
511       return error_mark_node;
512     }
513
514   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
515     {
516       template_args = TREE_OPERAND (name, 1);
517       has_template_args = true;
518       name = TREE_OPERAND (name, 0);
519     }
520   if (TREE_CODE (name) == OVERLOAD)
521     name = DECL_NAME (get_first_fn (name));
522   else if (DECL_P (name))
523     name = DECL_NAME (name);
524   if (has_template_args)
525     fn = lookup_fnfields (object_type, name, /*protect=*/2);
526   else
527     fn = lookup_member (object_type, name, /*protect=*/2, /*want_type=*/false);
528   
529   if (fn && TREE_CODE (fn) == TREE_LIST && !BASELINK_P (fn))
530     {
531       error ("request for member `%D' is ambiguous", name);
532       print_candidates (fn);
533       return error_mark_node;
534     }
535
536   /* If the name could not be found, issue an error.  */
537   if (!fn)
538     {
539       unqualified_name_lookup_error (name);
540       return error_mark_node;
541     }
542
543   if (BASELINK_P (fn) && has_template_args)
544     BASELINK_FUNCTIONS (fn)
545       = build_nt (TEMPLATE_ID_EXPR,
546                   BASELINK_FUNCTIONS (fn),
547                   template_args);
548   if (BASELINK_P (fn) && basetype_path)
549     BASELINK_ACCESS_BINFO (fn) = basetype_path;
550
551   return build_new_method_call (instance, fn, parms, 
552                                 /*conversion_path=*/NULL_TREE, flags);
553 }
554
555 /* New overloading code.  */
556
557 struct z_candidate GTY(()) {
558   /* The FUNCTION_DECL that will be called if this candidate is
559      selected by overload resolution.  */
560   tree fn;
561   /* The arguments to use when calling this function.  */
562   tree args;
563   /* The implicit conversion sequences for each of the arguments to
564      FN.  */
565   tree convs;
566   /* If FN is a user-defined conversion, the standard conversion
567      sequence from the type returned by FN to the desired destination
568      type.  */
569   tree second_conv;
570   int viable;
571   /* If FN is a member function, the binfo indicating the path used to
572      qualify the name of FN at the call site.  This path is used to
573      determine whether or not FN is accessible if it is selected by
574      overload resolution.  The DECL_CONTEXT of FN will always be a
575      (possibly improper) base of this binfo.  */
576   tree access_path;
577   /* If FN is a non-static member function, the binfo indicating the
578      subobject to which the `this' pointer should be converted if FN
579      is selected by overload resolution.  The type pointed to the by
580      the `this' pointer must correspond to the most derived class
581      indicated by the CONVERSION_PATH.  */
582   tree conversion_path;
583   tree template;
584   tree warnings;
585   struct z_candidate *next;
586 };
587
588 #define IDENTITY_RANK 0
589 #define EXACT_RANK 1
590 #define PROMO_RANK 2
591 #define STD_RANK 3
592 #define PBOOL_RANK 4
593 #define USER_RANK 5
594 #define ELLIPSIS_RANK 6
595 #define BAD_RANK 7
596
597 #define ICS_RANK(NODE)                          \
598   (ICS_BAD_FLAG (NODE) ? BAD_RANK               \
599    : ICS_ELLIPSIS_FLAG (NODE) ? ELLIPSIS_RANK   \
600    : ICS_USER_FLAG (NODE) ? USER_RANK           \
601    : ICS_STD_RANK (NODE))
602
603 #define ICS_STD_RANK(NODE) TREE_COMPLEXITY (NODE)
604
605 #define ICS_USER_FLAG(NODE) TREE_LANG_FLAG_0 (NODE)
606 #define ICS_ELLIPSIS_FLAG(NODE) TREE_LANG_FLAG_1 (NODE)
607 #define ICS_THIS_FLAG(NODE) TREE_LANG_FLAG_2 (NODE)
608 #define ICS_BAD_FLAG(NODE) TREE_LANG_FLAG_3 (NODE)
609
610 /* In a REF_BIND or a BASE_CONV, this indicates that a temporary
611    should be created to hold the result of the conversion.  */
612 #define NEED_TEMPORARY_P(NODE) TREE_LANG_FLAG_4 (NODE)
613
614 #define USER_CONV_CAND(NODE) WRAPPER_ZC (TREE_OPERAND (NODE, 1))
615 #define USER_CONV_FN(NODE) (USER_CONV_CAND (NODE)->fn)
616
617 bool
618 null_ptr_cst_p (tree t)
619 {
620   /* [conv.ptr]
621
622      A null pointer constant is an integral constant expression
623      (_expr.const_) rvalue of integer type that evaluates to zero.  */
624   if (t == null_node
625       || (CP_INTEGRAL_TYPE_P (TREE_TYPE (t)) && integer_zerop (t)))
626     return true;
627   return false;
628 }
629
630
631 /* Returns nonzero if PARMLIST consists of only default parms and/or
632    ellipsis.  */
633
634 bool
635 sufficient_parms_p (tree parmlist)
636 {
637   for (; parmlist && parmlist != void_list_node;
638        parmlist = TREE_CHAIN (parmlist))
639     if (!TREE_PURPOSE (parmlist))
640       return false;
641   return true;
642 }
643
644 static tree
645 build_conv (enum tree_code code, tree type, tree from)
646 {
647   tree t;
648   int rank = ICS_STD_RANK (from);
649
650   /* We can't use buildl1 here because CODE could be USER_CONV, which
651      takes two arguments.  In that case, the caller is responsible for
652      filling in the second argument.  */
653   t = make_node (code);
654   TREE_TYPE (t) = type;
655   TREE_OPERAND (t, 0) = from;
656
657   switch (code)
658     {
659     case PTR_CONV:
660     case PMEM_CONV:
661     case BASE_CONV:
662     case STD_CONV:
663       if (rank < STD_RANK)
664         rank = STD_RANK;
665       break;
666
667     case QUAL_CONV:
668       if (rank < EXACT_RANK)
669         rank = EXACT_RANK;
670
671     default:
672       break;
673     }
674   ICS_STD_RANK (t) = rank;
675   ICS_USER_FLAG (t) = (code == USER_CONV || ICS_USER_FLAG (from));
676   ICS_BAD_FLAG (t) = ICS_BAD_FLAG (from);
677   return t;
678 }
679
680 /* If T is a REFERENCE_TYPE return the type to which T refers.
681    Otherwise, return T itself.  */
682
683 static tree
684 non_reference (tree t)
685 {
686   if (TREE_CODE (t) == REFERENCE_TYPE)
687     t = TREE_TYPE (t);
688   return t;
689 }
690
691 tree
692 strip_top_quals (tree t)
693 {
694   if (TREE_CODE (t) == ARRAY_TYPE)
695     return t;
696   return TYPE_MAIN_VARIANT (t);
697 }
698
699 /* Returns the standard conversion path (see [conv]) from type FROM to type
700    TO, if any.  For proper handling of null pointer constants, you must
701    also pass the expression EXPR to convert from.  */
702
703 static tree
704 standard_conversion (tree to, tree from, tree expr)
705 {
706   enum tree_code fcode, tcode;
707   tree conv;
708   bool fromref = false;
709
710   if (TREE_CODE (to) == REFERENCE_TYPE)
711     to = TREE_TYPE (to);
712   if (TREE_CODE (from) == REFERENCE_TYPE)
713     {
714       fromref = true;
715       from = TREE_TYPE (from);
716     }
717   to = strip_top_quals (to);
718   from = strip_top_quals (from);
719
720   if ((TYPE_PTRFN_P (to) || TYPE_PTRMEMFUNC_P (to))
721       && expr && type_unknown_p (expr))
722     {
723       expr = instantiate_type (to, expr, tf_none);
724       if (expr == error_mark_node)
725         return NULL_TREE;
726       from = TREE_TYPE (expr);
727     }
728
729   fcode = TREE_CODE (from);
730   tcode = TREE_CODE (to);
731
732   conv = build1 (IDENTITY_CONV, from, expr);
733
734   if (fcode == FUNCTION_TYPE)
735     {
736       from = build_pointer_type (from);
737       fcode = TREE_CODE (from);
738       conv = build_conv (LVALUE_CONV, from, conv);
739     }
740   else if (fcode == ARRAY_TYPE)
741     {
742       from = build_pointer_type (TREE_TYPE (from));
743       fcode = TREE_CODE (from);
744       conv = build_conv (LVALUE_CONV, from, conv);
745     }
746   else if (fromref || (expr && lvalue_p (expr)))
747     conv = build_conv (RVALUE_CONV, from, conv);
748
749    /* Allow conversion between `__complex__' data types  */
750   if (tcode == COMPLEX_TYPE && fcode == COMPLEX_TYPE)
751     {
752       /* The standard conversion sequence to convert FROM to TO is
753          the standard conversion sequence to perform componentwise
754          conversion.  */
755       tree part_conv = standard_conversion
756         (TREE_TYPE (to), TREE_TYPE (from), NULL_TREE);
757       
758       if (part_conv)
759         {
760           conv = build_conv (TREE_CODE (part_conv), to, conv);
761           ICS_STD_RANK (conv) = ICS_STD_RANK (part_conv);
762         }
763       else
764         conv = NULL_TREE;
765
766       return conv;
767     }
768
769   if (same_type_p (from, to))
770     return conv;
771
772   if ((tcode == POINTER_TYPE || TYPE_PTRMEMFUNC_P (to))
773       && expr && null_ptr_cst_p (expr))
774     {
775       conv = build_conv (STD_CONV, to, conv);
776     }
777   else if ((tcode == INTEGER_TYPE && fcode == POINTER_TYPE)
778            || (tcode == POINTER_TYPE && fcode == INTEGER_TYPE))
779     {
780       /* For backwards brain damage compatibility, allow interconversion of
781          pointers and integers with a pedwarn.  */
782       conv = build_conv (STD_CONV, to, conv);
783       ICS_BAD_FLAG (conv) = 1;
784     }
785   else if (tcode == ENUMERAL_TYPE && fcode == INTEGER_TYPE
786            && TYPE_PRECISION (to) == TYPE_PRECISION (from))
787     {
788       /* For backwards brain damage compatibility, allow interconversion of
789          enums and integers with a pedwarn.  */
790       conv = build_conv (STD_CONV, to, conv);
791       ICS_BAD_FLAG (conv) = 1;
792     }
793   else if (tcode == POINTER_TYPE && fcode == POINTER_TYPE)
794     {
795       enum tree_code ufcode = TREE_CODE (TREE_TYPE (from));
796       enum tree_code utcode = TREE_CODE (TREE_TYPE (to));
797
798       if (same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (from),
799                                                      TREE_TYPE (to)))
800         ;
801       else if (utcode == VOID_TYPE && ufcode != OFFSET_TYPE
802                && ufcode != FUNCTION_TYPE)
803         {
804           from = build_pointer_type
805             (cp_build_qualified_type (void_type_node, 
806                                       cp_type_quals (TREE_TYPE (from))));
807           conv = build_conv (PTR_CONV, from, conv);
808         }
809       else if (ufcode == OFFSET_TYPE && utcode == OFFSET_TYPE)
810         {
811           tree fbase = TYPE_OFFSET_BASETYPE (TREE_TYPE (from));
812           tree tbase = TYPE_OFFSET_BASETYPE (TREE_TYPE (to));
813
814           if (DERIVED_FROM_P (fbase, tbase)
815               && (same_type_ignoring_top_level_qualifiers_p
816                   (TREE_TYPE (TREE_TYPE (from)),
817                    TREE_TYPE (TREE_TYPE (to)))))
818             {
819               from = build_ptrmem_type (tbase, TREE_TYPE (TREE_TYPE (from)));
820               conv = build_conv (PMEM_CONV, from, conv);
821             }
822         }
823       else if (IS_AGGR_TYPE (TREE_TYPE (from))
824                && IS_AGGR_TYPE (TREE_TYPE (to)))
825         {
826           if (DERIVED_FROM_P (TREE_TYPE (to), TREE_TYPE (from)))
827             {
828               from = 
829                 cp_build_qualified_type (TREE_TYPE (to),
830                                          cp_type_quals (TREE_TYPE (from)));
831               from = build_pointer_type (from);
832               conv = build_conv (PTR_CONV, from, conv);
833             }
834         }
835
836       if (same_type_p (from, to))
837         /* OK */;
838       else if (comp_ptr_ttypes (TREE_TYPE (to), TREE_TYPE (from)))
839         conv = build_conv (QUAL_CONV, to, conv);
840       else if (expr && string_conv_p (to, expr, 0))
841         /* converting from string constant to char *.  */
842         conv = build_conv (QUAL_CONV, to, conv);
843       else if (ptr_reasonably_similar (TREE_TYPE (to), TREE_TYPE (from)))
844         {
845           conv = build_conv (PTR_CONV, to, conv);
846           ICS_BAD_FLAG (conv) = 1;
847         }
848       else
849         return 0;
850
851       from = to;
852     }
853   else if (TYPE_PTRMEMFUNC_P (to) && TYPE_PTRMEMFUNC_P (from))
854     {
855       tree fromfn = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (from));
856       tree tofn = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (to));
857       tree fbase = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (fromfn)));
858       tree tbase = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (tofn)));
859
860       if (!DERIVED_FROM_P (fbase, tbase)
861           || !same_type_p (TREE_TYPE (fromfn), TREE_TYPE (tofn))
862           || !compparms (TREE_CHAIN (TYPE_ARG_TYPES (fromfn)),
863                          TREE_CHAIN (TYPE_ARG_TYPES (tofn)))
864           || cp_type_quals (fbase) != cp_type_quals (tbase))
865         return 0;
866
867       from = cp_build_qualified_type (tbase, cp_type_quals (fbase));
868       from = build_cplus_method_type (from, TREE_TYPE (fromfn),
869                                       TREE_CHAIN (TYPE_ARG_TYPES (fromfn)));
870       from = build_ptrmemfunc_type (build_pointer_type (from));
871       conv = build_conv (PMEM_CONV, from, conv);
872     }
873   else if (tcode == BOOLEAN_TYPE)
874     {
875       if (! (INTEGRAL_CODE_P (fcode) || fcode == REAL_TYPE
876              || fcode == POINTER_TYPE || TYPE_PTRMEMFUNC_P (from)))
877         return 0;
878
879       conv = build_conv (STD_CONV, to, conv);
880       if (fcode == POINTER_TYPE
881           || (TYPE_PTRMEMFUNC_P (from) && ICS_STD_RANK (conv) < PBOOL_RANK))
882         ICS_STD_RANK (conv) = PBOOL_RANK;
883     }
884   /* We don't check for ENUMERAL_TYPE here because there are no standard
885      conversions to enum type.  */
886   else if (tcode == INTEGER_TYPE || tcode == BOOLEAN_TYPE
887            || tcode == REAL_TYPE)
888     {
889       if (! (INTEGRAL_CODE_P (fcode) || fcode == REAL_TYPE))
890         return 0;
891       conv = build_conv (STD_CONV, to, conv);
892
893       /* Give this a better rank if it's a promotion.  */
894       if (to == type_promotes_to (from)
895           && ICS_STD_RANK (TREE_OPERAND (conv, 0)) <= PROMO_RANK)
896         ICS_STD_RANK (conv) = PROMO_RANK;
897     }
898   else if (IS_AGGR_TYPE (to) && IS_AGGR_TYPE (from)
899            && is_properly_derived_from (from, to))
900     {
901       if (TREE_CODE (conv) == RVALUE_CONV)
902         conv = TREE_OPERAND (conv, 0);
903       conv = build_conv (BASE_CONV, to, conv);
904       /* The derived-to-base conversion indicates the initialization
905          of a parameter with base type from an object of a derived
906          type.  A temporary object is created to hold the result of
907          the conversion.  */
908       NEED_TEMPORARY_P (conv) = 1;
909     }
910   else
911     return 0;
912
913   return conv;
914 }
915
916 /* Returns nonzero if T1 is reference-related to T2.  */
917
918 static bool
919 reference_related_p (tree t1, tree t2)
920 {
921   t1 = TYPE_MAIN_VARIANT (t1);
922   t2 = TYPE_MAIN_VARIANT (t2);
923
924   /* [dcl.init.ref]
925
926      Given types "cv1 T1" and "cv2 T2," "cv1 T1" is reference-related
927      to "cv2 T2" if T1 is the same type as T2, or T1 is a base class
928      of T2.  */
929   return (same_type_p (t1, t2)
930           || (CLASS_TYPE_P (t1) && CLASS_TYPE_P (t2)
931               && DERIVED_FROM_P (t1, t2)));
932 }
933
934 /* Returns nonzero if T1 is reference-compatible with T2.  */
935
936 static bool
937 reference_compatible_p (tree t1, tree t2)
938 {
939   /* [dcl.init.ref]
940
941      "cv1 T1" is reference compatible with "cv2 T2" if T1 is
942      reference-related to T2 and cv1 is the same cv-qualification as,
943      or greater cv-qualification than, cv2.  */
944   return (reference_related_p (t1, t2)
945           && at_least_as_qualified_p (t1, t2));
946 }
947
948 /* Determine whether or not the EXPR (of class type S) can be
949    converted to T as in [over.match.ref].  */
950
951 static tree
952 convert_class_to_reference (tree t, tree s, tree expr)
953 {
954   tree conversions;
955   tree arglist;
956   tree conv;
957   tree reference_type;
958   struct z_candidate *candidates;
959   struct z_candidate *cand;
960   bool any_viable_p;
961
962   conversions = lookup_conversions (s);
963   if (!conversions)
964     return NULL_TREE;
965
966   /* [over.match.ref]
967
968      Assuming that "cv1 T" is the underlying type of the reference
969      being initialized, and "cv S" is the type of the initializer
970      expression, with S a class type, the candidate functions are
971      selected as follows:
972
973      --The conversion functions of S and its base classes are
974        considered.  Those that are not hidden within S and yield type
975        "reference to cv2 T2", where "cv1 T" is reference-compatible
976        (_dcl.init.ref_) with "cv2 T2", are candidate functions.
977
978      The argument list has one argument, which is the initializer
979      expression.  */
980
981   candidates = 0;
982
983   /* Conceptually, we should take the address of EXPR and put it in
984      the argument list.  Unfortunately, however, that can result in
985      error messages, which we should not issue now because we are just
986      trying to find a conversion operator.  Therefore, we use NULL,
987      cast to the appropriate type.  */
988   arglist = build_int_2 (0, 0);
989   TREE_TYPE (arglist) = build_pointer_type (s);
990   arglist = build_tree_list (NULL_TREE, arglist);
991
992   reference_type = build_reference_type (t);
993
994   while (conversions)
995     {
996       tree fns = TREE_VALUE (conversions);
997
998       for (; fns; fns = OVL_NEXT (fns))
999         {
1000           tree f = OVL_CURRENT (fns);
1001           tree t2 = TREE_TYPE (TREE_TYPE (f));
1002           
1003           cand = NULL;
1004
1005           /* If this is a template function, try to get an exact
1006              match.  */
1007           if (TREE_CODE (f) == TEMPLATE_DECL)
1008             {
1009               cand = add_template_candidate (&candidates,
1010                                              f, s,
1011                                              NULL_TREE,
1012                                              arglist,
1013                                              reference_type,
1014                                              TYPE_BINFO (s),
1015                                              TREE_PURPOSE (conversions),
1016                                              LOOKUP_NORMAL,
1017                                              DEDUCE_CONV);
1018               
1019               if (cand)
1020                 {
1021                   /* Now, see if the conversion function really returns
1022                      an lvalue of the appropriate type.  From the
1023                      point of view of unification, simply returning an
1024                      rvalue of the right type is good enough.  */
1025                   f = cand->fn;
1026                   t2 = TREE_TYPE (TREE_TYPE (f));
1027                   if (TREE_CODE (t2) != REFERENCE_TYPE
1028                       || !reference_compatible_p (t, TREE_TYPE (t2)))
1029                     {
1030                       candidates = candidates->next;
1031                       cand = NULL;
1032                     }
1033                 }
1034             }
1035           else if (TREE_CODE (t2) == REFERENCE_TYPE
1036                    && reference_compatible_p (t, TREE_TYPE (t2)))
1037             cand = add_function_candidate (&candidates, f, s, arglist, 
1038                                            TYPE_BINFO (s),      
1039                                            TREE_PURPOSE (conversions),
1040                                            LOOKUP_NORMAL);
1041           
1042           if (cand)
1043             /* Build a standard conversion sequence indicating the
1044                binding from the reference type returned by the
1045                function to the desired REFERENCE_TYPE.  */
1046             cand->second_conv
1047               = (direct_reference_binding 
1048                  (reference_type, 
1049                   build1 (IDENTITY_CONV, 
1050                           TREE_TYPE (TREE_TYPE (TREE_TYPE (cand->fn))),
1051                           NULL_TREE)));
1052         }
1053       conversions = TREE_CHAIN (conversions);
1054     }
1055
1056   candidates = splice_viable (candidates, pedantic, &any_viable_p);
1057   /* If none of the conversion functions worked out, let our caller
1058      know.  */
1059   if (!any_viable_p)
1060     return NULL_TREE;
1061
1062   cand = tourney (candidates);
1063   if (!cand)
1064     return NULL_TREE;
1065
1066   /* Now that we know that this is the function we're going to use fix
1067      the dummy first argument.  */
1068   cand->args = tree_cons (NULL_TREE,
1069                           build_this (expr),
1070                           TREE_CHAIN (cand->args));
1071
1072   /* Build a user-defined conversion sequence representing the
1073      conversion.  */
1074   conv = build_conv (USER_CONV,
1075                      TREE_TYPE (TREE_TYPE (cand->fn)),
1076                      build1 (IDENTITY_CONV, TREE_TYPE (expr), expr));
1077   TREE_OPERAND (conv, 1) = build_zc_wrapper (cand);
1078
1079   /* Merge it with the standard conversion sequence from the
1080      conversion function's return type to the desired type.  */
1081   cand->second_conv = merge_conversion_sequences (conv, cand->second_conv);
1082
1083   if (cand->viable == -1)
1084     ICS_BAD_FLAG (conv) = 1;
1085   
1086   return cand->second_conv;
1087 }
1088
1089 /* A reference of the indicated TYPE is being bound directly to the
1090    expression represented by the implicit conversion sequence CONV.
1091    Return a conversion sequence for this binding.  */
1092
1093 static tree
1094 direct_reference_binding (tree type, tree conv)
1095 {
1096   tree t;
1097
1098   my_friendly_assert (TREE_CODE (type) == REFERENCE_TYPE, 20030306);
1099   my_friendly_assert (TREE_CODE (TREE_TYPE (conv)) != REFERENCE_TYPE,
1100                       20030306);
1101
1102   t = TREE_TYPE (type);
1103
1104   /* [over.ics.rank] 
1105      
1106      When a parameter of reference type binds directly
1107      (_dcl.init.ref_) to an argument expression, the implicit
1108      conversion sequence is the identity conversion, unless the
1109      argument expression has a type that is a derived class of the
1110      parameter type, in which case the implicit conversion sequence is
1111      a derived-to-base Conversion.
1112          
1113      If the parameter binds directly to the result of applying a
1114      conversion function to the argument expression, the implicit
1115      conversion sequence is a user-defined conversion sequence
1116      (_over.ics.user_), with the second standard conversion sequence
1117      either an identity conversion or, if the conversion function
1118      returns an entity of a type that is a derived class of the
1119      parameter type, a derived-to-base conversion.  */
1120   if (!same_type_ignoring_top_level_qualifiers_p (t, TREE_TYPE (conv)))
1121     {
1122       /* Represent the derived-to-base conversion.  */
1123       conv = build_conv (BASE_CONV, t, conv);
1124       /* We will actually be binding to the base-class subobject in
1125          the derived class, so we mark this conversion appropriately.
1126          That way, convert_like knows not to generate a temporary.  */
1127       NEED_TEMPORARY_P (conv) = 0;
1128     }
1129   return build_conv (REF_BIND, type, conv);
1130 }
1131
1132 /* Returns the conversion path from type FROM to reference type TO for
1133    purposes of reference binding.  For lvalue binding, either pass a
1134    reference type to FROM or an lvalue expression to EXPR.  If the
1135    reference will be bound to a temporary, NEED_TEMPORARY_P is set for
1136    the conversion returned.  */
1137
1138 static tree
1139 reference_binding (tree rto, tree rfrom, tree expr, int flags)
1140 {
1141   tree conv = NULL_TREE;
1142   tree to = TREE_TYPE (rto);
1143   tree from = rfrom;
1144   bool related_p;
1145   bool compatible_p;
1146   cp_lvalue_kind lvalue_p = clk_none;
1147
1148   if (TREE_CODE (to) == FUNCTION_TYPE && expr && type_unknown_p (expr))
1149     {
1150       expr = instantiate_type (to, expr, tf_none);
1151       if (expr == error_mark_node)
1152         return NULL_TREE;
1153       from = TREE_TYPE (expr);
1154     }
1155
1156   if (TREE_CODE (from) == REFERENCE_TYPE)
1157     {
1158       /* Anything with reference type is an lvalue.  */
1159       lvalue_p = clk_ordinary;
1160       from = TREE_TYPE (from);
1161     }
1162   else if (expr)
1163     lvalue_p = real_lvalue_p (expr);
1164
1165   /* Figure out whether or not the types are reference-related and
1166      reference compatible.  We have do do this after stripping
1167      references from FROM.  */
1168   related_p = reference_related_p (to, from);
1169   compatible_p = reference_compatible_p (to, from);
1170
1171   if (lvalue_p && compatible_p)
1172     {
1173       /* [dcl.init.ref]
1174
1175          If the initializer expression 
1176          
1177          -- is an lvalue (but not an lvalue for a bit-field), and "cv1 T1"
1178             is reference-compatible with "cv2 T2,"
1179          
1180          the reference is bound directly to the initializer exprssion
1181          lvalue.  */
1182       conv = build1 (IDENTITY_CONV, from, expr);
1183       conv = direct_reference_binding (rto, conv);
1184       if ((lvalue_p & clk_bitfield) != 0 
1185           && CP_TYPE_CONST_NON_VOLATILE_P (to))
1186         /* For the purposes of overload resolution, we ignore the fact
1187            this expression is a bitfield. (In particular,
1188            [over.ics.ref] says specifically that a function with a
1189            non-const reference parameter is viable even if the
1190            argument is a bitfield.)
1191
1192            However, when we actually call the function we must create
1193            a temporary to which to bind the reference.  If the
1194            reference is volatile, or isn't const, then we cannot make
1195            a temporary, so we just issue an error when the conversion
1196            actually occurs.  */
1197         NEED_TEMPORARY_P (conv) = 1;
1198       return conv;
1199     }
1200   else if (CLASS_TYPE_P (from) && !(flags & LOOKUP_NO_CONVERSION))
1201     {
1202       /* [dcl.init.ref]
1203
1204          If the initializer exprsesion
1205
1206          -- has a class type (i.e., T2 is a class type) can be
1207             implicitly converted to an lvalue of type "cv3 T3," where
1208             "cv1 T1" is reference-compatible with "cv3 T3".  (this
1209             conversion is selected by enumerating the applicable
1210             conversion functions (_over.match.ref_) and choosing the
1211             best one through overload resolution.  (_over.match_). 
1212
1213         the reference is bound to the lvalue result of the conversion
1214         in the second case.  */
1215       conv = convert_class_to_reference (to, from, expr);
1216       if (conv)
1217         return conv;
1218     }
1219
1220   /* From this point on, we conceptually need temporaries, even if we
1221      elide them.  Only the cases above are "direct bindings".  */
1222   if (flags & LOOKUP_NO_TEMP_BIND)
1223     return NULL_TREE;
1224
1225   /* [over.ics.rank]
1226      
1227      When a parameter of reference type is not bound directly to an
1228      argument expression, the conversion sequence is the one required
1229      to convert the argument expression to the underlying type of the
1230      reference according to _over.best.ics_.  Conceptually, this
1231      conversion sequence corresponds to copy-initializing a temporary
1232      of the underlying type with the argument expression.  Any
1233      difference in top-level cv-qualification is subsumed by the
1234      initialization itself and does not constitute a conversion.  */
1235
1236   /* [dcl.init.ref]
1237
1238      Otherwise, the reference shall be to a non-volatile const type.  */
1239   if (!CP_TYPE_CONST_NON_VOLATILE_P (to))
1240     return NULL_TREE;
1241
1242   /* [dcl.init.ref]
1243      
1244      If the initializer expression is an rvalue, with T2 a class type,
1245      and "cv1 T1" is reference-compatible with "cv2 T2", the reference
1246      is bound in one of the following ways:
1247      
1248      -- The reference is bound to the object represented by the rvalue
1249         or to a sub-object within that object.  
1250
1251      -- ...
1252         
1253      We use the first alternative.  The implicit conversion sequence
1254      is supposed to be same as we would obtain by generating a
1255      temporary.  Fortunately, if the types are reference compatible,
1256      then this is either an identity conversion or the derived-to-base
1257      conversion, just as for direct binding.  */
1258   if (CLASS_TYPE_P (from) && compatible_p)
1259     {
1260       conv = build1 (IDENTITY_CONV, from, expr);
1261       return direct_reference_binding (rto, conv);
1262     }
1263
1264   /* [dcl.init.ref]
1265
1266      Otherwise, a temporary of type "cv1 T1" is created and
1267      initialized from the initializer expression using the rules for a
1268      non-reference copy initialization.  If T1 is reference-related to
1269      T2, cv1 must be the same cv-qualification as, or greater
1270      cv-qualification than, cv2; otherwise, the program is ill-formed.  */
1271   if (related_p && !at_least_as_qualified_p (to, from))
1272     return NULL_TREE;
1273
1274   conv = implicit_conversion (to, from, expr, flags);
1275   if (!conv)
1276     return NULL_TREE;
1277
1278   conv = build_conv (REF_BIND, rto, conv);
1279   /* This reference binding, unlike those above, requires the
1280      creation of a temporary.  */
1281   NEED_TEMPORARY_P (conv) = 1;
1282
1283   return conv;
1284 }
1285
1286 /* Returns the implicit conversion sequence (see [over.ics]) from type FROM
1287    to type TO.  The optional expression EXPR may affect the conversion.
1288    FLAGS are the usual overloading flags.  Only LOOKUP_NO_CONVERSION is
1289    significant.  */
1290
1291 static tree
1292 implicit_conversion (tree to, tree from, tree expr, int flags)
1293 {
1294   tree conv;
1295
1296   /* Resolve expressions like `A::p' that we thought might become
1297      pointers-to-members.  */
1298   if (expr && TREE_CODE (expr) == OFFSET_REF)
1299     {
1300       expr = resolve_offset_ref (expr);
1301       from = TREE_TYPE (expr);
1302     }
1303
1304   if (from == error_mark_node || to == error_mark_node
1305       || expr == error_mark_node)
1306     return NULL_TREE;
1307
1308   if (TREE_CODE (to) == REFERENCE_TYPE)
1309     conv = reference_binding (to, from, expr, flags);
1310   else
1311     conv = standard_conversion (to, from, expr);
1312
1313   if (conv)
1314     return conv;
1315
1316   if (expr != NULL_TREE
1317       && (IS_AGGR_TYPE (from)
1318           || IS_AGGR_TYPE (to))
1319       && (flags & LOOKUP_NO_CONVERSION) == 0)
1320     {
1321       struct z_candidate *cand;
1322
1323       cand = build_user_type_conversion_1
1324         (to, expr, LOOKUP_ONLYCONVERTING);
1325       if (cand)
1326         conv = cand->second_conv;
1327
1328       /* We used to try to bind a reference to a temporary here, but that
1329          is now handled by the recursive call to this function at the end
1330          of reference_binding.  */
1331       return conv;
1332     }
1333
1334   return NULL_TREE;
1335 }
1336
1337 /* Add a new entry to the list of candidates.  Used by the add_*_candidate
1338    functions.  */
1339
1340 static struct z_candidate *
1341 add_candidate (struct z_candidate **candidates, 
1342                tree fn, tree args, tree convs, tree access_path, 
1343                tree conversion_path, int viable)
1344 {
1345   struct z_candidate *cand
1346     = (struct z_candidate *) ggc_alloc_cleared (sizeof (struct z_candidate));
1347
1348   cand->fn = fn;
1349   cand->args = args;
1350   cand->convs = convs;
1351   cand->access_path = access_path;
1352   cand->conversion_path = conversion_path;
1353   cand->viable = viable;
1354   cand->next = *candidates;
1355   *candidates = cand;
1356
1357   return cand;
1358 }
1359
1360 /* Create an overload candidate for the function or method FN called with
1361    the argument list ARGLIST and add it to CANDIDATES.  FLAGS is passed on
1362    to implicit_conversion.
1363
1364    CTYPE, if non-NULL, is the type we want to pretend this function
1365    comes from for purposes of overload resolution.  */
1366
1367 static struct z_candidate *
1368 add_function_candidate (struct z_candidate **candidates, 
1369                         tree fn, tree ctype, tree arglist, 
1370                         tree access_path, tree conversion_path,
1371                         int flags)
1372 {
1373   tree parmlist = TYPE_ARG_TYPES (TREE_TYPE (fn));
1374   int i, len;
1375   tree convs;
1376   tree parmnode, argnode;
1377   tree orig_arglist;
1378   int viable = 1;
1379
1380   /* Built-in functions that haven't been declared don't really
1381      exist.  */
1382   if (DECL_ANTICIPATED (fn))
1383     return NULL;
1384
1385   /* The `this', `in_chrg' and VTT arguments to constructors are not
1386      considered in overload resolution.  */
1387   if (DECL_CONSTRUCTOR_P (fn))
1388     {
1389       parmlist = skip_artificial_parms_for (fn, parmlist);
1390       orig_arglist = arglist;
1391       arglist = skip_artificial_parms_for (fn, arglist);
1392     }
1393   else 
1394     orig_arglist = arglist;
1395
1396   len = list_length (arglist);
1397   convs = make_tree_vec (len);
1398
1399   /* 13.3.2 - Viable functions [over.match.viable]
1400      First, to be a viable function, a candidate function shall have enough
1401      parameters to agree in number with the arguments in the list.
1402
1403      We need to check this first; otherwise, checking the ICSes might cause
1404      us to produce an ill-formed template instantiation.  */
1405
1406   parmnode = parmlist;
1407   for (i = 0; i < len; ++i)
1408     {
1409       if (parmnode == NULL_TREE || parmnode == void_list_node)
1410         break;
1411       parmnode = TREE_CHAIN (parmnode);
1412     }
1413
1414   if (i < len && parmnode)
1415     viable = 0;
1416
1417   /* Make sure there are default args for the rest of the parms.  */
1418   else if (!sufficient_parms_p (parmnode))
1419     viable = 0;
1420
1421   if (! viable)
1422     goto out;
1423
1424   /* Second, for F to be a viable function, there shall exist for each
1425      argument an implicit conversion sequence that converts that argument
1426      to the corresponding parameter of F.  */
1427
1428   parmnode = parmlist;
1429   argnode = arglist;
1430
1431   for (i = 0; i < len; ++i)
1432     {
1433       tree arg = TREE_VALUE (argnode);
1434       tree argtype = lvalue_type (arg);
1435       tree t;
1436       int is_this;
1437
1438       if (parmnode == void_list_node)
1439         break;
1440
1441       is_this = (i == 0 && DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
1442                  && ! DECL_CONSTRUCTOR_P (fn));
1443
1444       if (parmnode)
1445         {
1446           tree parmtype = TREE_VALUE (parmnode);
1447
1448           /* The type of the implicit object parameter ('this') for
1449              overload resolution is not always the same as for the
1450              function itself; conversion functions are considered to
1451              be members of the class being converted, and functions
1452              introduced by a using-declaration are considered to be
1453              members of the class that uses them.
1454
1455              Since build_over_call ignores the ICS for the `this'
1456              parameter, we can just change the parm type.  */
1457           if (ctype && is_this)
1458             {
1459               parmtype
1460                 = build_qualified_type (ctype,
1461                                         TYPE_QUALS (TREE_TYPE (parmtype)));
1462               parmtype = build_pointer_type (parmtype);
1463             }
1464
1465           t = implicit_conversion (parmtype, argtype, arg, flags);
1466         }
1467       else
1468         {
1469           t = build1 (IDENTITY_CONV, argtype, arg);
1470           ICS_ELLIPSIS_FLAG (t) = 1;
1471         }
1472
1473       if (t && is_this)
1474         ICS_THIS_FLAG (t) = 1;
1475
1476       TREE_VEC_ELT (convs, i) = t;
1477       if (! t)
1478         {
1479           viable = 0;
1480           break;
1481         }
1482
1483       if (ICS_BAD_FLAG (t))
1484         viable = -1;
1485
1486       if (parmnode)
1487         parmnode = TREE_CHAIN (parmnode);
1488       argnode = TREE_CHAIN (argnode);
1489     }
1490
1491  out:
1492   return add_candidate (candidates, fn, orig_arglist, convs, access_path,
1493                         conversion_path, viable);
1494 }
1495
1496 /* Create an overload candidate for the conversion function FN which will
1497    be invoked for expression OBJ, producing a pointer-to-function which
1498    will in turn be called with the argument list ARGLIST, and add it to
1499    CANDIDATES.  FLAGS is passed on to implicit_conversion.
1500
1501    Actually, we don't really care about FN; we care about the type it
1502    converts to.  There may be multiple conversion functions that will
1503    convert to that type, and we rely on build_user_type_conversion_1 to
1504    choose the best one; so when we create our candidate, we record the type
1505    instead of the function.  */
1506
1507 static struct z_candidate *
1508 add_conv_candidate (struct z_candidate **candidates, tree fn, tree obj,
1509                     tree arglist, tree access_path, tree conversion_path)
1510 {
1511   tree totype = TREE_TYPE (TREE_TYPE (fn));
1512   int i, len, viable, flags;
1513   tree parmlist, convs, parmnode, argnode;
1514
1515   for (parmlist = totype; TREE_CODE (parmlist) != FUNCTION_TYPE; )
1516     parmlist = TREE_TYPE (parmlist);
1517   parmlist = TYPE_ARG_TYPES (parmlist);
1518
1519   len = list_length (arglist) + 1;
1520   convs = make_tree_vec (len);
1521   parmnode = parmlist;
1522   argnode = arglist;
1523   viable = 1;
1524   flags = LOOKUP_NORMAL;
1525
1526   /* Don't bother looking up the same type twice.  */
1527   if (*candidates && (*candidates)->fn == totype)
1528     return NULL;
1529
1530   for (i = 0; i < len; ++i)
1531     {
1532       tree arg = i == 0 ? obj : TREE_VALUE (argnode);
1533       tree argtype = lvalue_type (arg);
1534       tree t;
1535
1536       if (i == 0)
1537         t = implicit_conversion (totype, argtype, arg, flags);
1538       else if (parmnode == void_list_node)
1539         break;
1540       else if (parmnode)
1541         t = implicit_conversion (TREE_VALUE (parmnode), argtype, arg, flags);
1542       else
1543         {
1544           t = build1 (IDENTITY_CONV, argtype, arg);
1545           ICS_ELLIPSIS_FLAG (t) = 1;
1546         }
1547
1548       TREE_VEC_ELT (convs, i) = t;
1549       if (! t)
1550         break;
1551
1552       if (ICS_BAD_FLAG (t))
1553         viable = -1;
1554
1555       if (i == 0)
1556         continue;
1557
1558       if (parmnode)
1559         parmnode = TREE_CHAIN (parmnode);
1560       argnode = TREE_CHAIN (argnode);
1561     }
1562
1563   if (i < len)
1564     viable = 0;
1565
1566   if (!sufficient_parms_p (parmnode))
1567     viable = 0;
1568
1569   return add_candidate (candidates, totype, arglist, convs, access_path,
1570                         conversion_path, viable);
1571 }
1572
1573 static void
1574 build_builtin_candidate (struct z_candidate **candidates, tree fnname,
1575                          tree type1, tree type2, tree *args, tree *argtypes,
1576                          int flags)
1577 {
1578   tree t, convs;
1579   int viable = 1, i;
1580   tree types[2];
1581
1582   types[0] = type1;
1583   types[1] = type2;
1584
1585   convs = make_tree_vec (args[2] ? 3 : (args[1] ? 2 : 1));
1586
1587   for (i = 0; i < 2; ++i)
1588     {
1589       if (! args[i])
1590         break;
1591
1592       t = implicit_conversion (types[i], argtypes[i], args[i], flags);
1593       if (! t)
1594         {
1595           viable = 0;
1596           /* We need something for printing the candidate.  */
1597           t = build1 (IDENTITY_CONV, types[i], NULL_TREE);
1598         }
1599       else if (ICS_BAD_FLAG (t))
1600         viable = 0;
1601       TREE_VEC_ELT (convs, i) = t;
1602     }
1603
1604   /* For COND_EXPR we rearranged the arguments; undo that now.  */
1605   if (args[2])
1606     {
1607       TREE_VEC_ELT (convs, 2) = TREE_VEC_ELT (convs, 1);
1608       TREE_VEC_ELT (convs, 1) = TREE_VEC_ELT (convs, 0);
1609       t = implicit_conversion (boolean_type_node, argtypes[2], args[2], flags);
1610       if (t)
1611         TREE_VEC_ELT (convs, 0) = t;
1612       else
1613         viable = 0;
1614     }      
1615
1616   add_candidate (candidates, fnname, /*args=*/NULL_TREE, convs, 
1617                  /*access_path=*/NULL_TREE,
1618                  /*conversion_path=*/NULL_TREE,
1619                  viable);
1620 }
1621
1622 static bool
1623 is_complete (tree t)
1624 {
1625   return COMPLETE_TYPE_P (complete_type (t));
1626 }
1627
1628 /* Returns nonzero if TYPE is a promoted arithmetic type.  */
1629
1630 static bool
1631 promoted_arithmetic_type_p (tree type)
1632 {
1633   /* [over.built]
1634
1635      In this section, the term promoted integral type is used to refer
1636      to those integral types which are preserved by integral promotion
1637      (including e.g.  int and long but excluding e.g.  char).
1638      Similarly, the term promoted arithmetic type refers to promoted
1639      integral types plus floating types.  */
1640   return ((INTEGRAL_TYPE_P (type)
1641            && same_type_p (type_promotes_to (type), type))
1642           || TREE_CODE (type) == REAL_TYPE);
1643 }
1644
1645 /* Create any builtin operator overload candidates for the operator in
1646    question given the converted operand types TYPE1 and TYPE2.  The other
1647    args are passed through from add_builtin_candidates to
1648    build_builtin_candidate.  
1649    
1650    TYPE1 and TYPE2 may not be permissible, and we must filter them. 
1651    If CODE is requires candidates operands of the same type of the kind
1652    of which TYPE1 and TYPE2 are, we add both candidates
1653    CODE (TYPE1, TYPE1) and CODE (TYPE2, TYPE2).  */
1654
1655 static void
1656 add_builtin_candidate (struct z_candidate **candidates, enum tree_code code,
1657                        enum tree_code code2, tree fnname, tree type1,
1658                        tree type2, tree *args, tree *argtypes, int flags)
1659 {
1660   switch (code)
1661     {
1662     case POSTINCREMENT_EXPR:
1663     case POSTDECREMENT_EXPR:
1664       args[1] = integer_zero_node;
1665       type2 = integer_type_node;
1666       break;
1667     default:
1668       break;
1669     }
1670
1671   switch (code)
1672     {
1673
1674 /* 4 For every pair T, VQ), where T is an arithmetic or  enumeration  type,
1675      and  VQ  is  either  volatile or empty, there exist candidate operator
1676      functions of the form
1677              VQ T&   operator++(VQ T&);
1678              T       operator++(VQ T&, int);
1679    5 For every pair T, VQ), where T is an enumeration type or an arithmetic
1680      type  other than bool, and VQ is either volatile or empty, there exist
1681      candidate operator functions of the form
1682              VQ T&   operator--(VQ T&);
1683              T       operator--(VQ T&, int);
1684    6 For every pair T, VQ), where T is  a  cv-qualified  or  cv-unqualified
1685      complete  object type, and VQ is either volatile or empty, there exist
1686      candidate operator functions of the form
1687              T*VQ&   operator++(T*VQ&);
1688              T*VQ&   operator--(T*VQ&);
1689              T*      operator++(T*VQ&, int);
1690              T*      operator--(T*VQ&, int);  */
1691
1692     case POSTDECREMENT_EXPR:
1693     case PREDECREMENT_EXPR:
1694       if (TREE_CODE (type1) == BOOLEAN_TYPE)
1695         return;
1696     case POSTINCREMENT_EXPR:
1697     case PREINCREMENT_EXPR:
1698       if (ARITHMETIC_TYPE_P (type1) || TYPE_PTROB_P (type1))
1699         {
1700           type1 = build_reference_type (type1);
1701           break;
1702         }
1703       return;
1704
1705 /* 7 For every cv-qualified or cv-unqualified complete object type T, there
1706      exist candidate operator functions of the form
1707
1708              T&      operator*(T*);
1709
1710    8 For every function type T, there exist candidate operator functions of
1711      the form
1712              T&      operator*(T*);  */
1713
1714     case INDIRECT_REF:
1715       if (TREE_CODE (type1) == POINTER_TYPE
1716           && (TYPE_PTROB_P (type1)
1717               || TREE_CODE (TREE_TYPE (type1)) == FUNCTION_TYPE))
1718         break;
1719       return; 
1720
1721 /* 9 For every type T, there exist candidate operator functions of the form
1722              T*      operator+(T*);
1723
1724    10For  every  promoted arithmetic type T, there exist candidate operator
1725      functions of the form
1726              T       operator+(T);
1727              T       operator-(T);  */
1728
1729     case CONVERT_EXPR: /* unary + */
1730       if (TREE_CODE (type1) == POINTER_TYPE
1731           && TREE_CODE (TREE_TYPE (type1)) != OFFSET_TYPE)
1732         break;
1733     case NEGATE_EXPR:
1734       if (ARITHMETIC_TYPE_P (type1))
1735         break;
1736       return;
1737
1738 /* 11For every promoted integral type T,  there  exist  candidate  operator
1739      functions of the form
1740              T       operator~(T);  */
1741
1742     case BIT_NOT_EXPR:
1743       if (INTEGRAL_TYPE_P (type1))
1744         break;
1745       return;
1746
1747 /* 12For every quintuple C1, C2, T, CV1, CV2), where C2 is a class type, C1
1748      is the same type as C2 or is a derived class of C2, T  is  a  complete
1749      object type or a function type, and CV1 and CV2 are cv-qualifier-seqs,
1750      there exist candidate operator functions of the form
1751              CV12 T& operator->*(CV1 C1*, CV2 T C2::*);
1752      where CV12 is the union of CV1 and CV2.  */
1753
1754     case MEMBER_REF:
1755       if (TREE_CODE (type1) == POINTER_TYPE
1756           && (TYPE_PTRMEMFUNC_P (type2) || TYPE_PTRMEM_P (type2)))
1757         {
1758           tree c1 = TREE_TYPE (type1);
1759           tree c2 = (TYPE_PTRMEMFUNC_P (type2)
1760                      ? TYPE_METHOD_BASETYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type2)))
1761                      : TYPE_OFFSET_BASETYPE (TREE_TYPE (type2)));
1762
1763           if (IS_AGGR_TYPE (c1) && DERIVED_FROM_P (c2, c1)
1764               && (TYPE_PTRMEMFUNC_P (type2)
1765                   || is_complete (TREE_TYPE (TREE_TYPE (type2)))))
1766             break;
1767         }
1768       return;
1769
1770 /* 13For every pair of promoted arithmetic types L and R, there exist  can-
1771      didate operator functions of the form
1772              LR      operator*(L, R);
1773              LR      operator/(L, R);
1774              LR      operator+(L, R);
1775              LR      operator-(L, R);
1776              bool    operator<(L, R);
1777              bool    operator>(L, R);
1778              bool    operator<=(L, R);
1779              bool    operator>=(L, R);
1780              bool    operator==(L, R);
1781              bool    operator!=(L, R);
1782      where  LR  is  the  result of the usual arithmetic conversions between
1783      types L and R.
1784
1785    14For every pair of types T and I, where T  is  a  cv-qualified  or  cv-
1786      unqualified  complete  object  type and I is a promoted integral type,
1787      there exist candidate operator functions of the form
1788              T*      operator+(T*, I);
1789              T&      operator[](T*, I);
1790              T*      operator-(T*, I);
1791              T*      operator+(I, T*);
1792              T&      operator[](I, T*);
1793
1794    15For every T, where T is a pointer to complete object type, there exist
1795      candidate operator functions of the form112)
1796              ptrdiff_t operator-(T, T);
1797
1798    16For every pointer or enumeration type T, there exist candidate operator
1799      functions of the form
1800              bool    operator<(T, T);
1801              bool    operator>(T, T);
1802              bool    operator<=(T, T);
1803              bool    operator>=(T, T);
1804              bool    operator==(T, T);
1805              bool    operator!=(T, T);
1806
1807    17For every pointer to member type T,  there  exist  candidate  operator
1808      functions of the form
1809              bool    operator==(T, T);
1810              bool    operator!=(T, T);  */
1811
1812     case MINUS_EXPR:
1813       if (TYPE_PTROB_P (type1) && TYPE_PTROB_P (type2))
1814         break;
1815       if (TYPE_PTROB_P (type1) && INTEGRAL_TYPE_P (type2))
1816         {
1817           type2 = ptrdiff_type_node;
1818           break;
1819         }
1820     case MULT_EXPR:
1821     case TRUNC_DIV_EXPR:
1822       if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
1823         break;
1824       return;
1825
1826     case EQ_EXPR:
1827     case NE_EXPR:
1828       if ((TYPE_PTRMEMFUNC_P (type1) && TYPE_PTRMEMFUNC_P (type2))
1829           || (TYPE_PTRMEM_P (type1) && TYPE_PTRMEM_P (type2)))
1830         break;
1831       if ((TYPE_PTRMEMFUNC_P (type1) || TYPE_PTRMEM_P (type1))
1832           && null_ptr_cst_p (args[1]))
1833         {
1834           type2 = type1;
1835           break;
1836         }
1837       if ((TYPE_PTRMEMFUNC_P (type2) || TYPE_PTRMEM_P (type2))
1838           && null_ptr_cst_p (args[0]))
1839         {
1840           type1 = type2;
1841           break;
1842         }
1843       /* FALLTHROUGH */
1844     case LT_EXPR:
1845     case GT_EXPR:
1846     case LE_EXPR:
1847     case GE_EXPR:
1848     case MAX_EXPR:
1849     case MIN_EXPR:
1850       if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
1851         break;
1852       if (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
1853         break;
1854       if (TREE_CODE (type1) == ENUMERAL_TYPE && TREE_CODE (type2) == ENUMERAL_TYPE)
1855         break;
1856       if (TYPE_PTR_P (type1) && null_ptr_cst_p (args[1]))
1857         {
1858           type2 = type1;
1859           break;
1860         }
1861       if (null_ptr_cst_p (args[0]) && TYPE_PTR_P (type2))
1862         {
1863           type1 = type2;
1864           break;
1865         }
1866       return;
1867
1868     case PLUS_EXPR:
1869       if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
1870         break;
1871     case ARRAY_REF:
1872       if (INTEGRAL_TYPE_P (type1) && TYPE_PTROB_P (type2))
1873         {
1874           type1 = ptrdiff_type_node;
1875           break;
1876         }
1877       if (TYPE_PTROB_P (type1) && INTEGRAL_TYPE_P (type2))
1878         {
1879           type2 = ptrdiff_type_node;
1880           break;
1881         }
1882       return;
1883
1884 /* 18For  every pair of promoted integral types L and R, there exist candi-
1885      date operator functions of the form
1886              LR      operator%(L, R);
1887              LR      operator&(L, R);
1888              LR      operator^(L, R);
1889              LR      operator|(L, R);
1890              L       operator<<(L, R);
1891              L       operator>>(L, R);
1892      where LR is the result of the  usual  arithmetic  conversions  between
1893      types L and R.  */
1894
1895     case TRUNC_MOD_EXPR:
1896     case BIT_AND_EXPR:
1897     case BIT_IOR_EXPR:
1898     case BIT_XOR_EXPR:
1899     case LSHIFT_EXPR:
1900     case RSHIFT_EXPR:
1901       if (INTEGRAL_TYPE_P (type1) && INTEGRAL_TYPE_P (type2))
1902         break;
1903       return;
1904
1905 /* 19For  every  triple  L, VQ, R), where L is an arithmetic or enumeration
1906      type, VQ is either volatile or empty, and R is a  promoted  arithmetic
1907      type, there exist candidate operator functions of the form
1908              VQ L&   operator=(VQ L&, R);
1909              VQ L&   operator*=(VQ L&, R);
1910              VQ L&   operator/=(VQ L&, R);
1911              VQ L&   operator+=(VQ L&, R);
1912              VQ L&   operator-=(VQ L&, R);
1913
1914    20For  every  pair T, VQ), where T is any type and VQ is either volatile
1915      or empty, there exist candidate operator functions of the form
1916              T*VQ&   operator=(T*VQ&, T*);
1917
1918    21For every pair T, VQ), where T is a pointer to member type and  VQ  is
1919      either  volatile or empty, there exist candidate operator functions of
1920      the form
1921              VQ T&   operator=(VQ T&, T);
1922
1923    22For every triple  T,  VQ,  I),  where  T  is  a  cv-qualified  or  cv-
1924      unqualified  complete object type, VQ is either volatile or empty, and
1925      I is a promoted integral type, there exist  candidate  operator  func-
1926      tions of the form
1927              T*VQ&   operator+=(T*VQ&, I);
1928              T*VQ&   operator-=(T*VQ&, I);
1929
1930    23For  every  triple  L,  VQ,  R), where L is an integral or enumeration
1931      type, VQ is either volatile or empty, and R  is  a  promoted  integral
1932      type, there exist candidate operator functions of the form
1933
1934              VQ L&   operator%=(VQ L&, R);
1935              VQ L&   operator<<=(VQ L&, R);
1936              VQ L&   operator>>=(VQ L&, R);
1937              VQ L&   operator&=(VQ L&, R);
1938              VQ L&   operator^=(VQ L&, R);
1939              VQ L&   operator|=(VQ L&, R);  */
1940
1941     case MODIFY_EXPR:
1942       switch (code2)
1943         {
1944         case PLUS_EXPR:
1945         case MINUS_EXPR:
1946           if (TYPE_PTROB_P (type1) && INTEGRAL_TYPE_P (type2))
1947             {
1948               type2 = ptrdiff_type_node;
1949               break;
1950             }
1951         case MULT_EXPR:
1952         case TRUNC_DIV_EXPR:
1953           if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
1954             break;
1955           return;
1956
1957         case TRUNC_MOD_EXPR:
1958         case BIT_AND_EXPR:
1959         case BIT_IOR_EXPR:
1960         case BIT_XOR_EXPR:
1961         case LSHIFT_EXPR:
1962         case RSHIFT_EXPR:
1963           if (INTEGRAL_TYPE_P (type1) && INTEGRAL_TYPE_P (type2))
1964             break;
1965           return;
1966
1967         case NOP_EXPR:
1968           if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
1969             break;
1970           if ((TYPE_PTRMEMFUNC_P (type1) && TYPE_PTRMEMFUNC_P (type2))
1971               || (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
1972               || (TYPE_PTRMEM_P (type1) && TYPE_PTRMEM_P (type2))
1973               || ((TYPE_PTRMEMFUNC_P (type1)
1974                    || TREE_CODE (type1) == POINTER_TYPE)
1975                   && null_ptr_cst_p (args[1])))
1976             {
1977               type2 = type1;
1978               break;
1979             }
1980           return;
1981
1982         default:
1983           abort ();
1984         }
1985       type1 = build_reference_type (type1);
1986       break;
1987
1988     case COND_EXPR:
1989       /* [over.built]
1990
1991          For every pair of promoted arithmetic types L and R, there
1992          exist candidate operator functions of the form 
1993
1994          LR operator?(bool, L, R); 
1995
1996          where LR is the result of the usual arithmetic conversions
1997          between types L and R.
1998
1999          For every type T, where T is a pointer or pointer-to-member
2000          type, there exist candidate operator functions of the form T
2001          operator?(bool, T, T);  */
2002
2003       if (promoted_arithmetic_type_p (type1)
2004           && promoted_arithmetic_type_p (type2))
2005         /* That's OK.  */
2006         break;
2007
2008       /* Otherwise, the types should be pointers.  */
2009       if (!(TREE_CODE (type1) == POINTER_TYPE
2010             || TYPE_PTRMEM_P (type1)
2011             || TYPE_PTRMEMFUNC_P (type1))
2012           || !(TREE_CODE (type2) == POINTER_TYPE
2013                || TYPE_PTRMEM_P (type2)
2014                || TYPE_PTRMEMFUNC_P (type2)))
2015         return;
2016       
2017       /* We don't check that the two types are the same; the logic
2018          below will actually create two candidates; one in which both
2019          parameter types are TYPE1, and one in which both parameter
2020          types are TYPE2.  */
2021       break;
2022
2023     default:
2024       abort ();
2025     }
2026
2027   /* If we're dealing with two pointer types or two enumeral types,
2028      we need candidates for both of them.  */
2029   if (type2 && !same_type_p (type1, type2)
2030       && TREE_CODE (type1) == TREE_CODE (type2)
2031       && (TREE_CODE (type1) == REFERENCE_TYPE
2032           || (TREE_CODE (type1) == POINTER_TYPE
2033               && TYPE_PTRMEM_P (type1) == TYPE_PTRMEM_P (type2))
2034           || TYPE_PTRMEMFUNC_P (type1)
2035           || IS_AGGR_TYPE (type1)
2036           || TREE_CODE (type1) == ENUMERAL_TYPE))
2037     {
2038       build_builtin_candidate
2039         (candidates, fnname, type1, type1, args, argtypes, flags);
2040       build_builtin_candidate
2041         (candidates, fnname, type2, type2, args, argtypes, flags);
2042       return;
2043     }
2044
2045   build_builtin_candidate
2046     (candidates, fnname, type1, type2, args, argtypes, flags);
2047 }
2048
2049 tree
2050 type_decays_to (tree type)
2051 {
2052   if (TREE_CODE (type) == ARRAY_TYPE)
2053     return build_pointer_type (TREE_TYPE (type));
2054   if (TREE_CODE (type) == FUNCTION_TYPE)
2055     return build_pointer_type (type);
2056   return type;
2057 }
2058
2059 /* There are three conditions of builtin candidates:
2060
2061    1) bool-taking candidates.  These are the same regardless of the input.
2062    2) pointer-pair taking candidates.  These are generated for each type
2063       one of the input types converts to.
2064    3) arithmetic candidates.  According to the standard, we should generate
2065       all of these, but I'm trying not to...
2066    
2067    Here we generate a superset of the possible candidates for this particular
2068    case.  That is a subset of the full set the standard defines, plus some
2069    other cases which the standard disallows. add_builtin_candidate will
2070    filter out the invalid set.  */
2071
2072 static void
2073 add_builtin_candidates (struct z_candidate **candidates, enum tree_code code,
2074                         enum tree_code code2, tree fnname, tree *args,
2075                         int flags)
2076 {
2077   int ref1, i;
2078   int enum_p = 0;
2079   tree type, argtypes[3];
2080   /* TYPES[i] is the set of possible builtin-operator parameter types
2081      we will consider for the Ith argument.  These are represented as
2082      a TREE_LIST; the TREE_VALUE of each node is the potential
2083      parameter type.  */
2084   tree types[2];
2085
2086   for (i = 0; i < 3; ++i)
2087     {
2088       if (args[i])
2089         argtypes[i]  = lvalue_type (args[i]);
2090       else
2091         argtypes[i] = NULL_TREE;
2092     }
2093
2094   switch (code)
2095     {
2096 /* 4 For every pair T, VQ), where T is an arithmetic or  enumeration  type,
2097      and  VQ  is  either  volatile or empty, there exist candidate operator
2098      functions of the form
2099                  VQ T&   operator++(VQ T&);  */
2100
2101     case POSTINCREMENT_EXPR:
2102     case PREINCREMENT_EXPR:
2103     case POSTDECREMENT_EXPR:
2104     case PREDECREMENT_EXPR:
2105     case MODIFY_EXPR:
2106       ref1 = 1;
2107       break;
2108
2109 /* 24There also exist candidate operator functions of the form
2110              bool    operator!(bool);
2111              bool    operator&&(bool, bool);
2112              bool    operator||(bool, bool);  */
2113
2114     case TRUTH_NOT_EXPR:
2115       build_builtin_candidate
2116         (candidates, fnname, boolean_type_node,
2117          NULL_TREE, args, argtypes, flags);
2118       return;
2119
2120     case TRUTH_ORIF_EXPR:
2121     case TRUTH_ANDIF_EXPR:
2122       build_builtin_candidate
2123         (candidates, fnname, boolean_type_node,
2124          boolean_type_node, args, argtypes, flags);
2125       return;
2126
2127     case ADDR_EXPR:
2128     case COMPOUND_EXPR:
2129     case COMPONENT_REF:
2130       return;
2131
2132     case COND_EXPR:
2133     case EQ_EXPR:
2134     case NE_EXPR:
2135     case LT_EXPR:
2136     case LE_EXPR:
2137     case GT_EXPR:
2138     case GE_EXPR:
2139       enum_p = 1;
2140       /* FALLTHROUGH */
2141     
2142     default:
2143       ref1 = 0;
2144     }
2145
2146   types[0] = types[1] = NULL_TREE;
2147
2148   for (i = 0; i < 2; ++i)
2149     {
2150       if (! args[i])
2151         ;
2152       else if (IS_AGGR_TYPE (argtypes[i]))
2153         {
2154           tree convs;
2155
2156           if (i == 0 && code == MODIFY_EXPR && code2 == NOP_EXPR)
2157             return;
2158
2159           convs = lookup_conversions (argtypes[i]);
2160
2161           if (code == COND_EXPR)
2162             {
2163               if (real_lvalue_p (args[i]))
2164                 types[i] = tree_cons
2165                   (NULL_TREE, build_reference_type (argtypes[i]), types[i]);
2166
2167               types[i] = tree_cons
2168                 (NULL_TREE, TYPE_MAIN_VARIANT (argtypes[i]), types[i]);
2169             }
2170
2171           else if (! convs)
2172             return;
2173
2174           for (; convs; convs = TREE_CHAIN (convs))
2175             {
2176               type = TREE_TYPE (TREE_TYPE (OVL_CURRENT (TREE_VALUE (convs))));
2177
2178               if (i == 0 && ref1
2179                   && (TREE_CODE (type) != REFERENCE_TYPE
2180                       || CP_TYPE_CONST_P (TREE_TYPE (type))))
2181                 continue;
2182
2183               if (code == COND_EXPR && TREE_CODE (type) == REFERENCE_TYPE)
2184                 types[i] = tree_cons (NULL_TREE, type, types[i]);
2185
2186               type = non_reference (type);
2187               if (i != 0 || ! ref1)
2188                 {
2189                   type = TYPE_MAIN_VARIANT (type_decays_to (type));
2190                   if (enum_p && TREE_CODE (type) == ENUMERAL_TYPE)
2191                     types[i] = tree_cons (NULL_TREE, type, types[i]);
2192                   if (INTEGRAL_TYPE_P (type))
2193                     type = type_promotes_to (type);
2194                 }
2195
2196               if (! value_member (type, types[i]))
2197                 types[i] = tree_cons (NULL_TREE, type, types[i]);
2198             }
2199         }
2200       else
2201         {
2202           if (code == COND_EXPR && real_lvalue_p (args[i]))
2203             types[i] = tree_cons
2204               (NULL_TREE, build_reference_type (argtypes[i]), types[i]);
2205           type = non_reference (argtypes[i]);
2206           if (i != 0 || ! ref1)
2207             {
2208               type = TYPE_MAIN_VARIANT (type_decays_to (type));
2209               if (enum_p && TREE_CODE (type) == ENUMERAL_TYPE)
2210                 types[i] = tree_cons (NULL_TREE, type, types[i]);
2211               if (INTEGRAL_TYPE_P (type))
2212                 type = type_promotes_to (type);
2213             }
2214           types[i] = tree_cons (NULL_TREE, type, types[i]);
2215         }
2216     }
2217
2218   /* Run through the possible parameter types of both arguments,
2219      creating candidates with those parameter types.  */
2220   for (; types[0]; types[0] = TREE_CHAIN (types[0]))
2221     {
2222       if (types[1])
2223         for (type = types[1]; type; type = TREE_CHAIN (type))
2224           add_builtin_candidate
2225             (candidates, code, code2, fnname, TREE_VALUE (types[0]),
2226              TREE_VALUE (type), args, argtypes, flags);
2227       else
2228         add_builtin_candidate
2229           (candidates, code, code2, fnname, TREE_VALUE (types[0]),
2230            NULL_TREE, args, argtypes, flags);
2231     }
2232
2233   return;
2234 }
2235
2236
2237 /* If TMPL can be successfully instantiated as indicated by
2238    EXPLICIT_TARGS and ARGLIST, adds the instantiation to CANDIDATES.
2239
2240    TMPL is the template.  EXPLICIT_TARGS are any explicit template
2241    arguments.  ARGLIST is the arguments provided at the call-site.
2242    The RETURN_TYPE is the desired type for conversion operators.  If
2243    OBJ is NULL_TREE, FLAGS and CTYPE are as for add_function_candidate.
2244    If an OBJ is supplied, FLAGS and CTYPE are ignored, and OBJ is as for
2245    add_conv_candidate.  */
2246
2247 static struct z_candidate*
2248 add_template_candidate_real (struct z_candidate **candidates, tree tmpl,
2249                              tree ctype, tree explicit_targs, tree arglist,
2250                              tree return_type, tree access_path,
2251                              tree conversion_path, int flags, tree obj,
2252                              unification_kind_t strict)
2253 {
2254   int ntparms = DECL_NTPARMS (tmpl);
2255   tree targs = make_tree_vec (ntparms);
2256   tree args_without_in_chrg = arglist;
2257   struct z_candidate *cand;
2258   int i;
2259   tree fn;
2260
2261   /* We don't do deduction on the in-charge parameter, the VTT
2262      parameter or 'this'.  */
2263   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (tmpl))
2264     args_without_in_chrg = TREE_CHAIN (args_without_in_chrg);
2265
2266   if ((DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (tmpl)
2267        || DECL_BASE_CONSTRUCTOR_P (tmpl))
2268       && TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (tmpl)))
2269     args_without_in_chrg = TREE_CHAIN (args_without_in_chrg);
2270
2271   i = fn_type_unification (tmpl, explicit_targs, targs,
2272                            args_without_in_chrg,
2273                            return_type, strict, -1);
2274
2275   if (i != 0)
2276     return NULL;
2277
2278   fn = instantiate_template (tmpl, targs, tf_none);
2279   if (fn == error_mark_node)
2280     return NULL;
2281
2282   /* In [class.copy]:
2283
2284        A member function template is never instantiated to perform the
2285        copy of a class object to an object of its class type.  
2286
2287      It's a little unclear what this means; the standard explicitly
2288      does allow a template to be used to copy a class.  For example,
2289      in:
2290
2291        struct A {
2292          A(A&);
2293          template <class T> A(const T&);
2294        };
2295        const A f ();
2296        void g () { A a (f ()); }
2297        
2298      the member template will be used to make the copy.  The section
2299      quoted above appears in the paragraph that forbids constructors
2300      whose only parameter is (a possibly cv-qualified variant of) the
2301      class type, and a logical interpretation is that the intent was
2302      to forbid the instantiation of member templates which would then
2303      have that form.  */
2304   if (DECL_CONSTRUCTOR_P (fn) && list_length (arglist) == 2) 
2305     {
2306       tree arg_types = FUNCTION_FIRST_USER_PARMTYPE (fn);
2307       if (arg_types && same_type_p (TYPE_MAIN_VARIANT (TREE_VALUE (arg_types)),
2308                                     ctype))
2309         return NULL;
2310     }
2311
2312   if (obj != NULL_TREE)
2313     /* Aha, this is a conversion function.  */
2314     cand = add_conv_candidate (candidates, fn, obj, access_path,
2315                                conversion_path, arglist);
2316   else
2317     cand = add_function_candidate (candidates, fn, ctype,
2318                                    arglist, access_path, 
2319                                    conversion_path, flags);
2320   if (DECL_TI_TEMPLATE (fn) != tmpl)
2321     /* This situation can occur if a member template of a template
2322        class is specialized.  Then, instantiate_template might return
2323        an instantiation of the specialization, in which case the
2324        DECL_TI_TEMPLATE field will point at the original
2325        specialization.  For example:
2326
2327          template <class T> struct S { template <class U> void f(U);
2328                                        template <> void f(int) {}; };
2329          S<double> sd;
2330          sd.f(3);
2331
2332        Here, TMPL will be template <class U> S<double>::f(U).
2333        And, instantiate template will give us the specialization
2334        template <> S<double>::f(int).  But, the DECL_TI_TEMPLATE field
2335        for this will point at template <class T> template <> S<T>::f(int),
2336        so that we can find the definition.  For the purposes of
2337        overload resolution, however, we want the original TMPL.  */
2338     cand->template = tree_cons (tmpl, targs, NULL_TREE);
2339   else
2340     cand->template = DECL_TEMPLATE_INFO (fn);
2341
2342   return cand;
2343 }
2344
2345
2346 static struct z_candidate *
2347 add_template_candidate (struct z_candidate **candidates, tree tmpl, tree ctype,
2348                         tree explicit_targs, tree arglist, tree return_type,
2349                         tree access_path, tree conversion_path, int flags,
2350                         unification_kind_t strict)
2351 {
2352   return 
2353     add_template_candidate_real (candidates, tmpl, ctype,
2354                                  explicit_targs, arglist, return_type, 
2355                                  access_path, conversion_path,
2356                                  flags, NULL_TREE, strict);
2357 }
2358
2359
2360 static struct z_candidate *
2361 add_template_conv_candidate (struct z_candidate **candidates, tree tmpl,
2362                              tree obj, tree arglist, tree return_type,
2363                              tree access_path, tree conversion_path)
2364 {
2365   return 
2366     add_template_candidate_real (candidates, tmpl, NULL_TREE, NULL_TREE,
2367                                  arglist, return_type, access_path,
2368                                  conversion_path, 0, obj, DEDUCE_CONV);
2369 }
2370
2371 /* The CANDS are the set of candidates that were considered for
2372    overload resolution.  Return the set of viable candidates.  If none
2373    of the candidates were viable, set *ANY_VIABLE_P to true.  STRICT_P
2374    is true if a candidate should be considered viable only if it is
2375    strictly viable.  */
2376
2377 static struct z_candidate*
2378 splice_viable (struct z_candidate *cands,
2379                bool strict_p,
2380                bool *any_viable_p)
2381 {
2382   struct z_candidate *viable;
2383   struct z_candidate **last_viable;
2384   struct z_candidate **cand;
2385
2386   viable = NULL;
2387   last_viable = &viable;
2388   *any_viable_p = false;
2389
2390   cand = &cands; 
2391   while (*cand) 
2392     {
2393       struct z_candidate *c = *cand;
2394       if (strict_p ? c->viable == 1 : c->viable)
2395         {
2396           *last_viable = c;
2397           *cand = c->next;
2398           c->next = NULL;
2399           last_viable = &c->next;
2400           *any_viable_p = true;
2401         }
2402       else
2403         cand = &c->next;
2404     }
2405
2406   return viable ? viable : cands;
2407 }
2408
2409 static bool
2410 any_strictly_viable (struct z_candidate *cands)
2411 {
2412   for (; cands; cands = cands->next)
2413     if (cands->viable == 1)
2414       return true;
2415   return false;
2416 }
2417
2418 static tree
2419 build_this (tree obj)
2420 {
2421   /* Fix this to work on non-lvalues.  */
2422   return build_unary_op (ADDR_EXPR, obj, 0);
2423 }
2424
2425 /* Returns true iff functions are equivalent. Equivalent functions are
2426    not '==' only if one is a function-local extern function or if
2427    both are extern "C".  */
2428
2429 static inline int
2430 equal_functions (tree fn1, tree fn2)
2431 {
2432   if (DECL_LOCAL_FUNCTION_P (fn1) || DECL_LOCAL_FUNCTION_P (fn2)
2433       || DECL_EXTERN_C_FUNCTION_P (fn1))
2434     return decls_match (fn1, fn2);
2435   return fn1 == fn2;
2436 }
2437
2438 /* Print information about one overload candidate CANDIDATE.  STR is the
2439    text to print before the candidate itself and ERRFN is the routine
2440    (i.e. error, warning or pedwarn) used to do the printing.  */
2441
2442 static void
2443 print_z_candidate (const char *str, struct z_candidate *candidate,
2444                    void (*errfn)(const char *, ...))
2445 {
2446   if (TREE_CODE (candidate->fn) == IDENTIFIER_NODE)
2447     {
2448       if (TREE_VEC_LENGTH (candidate->convs) == 3)
2449         errfn ("%s %D(%T, %T, %T) <built-in>", str, candidate->fn,
2450                TREE_TYPE (TREE_VEC_ELT (candidate->convs, 0)),
2451                TREE_TYPE (TREE_VEC_ELT (candidate->convs, 1)),
2452                TREE_TYPE (TREE_VEC_ELT (candidate->convs, 2)));
2453       else if (TREE_VEC_LENGTH (candidate->convs) == 2)
2454         errfn ("%s %D(%T, %T) <built-in>", str, candidate->fn,
2455                TREE_TYPE (TREE_VEC_ELT (candidate->convs, 0)),
2456                TREE_TYPE (TREE_VEC_ELT (candidate->convs, 1)));
2457       else
2458         errfn ("%s %D(%T) <built-in>", str, candidate->fn,
2459                TREE_TYPE (TREE_VEC_ELT (candidate->convs, 0)));
2460     }
2461   else if (TYPE_P (candidate->fn))
2462     errfn ("%s %T <conversion>", str, candidate->fn);
2463   else
2464     errfn ("%H%s %+#D%s", &DECL_SOURCE_LOCATION (candidate->fn), str,
2465            candidate->fn, candidate->viable == -1 ? " <near match>" : "");
2466 }
2467
2468 static void
2469 print_z_candidates (struct z_candidate *candidates)
2470 {
2471   const char *str;
2472   struct z_candidate *cand1;
2473   struct z_candidate **cand2;
2474
2475   /* There may be duplicates in the set of candidates.  We put off
2476      checking this condition as long as possible, since we have no way
2477      to eliminate duplicates from a set of functions in less than n^2
2478      time.  Now we are about to emit an error message, so it is more
2479      permissible to go slowly.  */
2480   for (cand1 = candidates; cand1; cand1 = cand1->next)
2481     {
2482       tree fn = cand1->fn;
2483       /* Skip builtin candidates and conversion functions.  */
2484       if (TREE_CODE (fn) != FUNCTION_DECL)
2485         continue;
2486       cand2 = &cand1->next;
2487       while (*cand2)
2488         {
2489           if (TREE_CODE ((*cand2)->fn) == FUNCTION_DECL
2490               && equal_functions (fn, (*cand2)->fn))
2491             *cand2 = (*cand2)->next;
2492           else
2493             cand2 = &(*cand2)->next;
2494         }
2495     }
2496
2497   str = "candidates are:";
2498   for (; candidates; candidates = candidates->next)
2499     {
2500       print_z_candidate (str, candidates, error);
2501       str = "               "; 
2502     }
2503 }
2504
2505 /* USER_SEQ is a user-defined conversion sequence, beginning with a
2506    USER_CONV.  STD_SEQ is the standard conversion sequence applied to
2507    the result of the conversion function to convert it to the final
2508    desired type.  Merge the the two sequences into a single sequence,
2509    and return the merged sequence.  */
2510
2511 static tree
2512 merge_conversion_sequences (tree user_seq, tree std_seq)
2513 {
2514   tree *t;
2515
2516   my_friendly_assert (TREE_CODE (user_seq) == USER_CONV,
2517                       20030306);
2518
2519   /* Find the end of the second conversion sequence.  */
2520   t = &(std_seq); 
2521   while (TREE_CODE (*t) != IDENTITY_CONV)
2522     t = &TREE_OPERAND (*t, 0);
2523
2524   /* Replace the identity conversion with the user conversion
2525      sequence.  */
2526   *t = user_seq;
2527
2528   /* The entire sequence is a user-conversion sequence.  */
2529   ICS_USER_FLAG (std_seq) = 1;
2530
2531   return std_seq;
2532 }
2533
2534 /* Returns the best overload candidate to perform the requested
2535    conversion.  This function is used for three the overloading situations
2536    described in [over.match.copy], [over.match.conv], and [over.match.ref].
2537    If TOTYPE is a REFERENCE_TYPE, we're trying to find an lvalue binding as
2538    per [dcl.init.ref], so we ignore temporary bindings.  */
2539
2540 static struct z_candidate *
2541 build_user_type_conversion_1 (tree totype, tree expr, int flags)
2542 {
2543   struct z_candidate *candidates, *cand;
2544   tree fromtype = TREE_TYPE (expr);
2545   tree ctors = NULL_TREE, convs = NULL_TREE;
2546   tree args = NULL_TREE;
2547   bool any_viable_p;
2548
2549   /* We represent conversion within a hierarchy using RVALUE_CONV and
2550      BASE_CONV, as specified by [over.best.ics]; these become plain
2551      constructor calls, as specified in [dcl.init].  */
2552   my_friendly_assert (!IS_AGGR_TYPE (fromtype) || !IS_AGGR_TYPE (totype)
2553                       || !DERIVED_FROM_P (totype, fromtype), 20011226);
2554
2555   if (IS_AGGR_TYPE (totype))
2556     ctors = lookup_fnfields (TYPE_BINFO (totype),
2557                              complete_ctor_identifier,
2558                              0);
2559
2560   if (IS_AGGR_TYPE (fromtype))
2561     convs = lookup_conversions (fromtype);
2562
2563   candidates = 0;
2564   flags |= LOOKUP_NO_CONVERSION;
2565
2566   if (ctors)
2567     {
2568       tree t;
2569
2570       ctors = BASELINK_FUNCTIONS (ctors);
2571
2572       t = build_int_2 (0, 0);
2573       TREE_TYPE (t) = build_pointer_type (totype);
2574       args = build_tree_list (NULL_TREE, expr);
2575       /* We should never try to call the abstract or base constructor
2576          from here.  */
2577       my_friendly_assert (!DECL_HAS_IN_CHARGE_PARM_P (OVL_CURRENT (ctors))
2578                           && !DECL_HAS_VTT_PARM_P (OVL_CURRENT (ctors)),
2579                           20011226);
2580       args = tree_cons (NULL_TREE, t, args);
2581     }
2582   for (; ctors; ctors = OVL_NEXT (ctors))
2583     {
2584       tree ctor = OVL_CURRENT (ctors);
2585       if (DECL_NONCONVERTING_P (ctor))
2586         continue;
2587
2588       if (TREE_CODE (ctor) == TEMPLATE_DECL) 
2589         cand = add_template_candidate (&candidates, ctor, totype,
2590                                        NULL_TREE, args, NULL_TREE, 
2591                                        TYPE_BINFO (totype),
2592                                        TYPE_BINFO (totype),
2593                                        flags,
2594                                        DEDUCE_CALL);
2595       else 
2596         cand = add_function_candidate (&candidates, ctor, totype,
2597                                        args, TYPE_BINFO (totype), 
2598                                        TYPE_BINFO (totype),
2599                                        flags); 
2600
2601       if (cand)
2602         cand->second_conv = build1 (IDENTITY_CONV, totype, NULL_TREE);
2603     }
2604
2605   if (convs)
2606     args = build_tree_list (NULL_TREE, build_this (expr));
2607
2608   for (; convs; convs = TREE_CHAIN (convs))
2609     {
2610       tree fns;
2611       tree conversion_path = TREE_PURPOSE (convs);
2612       int convflags = LOOKUP_NO_CONVERSION;
2613
2614       /* If we are called to convert to a reference type, we are trying to
2615          find an lvalue binding, so don't even consider temporaries.  If
2616          we don't find an lvalue binding, the caller will try again to
2617          look for a temporary binding.  */
2618       if (TREE_CODE (totype) == REFERENCE_TYPE)
2619         convflags |= LOOKUP_NO_TEMP_BIND;
2620       
2621       for (fns = TREE_VALUE (convs); fns; fns = OVL_NEXT (fns))
2622         {
2623           tree fn = OVL_CURRENT (fns);
2624           
2625           /* [over.match.funcs] For conversion functions, the function
2626              is considered to be a member of the class of the implicit
2627              object argument for the purpose of defining the type of
2628              the implicit object parameter.
2629
2630              So we pass fromtype as CTYPE to add_*_candidate.  */
2631
2632           if (TREE_CODE (fn) == TEMPLATE_DECL)
2633             cand = add_template_candidate (&candidates, fn, fromtype, 
2634                                            NULL_TREE,
2635                                            args, totype, 
2636                                            TYPE_BINFO (fromtype), 
2637                                            conversion_path,
2638                                            flags,
2639                                            DEDUCE_CONV);
2640           else 
2641             cand = add_function_candidate (&candidates, fn, fromtype,
2642                                            args,
2643                                            TYPE_BINFO (fromtype),
2644                                            conversion_path,
2645                                            flags); 
2646
2647           if (cand)
2648             {
2649               tree ics = implicit_conversion (totype, 
2650                                               TREE_TYPE (TREE_TYPE (cand->fn)),
2651                                               0, convflags);
2652
2653               cand->second_conv = ics;
2654               
2655               if (ics == NULL_TREE)
2656                 cand->viable = 0;
2657               else if (candidates->viable == 1 && ICS_BAD_FLAG (ics))
2658                 cand->viable = -1;
2659             }
2660         }
2661     }
2662
2663   candidates = splice_viable (candidates, pedantic, &any_viable_p);
2664   if (!any_viable_p)
2665     return 0;
2666
2667   cand = tourney (candidates);
2668   if (cand == 0)
2669     {
2670       if (flags & LOOKUP_COMPLAIN)
2671         {
2672           error ("conversion from `%T' to `%T' is ambiguous",
2673                     fromtype, totype);
2674           print_z_candidates (candidates);
2675         }
2676
2677       cand = candidates;        /* any one will do */
2678       cand->second_conv = build1 (AMBIG_CONV, totype, expr);
2679       ICS_USER_FLAG (cand->second_conv) = 1;
2680       if (!any_strictly_viable (candidates))
2681         ICS_BAD_FLAG (cand->second_conv) = 1;
2682       /* If there are viable candidates, don't set ICS_BAD_FLAG; an
2683          ambiguous conversion is no worse than another user-defined
2684          conversion.  */
2685
2686       return cand;
2687     }
2688
2689   /* Build the user conversion sequence.  */
2690   convs = build_conv
2691     (USER_CONV,
2692      (DECL_CONSTRUCTOR_P (cand->fn)
2693       ? totype : non_reference (TREE_TYPE (TREE_TYPE (cand->fn)))),
2694      build1 (IDENTITY_CONV, TREE_TYPE (expr), expr));
2695   TREE_OPERAND (convs, 1) = build_zc_wrapper (cand);
2696
2697   /* Combine it with the second conversion sequence.  */
2698   cand->second_conv = merge_conversion_sequences (convs,
2699                                                   cand->second_conv);
2700
2701   if (cand->viable == -1)
2702     ICS_BAD_FLAG (cand->second_conv) = 1;
2703
2704   return cand;
2705 }
2706
2707 tree
2708 build_user_type_conversion (tree totype, tree expr, int flags)
2709 {
2710   struct z_candidate *cand
2711     = build_user_type_conversion_1 (totype, expr, flags);
2712
2713   if (cand)
2714     {
2715       if (TREE_CODE (cand->second_conv) == AMBIG_CONV)
2716         return error_mark_node;
2717       return convert_from_reference (convert_like (cand->second_conv, expr));
2718     }
2719   return NULL_TREE;
2720 }
2721
2722 /* Find the possibly overloaded set of functions corresponding to a
2723    call of the form SCOPE::NAME (...). NAME might be a
2724    TEMPLATE_ID_EXPR, OVERLOAD, _DECL, IDENTIFIER_NODE or LOOKUP_EXPR. */
2725
2726 tree
2727 resolve_scoped_fn_name (tree scope, tree name)
2728 {
2729   tree fn;
2730   tree template_args = NULL_TREE;
2731   bool is_template_id = TREE_CODE (name) == TEMPLATE_ID_EXPR;
2732   
2733   if (is_template_id)
2734     {
2735       template_args = TREE_OPERAND (name, 1);
2736       name = TREE_OPERAND (name, 0);
2737     }
2738   if (TREE_CODE (name) == OVERLOAD)
2739     name = DECL_NAME (get_first_fn (name));
2740   else if (TREE_CODE (name) == LOOKUP_EXPR)
2741     name = TREE_OPERAND (name, 0);
2742   
2743   if (TREE_CODE (scope) == NAMESPACE_DECL)
2744     fn = lookup_namespace_name (scope, name);
2745   else
2746     {
2747       if (!TYPE_BEING_DEFINED (scope)
2748           && !COMPLETE_TYPE_P (complete_type (scope)))
2749         {
2750           error ("incomplete type '%T' cannot be used to name a scope",
2751                  scope);
2752           return error_mark_node;
2753         }
2754       
2755       if (BASELINK_P (name))
2756         fn = name;
2757       else
2758         fn = lookup_member (scope, name, /*protect=*/1, /*want_type=*/false);
2759       if (fn && current_class_type)
2760         fn = (adjust_result_of_qualified_name_lookup 
2761               (fn, scope, current_class_type));
2762
2763       /* It might be the name of a function pointer member.  */
2764       if (fn && TREE_CODE (fn) == FIELD_DECL)
2765         fn = resolve_offset_ref (build_offset_ref (scope, fn));
2766     }
2767   
2768   if (!fn)
2769     {
2770       error ("'%D' has no member named '%E'", scope, name);
2771       return error_mark_node;
2772     }
2773   if (is_template_id)
2774     {
2775       tree fns = fn;
2776
2777       if (BASELINK_P (fn))
2778         fns = BASELINK_FUNCTIONS (fns);
2779       fns = build_nt (TEMPLATE_ID_EXPR, fns, template_args);
2780       if (BASELINK_P (fn))
2781         BASELINK_FUNCTIONS (fn) = fns;
2782       else
2783         fn = fns;
2784     }
2785   
2786   return fn;
2787 }
2788
2789 /* Do any initial processing on the arguments to a function call.  */
2790
2791 static tree
2792 resolve_args (tree args)
2793 {
2794   tree t;
2795   for (t = args; t; t = TREE_CHAIN (t))
2796     {
2797       tree arg = TREE_VALUE (t);
2798       
2799       if (arg == error_mark_node)
2800         return error_mark_node;
2801       else if (VOID_TYPE_P (TREE_TYPE (arg)))
2802         {
2803           error ("invalid use of void expression");
2804           return error_mark_node;
2805         }
2806       else if (TREE_CODE (arg) == OFFSET_REF)
2807         arg = resolve_offset_ref (arg);
2808       arg = convert_from_reference (arg);
2809       TREE_VALUE (t) = arg;
2810     }
2811   return args;
2812 }
2813
2814 /* Perform overload resolution on FN, which is called with the ARGS.
2815
2816    Return the candidate function selected by overload resolution, or
2817    NULL if the event that overload resolution failed.  In the case
2818    that overload resolution fails, *CANDIDATES will be the set of
2819    candidates considered, and ANY_VIABLE_P will be set to true or
2820    false to indicate whether or not any of the candidates were
2821    viable.  
2822
2823    The ARGS should already have gone through RESOLVE_ARGS before this
2824    function is called.  */
2825
2826 static struct z_candidate *
2827 perform_overload_resolution (tree fn, 
2828                              tree args, 
2829                              struct z_candidate **candidates,
2830                              bool *any_viable_p)
2831 {
2832   struct z_candidate *cand;
2833   tree explicit_targs = NULL_TREE;
2834   int template_only = 0;
2835
2836   *candidates = NULL;
2837   *any_viable_p = true;
2838
2839   /* Check FN and ARGS.  */
2840   my_friendly_assert (TREE_CODE (fn) == FUNCTION_DECL 
2841                       || TREE_CODE (fn) == TEMPLATE_DECL
2842                       || TREE_CODE (fn) == OVERLOAD
2843                       || TREE_CODE (fn) == TEMPLATE_ID_EXPR,
2844                       20020712);
2845   my_friendly_assert (!args || TREE_CODE (args) == TREE_LIST,
2846                       20020712);
2847
2848   if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
2849     {
2850       explicit_targs = TREE_OPERAND (fn, 1);
2851       fn = TREE_OPERAND (fn, 0);
2852       template_only = 1;
2853     }
2854
2855   /* Add the various candidate functions.  */
2856   add_candidates (fn, args, explicit_targs, template_only,
2857                   /*conversion_path=*/NULL_TREE,
2858                   /*access_path=*/NULL_TREE,
2859                   LOOKUP_NORMAL,
2860                   candidates);
2861
2862   *candidates = splice_viable (*candidates, pedantic, any_viable_p);
2863   if (!*any_viable_p)
2864     return NULL;
2865
2866   cand = tourney (*candidates);
2867   return cand;
2868 }
2869
2870 /* Return an expression for a call to FN (a namespace-scope function,
2871    or a static member function) with the ARGS.  */
2872       
2873 tree
2874 build_new_function_call (tree fn, tree args)
2875 {
2876   struct z_candidate *candidates, *cand;
2877   bool any_viable_p;
2878
2879   args = resolve_args (args);
2880   if (args == error_mark_node)
2881     return error_mark_node;
2882
2883   cand = perform_overload_resolution (fn, args, &candidates, &any_viable_p);
2884
2885   if (!cand)
2886     {
2887       if (!any_viable_p && candidates && ! candidates->next)
2888         return build_function_call (candidates->fn, args);
2889       if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
2890         fn = TREE_OPERAND (fn, 0);
2891       if (!any_viable_p)
2892         error ("no matching function for call to `%D(%A)'",
2893                DECL_NAME (OVL_CURRENT (fn)), args);
2894       else
2895         error ("call of overloaded `%D(%A)' is ambiguous",
2896                DECL_NAME (OVL_CURRENT (fn)), args);
2897       if (candidates)
2898         print_z_candidates (candidates);
2899       return error_mark_node;
2900     }
2901
2902   return build_over_call (cand, LOOKUP_NORMAL);
2903 }
2904
2905 /* Build a call to a global operator new.  FNNAME is the name of the
2906    operator (either "operator new" or "operator new[]") and ARGS are
2907    the arguments provided.  *SIZE points to the total number of bytes
2908    required by the allocation, and is updated if that is changed here.
2909    *COOKIE_SIZE is non-NULL if a cookie should be used.  If this
2910    function determins that no cookie should be used, after all,
2911    *COOKIE_SIZE is set to NULL_TREE. */
2912
2913 tree
2914 build_operator_new_call (tree fnname, tree args, tree *size, tree *cookie_size)
2915 {
2916   tree fns;
2917   struct z_candidate *candidates;
2918   struct z_candidate *cand;
2919   bool any_viable_p;
2920
2921   args = tree_cons (NULL_TREE, *size, args);
2922   args = resolve_args (args);
2923   if (args == error_mark_node)
2924     return args;
2925
2926   fns = lookup_function_nonclass (fnname, args);
2927
2928   /* Figure out what function is being called.  */
2929   cand = perform_overload_resolution (fns, args, &candidates, &any_viable_p);
2930   
2931   /* If no suitable function could be found, issue an error message
2932      and give up.  */
2933   if (!cand)
2934     {
2935       if (!any_viable_p)
2936         error ("no matching function for call to `%D(%A)'",
2937                DECL_NAME (OVL_CURRENT (fns)), args);
2938       else
2939         error ("call of overlopaded `%D(%A)' is ambiguous",
2940                DECL_NAME (OVL_CURRENT (fns)), args);
2941       if (candidates)
2942         print_z_candidates (candidates);
2943       return error_mark_node;
2944     }
2945
2946    /* If a cookie is required, add some extra space.  Whether
2947       or not a cookie is required cannot be determined until
2948       after we know which function was called.  */
2949    if (*cookie_size)
2950      {
2951        bool use_cookie = true;
2952        if (!abi_version_at_least (2))
2953          {
2954            tree placement = TREE_CHAIN (args);
2955            /* In G++ 3.2, the check was implemented incorrectly; it
2956               looked at the placement expression, rather than the
2957               type of the function.  */
2958            if (placement && !TREE_CHAIN (placement)
2959                && same_type_p (TREE_TYPE (TREE_VALUE (placement)),
2960                                ptr_type_node))
2961              use_cookie = false;
2962          }
2963        else
2964          {
2965            tree arg_types;
2966
2967            arg_types = TYPE_ARG_TYPES (TREE_TYPE (cand->fn));
2968            /* Skip the size_t parameter.  */
2969            arg_types = TREE_CHAIN (arg_types);
2970            /* Check the remaining parameters (if any).  */
2971            if (arg_types 
2972                && TREE_CHAIN (arg_types) == void_list_node
2973                && same_type_p (TREE_VALUE (arg_types),
2974                                ptr_type_node))
2975              use_cookie = false;
2976          }
2977        /* If we need a cookie, adjust the number of bytes allocated.  */
2978        if (use_cookie)
2979          {
2980            /* Update the total size.  */
2981            *size = size_binop (PLUS_EXPR, *size, *cookie_size);
2982            /* Update the argument list to reflect the adjusted size.  */
2983            TREE_VALUE (args) = *size;
2984          }
2985        else
2986          *cookie_size = NULL_TREE;
2987      }
2988
2989    /* Build the CALL_EXPR.  */
2990    return build_over_call (cand, LOOKUP_NORMAL);
2991 }
2992
2993 static tree
2994 build_object_call (tree obj, tree args)
2995 {
2996   struct z_candidate *candidates = 0, *cand;
2997   tree fns, convs, mem_args = NULL_TREE;
2998   tree type = TREE_TYPE (obj);
2999   bool any_viable_p;
3000
3001   if (TYPE_PTRMEMFUNC_P (type))
3002     {
3003       /* It's no good looking for an overloaded operator() on a
3004          pointer-to-member-function.  */
3005       error ("pointer-to-member function %E cannot be called without an object; consider using .* or ->*", obj);
3006       return error_mark_node;
3007     }
3008
3009   fns = lookup_fnfields (TYPE_BINFO (type), ansi_opname (CALL_EXPR), 1);
3010   if (fns == error_mark_node)
3011     return error_mark_node;
3012
3013   args = resolve_args (args);
3014
3015   if (args == error_mark_node)
3016     return error_mark_node;
3017
3018   if (fns)
3019     {
3020       tree base = BINFO_TYPE (BASELINK_BINFO (fns));
3021       mem_args = tree_cons (NULL_TREE, build_this (obj), args);
3022
3023       for (fns = BASELINK_FUNCTIONS (fns); fns; fns = OVL_NEXT (fns))
3024         {
3025           tree fn = OVL_CURRENT (fns);
3026           if (TREE_CODE (fn) == TEMPLATE_DECL)
3027             add_template_candidate (&candidates, fn, base, NULL_TREE,
3028                                     mem_args, NULL_TREE, 
3029                                     TYPE_BINFO (type),
3030                                     TYPE_BINFO (type),
3031                                     LOOKUP_NORMAL, DEDUCE_CALL);
3032           else
3033             add_function_candidate
3034               (&candidates, fn, base, mem_args, TYPE_BINFO (type),
3035                TYPE_BINFO (type), LOOKUP_NORMAL);
3036         }
3037     }
3038
3039   convs = lookup_conversions (type);
3040
3041   for (; convs; convs = TREE_CHAIN (convs))
3042     {
3043       tree fns = TREE_VALUE (convs);
3044       tree totype = TREE_TYPE (TREE_TYPE (OVL_CURRENT (fns)));
3045
3046       if ((TREE_CODE (totype) == POINTER_TYPE
3047            && TREE_CODE (TREE_TYPE (totype)) == FUNCTION_TYPE)
3048           || (TREE_CODE (totype) == REFERENCE_TYPE
3049               && TREE_CODE (TREE_TYPE (totype)) == FUNCTION_TYPE)
3050           || (TREE_CODE (totype) == REFERENCE_TYPE
3051               && TREE_CODE (TREE_TYPE (totype)) == POINTER_TYPE
3052               && TREE_CODE (TREE_TYPE (TREE_TYPE (totype))) == FUNCTION_TYPE))
3053         for (; fns; fns = OVL_NEXT (fns))
3054           {
3055             tree fn = OVL_CURRENT (fns);
3056             if (TREE_CODE (fn) == TEMPLATE_DECL) 
3057               add_template_conv_candidate 
3058                 (&candidates, fn, obj, args, totype,
3059                  /*access_path=*/NULL_TREE,
3060                  /*conversion_path=*/NULL_TREE);
3061             else
3062               add_conv_candidate (&candidates, fn, obj, args,
3063                                   /*conversion_path=*/NULL_TREE,
3064                                   /*access_path=*/NULL_TREE);
3065           }
3066     }
3067
3068   candidates = splice_viable (candidates, pedantic, &any_viable_p);
3069   if (!any_viable_p)
3070     {
3071       error ("no match for call to `(%T) (%A)'", TREE_TYPE (obj), args);
3072       print_z_candidates (candidates);
3073       return error_mark_node;
3074     }
3075
3076   cand = tourney (candidates);
3077   if (cand == 0)
3078     {
3079       error ("call of `(%T) (%A)' is ambiguous", TREE_TYPE (obj), args);
3080       print_z_candidates (candidates);
3081       return error_mark_node;
3082     }
3083
3084   /* Since cand->fn will be a type, not a function, for a conversion
3085      function, we must be careful not to unconditionally look at
3086      DECL_NAME here.  */
3087   if (TREE_CODE (cand->fn) == FUNCTION_DECL
3088       && DECL_OVERLOADED_OPERATOR_P (cand->fn) == CALL_EXPR)
3089     return build_over_call (cand, LOOKUP_NORMAL);
3090
3091   obj = convert_like_with_context
3092           (TREE_VEC_ELT (cand->convs, 0), obj, cand->fn, -1);
3093
3094   /* FIXME */
3095   return build_function_call (obj, args);
3096 }
3097
3098 static void
3099 op_error (enum tree_code code, enum tree_code code2,
3100           tree arg1, tree arg2, tree arg3, const char *problem)
3101 {
3102   const char *opname;
3103
3104   if (code == MODIFY_EXPR)
3105     opname = assignment_operator_name_info[code2].name;
3106   else
3107     opname = operator_name_info[code].name;
3108
3109   switch (code)
3110     {
3111     case COND_EXPR:
3112       error ("%s for `%T ? %T : %T' operator", problem,
3113                 error_type (arg1), error_type (arg2), error_type (arg3));
3114       break;
3115     case POSTINCREMENT_EXPR:
3116     case POSTDECREMENT_EXPR:
3117       error ("%s for `%T %s' operator", problem, error_type (arg1), opname);
3118       break;
3119     case ARRAY_REF:
3120       error ("%s for `%T [%T]' operator", problem,
3121                 error_type (arg1), error_type (arg2));
3122       break;
3123     default:
3124       if (arg2)
3125         error ("%s for `%T %s %T' operator", problem,
3126                   error_type (arg1), opname, error_type (arg2));
3127       else
3128         error ("%s for `%s %T' operator", problem, opname, error_type (arg1));
3129     }
3130 }
3131
3132 /* Return the implicit conversion sequence that could be used to
3133    convert E1 to E2 in [expr.cond].  */
3134
3135 static tree
3136 conditional_conversion (tree e1, tree e2)
3137 {
3138   tree t1 = non_reference (TREE_TYPE (e1));
3139   tree t2 = non_reference (TREE_TYPE (e2));
3140   tree conv;
3141
3142   /* [expr.cond]
3143
3144      If E2 is an lvalue: E1 can be converted to match E2 if E1 can be
3145      implicitly converted (clause _conv_) to the type "reference to
3146      T2", subject to the constraint that in the conversion the
3147      reference must bind directly (_dcl.init.ref_) to E1.  */
3148   if (real_lvalue_p (e2))
3149     {
3150       conv = implicit_conversion (build_reference_type (t2), 
3151                                   t1,
3152                                   e1,
3153                                   LOOKUP_NO_TEMP_BIND);
3154       if (conv)
3155         return conv;
3156     }
3157
3158   /* [expr.cond]
3159
3160      If E1 and E2 have class type, and the underlying class types are
3161      the same or one is a base class of the other: E1 can be converted
3162      to match E2 if the class of T2 is the same type as, or a base
3163      class of, the class of T1, and the cv-qualification of T2 is the
3164      same cv-qualification as, or a greater cv-qualification than, the
3165      cv-qualification of T1.  If the conversion is applied, E1 is
3166      changed to an rvalue of type T2 that still refers to the original
3167      source class object (or the appropriate subobject thereof).  */
3168   if (CLASS_TYPE_P (t1) && CLASS_TYPE_P (t2)
3169       && same_or_base_type_p (TYPE_MAIN_VARIANT (t2), 
3170                               TYPE_MAIN_VARIANT (t1)))
3171     {
3172       if (at_least_as_qualified_p (t2, t1))
3173         {
3174           conv = build1 (IDENTITY_CONV, t1, e1);
3175           if (!same_type_p (TYPE_MAIN_VARIANT (t1), 
3176                             TYPE_MAIN_VARIANT (t2)))
3177             conv = build_conv (BASE_CONV, t2, conv);
3178           return conv;
3179         }
3180       else
3181         return NULL_TREE;
3182     }
3183
3184   /* [expr.cond]
3185
3186      E1 can be converted to match E2 if E1 can be implicitly converted
3187      to the type that expression E2 would have if E2 were converted to
3188      an rvalue (or the type it has, if E2 is an rvalue).  */
3189   return implicit_conversion (t2, t1, e1, LOOKUP_NORMAL);
3190 }
3191
3192 /* Implement [expr.cond].  ARG1, ARG2, and ARG3 are the three
3193    arguments to the conditional expression.  */
3194
3195 tree
3196 build_conditional_expr (tree arg1, tree arg2, tree arg3)
3197 {
3198   tree arg2_type;
3199   tree arg3_type;
3200   tree result;
3201   tree result_type = NULL_TREE;
3202   bool lvalue_p = true;
3203   struct z_candidate *candidates = 0;
3204   struct z_candidate *cand;
3205
3206   /* As a G++ extension, the second argument to the conditional can be
3207      omitted.  (So that `a ? : c' is roughly equivalent to `a ? a :
3208      c'.)  If the second operand is omitted, make sure it is
3209      calculated only once.  */
3210   if (!arg2)
3211     {
3212       if (pedantic)
3213         pedwarn ("ISO C++ forbids omitting the middle term of a ?: expression");
3214
3215       /* Make sure that lvalues remain lvalues.  See g++.oliva/ext1.C.  */
3216       if (real_lvalue_p (arg1))
3217         arg2 = arg1 = stabilize_reference (arg1);
3218       else
3219         arg2 = arg1 = save_expr (arg1);
3220     }
3221
3222   /* [expr.cond]
3223   
3224      The first expr ession is implicitly converted to bool (clause
3225      _conv_).  */
3226   arg1 = cp_convert (boolean_type_node, arg1);
3227
3228   /* If something has already gone wrong, just pass that fact up the
3229      tree.  */
3230   if (arg1 == error_mark_node 
3231       || arg2 == error_mark_node 
3232       || arg3 == error_mark_node 
3233       || TREE_TYPE (arg1) == error_mark_node
3234       || TREE_TYPE (arg2) == error_mark_node
3235       || TREE_TYPE (arg3) == error_mark_node)
3236     return error_mark_node;
3237
3238   /* [expr.cond]
3239
3240      If either the second or the third operand has type (possibly
3241      cv-qualified) void, then the lvalue-to-rvalue (_conv.lval_),
3242      array-to-pointer (_conv.array_), and function-to-pointer
3243      (_conv.func_) standard conversions are performed on the second
3244      and third operands.  */
3245   arg2_type = TREE_TYPE (arg2);
3246   arg3_type = TREE_TYPE (arg3);
3247   if (VOID_TYPE_P (arg2_type) || VOID_TYPE_P (arg3_type))
3248     {
3249       /* Do the conversions.  We don't these for `void' type arguments
3250          since it can't have any effect and since decay_conversion
3251          does not handle that case gracefully.  */
3252       if (!VOID_TYPE_P (arg2_type))
3253         arg2 = decay_conversion (arg2);
3254       if (!VOID_TYPE_P (arg3_type))
3255         arg3 = decay_conversion (arg3);
3256       arg2_type = TREE_TYPE (arg2);
3257       arg3_type = TREE_TYPE (arg3);
3258
3259       /* [expr.cond]
3260
3261          One of the following shall hold:
3262
3263          --The second or the third operand (but not both) is a
3264            throw-expression (_except.throw_); the result is of the
3265            type of the other and is an rvalue.
3266
3267          --Both the second and the third operands have type void; the
3268            result is of type void and is an rvalue.  */
3269       if ((TREE_CODE (arg2) == THROW_EXPR)
3270           ^ (TREE_CODE (arg3) == THROW_EXPR))
3271         result_type = ((TREE_CODE (arg2) == THROW_EXPR) 
3272                        ? arg3_type : arg2_type);
3273       else if (VOID_TYPE_P (arg2_type) && VOID_TYPE_P (arg3_type))
3274         result_type = void_type_node;
3275       else
3276         {
3277           error ("`%E' has type `void' and is not a throw-expression",
3278                     VOID_TYPE_P (arg2_type) ? arg2 : arg3);
3279           return error_mark_node;
3280         }
3281
3282       lvalue_p = false;
3283       goto valid_operands;
3284     }
3285   /* [expr.cond]
3286
3287      Otherwise, if the second and third operand have different types,
3288      and either has (possibly cv-qualified) class type, an attempt is
3289      made to convert each of those operands to the type of the other.  */
3290   else if (!same_type_p (arg2_type, arg3_type)
3291            && (CLASS_TYPE_P (arg2_type) || CLASS_TYPE_P (arg3_type)))
3292     {
3293       tree conv2 = conditional_conversion (arg2, arg3);
3294       tree conv3 = conditional_conversion (arg3, arg2);
3295       
3296       /* [expr.cond]
3297
3298          If both can be converted, or one can be converted but the
3299          conversion is ambiguous, the program is ill-formed.  If
3300          neither can be converted, the operands are left unchanged and
3301          further checking is performed as described below.  If exactly
3302          one conversion is possible, that conversion is applied to the
3303          chosen operand and the converted operand is used in place of
3304          the original operand for the remainder of this section.  */
3305       if ((conv2 && !ICS_BAD_FLAG (conv2) 
3306            && conv3 && !ICS_BAD_FLAG (conv3))
3307           || (conv2 && TREE_CODE (conv2) == AMBIG_CONV)
3308           || (conv3 && TREE_CODE (conv3) == AMBIG_CONV))
3309         {
3310           error ("operands to ?: have different types");
3311           return error_mark_node;
3312         }
3313       else if (conv2 && !ICS_BAD_FLAG (conv2))
3314         {
3315           arg2 = convert_like (conv2, arg2);
3316           arg2 = convert_from_reference (arg2);
3317           /* That may not quite have done the trick.  If the two types
3318              are cv-qualified variants of one another, we will have
3319              just used an IDENTITY_CONV.  */
3320           if (!same_type_p (TREE_TYPE (arg2), arg3_type))
3321             arg2 = convert (arg3_type, arg2);
3322           arg2_type = TREE_TYPE (arg2);
3323         }
3324       else if (conv3 && !ICS_BAD_FLAG (conv3))
3325         {
3326           arg3 = convert_like (conv3, arg3);
3327           arg3 = convert_from_reference (arg3);
3328           if (!same_type_p (TREE_TYPE (arg3), arg2_type))
3329             arg3 = convert (arg2_type, arg3);
3330           arg3_type = TREE_TYPE (arg3);
3331         }
3332     }
3333
3334   /* [expr.cond]
3335
3336      If the second and third operands are lvalues and have the same
3337      type, the result is of that type and is an lvalue.  */
3338   if (real_lvalue_p (arg2) && real_lvalue_p (arg3) && 
3339       same_type_p (arg2_type, arg3_type))
3340     {
3341       result_type = arg2_type;
3342       goto valid_operands;
3343     }
3344
3345   /* [expr.cond]
3346
3347      Otherwise, the result is an rvalue.  If the second and third
3348      operand do not have the same type, and either has (possibly
3349      cv-qualified) class type, overload resolution is used to
3350      determine the conversions (if any) to be applied to the operands
3351      (_over.match.oper_, _over.built_).  */
3352   lvalue_p = false;
3353   if (!same_type_p (arg2_type, arg3_type)
3354       && (CLASS_TYPE_P (arg2_type) || CLASS_TYPE_P (arg3_type)))
3355     {
3356       tree args[3];
3357       tree conv;
3358       bool any_viable_p;
3359
3360       /* Rearrange the arguments so that add_builtin_candidate only has
3361          to know about two args.  In build_builtin_candidates, the
3362          arguments are unscrambled.  */
3363       args[0] = arg2;
3364       args[1] = arg3;
3365       args[2] = arg1;
3366       add_builtin_candidates (&candidates, 
3367                               COND_EXPR, 
3368                               NOP_EXPR,
3369                               ansi_opname (COND_EXPR),
3370                               args,
3371                               LOOKUP_NORMAL);
3372
3373       /* [expr.cond]
3374
3375          If the overload resolution fails, the program is
3376          ill-formed.  */
3377       candidates = splice_viable (candidates, pedantic, &any_viable_p);
3378       if (!any_viable_p)
3379         {
3380           op_error (COND_EXPR, NOP_EXPR, arg1, arg2, arg3, "no match");
3381           print_z_candidates (candidates);
3382           return error_mark_node;
3383         }
3384       cand = tourney (candidates);
3385       if (!cand)
3386         {
3387           op_error (COND_EXPR, NOP_EXPR, arg1, arg2, arg3, "no match");
3388           print_z_candidates (candidates);
3389           return error_mark_node;
3390         }
3391
3392       /* [expr.cond]
3393
3394          Otherwise, the conversions thus determined are applied, and
3395          the converted operands are used in place of the original
3396          operands for the remainder of this section.  */
3397       conv = TREE_VEC_ELT (cand->convs, 0);
3398       arg1 = convert_like (conv, arg1);
3399       conv = TREE_VEC_ELT (cand->convs, 1);
3400       arg2 = convert_like (conv, arg2);
3401       conv = TREE_VEC_ELT (cand->convs, 2);
3402       arg3 = convert_like (conv, arg3);
3403     }
3404
3405   /* [expr.cond]
3406
3407      Lvalue-to-rvalue (_conv.lval_), array-to-pointer (_conv.array_),
3408      and function-to-pointer (_conv.func_) standard conversions are
3409      performed on the second and third operands.
3410
3411      We need to force the lvalue-to-rvalue conversion here for class types,
3412      so we get TARGET_EXPRs; trying to deal with a COND_EXPR of class rvalues
3413      that isn't wrapped with a TARGET_EXPR plays havoc with exception
3414      regions.
3415
3416      We use ocp_convert rather than build_user_type_conversion because the
3417      latter returns NULL_TREE on failure, while the former gives an error.  */
3418
3419   if (IS_AGGR_TYPE (TREE_TYPE (arg2)))
3420     arg2 = ocp_convert (TREE_TYPE (arg2), arg2,
3421                         CONV_IMPLICIT|CONV_FORCE_TEMP, LOOKUP_NORMAL);
3422   else
3423     arg2 = decay_conversion (arg2);
3424   arg2_type = TREE_TYPE (arg2);
3425
3426   if (IS_AGGR_TYPE (TREE_TYPE (arg3)))
3427     arg3 = ocp_convert (TREE_TYPE (arg3), arg3,
3428                         CONV_IMPLICIT|CONV_FORCE_TEMP, LOOKUP_NORMAL);
3429   else
3430     arg3 = decay_conversion (arg3);
3431   arg3_type = TREE_TYPE (arg3);
3432
3433   if (arg2 == error_mark_node || arg3 == error_mark_node)
3434     return error_mark_node;
3435   
3436   /* [expr.cond]
3437      
3438      After those conversions, one of the following shall hold:
3439
3440      --The second and third operands have the same type; the result  is  of
3441        that type.  */
3442   if (same_type_p (arg2_type, arg3_type))
3443     result_type = arg2_type;
3444   /* [expr.cond]
3445
3446      --The second and third operands have arithmetic or enumeration
3447        type; the usual arithmetic conversions are performed to bring
3448        them to a common type, and the result is of that type.  */
3449   else if ((ARITHMETIC_TYPE_P (arg2_type) 
3450             || TREE_CODE (arg2_type) == ENUMERAL_TYPE)
3451            && (ARITHMETIC_TYPE_P (arg3_type)
3452                || TREE_CODE (arg3_type) == ENUMERAL_TYPE))
3453     {
3454       /* In this case, there is always a common type.  */
3455       result_type = type_after_usual_arithmetic_conversions (arg2_type, 
3456                                                              arg3_type);
3457       
3458       if (TREE_CODE (arg2_type) == ENUMERAL_TYPE
3459           && TREE_CODE (arg3_type) == ENUMERAL_TYPE)
3460          warning ("enumeral mismatch in conditional expression: `%T' vs `%T'",
3461                    arg2_type, arg3_type);
3462       else if (extra_warnings
3463                && ((TREE_CODE (arg2_type) == ENUMERAL_TYPE
3464                     && !same_type_p (arg3_type, type_promotes_to (arg2_type)))
3465                    || (TREE_CODE (arg3_type) == ENUMERAL_TYPE
3466                        && !same_type_p (arg2_type, type_promotes_to (arg3_type)))))
3467         warning ("enumeral and non-enumeral type in conditional expression");
3468       
3469       arg2 = perform_implicit_conversion (result_type, arg2);
3470       arg3 = perform_implicit_conversion (result_type, arg3);
3471     }
3472   /* [expr.cond]
3473
3474      --The second and third operands have pointer type, or one has
3475        pointer type and the other is a null pointer constant; pointer
3476        conversions (_conv.ptr_) and qualification conversions
3477        (_conv.qual_) are performed to bring them to their composite
3478        pointer type (_expr.rel_).  The result is of the composite
3479        pointer type.
3480
3481      --The second and third operands have pointer to member type, or
3482        one has pointer to member type and the other is a null pointer
3483        constant; pointer to member conversions (_conv.mem_) and
3484        qualification conversions (_conv.qual_) are performed to bring
3485        them to a common type, whose cv-qualification shall match the
3486        cv-qualification of either the second or the third operand.
3487        The result is of the common type.  */
3488   else if ((null_ptr_cst_p (arg2) 
3489             && (TYPE_PTR_P (arg3_type) || TYPE_PTRMEM_P (arg3_type)
3490                 || TYPE_PTRMEMFUNC_P (arg3_type)))
3491            || (null_ptr_cst_p (arg3) 
3492                && (TYPE_PTR_P (arg2_type) || TYPE_PTRMEM_P (arg2_type)
3493                 || TYPE_PTRMEMFUNC_P (arg2_type)))
3494            || (TYPE_PTR_P (arg2_type) && TYPE_PTR_P (arg3_type))
3495            || (TYPE_PTRMEM_P (arg2_type) && TYPE_PTRMEM_P (arg3_type))
3496            || (TYPE_PTRMEMFUNC_P (arg2_type) 
3497                && TYPE_PTRMEMFUNC_P (arg3_type)))
3498     {
3499       result_type = composite_pointer_type (arg2_type, arg3_type, arg2,
3500                                             arg3, "conditional expression");
3501       arg2 = perform_implicit_conversion (result_type, arg2);
3502       arg3 = perform_implicit_conversion (result_type, arg3);
3503     }
3504
3505   if (!result_type)
3506     {
3507       error ("operands to ?: have different types");
3508       return error_mark_node;
3509     }
3510
3511  valid_operands:
3512   result = fold (build (COND_EXPR, result_type, arg1, arg2, arg3));
3513   /* Expand both sides into the same slot, hopefully the target of the
3514      ?: expression.  We used to check for TARGET_EXPRs here, but now we
3515      sometimes wrap them in NOP_EXPRs so the test would fail.  */
3516   if (!lvalue_p && IS_AGGR_TYPE (result_type))
3517     result = build_target_expr_with_type (result, result_type);
3518   
3519   /* If this expression is an rvalue, but might be mistaken for an
3520      lvalue, we must add a NON_LVALUE_EXPR.  */
3521   if (!lvalue_p && real_lvalue_p (result))
3522     result = build1 (NON_LVALUE_EXPR, result_type, result);
3523
3524   return result;
3525 }
3526
3527 /* OPERAND is an operand to an expression.  Perform necessary steps
3528    required before using it.  If OPERAND is NULL_TREE, NULL_TREE is
3529    returned.  */
3530
3531 static tree
3532 prep_operand (tree operand)
3533 {
3534   if (operand)
3535     {
3536       if (TREE_CODE (operand) == OFFSET_REF)
3537         operand = resolve_offset_ref (operand);
3538       operand = convert_from_reference (operand);
3539       if (CLASS_TYPE_P (TREE_TYPE (operand))
3540           && CLASSTYPE_TEMPLATE_INSTANTIATION (TREE_TYPE (operand)))
3541         /* Make sure the template type is instantiated now.  */
3542         instantiate_class_template (TYPE_MAIN_VARIANT (TREE_TYPE (operand)));
3543     }
3544
3545   return operand;
3546 }
3547
3548 /* Add each of the viable functions in FNS (a FUNCTION_DECL or
3549    OVERLOAD) to the CANDIDATES, returning an updated list of
3550    CANDIDATES.  The ARGS are the arguments provided to the call,
3551    without any implicit object parameter.  The EXPLICIT_TARGS are
3552    explicit template arguments provided.  TEMPLATE_ONLY is true if
3553    only template fucntions should be considered.  CONVERSION_PATH,
3554    ACCESS_PATH, and FLAGS are as for add_function_candidate.  */
3555
3556 static void
3557 add_candidates (tree fns, tree args, 
3558                 tree explicit_targs, bool template_only,
3559                 tree conversion_path, tree access_path,
3560                 int flags,
3561                 struct z_candidate **candidates)
3562 {
3563   tree ctype;
3564   tree non_static_args;
3565
3566   ctype = conversion_path ? BINFO_TYPE (conversion_path) : NULL_TREE;
3567   /* Delay creating the implicit this parameter until it is needed.  */
3568   non_static_args = NULL_TREE;
3569
3570   while (fns) 
3571     {
3572       tree fn;
3573       tree fn_args;
3574
3575       fn = OVL_CURRENT (fns);
3576       /* Figure out which set of arguments to use.  */
3577       if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
3578         {
3579           /* If this function is a non-static member, prepend the implicit
3580              object parameter.  */
3581           if (!non_static_args)
3582             non_static_args = tree_cons (NULL_TREE,
3583                                          build_this (TREE_VALUE (args)),
3584                                          TREE_CHAIN (args));
3585           fn_args = non_static_args;
3586         }
3587       else
3588         /* Otherwise, just use the list of arguments provided.  */
3589         fn_args = args;
3590
3591       if (TREE_CODE (fn) == TEMPLATE_DECL)
3592         add_template_candidate (candidates, 
3593                                 fn, 
3594                                 ctype,
3595                                 explicit_targs,
3596                                 fn_args,
3597                                 NULL_TREE,
3598                                 access_path,
3599                                 conversion_path,
3600                                 flags,
3601                                 DEDUCE_CALL);
3602       else if (!template_only)
3603         add_function_candidate (candidates,
3604                                 fn,
3605                                 ctype,
3606                                 fn_args,
3607                                 access_path,
3608                                 conversion_path,
3609                                 flags);
3610       fns = OVL_NEXT (fns);
3611     }
3612 }
3613
3614 tree
3615 build_new_op (enum tree_code code, int flags, tree arg1, tree arg2, tree arg3)
3616 {
3617   struct z_candidate *candidates = 0, *cand;
3618   tree arglist, fnname;
3619   tree args[3];
3620   enum tree_code code2 = NOP_EXPR;
3621   tree conv;
3622   bool strict_p;
3623   bool any_viable_p;
3624
3625   if (error_operand_p (arg1) 
3626       || error_operand_p (arg2) 
3627       || error_operand_p (arg3))
3628     return error_mark_node;
3629
3630   if (code == MODIFY_EXPR)
3631     {
3632       code2 = TREE_CODE (arg3);
3633       arg3 = NULL_TREE;
3634       fnname = ansi_assopname (code2);
3635     }
3636   else
3637     fnname = ansi_opname (code);
3638
3639   arg1 = prep_operand (arg1);
3640   
3641   switch (code)
3642     {
3643     case NEW_EXPR:
3644     case VEC_NEW_EXPR:
3645     case VEC_DELETE_EXPR:
3646     case DELETE_EXPR:
3647       /* Use build_op_new_call and build_op_delete_call instead.  */
3648       abort ();
3649
3650     case CALL_EXPR:
3651       return build_object_call (arg1, arg2);
3652
3653     default:
3654       break;
3655     }
3656
3657   arg2 = prep_operand (arg2);
3658   arg3 = prep_operand (arg3);
3659   
3660   if (code == COND_EXPR)
3661     {
3662       if (arg2 == NULL_TREE
3663           || TREE_CODE (TREE_TYPE (arg2)) == VOID_TYPE
3664           || TREE_CODE (TREE_TYPE (arg3)) == VOID_TYPE
3665           || (! IS_OVERLOAD_TYPE (TREE_TYPE (arg2))
3666               && ! IS_OVERLOAD_TYPE (TREE_TYPE (arg3))))
3667         goto builtin;
3668     }
3669   else if (! IS_OVERLOAD_TYPE (TREE_TYPE (arg1))
3670            && (! arg2 || ! IS_OVERLOAD_TYPE (TREE_TYPE (arg2))))
3671     goto builtin;
3672
3673   if (code == POSTINCREMENT_EXPR || code == POSTDECREMENT_EXPR)
3674     arg2 = integer_zero_node;
3675
3676   arglist = NULL_TREE;
3677   if (arg3)
3678     arglist = tree_cons (NULL_TREE, arg3, arglist);
3679   if (arg2)
3680     arglist = tree_cons (NULL_TREE, arg2, arglist);
3681   arglist = tree_cons (NULL_TREE, arg1, arglist);
3682
3683   /* Add namespace-scope operators to the list of functions to
3684      consider.  */
3685   add_candidates (lookup_function_nonclass (fnname, arglist),
3686                   arglist, NULL_TREE, false, NULL_TREE, NULL_TREE,
3687                   flags, &candidates);
3688   /* Add class-member operators to the candidate set.  */
3689   if (CLASS_TYPE_P (TREE_TYPE (arg1)))
3690     {
3691       tree fns;
3692
3693       fns = lookup_fnfields (TYPE_BINFO (TREE_TYPE (arg1)), fnname, 1);
3694       if (fns == error_mark_node)
3695         return fns;
3696       if (fns)
3697         add_candidates (BASELINK_FUNCTIONS (fns), arglist, 
3698                         NULL_TREE, false,
3699                         BASELINK_BINFO (fns),
3700                         TYPE_BINFO (TREE_TYPE (arg1)),
3701                         flags, &candidates);
3702     }
3703
3704   /* Rearrange the arguments for ?: so that add_builtin_candidate only has
3705      to know about two args; a builtin candidate will always have a first
3706      parameter of type bool.  We'll handle that in
3707      build_builtin_candidate.  */
3708   if (code == COND_EXPR)
3709     {
3710       args[0] = arg2;
3711       args[1] = arg3;
3712       args[2] = arg1;
3713     }
3714   else
3715     {
3716       args[0] = arg1;
3717       args[1] = arg2;
3718       args[2] = NULL_TREE;
3719     }
3720
3721   add_builtin_candidates (&candidates, code, code2, fnname, args, flags);
3722
3723   switch (code)
3724     {
3725     case COMPOUND_EXPR:
3726     case ADDR_EXPR:
3727       /* For these, the built-in candidates set is empty
3728          [over.match.oper]/3.  We don't want non-strict matches
3729          because exact matches are always possible with built-in
3730          operators.  The built-in candidate set for COMPONENT_REF
3731          would be empty too, but since there are no such built-in
3732          operators, we accept non-strict matches for them.  */
3733       strict_p = true;
3734       break;
3735
3736     default:
3737       strict_p = pedantic;
3738       break;
3739     }      
3740
3741   candidates = splice_viable (candidates, strict_p, &any_viable_p);
3742   if (!any_viable_p)
3743     {
3744       switch (code)
3745         {
3746         case POSTINCREMENT_EXPR:
3747         case POSTDECREMENT_EXPR:
3748           /* Look for an `operator++ (int)'.  If they didn't have
3749              one, then we fall back to the old way of doing things.  */
3750           if (flags & LOOKUP_COMPLAIN)
3751             pedwarn ("no `%D(int)' declared for postfix `%s', trying prefix operator instead",
3752                         fnname, 
3753                         operator_name_info[code].name);
3754           if (code == POSTINCREMENT_EXPR)
3755             code = PREINCREMENT_EXPR;
3756           else
3757             code = PREDECREMENT_EXPR;   
3758           return build_new_op (code, flags, arg1, NULL_TREE, NULL_TREE);
3759           
3760           /* The caller will deal with these.  */
3761         case ADDR_EXPR:
3762         case COMPOUND_EXPR:
3763         case COMPONENT_REF:
3764           return NULL_TREE;
3765
3766         default:
3767           break;
3768         }
3769       if (flags & LOOKUP_COMPLAIN)
3770         {
3771           op_error (code, code2, arg1, arg2, arg3, "no match");
3772           print_z_candidates (candidates);
3773         }
3774       return error_mark_node;
3775     }
3776
3777   cand = tourney (candidates);
3778   if (cand == 0)
3779     {
3780       if (flags & LOOKUP_COMPLAIN)
3781         {
3782           op_error (code, code2, arg1, arg2, arg3, "ambiguous overload");
3783           print_z_candidates (candidates);
3784         }
3785       return error_mark_node;
3786     }
3787
3788   if (TREE_CODE (cand->fn) == FUNCTION_DECL)
3789     {
3790       if (warn_synth
3791           && fnname == ansi_assopname (NOP_EXPR)
3792           && DECL_ARTIFICIAL (cand->fn)
3793           && candidates->next
3794           && ! candidates->next->next)
3795         {
3796           warning ("using synthesized `%#D' for copy assignment",
3797                       cand->fn);
3798           cp_warning_at ("  where cfront would use `%#D'",
3799                          cand == candidates
3800                          ? candidates->next->fn
3801                          : candidates->fn);
3802         }
3803
3804       return build_over_call (cand, LOOKUP_NORMAL);
3805     }
3806
3807   /* Check for comparison of different enum types.  */
3808   switch (code)
3809     {
3810     case GT_EXPR:
3811     case LT_EXPR:
3812     case GE_EXPR:
3813     case LE_EXPR:
3814     case EQ_EXPR:
3815     case NE_EXPR:
3816       if (TREE_CODE (TREE_TYPE (arg1)) == ENUMERAL_TYPE 
3817           && TREE_CODE (TREE_TYPE (arg2)) == ENUMERAL_TYPE 
3818           && (TYPE_MAIN_VARIANT (TREE_TYPE (arg1))
3819               != TYPE_MAIN_VARIANT (TREE_TYPE (arg2))))
3820         {
3821           warning ("comparison between `%#T' and `%#T'", 
3822                       TREE_TYPE (arg1), TREE_TYPE (arg2));
3823         }
3824       break;
3825     default:
3826       break;
3827     }
3828
3829   /* We need to strip any leading REF_BIND so that bitfields don't cause
3830      errors.  This should not remove any important conversions, because
3831      builtins don't apply to class objects directly.  */
3832   conv = TREE_VEC_ELT (cand->convs, 0);
3833   if (TREE_CODE (conv) == REF_BIND)
3834     conv = TREE_OPERAND (conv, 0);
3835   arg1 = convert_like (conv, arg1);
3836   if (arg2)
3837     {
3838       conv = TREE_VEC_ELT (cand->convs, 1);
3839       if (TREE_CODE (conv) == REF_BIND)
3840         conv = TREE_OPERAND (conv, 0);
3841       arg2 = convert_like (conv, arg2);
3842     }
3843   if (arg3)
3844     {
3845       conv = TREE_VEC_ELT (cand->convs, 2);
3846       if (TREE_CODE (conv) == REF_BIND)
3847         conv = TREE_OPERAND (conv, 0);
3848       arg3 = convert_like (conv, arg3);
3849     }
3850
3851 builtin:
3852   switch (code)
3853     {
3854     case MODIFY_EXPR:
3855       return build_modify_expr (arg1, code2, arg2);
3856
3857     case INDIRECT_REF:
3858       return build_indirect_ref (arg1, "unary *");
3859
3860     case PLUS_EXPR:
3861     case MINUS_EXPR:
3862     case MULT_EXPR:
3863     case TRUNC_DIV_EXPR:
3864     case GT_EXPR:
3865     case LT_EXPR:
3866     case GE_EXPR:
3867     case LE_EXPR:
3868     case EQ_EXPR:
3869     case NE_EXPR:
3870     case MAX_EXPR:
3871     case MIN_EXPR:
3872     case LSHIFT_EXPR:
3873     case RSHIFT_EXPR:
3874     case TRUNC_MOD_EXPR:
3875     case BIT_AND_EXPR:
3876     case BIT_IOR_EXPR:
3877     case BIT_XOR_EXPR:
3878     case TRUTH_ANDIF_EXPR:
3879     case TRUTH_ORIF_EXPR:
3880       return cp_build_binary_op (code, arg1, arg2);
3881
3882     case CONVERT_EXPR:
3883     case NEGATE_EXPR:
3884     case BIT_NOT_EXPR:
3885     case TRUTH_NOT_EXPR:
3886     case PREINCREMENT_EXPR:
3887     case POSTINCREMENT_EXPR:
3888     case PREDECREMENT_EXPR:
3889     case POSTDECREMENT_EXPR:
3890     case REALPART_EXPR:
3891     case IMAGPART_EXPR:
3892       return build_unary_op (code, arg1, candidates != 0);
3893
3894     case ARRAY_REF:
3895       return build_array_ref (arg1, arg2);
3896
3897     case COND_EXPR:
3898       return build_conditional_expr (arg1, arg2, arg3);
3899
3900     case MEMBER_REF:
3901       return build_m_component_ref
3902         (build_indirect_ref (arg1, NULL), arg2);
3903
3904       /* The caller will deal with these.  */
3905     case ADDR_EXPR:
3906     case COMPONENT_REF:
3907     case COMPOUND_EXPR:
3908       return NULL_TREE;
3909
3910     default:
3911       abort ();
3912       return NULL_TREE;
3913     }
3914 }
3915
3916 /* Build a call to operator delete.  This has to be handled very specially,
3917    because the restrictions on what signatures match are different from all
3918    other call instances.  For a normal delete, only a delete taking (void *)
3919    or (void *, size_t) is accepted.  For a placement delete, only an exact
3920    match with the placement new is accepted.
3921
3922    CODE is either DELETE_EXPR or VEC_DELETE_EXPR.
3923    ADDR is the pointer to be deleted.
3924    SIZE is the size of the memory block to be deleted.
3925    FLAGS are the usual overloading flags.
3926    PLACEMENT is the corresponding placement new call, or NULL_TREE.  */
3927
3928 tree
3929 build_op_delete_call (enum tree_code code, tree addr, tree size,
3930                       int flags, tree placement)
3931 {
3932   tree fn = NULL_TREE;
3933   tree fns, fnname, fntype, argtypes, args, type;
3934   int pass;
3935
3936   if (addr == error_mark_node)
3937     return error_mark_node;
3938
3939   type = TREE_TYPE (TREE_TYPE (addr));
3940   while (TREE_CODE (type) == ARRAY_TYPE)
3941     type = TREE_TYPE (type);
3942
3943   fnname = ansi_opname (code);
3944
3945   if (IS_AGGR_TYPE (type) && ! (flags & LOOKUP_GLOBAL))
3946     /* In [class.free]
3947
3948        If the result of the lookup is ambiguous or inaccessible, or if
3949        the lookup selects a placement deallocation function, the
3950        program is ill-formed.
3951   
3952        Therefore, we ask lookup_fnfields to complain ambout ambiguity.  */
3953     {
3954       fns = lookup_fnfields (TYPE_BINFO (type), fnname, 1);
3955       if (fns == error_mark_node)
3956         return error_mark_node;
3957     }
3958   else
3959     fns = NULL_TREE;
3960
3961   if (fns == NULL_TREE)
3962     fns = lookup_name_nonclass (fnname);
3963
3964   if (placement)
3965     {
3966       tree alloc_fn;
3967       tree call_expr;
3968
3969       /* Find the allocation function that is being called.  */
3970       call_expr = placement;
3971       /* Sometimes we have a COMPOUND_EXPR, rather than a simple
3972          CALL_EXPR.  */
3973       while (TREE_CODE (call_expr) == COMPOUND_EXPR)
3974         call_expr = TREE_OPERAND (call_expr, 1);
3975       /* Extract the function.  */
3976       alloc_fn = get_callee_fndecl (call_expr);
3977       my_friendly_assert (alloc_fn != NULL_TREE, 20020327);
3978       /* Then the second parm type.  */
3979       argtypes = TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (alloc_fn)));
3980       /* Also the second argument.  */
3981       args = TREE_CHAIN (TREE_OPERAND (call_expr, 1));
3982     }
3983   else
3984     {
3985       /* First try it without the size argument.  */
3986       argtypes = void_list_node;
3987       args = NULL_TREE;
3988     }
3989
3990   /* Strip const and volatile from addr.  */
3991   addr = cp_convert (ptr_type_node, addr);
3992
3993   /* We make two tries at finding a matching `operator delete'.  On
3994      the first pass, we look for an one-operator (or placement)
3995      operator delete.  If we're not doing placement delete, then on
3996      the second pass we look for a two-argument delete.  */
3997   for (pass = 0; pass < (placement ? 1 : 2); ++pass) 
3998     {
3999       if (pass == 0)
4000         argtypes = tree_cons (NULL_TREE, ptr_type_node, argtypes);
4001       else 
4002         /* Normal delete; now try to find a match including the size
4003            argument.  */
4004         argtypes = tree_cons (NULL_TREE, ptr_type_node,
4005                               tree_cons (NULL_TREE, sizetype, 
4006                                          void_list_node));
4007       fntype = build_function_type (void_type_node, argtypes);
4008
4009       /* Go through the `operator delete' functions looking for one
4010          with a matching type.  */
4011       for (fn = BASELINK_P (fns) ? BASELINK_FUNCTIONS (fns) : fns; 
4012            fn; 
4013            fn = OVL_NEXT (fn))
4014         {
4015           tree t;
4016
4017           /* Exception specifications on the `delete' operator do not
4018              matter.  */
4019           t = build_exception_variant (TREE_TYPE (OVL_CURRENT (fn)),
4020                                        NULL_TREE);
4021           /* We also don't compare attributes.  We're really just
4022              trying to check the types of the first two parameters.  */
4023           if (comptypes (t, fntype, COMPARE_NO_ATTRIBUTES))
4024             break;
4025         }
4026
4027       /* If we found a match, we're done.  */
4028       if (fn)
4029         break;
4030     }
4031
4032   /* If we have a matching function, call it.  */
4033   if (fn)
4034     {
4035       /* Make sure we have the actual function, and not an
4036          OVERLOAD.  */
4037       fn = OVL_CURRENT (fn);
4038
4039       /* If the FN is a member function, make sure that it is
4040          accessible.  */
4041       if (DECL_CLASS_SCOPE_P (fn))
4042         enforce_access (type, fn);
4043
4044       if (pass == 0)
4045         args = tree_cons (NULL_TREE, addr, args);
4046       else
4047         args = tree_cons (NULL_TREE, addr, 
4048                           build_tree_list (NULL_TREE, size));
4049
4050       return build_function_call (fn, args);
4051     }
4052
4053   /* If we are doing placement delete we do nothing if we don't find a
4054      matching op delete.  */
4055   if (placement)
4056     return NULL_TREE;
4057
4058   error ("no suitable `operator delete' for `%T'", type);
4059   return error_mark_node;
4060 }
4061
4062 /* If the current scope isn't allowed to access DECL along
4063    BASETYPE_PATH, give an error.  The most derived class in
4064    BASETYPE_PATH is the one used to qualify DECL.  */
4065
4066 bool
4067 enforce_access (tree basetype_path, tree decl)
4068 {
4069   if (!accessible_p (basetype_path, decl))
4070     {
4071       if (TREE_PRIVATE (decl))
4072         cp_error_at ("`%+#D' is private", decl);
4073       else if (TREE_PROTECTED (decl))
4074         cp_error_at ("`%+#D' is protected", decl);
4075       else
4076         cp_error_at ("`%+#D' is inaccessible", decl);
4077       error ("within this context");
4078       return false;
4079     }
4080
4081   return true;
4082 }
4083
4084 /* Perform the conversions in CONVS on the expression EXPR. 
4085    FN and ARGNUM are used for diagnostics.  ARGNUM is zero based, -1
4086    indicates the `this' argument of a method.  INNER is nonzero when
4087    being called to continue a conversion chain. It is negative when a
4088    reference binding will be applied, positive otherwise.  */
4089
4090 static tree
4091 convert_like_real (tree convs, tree expr, tree fn, int argnum, int inner)
4092 {
4093   int savew, savee;
4094
4095   tree totype = TREE_TYPE (convs);
4096
4097   if (ICS_BAD_FLAG (convs)
4098       && TREE_CODE (convs) != USER_CONV
4099       && TREE_CODE (convs) != AMBIG_CONV
4100       && TREE_CODE (convs) != REF_BIND)
4101     {
4102       tree t = convs; 
4103       for (; t; t = TREE_OPERAND (t, 0))
4104         {
4105           if (TREE_CODE (t) == USER_CONV || !ICS_BAD_FLAG (t))
4106             {
4107               expr = convert_like_real (t, expr, fn, argnum, 1);
4108               break;
4109             }
4110           else if (TREE_CODE (t) == AMBIG_CONV)
4111             return convert_like_real (t, expr, fn, argnum, 1);
4112           else if (TREE_CODE (t) == IDENTITY_CONV)
4113             break;
4114         }
4115       pedwarn ("invalid conversion from `%T' to `%T'", TREE_TYPE (expr), totype);
4116       if (fn)
4117         pedwarn ("  initializing argument %P of `%D'", argnum, fn);
4118       return cp_convert (totype, expr);
4119     }
4120   
4121   if (!inner)
4122     expr = dubious_conversion_warnings
4123              (totype, expr, "argument", fn, argnum);
4124   switch (TREE_CODE (convs))
4125     {
4126     case USER_CONV:
4127       {
4128         struct z_candidate *cand = USER_CONV_CAND (convs);
4129         tree convfn = cand->fn;
4130         tree args;
4131
4132         if (DECL_CONSTRUCTOR_P (convfn))
4133           {
4134             tree t = build_int_2 (0, 0);
4135             TREE_TYPE (t) = build_pointer_type (DECL_CONTEXT (convfn));
4136
4137             args = build_tree_list (NULL_TREE, expr);
4138             if (DECL_HAS_IN_CHARGE_PARM_P (convfn)
4139                 || DECL_HAS_VTT_PARM_P (convfn))
4140               /* We should never try to call the abstract or base constructor
4141                  from here.  */
4142               abort ();
4143             args = tree_cons (NULL_TREE, t, args);
4144           }
4145         else
4146           args = build_this (expr);
4147         expr = build_over_call (cand, LOOKUP_NORMAL);
4148
4149         /* If this is a constructor or a function returning an aggr type,
4150            we need to build up a TARGET_EXPR.  */
4151         if (DECL_CONSTRUCTOR_P (convfn))
4152           expr = build_cplus_new (totype, expr);
4153
4154         /* The result of the call is then used to direct-initialize the object
4155            that is the destination of the copy-initialization.  [dcl.init]
4156
4157            Note that this step is not reflected in the conversion sequence;
4158            it affects the semantics when we actually perform the
4159            conversion, but is not considered during overload resolution.
4160
4161            If the target is a class, that means call a ctor.  */
4162         if (IS_AGGR_TYPE (totype)
4163             && (inner >= 0 || !lvalue_p (expr)))
4164           {
4165             savew = warningcount, savee = errorcount;
4166             expr = build_special_member_call
4167               (NULL_TREE, complete_ctor_identifier,
4168                build_tree_list (NULL_TREE, expr), TYPE_BINFO (totype),
4169                /* Core issue 84, now a DR, says that we don't allow UDCs
4170                   for these args (which deliberately breaks copy-init of an
4171                   auto_ptr<Base> from an auto_ptr<Derived>).  */
4172                LOOKUP_NORMAL|LOOKUP_ONLYCONVERTING|LOOKUP_NO_CONVERSION);
4173
4174             /* Tell the user where this failing constructor call came from.  */
4175             if (fn)
4176               {
4177                 if (warningcount > savew)
4178                   warning
4179                     ("  initializing argument %P of `%D' from result of `%D'",
4180                      argnum, fn, convfn);
4181                 else if (errorcount > savee)
4182                   error
4183                     ("  initializing argument %P of `%D' from result of `%D'",
4184                      argnum, fn, convfn);
4185               }
4186             else
4187               {
4188                 if (warningcount > savew)
4189                   warning ("  initializing temporary from result of `%D'",
4190                               convfn);
4191                 else if (errorcount > savee)
4192                   error ("  initializing temporary from result of `%D'",
4193                             convfn);
4194               }
4195             expr = build_cplus_new (totype, expr);
4196           }
4197         return expr;
4198       }
4199     case IDENTITY_CONV:
4200       if (type_unknown_p (expr))
4201         expr = instantiate_type (totype, expr, tf_error | tf_warning);
4202       /* Convert a non-array constant variable to its underlying value, unless we
4203          are about to bind it to a reference, in which case we need to
4204          leave it as an lvalue.  */
4205       if (inner >= 0
4206           && TREE_CODE (TREE_TYPE (expr)) != ARRAY_TYPE)
4207         expr = decl_constant_value (expr);
4208       return expr;
4209     case AMBIG_CONV:
4210       /* Call build_user_type_conversion again for the error.  */
4211       return build_user_type_conversion
4212         (totype, TREE_OPERAND (convs, 0), LOOKUP_NORMAL);
4213
4214     default:
4215       break;
4216     };
4217
4218   expr = convert_like_real (TREE_OPERAND (convs, 0), expr, fn, argnum,
4219                             TREE_CODE (convs) == REF_BIND ? -1 : 1);
4220   if (expr == error_mark_node)
4221     return error_mark_node;
4222
4223   switch (TREE_CODE (convs))
4224     {
4225     case RVALUE_CONV:
4226       if (! IS_AGGR_TYPE (totype))
4227         return expr;
4228       /* else fall through */
4229     case BASE_CONV:
4230       if (TREE_CODE (convs) == BASE_CONV && !NEED_TEMPORARY_P (convs))
4231         {
4232           /* We are going to bind a reference directly to a base-class
4233              subobject of EXPR.  */
4234           tree base_ptr = build_pointer_type (totype);
4235
4236           /* Build an expression for `*((base*) &expr)'.  */
4237           expr = build_unary_op (ADDR_EXPR, expr, 0);
4238           expr = perform_implicit_conversion (base_ptr, expr);
4239           expr = build_indirect_ref (expr, "implicit conversion");
4240           return expr;
4241         }
4242
4243       /* Copy-initialization where the cv-unqualified version of the source
4244          type is the same class as, or a derived class of, the class of the
4245          destination [is treated as direct-initialization].  [dcl.init] */
4246       savew = warningcount, savee = errorcount;
4247       expr = build_special_member_call (NULL_TREE, complete_ctor_identifier,
4248                                         build_tree_list (NULL_TREE, expr),
4249                                         TYPE_BINFO (totype),
4250                                         LOOKUP_NORMAL|LOOKUP_ONLYCONVERTING);
4251       if (fn)
4252         {
4253           if (warningcount > savew)
4254             warning ("  initializing argument %P of `%D'", argnum, fn);
4255           else if (errorcount > savee)
4256             error ("  initializing argument %P of `%D'", argnum, fn);
4257         }
4258       return build_cplus_new (totype, expr);
4259
4260     case REF_BIND:
4261       {
4262         tree ref_type = totype;
4263
4264         /* If necessary, create a temporary.  */
4265         if (NEED_TEMPORARY_P (convs) || !non_cast_lvalue_p (expr))
4266           {
4267             tree type = TREE_TYPE (TREE_OPERAND (convs, 0));
4268             expr = build_target_expr_with_type (expr, type);
4269           }
4270
4271         /* Take the address of the thing to which we will bind the
4272            reference.  */
4273         expr = build_unary_op (ADDR_EXPR, expr, 1);
4274         if (expr == error_mark_node)
4275           return error_mark_node;
4276
4277         /* Convert it to a pointer to the type referred to by the
4278            reference.  This will adjust the pointer if a derived to
4279            base conversion is being performed.  */
4280         expr = cp_convert (build_pointer_type (TREE_TYPE (ref_type)), 
4281                            expr);
4282         /* Convert the pointer to the desired reference type.  */
4283         return build_nop (ref_type, expr);
4284       }
4285
4286     case LVALUE_CONV:
4287       return decay_conversion (expr);
4288
4289     case QUAL_CONV:
4290       /* Warn about deprecated conversion if appropriate.  */
4291       string_conv_p (totype, expr, 1);
4292       break;
4293       
4294     default:
4295       break;
4296     }
4297   return ocp_convert (totype, expr, CONV_IMPLICIT,
4298                       LOOKUP_NORMAL|LOOKUP_NO_CONVERSION);
4299 }
4300
4301 /* Build a call to __builtin_trap which can be used in an expression.  */
4302
4303 static tree
4304 call_builtin_trap (void)
4305 {
4306   tree fn = get_identifier ("__builtin_trap");
4307   if (IDENTIFIER_GLOBAL_VALUE (fn))
4308     fn = IDENTIFIER_GLOBAL_VALUE (fn);
4309   else
4310     abort ();
4311
4312   fn = build_call (fn, NULL_TREE);
4313   fn = build (COMPOUND_EXPR, integer_type_node, fn, integer_zero_node);
4314   return fn;
4315 }
4316
4317 /* ARG is being passed to a varargs function.  Perform any conversions
4318    required.  Array/function to pointer decay must have already happened.
4319    Return the converted value.  */
4320
4321 tree
4322 convert_arg_to_ellipsis (tree arg)
4323 {
4324   if (TREE_CODE (TREE_TYPE (arg)) == REAL_TYPE
4325       && (TYPE_PRECISION (TREE_TYPE (arg))
4326           < TYPE_PRECISION (double_type_node)))
4327     /* Convert `float' to `double'.  */
4328     arg = cp_convert (double_type_node, arg);
4329   else
4330     /* Convert `short' and `char' to full-size `int'.  */
4331     arg = default_conversion (arg);
4332
4333   arg = require_complete_type (arg);
4334   
4335   if (arg != error_mark_node && ! pod_type_p (TREE_TYPE (arg)))
4336     {
4337       /* Undefined behavior [expr.call] 5.2.2/7.  We used to just warn
4338          here and do a bitwise copy, but now cp_expr_size will abort if we
4339          try to do that.  */
4340       warning ("cannot pass objects of non-POD type `%#T' through `...'; \
4341 call will abort at runtime",
4342                TREE_TYPE (arg));
4343       arg = call_builtin_trap ();
4344     }
4345
4346   return arg;
4347 }
4348
4349 /* va_arg (EXPR, TYPE) is a builtin. Make sure it is not abused.  */
4350
4351 tree
4352 build_x_va_arg (tree expr, tree type)
4353 {
4354   if (processing_template_decl)
4355     return build_min (VA_ARG_EXPR, type, expr);
4356   
4357   type = complete_type_or_else (type, NULL_TREE);
4358
4359   if (expr == error_mark_node || !type)
4360     return error_mark_node;
4361   
4362   if (! pod_type_p (type))
4363     {
4364       /* Undefined behavior [expr.call] 5.2.2/7.  */
4365       warning ("cannot receive objects of non-POD type `%#T' through `...'",
4366                   type);
4367     }
4368   
4369   return build_va_arg (expr, type);
4370 }
4371
4372 /* TYPE has been given to va_arg.  Apply the default conversions which
4373    would have happened when passed via ellipsis.  Return the promoted
4374    type, or the passed type if there is no change.  */
4375
4376 tree
4377 cxx_type_promotes_to (tree type)
4378 {
4379   tree promote;
4380
4381   if (TREE_CODE (type) == ARRAY_TYPE)
4382     return build_pointer_type (TREE_TYPE (type));
4383
4384   if (TREE_CODE (type) == FUNCTION_TYPE)
4385     return build_pointer_type (type);
4386
4387   promote = type_promotes_to (type);
4388   if (same_type_p (type, promote))
4389     promote = type;
4390   
4391   return promote;
4392 }
4393
4394 /* ARG is a default argument expression being passed to a parameter of
4395    the indicated TYPE, which is a parameter to FN.  Do any required
4396    conversions.  Return the converted value.  */
4397
4398 tree
4399 convert_default_arg (tree type, tree arg, tree fn, int parmnum)
4400 {
4401   /* If the ARG is an unparsed default argument expression, the
4402      conversion cannot be performed.  */
4403   if (TREE_CODE (arg) == DEFAULT_ARG)
4404     {
4405       error ("the default argument for parameter %d of `%D' has "
4406              "not yet been parsed",
4407              parmnum, fn);
4408       return error_mark_node;
4409     }
4410
4411   if (fn && DECL_TEMPLATE_INFO (fn))
4412     arg = tsubst_default_argument (fn, type, arg);
4413
4414   arg = break_out_target_exprs (arg);
4415
4416   if (TREE_CODE (arg) == CONSTRUCTOR)
4417     {
4418       arg = digest_init (type, arg, 0);
4419       arg = convert_for_initialization (0, type, arg, LOOKUP_NORMAL,
4420                                         "default argument", fn, parmnum);
4421     }
4422   else
4423     {
4424       /* This could get clobbered by the following call.  */
4425       if (TREE_HAS_CONSTRUCTOR (arg))
4426         arg = copy_node (arg);
4427
4428       arg = convert_for_initialization (0, type, arg, LOOKUP_NORMAL,
4429                                         "default argument", fn, parmnum);
4430       arg = convert_for_arg_passing (type, arg);
4431     }
4432
4433   return arg;
4434 }
4435
4436 /* Returns the type which will really be used for passing an argument of
4437    type TYPE.  */
4438
4439 tree
4440 type_passed_as (tree type)
4441 {
4442   /* Pass classes with copy ctors by invisible reference.  */
4443   if (TREE_ADDRESSABLE (type))
4444     type = build_reference_type (type);
4445   else if (PROMOTE_PROTOTYPES
4446            && INTEGRAL_TYPE_P (type)
4447            && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
4448     type = integer_type_node;
4449
4450   return type;
4451 }
4452
4453 /* Actually perform the appropriate conversion.  */
4454
4455 tree
4456 convert_for_arg_passing (tree type, tree val)
4457 {
4458   if (val == error_mark_node)
4459     ;
4460   /* Pass classes with copy ctors by invisible reference.  */
4461   else if (TREE_ADDRESSABLE (type))
4462     val = build1 (ADDR_EXPR, build_reference_type (type), val);
4463   else if (PROMOTE_PROTOTYPES
4464            && INTEGRAL_TYPE_P (type)
4465            && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
4466     val = default_conversion (val);
4467   return val;
4468 }
4469
4470 /* Subroutine of the various build_*_call functions.  Overload resolution
4471    has chosen a winning candidate CAND; build up a CALL_EXPR accordingly.
4472    ARGS is a TREE_LIST of the unconverted arguments to the call.  FLAGS is a
4473    bitmask of various LOOKUP_* flags which apply to the call itself.  */
4474
4475 static tree
4476 build_over_call (struct z_candidate *cand, int flags)
4477 {
4478   tree fn = cand->fn;
4479   tree args = cand->args;
4480   tree convs = cand->convs;
4481   tree converted_args = NULL_TREE;
4482   tree parm = TYPE_ARG_TYPES (TREE_TYPE (fn));
4483   tree conv, arg, val;
4484   int i = 0;
4485   int is_method = 0;
4486
4487   /* Give any warnings we noticed during overload resolution.  */
4488   if (cand->warnings)
4489     for (val = cand->warnings; val; val = TREE_CHAIN (val))
4490       joust (cand, WRAPPER_ZC (TREE_VALUE (val)), 1);
4491
4492   if (DECL_FUNCTION_MEMBER_P (fn))
4493     enforce_access (cand->access_path, fn);
4494
4495   if (args && TREE_CODE (args) != TREE_LIST)
4496     args = build_tree_list (NULL_TREE, args);
4497   arg = args;
4498
4499   /* The implicit parameters to a constructor are not considered by overload
4500      resolution, and must be of the proper type.  */
4501   if (DECL_CONSTRUCTOR_P (fn))
4502     {
4503       converted_args = tree_cons (NULL_TREE, TREE_VALUE (arg), converted_args);
4504       arg = TREE_CHAIN (arg);
4505       parm = TREE_CHAIN (parm);
4506       if (DECL_HAS_IN_CHARGE_PARM_P (fn))
4507         /* We should never try to call the abstract constructor.  */
4508         abort ();
4509       if (DECL_HAS_VTT_PARM_P (fn))
4510         {
4511           converted_args = tree_cons
4512             (NULL_TREE, TREE_VALUE (arg), converted_args);
4513           arg = TREE_CHAIN (arg);
4514           parm = TREE_CHAIN (parm);
4515         }
4516     }      
4517   /* Bypass access control for 'this' parameter.  */
4518   else if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
4519     {
4520       tree parmtype = TREE_VALUE (parm);
4521       tree argtype = TREE_TYPE (TREE_VALUE (arg));
4522       tree converted_arg;
4523       tree base_binfo;
4524       
4525       if (ICS_BAD_FLAG (TREE_VEC_ELT (convs, i)))
4526         pedwarn ("passing `%T' as `this' argument of `%#D' discards qualifiers",
4527                     TREE_TYPE (argtype), fn);
4528
4529       /* [class.mfct.nonstatic]: If a nonstatic member function of a class
4530          X is called for an object that is not of type X, or of a type
4531          derived from X, the behavior is undefined.
4532
4533          So we can assume that anything passed as 'this' is non-null, and
4534          optimize accordingly.  */
4535       my_friendly_assert (TREE_CODE (parmtype) == POINTER_TYPE, 19990811);
4536       /* Convert to the base in which the function was declared.  */
4537       my_friendly_assert (cand->conversion_path != NULL_TREE, 20020730);
4538       converted_arg = build_base_path (PLUS_EXPR,
4539                                        TREE_VALUE (arg),
4540                                        cand->conversion_path,
4541                                        1);
4542       /* If fn was found by a using declaration, the conversion path
4543          will be to the derived class, not the base declaring fn. We
4544          must convert from derived to base.  */
4545       base_binfo = lookup_base (TREE_TYPE (TREE_TYPE (converted_arg)),
4546                                 TREE_TYPE (parmtype), ba_ignore, NULL);
4547       
4548       converted_arg = build_base_path (PLUS_EXPR, converted_arg,
4549                                        base_binfo, 1);
4550       
4551       converted_args = tree_cons (NULL_TREE, converted_arg, converted_args);
4552       parm = TREE_CHAIN (parm);
4553       arg = TREE_CHAIN (arg);
4554       ++i;
4555       is_method = 1;
4556     }
4557
4558   for (; arg && parm;
4559        parm = TREE_CHAIN (parm), arg = TREE_CHAIN (arg), ++i)
4560     {
4561       tree type = TREE_VALUE (parm);
4562
4563       conv = TREE_VEC_ELT (convs, i);
4564       val = convert_like_with_context
4565         (conv, TREE_VALUE (arg), fn, i - is_method);
4566
4567       val = convert_for_arg_passing (type, val);
4568       converted_args = tree_cons (NULL_TREE, val, converted_args);
4569     }
4570
4571   /* Default arguments */
4572   for (; parm && parm != void_list_node; parm = TREE_CHAIN (parm), i++)
4573     converted_args 
4574       = tree_cons (NULL_TREE, 
4575                    convert_default_arg (TREE_VALUE (parm), 
4576                                         TREE_PURPOSE (parm),
4577                                         fn, i - is_method),
4578                    converted_args);
4579
4580   /* Ellipsis */
4581   for (; arg; arg = TREE_CHAIN (arg))
4582     converted_args 
4583       = tree_cons (NULL_TREE,
4584                    convert_arg_to_ellipsis (TREE_VALUE (arg)),
4585                    converted_args);
4586
4587   converted_args = nreverse (converted_args);
4588
4589   if (warn_format)
4590     check_function_format (NULL, TYPE_ATTRIBUTES (TREE_TYPE (fn)),
4591                            converted_args);
4592
4593   /* Avoid actually calling copy constructors and copy assignment operators,
4594      if possible.  */
4595
4596   if (! flag_elide_constructors)
4597     /* Do things the hard way.  */;
4598   else if (TREE_VEC_LENGTH (convs) == 1
4599            && DECL_COPY_CONSTRUCTOR_P (fn))
4600     {
4601       tree targ;
4602       arg = skip_artificial_parms_for (fn, converted_args);
4603       arg = TREE_VALUE (arg);
4604
4605       /* Pull out the real argument, disregarding const-correctness.  */
4606       targ = arg;
4607       while (TREE_CODE (targ) == NOP_EXPR
4608              || TREE_CODE (targ) == NON_LVALUE_EXPR
4609              || TREE_CODE (targ) == CONVERT_EXPR)
4610         targ = TREE_OPERAND (targ, 0);
4611       if (TREE_CODE (targ) == ADDR_EXPR)
4612         {
4613           targ = TREE_OPERAND (targ, 0);
4614           if (!same_type_ignoring_top_level_qualifiers_p 
4615               (TREE_TYPE (TREE_TYPE (arg)), TREE_TYPE (targ)))
4616             targ = NULL_TREE;
4617         }
4618       else
4619         targ = NULL_TREE;
4620
4621       if (targ)
4622         arg = targ;
4623       else
4624         arg = build_indirect_ref (arg, 0);
4625
4626       /* [class.copy]: the copy constructor is implicitly defined even if
4627          the implementation elided its use.  */
4628       if (TYPE_HAS_COMPLEX_INIT_REF (DECL_CONTEXT (fn)))
4629         mark_used (fn);
4630
4631       /* If we're creating a temp and we already have one, don't create a
4632          new one.  If we're not creating a temp but we get one, use
4633          INIT_EXPR to collapse the temp into our target.  Otherwise, if the
4634          ctor is trivial, do a bitwise copy with a simple TARGET_EXPR for a
4635          temp or an INIT_EXPR otherwise.  */
4636       if (integer_zerop (TREE_VALUE (args)))
4637         {
4638           if (TREE_CODE (arg) == TARGET_EXPR)
4639             return arg;
4640           else if (TYPE_HAS_TRIVIAL_INIT_REF (DECL_CONTEXT (fn)))
4641             return build_target_expr_with_type (arg, DECL_CONTEXT (fn));
4642         }
4643       else if (TREE_CODE (arg) == TARGET_EXPR
4644                || TYPE_HAS_TRIVIAL_INIT_REF (DECL_CONTEXT (fn)))
4645         {
4646           tree address;
4647           tree to = stabilize_reference
4648             (build_indirect_ref (TREE_VALUE (args), 0));
4649
4650           val = build (INIT_EXPR, DECL_CONTEXT (fn), to, arg);
4651           address = build_unary_op (ADDR_EXPR, val, 0);
4652           /* Avoid a warning about this expression, if the address is
4653              never used.  */
4654           TREE_USED (address) = 1;
4655           return address;
4656         }
4657     }
4658   else if (DECL_OVERLOADED_OPERATOR_P (fn) == NOP_EXPR
4659            && copy_fn_p (fn)
4660            && TYPE_HAS_TRIVIAL_ASSIGN_REF (DECL_CONTEXT (fn)))
4661     {
4662       tree to = stabilize_reference
4663         (build_indirect_ref (TREE_VALUE (converted_args), 0));
4664
4665       arg = build_indirect_ref (TREE_VALUE (TREE_CHAIN (converted_args)), 0);
4666       val = build (MODIFY_EXPR, TREE_TYPE (to), to, arg);
4667       return val;
4668     }
4669
4670   mark_used (fn);
4671
4672   if (DECL_VINDEX (fn) && (flags & LOOKUP_NONVIRTUAL) == 0)
4673     {
4674       tree t, *p = &TREE_VALUE (converted_args);
4675       tree binfo = lookup_base (TREE_TYPE (TREE_TYPE (*p)),
4676                                 DECL_CONTEXT (fn),
4677                                 ba_any, NULL);
4678       my_friendly_assert (binfo && binfo != error_mark_node, 20010730);
4679       
4680       *p = build_base_path (PLUS_EXPR, *p, binfo, 1);
4681       if (TREE_SIDE_EFFECTS (*p))
4682         *p = save_expr (*p);
4683       t = build_pointer_type (TREE_TYPE (fn));
4684       if (DECL_CONTEXT (fn) && TYPE_JAVA_INTERFACE (DECL_CONTEXT (fn)))
4685         fn = build_java_interface_fn_ref (fn, *p);
4686       else
4687         fn = build_vfn_ref (build_indirect_ref (*p, 0), DECL_VINDEX (fn));
4688       TREE_TYPE (fn) = t;
4689     }
4690   else if (DECL_INLINE (fn))
4691     fn = inline_conversion (fn);
4692   else
4693     fn = build_addr_func (fn);
4694
4695   /* Recognize certain built-in functions so we can make tree-codes
4696      other than CALL_EXPR.  We do this when it enables fold-const.c
4697      to do something useful.  */
4698
4699   if (TREE_CODE (fn) == ADDR_EXPR
4700       && TREE_CODE (TREE_OPERAND (fn, 0)) == FUNCTION_DECL
4701       && DECL_BUILT_IN (TREE_OPERAND (fn, 0)))
4702     {
4703       tree exp;
4704       exp = expand_tree_builtin (TREE_OPERAND (fn, 0), args, converted_args);
4705       if (exp)
4706         return exp;
4707     }
4708
4709   /* Some built-in function calls will be evaluated at
4710      compile-time in fold ().  */
4711   fn = fold (build_call (fn, converted_args));
4712   if (VOID_TYPE_P (TREE_TYPE (fn)))
4713     return fn;
4714   fn = require_complete_type (fn);
4715   if (fn == error_mark_node)
4716     return error_mark_node;
4717   if (IS_AGGR_TYPE (TREE_TYPE (fn)))
4718     fn = build_cplus_new (TREE_TYPE (fn), fn);
4719   return convert_from_reference (fn);
4720 }
4721
4722 static GTY(()) tree java_iface_lookup_fn;
4723
4724 /* Make an expression which yields the address of the Java interface
4725    method FN.  This is achieved by generating a call to libjava's
4726    _Jv_LookupInterfaceMethodIdx().  */
4727
4728 static tree
4729 build_java_interface_fn_ref (tree fn, tree instance)
4730 {
4731   tree lookup_args, lookup_fn, method, idx;
4732   tree klass_ref, iface, iface_ref;
4733   int i;
4734   
4735   if (!java_iface_lookup_fn)
4736     {
4737       tree endlink = build_void_list_node ();
4738       tree t = tree_cons (NULL_TREE, ptr_type_node,
4739                           tree_cons (NULL_TREE, ptr_type_node,
4740                                      tree_cons (NULL_TREE, java_int_type_node,
4741                                                 endlink)));
4742       java_iface_lookup_fn 
4743         = builtin_function ("_Jv_LookupInterfaceMethodIdx",
4744                             build_function_type (ptr_type_node, t),
4745                             0, NOT_BUILT_IN, NULL, NULL_TREE);
4746     }
4747
4748   /* Look up the pointer to the runtime java.lang.Class object for `instance'. 
4749      This is the first entry in the vtable.  */
4750   klass_ref = build_vtbl_ref (build_indirect_ref (instance, 0), 
4751                               integer_zero_node);
4752
4753   /* Get the java.lang.Class pointer for the interface being called.  */
4754   iface = DECL_CONTEXT (fn);
4755   iface_ref = lookup_field (iface, get_identifier ("class$"), 0, false);
4756   if (!iface_ref || TREE_CODE (iface_ref) != VAR_DECL
4757       || DECL_CONTEXT (iface_ref) != iface)
4758     {
4759       error ("could not find class$ field in java interface type `%T'", 
4760                 iface);
4761       return error_mark_node;
4762     }
4763   iface_ref = build1 (ADDR_EXPR, build_pointer_type (iface), iface_ref);
4764   
4765   /* Determine the itable index of FN.  */
4766   i = 1;
4767   for (method = TYPE_METHODS (iface); method; method = TREE_CHAIN (method))
4768     {
4769       if (!DECL_VIRTUAL_P (method))
4770         continue;
4771       if (fn == method)
4772         break;
4773       i++;
4774     }
4775   idx = build_int_2 (i, 0);
4776
4777   lookup_args = tree_cons (NULL_TREE, klass_ref, 
4778                            tree_cons (NULL_TREE, iface_ref,
4779                                       build_tree_list (NULL_TREE, idx)));
4780   lookup_fn = build1 (ADDR_EXPR, 
4781                       build_pointer_type (TREE_TYPE (java_iface_lookup_fn)),
4782                       java_iface_lookup_fn);
4783   return build (CALL_EXPR, ptr_type_node, lookup_fn, lookup_args, NULL_TREE);
4784 }
4785
4786 /* Returns the value to use for the in-charge parameter when making a
4787    call to a function with the indicated NAME.  */
4788
4789 tree
4790 in_charge_arg_for_name (tree name)
4791 {
4792   if (name == base_ctor_identifier
4793       || name == base_dtor_identifier)
4794     return integer_zero_node;
4795   else if (name == complete_ctor_identifier)
4796     return integer_one_node;
4797   else if (name == complete_dtor_identifier)
4798     return integer_two_node;
4799   else if (name == deleting_dtor_identifier)
4800     return integer_three_node;
4801
4802   /* This function should only be called with one of the names listed
4803      above.  */
4804   abort ();
4805   return NULL_TREE;
4806 }
4807
4808 /* Build a call to a constructor, destructor, or an assignment
4809    operator for INSTANCE, an expression with class type.  NAME
4810    indicates the special member function to call; ARGS are the
4811    arguments.  BINFO indicates the base of INSTANCE that is to be
4812    passed as the `this' parameter to the member function called.
4813
4814    FLAGS are the LOOKUP_* flags to use when processing the call.
4815
4816    If NAME indicates a complete object constructor, INSTANCE may be
4817    NULL_TREE.  In this case, the caller will call build_cplus_new to
4818    store the newly constructed object into a VAR_DECL.  */
4819
4820 tree
4821 build_special_member_call (tree instance, tree name, tree args, 
4822                            tree binfo, int flags)
4823 {
4824   tree fns;
4825   /* The type of the subobject to be constructed or destroyed.  */
4826   tree class_type;
4827
4828   my_friendly_assert (name == complete_ctor_identifier
4829                       || name == base_ctor_identifier
4830                       || name == complete_dtor_identifier
4831                       || name == base_dtor_identifier
4832                       || name == deleting_dtor_identifier
4833                       || name == ansi_assopname (NOP_EXPR),
4834                       20020712);
4835   my_friendly_assert (binfo != NULL_TREE, 20020712);
4836
4837   class_type = BINFO_TYPE (binfo);
4838
4839   /* Handle the special case where INSTANCE is NULL_TREE.  */
4840   if (name == complete_ctor_identifier && !instance)
4841     {
4842       instance = build_int_2 (0, 0);
4843       TREE_TYPE (instance) = build_pointer_type (class_type);
4844       instance = build1 (INDIRECT_REF, class_type, instance);
4845     }
4846   else if (name == complete_dtor_identifier 
4847            || name == base_dtor_identifier
4848            || name == deleting_dtor_identifier)
4849     my_friendly_assert (args == NULL_TREE, 20020712);
4850
4851   my_friendly_assert (instance != NULL_TREE, 20020712);
4852
4853   /* Resolve the name.  */
4854   if (!complete_type_or_else (BINFO_TYPE (binfo), NULL_TREE))
4855     return error_mark_node;
4856
4857   fns = lookup_fnfields (binfo, name, 1);
4858     
4859   /* When making a call to a constructor or destructor for a subobject
4860      that uses virtual base classes, pass down a pointer to a VTT for
4861      the subobject.  */
4862   if ((name == base_ctor_identifier
4863        || name == base_dtor_identifier)
4864       && TYPE_USES_VIRTUAL_BASECLASSES (class_type))
4865     {
4866       tree vtt;
4867       tree sub_vtt;
4868
4869       /* If the current function is a complete object constructor
4870          or destructor, then we fetch the VTT directly.
4871          Otherwise, we look it up using the VTT we were given.  */
4872       vtt = TREE_CHAIN (CLASSTYPE_VTABLES (current_class_type));
4873       vtt = decay_conversion (vtt);
4874       vtt = build (COND_EXPR, TREE_TYPE (vtt),
4875                    build (EQ_EXPR, boolean_type_node,
4876                           current_in_charge_parm, integer_zero_node),
4877                    current_vtt_parm,
4878                    vtt);
4879       my_friendly_assert (BINFO_SUBVTT_INDEX (binfo), 20010110);
4880       sub_vtt = build (PLUS_EXPR, TREE_TYPE (vtt), vtt,
4881                        BINFO_SUBVTT_INDEX (binfo));
4882
4883       args = tree_cons (NULL_TREE, sub_vtt, args);
4884     }
4885
4886   return build_new_method_call (instance, fns, args, binfo, flags);
4887 }
4888
4889 /* Return the NAME, as a C string.  The NAME indicates a function that
4890    is a member of TYPE.  *FREE_P is set to true if the caller must
4891    free the memory returned.  
4892
4893    Rather than go through all of this, we should simply set the names
4894    of constructors and destructors appropriately, and dispense with
4895    ctor_identifier, dtor_identifier, etc.  */
4896
4897 static char *
4898 name_as_c_string (tree name, tree type, bool *free_p)
4899 {
4900   char *pretty_name;
4901
4902   /* Assume that we will not allocate memory.  */
4903   *free_p = false;
4904   /* Constructors and destructors are special.  */
4905   if (IDENTIFIER_CTOR_OR_DTOR_P (name))
4906     {
4907       pretty_name 
4908         = (char *) IDENTIFIER_POINTER (constructor_name (type));
4909       /* For a destructor, add the '~'.  */
4910       if (name == complete_dtor_identifier
4911           || name == base_dtor_identifier
4912           || name == deleting_dtor_identifier)
4913         {
4914           pretty_name = concat ("~", pretty_name, NULL);
4915           /* Remember that we need to free the memory allocated.  */
4916           *free_p = true;
4917         }
4918     }
4919   else
4920     pretty_name = (char *) IDENTIFIER_POINTER (name);
4921
4922   return pretty_name;
4923 }
4924
4925 /* Build a call to "INSTANCE.FN (ARGS)".  */
4926
4927 tree
4928 build_new_method_call (tree instance, tree fns, tree args, 
4929                        tree conversion_path, int flags)
4930 {
4931   struct z_candidate *candidates = 0, *cand;
4932   tree explicit_targs = NULL_TREE;
4933   tree basetype = NULL_TREE;
4934   tree access_binfo;
4935   tree optype;
4936   tree mem_args = NULL_TREE, instance_ptr;
4937   tree name;
4938   tree user_args;
4939   tree call;
4940   tree fn;
4941   tree class_type;
4942   int template_only = 0;
4943   bool any_viable_p;
4944
4945   my_friendly_assert (instance != NULL_TREE, 20020729);
4946
4947   if (error_operand_p (instance) 
4948       || error_operand_p (fns)
4949       || args == error_mark_node)
4950     return error_mark_node;
4951
4952   /* Process the argument list.  */
4953   user_args = args;
4954   args = resolve_args (args);
4955   if (args == error_mark_node)
4956     return error_mark_node;
4957
4958   if (TREE_CODE (instance) == OFFSET_REF)
4959     instance = resolve_offset_ref (instance);
4960   if (TREE_CODE (TREE_TYPE (instance)) == REFERENCE_TYPE)
4961     instance = convert_from_reference (instance);
4962   basetype = TYPE_MAIN_VARIANT (TREE_TYPE (instance));
4963   instance_ptr = build_this (instance);
4964
4965   if (!BASELINK_P (fns))
4966     {
4967       call = build_field_call (instance_ptr, fns, args);
4968       if (call)
4969         return call;
4970       error ("call to non-function `%D'", fns);
4971       return error_mark_node;
4972     }
4973
4974   if (!conversion_path)
4975     conversion_path = BASELINK_BINFO (fns);
4976   access_binfo = BASELINK_ACCESS_BINFO (fns);
4977   optype = BASELINK_OPTYPE (fns);
4978   fns = BASELINK_FUNCTIONS (fns);
4979
4980   if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
4981     {
4982       explicit_targs = TREE_OPERAND (fns, 1);
4983       fns = TREE_OPERAND (fns, 0);
4984       template_only = 1;
4985     }
4986
4987   my_friendly_assert (TREE_CODE (fns) == FUNCTION_DECL
4988                       || TREE_CODE (fns) == TEMPLATE_DECL
4989                       || TREE_CODE (fns) == OVERLOAD,
4990                       20020712);
4991
4992   /* XXX this should be handled before we get here.  */
4993   if (! IS_AGGR_TYPE (basetype))
4994     {
4995       if ((flags & LOOKUP_COMPLAIN) && basetype != error_mark_node)
4996         error ("request for member `%D' in `%E', which is of non-aggregate type `%T'",
4997                fns, instance, basetype);
4998
4999       return error_mark_node;
5000     }
5001
5002   fn = get_first_fn (fns);
5003   name = DECL_NAME (fn);
5004
5005   if (IDENTIFIER_CTOR_OR_DTOR_P (name))
5006     {
5007       /* Callers should explicitly indicate whether they want to construct
5008          the complete object or just the part without virtual bases.  */
5009       my_friendly_assert (name != ctor_identifier, 20000408);
5010       /* Similarly for destructors.  */
5011       my_friendly_assert (name != dtor_identifier, 20000408);
5012     }
5013
5014   /* It's OK to call destructors on cv-qualified objects.  Therefore,
5015      convert the INSTANCE_PTR to the unqualified type, if necessary.  */
5016   if (DECL_DESTRUCTOR_P (fn))
5017     {
5018       tree type = build_pointer_type (basetype);
5019       if (!same_type_p (type, TREE_TYPE (instance_ptr)))
5020         instance_ptr = build_nop (type, instance_ptr);
5021     }
5022
5023   class_type = (conversion_path ? BINFO_TYPE (conversion_path) : NULL_TREE);
5024   mem_args = tree_cons (NULL_TREE, instance_ptr, args);
5025
5026   for (fn = fns; fn; fn = OVL_NEXT (fn))
5027     {
5028       tree t = OVL_CURRENT (fn);
5029       tree this_arglist;
5030
5031       /* We can end up here for copy-init of same or base class.  */
5032       if ((flags & LOOKUP_ONLYCONVERTING)
5033           && DECL_NONCONVERTING_P (t))
5034         continue;
5035
5036       if (DECL_NONSTATIC_MEMBER_FUNCTION_P (t))
5037         this_arglist = mem_args;
5038       else
5039         this_arglist = args;
5040
5041       if (TREE_CODE (t) == TEMPLATE_DECL)
5042         /* A member template.  */
5043         add_template_candidate (&candidates, t, 
5044                                 class_type,
5045                                 explicit_targs,
5046                                 this_arglist, optype,
5047                                 access_binfo, 
5048                                 conversion_path,
5049                                 flags,
5050                                 DEDUCE_CALL);
5051       else if (! template_only)
5052         add_function_candidate (&candidates, t, 
5053                                 class_type,
5054                                 this_arglist,
5055                                 access_binfo,
5056                                 conversion_path,
5057                                 flags);
5058     }
5059
5060   candidates = splice_viable (candidates, pedantic, &any_viable_p);
5061   if (!any_viable_p)
5062     {
5063       /* XXX will LOOKUP_SPECULATIVELY be needed when this is done?  */
5064       if (flags & LOOKUP_SPECULATIVELY)
5065         return NULL_TREE;
5066       if (!COMPLETE_TYPE_P (basetype))
5067         cxx_incomplete_type_error (instance_ptr, basetype);
5068       else
5069         {
5070           char *pretty_name;
5071           bool free_p;
5072
5073           pretty_name = name_as_c_string (name, basetype, &free_p);
5074           error ("no matching function for call to `%T::%s(%A)%#V'",
5075                  basetype, pretty_name, user_args,
5076                  TREE_TYPE (TREE_TYPE (instance_ptr)));
5077           if (free_p)
5078             free (pretty_name);
5079         }
5080       print_z_candidates (candidates);
5081       return error_mark_node;
5082     }
5083
5084   cand = tourney (candidates);
5085   if (cand == 0)
5086     {
5087       char *pretty_name;
5088       bool free_p;
5089
5090       pretty_name = name_as_c_string (name, basetype, &free_p);
5091       error ("call of overloaded `%s(%A)' is ambiguous", pretty_name,
5092              user_args);
5093       print_z_candidates (candidates);
5094       if (free_p)
5095         free (pretty_name);
5096       return error_mark_node;
5097     }
5098
5099   if (DECL_PURE_VIRTUAL_P (cand->fn)
5100       && instance == current_class_ref
5101       && (DECL_CONSTRUCTOR_P (current_function_decl)
5102           || DECL_DESTRUCTOR_P (current_function_decl))
5103       && ! (flags & LOOKUP_NONVIRTUAL)
5104       && value_member (cand->fn, CLASSTYPE_PURE_VIRTUALS (basetype)))
5105     error ((DECL_CONSTRUCTOR_P (current_function_decl) ? 
5106                "abstract virtual `%#D' called from constructor"
5107                : "abstract virtual `%#D' called from destructor"),
5108               cand->fn);
5109   if (TREE_CODE (TREE_TYPE (cand->fn)) == METHOD_TYPE
5110       && is_dummy_object (instance_ptr))
5111     {
5112       error ("cannot call member function `%D' without object", cand->fn);
5113       return error_mark_node;
5114     }
5115
5116   if (DECL_VINDEX (cand->fn) && ! (flags & LOOKUP_NONVIRTUAL)
5117       && resolves_to_fixed_type_p (instance, 0))
5118     flags |= LOOKUP_NONVIRTUAL;
5119
5120   if (TREE_CODE (TREE_TYPE (cand->fn)) == METHOD_TYPE)
5121     call = build_over_call (cand, flags);
5122   else
5123     {
5124       call = build_over_call (cand, flags);
5125       /* In an expression of the form `a->f()' where `f' turns out to
5126          be a static member function, `a' is none-the-less evaluated.  */
5127       if (!is_dummy_object (instance_ptr) && TREE_SIDE_EFFECTS (instance))
5128         call = build (COMPOUND_EXPR, TREE_TYPE (call), instance, call);
5129     }
5130
5131   return call;
5132 }
5133
5134 /* Returns true iff standard conversion sequence ICS1 is a proper
5135    subsequence of ICS2.  */
5136
5137 static bool
5138 is_subseq (tree ics1, tree ics2)
5139 {
5140   /* We can assume that a conversion of the same code
5141      between the same types indicates a subsequence since we only get
5142      here if the types we are converting from are the same.  */
5143
5144   while (TREE_CODE (ics1) == RVALUE_CONV
5145          || TREE_CODE (ics1) == LVALUE_CONV)
5146     ics1 = TREE_OPERAND (ics1, 0);
5147
5148   while (1)
5149     {
5150       while (TREE_CODE (ics2) == RVALUE_CONV
5151           || TREE_CODE (ics2) == LVALUE_CONV)
5152         ics2 = TREE_OPERAND (ics2, 0);
5153
5154       if (TREE_CODE (ics2) == USER_CONV
5155           || TREE_CODE (ics2) == AMBIG_CONV
5156           || TREE_CODE (ics2) == IDENTITY_CONV)
5157         /* At this point, ICS1 cannot be a proper subsequence of
5158            ICS2.  We can get a USER_CONV when we are comparing the
5159            second standard conversion sequence of two user conversion
5160            sequences.  */
5161         return false;
5162
5163       ics2 = TREE_OPERAND (ics2, 0);
5164
5165       if (TREE_CODE (ics2) == TREE_CODE (ics1)
5166           && same_type_p (TREE_TYPE (ics2), TREE_TYPE (ics1))
5167           && same_type_p (TREE_TYPE (TREE_OPERAND (ics2, 0)),
5168                              TREE_TYPE (TREE_OPERAND (ics1, 0))))
5169         return true;
5170     }
5171 }
5172
5173 /* Returns nonzero iff DERIVED is derived from BASE.  The inputs may
5174    be any _TYPE nodes.  */
5175
5176 bool
5177 is_properly_derived_from (tree derived, tree base)
5178 {
5179   if (!IS_AGGR_TYPE_CODE (TREE_CODE (derived))
5180       || !IS_AGGR_TYPE_CODE (TREE_CODE (base)))
5181     return false;
5182
5183   /* We only allow proper derivation here.  The DERIVED_FROM_P macro
5184      considers every class derived from itself.  */
5185   return (!same_type_ignoring_top_level_qualifiers_p (derived, base)
5186           && DERIVED_FROM_P (base, derived));
5187 }
5188
5189 /* We build the ICS for an implicit object parameter as a pointer
5190    conversion sequence.  However, such a sequence should be compared
5191    as if it were a reference conversion sequence.  If ICS is the
5192    implicit conversion sequence for an implicit object parameter,
5193    modify it accordingly.  */
5194
5195 static void
5196 maybe_handle_implicit_object (tree *ics)
5197 {
5198   if (ICS_THIS_FLAG (*ics))
5199     {
5200       /* [over.match.funcs]
5201          
5202          For non-static member functions, the type of the
5203          implicit object parameter is "reference to cv X"
5204          where X is the class of which the function is a
5205          member and cv is the cv-qualification on the member
5206          function declaration.  */
5207       tree t = *ics;
5208       tree reference_type;
5209
5210       /* The `this' parameter is a pointer to a class type.  Make the
5211          implict conversion talk about a reference to that same class
5212          type.  */
5213       reference_type = TREE_TYPE (TREE_TYPE (*ics));
5214       reference_type = build_reference_type (reference_type);
5215
5216       if (TREE_CODE (t) == QUAL_CONV)
5217         t = TREE_OPERAND (t, 0);
5218       if (TREE_CODE (t) == PTR_CONV)
5219         t = TREE_OPERAND (t, 0);
5220       t = build1 (IDENTITY_CONV, TREE_TYPE (TREE_TYPE (t)), NULL_TREE);
5221       t = direct_reference_binding (reference_type, t); 
5222       *ics = t;
5223     }
5224 }
5225
5226 /* If *ICS is a REF_BIND set *ICS to the remainder of the conversion,
5227    and return the type to which the reference refers.  Otherwise,
5228    leave *ICS unchanged and return NULL_TREE.  */
5229
5230 static tree
5231 maybe_handle_ref_bind (tree *ics)
5232 {
5233   if (TREE_CODE (*ics) == REF_BIND)
5234     {
5235       tree old_ics = *ics;
5236       tree type = TREE_TYPE (TREE_TYPE (old_ics));
5237       *ics = TREE_OPERAND (old_ics, 0);
5238       ICS_USER_FLAG (*ics) = ICS_USER_FLAG (old_ics);
5239       ICS_BAD_FLAG (*ics) = ICS_BAD_FLAG (old_ics);
5240       return type;
5241     }
5242
5243   return NULL_TREE;
5244 }
5245
5246 /* Compare two implicit conversion sequences according to the rules set out in
5247    [over.ics.rank].  Return values:
5248
5249       1: ics1 is better than ics2
5250      -1: ics2 is better than ics1
5251       0: ics1 and ics2 are indistinguishable */
5252
5253 static int
5254 compare_ics (tree ics1, tree ics2)
5255 {
5256   tree from_type1;
5257   tree from_type2;
5258   tree to_type1;
5259   tree to_type2;
5260   tree deref_from_type1 = NULL_TREE;
5261   tree deref_from_type2 = NULL_TREE;
5262   tree deref_to_type1 = NULL_TREE;
5263   tree deref_to_type2 = NULL_TREE;
5264   int rank1, rank2;
5265
5266   /* REF_BINDING is nonzero if the result of the conversion sequence
5267      is a reference type.   In that case TARGET_TYPE is the
5268      type referred to by the reference.  */
5269   tree target_type1;
5270   tree target_type2;
5271
5272   /* Handle implicit object parameters.  */
5273   maybe_handle_implicit_object (&ics1);
5274   maybe_handle_implicit_object (&ics2);
5275
5276   /* Handle reference parameters.  */
5277   target_type1 = maybe_handle_ref_bind (&ics1);
5278   target_type2 = maybe_handle_ref_bind (&ics2);
5279
5280   /* [over.ics.rank]
5281
5282      When  comparing  the  basic forms of implicit conversion sequences (as
5283      defined in _over.best.ics_)
5284
5285      --a standard conversion sequence (_over.ics.scs_) is a better
5286        conversion sequence than a user-defined conversion sequence
5287        or an ellipsis conversion sequence, and
5288      
5289      --a user-defined conversion sequence (_over.ics.user_) is a
5290        better conversion sequence than an ellipsis conversion sequence
5291        (_over.ics.ellipsis_).  */
5292   rank1 = ICS_RANK (ics1);
5293   rank2 = ICS_RANK (ics2);
5294   
5295   if (rank1 > rank2)
5296     return -1;
5297   else if (rank1 < rank2)
5298     return 1;
5299
5300   if (rank1 == BAD_RANK)
5301     {
5302       /* XXX Isn't this an extension? */
5303       /* Both ICS are bad.  We try to make a decision based on what
5304          would have happenned if they'd been good.  */
5305       if (ICS_USER_FLAG (ics1) > ICS_USER_FLAG (ics2)
5306           || ICS_STD_RANK (ics1) > ICS_STD_RANK (ics2))
5307         return -1;
5308       else if (ICS_USER_FLAG (ics1) < ICS_USER_FLAG (ics2)
5309                || ICS_STD_RANK (ics1) < ICS_STD_RANK (ics2))
5310         return 1;
5311
5312       /* We couldn't make up our minds; try to figure it out below.  */
5313     }
5314
5315   if (ICS_ELLIPSIS_FLAG (ics1))
5316     /* Both conversions are ellipsis conversions.  */
5317     return 0;
5318
5319   /* User-defined  conversion sequence U1 is a better conversion sequence
5320      than another user-defined conversion sequence U2 if they contain the
5321      same user-defined conversion operator or constructor and if the sec-
5322      ond standard conversion sequence of U1 is  better  than  the  second
5323      standard conversion sequence of U2.  */
5324
5325   if (ICS_USER_FLAG (ics1))
5326     {
5327       tree t1, t2;
5328
5329       for (t1 = ics1; TREE_CODE (t1) != USER_CONV; t1 = TREE_OPERAND (t1, 0))
5330         if (TREE_CODE (t1) == AMBIG_CONV)
5331           return 0;
5332       for (t2 = ics2; TREE_CODE (t2) != USER_CONV; t2 = TREE_OPERAND (t2, 0))
5333         if (TREE_CODE (t2) == AMBIG_CONV)
5334           return 0;
5335
5336       if (USER_CONV_FN (t1) != USER_CONV_FN (t2))
5337         return 0;
5338
5339       /* We can just fall through here, after setting up
5340          FROM_TYPE1 and FROM_TYPE2.  */
5341       from_type1 = TREE_TYPE (t1);
5342       from_type2 = TREE_TYPE (t2);
5343     }
5344   else
5345     {
5346       /* We're dealing with two standard conversion sequences. 
5347
5348          [over.ics.rank]
5349          
5350          Standard conversion sequence S1 is a better conversion
5351          sequence than standard conversion sequence S2 if
5352      
5353          --S1 is a proper subsequence of S2 (comparing the conversion
5354            sequences in the canonical form defined by _over.ics.scs_,
5355            excluding any Lvalue Transformation; the identity
5356            conversion sequence is considered to be a subsequence of
5357            any non-identity conversion sequence */
5358       
5359       from_type1 = ics1;
5360       while (TREE_CODE (from_type1) != IDENTITY_CONV)
5361         from_type1 = TREE_OPERAND (from_type1, 0);
5362       from_type1 = TREE_TYPE (from_type1);
5363       
5364       from_type2 = ics2;
5365       while (TREE_CODE (from_type2) != IDENTITY_CONV)
5366         from_type2 = TREE_OPERAND (from_type2, 0);
5367       from_type2 = TREE_TYPE (from_type2);
5368     }
5369
5370   if (same_type_p (from_type1, from_type2))
5371     {
5372       if (is_subseq (ics1, ics2))
5373         return 1;
5374       if (is_subseq (ics2, ics1))
5375         return -1;
5376     }
5377   /* Otherwise, one sequence cannot be a subsequence of the other; they
5378      don't start with the same type.  This can happen when comparing the
5379      second standard conversion sequence in two user-defined conversion
5380      sequences.  */
5381
5382   /* [over.ics.rank]
5383
5384      Or, if not that,
5385
5386      --the rank of S1 is better than the rank of S2 (by the rules
5387        defined below):
5388
5389     Standard conversion sequences are ordered by their ranks: an Exact
5390     Match is a better conversion than a Promotion, which is a better
5391     conversion than a Conversion.
5392
5393     Two conversion sequences with the same rank are indistinguishable
5394     unless one of the following rules applies:
5395
5396     --A conversion that is not a conversion of a pointer, or pointer
5397       to member, to bool is better than another conversion that is such
5398       a conversion.  
5399
5400     The ICS_STD_RANK automatically handles the pointer-to-bool rule,
5401     so that we do not have to check it explicitly.  */
5402   if (ICS_STD_RANK (ics1) < ICS_STD_RANK (ics2))
5403     return 1;
5404   else if (ICS_STD_RANK (ics2) < ICS_STD_RANK (ics1))
5405     return -1;
5406
5407   to_type1 = TREE_TYPE (ics1);
5408   to_type2 = TREE_TYPE (ics2);
5409
5410   if (TYPE_PTR_P (from_type1)
5411       && TYPE_PTR_P (from_type2)
5412       && TYPE_PTR_P (to_type1)
5413       && TYPE_PTR_P (to_type2))
5414     {
5415       deref_from_type1 = TREE_TYPE (from_type1);
5416       deref_from_type2 = TREE_TYPE (from_type2);
5417       deref_to_type1 = TREE_TYPE (to_type1);
5418       deref_to_type2 = TREE_TYPE (to_type2);
5419     }
5420   /* The rules for pointers to members A::* are just like the rules
5421      for pointers A*, except opposite: if B is derived from A then
5422      A::* converts to B::*, not vice versa.  For that reason, we
5423      switch the from_ and to_ variables here.  */
5424   else if (TYPE_PTRMEM_P (from_type1)
5425            && TYPE_PTRMEM_P (from_type2)
5426            && TYPE_PTRMEM_P (to_type1)
5427            && TYPE_PTRMEM_P (to_type2))
5428     {
5429       deref_to_type1 = TYPE_OFFSET_BASETYPE (TREE_TYPE (from_type1));
5430       deref_to_type2 = TYPE_OFFSET_BASETYPE (TREE_TYPE (from_type2));
5431       deref_from_type1 = TYPE_OFFSET_BASETYPE (TREE_TYPE (to_type1));
5432       deref_from_type2 = TYPE_OFFSET_BASETYPE (TREE_TYPE (to_type2));
5433     }
5434   else if (TYPE_PTRMEMFUNC_P (from_type1)
5435            && TYPE_PTRMEMFUNC_P (from_type2)
5436            && TYPE_PTRMEMFUNC_P (to_type1)
5437            && TYPE_PTRMEMFUNC_P (to_type2))
5438     {
5439       deref_to_type1 = TYPE_PTRMEMFUNC_OBJECT_TYPE (from_type1);
5440       deref_to_type2 = TYPE_PTRMEMFUNC_OBJECT_TYPE (from_type2);
5441       deref_from_type1 = TYPE_PTRMEMFUNC_OBJECT_TYPE (to_type1);
5442       deref_from_type2 = TYPE_PTRMEMFUNC_OBJECT_TYPE (to_type2);
5443     }
5444
5445   if (deref_from_type1 != NULL_TREE
5446       && IS_AGGR_TYPE_CODE (TREE_CODE (deref_from_type1))
5447       && IS_AGGR_TYPE_CODE (TREE_CODE (deref_from_type2)))
5448     {
5449       /* This was one of the pointer or pointer-like conversions.  
5450
5451          [over.ics.rank]
5452          
5453          --If class B is derived directly or indirectly from class A,
5454            conversion of B* to A* is better than conversion of B* to
5455            void*, and conversion of A* to void* is better than
5456            conversion of B* to void*.  */
5457       if (TREE_CODE (deref_to_type1) == VOID_TYPE
5458           && TREE_CODE (deref_to_type2) == VOID_TYPE)
5459         {
5460           if (is_properly_derived_from (deref_from_type1,
5461                                         deref_from_type2))
5462             return -1;
5463           else if (is_properly_derived_from (deref_from_type2,
5464                                              deref_from_type1))
5465             return 1;
5466         }
5467       else if (TREE_CODE (deref_to_type1) == VOID_TYPE
5468                || TREE_CODE (deref_to_type2) == VOID_TYPE)
5469         {
5470           if (same_type_p (deref_from_type1, deref_from_type2))
5471             {
5472               if (TREE_CODE (deref_to_type2) == VOID_TYPE)
5473                 {
5474                   if (is_properly_derived_from (deref_from_type1,
5475                                                 deref_to_type1))
5476                     return 1;
5477                 }
5478               /* We know that DEREF_TO_TYPE1 is `void' here.  */
5479               else if (is_properly_derived_from (deref_from_type1,
5480                                                  deref_to_type2))
5481                 return -1;
5482             }
5483         }
5484       else if (IS_AGGR_TYPE_CODE (TREE_CODE (deref_to_type1))
5485                && IS_AGGR_TYPE_CODE (TREE_CODE (deref_to_type2)))
5486         {
5487           /* [over.ics.rank]
5488
5489              --If class B is derived directly or indirectly from class A
5490                and class C is derived directly or indirectly from B,
5491              
5492              --conversion of C* to B* is better than conversion of C* to
5493                A*, 
5494              
5495              --conversion of B* to A* is better than conversion of C* to
5496                A*  */
5497           if (same_type_p (deref_from_type1, deref_from_type2))
5498             {
5499               if (is_properly_derived_from (deref_to_type1,
5500                                             deref_to_type2))
5501                 return 1;
5502               else if (is_properly_derived_from (deref_to_type2,
5503                                                  deref_to_type1))
5504                 return -1;
5505             }
5506           else if (same_type_p (deref_to_type1, deref_to_type2))
5507             {
5508               if (is_properly_derived_from (deref_from_type2,
5509                                             deref_from_type1))
5510                 return 1;
5511               else if (is_properly_derived_from (deref_from_type1,
5512                                                  deref_from_type2))
5513                 return -1;
5514             }
5515         }
5516     }
5517   else if (CLASS_TYPE_P (non_reference (from_type1))
5518            && same_type_p (from_type1, from_type2))
5519     {
5520       tree from = non_reference (from_type1);
5521
5522       /* [over.ics.rank]
5523          
5524          --binding of an expression of type C to a reference of type
5525            B& is better than binding an expression of type C to a
5526            reference of type A&
5527
5528          --conversion of C to B is better than conversion of C to A,  */
5529       if (is_properly_derived_from (from, to_type1)
5530           && is_properly_derived_from (from, to_type2))
5531         {
5532           if (is_properly_derived_from (to_type1, to_type2))
5533             return 1;
5534           else if (is_properly_derived_from (to_type2, to_type1))
5535             return -1;
5536         }
5537     }
5538   else if (CLASS_TYPE_P (non_reference (to_type1))
5539            && same_type_p (to_type1, to_type2))
5540     {
5541       tree to = non_reference (to_type1);
5542
5543       /* [over.ics.rank]
5544
5545          --binding of an expression of type B to a reference of type
5546            A& is better than binding an expression of type C to a
5547            reference of type A&, 
5548
5549          --onversion of B to A is better than conversion of C to A  */
5550       if (is_properly_derived_from (from_type1, to)
5551           && is_properly_derived_from (from_type2, to))
5552         {
5553           if (is_properly_derived_from (from_type2, from_type1))
5554             return 1;
5555           else if (is_properly_derived_from (from_type1, from_type2))
5556             return -1;
5557         }
5558     }
5559
5560   /* [over.ics.rank]
5561
5562      --S1 and S2 differ only in their qualification conversion and  yield
5563        similar  types  T1 and T2 (_conv.qual_), respectively, and the cv-
5564        qualification signature of type T1 is a proper subset of  the  cv-
5565        qualification signature of type T2  */
5566   if (TREE_CODE (ics1) == QUAL_CONV 
5567       && TREE_CODE (ics2) == QUAL_CONV
5568       && same_type_p (from_type1, from_type2))
5569     return comp_cv_qual_signature (to_type1, to_type2);
5570
5571   /* [over.ics.rank]
5572      
5573      --S1 and S2 are reference bindings (_dcl.init.ref_), and the
5574      types to which the references refer are the same type except for
5575      top-level cv-qualifiers, and the type to which the reference
5576      initialized by S2 refers is more cv-qualified than the type to
5577      which the reference initialized by S1 refers */
5578       
5579   if (target_type1 && target_type2
5580       && same_type_ignoring_top_level_qualifiers_p (to_type1, to_type2))
5581     return comp_cv_qualification (target_type2, target_type1);
5582
5583   /* Neither conversion sequence is better than the other.  */
5584   return 0;
5585 }
5586
5587 /* The source type for this standard conversion sequence.  */
5588
5589 static tree
5590 source_type (tree t)
5591 {
5592   for (;; t = TREE_OPERAND (t, 0))
5593     {
5594       if (TREE_CODE (t) == USER_CONV
5595           || TREE_CODE (t) == AMBIG_CONV
5596           || TREE_CODE (t) == IDENTITY_CONV)
5597         return TREE_TYPE (t);
5598     }
5599   abort ();
5600 }
5601
5602 /* Note a warning about preferring WINNER to LOSER.  We do this by storing
5603    a pointer to LOSER and re-running joust to produce the warning if WINNER
5604    is actually used.  */
5605
5606 static void
5607 add_warning (struct z_candidate *winner, struct z_candidate *loser)
5608 {
5609   winner->warnings = tree_cons (NULL_TREE,
5610                                 build_zc_wrapper (loser),
5611                                 winner->warnings);
5612 }
5613
5614 /* Compare two candidates for overloading as described in
5615    [over.match.best].  Return values:
5616
5617       1: cand1 is better than cand2
5618      -1: cand2 is better than cand1
5619       0: cand1 and cand2 are indistinguishable */
5620
5621 static int
5622 joust (struct z_candidate *cand1, struct z_candidate *cand2, bool warn)
5623 {
5624   int winner = 0;
5625   int i, off1 = 0, off2 = 0, len;
5626
5627   /* Candidates that involve bad conversions are always worse than those
5628      that don't.  */
5629   if (cand1->viable > cand2->viable)
5630     return 1;
5631   if (cand1->viable < cand2->viable)
5632     return -1;
5633
5634   /* If we have two pseudo-candidates for conversions to the same type,
5635      or two candidates for the same function, arbitrarily pick one.  */
5636   if (cand1->fn == cand2->fn
5637       && (TYPE_P (cand1->fn) || DECL_P (cand1->fn)))
5638     return 1;
5639
5640   /* a viable function F1
5641      is defined to be a better function than another viable function F2  if
5642      for  all arguments i, ICSi(F1) is not a worse conversion sequence than
5643      ICSi(F2), and then */
5644
5645   /* for some argument j, ICSj(F1) is a better conversion  sequence  than
5646      ICSj(F2) */
5647
5648   /* For comparing static and non-static member functions, we ignore
5649      the implicit object parameter of the non-static function.  The
5650      standard says to pretend that the static function has an object
5651      parm, but that won't work with operator overloading.  */
5652   len = TREE_VEC_LENGTH (cand1->convs);
5653   if (len != TREE_VEC_LENGTH (cand2->convs))
5654     {
5655       if (DECL_STATIC_FUNCTION_P (cand1->fn)
5656           && ! DECL_STATIC_FUNCTION_P (cand2->fn))
5657         off2 = 1;
5658       else if (! DECL_STATIC_FUNCTION_P (cand1->fn)
5659                && DECL_STATIC_FUNCTION_P (cand2->fn))
5660         {
5661           off1 = 1;
5662           --len;
5663         }
5664       else
5665         abort ();
5666     }
5667
5668   for (i = 0; i < len; ++i)
5669     {
5670       tree t1 = TREE_VEC_ELT (cand1->convs, i+off1);
5671       tree t2 = TREE_VEC_ELT (cand2->convs, i+off2);
5672       int comp = compare_ics (t1, t2);
5673
5674       if (comp != 0)
5675         {
5676           if (warn_sign_promo
5677               && ICS_RANK (t1) + ICS_RANK (t2) == STD_RANK + PROMO_RANK
5678               && TREE_CODE (t1) == STD_CONV
5679               && TREE_CODE (t2) == STD_CONV
5680               && TREE_CODE (TREE_TYPE (t1)) == INTEGER_TYPE
5681               && TREE_CODE (TREE_TYPE (t2)) == INTEGER_TYPE
5682               && (TYPE_PRECISION (TREE_TYPE (t1))
5683                   == TYPE_PRECISION (TREE_TYPE (t2)))
5684               && (TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (t1, 0)))
5685                   || (TREE_CODE (TREE_TYPE (TREE_OPERAND (t1, 0)))
5686                       == ENUMERAL_TYPE)))
5687             {
5688               tree type = TREE_TYPE (TREE_OPERAND (t1, 0));
5689               tree type1, type2;
5690               struct z_candidate *w, *l;
5691               if (comp > 0)
5692                 type1 = TREE_TYPE (t1), type2 = TREE_TYPE (t2),
5693                   w = cand1, l = cand2;
5694               else
5695                 type1 = TREE_TYPE (t2), type2 = TREE_TYPE (t1),
5696                   w = cand2, l = cand1;
5697
5698               if (warn)
5699                 {
5700                   warning ("passing `%T' chooses `%T' over `%T'",
5701                               type, type1, type2);
5702                   warning ("  in call to `%D'", w->fn);
5703                 }
5704               else
5705                 add_warning (w, l);
5706             }
5707
5708           if (winner && comp != winner)
5709             {
5710               winner = 0;
5711               goto tweak;
5712             }
5713           winner = comp;
5714         }
5715     }
5716
5717   /* warn about confusing overload resolution for user-defined conversions,
5718      either between a constructor and a conversion op, or between two
5719      conversion ops.  */
5720   if (winner && cand1->second_conv
5721       && ((DECL_CONSTRUCTOR_P (cand1->fn)
5722            != DECL_CONSTRUCTOR_P (cand2->fn))
5723           /* Don't warn if the two conv ops convert to the same type...  */
5724           || (! DECL_CONSTRUCTOR_P (cand1->fn)
5725               && ! same_type_p (TREE_TYPE (TREE_TYPE (cand1->fn)),
5726                                 TREE_TYPE (TREE_TYPE (cand2->fn))))))
5727     {
5728       int comp = compare_ics (cand1->second_conv, cand2->second_conv);
5729       if (comp != winner)
5730         {
5731           struct z_candidate *w, *l;
5732           tree convn;
5733           if (winner == 1)
5734             w = cand1, l = cand2;
5735           else
5736             w = cand2, l = cand1;
5737           if (DECL_CONTEXT (cand1->fn) == DECL_CONTEXT (cand2->fn)
5738               && ! DECL_CONSTRUCTOR_P (cand1->fn)
5739               && ! DECL_CONSTRUCTOR_P (cand2->fn)
5740               && (convn = standard_conversion
5741                   (TREE_TYPE (TREE_TYPE (l->fn)),
5742                    TREE_TYPE (TREE_TYPE (w->fn)), NULL_TREE))
5743               && TREE_CODE (convn) == QUAL_CONV)
5744             /* Don't complain about `operator char *()' beating
5745                `operator const char *() const'.  */;
5746           else if (warn)
5747             {
5748               tree source = source_type (TREE_VEC_ELT (w->convs, 0));
5749               if (! DECL_CONSTRUCTOR_P (w->fn))
5750                 source = TREE_TYPE (source);
5751               warning ("choosing `%D' over `%D'", w->fn, l->fn);
5752               warning ("  for conversion from `%T' to `%T'",
5753                           source, TREE_TYPE (w->second_conv));
5754               warning ("  because conversion sequence for the argument is better");
5755             }
5756           else
5757             add_warning (w, l);
5758         }
5759     }
5760
5761   if (winner)
5762     return winner;
5763
5764   /* or, if not that,
5765      F1 is a non-template function and F2 is a template function
5766      specialization.  */
5767          
5768   if (! cand1->template && cand2->template)
5769     return 1;
5770   else if (cand1->template && ! cand2->template)
5771     return -1;
5772   
5773   /* or, if not that,
5774      F1 and F2 are template functions and the function template for F1 is
5775      more specialized than the template for F2 according to the partial
5776      ordering rules.  */
5777   
5778   if (cand1->template && cand2->template)
5779     {
5780       winner = more_specialized
5781         (TI_TEMPLATE (cand1->template), TI_TEMPLATE (cand2->template),
5782          DEDUCE_ORDER,
5783          /* Tell the deduction code how many real function arguments
5784             we saw, not counting the implicit 'this' argument.  But,
5785             add_function_candidate() suppresses the "this" argument
5786             for constructors.
5787
5788             [temp.func.order]: The presence of unused ellipsis and default
5789             arguments has no effect on the partial ordering of function
5790             templates.  */
5791          TREE_VEC_LENGTH (cand1->convs)
5792          - (DECL_NONSTATIC_MEMBER_FUNCTION_P (cand1->fn)
5793             - DECL_CONSTRUCTOR_P (cand1->fn)));
5794       if (winner)
5795         return winner;
5796     }
5797
5798   /* or, if not that,
5799      the  context  is  an  initialization by user-defined conversion (see
5800      _dcl.init_  and  _over.match.user_)  and  the  standard   conversion
5801      sequence  from  the return type of F1 to the destination type (i.e.,
5802      the type of the entity being initialized)  is  a  better  conversion
5803      sequence  than the standard conversion sequence from the return type
5804      of F2 to the destination type.  */
5805
5806   if (cand1->second_conv)
5807     {
5808       winner = compare_ics (cand1->second_conv, cand2->second_conv);
5809       if (winner)
5810         return winner;
5811     }
5812   
5813   /* Check whether we can discard a builtin candidate, either because we
5814      have two identical ones or matching builtin and non-builtin candidates.
5815
5816      (Pedantically in the latter case the builtin which matched the user
5817      function should not be added to the overload set, but we spot it here.
5818      
5819      [over.match.oper]
5820      ... the builtin candidates include ...
5821      - do not have the same parameter type list as any non-template
5822        non-member candidate.  */
5823                             
5824   if (TREE_CODE (cand1->fn) == IDENTIFIER_NODE
5825       || TREE_CODE (cand2->fn) == IDENTIFIER_NODE)
5826     {
5827       for (i = 0; i < len; ++i)
5828         if (!same_type_p (TREE_TYPE (TREE_VEC_ELT (cand1->convs, i)),
5829                           TREE_TYPE (TREE_VEC_ELT (cand2->convs, i))))
5830           break;
5831       if (i == TREE_VEC_LENGTH (cand1->convs))
5832         {
5833           if (cand1->fn == cand2->fn)
5834             /* Two built-in candidates; arbitrarily pick one.  */
5835             return 1;
5836           else if (TREE_CODE (cand1->fn) == IDENTIFIER_NODE)
5837             /* cand1 is built-in; prefer cand2.  */
5838             return -1;
5839           else
5840             /* cand2 is built-in; prefer cand1.  */
5841             return 1;
5842         }
5843     }
5844
5845   /* If the two functions are the same (this can happen with declarations
5846      in multiple scopes and arg-dependent lookup), arbitrarily choose one.  */
5847   if (DECL_P (cand1->fn) && DECL_P (cand2->fn)
5848       && equal_functions (cand1->fn, cand2->fn))
5849     return 1;
5850  
5851 tweak:
5852
5853   /* Extension: If the worst conversion for one candidate is worse than the
5854      worst conversion for the other, take the first.  */
5855   if (!pedantic)
5856     {
5857       int rank1 = IDENTITY_RANK, rank2 = IDENTITY_RANK;
5858       struct z_candidate *w = 0, *l = 0;
5859
5860       for (i = 0; i < len; ++i)
5861         {
5862           if (ICS_RANK (TREE_VEC_ELT (cand1->convs, i+off1)) > rank1)
5863             rank1 = ICS_RANK (TREE_VEC_ELT (cand1->convs, i+off1));
5864           if (ICS_RANK (TREE_VEC_ELT (cand2->convs, i+off2)) > rank2)
5865             rank2 = ICS_RANK (TREE_VEC_ELT (cand2->convs, i+off2));
5866         }
5867       if (rank1 < rank2)
5868         winner = 1, w = cand1, l = cand2;
5869       if (rank1 > rank2)
5870         winner = -1, w = cand2, l = cand1;
5871       if (winner)
5872         {
5873           if (warn)
5874             {
5875               print_z_candidate ("ISO C++ says that ", w, pedwarn);
5876               print_z_candidate ("              and ", l, pedwarn);
5877               pedwarn ("are ambiguous even though the worst conversion \
5878 for the former is better than the worst conversion for the latter");
5879             }
5880           else
5881             add_warning (w, l);
5882           return winner;
5883         }
5884     }
5885
5886   my_friendly_assert (!winner, 20010121);
5887   return 0;
5888 }
5889
5890 /* Given a list of candidates for overloading, find the best one, if any.
5891    This algorithm has a worst case of O(2n) (winner is last), and a best
5892    case of O(n/2) (totally ambiguous); much better than a sorting
5893    algorithm.  */
5894
5895 static struct z_candidate *
5896 tourney (struct z_candidate *candidates)
5897 {
5898   struct z_candidate *champ = candidates, *challenger;
5899   int fate;
5900   int champ_compared_to_predecessor = 0;
5901
5902   /* Walk through the list once, comparing each current champ to the next
5903      candidate, knocking out a candidate or two with each comparison.  */
5904
5905   for (challenger = champ->next; challenger; )
5906     {
5907       fate = joust (champ, challenger, 0);
5908       if (fate == 1)
5909         challenger = challenger->next;
5910       else
5911         {
5912           if (fate == 0)
5913             {
5914               champ = challenger->next;
5915               if (champ == 0)
5916                 return 0;
5917               champ_compared_to_predecessor = 0;
5918             }
5919           else
5920             {
5921               champ = challenger;
5922               champ_compared_to_predecessor = 1;
5923             }
5924
5925           challenger = champ->next;
5926         }
5927     }
5928
5929   /* Make sure the champ is better than all the candidates it hasn't yet
5930      been compared to.  */
5931
5932   for (challenger = candidates; 
5933        challenger != champ 
5934          && !(champ_compared_to_predecessor && challenger->next == champ);
5935        challenger = challenger->next)
5936     {
5937       fate = joust (champ, challenger, 0);
5938       if (fate != 1)
5939         return 0;
5940     }
5941
5942   return champ;
5943 }
5944
5945 /* Returns nonzero if things of type FROM can be converted to TO.  */
5946
5947 bool
5948 can_convert (tree to, tree from)
5949 {
5950   return can_convert_arg (to, from, NULL_TREE);
5951 }
5952
5953 /* Returns nonzero if ARG (of type FROM) can be converted to TO.  */
5954
5955 bool
5956 can_convert_arg (tree to, tree from, tree arg)
5957 {
5958   tree t = implicit_conversion (to, from, arg, LOOKUP_NORMAL);
5959   return (t && ! ICS_BAD_FLAG (t));
5960 }
5961
5962 /* Like can_convert_arg, but allows dubious conversions as well.  */
5963
5964 bool
5965 can_convert_arg_bad (tree to, tree from, tree arg)
5966 {
5967   return implicit_conversion (to, from, arg, LOOKUP_NORMAL) != 0;
5968 }
5969
5970 /* Convert EXPR to TYPE.  Return the converted expression.
5971
5972    Note that we allow bad conversions here because by the time we get to
5973    this point we are committed to doing the conversion.  If we end up
5974    doing a bad conversion, convert_like will complain.  */
5975
5976 tree
5977 perform_implicit_conversion (tree type, tree expr)
5978 {
5979   tree conv;
5980   
5981   if (error_operand_p (expr))
5982     return error_mark_node;
5983   conv = implicit_conversion (type, TREE_TYPE (expr), expr,
5984                               LOOKUP_NORMAL);
5985   if (!conv)
5986     {
5987       error ("could not convert `%E' to `%T'", expr, type);
5988       return error_mark_node;
5989     }
5990
5991   return convert_like (conv, expr);
5992 }
5993
5994 /* DECL is a VAR_DECL whose type is a REFERENCE_TYPE.  The reference
5995    is being bound to a temporary.  Create and return a new VAR_DECL
5996    with the indicated TYPE; this variable will store the value to
5997    which the reference is bound.  */
5998
5999 tree 
6000 make_temporary_var_for_ref_to_temp (tree decl, tree type)
6001 {
6002   tree var;
6003
6004   /* Create the variable.  */
6005   var = build_decl (VAR_DECL, NULL_TREE, type);
6006   DECL_ARTIFICIAL (var) = 1;
6007   TREE_USED (var) = 1;
6008
6009   /* Register the variable.  */
6010   if (TREE_STATIC (decl))
6011     {
6012       /* Namespace-scope or local static; give it a mangled name.  */
6013       tree name;
6014
6015       TREE_STATIC (var) = 1;
6016       name = mangle_ref_init_variable (decl);
6017       DECL_NAME (var) = name;
6018       SET_DECL_ASSEMBLER_NAME (var, name);
6019       var = pushdecl_top_level (var);
6020     }
6021   else
6022     {
6023       /* Create a new cleanup level if necessary.  */
6024       maybe_push_cleanup_level (type);
6025       /* Don't push unnamed temps.  Do set DECL_CONTEXT, though.  */
6026       DECL_CONTEXT (var) = current_function_decl;
6027     }
6028
6029   return var;
6030 }
6031
6032 /* Convert EXPR to the indicated reference TYPE, in a way suitable for
6033    initializing a variable of that TYPE.   If DECL is non-NULL, it is
6034    the VAR_DECL being initialized with the EXPR.  (In that case, the
6035    type of DECL will be TYPE.)
6036
6037    Return the converted expression.  */
6038
6039 tree
6040 initialize_reference (tree type, tree expr, tree decl)
6041 {
6042   tree conv;
6043
6044   if (type == error_mark_node || error_operand_p (expr))
6045     return error_mark_node;
6046
6047   conv = reference_binding (type, TREE_TYPE (expr), expr, LOOKUP_NORMAL);
6048   if (!conv || ICS_BAD_FLAG (conv))
6049     {
6050       error ("could not convert `%E' to `%T'", expr, type);
6051       return error_mark_node;
6052     }
6053
6054   /* If DECL is non-NULL, then this special rule applies:
6055
6056        [class.temporary]
6057
6058        The temporary to which the reference is bound or the temporary
6059        that is the complete object to which the reference is bound
6060        persists for the lifetime of the reference.
6061
6062        The temporaries created during the evaluation of the expression
6063        initializing the reference, except the temporary to which the
6064        reference is bound, are destroyed at the end of the
6065        full-expression in which they are created.
6066
6067      In that case, we store the converted expression into a new
6068      VAR_DECL in a new scope.  
6069
6070      However, we want to be careful not to create temporaries when
6071      they are not required.  For example, given:
6072
6073        struct B {}; 
6074        struct D : public B {};
6075        D f();
6076        const B& b = f();
6077
6078      there is no need to copy the return value from "f"; we can just
6079      extend its lifetime.  Similarly, given:
6080
6081        struct S {};
6082        struct T { operator S(); };
6083        T t;
6084        const S& s = t;
6085
6086     we can extend the lifetime of the returnn value of the conversion
6087     operator.  */
6088   my_friendly_assert (TREE_CODE (conv) == REF_BIND, 20030302);
6089   if (decl)
6090     {
6091       tree var;
6092       tree base_conv_type;
6093
6094       /* Skip over the REF_BIND.  */
6095       conv = TREE_OPERAND (conv, 0);
6096       /* If the next conversion is a BASE_CONV, skip that too -- but
6097          remember that the conversion was required.  */
6098       if (TREE_CODE (conv) == BASE_CONV && !NEED_TEMPORARY_P (conv))
6099         {
6100           base_conv_type = TREE_TYPE (conv);
6101           conv = TREE_OPERAND (conv, 0);
6102         }
6103       else
6104         base_conv_type = NULL_TREE;
6105       /* Perform the remainder of the conversion.  */
6106       expr = convert_like (conv, expr);
6107       if (!real_non_cast_lvalue_p (expr))
6108         {
6109           /* Create the temporary variable.  */
6110           var = make_temporary_var_for_ref_to_temp (decl, TREE_TYPE (expr));
6111           DECL_INITIAL (var) = expr;
6112           cp_finish_decl (var, expr, NULL_TREE, 
6113                       LOOKUP_ONLYCONVERTING|DIRECT_BIND);
6114           /* Use its address to initialize the reference variable.  */
6115           expr = build_address (var);
6116         }
6117       else
6118         /* Take the address of EXPR.  */
6119         expr = build_unary_op (ADDR_EXPR, expr, 0);
6120       /* If a BASE_CONV was required, perform it now.  */
6121       if (base_conv_type)
6122         expr = (perform_implicit_conversion 
6123                 (build_pointer_type (base_conv_type), expr));
6124       return build_nop (type, expr);
6125     }
6126
6127   /* Perform the conversion.  */
6128   return convert_like (conv, expr);
6129 }
6130
6131 #include "gt-cp-call.h"