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