OSDN Git Service

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