OSDN Git Service

* call.c (build_vfield_ref, build_call, build_conditional_expr,
[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 build3 (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 = build0 (EMPTY_CLASS_EXPR, TREE_TYPE (TREE_VALUE (tmp)));
347           TREE_VALUE (tmp) = build2 (COMPOUND_EXPR, TREE_TYPE (t),
348                                      TREE_VALUE (tmp), t);
349         }
350
351   function = build3 (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           else if (!same_type_p (fbase, tbase))
720             return NULL;
721         }
722       else if (IS_AGGR_TYPE (TREE_TYPE (from))
723                && IS_AGGR_TYPE (TREE_TYPE (to))
724                /* [conv.ptr]
725                   
726                   An rvalue of type "pointer to cv D," where D is a
727                   class type, can be converted to an rvalue of type
728                   "pointer to cv B," where B is a base class (clause
729                   _class.derived_) of D.  If B is an inaccessible
730                   (clause _class.access_) or ambiguous
731                   (_class.member.lookup_) base class of D, a program
732                   that necessitates this conversion is ill-formed.  */
733                /* Therefore, we use DERIVED_FROM_P, and not
734                   ACCESSIBLY_UNIQUELY_DERIVED_FROM_P, in this test.  */
735                && DERIVED_FROM_P (TREE_TYPE (to), TREE_TYPE (from)))
736         {
737           from = 
738             cp_build_qualified_type (TREE_TYPE (to),
739                                      cp_type_quals (TREE_TYPE (from)));
740           from = build_pointer_type (from);
741           conv = build_conv (ck_ptr, from, conv);
742         }
743
744       if (tcode == POINTER_TYPE)
745         {
746           to_pointee = TREE_TYPE (to);
747           from_pointee = TREE_TYPE (from);
748         }
749       else
750         {
751           to_pointee = TYPE_PTRMEM_POINTED_TO_TYPE (to);
752           from_pointee = TYPE_PTRMEM_POINTED_TO_TYPE (from);
753         }
754
755       if (same_type_p (from, to))
756         /* OK */;
757       else if (comp_ptr_ttypes (to_pointee, from_pointee))
758         conv = build_conv (ck_qual, to, conv);
759       else if (expr && string_conv_p (to, expr, 0))
760         /* converting from string constant to char *.  */
761         conv = build_conv (ck_qual, to, conv);
762       else if (ptr_reasonably_similar (to_pointee, from_pointee))
763         {
764           conv = build_conv (ck_ptr, to, conv);
765           conv->bad_p = true;
766         }
767       else
768         return NULL;
769
770       from = to;
771     }
772   else if (TYPE_PTRMEMFUNC_P (to) && TYPE_PTRMEMFUNC_P (from))
773     {
774       tree fromfn = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (from));
775       tree tofn = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (to));
776       tree fbase = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (fromfn)));
777       tree tbase = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (tofn)));
778
779       if (!DERIVED_FROM_P (fbase, tbase)
780           || !same_type_p (TREE_TYPE (fromfn), TREE_TYPE (tofn))
781           || !compparms (TREE_CHAIN (TYPE_ARG_TYPES (fromfn)),
782                          TREE_CHAIN (TYPE_ARG_TYPES (tofn)))
783           || cp_type_quals (fbase) != cp_type_quals (tbase))
784         return 0;
785
786       from = cp_build_qualified_type (tbase, cp_type_quals (fbase));
787       from = build_method_type_directly (from, 
788                                          TREE_TYPE (fromfn),
789                                          TREE_CHAIN (TYPE_ARG_TYPES (fromfn)));
790       from = build_ptrmemfunc_type (build_pointer_type (from));
791       conv = build_conv (ck_pmem, from, conv);
792     }
793   else if (tcode == BOOLEAN_TYPE)
794     {
795       /* [conv.bool]
796
797           An rvalue of arithmetic, enumeration, pointer, or pointer to
798           member type can be converted to an rvalue of type bool.  */
799       if (ARITHMETIC_TYPE_P (from)
800           || fcode == ENUMERAL_TYPE
801           || fcode == POINTER_TYPE
802           || TYPE_PTR_TO_MEMBER_P (from))
803         {
804           conv = build_conv (ck_std, to, conv);
805           if (fcode == POINTER_TYPE
806               || TYPE_PTRMEM_P (from)
807               || (TYPE_PTRMEMFUNC_P (from) 
808                   && conv->rank < cr_pbool))
809             conv->rank = cr_pbool;
810           return conv;
811         }
812       
813       return NULL;
814     }
815   /* We don't check for ENUMERAL_TYPE here because there are no standard
816      conversions to enum type.  */
817   else if (tcode == INTEGER_TYPE || tcode == BOOLEAN_TYPE
818            || tcode == REAL_TYPE)
819     {
820       if (! (INTEGRAL_CODE_P (fcode) || fcode == REAL_TYPE))
821         return 0;
822       conv = build_conv (ck_std, to, conv);
823
824       /* Give this a better rank if it's a promotion.  */
825       if (same_type_p (to, type_promotes_to (from))
826           && conv->u.next->rank <= cr_promotion)
827         conv->rank = cr_promotion;
828     }
829   else if (fcode == VECTOR_TYPE && tcode == VECTOR_TYPE
830            && vector_types_convertible_p (from, to))
831     return build_conv (ck_std, to, conv);
832   else if (IS_AGGR_TYPE (to) && IS_AGGR_TYPE (from)
833            && is_properly_derived_from (from, to))
834     {
835       if (conv->kind == ck_rvalue)
836         conv = conv->u.next;
837       conv = build_conv (ck_base, to, conv);
838       /* The derived-to-base conversion indicates the initialization
839          of a parameter with base type from an object of a derived
840          type.  A temporary object is created to hold the result of
841          the conversion.  */
842       conv->need_temporary_p = true;
843     }
844   else
845     return NULL;
846
847   return conv;
848 }
849
850 /* Returns nonzero if T1 is reference-related to T2.  */
851
852 static bool
853 reference_related_p (tree t1, tree t2)
854 {
855   t1 = TYPE_MAIN_VARIANT (t1);
856   t2 = TYPE_MAIN_VARIANT (t2);
857
858   /* [dcl.init.ref]
859
860      Given types "cv1 T1" and "cv2 T2," "cv1 T1" is reference-related
861      to "cv2 T2" if T1 is the same type as T2, or T1 is a base class
862      of T2.  */
863   return (same_type_p (t1, t2)
864           || (CLASS_TYPE_P (t1) && CLASS_TYPE_P (t2)
865               && DERIVED_FROM_P (t1, t2)));
866 }
867
868 /* Returns nonzero if T1 is reference-compatible with T2.  */
869
870 static bool
871 reference_compatible_p (tree t1, tree t2)
872 {
873   /* [dcl.init.ref]
874
875      "cv1 T1" is reference compatible with "cv2 T2" if T1 is
876      reference-related to T2 and cv1 is the same cv-qualification as,
877      or greater cv-qualification than, cv2.  */
878   return (reference_related_p (t1, t2)
879           && at_least_as_qualified_p (t1, t2));
880 }
881
882 /* Determine whether or not the EXPR (of class type S) can be
883    converted to T as in [over.match.ref].  */
884
885 static conversion *
886 convert_class_to_reference (tree t, tree s, tree expr)
887 {
888   tree conversions;
889   tree arglist;
890   conversion *conv;
891   tree reference_type;
892   struct z_candidate *candidates;
893   struct z_candidate *cand;
894   bool any_viable_p;
895
896   conversions = lookup_conversions (s);
897   if (!conversions)
898     return NULL;
899
900   /* [over.match.ref]
901
902      Assuming that "cv1 T" is the underlying type of the reference
903      being initialized, and "cv S" is the type of the initializer
904      expression, with S a class type, the candidate functions are
905      selected as follows:
906
907      --The conversion functions of S and its base classes are
908        considered.  Those that are not hidden within S and yield type
909        "reference to cv2 T2", where "cv1 T" is reference-compatible
910        (_dcl.init.ref_) with "cv2 T2", are candidate functions.
911
912      The argument list has one argument, which is the initializer
913      expression.  */
914
915   candidates = 0;
916
917   /* Conceptually, we should take the address of EXPR and put it in
918      the argument list.  Unfortunately, however, that can result in
919      error messages, which we should not issue now because we are just
920      trying to find a conversion operator.  Therefore, we use NULL,
921      cast to the appropriate type.  */
922   arglist = build_int_cst (build_pointer_type (s), 0, 0);
923   arglist = build_tree_list (NULL_TREE, arglist);
924
925   reference_type = build_reference_type (t);
926
927   while (conversions)
928     {
929       tree fns = TREE_VALUE (conversions);
930
931       for (; fns; fns = OVL_NEXT (fns))
932         {
933           tree f = OVL_CURRENT (fns);
934           tree t2 = TREE_TYPE (TREE_TYPE (f));
935           
936           cand = NULL;
937
938           /* If this is a template function, try to get an exact
939              match.  */
940           if (TREE_CODE (f) == TEMPLATE_DECL)
941             {
942               cand = add_template_candidate (&candidates,
943                                              f, s,
944                                              NULL_TREE,
945                                              arglist,
946                                              reference_type,
947                                              TYPE_BINFO (s),
948                                              TREE_PURPOSE (conversions),
949                                              LOOKUP_NORMAL,
950                                              DEDUCE_CONV);
951               
952               if (cand)
953                 {
954                   /* Now, see if the conversion function really returns
955                      an lvalue of the appropriate type.  From the
956                      point of view of unification, simply returning an
957                      rvalue of the right type is good enough.  */
958                   f = cand->fn;
959                   t2 = TREE_TYPE (TREE_TYPE (f));
960                   if (TREE_CODE (t2) != REFERENCE_TYPE
961                       || !reference_compatible_p (t, TREE_TYPE (t2)))
962                     {
963                       candidates = candidates->next;
964                       cand = NULL;
965                     }
966                 }
967             }
968           else if (TREE_CODE (t2) == REFERENCE_TYPE
969                    && reference_compatible_p (t, TREE_TYPE (t2)))
970             cand = add_function_candidate (&candidates, f, s, arglist, 
971                                            TYPE_BINFO (s),      
972                                            TREE_PURPOSE (conversions),
973                                            LOOKUP_NORMAL);
974           
975           if (cand)
976             {
977               conversion *identity_conv;
978               /* Build a standard conversion sequence indicating the
979                  binding from the reference type returned by the
980                  function to the desired REFERENCE_TYPE.  */
981               identity_conv 
982                 = build_identity_conv (TREE_TYPE (TREE_TYPE 
983                                                   (TREE_TYPE (cand->fn))),
984                                        NULL_TREE);
985               cand->second_conv
986                 = (direct_reference_binding 
987                    (reference_type, identity_conv));
988               cand->second_conv->bad_p |= cand->convs[0]->bad_p;
989             }
990         }
991       conversions = TREE_CHAIN (conversions);
992     }
993
994   candidates = splice_viable (candidates, pedantic, &any_viable_p);
995   /* If none of the conversion functions worked out, let our caller
996      know.  */
997   if (!any_viable_p)
998     return NULL;
999
1000   cand = tourney (candidates);
1001   if (!cand)
1002     return NULL;
1003
1004   /* Now that we know that this is the function we're going to use fix
1005      the dummy first argument.  */
1006   cand->args = tree_cons (NULL_TREE,
1007                           build_this (expr),
1008                           TREE_CHAIN (cand->args));
1009
1010   /* Build a user-defined conversion sequence representing the
1011      conversion.  */
1012   conv = build_conv (ck_user,
1013                      TREE_TYPE (TREE_TYPE (cand->fn)),
1014                      build_identity_conv (TREE_TYPE (expr), expr));
1015   conv->cand = cand;
1016
1017   /* Merge it with the standard conversion sequence from the
1018      conversion function's return type to the desired type.  */
1019   cand->second_conv = merge_conversion_sequences (conv, cand->second_conv);
1020
1021   if (cand->viable == -1)
1022     conv->bad_p = true;
1023   
1024   return cand->second_conv;
1025 }
1026
1027 /* A reference of the indicated TYPE is being bound directly to the
1028    expression represented by the implicit conversion sequence CONV.
1029    Return a conversion sequence for this binding.  */
1030
1031 static conversion *
1032 direct_reference_binding (tree type, conversion *conv)
1033 {
1034   tree t;
1035
1036   my_friendly_assert (TREE_CODE (type) == REFERENCE_TYPE, 20030306);
1037   my_friendly_assert (TREE_CODE (conv->type) != REFERENCE_TYPE, 20030306);
1038
1039   t = TREE_TYPE (type);
1040
1041   /* [over.ics.rank] 
1042      
1043      When a parameter of reference type binds directly
1044      (_dcl.init.ref_) to an argument expression, the implicit
1045      conversion sequence is the identity conversion, unless the
1046      argument expression has a type that is a derived class of the
1047      parameter type, in which case the implicit conversion sequence is
1048      a derived-to-base Conversion.
1049          
1050      If the parameter binds directly to the result of applying a
1051      conversion function to the argument expression, the implicit
1052      conversion sequence is a user-defined conversion sequence
1053      (_over.ics.user_), with the second standard conversion sequence
1054      either an identity conversion or, if the conversion function
1055      returns an entity of a type that is a derived class of the
1056      parameter type, a derived-to-base conversion.  */
1057   if (!same_type_ignoring_top_level_qualifiers_p (t, conv->type))
1058     {
1059       /* Represent the derived-to-base conversion.  */
1060       conv = build_conv (ck_base, t, conv);
1061       /* We will actually be binding to the base-class subobject in
1062          the derived class, so we mark this conversion appropriately.
1063          That way, convert_like knows not to generate a temporary.  */
1064       conv->need_temporary_p = false;
1065     }
1066   return build_conv (ck_ref_bind, type, conv);
1067 }
1068
1069 /* Returns the conversion path from type FROM to reference type TO for
1070    purposes of reference binding.  For lvalue binding, either pass a
1071    reference type to FROM or an lvalue expression to EXPR.  If the
1072    reference will be bound to a temporary, NEED_TEMPORARY_P is set for
1073    the conversion returned.  */
1074
1075 static conversion *
1076 reference_binding (tree rto, tree rfrom, tree expr, int flags)
1077 {
1078   conversion *conv = NULL;
1079   tree to = TREE_TYPE (rto);
1080   tree from = rfrom;
1081   bool related_p;
1082   bool compatible_p;
1083   cp_lvalue_kind lvalue_p = clk_none;
1084
1085   if (TREE_CODE (to) == FUNCTION_TYPE && expr && type_unknown_p (expr))
1086     {
1087       expr = instantiate_type (to, expr, tf_none);
1088       if (expr == error_mark_node)
1089         return NULL;
1090       from = TREE_TYPE (expr);
1091     }
1092
1093   if (TREE_CODE (from) == REFERENCE_TYPE)
1094     {
1095       /* Anything with reference type is an lvalue.  */
1096       lvalue_p = clk_ordinary;
1097       from = TREE_TYPE (from);
1098     }
1099   else if (expr)
1100     lvalue_p = real_lvalue_p (expr);
1101
1102   /* Figure out whether or not the types are reference-related and
1103      reference compatible.  We have do do this after stripping
1104      references from FROM.  */
1105   related_p = reference_related_p (to, from);
1106   compatible_p = reference_compatible_p (to, from);
1107
1108   if (lvalue_p && compatible_p)
1109     {
1110       /* [dcl.init.ref]
1111
1112          If the initializer expression 
1113          
1114          -- is an lvalue (but not an lvalue for a bit-field), and "cv1 T1"
1115             is reference-compatible with "cv2 T2,"
1116          
1117          the reference is bound directly to the initializer expression
1118          lvalue.  */
1119       conv = build_identity_conv (from, expr);
1120       conv = direct_reference_binding (rto, conv);
1121       if ((lvalue_p & clk_bitfield) != 0
1122           || ((lvalue_p & clk_packed) != 0 && !TYPE_PACKED (to)))
1123         /* For the purposes of overload resolution, we ignore the fact
1124            this expression is a bitfield or packed field. (In particular,
1125            [over.ics.ref] says specifically that a function with a
1126            non-const reference parameter is viable even if the
1127            argument is a bitfield.)
1128
1129            However, when we actually call the function we must create
1130            a temporary to which to bind the reference.  If the
1131            reference is volatile, or isn't const, then we cannot make
1132            a temporary, so we just issue an error when the conversion
1133            actually occurs.  */
1134         conv->need_temporary_p = true;
1135                                         
1136       return conv;
1137     }
1138   else if (CLASS_TYPE_P (from) && !(flags & LOOKUP_NO_CONVERSION))
1139     {
1140       /* [dcl.init.ref]
1141
1142          If the initializer expression
1143
1144          -- has a class type (i.e., T2 is a class type) can be
1145             implicitly converted to an lvalue of type "cv3 T3," where
1146             "cv1 T1" is reference-compatible with "cv3 T3".  (this
1147             conversion is selected by enumerating the applicable
1148             conversion functions (_over.match.ref_) and choosing the
1149             best one through overload resolution.  (_over.match_). 
1150
1151         the reference is bound to the lvalue result of the conversion
1152         in the second case.  */
1153       conv = convert_class_to_reference (to, from, expr);
1154       if (conv)
1155         return conv;
1156     }
1157
1158   /* From this point on, we conceptually need temporaries, even if we
1159      elide them.  Only the cases above are "direct bindings".  */
1160   if (flags & LOOKUP_NO_TEMP_BIND)
1161     return NULL;
1162
1163   /* [over.ics.rank]
1164      
1165      When a parameter of reference type is not bound directly to an
1166      argument expression, the conversion sequence is the one required
1167      to convert the argument expression to the underlying type of the
1168      reference according to _over.best.ics_.  Conceptually, this
1169      conversion sequence corresponds to copy-initializing a temporary
1170      of the underlying type with the argument expression.  Any
1171      difference in top-level cv-qualification is subsumed by the
1172      initialization itself and does not constitute a conversion.  */
1173
1174   /* [dcl.init.ref]
1175
1176      Otherwise, the reference shall be to a non-volatile const type.  */
1177   if (!CP_TYPE_CONST_NON_VOLATILE_P (to))
1178     return NULL;
1179
1180   /* [dcl.init.ref]
1181      
1182      If the initializer expression is an rvalue, with T2 a class type,
1183      and "cv1 T1" is reference-compatible with "cv2 T2", the reference
1184      is bound in one of the following ways:
1185      
1186      -- The reference is bound to the object represented by the rvalue
1187         or to a sub-object within that object.  
1188
1189      -- ...
1190         
1191      We use the first alternative.  The implicit conversion sequence
1192      is supposed to be same as we would obtain by generating a
1193      temporary.  Fortunately, if the types are reference compatible,
1194      then this is either an identity conversion or the derived-to-base
1195      conversion, just as for direct binding.  */
1196   if (CLASS_TYPE_P (from) && compatible_p)
1197     {
1198       conv = build_identity_conv (from, expr);
1199       conv = direct_reference_binding (rto, conv);
1200       if (!(flags & LOOKUP_CONSTRUCTOR_CALLABLE))
1201         conv->u.next->check_copy_constructor_p = true;
1202       return conv;
1203     }
1204
1205   /* [dcl.init.ref]
1206
1207      Otherwise, a temporary of type "cv1 T1" is created and
1208      initialized from the initializer expression using the rules for a
1209      non-reference copy initialization.  If T1 is reference-related to
1210      T2, cv1 must be the same cv-qualification as, or greater
1211      cv-qualification than, cv2; otherwise, the program is ill-formed.  */
1212   if (related_p && !at_least_as_qualified_p (to, from))
1213     return NULL;
1214
1215   conv = implicit_conversion (to, from, expr, flags);
1216   if (!conv)
1217     return NULL;
1218
1219   conv = build_conv (ck_ref_bind, rto, conv);
1220   /* This reference binding, unlike those above, requires the
1221      creation of a temporary.  */
1222   conv->need_temporary_p = true;
1223
1224   return conv;
1225 }
1226
1227 /* Returns the implicit conversion sequence (see [over.ics]) from type FROM
1228    to type TO.  The optional expression EXPR may affect the conversion.
1229    FLAGS are the usual overloading flags.  Only LOOKUP_NO_CONVERSION is
1230    significant.  */
1231
1232 static conversion *
1233 implicit_conversion (tree to, tree from, tree expr, int flags)
1234 {
1235   conversion *conv;
1236
1237   if (from == error_mark_node || to == error_mark_node
1238       || expr == error_mark_node)
1239     return NULL;
1240
1241   if (TREE_CODE (to) == REFERENCE_TYPE)
1242     conv = reference_binding (to, from, expr, flags);
1243   else
1244     conv = standard_conversion (to, from, expr);
1245
1246   if (conv)
1247     return conv;
1248
1249   if (expr != NULL_TREE
1250       && (IS_AGGR_TYPE (from)
1251           || IS_AGGR_TYPE (to))
1252       && (flags & LOOKUP_NO_CONVERSION) == 0)
1253     {
1254       struct z_candidate *cand;
1255
1256       cand = build_user_type_conversion_1
1257         (to, expr, LOOKUP_ONLYCONVERTING);
1258       if (cand)
1259         conv = cand->second_conv;
1260
1261       /* We used to try to bind a reference to a temporary here, but that
1262          is now handled by the recursive call to this function at the end
1263          of reference_binding.  */
1264       return conv;
1265     }
1266
1267   return NULL;
1268 }
1269
1270 /* Add a new entry to the list of candidates.  Used by the add_*_candidate
1271    functions.  */
1272
1273 static struct z_candidate *
1274 add_candidate (struct z_candidate **candidates, 
1275                tree fn, tree args, 
1276                size_t num_convs, conversion **convs, 
1277                tree access_path, tree conversion_path, 
1278                int viable)
1279 {
1280   struct z_candidate *cand 
1281     = conversion_obstack_alloc (sizeof (struct z_candidate));
1282
1283   cand->fn = fn;
1284   cand->args = args;
1285   cand->convs = convs;
1286   cand->num_convs = num_convs;
1287   cand->access_path = access_path;
1288   cand->conversion_path = conversion_path;
1289   cand->viable = viable;
1290   cand->next = *candidates;
1291   *candidates = cand;
1292
1293   return cand;
1294 }
1295
1296 /* Create an overload candidate for the function or method FN called with
1297    the argument list ARGLIST and add it to CANDIDATES.  FLAGS is passed on
1298    to implicit_conversion.
1299
1300    CTYPE, if non-NULL, is the type we want to pretend this function
1301    comes from for purposes of overload resolution.  */
1302
1303 static struct z_candidate *
1304 add_function_candidate (struct z_candidate **candidates, 
1305                         tree fn, tree ctype, tree arglist, 
1306                         tree access_path, tree conversion_path,
1307                         int flags)
1308 {
1309   tree parmlist = TYPE_ARG_TYPES (TREE_TYPE (fn));
1310   int i, len;
1311   conversion **convs;
1312   tree parmnode, argnode;
1313   tree orig_arglist;
1314   int viable = 1;
1315
1316   /* Built-in functions that haven't been declared don't really
1317      exist.  */
1318   if (DECL_ANTICIPATED (fn))
1319     return NULL;
1320
1321   /* The `this', `in_chrg' and VTT arguments to constructors are not
1322      considered in overload resolution.  */
1323   if (DECL_CONSTRUCTOR_P (fn))
1324     {
1325       parmlist = skip_artificial_parms_for (fn, parmlist);
1326       orig_arglist = arglist;
1327       arglist = skip_artificial_parms_for (fn, arglist);
1328     }
1329   else 
1330     orig_arglist = arglist;
1331
1332   len = list_length (arglist);
1333   convs = alloc_conversions (len);
1334
1335   /* 13.3.2 - Viable functions [over.match.viable]
1336      First, to be a viable function, a candidate function shall have enough
1337      parameters to agree in number with the arguments in the list.
1338
1339      We need to check this first; otherwise, checking the ICSes might cause
1340      us to produce an ill-formed template instantiation.  */
1341
1342   parmnode = parmlist;
1343   for (i = 0; i < len; ++i)
1344     {
1345       if (parmnode == NULL_TREE || parmnode == void_list_node)
1346         break;
1347       parmnode = TREE_CHAIN (parmnode);
1348     }
1349
1350   if (i < len && parmnode)
1351     viable = 0;
1352
1353   /* Make sure there are default args for the rest of the parms.  */
1354   else if (!sufficient_parms_p (parmnode))
1355     viable = 0;
1356
1357   if (! viable)
1358     goto out;
1359
1360   /* Second, for F to be a viable function, there shall exist for each
1361      argument an implicit conversion sequence that converts that argument
1362      to the corresponding parameter of F.  */
1363
1364   parmnode = parmlist;
1365   argnode = arglist;
1366
1367   for (i = 0; i < len; ++i)
1368     {
1369       tree arg = TREE_VALUE (argnode);
1370       tree argtype = lvalue_type (arg);
1371       conversion *t;
1372       int is_this;
1373
1374       if (parmnode == void_list_node)
1375         break;
1376
1377       is_this = (i == 0 && DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
1378                  && ! DECL_CONSTRUCTOR_P (fn));
1379
1380       if (parmnode)
1381         {
1382           tree parmtype = TREE_VALUE (parmnode);
1383
1384           /* The type of the implicit object parameter ('this') for
1385              overload resolution is not always the same as for the
1386              function itself; conversion functions are considered to
1387              be members of the class being converted, and functions
1388              introduced by a using-declaration are considered to be
1389              members of the class that uses them.
1390
1391              Since build_over_call ignores the ICS for the `this'
1392              parameter, we can just change the parm type.  */
1393           if (ctype && is_this)
1394             {
1395               parmtype
1396                 = build_qualified_type (ctype,
1397                                         TYPE_QUALS (TREE_TYPE (parmtype)));
1398               parmtype = build_pointer_type (parmtype);
1399             }
1400
1401           t = implicit_conversion (parmtype, argtype, arg, flags);
1402         }
1403       else
1404         {
1405           t = build_identity_conv (argtype, arg);
1406           t->ellipsis_p = true;
1407         }
1408
1409       if (t && is_this)
1410         t->this_p = true;
1411
1412       convs[i] = t;
1413       if (! t)
1414         {
1415           viable = 0;
1416           break;
1417         }
1418
1419       if (t->bad_p)
1420         viable = -1;
1421
1422       if (parmnode)
1423         parmnode = TREE_CHAIN (parmnode);
1424       argnode = TREE_CHAIN (argnode);
1425     }
1426
1427  out:
1428   return add_candidate (candidates, fn, orig_arglist, len, convs, 
1429                         access_path, conversion_path, viable);
1430 }
1431
1432 /* Create an overload candidate for the conversion function FN which will
1433    be invoked for expression OBJ, producing a pointer-to-function which
1434    will in turn be called with the argument list ARGLIST, and add it to
1435    CANDIDATES.  FLAGS is passed on to implicit_conversion.
1436
1437    Actually, we don't really care about FN; we care about the type it
1438    converts to.  There may be multiple conversion functions that will
1439    convert to that type, and we rely on build_user_type_conversion_1 to
1440    choose the best one; so when we create our candidate, we record the type
1441    instead of the function.  */
1442
1443 static struct z_candidate *
1444 add_conv_candidate (struct z_candidate **candidates, tree fn, tree obj,
1445                     tree arglist, tree access_path, tree conversion_path)
1446 {
1447   tree totype = TREE_TYPE (TREE_TYPE (fn));
1448   int i, len, viable, flags;
1449   tree parmlist, parmnode, argnode;
1450   conversion **convs;
1451
1452   for (parmlist = totype; TREE_CODE (parmlist) != FUNCTION_TYPE; )
1453     parmlist = TREE_TYPE (parmlist);
1454   parmlist = TYPE_ARG_TYPES (parmlist);
1455
1456   len = list_length (arglist) + 1;
1457   convs = alloc_conversions (len);
1458   parmnode = parmlist;
1459   argnode = arglist;
1460   viable = 1;
1461   flags = LOOKUP_NORMAL;
1462
1463   /* Don't bother looking up the same type twice.  */
1464   if (*candidates && (*candidates)->fn == totype)
1465     return NULL;
1466
1467   for (i = 0; i < len; ++i)
1468     {
1469       tree arg = i == 0 ? obj : TREE_VALUE (argnode);
1470       tree argtype = lvalue_type (arg);
1471       conversion *t;
1472
1473       if (i == 0)
1474         t = implicit_conversion (totype, argtype, arg, flags);
1475       else if (parmnode == void_list_node)
1476         break;
1477       else if (parmnode)
1478         t = implicit_conversion (TREE_VALUE (parmnode), argtype, arg, flags);
1479       else
1480         {
1481           t = build_identity_conv (argtype, arg);
1482           t->ellipsis_p = true;
1483         }
1484
1485       convs[i] = t;
1486       if (! t)
1487         break;
1488
1489       if (t->bad_p)
1490         viable = -1;
1491
1492       if (i == 0)
1493         continue;
1494
1495       if (parmnode)
1496         parmnode = TREE_CHAIN (parmnode);
1497       argnode = TREE_CHAIN (argnode);
1498     }
1499
1500   if (i < len)
1501     viable = 0;
1502
1503   if (!sufficient_parms_p (parmnode))
1504     viable = 0;
1505
1506   return add_candidate (candidates, totype, arglist, len, convs, 
1507                         access_path, conversion_path, viable);
1508 }
1509
1510 static void
1511 build_builtin_candidate (struct z_candidate **candidates, tree fnname,
1512                          tree type1, tree type2, tree *args, tree *argtypes,
1513                          int flags)
1514 {
1515   conversion *t;
1516   conversion **convs;
1517   size_t num_convs;
1518   int viable = 1, i;
1519   tree types[2];
1520
1521   types[0] = type1;
1522   types[1] = type2;
1523
1524   num_convs =  args[2] ? 3 : (args[1] ? 2 : 1);
1525   convs = alloc_conversions (num_convs);
1526
1527   for (i = 0; i < 2; ++i)
1528     {
1529       if (! args[i])
1530         break;
1531
1532       t = implicit_conversion (types[i], argtypes[i], args[i], flags);
1533       if (! t)
1534         {
1535           viable = 0;
1536           /* We need something for printing the candidate.  */
1537           t = build_identity_conv (types[i], NULL_TREE);
1538         }
1539       else if (t->bad_p)
1540         viable = 0;
1541       convs[i] = t;
1542     }
1543
1544   /* For COND_EXPR we rearranged the arguments; undo that now.  */
1545   if (args[2])
1546     {
1547       convs[2] = convs[1];
1548       convs[1] = convs[0];
1549       t = implicit_conversion (boolean_type_node, argtypes[2], args[2], flags);
1550       if (t)
1551         convs[0] = t;
1552       else
1553         viable = 0;
1554     }      
1555
1556   add_candidate (candidates, fnname, /*args=*/NULL_TREE, 
1557                  num_convs, convs, 
1558                  /*access_path=*/NULL_TREE,
1559                  /*conversion_path=*/NULL_TREE,
1560                  viable);
1561 }
1562
1563 static bool
1564 is_complete (tree t)
1565 {
1566   return COMPLETE_TYPE_P (complete_type (t));
1567 }
1568
1569 /* Returns nonzero if TYPE is a promoted arithmetic type.  */
1570
1571 static bool
1572 promoted_arithmetic_type_p (tree type)
1573 {
1574   /* [over.built]
1575
1576      In this section, the term promoted integral type is used to refer
1577      to those integral types which are preserved by integral promotion
1578      (including e.g.  int and long but excluding e.g.  char).
1579      Similarly, the term promoted arithmetic type refers to promoted
1580      integral types plus floating types.  */
1581   return ((INTEGRAL_TYPE_P (type)
1582            && same_type_p (type_promotes_to (type), type))
1583           || TREE_CODE (type) == REAL_TYPE);
1584 }
1585
1586 /* Create any builtin operator overload candidates for the operator in
1587    question given the converted operand types TYPE1 and TYPE2.  The other
1588    args are passed through from add_builtin_candidates to
1589    build_builtin_candidate.  
1590    
1591    TYPE1 and TYPE2 may not be permissible, and we must filter them. 
1592    If CODE is requires candidates operands of the same type of the kind
1593    of which TYPE1 and TYPE2 are, we add both candidates
1594    CODE (TYPE1, TYPE1) and CODE (TYPE2, TYPE2).  */
1595
1596 static void
1597 add_builtin_candidate (struct z_candidate **candidates, enum tree_code code,
1598                        enum tree_code code2, tree fnname, tree type1,
1599                        tree type2, tree *args, tree *argtypes, int flags)
1600 {
1601   switch (code)
1602     {
1603     case POSTINCREMENT_EXPR:
1604     case POSTDECREMENT_EXPR:
1605       args[1] = integer_zero_node;
1606       type2 = integer_type_node;
1607       break;
1608     default:
1609       break;
1610     }
1611
1612   switch (code)
1613     {
1614
1615 /* 4 For every pair T, VQ), where T is an arithmetic or  enumeration  type,
1616      and  VQ  is  either  volatile or empty, there exist candidate operator
1617      functions of the form
1618              VQ T&   operator++(VQ T&);
1619              T       operator++(VQ T&, int);
1620    5 For every pair T, VQ), where T is an enumeration type or an arithmetic
1621      type  other than bool, and VQ is either volatile or empty, there exist
1622      candidate operator functions of the form
1623              VQ T&   operator--(VQ T&);
1624              T       operator--(VQ T&, int);
1625    6 For every pair T, VQ), where T is  a  cv-qualified  or  cv-unqualified
1626      complete  object type, and VQ is either volatile or empty, there exist
1627      candidate operator functions of the form
1628              T*VQ&   operator++(T*VQ&);
1629              T*VQ&   operator--(T*VQ&);
1630              T*      operator++(T*VQ&, int);
1631              T*      operator--(T*VQ&, int);  */
1632
1633     case POSTDECREMENT_EXPR:
1634     case PREDECREMENT_EXPR:
1635       if (TREE_CODE (type1) == BOOLEAN_TYPE)
1636         return;
1637     case POSTINCREMENT_EXPR:
1638     case PREINCREMENT_EXPR:
1639       if (ARITHMETIC_TYPE_P (type1) || TYPE_PTROB_P (type1))
1640         {
1641           type1 = build_reference_type (type1);
1642           break;
1643         }
1644       return;
1645
1646 /* 7 For every cv-qualified or cv-unqualified complete object type T, there
1647      exist candidate operator functions of the form
1648
1649              T&      operator*(T*);
1650
1651    8 For every function type T, there exist candidate operator functions of
1652      the form
1653              T&      operator*(T*);  */
1654
1655     case INDIRECT_REF:
1656       if (TREE_CODE (type1) == POINTER_TYPE
1657           && (TYPE_PTROB_P (type1)
1658               || TREE_CODE (TREE_TYPE (type1)) == FUNCTION_TYPE))
1659         break;
1660       return; 
1661
1662 /* 9 For every type T, there exist candidate operator functions of the form
1663              T*      operator+(T*);
1664
1665    10For  every  promoted arithmetic type T, there exist candidate operator
1666      functions of the form
1667              T       operator+(T);
1668              T       operator-(T);  */
1669
1670     case CONVERT_EXPR: /* unary + */
1671       if (TREE_CODE (type1) == POINTER_TYPE)
1672         break;
1673     case NEGATE_EXPR:
1674       if (ARITHMETIC_TYPE_P (type1))
1675         break;
1676       return;
1677
1678 /* 11For every promoted integral type T,  there  exist  candidate  operator
1679      functions of the form
1680              T       operator~(T);  */
1681
1682     case BIT_NOT_EXPR:
1683       if (INTEGRAL_TYPE_P (type1))
1684         break;
1685       return;
1686
1687 /* 12For every quintuple C1, C2, T, CV1, CV2), where C2 is a class type, C1
1688      is the same type as C2 or is a derived class of C2, T  is  a  complete
1689      object type or a function type, and CV1 and CV2 are cv-qualifier-seqs,
1690      there exist candidate operator functions of the form
1691              CV12 T& operator->*(CV1 C1*, CV2 T C2::*);
1692      where CV12 is the union of CV1 and CV2.  */
1693
1694     case MEMBER_REF:
1695       if (TREE_CODE (type1) == POINTER_TYPE
1696           && TYPE_PTR_TO_MEMBER_P (type2))
1697         {
1698           tree c1 = TREE_TYPE (type1);
1699           tree c2 = TYPE_PTRMEM_CLASS_TYPE (type2);
1700
1701           if (IS_AGGR_TYPE (c1) && DERIVED_FROM_P (c2, c1)
1702               && (TYPE_PTRMEMFUNC_P (type2)
1703                   || is_complete (TREE_TYPE (TREE_TYPE (type2)))))
1704             break;
1705         }
1706       return;
1707
1708 /* 13For every pair of promoted arithmetic types L and R, there exist  can-
1709      didate operator functions of the form
1710              LR      operator*(L, R);
1711              LR      operator/(L, R);
1712              LR      operator+(L, R);
1713              LR      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              bool    operator!=(L, R);
1720      where  LR  is  the  result of the usual arithmetic conversions between
1721      types L and R.
1722
1723    14For every pair of types T and I, where T  is  a  cv-qualified  or  cv-
1724      unqualified  complete  object  type and I is a promoted integral type,
1725      there exist candidate operator functions of the form
1726              T*      operator+(T*, I);
1727              T&      operator[](T*, I);
1728              T*      operator-(T*, I);
1729              T*      operator+(I, T*);
1730              T&      operator[](I, T*);
1731
1732    15For every T, where T is a pointer to complete object type, there exist
1733      candidate operator functions of the form112)
1734              ptrdiff_t operator-(T, T);
1735
1736    16For every pointer or enumeration type T, there exist candidate operator
1737      functions of the form
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              bool    operator!=(T, T);
1744
1745    17For every pointer to member type T,  there  exist  candidate  operator
1746      functions of the form
1747              bool    operator==(T, T);
1748              bool    operator!=(T, T);  */
1749
1750     case MINUS_EXPR:
1751       if (TYPE_PTROB_P (type1) && TYPE_PTROB_P (type2))
1752         break;
1753       if (TYPE_PTROB_P (type1) && INTEGRAL_TYPE_P (type2))
1754         {
1755           type2 = ptrdiff_type_node;
1756           break;
1757         }
1758     case MULT_EXPR:
1759     case TRUNC_DIV_EXPR:
1760       if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
1761         break;
1762       return;
1763
1764     case EQ_EXPR:
1765     case NE_EXPR:
1766       if ((TYPE_PTRMEMFUNC_P (type1) && TYPE_PTRMEMFUNC_P (type2))
1767           || (TYPE_PTRMEM_P (type1) && TYPE_PTRMEM_P (type2)))
1768         break;
1769       if (TYPE_PTR_TO_MEMBER_P (type1) && null_ptr_cst_p (args[1]))
1770         {
1771           type2 = type1;
1772           break;
1773         }
1774       if (TYPE_PTR_TO_MEMBER_P (type2) && null_ptr_cst_p (args[0]))
1775         {
1776           type1 = type2;
1777           break;
1778         }
1779       /* Fall through.  */
1780     case LT_EXPR:
1781     case GT_EXPR:
1782     case LE_EXPR:
1783     case GE_EXPR:
1784     case MAX_EXPR:
1785     case MIN_EXPR:
1786       if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
1787         break;
1788       if (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
1789         break;
1790       if (TREE_CODE (type1) == ENUMERAL_TYPE && TREE_CODE (type2) == ENUMERAL_TYPE)
1791         break;
1792       if (TYPE_PTR_P (type1) && null_ptr_cst_p (args[1]))
1793         {
1794           type2 = type1;
1795           break;
1796         }
1797       if (null_ptr_cst_p (args[0]) && TYPE_PTR_P (type2))
1798         {
1799           type1 = type2;
1800           break;
1801         }
1802       return;
1803
1804     case PLUS_EXPR:
1805       if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
1806         break;
1807     case ARRAY_REF:
1808       if (INTEGRAL_TYPE_P (type1) && TYPE_PTROB_P (type2))
1809         {
1810           type1 = ptrdiff_type_node;
1811           break;
1812         }
1813       if (TYPE_PTROB_P (type1) && INTEGRAL_TYPE_P (type2))
1814         {
1815           type2 = ptrdiff_type_node;
1816           break;
1817         }
1818       return;
1819
1820 /* 18For  every pair of promoted integral types L and R, there exist candi-
1821      date operator functions of the form
1822              LR      operator%(L, R);
1823              LR      operator&(L, R);
1824              LR      operator^(L, R);
1825              LR      operator|(L, R);
1826              L       operator<<(L, R);
1827              L       operator>>(L, R);
1828      where LR is the result of the  usual  arithmetic  conversions  between
1829      types L and R.  */
1830
1831     case TRUNC_MOD_EXPR:
1832     case BIT_AND_EXPR:
1833     case BIT_IOR_EXPR:
1834     case BIT_XOR_EXPR:
1835     case LSHIFT_EXPR:
1836     case RSHIFT_EXPR:
1837       if (INTEGRAL_TYPE_P (type1) && INTEGRAL_TYPE_P (type2))
1838         break;
1839       return;
1840
1841 /* 19For  every  triple  L, VQ, R), where L is an arithmetic or enumeration
1842      type, VQ is either volatile or empty, and R is a  promoted  arithmetic
1843      type, there exist candidate operator functions of the form
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              VQ L&   operator-=(VQ L&, R);
1849
1850    20For  every  pair T, VQ), where T is any type and VQ is either volatile
1851      or empty, there exist candidate operator functions of the form
1852              T*VQ&   operator=(T*VQ&, T*);
1853
1854    21For every pair T, VQ), where T is a pointer to member type and  VQ  is
1855      either  volatile or empty, there exist candidate operator functions of
1856      the form
1857              VQ T&   operator=(VQ T&, T);
1858
1859    22For every triple  T,  VQ,  I),  where  T  is  a  cv-qualified  or  cv-
1860      unqualified  complete object type, VQ is either volatile or empty, and
1861      I is a promoted integral type, there exist  candidate  operator  func-
1862      tions of the form
1863              T*VQ&   operator+=(T*VQ&, I);
1864              T*VQ&   operator-=(T*VQ&, I);
1865
1866    23For  every  triple  L,  VQ,  R), where L is an integral or enumeration
1867      type, VQ is either volatile or empty, and R  is  a  promoted  integral
1868      type, there exist candidate operator functions of the form
1869
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              VQ L&   operator|=(VQ L&, R);  */
1876
1877     case MODIFY_EXPR:
1878       switch (code2)
1879         {
1880         case PLUS_EXPR:
1881         case MINUS_EXPR:
1882           if (TYPE_PTROB_P (type1) && INTEGRAL_TYPE_P (type2))
1883             {
1884               type2 = ptrdiff_type_node;
1885               break;
1886             }
1887         case MULT_EXPR:
1888         case TRUNC_DIV_EXPR:
1889           if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
1890             break;
1891           return;
1892
1893         case TRUNC_MOD_EXPR:
1894         case BIT_AND_EXPR:
1895         case BIT_IOR_EXPR:
1896         case BIT_XOR_EXPR:
1897         case LSHIFT_EXPR:
1898         case RSHIFT_EXPR:
1899           if (INTEGRAL_TYPE_P (type1) && INTEGRAL_TYPE_P (type2))
1900             break;
1901           return;
1902
1903         case NOP_EXPR:
1904           if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
1905             break;
1906           if ((TYPE_PTRMEMFUNC_P (type1) && TYPE_PTRMEMFUNC_P (type2))
1907               || (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
1908               || (TYPE_PTRMEM_P (type1) && TYPE_PTRMEM_P (type2))
1909               || ((TYPE_PTRMEMFUNC_P (type1)
1910                    || TREE_CODE (type1) == POINTER_TYPE)
1911                   && null_ptr_cst_p (args[1])))
1912             {
1913               type2 = type1;
1914               break;
1915             }
1916           return;
1917
1918         default:
1919           abort ();
1920         }
1921       type1 = build_reference_type (type1);
1922       break;
1923
1924     case COND_EXPR:
1925       /* [over.built]
1926
1927          For every pair of promoted arithmetic types L and R, there
1928          exist candidate operator functions of the form 
1929
1930          LR operator?(bool, L, R); 
1931
1932          where LR is the result of the usual arithmetic conversions
1933          between types L and R.
1934
1935          For every type T, where T is a pointer or pointer-to-member
1936          type, there exist candidate operator functions of the form T
1937          operator?(bool, T, T);  */
1938
1939       if (promoted_arithmetic_type_p (type1)
1940           && promoted_arithmetic_type_p (type2))
1941         /* That's OK.  */
1942         break;
1943
1944       /* Otherwise, the types should be pointers.  */
1945       if (!(TYPE_PTR_P (type1) || TYPE_PTR_TO_MEMBER_P (type1))
1946           || !(TYPE_PTR_P (type2) || TYPE_PTR_TO_MEMBER_P (type2)))
1947         return;
1948       
1949       /* We don't check that the two types are the same; the logic
1950          below will actually create two candidates; one in which both
1951          parameter types are TYPE1, and one in which both parameter
1952          types are TYPE2.  */
1953       break;
1954
1955     default:
1956       abort ();
1957     }
1958
1959   /* If we're dealing with two pointer types or two enumeral types,
1960      we need candidates for both of them.  */
1961   if (type2 && !same_type_p (type1, type2)
1962       && TREE_CODE (type1) == TREE_CODE (type2)
1963       && (TREE_CODE (type1) == REFERENCE_TYPE
1964           || (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
1965           || (TYPE_PTRMEM_P (type1) && TYPE_PTRMEM_P (type2))
1966           || TYPE_PTRMEMFUNC_P (type1)
1967           || IS_AGGR_TYPE (type1)
1968           || TREE_CODE (type1) == ENUMERAL_TYPE))
1969     {
1970       build_builtin_candidate
1971         (candidates, fnname, type1, type1, args, argtypes, flags);
1972       build_builtin_candidate
1973         (candidates, fnname, type2, type2, args, argtypes, flags);
1974       return;
1975     }
1976
1977   build_builtin_candidate
1978     (candidates, fnname, type1, type2, args, argtypes, flags);
1979 }
1980
1981 tree
1982 type_decays_to (tree type)
1983 {
1984   if (TREE_CODE (type) == ARRAY_TYPE)
1985     return build_pointer_type (TREE_TYPE (type));
1986   if (TREE_CODE (type) == FUNCTION_TYPE)
1987     return build_pointer_type (type);
1988   return type;
1989 }
1990
1991 /* There are three conditions of builtin candidates:
1992
1993    1) bool-taking candidates.  These are the same regardless of the input.
1994    2) pointer-pair taking candidates.  These are generated for each type
1995       one of the input types converts to.
1996    3) arithmetic candidates.  According to the standard, we should generate
1997       all of these, but I'm trying not to...
1998    
1999    Here we generate a superset of the possible candidates for this particular
2000    case.  That is a subset of the full set the standard defines, plus some
2001    other cases which the standard disallows. add_builtin_candidate will
2002    filter out the invalid set.  */
2003
2004 static void
2005 add_builtin_candidates (struct z_candidate **candidates, enum tree_code code,
2006                         enum tree_code code2, tree fnname, tree *args,
2007                         int flags)
2008 {
2009   int ref1, i;
2010   int enum_p = 0;
2011   tree type, argtypes[3];
2012   /* TYPES[i] is the set of possible builtin-operator parameter types
2013      we will consider for the Ith argument.  These are represented as
2014      a TREE_LIST; the TREE_VALUE of each node is the potential
2015      parameter type.  */
2016   tree types[2];
2017
2018   for (i = 0; i < 3; ++i)
2019     {
2020       if (args[i])
2021         argtypes[i]  = lvalue_type (args[i]);
2022       else
2023         argtypes[i] = NULL_TREE;
2024     }
2025
2026   switch (code)
2027     {
2028 /* 4 For every pair T, VQ), where T is an arithmetic or  enumeration  type,
2029      and  VQ  is  either  volatile or empty, there exist candidate operator
2030      functions of the form
2031                  VQ T&   operator++(VQ T&);  */
2032
2033     case POSTINCREMENT_EXPR:
2034     case PREINCREMENT_EXPR:
2035     case POSTDECREMENT_EXPR:
2036     case PREDECREMENT_EXPR:
2037     case MODIFY_EXPR:
2038       ref1 = 1;
2039       break;
2040
2041 /* 24There also exist candidate operator functions of the form
2042              bool    operator!(bool);
2043              bool    operator&&(bool, bool);
2044              bool    operator||(bool, bool);  */
2045
2046     case TRUTH_NOT_EXPR:
2047       build_builtin_candidate
2048         (candidates, fnname, boolean_type_node,
2049          NULL_TREE, args, argtypes, flags);
2050       return;
2051
2052     case TRUTH_ORIF_EXPR:
2053     case TRUTH_ANDIF_EXPR:
2054       build_builtin_candidate
2055         (candidates, fnname, boolean_type_node,
2056          boolean_type_node, args, argtypes, flags);
2057       return;
2058
2059     case ADDR_EXPR:
2060     case COMPOUND_EXPR:
2061     case COMPONENT_REF:
2062       return;
2063
2064     case COND_EXPR:
2065     case EQ_EXPR:
2066     case NE_EXPR:
2067     case LT_EXPR:
2068     case LE_EXPR:
2069     case GT_EXPR:
2070     case GE_EXPR:
2071       enum_p = 1;
2072       /* Fall through.  */
2073     
2074     default:
2075       ref1 = 0;
2076     }
2077
2078   types[0] = types[1] = NULL_TREE;
2079
2080   for (i = 0; i < 2; ++i)
2081     {
2082       if (! args[i])
2083         ;
2084       else if (IS_AGGR_TYPE (argtypes[i]))
2085         {
2086           tree convs;
2087
2088           if (i == 0 && code == MODIFY_EXPR && code2 == NOP_EXPR)
2089             return;
2090
2091           convs = lookup_conversions (argtypes[i]);
2092
2093           if (code == COND_EXPR)
2094             {
2095               if (real_lvalue_p (args[i]))
2096                 types[i] = tree_cons
2097                   (NULL_TREE, build_reference_type (argtypes[i]), types[i]);
2098
2099               types[i] = tree_cons
2100                 (NULL_TREE, TYPE_MAIN_VARIANT (argtypes[i]), types[i]);
2101             }
2102
2103           else if (! convs)
2104             return;
2105
2106           for (; convs; convs = TREE_CHAIN (convs))
2107             {
2108               type = TREE_TYPE (TREE_TYPE (OVL_CURRENT (TREE_VALUE (convs))));
2109
2110               if (i == 0 && ref1
2111                   && (TREE_CODE (type) != REFERENCE_TYPE
2112                       || CP_TYPE_CONST_P (TREE_TYPE (type))))
2113                 continue;
2114
2115               if (code == COND_EXPR && TREE_CODE (type) == REFERENCE_TYPE)
2116                 types[i] = tree_cons (NULL_TREE, type, types[i]);
2117
2118               type = non_reference (type);
2119               if (i != 0 || ! ref1)
2120                 {
2121                   type = TYPE_MAIN_VARIANT (type_decays_to (type));
2122                   if (enum_p && TREE_CODE (type) == ENUMERAL_TYPE)
2123                     types[i] = tree_cons (NULL_TREE, type, types[i]);
2124                   if (INTEGRAL_TYPE_P (type))
2125                     type = type_promotes_to (type);
2126                 }
2127
2128               if (! value_member (type, types[i]))
2129                 types[i] = tree_cons (NULL_TREE, type, types[i]);
2130             }
2131         }
2132       else
2133         {
2134           if (code == COND_EXPR && real_lvalue_p (args[i]))
2135             types[i] = tree_cons
2136               (NULL_TREE, build_reference_type (argtypes[i]), types[i]);
2137           type = non_reference (argtypes[i]);
2138           if (i != 0 || ! ref1)
2139             {
2140               type = TYPE_MAIN_VARIANT (type_decays_to (type));
2141               if (enum_p && TREE_CODE (type) == ENUMERAL_TYPE)
2142                 types[i] = tree_cons (NULL_TREE, type, types[i]);
2143               if (INTEGRAL_TYPE_P (type))
2144                 type = type_promotes_to (type);
2145             }
2146           types[i] = tree_cons (NULL_TREE, type, types[i]);
2147         }
2148     }
2149
2150   /* Run through the possible parameter types of both arguments,
2151      creating candidates with those parameter types.  */
2152   for (; types[0]; types[0] = TREE_CHAIN (types[0]))
2153     {
2154       if (types[1])
2155         for (type = types[1]; type; type = TREE_CHAIN (type))
2156           add_builtin_candidate
2157             (candidates, code, code2, fnname, TREE_VALUE (types[0]),
2158              TREE_VALUE (type), args, argtypes, flags);
2159       else
2160         add_builtin_candidate
2161           (candidates, code, code2, fnname, TREE_VALUE (types[0]),
2162            NULL_TREE, args, argtypes, flags);
2163     }
2164
2165   return;
2166 }
2167
2168
2169 /* If TMPL can be successfully instantiated as indicated by
2170    EXPLICIT_TARGS and ARGLIST, adds the instantiation to CANDIDATES.
2171
2172    TMPL is the template.  EXPLICIT_TARGS are any explicit template
2173    arguments.  ARGLIST is the arguments provided at the call-site.
2174    The RETURN_TYPE is the desired type for conversion operators.  If
2175    OBJ is NULL_TREE, FLAGS and CTYPE are as for add_function_candidate.
2176    If an OBJ is supplied, FLAGS and CTYPE are ignored, and OBJ is as for
2177    add_conv_candidate.  */
2178
2179 static struct z_candidate*
2180 add_template_candidate_real (struct z_candidate **candidates, tree tmpl,
2181                              tree ctype, tree explicit_targs, tree arglist,
2182                              tree return_type, tree access_path,
2183                              tree conversion_path, int flags, tree obj,
2184                              unification_kind_t strict)
2185 {
2186   int ntparms = DECL_NTPARMS (tmpl);
2187   tree targs = make_tree_vec (ntparms);
2188   tree args_without_in_chrg = arglist;
2189   struct z_candidate *cand;
2190   int i;
2191   tree fn;
2192
2193   /* We don't do deduction on the in-charge parameter, the VTT
2194      parameter or 'this'.  */
2195   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (tmpl))
2196     args_without_in_chrg = TREE_CHAIN (args_without_in_chrg);
2197
2198   if ((DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (tmpl)
2199        || DECL_BASE_CONSTRUCTOR_P (tmpl))
2200       && TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (tmpl)))
2201     args_without_in_chrg = TREE_CHAIN (args_without_in_chrg);
2202
2203   i = fn_type_unification (tmpl, explicit_targs, targs,
2204                            args_without_in_chrg,
2205                            return_type, strict, -1);
2206
2207   if (i != 0)
2208     return NULL;
2209
2210   fn = instantiate_template (tmpl, targs, tf_none);
2211   if (fn == error_mark_node)
2212     return NULL;
2213
2214   /* In [class.copy]:
2215
2216        A member function template is never instantiated to perform the
2217        copy of a class object to an object of its class type.  
2218
2219      It's a little unclear what this means; the standard explicitly
2220      does allow a template to be used to copy a class.  For example,
2221      in:
2222
2223        struct A {
2224          A(A&);
2225          template <class T> A(const T&);
2226        };
2227        const A f ();
2228        void g () { A a (f ()); }
2229        
2230      the member template will be used to make the copy.  The section
2231      quoted above appears in the paragraph that forbids constructors
2232      whose only parameter is (a possibly cv-qualified variant of) the
2233      class type, and a logical interpretation is that the intent was
2234      to forbid the instantiation of member templates which would then
2235      have that form.  */
2236   if (DECL_CONSTRUCTOR_P (fn) && list_length (arglist) == 2) 
2237     {
2238       tree arg_types = FUNCTION_FIRST_USER_PARMTYPE (fn);
2239       if (arg_types && same_type_p (TYPE_MAIN_VARIANT (TREE_VALUE (arg_types)),
2240                                     ctype))
2241         return NULL;
2242     }
2243
2244   if (obj != NULL_TREE)
2245     /* Aha, this is a conversion function.  */
2246     cand = add_conv_candidate (candidates, fn, obj, access_path,
2247                                conversion_path, arglist);
2248   else
2249     cand = add_function_candidate (candidates, fn, ctype,
2250                                    arglist, access_path, 
2251                                    conversion_path, flags);
2252   if (DECL_TI_TEMPLATE (fn) != tmpl)
2253     /* This situation can occur if a member template of a template
2254        class is specialized.  Then, instantiate_template might return
2255        an instantiation of the specialization, in which case the
2256        DECL_TI_TEMPLATE field will point at the original
2257        specialization.  For example:
2258
2259          template <class T> struct S { template <class U> void f(U);
2260                                        template <> void f(int) {}; };
2261          S<double> sd;
2262          sd.f(3);
2263
2264        Here, TMPL will be template <class U> S<double>::f(U).
2265        And, instantiate template will give us the specialization
2266        template <> S<double>::f(int).  But, the DECL_TI_TEMPLATE field
2267        for this will point at template <class T> template <> S<T>::f(int),
2268        so that we can find the definition.  For the purposes of
2269        overload resolution, however, we want the original TMPL.  */
2270     cand->template_decl = tree_cons (tmpl, targs, NULL_TREE);
2271   else
2272     cand->template_decl = DECL_TEMPLATE_INFO (fn);
2273
2274   return cand;
2275 }
2276
2277
2278 static struct z_candidate *
2279 add_template_candidate (struct z_candidate **candidates, tree tmpl, tree ctype,
2280                         tree explicit_targs, tree arglist, tree return_type,
2281                         tree access_path, tree conversion_path, int flags,
2282                         unification_kind_t strict)
2283 {
2284   return 
2285     add_template_candidate_real (candidates, tmpl, ctype,
2286                                  explicit_targs, arglist, return_type, 
2287                                  access_path, conversion_path,
2288                                  flags, NULL_TREE, strict);
2289 }
2290
2291
2292 static struct z_candidate *
2293 add_template_conv_candidate (struct z_candidate **candidates, tree tmpl,
2294                              tree obj, tree arglist, tree return_type,
2295                              tree access_path, tree conversion_path)
2296 {
2297   return 
2298     add_template_candidate_real (candidates, tmpl, NULL_TREE, NULL_TREE,
2299                                  arglist, return_type, access_path,
2300                                  conversion_path, 0, obj, DEDUCE_CONV);
2301 }
2302
2303 /* The CANDS are the set of candidates that were considered for
2304    overload resolution.  Return the set of viable candidates.  If none
2305    of the candidates were viable, set *ANY_VIABLE_P to true.  STRICT_P
2306    is true if a candidate should be considered viable only if it is
2307    strictly viable.  */
2308
2309 static struct z_candidate*
2310 splice_viable (struct z_candidate *cands,
2311                bool strict_p,
2312                bool *any_viable_p)
2313 {
2314   struct z_candidate *viable;
2315   struct z_candidate **last_viable;
2316   struct z_candidate **cand;
2317
2318   viable = NULL;
2319   last_viable = &viable;
2320   *any_viable_p = false;
2321
2322   cand = &cands; 
2323   while (*cand) 
2324     {
2325       struct z_candidate *c = *cand;
2326       if (strict_p ? c->viable == 1 : c->viable)
2327         {
2328           *last_viable = c;
2329           *cand = c->next;
2330           c->next = NULL;
2331           last_viable = &c->next;
2332           *any_viable_p = true;
2333         }
2334       else
2335         cand = &c->next;
2336     }
2337
2338   return viable ? viable : cands;
2339 }
2340
2341 static bool
2342 any_strictly_viable (struct z_candidate *cands)
2343 {
2344   for (; cands; cands = cands->next)
2345     if (cands->viable == 1)
2346       return true;
2347   return false;
2348 }
2349
2350 static tree
2351 build_this (tree obj)
2352 {
2353   /* Fix this to work on non-lvalues.  */
2354   return build_unary_op (ADDR_EXPR, obj, 0);
2355 }
2356
2357 /* Returns true iff functions are equivalent. Equivalent functions are
2358    not '==' only if one is a function-local extern function or if
2359    both are extern "C".  */
2360
2361 static inline int
2362 equal_functions (tree fn1, tree fn2)
2363 {
2364   if (DECL_LOCAL_FUNCTION_P (fn1) || DECL_LOCAL_FUNCTION_P (fn2)
2365       || DECL_EXTERN_C_FUNCTION_P (fn1))
2366     return decls_match (fn1, fn2);
2367   return fn1 == fn2;
2368 }
2369
2370 /* Print information about one overload candidate CANDIDATE.  MSGSTR
2371    is the text to print before the candidate itself.
2372
2373    NOTE: Unlike most diagnostic functions in GCC, MSGSTR is expected
2374    to have been run through gettext by the caller.  This wart makes
2375    life simpler in print_z_candidates and for the translators.  */
2376
2377 static void
2378 print_z_candidate (const char *msgstr, struct z_candidate *candidate)
2379 {
2380   if (TREE_CODE (candidate->fn) == IDENTIFIER_NODE)
2381     {
2382       if (candidate->num_convs == 3)
2383         inform ("%s %D(%T, %T, %T) <built-in>", msgstr, candidate->fn,
2384                 candidate->convs[0]->type,
2385                 candidate->convs[1]->type,
2386                 candidate->convs[2]->type);
2387       else if (candidate->num_convs == 2)
2388         inform ("%s %D(%T, %T) <built-in>", msgstr, candidate->fn,
2389                 candidate->convs[0]->type,
2390                 candidate->convs[1]->type);
2391       else
2392         inform ("%s %D(%T) <built-in>", msgstr, candidate->fn,
2393                 candidate->convs[0]->type);
2394     }
2395   else if (TYPE_P (candidate->fn))
2396     inform ("%s %T <conversion>", msgstr, candidate->fn);
2397   else if (candidate->viable == -1)
2398     inform ("%J%s %+#D <near match>", candidate->fn, msgstr, candidate->fn);
2399   else
2400     inform ("%J%s %+#D", candidate->fn, msgstr, candidate->fn);
2401 }
2402
2403 static void
2404 print_z_candidates (struct z_candidate *candidates)
2405 {
2406   const char *str;
2407   struct z_candidate *cand1;
2408   struct z_candidate **cand2;
2409
2410   /* There may be duplicates in the set of candidates.  We put off
2411      checking this condition as long as possible, since we have no way
2412      to eliminate duplicates from a set of functions in less than n^2
2413      time.  Now we are about to emit an error message, so it is more
2414      permissible to go slowly.  */
2415   for (cand1 = candidates; cand1; cand1 = cand1->next)
2416     {
2417       tree fn = cand1->fn;
2418       /* Skip builtin candidates and conversion functions.  */
2419       if (TREE_CODE (fn) != FUNCTION_DECL)
2420         continue;
2421       cand2 = &cand1->next;
2422       while (*cand2)
2423         {
2424           if (TREE_CODE ((*cand2)->fn) == FUNCTION_DECL
2425               && equal_functions (fn, (*cand2)->fn))
2426             *cand2 = (*cand2)->next;
2427           else
2428             cand2 = &(*cand2)->next;
2429         }
2430     }
2431
2432   if (!candidates)
2433     return;
2434
2435   str = _("candidates are:");
2436   print_z_candidate (str, candidates);
2437   if (candidates->next)
2438     {
2439       /* Indent successive candidates by the width of the translation
2440          of the above string.  */
2441       size_t len = gcc_gettext_width (str) + 1;
2442       char *spaces = alloca (len);
2443       memset (spaces, ' ', len-1);
2444       spaces[len - 1] = '\0';
2445
2446       candidates = candidates->next;
2447       do
2448         {
2449           print_z_candidate (spaces, candidates);
2450           candidates = candidates->next;
2451         }
2452       while (candidates);
2453     }
2454 }
2455
2456 /* USER_SEQ is a user-defined conversion sequence, beginning with a
2457    USER_CONV.  STD_SEQ is the standard conversion sequence applied to
2458    the result of the conversion function to convert it to the final
2459    desired type.  Merge the the two sequences into a single sequence,
2460    and return the merged sequence.  */
2461
2462 static conversion *
2463 merge_conversion_sequences (conversion *user_seq, conversion *std_seq)
2464 {
2465   conversion **t;
2466
2467   my_friendly_assert (user_seq->kind == ck_user, 20030306);
2468
2469   /* Find the end of the second conversion sequence.  */
2470   t = &(std_seq); 
2471   while ((*t)->kind != ck_identity)
2472     t = &((*t)->u.next);
2473
2474   /* Replace the identity conversion with the user conversion
2475      sequence.  */
2476   *t = user_seq;
2477
2478   /* The entire sequence is a user-conversion sequence.  */
2479   std_seq->user_conv_p = true;
2480
2481   return std_seq;
2482 }
2483
2484 /* Returns the best overload candidate to perform the requested
2485    conversion.  This function is used for three the overloading situations
2486    described in [over.match.copy], [over.match.conv], and [over.match.ref].
2487    If TOTYPE is a REFERENCE_TYPE, we're trying to find an lvalue binding as
2488    per [dcl.init.ref], so we ignore temporary bindings.  */
2489
2490 static struct z_candidate *
2491 build_user_type_conversion_1 (tree totype, tree expr, int flags)
2492 {
2493   struct z_candidate *candidates, *cand;
2494   tree fromtype = TREE_TYPE (expr);
2495   tree ctors = NULL_TREE;
2496   tree conv_fns = NULL_TREE;
2497   conversion *conv = NULL;
2498   tree args = NULL_TREE;
2499   bool any_viable_p;
2500
2501   /* We represent conversion within a hierarchy using RVALUE_CONV and
2502      BASE_CONV, as specified by [over.best.ics]; these become plain
2503      constructor calls, as specified in [dcl.init].  */
2504   my_friendly_assert (!IS_AGGR_TYPE (fromtype) || !IS_AGGR_TYPE (totype)
2505                       || !DERIVED_FROM_P (totype, fromtype), 20011226);
2506
2507   if (IS_AGGR_TYPE (totype))
2508     ctors = lookup_fnfields (totype, complete_ctor_identifier, 0);
2509
2510   if (IS_AGGR_TYPE (fromtype))
2511     conv_fns = lookup_conversions (fromtype);
2512
2513   candidates = 0;
2514   flags |= LOOKUP_NO_CONVERSION;
2515
2516   if (ctors)
2517     {
2518       tree t;
2519
2520       ctors = BASELINK_FUNCTIONS (ctors);
2521
2522       t = build_int_cst (build_pointer_type (totype), 0, 0);
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 (build3 (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_cst (build_pointer_type (DECL_CONTEXT (convfn)),
4184                                     0, 0);
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 = build2 (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 = build2 (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 = build3 (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 = build2 (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 = build2 (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_cst (NULL_TREE, 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 build3 (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_cst (build_pointer_type (class_type), 0, 0);
5039       instance = build1 (INDIRECT_REF, class_type, instance);
5040     }
5041   else
5042     {
5043       if (name == complete_dtor_identifier 
5044           || name == base_dtor_identifier
5045           || name == deleting_dtor_identifier)
5046         my_friendly_assert (args == NULL_TREE, 20020712);
5047
5048       /* Convert to the base class, if necessary.  */
5049       if (!same_type_ignoring_top_level_qualifiers_p 
5050           (TREE_TYPE (instance), BINFO_TYPE (binfo)))
5051         {
5052           if (name != ansi_assopname (NOP_EXPR))
5053             /* For constructors and destructors, either the base is
5054                non-virtual, or it is virtual but we are doing the
5055                conversion from a constructor or destructor for the
5056                complete object.  In either case, we can convert
5057                statically.  */
5058             instance = convert_to_base_statically (instance, binfo);
5059           else
5060             /* However, for assignment operators, we must convert
5061                dynamically if the base is virtual.  */
5062             instance = build_base_path (PLUS_EXPR, instance,
5063                                         binfo, /*nonnull=*/1);
5064         }
5065     }
5066   
5067   my_friendly_assert (instance != NULL_TREE, 20020712);
5068
5069   fns = lookup_fnfields (binfo, name, 1);
5070     
5071   /* When making a call to a constructor or destructor for a subobject
5072      that uses virtual base classes, pass down a pointer to a VTT for
5073      the subobject.  */
5074   if ((name == base_ctor_identifier
5075        || name == base_dtor_identifier)
5076       && TYPE_USES_VIRTUAL_BASECLASSES (class_type))
5077     {
5078       tree vtt;
5079       tree sub_vtt;
5080
5081       /* If the current function is a complete object constructor
5082          or destructor, then we fetch the VTT directly.
5083          Otherwise, we look it up using the VTT we were given.  */
5084       vtt = TREE_CHAIN (CLASSTYPE_VTABLES (current_class_type));
5085       vtt = decay_conversion (vtt);
5086       vtt = build3 (COND_EXPR, TREE_TYPE (vtt),
5087                     build2 (EQ_EXPR, boolean_type_node,
5088                             current_in_charge_parm, integer_zero_node),
5089                     current_vtt_parm,
5090                     vtt);
5091       my_friendly_assert (BINFO_SUBVTT_INDEX (binfo), 20010110);
5092       sub_vtt = build2 (PLUS_EXPR, TREE_TYPE (vtt), vtt,
5093                         BINFO_SUBVTT_INDEX (binfo));
5094
5095       args = tree_cons (NULL_TREE, sub_vtt, args);
5096     }
5097
5098   return build_new_method_call (instance, fns, args, 
5099                                 TYPE_BINFO (BINFO_TYPE (binfo)), 
5100                                 flags);
5101 }
5102
5103 /* Return the NAME, as a C string.  The NAME indicates a function that
5104    is a member of TYPE.  *FREE_P is set to true if the caller must
5105    free the memory returned.  
5106
5107    Rather than go through all of this, we should simply set the names
5108    of constructors and destructors appropriately, and dispense with
5109    ctor_identifier, dtor_identifier, etc.  */
5110
5111 static char *
5112 name_as_c_string (tree name, tree type, bool *free_p)
5113 {
5114   char *pretty_name;
5115
5116   /* Assume that we will not allocate memory.  */
5117   *free_p = false;
5118   /* Constructors and destructors are special.  */
5119   if (IDENTIFIER_CTOR_OR_DTOR_P (name))
5120     {
5121       pretty_name 
5122         = (char *) IDENTIFIER_POINTER (constructor_name (type));
5123       /* For a destructor, add the '~'.  */
5124       if (name == complete_dtor_identifier
5125           || name == base_dtor_identifier
5126           || name == deleting_dtor_identifier)
5127         {
5128           pretty_name = concat ("~", pretty_name, NULL);
5129           /* Remember that we need to free the memory allocated.  */
5130           *free_p = true;
5131         }
5132     }
5133   else if (IDENTIFIER_TYPENAME_P (name))
5134     {
5135       pretty_name = concat ("operator ",
5136                             type_as_string (TREE_TYPE (name),
5137                                             TFF_PLAIN_IDENTIFIER),
5138                             NULL);
5139       /* Remember that we need to free the memory allocated.  */
5140       *free_p = true;
5141     }
5142   else
5143     pretty_name = (char *) IDENTIFIER_POINTER (name);
5144
5145   return pretty_name;
5146 }
5147
5148 /* Build a call to "INSTANCE.FN (ARGS)".  */
5149
5150 tree
5151 build_new_method_call (tree instance, tree fns, tree args, 
5152                        tree conversion_path, int flags)
5153 {
5154   struct z_candidate *candidates = 0, *cand;
5155   tree explicit_targs = NULL_TREE;
5156   tree basetype = NULL_TREE;
5157   tree access_binfo;
5158   tree optype;
5159   tree mem_args = NULL_TREE, instance_ptr;
5160   tree name;
5161   tree user_args;
5162   tree call;
5163   tree fn;
5164   tree class_type;
5165   int template_only = 0;
5166   bool any_viable_p;
5167   tree orig_instance;
5168   tree orig_fns;
5169   tree orig_args;
5170   void *p;
5171
5172   my_friendly_assert (instance != NULL_TREE, 20020729);
5173
5174   if (error_operand_p (instance) 
5175       || error_operand_p (fns)
5176       || args == error_mark_node)
5177     return error_mark_node;
5178
5179   orig_instance = instance;
5180   orig_fns = fns;
5181   orig_args = args;
5182
5183   if (processing_template_decl)
5184     {
5185       instance = build_non_dependent_expr (instance);
5186       if (!BASELINK_P (fns)
5187           && TREE_CODE (fns) != PSEUDO_DTOR_EXPR
5188           && TREE_TYPE (fns) != unknown_type_node)
5189         fns = build_non_dependent_expr (fns);
5190       args = build_non_dependent_args (orig_args);
5191     }
5192
5193   /* Process the argument list.  */
5194   user_args = args;
5195   args = resolve_args (args);
5196   if (args == error_mark_node)
5197     return error_mark_node;
5198
5199   if (TREE_CODE (TREE_TYPE (instance)) == REFERENCE_TYPE)
5200     instance = convert_from_reference (instance);
5201   basetype = TYPE_MAIN_VARIANT (TREE_TYPE (instance));
5202   instance_ptr = build_this (instance);
5203
5204   if (!BASELINK_P (fns))
5205     {
5206       error ("call to non-function `%D'", fns);
5207       return error_mark_node;
5208     }
5209
5210   if (!conversion_path)
5211     conversion_path = BASELINK_BINFO (fns);
5212   access_binfo = BASELINK_ACCESS_BINFO (fns);
5213   optype = BASELINK_OPTYPE (fns);
5214   fns = BASELINK_FUNCTIONS (fns);
5215
5216   if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
5217     {
5218       explicit_targs = TREE_OPERAND (fns, 1);
5219       fns = TREE_OPERAND (fns, 0);
5220       template_only = 1;
5221     }
5222
5223   my_friendly_assert (TREE_CODE (fns) == FUNCTION_DECL
5224                       || TREE_CODE (fns) == TEMPLATE_DECL
5225                       || TREE_CODE (fns) == OVERLOAD,
5226                       20020712);
5227
5228   /* XXX this should be handled before we get here.  */
5229   if (! IS_AGGR_TYPE (basetype))
5230     {
5231       if ((flags & LOOKUP_COMPLAIN) && basetype != error_mark_node)
5232         error ("request for member `%D' in `%E', which is of non-aggregate type `%T'",
5233                fns, instance, basetype);
5234
5235       return error_mark_node;
5236     }
5237
5238   fn = get_first_fn (fns);
5239   name = DECL_NAME (fn);
5240
5241   if (IDENTIFIER_CTOR_OR_DTOR_P (name))
5242     {
5243       /* Callers should explicitly indicate whether they want to construct
5244          the complete object or just the part without virtual bases.  */
5245       my_friendly_assert (name != ctor_identifier, 20000408);
5246       /* Similarly for destructors.  */
5247       my_friendly_assert (name != dtor_identifier, 20000408);
5248     }
5249
5250   /* It's OK to call destructors on cv-qualified objects.  Therefore,
5251      convert the INSTANCE_PTR to the unqualified type, if necessary.  */
5252   if (DECL_DESTRUCTOR_P (fn))
5253     {
5254       tree type = build_pointer_type (basetype);
5255       if (!same_type_p (type, TREE_TYPE (instance_ptr)))
5256         instance_ptr = build_nop (type, instance_ptr);
5257     }
5258
5259   class_type = (conversion_path ? BINFO_TYPE (conversion_path) : NULL_TREE);
5260   mem_args = tree_cons (NULL_TREE, instance_ptr, args);
5261
5262   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
5263   p = conversion_obstack_alloc (0);
5264
5265   for (fn = fns; fn; fn = OVL_NEXT (fn))
5266     {
5267       tree t = OVL_CURRENT (fn);
5268       tree this_arglist;
5269
5270       /* We can end up here for copy-init of same or base class.  */
5271       if ((flags & LOOKUP_ONLYCONVERTING)
5272           && DECL_NONCONVERTING_P (t))
5273         continue;
5274
5275       if (DECL_NONSTATIC_MEMBER_FUNCTION_P (t))
5276         this_arglist = mem_args;
5277       else
5278         this_arglist = args;
5279
5280       if (TREE_CODE (t) == TEMPLATE_DECL)
5281         /* A member template.  */
5282         add_template_candidate (&candidates, t, 
5283                                 class_type,
5284                                 explicit_targs,
5285                                 this_arglist, optype,
5286                                 access_binfo, 
5287                                 conversion_path,
5288                                 flags,
5289                                 DEDUCE_CALL);
5290       else if (! template_only)
5291         add_function_candidate (&candidates, t, 
5292                                 class_type,
5293                                 this_arglist,
5294                                 access_binfo,
5295                                 conversion_path,
5296                                 flags);
5297     }
5298
5299   candidates = splice_viable (candidates, pedantic, &any_viable_p);
5300   if (!any_viable_p)
5301     {
5302       if (!COMPLETE_TYPE_P (basetype))
5303         cxx_incomplete_type_error (instance_ptr, basetype);
5304       else
5305         {
5306           char *pretty_name;
5307           bool free_p;
5308
5309           pretty_name = name_as_c_string (name, basetype, &free_p);
5310           error ("no matching function for call to `%T::%s(%A)%#V'",
5311                  basetype, pretty_name, user_args,
5312                  TREE_TYPE (TREE_TYPE (instance_ptr)));
5313           if (free_p)
5314             free (pretty_name);
5315         }
5316       print_z_candidates (candidates);
5317       call = error_mark_node;
5318     }
5319   else
5320     {
5321       cand = tourney (candidates);
5322       if (cand == 0)
5323         {
5324           char *pretty_name;
5325           bool free_p;
5326
5327           pretty_name = name_as_c_string (name, basetype, &free_p);
5328           error ("call of overloaded `%s(%A)' is ambiguous", pretty_name,
5329                  user_args);
5330           print_z_candidates (candidates);
5331           if (free_p)
5332             free (pretty_name);
5333           call = error_mark_node;
5334         }
5335       else
5336         {
5337           if (DECL_PURE_VIRTUAL_P (cand->fn)
5338               && instance == current_class_ref
5339               && (DECL_CONSTRUCTOR_P (current_function_decl)
5340                   || DECL_DESTRUCTOR_P (current_function_decl))
5341               && ! (flags & LOOKUP_NONVIRTUAL)
5342               && value_member (cand->fn, CLASSTYPE_PURE_VIRTUALS (basetype)))
5343             error ((DECL_CONSTRUCTOR_P (current_function_decl) ? 
5344                     "abstract virtual `%#D' called from constructor"
5345                     : "abstract virtual `%#D' called from destructor"),
5346                    cand->fn);
5347           if (TREE_CODE (TREE_TYPE (cand->fn)) == METHOD_TYPE
5348               && is_dummy_object (instance_ptr))
5349             {
5350               error ("cannot call member function `%D' without object", 
5351                      cand->fn);
5352               call = error_mark_node;
5353             }
5354           else
5355             {
5356               if (DECL_VINDEX (cand->fn) && ! (flags & LOOKUP_NONVIRTUAL)
5357                   && resolves_to_fixed_type_p (instance, 0))
5358                 flags |= LOOKUP_NONVIRTUAL;
5359
5360               call = build_over_call (cand, flags);
5361
5362               /* In an expression of the form `a->f()' where `f' turns
5363                  out to be a static member function, `a' is
5364                  none-the-less evaluated.  */
5365               if (TREE_CODE (TREE_TYPE (cand->fn)) != METHOD_TYPE
5366                   && !is_dummy_object (instance_ptr) 
5367                   && TREE_SIDE_EFFECTS (instance))
5368                 call = build2 (COMPOUND_EXPR, TREE_TYPE (call), 
5369                                instance, call);
5370             }
5371         }
5372     }
5373
5374   if (processing_template_decl && call != error_mark_node)
5375     call = (build_min_non_dep
5376             (CALL_EXPR, call,
5377              build_min_nt (COMPONENT_REF, orig_instance, orig_fns, NULL_TREE),
5378              orig_args, NULL_TREE));
5379
5380  /* Free all the conversions we allocated.  */
5381   obstack_free (&conversion_obstack, p);
5382
5383   return call;
5384 }
5385
5386 /* Returns true iff standard conversion sequence ICS1 is a proper
5387    subsequence of ICS2.  */
5388
5389 static bool
5390 is_subseq (conversion *ics1, conversion *ics2)
5391 {
5392   /* We can assume that a conversion of the same code
5393      between the same types indicates a subsequence since we only get
5394      here if the types we are converting from are the same.  */
5395
5396   while (ics1->kind == ck_rvalue
5397          || ics1->kind == ck_lvalue)
5398     ics1 = ics1->u.next;
5399
5400   while (1)
5401     {
5402       while (ics2->kind == ck_rvalue
5403              || ics2->kind == ck_lvalue)
5404         ics2 = ics2->u.next;
5405
5406       if (ics2->kind == ck_user
5407           || ics2->kind == ck_ambig
5408           || ics2->kind == ck_identity)
5409         /* At this point, ICS1 cannot be a proper subsequence of
5410            ICS2.  We can get a USER_CONV when we are comparing the
5411            second standard conversion sequence of two user conversion
5412            sequences.  */
5413         return false;
5414
5415       ics2 = ics2->u.next;
5416
5417       if (ics2->kind == ics1->kind
5418           && same_type_p (ics2->type, ics1->type)
5419           && same_type_p (ics2->u.next->type, 
5420                           ics1->u.next->type))
5421         return true;
5422     }
5423 }
5424
5425 /* Returns nonzero iff DERIVED is derived from BASE.  The inputs may
5426    be any _TYPE nodes.  */
5427
5428 bool
5429 is_properly_derived_from (tree derived, tree base)
5430 {
5431   if (!IS_AGGR_TYPE_CODE (TREE_CODE (derived))
5432       || !IS_AGGR_TYPE_CODE (TREE_CODE (base)))
5433     return false;
5434
5435   /* We only allow proper derivation here.  The DERIVED_FROM_P macro
5436      considers every class derived from itself.  */
5437   return (!same_type_ignoring_top_level_qualifiers_p (derived, base)
5438           && DERIVED_FROM_P (base, derived));
5439 }
5440
5441 /* We build the ICS for an implicit object parameter as a pointer
5442    conversion sequence.  However, such a sequence should be compared
5443    as if it were a reference conversion sequence.  If ICS is the
5444    implicit conversion sequence for an implicit object parameter,
5445    modify it accordingly.  */
5446
5447 static void
5448 maybe_handle_implicit_object (conversion **ics)
5449 {
5450   if ((*ics)->this_p)
5451     {
5452       /* [over.match.funcs]
5453          
5454          For non-static member functions, the type of the
5455          implicit object parameter is "reference to cv X"
5456          where X is the class of which the function is a
5457          member and cv is the cv-qualification on the member
5458          function declaration.  */
5459       conversion *t = *ics;
5460       tree reference_type;
5461
5462       /* The `this' parameter is a pointer to a class type.  Make the
5463          implicit conversion talk about a reference to that same class
5464          type.  */
5465       reference_type = TREE_TYPE (t->type);
5466       reference_type = build_reference_type (reference_type);
5467
5468       if (t->kind == ck_qual)
5469         t = t->u.next;
5470       if (t->kind == ck_ptr)
5471         t = t->u.next;
5472       t = build_identity_conv (TREE_TYPE (t->type), NULL_TREE);
5473       t = direct_reference_binding (reference_type, t); 
5474       *ics = t;
5475     }
5476 }
5477
5478 /* If *ICS is a REF_BIND set *ICS to the remainder of the conversion,
5479    and return the type to which the reference refers.  Otherwise,
5480    leave *ICS unchanged and return NULL_TREE.  */
5481
5482 static tree
5483 maybe_handle_ref_bind (conversion **ics)
5484 {
5485   if ((*ics)->kind == ck_ref_bind)
5486     {
5487       conversion *old_ics = *ics;
5488       tree type = TREE_TYPE (old_ics->type);
5489       *ics = old_ics->u.next;
5490       (*ics)->user_conv_p = old_ics->user_conv_p;
5491       (*ics)->bad_p = old_ics->bad_p;
5492       return type;
5493     }
5494
5495   return NULL_TREE;
5496 }
5497
5498 /* Compare two implicit conversion sequences according to the rules set out in
5499    [over.ics.rank].  Return values:
5500
5501       1: ics1 is better than ics2
5502      -1: ics2 is better than ics1
5503       0: ics1 and ics2 are indistinguishable */
5504
5505 static int
5506 compare_ics (conversion *ics1, conversion *ics2)
5507 {
5508   tree from_type1;
5509   tree from_type2;
5510   tree to_type1;
5511   tree to_type2;
5512   tree deref_from_type1 = NULL_TREE;
5513   tree deref_from_type2 = NULL_TREE;
5514   tree deref_to_type1 = NULL_TREE;
5515   tree deref_to_type2 = NULL_TREE;
5516   conversion_rank rank1, rank2;
5517
5518   /* REF_BINDING is nonzero if the result of the conversion sequence
5519      is a reference type.   In that case TARGET_TYPE is the
5520      type referred to by the reference.  */
5521   tree target_type1;
5522   tree target_type2;
5523
5524   /* Handle implicit object parameters.  */
5525   maybe_handle_implicit_object (&ics1);
5526   maybe_handle_implicit_object (&ics2);
5527
5528   /* Handle reference parameters.  */
5529   target_type1 = maybe_handle_ref_bind (&ics1);
5530   target_type2 = maybe_handle_ref_bind (&ics2);
5531
5532   /* [over.ics.rank]
5533
5534      When  comparing  the  basic forms of implicit conversion sequences (as
5535      defined in _over.best.ics_)
5536
5537      --a standard conversion sequence (_over.ics.scs_) is a better
5538        conversion sequence than a user-defined conversion sequence
5539        or an ellipsis conversion sequence, and
5540      
5541      --a user-defined conversion sequence (_over.ics.user_) is a
5542        better conversion sequence than an ellipsis conversion sequence
5543        (_over.ics.ellipsis_).  */
5544   rank1 = CONVERSION_RANK (ics1);
5545   rank2 = CONVERSION_RANK (ics2);
5546   
5547   if (rank1 > rank2)
5548     return -1;
5549   else if (rank1 < rank2)
5550     return 1;
5551
5552   if (rank1 == cr_bad)
5553     {
5554       /* XXX Isn't this an extension? */
5555       /* Both ICS are bad.  We try to make a decision based on what
5556          would have happened if they'd been good.  */
5557       if (ics1->user_conv_p > ics2->user_conv_p
5558           || ics1->rank  > ics2->rank)
5559         return -1;
5560       else if (ics1->user_conv_p < ics2->user_conv_p
5561                || ics1->rank < ics2->rank)
5562         return 1;
5563
5564       /* We couldn't make up our minds; try to figure it out below.  */
5565     }
5566
5567   if (ics1->ellipsis_p)
5568     /* Both conversions are ellipsis conversions.  */
5569     return 0;
5570
5571   /* User-defined  conversion sequence U1 is a better conversion sequence
5572      than another user-defined conversion sequence U2 if they contain the
5573      same user-defined conversion operator or constructor and if the sec-
5574      ond standard conversion sequence of U1 is  better  than  the  second
5575      standard conversion sequence of U2.  */
5576
5577   if (ics1->user_conv_p)
5578     {
5579       conversion *t1;
5580       conversion *t2;
5581
5582       for (t1 = ics1; t1->kind != ck_user; t1 = t1->u.next)
5583         if (t1->kind == ck_ambig)
5584           return 0;
5585       for (t2 = ics2; t2->kind != ck_user; t2 = t2->u.next)
5586         if (t2->kind == ck_ambig)
5587           return 0;
5588
5589       if (t1->cand->fn != t2->cand->fn)
5590         return 0;
5591
5592       /* We can just fall through here, after setting up
5593          FROM_TYPE1 and FROM_TYPE2.  */
5594       from_type1 = t1->type;
5595       from_type2 = t2->type;
5596     }
5597   else
5598     {
5599       conversion *t1;
5600       conversion *t2;
5601
5602       /* We're dealing with two standard conversion sequences. 
5603
5604          [over.ics.rank]
5605          
5606          Standard conversion sequence S1 is a better conversion
5607          sequence than standard conversion sequence S2 if
5608      
5609          --S1 is a proper subsequence of S2 (comparing the conversion
5610            sequences in the canonical form defined by _over.ics.scs_,
5611            excluding any Lvalue Transformation; the identity
5612            conversion sequence is considered to be a subsequence of
5613            any non-identity conversion sequence */
5614       
5615       t1 = ics1;
5616       while (t1->kind != ck_identity)
5617         t1 = t1->u.next;
5618       from_type1 = t1->type;
5619       
5620       t2 = ics2;
5621       while (t2->kind != ck_identity)
5622         t2 = t2->u.next;
5623       from_type2 = t2->type;
5624     }
5625
5626   if (same_type_p (from_type1, from_type2))
5627     {
5628       if (is_subseq (ics1, ics2))
5629         return 1;
5630       if (is_subseq (ics2, ics1))
5631         return -1;
5632     }
5633   /* Otherwise, one sequence cannot be a subsequence of the other; they
5634      don't start with the same type.  This can happen when comparing the
5635      second standard conversion sequence in two user-defined conversion
5636      sequences.  */
5637
5638   /* [over.ics.rank]
5639
5640      Or, if not that,
5641
5642      --the rank of S1 is better than the rank of S2 (by the rules
5643        defined below):
5644
5645     Standard conversion sequences are ordered by their ranks: an Exact
5646     Match is a better conversion than a Promotion, which is a better
5647     conversion than a Conversion.
5648
5649     Two conversion sequences with the same rank are indistinguishable
5650     unless one of the following rules applies:
5651
5652     --A conversion that is not a conversion of a pointer, or pointer
5653       to member, to bool is better than another conversion that is such
5654       a conversion.  
5655
5656     The ICS_STD_RANK automatically handles the pointer-to-bool rule,
5657     so that we do not have to check it explicitly.  */
5658   if (ics1->rank < ics2->rank)
5659     return 1;
5660   else if (ics2->rank < ics1->rank)
5661     return -1;
5662
5663   to_type1 = ics1->type;
5664   to_type2 = ics2->type;
5665
5666   if (TYPE_PTR_P (from_type1)
5667       && TYPE_PTR_P (from_type2)
5668       && TYPE_PTR_P (to_type1)
5669       && TYPE_PTR_P (to_type2))
5670     {
5671       deref_from_type1 = TREE_TYPE (from_type1);
5672       deref_from_type2 = TREE_TYPE (from_type2);
5673       deref_to_type1 = TREE_TYPE (to_type1);
5674       deref_to_type2 = TREE_TYPE (to_type2);
5675     }
5676   /* The rules for pointers to members A::* are just like the rules
5677      for pointers A*, except opposite: if B is derived from A then
5678      A::* converts to B::*, not vice versa.  For that reason, we
5679      switch the from_ and to_ variables here.  */
5680   else if ((TYPE_PTRMEM_P (from_type1) && TYPE_PTRMEM_P (from_type2)
5681             && TYPE_PTRMEM_P (to_type1) && TYPE_PTRMEM_P (to_type2))
5682            || (TYPE_PTRMEMFUNC_P (from_type1)
5683                && TYPE_PTRMEMFUNC_P (from_type2)
5684                && TYPE_PTRMEMFUNC_P (to_type1)
5685                && TYPE_PTRMEMFUNC_P (to_type2)))
5686     {
5687       deref_to_type1 = TYPE_PTRMEM_CLASS_TYPE (from_type1);
5688       deref_to_type2 = TYPE_PTRMEM_CLASS_TYPE (from_type2);
5689       deref_from_type1 = TYPE_PTRMEM_CLASS_TYPE (to_type1);
5690       deref_from_type2 = TYPE_PTRMEM_CLASS_TYPE (to_type2);
5691     }
5692
5693   if (deref_from_type1 != NULL_TREE
5694       && IS_AGGR_TYPE_CODE (TREE_CODE (deref_from_type1))
5695       && IS_AGGR_TYPE_CODE (TREE_CODE (deref_from_type2)))
5696     {
5697       /* This was one of the pointer or pointer-like conversions.  
5698
5699          [over.ics.rank]
5700          
5701          --If class B is derived directly or indirectly from class A,
5702            conversion of B* to A* is better than conversion of B* to
5703            void*, and conversion of A* to void* is better than
5704            conversion of B* to void*.  */
5705       if (TREE_CODE (deref_to_type1) == VOID_TYPE
5706           && TREE_CODE (deref_to_type2) == VOID_TYPE)
5707         {
5708           if (is_properly_derived_from (deref_from_type1,
5709                                         deref_from_type2))
5710             return -1;
5711           else if (is_properly_derived_from (deref_from_type2,
5712                                              deref_from_type1))
5713             return 1;
5714         }
5715       else if (TREE_CODE (deref_to_type1) == VOID_TYPE
5716                || TREE_CODE (deref_to_type2) == VOID_TYPE)
5717         {
5718           if (same_type_p (deref_from_type1, deref_from_type2))
5719             {
5720               if (TREE_CODE (deref_to_type2) == VOID_TYPE)
5721                 {
5722                   if (is_properly_derived_from (deref_from_type1,
5723                                                 deref_to_type1))
5724                     return 1;
5725                 }
5726               /* We know that DEREF_TO_TYPE1 is `void' here.  */
5727               else if (is_properly_derived_from (deref_from_type1,
5728                                                  deref_to_type2))
5729                 return -1;
5730             }
5731         }
5732       else if (IS_AGGR_TYPE_CODE (TREE_CODE (deref_to_type1))
5733                && IS_AGGR_TYPE_CODE (TREE_CODE (deref_to_type2)))
5734         {
5735           /* [over.ics.rank]
5736
5737              --If class B is derived directly or indirectly from class A
5738                and class C is derived directly or indirectly from B,
5739              
5740              --conversion of C* to B* is better than conversion of C* to
5741                A*, 
5742              
5743              --conversion of B* to A* is better than conversion of C* to
5744                A*  */
5745           if (same_type_p (deref_from_type1, deref_from_type2))
5746             {
5747               if (is_properly_derived_from (deref_to_type1,
5748                                             deref_to_type2))
5749                 return 1;
5750               else if (is_properly_derived_from (deref_to_type2,
5751                                                  deref_to_type1))
5752                 return -1;
5753             }
5754           else if (same_type_p (deref_to_type1, deref_to_type2))
5755             {
5756               if (is_properly_derived_from (deref_from_type2,
5757                                             deref_from_type1))
5758                 return 1;
5759               else if (is_properly_derived_from (deref_from_type1,
5760                                                  deref_from_type2))
5761                 return -1;
5762             }
5763         }
5764     }
5765   else if (CLASS_TYPE_P (non_reference (from_type1))
5766            && same_type_p (from_type1, from_type2))
5767     {
5768       tree from = non_reference (from_type1);
5769
5770       /* [over.ics.rank]
5771          
5772          --binding of an expression of type C to a reference of type
5773            B& is better than binding an expression of type C to a
5774            reference of type A&
5775
5776          --conversion of C to B is better than conversion of C to A,  */
5777       if (is_properly_derived_from (from, to_type1)
5778           && is_properly_derived_from (from, to_type2))
5779         {
5780           if (is_properly_derived_from (to_type1, to_type2))
5781             return 1;
5782           else if (is_properly_derived_from (to_type2, to_type1))
5783             return -1;
5784         }
5785     }
5786   else if (CLASS_TYPE_P (non_reference (to_type1))
5787            && same_type_p (to_type1, to_type2))
5788     {
5789       tree to = non_reference (to_type1);
5790
5791       /* [over.ics.rank]
5792
5793          --binding of an expression of type B to a reference of type
5794            A& is better than binding an expression of type C to a
5795            reference of type A&, 
5796
5797          --conversion of B to A is better than conversion of C to A  */
5798       if (is_properly_derived_from (from_type1, to)
5799           && is_properly_derived_from (from_type2, to))
5800         {
5801           if (is_properly_derived_from (from_type2, from_type1))
5802             return 1;
5803           else if (is_properly_derived_from (from_type1, from_type2))
5804             return -1;
5805         }
5806     }
5807
5808   /* [over.ics.rank]
5809
5810      --S1 and S2 differ only in their qualification conversion and  yield
5811        similar  types  T1 and T2 (_conv.qual_), respectively, and the cv-
5812        qualification signature of type T1 is a proper subset of  the  cv-
5813        qualification signature of type T2  */
5814   if (ics1->kind == ck_qual
5815       && ics2->kind == ck_qual
5816       && same_type_p (from_type1, from_type2))
5817     return comp_cv_qual_signature (to_type1, to_type2);
5818
5819   /* [over.ics.rank]
5820      
5821      --S1 and S2 are reference bindings (_dcl.init.ref_), and the
5822      types to which the references refer are the same type except for
5823      top-level cv-qualifiers, and the type to which the reference
5824      initialized by S2 refers is more cv-qualified than the type to
5825      which the reference initialized by S1 refers */
5826       
5827   if (target_type1 && target_type2
5828       && same_type_ignoring_top_level_qualifiers_p (to_type1, to_type2))
5829     return comp_cv_qualification (target_type2, target_type1);
5830
5831   /* Neither conversion sequence is better than the other.  */
5832   return 0;
5833 }
5834
5835 /* The source type for this standard conversion sequence.  */
5836
5837 static tree
5838 source_type (conversion *t)
5839 {
5840   for (;; t = t->u.next)
5841     {
5842       if (t->kind == ck_user
5843           || t->kind == ck_ambig
5844           || t->kind == ck_identity)
5845         return t->type;
5846     }
5847   abort ();
5848 }
5849
5850 /* Note a warning about preferring WINNER to LOSER.  We do this by storing
5851    a pointer to LOSER and re-running joust to produce the warning if WINNER
5852    is actually used.  */
5853
5854 static void
5855 add_warning (struct z_candidate *winner, struct z_candidate *loser)
5856 {
5857   candidate_warning *cw;
5858
5859   cw = conversion_obstack_alloc (sizeof (candidate_warning));
5860   cw->loser = loser;
5861   cw->next = winner->warnings;
5862   winner->warnings = cw;
5863 }
5864
5865 /* Compare two candidates for overloading as described in
5866    [over.match.best].  Return values:
5867
5868       1: cand1 is better than cand2
5869      -1: cand2 is better than cand1
5870       0: cand1 and cand2 are indistinguishable */
5871
5872 static int
5873 joust (struct z_candidate *cand1, struct z_candidate *cand2, bool warn)
5874 {
5875   int winner = 0;
5876   int off1 = 0, off2 = 0;
5877   size_t i;
5878   size_t len;
5879
5880   /* Candidates that involve bad conversions are always worse than those
5881      that don't.  */
5882   if (cand1->viable > cand2->viable)
5883     return 1;
5884   if (cand1->viable < cand2->viable)
5885     return -1;
5886
5887   /* If we have two pseudo-candidates for conversions to the same type,
5888      or two candidates for the same function, arbitrarily pick one.  */
5889   if (cand1->fn == cand2->fn
5890       && (TYPE_P (cand1->fn) || DECL_P (cand1->fn)))
5891     return 1;
5892
5893   /* a viable function F1
5894      is defined to be a better function than another viable function F2  if
5895      for  all arguments i, ICSi(F1) is not a worse conversion sequence than
5896      ICSi(F2), and then */
5897
5898   /* for some argument j, ICSj(F1) is a better conversion  sequence  than
5899      ICSj(F2) */
5900
5901   /* For comparing static and non-static member functions, we ignore
5902      the implicit object parameter of the non-static function.  The
5903      standard says to pretend that the static function has an object
5904      parm, but that won't work with operator overloading.  */
5905   len = cand1->num_convs;
5906   if (len != cand2->num_convs)
5907     {
5908       if (DECL_STATIC_FUNCTION_P (cand1->fn)
5909           && ! DECL_STATIC_FUNCTION_P (cand2->fn))
5910         off2 = 1;
5911       else if (! DECL_STATIC_FUNCTION_P (cand1->fn)
5912                && DECL_STATIC_FUNCTION_P (cand2->fn))
5913         {
5914           off1 = 1;
5915           --len;
5916         }
5917       else
5918         abort ();
5919     }
5920
5921   for (i = 0; i < len; ++i)
5922     {
5923       conversion *t1 = cand1->convs[i + off1];
5924       conversion *t2 = cand2->convs[i + off2];
5925       int comp = compare_ics (t1, t2);
5926
5927       if (comp != 0)
5928         {
5929           if (warn_sign_promo
5930               && (CONVERSION_RANK (t1) + CONVERSION_RANK (t2)
5931                   == cr_std + cr_promotion)
5932               && t1->kind == ck_std
5933               && t2->kind == ck_std
5934               && TREE_CODE (t1->type) == INTEGER_TYPE
5935               && TREE_CODE (t2->type) == INTEGER_TYPE
5936               && (TYPE_PRECISION (t1->type)
5937                   == TYPE_PRECISION (t2->type))
5938               && (TYPE_UNSIGNED (t1->u.next->type)
5939                   || (TREE_CODE (t1->u.next->type)
5940                       == ENUMERAL_TYPE)))
5941             {
5942               tree type = t1->u.next->type;
5943               tree type1, type2;
5944               struct z_candidate *w, *l;
5945               if (comp > 0)
5946                 type1 = t1->type, type2 = t2->type,
5947                   w = cand1, l = cand2;
5948               else
5949                 type1 = t2->type, type2 = t1->type,
5950                   w = cand2, l = cand1;
5951
5952               if (warn)
5953                 {
5954                   warning ("passing `%T' chooses `%T' over `%T'",
5955                               type, type1, type2);
5956                   warning ("  in call to `%D'", w->fn);
5957                 }
5958               else
5959                 add_warning (w, l);
5960             }
5961
5962           if (winner && comp != winner)
5963             {
5964               winner = 0;
5965               goto tweak;
5966             }
5967           winner = comp;
5968         }
5969     }
5970
5971   /* warn about confusing overload resolution for user-defined conversions,
5972      either between a constructor and a conversion op, or between two
5973      conversion ops.  */
5974   if (winner && warn_conversion && cand1->second_conv
5975       && (!DECL_CONSTRUCTOR_P (cand1->fn) || !DECL_CONSTRUCTOR_P (cand2->fn))
5976       && winner != compare_ics (cand1->second_conv, cand2->second_conv))
5977     {
5978       struct z_candidate *w, *l;
5979       bool give_warning = false;
5980       
5981       if (winner == 1)
5982         w = cand1, l = cand2;
5983       else
5984         w = cand2, l = cand1;
5985       
5986       /* We don't want to complain about `X::operator T1 ()'
5987          beating `X::operator T2 () const', when T2 is a no less
5988          cv-qualified version of T1.  */
5989       if (DECL_CONTEXT (w->fn) == DECL_CONTEXT (l->fn)
5990           && !DECL_CONSTRUCTOR_P (w->fn) && !DECL_CONSTRUCTOR_P (l->fn))
5991         {
5992           tree t = TREE_TYPE (TREE_TYPE (l->fn));
5993           tree f = TREE_TYPE (TREE_TYPE (w->fn));
5994           
5995           if (TREE_CODE (t) == TREE_CODE (f) && POINTER_TYPE_P (t))
5996             {
5997               t = TREE_TYPE (t);
5998               f = TREE_TYPE (f);
5999             }
6000           if (!comp_ptr_ttypes (t, f))
6001             give_warning = true;
6002         }
6003       else
6004         give_warning = true;
6005       
6006       if (!give_warning)
6007         /*NOP*/;
6008       else if (warn)
6009         {
6010           tree source = source_type (w->convs[0]);
6011           if (! DECL_CONSTRUCTOR_P (w->fn))
6012             source = TREE_TYPE (source);
6013           warning ("choosing `%D' over `%D'", w->fn, l->fn);
6014           warning ("  for conversion from `%T' to `%T'",
6015                    source, w->second_conv->type);
6016           warning ("  because conversion sequence for the argument is better");
6017         }
6018       else
6019         add_warning (w, l);
6020     }
6021
6022   if (winner)
6023     return winner;
6024
6025   /* or, if not that,
6026      F1 is a non-template function and F2 is a template function
6027      specialization.  */
6028          
6029   if (!cand1->template_decl && cand2->template_decl)
6030     return 1;
6031   else if (cand1->template_decl && !cand2->template_decl)
6032     return -1;
6033   
6034   /* or, if not that,
6035      F1 and F2 are template functions and the function template for F1 is
6036      more specialized than the template for F2 according to the partial
6037      ordering rules.  */
6038   
6039   if (cand1->template_decl && cand2->template_decl)
6040     {
6041       winner = more_specialized
6042         (TI_TEMPLATE (cand1->template_decl),
6043          TI_TEMPLATE (cand2->template_decl),
6044          DEDUCE_ORDER,
6045          /* Tell the deduction code how many real function arguments
6046             we saw, not counting the implicit 'this' argument.  But,
6047             add_function_candidate() suppresses the "this" argument
6048             for constructors.
6049
6050             [temp.func.order]: The presence of unused ellipsis and default
6051             arguments has no effect on the partial ordering of function
6052             templates.  */
6053          cand1->num_convs
6054          - (DECL_NONSTATIC_MEMBER_FUNCTION_P (cand1->fn)
6055             - DECL_CONSTRUCTOR_P (cand1->fn)));
6056       if (winner)
6057         return winner;
6058     }
6059
6060   /* or, if not that,
6061      the  context  is  an  initialization by user-defined conversion (see
6062      _dcl.init_  and  _over.match.user_)  and  the  standard   conversion
6063      sequence  from  the return type of F1 to the destination type (i.e.,
6064      the type of the entity being initialized)  is  a  better  conversion
6065      sequence  than the standard conversion sequence from the return type
6066      of F2 to the destination type.  */
6067
6068   if (cand1->second_conv)
6069     {
6070       winner = compare_ics (cand1->second_conv, cand2->second_conv);
6071       if (winner)
6072         return winner;
6073     }
6074   
6075   /* Check whether we can discard a builtin candidate, either because we
6076      have two identical ones or matching builtin and non-builtin candidates.
6077
6078      (Pedantically in the latter case the builtin which matched the user
6079      function should not be added to the overload set, but we spot it here.
6080      
6081      [over.match.oper]
6082      ... the builtin candidates include ...
6083      - do not have the same parameter type list as any non-template
6084        non-member candidate.  */
6085                             
6086   if (TREE_CODE (cand1->fn) == IDENTIFIER_NODE
6087       || TREE_CODE (cand2->fn) == IDENTIFIER_NODE)
6088     {
6089       for (i = 0; i < len; ++i)
6090         if (!same_type_p (cand1->convs[i]->type,
6091                           cand2->convs[i]->type))
6092           break;
6093       if (i == cand1->num_convs)
6094         {
6095           if (cand1->fn == cand2->fn)
6096             /* Two built-in candidates; arbitrarily pick one.  */
6097             return 1;
6098           else if (TREE_CODE (cand1->fn) == IDENTIFIER_NODE)
6099             /* cand1 is built-in; prefer cand2.  */
6100             return -1;
6101           else
6102             /* cand2 is built-in; prefer cand1.  */
6103             return 1;
6104         }
6105     }
6106
6107   /* If the two functions are the same (this can happen with declarations
6108      in multiple scopes and arg-dependent lookup), arbitrarily choose one.  */
6109   if (DECL_P (cand1->fn) && DECL_P (cand2->fn)
6110       && equal_functions (cand1->fn, cand2->fn))
6111     return 1;
6112  
6113 tweak:
6114
6115   /* Extension: If the worst conversion for one candidate is worse than the
6116      worst conversion for the other, take the first.  */
6117   if (!pedantic)
6118     {
6119       conversion_rank rank1 = cr_identity, rank2 = cr_identity;
6120       struct z_candidate *w = 0, *l = 0;
6121
6122       for (i = 0; i < len; ++i)
6123         {
6124           if (CONVERSION_RANK (cand1->convs[i+off1]) > rank1)
6125             rank1 = CONVERSION_RANK (cand1->convs[i+off1]);
6126           if (CONVERSION_RANK (cand2->convs[i + off2]) > rank2)
6127             rank2 = CONVERSION_RANK (cand2->convs[i + off2]);
6128         }
6129       if (rank1 < rank2)
6130         winner = 1, w = cand1, l = cand2;
6131       if (rank1 > rank2)
6132         winner = -1, w = cand2, l = cand1;
6133       if (winner)
6134         {
6135           if (warn)
6136             {
6137               pedwarn ("\
6138 ISO C++ says that these are ambiguous, even \
6139 though the worst conversion for the first is better than \
6140 the worst conversion for the second:");
6141               print_z_candidate (_("candidate 1:"), w);
6142               print_z_candidate (_("candidate 2:"), l);
6143             }
6144           else
6145             add_warning (w, l);
6146           return winner;
6147         }
6148     }
6149
6150   my_friendly_assert (!winner, 20010121);
6151   return 0;
6152 }
6153
6154 /* Given a list of candidates for overloading, find the best one, if any.
6155    This algorithm has a worst case of O(2n) (winner is last), and a best
6156    case of O(n/2) (totally ambiguous); much better than a sorting
6157    algorithm.  */
6158
6159 static struct z_candidate *
6160 tourney (struct z_candidate *candidates)
6161 {
6162   struct z_candidate *champ = candidates, *challenger;
6163   int fate;
6164   int champ_compared_to_predecessor = 0;
6165
6166   /* Walk through the list once, comparing each current champ to the next
6167      candidate, knocking out a candidate or two with each comparison.  */
6168
6169   for (challenger = champ->next; challenger; )
6170     {
6171       fate = joust (champ, challenger, 0);
6172       if (fate == 1)
6173         challenger = challenger->next;
6174       else
6175         {
6176           if (fate == 0)
6177             {
6178               champ = challenger->next;
6179               if (champ == 0)
6180                 return 0;
6181               champ_compared_to_predecessor = 0;
6182             }
6183           else
6184             {
6185               champ = challenger;
6186               champ_compared_to_predecessor = 1;
6187             }
6188
6189           challenger = champ->next;
6190         }
6191     }
6192
6193   /* Make sure the champ is better than all the candidates it hasn't yet
6194      been compared to.  */
6195
6196   for (challenger = candidates; 
6197        challenger != champ 
6198          && !(champ_compared_to_predecessor && challenger->next == champ);
6199        challenger = challenger->next)
6200     {
6201       fate = joust (champ, challenger, 0);
6202       if (fate != 1)
6203         return 0;
6204     }
6205
6206   return champ;
6207 }
6208
6209 /* Returns nonzero if things of type FROM can be converted to TO.  */
6210
6211 bool
6212 can_convert (tree to, tree from)
6213 {
6214   return can_convert_arg (to, from, NULL_TREE);
6215 }
6216
6217 /* Returns nonzero if ARG (of type FROM) can be converted to TO.  */
6218
6219 bool
6220 can_convert_arg (tree to, tree from, tree arg)
6221 {
6222   conversion *t;
6223   void *p;
6224   bool ok_p;
6225
6226   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
6227   p = conversion_obstack_alloc (0);
6228
6229   t  = implicit_conversion (to, from, arg, LOOKUP_NORMAL);
6230   ok_p = (t && !t->bad_p);
6231
6232   /* Free all the conversions we allocated.  */
6233   obstack_free (&conversion_obstack, p);
6234
6235   return ok_p;
6236 }
6237
6238 /* Like can_convert_arg, but allows dubious conversions as well.  */
6239
6240 bool
6241 can_convert_arg_bad (tree to, tree from, tree arg)
6242 {
6243   conversion *t;
6244   void *p;
6245
6246   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
6247   p = conversion_obstack_alloc (0);
6248   /* Try to perform the conversion.  */
6249   t  = implicit_conversion (to, from, arg, LOOKUP_NORMAL);
6250   /* Free all the conversions we allocated.  */
6251   obstack_free (&conversion_obstack, p);
6252
6253   return t != NULL;
6254 }
6255
6256 /* Convert EXPR to TYPE.  Return the converted expression.
6257
6258    Note that we allow bad conversions here because by the time we get to
6259    this point we are committed to doing the conversion.  If we end up
6260    doing a bad conversion, convert_like will complain.  */
6261
6262 tree
6263 perform_implicit_conversion (tree type, tree expr)
6264 {
6265   conversion *conv;
6266   void *p;
6267
6268   if (error_operand_p (expr))
6269     return error_mark_node;
6270
6271   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
6272   p = conversion_obstack_alloc (0);
6273
6274   conv = implicit_conversion (type, TREE_TYPE (expr), expr,
6275                               LOOKUP_NORMAL);
6276   if (!conv)
6277     {
6278       error ("could not convert `%E' to `%T'", expr, type);
6279       expr = error_mark_node;
6280     }
6281   else
6282     expr = convert_like (conv, expr);
6283
6284   /* Free all the conversions we allocated.  */
6285   obstack_free (&conversion_obstack, p);
6286
6287   return expr;
6288 }
6289
6290 /* Convert EXPR to TYPE (as a direct-initialization) if that is
6291    permitted.  If the conversion is valid, the converted expression is
6292    returned.  Otherwise, NULL_TREE is returned, except in the case
6293    that TYPE is a class type; in that case, an error is issued.  */
6294
6295 tree
6296 perform_direct_initialization_if_possible (tree type, tree expr)
6297 {
6298   conversion *conv;
6299   void *p;
6300
6301   if (type == error_mark_node || error_operand_p (expr))
6302     return error_mark_node;
6303   /* [dcl.init]
6304
6305      If the destination type is a (possibly cv-qualified) class type:
6306
6307      -- If the initialization is direct-initialization ...,
6308      constructors are considered. ... If no constructor applies, or
6309      the overload resolution is ambiguous, the initialization is
6310      ill-formed.  */
6311   if (CLASS_TYPE_P (type))
6312     {
6313       expr = build_special_member_call (NULL_TREE, complete_ctor_identifier,
6314                                         build_tree_list (NULL_TREE, expr),
6315                                         type, LOOKUP_NORMAL);
6316       return build_cplus_new (type, expr);
6317     }
6318
6319   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
6320   p = conversion_obstack_alloc (0);
6321
6322   conv = implicit_conversion (type, TREE_TYPE (expr), expr,
6323                               LOOKUP_NORMAL);
6324   if (!conv || conv->bad_p)
6325     expr = NULL_TREE;
6326   else
6327     expr = convert_like_real (conv, expr, NULL_TREE, 0, 0, 
6328                               /*issue_conversion_warnings=*/false);
6329
6330   /* Free all the conversions we allocated.  */
6331   obstack_free (&conversion_obstack, p);
6332
6333   return expr;
6334 }
6335
6336 /* DECL is a VAR_DECL whose type is a REFERENCE_TYPE.  The reference
6337    is being bound to a temporary.  Create and return a new VAR_DECL
6338    with the indicated TYPE; this variable will store the value to
6339    which the reference is bound.  */
6340
6341 tree 
6342 make_temporary_var_for_ref_to_temp (tree decl, tree type)
6343 {
6344   tree var;
6345
6346   /* Create the variable.  */
6347   var = build_decl (VAR_DECL, NULL_TREE, type);
6348   DECL_ARTIFICIAL (var) = 1;
6349   TREE_USED (var) = 1;
6350
6351   /* Register the variable.  */
6352   if (TREE_STATIC (decl))
6353     {
6354       /* Namespace-scope or local static; give it a mangled name.  */
6355       tree name;
6356
6357       TREE_STATIC (var) = 1;
6358       name = mangle_ref_init_variable (decl);
6359       DECL_NAME (var) = name;
6360       SET_DECL_ASSEMBLER_NAME (var, name);
6361       var = pushdecl_top_level (var);
6362     }
6363   else
6364     {
6365       /* Create a new cleanup level if necessary.  */
6366       maybe_push_cleanup_level (type);
6367       /* Don't push unnamed temps.  Do set DECL_CONTEXT, though.  */
6368       DECL_CONTEXT (var) = current_function_decl;
6369     }
6370
6371   return var;
6372 }
6373
6374 /* Convert EXPR to the indicated reference TYPE, in a way suitable for
6375    initializing a variable of that TYPE.  If DECL is non-NULL, it is
6376    the VAR_DECL being initialized with the EXPR.  (In that case, the
6377    type of DECL will be TYPE.)  If DECL is non-NULL, then CLEANUP must
6378    also be non-NULL, and with *CLEANUP initialized to NULL.  Upon
6379    return, if *CLEANUP is no longer NULL, it will be an expression
6380    that should be pushed as a cleanup after the returned expression
6381    is used to initialize DECL.
6382
6383    Return the converted expression.  */
6384
6385 tree
6386 initialize_reference (tree type, tree expr, tree decl, tree *cleanup)
6387 {
6388   conversion *conv;
6389   void *p;
6390
6391   if (type == error_mark_node || error_operand_p (expr))
6392     return error_mark_node;
6393
6394   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
6395   p = conversion_obstack_alloc (0);
6396
6397   conv = reference_binding (type, TREE_TYPE (expr), expr, LOOKUP_NORMAL);
6398   if (!conv || conv->bad_p)
6399     {
6400       if (!(TYPE_QUALS (TREE_TYPE (type)) & TYPE_QUAL_CONST)
6401           && !real_lvalue_p (expr))
6402         error ("invalid initialization of non-const reference of "
6403                "type '%T' from a temporary of type '%T'",
6404                type, TREE_TYPE (expr));
6405       else
6406         error ("invalid initialization of reference of type "
6407                "'%T' from expression of type '%T'", type, 
6408                TREE_TYPE (expr));
6409       return error_mark_node;
6410     }
6411
6412   /* If DECL is non-NULL, then this special rule applies:
6413
6414        [class.temporary]
6415
6416        The temporary to which the reference is bound or the temporary
6417        that is the complete object to which the reference is bound
6418        persists for the lifetime of the reference.
6419
6420        The temporaries created during the evaluation of the expression
6421        initializing the reference, except the temporary to which the
6422        reference is bound, are destroyed at the end of the
6423        full-expression in which they are created.
6424
6425      In that case, we store the converted expression into a new
6426      VAR_DECL in a new scope.  
6427
6428      However, we want to be careful not to create temporaries when
6429      they are not required.  For example, given:
6430
6431        struct B {}; 
6432        struct D : public B {};
6433        D f();
6434        const B& b = f();
6435
6436      there is no need to copy the return value from "f"; we can just
6437      extend its lifetime.  Similarly, given:
6438
6439        struct S {};
6440        struct T { operator S(); };
6441        T t;
6442        const S& s = t;
6443
6444     we can extend the lifetime of the return value of the conversion
6445     operator.  */
6446   my_friendly_assert (conv->kind == ck_ref_bind, 20030302);
6447   if (decl)
6448     {
6449       tree var;
6450       tree base_conv_type;
6451
6452       /* Skip over the REF_BIND.  */
6453       conv = conv->u.next;
6454       /* If the next conversion is a BASE_CONV, skip that too -- but
6455          remember that the conversion was required.  */
6456       if (conv->kind == ck_base && conv->need_temporary_p)
6457         {
6458           if (conv->check_copy_constructor_p)
6459             check_constructor_callable (TREE_TYPE (expr), expr);
6460           base_conv_type = conv->type;
6461           conv = conv->u.next;
6462         }
6463       else
6464         base_conv_type = NULL_TREE;
6465       /* Perform the remainder of the conversion.  */
6466       expr = convert_like_real (conv, expr,
6467                                 /*fn=*/NULL_TREE, /*argnum=*/0,
6468                                 /*inner=*/-1,
6469                                 /*issue_conversion_warnings=*/true);
6470       if (!real_lvalue_p (expr))
6471         {
6472           tree init;
6473           tree type;
6474
6475           /* Create the temporary variable.  */
6476           type = TREE_TYPE (expr);
6477           var = make_temporary_var_for_ref_to_temp (decl, type);
6478           layout_decl (var, 0);
6479           /* If the rvalue is the result of a function call it will be
6480              a TARGET_EXPR.  If it is some other construct (such as a
6481              member access expression where the underlying object is
6482              itself the result of a function call), turn it into a
6483              TARGET_EXPR here.  It is important that EXPR be a
6484              TARGET_EXPR below since otherwise the INIT_EXPR will
6485              attempt to make a bitwise copy of EXPR to initialize
6486              VAR.  */
6487           if (TREE_CODE (expr) != TARGET_EXPR)
6488             expr = get_target_expr (expr);
6489           /* Create the INIT_EXPR that will initialize the temporary
6490              variable.  */
6491           init = build2 (INIT_EXPR, type, var, expr);
6492           if (at_function_scope_p ())
6493             {
6494               add_decl_expr (var);
6495               *cleanup = cxx_maybe_build_cleanup (var);
6496
6497               /* We must be careful to destroy the temporary only
6498                  after its initialization has taken place.  If the
6499                  initialization throws an exception, then the
6500                  destructor should not be run.  We cannot simply
6501                  transform INIT into something like:
6502              
6503                      (INIT, ({ CLEANUP_STMT; }))
6504
6505                  because emit_local_var always treats the
6506                  initializer as a full-expression.  Thus, the
6507                  destructor would run too early; it would run at the
6508                  end of initializing the reference variable, rather
6509                  than at the end of the block enclosing the
6510                  reference variable.
6511
6512                  The solution is to pass back a cleanup expression
6513                  which the caller is responsible for attaching to
6514                  the statement tree.  */
6515             }
6516           else
6517             {
6518               rest_of_decl_compilation (var, /*toplev=*/1, at_eof);
6519               if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
6520                 static_aggregates = tree_cons (NULL_TREE, var,
6521                                                static_aggregates);
6522             }
6523           /* Use its address to initialize the reference variable.  */
6524           expr = build_address (var);
6525           expr = build2 (COMPOUND_EXPR, TREE_TYPE (expr), init, expr);
6526         }
6527       else
6528         /* Take the address of EXPR.  */
6529         expr = build_unary_op (ADDR_EXPR, expr, 0);
6530       /* If a BASE_CONV was required, perform it now.  */
6531       if (base_conv_type)
6532         expr = (perform_implicit_conversion 
6533                 (build_pointer_type (base_conv_type), expr));
6534       expr = build_nop (type, expr);
6535     }
6536   else
6537     /* Perform the conversion.  */
6538     expr = convert_like (conv, expr);
6539   
6540   /* Free all the conversions we allocated.  */
6541   obstack_free (&conversion_obstack, p);
6542
6543   return expr;
6544 }
6545
6546 #include "gt-cp-call.h"