OSDN Git Service

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