OSDN Git Service

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