OSDN Git Service

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