OSDN Git Service

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