OSDN Git Service

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