OSDN Git Service

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