OSDN Git Service

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