OSDN Git Service

* call.c: Include intl.h.
[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 extern int inhibit_warnings;
42
43 static tree build_field_call (tree, tree, tree);
44 static struct z_candidate * tourney (struct z_candidate *);
45 static int equal_functions (tree, tree);
46 static int joust (struct z_candidate *, struct z_candidate *, bool);
47 static int compare_ics (tree, tree);
48 static tree build_over_call (struct z_candidate *, int);
49 static tree build_java_interface_fn_ref (tree, tree);
50 #define convert_like(CONV, EXPR) \
51   convert_like_real ((CONV), (EXPR), NULL_TREE, 0, 0)
52 #define convert_like_with_context(CONV, EXPR, FN, ARGNO) \
53   convert_like_real ((CONV), (EXPR), (FN), (ARGNO), 0)
54 static tree convert_like_real (tree, tree, tree, int, int);
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 length of the translation of
2512          the above string.  */
2513       size_t len = strlen (str) + 1;
2514       char *spaces = alloca (len);
2515       memset (spaces, ' ', len-1);
2516       spaces[len] = '\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;
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
2769     {
2770       if (!TYPE_BEING_DEFINED (scope)
2771           && !COMPLETE_TYPE_P (complete_type (scope)))
2772         {
2773           error ("incomplete type '%T' cannot be used to name a scope",
2774                  scope);
2775           return error_mark_node;
2776         }
2777       
2778       if (BASELINK_P (name))
2779         fn = name;
2780       else
2781         fn = lookup_member (scope, name, /*protect=*/1, /*want_type=*/false);
2782       if (fn && current_class_type)
2783         fn = (adjust_result_of_qualified_name_lookup 
2784               (fn, scope, current_class_type));
2785
2786       /* It might be the name of a function pointer member.  */
2787       if (fn && TREE_CODE (fn) == FIELD_DECL)
2788         fn = resolve_offset_ref (build_offset_ref (scope, fn));
2789     }
2790   
2791   if (!fn)
2792     {
2793       error ("'%D' has no member named '%E'", scope, name);
2794       return error_mark_node;
2795     }
2796   if (is_template_id)
2797     {
2798       tree fns = fn;
2799
2800       if (BASELINK_P (fn))
2801         fns = BASELINK_FUNCTIONS (fns);
2802       fns = build_nt (TEMPLATE_ID_EXPR, fns, template_args);
2803       if (BASELINK_P (fn))
2804         BASELINK_FUNCTIONS (fn) = fns;
2805       else
2806         fn = fns;
2807     }
2808   
2809   return fn;
2810 }
2811
2812 /* Do any initial processing on the arguments to a function call.  */
2813
2814 static tree
2815 resolve_args (tree args)
2816 {
2817   tree t;
2818   for (t = args; t; t = TREE_CHAIN (t))
2819     {
2820       tree arg = TREE_VALUE (t);
2821       
2822       if (arg == error_mark_node)
2823         return error_mark_node;
2824       else if (VOID_TYPE_P (TREE_TYPE (arg)))
2825         {
2826           error ("invalid use of void expression");
2827           return error_mark_node;
2828         }
2829       else if (TREE_CODE (arg) == OFFSET_REF)
2830         arg = resolve_offset_ref (arg);
2831       arg = convert_from_reference (arg);
2832       TREE_VALUE (t) = arg;
2833     }
2834   return args;
2835 }
2836
2837 /* Perform overload resolution on FN, which is called with the ARGS.
2838
2839    Return the candidate function selected by overload resolution, or
2840    NULL if the event that overload resolution failed.  In the case
2841    that overload resolution fails, *CANDIDATES will be the set of
2842    candidates considered, and ANY_VIABLE_P will be set to true or
2843    false to indicate whether or not any of the candidates were
2844    viable.  
2845
2846    The ARGS should already have gone through RESOLVE_ARGS before this
2847    function is called.  */
2848
2849 static struct z_candidate *
2850 perform_overload_resolution (tree fn, 
2851                              tree args, 
2852                              struct z_candidate **candidates,
2853                              bool *any_viable_p)
2854 {
2855   struct z_candidate *cand;
2856   tree explicit_targs = NULL_TREE;
2857   int template_only = 0;
2858
2859   *candidates = NULL;
2860   *any_viable_p = true;
2861
2862   /* Check FN and ARGS.  */
2863   my_friendly_assert (TREE_CODE (fn) == FUNCTION_DECL 
2864                       || TREE_CODE (fn) == TEMPLATE_DECL
2865                       || TREE_CODE (fn) == OVERLOAD
2866                       || TREE_CODE (fn) == TEMPLATE_ID_EXPR,
2867                       20020712);
2868   my_friendly_assert (!args || TREE_CODE (args) == TREE_LIST,
2869                       20020712);
2870
2871   if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
2872     {
2873       explicit_targs = TREE_OPERAND (fn, 1);
2874       fn = TREE_OPERAND (fn, 0);
2875       template_only = 1;
2876     }
2877
2878   /* Add the various candidate functions.  */
2879   add_candidates (fn, args, explicit_targs, template_only,
2880                   /*conversion_path=*/NULL_TREE,
2881                   /*access_path=*/NULL_TREE,
2882                   LOOKUP_NORMAL,
2883                   candidates);
2884
2885   *candidates = splice_viable (*candidates, pedantic, any_viable_p);
2886   if (!*any_viable_p)
2887     return NULL;
2888
2889   cand = tourney (*candidates);
2890   return cand;
2891 }
2892
2893 /* Return an expression for a call to FN (a namespace-scope function,
2894    or a static member function) with the ARGS.  */
2895       
2896 tree
2897 build_new_function_call (tree fn, tree args)
2898 {
2899   struct z_candidate *candidates, *cand;
2900   bool any_viable_p;
2901
2902   args = resolve_args (args);
2903   if (args == error_mark_node)
2904     return error_mark_node;
2905
2906   cand = perform_overload_resolution (fn, args, &candidates, &any_viable_p);
2907
2908   if (!cand)
2909     {
2910       if (!any_viable_p && candidates && ! candidates->next)
2911         return build_function_call (candidates->fn, args);
2912       if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
2913         fn = TREE_OPERAND (fn, 0);
2914       if (!any_viable_p)
2915         error ("no matching function for call to `%D(%A)'",
2916                DECL_NAME (OVL_CURRENT (fn)), args);
2917       else
2918         error ("call of overloaded `%D(%A)' is ambiguous",
2919                DECL_NAME (OVL_CURRENT (fn)), args);
2920       if (candidates)
2921         print_z_candidates (candidates);
2922       return error_mark_node;
2923     }
2924
2925   return build_over_call (cand, LOOKUP_NORMAL);
2926 }
2927
2928 /* Build a call to a global operator new.  FNNAME is the name of the
2929    operator (either "operator new" or "operator new[]") and ARGS are
2930    the arguments provided.  *SIZE points to the total number of bytes
2931    required by the allocation, and is updated if that is changed here.
2932    *COOKIE_SIZE is non-NULL if a cookie should be used.  If this
2933    function determins that no cookie should be used, after all,
2934    *COOKIE_SIZE is set to NULL_TREE. */
2935
2936 tree
2937 build_operator_new_call (tree fnname, tree args, tree *size, tree *cookie_size)
2938 {
2939   tree fns;
2940   struct z_candidate *candidates;
2941   struct z_candidate *cand;
2942   bool any_viable_p;
2943
2944   args = tree_cons (NULL_TREE, *size, args);
2945   args = resolve_args (args);
2946   if (args == error_mark_node)
2947     return args;
2948
2949   fns = lookup_function_nonclass (fnname, args);
2950
2951   /* Figure out what function is being called.  */
2952   cand = perform_overload_resolution (fns, args, &candidates, &any_viable_p);
2953   
2954   /* If no suitable function could be found, issue an error message
2955      and give up.  */
2956   if (!cand)
2957     {
2958       if (!any_viable_p)
2959         error ("no matching function for call to `%D(%A)'",
2960                DECL_NAME (OVL_CURRENT (fns)), args);
2961       else
2962         error ("call of overlopaded `%D(%A)' is ambiguous",
2963                DECL_NAME (OVL_CURRENT (fns)), args);
2964       if (candidates)
2965         print_z_candidates (candidates);
2966       return error_mark_node;
2967     }
2968
2969    /* If a cookie is required, add some extra space.  Whether
2970       or not a cookie is required cannot be determined until
2971       after we know which function was called.  */
2972    if (*cookie_size)
2973      {
2974        bool use_cookie = true;
2975        if (!abi_version_at_least (2))
2976          {
2977            tree placement = TREE_CHAIN (args);
2978            /* In G++ 3.2, the check was implemented incorrectly; it
2979               looked at the placement expression, rather than the
2980               type of the function.  */
2981            if (placement && !TREE_CHAIN (placement)
2982                && same_type_p (TREE_TYPE (TREE_VALUE (placement)),
2983                                ptr_type_node))
2984              use_cookie = false;
2985          }
2986        else
2987          {
2988            tree arg_types;
2989
2990            arg_types = TYPE_ARG_TYPES (TREE_TYPE (cand->fn));
2991            /* Skip the size_t parameter.  */
2992            arg_types = TREE_CHAIN (arg_types);
2993            /* Check the remaining parameters (if any).  */
2994            if (arg_types 
2995                && TREE_CHAIN (arg_types) == void_list_node
2996                && same_type_p (TREE_VALUE (arg_types),
2997                                ptr_type_node))
2998              use_cookie = false;
2999          }
3000        /* If we need a cookie, adjust the number of bytes allocated.  */
3001        if (use_cookie)
3002          {
3003            /* Update the total size.  */
3004            *size = size_binop (PLUS_EXPR, *size, *cookie_size);
3005            /* Update the argument list to reflect the adjusted size.  */
3006            TREE_VALUE (args) = *size;
3007          }
3008        else
3009          *cookie_size = NULL_TREE;
3010      }
3011
3012    /* Build the CALL_EXPR.  */
3013    return build_over_call (cand, LOOKUP_NORMAL);
3014 }
3015
3016 static tree
3017 build_object_call (tree obj, tree args)
3018 {
3019   struct z_candidate *candidates = 0, *cand;
3020   tree fns, convs, mem_args = NULL_TREE;
3021   tree type = TREE_TYPE (obj);
3022   bool any_viable_p;
3023
3024   if (TYPE_PTRMEMFUNC_P (type))
3025     {
3026       /* It's no good looking for an overloaded operator() on a
3027          pointer-to-member-function.  */
3028       error ("pointer-to-member function %E cannot be called without an object; consider using .* or ->*", obj);
3029       return error_mark_node;
3030     }
3031
3032   fns = lookup_fnfields (TYPE_BINFO (type), ansi_opname (CALL_EXPR), 1);
3033   if (fns == error_mark_node)
3034     return error_mark_node;
3035
3036   args = resolve_args (args);
3037
3038   if (args == error_mark_node)
3039     return error_mark_node;
3040
3041   if (fns)
3042     {
3043       tree base = BINFO_TYPE (BASELINK_BINFO (fns));
3044       mem_args = tree_cons (NULL_TREE, build_this (obj), args);
3045
3046       for (fns = BASELINK_FUNCTIONS (fns); fns; fns = OVL_NEXT (fns))
3047         {
3048           tree fn = OVL_CURRENT (fns);
3049           if (TREE_CODE (fn) == TEMPLATE_DECL)
3050             add_template_candidate (&candidates, fn, base, NULL_TREE,
3051                                     mem_args, NULL_TREE, 
3052                                     TYPE_BINFO (type),
3053                                     TYPE_BINFO (type),
3054                                     LOOKUP_NORMAL, DEDUCE_CALL);
3055           else
3056             add_function_candidate
3057               (&candidates, fn, base, mem_args, TYPE_BINFO (type),
3058                TYPE_BINFO (type), LOOKUP_NORMAL);
3059         }
3060     }
3061
3062   convs = lookup_conversions (type);
3063
3064   for (; convs; convs = TREE_CHAIN (convs))
3065     {
3066       tree fns = TREE_VALUE (convs);
3067       tree totype = TREE_TYPE (TREE_TYPE (OVL_CURRENT (fns)));
3068
3069       if ((TREE_CODE (totype) == POINTER_TYPE
3070            && TREE_CODE (TREE_TYPE (totype)) == FUNCTION_TYPE)
3071           || (TREE_CODE (totype) == REFERENCE_TYPE
3072               && TREE_CODE (TREE_TYPE (totype)) == FUNCTION_TYPE)
3073           || (TREE_CODE (totype) == REFERENCE_TYPE
3074               && TREE_CODE (TREE_TYPE (totype)) == POINTER_TYPE
3075               && TREE_CODE (TREE_TYPE (TREE_TYPE (totype))) == FUNCTION_TYPE))
3076         for (; fns; fns = OVL_NEXT (fns))
3077           {
3078             tree fn = OVL_CURRENT (fns);
3079             if (TREE_CODE (fn) == TEMPLATE_DECL) 
3080               add_template_conv_candidate 
3081                 (&candidates, fn, obj, args, totype,
3082                  /*access_path=*/NULL_TREE,
3083                  /*conversion_path=*/NULL_TREE);
3084             else
3085               add_conv_candidate (&candidates, fn, obj, args,
3086                                   /*conversion_path=*/NULL_TREE,
3087                                   /*access_path=*/NULL_TREE);
3088           }
3089     }
3090
3091   candidates = splice_viable (candidates, pedantic, &any_viable_p);
3092   if (!any_viable_p)
3093     {
3094       error ("no match for call to `(%T) (%A)'", TREE_TYPE (obj), args);
3095       print_z_candidates (candidates);
3096       return error_mark_node;
3097     }
3098
3099   cand = tourney (candidates);
3100   if (cand == 0)
3101     {
3102       error ("call of `(%T) (%A)' is ambiguous", TREE_TYPE (obj), args);
3103       print_z_candidates (candidates);
3104       return error_mark_node;
3105     }
3106
3107   /* Since cand->fn will be a type, not a function, for a conversion
3108      function, we must be careful not to unconditionally look at
3109      DECL_NAME here.  */
3110   if (TREE_CODE (cand->fn) == FUNCTION_DECL
3111       && DECL_OVERLOADED_OPERATOR_P (cand->fn) == CALL_EXPR)
3112     return build_over_call (cand, LOOKUP_NORMAL);
3113
3114   obj = convert_like_with_context
3115           (TREE_VEC_ELT (cand->convs, 0), obj, cand->fn, -1);
3116
3117   /* FIXME */
3118   return build_function_call (obj, args);
3119 }
3120
3121 static void
3122 op_error (enum tree_code code, enum tree_code code2,
3123           tree arg1, tree arg2, tree arg3, const char *problem)
3124 {
3125   const char *opname;
3126
3127   if (code == MODIFY_EXPR)
3128     opname = assignment_operator_name_info[code2].name;
3129   else
3130     opname = operator_name_info[code].name;
3131
3132   switch (code)
3133     {
3134     case COND_EXPR:
3135       error ("%s for `%T ? %T : %T' operator", problem,
3136                 error_type (arg1), error_type (arg2), error_type (arg3));
3137       break;
3138     case POSTINCREMENT_EXPR:
3139     case POSTDECREMENT_EXPR:
3140       error ("%s for `%T %s' operator", problem, error_type (arg1), opname);
3141       break;
3142     case ARRAY_REF:
3143       error ("%s for `%T [%T]' operator", problem,
3144                 error_type (arg1), error_type (arg2));
3145       break;
3146     default:
3147       if (arg2)
3148         error ("%s for `%T %s %T' operator", problem,
3149                   error_type (arg1), opname, error_type (arg2));
3150       else
3151         error ("%s for `%s %T' operator", problem, opname, error_type (arg1));
3152     }
3153 }
3154
3155 /* Return the implicit conversion sequence that could be used to
3156    convert E1 to E2 in [expr.cond].  */
3157
3158 static tree
3159 conditional_conversion (tree e1, tree e2)
3160 {
3161   tree t1 = non_reference (TREE_TYPE (e1));
3162   tree t2 = non_reference (TREE_TYPE (e2));
3163   tree conv;
3164
3165   /* [expr.cond]
3166
3167      If E2 is an lvalue: E1 can be converted to match E2 if E1 can be
3168      implicitly converted (clause _conv_) to the type "reference to
3169      T2", subject to the constraint that in the conversion the
3170      reference must bind directly (_dcl.init.ref_) to E1.  */
3171   if (real_lvalue_p (e2))
3172     {
3173       conv = implicit_conversion (build_reference_type (t2), 
3174                                   t1,
3175                                   e1,
3176                                   LOOKUP_NO_TEMP_BIND);
3177       if (conv)
3178         return conv;
3179     }
3180
3181   /* [expr.cond]
3182
3183      If E1 and E2 have class type, and the underlying class types are
3184      the same or one is a base class of the other: E1 can be converted
3185      to match E2 if the class of T2 is the same type as, or a base
3186      class of, the class of T1, and the cv-qualification of T2 is the
3187      same cv-qualification as, or a greater cv-qualification than, the
3188      cv-qualification of T1.  If the conversion is applied, E1 is
3189      changed to an rvalue of type T2 that still refers to the original
3190      source class object (or the appropriate subobject thereof).  */
3191   if (CLASS_TYPE_P (t1) && CLASS_TYPE_P (t2)
3192       && same_or_base_type_p (TYPE_MAIN_VARIANT (t2), 
3193                               TYPE_MAIN_VARIANT (t1)))
3194     {
3195       if (at_least_as_qualified_p (t2, t1))
3196         {
3197           conv = build1 (IDENTITY_CONV, t1, e1);
3198           if (!same_type_p (TYPE_MAIN_VARIANT (t1), 
3199                             TYPE_MAIN_VARIANT (t2)))
3200             conv = build_conv (BASE_CONV, t2, conv);
3201           return conv;
3202         }
3203       else
3204         return NULL_TREE;
3205     }
3206
3207   /* [expr.cond]
3208
3209      E1 can be converted to match E2 if E1 can be implicitly converted
3210      to the type that expression E2 would have if E2 were converted to
3211      an rvalue (or the type it has, if E2 is an rvalue).  */
3212   return implicit_conversion (t2, t1, e1, LOOKUP_NORMAL);
3213 }
3214
3215 /* Implement [expr.cond].  ARG1, ARG2, and ARG3 are the three
3216    arguments to the conditional expression.  */
3217
3218 tree
3219 build_conditional_expr (tree arg1, tree arg2, tree arg3)
3220 {
3221   tree arg2_type;
3222   tree arg3_type;
3223   tree result;
3224   tree result_type = NULL_TREE;
3225   bool lvalue_p = true;
3226   struct z_candidate *candidates = 0;
3227   struct z_candidate *cand;
3228
3229   /* As a G++ extension, the second argument to the conditional can be
3230      omitted.  (So that `a ? : c' is roughly equivalent to `a ? a :
3231      c'.)  If the second operand is omitted, make sure it is
3232      calculated only once.  */
3233   if (!arg2)
3234     {
3235       if (pedantic)
3236         pedwarn ("ISO C++ forbids omitting the middle term of a ?: expression");
3237
3238       /* Make sure that lvalues remain lvalues.  See g++.oliva/ext1.C.  */
3239       if (real_lvalue_p (arg1))
3240         arg2 = arg1 = stabilize_reference (arg1);
3241       else
3242         arg2 = arg1 = save_expr (arg1);
3243     }
3244
3245   /* [expr.cond]
3246   
3247      The first expr ession is implicitly converted to bool (clause
3248      _conv_).  */
3249   arg1 = cp_convert (boolean_type_node, arg1);
3250
3251   /* If something has already gone wrong, just pass that fact up the
3252      tree.  */
3253   if (arg1 == error_mark_node 
3254       || arg2 == error_mark_node 
3255       || arg3 == error_mark_node 
3256       || TREE_TYPE (arg1) == error_mark_node
3257       || TREE_TYPE (arg2) == error_mark_node
3258       || TREE_TYPE (arg3) == error_mark_node)
3259     return error_mark_node;
3260
3261   /* [expr.cond]
3262
3263      If either the second or the third operand has type (possibly
3264      cv-qualified) void, then the lvalue-to-rvalue (_conv.lval_),
3265      array-to-pointer (_conv.array_), and function-to-pointer
3266      (_conv.func_) standard conversions are performed on the second
3267      and third operands.  */
3268   arg2_type = TREE_TYPE (arg2);
3269   arg3_type = TREE_TYPE (arg3);
3270   if (VOID_TYPE_P (arg2_type) || VOID_TYPE_P (arg3_type))
3271     {
3272       /* Do the conversions.  We don't these for `void' type arguments
3273          since it can't have any effect and since decay_conversion
3274          does not handle that case gracefully.  */
3275       if (!VOID_TYPE_P (arg2_type))
3276         arg2 = decay_conversion (arg2);
3277       if (!VOID_TYPE_P (arg3_type))
3278         arg3 = decay_conversion (arg3);
3279       arg2_type = TREE_TYPE (arg2);
3280       arg3_type = TREE_TYPE (arg3);
3281
3282       /* [expr.cond]
3283
3284          One of the following shall hold:
3285
3286          --The second or the third operand (but not both) is a
3287            throw-expression (_except.throw_); the result is of the
3288            type of the other and is an rvalue.
3289
3290          --Both the second and the third operands have type void; the
3291            result is of type void and is an rvalue.  */
3292       if ((TREE_CODE (arg2) == THROW_EXPR)
3293           ^ (TREE_CODE (arg3) == THROW_EXPR))
3294         result_type = ((TREE_CODE (arg2) == THROW_EXPR) 
3295                        ? arg3_type : arg2_type);
3296       else if (VOID_TYPE_P (arg2_type) && VOID_TYPE_P (arg3_type))
3297         result_type = void_type_node;
3298       else
3299         {
3300           error ("`%E' has type `void' and is not a throw-expression",
3301                     VOID_TYPE_P (arg2_type) ? arg2 : arg3);
3302           return error_mark_node;
3303         }
3304
3305       lvalue_p = false;
3306       goto valid_operands;
3307     }
3308   /* [expr.cond]
3309
3310      Otherwise, if the second and third operand have different types,
3311      and either has (possibly cv-qualified) class type, an attempt is
3312      made to convert each of those operands to the type of the other.  */
3313   else if (!same_type_p (arg2_type, arg3_type)
3314            && (CLASS_TYPE_P (arg2_type) || CLASS_TYPE_P (arg3_type)))
3315     {
3316       tree conv2 = conditional_conversion (arg2, arg3);
3317       tree conv3 = conditional_conversion (arg3, arg2);
3318       
3319       /* [expr.cond]
3320
3321          If both can be converted, or one can be converted but the
3322          conversion is ambiguous, the program is ill-formed.  If
3323          neither can be converted, the operands are left unchanged and
3324          further checking is performed as described below.  If exactly
3325          one conversion is possible, that conversion is applied to the
3326          chosen operand and the converted operand is used in place of
3327          the original operand for the remainder of this section.  */
3328       if ((conv2 && !ICS_BAD_FLAG (conv2) 
3329            && conv3 && !ICS_BAD_FLAG (conv3))
3330           || (conv2 && TREE_CODE (conv2) == AMBIG_CONV)
3331           || (conv3 && TREE_CODE (conv3) == AMBIG_CONV))
3332         {
3333           error ("operands to ?: have different types");
3334           return error_mark_node;
3335         }
3336       else if (conv2 && !ICS_BAD_FLAG (conv2))
3337         {
3338           arg2 = convert_like (conv2, arg2);
3339           arg2 = convert_from_reference (arg2);
3340           /* That may not quite have done the trick.  If the two types
3341              are cv-qualified variants of one another, we will have
3342              just used an IDENTITY_CONV.  */
3343           if (!same_type_p (TREE_TYPE (arg2), arg3_type))
3344             arg2 = convert (arg3_type, arg2);
3345           arg2_type = TREE_TYPE (arg2);
3346         }
3347       else if (conv3 && !ICS_BAD_FLAG (conv3))
3348         {
3349           arg3 = convert_like (conv3, arg3);
3350           arg3 = convert_from_reference (arg3);
3351           if (!same_type_p (TREE_TYPE (arg3), arg2_type))
3352             arg3 = convert (arg2_type, arg3);
3353           arg3_type = TREE_TYPE (arg3);
3354         }
3355     }
3356
3357   /* [expr.cond]
3358
3359      If the second and third operands are lvalues and have the same
3360      type, the result is of that type and is an lvalue.  */
3361   if (real_lvalue_p (arg2) && real_lvalue_p (arg3) && 
3362       same_type_p (arg2_type, arg3_type))
3363     {
3364       result_type = arg2_type;
3365       goto valid_operands;
3366     }
3367
3368   /* [expr.cond]
3369
3370      Otherwise, the result is an rvalue.  If the second and third
3371      operand do not have the same type, and either has (possibly
3372      cv-qualified) class type, overload resolution is used to
3373      determine the conversions (if any) to be applied to the operands
3374      (_over.match.oper_, _over.built_).  */
3375   lvalue_p = false;
3376   if (!same_type_p (arg2_type, arg3_type)
3377       && (CLASS_TYPE_P (arg2_type) || CLASS_TYPE_P (arg3_type)))
3378     {
3379       tree args[3];
3380       tree conv;
3381       bool any_viable_p;
3382
3383       /* Rearrange the arguments so that add_builtin_candidate only has
3384          to know about two args.  In build_builtin_candidates, the
3385          arguments are unscrambled.  */
3386       args[0] = arg2;
3387       args[1] = arg3;
3388       args[2] = arg1;
3389       add_builtin_candidates (&candidates, 
3390                               COND_EXPR, 
3391                               NOP_EXPR,
3392                               ansi_opname (COND_EXPR),
3393                               args,
3394                               LOOKUP_NORMAL);
3395
3396       /* [expr.cond]
3397
3398          If the overload resolution fails, the program is
3399          ill-formed.  */
3400       candidates = splice_viable (candidates, pedantic, &any_viable_p);
3401       if (!any_viable_p)
3402         {
3403           op_error (COND_EXPR, NOP_EXPR, arg1, arg2, arg3, "no match");
3404           print_z_candidates (candidates);
3405           return error_mark_node;
3406         }
3407       cand = tourney (candidates);
3408       if (!cand)
3409         {
3410           op_error (COND_EXPR, NOP_EXPR, arg1, arg2, arg3, "no match");
3411           print_z_candidates (candidates);
3412           return error_mark_node;
3413         }
3414
3415       /* [expr.cond]
3416
3417          Otherwise, the conversions thus determined are applied, and
3418          the converted operands are used in place of the original
3419          operands for the remainder of this section.  */
3420       conv = TREE_VEC_ELT (cand->convs, 0);
3421       arg1 = convert_like (conv, arg1);
3422       conv = TREE_VEC_ELT (cand->convs, 1);
3423       arg2 = convert_like (conv, arg2);
3424       conv = TREE_VEC_ELT (cand->convs, 2);
3425       arg3 = convert_like (conv, arg3);
3426     }
3427
3428   /* [expr.cond]
3429
3430      Lvalue-to-rvalue (_conv.lval_), array-to-pointer (_conv.array_),
3431      and function-to-pointer (_conv.func_) standard conversions are
3432      performed on the second and third operands.
3433
3434      We need to force the lvalue-to-rvalue conversion here for class types,
3435      so we get TARGET_EXPRs; trying to deal with a COND_EXPR of class rvalues
3436      that isn't wrapped with a TARGET_EXPR plays havoc with exception
3437      regions.
3438
3439      We use ocp_convert rather than build_user_type_conversion because the
3440      latter returns NULL_TREE on failure, while the former gives an error.  */
3441
3442   arg2 = force_rvalue (arg2);
3443   arg2_type = TREE_TYPE (arg2);
3444
3445   arg3 = force_rvalue (arg3);
3446   arg3_type = TREE_TYPE (arg3);
3447
3448   if (arg2 == error_mark_node || arg3 == error_mark_node)
3449     return error_mark_node;
3450   
3451   /* [expr.cond]
3452      
3453      After those conversions, one of the following shall hold:
3454
3455      --The second and third operands have the same type; the result  is  of
3456        that type.  */
3457   if (same_type_p (arg2_type, arg3_type))
3458     result_type = arg2_type;
3459   /* [expr.cond]
3460
3461      --The second and third operands have arithmetic or enumeration
3462        type; the usual arithmetic conversions are performed to bring
3463        them to a common type, and the result is of that type.  */
3464   else if ((ARITHMETIC_TYPE_P (arg2_type) 
3465             || TREE_CODE (arg2_type) == ENUMERAL_TYPE)
3466            && (ARITHMETIC_TYPE_P (arg3_type)
3467                || TREE_CODE (arg3_type) == ENUMERAL_TYPE))
3468     {
3469       /* In this case, there is always a common type.  */
3470       result_type = type_after_usual_arithmetic_conversions (arg2_type, 
3471                                                              arg3_type);
3472       
3473       if (TREE_CODE (arg2_type) == ENUMERAL_TYPE
3474           && TREE_CODE (arg3_type) == ENUMERAL_TYPE)
3475          warning ("enumeral mismatch in conditional expression: `%T' vs `%T'",
3476                    arg2_type, arg3_type);
3477       else if (extra_warnings
3478                && ((TREE_CODE (arg2_type) == ENUMERAL_TYPE
3479                     && !same_type_p (arg3_type, type_promotes_to (arg2_type)))
3480                    || (TREE_CODE (arg3_type) == ENUMERAL_TYPE
3481                        && !same_type_p (arg2_type, type_promotes_to (arg3_type)))))
3482         warning ("enumeral and non-enumeral type in conditional expression");
3483       
3484       arg2 = perform_implicit_conversion (result_type, arg2);
3485       arg3 = perform_implicit_conversion (result_type, arg3);
3486     }
3487   /* [expr.cond]
3488
3489      --The second and third operands have pointer type, or one has
3490        pointer type and the other is a null pointer constant; pointer
3491        conversions (_conv.ptr_) and qualification conversions
3492        (_conv.qual_) are performed to bring them to their composite
3493        pointer type (_expr.rel_).  The result is of the composite
3494        pointer type.
3495
3496      --The second and third operands have pointer to member type, or
3497        one has pointer to member type and the other is a null pointer
3498        constant; pointer to member conversions (_conv.mem_) and
3499        qualification conversions (_conv.qual_) are performed to bring
3500        them to a common type, whose cv-qualification shall match the
3501        cv-qualification of either the second or the third operand.
3502        The result is of the common type.  */
3503   else if ((null_ptr_cst_p (arg2) 
3504             && (TYPE_PTR_P (arg3_type) || TYPE_PTRMEM_P (arg3_type)
3505                 || TYPE_PTRMEMFUNC_P (arg3_type)))
3506            || (null_ptr_cst_p (arg3) 
3507                && (TYPE_PTR_P (arg2_type) || TYPE_PTRMEM_P (arg2_type)
3508                 || TYPE_PTRMEMFUNC_P (arg2_type)))
3509            || (TYPE_PTR_P (arg2_type) && TYPE_PTR_P (arg3_type))
3510            || (TYPE_PTRMEM_P (arg2_type) && TYPE_PTRMEM_P (arg3_type))
3511            || (TYPE_PTRMEMFUNC_P (arg2_type) 
3512                && TYPE_PTRMEMFUNC_P (arg3_type)))
3513     {
3514       result_type = composite_pointer_type (arg2_type, arg3_type, arg2,
3515                                             arg3, "conditional expression");
3516       arg2 = perform_implicit_conversion (result_type, arg2);
3517       arg3 = perform_implicit_conversion (result_type, arg3);
3518     }
3519
3520   if (!result_type)
3521     {
3522       error ("operands to ?: have different types");
3523       return error_mark_node;
3524     }
3525
3526  valid_operands:
3527   result = fold (build (COND_EXPR, result_type, arg1, arg2, arg3));
3528   /* Expand both sides into the same slot, hopefully the target of the
3529      ?: expression.  We used to check for TARGET_EXPRs here, but now we
3530      sometimes wrap them in NOP_EXPRs so the test would fail.  */
3531   if (!lvalue_p && IS_AGGR_TYPE (result_type))
3532     result = build_target_expr_with_type (result, result_type);
3533   
3534   /* If this expression is an rvalue, but might be mistaken for an
3535      lvalue, we must add a NON_LVALUE_EXPR.  */
3536   if (!lvalue_p && real_lvalue_p (result))
3537     result = build1 (NON_LVALUE_EXPR, result_type, result);
3538
3539   return result;
3540 }
3541
3542 /* OPERAND is an operand to an expression.  Perform necessary steps
3543    required before using it.  If OPERAND is NULL_TREE, NULL_TREE is
3544    returned.  */
3545
3546 static tree
3547 prep_operand (tree operand)
3548 {
3549   if (operand)
3550     {
3551       if (TREE_CODE (operand) == OFFSET_REF)
3552         operand = resolve_offset_ref (operand);
3553       operand = convert_from_reference (operand);
3554       if (CLASS_TYPE_P (TREE_TYPE (operand))
3555           && CLASSTYPE_TEMPLATE_INSTANTIATION (TREE_TYPE (operand)))
3556         /* Make sure the template type is instantiated now.  */
3557         instantiate_class_template (TYPE_MAIN_VARIANT (TREE_TYPE (operand)));
3558     }
3559
3560   return operand;
3561 }
3562
3563 /* Add each of the viable functions in FNS (a FUNCTION_DECL or
3564    OVERLOAD) to the CANDIDATES, returning an updated list of
3565    CANDIDATES.  The ARGS are the arguments provided to the call,
3566    without any implicit object parameter.  The EXPLICIT_TARGS are
3567    explicit template arguments provided.  TEMPLATE_ONLY is true if
3568    only template fucntions should be considered.  CONVERSION_PATH,
3569    ACCESS_PATH, and FLAGS are as for add_function_candidate.  */
3570
3571 static void
3572 add_candidates (tree fns, tree args, 
3573                 tree explicit_targs, bool template_only,
3574                 tree conversion_path, tree access_path,
3575                 int flags,
3576                 struct z_candidate **candidates)
3577 {
3578   tree ctype;
3579   tree non_static_args;
3580
3581   ctype = conversion_path ? BINFO_TYPE (conversion_path) : NULL_TREE;
3582   /* Delay creating the implicit this parameter until it is needed.  */
3583   non_static_args = NULL_TREE;
3584
3585   while (fns) 
3586     {
3587       tree fn;
3588       tree fn_args;
3589
3590       fn = OVL_CURRENT (fns);
3591       /* Figure out which set of arguments to use.  */
3592       if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
3593         {
3594           /* If this function is a non-static member, prepend the implicit
3595              object parameter.  */
3596           if (!non_static_args)
3597             non_static_args = tree_cons (NULL_TREE,
3598                                          build_this (TREE_VALUE (args)),
3599                                          TREE_CHAIN (args));
3600           fn_args = non_static_args;
3601         }
3602       else
3603         /* Otherwise, just use the list of arguments provided.  */
3604         fn_args = args;
3605
3606       if (TREE_CODE (fn) == TEMPLATE_DECL)
3607         add_template_candidate (candidates, 
3608                                 fn, 
3609                                 ctype,
3610                                 explicit_targs,
3611                                 fn_args,
3612                                 NULL_TREE,
3613                                 access_path,
3614                                 conversion_path,
3615                                 flags,
3616                                 DEDUCE_CALL);
3617       else if (!template_only)
3618         add_function_candidate (candidates,
3619                                 fn,
3620                                 ctype,
3621                                 fn_args,
3622                                 access_path,
3623                                 conversion_path,
3624                                 flags);
3625       fns = OVL_NEXT (fns);
3626     }
3627 }
3628
3629 tree
3630 build_new_op (enum tree_code code, int flags, tree arg1, tree arg2, tree arg3)
3631 {
3632   struct z_candidate *candidates = 0, *cand;
3633   tree arglist, fnname;
3634   tree args[3];
3635   enum tree_code code2 = NOP_EXPR;
3636   tree conv;
3637   bool strict_p;
3638   bool any_viable_p;
3639
3640   if (error_operand_p (arg1) 
3641       || error_operand_p (arg2) 
3642       || error_operand_p (arg3))
3643     return error_mark_node;
3644
3645   if (code == MODIFY_EXPR)
3646     {
3647       code2 = TREE_CODE (arg3);
3648       arg3 = NULL_TREE;
3649       fnname = ansi_assopname (code2);
3650     }
3651   else
3652     fnname = ansi_opname (code);
3653
3654   arg1 = prep_operand (arg1);
3655   
3656   switch (code)
3657     {
3658     case NEW_EXPR:
3659     case VEC_NEW_EXPR:
3660     case VEC_DELETE_EXPR:
3661     case DELETE_EXPR:
3662       /* Use build_op_new_call and build_op_delete_call instead.  */
3663       abort ();
3664
3665     case CALL_EXPR:
3666       return build_object_call (arg1, arg2);
3667
3668     default:
3669       break;
3670     }
3671
3672   arg2 = prep_operand (arg2);
3673   arg3 = prep_operand (arg3);
3674   
3675   if (code == COND_EXPR)
3676     {
3677       if (arg2 == NULL_TREE
3678           || TREE_CODE (TREE_TYPE (arg2)) == VOID_TYPE
3679           || TREE_CODE (TREE_TYPE (arg3)) == VOID_TYPE
3680           || (! IS_OVERLOAD_TYPE (TREE_TYPE (arg2))
3681               && ! IS_OVERLOAD_TYPE (TREE_TYPE (arg3))))
3682         goto builtin;
3683     }
3684   else if (! IS_OVERLOAD_TYPE (TREE_TYPE (arg1))
3685            && (! arg2 || ! IS_OVERLOAD_TYPE (TREE_TYPE (arg2))))
3686     goto builtin;
3687
3688   if (code == POSTINCREMENT_EXPR || code == POSTDECREMENT_EXPR)
3689     arg2 = integer_zero_node;
3690
3691   arglist = NULL_TREE;
3692   if (arg3)
3693     arglist = tree_cons (NULL_TREE, arg3, arglist);
3694   if (arg2)
3695     arglist = tree_cons (NULL_TREE, arg2, arglist);
3696   arglist = tree_cons (NULL_TREE, arg1, arglist);
3697
3698   /* Add namespace-scope operators to the list of functions to
3699      consider.  */
3700   add_candidates (lookup_function_nonclass (fnname, arglist),
3701                   arglist, NULL_TREE, false, NULL_TREE, NULL_TREE,
3702                   flags, &candidates);
3703   /* Add class-member operators to the candidate set.  */
3704   if (CLASS_TYPE_P (TREE_TYPE (arg1)))
3705     {
3706       tree fns;
3707
3708       fns = lookup_fnfields (TYPE_BINFO (TREE_TYPE (arg1)), fnname, 1);
3709       if (fns == error_mark_node)
3710         return fns;
3711       if (fns)
3712         add_candidates (BASELINK_FUNCTIONS (fns), arglist, 
3713                         NULL_TREE, false,
3714                         BASELINK_BINFO (fns),
3715                         TYPE_BINFO (TREE_TYPE (arg1)),
3716                         flags, &candidates);
3717     }
3718
3719   /* Rearrange the arguments for ?: so that add_builtin_candidate only has
3720      to know about two args; a builtin candidate will always have a first
3721      parameter of type bool.  We'll handle that in
3722      build_builtin_candidate.  */
3723   if (code == COND_EXPR)
3724     {
3725       args[0] = arg2;
3726       args[1] = arg3;
3727       args[2] = arg1;
3728     }
3729   else
3730     {
3731       args[0] = arg1;
3732       args[1] = arg2;
3733       args[2] = NULL_TREE;
3734     }
3735
3736   add_builtin_candidates (&candidates, code, code2, fnname, args, flags);
3737
3738   switch (code)
3739     {
3740     case COMPOUND_EXPR:
3741     case ADDR_EXPR:
3742       /* For these, the built-in candidates set is empty
3743          [over.match.oper]/3.  We don't want non-strict matches
3744          because exact matches are always possible with built-in
3745          operators.  The built-in candidate set for COMPONENT_REF
3746          would be empty too, but since there are no such built-in
3747          operators, we accept non-strict matches for them.  */
3748       strict_p = true;
3749       break;
3750
3751     default:
3752       strict_p = pedantic;
3753       break;
3754     }      
3755
3756   candidates = splice_viable (candidates, strict_p, &any_viable_p);
3757   if (!any_viable_p)
3758     {
3759       switch (code)
3760         {
3761         case POSTINCREMENT_EXPR:
3762         case POSTDECREMENT_EXPR:
3763           /* Look for an `operator++ (int)'.  If they didn't have
3764              one, then we fall back to the old way of doing things.  */
3765           if (flags & LOOKUP_COMPLAIN)
3766             pedwarn ("no `%D(int)' declared for postfix `%s', trying prefix operator instead",
3767                         fnname, 
3768                         operator_name_info[code].name);
3769           if (code == POSTINCREMENT_EXPR)
3770             code = PREINCREMENT_EXPR;
3771           else
3772             code = PREDECREMENT_EXPR;   
3773           return build_new_op (code, flags, arg1, NULL_TREE, NULL_TREE);
3774           
3775           /* The caller will deal with these.  */
3776         case ADDR_EXPR:
3777         case COMPOUND_EXPR:
3778         case COMPONENT_REF:
3779           return NULL_TREE;
3780
3781         default:
3782           break;
3783         }
3784       if (flags & LOOKUP_COMPLAIN)
3785         {
3786           op_error (code, code2, arg1, arg2, arg3, "no match");
3787           print_z_candidates (candidates);
3788         }
3789       return error_mark_node;
3790     }
3791
3792   cand = tourney (candidates);
3793   if (cand == 0)
3794     {
3795       if (flags & LOOKUP_COMPLAIN)
3796         {
3797           op_error (code, code2, arg1, arg2, arg3, "ambiguous overload");
3798           print_z_candidates (candidates);
3799         }
3800       return error_mark_node;
3801     }
3802
3803   if (TREE_CODE (cand->fn) == FUNCTION_DECL)
3804     {
3805       if (warn_synth
3806           && fnname == ansi_assopname (NOP_EXPR)
3807           && DECL_ARTIFICIAL (cand->fn)
3808           && candidates->next
3809           && ! candidates->next->next)
3810         {
3811           warning ("using synthesized `%#D' for copy assignment",
3812                       cand->fn);
3813           cp_warning_at ("  where cfront would use `%#D'",
3814                          cand == candidates
3815                          ? candidates->next->fn
3816                          : candidates->fn);
3817         }
3818
3819       return build_over_call (cand, LOOKUP_NORMAL);
3820     }
3821
3822   /* Check for comparison of different enum types.  */
3823   switch (code)
3824     {
3825     case GT_EXPR:
3826     case LT_EXPR:
3827     case GE_EXPR:
3828     case LE_EXPR:
3829     case EQ_EXPR:
3830     case NE_EXPR:
3831       if (TREE_CODE (TREE_TYPE (arg1)) == ENUMERAL_TYPE 
3832           && TREE_CODE (TREE_TYPE (arg2)) == ENUMERAL_TYPE 
3833           && (TYPE_MAIN_VARIANT (TREE_TYPE (arg1))
3834               != TYPE_MAIN_VARIANT (TREE_TYPE (arg2))))
3835         {
3836           warning ("comparison between `%#T' and `%#T'", 
3837                       TREE_TYPE (arg1), TREE_TYPE (arg2));
3838         }
3839       break;
3840     default:
3841       break;
3842     }
3843
3844   /* We need to strip any leading REF_BIND so that bitfields don't cause
3845      errors.  This should not remove any important conversions, because
3846      builtins don't apply to class objects directly.  */
3847   conv = TREE_VEC_ELT (cand->convs, 0);
3848   if (TREE_CODE (conv) == REF_BIND)
3849     conv = TREE_OPERAND (conv, 0);
3850   arg1 = convert_like (conv, arg1);
3851   if (arg2)
3852     {
3853       conv = TREE_VEC_ELT (cand->convs, 1);
3854       if (TREE_CODE (conv) == REF_BIND)
3855         conv = TREE_OPERAND (conv, 0);
3856       arg2 = convert_like (conv, arg2);
3857     }
3858   if (arg3)
3859     {
3860       conv = TREE_VEC_ELT (cand->convs, 2);
3861       if (TREE_CODE (conv) == REF_BIND)
3862         conv = TREE_OPERAND (conv, 0);
3863       arg3 = convert_like (conv, arg3);
3864     }
3865
3866 builtin:
3867   switch (code)
3868     {
3869     case MODIFY_EXPR:
3870       return build_modify_expr (arg1, code2, arg2);
3871
3872     case INDIRECT_REF:
3873       return build_indirect_ref (arg1, "unary *");
3874
3875     case PLUS_EXPR:
3876     case MINUS_EXPR:
3877     case MULT_EXPR:
3878     case TRUNC_DIV_EXPR:
3879     case GT_EXPR:
3880     case LT_EXPR:
3881     case GE_EXPR:
3882     case LE_EXPR:
3883     case EQ_EXPR:
3884     case NE_EXPR:
3885     case MAX_EXPR:
3886     case MIN_EXPR:
3887     case LSHIFT_EXPR:
3888     case RSHIFT_EXPR:
3889     case TRUNC_MOD_EXPR:
3890     case BIT_AND_EXPR:
3891     case BIT_IOR_EXPR:
3892     case BIT_XOR_EXPR:
3893     case TRUTH_ANDIF_EXPR:
3894     case TRUTH_ORIF_EXPR:
3895       return cp_build_binary_op (code, arg1, arg2);
3896
3897     case CONVERT_EXPR:
3898     case NEGATE_EXPR:
3899     case BIT_NOT_EXPR:
3900     case TRUTH_NOT_EXPR:
3901     case PREINCREMENT_EXPR:
3902     case POSTINCREMENT_EXPR:
3903     case PREDECREMENT_EXPR:
3904     case POSTDECREMENT_EXPR:
3905     case REALPART_EXPR:
3906     case IMAGPART_EXPR:
3907       return build_unary_op (code, arg1, candidates != 0);
3908
3909     case ARRAY_REF:
3910       return build_array_ref (arg1, arg2);
3911
3912     case COND_EXPR:
3913       return build_conditional_expr (arg1, arg2, arg3);
3914
3915     case MEMBER_REF:
3916       return build_m_component_ref
3917         (build_indirect_ref (arg1, NULL), arg2);
3918
3919       /* The caller will deal with these.  */
3920     case ADDR_EXPR:
3921     case COMPONENT_REF:
3922     case COMPOUND_EXPR:
3923       return NULL_TREE;
3924
3925     default:
3926       abort ();
3927       return NULL_TREE;
3928     }
3929 }
3930
3931 /* Build a call to operator delete.  This has to be handled very specially,
3932    because the restrictions on what signatures match are different from all
3933    other call instances.  For a normal delete, only a delete taking (void *)
3934    or (void *, size_t) is accepted.  For a placement delete, only an exact
3935    match with the placement new is accepted.
3936
3937    CODE is either DELETE_EXPR or VEC_DELETE_EXPR.
3938    ADDR is the pointer to be deleted.
3939    SIZE is the size of the memory block to be deleted.
3940    FLAGS are the usual overloading flags.
3941    PLACEMENT is the corresponding placement new call, or NULL_TREE.  */
3942
3943 tree
3944 build_op_delete_call (enum tree_code code, tree addr, tree size,
3945                       int flags, tree placement)
3946 {
3947   tree fn = NULL_TREE;
3948   tree fns, fnname, fntype, argtypes, args, type;
3949   int pass;
3950
3951   if (addr == error_mark_node)
3952     return error_mark_node;
3953
3954   type = TREE_TYPE (TREE_TYPE (addr));
3955   while (TREE_CODE (type) == ARRAY_TYPE)
3956     type = TREE_TYPE (type);
3957
3958   fnname = ansi_opname (code);
3959
3960   if (IS_AGGR_TYPE (type) && ! (flags & LOOKUP_GLOBAL))
3961     /* In [class.free]
3962
3963        If the result of the lookup is ambiguous or inaccessible, or if
3964        the lookup selects a placement deallocation function, the
3965        program is ill-formed.
3966   
3967        Therefore, we ask lookup_fnfields to complain ambout ambiguity.  */
3968     {
3969       fns = lookup_fnfields (TYPE_BINFO (type), fnname, 1);
3970       if (fns == error_mark_node)
3971         return error_mark_node;
3972     }
3973   else
3974     fns = NULL_TREE;
3975
3976   if (fns == NULL_TREE)
3977     fns = lookup_name_nonclass (fnname);
3978
3979   if (placement)
3980     {
3981       tree alloc_fn;
3982       tree call_expr;
3983
3984       /* Find the allocation function that is being called.  */
3985       call_expr = placement;
3986       /* Sometimes we have a COMPOUND_EXPR, rather than a simple
3987          CALL_EXPR.  */
3988       while (TREE_CODE (call_expr) == COMPOUND_EXPR)
3989         call_expr = TREE_OPERAND (call_expr, 1);
3990       /* Extract the function.  */
3991       alloc_fn = get_callee_fndecl (call_expr);
3992       my_friendly_assert (alloc_fn != NULL_TREE, 20020327);
3993       /* Then the second parm type.  */
3994       argtypes = TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (alloc_fn)));
3995       /* Also the second argument.  */
3996       args = TREE_CHAIN (TREE_OPERAND (call_expr, 1));
3997     }
3998   else
3999     {
4000       /* First try it without the size argument.  */
4001       argtypes = void_list_node;
4002       args = NULL_TREE;
4003     }
4004
4005   /* Strip const and volatile from addr.  */
4006   addr = cp_convert (ptr_type_node, addr);
4007
4008   /* We make two tries at finding a matching `operator delete'.  On
4009      the first pass, we look for an one-operator (or placement)
4010      operator delete.  If we're not doing placement delete, then on
4011      the second pass we look for a two-argument delete.  */
4012   for (pass = 0; pass < (placement ? 1 : 2); ++pass) 
4013     {
4014       if (pass == 0)
4015         argtypes = tree_cons (NULL_TREE, ptr_type_node, argtypes);
4016       else 
4017         /* Normal delete; now try to find a match including the size
4018            argument.  */
4019         argtypes = tree_cons (NULL_TREE, ptr_type_node,
4020                               tree_cons (NULL_TREE, sizetype, 
4021                                          void_list_node));
4022       fntype = build_function_type (void_type_node, argtypes);
4023
4024       /* Go through the `operator delete' functions looking for one
4025          with a matching type.  */
4026       for (fn = BASELINK_P (fns) ? BASELINK_FUNCTIONS (fns) : fns; 
4027            fn; 
4028            fn = OVL_NEXT (fn))
4029         {
4030           tree t;
4031
4032           /* Exception specifications on the `delete' operator do not
4033              matter.  */
4034           t = build_exception_variant (TREE_TYPE (OVL_CURRENT (fn)),
4035                                        NULL_TREE);
4036           /* We also don't compare attributes.  We're really just
4037              trying to check the types of the first two parameters.  */
4038           if (comptypes (t, fntype, COMPARE_NO_ATTRIBUTES))
4039             break;
4040         }
4041
4042       /* If we found a match, we're done.  */
4043       if (fn)
4044         break;
4045     }
4046
4047   /* If we have a matching function, call it.  */
4048   if (fn)
4049     {
4050       /* Make sure we have the actual function, and not an
4051          OVERLOAD.  */
4052       fn = OVL_CURRENT (fn);
4053
4054       /* If the FN is a member function, make sure that it is
4055          accessible.  */
4056       if (DECL_CLASS_SCOPE_P (fn))
4057         enforce_access (type, fn);
4058
4059       if (pass == 0)
4060         args = tree_cons (NULL_TREE, addr, args);
4061       else
4062         args = tree_cons (NULL_TREE, addr, 
4063                           build_tree_list (NULL_TREE, size));
4064
4065       return build_function_call (fn, args);
4066     }
4067
4068   /* If we are doing placement delete we do nothing if we don't find a
4069      matching op delete.  */
4070   if (placement)
4071     return NULL_TREE;
4072
4073   error ("no suitable `operator delete' for `%T'", type);
4074   return error_mark_node;
4075 }
4076
4077 /* If the current scope isn't allowed to access DECL along
4078    BASETYPE_PATH, give an error.  The most derived class in
4079    BASETYPE_PATH is the one used to qualify DECL.  */
4080
4081 bool
4082 enforce_access (tree basetype_path, tree decl)
4083 {
4084   if (!accessible_p (basetype_path, decl))
4085     {
4086       if (TREE_PRIVATE (decl))
4087         cp_error_at ("`%+#D' is private", decl);
4088       else if (TREE_PROTECTED (decl))
4089         cp_error_at ("`%+#D' is protected", decl);
4090       else
4091         cp_error_at ("`%+#D' is inaccessible", decl);
4092       error ("within this context");
4093       return false;
4094     }
4095
4096   return true;
4097 }
4098
4099 /* Perform the conversions in CONVS on the expression EXPR. 
4100    FN and ARGNUM are used for diagnostics.  ARGNUM is zero based, -1
4101    indicates the `this' argument of a method.  INNER is nonzero when
4102    being called to continue a conversion chain. It is negative when a
4103    reference binding will be applied, positive otherwise.  */
4104
4105 static tree
4106 convert_like_real (tree convs, tree expr, tree fn, int argnum, int inner)
4107 {
4108   int savew, savee;
4109
4110   tree totype = TREE_TYPE (convs);
4111
4112   if (ICS_BAD_FLAG (convs)
4113       && TREE_CODE (convs) != USER_CONV
4114       && TREE_CODE (convs) != AMBIG_CONV
4115       && TREE_CODE (convs) != REF_BIND)
4116     {
4117       tree t = convs; 
4118       for (; t; t = TREE_OPERAND (t, 0))
4119         {
4120           if (TREE_CODE (t) == USER_CONV || !ICS_BAD_FLAG (t))
4121             {
4122               expr = convert_like_real (t, expr, fn, argnum, 1);
4123               break;
4124             }
4125           else if (TREE_CODE (t) == AMBIG_CONV)
4126             return convert_like_real (t, expr, fn, argnum, 1);
4127           else if (TREE_CODE (t) == IDENTITY_CONV)
4128             break;
4129         }
4130       pedwarn ("invalid conversion from `%T' to `%T'", TREE_TYPE (expr), totype);
4131       if (fn)
4132         pedwarn ("  initializing argument %P of `%D'", argnum, fn);
4133       return cp_convert (totype, expr);
4134     }
4135   
4136   if (!inner)
4137     expr = dubious_conversion_warnings
4138              (totype, expr, "argument", fn, argnum);
4139   switch (TREE_CODE (convs))
4140     {
4141     case USER_CONV:
4142       {
4143         struct z_candidate *cand = USER_CONV_CAND (convs);
4144         tree convfn = cand->fn;
4145         tree args;
4146
4147         if (DECL_CONSTRUCTOR_P (convfn))
4148           {
4149             tree t = build_int_2 (0, 0);
4150             TREE_TYPE (t) = build_pointer_type (DECL_CONTEXT (convfn));
4151
4152             args = build_tree_list (NULL_TREE, expr);
4153             if (DECL_HAS_IN_CHARGE_PARM_P (convfn)
4154                 || DECL_HAS_VTT_PARM_P (convfn))
4155               /* We should never try to call the abstract or base constructor
4156                  from here.  */
4157               abort ();
4158             args = tree_cons (NULL_TREE, t, args);
4159           }
4160         else
4161           args = build_this (expr);
4162         expr = build_over_call (cand, LOOKUP_NORMAL);
4163
4164         /* If this is a constructor or a function returning an aggr type,
4165            we need to build up a TARGET_EXPR.  */
4166         if (DECL_CONSTRUCTOR_P (convfn))
4167           expr = build_cplus_new (totype, expr);
4168
4169         /* The result of the call is then used to direct-initialize the object
4170            that is the destination of the copy-initialization.  [dcl.init]
4171
4172            Note that this step is not reflected in the conversion sequence;
4173            it affects the semantics when we actually perform the
4174            conversion, but is not considered during overload resolution.
4175
4176            If the target is a class, that means call a ctor.  */
4177         if (IS_AGGR_TYPE (totype)
4178             && (inner >= 0 || !lvalue_p (expr)))
4179           {
4180             savew = warningcount, savee = errorcount;
4181             expr = build_special_member_call
4182               (NULL_TREE, complete_ctor_identifier,
4183                build_tree_list (NULL_TREE, expr), TYPE_BINFO (totype),
4184                /* Core issue 84, now a DR, says that we don't allow UDCs
4185                   for these args (which deliberately breaks copy-init of an
4186                   auto_ptr<Base> from an auto_ptr<Derived>).  */
4187                LOOKUP_NORMAL|LOOKUP_ONLYCONVERTING|LOOKUP_NO_CONVERSION);
4188
4189             /* Tell the user where this failing constructor call came from.  */
4190             if (fn)
4191               {
4192                 if (warningcount > savew)
4193                   warning
4194                     ("  initializing argument %P of `%D' from result of `%D'",
4195                      argnum, fn, convfn);
4196                 else if (errorcount > savee)
4197                   error
4198                     ("  initializing argument %P of `%D' from result of `%D'",
4199                      argnum, fn, convfn);
4200               }
4201             else
4202               {
4203                 if (warningcount > savew)
4204                   warning ("  initializing temporary from result of `%D'",
4205                               convfn);
4206                 else if (errorcount > savee)
4207                   error ("  initializing temporary from result of `%D'",
4208                             convfn);
4209               }
4210             expr = build_cplus_new (totype, expr);
4211           }
4212         return expr;
4213       }
4214     case IDENTITY_CONV:
4215       if (type_unknown_p (expr))
4216         expr = instantiate_type (totype, expr, tf_error | tf_warning);
4217       /* Convert a non-array constant variable to its underlying value, unless we
4218          are about to bind it to a reference, in which case we need to
4219          leave it as an lvalue.  */
4220       if (inner >= 0
4221           && TREE_CODE (TREE_TYPE (expr)) != ARRAY_TYPE)
4222         expr = decl_constant_value (expr);
4223       return expr;
4224     case AMBIG_CONV:
4225       /* Call build_user_type_conversion again for the error.  */
4226       return build_user_type_conversion
4227         (totype, TREE_OPERAND (convs, 0), LOOKUP_NORMAL);
4228
4229     default:
4230       break;
4231     };
4232
4233   expr = convert_like_real (TREE_OPERAND (convs, 0), expr, fn, argnum,
4234                             TREE_CODE (convs) == REF_BIND ? -1 : 1);
4235   if (expr == error_mark_node)
4236     return error_mark_node;
4237
4238   switch (TREE_CODE (convs))
4239     {
4240     case RVALUE_CONV:
4241       if (! IS_AGGR_TYPE (totype))
4242         return expr;
4243       /* else fall through */
4244     case BASE_CONV:
4245       if (TREE_CODE (convs) == BASE_CONV && !NEED_TEMPORARY_P (convs))
4246         {
4247           /* We are going to bind a reference directly to a base-class
4248              subobject of EXPR.  */
4249           tree base_ptr = build_pointer_type (totype);
4250
4251           /* Build an expression for `*((base*) &expr)'.  */
4252           expr = build_unary_op (ADDR_EXPR, expr, 0);
4253           expr = perform_implicit_conversion (base_ptr, expr);
4254           expr = build_indirect_ref (expr, "implicit conversion");
4255           return expr;
4256         }
4257
4258       /* Copy-initialization where the cv-unqualified version of the source
4259          type is the same class as, or a derived class of, the class of the
4260          destination [is treated as direct-initialization].  [dcl.init] */
4261       savew = warningcount, savee = errorcount;
4262       expr = build_special_member_call (NULL_TREE, complete_ctor_identifier,
4263                                         build_tree_list (NULL_TREE, expr),
4264                                         TYPE_BINFO (totype),
4265                                         LOOKUP_NORMAL|LOOKUP_ONLYCONVERTING);
4266       if (fn)
4267         {
4268           if (warningcount > savew)
4269             warning ("  initializing argument %P of `%D'", argnum, fn);
4270           else if (errorcount > savee)
4271             error ("  initializing argument %P of `%D'", argnum, fn);
4272         }
4273       return build_cplus_new (totype, expr);
4274
4275     case REF_BIND:
4276       {
4277         tree ref_type = totype;
4278
4279         /* If necessary, create a temporary.  */
4280         if (NEED_TEMPORARY_P (convs) || !non_cast_lvalue_p (expr))
4281           {
4282             tree type = TREE_TYPE (TREE_OPERAND (convs, 0));
4283             expr = build_target_expr_with_type (expr, type);
4284           }
4285
4286         /* Take the address of the thing to which we will bind the
4287            reference.  */
4288         expr = build_unary_op (ADDR_EXPR, expr, 1);
4289         if (expr == error_mark_node)
4290           return error_mark_node;
4291
4292         /* Convert it to a pointer to the type referred to by the
4293            reference.  This will adjust the pointer if a derived to
4294            base conversion is being performed.  */
4295         expr = cp_convert (build_pointer_type (TREE_TYPE (ref_type)), 
4296                            expr);
4297         /* Convert the pointer to the desired reference type.  */
4298         return build_nop (ref_type, expr);
4299       }
4300
4301     case LVALUE_CONV:
4302       return decay_conversion (expr);
4303
4304     case QUAL_CONV:
4305       /* Warn about deprecated conversion if appropriate.  */
4306       string_conv_p (totype, expr, 1);
4307       break;
4308       
4309     default:
4310       break;
4311     }
4312   return ocp_convert (totype, expr, CONV_IMPLICIT,
4313                       LOOKUP_NORMAL|LOOKUP_NO_CONVERSION);
4314 }
4315
4316 /* Build a call to __builtin_trap which can be used in an expression.  */
4317
4318 static tree
4319 call_builtin_trap (void)
4320 {
4321   tree fn = get_identifier ("__builtin_trap");
4322   if (IDENTIFIER_GLOBAL_VALUE (fn))
4323     fn = IDENTIFIER_GLOBAL_VALUE (fn);
4324   else
4325     abort ();
4326
4327   fn = build_call (fn, NULL_TREE);
4328   fn = build (COMPOUND_EXPR, integer_type_node, fn, integer_zero_node);
4329   return fn;
4330 }
4331
4332 /* ARG is being passed to a varargs function.  Perform any conversions
4333    required.  Array/function to pointer decay must have already happened.
4334    Return the converted value.  */
4335
4336 tree
4337 convert_arg_to_ellipsis (tree arg)
4338 {
4339   if (TREE_CODE (TREE_TYPE (arg)) == REAL_TYPE
4340       && (TYPE_PRECISION (TREE_TYPE (arg))
4341           < TYPE_PRECISION (double_type_node)))
4342     /* Convert `float' to `double'.  */
4343     arg = cp_convert (double_type_node, arg);
4344   else
4345     /* Convert `short' and `char' to full-size `int'.  */
4346     arg = default_conversion (arg);
4347
4348   arg = require_complete_type (arg);
4349   
4350   if (arg != error_mark_node && ! pod_type_p (TREE_TYPE (arg)))
4351     {
4352       /* Undefined behavior [expr.call] 5.2.2/7.  We used to just warn
4353          here and do a bitwise copy, but now cp_expr_size will abort if we
4354          try to do that.  */
4355       warning ("cannot pass objects of non-POD type `%#T' through `...'; \
4356 call will abort at runtime",
4357                TREE_TYPE (arg));
4358       arg = call_builtin_trap ();
4359     }
4360
4361   return arg;
4362 }
4363
4364 /* va_arg (EXPR, TYPE) is a builtin. Make sure it is not abused.  */
4365
4366 tree
4367 build_x_va_arg (tree expr, tree type)
4368 {
4369   if (processing_template_decl)
4370     return build_min (VA_ARG_EXPR, type, expr);
4371   
4372   type = complete_type_or_else (type, NULL_TREE);
4373
4374   if (expr == error_mark_node || !type)
4375     return error_mark_node;
4376   
4377   if (! pod_type_p (type))
4378     {
4379       /* Undefined behavior [expr.call] 5.2.2/7.  */
4380       warning ("cannot receive objects of non-POD type `%#T' through `...'",
4381                   type);
4382     }
4383   
4384   return build_va_arg (expr, type);
4385 }
4386
4387 /* TYPE has been given to va_arg.  Apply the default conversions which
4388    would have happened when passed via ellipsis.  Return the promoted
4389    type, or the passed type if there is no change.  */
4390
4391 tree
4392 cxx_type_promotes_to (tree type)
4393 {
4394   tree promote;
4395
4396   if (TREE_CODE (type) == ARRAY_TYPE)
4397     return build_pointer_type (TREE_TYPE (type));
4398
4399   if (TREE_CODE (type) == FUNCTION_TYPE)
4400     return build_pointer_type (type);
4401
4402   promote = type_promotes_to (type);
4403   if (same_type_p (type, promote))
4404     promote = type;
4405   
4406   return promote;
4407 }
4408
4409 /* ARG is a default argument expression being passed to a parameter of
4410    the indicated TYPE, which is a parameter to FN.  Do any required
4411    conversions.  Return the converted value.  */
4412
4413 tree
4414 convert_default_arg (tree type, tree arg, tree fn, int parmnum)
4415 {
4416   /* If the ARG is an unparsed default argument expression, the
4417      conversion cannot be performed.  */
4418   if (TREE_CODE (arg) == DEFAULT_ARG)
4419     {
4420       error ("the default argument for parameter %d of `%D' has "
4421              "not yet been parsed",
4422              parmnum, fn);
4423       return error_mark_node;
4424     }
4425
4426   if (fn && DECL_TEMPLATE_INFO (fn))
4427     arg = tsubst_default_argument (fn, type, arg);
4428
4429   arg = break_out_target_exprs (arg);
4430
4431   if (TREE_CODE (arg) == CONSTRUCTOR)
4432     {
4433       arg = digest_init (type, arg, 0);
4434       arg = convert_for_initialization (0, type, arg, LOOKUP_NORMAL,
4435                                         "default argument", fn, parmnum);
4436     }
4437   else
4438     {
4439       /* This could get clobbered by the following call.  */
4440       if (TREE_HAS_CONSTRUCTOR (arg))
4441         arg = copy_node (arg);
4442
4443       arg = convert_for_initialization (0, type, arg, LOOKUP_NORMAL,
4444                                         "default argument", fn, parmnum);
4445       arg = convert_for_arg_passing (type, arg);
4446     }
4447
4448   return arg;
4449 }
4450
4451 /* Returns the type which will really be used for passing an argument of
4452    type TYPE.  */
4453
4454 tree
4455 type_passed_as (tree type)
4456 {
4457   /* Pass classes with copy ctors by invisible reference.  */
4458   if (TREE_ADDRESSABLE (type))
4459     type = build_reference_type (type);
4460   else if (PROMOTE_PROTOTYPES
4461            && INTEGRAL_TYPE_P (type)
4462            && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
4463     type = integer_type_node;
4464
4465   return type;
4466 }
4467
4468 /* Actually perform the appropriate conversion.  */
4469
4470 tree
4471 convert_for_arg_passing (tree type, tree val)
4472 {
4473   if (val == error_mark_node)
4474     ;
4475   /* Pass classes with copy ctors by invisible reference.  */
4476   else if (TREE_ADDRESSABLE (type))
4477     val = build1 (ADDR_EXPR, build_reference_type (type), val);
4478   else if (PROMOTE_PROTOTYPES
4479            && INTEGRAL_TYPE_P (type)
4480            && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
4481     val = default_conversion (val);
4482   return val;
4483 }
4484
4485 /* Subroutine of the various build_*_call functions.  Overload resolution
4486    has chosen a winning candidate CAND; build up a CALL_EXPR accordingly.
4487    ARGS is a TREE_LIST of the unconverted arguments to the call.  FLAGS is a
4488    bitmask of various LOOKUP_* flags which apply to the call itself.  */
4489
4490 static tree
4491 build_over_call (struct z_candidate *cand, int flags)
4492 {
4493   tree fn = cand->fn;
4494   tree args = cand->args;
4495   tree convs = cand->convs;
4496   tree converted_args = NULL_TREE;
4497   tree parm = TYPE_ARG_TYPES (TREE_TYPE (fn));
4498   tree conv, arg, val;
4499   int i = 0;
4500   int is_method = 0;
4501
4502   /* Give any warnings we noticed during overload resolution.  */
4503   if (cand->warnings)
4504     for (val = cand->warnings; val; val = TREE_CHAIN (val))
4505       joust (cand, WRAPPER_ZC (TREE_VALUE (val)), 1);
4506
4507   if (DECL_FUNCTION_MEMBER_P (fn))
4508     enforce_access (cand->access_path, fn);
4509
4510   if (args && TREE_CODE (args) != TREE_LIST)
4511     args = build_tree_list (NULL_TREE, args);
4512   arg = args;
4513
4514   /* The implicit parameters to a constructor are not considered by overload
4515      resolution, and must be of the proper type.  */
4516   if (DECL_CONSTRUCTOR_P (fn))
4517     {
4518       converted_args = tree_cons (NULL_TREE, TREE_VALUE (arg), converted_args);
4519       arg = TREE_CHAIN (arg);
4520       parm = TREE_CHAIN (parm);
4521       if (DECL_HAS_IN_CHARGE_PARM_P (fn))
4522         /* We should never try to call the abstract constructor.  */
4523         abort ();
4524       if (DECL_HAS_VTT_PARM_P (fn))
4525         {
4526           converted_args = tree_cons
4527             (NULL_TREE, TREE_VALUE (arg), converted_args);
4528           arg = TREE_CHAIN (arg);
4529           parm = TREE_CHAIN (parm);
4530         }
4531     }      
4532   /* Bypass access control for 'this' parameter.  */
4533   else if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
4534     {
4535       tree parmtype = TREE_VALUE (parm);
4536       tree argtype = TREE_TYPE (TREE_VALUE (arg));
4537       tree converted_arg;
4538       tree base_binfo;
4539       
4540       if (ICS_BAD_FLAG (TREE_VEC_ELT (convs, i)))
4541         pedwarn ("passing `%T' as `this' argument of `%#D' discards qualifiers",
4542                     TREE_TYPE (argtype), fn);
4543
4544       /* [class.mfct.nonstatic]: If a nonstatic member function of a class
4545          X is called for an object that is not of type X, or of a type
4546          derived from X, the behavior is undefined.
4547
4548          So we can assume that anything passed as 'this' is non-null, and
4549          optimize accordingly.  */
4550       my_friendly_assert (TREE_CODE (parmtype) == POINTER_TYPE, 19990811);
4551       /* Convert to the base in which the function was declared.  */
4552       my_friendly_assert (cand->conversion_path != NULL_TREE, 20020730);
4553       converted_arg = build_base_path (PLUS_EXPR,
4554                                        TREE_VALUE (arg),
4555                                        cand->conversion_path,
4556                                        1);
4557       /* If fn was found by a using declaration, the conversion path
4558          will be to the derived class, not the base declaring fn. We
4559          must convert from derived to base.  */
4560       base_binfo = lookup_base (TREE_TYPE (TREE_TYPE (converted_arg)),
4561                                 TREE_TYPE (parmtype), ba_ignore, NULL);
4562       
4563       converted_arg = build_base_path (PLUS_EXPR, converted_arg,
4564                                        base_binfo, 1);
4565       
4566       converted_args = tree_cons (NULL_TREE, converted_arg, converted_args);
4567       parm = TREE_CHAIN (parm);
4568       arg = TREE_CHAIN (arg);
4569       ++i;
4570       is_method = 1;
4571     }
4572
4573   for (; arg && parm;
4574        parm = TREE_CHAIN (parm), arg = TREE_CHAIN (arg), ++i)
4575     {
4576       tree type = TREE_VALUE (parm);
4577
4578       conv = TREE_VEC_ELT (convs, i);
4579       val = convert_like_with_context
4580         (conv, TREE_VALUE (arg), fn, i - is_method);
4581
4582       val = convert_for_arg_passing (type, val);
4583       converted_args = tree_cons (NULL_TREE, val, converted_args);
4584     }
4585
4586   /* Default arguments */
4587   for (; parm && parm != void_list_node; parm = TREE_CHAIN (parm), i++)
4588     converted_args 
4589       = tree_cons (NULL_TREE, 
4590                    convert_default_arg (TREE_VALUE (parm), 
4591                                         TREE_PURPOSE (parm),
4592                                         fn, i - is_method),
4593                    converted_args);
4594
4595   /* Ellipsis */
4596   for (; arg; arg = TREE_CHAIN (arg))
4597     converted_args 
4598       = tree_cons (NULL_TREE,
4599                    convert_arg_to_ellipsis (TREE_VALUE (arg)),
4600                    converted_args);
4601
4602   converted_args = nreverse (converted_args);
4603
4604   if (warn_format)
4605     check_function_format (NULL, TYPE_ATTRIBUTES (TREE_TYPE (fn)),
4606                            converted_args);
4607
4608   /* Avoid actually calling copy constructors and copy assignment operators,
4609      if possible.  */
4610
4611   if (! flag_elide_constructors)
4612     /* Do things the hard way.  */;
4613   else if (TREE_VEC_LENGTH (convs) == 1
4614            && DECL_COPY_CONSTRUCTOR_P (fn))
4615     {
4616       tree targ;
4617       arg = skip_artificial_parms_for (fn, converted_args);
4618       arg = TREE_VALUE (arg);
4619
4620       /* Pull out the real argument, disregarding const-correctness.  */
4621       targ = arg;
4622       while (TREE_CODE (targ) == NOP_EXPR
4623              || TREE_CODE (targ) == NON_LVALUE_EXPR
4624              || TREE_CODE (targ) == CONVERT_EXPR)
4625         targ = TREE_OPERAND (targ, 0);
4626       if (TREE_CODE (targ) == ADDR_EXPR)
4627         {
4628           targ = TREE_OPERAND (targ, 0);
4629           if (!same_type_ignoring_top_level_qualifiers_p 
4630               (TREE_TYPE (TREE_TYPE (arg)), TREE_TYPE (targ)))
4631             targ = NULL_TREE;
4632         }
4633       else
4634         targ = NULL_TREE;
4635
4636       if (targ)
4637         arg = targ;
4638       else
4639         arg = build_indirect_ref (arg, 0);
4640
4641       /* [class.copy]: the copy constructor is implicitly defined even if
4642          the implementation elided its use.  */
4643       if (TYPE_HAS_COMPLEX_INIT_REF (DECL_CONTEXT (fn)))
4644         mark_used (fn);
4645
4646       /* If we're creating a temp and we already have one, don't create a
4647          new one.  If we're not creating a temp but we get one, use
4648          INIT_EXPR to collapse the temp into our target.  Otherwise, if the
4649          ctor is trivial, do a bitwise copy with a simple TARGET_EXPR for a
4650          temp or an INIT_EXPR otherwise.  */
4651       if (integer_zerop (TREE_VALUE (args)))
4652         {
4653           if (TREE_CODE (arg) == TARGET_EXPR)
4654             return arg;
4655           else if (TYPE_HAS_TRIVIAL_INIT_REF (DECL_CONTEXT (fn)))
4656             return build_target_expr_with_type (arg, DECL_CONTEXT (fn));
4657         }
4658       else if (TREE_CODE (arg) == TARGET_EXPR
4659                || TYPE_HAS_TRIVIAL_INIT_REF (DECL_CONTEXT (fn)))
4660         {
4661           tree address;
4662           tree to = stabilize_reference
4663             (build_indirect_ref (TREE_VALUE (args), 0));
4664
4665           val = build (INIT_EXPR, DECL_CONTEXT (fn), to, arg);
4666           address = build_unary_op (ADDR_EXPR, val, 0);
4667           /* Avoid a warning about this expression, if the address is
4668              never used.  */
4669           TREE_USED (address) = 1;
4670           return address;
4671         }
4672     }
4673   else if (DECL_OVERLOADED_OPERATOR_P (fn) == NOP_EXPR
4674            && copy_fn_p (fn)
4675            && TYPE_HAS_TRIVIAL_ASSIGN_REF (DECL_CONTEXT (fn)))
4676     {
4677       tree to = stabilize_reference
4678         (build_indirect_ref (TREE_VALUE (converted_args), 0));
4679
4680       arg = build_indirect_ref (TREE_VALUE (TREE_CHAIN (converted_args)), 0);
4681       val = build (MODIFY_EXPR, TREE_TYPE (to), to, arg);
4682       return val;
4683     }
4684
4685   mark_used (fn);
4686
4687   if (DECL_VINDEX (fn) && (flags & LOOKUP_NONVIRTUAL) == 0)
4688     {
4689       tree t, *p = &TREE_VALUE (converted_args);
4690       tree binfo = lookup_base (TREE_TYPE (TREE_TYPE (*p)),
4691                                 DECL_CONTEXT (fn),
4692                                 ba_any, NULL);
4693       my_friendly_assert (binfo && binfo != error_mark_node, 20010730);
4694       
4695       *p = build_base_path (PLUS_EXPR, *p, binfo, 1);
4696       if (TREE_SIDE_EFFECTS (*p))
4697         *p = save_expr (*p);
4698       t = build_pointer_type (TREE_TYPE (fn));
4699       if (DECL_CONTEXT (fn) && TYPE_JAVA_INTERFACE (DECL_CONTEXT (fn)))
4700         fn = build_java_interface_fn_ref (fn, *p);
4701       else
4702         fn = build_vfn_ref (build_indirect_ref (*p, 0), DECL_VINDEX (fn));
4703       TREE_TYPE (fn) = t;
4704     }
4705   else if (DECL_INLINE (fn))
4706     fn = inline_conversion (fn);
4707   else
4708     fn = build_addr_func (fn);
4709
4710   /* Recognize certain built-in functions so we can make tree-codes
4711      other than CALL_EXPR.  We do this when it enables fold-const.c
4712      to do something useful.  */
4713
4714   if (TREE_CODE (fn) == ADDR_EXPR
4715       && TREE_CODE (TREE_OPERAND (fn, 0)) == FUNCTION_DECL
4716       && DECL_BUILT_IN (TREE_OPERAND (fn, 0)))
4717     {
4718       tree exp;
4719       exp = expand_tree_builtin (TREE_OPERAND (fn, 0), args, converted_args);
4720       if (exp)
4721         return exp;
4722     }
4723
4724   /* Some built-in function calls will be evaluated at
4725      compile-time in fold ().  */
4726   fn = fold (build_call (fn, converted_args));
4727   if (VOID_TYPE_P (TREE_TYPE (fn)))
4728     return fn;
4729   fn = require_complete_type (fn);
4730   if (fn == error_mark_node)
4731     return error_mark_node;
4732   if (IS_AGGR_TYPE (TREE_TYPE (fn)))
4733     fn = build_cplus_new (TREE_TYPE (fn), fn);
4734   return convert_from_reference (fn);
4735 }
4736
4737 static GTY(()) tree java_iface_lookup_fn;
4738
4739 /* Make an expression which yields the address of the Java interface
4740    method FN.  This is achieved by generating a call to libjava's
4741    _Jv_LookupInterfaceMethodIdx().  */
4742
4743 static tree
4744 build_java_interface_fn_ref (tree fn, tree instance)
4745 {
4746   tree lookup_args, lookup_fn, method, idx;
4747   tree klass_ref, iface, iface_ref;
4748   int i;
4749   
4750   if (!java_iface_lookup_fn)
4751     {
4752       tree endlink = build_void_list_node ();
4753       tree t = tree_cons (NULL_TREE, ptr_type_node,
4754                           tree_cons (NULL_TREE, ptr_type_node,
4755                                      tree_cons (NULL_TREE, java_int_type_node,
4756                                                 endlink)));
4757       java_iface_lookup_fn 
4758         = builtin_function ("_Jv_LookupInterfaceMethodIdx",
4759                             build_function_type (ptr_type_node, t),
4760                             0, NOT_BUILT_IN, NULL, NULL_TREE);
4761     }
4762
4763   /* Look up the pointer to the runtime java.lang.Class object for `instance'. 
4764      This is the first entry in the vtable.  */
4765   klass_ref = build_vtbl_ref (build_indirect_ref (instance, 0), 
4766                               integer_zero_node);
4767
4768   /* Get the java.lang.Class pointer for the interface being called.  */
4769   iface = DECL_CONTEXT (fn);
4770   iface_ref = lookup_field (iface, get_identifier ("class$"), 0, false);
4771   if (!iface_ref || TREE_CODE (iface_ref) != VAR_DECL
4772       || DECL_CONTEXT (iface_ref) != iface)
4773     {
4774       error ("could not find class$ field in java interface type `%T'", 
4775                 iface);
4776       return error_mark_node;
4777     }
4778   iface_ref = build1 (ADDR_EXPR, build_pointer_type (iface), iface_ref);
4779   
4780   /* Determine the itable index of FN.  */
4781   i = 1;
4782   for (method = TYPE_METHODS (iface); method; method = TREE_CHAIN (method))
4783     {
4784       if (!DECL_VIRTUAL_P (method))
4785         continue;
4786       if (fn == method)
4787         break;
4788       i++;
4789     }
4790   idx = build_int_2 (i, 0);
4791
4792   lookup_args = tree_cons (NULL_TREE, klass_ref, 
4793                            tree_cons (NULL_TREE, iface_ref,
4794                                       build_tree_list (NULL_TREE, idx)));
4795   lookup_fn = build1 (ADDR_EXPR, 
4796                       build_pointer_type (TREE_TYPE (java_iface_lookup_fn)),
4797                       java_iface_lookup_fn);
4798   return build (CALL_EXPR, ptr_type_node, lookup_fn, lookup_args, NULL_TREE);
4799 }
4800
4801 /* Returns the value to use for the in-charge parameter when making a
4802    call to a function with the indicated NAME.  */
4803
4804 tree
4805 in_charge_arg_for_name (tree name)
4806 {
4807   if (name == base_ctor_identifier
4808       || name == base_dtor_identifier)
4809     return integer_zero_node;
4810   else if (name == complete_ctor_identifier)
4811     return integer_one_node;
4812   else if (name == complete_dtor_identifier)
4813     return integer_two_node;
4814   else if (name == deleting_dtor_identifier)
4815     return integer_three_node;
4816
4817   /* This function should only be called with one of the names listed
4818      above.  */
4819   abort ();
4820   return NULL_TREE;
4821 }
4822
4823 /* Build a call to a constructor, destructor, or an assignment
4824    operator for INSTANCE, an expression with class type.  NAME
4825    indicates the special member function to call; ARGS are the
4826    arguments.  BINFO indicates the base of INSTANCE that is to be
4827    passed as the `this' parameter to the member function called.
4828
4829    FLAGS are the LOOKUP_* flags to use when processing the call.
4830
4831    If NAME indicates a complete object constructor, INSTANCE may be
4832    NULL_TREE.  In this case, the caller will call build_cplus_new to
4833    store the newly constructed object into a VAR_DECL.  */
4834
4835 tree
4836 build_special_member_call (tree instance, tree name, tree args, 
4837                            tree binfo, int flags)
4838 {
4839   tree fns;
4840   /* The type of the subobject to be constructed or destroyed.  */
4841   tree class_type;
4842
4843   my_friendly_assert (name == complete_ctor_identifier
4844                       || name == base_ctor_identifier
4845                       || name == complete_dtor_identifier
4846                       || name == base_dtor_identifier
4847                       || name == deleting_dtor_identifier
4848                       || name == ansi_assopname (NOP_EXPR),
4849                       20020712);
4850   my_friendly_assert (binfo != NULL_TREE, 20020712);
4851
4852   class_type = BINFO_TYPE (binfo);
4853
4854   /* Handle the special case where INSTANCE is NULL_TREE.  */
4855   if (name == complete_ctor_identifier && !instance)
4856     {
4857       instance = build_int_2 (0, 0);
4858       TREE_TYPE (instance) = build_pointer_type (class_type);
4859       instance = build1 (INDIRECT_REF, class_type, instance);
4860     }
4861   else if (name == complete_dtor_identifier 
4862            || name == base_dtor_identifier
4863            || name == deleting_dtor_identifier)
4864     my_friendly_assert (args == NULL_TREE, 20020712);
4865
4866   my_friendly_assert (instance != NULL_TREE, 20020712);
4867
4868   /* Resolve the name.  */
4869   if (!complete_type_or_else (BINFO_TYPE (binfo), NULL_TREE))
4870     return error_mark_node;
4871
4872   fns = lookup_fnfields (binfo, name, 1);
4873     
4874   /* When making a call to a constructor or destructor for a subobject
4875      that uses virtual base classes, pass down a pointer to a VTT for
4876      the subobject.  */
4877   if ((name == base_ctor_identifier
4878        || name == base_dtor_identifier)
4879       && TYPE_USES_VIRTUAL_BASECLASSES (class_type))
4880     {
4881       tree vtt;
4882       tree sub_vtt;
4883
4884       /* If the current function is a complete object constructor
4885          or destructor, then we fetch the VTT directly.
4886          Otherwise, we look it up using the VTT we were given.  */
4887       vtt = TREE_CHAIN (CLASSTYPE_VTABLES (current_class_type));
4888       vtt = decay_conversion (vtt);
4889       vtt = build (COND_EXPR, TREE_TYPE (vtt),
4890                    build (EQ_EXPR, boolean_type_node,
4891                           current_in_charge_parm, integer_zero_node),
4892                    current_vtt_parm,
4893                    vtt);
4894       my_friendly_assert (BINFO_SUBVTT_INDEX (binfo), 20010110);
4895       sub_vtt = build (PLUS_EXPR, TREE_TYPE (vtt), vtt,
4896                        BINFO_SUBVTT_INDEX (binfo));
4897
4898       args = tree_cons (NULL_TREE, sub_vtt, args);
4899     }
4900
4901   return build_new_method_call (instance, fns, args, binfo, flags);
4902 }
4903
4904 /* Return the NAME, as a C string.  The NAME indicates a function that
4905    is a member of TYPE.  *FREE_P is set to true if the caller must
4906    free the memory returned.  
4907
4908    Rather than go through all of this, we should simply set the names
4909    of constructors and destructors appropriately, and dispense with
4910    ctor_identifier, dtor_identifier, etc.  */
4911
4912 static char *
4913 name_as_c_string (tree name, tree type, bool *free_p)
4914 {
4915   char *pretty_name;
4916
4917   /* Assume that we will not allocate memory.  */
4918   *free_p = false;
4919   /* Constructors and destructors are special.  */
4920   if (IDENTIFIER_CTOR_OR_DTOR_P (name))
4921     {
4922       pretty_name 
4923         = (char *) IDENTIFIER_POINTER (constructor_name (type));
4924       /* For a destructor, add the '~'.  */
4925       if (name == complete_dtor_identifier
4926           || name == base_dtor_identifier
4927           || name == deleting_dtor_identifier)
4928         {
4929           pretty_name = concat ("~", pretty_name, NULL);
4930           /* Remember that we need to free the memory allocated.  */
4931           *free_p = true;
4932         }
4933     }
4934   else
4935     pretty_name = (char *) IDENTIFIER_POINTER (name);
4936
4937   return pretty_name;
4938 }
4939
4940 /* Build a call to "INSTANCE.FN (ARGS)".  */
4941
4942 tree
4943 build_new_method_call (tree instance, tree fns, tree args, 
4944                        tree conversion_path, int flags)
4945 {
4946   struct z_candidate *candidates = 0, *cand;
4947   tree explicit_targs = NULL_TREE;
4948   tree basetype = NULL_TREE;
4949   tree access_binfo;
4950   tree optype;
4951   tree mem_args = NULL_TREE, instance_ptr;
4952   tree name;
4953   tree user_args;
4954   tree call;
4955   tree fn;
4956   tree class_type;
4957   int template_only = 0;
4958   bool any_viable_p;
4959
4960   my_friendly_assert (instance != NULL_TREE, 20020729);
4961
4962   if (error_operand_p (instance) 
4963       || error_operand_p (fns)
4964       || args == error_mark_node)
4965     return error_mark_node;
4966
4967   /* Process the argument list.  */
4968   user_args = args;
4969   args = resolve_args (args);
4970   if (args == error_mark_node)
4971     return error_mark_node;
4972
4973   if (TREE_CODE (instance) == OFFSET_REF)
4974     instance = resolve_offset_ref (instance);
4975   if (TREE_CODE (TREE_TYPE (instance)) == REFERENCE_TYPE)
4976     instance = convert_from_reference (instance);
4977   basetype = TYPE_MAIN_VARIANT (TREE_TYPE (instance));
4978   instance_ptr = build_this (instance);
4979
4980   if (!BASELINK_P (fns))
4981     {
4982       call = build_field_call (instance_ptr, fns, args);
4983       if (call)
4984         return call;
4985       error ("call to non-function `%D'", fns);
4986       return error_mark_node;
4987     }
4988
4989   if (!conversion_path)
4990     conversion_path = BASELINK_BINFO (fns);
4991   access_binfo = BASELINK_ACCESS_BINFO (fns);
4992   optype = BASELINK_OPTYPE (fns);
4993   fns = BASELINK_FUNCTIONS (fns);
4994
4995   if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
4996     {
4997       explicit_targs = TREE_OPERAND (fns, 1);
4998       fns = TREE_OPERAND (fns, 0);
4999       template_only = 1;
5000     }
5001
5002   my_friendly_assert (TREE_CODE (fns) == FUNCTION_DECL
5003                       || TREE_CODE (fns) == TEMPLATE_DECL
5004                       || TREE_CODE (fns) == OVERLOAD,
5005                       20020712);
5006
5007   /* XXX this should be handled before we get here.  */
5008   if (! IS_AGGR_TYPE (basetype))
5009     {
5010       if ((flags & LOOKUP_COMPLAIN) && basetype != error_mark_node)
5011         error ("request for member `%D' in `%E', which is of non-aggregate type `%T'",
5012                fns, instance, basetype);
5013
5014       return error_mark_node;
5015     }
5016
5017   fn = get_first_fn (fns);
5018   name = DECL_NAME (fn);
5019
5020   if (IDENTIFIER_CTOR_OR_DTOR_P (name))
5021     {
5022       /* Callers should explicitly indicate whether they want to construct
5023          the complete object or just the part without virtual bases.  */
5024       my_friendly_assert (name != ctor_identifier, 20000408);
5025       /* Similarly for destructors.  */
5026       my_friendly_assert (name != dtor_identifier, 20000408);
5027     }
5028
5029   /* It's OK to call destructors on cv-qualified objects.  Therefore,
5030      convert the INSTANCE_PTR to the unqualified type, if necessary.  */
5031   if (DECL_DESTRUCTOR_P (fn))
5032     {
5033       tree type = build_pointer_type (basetype);
5034       if (!same_type_p (type, TREE_TYPE (instance_ptr)))
5035         instance_ptr = build_nop (type, instance_ptr);
5036     }
5037
5038   class_type = (conversion_path ? BINFO_TYPE (conversion_path) : NULL_TREE);
5039   mem_args = tree_cons (NULL_TREE, instance_ptr, args);
5040
5041   for (fn = fns; fn; fn = OVL_NEXT (fn))
5042     {
5043       tree t = OVL_CURRENT (fn);
5044       tree this_arglist;
5045
5046       /* We can end up here for copy-init of same or base class.  */
5047       if ((flags & LOOKUP_ONLYCONVERTING)
5048           && DECL_NONCONVERTING_P (t))
5049         continue;
5050
5051       if (DECL_NONSTATIC_MEMBER_FUNCTION_P (t))
5052         this_arglist = mem_args;
5053       else
5054         this_arglist = args;
5055
5056       if (TREE_CODE (t) == TEMPLATE_DECL)
5057         /* A member template.  */
5058         add_template_candidate (&candidates, t, 
5059                                 class_type,
5060                                 explicit_targs,
5061                                 this_arglist, optype,
5062                                 access_binfo, 
5063                                 conversion_path,
5064                                 flags,
5065                                 DEDUCE_CALL);
5066       else if (! template_only)
5067         add_function_candidate (&candidates, t, 
5068                                 class_type,
5069                                 this_arglist,
5070                                 access_binfo,
5071                                 conversion_path,
5072                                 flags);
5073     }
5074
5075   candidates = splice_viable (candidates, pedantic, &any_viable_p);
5076   if (!any_viable_p)
5077     {
5078       /* XXX will LOOKUP_SPECULATIVELY be needed when this is done?  */
5079       if (flags & LOOKUP_SPECULATIVELY)
5080         return NULL_TREE;
5081       if (!COMPLETE_TYPE_P (basetype))
5082         cxx_incomplete_type_error (instance_ptr, basetype);
5083       else
5084         {
5085           char *pretty_name;
5086           bool free_p;
5087
5088           pretty_name = name_as_c_string (name, basetype, &free_p);
5089           error ("no matching function for call to `%T::%s(%A)%#V'",
5090                  basetype, pretty_name, user_args,
5091                  TREE_TYPE (TREE_TYPE (instance_ptr)));
5092           if (free_p)
5093             free (pretty_name);
5094         }
5095       print_z_candidates (candidates);
5096       return error_mark_node;
5097     }
5098
5099   cand = tourney (candidates);
5100   if (cand == 0)
5101     {
5102       char *pretty_name;
5103       bool free_p;
5104
5105       pretty_name = name_as_c_string (name, basetype, &free_p);
5106       error ("call of overloaded `%s(%A)' is ambiguous", pretty_name,
5107              user_args);
5108       print_z_candidates (candidates);
5109       if (free_p)
5110         free (pretty_name);
5111       return error_mark_node;
5112     }
5113
5114   if (DECL_PURE_VIRTUAL_P (cand->fn)
5115       && instance == current_class_ref
5116       && (DECL_CONSTRUCTOR_P (current_function_decl)
5117           || DECL_DESTRUCTOR_P (current_function_decl))
5118       && ! (flags & LOOKUP_NONVIRTUAL)
5119       && value_member (cand->fn, CLASSTYPE_PURE_VIRTUALS (basetype)))
5120     error ((DECL_CONSTRUCTOR_P (current_function_decl) ? 
5121                "abstract virtual `%#D' called from constructor"
5122                : "abstract virtual `%#D' called from destructor"),
5123               cand->fn);
5124   if (TREE_CODE (TREE_TYPE (cand->fn)) == METHOD_TYPE
5125       && is_dummy_object (instance_ptr))
5126     {
5127       error ("cannot call member function `%D' without object", cand->fn);
5128       return error_mark_node;
5129     }
5130
5131   if (DECL_VINDEX (cand->fn) && ! (flags & LOOKUP_NONVIRTUAL)
5132       && resolves_to_fixed_type_p (instance, 0))
5133     flags |= LOOKUP_NONVIRTUAL;
5134
5135   if (TREE_CODE (TREE_TYPE (cand->fn)) == METHOD_TYPE)
5136     call = build_over_call (cand, flags);
5137   else
5138     {
5139       call = build_over_call (cand, flags);
5140       /* In an expression of the form `a->f()' where `f' turns out to
5141          be a static member function, `a' is none-the-less evaluated.  */
5142       if (!is_dummy_object (instance_ptr) && TREE_SIDE_EFFECTS (instance))
5143         call = build (COMPOUND_EXPR, TREE_TYPE (call), instance, call);
5144     }
5145
5146   return call;
5147 }
5148
5149 /* Returns true iff standard conversion sequence ICS1 is a proper
5150    subsequence of ICS2.  */
5151
5152 static bool
5153 is_subseq (tree ics1, tree ics2)
5154 {
5155   /* We can assume that a conversion of the same code
5156      between the same types indicates a subsequence since we only get
5157      here if the types we are converting from are the same.  */
5158
5159   while (TREE_CODE (ics1) == RVALUE_CONV
5160          || TREE_CODE (ics1) == LVALUE_CONV)
5161     ics1 = TREE_OPERAND (ics1, 0);
5162
5163   while (1)
5164     {
5165       while (TREE_CODE (ics2) == RVALUE_CONV
5166           || TREE_CODE (ics2) == LVALUE_CONV)
5167         ics2 = TREE_OPERAND (ics2, 0);
5168
5169       if (TREE_CODE (ics2) == USER_CONV
5170           || TREE_CODE (ics2) == AMBIG_CONV
5171           || TREE_CODE (ics2) == IDENTITY_CONV)
5172         /* At this point, ICS1 cannot be a proper subsequence of
5173            ICS2.  We can get a USER_CONV when we are comparing the
5174            second standard conversion sequence of two user conversion
5175            sequences.  */
5176         return false;
5177
5178       ics2 = TREE_OPERAND (ics2, 0);
5179
5180       if (TREE_CODE (ics2) == TREE_CODE (ics1)
5181           && same_type_p (TREE_TYPE (ics2), TREE_TYPE (ics1))
5182           && same_type_p (TREE_TYPE (TREE_OPERAND (ics2, 0)),
5183                              TREE_TYPE (TREE_OPERAND (ics1, 0))))
5184         return true;
5185     }
5186 }
5187
5188 /* Returns nonzero iff DERIVED is derived from BASE.  The inputs may
5189    be any _TYPE nodes.  */
5190
5191 bool
5192 is_properly_derived_from (tree derived, tree base)
5193 {
5194   if (!IS_AGGR_TYPE_CODE (TREE_CODE (derived))
5195       || !IS_AGGR_TYPE_CODE (TREE_CODE (base)))
5196     return false;
5197
5198   /* We only allow proper derivation here.  The DERIVED_FROM_P macro
5199      considers every class derived from itself.  */
5200   return (!same_type_ignoring_top_level_qualifiers_p (derived, base)
5201           && DERIVED_FROM_P (base, derived));
5202 }
5203
5204 /* We build the ICS for an implicit object parameter as a pointer
5205    conversion sequence.  However, such a sequence should be compared
5206    as if it were a reference conversion sequence.  If ICS is the
5207    implicit conversion sequence for an implicit object parameter,
5208    modify it accordingly.  */
5209
5210 static void
5211 maybe_handle_implicit_object (tree *ics)
5212 {
5213   if (ICS_THIS_FLAG (*ics))
5214     {
5215       /* [over.match.funcs]
5216          
5217          For non-static member functions, the type of the
5218          implicit object parameter is "reference to cv X"
5219          where X is the class of which the function is a
5220          member and cv is the cv-qualification on the member
5221          function declaration.  */
5222       tree t = *ics;
5223       tree reference_type;
5224
5225       /* The `this' parameter is a pointer to a class type.  Make the
5226          implict conversion talk about a reference to that same class
5227          type.  */
5228       reference_type = TREE_TYPE (TREE_TYPE (*ics));
5229       reference_type = build_reference_type (reference_type);
5230
5231       if (TREE_CODE (t) == QUAL_CONV)
5232         t = TREE_OPERAND (t, 0);
5233       if (TREE_CODE (t) == PTR_CONV)
5234         t = TREE_OPERAND (t, 0);
5235       t = build1 (IDENTITY_CONV, TREE_TYPE (TREE_TYPE (t)), NULL_TREE);
5236       t = direct_reference_binding (reference_type, t); 
5237       *ics = t;
5238     }
5239 }
5240
5241 /* If *ICS is a REF_BIND set *ICS to the remainder of the conversion,
5242    and return the type to which the reference refers.  Otherwise,
5243    leave *ICS unchanged and return NULL_TREE.  */
5244
5245 static tree
5246 maybe_handle_ref_bind (tree *ics)
5247 {
5248   if (TREE_CODE (*ics) == REF_BIND)
5249     {
5250       tree old_ics = *ics;
5251       tree type = TREE_TYPE (TREE_TYPE (old_ics));
5252       *ics = TREE_OPERAND (old_ics, 0);
5253       ICS_USER_FLAG (*ics) = ICS_USER_FLAG (old_ics);
5254       ICS_BAD_FLAG (*ics) = ICS_BAD_FLAG (old_ics);
5255       return type;
5256     }
5257
5258   return NULL_TREE;
5259 }
5260
5261 /* Compare two implicit conversion sequences according to the rules set out in
5262    [over.ics.rank].  Return values:
5263
5264       1: ics1 is better than ics2
5265      -1: ics2 is better than ics1
5266       0: ics1 and ics2 are indistinguishable */
5267
5268 static int
5269 compare_ics (tree ics1, tree ics2)
5270 {
5271   tree from_type1;
5272   tree from_type2;
5273   tree to_type1;
5274   tree to_type2;
5275   tree deref_from_type1 = NULL_TREE;
5276   tree deref_from_type2 = NULL_TREE;
5277   tree deref_to_type1 = NULL_TREE;
5278   tree deref_to_type2 = NULL_TREE;
5279   int rank1, rank2;
5280
5281   /* REF_BINDING is nonzero if the result of the conversion sequence
5282      is a reference type.   In that case TARGET_TYPE is the
5283      type referred to by the reference.  */
5284   tree target_type1;
5285   tree target_type2;
5286
5287   /* Handle implicit object parameters.  */
5288   maybe_handle_implicit_object (&ics1);
5289   maybe_handle_implicit_object (&ics2);
5290
5291   /* Handle reference parameters.  */
5292   target_type1 = maybe_handle_ref_bind (&ics1);
5293   target_type2 = maybe_handle_ref_bind (&ics2);
5294
5295   /* [over.ics.rank]
5296
5297      When  comparing  the  basic forms of implicit conversion sequences (as
5298      defined in _over.best.ics_)
5299
5300      --a standard conversion sequence (_over.ics.scs_) is a better
5301        conversion sequence than a user-defined conversion sequence
5302        or an ellipsis conversion sequence, and
5303      
5304      --a user-defined conversion sequence (_over.ics.user_) is a
5305        better conversion sequence than an ellipsis conversion sequence
5306        (_over.ics.ellipsis_).  */
5307   rank1 = ICS_RANK (ics1);
5308   rank2 = ICS_RANK (ics2);
5309   
5310   if (rank1 > rank2)
5311     return -1;
5312   else if (rank1 < rank2)
5313     return 1;
5314
5315   if (rank1 == BAD_RANK)
5316     {
5317       /* XXX Isn't this an extension? */
5318       /* Both ICS are bad.  We try to make a decision based on what
5319          would have happenned if they'd been good.  */
5320       if (ICS_USER_FLAG (ics1) > ICS_USER_FLAG (ics2)
5321           || ICS_STD_RANK (ics1) > ICS_STD_RANK (ics2))
5322         return -1;
5323       else if (ICS_USER_FLAG (ics1) < ICS_USER_FLAG (ics2)
5324                || ICS_STD_RANK (ics1) < ICS_STD_RANK (ics2))
5325         return 1;
5326
5327       /* We couldn't make up our minds; try to figure it out below.  */
5328     }
5329
5330   if (ICS_ELLIPSIS_FLAG (ics1))
5331     /* Both conversions are ellipsis conversions.  */
5332     return 0;
5333
5334   /* User-defined  conversion sequence U1 is a better conversion sequence
5335      than another user-defined conversion sequence U2 if they contain the
5336      same user-defined conversion operator or constructor and if the sec-
5337      ond standard conversion sequence of U1 is  better  than  the  second
5338      standard conversion sequence of U2.  */
5339
5340   if (ICS_USER_FLAG (ics1))
5341     {
5342       tree t1, t2;
5343
5344       for (t1 = ics1; TREE_CODE (t1) != USER_CONV; t1 = TREE_OPERAND (t1, 0))
5345         if (TREE_CODE (t1) == AMBIG_CONV)
5346           return 0;
5347       for (t2 = ics2; TREE_CODE (t2) != USER_CONV; t2 = TREE_OPERAND (t2, 0))
5348         if (TREE_CODE (t2) == AMBIG_CONV)
5349           return 0;
5350
5351       if (USER_CONV_FN (t1) != USER_CONV_FN (t2))
5352         return 0;
5353
5354       /* We can just fall through here, after setting up
5355          FROM_TYPE1 and FROM_TYPE2.  */
5356       from_type1 = TREE_TYPE (t1);
5357       from_type2 = TREE_TYPE (t2);
5358     }
5359   else
5360     {
5361       /* We're dealing with two standard conversion sequences. 
5362
5363          [over.ics.rank]
5364          
5365          Standard conversion sequence S1 is a better conversion
5366          sequence than standard conversion sequence S2 if
5367      
5368          --S1 is a proper subsequence of S2 (comparing the conversion
5369            sequences in the canonical form defined by _over.ics.scs_,
5370            excluding any Lvalue Transformation; the identity
5371            conversion sequence is considered to be a subsequence of
5372            any non-identity conversion sequence */
5373       
5374       from_type1 = ics1;
5375       while (TREE_CODE (from_type1) != IDENTITY_CONV)
5376         from_type1 = TREE_OPERAND (from_type1, 0);
5377       from_type1 = TREE_TYPE (from_type1);
5378       
5379       from_type2 = ics2;
5380       while (TREE_CODE (from_type2) != IDENTITY_CONV)
5381         from_type2 = TREE_OPERAND (from_type2, 0);
5382       from_type2 = TREE_TYPE (from_type2);
5383     }
5384
5385   if (same_type_p (from_type1, from_type2))
5386     {
5387       if (is_subseq (ics1, ics2))
5388         return 1;
5389       if (is_subseq (ics2, ics1))
5390         return -1;
5391     }
5392   /* Otherwise, one sequence cannot be a subsequence of the other; they
5393      don't start with the same type.  This can happen when comparing the
5394      second standard conversion sequence in two user-defined conversion
5395      sequences.  */
5396
5397   /* [over.ics.rank]
5398
5399      Or, if not that,
5400
5401      --the rank of S1 is better than the rank of S2 (by the rules
5402        defined below):
5403
5404     Standard conversion sequences are ordered by their ranks: an Exact
5405     Match is a better conversion than a Promotion, which is a better
5406     conversion than a Conversion.
5407
5408     Two conversion sequences with the same rank are indistinguishable
5409     unless one of the following rules applies:
5410
5411     --A conversion that is not a conversion of a pointer, or pointer
5412       to member, to bool is better than another conversion that is such
5413       a conversion.  
5414
5415     The ICS_STD_RANK automatically handles the pointer-to-bool rule,
5416     so that we do not have to check it explicitly.  */
5417   if (ICS_STD_RANK (ics1) < ICS_STD_RANK (ics2))
5418     return 1;
5419   else if (ICS_STD_RANK (ics2) < ICS_STD_RANK (ics1))
5420     return -1;
5421
5422   to_type1 = TREE_TYPE (ics1);
5423   to_type2 = TREE_TYPE (ics2);
5424
5425   if (TYPE_PTR_P (from_type1)
5426       && TYPE_PTR_P (from_type2)
5427       && TYPE_PTR_P (to_type1)
5428       && TYPE_PTR_P (to_type2))
5429     {
5430       deref_from_type1 = TREE_TYPE (from_type1);
5431       deref_from_type2 = TREE_TYPE (from_type2);
5432       deref_to_type1 = TREE_TYPE (to_type1);
5433       deref_to_type2 = TREE_TYPE (to_type2);
5434     }
5435   /* The rules for pointers to members A::* are just like the rules
5436      for pointers A*, except opposite: if B is derived from A then
5437      A::* converts to B::*, not vice versa.  For that reason, we
5438      switch the from_ and to_ variables here.  */
5439   else if (TYPE_PTRMEM_P (from_type1)
5440            && TYPE_PTRMEM_P (from_type2)
5441            && TYPE_PTRMEM_P (to_type1)
5442            && TYPE_PTRMEM_P (to_type2))
5443     {
5444       deref_to_type1 = TYPE_OFFSET_BASETYPE (TREE_TYPE (from_type1));
5445       deref_to_type2 = TYPE_OFFSET_BASETYPE (TREE_TYPE (from_type2));
5446       deref_from_type1 = TYPE_OFFSET_BASETYPE (TREE_TYPE (to_type1));
5447       deref_from_type2 = TYPE_OFFSET_BASETYPE (TREE_TYPE (to_type2));
5448     }
5449   else if (TYPE_PTRMEMFUNC_P (from_type1)
5450            && TYPE_PTRMEMFUNC_P (from_type2)
5451            && TYPE_PTRMEMFUNC_P (to_type1)
5452            && TYPE_PTRMEMFUNC_P (to_type2))
5453     {
5454       deref_to_type1 = TYPE_PTRMEMFUNC_OBJECT_TYPE (from_type1);
5455       deref_to_type2 = TYPE_PTRMEMFUNC_OBJECT_TYPE (from_type2);
5456       deref_from_type1 = TYPE_PTRMEMFUNC_OBJECT_TYPE (to_type1);
5457       deref_from_type2 = TYPE_PTRMEMFUNC_OBJECT_TYPE (to_type2);
5458     }
5459
5460   if (deref_from_type1 != NULL_TREE
5461       && IS_AGGR_TYPE_CODE (TREE_CODE (deref_from_type1))
5462       && IS_AGGR_TYPE_CODE (TREE_CODE (deref_from_type2)))
5463     {
5464       /* This was one of the pointer or pointer-like conversions.  
5465
5466          [over.ics.rank]
5467          
5468          --If class B is derived directly or indirectly from class A,
5469            conversion of B* to A* is better than conversion of B* to
5470            void*, and conversion of A* to void* is better than
5471            conversion of B* to void*.  */
5472       if (TREE_CODE (deref_to_type1) == VOID_TYPE
5473           && TREE_CODE (deref_to_type2) == VOID_TYPE)
5474         {
5475           if (is_properly_derived_from (deref_from_type1,
5476                                         deref_from_type2))
5477             return -1;
5478           else if (is_properly_derived_from (deref_from_type2,
5479                                              deref_from_type1))
5480             return 1;
5481         }
5482       else if (TREE_CODE (deref_to_type1) == VOID_TYPE
5483                || TREE_CODE (deref_to_type2) == VOID_TYPE)
5484         {
5485           if (same_type_p (deref_from_type1, deref_from_type2))
5486             {
5487               if (TREE_CODE (deref_to_type2) == VOID_TYPE)
5488                 {
5489                   if (is_properly_derived_from (deref_from_type1,
5490                                                 deref_to_type1))
5491                     return 1;
5492                 }
5493               /* We know that DEREF_TO_TYPE1 is `void' here.  */
5494               else if (is_properly_derived_from (deref_from_type1,
5495                                                  deref_to_type2))
5496                 return -1;
5497             }
5498         }
5499       else if (IS_AGGR_TYPE_CODE (TREE_CODE (deref_to_type1))
5500                && IS_AGGR_TYPE_CODE (TREE_CODE (deref_to_type2)))
5501         {
5502           /* [over.ics.rank]
5503
5504              --If class B is derived directly or indirectly from class A
5505                and class C is derived directly or indirectly from B,
5506              
5507              --conversion of C* to B* is better than conversion of C* to
5508                A*, 
5509              
5510              --conversion of B* to A* is better than conversion of C* to
5511                A*  */
5512           if (same_type_p (deref_from_type1, deref_from_type2))
5513             {
5514               if (is_properly_derived_from (deref_to_type1,
5515                                             deref_to_type2))
5516                 return 1;
5517               else if (is_properly_derived_from (deref_to_type2,
5518                                                  deref_to_type1))
5519                 return -1;
5520             }
5521           else if (same_type_p (deref_to_type1, deref_to_type2))
5522             {
5523               if (is_properly_derived_from (deref_from_type2,
5524                                             deref_from_type1))
5525                 return 1;
5526               else if (is_properly_derived_from (deref_from_type1,
5527                                                  deref_from_type2))
5528                 return -1;
5529             }
5530         }
5531     }
5532   else if (CLASS_TYPE_P (non_reference (from_type1))
5533            && same_type_p (from_type1, from_type2))
5534     {
5535       tree from = non_reference (from_type1);
5536
5537       /* [over.ics.rank]
5538          
5539          --binding of an expression of type C to a reference of type
5540            B& is better than binding an expression of type C to a
5541            reference of type A&
5542
5543          --conversion of C to B is better than conversion of C to A,  */
5544       if (is_properly_derived_from (from, to_type1)
5545           && is_properly_derived_from (from, to_type2))
5546         {
5547           if (is_properly_derived_from (to_type1, to_type2))
5548             return 1;
5549           else if (is_properly_derived_from (to_type2, to_type1))
5550             return -1;
5551         }
5552     }
5553   else if (CLASS_TYPE_P (non_reference (to_type1))
5554            && same_type_p (to_type1, to_type2))
5555     {
5556       tree to = non_reference (to_type1);
5557
5558       /* [over.ics.rank]
5559
5560          --binding of an expression of type B to a reference of type
5561            A& is better than binding an expression of type C to a
5562            reference of type A&, 
5563
5564          --onversion of B to A is better than conversion of C to A  */
5565       if (is_properly_derived_from (from_type1, to)
5566           && is_properly_derived_from (from_type2, to))
5567         {
5568           if (is_properly_derived_from (from_type2, from_type1))
5569             return 1;
5570           else if (is_properly_derived_from (from_type1, from_type2))
5571             return -1;
5572         }
5573     }
5574
5575   /* [over.ics.rank]
5576
5577      --S1 and S2 differ only in their qualification conversion and  yield
5578        similar  types  T1 and T2 (_conv.qual_), respectively, and the cv-
5579        qualification signature of type T1 is a proper subset of  the  cv-
5580        qualification signature of type T2  */
5581   if (TREE_CODE (ics1) == QUAL_CONV 
5582       && TREE_CODE (ics2) == QUAL_CONV
5583       && same_type_p (from_type1, from_type2))
5584     return comp_cv_qual_signature (to_type1, to_type2);
5585
5586   /* [over.ics.rank]
5587      
5588      --S1 and S2 are reference bindings (_dcl.init.ref_), and the
5589      types to which the references refer are the same type except for
5590      top-level cv-qualifiers, and the type to which the reference
5591      initialized by S2 refers is more cv-qualified than the type to
5592      which the reference initialized by S1 refers */
5593       
5594   if (target_type1 && target_type2
5595       && same_type_ignoring_top_level_qualifiers_p (to_type1, to_type2))
5596     return comp_cv_qualification (target_type2, target_type1);
5597
5598   /* Neither conversion sequence is better than the other.  */
5599   return 0;
5600 }
5601
5602 /* The source type for this standard conversion sequence.  */
5603
5604 static tree
5605 source_type (tree t)
5606 {
5607   for (;; t = TREE_OPERAND (t, 0))
5608     {
5609       if (TREE_CODE (t) == USER_CONV
5610           || TREE_CODE (t) == AMBIG_CONV
5611           || TREE_CODE (t) == IDENTITY_CONV)
5612         return TREE_TYPE (t);
5613     }
5614   abort ();
5615 }
5616
5617 /* Note a warning about preferring WINNER to LOSER.  We do this by storing
5618    a pointer to LOSER and re-running joust to produce the warning if WINNER
5619    is actually used.  */
5620
5621 static void
5622 add_warning (struct z_candidate *winner, struct z_candidate *loser)
5623 {
5624   winner->warnings = tree_cons (NULL_TREE,
5625                                 build_zc_wrapper (loser),
5626                                 winner->warnings);
5627 }
5628
5629 /* Compare two candidates for overloading as described in
5630    [over.match.best].  Return values:
5631
5632       1: cand1 is better than cand2
5633      -1: cand2 is better than cand1
5634       0: cand1 and cand2 are indistinguishable */
5635
5636 static int
5637 joust (struct z_candidate *cand1, struct z_candidate *cand2, bool warn)
5638 {
5639   int winner = 0;
5640   int i, off1 = 0, off2 = 0, len;
5641
5642   /* Candidates that involve bad conversions are always worse than those
5643      that don't.  */
5644   if (cand1->viable > cand2->viable)
5645     return 1;
5646   if (cand1->viable < cand2->viable)
5647     return -1;
5648
5649   /* If we have two pseudo-candidates for conversions to the same type,
5650      or two candidates for the same function, arbitrarily pick one.  */
5651   if (cand1->fn == cand2->fn
5652       && (TYPE_P (cand1->fn) || DECL_P (cand1->fn)))
5653     return 1;
5654
5655   /* a viable function F1
5656      is defined to be a better function than another viable function F2  if
5657      for  all arguments i, ICSi(F1) is not a worse conversion sequence than
5658      ICSi(F2), and then */
5659
5660   /* for some argument j, ICSj(F1) is a better conversion  sequence  than
5661      ICSj(F2) */
5662
5663   /* For comparing static and non-static member functions, we ignore
5664      the implicit object parameter of the non-static function.  The
5665      standard says to pretend that the static function has an object
5666      parm, but that won't work with operator overloading.  */
5667   len = TREE_VEC_LENGTH (cand1->convs);
5668   if (len != TREE_VEC_LENGTH (cand2->convs))
5669     {
5670       if (DECL_STATIC_FUNCTION_P (cand1->fn)
5671           && ! DECL_STATIC_FUNCTION_P (cand2->fn))
5672         off2 = 1;
5673       else if (! DECL_STATIC_FUNCTION_P (cand1->fn)
5674                && DECL_STATIC_FUNCTION_P (cand2->fn))
5675         {
5676           off1 = 1;
5677           --len;
5678         }
5679       else
5680         abort ();
5681     }
5682
5683   for (i = 0; i < len; ++i)
5684     {
5685       tree t1 = TREE_VEC_ELT (cand1->convs, i+off1);
5686       tree t2 = TREE_VEC_ELT (cand2->convs, i+off2);
5687       int comp = compare_ics (t1, t2);
5688
5689       if (comp != 0)
5690         {
5691           if (warn_sign_promo
5692               && ICS_RANK (t1) + ICS_RANK (t2) == STD_RANK + PROMO_RANK
5693               && TREE_CODE (t1) == STD_CONV
5694               && TREE_CODE (t2) == STD_CONV
5695               && TREE_CODE (TREE_TYPE (t1)) == INTEGER_TYPE
5696               && TREE_CODE (TREE_TYPE (t2)) == INTEGER_TYPE
5697               && (TYPE_PRECISION (TREE_TYPE (t1))
5698                   == TYPE_PRECISION (TREE_TYPE (t2)))
5699               && (TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (t1, 0)))
5700                   || (TREE_CODE (TREE_TYPE (TREE_OPERAND (t1, 0)))
5701                       == ENUMERAL_TYPE)))
5702             {
5703               tree type = TREE_TYPE (TREE_OPERAND (t1, 0));
5704               tree type1, type2;
5705               struct z_candidate *w, *l;
5706               if (comp > 0)
5707                 type1 = TREE_TYPE (t1), type2 = TREE_TYPE (t2),
5708                   w = cand1, l = cand2;
5709               else
5710                 type1 = TREE_TYPE (t2), type2 = TREE_TYPE (t1),
5711                   w = cand2, l = cand1;
5712
5713               if (warn)
5714                 {
5715                   warning ("passing `%T' chooses `%T' over `%T'",
5716                               type, type1, type2);
5717                   warning ("  in call to `%D'", w->fn);
5718                 }
5719               else
5720                 add_warning (w, l);
5721             }
5722
5723           if (winner && comp != winner)
5724             {
5725               winner = 0;
5726               goto tweak;
5727             }
5728           winner = comp;
5729         }
5730     }
5731
5732   /* warn about confusing overload resolution for user-defined conversions,
5733      either between a constructor and a conversion op, or between two
5734      conversion ops.  */
5735   if (winner && cand1->second_conv
5736       && ((DECL_CONSTRUCTOR_P (cand1->fn)
5737            != DECL_CONSTRUCTOR_P (cand2->fn))
5738           /* Don't warn if the two conv ops convert to the same type...  */
5739           || (! DECL_CONSTRUCTOR_P (cand1->fn)
5740               && ! same_type_p (TREE_TYPE (TREE_TYPE (cand1->fn)),
5741                                 TREE_TYPE (TREE_TYPE (cand2->fn))))))
5742     {
5743       int comp = compare_ics (cand1->second_conv, cand2->second_conv);
5744       if (comp != winner)
5745         {
5746           struct z_candidate *w, *l;
5747           tree convn;
5748           if (winner == 1)
5749             w = cand1, l = cand2;
5750           else
5751             w = cand2, l = cand1;
5752           if (DECL_CONTEXT (cand1->fn) == DECL_CONTEXT (cand2->fn)
5753               && ! DECL_CONSTRUCTOR_P (cand1->fn)
5754               && ! DECL_CONSTRUCTOR_P (cand2->fn)
5755               && (convn = standard_conversion
5756                   (TREE_TYPE (TREE_TYPE (l->fn)),
5757                    TREE_TYPE (TREE_TYPE (w->fn)), NULL_TREE))
5758               && TREE_CODE (convn) == QUAL_CONV)
5759             /* Don't complain about `operator char *()' beating
5760                `operator const char *() const'.  */;
5761           else if (warn)
5762             {
5763               tree source = source_type (TREE_VEC_ELT (w->convs, 0));
5764               if (! DECL_CONSTRUCTOR_P (w->fn))
5765                 source = TREE_TYPE (source);
5766               warning ("choosing `%D' over `%D'", w->fn, l->fn);
5767               warning ("  for conversion from `%T' to `%T'",
5768                           source, TREE_TYPE (w->second_conv));
5769               warning ("  because conversion sequence for the argument is better");
5770             }
5771           else
5772             add_warning (w, l);
5773         }
5774     }
5775
5776   if (winner)
5777     return winner;
5778
5779   /* or, if not that,
5780      F1 is a non-template function and F2 is a template function
5781      specialization.  */
5782          
5783   if (! cand1->template && cand2->template)
5784     return 1;
5785   else if (cand1->template && ! cand2->template)
5786     return -1;
5787   
5788   /* or, if not that,
5789      F1 and F2 are template functions and the function template for F1 is
5790      more specialized than the template for F2 according to the partial
5791      ordering rules.  */
5792   
5793   if (cand1->template && cand2->template)
5794     {
5795       winner = more_specialized
5796         (TI_TEMPLATE (cand1->template), TI_TEMPLATE (cand2->template),
5797          DEDUCE_ORDER,
5798          /* Tell the deduction code how many real function arguments
5799             we saw, not counting the implicit 'this' argument.  But,
5800             add_function_candidate() suppresses the "this" argument
5801             for constructors.
5802
5803             [temp.func.order]: The presence of unused ellipsis and default
5804             arguments has no effect on the partial ordering of function
5805             templates.  */
5806          TREE_VEC_LENGTH (cand1->convs)
5807          - (DECL_NONSTATIC_MEMBER_FUNCTION_P (cand1->fn)
5808             - DECL_CONSTRUCTOR_P (cand1->fn)));
5809       if (winner)
5810         return winner;
5811     }
5812
5813   /* or, if not that,
5814      the  context  is  an  initialization by user-defined conversion (see
5815      _dcl.init_  and  _over.match.user_)  and  the  standard   conversion
5816      sequence  from  the return type of F1 to the destination type (i.e.,
5817      the type of the entity being initialized)  is  a  better  conversion
5818      sequence  than the standard conversion sequence from the return type
5819      of F2 to the destination type.  */
5820
5821   if (cand1->second_conv)
5822     {
5823       winner = compare_ics (cand1->second_conv, cand2->second_conv);
5824       if (winner)
5825         return winner;
5826     }
5827   
5828   /* Check whether we can discard a builtin candidate, either because we
5829      have two identical ones or matching builtin and non-builtin candidates.
5830
5831      (Pedantically in the latter case the builtin which matched the user
5832      function should not be added to the overload set, but we spot it here.
5833      
5834      [over.match.oper]
5835      ... the builtin candidates include ...
5836      - do not have the same parameter type list as any non-template
5837        non-member candidate.  */
5838                             
5839   if (TREE_CODE (cand1->fn) == IDENTIFIER_NODE
5840       || TREE_CODE (cand2->fn) == IDENTIFIER_NODE)
5841     {
5842       for (i = 0; i < len; ++i)
5843         if (!same_type_p (TREE_TYPE (TREE_VEC_ELT (cand1->convs, i)),
5844                           TREE_TYPE (TREE_VEC_ELT (cand2->convs, i))))
5845           break;
5846       if (i == TREE_VEC_LENGTH (cand1->convs))
5847         {
5848           if (cand1->fn == cand2->fn)
5849             /* Two built-in candidates; arbitrarily pick one.  */
5850             return 1;
5851           else if (TREE_CODE (cand1->fn) == IDENTIFIER_NODE)
5852             /* cand1 is built-in; prefer cand2.  */
5853             return -1;
5854           else
5855             /* cand2 is built-in; prefer cand1.  */
5856             return 1;
5857         }
5858     }
5859
5860   /* If the two functions are the same (this can happen with declarations
5861      in multiple scopes and arg-dependent lookup), arbitrarily choose one.  */
5862   if (DECL_P (cand1->fn) && DECL_P (cand2->fn)
5863       && equal_functions (cand1->fn, cand2->fn))
5864     return 1;
5865  
5866 tweak:
5867
5868   /* Extension: If the worst conversion for one candidate is worse than the
5869      worst conversion for the other, take the first.  */
5870   if (!pedantic)
5871     {
5872       int rank1 = IDENTITY_RANK, rank2 = IDENTITY_RANK;
5873       struct z_candidate *w = 0, *l = 0;
5874
5875       for (i = 0; i < len; ++i)
5876         {
5877           if (ICS_RANK (TREE_VEC_ELT (cand1->convs, i+off1)) > rank1)
5878             rank1 = ICS_RANK (TREE_VEC_ELT (cand1->convs, i+off1));
5879           if (ICS_RANK (TREE_VEC_ELT (cand2->convs, i+off2)) > rank2)
5880             rank2 = ICS_RANK (TREE_VEC_ELT (cand2->convs, i+off2));
5881         }
5882       if (rank1 < rank2)
5883         winner = 1, w = cand1, l = cand2;
5884       if (rank1 > rank2)
5885         winner = -1, w = cand2, l = cand1;
5886       if (winner)
5887         {
5888           if (warn)
5889             {
5890               pedwarn ("\
5891 ISO C++ says that these are ambiguous, even \
5892 though the worst conversion for the first is better than \
5893 the worst conversion for the second:");
5894               print_z_candidate (_("candidate 1:"), w);
5895               print_z_candidate (_("candidate 2:"), l);
5896             }
5897           else
5898             add_warning (w, l);
5899           return winner;
5900         }
5901     }
5902
5903   my_friendly_assert (!winner, 20010121);
5904   return 0;
5905 }
5906
5907 /* Given a list of candidates for overloading, find the best one, if any.
5908    This algorithm has a worst case of O(2n) (winner is last), and a best
5909    case of O(n/2) (totally ambiguous); much better than a sorting
5910    algorithm.  */
5911
5912 static struct z_candidate *
5913 tourney (struct z_candidate *candidates)
5914 {
5915   struct z_candidate *champ = candidates, *challenger;
5916   int fate;
5917   int champ_compared_to_predecessor = 0;
5918
5919   /* Walk through the list once, comparing each current champ to the next
5920      candidate, knocking out a candidate or two with each comparison.  */
5921
5922   for (challenger = champ->next; challenger; )
5923     {
5924       fate = joust (champ, challenger, 0);
5925       if (fate == 1)
5926         challenger = challenger->next;
5927       else
5928         {
5929           if (fate == 0)
5930             {
5931               champ = challenger->next;
5932               if (champ == 0)
5933                 return 0;
5934               champ_compared_to_predecessor = 0;
5935             }
5936           else
5937             {
5938               champ = challenger;
5939               champ_compared_to_predecessor = 1;
5940             }
5941
5942           challenger = champ->next;
5943         }
5944     }
5945
5946   /* Make sure the champ is better than all the candidates it hasn't yet
5947      been compared to.  */
5948
5949   for (challenger = candidates; 
5950        challenger != champ 
5951          && !(champ_compared_to_predecessor && challenger->next == champ);
5952        challenger = challenger->next)
5953     {
5954       fate = joust (champ, challenger, 0);
5955       if (fate != 1)
5956         return 0;
5957     }
5958
5959   return champ;
5960 }
5961
5962 /* Returns nonzero if things of type FROM can be converted to TO.  */
5963
5964 bool
5965 can_convert (tree to, tree from)
5966 {
5967   return can_convert_arg (to, from, NULL_TREE);
5968 }
5969
5970 /* Returns nonzero if ARG (of type FROM) can be converted to TO.  */
5971
5972 bool
5973 can_convert_arg (tree to, tree from, tree arg)
5974 {
5975   tree t = implicit_conversion (to, from, arg, LOOKUP_NORMAL);
5976   return (t && ! ICS_BAD_FLAG (t));
5977 }
5978
5979 /* Like can_convert_arg, but allows dubious conversions as well.  */
5980
5981 bool
5982 can_convert_arg_bad (tree to, tree from, tree arg)
5983 {
5984   return implicit_conversion (to, from, arg, LOOKUP_NORMAL) != 0;
5985 }
5986
5987 /* Convert EXPR to TYPE.  Return the converted expression.
5988
5989    Note that we allow bad conversions here because by the time we get to
5990    this point we are committed to doing the conversion.  If we end up
5991    doing a bad conversion, convert_like will complain.  */
5992
5993 tree
5994 perform_implicit_conversion (tree type, tree expr)
5995 {
5996   tree conv;
5997   
5998   if (error_operand_p (expr))
5999     return error_mark_node;
6000   conv = implicit_conversion (type, TREE_TYPE (expr), expr,
6001                               LOOKUP_NORMAL);
6002   if (!conv)
6003     {
6004       error ("could not convert `%E' to `%T'", expr, type);
6005       return error_mark_node;
6006     }
6007
6008   return convert_like (conv, expr);
6009 }
6010
6011 /* DECL is a VAR_DECL whose type is a REFERENCE_TYPE.  The reference
6012    is being bound to a temporary.  Create and return a new VAR_DECL
6013    with the indicated TYPE; this variable will store the value to
6014    which the reference is bound.  */
6015
6016 tree 
6017 make_temporary_var_for_ref_to_temp (tree decl, tree type)
6018 {
6019   tree var;
6020
6021   /* Create the variable.  */
6022   var = build_decl (VAR_DECL, NULL_TREE, type);
6023   DECL_ARTIFICIAL (var) = 1;
6024   TREE_USED (var) = 1;
6025
6026   /* Register the variable.  */
6027   if (TREE_STATIC (decl))
6028     {
6029       /* Namespace-scope or local static; give it a mangled name.  */
6030       tree name;
6031
6032       TREE_STATIC (var) = 1;
6033       name = mangle_ref_init_variable (decl);
6034       DECL_NAME (var) = name;
6035       SET_DECL_ASSEMBLER_NAME (var, name);
6036       var = pushdecl_top_level (var);
6037     }
6038   else
6039     {
6040       /* Create a new cleanup level if necessary.  */
6041       maybe_push_cleanup_level (type);
6042       /* Don't push unnamed temps.  Do set DECL_CONTEXT, though.  */
6043       DECL_CONTEXT (var) = current_function_decl;
6044     }
6045
6046   return var;
6047 }
6048
6049 /* Convert EXPR to the indicated reference TYPE, in a way suitable for
6050    initializing a variable of that TYPE.   If DECL is non-NULL, it is
6051    the VAR_DECL being initialized with the EXPR.  (In that case, the
6052    type of DECL will be TYPE.)
6053
6054    Return the converted expression.  */
6055
6056 tree
6057 initialize_reference (tree type, tree expr, tree decl)
6058 {
6059   tree conv;
6060
6061   if (type == error_mark_node || error_operand_p (expr))
6062     return error_mark_node;
6063
6064   conv = reference_binding (type, TREE_TYPE (expr), expr, LOOKUP_NORMAL);
6065   if (!conv || ICS_BAD_FLAG (conv))
6066     {
6067       error ("could not convert `%E' to `%T'", expr, type);
6068       return error_mark_node;
6069     }
6070
6071   /* If DECL is non-NULL, then this special rule applies:
6072
6073        [class.temporary]
6074
6075        The temporary to which the reference is bound or the temporary
6076        that is the complete object to which the reference is bound
6077        persists for the lifetime of the reference.
6078
6079        The temporaries created during the evaluation of the expression
6080        initializing the reference, except the temporary to which the
6081        reference is bound, are destroyed at the end of the
6082        full-expression in which they are created.
6083
6084      In that case, we store the converted expression into a new
6085      VAR_DECL in a new scope.  
6086
6087      However, we want to be careful not to create temporaries when
6088      they are not required.  For example, given:
6089
6090        struct B {}; 
6091        struct D : public B {};
6092        D f();
6093        const B& b = f();
6094
6095      there is no need to copy the return value from "f"; we can just
6096      extend its lifetime.  Similarly, given:
6097
6098        struct S {};
6099        struct T { operator S(); };
6100        T t;
6101        const S& s = t;
6102
6103     we can extend the lifetime of the returnn value of the conversion
6104     operator.  */
6105   my_friendly_assert (TREE_CODE (conv) == REF_BIND, 20030302);
6106   if (decl)
6107     {
6108       tree var;
6109       tree base_conv_type;
6110
6111       /* Skip over the REF_BIND.  */
6112       conv = TREE_OPERAND (conv, 0);
6113       /* If the next conversion is a BASE_CONV, skip that too -- but
6114          remember that the conversion was required.  */
6115       if (TREE_CODE (conv) == BASE_CONV && !NEED_TEMPORARY_P (conv))
6116         {
6117           base_conv_type = TREE_TYPE (conv);
6118           conv = TREE_OPERAND (conv, 0);
6119         }
6120       else
6121         base_conv_type = NULL_TREE;
6122       /* Perform the remainder of the conversion.  */
6123       expr = convert_like (conv, expr);
6124       if (!real_non_cast_lvalue_p (expr))
6125         {
6126           /* Create the temporary variable.  */
6127           var = make_temporary_var_for_ref_to_temp (decl, TREE_TYPE (expr));
6128           DECL_INITIAL (var) = expr;
6129           cp_finish_decl (var, expr, NULL_TREE, 
6130                       LOOKUP_ONLYCONVERTING|DIRECT_BIND);
6131           /* Use its address to initialize the reference variable.  */
6132           expr = build_address (var);
6133         }
6134       else
6135         /* Take the address of EXPR.  */
6136         expr = build_unary_op (ADDR_EXPR, expr, 0);
6137       /* If a BASE_CONV was required, perform it now.  */
6138       if (base_conv_type)
6139         expr = (perform_implicit_conversion 
6140                 (build_pointer_type (base_conv_type), expr));
6141       return build_nop (type, expr);
6142     }
6143
6144   /* Perform the conversion.  */
6145   return convert_like (conv, expr);
6146 }
6147
6148 #include "gt-cp-call.h"