OSDN Git Service

PR c++/45329
[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, 2008, 2009,
4    2010, 2011
5    Free Software Foundation, Inc.
6    Contributed by Michael Tiemann (tiemann@cygnus.com) and
7    modified by Brendan Kehoe (brendan@cygnus.com).
8
9 This file is part of GCC.
10
11 GCC is free software; you can redistribute it and/or modify
12 it under the terms of the GNU General Public License as published by
13 the Free Software Foundation; either version 3, or (at your option)
14 any later version.
15
16 GCC is distributed in the hope that it will be useful,
17 but WITHOUT ANY WARRANTY; without even the implied warranty of
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19 GNU General Public License for more details.
20
21 You should have received a copy of the GNU General Public License
22 along with GCC; see the file COPYING3.  If not see
23 <http://www.gnu.org/licenses/>.  */
24
25
26 /* High-level class interface.  */
27
28 #include "config.h"
29 #include "system.h"
30 #include "coretypes.h"
31 #include "tm.h"
32 #include "tree.h"
33 #include "cp-tree.h"
34 #include "output.h"
35 #include "flags.h"
36 #include "toplev.h"
37 #include "diagnostic-core.h"
38 #include "intl.h"
39 #include "target.h"
40 #include "convert.h"
41 #include "langhooks.h"
42 #include "c-family/c-objc.h"
43 #include "timevar.h"
44
45 /* The various kinds of conversion.  */
46
47 typedef enum conversion_kind {
48   ck_identity,
49   ck_lvalue,
50   ck_qual,
51   ck_std,
52   ck_ptr,
53   ck_pmem,
54   ck_base,
55   ck_ref_bind,
56   ck_user,
57   ck_ambig,
58   ck_list,
59   ck_aggr,
60   ck_rvalue
61 } conversion_kind;
62
63 /* The rank of the conversion.  Order of the enumerals matters; better
64    conversions should come earlier in the list.  */
65
66 typedef enum conversion_rank {
67   cr_identity,
68   cr_exact,
69   cr_promotion,
70   cr_std,
71   cr_pbool,
72   cr_user,
73   cr_ellipsis,
74   cr_bad
75 } conversion_rank;
76
77 /* An implicit conversion sequence, in the sense of [over.best.ics].
78    The first conversion to be performed is at the end of the chain.
79    That conversion is always a cr_identity conversion.  */
80
81 typedef struct conversion conversion;
82 struct conversion {
83   /* The kind of conversion represented by this step.  */
84   conversion_kind kind;
85   /* The rank of this conversion.  */
86   conversion_rank rank;
87   BOOL_BITFIELD user_conv_p : 1;
88   BOOL_BITFIELD ellipsis_p : 1;
89   BOOL_BITFIELD this_p : 1;
90   /* True if this conversion would be permitted with a bending of
91      language standards, e.g. disregarding pointer qualifiers or
92      converting integers to pointers.  */
93   BOOL_BITFIELD bad_p : 1;
94   /* If KIND is ck_ref_bind ck_base_conv, true to indicate that a
95      temporary should be created to hold the result of the
96      conversion.  */
97   BOOL_BITFIELD need_temporary_p : 1;
98   /* If KIND is ck_ptr or ck_pmem, true to indicate that a conversion
99      from a pointer-to-derived to pointer-to-base is being performed.  */
100   BOOL_BITFIELD base_p : 1;
101   /* If KIND is ck_ref_bind, true when either an lvalue reference is
102      being bound to an lvalue expression or an rvalue reference is
103      being bound to an rvalue expression.  If KIND is ck_rvalue,
104      true when we should treat an lvalue as an rvalue (12.8p33).  If
105      KIND is ck_base, always false.  */
106   BOOL_BITFIELD rvaluedness_matches_p: 1;
107   BOOL_BITFIELD check_narrowing: 1;
108   /* The type of the expression resulting from the conversion.  */
109   tree type;
110   union {
111     /* The next conversion in the chain.  Since the conversions are
112        arranged from outermost to innermost, the NEXT conversion will
113        actually be performed before this conversion.  This variant is
114        used only when KIND is neither ck_identity nor ck_ambig.  */
115     conversion *next;
116     /* The expression at the beginning of the conversion chain.  This
117        variant is used only if KIND is ck_identity or ck_ambig.  */
118     tree expr;
119     /* The array of conversions for an initializer_list.  */
120     conversion **list;
121   } u;
122   /* The function candidate corresponding to this conversion
123      sequence.  This field is only used if KIND is ck_user.  */
124   struct z_candidate *cand;
125 };
126
127 #define CONVERSION_RANK(NODE)                   \
128   ((NODE)->bad_p ? cr_bad                       \
129    : (NODE)->ellipsis_p ? cr_ellipsis           \
130    : (NODE)->user_conv_p ? cr_user              \
131    : (NODE)->rank)
132
133 #define BAD_CONVERSION_RANK(NODE)               \
134   ((NODE)->ellipsis_p ? cr_ellipsis             \
135    : (NODE)->user_conv_p ? cr_user              \
136    : (NODE)->rank)
137
138 static struct obstack conversion_obstack;
139 static bool conversion_obstack_initialized;
140 struct rejection_reason;
141
142 static struct z_candidate * tourney (struct z_candidate *);
143 static int equal_functions (tree, tree);
144 static int joust (struct z_candidate *, struct z_candidate *, bool);
145 static int compare_ics (conversion *, conversion *);
146 static tree build_over_call (struct z_candidate *, int, tsubst_flags_t);
147 static tree build_java_interface_fn_ref (tree, tree);
148 #define convert_like(CONV, EXPR, COMPLAIN)                      \
149   convert_like_real ((CONV), (EXPR), NULL_TREE, 0, 0,           \
150                      /*issue_conversion_warnings=*/true,        \
151                      /*c_cast_p=*/false, (COMPLAIN))
152 #define convert_like_with_context(CONV, EXPR, FN, ARGNO, COMPLAIN )     \
153   convert_like_real ((CONV), (EXPR), (FN), (ARGNO), 0,                  \
154                      /*issue_conversion_warnings=*/true,                \
155                      /*c_cast_p=*/false, (COMPLAIN))
156 static tree convert_like_real (conversion *, tree, tree, int, int, bool,
157                                bool, tsubst_flags_t);
158 static void op_error (enum tree_code, enum tree_code, tree, tree,
159                       tree, bool);
160 static struct z_candidate *build_user_type_conversion_1 (tree, tree, int);
161 static void print_z_candidate (const char *, struct z_candidate *);
162 static void print_z_candidates (location_t, struct z_candidate *);
163 static tree build_this (tree);
164 static struct z_candidate *splice_viable (struct z_candidate *, bool, bool *);
165 static bool any_strictly_viable (struct z_candidate *);
166 static struct z_candidate *add_template_candidate
167         (struct z_candidate **, tree, tree, tree, tree, const VEC(tree,gc) *,
168          tree, tree, tree, int, unification_kind_t);
169 static struct z_candidate *add_template_candidate_real
170         (struct z_candidate **, tree, tree, tree, tree, const VEC(tree,gc) *,
171          tree, tree, tree, int, tree, unification_kind_t);
172 static struct z_candidate *add_template_conv_candidate
173         (struct z_candidate **, tree, tree, tree, const VEC(tree,gc) *, tree,
174          tree, tree);
175 static void add_builtin_candidates
176         (struct z_candidate **, enum tree_code, enum tree_code,
177          tree, tree *, int);
178 static void add_builtin_candidate
179         (struct z_candidate **, enum tree_code, enum tree_code,
180          tree, tree, tree, tree *, tree *, int);
181 static bool is_complete (tree);
182 static void build_builtin_candidate
183         (struct z_candidate **, tree, tree, tree, tree *, tree *,
184          int);
185 static struct z_candidate *add_conv_candidate
186         (struct z_candidate **, tree, tree, tree, const VEC(tree,gc) *, tree,
187          tree);
188 static struct z_candidate *add_function_candidate
189         (struct z_candidate **, tree, tree, tree, const VEC(tree,gc) *, tree,
190          tree, int);
191 static conversion *implicit_conversion (tree, tree, tree, bool, int);
192 static conversion *standard_conversion (tree, tree, tree, bool, int);
193 static conversion *reference_binding (tree, tree, tree, bool, int);
194 static conversion *build_conv (conversion_kind, tree, conversion *);
195 static conversion *build_list_conv (tree, tree, int);
196 static bool is_subseq (conversion *, conversion *);
197 static conversion *maybe_handle_ref_bind (conversion **);
198 static void maybe_handle_implicit_object (conversion **);
199 static struct z_candidate *add_candidate
200         (struct z_candidate **, tree, tree, const VEC(tree,gc) *, size_t,
201          conversion **, tree, tree, int, struct rejection_reason *);
202 static tree source_type (conversion *);
203 static void add_warning (struct z_candidate *, struct z_candidate *);
204 static bool reference_compatible_p (tree, tree);
205 static conversion *convert_class_to_reference (tree, tree, tree, int);
206 static conversion *direct_reference_binding (tree, conversion *);
207 static bool promoted_arithmetic_type_p (tree);
208 static conversion *conditional_conversion (tree, tree);
209 static char *name_as_c_string (tree, tree, bool *);
210 static tree prep_operand (tree);
211 static void add_candidates (tree, tree, const VEC(tree,gc) *, tree, tree, bool,
212                             tree, tree, int, struct z_candidate **);
213 static conversion *merge_conversion_sequences (conversion *, conversion *);
214 static bool magic_varargs_p (tree);
215 static tree build_temp (tree, tree, int, diagnostic_t *, tsubst_flags_t);
216
217 /* Returns nonzero iff the destructor name specified in NAME matches BASETYPE.
218    NAME can take many forms...  */
219
220 bool
221 check_dtor_name (tree basetype, tree name)
222 {
223   /* Just accept something we've already complained about.  */
224   if (name == error_mark_node)
225     return true;
226
227   if (TREE_CODE (name) == TYPE_DECL)
228     name = TREE_TYPE (name);
229   else if (TYPE_P (name))
230     /* OK */;
231   else if (TREE_CODE (name) == IDENTIFIER_NODE)
232     {
233       if ((MAYBE_CLASS_TYPE_P (basetype)
234            && name == constructor_name (basetype))
235           || (TREE_CODE (basetype) == ENUMERAL_TYPE
236               && name == TYPE_IDENTIFIER (basetype)))
237         return true;
238       else
239         name = get_type_value (name);
240     }
241   else
242     {
243       /* In the case of:
244
245          template <class T> struct S { ~S(); };
246          int i;
247          i.~S();
248
249          NAME will be a class template.  */
250       gcc_assert (DECL_CLASS_TEMPLATE_P (name));
251       return false;
252     }
253
254   if (!name || name == error_mark_node)
255     return false;
256   return same_type_p (TYPE_MAIN_VARIANT (basetype), TYPE_MAIN_VARIANT (name));
257 }
258
259 /* We want the address of a function or method.  We avoid creating a
260    pointer-to-member function.  */
261
262 tree
263 build_addr_func (tree function)
264 {
265   tree type = TREE_TYPE (function);
266
267   /* We have to do these by hand to avoid real pointer to member
268      functions.  */
269   if (TREE_CODE (type) == METHOD_TYPE)
270     {
271       if (TREE_CODE (function) == OFFSET_REF)
272         {
273           tree object = build_address (TREE_OPERAND (function, 0));
274           return get_member_function_from_ptrfunc (&object,
275                                                    TREE_OPERAND (function, 1));
276         }
277       function = build_address (function);
278     }
279   else
280     function = decay_conversion (function);
281
282   return function;
283 }
284
285 /* Build a CALL_EXPR, we can handle FUNCTION_TYPEs, METHOD_TYPEs, or
286    POINTER_TYPE to those.  Note, pointer to member function types
287    (TYPE_PTRMEMFUNC_P) must be handled by our callers.  There are
288    two variants.  build_call_a is the primitive taking an array of
289    arguments, while build_call_n is a wrapper that handles varargs.  */
290
291 tree
292 build_call_n (tree function, int n, ...)
293 {
294   if (n == 0)
295     return build_call_a (function, 0, NULL);
296   else
297     {
298       tree *argarray = XALLOCAVEC (tree, n);
299       va_list ap;
300       int i;
301
302       va_start (ap, n);
303       for (i = 0; i < n; i++)
304         argarray[i] = va_arg (ap, tree);
305       va_end (ap);
306       return build_call_a (function, n, argarray);
307     }
308 }
309
310 tree
311 build_call_a (tree function, int n, tree *argarray)
312 {
313   int is_constructor = 0;
314   int nothrow;
315   tree decl;
316   tree result_type;
317   tree fntype;
318   int i;
319
320   function = build_addr_func (function);
321
322   gcc_assert (TYPE_PTR_P (TREE_TYPE (function)));
323   fntype = TREE_TYPE (TREE_TYPE (function));
324   gcc_assert (TREE_CODE (fntype) == FUNCTION_TYPE
325               || TREE_CODE (fntype) == METHOD_TYPE);
326   result_type = TREE_TYPE (fntype);
327   /* An rvalue has no cv-qualifiers.  */
328   if (SCALAR_TYPE_P (result_type) || VOID_TYPE_P (result_type))
329     result_type = cv_unqualified (result_type);
330
331   if (TREE_CODE (function) == ADDR_EXPR
332       && TREE_CODE (TREE_OPERAND (function, 0)) == FUNCTION_DECL)
333     {
334       decl = TREE_OPERAND (function, 0);
335       if (!TREE_USED (decl))
336         {
337           /* We invoke build_call directly for several library
338              functions.  These may have been declared normally if
339              we're building libgcc, so we can't just check
340              DECL_ARTIFICIAL.  */
341           gcc_assert (DECL_ARTIFICIAL (decl)
342                       || !strncmp (IDENTIFIER_POINTER (DECL_NAME (decl)),
343                                    "__", 2));
344           mark_used (decl);
345         }
346     }
347   else
348     decl = NULL_TREE;
349
350   /* We check both the decl and the type; a function may be known not to
351      throw without being declared throw().  */
352   nothrow = ((decl && TREE_NOTHROW (decl))
353              || TYPE_NOTHROW_P (TREE_TYPE (TREE_TYPE (function))));
354
355   if (!nothrow && cfun && cp_function_chain)
356     cp_function_chain->can_throw = 1;
357
358   if (decl && TREE_THIS_VOLATILE (decl) && cfun && cp_function_chain)
359     current_function_returns_abnormally = 1;
360
361   if (decl && TREE_DEPRECATED (decl))
362     warn_deprecated_use (decl, NULL_TREE);
363   require_complete_eh_spec_types (fntype, decl);
364
365   if (decl && DECL_CONSTRUCTOR_P (decl))
366     is_constructor = 1;
367
368   /* Don't pass empty class objects by value.  This is useful
369      for tags in STL, which are used to control overload resolution.
370      We don't need to handle other cases of copying empty classes.  */
371   if (! decl || ! DECL_BUILT_IN (decl))
372     for (i = 0; i < n; i++)
373       if (is_empty_class (TREE_TYPE (argarray[i]))
374           && ! TREE_ADDRESSABLE (TREE_TYPE (argarray[i])))
375         {
376           tree t = build0 (EMPTY_CLASS_EXPR, TREE_TYPE (argarray[i]));
377           argarray[i] = build2 (COMPOUND_EXPR, TREE_TYPE (t),
378                                 argarray[i], t);
379         }
380
381   function = build_call_array_loc (input_location,
382                                    result_type, function, n, argarray);
383   TREE_HAS_CONSTRUCTOR (function) = is_constructor;
384   TREE_NOTHROW (function) = nothrow;
385
386   return function;
387 }
388
389 /* Build something of the form ptr->method (args)
390    or object.method (args).  This can also build
391    calls to constructors, and find friends.
392
393    Member functions always take their class variable
394    as a pointer.
395
396    INSTANCE is a class instance.
397
398    NAME is the name of the method desired, usually an IDENTIFIER_NODE.
399
400    PARMS help to figure out what that NAME really refers to.
401
402    BASETYPE_PATH, if non-NULL, contains a chain from the type of INSTANCE
403    down to the real instance type to use for access checking.  We need this
404    information to get protected accesses correct.
405
406    FLAGS is the logical disjunction of zero or more LOOKUP_
407    flags.  See cp-tree.h for more info.
408
409    If this is all OK, calls build_function_call with the resolved
410    member function.
411
412    This function must also handle being called to perform
413    initialization, promotion/coercion of arguments, and
414    instantiation of default parameters.
415
416    Note that NAME may refer to an instance variable name.  If
417    `operator()()' is defined for the type of that field, then we return
418    that result.  */
419
420 /* New overloading code.  */
421
422 typedef struct z_candidate z_candidate;
423
424 typedef struct candidate_warning candidate_warning;
425 struct candidate_warning {
426   z_candidate *loser;
427   candidate_warning *next;
428 };
429
430 /* Information for providing diagnostics about why overloading failed.  */
431
432 enum rejection_reason_code {
433   rr_none,
434   rr_arity,
435   rr_explicit_conversion,
436   rr_arg_conversion,
437   rr_bad_arg_conversion,
438   rr_template_unification,
439   rr_template_instantiation,
440   rr_invalid_copy
441 };
442
443 struct conversion_info {
444   /* The index of the argument, 0-based.  */
445   int n_arg;
446   /* The type of the actual argument.  */
447   tree from_type;
448   /* The type of the formal argument.  */
449   tree to_type;
450 };
451   
452 struct rejection_reason {
453   enum rejection_reason_code code;
454   union {
455     /* Information about an arity mismatch.  */
456     struct {
457       /* The expected number of arguments.  */
458       int expected;
459       /* The actual number of arguments in the call.  */
460       int actual;
461       /* Whether the call was a varargs call.  */
462       bool call_varargs_p;
463     } arity;
464     /* Information about an argument conversion mismatch.  */
465     struct conversion_info conversion;
466     /* Same, but for bad argument conversions.  */
467     struct conversion_info bad_conversion;
468     /* Information about template unification failures.  These are the
469        parameters passed to fn_type_unification.  */
470     struct {
471       tree tmpl;
472       tree explicit_targs;
473       tree targs;
474       const tree *args;
475       unsigned int nargs;
476       tree return_type;
477       unification_kind_t strict;
478       int flags;
479     } template_unification;
480     /* Information about template instantiation failures.  These are the
481        parameters passed to instantiate_template.  */
482     struct {
483       tree tmpl;
484       tree targs;
485     } template_instantiation;
486   } u;
487 };
488
489 struct z_candidate {
490   /* The FUNCTION_DECL that will be called if this candidate is
491      selected by overload resolution.  */
492   tree fn;
493   /* If not NULL_TREE, the first argument to use when calling this
494      function.  */
495   tree first_arg;
496   /* The rest of the arguments to use when calling this function.  If
497      there are no further arguments this may be NULL or it may be an
498      empty vector.  */
499   const VEC(tree,gc) *args;
500   /* The implicit conversion sequences for each of the arguments to
501      FN.  */
502   conversion **convs;
503   /* The number of implicit conversion sequences.  */
504   size_t num_convs;
505   /* If FN is a user-defined conversion, the standard conversion
506      sequence from the type returned by FN to the desired destination
507      type.  */
508   conversion *second_conv;
509   int viable;
510   struct rejection_reason *reason;
511   /* If FN is a member function, the binfo indicating the path used to
512      qualify the name of FN at the call site.  This path is used to
513      determine whether or not FN is accessible if it is selected by
514      overload resolution.  The DECL_CONTEXT of FN will always be a
515      (possibly improper) base of this binfo.  */
516   tree access_path;
517   /* If FN is a non-static member function, the binfo indicating the
518      subobject to which the `this' pointer should be converted if FN
519      is selected by overload resolution.  The type pointed to the by
520      the `this' pointer must correspond to the most derived class
521      indicated by the CONVERSION_PATH.  */
522   tree conversion_path;
523   tree template_decl;
524   tree explicit_targs;
525   candidate_warning *warnings;
526   z_candidate *next;
527 };
528
529 /* Returns true iff T is a null pointer constant in the sense of
530    [conv.ptr].  */
531
532 bool
533 null_ptr_cst_p (tree t)
534 {
535   /* [conv.ptr]
536
537      A null pointer constant is an integral constant expression
538      (_expr.const_) rvalue of integer type that evaluates to zero or
539      an rvalue of type std::nullptr_t. */
540   if (NULLPTR_TYPE_P (TREE_TYPE (t)))
541     return true;
542   if (CP_INTEGRAL_TYPE_P (TREE_TYPE (t)))
543     {
544       if (cxx_dialect >= cxx0x)
545         {
546           t = fold_non_dependent_expr (t);
547           t = maybe_constant_value (t);
548           if (TREE_CONSTANT (t) && integer_zerop (t))
549             return true;
550         }
551       else
552         {
553           t = integral_constant_value (t);
554           STRIP_NOPS (t);
555           if (integer_zerop (t) && !TREE_OVERFLOW (t))
556             return true;
557         }
558     }
559   return false;
560 }
561
562 /* Returns nonzero if PARMLIST consists of only default parms,
563    ellipsis, and/or undeduced parameter packs.  */
564
565 bool
566 sufficient_parms_p (const_tree parmlist)
567 {
568   for (; parmlist && parmlist != void_list_node;
569        parmlist = TREE_CHAIN (parmlist))
570     if (!TREE_PURPOSE (parmlist)
571         && !PACK_EXPANSION_P (TREE_VALUE (parmlist)))
572       return false;
573   return true;
574 }
575
576 /* Allocate N bytes of memory from the conversion obstack.  The memory
577    is zeroed before being returned.  */
578
579 static void *
580 conversion_obstack_alloc (size_t n)
581 {
582   void *p;
583   if (!conversion_obstack_initialized)
584     {
585       gcc_obstack_init (&conversion_obstack);
586       conversion_obstack_initialized = true;
587     }
588   p = obstack_alloc (&conversion_obstack, n);
589   memset (p, 0, n);
590   return p;
591 }
592
593 /* Allocate rejection reasons.  */
594
595 static struct rejection_reason *
596 alloc_rejection (enum rejection_reason_code code)
597 {
598   struct rejection_reason *p;
599   p = (struct rejection_reason *) conversion_obstack_alloc (sizeof *p);
600   p->code = code;
601   return p;
602 }
603
604 static struct rejection_reason *
605 arity_rejection (tree first_arg, int expected, int actual)
606 {
607   struct rejection_reason *r = alloc_rejection (rr_arity);
608   int adjust = first_arg != NULL_TREE;
609   r->u.arity.expected = expected - adjust;
610   r->u.arity.actual = actual - adjust;
611   return r;
612 }
613
614 static struct rejection_reason *
615 arg_conversion_rejection (tree first_arg, int n_arg, tree from, tree to)
616 {
617   struct rejection_reason *r = alloc_rejection (rr_arg_conversion);
618   int adjust = first_arg != NULL_TREE;
619   r->u.conversion.n_arg = n_arg - adjust;
620   r->u.conversion.from_type = from;
621   r->u.conversion.to_type = to;
622   return r;
623 }
624
625 static struct rejection_reason *
626 bad_arg_conversion_rejection (tree first_arg, int n_arg, tree from, tree to)
627 {
628   struct rejection_reason *r = alloc_rejection (rr_bad_arg_conversion);
629   int adjust = first_arg != NULL_TREE;
630   r->u.bad_conversion.n_arg = n_arg - adjust;
631   r->u.bad_conversion.from_type = from;
632   r->u.bad_conversion.to_type = to;
633   return r;
634 }
635
636 static struct rejection_reason *
637 explicit_conversion_rejection (tree from, tree to)
638 {
639   struct rejection_reason *r = alloc_rejection (rr_explicit_conversion);
640   r->u.conversion.n_arg = 0;
641   r->u.conversion.from_type = from;
642   r->u.conversion.to_type = to;
643   return r;
644 }
645
646 static struct rejection_reason *
647 template_unification_rejection (tree tmpl, tree explicit_targs, tree targs,
648                                 const tree *args, unsigned int nargs,
649                                 tree return_type, unification_kind_t strict,
650                                 int flags)
651 {
652   size_t args_n_bytes = sizeof (*args) * nargs;
653   tree *args1 = (tree *) conversion_obstack_alloc (args_n_bytes);
654   struct rejection_reason *r = alloc_rejection (rr_template_unification);
655   r->u.template_unification.tmpl = tmpl;
656   r->u.template_unification.explicit_targs = explicit_targs;
657   r->u.template_unification.targs = targs;
658   /* Copy args to our own storage.  */
659   memcpy (args1, args, args_n_bytes);
660   r->u.template_unification.args = args1;
661   r->u.template_unification.nargs = nargs;
662   r->u.template_unification.return_type = return_type;
663   r->u.template_unification.strict = strict;
664   r->u.template_unification.flags = flags;
665   return r;
666 }
667
668 static struct rejection_reason *
669 template_unification_error_rejection (void)
670 {
671   return alloc_rejection (rr_template_unification);
672 }
673
674 static struct rejection_reason *
675 template_instantiation_rejection (tree tmpl, tree targs)
676 {
677   struct rejection_reason *r = alloc_rejection (rr_template_instantiation);
678   r->u.template_instantiation.tmpl = tmpl;
679   r->u.template_instantiation.targs = targs;
680   return r;
681 }
682
683 static struct rejection_reason *
684 invalid_copy_with_fn_template_rejection (void)
685 {
686   struct rejection_reason *r = alloc_rejection (rr_invalid_copy);
687   return r;
688 }
689
690 /* Dynamically allocate a conversion.  */
691
692 static conversion *
693 alloc_conversion (conversion_kind kind)
694 {
695   conversion *c;
696   c = (conversion *) conversion_obstack_alloc (sizeof (conversion));
697   c->kind = kind;
698   return c;
699 }
700
701 #ifdef ENABLE_CHECKING
702
703 /* Make sure that all memory on the conversion obstack has been
704    freed.  */
705
706 void
707 validate_conversion_obstack (void)
708 {
709   if (conversion_obstack_initialized)
710     gcc_assert ((obstack_next_free (&conversion_obstack)
711                  == obstack_base (&conversion_obstack)));
712 }
713
714 #endif /* ENABLE_CHECKING */
715
716 /* Dynamically allocate an array of N conversions.  */
717
718 static conversion **
719 alloc_conversions (size_t n)
720 {
721   return (conversion **) conversion_obstack_alloc (n * sizeof (conversion *));
722 }
723
724 static conversion *
725 build_conv (conversion_kind code, tree type, conversion *from)
726 {
727   conversion *t;
728   conversion_rank rank = CONVERSION_RANK (from);
729
730   /* Note that the caller is responsible for filling in t->cand for
731      user-defined conversions.  */
732   t = alloc_conversion (code);
733   t->type = type;
734   t->u.next = from;
735
736   switch (code)
737     {
738     case ck_ptr:
739     case ck_pmem:
740     case ck_base:
741     case ck_std:
742       if (rank < cr_std)
743         rank = cr_std;
744       break;
745
746     case ck_qual:
747       if (rank < cr_exact)
748         rank = cr_exact;
749       break;
750
751     default:
752       break;
753     }
754   t->rank = rank;
755   t->user_conv_p = (code == ck_user || from->user_conv_p);
756   t->bad_p = from->bad_p;
757   t->base_p = false;
758   return t;
759 }
760
761 /* Represent a conversion from CTOR, a braced-init-list, to TYPE, a
762    specialization of std::initializer_list<T>, if such a conversion is
763    possible.  */
764
765 static conversion *
766 build_list_conv (tree type, tree ctor, int flags)
767 {
768   tree elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (type), 0);
769   unsigned len = CONSTRUCTOR_NELTS (ctor);
770   conversion **subconvs = alloc_conversions (len);
771   conversion *t;
772   unsigned i;
773   tree val;
774
775   /* Within a list-initialization we can have more user-defined
776      conversions.  */
777   flags &= ~LOOKUP_NO_CONVERSION;
778   /* But no narrowing conversions.  */
779   flags |= LOOKUP_NO_NARROWING;
780
781   FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor), i, val)
782     {
783       conversion *sub
784         = implicit_conversion (elttype, TREE_TYPE (val), val,
785                                false, flags);
786       if (sub == NULL)
787         return NULL;
788
789       subconvs[i] = sub;
790     }
791
792   t = alloc_conversion (ck_list);
793   t->type = type;
794   t->u.list = subconvs;
795   t->rank = cr_exact;
796
797   for (i = 0; i < len; ++i)
798     {
799       conversion *sub = subconvs[i];
800       if (sub->rank > t->rank)
801         t->rank = sub->rank;
802       if (sub->user_conv_p)
803         t->user_conv_p = true;
804       if (sub->bad_p)
805         t->bad_p = true;
806     }
807
808   return t;
809 }
810
811 /* Subroutine of build_aggr_conv: check whether CTOR, a braced-init-list,
812    is a valid aggregate initializer for array type ATYPE.  */
813
814 static bool
815 can_convert_array (tree atype, tree ctor, int flags)
816 {
817   unsigned i;
818   tree elttype = TREE_TYPE (atype);
819   for (i = 0; i < CONSTRUCTOR_NELTS (ctor); ++i)
820     {
821       tree val = CONSTRUCTOR_ELT (ctor, i)->value;
822       bool ok;
823       if (TREE_CODE (elttype) == ARRAY_TYPE
824           && TREE_CODE (val) == CONSTRUCTOR)
825         ok = can_convert_array (elttype, val, flags);
826       else
827         ok = can_convert_arg (elttype, TREE_TYPE (val), val, flags);
828       if (!ok)
829         return false;
830     }
831   return true;
832 }
833
834 /* Represent a conversion from CTOR, a braced-init-list, to TYPE, an
835    aggregate class, if such a conversion is possible.  */
836
837 static conversion *
838 build_aggr_conv (tree type, tree ctor, int flags)
839 {
840   unsigned HOST_WIDE_INT i = 0;
841   conversion *c;
842   tree field = next_initializable_field (TYPE_FIELDS (type));
843   tree empty_ctor = NULL_TREE;
844
845   for (; field; field = next_initializable_field (DECL_CHAIN (field)))
846     {
847       tree ftype = TREE_TYPE (field);
848       tree val;
849       bool ok;
850
851       if (i < CONSTRUCTOR_NELTS (ctor))
852         val = CONSTRUCTOR_ELT (ctor, i)->value;
853       else
854         {
855           if (empty_ctor == NULL_TREE)
856             empty_ctor = build_constructor (init_list_type_node, NULL);
857           val = empty_ctor;
858         }
859       ++i;
860
861       if (TREE_CODE (ftype) == ARRAY_TYPE
862           && TREE_CODE (val) == CONSTRUCTOR)
863         ok = can_convert_array (ftype, val, flags);
864       else
865         ok = can_convert_arg (ftype, TREE_TYPE (val), val, flags);
866
867       if (!ok)
868         return NULL;
869
870       if (TREE_CODE (type) == UNION_TYPE)
871         break;
872     }
873
874   if (i < CONSTRUCTOR_NELTS (ctor))
875     return NULL;
876
877   c = alloc_conversion (ck_aggr);
878   c->type = type;
879   c->rank = cr_exact;
880   c->user_conv_p = true;
881   c->u.next = NULL;
882   return c;
883 }
884
885 /* Represent a conversion from CTOR, a braced-init-list, to TYPE, an
886    array type, if such a conversion is possible.  */
887
888 static conversion *
889 build_array_conv (tree type, tree ctor, int flags)
890 {
891   conversion *c;
892   unsigned HOST_WIDE_INT len = CONSTRUCTOR_NELTS (ctor);
893   tree elttype = TREE_TYPE (type);
894   unsigned i;
895   tree val;
896   bool bad = false;
897   bool user = false;
898   enum conversion_rank rank = cr_exact;
899
900   if (TYPE_DOMAIN (type))
901     {
902       unsigned HOST_WIDE_INT alen = tree_low_cst (array_type_nelts_top (type), 1);
903       if (alen < len)
904         return NULL;
905     }
906
907   FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor), i, val)
908     {
909       conversion *sub
910         = implicit_conversion (elttype, TREE_TYPE (val), val,
911                                false, flags);
912       if (sub == NULL)
913         return NULL;
914
915       if (sub->rank > rank)
916         rank = sub->rank;
917       if (sub->user_conv_p)
918         user = true;
919       if (sub->bad_p)
920         bad = true;
921     }
922
923   c = alloc_conversion (ck_aggr);
924   c->type = type;
925   c->rank = rank;
926   c->user_conv_p = user;
927   c->bad_p = bad;
928   c->u.next = NULL;
929   return c;
930 }
931
932 /* Represent a conversion from CTOR, a braced-init-list, to TYPE, a
933    complex type, if such a conversion is possible.  */
934
935 static conversion *
936 build_complex_conv (tree type, tree ctor, int flags)
937 {
938   conversion *c;
939   unsigned HOST_WIDE_INT len = CONSTRUCTOR_NELTS (ctor);
940   tree elttype = TREE_TYPE (type);
941   unsigned i;
942   tree val;
943   bool bad = false;
944   bool user = false;
945   enum conversion_rank rank = cr_exact;
946
947   if (len != 2)
948     return NULL;
949
950   FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor), i, val)
951     {
952       conversion *sub
953         = implicit_conversion (elttype, TREE_TYPE (val), val,
954                                false, flags);
955       if (sub == NULL)
956         return NULL;
957
958       if (sub->rank > rank)
959         rank = sub->rank;
960       if (sub->user_conv_p)
961         user = true;
962       if (sub->bad_p)
963         bad = true;
964     }
965
966   c = alloc_conversion (ck_aggr);
967   c->type = type;
968   c->rank = rank;
969   c->user_conv_p = user;
970   c->bad_p = bad;
971   c->u.next = NULL;
972   return c;
973 }
974
975 /* Build a representation of the identity conversion from EXPR to
976    itself.  The TYPE should match the type of EXPR, if EXPR is non-NULL.  */
977
978 static conversion *
979 build_identity_conv (tree type, tree expr)
980 {
981   conversion *c;
982
983   c = alloc_conversion (ck_identity);
984   c->type = type;
985   c->u.expr = expr;
986
987   return c;
988 }
989
990 /* Converting from EXPR to TYPE was ambiguous in the sense that there
991    were multiple user-defined conversions to accomplish the job.
992    Build a conversion that indicates that ambiguity.  */
993
994 static conversion *
995 build_ambiguous_conv (tree type, tree expr)
996 {
997   conversion *c;
998
999   c = alloc_conversion (ck_ambig);
1000   c->type = type;
1001   c->u.expr = expr;
1002
1003   return c;
1004 }
1005
1006 tree
1007 strip_top_quals (tree t)
1008 {
1009   if (TREE_CODE (t) == ARRAY_TYPE)
1010     return t;
1011   return cp_build_qualified_type (t, 0);
1012 }
1013
1014 /* Returns the standard conversion path (see [conv]) from type FROM to type
1015    TO, if any.  For proper handling of null pointer constants, you must
1016    also pass the expression EXPR to convert from.  If C_CAST_P is true,
1017    this conversion is coming from a C-style cast.  */
1018
1019 static conversion *
1020 standard_conversion (tree to, tree from, tree expr, bool c_cast_p,
1021                      int flags)
1022 {
1023   enum tree_code fcode, tcode;
1024   conversion *conv;
1025   bool fromref = false;
1026   tree qualified_to;
1027
1028   to = non_reference (to);
1029   if (TREE_CODE (from) == REFERENCE_TYPE)
1030     {
1031       fromref = true;
1032       from = TREE_TYPE (from);
1033     }
1034   qualified_to = to;
1035   to = strip_top_quals (to);
1036   from = strip_top_quals (from);
1037
1038   if ((TYPE_PTRFN_P (to) || TYPE_PTRMEMFUNC_P (to))
1039       && expr && type_unknown_p (expr))
1040     {
1041       tsubst_flags_t tflags = tf_conv;
1042       if (!(flags & LOOKUP_PROTECT))
1043         tflags |= tf_no_access_control;
1044       expr = instantiate_type (to, expr, tflags);
1045       if (expr == error_mark_node)
1046         return NULL;
1047       from = TREE_TYPE (expr);
1048     }
1049
1050   fcode = TREE_CODE (from);
1051   tcode = TREE_CODE (to);
1052
1053   conv = build_identity_conv (from, expr);
1054   if (fcode == FUNCTION_TYPE || fcode == ARRAY_TYPE)
1055     {
1056       from = type_decays_to (from);
1057       fcode = TREE_CODE (from);
1058       conv = build_conv (ck_lvalue, from, conv);
1059     }
1060   else if (fromref || (expr && lvalue_p (expr)))
1061     {
1062       if (expr)
1063         {
1064           tree bitfield_type;
1065           bitfield_type = is_bitfield_expr_with_lowered_type (expr);
1066           if (bitfield_type)
1067             {
1068               from = strip_top_quals (bitfield_type);
1069               fcode = TREE_CODE (from);
1070             }
1071         }
1072       conv = build_conv (ck_rvalue, from, conv);
1073       if (flags & LOOKUP_PREFER_RVALUE)
1074         conv->rvaluedness_matches_p = true;
1075     }
1076
1077    /* Allow conversion between `__complex__' data types.  */
1078   if (tcode == COMPLEX_TYPE && fcode == COMPLEX_TYPE)
1079     {
1080       /* The standard conversion sequence to convert FROM to TO is
1081          the standard conversion sequence to perform componentwise
1082          conversion.  */
1083       conversion *part_conv = standard_conversion
1084         (TREE_TYPE (to), TREE_TYPE (from), NULL_TREE, c_cast_p, flags);
1085
1086       if (part_conv)
1087         {
1088           conv = build_conv (part_conv->kind, to, conv);
1089           conv->rank = part_conv->rank;
1090         }
1091       else
1092         conv = NULL;
1093
1094       return conv;
1095     }
1096
1097   if (same_type_p (from, to))
1098     {
1099       if (CLASS_TYPE_P (to) && conv->kind == ck_rvalue)
1100         conv->type = qualified_to;
1101       return conv;
1102     }
1103
1104   /* [conv.ptr]
1105      A null pointer constant can be converted to a pointer type; ... A
1106      null pointer constant of integral type can be converted to an
1107      rvalue of type std::nullptr_t. */
1108   if ((tcode == POINTER_TYPE || TYPE_PTR_TO_MEMBER_P (to)
1109        || NULLPTR_TYPE_P (to))
1110       && expr && null_ptr_cst_p (expr))
1111     conv = build_conv (ck_std, to, conv);
1112   else if ((tcode == INTEGER_TYPE && fcode == POINTER_TYPE)
1113            || (tcode == POINTER_TYPE && fcode == INTEGER_TYPE))
1114     {
1115       /* For backwards brain damage compatibility, allow interconversion of
1116          pointers and integers with a pedwarn.  */
1117       conv = build_conv (ck_std, to, conv);
1118       conv->bad_p = true;
1119     }
1120   else if (UNSCOPED_ENUM_P (to) && fcode == INTEGER_TYPE)
1121     {
1122       /* For backwards brain damage compatibility, allow interconversion of
1123          enums and integers with a pedwarn.  */
1124       conv = build_conv (ck_std, to, conv);
1125       conv->bad_p = true;
1126     }
1127   else if ((tcode == POINTER_TYPE && fcode == POINTER_TYPE)
1128            || (TYPE_PTRMEM_P (to) && TYPE_PTRMEM_P (from)))
1129     {
1130       tree to_pointee;
1131       tree from_pointee;
1132
1133       if (tcode == POINTER_TYPE
1134           && same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (from),
1135                                                         TREE_TYPE (to)))
1136         ;
1137       else if (VOID_TYPE_P (TREE_TYPE (to))
1138                && !TYPE_PTRMEM_P (from)
1139                && TREE_CODE (TREE_TYPE (from)) != FUNCTION_TYPE)
1140         {
1141           tree nfrom = TREE_TYPE (from);
1142           from = build_pointer_type
1143             (cp_build_qualified_type (void_type_node, 
1144                                       cp_type_quals (nfrom)));
1145           conv = build_conv (ck_ptr, from, conv);
1146         }
1147       else if (TYPE_PTRMEM_P (from))
1148         {
1149           tree fbase = TYPE_PTRMEM_CLASS_TYPE (from);
1150           tree tbase = TYPE_PTRMEM_CLASS_TYPE (to);
1151
1152           if (DERIVED_FROM_P (fbase, tbase)
1153               && (same_type_ignoring_top_level_qualifiers_p
1154                   (TYPE_PTRMEM_POINTED_TO_TYPE (from),
1155                    TYPE_PTRMEM_POINTED_TO_TYPE (to))))
1156             {
1157               from = build_ptrmem_type (tbase,
1158                                         TYPE_PTRMEM_POINTED_TO_TYPE (from));
1159               conv = build_conv (ck_pmem, from, conv);
1160             }
1161           else if (!same_type_p (fbase, tbase))
1162             return NULL;
1163         }
1164       else if (CLASS_TYPE_P (TREE_TYPE (from))
1165                && CLASS_TYPE_P (TREE_TYPE (to))
1166                /* [conv.ptr]
1167
1168                   An rvalue of type "pointer to cv D," where D is a
1169                   class type, can be converted to an rvalue of type
1170                   "pointer to cv B," where B is a base class (clause
1171                   _class.derived_) of D.  If B is an inaccessible
1172                   (clause _class.access_) or ambiguous
1173                   (_class.member.lookup_) base class of D, a program
1174                   that necessitates this conversion is ill-formed.
1175                   Therefore, we use DERIVED_FROM_P, and do not check
1176                   access or uniqueness.  */
1177                && DERIVED_FROM_P (TREE_TYPE (to), TREE_TYPE (from)))
1178         {
1179           from =
1180             cp_build_qualified_type (TREE_TYPE (to),
1181                                      cp_type_quals (TREE_TYPE (from)));
1182           from = build_pointer_type (from);
1183           conv = build_conv (ck_ptr, from, conv);
1184           conv->base_p = true;
1185         }
1186
1187       if (tcode == POINTER_TYPE)
1188         {
1189           to_pointee = TREE_TYPE (to);
1190           from_pointee = TREE_TYPE (from);
1191         }
1192       else
1193         {
1194           to_pointee = TYPE_PTRMEM_POINTED_TO_TYPE (to);
1195           from_pointee = TYPE_PTRMEM_POINTED_TO_TYPE (from);
1196         }
1197
1198       if (same_type_p (from, to))
1199         /* OK */;
1200       else if (c_cast_p && comp_ptr_ttypes_const (to, from))
1201         /* In a C-style cast, we ignore CV-qualification because we
1202            are allowed to perform a static_cast followed by a
1203            const_cast.  */
1204         conv = build_conv (ck_qual, to, conv);
1205       else if (!c_cast_p && comp_ptr_ttypes (to_pointee, from_pointee))
1206         conv = build_conv (ck_qual, to, conv);
1207       else if (expr && string_conv_p (to, expr, 0))
1208         /* converting from string constant to char *.  */
1209         conv = build_conv (ck_qual, to, conv);
1210       /* Allow conversions among compatible ObjC pointer types (base
1211          conversions have been already handled above).  */
1212       else if (c_dialect_objc ()
1213                && objc_compare_types (to, from, -4, NULL_TREE))
1214         conv = build_conv (ck_ptr, to, conv);
1215       else if (ptr_reasonably_similar (to_pointee, from_pointee))
1216         {
1217           conv = build_conv (ck_ptr, to, conv);
1218           conv->bad_p = true;
1219         }
1220       else
1221         return NULL;
1222
1223       from = to;
1224     }
1225   else if (TYPE_PTRMEMFUNC_P (to) && TYPE_PTRMEMFUNC_P (from))
1226     {
1227       tree fromfn = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (from));
1228       tree tofn = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (to));
1229       tree fbase = class_of_this_parm (fromfn);
1230       tree tbase = class_of_this_parm (tofn);
1231
1232       if (!DERIVED_FROM_P (fbase, tbase)
1233           || !same_type_p (TREE_TYPE (fromfn), TREE_TYPE (tofn))
1234           || !compparms (TREE_CHAIN (TYPE_ARG_TYPES (fromfn)),
1235                          TREE_CHAIN (TYPE_ARG_TYPES (tofn)))
1236           || cp_type_quals (fbase) != cp_type_quals (tbase))
1237         return NULL;
1238
1239       from = build_memfn_type (fromfn, tbase, cp_type_quals (tbase));
1240       from = build_ptrmemfunc_type (build_pointer_type (from));
1241       conv = build_conv (ck_pmem, from, conv);
1242       conv->base_p = true;
1243     }
1244   else if (tcode == BOOLEAN_TYPE)
1245     {
1246       /* [conv.bool]
1247
1248           An rvalue of arithmetic, unscoped enumeration, pointer, or
1249           pointer to member type can be converted to an rvalue of type
1250           bool. ... An rvalue of type std::nullptr_t can be converted
1251           to an rvalue of type bool;  */
1252       if (ARITHMETIC_TYPE_P (from)
1253           || UNSCOPED_ENUM_P (from)
1254           || fcode == POINTER_TYPE
1255           || TYPE_PTR_TO_MEMBER_P (from)
1256           || NULLPTR_TYPE_P (from))
1257         {
1258           conv = build_conv (ck_std, to, conv);
1259           if (fcode == POINTER_TYPE
1260               || TYPE_PTRMEM_P (from)
1261               || (TYPE_PTRMEMFUNC_P (from)
1262                   && conv->rank < cr_pbool)
1263               || NULLPTR_TYPE_P (from))
1264             conv->rank = cr_pbool;
1265           return conv;
1266         }
1267
1268       return NULL;
1269     }
1270   /* We don't check for ENUMERAL_TYPE here because there are no standard
1271      conversions to enum type.  */
1272   /* As an extension, allow conversion to complex type.  */
1273   else if (ARITHMETIC_TYPE_P (to))
1274     {
1275       if (! (INTEGRAL_CODE_P (fcode) || fcode == REAL_TYPE)
1276           || SCOPED_ENUM_P (from))
1277         return NULL;
1278       conv = build_conv (ck_std, to, conv);
1279
1280       /* Give this a better rank if it's a promotion.  */
1281       if (same_type_p (to, type_promotes_to (from))
1282           && conv->u.next->rank <= cr_promotion)
1283         conv->rank = cr_promotion;
1284     }
1285   else if (fcode == VECTOR_TYPE && tcode == VECTOR_TYPE
1286            && vector_types_convertible_p (from, to, false))
1287     return build_conv (ck_std, to, conv);
1288   else if (MAYBE_CLASS_TYPE_P (to) && MAYBE_CLASS_TYPE_P (from)
1289            && is_properly_derived_from (from, to))
1290     {
1291       if (conv->kind == ck_rvalue)
1292         conv = conv->u.next;
1293       conv = build_conv (ck_base, to, conv);
1294       /* The derived-to-base conversion indicates the initialization
1295          of a parameter with base type from an object of a derived
1296          type.  A temporary object is created to hold the result of
1297          the conversion unless we're binding directly to a reference.  */
1298       conv->need_temporary_p = !(flags & LOOKUP_NO_TEMP_BIND);
1299     }
1300   else
1301     return NULL;
1302
1303   if (flags & LOOKUP_NO_NARROWING)
1304     conv->check_narrowing = true;
1305
1306   return conv;
1307 }
1308
1309 /* Returns nonzero if T1 is reference-related to T2.  */
1310
1311 bool
1312 reference_related_p (tree t1, tree t2)
1313 {
1314   if (t1 == error_mark_node || t2 == error_mark_node)
1315     return false;
1316
1317   t1 = TYPE_MAIN_VARIANT (t1);
1318   t2 = TYPE_MAIN_VARIANT (t2);
1319
1320   /* [dcl.init.ref]
1321
1322      Given types "cv1 T1" and "cv2 T2," "cv1 T1" is reference-related
1323      to "cv2 T2" if T1 is the same type as T2, or T1 is a base class
1324      of T2.  */
1325   return (same_type_p (t1, t2)
1326           || (CLASS_TYPE_P (t1) && CLASS_TYPE_P (t2)
1327               && DERIVED_FROM_P (t1, t2)));
1328 }
1329
1330 /* Returns nonzero if T1 is reference-compatible with T2.  */
1331
1332 static bool
1333 reference_compatible_p (tree t1, tree t2)
1334 {
1335   /* [dcl.init.ref]
1336
1337      "cv1 T1" is reference compatible with "cv2 T2" if T1 is
1338      reference-related to T2 and cv1 is the same cv-qualification as,
1339      or greater cv-qualification than, cv2.  */
1340   return (reference_related_p (t1, t2)
1341           && at_least_as_qualified_p (t1, t2));
1342 }
1343
1344 /* Determine whether or not the EXPR (of class type S) can be
1345    converted to T as in [over.match.ref].  */
1346
1347 static conversion *
1348 convert_class_to_reference_1 (tree reference_type, tree s, tree expr, int flags)
1349 {
1350   tree conversions;
1351   tree first_arg;
1352   conversion *conv;
1353   tree t;
1354   struct z_candidate *candidates;
1355   struct z_candidate *cand;
1356   bool any_viable_p;
1357
1358   if (!expr)
1359     return NULL;
1360
1361   conversions = lookup_conversions (s);
1362   if (!conversions)
1363     return NULL;
1364
1365   /* [over.match.ref]
1366
1367      Assuming that "cv1 T" is the underlying type of the reference
1368      being initialized, and "cv S" is the type of the initializer
1369      expression, with S a class type, the candidate functions are
1370      selected as follows:
1371
1372      --The conversion functions of S and its base classes are
1373        considered.  Those that are not hidden within S and yield type
1374        "reference to cv2 T2", where "cv1 T" is reference-compatible
1375        (_dcl.init.ref_) with "cv2 T2", are candidate functions.
1376
1377      The argument list has one argument, which is the initializer
1378      expression.  */
1379
1380   candidates = 0;
1381
1382   /* Conceptually, we should take the address of EXPR and put it in
1383      the argument list.  Unfortunately, however, that can result in
1384      error messages, which we should not issue now because we are just
1385      trying to find a conversion operator.  Therefore, we use NULL,
1386      cast to the appropriate type.  */
1387   first_arg = build_int_cst (build_pointer_type (s), 0);
1388
1389   t = TREE_TYPE (reference_type);
1390
1391   /* We're performing a user-defined conversion to a desired type, so set
1392      this for the benefit of add_candidates.  */
1393   flags |= LOOKUP_NO_CONVERSION;
1394
1395   for (; conversions; conversions = TREE_CHAIN (conversions))
1396     {
1397       tree fns = TREE_VALUE (conversions);
1398       tree binfo = TREE_PURPOSE (conversions);
1399       struct z_candidate *old_candidates = candidates;;
1400
1401       add_candidates (fns, first_arg, NULL, reference_type,
1402                       NULL_TREE, false,
1403                       binfo, TYPE_BINFO (s),
1404                       flags, &candidates);
1405
1406       for (cand = candidates; cand != old_candidates; cand = cand->next)
1407         {
1408           /* Now, see if the conversion function really returns
1409              an lvalue of the appropriate type.  From the
1410              point of view of unification, simply returning an
1411              rvalue of the right type is good enough.  */
1412           tree f = cand->fn;
1413           tree t2 = TREE_TYPE (TREE_TYPE (f));
1414           if (cand->viable == 0)
1415             /* Don't bother looking more closely.  */;
1416           else if (TREE_CODE (t2) != REFERENCE_TYPE
1417                    || !reference_compatible_p (t, TREE_TYPE (t2)))
1418             {
1419               /* No need to set cand->reason here; this is most likely
1420                  an ambiguous match.  If it's not, either this candidate
1421                  will win, or we will have identified a reason for it
1422                  losing already.  */
1423               cand->viable = 0;
1424             }
1425           else
1426             {
1427               conversion *identity_conv;
1428               /* Build a standard conversion sequence indicating the
1429                  binding from the reference type returned by the
1430                  function to the desired REFERENCE_TYPE.  */
1431               identity_conv
1432                 = build_identity_conv (TREE_TYPE (TREE_TYPE
1433                                                   (TREE_TYPE (cand->fn))),
1434                                        NULL_TREE);
1435               cand->second_conv
1436                 = (direct_reference_binding
1437                    (reference_type, identity_conv));
1438               cand->second_conv->rvaluedness_matches_p
1439                 = TYPE_REF_IS_RVALUE (TREE_TYPE (TREE_TYPE (cand->fn)))
1440                   == TYPE_REF_IS_RVALUE (reference_type);
1441               cand->second_conv->bad_p |= cand->convs[0]->bad_p;
1442
1443               /* Don't allow binding of lvalues to rvalue references.  */
1444               if (TYPE_REF_IS_RVALUE (reference_type)
1445                   /* Function lvalues are OK, though.  */
1446                   && TREE_CODE (TREE_TYPE (reference_type)) != FUNCTION_TYPE
1447                   && !TYPE_REF_IS_RVALUE (TREE_TYPE (TREE_TYPE (cand->fn))))
1448                 cand->second_conv->bad_p = true;
1449             }
1450         }
1451     }
1452
1453   candidates = splice_viable (candidates, pedantic, &any_viable_p);
1454   /* If none of the conversion functions worked out, let our caller
1455      know.  */
1456   if (!any_viable_p)
1457     return NULL;
1458
1459   cand = tourney (candidates);
1460   if (!cand)
1461     return NULL;
1462
1463   /* Now that we know that this is the function we're going to use fix
1464      the dummy first argument.  */
1465   gcc_assert (cand->first_arg == NULL_TREE
1466               || integer_zerop (cand->first_arg));
1467   cand->first_arg = build_this (expr);
1468
1469   /* Build a user-defined conversion sequence representing the
1470      conversion.  */
1471   conv = build_conv (ck_user,
1472                      TREE_TYPE (TREE_TYPE (cand->fn)),
1473                      build_identity_conv (TREE_TYPE (expr), expr));
1474   conv->cand = cand;
1475
1476   if (cand->viable == -1)
1477     conv->bad_p = true;
1478
1479   /* Merge it with the standard conversion sequence from the
1480      conversion function's return type to the desired type.  */
1481   cand->second_conv = merge_conversion_sequences (conv, cand->second_conv);
1482
1483   return cand->second_conv;
1484 }
1485
1486 /* Wrapper for above.  */
1487
1488 static conversion *
1489 convert_class_to_reference (tree reference_type, tree s, tree expr, int flags)
1490 {
1491   conversion *ret;
1492   bool subtime = timevar_cond_start (TV_OVERLOAD);
1493   ret = convert_class_to_reference_1 (reference_type, s, expr, flags);
1494   timevar_cond_stop (TV_OVERLOAD, subtime);
1495   return ret;
1496 }
1497
1498 /* A reference of the indicated TYPE is being bound directly to the
1499    expression represented by the implicit conversion sequence CONV.
1500    Return a conversion sequence for this binding.  */
1501
1502 static conversion *
1503 direct_reference_binding (tree type, conversion *conv)
1504 {
1505   tree t;
1506
1507   gcc_assert (TREE_CODE (type) == REFERENCE_TYPE);
1508   gcc_assert (TREE_CODE (conv->type) != REFERENCE_TYPE);
1509
1510   t = TREE_TYPE (type);
1511
1512   /* [over.ics.rank]
1513
1514      When a parameter of reference type binds directly
1515      (_dcl.init.ref_) to an argument expression, the implicit
1516      conversion sequence is the identity conversion, unless the
1517      argument expression has a type that is a derived class of the
1518      parameter type, in which case the implicit conversion sequence is
1519      a derived-to-base Conversion.
1520
1521      If the parameter binds directly to the result of applying a
1522      conversion function to the argument expression, the implicit
1523      conversion sequence is a user-defined conversion sequence
1524      (_over.ics.user_), with the second standard conversion sequence
1525      either an identity conversion or, if the conversion function
1526      returns an entity of a type that is a derived class of the
1527      parameter type, a derived-to-base conversion.  */
1528   if (!same_type_ignoring_top_level_qualifiers_p (t, conv->type))
1529     {
1530       /* Represent the derived-to-base conversion.  */
1531       conv = build_conv (ck_base, t, conv);
1532       /* We will actually be binding to the base-class subobject in
1533          the derived class, so we mark this conversion appropriately.
1534          That way, convert_like knows not to generate a temporary.  */
1535       conv->need_temporary_p = false;
1536     }
1537   return build_conv (ck_ref_bind, type, conv);
1538 }
1539
1540 /* Returns the conversion path from type FROM to reference type TO for
1541    purposes of reference binding.  For lvalue binding, either pass a
1542    reference type to FROM or an lvalue expression to EXPR.  If the
1543    reference will be bound to a temporary, NEED_TEMPORARY_P is set for
1544    the conversion returned.  If C_CAST_P is true, this
1545    conversion is coming from a C-style cast.  */
1546
1547 static conversion *
1548 reference_binding (tree rto, tree rfrom, tree expr, bool c_cast_p, int flags)
1549 {
1550   conversion *conv = NULL;
1551   tree to = TREE_TYPE (rto);
1552   tree from = rfrom;
1553   tree tfrom;
1554   bool related_p;
1555   bool compatible_p;
1556   cp_lvalue_kind is_lvalue = clk_none;
1557
1558   if (TREE_CODE (to) == FUNCTION_TYPE && expr && type_unknown_p (expr))
1559     {
1560       expr = instantiate_type (to, expr, tf_none);
1561       if (expr == error_mark_node)
1562         return NULL;
1563       from = TREE_TYPE (expr);
1564     }
1565
1566   if (TREE_CODE (from) == REFERENCE_TYPE)
1567     {
1568       /* Anything with reference type is an lvalue.  */
1569       is_lvalue = clk_ordinary;
1570       from = TREE_TYPE (from);
1571     }
1572
1573   if (expr && BRACE_ENCLOSED_INITIALIZER_P (expr))
1574     {
1575       maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
1576       conv = implicit_conversion (to, from, expr, c_cast_p,
1577                                   flags);
1578       if (!CLASS_TYPE_P (to)
1579           && CONSTRUCTOR_NELTS (expr) == 1)
1580         {
1581           expr = CONSTRUCTOR_ELT (expr, 0)->value;
1582           if (error_operand_p (expr))
1583             return NULL;
1584           from = TREE_TYPE (expr);
1585         }
1586     }
1587
1588   if (is_lvalue == clk_none && expr)
1589     is_lvalue = real_lvalue_p (expr);
1590
1591   tfrom = from;
1592   if ((is_lvalue & clk_bitfield) != 0)
1593     tfrom = unlowered_expr_type (expr);
1594
1595   /* Figure out whether or not the types are reference-related and
1596      reference compatible.  We have do do this after stripping
1597      references from FROM.  */
1598   related_p = reference_related_p (to, tfrom);
1599   /* If this is a C cast, first convert to an appropriately qualified
1600      type, so that we can later do a const_cast to the desired type.  */
1601   if (related_p && c_cast_p
1602       && !at_least_as_qualified_p (to, tfrom))
1603     to = cp_build_qualified_type (to, cp_type_quals (tfrom));
1604   compatible_p = reference_compatible_p (to, tfrom);
1605
1606   /* Directly bind reference when target expression's type is compatible with
1607      the reference and expression is an lvalue. In DR391, the wording in
1608      [8.5.3/5 dcl.init.ref] is changed to also require direct bindings for
1609      const and rvalue references to rvalues of compatible class type.
1610      We should also do direct bindings for non-class "rvalues" derived from
1611      rvalue references.  */
1612   if (compatible_p
1613       && (is_lvalue
1614           || (((CP_TYPE_CONST_NON_VOLATILE_P (to)
1615                 && !(flags & LOOKUP_NO_TEMP_BIND))
1616                || TYPE_REF_IS_RVALUE (rto))
1617               && (CLASS_TYPE_P (from)
1618                   || TREE_CODE (from) == ARRAY_TYPE
1619                   || (expr && lvalue_p (expr))))))
1620     {
1621       /* [dcl.init.ref]
1622
1623          If the initializer expression
1624
1625          -- is an lvalue (but not an lvalue for a bit-field), and "cv1 T1"
1626             is reference-compatible with "cv2 T2,"
1627
1628          the reference is bound directly to the initializer expression
1629          lvalue.
1630
1631          [...]
1632          If the initializer expression is an rvalue, with T2 a class type,
1633          and "cv1 T1" is reference-compatible with "cv2 T2", the reference
1634          is bound to the object represented by the rvalue or to a sub-object
1635          within that object.  */
1636
1637       conv = build_identity_conv (tfrom, expr);
1638       conv = direct_reference_binding (rto, conv);
1639
1640       if (flags & LOOKUP_PREFER_RVALUE)
1641         /* The top-level caller requested that we pretend that the lvalue
1642            be treated as an rvalue.  */
1643         conv->rvaluedness_matches_p = TYPE_REF_IS_RVALUE (rto);
1644       else
1645         conv->rvaluedness_matches_p 
1646           = (TYPE_REF_IS_RVALUE (rto) == !is_lvalue);
1647
1648       if ((is_lvalue & clk_bitfield) != 0
1649           || ((is_lvalue & clk_packed) != 0 && !TYPE_PACKED (to)))
1650         /* For the purposes of overload resolution, we ignore the fact
1651            this expression is a bitfield or packed field. (In particular,
1652            [over.ics.ref] says specifically that a function with a
1653            non-const reference parameter is viable even if the
1654            argument is a bitfield.)
1655
1656            However, when we actually call the function we must create
1657            a temporary to which to bind the reference.  If the
1658            reference is volatile, or isn't const, then we cannot make
1659            a temporary, so we just issue an error when the conversion
1660            actually occurs.  */
1661         conv->need_temporary_p = true;
1662
1663       /* Don't allow binding of lvalues (other than function lvalues) to
1664          rvalue references.  */
1665       if (is_lvalue && TYPE_REF_IS_RVALUE (rto)
1666           && TREE_CODE (to) != FUNCTION_TYPE
1667           && !(flags & LOOKUP_PREFER_RVALUE))
1668         conv->bad_p = true;
1669
1670       return conv;
1671     }
1672   /* [class.conv.fct] A conversion function is never used to convert a
1673      (possibly cv-qualified) object to the (possibly cv-qualified) same
1674      object type (or a reference to it), to a (possibly cv-qualified) base
1675      class of that type (or a reference to it).... */
1676   else if (CLASS_TYPE_P (from) && !related_p
1677            && !(flags & LOOKUP_NO_CONVERSION))
1678     {
1679       /* [dcl.init.ref]
1680
1681          If the initializer expression
1682
1683          -- has a class type (i.e., T2 is a class type) can be
1684             implicitly converted to an lvalue of type "cv3 T3," where
1685             "cv1 T1" is reference-compatible with "cv3 T3".  (this
1686             conversion is selected by enumerating the applicable
1687             conversion functions (_over.match.ref_) and choosing the
1688             best one through overload resolution.  (_over.match_).
1689
1690         the reference is bound to the lvalue result of the conversion
1691         in the second case.  */
1692       conv = convert_class_to_reference (rto, from, expr, flags);
1693       if (conv)
1694         return conv;
1695     }
1696
1697   /* From this point on, we conceptually need temporaries, even if we
1698      elide them.  Only the cases above are "direct bindings".  */
1699   if (flags & LOOKUP_NO_TEMP_BIND)
1700     return NULL;
1701
1702   /* [over.ics.rank]
1703
1704      When a parameter of reference type is not bound directly to an
1705      argument expression, the conversion sequence is the one required
1706      to convert the argument expression to the underlying type of the
1707      reference according to _over.best.ics_.  Conceptually, this
1708      conversion sequence corresponds to copy-initializing a temporary
1709      of the underlying type with the argument expression.  Any
1710      difference in top-level cv-qualification is subsumed by the
1711      initialization itself and does not constitute a conversion.  */
1712
1713   /* [dcl.init.ref]
1714
1715      Otherwise, the reference shall be to a non-volatile const type.
1716
1717      Under C++0x, [8.5.3/5 dcl.init.ref] it may also be an rvalue reference */
1718   if (!CP_TYPE_CONST_NON_VOLATILE_P (to) && !TYPE_REF_IS_RVALUE (rto))
1719     return NULL;
1720
1721   /* [dcl.init.ref]
1722
1723      Otherwise, a temporary of type "cv1 T1" is created and
1724      initialized from the initializer expression using the rules for a
1725      non-reference copy initialization.  If T1 is reference-related to
1726      T2, cv1 must be the same cv-qualification as, or greater
1727      cv-qualification than, cv2; otherwise, the program is ill-formed.  */
1728   if (related_p && !at_least_as_qualified_p (to, from))
1729     return NULL;
1730
1731   /* We're generating a temporary now, but don't bind any more in the
1732      conversion (specifically, don't slice the temporary returned by a
1733      conversion operator).  */
1734   flags |= LOOKUP_NO_TEMP_BIND;
1735
1736   /* Core issue 899: When [copy-]initializing a temporary to be bound
1737      to the first parameter of a copy constructor (12.8) called with
1738      a single argument in the context of direct-initialization,
1739      explicit conversion functions are also considered.
1740
1741      So don't set LOOKUP_ONLYCONVERTING in that case.  */
1742   if (!(flags & LOOKUP_COPY_PARM))
1743     flags |= LOOKUP_ONLYCONVERTING;
1744
1745   if (!conv)
1746     conv = implicit_conversion (to, from, expr, c_cast_p,
1747                                 flags);
1748   if (!conv)
1749     return NULL;
1750
1751   conv = build_conv (ck_ref_bind, rto, conv);
1752   /* This reference binding, unlike those above, requires the
1753      creation of a temporary.  */
1754   conv->need_temporary_p = true;
1755   conv->rvaluedness_matches_p = TYPE_REF_IS_RVALUE (rto);
1756
1757   return conv;
1758 }
1759
1760 /* Returns the implicit conversion sequence (see [over.ics]) from type
1761    FROM to type TO.  The optional expression EXPR may affect the
1762    conversion.  FLAGS are the usual overloading flags.  If C_CAST_P is
1763    true, this conversion is coming from a C-style cast.  */
1764
1765 static conversion *
1766 implicit_conversion (tree to, tree from, tree expr, bool c_cast_p,
1767                      int flags)
1768 {
1769   conversion *conv;
1770
1771   if (from == error_mark_node || to == error_mark_node
1772       || expr == error_mark_node)
1773     return NULL;
1774
1775   if (TREE_CODE (to) == REFERENCE_TYPE)
1776     conv = reference_binding (to, from, expr, c_cast_p, flags);
1777   else
1778     conv = standard_conversion (to, from, expr, c_cast_p, flags);
1779
1780   if (conv)
1781     return conv;
1782
1783   if (expr && BRACE_ENCLOSED_INITIALIZER_P (expr))
1784     {
1785       if (is_std_init_list (to))
1786         return build_list_conv (to, expr, flags);
1787
1788       /* As an extension, allow list-initialization of _Complex.  */
1789       if (TREE_CODE (to) == COMPLEX_TYPE)
1790         {
1791           conv = build_complex_conv (to, expr, flags);
1792           if (conv)
1793             return conv;
1794         }
1795
1796       /* Allow conversion from an initializer-list with one element to a
1797          scalar type.  */
1798       if (SCALAR_TYPE_P (to))
1799         {
1800           int nelts = CONSTRUCTOR_NELTS (expr);
1801           tree elt;
1802
1803           if (nelts == 0)
1804             elt = build_value_init (to, tf_none);
1805           else if (nelts == 1)
1806             elt = CONSTRUCTOR_ELT (expr, 0)->value;
1807           else
1808             elt = error_mark_node;
1809
1810           conv = implicit_conversion (to, TREE_TYPE (elt), elt,
1811                                       c_cast_p, flags);
1812           if (conv)
1813             {
1814               conv->check_narrowing = true;
1815               if (BRACE_ENCLOSED_INITIALIZER_P (elt))
1816                 /* Too many levels of braces, i.e. '{{1}}'.  */
1817                 conv->bad_p = true;
1818               return conv;
1819             }
1820         }
1821       else if (TREE_CODE (to) == ARRAY_TYPE)
1822         return build_array_conv (to, expr, flags);
1823     }
1824
1825   if (expr != NULL_TREE
1826       && (MAYBE_CLASS_TYPE_P (from)
1827           || MAYBE_CLASS_TYPE_P (to))
1828       && (flags & LOOKUP_NO_CONVERSION) == 0)
1829     {
1830       struct z_candidate *cand;
1831       int convflags = (flags & (LOOKUP_NO_TEMP_BIND|LOOKUP_ONLYCONVERTING
1832                                 |LOOKUP_NO_NARROWING));
1833
1834       if (CLASS_TYPE_P (to)
1835           && !CLASSTYPE_NON_AGGREGATE (complete_type (to))
1836           && BRACE_ENCLOSED_INITIALIZER_P (expr))
1837         return build_aggr_conv (to, expr, flags);
1838
1839       cand = build_user_type_conversion_1 (to, expr, convflags);
1840       if (cand)
1841         conv = cand->second_conv;
1842
1843       /* We used to try to bind a reference to a temporary here, but that
1844          is now handled after the recursive call to this function at the end
1845          of reference_binding.  */
1846       return conv;
1847     }
1848
1849   return NULL;
1850 }
1851
1852 /* Add a new entry to the list of candidates.  Used by the add_*_candidate
1853    functions.  ARGS will not be changed until a single candidate is
1854    selected.  */
1855
1856 static struct z_candidate *
1857 add_candidate (struct z_candidate **candidates,
1858                tree fn, tree first_arg, const VEC(tree,gc) *args,
1859                size_t num_convs, conversion **convs,
1860                tree access_path, tree conversion_path,
1861                int viable, struct rejection_reason *reason)
1862 {
1863   struct z_candidate *cand = (struct z_candidate *)
1864     conversion_obstack_alloc (sizeof (struct z_candidate));
1865
1866   cand->fn = fn;
1867   cand->first_arg = first_arg;
1868   cand->args = args;
1869   cand->convs = convs;
1870   cand->num_convs = num_convs;
1871   cand->access_path = access_path;
1872   cand->conversion_path = conversion_path;
1873   cand->viable = viable;
1874   cand->reason = reason;
1875   cand->next = *candidates;
1876   *candidates = cand;
1877
1878   return cand;
1879 }
1880
1881 /* Return the number of remaining arguments in the parameter list
1882    beginning with ARG.  */
1883
1884 static int
1885 remaining_arguments (tree arg)
1886 {
1887   int n;
1888
1889   for (n = 0; arg != NULL_TREE && arg != void_list_node;
1890        arg = TREE_CHAIN (arg))
1891     n++;
1892
1893   return n;
1894 }
1895
1896 /* Create an overload candidate for the function or method FN called
1897    with the argument list FIRST_ARG/ARGS and add it to CANDIDATES.
1898    FLAGS is passed on to implicit_conversion.
1899
1900    This does not change ARGS.
1901
1902    CTYPE, if non-NULL, is the type we want to pretend this function
1903    comes from for purposes of overload resolution.  */
1904
1905 static struct z_candidate *
1906 add_function_candidate (struct z_candidate **candidates,
1907                         tree fn, tree ctype, tree first_arg,
1908                         const VEC(tree,gc) *args, tree access_path,
1909                         tree conversion_path, int flags)
1910 {
1911   tree parmlist = TYPE_ARG_TYPES (TREE_TYPE (fn));
1912   int i, len;
1913   conversion **convs;
1914   tree parmnode;
1915   tree orig_first_arg = first_arg;
1916   int skip;
1917   int viable = 1;
1918   struct rejection_reason *reason = NULL;
1919
1920   /* At this point we should not see any functions which haven't been
1921      explicitly declared, except for friend functions which will have
1922      been found using argument dependent lookup.  */
1923   gcc_assert (!DECL_ANTICIPATED (fn) || DECL_HIDDEN_FRIEND_P (fn));
1924
1925   /* The `this', `in_chrg' and VTT arguments to constructors are not
1926      considered in overload resolution.  */
1927   if (DECL_CONSTRUCTOR_P (fn))
1928     {
1929       parmlist = skip_artificial_parms_for (fn, parmlist);
1930       skip = num_artificial_parms_for (fn);
1931       if (skip > 0 && first_arg != NULL_TREE)
1932         {
1933           --skip;
1934           first_arg = NULL_TREE;
1935         }
1936     }
1937   else
1938     skip = 0;
1939
1940   len = VEC_length (tree, args) - skip + (first_arg != NULL_TREE ? 1 : 0);
1941   convs = alloc_conversions (len);
1942
1943   /* 13.3.2 - Viable functions [over.match.viable]
1944      First, to be a viable function, a candidate function shall have enough
1945      parameters to agree in number with the arguments in the list.
1946
1947      We need to check this first; otherwise, checking the ICSes might cause
1948      us to produce an ill-formed template instantiation.  */
1949
1950   parmnode = parmlist;
1951   for (i = 0; i < len; ++i)
1952     {
1953       if (parmnode == NULL_TREE || parmnode == void_list_node)
1954         break;
1955       parmnode = TREE_CHAIN (parmnode);
1956     }
1957
1958   if ((i < len && parmnode)
1959       || !sufficient_parms_p (parmnode))
1960     {
1961       int remaining = remaining_arguments (parmnode);
1962       viable = 0;
1963       reason = arity_rejection (first_arg, i + remaining, len);
1964     }
1965   /* When looking for a function from a subobject from an implicit
1966      copy/move constructor/operator=, don't consider anything that takes (a
1967      reference to) an unrelated type.  See c++/44909 and core 1092.  */
1968   else if (parmlist && (flags & LOOKUP_DEFAULTED))
1969     {
1970       if (DECL_CONSTRUCTOR_P (fn))
1971         i = 1;
1972       else if (DECL_ASSIGNMENT_OPERATOR_P (fn)
1973                && DECL_OVERLOADED_OPERATOR_P (fn) == NOP_EXPR)
1974         i = 2;
1975       else
1976         i = 0;
1977       if (i && len == i)
1978         {
1979           parmnode = chain_index (i-1, parmlist);
1980           if (!reference_related_p (non_reference (TREE_VALUE (parmnode)),
1981                                     ctype))
1982             viable = 0;
1983         }
1984
1985       /* This only applies at the top level.  */
1986       flags &= ~LOOKUP_DEFAULTED;
1987     }
1988
1989   if (! viable)
1990     goto out;
1991
1992   /* Second, for F to be a viable function, there shall exist for each
1993      argument an implicit conversion sequence that converts that argument
1994      to the corresponding parameter of F.  */
1995
1996   parmnode = parmlist;
1997
1998   for (i = 0; i < len; ++i)
1999     {
2000       tree arg, argtype, to_type;
2001       conversion *t;
2002       int is_this;
2003
2004       if (parmnode == void_list_node)
2005         break;
2006
2007       if (i == 0 && first_arg != NULL_TREE)
2008         arg = first_arg;
2009       else
2010         arg = VEC_index (tree, args,
2011                          i + skip - (first_arg != NULL_TREE ? 1 : 0));
2012       argtype = lvalue_type (arg);
2013
2014       is_this = (i == 0 && DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
2015                  && ! DECL_CONSTRUCTOR_P (fn));
2016
2017       if (parmnode)
2018         {
2019           tree parmtype = TREE_VALUE (parmnode);
2020           int lflags = flags;
2021
2022           parmnode = TREE_CHAIN (parmnode);
2023
2024           /* The type of the implicit object parameter ('this') for
2025              overload resolution is not always the same as for the
2026              function itself; conversion functions are considered to
2027              be members of the class being converted, and functions
2028              introduced by a using-declaration are considered to be
2029              members of the class that uses them.
2030
2031              Since build_over_call ignores the ICS for the `this'
2032              parameter, we can just change the parm type.  */
2033           if (ctype && is_this)
2034             {
2035               parmtype = cp_build_qualified_type
2036                 (ctype, cp_type_quals (TREE_TYPE (parmtype)));
2037               parmtype = build_pointer_type (parmtype);
2038             }
2039
2040           /* Core issue 899: When [copy-]initializing a temporary to be bound
2041              to the first parameter of a copy constructor (12.8) called with
2042              a single argument in the context of direct-initialization,
2043              explicit conversion functions are also considered.
2044
2045              So set LOOKUP_COPY_PARM to let reference_binding know that
2046              it's being called in that context.  We generalize the above
2047              to handle move constructors and template constructors as well;
2048              the standardese should soon be updated similarly.  */
2049           if (ctype && i == 0 && (len-skip == 1)
2050               && !(flags & LOOKUP_ONLYCONVERTING)
2051               && DECL_CONSTRUCTOR_P (fn)
2052               && parmtype != error_mark_node
2053               && (same_type_ignoring_top_level_qualifiers_p
2054                   (non_reference (parmtype), ctype)))
2055             {
2056               lflags |= LOOKUP_COPY_PARM;
2057               /* We allow user-defined conversions within init-lists, but
2058                  not for the copy constructor.  */
2059               if (flags & LOOKUP_NO_COPY_CTOR_CONVERSION)
2060                 lflags |= LOOKUP_NO_CONVERSION;
2061             }
2062           else
2063             lflags |= LOOKUP_ONLYCONVERTING;
2064
2065           t = implicit_conversion (parmtype, argtype, arg,
2066                                    /*c_cast_p=*/false, lflags);
2067           to_type = parmtype;
2068         }
2069       else
2070         {
2071           t = build_identity_conv (argtype, arg);
2072           t->ellipsis_p = true;
2073           to_type = argtype;
2074         }
2075
2076       if (t && is_this)
2077         t->this_p = true;
2078
2079       convs[i] = t;
2080       if (! t)
2081         {
2082           viable = 0;
2083           reason = arg_conversion_rejection (first_arg, i, argtype, to_type);
2084           break;
2085         }
2086
2087       if (t->bad_p)
2088         {
2089           viable = -1;
2090           reason = bad_arg_conversion_rejection (first_arg, i, argtype, to_type);
2091         }
2092     }
2093
2094  out:
2095   return add_candidate (candidates, fn, orig_first_arg, args, len, convs,
2096                         access_path, conversion_path, viable, reason);
2097 }
2098
2099 /* Create an overload candidate for the conversion function FN which will
2100    be invoked for expression OBJ, producing a pointer-to-function which
2101    will in turn be called with the argument list FIRST_ARG/ARGLIST,
2102    and add it to CANDIDATES.  This does not change ARGLIST.  FLAGS is
2103    passed on to implicit_conversion.
2104
2105    Actually, we don't really care about FN; we care about the type it
2106    converts to.  There may be multiple conversion functions that will
2107    convert to that type, and we rely on build_user_type_conversion_1 to
2108    choose the best one; so when we create our candidate, we record the type
2109    instead of the function.  */
2110
2111 static struct z_candidate *
2112 add_conv_candidate (struct z_candidate **candidates, tree fn, tree obj,
2113                     tree first_arg, const VEC(tree,gc) *arglist,
2114                     tree access_path, tree conversion_path)
2115 {
2116   tree totype = TREE_TYPE (TREE_TYPE (fn));
2117   int i, len, viable, flags;
2118   tree parmlist, parmnode;
2119   conversion **convs;
2120   struct rejection_reason *reason;
2121
2122   for (parmlist = totype; TREE_CODE (parmlist) != FUNCTION_TYPE; )
2123     parmlist = TREE_TYPE (parmlist);
2124   parmlist = TYPE_ARG_TYPES (parmlist);
2125
2126   len = VEC_length (tree, arglist) + (first_arg != NULL_TREE ? 1 : 0) + 1;
2127   convs = alloc_conversions (len);
2128   parmnode = parmlist;
2129   viable = 1;
2130   flags = LOOKUP_IMPLICIT;
2131   reason = NULL;
2132
2133   /* Don't bother looking up the same type twice.  */
2134   if (*candidates && (*candidates)->fn == totype)
2135     return NULL;
2136
2137   for (i = 0; i < len; ++i)
2138     {
2139       tree arg, argtype, convert_type = NULL_TREE;
2140       conversion *t;
2141
2142       if (i == 0)
2143         arg = obj;
2144       else if (i == 1 && first_arg != NULL_TREE)
2145         arg = first_arg;
2146       else
2147         arg = VEC_index (tree, arglist,
2148                          i - (first_arg != NULL_TREE ? 1 : 0) - 1);
2149       argtype = lvalue_type (arg);
2150
2151       if (i == 0)
2152         {
2153           t = implicit_conversion (totype, argtype, arg, /*c_cast_p=*/false,
2154                                    flags);
2155           convert_type = totype;
2156         }
2157       else if (parmnode == void_list_node)
2158         break;
2159       else if (parmnode)
2160         {
2161           t = implicit_conversion (TREE_VALUE (parmnode), argtype, arg,
2162                                    /*c_cast_p=*/false, flags);
2163           convert_type = TREE_VALUE (parmnode);
2164         }
2165       else
2166         {
2167           t = build_identity_conv (argtype, arg);
2168           t->ellipsis_p = true;
2169           convert_type = argtype;
2170         }
2171
2172       convs[i] = t;
2173       if (! t)
2174         break;
2175
2176       if (t->bad_p)
2177         {
2178           viable = -1;
2179           reason = bad_arg_conversion_rejection (NULL_TREE, i, argtype, convert_type);
2180         }
2181
2182       if (i == 0)
2183         continue;
2184
2185       if (parmnode)
2186         parmnode = TREE_CHAIN (parmnode);
2187     }
2188
2189   if (i < len
2190       || ! sufficient_parms_p (parmnode))
2191     {
2192       int remaining = remaining_arguments (parmnode);
2193       viable = 0;
2194       reason = arity_rejection (NULL_TREE, i + remaining, len);
2195     }
2196
2197   return add_candidate (candidates, totype, first_arg, arglist, len, convs,
2198                         access_path, conversion_path, viable, reason);
2199 }
2200
2201 static void
2202 build_builtin_candidate (struct z_candidate **candidates, tree fnname,
2203                          tree type1, tree type2, tree *args, tree *argtypes,
2204                          int flags)
2205 {
2206   conversion *t;
2207   conversion **convs;
2208   size_t num_convs;
2209   int viable = 1, i;
2210   tree types[2];
2211   struct rejection_reason *reason = NULL;
2212
2213   types[0] = type1;
2214   types[1] = type2;
2215
2216   num_convs =  args[2] ? 3 : (args[1] ? 2 : 1);
2217   convs = alloc_conversions (num_convs);
2218
2219   /* TRUTH_*_EXPR do "contextual conversion to bool", which means explicit
2220      conversion ops are allowed.  We handle that here by just checking for
2221      boolean_type_node because other operators don't ask for it.  COND_EXPR
2222      also does contextual conversion to bool for the first operand, but we
2223      handle that in build_conditional_expr, and type1 here is operand 2.  */
2224   if (type1 != boolean_type_node)
2225     flags |= LOOKUP_ONLYCONVERTING;
2226
2227   for (i = 0; i < 2; ++i)
2228     {
2229       if (! args[i])
2230         break;
2231
2232       t = implicit_conversion (types[i], argtypes[i], args[i],
2233                                /*c_cast_p=*/false, flags);
2234       if (! t)
2235         {
2236           viable = 0;
2237           /* We need something for printing the candidate.  */
2238           t = build_identity_conv (types[i], NULL_TREE);
2239           reason = arg_conversion_rejection (NULL_TREE, i, argtypes[i], types[i]);
2240         }
2241       else if (t->bad_p)
2242         {
2243           viable = 0;
2244           reason = bad_arg_conversion_rejection (NULL_TREE, i, argtypes[i], types[i]);
2245         }
2246       convs[i] = t;
2247     }
2248
2249   /* For COND_EXPR we rearranged the arguments; undo that now.  */
2250   if (args[2])
2251     {
2252       convs[2] = convs[1];
2253       convs[1] = convs[0];
2254       t = implicit_conversion (boolean_type_node, argtypes[2], args[2],
2255                                /*c_cast_p=*/false, flags);
2256       if (t)
2257         convs[0] = t;
2258       else
2259         {
2260           viable = 0;
2261           reason = arg_conversion_rejection (NULL_TREE, 0, argtypes[2],
2262                                              boolean_type_node);
2263         }
2264     }
2265
2266   add_candidate (candidates, fnname, /*first_arg=*/NULL_TREE, /*args=*/NULL,
2267                  num_convs, convs,
2268                  /*access_path=*/NULL_TREE,
2269                  /*conversion_path=*/NULL_TREE,
2270                  viable, reason);
2271 }
2272
2273 static bool
2274 is_complete (tree t)
2275 {
2276   return COMPLETE_TYPE_P (complete_type (t));
2277 }
2278
2279 /* Returns nonzero if TYPE is a promoted arithmetic type.  */
2280
2281 static bool
2282 promoted_arithmetic_type_p (tree type)
2283 {
2284   /* [over.built]
2285
2286      In this section, the term promoted integral type is used to refer
2287      to those integral types which are preserved by integral promotion
2288      (including e.g.  int and long but excluding e.g.  char).
2289      Similarly, the term promoted arithmetic type refers to promoted
2290      integral types plus floating types.  */
2291   return ((CP_INTEGRAL_TYPE_P (type)
2292            && same_type_p (type_promotes_to (type), type))
2293           || TREE_CODE (type) == REAL_TYPE);
2294 }
2295
2296 /* Create any builtin operator overload candidates for the operator in
2297    question given the converted operand types TYPE1 and TYPE2.  The other
2298    args are passed through from add_builtin_candidates to
2299    build_builtin_candidate.
2300
2301    TYPE1 and TYPE2 may not be permissible, and we must filter them.
2302    If CODE is requires candidates operands of the same type of the kind
2303    of which TYPE1 and TYPE2 are, we add both candidates
2304    CODE (TYPE1, TYPE1) and CODE (TYPE2, TYPE2).  */
2305
2306 static void
2307 add_builtin_candidate (struct z_candidate **candidates, enum tree_code code,
2308                        enum tree_code code2, tree fnname, tree type1,
2309                        tree type2, tree *args, tree *argtypes, int flags)
2310 {
2311   switch (code)
2312     {
2313     case POSTINCREMENT_EXPR:
2314     case POSTDECREMENT_EXPR:
2315       args[1] = integer_zero_node;
2316       type2 = integer_type_node;
2317       break;
2318     default:
2319       break;
2320     }
2321
2322   switch (code)
2323     {
2324
2325 /* 4 For every pair T, VQ), where T is an arithmetic or  enumeration  type,
2326      and  VQ  is  either  volatile or empty, there exist candidate operator
2327      functions of the form
2328              VQ T&   operator++(VQ T&);
2329              T       operator++(VQ T&, int);
2330    5 For every pair T, VQ), where T is an enumeration type or an arithmetic
2331      type  other than bool, and VQ is either volatile or empty, there exist
2332      candidate operator functions of the form
2333              VQ T&   operator--(VQ T&);
2334              T       operator--(VQ T&, int);
2335    6 For every pair T, VQ), where T is  a  cv-qualified  or  cv-unqualified
2336      complete  object type, and VQ is either volatile or empty, there exist
2337      candidate operator functions of the form
2338              T*VQ&   operator++(T*VQ&);
2339              T*VQ&   operator--(T*VQ&);
2340              T*      operator++(T*VQ&, int);
2341              T*      operator--(T*VQ&, int);  */
2342
2343     case POSTDECREMENT_EXPR:
2344     case PREDECREMENT_EXPR:
2345       if (TREE_CODE (type1) == BOOLEAN_TYPE)
2346         return;
2347     case POSTINCREMENT_EXPR:
2348     case PREINCREMENT_EXPR:
2349       if (ARITHMETIC_TYPE_P (type1) || TYPE_PTROB_P (type1))
2350         {
2351           type1 = build_reference_type (type1);
2352           break;
2353         }
2354       return;
2355
2356 /* 7 For every cv-qualified or cv-unqualified object type T, there
2357      exist candidate operator functions of the form
2358
2359              T&      operator*(T*);
2360
2361    8 For every function type T, there exist candidate operator functions of
2362      the form
2363              T&      operator*(T*);  */
2364
2365     case INDIRECT_REF:
2366       if (TREE_CODE (type1) == POINTER_TYPE
2367           && !uses_template_parms (TREE_TYPE (type1))
2368           && (TYPE_PTROB_P (type1)
2369               || TREE_CODE (TREE_TYPE (type1)) == FUNCTION_TYPE))
2370         break;
2371       return;
2372
2373 /* 9 For every type T, there exist candidate operator functions of the form
2374              T*      operator+(T*);
2375
2376    10For  every  promoted arithmetic type T, there exist candidate operator
2377      functions of the form
2378              T       operator+(T);
2379              T       operator-(T);  */
2380
2381     case UNARY_PLUS_EXPR: /* unary + */
2382       if (TREE_CODE (type1) == POINTER_TYPE)
2383         break;
2384     case NEGATE_EXPR:
2385       if (ARITHMETIC_TYPE_P (type1))
2386         break;
2387       return;
2388
2389 /* 11For every promoted integral type T,  there  exist  candidate  operator
2390      functions of the form
2391              T       operator~(T);  */
2392
2393     case BIT_NOT_EXPR:
2394       if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1))
2395         break;
2396       return;
2397
2398 /* 12For every quintuple C1, C2, T, CV1, CV2), where C2 is a class type, C1
2399      is the same type as C2 or is a derived class of C2, T  is  a  complete
2400      object type or a function type, and CV1 and CV2 are cv-qualifier-seqs,
2401      there exist candidate operator functions of the form
2402              CV12 T& operator->*(CV1 C1*, CV2 T C2::*);
2403      where CV12 is the union of CV1 and CV2.  */
2404
2405     case MEMBER_REF:
2406       if (TREE_CODE (type1) == POINTER_TYPE
2407           && TYPE_PTR_TO_MEMBER_P (type2))
2408         {
2409           tree c1 = TREE_TYPE (type1);
2410           tree c2 = TYPE_PTRMEM_CLASS_TYPE (type2);
2411
2412           if (MAYBE_CLASS_TYPE_P (c1) && DERIVED_FROM_P (c2, c1)
2413               && (TYPE_PTRMEMFUNC_P (type2)
2414                   || is_complete (TYPE_PTRMEM_POINTED_TO_TYPE (type2))))
2415             break;
2416         }
2417       return;
2418
2419 /* 13For every pair of promoted arithmetic types L and R, there exist  can-
2420      didate operator functions of the form
2421              LR      operator*(L, R);
2422              LR      operator/(L, R);
2423              LR      operator+(L, R);
2424              LR      operator-(L, R);
2425              bool    operator<(L, R);
2426              bool    operator>(L, R);
2427              bool    operator<=(L, R);
2428              bool    operator>=(L, R);
2429              bool    operator==(L, R);
2430              bool    operator!=(L, R);
2431      where  LR  is  the  result of the usual arithmetic conversions between
2432      types L and R.
2433
2434    14For every pair of types T and I, where T  is  a  cv-qualified  or  cv-
2435      unqualified  complete  object  type and I is a promoted integral type,
2436      there exist candidate operator functions of the form
2437              T*      operator+(T*, I);
2438              T&      operator[](T*, I);
2439              T*      operator-(T*, I);
2440              T*      operator+(I, T*);
2441              T&      operator[](I, T*);
2442
2443    15For every T, where T is a pointer to complete object type, there exist
2444      candidate operator functions of the form112)
2445              ptrdiff_t operator-(T, T);
2446
2447    16For every pointer or enumeration type T, there exist candidate operator
2448      functions of the form
2449              bool    operator<(T, T);
2450              bool    operator>(T, T);
2451              bool    operator<=(T, T);
2452              bool    operator>=(T, T);
2453              bool    operator==(T, T);
2454              bool    operator!=(T, T);
2455
2456    17For every pointer to member type T,  there  exist  candidate  operator
2457      functions of the form
2458              bool    operator==(T, T);
2459              bool    operator!=(T, T);  */
2460
2461     case MINUS_EXPR:
2462       if (TYPE_PTROB_P (type1) && TYPE_PTROB_P (type2))
2463         break;
2464       if (TYPE_PTROB_P (type1)
2465           && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2466         {
2467           type2 = ptrdiff_type_node;
2468           break;
2469         }
2470     case MULT_EXPR:
2471     case TRUNC_DIV_EXPR:
2472       if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2473         break;
2474       return;
2475
2476     case EQ_EXPR:
2477     case NE_EXPR:
2478       if ((TYPE_PTRMEMFUNC_P (type1) && TYPE_PTRMEMFUNC_P (type2))
2479           || (TYPE_PTRMEM_P (type1) && TYPE_PTRMEM_P (type2)))
2480         break;
2481       if (TYPE_PTR_TO_MEMBER_P (type1) && null_ptr_cst_p (args[1]))
2482         {
2483           type2 = type1;
2484           break;
2485         }
2486       if (TYPE_PTR_TO_MEMBER_P (type2) && null_ptr_cst_p (args[0]))
2487         {
2488           type1 = type2;
2489           break;
2490         }
2491       /* Fall through.  */
2492     case LT_EXPR:
2493     case GT_EXPR:
2494     case LE_EXPR:
2495     case GE_EXPR:
2496     case MAX_EXPR:
2497     case MIN_EXPR:
2498       if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2499         break;
2500       if (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
2501         break;
2502       if (TREE_CODE (type1) == ENUMERAL_TYPE 
2503           && TREE_CODE (type2) == ENUMERAL_TYPE)
2504         break;
2505       if (TYPE_PTR_P (type1) 
2506           && null_ptr_cst_p (args[1])
2507           && !uses_template_parms (type1))
2508         {
2509           type2 = type1;
2510           break;
2511         }
2512       if (null_ptr_cst_p (args[0]) 
2513           && TYPE_PTR_P (type2)
2514           && !uses_template_parms (type2))
2515         {
2516           type1 = type2;
2517           break;
2518         }
2519       return;
2520
2521     case PLUS_EXPR:
2522       if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2523         break;
2524     case ARRAY_REF:
2525       if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1) && TYPE_PTROB_P (type2))
2526         {
2527           type1 = ptrdiff_type_node;
2528           break;
2529         }
2530       if (TYPE_PTROB_P (type1) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2531         {
2532           type2 = ptrdiff_type_node;
2533           break;
2534         }
2535       return;
2536
2537 /* 18For  every pair of promoted integral types L and R, there exist candi-
2538      date operator functions of the form
2539              LR      operator%(L, R);
2540              LR      operator&(L, R);
2541              LR      operator^(L, R);
2542              LR      operator|(L, R);
2543              L       operator<<(L, R);
2544              L       operator>>(L, R);
2545      where LR is the result of the  usual  arithmetic  conversions  between
2546      types L and R.  */
2547
2548     case TRUNC_MOD_EXPR:
2549     case BIT_AND_EXPR:
2550     case BIT_IOR_EXPR:
2551     case BIT_XOR_EXPR:
2552     case LSHIFT_EXPR:
2553     case RSHIFT_EXPR:
2554       if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2555         break;
2556       return;
2557
2558 /* 19For  every  triple  L, VQ, R), where L is an arithmetic or enumeration
2559      type, VQ is either volatile or empty, and R is a  promoted  arithmetic
2560      type, there exist candidate operator functions of the form
2561              VQ L&   operator=(VQ L&, R);
2562              VQ L&   operator*=(VQ L&, R);
2563              VQ L&   operator/=(VQ L&, R);
2564              VQ L&   operator+=(VQ L&, R);
2565              VQ L&   operator-=(VQ L&, R);
2566
2567    20For  every  pair T, VQ), where T is any type and VQ is either volatile
2568      or empty, there exist candidate operator functions of the form
2569              T*VQ&   operator=(T*VQ&, T*);
2570
2571    21For every pair T, VQ), where T is a pointer to member type and  VQ  is
2572      either  volatile or empty, there exist candidate operator functions of
2573      the form
2574              VQ T&   operator=(VQ T&, T);
2575
2576    22For every triple  T,  VQ,  I),  where  T  is  a  cv-qualified  or  cv-
2577      unqualified  complete object type, VQ is either volatile or empty, and
2578      I is a promoted integral type, there exist  candidate  operator  func-
2579      tions of the form
2580              T*VQ&   operator+=(T*VQ&, I);
2581              T*VQ&   operator-=(T*VQ&, I);
2582
2583    23For  every  triple  L,  VQ,  R), where L is an integral or enumeration
2584      type, VQ is either volatile or empty, and R  is  a  promoted  integral
2585      type, there exist candidate operator functions of the form
2586
2587              VQ L&   operator%=(VQ L&, R);
2588              VQ L&   operator<<=(VQ L&, R);
2589              VQ L&   operator>>=(VQ L&, R);
2590              VQ L&   operator&=(VQ L&, R);
2591              VQ L&   operator^=(VQ L&, R);
2592              VQ L&   operator|=(VQ L&, R);  */
2593
2594     case MODIFY_EXPR:
2595       switch (code2)
2596         {
2597         case PLUS_EXPR:
2598         case MINUS_EXPR:
2599           if (TYPE_PTROB_P (type1) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2600             {
2601               type2 = ptrdiff_type_node;
2602               break;
2603             }
2604         case MULT_EXPR:
2605         case TRUNC_DIV_EXPR:
2606           if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2607             break;
2608           return;
2609
2610         case TRUNC_MOD_EXPR:
2611         case BIT_AND_EXPR:
2612         case BIT_IOR_EXPR:
2613         case BIT_XOR_EXPR:
2614         case LSHIFT_EXPR:
2615         case RSHIFT_EXPR:
2616           if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2617             break;
2618           return;
2619
2620         case NOP_EXPR:
2621           if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2622             break;
2623           if ((TYPE_PTRMEMFUNC_P (type1) && TYPE_PTRMEMFUNC_P (type2))
2624               || (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
2625               || (TYPE_PTRMEM_P (type1) && TYPE_PTRMEM_P (type2))
2626               || ((TYPE_PTRMEMFUNC_P (type1)
2627                    || TREE_CODE (type1) == POINTER_TYPE)
2628                   && null_ptr_cst_p (args[1])))
2629             {
2630               type2 = type1;
2631               break;
2632             }
2633           return;
2634
2635         default:
2636           gcc_unreachable ();
2637         }
2638       type1 = build_reference_type (type1);
2639       break;
2640
2641     case COND_EXPR:
2642       /* [over.built]
2643
2644          For every pair of promoted arithmetic types L and R, there
2645          exist candidate operator functions of the form
2646
2647          LR operator?(bool, L, R);
2648
2649          where LR is the result of the usual arithmetic conversions
2650          between types L and R.
2651
2652          For every type T, where T is a pointer or pointer-to-member
2653          type, there exist candidate operator functions of the form T
2654          operator?(bool, T, T);  */
2655
2656       if (promoted_arithmetic_type_p (type1)
2657           && promoted_arithmetic_type_p (type2))
2658         /* That's OK.  */
2659         break;
2660
2661       /* Otherwise, the types should be pointers.  */
2662       if (!(TYPE_PTR_P (type1) || TYPE_PTR_TO_MEMBER_P (type1))
2663           || !(TYPE_PTR_P (type2) || TYPE_PTR_TO_MEMBER_P (type2)))
2664         return;
2665
2666       /* We don't check that the two types are the same; the logic
2667          below will actually create two candidates; one in which both
2668          parameter types are TYPE1, and one in which both parameter
2669          types are TYPE2.  */
2670       break;
2671
2672     case REALPART_EXPR:
2673     case IMAGPART_EXPR:
2674       if (ARITHMETIC_TYPE_P (type1))
2675         break;
2676       return;
2677  
2678     default:
2679       gcc_unreachable ();
2680     }
2681
2682   /* If we're dealing with two pointer types or two enumeral types,
2683      we need candidates for both of them.  */
2684   if (type2 && !same_type_p (type1, type2)
2685       && TREE_CODE (type1) == TREE_CODE (type2)
2686       && (TREE_CODE (type1) == REFERENCE_TYPE
2687           || (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
2688           || (TYPE_PTRMEM_P (type1) && TYPE_PTRMEM_P (type2))
2689           || TYPE_PTRMEMFUNC_P (type1)
2690           || MAYBE_CLASS_TYPE_P (type1)
2691           || TREE_CODE (type1) == ENUMERAL_TYPE))
2692     {
2693       build_builtin_candidate
2694         (candidates, fnname, type1, type1, args, argtypes, flags);
2695       build_builtin_candidate
2696         (candidates, fnname, type2, type2, args, argtypes, flags);
2697       return;
2698     }
2699
2700   build_builtin_candidate
2701     (candidates, fnname, type1, type2, args, argtypes, flags);
2702 }
2703
2704 tree
2705 type_decays_to (tree type)
2706 {
2707   if (TREE_CODE (type) == ARRAY_TYPE)
2708     return build_pointer_type (TREE_TYPE (type));
2709   if (TREE_CODE (type) == FUNCTION_TYPE)
2710     return build_pointer_type (type);
2711   return type;
2712 }
2713
2714 /* There are three conditions of builtin candidates:
2715
2716    1) bool-taking candidates.  These are the same regardless of the input.
2717    2) pointer-pair taking candidates.  These are generated for each type
2718       one of the input types converts to.
2719    3) arithmetic candidates.  According to the standard, we should generate
2720       all of these, but I'm trying not to...
2721
2722    Here we generate a superset of the possible candidates for this particular
2723    case.  That is a subset of the full set the standard defines, plus some
2724    other cases which the standard disallows. add_builtin_candidate will
2725    filter out the invalid set.  */
2726
2727 static void
2728 add_builtin_candidates (struct z_candidate **candidates, enum tree_code code,
2729                         enum tree_code code2, tree fnname, tree *args,
2730                         int flags)
2731 {
2732   int ref1, i;
2733   int enum_p = 0;
2734   tree type, argtypes[3], t;
2735   /* TYPES[i] is the set of possible builtin-operator parameter types
2736      we will consider for the Ith argument.  */
2737   VEC(tree,gc) *types[2];
2738   unsigned ix;
2739
2740   for (i = 0; i < 3; ++i)
2741     {
2742       if (args[i])
2743         argtypes[i] = unlowered_expr_type (args[i]);
2744       else
2745         argtypes[i] = NULL_TREE;
2746     }
2747
2748   switch (code)
2749     {
2750 /* 4 For every pair T, VQ), where T is an arithmetic or  enumeration  type,
2751      and  VQ  is  either  volatile or empty, there exist candidate operator
2752      functions of the form
2753                  VQ T&   operator++(VQ T&);  */
2754
2755     case POSTINCREMENT_EXPR:
2756     case PREINCREMENT_EXPR:
2757     case POSTDECREMENT_EXPR:
2758     case PREDECREMENT_EXPR:
2759     case MODIFY_EXPR:
2760       ref1 = 1;
2761       break;
2762
2763 /* 24There also exist candidate operator functions of the form
2764              bool    operator!(bool);
2765              bool    operator&&(bool, bool);
2766              bool    operator||(bool, bool);  */
2767
2768     case TRUTH_NOT_EXPR:
2769       build_builtin_candidate
2770         (candidates, fnname, boolean_type_node,
2771          NULL_TREE, args, argtypes, flags);
2772       return;
2773
2774     case TRUTH_ORIF_EXPR:
2775     case TRUTH_ANDIF_EXPR:
2776       build_builtin_candidate
2777         (candidates, fnname, boolean_type_node,
2778          boolean_type_node, args, argtypes, flags);
2779       return;
2780
2781     case ADDR_EXPR:
2782     case COMPOUND_EXPR:
2783     case COMPONENT_REF:
2784       return;
2785
2786     case COND_EXPR:
2787     case EQ_EXPR:
2788     case NE_EXPR:
2789     case LT_EXPR:
2790     case LE_EXPR:
2791     case GT_EXPR:
2792     case GE_EXPR:
2793       enum_p = 1;
2794       /* Fall through.  */
2795
2796     default:
2797       ref1 = 0;
2798     }
2799
2800   types[0] = make_tree_vector ();
2801   types[1] = make_tree_vector ();
2802
2803   for (i = 0; i < 2; ++i)
2804     {
2805       if (! args[i])
2806         ;
2807       else if (MAYBE_CLASS_TYPE_P (argtypes[i]))
2808         {
2809           tree convs;
2810
2811           if (i == 0 && code == MODIFY_EXPR && code2 == NOP_EXPR)
2812             return;
2813
2814           convs = lookup_conversions (argtypes[i]);
2815
2816           if (code == COND_EXPR)
2817             {
2818               if (real_lvalue_p (args[i]))
2819                 VEC_safe_push (tree, gc, types[i],
2820                                build_reference_type (argtypes[i]));
2821
2822               VEC_safe_push (tree, gc, types[i],
2823                              TYPE_MAIN_VARIANT (argtypes[i]));
2824             }
2825
2826           else if (! convs)
2827             return;
2828
2829           for (; convs; convs = TREE_CHAIN (convs))
2830             {
2831               type = TREE_TYPE (convs);
2832
2833               if (i == 0 && ref1
2834                   && (TREE_CODE (type) != REFERENCE_TYPE
2835                       || CP_TYPE_CONST_P (TREE_TYPE (type))))
2836                 continue;
2837
2838               if (code == COND_EXPR && TREE_CODE (type) == REFERENCE_TYPE)
2839                 VEC_safe_push (tree, gc, types[i], type);
2840
2841               type = non_reference (type);
2842               if (i != 0 || ! ref1)
2843                 {
2844                   type = cv_unqualified (type_decays_to (type));
2845                   if (enum_p && TREE_CODE (type) == ENUMERAL_TYPE)
2846                     VEC_safe_push (tree, gc, types[i], type);
2847                   if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
2848                     type = type_promotes_to (type);
2849                 }
2850
2851               if (! vec_member (type, types[i]))
2852                 VEC_safe_push (tree, gc, types[i], type);
2853             }
2854         }
2855       else
2856         {
2857           if (code == COND_EXPR && real_lvalue_p (args[i]))
2858             VEC_safe_push (tree, gc, types[i],
2859                            build_reference_type (argtypes[i]));
2860           type = non_reference (argtypes[i]);
2861           if (i != 0 || ! ref1)
2862             {
2863               type = cv_unqualified (type_decays_to (type));
2864               if (enum_p && UNSCOPED_ENUM_P (type))
2865                 VEC_safe_push (tree, gc, types[i], type);
2866               if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
2867                 type = type_promotes_to (type);
2868             }
2869           VEC_safe_push (tree, gc, types[i], type);
2870         }
2871     }
2872
2873   /* Run through the possible parameter types of both arguments,
2874      creating candidates with those parameter types.  */
2875   FOR_EACH_VEC_ELT_REVERSE (tree, types[0], ix, t)
2876     {
2877       unsigned jx;
2878       tree u;
2879
2880       if (!VEC_empty (tree, types[1]))
2881         FOR_EACH_VEC_ELT_REVERSE (tree, types[1], jx, u)
2882           add_builtin_candidate
2883             (candidates, code, code2, fnname, t,
2884              u, args, argtypes, flags);
2885       else
2886         add_builtin_candidate
2887           (candidates, code, code2, fnname, t,
2888            NULL_TREE, args, argtypes, flags);
2889     }
2890
2891   release_tree_vector (types[0]);
2892   release_tree_vector (types[1]);
2893 }
2894
2895
2896 /* If TMPL can be successfully instantiated as indicated by
2897    EXPLICIT_TARGS and ARGLIST, adds the instantiation to CANDIDATES.
2898
2899    TMPL is the template.  EXPLICIT_TARGS are any explicit template
2900    arguments.  ARGLIST is the arguments provided at the call-site.
2901    This does not change ARGLIST.  The RETURN_TYPE is the desired type
2902    for conversion operators.  If OBJ is NULL_TREE, FLAGS and CTYPE are
2903    as for add_function_candidate.  If an OBJ is supplied, FLAGS and
2904    CTYPE are ignored, and OBJ is as for add_conv_candidate.  */
2905
2906 static struct z_candidate*
2907 add_template_candidate_real (struct z_candidate **candidates, tree tmpl,
2908                              tree ctype, tree explicit_targs, tree first_arg,
2909                              const VEC(tree,gc) *arglist, tree return_type,
2910                              tree access_path, tree conversion_path,
2911                              int flags, tree obj, unification_kind_t strict)
2912 {
2913   int ntparms = DECL_NTPARMS (tmpl);
2914   tree targs = make_tree_vec (ntparms);
2915   unsigned int len = VEC_length (tree, arglist);
2916   unsigned int nargs = (first_arg == NULL_TREE ? 0 : 1) + len;
2917   unsigned int skip_without_in_chrg = 0;
2918   tree first_arg_without_in_chrg = first_arg;
2919   tree *args_without_in_chrg;
2920   unsigned int nargs_without_in_chrg;
2921   unsigned int ia, ix;
2922   tree arg;
2923   struct z_candidate *cand;
2924   int i;
2925   tree fn;
2926   struct rejection_reason *reason = NULL;
2927   int errs;
2928
2929   /* We don't do deduction on the in-charge parameter, the VTT
2930      parameter or 'this'.  */
2931   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (tmpl))
2932     {
2933       if (first_arg_without_in_chrg != NULL_TREE)
2934         first_arg_without_in_chrg = NULL_TREE;
2935       else
2936         ++skip_without_in_chrg;
2937     }
2938
2939   if ((DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (tmpl)
2940        || DECL_BASE_CONSTRUCTOR_P (tmpl))
2941       && CLASSTYPE_VBASECLASSES (DECL_CONTEXT (tmpl)))
2942     {
2943       if (first_arg_without_in_chrg != NULL_TREE)
2944         first_arg_without_in_chrg = NULL_TREE;
2945       else
2946         ++skip_without_in_chrg;
2947     }
2948
2949   if (len < skip_without_in_chrg)
2950     return NULL;
2951
2952   nargs_without_in_chrg = ((first_arg_without_in_chrg != NULL_TREE ? 1 : 0)
2953                            + (len - skip_without_in_chrg));
2954   args_without_in_chrg = XALLOCAVEC (tree, nargs_without_in_chrg);
2955   ia = 0;
2956   if (first_arg_without_in_chrg != NULL_TREE)
2957     {
2958       args_without_in_chrg[ia] = first_arg_without_in_chrg;
2959       ++ia;
2960     }
2961   for (ix = skip_without_in_chrg;
2962        VEC_iterate (tree, arglist, ix, arg);
2963        ++ix)
2964     {
2965       args_without_in_chrg[ia] = arg;
2966       ++ia;
2967     }
2968   gcc_assert (ia == nargs_without_in_chrg);
2969
2970   errs = errorcount+sorrycount;
2971   i = fn_type_unification (tmpl, explicit_targs, targs,
2972                            args_without_in_chrg,
2973                            nargs_without_in_chrg,
2974                            return_type, strict, flags, false);
2975
2976   if (i != 0)
2977     {
2978       /* Don't repeat unification later if it already resulted in errors.  */
2979       if (errorcount+sorrycount == errs)
2980         reason = template_unification_rejection (tmpl, explicit_targs,
2981                                                  targs, args_without_in_chrg,
2982                                                  nargs_without_in_chrg,
2983                                                  return_type, strict, flags);
2984       else
2985         reason = template_unification_error_rejection ();
2986       goto fail;
2987     }
2988
2989   fn = instantiate_template (tmpl, targs, tf_none);
2990   if (fn == error_mark_node)
2991     {
2992       reason = template_instantiation_rejection (tmpl, targs);
2993       goto fail;
2994     }
2995
2996   /* In [class.copy]:
2997
2998        A member function template is never instantiated to perform the
2999        copy of a class object to an object of its class type.
3000
3001      It's a little unclear what this means; the standard explicitly
3002      does allow a template to be used to copy a class.  For example,
3003      in:
3004
3005        struct A {
3006          A(A&);
3007          template <class T> A(const T&);
3008        };
3009        const A f ();
3010        void g () { A a (f ()); }
3011
3012      the member template will be used to make the copy.  The section
3013      quoted above appears in the paragraph that forbids constructors
3014      whose only parameter is (a possibly cv-qualified variant of) the
3015      class type, and a logical interpretation is that the intent was
3016      to forbid the instantiation of member templates which would then
3017      have that form.  */
3018   if (DECL_CONSTRUCTOR_P (fn) && nargs == 2)
3019     {
3020       tree arg_types = FUNCTION_FIRST_USER_PARMTYPE (fn);
3021       if (arg_types && same_type_p (TYPE_MAIN_VARIANT (TREE_VALUE (arg_types)),
3022                                     ctype))
3023         {
3024           reason = invalid_copy_with_fn_template_rejection ();
3025           goto fail;
3026         }
3027     }
3028
3029   if (obj != NULL_TREE)
3030     /* Aha, this is a conversion function.  */
3031     cand = add_conv_candidate (candidates, fn, obj, first_arg, arglist,
3032                                access_path, conversion_path);
3033   else
3034     cand = add_function_candidate (candidates, fn, ctype,
3035                                    first_arg, arglist, access_path,
3036                                    conversion_path, flags);
3037   if (DECL_TI_TEMPLATE (fn) != tmpl)
3038     /* This situation can occur if a member template of a template
3039        class is specialized.  Then, instantiate_template might return
3040        an instantiation of the specialization, in which case the
3041        DECL_TI_TEMPLATE field will point at the original
3042        specialization.  For example:
3043
3044          template <class T> struct S { template <class U> void f(U);
3045                                        template <> void f(int) {}; };
3046          S<double> sd;
3047          sd.f(3);
3048
3049        Here, TMPL will be template <class U> S<double>::f(U).
3050        And, instantiate template will give us the specialization
3051        template <> S<double>::f(int).  But, the DECL_TI_TEMPLATE field
3052        for this will point at template <class T> template <> S<T>::f(int),
3053        so that we can find the definition.  For the purposes of
3054        overload resolution, however, we want the original TMPL.  */
3055     cand->template_decl = build_template_info (tmpl, targs);
3056   else
3057     cand->template_decl = DECL_TEMPLATE_INFO (fn);
3058   cand->explicit_targs = explicit_targs;
3059
3060   return cand;
3061  fail:
3062   return add_candidate (candidates, tmpl, first_arg, arglist, nargs, NULL,
3063                         access_path, conversion_path, 0, reason);
3064 }
3065
3066
3067 static struct z_candidate *
3068 add_template_candidate (struct z_candidate **candidates, tree tmpl, tree ctype,
3069                         tree explicit_targs, tree first_arg,
3070                         const VEC(tree,gc) *arglist, tree return_type,
3071                         tree access_path, tree conversion_path, int flags,
3072                         unification_kind_t strict)
3073 {
3074   return
3075     add_template_candidate_real (candidates, tmpl, ctype,
3076                                  explicit_targs, first_arg, arglist,
3077                                  return_type, access_path, conversion_path,
3078                                  flags, NULL_TREE, strict);
3079 }
3080
3081
3082 static struct z_candidate *
3083 add_template_conv_candidate (struct z_candidate **candidates, tree tmpl,
3084                              tree obj, tree first_arg,
3085                              const VEC(tree,gc) *arglist,
3086                              tree return_type, tree access_path,
3087                              tree conversion_path)
3088 {
3089   return
3090     add_template_candidate_real (candidates, tmpl, NULL_TREE, NULL_TREE,
3091                                  first_arg, arglist, return_type, access_path,
3092                                  conversion_path, 0, obj, DEDUCE_CONV);
3093 }
3094
3095 /* The CANDS are the set of candidates that were considered for
3096    overload resolution.  Return the set of viable candidates, or CANDS
3097    if none are viable.  If any of the candidates were viable, set
3098    *ANY_VIABLE_P to true.  STRICT_P is true if a candidate should be
3099    considered viable only if it is strictly viable.  */
3100
3101 static struct z_candidate*
3102 splice_viable (struct z_candidate *cands,
3103                bool strict_p,
3104                bool *any_viable_p)
3105 {
3106   struct z_candidate *viable;
3107   struct z_candidate **last_viable;
3108   struct z_candidate **cand;
3109
3110   /* Be strict inside templates, since build_over_call won't actually
3111      do the conversions to get pedwarns.  */
3112   if (processing_template_decl)
3113     strict_p = true;
3114
3115   viable = NULL;
3116   last_viable = &viable;
3117   *any_viable_p = false;
3118
3119   cand = &cands;
3120   while (*cand)
3121     {
3122       struct z_candidate *c = *cand;
3123       if (strict_p ? c->viable == 1 : c->viable)
3124         {
3125           *last_viable = c;
3126           *cand = c->next;
3127           c->next = NULL;
3128           last_viable = &c->next;
3129           *any_viable_p = true;
3130         }
3131       else
3132         cand = &c->next;
3133     }
3134
3135   return viable ? viable : cands;
3136 }
3137
3138 static bool
3139 any_strictly_viable (struct z_candidate *cands)
3140 {
3141   for (; cands; cands = cands->next)
3142     if (cands->viable == 1)
3143       return true;
3144   return false;
3145 }
3146
3147 /* OBJ is being used in an expression like "OBJ.f (...)".  In other
3148    words, it is about to become the "this" pointer for a member
3149    function call.  Take the address of the object.  */
3150
3151 static tree
3152 build_this (tree obj)
3153 {
3154   /* In a template, we are only concerned about the type of the
3155      expression, so we can take a shortcut.  */
3156   if (processing_template_decl)
3157     return build_address (obj);
3158
3159   return cp_build_addr_expr (obj, tf_warning_or_error);
3160 }
3161
3162 /* Returns true iff functions are equivalent. Equivalent functions are
3163    not '==' only if one is a function-local extern function or if
3164    both are extern "C".  */
3165
3166 static inline int
3167 equal_functions (tree fn1, tree fn2)
3168 {
3169   if (TREE_CODE (fn1) != TREE_CODE (fn2))
3170     return 0;
3171   if (TREE_CODE (fn1) == TEMPLATE_DECL)
3172     return fn1 == fn2;
3173   if (DECL_LOCAL_FUNCTION_P (fn1) || DECL_LOCAL_FUNCTION_P (fn2)
3174       || DECL_EXTERN_C_FUNCTION_P (fn1))
3175     return decls_match (fn1, fn2);
3176   return fn1 == fn2;
3177 }
3178
3179 /* Print information about a candidate being rejected due to INFO.  */
3180
3181 static void
3182 print_conversion_rejection (location_t loc, struct conversion_info *info)
3183 {
3184   if (info->n_arg == -1)
3185     /* Conversion of implicit `this' argument failed.  */
3186     inform (loc, "  no known conversion for implicit "
3187             "%<this%> parameter from %qT to %qT",
3188             info->from_type, info->to_type);
3189   else
3190     inform (loc, "  no known conversion for argument %d from %qT to %qT",
3191             info->n_arg+1, info->from_type, info->to_type);
3192 }
3193
3194 /* Print information about a candidate with WANT parameters and we found
3195    HAVE.  */
3196
3197 static void
3198 print_arity_information (location_t loc, unsigned int have, unsigned int want)
3199 {
3200   inform_n (loc, want,
3201             "  candidate expects %d argument, %d provided",
3202             "  candidate expects %d arguments, %d provided",
3203             want, have);
3204 }
3205
3206 /* Print information about one overload candidate CANDIDATE.  MSGSTR
3207    is the text to print before the candidate itself.
3208
3209    NOTE: Unlike most diagnostic functions in GCC, MSGSTR is expected
3210    to have been run through gettext by the caller.  This wart makes
3211    life simpler in print_z_candidates and for the translators.  */
3212
3213 static void
3214 print_z_candidate (const char *msgstr, struct z_candidate *candidate)
3215 {
3216   const char *msg = (msgstr == NULL
3217                      ? ""
3218                      : ACONCAT ((msgstr, " ", NULL)));
3219   location_t loc = location_of (candidate->fn);
3220
3221   if (TREE_CODE (candidate->fn) == IDENTIFIER_NODE)
3222     {
3223       if (candidate->num_convs == 3)
3224         inform (input_location, "%s%D(%T, %T, %T) <built-in>", msg, candidate->fn,
3225                 candidate->convs[0]->type,
3226                 candidate->convs[1]->type,
3227                 candidate->convs[2]->type);
3228       else if (candidate->num_convs == 2)
3229         inform (input_location, "%s%D(%T, %T) <built-in>", msg, candidate->fn,
3230                 candidate->convs[0]->type,
3231                 candidate->convs[1]->type);
3232       else
3233         inform (input_location, "%s%D(%T) <built-in>", msg, candidate->fn,
3234                 candidate->convs[0]->type);
3235     }
3236   else if (TYPE_P (candidate->fn))
3237     inform (input_location, "%s%T <conversion>", msg, candidate->fn);
3238   else if (candidate->viable == -1)
3239     inform (loc, "%s%#D <near match>", msg, candidate->fn);
3240   else if (DECL_DELETED_FN (STRIP_TEMPLATE (candidate->fn)))
3241     inform (loc, "%s%#D <deleted>", msg, candidate->fn);
3242   else
3243     inform (loc, "%s%#D", msg, candidate->fn);
3244   /* Give the user some information about why this candidate failed.  */
3245   if (candidate->reason != NULL)
3246     {
3247       struct rejection_reason *r = candidate->reason;
3248
3249       switch (r->code)
3250         {
3251         case rr_arity:
3252           print_arity_information (loc, r->u.arity.actual,
3253                                    r->u.arity.expected);
3254           break;
3255         case rr_arg_conversion:
3256           print_conversion_rejection (loc, &r->u.conversion);
3257           break;
3258         case rr_bad_arg_conversion:
3259           print_conversion_rejection (loc, &r->u.bad_conversion);
3260           break;
3261         case rr_explicit_conversion:
3262           inform (loc, "  return type %qT of explicit conversion function "
3263                   "cannot be converted to %qT with a qualification "
3264                   "conversion", r->u.conversion.from_type,
3265                   r->u.conversion.to_type);
3266           break;
3267         case rr_template_unification:
3268           /* We use template_unification_error_rejection if unification caused
3269              actual non-SFINAE errors, in which case we don't need to repeat
3270              them here.  */
3271           if (r->u.template_unification.tmpl == NULL_TREE)
3272             {
3273               inform (loc, "  substitution of deduced template arguments "
3274                       "resulted in errors seen above");
3275               break;
3276             }
3277           /* Re-run template unification with diagnostics.  */
3278           inform (loc, "  template argument deduction/substitution failed:");
3279           fn_type_unification (r->u.template_unification.tmpl,
3280                                r->u.template_unification.explicit_targs,
3281                                r->u.template_unification.targs,
3282                                r->u.template_unification.args,
3283                                r->u.template_unification.nargs,
3284                                r->u.template_unification.return_type,
3285                                r->u.template_unification.strict,
3286                                r->u.template_unification.flags,
3287                                true);
3288           break;
3289         case rr_template_instantiation:
3290           /* Re-run template instantiation with diagnostics.  */
3291           instantiate_template (r->u.template_instantiation.tmpl,
3292                                 r->u.template_instantiation.targs,
3293                                 tf_warning_or_error);
3294           break;
3295         case rr_invalid_copy:
3296           inform (loc,
3297                   "  a constructor taking a single argument of its own "
3298                   "class type is invalid");
3299           break;
3300         case rr_none:
3301         default:
3302           /* This candidate didn't have any issues or we failed to
3303              handle a particular code.  Either way...  */
3304           gcc_unreachable ();
3305         }
3306     }
3307 }
3308
3309 static void
3310 print_z_candidates (location_t loc, struct z_candidate *candidates)
3311 {
3312   struct z_candidate *cand1;
3313   struct z_candidate **cand2;
3314   int n_candidates;
3315
3316   if (!candidates)
3317     return;
3318
3319   /* Remove non-viable deleted candidates.  */
3320   cand1 = candidates;
3321   for (cand2 = &cand1; *cand2; )
3322     {
3323       if (TREE_CODE ((*cand2)->fn) == FUNCTION_DECL
3324           && !(*cand2)->viable
3325           && DECL_DELETED_FN ((*cand2)->fn))
3326         *cand2 = (*cand2)->next;
3327       else
3328         cand2 = &(*cand2)->next;
3329     }
3330   /* ...if there are any non-deleted ones.  */
3331   if (cand1)
3332     candidates = cand1;
3333
3334   /* There may be duplicates in the set of candidates.  We put off
3335      checking this condition as long as possible, since we have no way
3336      to eliminate duplicates from a set of functions in less than n^2
3337      time.  Now we are about to emit an error message, so it is more
3338      permissible to go slowly.  */
3339   for (cand1 = candidates; cand1; cand1 = cand1->next)
3340     {
3341       tree fn = cand1->fn;
3342       /* Skip builtin candidates and conversion functions.  */
3343       if (!DECL_P (fn))
3344         continue;
3345       cand2 = &cand1->next;
3346       while (*cand2)
3347         {
3348           if (DECL_P ((*cand2)->fn)
3349               && equal_functions (fn, (*cand2)->fn))
3350             *cand2 = (*cand2)->next;
3351           else
3352             cand2 = &(*cand2)->next;
3353         }
3354     }
3355
3356   for (n_candidates = 0, cand1 = candidates; cand1; cand1 = cand1->next)
3357     n_candidates++;
3358
3359   inform_n (loc, n_candidates, "candidate is:", "candidates are:");
3360   for (; candidates; candidates = candidates->next)
3361     print_z_candidate (NULL, candidates);
3362 }
3363
3364 /* USER_SEQ is a user-defined conversion sequence, beginning with a
3365    USER_CONV.  STD_SEQ is the standard conversion sequence applied to
3366    the result of the conversion function to convert it to the final
3367    desired type.  Merge the two sequences into a single sequence,
3368    and return the merged sequence.  */
3369
3370 static conversion *
3371 merge_conversion_sequences (conversion *user_seq, conversion *std_seq)
3372 {
3373   conversion **t;
3374
3375   gcc_assert (user_seq->kind == ck_user);
3376
3377   /* Find the end of the second conversion sequence.  */
3378   t = &(std_seq);
3379   while ((*t)->kind != ck_identity)
3380     t = &((*t)->u.next);
3381
3382   /* Replace the identity conversion with the user conversion
3383      sequence.  */
3384   *t = user_seq;
3385
3386   /* The entire sequence is a user-conversion sequence.  */
3387   std_seq->user_conv_p = true;
3388
3389   return std_seq;
3390 }
3391
3392 /* Handle overload resolution for initializing an object of class type from
3393    an initializer list.  First we look for a suitable constructor that
3394    takes a std::initializer_list; if we don't find one, we then look for a
3395    non-list constructor.
3396
3397    Parameters are as for add_candidates, except that the arguments are in
3398    the form of a CONSTRUCTOR (the initializer list) rather than a VEC, and
3399    the RETURN_TYPE parameter is replaced by TOTYPE, the desired type.  */
3400
3401 static void
3402 add_list_candidates (tree fns, tree first_arg,
3403                      tree init_list, tree totype,
3404                      tree explicit_targs, bool template_only,
3405                      tree conversion_path, tree access_path,
3406                      int flags,
3407                      struct z_candidate **candidates)
3408 {
3409   VEC(tree,gc) *args;
3410
3411   gcc_assert (*candidates == NULL);
3412
3413   /* For list-initialization we consider explicit constructors, but
3414      give an error if one is selected.  */
3415   flags &= ~LOOKUP_ONLYCONVERTING;
3416   /* And we don't allow narrowing conversions.  We also use this flag to
3417      avoid the copy constructor call for copy-list-initialization.  */
3418   flags |= LOOKUP_NO_NARROWING;
3419
3420   /* Always use the default constructor if the list is empty (DR 990).  */
3421   if (CONSTRUCTOR_NELTS (init_list) == 0
3422       && TYPE_HAS_DEFAULT_CONSTRUCTOR (totype))
3423     ;
3424   /* If the class has a list ctor, try passing the list as a single
3425      argument first, but only consider list ctors.  */
3426   else if (TYPE_HAS_LIST_CTOR (totype))
3427     {
3428       flags |= LOOKUP_LIST_ONLY;
3429       args = make_tree_vector_single (init_list);
3430       add_candidates (fns, first_arg, args, NULL_TREE,
3431                       explicit_targs, template_only, conversion_path,
3432                       access_path, flags, candidates);
3433       if (any_strictly_viable (*candidates))
3434         return;
3435     }
3436
3437   args = ctor_to_vec (init_list);
3438
3439   /* We aren't looking for list-ctors anymore.  */
3440   flags &= ~LOOKUP_LIST_ONLY;
3441   /* We allow more user-defined conversions within an init-list.  */
3442   flags &= ~LOOKUP_NO_CONVERSION;
3443   /* But not for the copy ctor.  */
3444   flags |= LOOKUP_NO_COPY_CTOR_CONVERSION;
3445
3446   add_candidates (fns, first_arg, args, NULL_TREE,
3447                   explicit_targs, template_only, conversion_path,
3448                   access_path, flags, candidates);
3449 }
3450
3451 /* Returns the best overload candidate to perform the requested
3452    conversion.  This function is used for three the overloading situations
3453    described in [over.match.copy], [over.match.conv], and [over.match.ref].
3454    If TOTYPE is a REFERENCE_TYPE, we're trying to find an lvalue binding as
3455    per [dcl.init.ref], so we ignore temporary bindings.  */
3456
3457 static struct z_candidate *
3458 build_user_type_conversion_1 (tree totype, tree expr, int flags)
3459 {
3460   struct z_candidate *candidates, *cand;
3461   tree fromtype = TREE_TYPE (expr);
3462   tree ctors = NULL_TREE;
3463   tree conv_fns = NULL_TREE;
3464   conversion *conv = NULL;
3465   tree first_arg = NULL_TREE;
3466   VEC(tree,gc) *args = NULL;
3467   bool any_viable_p;
3468   int convflags;
3469
3470   /* We represent conversion within a hierarchy using RVALUE_CONV and
3471      BASE_CONV, as specified by [over.best.ics]; these become plain
3472      constructor calls, as specified in [dcl.init].  */
3473   gcc_assert (!MAYBE_CLASS_TYPE_P (fromtype) || !MAYBE_CLASS_TYPE_P (totype)
3474               || !DERIVED_FROM_P (totype, fromtype));
3475
3476   if (MAYBE_CLASS_TYPE_P (totype))
3477     /* Use lookup_fnfields_slot instead of lookup_fnfields to avoid
3478        creating a garbage BASELINK; constructors can't be inherited.  */
3479     ctors = lookup_fnfields_slot (totype, complete_ctor_identifier);
3480
3481   if (MAYBE_CLASS_TYPE_P (fromtype))
3482     {
3483       tree to_nonref = non_reference (totype);
3484       if (same_type_ignoring_top_level_qualifiers_p (to_nonref, fromtype) ||
3485           (CLASS_TYPE_P (to_nonref) && CLASS_TYPE_P (fromtype)
3486            && DERIVED_FROM_P (to_nonref, fromtype)))
3487         {
3488           /* [class.conv.fct] A conversion function is never used to
3489              convert a (possibly cv-qualified) object to the (possibly
3490              cv-qualified) same object type (or a reference to it), to a
3491              (possibly cv-qualified) base class of that type (or a
3492              reference to it)...  */
3493         }
3494       else
3495         conv_fns = lookup_conversions (fromtype);
3496     }
3497
3498   candidates = 0;
3499   flags |= LOOKUP_NO_CONVERSION;
3500   if (BRACE_ENCLOSED_INITIALIZER_P (expr))
3501     flags |= LOOKUP_NO_NARROWING;
3502
3503   /* It's OK to bind a temporary for converting constructor arguments, but
3504      not in converting the return value of a conversion operator.  */
3505   convflags = ((flags & LOOKUP_NO_TEMP_BIND) | LOOKUP_NO_CONVERSION);
3506   flags &= ~LOOKUP_NO_TEMP_BIND;
3507
3508   if (ctors)
3509     {
3510       int ctorflags = flags;
3511
3512       first_arg = build_int_cst (build_pointer_type (totype), 0);
3513
3514       /* We should never try to call the abstract or base constructor
3515          from here.  */
3516       gcc_assert (!DECL_HAS_IN_CHARGE_PARM_P (OVL_CURRENT (ctors))
3517                   && !DECL_HAS_VTT_PARM_P (OVL_CURRENT (ctors)));
3518
3519       if (BRACE_ENCLOSED_INITIALIZER_P (expr))
3520         {
3521           /* List-initialization.  */
3522           add_list_candidates (ctors, first_arg, expr, totype, NULL_TREE,
3523                                false, TYPE_BINFO (totype), TYPE_BINFO (totype),
3524                                ctorflags, &candidates);
3525         }
3526       else
3527         {
3528           args = make_tree_vector_single (expr);
3529           add_candidates (ctors, first_arg, args, NULL_TREE, NULL_TREE, false,
3530                           TYPE_BINFO (totype), TYPE_BINFO (totype),
3531                           ctorflags, &candidates);
3532         }
3533
3534       for (cand = candidates; cand; cand = cand->next)
3535         {
3536           cand->second_conv = build_identity_conv (totype, NULL_TREE);
3537
3538           /* If totype isn't a reference, and LOOKUP_NO_TEMP_BIND isn't
3539              set, then this is copy-initialization.  In that case, "The
3540              result of the call is then used to direct-initialize the
3541              object that is the destination of the copy-initialization."
3542              [dcl.init]
3543
3544              We represent this in the conversion sequence with an
3545              rvalue conversion, which means a constructor call.  */
3546           if (TREE_CODE (totype) != REFERENCE_TYPE
3547               && !(convflags & LOOKUP_NO_TEMP_BIND))
3548             cand->second_conv
3549               = build_conv (ck_rvalue, totype, cand->second_conv);
3550         }
3551     }
3552
3553   if (conv_fns)
3554     first_arg = build_this (expr);
3555
3556   for (; conv_fns; conv_fns = TREE_CHAIN (conv_fns))
3557     {
3558       tree conversion_path = TREE_PURPOSE (conv_fns);
3559       struct z_candidate *old_candidates;
3560
3561       /* If we are called to convert to a reference type, we are trying to
3562          find an lvalue binding, so don't even consider temporaries.  If
3563          we don't find an lvalue binding, the caller will try again to
3564          look for a temporary binding.  */
3565       if (TREE_CODE (totype) == REFERENCE_TYPE)
3566         convflags |= LOOKUP_NO_TEMP_BIND;
3567
3568       old_candidates = candidates;
3569       add_candidates (TREE_VALUE (conv_fns), first_arg, NULL, totype,
3570                       NULL_TREE, false,
3571                       conversion_path, TYPE_BINFO (fromtype),
3572                       flags, &candidates);
3573
3574       for (cand = candidates; cand != old_candidates; cand = cand->next)
3575         {
3576           tree rettype = TREE_TYPE (TREE_TYPE (cand->fn));
3577           conversion *ics
3578             = implicit_conversion (totype,
3579                                    rettype,
3580                                    0,
3581                                    /*c_cast_p=*/false, convflags);
3582
3583           /* If LOOKUP_NO_TEMP_BIND isn't set, then this is
3584              copy-initialization.  In that case, "The result of the
3585              call is then used to direct-initialize the object that is
3586              the destination of the copy-initialization."  [dcl.init]
3587
3588              We represent this in the conversion sequence with an
3589              rvalue conversion, which means a constructor call.  But
3590              don't add a second rvalue conversion if there's already
3591              one there.  Which there really shouldn't be, but it's
3592              harmless since we'd add it here anyway. */
3593           if (ics && MAYBE_CLASS_TYPE_P (totype) && ics->kind != ck_rvalue
3594               && !(convflags & LOOKUP_NO_TEMP_BIND))
3595             ics = build_conv (ck_rvalue, totype, ics);
3596
3597           cand->second_conv = ics;
3598
3599           if (!ics)
3600             {
3601               cand->viable = 0;
3602               cand->reason = arg_conversion_rejection (NULL_TREE, -1,
3603                                                        rettype, totype);
3604             }
3605           else if (DECL_NONCONVERTING_P (cand->fn)
3606                    && ics->rank > cr_exact)
3607             {
3608               /* 13.3.1.5: For direct-initialization, those explicit
3609                  conversion functions that are not hidden within S and
3610                  yield type T or a type that can be converted to type T
3611                  with a qualification conversion (4.4) are also candidate
3612                  functions.  */
3613               cand->viable = -1;
3614               cand->reason = explicit_conversion_rejection (rettype, totype);
3615             }
3616           else if (cand->viable == 1 && ics->bad_p)
3617             {
3618               cand->viable = -1;
3619               cand->reason
3620                 = bad_arg_conversion_rejection (NULL_TREE, -1,
3621                                                 rettype, totype);
3622             }
3623         }
3624     }
3625
3626   candidates = splice_viable (candidates, pedantic, &any_viable_p);
3627   if (!any_viable_p)
3628     {
3629       if (args)
3630         release_tree_vector (args);
3631       return NULL;
3632     }
3633
3634   cand = tourney (candidates);
3635   if (cand == 0)
3636     {
3637       if (flags & LOOKUP_COMPLAIN)
3638         {
3639           error ("conversion from %qT to %qT is ambiguous",
3640                     fromtype, totype);
3641           print_z_candidates (location_of (expr), candidates);
3642         }
3643
3644       cand = candidates;        /* any one will do */
3645       cand->second_conv = build_ambiguous_conv (totype, expr);
3646       cand->second_conv->user_conv_p = true;
3647       if (!any_strictly_viable (candidates))
3648         cand->second_conv->bad_p = true;
3649       /* If there are viable candidates, don't set ICS_BAD_FLAG; an
3650          ambiguous conversion is no worse than another user-defined
3651          conversion.  */
3652
3653       return cand;
3654     }
3655
3656   /* Build the user conversion sequence.  */
3657   conv = build_conv
3658     (ck_user,
3659      (DECL_CONSTRUCTOR_P (cand->fn)
3660       ? totype : non_reference (TREE_TYPE (TREE_TYPE (cand->fn)))),
3661      build_identity_conv (TREE_TYPE (expr), expr));
3662   conv->cand = cand;
3663
3664   /* Remember that this was a list-initialization.  */
3665   if (flags & LOOKUP_NO_NARROWING)
3666     conv->check_narrowing = true;
3667
3668   /* Combine it with the second conversion sequence.  */
3669   cand->second_conv = merge_conversion_sequences (conv,
3670                                                   cand->second_conv);
3671
3672   if (cand->viable == -1)
3673     cand->second_conv->bad_p = true;
3674
3675   return cand;
3676 }
3677
3678 /* Wrapper for above. */
3679
3680 tree
3681 build_user_type_conversion (tree totype, tree expr, int flags)
3682 {
3683   struct z_candidate *cand;
3684   tree ret;
3685
3686   bool subtime = timevar_cond_start (TV_OVERLOAD);
3687   cand = build_user_type_conversion_1 (totype, expr, flags);
3688
3689   if (cand)
3690     {
3691       if (cand->second_conv->kind == ck_ambig)
3692         ret = error_mark_node;
3693       else
3694         {
3695           expr = convert_like (cand->second_conv, expr, tf_warning_or_error);
3696           ret = convert_from_reference (expr);
3697         }
3698     }
3699   else
3700     ret = NULL_TREE;
3701
3702   timevar_cond_stop (TV_OVERLOAD, subtime);
3703   return ret;
3704 }
3705
3706 /* Subroutine of convert_nontype_argument.
3707
3708    EXPR is an argument for a template non-type parameter of integral or
3709    enumeration type.  Do any necessary conversions (that are permitted for
3710    non-type arguments) to convert it to the parameter type.
3711
3712    If conversion is successful, returns the converted expression;
3713    otherwise, returns error_mark_node.  */
3714
3715 tree
3716 build_integral_nontype_arg_conv (tree type, tree expr, tsubst_flags_t complain)
3717 {
3718   conversion *conv;
3719   void *p;
3720   tree t;
3721
3722   if (error_operand_p (expr))
3723     return error_mark_node;
3724
3725   gcc_assert (INTEGRAL_OR_ENUMERATION_TYPE_P (type));
3726
3727   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
3728   p = conversion_obstack_alloc (0);
3729
3730   conv = implicit_conversion (type, TREE_TYPE (expr), expr,
3731                               /*c_cast_p=*/false,
3732                               LOOKUP_IMPLICIT);
3733
3734   /* for a non-type template-parameter of integral or
3735      enumeration type, integral promotions (4.5) and integral
3736      conversions (4.7) are applied.  */
3737   /* It should be sufficient to check the outermost conversion step, since
3738      there are no qualification conversions to integer type.  */
3739   if (conv)
3740     switch (conv->kind)
3741       {
3742         /* A conversion function is OK.  If it isn't constexpr, we'll
3743            complain later that the argument isn't constant.  */
3744       case ck_user:
3745         /* The lvalue-to-rvalue conversion is OK.  */
3746       case ck_rvalue:
3747       case ck_identity:
3748         break;
3749
3750       case ck_std:
3751         t = conv->u.next->type;
3752         if (INTEGRAL_OR_ENUMERATION_TYPE_P (t))
3753           break;
3754
3755         if (complain & tf_error)
3756           error ("conversion from %qT to %qT not considered for "
3757                  "non-type template argument", t, type);
3758         /* and fall through.  */
3759
3760       default:
3761         conv = NULL;
3762         break;
3763       }
3764
3765   if (conv)
3766     expr = convert_like (conv, expr, complain);
3767   else
3768     expr = error_mark_node;
3769
3770   /* Free all the conversions we allocated.  */
3771   obstack_free (&conversion_obstack, p);
3772
3773   return expr;
3774 }
3775
3776 /* Do any initial processing on the arguments to a function call.  */
3777
3778 static VEC(tree,gc) *
3779 resolve_args (VEC(tree,gc) *args, tsubst_flags_t complain)
3780 {
3781   unsigned int ix;
3782   tree arg;
3783
3784   FOR_EACH_VEC_ELT (tree, args, ix, arg)
3785     {
3786       if (error_operand_p (arg))
3787         return NULL;
3788       else if (VOID_TYPE_P (TREE_TYPE (arg)))
3789         {
3790           if (complain & tf_error)
3791             error ("invalid use of void expression");
3792           return NULL;
3793         }
3794       else if (invalid_nonstatic_memfn_p (arg, tf_warning_or_error))
3795         return NULL;
3796     }
3797   return args;
3798 }
3799
3800 /* Perform overload resolution on FN, which is called with the ARGS.
3801
3802    Return the candidate function selected by overload resolution, or
3803    NULL if the event that overload resolution failed.  In the case
3804    that overload resolution fails, *CANDIDATES will be the set of
3805    candidates considered, and ANY_VIABLE_P will be set to true or
3806    false to indicate whether or not any of the candidates were
3807    viable.
3808
3809    The ARGS should already have gone through RESOLVE_ARGS before this
3810    function is called.  */
3811
3812 static struct z_candidate *
3813 perform_overload_resolution (tree fn,
3814                              const VEC(tree,gc) *args,
3815                              struct z_candidate **candidates,
3816                              bool *any_viable_p)
3817 {
3818   struct z_candidate *cand;
3819   tree explicit_targs;
3820   int template_only;
3821
3822   bool subtime = timevar_cond_start (TV_OVERLOAD);
3823
3824   explicit_targs = NULL_TREE;
3825   template_only = 0;
3826
3827   *candidates = NULL;
3828   *any_viable_p = true;
3829
3830   /* Check FN.  */
3831   gcc_assert (TREE_CODE (fn) == FUNCTION_DECL
3832               || TREE_CODE (fn) == TEMPLATE_DECL
3833               || TREE_CODE (fn) == OVERLOAD
3834               || TREE_CODE (fn) == TEMPLATE_ID_EXPR);
3835
3836   if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
3837     {
3838       explicit_targs = TREE_OPERAND (fn, 1);
3839       fn = TREE_OPERAND (fn, 0);
3840       template_only = 1;
3841     }
3842
3843   /* Add the various candidate functions.  */
3844   add_candidates (fn, NULL_TREE, args, NULL_TREE,
3845                   explicit_targs, template_only,
3846                   /*conversion_path=*/NULL_TREE,
3847                   /*access_path=*/NULL_TREE,
3848                   LOOKUP_NORMAL,
3849                   candidates);
3850
3851   *candidates = splice_viable (*candidates, pedantic, any_viable_p);
3852   if (*any_viable_p)
3853     cand = tourney (*candidates);
3854   else
3855     cand = NULL;
3856
3857   timevar_cond_stop (TV_OVERLOAD, subtime);
3858   return cand;
3859 }
3860
3861 /* Print an error message about being unable to build a call to FN with
3862    ARGS.  ANY_VIABLE_P indicates whether any candidate functions could
3863    be located; CANDIDATES is a possibly empty list of such
3864    functions.  */
3865
3866 static void
3867 print_error_for_call_failure (tree fn, VEC(tree,gc) *args, bool any_viable_p,
3868                               struct z_candidate *candidates)
3869 {
3870   tree name = DECL_NAME (OVL_CURRENT (fn));
3871   location_t loc = location_of (name);
3872
3873   if (!any_viable_p)
3874     error_at (loc, "no matching function for call to %<%D(%A)%>",
3875               name, build_tree_list_vec (args));
3876   else
3877     error_at (loc, "call of overloaded %<%D(%A)%> is ambiguous",
3878               name, build_tree_list_vec (args));
3879   if (candidates)
3880     print_z_candidates (loc, candidates);
3881 }
3882
3883 /* Return an expression for a call to FN (a namespace-scope function,
3884    or a static member function) with the ARGS.  This may change
3885    ARGS.  */
3886
3887 tree
3888 build_new_function_call (tree fn, VEC(tree,gc) **args, bool koenig_p, 
3889                          tsubst_flags_t complain)
3890 {
3891   struct z_candidate *candidates, *cand;
3892   bool any_viable_p;
3893   void *p;
3894   tree result;
3895
3896   if (args != NULL && *args != NULL)
3897     {
3898       *args = resolve_args (*args, complain);
3899       if (*args == NULL)
3900         return error_mark_node;
3901     }
3902
3903   /* If this function was found without using argument dependent
3904      lookup, then we want to ignore any undeclared friend
3905      functions.  */
3906   if (!koenig_p)
3907     {
3908       tree orig_fn = fn;
3909
3910       fn = remove_hidden_names (fn);
3911       if (!fn)
3912         {
3913           if (complain & tf_error)
3914             print_error_for_call_failure (orig_fn, *args, false, NULL);
3915           return error_mark_node;
3916         }
3917     }
3918
3919   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
3920   p = conversion_obstack_alloc (0);
3921
3922   cand = perform_overload_resolution (fn, *args, &candidates, &any_viable_p);
3923
3924   if (!cand)
3925     {
3926       if (complain & tf_error)
3927         {
3928           if (!any_viable_p && candidates && ! candidates->next
3929               && (TREE_CODE (candidates->fn) == FUNCTION_DECL))
3930             return cp_build_function_call_vec (candidates->fn, args, complain);
3931           if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
3932             fn = TREE_OPERAND (fn, 0);
3933           print_error_for_call_failure (fn, *args, any_viable_p, candidates);
3934         }
3935       result = error_mark_node;
3936     }
3937   else
3938     {
3939       int flags = LOOKUP_NORMAL;
3940       /* If fn is template_id_expr, the call has explicit template arguments
3941          (e.g. func<int>(5)), communicate this info to build_over_call
3942          through flags so that later we can use it to decide whether to warn
3943          about peculiar null pointer conversion.  */
3944       if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
3945         flags |= LOOKUP_EXPLICIT_TMPL_ARGS;
3946       result = build_over_call (cand, flags, complain);
3947     }
3948
3949   /* Free all the conversions we allocated.  */
3950   obstack_free (&conversion_obstack, p);
3951
3952   return result;
3953 }
3954
3955 /* Build a call to a global operator new.  FNNAME is the name of the
3956    operator (either "operator new" or "operator new[]") and ARGS are
3957    the arguments provided.  This may change ARGS.  *SIZE points to the
3958    total number of bytes required by the allocation, and is updated if
3959    that is changed here.  *COOKIE_SIZE is non-NULL if a cookie should
3960    be used.  If this function determines that no cookie should be
3961    used, after all, *COOKIE_SIZE is set to NULL_TREE.  If FN is
3962    non-NULL, it will be set, upon return, to the allocation function
3963    called.  */
3964
3965 tree
3966 build_operator_new_call (tree fnname, VEC(tree,gc) **args,
3967                          tree *size, tree *cookie_size,
3968                          tree *fn)
3969 {
3970   tree fns;
3971   struct z_candidate *candidates;
3972   struct z_candidate *cand;
3973   bool any_viable_p;
3974
3975   if (fn)
3976     *fn = NULL_TREE;
3977   VEC_safe_insert (tree, gc, *args, 0, *size);
3978   *args = resolve_args (*args, tf_warning_or_error);
3979   if (*args == NULL)
3980     return error_mark_node;
3981
3982   /* Based on:
3983
3984        [expr.new]
3985
3986        If this lookup fails to find the name, or if the allocated type
3987        is not a class type, the allocation function's name is looked
3988        up in the global scope.
3989
3990      we disregard block-scope declarations of "operator new".  */
3991   fns = lookup_function_nonclass (fnname, *args, /*block_p=*/false);
3992
3993   /* Figure out what function is being called.  */
3994   cand = perform_overload_resolution (fns, *args, &candidates, &any_viable_p);
3995
3996   /* If no suitable function could be found, issue an error message
3997      and give up.  */
3998   if (!cand)
3999     {
4000       print_error_for_call_failure (fns, *args, any_viable_p, candidates);
4001       return error_mark_node;
4002     }
4003
4004    /* If a cookie is required, add some extra space.  Whether
4005       or not a cookie is required cannot be determined until
4006       after we know which function was called.  */
4007    if (*cookie_size)
4008      {
4009        bool use_cookie = true;
4010        if (!abi_version_at_least (2))
4011          {
4012            /* In G++ 3.2, the check was implemented incorrectly; it
4013               looked at the placement expression, rather than the
4014               type of the function.  */
4015            if (VEC_length (tree, *args) == 2
4016                && same_type_p (TREE_TYPE (VEC_index (tree, *args, 1)),
4017                                ptr_type_node))
4018              use_cookie = false;
4019          }
4020        else
4021          {
4022            tree arg_types;
4023
4024            arg_types = TYPE_ARG_TYPES (TREE_TYPE (cand->fn));
4025            /* Skip the size_t parameter.  */
4026            arg_types = TREE_CHAIN (arg_types);
4027            /* Check the remaining parameters (if any).  */
4028            if (arg_types
4029                && TREE_CHAIN (arg_types) == void_list_node
4030                && same_type_p (TREE_VALUE (arg_types),
4031                                ptr_type_node))
4032              use_cookie = false;
4033          }
4034        /* If we need a cookie, adjust the number of bytes allocated.  */
4035        if (use_cookie)
4036          {
4037            /* Update the total size.  */
4038            *size = size_binop (PLUS_EXPR, *size, *cookie_size);
4039            /* Update the argument list to reflect the adjusted size.  */
4040            VEC_replace (tree, *args, 0, *size);
4041          }
4042        else
4043          *cookie_size = NULL_TREE;
4044      }
4045
4046    /* Tell our caller which function we decided to call.  */
4047    if (fn)
4048      *fn = cand->fn;
4049
4050    /* Build the CALL_EXPR.  */
4051    return build_over_call (cand, LOOKUP_NORMAL, tf_warning_or_error);
4052 }
4053
4054 /* Build a new call to operator().  This may change ARGS.  */
4055
4056 static tree
4057 build_op_call_1 (tree obj, VEC(tree,gc) **args, tsubst_flags_t complain)
4058 {
4059   struct z_candidate *candidates = 0, *cand;
4060   tree fns, convs, first_mem_arg = NULL_TREE;
4061   tree type = TREE_TYPE (obj);
4062   bool any_viable_p;
4063   tree result = NULL_TREE;
4064   void *p;
4065
4066   if (error_operand_p (obj))
4067     return error_mark_node;
4068
4069   obj = prep_operand (obj);
4070
4071   if (TYPE_PTRMEMFUNC_P (type))
4072     {
4073       if (complain & tf_error)
4074         /* It's no good looking for an overloaded operator() on a
4075            pointer-to-member-function.  */
4076         error ("pointer-to-member function %E cannot be called without an object; consider using .* or ->*", obj);
4077       return error_mark_node;
4078     }
4079
4080   if (TYPE_BINFO (type))
4081     {
4082       fns = lookup_fnfields (TYPE_BINFO (type), ansi_opname (CALL_EXPR), 1);
4083       if (fns == error_mark_node)
4084         return error_mark_node;
4085     }
4086   else
4087     fns = NULL_TREE;
4088
4089   if (args != NULL && *args != NULL)
4090     {
4091       *args = resolve_args (*args, complain);
4092       if (*args == NULL)
4093         return error_mark_node;
4094     }
4095
4096   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
4097   p = conversion_obstack_alloc (0);
4098
4099   if (fns)
4100     {
4101       first_mem_arg = build_this (obj);
4102
4103       add_candidates (BASELINK_FUNCTIONS (fns),
4104                       first_mem_arg, *args, NULL_TREE,
4105                       NULL_TREE, false,
4106                       BASELINK_BINFO (fns), BASELINK_ACCESS_BINFO (fns),
4107                       LOOKUP_NORMAL, &candidates);
4108     }
4109
4110   convs = lookup_conversions (type);
4111
4112   for (; convs; convs = TREE_CHAIN (convs))
4113     {
4114       tree fns = TREE_VALUE (convs);
4115       tree totype = TREE_TYPE (convs);
4116
4117       if ((TREE_CODE (totype) == POINTER_TYPE
4118            && TREE_CODE (TREE_TYPE (totype)) == FUNCTION_TYPE)
4119           || (TREE_CODE (totype) == REFERENCE_TYPE
4120               && TREE_CODE (TREE_TYPE (totype)) == FUNCTION_TYPE)
4121           || (TREE_CODE (totype) == REFERENCE_TYPE
4122               && TREE_CODE (TREE_TYPE (totype)) == POINTER_TYPE
4123               && TREE_CODE (TREE_TYPE (TREE_TYPE (totype))) == FUNCTION_TYPE))
4124         for (; fns; fns = OVL_NEXT (fns))
4125           {
4126             tree fn = OVL_CURRENT (fns);
4127
4128             if (DECL_NONCONVERTING_P (fn))
4129               continue;
4130
4131             if (TREE_CODE (fn) == TEMPLATE_DECL)
4132               add_template_conv_candidate
4133                 (&candidates, fn, obj, NULL_TREE, *args, totype,
4134                  /*access_path=*/NULL_TREE,
4135                  /*conversion_path=*/NULL_TREE);
4136             else
4137               add_conv_candidate (&candidates, fn, obj, NULL_TREE,
4138                                   *args, /*conversion_path=*/NULL_TREE,
4139                                   /*access_path=*/NULL_TREE);
4140           }
4141     }
4142
4143   candidates = splice_viable (candidates, pedantic, &any_viable_p);
4144   if (!any_viable_p)
4145     {
4146       if (complain & tf_error)
4147         {
4148           error ("no match for call to %<(%T) (%A)%>", TREE_TYPE (obj),
4149                  build_tree_list_vec (*args));
4150           print_z_candidates (location_of (TREE_TYPE (obj)), candidates);
4151         }
4152       result = error_mark_node;
4153     }
4154   else
4155     {
4156       cand = tourney (candidates);
4157       if (cand == 0)
4158         {
4159           if (complain & tf_error)
4160             {
4161               error ("call of %<(%T) (%A)%> is ambiguous", 
4162                      TREE_TYPE (obj), build_tree_list_vec (*args));
4163               print_z_candidates (location_of (TREE_TYPE (obj)), candidates);
4164             }
4165           result = error_mark_node;
4166         }
4167       /* Since cand->fn will be a type, not a function, for a conversion
4168          function, we must be careful not to unconditionally look at
4169          DECL_NAME here.  */
4170       else if (TREE_CODE (cand->fn) == FUNCTION_DECL
4171                && DECL_OVERLOADED_OPERATOR_P (cand->fn) == CALL_EXPR)
4172         result = build_over_call (cand, LOOKUP_NORMAL, complain);
4173       else
4174         {
4175           obj = convert_like_with_context (cand->convs[0], obj, cand->fn, -1,
4176                                            complain);
4177           obj = convert_from_reference (obj);
4178           result = cp_build_function_call_vec (obj, args, complain);
4179         }
4180     }
4181
4182   /* Free all the conversions we allocated.  */
4183   obstack_free (&conversion_obstack, p);
4184
4185   return result;
4186 }
4187
4188 /* Wrapper for above.  */
4189
4190 tree
4191 build_op_call (tree obj, VEC(tree,gc) **args, tsubst_flags_t complain)
4192 {
4193   tree ret;
4194   bool subtime = timevar_cond_start (TV_OVERLOAD);
4195   ret = build_op_call_1 (obj, args, complain);
4196   timevar_cond_stop (TV_OVERLOAD, subtime);
4197   return ret;
4198 }
4199
4200 static void
4201 op_error (enum tree_code code, enum tree_code code2,
4202           tree arg1, tree arg2, tree arg3, bool match)
4203 {
4204   const char *opname;
4205
4206   if (code == MODIFY_EXPR)
4207     opname = assignment_operator_name_info[code2].name;
4208   else
4209     opname = operator_name_info[code].name;
4210
4211   switch (code)
4212     {
4213     case COND_EXPR:
4214       if (match)
4215         error ("ambiguous overload for ternary %<operator?:%> "
4216                "in %<%E ? %E : %E%>", arg1, arg2, arg3);
4217       else
4218         error ("no match for ternary %<operator?:%> "
4219                "in %<%E ? %E : %E%>", arg1, arg2, arg3);
4220       break;
4221
4222     case POSTINCREMENT_EXPR:
4223     case POSTDECREMENT_EXPR:
4224       if (match)
4225         error ("ambiguous overload for %<operator%s%> in %<%E%s%>",
4226                opname, arg1, opname);
4227       else
4228         error ("no match for %<operator%s%> in %<%E%s%>", 
4229                opname, arg1, opname);
4230       break;
4231
4232     case ARRAY_REF:
4233       if (match)
4234         error ("ambiguous overload for %<operator[]%> in %<%E[%E]%>", 
4235                arg1, arg2);
4236       else
4237         error ("no match for %<operator[]%> in %<%E[%E]%>", 
4238                arg1, arg2);
4239       break;
4240
4241     case REALPART_EXPR:
4242     case IMAGPART_EXPR:
4243       if (match)
4244         error ("ambiguous overload for %qs in %<%s %E%>", 
4245                opname, opname, arg1);
4246       else
4247         error ("no match for %qs in %<%s %E%>",
4248                opname, opname, arg1);
4249       break;
4250
4251     default:
4252       if (arg2)
4253         if (match)
4254           error ("ambiguous overload for %<operator%s%> in %<%E %s %E%>",
4255                   opname, arg1, opname, arg2);
4256         else
4257           error ("no match for %<operator%s%> in %<%E %s %E%>",
4258                  opname, arg1, opname, arg2);
4259       else
4260         if (match)
4261           error ("ambiguous overload for %<operator%s%> in %<%s%E%>",
4262                  opname, opname, arg1);
4263         else
4264           error ("no match for %<operator%s%> in %<%s%E%>",
4265                  opname, opname, arg1);
4266       break;
4267     }
4268 }
4269
4270 /* Return the implicit conversion sequence that could be used to
4271    convert E1 to E2 in [expr.cond].  */
4272
4273 static conversion *
4274 conditional_conversion (tree e1, tree e2)
4275 {
4276   tree t1 = non_reference (TREE_TYPE (e1));
4277   tree t2 = non_reference (TREE_TYPE (e2));
4278   conversion *conv;
4279   bool good_base;
4280
4281   /* [expr.cond]
4282
4283      If E2 is an lvalue: E1 can be converted to match E2 if E1 can be
4284      implicitly converted (clause _conv_) to the type "reference to
4285      T2", subject to the constraint that in the conversion the
4286      reference must bind directly (_dcl.init.ref_) to E1.  */
4287   if (real_lvalue_p (e2))
4288     {
4289       conv = implicit_conversion (build_reference_type (t2),
4290                                   t1,
4291                                   e1,
4292                                   /*c_cast_p=*/false,
4293                                   LOOKUP_NO_TEMP_BIND|LOOKUP_ONLYCONVERTING);
4294       if (conv)
4295         return conv;
4296     }
4297
4298   /* [expr.cond]
4299
4300      If E1 and E2 have class type, and the underlying class types are
4301      the same or one is a base class of the other: E1 can be converted
4302      to match E2 if the class of T2 is the same type as, or a base
4303      class of, the class of T1, and the cv-qualification of T2 is the
4304      same cv-qualification as, or a greater cv-qualification than, the
4305      cv-qualification of T1.  If the conversion is applied, E1 is
4306      changed to an rvalue of type T2 that still refers to the original
4307      source class object (or the appropriate subobject thereof).  */
4308   if (CLASS_TYPE_P (t1) && CLASS_TYPE_P (t2)
4309       && ((good_base = DERIVED_FROM_P (t2, t1)) || DERIVED_FROM_P (t1, t2)))
4310     {
4311       if (good_base && at_least_as_qualified_p (t2, t1))
4312         {
4313           conv = build_identity_conv (t1, e1);
4314           if (!same_type_p (TYPE_MAIN_VARIANT (t1),
4315                             TYPE_MAIN_VARIANT (t2)))
4316             conv = build_conv (ck_base, t2, conv);
4317           else
4318             conv = build_conv (ck_rvalue, t2, conv);
4319           return conv;
4320         }
4321       else
4322         return NULL;
4323     }
4324   else
4325     /* [expr.cond]
4326
4327        Otherwise: E1 can be converted to match E2 if E1 can be implicitly
4328        converted to the type that expression E2 would have if E2 were
4329        converted to an rvalue (or the type it has, if E2 is an rvalue).  */
4330     return implicit_conversion (t2, t1, e1, /*c_cast_p=*/false,
4331                                 LOOKUP_IMPLICIT);
4332 }
4333
4334 /* Implement [expr.cond].  ARG1, ARG2, and ARG3 are the three
4335    arguments to the conditional expression.  */
4336
4337 static tree
4338 build_conditional_expr_1 (tree arg1, tree arg2, tree arg3,
4339                           tsubst_flags_t complain)
4340 {
4341   tree arg2_type;
4342   tree arg3_type;
4343   tree result = NULL_TREE;
4344   tree result_type = NULL_TREE;
4345   bool lvalue_p = true;
4346   struct z_candidate *candidates = 0;
4347   struct z_candidate *cand;
4348   void *p;
4349
4350   /* As a G++ extension, the second argument to the conditional can be
4351      omitted.  (So that `a ? : c' is roughly equivalent to `a ? a :
4352      c'.)  If the second operand is omitted, make sure it is
4353      calculated only once.  */
4354   if (!arg2)
4355     {
4356       if (complain & tf_error)
4357         pedwarn (input_location, OPT_pedantic, 
4358                  "ISO C++ forbids omitting the middle term of a ?: expression");
4359
4360       /* Make sure that lvalues remain lvalues.  See g++.oliva/ext1.C.  */
4361       if (real_lvalue_p (arg1))
4362         arg2 = arg1 = stabilize_reference (arg1);
4363       else
4364         arg2 = arg1 = save_expr (arg1);
4365     }
4366
4367   /* [expr.cond]
4368
4369      The first expression is implicitly converted to bool (clause
4370      _conv_).  */
4371   arg1 = perform_implicit_conversion_flags (boolean_type_node, arg1, complain,
4372                                             LOOKUP_NORMAL);
4373
4374   /* If something has already gone wrong, just pass that fact up the
4375      tree.  */
4376   if (error_operand_p (arg1)
4377       || error_operand_p (arg2)
4378       || error_operand_p (arg3))
4379     return error_mark_node;
4380
4381   /* [expr.cond]
4382
4383      If either the second or the third operand has type (possibly
4384      cv-qualified) void, then the lvalue-to-rvalue (_conv.lval_),
4385      array-to-pointer (_conv.array_), and function-to-pointer
4386      (_conv.func_) standard conversions are performed on the second
4387      and third operands.  */
4388   arg2_type = unlowered_expr_type (arg2);
4389   arg3_type = unlowered_expr_type (arg3);
4390   if (VOID_TYPE_P (arg2_type) || VOID_TYPE_P (arg3_type))
4391     {
4392       /* Do the conversions.  We don't these for `void' type arguments
4393          since it can't have any effect and since decay_conversion
4394          does not handle that case gracefully.  */
4395       if (!VOID_TYPE_P (arg2_type))
4396         arg2 = decay_conversion (arg2);
4397       if (!VOID_TYPE_P (arg3_type))
4398         arg3 = decay_conversion (arg3);
4399       arg2_type = TREE_TYPE (arg2);
4400       arg3_type = TREE_TYPE (arg3);
4401
4402       /* [expr.cond]
4403
4404          One of the following shall hold:
4405
4406          --The second or the third operand (but not both) is a
4407            throw-expression (_except.throw_); the result is of the
4408            type of the other and is an rvalue.
4409
4410          --Both the second and the third operands have type void; the
4411            result is of type void and is an rvalue.
4412
4413          We must avoid calling force_rvalue for expressions of type
4414          "void" because it will complain that their value is being
4415          used.  */
4416       if (TREE_CODE (arg2) == THROW_EXPR
4417           && TREE_CODE (arg3) != THROW_EXPR)
4418         {
4419           if (!VOID_TYPE_P (arg3_type))
4420             {
4421               arg3 = force_rvalue (arg3, complain);
4422               if (arg3 == error_mark_node)
4423                 return error_mark_node;
4424             }
4425           arg3_type = TREE_TYPE (arg3);
4426           result_type = arg3_type;
4427         }
4428       else if (TREE_CODE (arg2) != THROW_EXPR
4429                && TREE_CODE (arg3) == THROW_EXPR)
4430         {
4431           if (!VOID_TYPE_P (arg2_type))
4432             {
4433               arg2 = force_rvalue (arg2, complain);
4434               if (arg2 == error_mark_node)
4435                 return error_mark_node;
4436             }
4437           arg2_type = TREE_TYPE (arg2);
4438           result_type = arg2_type;
4439         }
4440       else if (VOID_TYPE_P (arg2_type) && VOID_TYPE_P (arg3_type))
4441         result_type = void_type_node;
4442       else
4443         {
4444           if (complain & tf_error)
4445             {
4446               if (VOID_TYPE_P (arg2_type))
4447                 error ("second operand to the conditional operator "
4448                        "is of type %<void%>, "
4449                        "but the third operand is neither a throw-expression "
4450                        "nor of type %<void%>");
4451               else
4452                 error ("third operand to the conditional operator "
4453                        "is of type %<void%>, "
4454                        "but the second operand is neither a throw-expression "
4455                        "nor of type %<void%>");
4456             }
4457           return error_mark_node;
4458         }
4459
4460       lvalue_p = false;
4461       goto valid_operands;
4462     }
4463   /* [expr.cond]
4464
4465      Otherwise, if the second and third operand have different types,
4466      and either has (possibly cv-qualified) class type, an attempt is
4467      made to convert each of those operands to the type of the other.  */
4468   else if (!same_type_p (arg2_type, arg3_type)
4469            && (CLASS_TYPE_P (arg2_type) || CLASS_TYPE_P (arg3_type)))
4470     {
4471       conversion *conv2;
4472       conversion *conv3;
4473
4474       /* Get the high-water mark for the CONVERSION_OBSTACK.  */
4475       p = conversion_obstack_alloc (0);
4476
4477       conv2 = conditional_conversion (arg2, arg3);
4478       conv3 = conditional_conversion (arg3, arg2);
4479
4480       /* [expr.cond]
4481
4482          If both can be converted, or one can be converted but the
4483          conversion is ambiguous, the program is ill-formed.  If
4484          neither can be converted, the operands are left unchanged and
4485          further checking is performed as described below.  If exactly
4486          one conversion is possible, that conversion is applied to the
4487          chosen operand and the converted operand is used in place of
4488          the original operand for the remainder of this section.  */
4489       if ((conv2 && !conv2->bad_p
4490            && conv3 && !conv3->bad_p)
4491           || (conv2 && conv2->kind == ck_ambig)
4492           || (conv3 && conv3->kind == ck_ambig))
4493         {
4494           error ("operands to ?: have different types %qT and %qT",
4495                  arg2_type, arg3_type);
4496           result = error_mark_node;
4497         }
4498       else if (conv2 && (!conv2->bad_p || !conv3))
4499         {
4500           arg2 = convert_like (conv2, arg2, complain);
4501           arg2 = convert_from_reference (arg2);
4502           arg2_type = TREE_TYPE (arg2);
4503           /* Even if CONV2 is a valid conversion, the result of the
4504              conversion may be invalid.  For example, if ARG3 has type
4505              "volatile X", and X does not have a copy constructor
4506              accepting a "volatile X&", then even if ARG2 can be
4507              converted to X, the conversion will fail.  */
4508           if (error_operand_p (arg2))
4509             result = error_mark_node;
4510         }
4511       else if (conv3 && (!conv3->bad_p || !conv2))
4512         {
4513           arg3 = convert_like (conv3, arg3, complain);
4514           arg3 = convert_from_reference (arg3);
4515           arg3_type = TREE_TYPE (arg3);
4516           if (error_operand_p (arg3))
4517             result = error_mark_node;
4518         }
4519
4520       /* Free all the conversions we allocated.  */
4521       obstack_free (&conversion_obstack, p);
4522
4523       if (result)
4524         return result;
4525
4526       /* If, after the conversion, both operands have class type,
4527          treat the cv-qualification of both operands as if it were the
4528          union of the cv-qualification of the operands.
4529
4530          The standard is not clear about what to do in this
4531          circumstance.  For example, if the first operand has type
4532          "const X" and the second operand has a user-defined
4533          conversion to "volatile X", what is the type of the second
4534          operand after this step?  Making it be "const X" (matching
4535          the first operand) seems wrong, as that discards the
4536          qualification without actually performing a copy.  Leaving it
4537          as "volatile X" seems wrong as that will result in the
4538          conditional expression failing altogether, even though,
4539          according to this step, the one operand could be converted to
4540          the type of the other.  */
4541       if ((conv2 || conv3)
4542           && CLASS_TYPE_P (arg2_type)
4543           && cp_type_quals (arg2_type) != cp_type_quals (arg3_type))
4544         arg2_type = arg3_type =
4545           cp_build_qualified_type (arg2_type,
4546                                    cp_type_quals (arg2_type)
4547                                    | cp_type_quals (arg3_type));
4548     }
4549
4550   /* [expr.cond]
4551
4552      If the second and third operands are lvalues and have the same
4553      type, the result is of that type and is an lvalue.  */
4554   if (real_lvalue_p (arg2)
4555       && real_lvalue_p (arg3)
4556       && same_type_p (arg2_type, arg3_type))
4557     {
4558       result_type = arg2_type;
4559       arg2 = mark_lvalue_use (arg2);
4560       arg3 = mark_lvalue_use (arg3);
4561       goto valid_operands;
4562     }
4563
4564   /* [expr.cond]
4565
4566      Otherwise, the result is an rvalue.  If the second and third
4567      operand do not have the same type, and either has (possibly
4568      cv-qualified) class type, overload resolution is used to
4569      determine the conversions (if any) to be applied to the operands
4570      (_over.match.oper_, _over.built_).  */
4571   lvalue_p = false;
4572   if (!same_type_p (arg2_type, arg3_type)
4573       && (CLASS_TYPE_P (arg2_type) || CLASS_TYPE_P (arg3_type)))
4574     {
4575       tree args[3];
4576       conversion *conv;
4577       bool any_viable_p;
4578
4579       /* Rearrange the arguments so that add_builtin_candidate only has
4580          to know about two args.  In build_builtin_candidate, the
4581          arguments are unscrambled.  */
4582       args[0] = arg2;
4583       args[1] = arg3;
4584       args[2] = arg1;
4585       add_builtin_candidates (&candidates,
4586                               COND_EXPR,
4587                               NOP_EXPR,
4588                               ansi_opname (COND_EXPR),
4589                               args,
4590                               LOOKUP_NORMAL);
4591
4592       /* [expr.cond]
4593
4594          If the overload resolution fails, the program is
4595          ill-formed.  */
4596       candidates = splice_viable (candidates, pedantic, &any_viable_p);
4597       if (!any_viable_p)
4598         {
4599           if (complain & tf_error)
4600             {
4601               op_error (COND_EXPR, NOP_EXPR, arg1, arg2, arg3, FALSE);
4602               print_z_candidates (location_of (arg1), candidates);
4603             }
4604           return error_mark_node;
4605         }
4606       cand = tourney (candidates);
4607       if (!cand)
4608         {
4609           if (complain & tf_error)
4610             {
4611               op_error (COND_EXPR, NOP_EXPR, arg1, arg2, arg3, FALSE);
4612               print_z_candidates (location_of (arg1), candidates);
4613             }
4614           return error_mark_node;
4615         }
4616
4617       /* [expr.cond]
4618
4619          Otherwise, the conversions thus determined are applied, and
4620          the converted operands are used in place of the original
4621          operands for the remainder of this section.  */
4622       conv = cand->convs[0];
4623       arg1 = convert_like (conv, arg1, complain);
4624       conv = cand->convs[1];
4625       arg2 = convert_like (conv, arg2, complain);
4626       arg2_type = TREE_TYPE (arg2);
4627       conv = cand->convs[2];
4628       arg3 = convert_like (conv, arg3, complain);
4629       arg3_type = TREE_TYPE (arg3);
4630     }
4631
4632   /* [expr.cond]
4633
4634      Lvalue-to-rvalue (_conv.lval_), array-to-pointer (_conv.array_),
4635      and function-to-pointer (_conv.func_) standard conversions are
4636      performed on the second and third operands.
4637
4638      We need to force the lvalue-to-rvalue conversion here for class types,
4639      so we get TARGET_EXPRs; trying to deal with a COND_EXPR of class rvalues
4640      that isn't wrapped with a TARGET_EXPR plays havoc with exception
4641      regions.  */
4642
4643   arg2 = force_rvalue (arg2, complain);
4644   if (!CLASS_TYPE_P (arg2_type))
4645     arg2_type = TREE_TYPE (arg2);
4646
4647   arg3 = force_rvalue (arg3, complain);
4648   if (!CLASS_TYPE_P (arg3_type))
4649     arg3_type = TREE_TYPE (arg3);
4650
4651   if (arg2 == error_mark_node || arg3 == error_mark_node)
4652     return error_mark_node;
4653
4654   /* [expr.cond]
4655
4656      After those conversions, one of the following shall hold:
4657
4658      --The second and third operands have the same type; the result  is  of
4659        that type.  */
4660   if (same_type_p (arg2_type, arg3_type))
4661     result_type = arg2_type;
4662   /* [expr.cond]
4663
4664      --The second and third operands have arithmetic or enumeration
4665        type; the usual arithmetic conversions are performed to bring
4666        them to a common type, and the result is of that type.  */
4667   else if ((ARITHMETIC_TYPE_P (arg2_type)
4668             || UNSCOPED_ENUM_P (arg2_type))
4669            && (ARITHMETIC_TYPE_P (arg3_type)
4670                || UNSCOPED_ENUM_P (arg3_type)))
4671     {
4672       /* In this case, there is always a common type.  */
4673       result_type = type_after_usual_arithmetic_conversions (arg2_type,
4674                                                              arg3_type);
4675       do_warn_double_promotion (result_type, arg2_type, arg3_type,
4676                                 "implicit conversion from %qT to %qT to "
4677                                 "match other result of conditional",
4678                                 input_location);
4679
4680       if (TREE_CODE (arg2_type) == ENUMERAL_TYPE
4681           && TREE_CODE (arg3_type) == ENUMERAL_TYPE)
4682         {
4683           if (complain & tf_warning)
4684             warning (0, 
4685                      "enumeral mismatch in conditional expression: %qT vs %qT",
4686                      arg2_type, arg3_type);
4687         }
4688       else if (extra_warnings
4689                && ((TREE_CODE (arg2_type) == ENUMERAL_TYPE
4690                     && !same_type_p (arg3_type, type_promotes_to (arg2_type)))
4691                    || (TREE_CODE (arg3_type) == ENUMERAL_TYPE
4692                        && !same_type_p (arg2_type, type_promotes_to (arg3_type)))))
4693         {
4694           if (complain & tf_warning)
4695             warning (0, 
4696                      "enumeral and non-enumeral type in conditional expression");
4697         }
4698
4699       arg2 = perform_implicit_conversion (result_type, arg2, complain);
4700       arg3 = perform_implicit_conversion (result_type, arg3, complain);
4701     }
4702   /* [expr.cond]
4703
4704      --The second and third operands have pointer type, or one has
4705        pointer type and the other is a null pointer constant; pointer
4706        conversions (_conv.ptr_) and qualification conversions
4707        (_conv.qual_) are performed to bring them to their composite
4708        pointer type (_expr.rel_).  The result is of the composite
4709        pointer type.
4710
4711      --The second and third operands have pointer to member type, or
4712        one has pointer to member type and the other is a null pointer
4713        constant; pointer to member conversions (_conv.mem_) and
4714        qualification conversions (_conv.qual_) are performed to bring
4715        them to a common type, whose cv-qualification shall match the
4716        cv-qualification of either the second or the third operand.
4717        The result is of the common type.  */
4718   else if ((null_ptr_cst_p (arg2)
4719             && (TYPE_PTR_P (arg3_type) || TYPE_PTR_TO_MEMBER_P (arg3_type)))
4720            || (null_ptr_cst_p (arg3)
4721                && (TYPE_PTR_P (arg2_type) || TYPE_PTR_TO_MEMBER_P (arg2_type)))
4722            || (TYPE_PTR_P (arg2_type) && TYPE_PTR_P (arg3_type))
4723            || (TYPE_PTRMEM_P (arg2_type) && TYPE_PTRMEM_P (arg3_type))
4724            || (TYPE_PTRMEMFUNC_P (arg2_type) && TYPE_PTRMEMFUNC_P (arg3_type)))
4725     {
4726       result_type = composite_pointer_type (arg2_type, arg3_type, arg2,
4727                                             arg3, CPO_CONDITIONAL_EXPR,
4728                                             complain);
4729       if (result_type == error_mark_node)
4730         return error_mark_node;
4731       arg2 = perform_implicit_conversion (result_type, arg2, complain);
4732       arg3 = perform_implicit_conversion (result_type, arg3, complain);
4733     }
4734
4735   if (!result_type)
4736     {
4737       if (complain & tf_error)
4738         error ("operands to ?: have different types %qT and %qT",
4739                arg2_type, arg3_type);
4740       return error_mark_node;
4741     }
4742
4743  valid_operands:
4744   result = build3 (COND_EXPR, result_type, arg1, arg2, arg3);
4745   if (!cp_unevaluated_operand)
4746     /* Avoid folding within decltype (c++/42013) and noexcept.  */
4747     result = fold_if_not_in_template (result);
4748
4749   /* We can't use result_type below, as fold might have returned a
4750      throw_expr.  */
4751
4752   if (!lvalue_p)
4753     {
4754       /* Expand both sides into the same slot, hopefully the target of
4755          the ?: expression.  We used to check for TARGET_EXPRs here,
4756          but now we sometimes wrap them in NOP_EXPRs so the test would
4757          fail.  */
4758       if (CLASS_TYPE_P (TREE_TYPE (result)))
4759         result = get_target_expr (result);
4760       /* If this expression is an rvalue, but might be mistaken for an
4761          lvalue, we must add a NON_LVALUE_EXPR.  */
4762       result = rvalue (result);
4763     }
4764
4765   return result;
4766 }
4767
4768 /* Wrapper for above.  */
4769
4770 tree
4771 build_conditional_expr (tree arg1, tree arg2, tree arg3,
4772                         tsubst_flags_t complain)
4773 {
4774   tree ret;
4775   bool subtime = timevar_cond_start (TV_OVERLOAD);
4776   ret = build_conditional_expr_1 (arg1, arg2, arg3, complain);
4777   timevar_cond_stop (TV_OVERLOAD, subtime);
4778   return ret;
4779 }
4780
4781 /* OPERAND is an operand to an expression.  Perform necessary steps
4782    required before using it.  If OPERAND is NULL_TREE, NULL_TREE is
4783    returned.  */
4784
4785 static tree
4786 prep_operand (tree operand)
4787 {
4788   if (operand)
4789     {
4790       if (CLASS_TYPE_P (TREE_TYPE (operand))
4791           && CLASSTYPE_TEMPLATE_INSTANTIATION (TREE_TYPE (operand)))
4792         /* Make sure the template type is instantiated now.  */
4793         instantiate_class_template (TYPE_MAIN_VARIANT (TREE_TYPE (operand)));
4794     }
4795
4796   return operand;
4797 }
4798
4799 /* Add each of the viable functions in FNS (a FUNCTION_DECL or
4800    OVERLOAD) to the CANDIDATES, returning an updated list of
4801    CANDIDATES.  The ARGS are the arguments provided to the call;
4802    if FIRST_ARG is non-null it is the implicit object argument,
4803    otherwise the first element of ARGS is used if needed.  The
4804    EXPLICIT_TARGS are explicit template arguments provided.
4805    TEMPLATE_ONLY is true if only template functions should be
4806    considered.  CONVERSION_PATH, ACCESS_PATH, and FLAGS are as for
4807    add_function_candidate.  */
4808
4809 static void
4810 add_candidates (tree fns, tree first_arg, const VEC(tree,gc) *args,
4811                 tree return_type,
4812                 tree explicit_targs, bool template_only,
4813                 tree conversion_path, tree access_path,
4814                 int flags,
4815                 struct z_candidate **candidates)
4816 {
4817   tree ctype;
4818   const VEC(tree,gc) *non_static_args;
4819   bool check_list_ctor;
4820   bool check_converting;
4821   unification_kind_t strict;
4822   tree fn;
4823
4824   if (!fns)
4825     return;
4826
4827   /* Precalculate special handling of constructors and conversion ops.  */
4828   fn = OVL_CURRENT (fns);
4829   if (DECL_CONV_FN_P (fn))
4830     {
4831       check_list_ctor = false;
4832       check_converting = !!(flags & LOOKUP_ONLYCONVERTING);
4833       if (flags & LOOKUP_NO_CONVERSION)
4834         /* We're doing return_type(x).  */
4835         strict = DEDUCE_CONV;
4836       else
4837         /* We're doing x.operator return_type().  */
4838         strict = DEDUCE_EXACT;
4839       /* [over.match.funcs] For conversion functions, the function
4840          is considered to be a member of the class of the implicit
4841          object argument for the purpose of defining the type of
4842          the implicit object parameter.  */
4843       ctype = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (first_arg)));
4844     }
4845   else
4846     {
4847       if (DECL_CONSTRUCTOR_P (fn))
4848         {
4849           check_list_ctor = !!(flags & LOOKUP_LIST_ONLY);
4850           check_converting = !!(flags & LOOKUP_ONLYCONVERTING);
4851         }
4852       else
4853         {
4854           check_list_ctor = false;
4855           check_converting = false;
4856         }
4857       strict = DEDUCE_CALL;
4858       ctype = conversion_path ? BINFO_TYPE (conversion_path) : NULL_TREE;
4859     }
4860
4861   if (first_arg)
4862     non_static_args = args;
4863   else
4864     /* Delay creating the implicit this parameter until it is needed.  */
4865     non_static_args = NULL;
4866
4867   for (; fns; fns = OVL_NEXT (fns))
4868     {
4869       tree fn_first_arg;
4870       const VEC(tree,gc) *fn_args;
4871
4872       fn = OVL_CURRENT (fns);
4873
4874       if (check_converting && DECL_NONCONVERTING_P (fn))
4875         continue;
4876       if (check_list_ctor && !is_list_ctor (fn))
4877         continue;
4878
4879       /* Figure out which set of arguments to use.  */
4880       if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
4881         {
4882           /* If this function is a non-static member and we didn't get an
4883              implicit object argument, move it out of args.  */
4884           if (first_arg == NULL_TREE)
4885             {
4886               unsigned int ix;
4887               tree arg;
4888               VEC(tree,gc) *tempvec
4889                 = VEC_alloc (tree, gc, VEC_length (tree, args) - 1);
4890               for (ix = 1; VEC_iterate (tree, args, ix, arg); ++ix)
4891                 VEC_quick_push (tree, tempvec, arg);
4892               non_static_args = tempvec;
4893               first_arg = build_this (VEC_index (tree, args, 0));
4894             }
4895
4896           fn_first_arg = first_arg;
4897           fn_args = non_static_args;
4898         }
4899       else
4900         {
4901           /* Otherwise, just use the list of arguments provided.  */
4902           fn_first_arg = NULL_TREE;
4903           fn_args = args;
4904         }
4905
4906       if (TREE_CODE (fn) == TEMPLATE_DECL)
4907         add_template_candidate (candidates,
4908                                 fn,
4909                                 ctype,
4910                                 explicit_targs,
4911                                 fn_first_arg, 
4912                                 fn_args,
4913                                 return_type,
4914                                 access_path,
4915                                 conversion_path,
4916                                 flags,
4917                                 strict);
4918       else if (!template_only)
4919         add_function_candidate (candidates,
4920                                 fn,
4921                                 ctype,
4922                                 fn_first_arg,
4923                                 fn_args,
4924                                 access_path,
4925                                 conversion_path,
4926                                 flags);
4927     }
4928 }
4929
4930 /* Even unsigned enum types promote to signed int.  We don't want to
4931    issue -Wsign-compare warnings for this case.  Here ORIG_ARG is the
4932    original argument and ARG is the argument after any conversions
4933    have been applied.  We set TREE_NO_WARNING if we have added a cast
4934    from an unsigned enum type to a signed integer type.  */
4935
4936 static void
4937 avoid_sign_compare_warnings (tree orig_arg, tree arg)
4938 {
4939   if (orig_arg != NULL_TREE
4940       && arg != NULL_TREE
4941       && orig_arg != arg
4942       && TREE_CODE (TREE_TYPE (orig_arg)) == ENUMERAL_TYPE
4943       && TYPE_UNSIGNED (TREE_TYPE (orig_arg))
4944       && INTEGRAL_TYPE_P (TREE_TYPE (arg))
4945       && !TYPE_UNSIGNED (TREE_TYPE (arg)))
4946     TREE_NO_WARNING (arg) = 1;
4947 }
4948
4949 static tree
4950 build_new_op_1 (enum tree_code code, int flags, tree arg1, tree arg2, tree arg3,
4951                 tree *overload, tsubst_flags_t complain)
4952 {
4953   tree orig_arg1 = arg1;
4954   tree orig_arg2 = arg2;
4955   tree orig_arg3 = arg3;
4956   struct z_candidate *candidates = 0, *cand;
4957   VEC(tree,gc) *arglist;
4958   tree fnname;
4959   tree args[3];
4960   tree result = NULL_TREE;
4961   bool result_valid_p = false;
4962   enum tree_code code2 = NOP_EXPR;
4963   enum tree_code code_orig_arg1 = ERROR_MARK;
4964   enum tree_code code_orig_arg2 = ERROR_MARK;
4965   conversion *conv;
4966   void *p;
4967   bool strict_p;
4968   bool any_viable_p;
4969
4970   if (error_operand_p (arg1)
4971       || error_operand_p (arg2)
4972       || error_operand_p (arg3))
4973     return error_mark_node;
4974
4975   if (code == MODIFY_EXPR)
4976     {
4977       code2 = TREE_CODE (arg3);
4978       arg3 = NULL_TREE;
4979       fnname = ansi_assopname (code2);
4980     }
4981   else
4982     fnname = ansi_opname (code);
4983
4984   arg1 = prep_operand (arg1);
4985
4986   switch (code)
4987     {
4988     case NEW_EXPR:
4989     case VEC_NEW_EXPR:
4990     case VEC_DELETE_EXPR:
4991     case DELETE_EXPR:
4992       /* Use build_op_new_call and build_op_delete_call instead.  */
4993       gcc_unreachable ();
4994
4995     case CALL_EXPR:
4996       /* Use build_op_call instead.  */
4997       gcc_unreachable ();
4998
4999     case TRUTH_ORIF_EXPR:
5000     case TRUTH_ANDIF_EXPR:
5001     case TRUTH_AND_EXPR:
5002     case TRUTH_OR_EXPR:
5003       /* These are saved for the sake of warn_logical_operator.  */
5004       code_orig_arg1 = TREE_CODE (arg1);
5005       code_orig_arg2 = TREE_CODE (arg2);
5006
5007     default:
5008       break;
5009     }
5010
5011   arg2 = prep_operand (arg2);
5012   arg3 = prep_operand (arg3);
5013
5014   if (code == COND_EXPR)
5015     /* Use build_conditional_expr instead.  */
5016     gcc_unreachable ();
5017   else if (! IS_OVERLOAD_TYPE (TREE_TYPE (arg1))
5018            && (! arg2 || ! IS_OVERLOAD_TYPE (TREE_TYPE (arg2))))
5019     goto builtin;
5020
5021   if (code == POSTINCREMENT_EXPR || code == POSTDECREMENT_EXPR)
5022     arg2 = integer_zero_node;
5023
5024   arglist = VEC_alloc (tree, gc, 3);
5025   VEC_quick_push (tree, arglist, arg1);
5026   if (arg2 != NULL_TREE)
5027     VEC_quick_push (tree, arglist, arg2);
5028   if (arg3 != NULL_TREE)
5029     VEC_quick_push (tree, arglist, arg3);
5030
5031   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
5032   p = conversion_obstack_alloc (0);
5033
5034   /* Add namespace-scope operators to the list of functions to
5035      consider.  */
5036   add_candidates (lookup_function_nonclass (fnname, arglist, /*block_p=*/true),
5037                   NULL_TREE, arglist, NULL_TREE,
5038                   NULL_TREE, false, NULL_TREE, NULL_TREE,
5039                   flags, &candidates);
5040   /* Add class-member operators to the candidate set.  */
5041   if (CLASS_TYPE_P (TREE_TYPE (arg1)))
5042     {
5043       tree fns;
5044
5045       fns = lookup_fnfields (TREE_TYPE (arg1), fnname, 1);
5046       if (fns == error_mark_node)
5047         {
5048           result = error_mark_node;
5049           goto user_defined_result_ready;
5050         }
5051       if (fns)
5052         add_candidates (BASELINK_FUNCTIONS (fns),
5053                         NULL_TREE, arglist, NULL_TREE,
5054                         NULL_TREE, false,
5055                         BASELINK_BINFO (fns),
5056                         BASELINK_ACCESS_BINFO (fns),
5057                         flags, &candidates);
5058     }
5059
5060   args[0] = arg1;
5061   args[1] = arg2;
5062   args[2] = NULL_TREE;
5063
5064   add_builtin_candidates (&candidates, code, code2, fnname, args, flags);
5065
5066   switch (code)
5067     {
5068     case COMPOUND_EXPR:
5069     case ADDR_EXPR:
5070       /* For these, the built-in candidates set is empty
5071          [over.match.oper]/3.  We don't want non-strict matches
5072          because exact matches are always possible with built-in
5073          operators.  The built-in candidate set for COMPONENT_REF
5074          would be empty too, but since there are no such built-in
5075          operators, we accept non-strict matches for them.  */
5076       strict_p = true;
5077       break;
5078
5079     default:
5080       strict_p = pedantic;
5081       break;
5082     }
5083
5084   candidates = splice_viable (candidates, strict_p, &any_viable_p);
5085   if (!any_viable_p)
5086     {
5087       switch (code)
5088         {
5089         case POSTINCREMENT_EXPR:
5090         case POSTDECREMENT_EXPR:
5091           /* Don't try anything fancy if we're not allowed to produce
5092              errors.  */
5093           if (!(complain & tf_error))
5094             return error_mark_node;
5095
5096           /* Look for an `operator++ (int)'. Pre-1985 C++ didn't
5097              distinguish between prefix and postfix ++ and
5098              operator++() was used for both, so we allow this with
5099              -fpermissive.  */
5100           if (flags & LOOKUP_COMPLAIN)
5101             {
5102               const char *msg = (flag_permissive) 
5103                 ? G_("no %<%D(int)%> declared for postfix %qs,"
5104                      " trying prefix operator instead")
5105                 : G_("no %<%D(int)%> declared for postfix %qs");
5106               permerror (input_location, msg, fnname,
5107                          operator_name_info[code].name);
5108             }
5109
5110           if (!flag_permissive)
5111             return error_mark_node;
5112
5113           if (code == POSTINCREMENT_EXPR)
5114             code = PREINCREMENT_EXPR;
5115           else
5116             code = PREDECREMENT_EXPR;
5117           result = build_new_op_1 (code, flags, arg1, NULL_TREE, NULL_TREE,
5118                                    overload, complain);
5119           break;
5120
5121           /* The caller will deal with these.  */
5122         case ADDR_EXPR:
5123         case COMPOUND_EXPR:
5124         case COMPONENT_REF:
5125           result = NULL_TREE;
5126           result_valid_p = true;
5127           break;
5128
5129         default:
5130           if ((flags & LOOKUP_COMPLAIN) && (complain & tf_error))
5131             {
5132                 /* If one of the arguments of the operator represents
5133                    an invalid use of member function pointer, try to report
5134                    a meaningful error ...  */
5135                 if (invalid_nonstatic_memfn_p (arg1, tf_error)
5136                     || invalid_nonstatic_memfn_p (arg2, tf_error)
5137                     || invalid_nonstatic_memfn_p (arg3, tf_error))
5138                   /* We displayed the error message.  */;
5139                 else
5140                   {
5141                     /* ... Otherwise, report the more generic
5142                        "no matching operator found" error */
5143                     op_error (code, code2, arg1, arg2, arg3, FALSE);
5144                     print_z_candidates (input_location, candidates);
5145                   }
5146             }
5147           result = error_mark_node;
5148           break;
5149         }
5150     }
5151   else
5152     {
5153       cand = tourney (candidates);
5154       if (cand == 0)
5155         {
5156           if ((flags & LOOKUP_COMPLAIN) && (complain & tf_error))
5157             {
5158               op_error (code, code2, arg1, arg2, arg3, TRUE);
5159               print_z_candidates (input_location, candidates);
5160             }
5161           result = error_mark_node;
5162         }
5163       else if (TREE_CODE (cand->fn) == FUNCTION_DECL)
5164         {
5165           if (overload)
5166             *overload = cand->fn;
5167
5168           if (resolve_args (arglist, complain) == NULL)
5169             result = error_mark_node;
5170           else
5171             result = build_over_call (cand, LOOKUP_NORMAL, complain);
5172         }
5173       else
5174         {
5175           /* Give any warnings we noticed during overload resolution.  */
5176           if (cand->warnings && (complain & tf_warning))
5177             {
5178               struct candidate_warning *w;
5179               for (w = cand->warnings; w; w = w->next)
5180                 joust (cand, w->loser, 1);
5181             }
5182
5183           /* Check for comparison of different enum types.  */
5184           switch (code)
5185             {
5186             case GT_EXPR:
5187             case LT_EXPR:
5188             case GE_EXPR:
5189             case LE_EXPR:
5190             case EQ_EXPR:
5191             case NE_EXPR:
5192               if (TREE_CODE (TREE_TYPE (arg1)) == ENUMERAL_TYPE
5193                   && TREE_CODE (TREE_TYPE (arg2)) == ENUMERAL_TYPE
5194                   && (TYPE_MAIN_VARIANT (TREE_TYPE (arg1))
5195                       != TYPE_MAIN_VARIANT (TREE_TYPE (arg2)))
5196                   && (complain & tf_warning))
5197                 {
5198                   warning (OPT_Wenum_compare,
5199                            "comparison between %q#T and %q#T",
5200                            TREE_TYPE (arg1), TREE_TYPE (arg2));
5201                 }
5202               break;
5203             default:
5204               break;
5205             }
5206
5207           /* We need to strip any leading REF_BIND so that bitfields
5208              don't cause errors.  This should not remove any important
5209              conversions, because builtins don't apply to class
5210              objects directly.  */
5211           conv = cand->convs[0];
5212           if (conv->kind == ck_ref_bind)
5213             conv = conv->u.next;
5214           arg1 = convert_like (conv, arg1, complain);
5215
5216           if (arg2)
5217             {
5218               /* We need to call warn_logical_operator before
5219                  converting arg2 to a boolean_type.  */
5220               if (complain & tf_warning)
5221                 warn_logical_operator (input_location, code, boolean_type_node,
5222                                        code_orig_arg1, arg1,
5223                                        code_orig_arg2, arg2);
5224
5225               conv = cand->convs[1];
5226               if (conv->kind == ck_ref_bind)
5227                 conv = conv->u.next;
5228               arg2 = convert_like (conv, arg2, complain);
5229             }
5230           if (arg3)
5231             {
5232               conv = cand->convs[2];
5233               if (conv->kind == ck_ref_bind)
5234                 conv = conv->u.next;
5235               arg3 = convert_like (conv, arg3, complain);
5236             }
5237
5238         }
5239     }
5240
5241  user_defined_result_ready:
5242
5243   /* Free all the conversions we allocated.  */
5244   obstack_free (&conversion_obstack, p);
5245
5246   if (result || result_valid_p)
5247     return result;
5248
5249  builtin:
5250   avoid_sign_compare_warnings (orig_arg1, arg1);
5251   avoid_sign_compare_warnings (orig_arg2, arg2);
5252   avoid_sign_compare_warnings (orig_arg3, arg3);
5253
5254   switch (code)
5255     {
5256     case MODIFY_EXPR:
5257       return cp_build_modify_expr (arg1, code2, arg2, complain);
5258
5259     case INDIRECT_REF:
5260       return cp_build_indirect_ref (arg1, RO_UNARY_STAR, complain);
5261
5262     case TRUTH_ANDIF_EXPR:
5263     case TRUTH_ORIF_EXPR:
5264     case TRUTH_AND_EXPR:
5265     case TRUTH_OR_EXPR:
5266       warn_logical_operator (input_location, code, boolean_type_node,
5267                              code_orig_arg1, arg1, code_orig_arg2, arg2);
5268       /* Fall through.  */
5269     case PLUS_EXPR:
5270     case MINUS_EXPR:
5271     case MULT_EXPR:
5272     case TRUNC_DIV_EXPR:
5273     case GT_EXPR:
5274     case LT_EXPR:
5275     case GE_EXPR:
5276     case LE_EXPR:
5277     case EQ_EXPR:
5278     case NE_EXPR:
5279     case MAX_EXPR:
5280     case MIN_EXPR:
5281     case LSHIFT_EXPR:
5282     case RSHIFT_EXPR:
5283     case TRUNC_MOD_EXPR:
5284     case BIT_AND_EXPR:
5285     case BIT_IOR_EXPR:
5286     case BIT_XOR_EXPR:
5287       return cp_build_binary_op (input_location, code, arg1, arg2, complain);
5288
5289     case UNARY_PLUS_EXPR:
5290     case NEGATE_EXPR:
5291     case BIT_NOT_EXPR:
5292     case TRUTH_NOT_EXPR:
5293     case PREINCREMENT_EXPR:
5294     case POSTINCREMENT_EXPR:
5295     case PREDECREMENT_EXPR:
5296     case POSTDECREMENT_EXPR:
5297     case REALPART_EXPR:
5298     case IMAGPART_EXPR:
5299       return cp_build_unary_op (code, arg1, candidates != 0, complain);
5300
5301     case ARRAY_REF:
5302       return cp_build_array_ref (input_location, arg1, arg2, complain);
5303
5304     case MEMBER_REF:
5305       return build_m_component_ref (cp_build_indirect_ref (arg1, RO_NULL, 
5306                                                            complain), 
5307                                     arg2);
5308
5309       /* The caller will deal with these.  */
5310     case ADDR_EXPR:
5311     case COMPONENT_REF:
5312     case COMPOUND_EXPR:
5313       return NULL_TREE;
5314
5315     default:
5316       gcc_unreachable ();
5317     }
5318   return NULL_TREE;
5319 }
5320
5321 /* Wrapper for above.  */
5322
5323 tree
5324 build_new_op (enum tree_code code, int flags, tree arg1, tree arg2, tree arg3,
5325               tree *overload, tsubst_flags_t complain)
5326 {
5327   tree ret;
5328   bool subtime = timevar_cond_start (TV_OVERLOAD);
5329   ret = build_new_op_1 (code, flags, arg1, arg2, arg3, overload, complain);
5330   timevar_cond_stop (TV_OVERLOAD, subtime);
5331   return ret;
5332 }
5333
5334 /* Returns true iff T, an element of an OVERLOAD chain, is a usual
5335    deallocation function (3.7.4.2 [basic.stc.dynamic.deallocation]).  */
5336
5337 static bool
5338 non_placement_deallocation_fn_p (tree t)
5339 {
5340   /* A template instance is never a usual deallocation function,
5341      regardless of its signature.  */
5342   if (TREE_CODE (t) == TEMPLATE_DECL
5343       || primary_template_instantiation_p (t))
5344     return false;
5345
5346   /* If a class T has a member deallocation function named operator delete
5347      with exactly one parameter, then that function is a usual
5348      (non-placement) deallocation function. If class T does not declare
5349      such an operator delete but does declare a member deallocation
5350      function named operator delete with exactly two parameters, the second
5351      of which has type std::size_t (18.2), then this function is a usual
5352      deallocation function.  */
5353   t = FUNCTION_ARG_CHAIN (t);
5354   if (t == void_list_node
5355       || (t && same_type_p (TREE_VALUE (t), size_type_node)
5356           && TREE_CHAIN (t) == void_list_node))
5357     return true;
5358   return false;
5359 }
5360
5361 /* Build a call to operator delete.  This has to be handled very specially,
5362    because the restrictions on what signatures match are different from all
5363    other call instances.  For a normal delete, only a delete taking (void *)
5364    or (void *, size_t) is accepted.  For a placement delete, only an exact
5365    match with the placement new is accepted.
5366
5367    CODE is either DELETE_EXPR or VEC_DELETE_EXPR.
5368    ADDR is the pointer to be deleted.
5369    SIZE is the size of the memory block to be deleted.
5370    GLOBAL_P is true if the delete-expression should not consider
5371    class-specific delete operators.
5372    PLACEMENT is the corresponding placement new call, or NULL_TREE.
5373
5374    If this call to "operator delete" is being generated as part to
5375    deallocate memory allocated via a new-expression (as per [expr.new]
5376    which requires that if the initialization throws an exception then
5377    we call a deallocation function), then ALLOC_FN is the allocation
5378    function.  */
5379
5380 tree
5381 build_op_delete_call (enum tree_code code, tree addr, tree size,
5382                       bool global_p, tree placement,
5383                       tree alloc_fn)
5384 {
5385   tree fn = NULL_TREE;
5386   tree fns, fnname, type, t;
5387
5388   if (addr == error_mark_node)
5389     return error_mark_node;
5390
5391   type = strip_array_types (TREE_TYPE (TREE_TYPE (addr)));
5392
5393   fnname = ansi_opname (code);
5394
5395   if (CLASS_TYPE_P (type)
5396       && COMPLETE_TYPE_P (complete_type (type))
5397       && !global_p)
5398     /* In [class.free]
5399
5400        If the result of the lookup is ambiguous or inaccessible, or if
5401        the lookup selects a placement deallocation function, the
5402        program is ill-formed.
5403
5404        Therefore, we ask lookup_fnfields to complain about ambiguity.  */
5405     {
5406       fns = lookup_fnfields (TYPE_BINFO (type), fnname, 1);
5407       if (fns == error_mark_node)
5408         return error_mark_node;
5409     }
5410   else
5411     fns = NULL_TREE;
5412
5413   if (fns == NULL_TREE)
5414     fns = lookup_name_nonclass (fnname);
5415
5416   /* Strip const and volatile from addr.  */
5417   addr = cp_convert (ptr_type_node, addr);
5418
5419   if (placement)
5420     {
5421       /* "A declaration of a placement deallocation function matches the
5422          declaration of a placement allocation function if it has the same
5423          number of parameters and, after parameter transformations (8.3.5),
5424          all parameter types except the first are identical."
5425
5426          So we build up the function type we want and ask instantiate_type
5427          to get it for us.  */
5428       t = FUNCTION_ARG_CHAIN (alloc_fn);
5429       t = tree_cons (NULL_TREE, ptr_type_node, t);
5430       t = build_function_type (void_type_node, t);
5431
5432       fn = instantiate_type (t, fns, tf_none);
5433       if (fn == error_mark_node)
5434         return NULL_TREE;
5435
5436       if (BASELINK_P (fn))
5437         fn = BASELINK_FUNCTIONS (fn);
5438
5439       /* "If the lookup finds the two-parameter form of a usual deallocation
5440          function (3.7.4.2) and that function, considered as a placement
5441          deallocation function, would have been selected as a match for the
5442          allocation function, the program is ill-formed."  */
5443       if (non_placement_deallocation_fn_p (fn))
5444         {
5445           /* But if the class has an operator delete (void *), then that is
5446              the usual deallocation function, so we shouldn't complain
5447              about using the operator delete (void *, size_t).  */
5448           for (t = BASELINK_P (fns) ? BASELINK_FUNCTIONS (fns) : fns;
5449                t; t = OVL_NEXT (t))
5450             {
5451               tree elt = OVL_CURRENT (t);
5452               if (non_placement_deallocation_fn_p (elt)
5453                   && FUNCTION_ARG_CHAIN (elt) == void_list_node)
5454                 goto ok;
5455             }
5456           permerror (0, "non-placement deallocation function %q+D", fn);
5457           permerror (input_location, "selected for placement delete");
5458         ok:;
5459         }
5460     }
5461   else
5462     /* "Any non-placement deallocation function matches a non-placement
5463        allocation function. If the lookup finds a single matching
5464        deallocation function, that function will be called; otherwise, no
5465        deallocation function will be called."  */
5466     for (t = BASELINK_P (fns) ? BASELINK_FUNCTIONS (fns) : fns;
5467          t; t = OVL_NEXT (t))
5468       {
5469         tree elt = OVL_CURRENT (t);
5470         if (non_placement_deallocation_fn_p (elt))
5471           {
5472             fn = elt;
5473             /* "If a class T has a member deallocation function named
5474                operator delete with exactly one parameter, then that
5475                function is a usual (non-placement) deallocation
5476                function. If class T does not declare such an operator
5477                delete but does declare a member deallocation function named
5478                operator delete with exactly two parameters, the second of
5479                which has type std::size_t (18.2), then this function is a
5480                usual deallocation function."
5481
5482                So (void*) beats (void*, size_t).  */
5483             if (FUNCTION_ARG_CHAIN (fn) == void_list_node)
5484               break;
5485           }
5486       }
5487
5488   /* If we have a matching function, call it.  */
5489   if (fn)
5490     {
5491       gcc_assert (TREE_CODE (fn) == FUNCTION_DECL);
5492
5493       /* If the FN is a member function, make sure that it is
5494          accessible.  */
5495       if (BASELINK_P (fns))
5496         perform_or_defer_access_check (BASELINK_BINFO (fns), fn, fn);
5497
5498       /* Core issue 901: It's ok to new a type with deleted delete.  */
5499       if (DECL_DELETED_FN (fn) && alloc_fn)
5500         return NULL_TREE;
5501
5502       if (placement)
5503         {
5504           /* The placement args might not be suitable for overload
5505              resolution at this point, so build the call directly.  */
5506           int nargs = call_expr_nargs (placement);
5507           tree *argarray = XALLOCAVEC (tree, nargs);
5508           int i;
5509           argarray[0] = addr;
5510           for (i = 1; i < nargs; i++)
5511             argarray[i] = CALL_EXPR_ARG (placement, i);
5512           mark_used (fn);
5513           return build_cxx_call (fn, nargs, argarray);
5514         }
5515       else
5516         {
5517           tree ret;
5518           VEC(tree,gc) *args = VEC_alloc (tree, gc, 2);
5519           VEC_quick_push (tree, args, addr);
5520           if (FUNCTION_ARG_CHAIN (fn) != void_list_node)
5521             VEC_quick_push (tree, args, size);
5522           ret = cp_build_function_call_vec (fn, &args, tf_warning_or_error);
5523           VEC_free (tree, gc, args);
5524           return ret;
5525         }
5526     }
5527
5528   /* [expr.new]
5529
5530      If no unambiguous matching deallocation function can be found,
5531      propagating the exception does not cause the object's memory to
5532      be freed.  */
5533   if (alloc_fn)
5534     {
5535       if (!placement)
5536         warning (0, "no corresponding deallocation function for %qD",
5537                  alloc_fn);
5538       return NULL_TREE;
5539     }
5540
5541   error ("no suitable %<operator %s%> for %qT",
5542          operator_name_info[(int)code].name, type);
5543   return error_mark_node;
5544 }
5545
5546 /* If the current scope isn't allowed to access DECL along
5547    BASETYPE_PATH, give an error.  The most derived class in
5548    BASETYPE_PATH is the one used to qualify DECL. DIAG_DECL is
5549    the declaration to use in the error diagnostic.  */
5550
5551 bool
5552 enforce_access (tree basetype_path, tree decl, tree diag_decl)
5553 {
5554   gcc_assert (TREE_CODE (basetype_path) == TREE_BINFO);
5555
5556   if (!accessible_p (basetype_path, decl, true))
5557     {
5558       if (TREE_PRIVATE (decl))
5559         error ("%q+#D is private", diag_decl);
5560       else if (TREE_PROTECTED (decl))
5561         error ("%q+#D is protected", diag_decl);
5562       else
5563         error ("%q+#D is inaccessible", diag_decl);
5564       error ("within this context");
5565       return false;
5566     }
5567
5568   return true;
5569 }
5570
5571 /* Initialize a temporary of type TYPE with EXPR.  The FLAGS are a
5572    bitwise or of LOOKUP_* values.  If any errors are warnings are
5573    generated, set *DIAGNOSTIC_FN to "error" or "warning",
5574    respectively.  If no diagnostics are generated, set *DIAGNOSTIC_FN
5575    to NULL.  */
5576
5577 static tree
5578 build_temp (tree expr, tree type, int flags,
5579             diagnostic_t *diagnostic_kind, tsubst_flags_t complain)
5580 {
5581   int savew, savee;
5582   VEC(tree,gc) *args;
5583
5584   savew = warningcount, savee = errorcount;
5585   args = make_tree_vector_single (expr);
5586   expr = build_special_member_call (NULL_TREE, complete_ctor_identifier,
5587                                     &args, type, flags, complain);
5588   release_tree_vector (args);
5589   if (warningcount > savew)
5590     *diagnostic_kind = DK_WARNING;
5591   else if (errorcount > savee)
5592     *diagnostic_kind = DK_ERROR;
5593   else
5594     *diagnostic_kind = DK_UNSPECIFIED;
5595   return expr;
5596 }
5597
5598 /* Perform warnings about peculiar, but valid, conversions from/to NULL.
5599    EXPR is implicitly converted to type TOTYPE.
5600    FN and ARGNUM are used for diagnostics.  */
5601
5602 static void
5603 conversion_null_warnings (tree totype, tree expr, tree fn, int argnum)
5604 {
5605   tree t = non_reference (totype);
5606
5607   /* Issue warnings about peculiar, but valid, uses of NULL.  */
5608   if (expr == null_node && TREE_CODE (t) != BOOLEAN_TYPE && ARITHMETIC_TYPE_P (t))
5609     {
5610       if (fn)
5611         warning_at (input_location, OPT_Wconversion_null,
5612                     "passing NULL to non-pointer argument %P of %qD",
5613                     argnum, fn);
5614       else
5615         warning_at (input_location, OPT_Wconversion_null,
5616                     "converting to non-pointer type %qT from NULL", t);
5617     }
5618
5619   /* Issue warnings if "false" is converted to a NULL pointer */
5620   else if (expr == boolean_false_node && POINTER_TYPE_P (t))
5621     {
5622       if (fn)
5623         warning_at (input_location, OPT_Wconversion_null,
5624                     "converting %<false%> to pointer type for argument %P "
5625                     "of %qD", argnum, fn);
5626       else
5627         warning_at (input_location, OPT_Wconversion_null,
5628                     "converting %<false%> to pointer type %qT", t);
5629     }
5630 }
5631
5632 /* Perform the conversions in CONVS on the expression EXPR.  FN and
5633    ARGNUM are used for diagnostics.  ARGNUM is zero based, -1
5634    indicates the `this' argument of a method.  INNER is nonzero when
5635    being called to continue a conversion chain. It is negative when a
5636    reference binding will be applied, positive otherwise.  If
5637    ISSUE_CONVERSION_WARNINGS is true, warnings about suspicious
5638    conversions will be emitted if appropriate.  If C_CAST_P is true,
5639    this conversion is coming from a C-style cast; in that case,
5640    conversions to inaccessible bases are permitted.  */
5641
5642 static tree
5643 convert_like_real (conversion *convs, tree expr, tree fn, int argnum,
5644                    int inner, bool issue_conversion_warnings,
5645                    bool c_cast_p, tsubst_flags_t complain)
5646 {
5647   tree totype = convs->type;
5648   diagnostic_t diag_kind;
5649   int flags;
5650
5651   if (convs->bad_p
5652       && convs->kind != ck_user
5653       && convs->kind != ck_list
5654       && convs->kind != ck_ambig
5655       && convs->kind != ck_ref_bind
5656       && convs->kind != ck_rvalue
5657       && convs->kind != ck_base)
5658     {
5659       conversion *t = convs;
5660
5661       /* Give a helpful error if this is bad because of excess braces.  */
5662       if (BRACE_ENCLOSED_INITIALIZER_P (expr)
5663           && SCALAR_TYPE_P (totype)
5664           && CONSTRUCTOR_NELTS (expr) > 0
5665           && BRACE_ENCLOSED_INITIALIZER_P (CONSTRUCTOR_ELT (expr, 0)->value))
5666         permerror (input_location, "too many braces around initializer for %qT", totype);
5667
5668       for (; t; t = convs->u.next)
5669         {
5670           if (t->kind == ck_user && t->cand->reason)
5671             {
5672               permerror (input_location, "invalid user-defined conversion "
5673                          "from %qT to %qT", TREE_TYPE (expr), totype);
5674               print_z_candidate ("candidate is:", t->cand);
5675               expr = convert_like_real (t, expr, fn, argnum, 1,
5676                                         /*issue_conversion_warnings=*/false,
5677                                         /*c_cast_p=*/false,
5678                                         complain);
5679               return cp_convert (totype, expr);
5680             }
5681           else if (t->kind == ck_user || !t->bad_p)
5682             {
5683               expr = convert_like_real (t, expr, fn, argnum, 1,
5684                                         /*issue_conversion_warnings=*/false,
5685                                         /*c_cast_p=*/false,
5686                                         complain);
5687               break;
5688             }
5689           else if (t->kind == ck_ambig)
5690             return convert_like_real (t, expr, fn, argnum, 1,
5691                                       /*issue_conversion_warnings=*/false,
5692                                       /*c_cast_p=*/false,
5693                                       complain);
5694           else if (t->kind == ck_identity)
5695             break;
5696         }
5697       if (complain & tf_error)
5698         {
5699           permerror (input_location, "invalid conversion from %qT to %qT", TREE_TYPE (expr), totype);
5700           if (fn)
5701             permerror (DECL_SOURCE_LOCATION (fn),
5702                        "  initializing argument %P of %qD", argnum, fn);
5703         }
5704       else
5705         return error_mark_node;
5706
5707       return cp_convert (totype, expr);
5708     }
5709
5710   if (issue_conversion_warnings && (complain & tf_warning))
5711     conversion_null_warnings (totype, expr, fn, argnum);
5712
5713   switch (convs->kind)
5714     {
5715     case ck_user:
5716       {
5717         struct z_candidate *cand = convs->cand;
5718         tree convfn = cand->fn;
5719         unsigned i;
5720
5721         /* If we're initializing from {}, it's value-initialization.  */
5722         if (BRACE_ENCLOSED_INITIALIZER_P (expr)
5723             && CONSTRUCTOR_NELTS (expr) == 0
5724             && TYPE_HAS_DEFAULT_CONSTRUCTOR (totype))
5725           {
5726             expr = build_value_init (totype, complain);
5727             expr = get_target_expr_sfinae (expr, complain);
5728             if (expr != error_mark_node)
5729               TARGET_EXPR_LIST_INIT_P (expr) = true;
5730             return expr;
5731           }
5732
5733         expr = mark_rvalue_use (expr);
5734
5735         /* When converting from an init list we consider explicit
5736            constructors, but actually trying to call one is an error.  */
5737         if (DECL_NONCONVERTING_P (convfn) && DECL_CONSTRUCTOR_P (convfn)
5738             /* Unless we're calling it for value-initialization from an
5739                empty list, since that is handled separately in 8.5.4.  */
5740             && cand->num_convs > 0)
5741           {
5742             if (complain & tf_error)
5743               error ("converting to %qT from initializer list would use "
5744                      "explicit constructor %qD", totype, convfn);
5745             else
5746               return error_mark_node;
5747           }
5748
5749         /* Set user_conv_p on the argument conversions, so rvalue/base
5750            handling knows not to allow any more UDCs.  */
5751         for (i = 0; i < cand->num_convs; ++i)
5752           cand->convs[i]->user_conv_p = true;
5753
5754         expr = build_over_call (cand, LOOKUP_NORMAL, complain);
5755
5756         /* If this is a constructor or a function returning an aggr type,
5757            we need to build up a TARGET_EXPR.  */
5758         if (DECL_CONSTRUCTOR_P (convfn))
5759           {
5760             expr = build_cplus_new (totype, expr, complain);
5761
5762             /* Remember that this was list-initialization.  */
5763             if (convs->check_narrowing && expr != error_mark_node)
5764               TARGET_EXPR_LIST_INIT_P (expr) = true;
5765           }
5766
5767         return expr;
5768       }
5769     case ck_identity:
5770       expr = mark_rvalue_use (expr);
5771       if (BRACE_ENCLOSED_INITIALIZER_P (expr))
5772         {
5773           int nelts = CONSTRUCTOR_NELTS (expr);
5774           if (nelts == 0)
5775             expr = build_value_init (totype, complain);
5776           else if (nelts == 1)
5777             expr = CONSTRUCTOR_ELT (expr, 0)->value;
5778           else
5779             gcc_unreachable ();
5780         }
5781
5782       if (type_unknown_p (expr))
5783         expr = instantiate_type (totype, expr, complain);
5784       /* Convert a constant to its underlying value, unless we are
5785          about to bind it to a reference, in which case we need to
5786          leave it as an lvalue.  */
5787       if (inner >= 0)
5788         {   
5789           expr = decl_constant_value (expr);
5790           if (expr == null_node && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (totype))
5791             /* If __null has been converted to an integer type, we do not
5792                want to warn about uses of EXPR as an integer, rather than
5793                as a pointer.  */
5794             expr = build_int_cst (totype, 0);
5795         }
5796       return expr;
5797     case ck_ambig:
5798       if (complain & tf_error)
5799         {
5800           /* Call build_user_type_conversion again for the error.  */
5801           build_user_type_conversion (totype, convs->u.expr, LOOKUP_NORMAL);
5802           if (fn)
5803             error ("  initializing argument %P of %q+D", argnum, fn);
5804         }
5805       return error_mark_node;
5806
5807     case ck_list:
5808       {
5809         /* Conversion to std::initializer_list<T>.  */
5810         tree elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (totype), 0);
5811         tree new_ctor = build_constructor (init_list_type_node, NULL);
5812         unsigned len = CONSTRUCTOR_NELTS (expr);
5813         tree array, val, field;
5814         VEC(constructor_elt,gc) *vec = NULL;
5815         unsigned ix;
5816
5817         /* Convert all the elements.  */
5818         FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expr), ix, val)
5819           {
5820             tree sub = convert_like_real (convs->u.list[ix], val, fn, argnum,
5821                                           1, false, false, complain);
5822             if (sub == error_mark_node)
5823               return sub;
5824             if (!BRACE_ENCLOSED_INITIALIZER_P (val))
5825               check_narrowing (TREE_TYPE (sub), val);
5826             CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_ctor), NULL_TREE, sub);
5827             if (!TREE_CONSTANT (sub))
5828               TREE_CONSTANT (new_ctor) = false;
5829           }
5830         /* Build up the array.  */
5831         elttype = cp_build_qualified_type
5832           (elttype, cp_type_quals (elttype) | TYPE_QUAL_CONST);
5833         array = build_array_of_n_type (elttype, len);
5834         array = finish_compound_literal (array, new_ctor, complain);
5835
5836         /* Build up the initializer_list object.  */
5837         totype = complete_type (totype);
5838         field = next_initializable_field (TYPE_FIELDS (totype));
5839         CONSTRUCTOR_APPEND_ELT (vec, field, decay_conversion (array));
5840         field = next_initializable_field (DECL_CHAIN (field));
5841         CONSTRUCTOR_APPEND_ELT (vec, field, size_int (len));
5842         new_ctor = build_constructor (totype, vec);
5843         return get_target_expr (new_ctor);
5844       }
5845
5846     case ck_aggr:
5847       if (TREE_CODE (totype) == COMPLEX_TYPE)
5848         {
5849           tree real = CONSTRUCTOR_ELT (expr, 0)->value;
5850           tree imag = CONSTRUCTOR_ELT (expr, 1)->value;
5851           real = perform_implicit_conversion (TREE_TYPE (totype),
5852                                               real, complain);
5853           imag = perform_implicit_conversion (TREE_TYPE (totype),
5854                                               imag, complain);
5855           expr = build2 (COMPLEX_EXPR, totype, real, imag);
5856           return fold_if_not_in_template (expr);
5857         }
5858       return get_target_expr (digest_init (totype, expr, complain));
5859
5860     default:
5861       break;
5862     };
5863
5864   expr = convert_like_real (convs->u.next, expr, fn, argnum,
5865                             convs->kind == ck_ref_bind ? -1 : 1,
5866                             convs->kind == ck_ref_bind ? issue_conversion_warnings : false, 
5867                             c_cast_p,
5868                             complain);
5869   if (expr == error_mark_node)
5870     return error_mark_node;
5871
5872   switch (convs->kind)
5873     {
5874     case ck_rvalue:
5875       expr = decay_conversion (expr);
5876       if (! MAYBE_CLASS_TYPE_P (totype))
5877         return expr;
5878       /* Else fall through.  */
5879     case ck_base:
5880       if (convs->kind == ck_base && !convs->need_temporary_p)
5881         {
5882           /* We are going to bind a reference directly to a base-class
5883              subobject of EXPR.  */
5884           /* Build an expression for `*((base*) &expr)'.  */
5885           expr = cp_build_addr_expr (expr, complain);
5886           expr = convert_to_base (expr, build_pointer_type (totype),
5887                                   !c_cast_p, /*nonnull=*/true, complain);
5888           expr = cp_build_indirect_ref (expr, RO_IMPLICIT_CONVERSION, complain);
5889           return expr;
5890         }
5891
5892       /* Copy-initialization where the cv-unqualified version of the source
5893          type is the same class as, or a derived class of, the class of the
5894          destination [is treated as direct-initialization].  [dcl.init] */
5895       flags = LOOKUP_NORMAL|LOOKUP_ONLYCONVERTING;
5896       if (convs->user_conv_p)
5897         /* This conversion is being done in the context of a user-defined
5898            conversion (i.e. the second step of copy-initialization), so
5899            don't allow any more.  */
5900         flags |= LOOKUP_NO_CONVERSION;
5901       if (convs->rvaluedness_matches_p)
5902         flags |= LOOKUP_PREFER_RVALUE;
5903       if (TREE_CODE (expr) == TARGET_EXPR
5904           && TARGET_EXPR_LIST_INIT_P (expr))
5905         /* Copy-list-initialization doesn't actually involve a copy.  */
5906         return expr;
5907       expr = build_temp (expr, totype, flags, &diag_kind, complain);
5908       if (diag_kind && fn)
5909         {
5910           if ((complain & tf_error))
5911             emit_diagnostic (diag_kind, DECL_SOURCE_LOCATION (fn), 0,
5912                              "  initializing argument %P of %qD", argnum, fn);
5913           else if (diag_kind == DK_ERROR)
5914             return error_mark_node;
5915         }
5916       return build_cplus_new (totype, expr, complain);
5917
5918     case ck_ref_bind:
5919       {
5920         tree ref_type = totype;
5921
5922         if (convs->bad_p && TYPE_REF_IS_RVALUE (ref_type)
5923             && real_lvalue_p (expr))
5924           {
5925             if (complain & tf_error)
5926               {
5927                 error ("cannot bind %qT lvalue to %qT",
5928                        TREE_TYPE (expr), totype);
5929                 if (fn)
5930                   error ("  initializing argument %P of %q+D", argnum, fn);
5931               }
5932             return error_mark_node;
5933           }
5934
5935         /* If necessary, create a temporary. 
5936
5937            VA_ARG_EXPR and CONSTRUCTOR expressions are special cases
5938            that need temporaries, even when their types are reference
5939            compatible with the type of reference being bound, so the
5940            upcoming call to cp_build_addr_expr doesn't fail.  */
5941         if (convs->need_temporary_p
5942             || TREE_CODE (expr) == CONSTRUCTOR
5943             || TREE_CODE (expr) == VA_ARG_EXPR)
5944           {
5945             /* Otherwise, a temporary of type "cv1 T1" is created and
5946                initialized from the initializer expression using the rules
5947                for a non-reference copy-initialization (8.5).  */
5948
5949             tree type = TREE_TYPE (ref_type);
5950             cp_lvalue_kind lvalue = real_lvalue_p (expr);
5951
5952             gcc_assert (same_type_ignoring_top_level_qualifiers_p
5953                         (type, convs->u.next->type));
5954             if (!CP_TYPE_CONST_NON_VOLATILE_P (type)
5955                 && !TYPE_REF_IS_RVALUE (ref_type))
5956               {
5957                 if (complain & tf_error)
5958                   {
5959                     /* If the reference is volatile or non-const, we
5960                        cannot create a temporary.  */
5961                     if (lvalue & clk_bitfield)
5962                       error ("cannot bind bitfield %qE to %qT",
5963                              expr, ref_type);
5964                     else if (lvalue & clk_packed)
5965                       error ("cannot bind packed field %qE to %qT",
5966                              expr, ref_type);
5967                     else
5968                       error ("cannot bind rvalue %qE to %qT", expr, ref_type);
5969                   }
5970                 return error_mark_node;
5971               }
5972             /* If the source is a packed field, and we must use a copy
5973                constructor, then building the target expr will require
5974                binding the field to the reference parameter to the
5975                copy constructor, and we'll end up with an infinite
5976                loop.  If we can use a bitwise copy, then we'll be
5977                OK.  */
5978             if ((lvalue & clk_packed)
5979                 && CLASS_TYPE_P (type)
5980                 && type_has_nontrivial_copy_init (type))
5981               {
5982                 if (complain & tf_error)
5983                   error ("cannot bind packed field %qE to %qT",
5984                          expr, ref_type);
5985                 return error_mark_node;
5986               }
5987             if (lvalue & clk_bitfield)
5988               {
5989                 expr = convert_bitfield_to_declared_type (expr);
5990                 expr = fold_convert (type, expr);
5991               }
5992             expr = build_target_expr_with_type (expr, type, complain);
5993           }
5994
5995         /* Take the address of the thing to which we will bind the
5996            reference.  */
5997         expr = cp_build_addr_expr (expr, complain);
5998         if (expr == error_mark_node)
5999           return error_mark_node;
6000
6001         /* Convert it to a pointer to the type referred to by the
6002            reference.  This will adjust the pointer if a derived to
6003            base conversion is being performed.  */
6004         expr = cp_convert (build_pointer_type (TREE_TYPE (ref_type)),
6005                            expr);
6006         /* Convert the pointer to the desired reference type.  */
6007         return build_nop (ref_type, expr);
6008       }
6009
6010     case ck_lvalue:
6011       return decay_conversion (expr);
6012
6013     case ck_qual:
6014       /* Warn about deprecated conversion if appropriate.  */
6015       string_conv_p (totype, expr, 1);
6016       break;
6017
6018     case ck_ptr:
6019       if (convs->base_p)
6020         expr = convert_to_base (expr, totype, !c_cast_p,
6021                                 /*nonnull=*/false, complain);
6022       return build_nop (totype, expr);
6023
6024     case ck_pmem:
6025       return convert_ptrmem (totype, expr, /*allow_inverse_p=*/false,
6026                              c_cast_p, complain);
6027
6028     default:
6029       break;
6030     }
6031
6032   if (convs->check_narrowing)
6033     check_narrowing (totype, expr);
6034
6035   if (issue_conversion_warnings && (complain & tf_warning))
6036     expr = convert_and_check (totype, expr);
6037   else
6038     expr = convert (totype, expr);
6039
6040   return expr;
6041 }
6042
6043 /* ARG is being passed to a varargs function.  Perform any conversions
6044    required.  Return the converted value.  */
6045
6046 tree
6047 convert_arg_to_ellipsis (tree arg)
6048 {
6049   tree arg_type;
6050
6051   /* [expr.call]
6052
6053      The lvalue-to-rvalue, array-to-pointer, and function-to-pointer
6054      standard conversions are performed.  */
6055   arg = decay_conversion (arg);
6056   arg_type = TREE_TYPE (arg);
6057   /* [expr.call]
6058
6059      If the argument has integral or enumeration type that is subject
6060      to the integral promotions (_conv.prom_), or a floating point
6061      type that is subject to the floating point promotion
6062      (_conv.fpprom_), the value of the argument is converted to the
6063      promoted type before the call.  */
6064   if (TREE_CODE (arg_type) == REAL_TYPE
6065       && (TYPE_PRECISION (arg_type)
6066           < TYPE_PRECISION (double_type_node))
6067       && !DECIMAL_FLOAT_MODE_P (TYPE_MODE (arg_type)))
6068     {
6069       if (warn_double_promotion && !c_inhibit_evaluation_warnings)
6070         warning (OPT_Wdouble_promotion,
6071                  "implicit conversion from %qT to %qT when passing "
6072                  "argument to function",
6073                  arg_type, double_type_node);
6074       arg = convert_to_real (double_type_node, arg);
6075     }
6076   else if (NULLPTR_TYPE_P (arg_type))
6077     arg = null_pointer_node;
6078   else if (INTEGRAL_OR_ENUMERATION_TYPE_P (arg_type))
6079     {
6080       if (SCOPED_ENUM_P (arg_type) && !abi_version_at_least (6))
6081         {
6082           warning (OPT_Wabi, "scoped enum %qT will not promote to an "
6083                    "integral type in a future version of GCC", arg_type);
6084           arg = cp_convert (ENUM_UNDERLYING_TYPE (arg_type), arg);
6085         }
6086       arg = perform_integral_promotions (arg);
6087     }
6088
6089   arg = require_complete_type (arg);
6090   arg_type = TREE_TYPE (arg);
6091
6092   if (arg != error_mark_node
6093       /* In a template (or ill-formed code), we can have an incomplete type
6094          even after require_complete_type, in which case we don't know
6095          whether it has trivial copy or not.  */
6096       && COMPLETE_TYPE_P (arg_type))
6097     {
6098       /* Build up a real lvalue-to-rvalue conversion in case the
6099          copy constructor is trivial but not callable.  */
6100       if (CLASS_TYPE_P (arg_type))
6101         force_rvalue (arg, tf_warning_or_error);
6102
6103       /* [expr.call] 5.2.2/7:
6104          Passing a potentially-evaluated argument of class type (Clause 9)
6105          with a non-trivial copy constructor or a non-trivial destructor
6106          with no corresponding parameter is conditionally-supported, with
6107          implementation-defined semantics.
6108
6109          We used to just warn here and do a bitwise copy, but now
6110          cp_expr_size will abort if we try to do that.
6111
6112          If the call appears in the context of a sizeof expression,
6113          it is not potentially-evaluated.  */
6114       if (cp_unevaluated_operand == 0
6115           && (type_has_nontrivial_copy_init (arg_type)
6116               || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (arg_type)))
6117         error ("cannot pass objects of non-trivially-copyable "
6118                "type %q#T through %<...%>", arg_type);
6119     }
6120
6121   return arg;
6122 }
6123
6124 /* va_arg (EXPR, TYPE) is a builtin. Make sure it is not abused.  */
6125
6126 tree
6127 build_x_va_arg (tree expr, tree type)
6128 {
6129   if (processing_template_decl)
6130     return build_min (VA_ARG_EXPR, type, expr);
6131
6132   type = complete_type_or_else (type, NULL_TREE);
6133
6134   if (expr == error_mark_node || !type)
6135     return error_mark_node;
6136
6137   expr = mark_lvalue_use (expr);
6138
6139   if (type_has_nontrivial_copy_init (type)
6140       || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
6141       || TREE_CODE (type) == REFERENCE_TYPE)
6142     {
6143       /* Remove reference types so we don't ICE later on.  */
6144       tree type1 = non_reference (type);
6145       /* conditionally-supported behavior [expr.call] 5.2.2/7.  */
6146       error ("cannot receive objects of non-trivially-copyable type %q#T "
6147              "through %<...%>; ", type);
6148       expr = convert (build_pointer_type (type1), null_node);
6149       expr = cp_build_indirect_ref (expr, RO_NULL, tf_warning_or_error);
6150       return expr;
6151     }
6152
6153   return build_va_arg (input_location, expr, type);
6154 }
6155
6156 /* TYPE has been given to va_arg.  Apply the default conversions which
6157    would have happened when passed via ellipsis.  Return the promoted
6158    type, or the passed type if there is no change.  */
6159
6160 tree
6161 cxx_type_promotes_to (tree type)
6162 {
6163   tree promote;
6164
6165   /* Perform the array-to-pointer and function-to-pointer
6166      conversions.  */
6167   type = type_decays_to (type);
6168
6169   promote = type_promotes_to (type);
6170   if (same_type_p (type, promote))
6171     promote = type;
6172
6173   return promote;
6174 }
6175
6176 /* ARG is a default argument expression being passed to a parameter of
6177    the indicated TYPE, which is a parameter to FN.  PARMNUM is the
6178    zero-based argument number.  Do any required conversions.  Return
6179    the converted value.  */
6180
6181 static GTY(()) VEC(tree,gc) *default_arg_context;
6182 void
6183 push_defarg_context (tree fn)
6184 { VEC_safe_push (tree, gc, default_arg_context, fn); }
6185 void
6186 pop_defarg_context (void)
6187 { VEC_pop (tree, default_arg_context); }
6188
6189 tree
6190 convert_default_arg (tree type, tree arg, tree fn, int parmnum)
6191 {
6192   int i;
6193   tree t;
6194
6195   /* See through clones.  */
6196   fn = DECL_ORIGIN (fn);
6197
6198   /* Detect recursion.  */
6199   FOR_EACH_VEC_ELT (tree, default_arg_context, i, t)
6200     if (t == fn)
6201       {
6202         error ("recursive evaluation of default argument for %q#D", fn);
6203         return error_mark_node;
6204       }
6205
6206   /* If the ARG is an unparsed default argument expression, the
6207      conversion cannot be performed.  */
6208   if (TREE_CODE (arg) == DEFAULT_ARG)
6209     {
6210       error ("call to %qD uses the default argument for parameter %P, which "
6211              "is not yet defined", fn, parmnum);
6212       return error_mark_node;
6213     }
6214
6215   push_defarg_context (fn);
6216
6217   if (fn && DECL_TEMPLATE_INFO (fn))
6218     arg = tsubst_default_argument (fn, type, arg);
6219
6220   /* Due to:
6221
6222        [dcl.fct.default]
6223
6224        The names in the expression are bound, and the semantic
6225        constraints are checked, at the point where the default
6226        expressions appears.
6227
6228      we must not perform access checks here.  */
6229   push_deferring_access_checks (dk_no_check);
6230   arg = break_out_target_exprs (arg);
6231   if (TREE_CODE (arg) == CONSTRUCTOR)
6232     {
6233       arg = digest_init (type, arg, tf_warning_or_error);
6234       arg = convert_for_initialization (0, type, arg, LOOKUP_IMPLICIT,
6235                                         ICR_DEFAULT_ARGUMENT, fn, parmnum,
6236                                         tf_warning_or_error);
6237     }
6238   else
6239     {
6240       /* We must make a copy of ARG, in case subsequent processing
6241          alters any part of it.  For example, during gimplification a
6242          cast of the form (T) &X::f (where "f" is a member function)
6243          will lead to replacing the PTRMEM_CST for &X::f with a
6244          VAR_DECL.  We can avoid the copy for constants, since they
6245          are never modified in place.  */
6246       if (!CONSTANT_CLASS_P (arg))
6247         arg = unshare_expr (arg);
6248       arg = convert_for_initialization (0, type, arg, LOOKUP_IMPLICIT,
6249                                         ICR_DEFAULT_ARGUMENT, fn, parmnum,
6250                                         tf_warning_or_error);
6251       arg = convert_for_arg_passing (type, arg);
6252     }
6253   pop_deferring_access_checks();
6254
6255   pop_defarg_context ();
6256
6257   return arg;
6258 }
6259
6260 /* Returns the type which will really be used for passing an argument of
6261    type TYPE.  */
6262
6263 tree
6264 type_passed_as (tree type)
6265 {
6266   /* Pass classes with copy ctors by invisible reference.  */
6267   if (TREE_ADDRESSABLE (type))
6268     {
6269       type = build_reference_type (type);
6270       /* There are no other pointers to this temporary.  */
6271       type = cp_build_qualified_type (type, TYPE_QUAL_RESTRICT);
6272     }
6273   else if (targetm.calls.promote_prototypes (type)
6274            && INTEGRAL_TYPE_P (type)
6275            && COMPLETE_TYPE_P (type)
6276            && INT_CST_LT_UNSIGNED (TYPE_SIZE (type),
6277                                    TYPE_SIZE (integer_type_node)))
6278     type = integer_type_node;
6279
6280   return type;
6281 }
6282
6283 /* Actually perform the appropriate conversion.  */
6284
6285 tree
6286 convert_for_arg_passing (tree type, tree val)
6287 {
6288   tree bitfield_type;
6289
6290   /* If VAL is a bitfield, then -- since it has already been converted
6291      to TYPE -- it cannot have a precision greater than TYPE.  
6292
6293      If it has a smaller precision, we must widen it here.  For
6294      example, passing "int f:3;" to a function expecting an "int" will
6295      not result in any conversion before this point.
6296
6297      If the precision is the same we must not risk widening.  For
6298      example, the COMPONENT_REF for a 32-bit "long long" bitfield will
6299      often have type "int", even though the C++ type for the field is
6300      "long long".  If the value is being passed to a function
6301      expecting an "int", then no conversions will be required.  But,
6302      if we call convert_bitfield_to_declared_type, the bitfield will
6303      be converted to "long long".  */
6304   bitfield_type = is_bitfield_expr_with_lowered_type (val);
6305   if (bitfield_type 
6306       && TYPE_PRECISION (TREE_TYPE (val)) < TYPE_PRECISION (type))
6307     val = convert_to_integer (TYPE_MAIN_VARIANT (bitfield_type), val);
6308
6309   if (val == error_mark_node)
6310     ;
6311   /* Pass classes with copy ctors by invisible reference.  */
6312   else if (TREE_ADDRESSABLE (type))
6313     val = build1 (ADDR_EXPR, build_reference_type (type), val);
6314   else if (targetm.calls.promote_prototypes (type)
6315            && INTEGRAL_TYPE_P (type)
6316            && COMPLETE_TYPE_P (type)
6317            && INT_CST_LT_UNSIGNED (TYPE_SIZE (type),
6318                                    TYPE_SIZE (integer_type_node)))
6319     val = perform_integral_promotions (val);
6320   if (warn_missing_format_attribute)
6321     {
6322       tree rhstype = TREE_TYPE (val);
6323       const enum tree_code coder = TREE_CODE (rhstype);
6324       const enum tree_code codel = TREE_CODE (type);
6325       if ((codel == POINTER_TYPE || codel == REFERENCE_TYPE)
6326           && coder == codel
6327           && check_missing_format_attribute (type, rhstype))
6328         warning (OPT_Wmissing_format_attribute,
6329                  "argument of function call might be a candidate for a format attribute");
6330     }
6331   return val;
6332 }
6333
6334 /* Returns true iff FN is a function with magic varargs, i.e. ones for
6335    which no conversions at all should be done.  This is true for some
6336    builtins which don't act like normal functions.  */
6337
6338 static bool
6339 magic_varargs_p (tree fn)
6340 {
6341   if (DECL_BUILT_IN (fn))
6342     switch (DECL_FUNCTION_CODE (fn))
6343       {
6344       case BUILT_IN_CLASSIFY_TYPE:
6345       case BUILT_IN_CONSTANT_P:
6346       case BUILT_IN_NEXT_ARG:
6347       case BUILT_IN_VA_START:
6348         return true;
6349
6350       default:;
6351         return lookup_attribute ("type generic",
6352                                  TYPE_ATTRIBUTES (TREE_TYPE (fn))) != 0;
6353       }
6354
6355   return false;
6356 }
6357
6358 /* Subroutine of the various build_*_call functions.  Overload resolution
6359    has chosen a winning candidate CAND; build up a CALL_EXPR accordingly.
6360    ARGS is a TREE_LIST of the unconverted arguments to the call.  FLAGS is a
6361    bitmask of various LOOKUP_* flags which apply to the call itself.  */
6362
6363 static tree
6364 build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain)
6365 {
6366   tree fn = cand->fn;
6367   const VEC(tree,gc) *args = cand->args;
6368   tree first_arg = cand->first_arg;
6369   conversion **convs = cand->convs;
6370   conversion *conv;
6371   tree parm = TYPE_ARG_TYPES (TREE_TYPE (fn));
6372   int parmlen;
6373   tree val;
6374   int i = 0;
6375   int j = 0;
6376   unsigned int arg_index = 0;
6377   int is_method = 0;
6378   int nargs;
6379   tree *argarray;
6380   bool already_used = false;
6381
6382   /* In a template, there is no need to perform all of the work that
6383      is normally done.  We are only interested in the type of the call
6384      expression, i.e., the return type of the function.  Any semantic
6385      errors will be deferred until the template is instantiated.  */
6386   if (processing_template_decl)
6387     {
6388       tree expr;
6389       tree return_type;
6390       const tree *argarray;
6391       unsigned int nargs;
6392
6393       return_type = TREE_TYPE (TREE_TYPE (fn));
6394       nargs = VEC_length (tree, args);
6395       if (first_arg == NULL_TREE)
6396         argarray = VEC_address (tree, CONST_CAST (VEC(tree,gc) *, args));
6397       else
6398         {
6399           tree *alcarray;
6400           unsigned int ix;
6401           tree arg;
6402
6403           ++nargs;
6404           alcarray = XALLOCAVEC (tree, nargs);
6405           alcarray[0] = first_arg;
6406           FOR_EACH_VEC_ELT (tree, args, ix, arg)
6407             alcarray[ix + 1] = arg;
6408           argarray = alcarray;
6409         }
6410       expr = build_call_array_loc (input_location,
6411                                    return_type, build_addr_func (fn), nargs,
6412                                    argarray);
6413       if (TREE_THIS_VOLATILE (fn) && cfun)
6414         current_function_returns_abnormally = 1;
6415       return convert_from_reference (expr);
6416     }
6417
6418   /* Give any warnings we noticed during overload resolution.  */
6419   if (cand->warnings && (complain & tf_warning))
6420     {
6421       struct candidate_warning *w;
6422       for (w = cand->warnings; w; w = w->next)
6423         joust (cand, w->loser, 1);
6424     }
6425
6426   /* Make =delete work with SFINAE.  */
6427   if (DECL_DELETED_FN (fn) && !(complain & tf_error))
6428     return error_mark_node;
6429
6430   if (DECL_FUNCTION_MEMBER_P (fn))
6431     {
6432       tree access_fn;
6433       /* If FN is a template function, two cases must be considered.
6434          For example:
6435
6436            struct A {
6437              protected:
6438                template <class T> void f();
6439            };
6440            template <class T> struct B {
6441              protected:
6442                void g();
6443            };
6444            struct C : A, B<int> {
6445              using A::f;        // #1
6446              using B<int>::g;   // #2
6447            };
6448
6449          In case #1 where `A::f' is a member template, DECL_ACCESS is
6450          recorded in the primary template but not in its specialization.
6451          We check access of FN using its primary template.
6452
6453          In case #2, where `B<int>::g' has a DECL_TEMPLATE_INFO simply
6454          because it is a member of class template B, DECL_ACCESS is
6455          recorded in the specialization `B<int>::g'.  We cannot use its
6456          primary template because `B<T>::g' and `B<int>::g' may have
6457          different access.  */
6458       if (DECL_TEMPLATE_INFO (fn)
6459           && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (fn)))
6460         access_fn = DECL_TI_TEMPLATE (fn);
6461       else
6462         access_fn = fn;
6463       if (flags & LOOKUP_SPECULATIVE)
6464         {
6465           if (!speculative_access_check (cand->access_path, access_fn, fn,
6466                                          !!(flags & LOOKUP_COMPLAIN)))
6467             return error_mark_node;
6468         }
6469       else
6470         perform_or_defer_access_check (cand->access_path, access_fn, fn);
6471     }
6472
6473   /* If we're checking for implicit delete, don't bother with argument
6474      conversions.  */
6475   if (flags & LOOKUP_SPECULATIVE)
6476     {
6477       if (DECL_DELETED_FN (fn))
6478         {
6479           if (flags & LOOKUP_COMPLAIN)
6480             mark_used (fn);
6481           return error_mark_node;
6482         }
6483       if (cand->viable == 1)
6484         return fn;
6485       else if (!(flags & LOOKUP_COMPLAIN))
6486         /* Reject bad conversions now.  */
6487         return error_mark_node;
6488       /* else continue to get conversion error.  */
6489     }
6490
6491   /* Find maximum size of vector to hold converted arguments.  */
6492   parmlen = list_length (parm);
6493   nargs = VEC_length (tree, args) + (first_arg != NULL_TREE ? 1 : 0);
6494   if (parmlen > nargs)
6495     nargs = parmlen;
6496   argarray = XALLOCAVEC (tree, nargs);
6497
6498   /* The implicit parameters to a constructor are not considered by overload
6499      resolution, and must be of the proper type.  */
6500   if (DECL_CONSTRUCTOR_P (fn))
6501     {
6502       if (first_arg != NULL_TREE)
6503         {
6504           argarray[j++] = first_arg;
6505           first_arg = NULL_TREE;
6506         }
6507       else
6508         {
6509           argarray[j++] = VEC_index (tree, args, arg_index);
6510           ++arg_index;
6511         }
6512       parm = TREE_CHAIN (parm);
6513       /* We should never try to call the abstract constructor.  */
6514       gcc_assert (!DECL_HAS_IN_CHARGE_PARM_P (fn));
6515
6516       if (DECL_HAS_VTT_PARM_P (fn))
6517         {
6518           argarray[j++] = VEC_index (tree, args, arg_index);
6519           ++arg_index;
6520           parm = TREE_CHAIN (parm);
6521         }
6522     }
6523   /* Bypass access control for 'this' parameter.  */
6524   else if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
6525     {
6526       tree parmtype = TREE_VALUE (parm);
6527       tree arg = (first_arg != NULL_TREE
6528                   ? first_arg
6529                   : VEC_index (tree, args, arg_index));
6530       tree argtype = TREE_TYPE (arg);
6531       tree converted_arg;
6532       tree base_binfo;
6533
6534       if (convs[i]->bad_p)
6535         {
6536           if (complain & tf_error)
6537             permerror (input_location, "passing %qT as %<this%> argument of %q#D discards qualifiers",
6538                        TREE_TYPE (argtype), fn);
6539           else
6540             return error_mark_node;
6541         }
6542
6543       /* [class.mfct.nonstatic]: If a nonstatic member function of a class
6544          X is called for an object that is not of type X, or of a type
6545          derived from X, the behavior is undefined.
6546
6547          So we can assume that anything passed as 'this' is non-null, and
6548          optimize accordingly.  */
6549       gcc_assert (TREE_CODE (parmtype) == POINTER_TYPE);
6550       /* Convert to the base in which the function was declared.  */
6551       gcc_assert (cand->conversion_path != NULL_TREE);
6552       converted_arg = build_base_path (PLUS_EXPR,
6553                                        arg,
6554                                        cand->conversion_path,
6555                                        1);
6556       /* Check that the base class is accessible.  */
6557       if (!accessible_base_p (TREE_TYPE (argtype),
6558                               BINFO_TYPE (cand->conversion_path), true))
6559         error ("%qT is not an accessible base of %qT",
6560                BINFO_TYPE (cand->conversion_path),
6561                TREE_TYPE (argtype));
6562       /* If fn was found by a using declaration, the conversion path
6563          will be to the derived class, not the base declaring fn. We
6564          must convert from derived to base.  */
6565       base_binfo = lookup_base (TREE_TYPE (TREE_TYPE (converted_arg)),
6566                                 TREE_TYPE (parmtype), ba_unique, NULL);
6567       converted_arg = build_base_path (PLUS_EXPR, converted_arg,
6568                                        base_binfo, 1);
6569
6570       argarray[j++] = converted_arg;
6571       parm = TREE_CHAIN (parm);
6572       if (first_arg != NULL_TREE)
6573         first_arg = NULL_TREE;
6574       else
6575         ++arg_index;
6576       ++i;
6577       is_method = 1;
6578     }
6579
6580   gcc_assert (first_arg == NULL_TREE);
6581   for (; arg_index < VEC_length (tree, args) && parm;
6582        parm = TREE_CHAIN (parm), ++arg_index, ++i)
6583     {
6584       tree type = TREE_VALUE (parm);
6585       tree arg = VEC_index (tree, args, arg_index);
6586       bool conversion_warning = true;
6587
6588       conv = convs[i];
6589
6590       /* If the argument is NULL and used to (implicitly) instantiate a
6591          template function (and bind one of the template arguments to
6592          the type of 'long int'), we don't want to warn about passing NULL
6593          to non-pointer argument.
6594          For example, if we have this template function:
6595
6596            template<typename T> void func(T x) {}
6597
6598          we want to warn (when -Wconversion is enabled) in this case:
6599
6600            void foo() {
6601              func<int>(NULL);
6602            }
6603
6604          but not in this case:
6605
6606            void foo() {
6607              func(NULL);
6608            }
6609       */
6610       if (arg == null_node
6611           && DECL_TEMPLATE_INFO (fn)
6612           && cand->template_decl
6613           && !(flags & LOOKUP_EXPLICIT_TMPL_ARGS))
6614         conversion_warning = false;
6615
6616       /* Warn about initializer_list deduction that isn't currently in the
6617          working draft.  */
6618       if (cxx_dialect > cxx98
6619           && flag_deduce_init_list
6620           && cand->template_decl
6621           && is_std_init_list (non_reference (type))
6622           && BRACE_ENCLOSED_INITIALIZER_P (arg))
6623         {
6624           tree tmpl = TI_TEMPLATE (cand->template_decl);
6625           tree realparm = chain_index (j, DECL_ARGUMENTS (cand->fn));
6626           tree patparm = get_pattern_parm (realparm, tmpl);
6627           tree pattype = TREE_TYPE (patparm);
6628           if (PACK_EXPANSION_P (pattype))
6629             pattype = PACK_EXPANSION_PATTERN (pattype);
6630           pattype = non_reference (pattype);
6631
6632           if (TREE_CODE (pattype) == TEMPLATE_TYPE_PARM
6633               && (cand->explicit_targs == NULL_TREE
6634                   || (TREE_VEC_LENGTH (cand->explicit_targs)
6635                       <= TEMPLATE_TYPE_IDX (pattype))))
6636             {
6637               pedwarn (input_location, 0, "deducing %qT as %qT",
6638                        non_reference (TREE_TYPE (patparm)),
6639                        non_reference (type));
6640               pedwarn (input_location, 0, "  in call to %q+D", cand->fn);
6641               pedwarn (input_location, 0,
6642                        "  (you can disable this with -fno-deduce-init-list)");
6643             }
6644         }
6645
6646       val = convert_like_with_context (conv, arg, fn, i-is_method,
6647                                        conversion_warning
6648                                        ? complain
6649                                        : complain & (~tf_warning));
6650
6651       val = convert_for_arg_passing (type, val);
6652       if (val == error_mark_node)
6653         return error_mark_node;
6654       else
6655         argarray[j++] = val;
6656     }
6657
6658   /* Default arguments */
6659   for (; parm && parm != void_list_node; parm = TREE_CHAIN (parm), i++)
6660     argarray[j++] = convert_default_arg (TREE_VALUE (parm),
6661                                          TREE_PURPOSE (parm),
6662                                          fn, i - is_method);
6663   /* Ellipsis */
6664   for (; arg_index < VEC_length (tree, args); ++arg_index)
6665     {
6666       tree a = VEC_index (tree, args, arg_index);
6667       if (magic_varargs_p (fn))
6668         /* Do no conversions for magic varargs.  */
6669         a = mark_type_use (a);
6670       else
6671         a = convert_arg_to_ellipsis (a);
6672       argarray[j++] = a;
6673     }
6674
6675   gcc_assert (j <= nargs);
6676   nargs = j;
6677
6678   check_function_arguments (TREE_TYPE (fn), nargs, argarray);
6679
6680   /* Avoid actually calling copy constructors and copy assignment operators,
6681      if possible.  */
6682
6683   if (! flag_elide_constructors)
6684     /* Do things the hard way.  */;
6685   else if (cand->num_convs == 1 
6686            && (DECL_COPY_CONSTRUCTOR_P (fn) 
6687                || DECL_MOVE_CONSTRUCTOR_P (fn)))
6688     {
6689       tree targ;
6690       tree arg = argarray[num_artificial_parms_for (fn)];
6691       tree fa;
6692       bool trivial = trivial_fn_p (fn);
6693
6694       /* Pull out the real argument, disregarding const-correctness.  */
6695       targ = arg;
6696       while (CONVERT_EXPR_P (targ)
6697              || TREE_CODE (targ) == NON_LVALUE_EXPR)
6698         targ = TREE_OPERAND (targ, 0);
6699       if (TREE_CODE (targ) == ADDR_EXPR)
6700         {
6701           targ = TREE_OPERAND (targ, 0);
6702           if (!same_type_ignoring_top_level_qualifiers_p
6703               (TREE_TYPE (TREE_TYPE (arg)), TREE_TYPE (targ)))
6704             targ = NULL_TREE;
6705         }
6706       else
6707         targ = NULL_TREE;
6708
6709       if (targ)
6710         arg = targ;
6711       else
6712         arg = cp_build_indirect_ref (arg, RO_NULL, complain);
6713
6714       /* [class.copy]: the copy constructor is implicitly defined even if
6715          the implementation elided its use.  */
6716       if (!trivial || DECL_DELETED_FN (fn))
6717         {
6718           mark_used (fn);
6719           already_used = true;
6720         }
6721
6722       /* If we're creating a temp and we already have one, don't create a
6723          new one.  If we're not creating a temp but we get one, use
6724          INIT_EXPR to collapse the temp into our target.  Otherwise, if the
6725          ctor is trivial, do a bitwise copy with a simple TARGET_EXPR for a
6726          temp or an INIT_EXPR otherwise.  */
6727       fa = argarray[0];
6728       if (integer_zerop (fa))
6729         {
6730           if (TREE_CODE (arg) == TARGET_EXPR)
6731             return arg;
6732           else if (trivial)
6733             return force_target_expr (DECL_CONTEXT (fn), arg, complain);
6734         }
6735       else if (TREE_CODE (arg) == TARGET_EXPR || trivial)
6736         {
6737           tree to = stabilize_reference (cp_build_indirect_ref (fa, RO_NULL,
6738                                                                 complain));
6739
6740           val = build2 (INIT_EXPR, DECL_CONTEXT (fn), to, arg);
6741           return val;
6742         }
6743     }
6744   else if (DECL_OVERLOADED_OPERATOR_P (fn) == NOP_EXPR
6745            && trivial_fn_p (fn)
6746            && !DECL_DELETED_FN (fn))
6747     {
6748       tree to = stabilize_reference
6749         (cp_build_indirect_ref (argarray[0], RO_NULL, complain));
6750       tree type = TREE_TYPE (to);
6751       tree as_base = CLASSTYPE_AS_BASE (type);
6752       tree arg = argarray[1];
6753
6754       if (is_really_empty_class (type))
6755         {
6756           /* Avoid copying empty classes.  */
6757           val = build2 (COMPOUND_EXPR, void_type_node, to, arg);
6758           TREE_NO_WARNING (val) = 1;
6759           val = build2 (COMPOUND_EXPR, type, val, to);
6760           TREE_NO_WARNING (val) = 1;
6761         }
6762       else if (tree_int_cst_equal (TYPE_SIZE (type), TYPE_SIZE (as_base)))
6763         {
6764           arg = cp_build_indirect_ref (arg, RO_NULL, complain);
6765           val = build2 (MODIFY_EXPR, TREE_TYPE (to), to, arg);
6766         }
6767       else
6768         {
6769           /* We must only copy the non-tail padding parts.
6770              Use __builtin_memcpy for the bitwise copy.
6771              FIXME fix 22488 so we can go back to using MODIFY_EXPR
6772              instead of an explicit call to memcpy.  */
6773         
6774           tree arg0, arg1, arg2, t;
6775           tree test = NULL_TREE;
6776
6777           arg2 = TYPE_SIZE_UNIT (as_base);
6778           arg1 = arg;
6779           arg0 = cp_build_addr_expr (to, complain);
6780
6781           if (!can_trust_pointer_alignment ())
6782             {
6783               /* If we can't be sure about pointer alignment, a call
6784                  to __builtin_memcpy is expanded as a call to memcpy, which
6785                  is invalid with identical args.  Otherwise it is
6786                  expanded as a block move, which should be safe.  */
6787               arg0 = save_expr (arg0);
6788               arg1 = save_expr (arg1);
6789               test = build2 (EQ_EXPR, boolean_type_node, arg0, arg1);
6790             }
6791           t = implicit_built_in_decls[BUILT_IN_MEMCPY];
6792           t = build_call_n (t, 3, arg0, arg1, arg2);
6793
6794           t = convert (TREE_TYPE (arg0), t);
6795           if (test)
6796             t = build3 (COND_EXPR, TREE_TYPE (t), test, arg0, t);
6797           val = cp_build_indirect_ref (t, RO_NULL, complain);
6798           TREE_NO_WARNING (val) = 1;
6799         }
6800
6801       return val;
6802     }
6803   else if (DECL_DESTRUCTOR_P (fn)
6804            && trivial_fn_p (fn)
6805            && !DECL_DELETED_FN (fn))
6806     return fold_convert (void_type_node, argarray[0]);
6807   /* FIXME handle trivial default constructor, too.  */
6808
6809   if (!already_used)
6810     mark_used (fn);
6811
6812   if (DECL_VINDEX (fn) && (flags & LOOKUP_NONVIRTUAL) == 0)
6813     {
6814       tree t;
6815       tree binfo = lookup_base (TREE_TYPE (TREE_TYPE (argarray[0])),
6816                                 DECL_CONTEXT (fn),
6817                                 ba_any, NULL);
6818       gcc_assert (binfo && binfo != error_mark_node);
6819
6820       /* Warn about deprecated virtual functions now, since we're about
6821          to throw away the decl.  */
6822       if (TREE_DEPRECATED (fn))
6823         warn_deprecated_use (fn, NULL_TREE);
6824
6825       argarray[0] = build_base_path (PLUS_EXPR, argarray[0], binfo, 1);
6826       if (TREE_SIDE_EFFECTS (argarray[0]))
6827         argarray[0] = save_expr (argarray[0]);
6828       t = build_pointer_type (TREE_TYPE (fn));
6829       if (DECL_CONTEXT (fn) && TYPE_JAVA_INTERFACE (DECL_CONTEXT (fn)))
6830         fn = build_java_interface_fn_ref (fn, argarray[0]);
6831       else
6832         fn = build_vfn_ref (argarray[0], DECL_VINDEX (fn));
6833       TREE_TYPE (fn) = t;
6834     }
6835   else
6836     fn = build_addr_func (fn);
6837
6838   return build_cxx_call (fn, nargs, argarray);
6839 }
6840
6841 /* Build and return a call to FN, using NARGS arguments in ARGARRAY.
6842    This function performs no overload resolution, conversion, or other
6843    high-level operations.  */
6844
6845 tree
6846 build_cxx_call (tree fn, int nargs, tree *argarray)
6847 {
6848   tree fndecl;
6849
6850   /* Remember roughly where this call is.  */
6851   location_t loc = EXPR_LOC_OR_HERE (fn);
6852   fn = build_call_a (fn, nargs, argarray);
6853   SET_EXPR_LOCATION (fn, loc);
6854
6855   /* If this call might throw an exception, note that fact.  */
6856   fndecl = get_callee_fndecl (fn);
6857
6858   /* Check that arguments to builtin functions match the expectations.  */
6859   if (fndecl
6860       && DECL_BUILT_IN (fndecl)
6861       && DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_NORMAL
6862       && !check_builtin_function_arguments (fndecl, nargs, argarray))
6863     return error_mark_node;
6864
6865   /* Some built-in function calls will be evaluated at compile-time in
6866      fold ().  */
6867   fn = fold_if_not_in_template (fn);
6868
6869   if (VOID_TYPE_P (TREE_TYPE (fn)))
6870     return fn;
6871
6872   fn = require_complete_type (fn);
6873   if (fn == error_mark_node)
6874     return error_mark_node;
6875
6876   if (MAYBE_CLASS_TYPE_P (TREE_TYPE (fn)))
6877     fn = build_cplus_new (TREE_TYPE (fn), fn, tf_warning_or_error);
6878   return convert_from_reference (fn);
6879 }
6880
6881 static GTY(()) tree java_iface_lookup_fn;
6882
6883 /* Make an expression which yields the address of the Java interface
6884    method FN.  This is achieved by generating a call to libjava's
6885    _Jv_LookupInterfaceMethodIdx().  */
6886
6887 static tree
6888 build_java_interface_fn_ref (tree fn, tree instance)
6889 {
6890   tree lookup_fn, method, idx;
6891   tree klass_ref, iface, iface_ref;
6892   int i;
6893
6894   if (!java_iface_lookup_fn)
6895     {
6896       tree ftype = build_function_type_list (ptr_type_node,
6897                                              ptr_type_node, ptr_type_node,
6898                                              java_int_type_node, NULL_TREE);
6899       java_iface_lookup_fn
6900         = add_builtin_function ("_Jv_LookupInterfaceMethodIdx", ftype,
6901                                 0, NOT_BUILT_IN, NULL, NULL_TREE);
6902     }
6903
6904   /* Look up the pointer to the runtime java.lang.Class object for `instance'.
6905      This is the first entry in the vtable.  */
6906   klass_ref = build_vtbl_ref (cp_build_indirect_ref (instance, RO_NULL, 
6907                                                      tf_warning_or_error),
6908                               integer_zero_node);
6909
6910   /* Get the java.lang.Class pointer for the interface being called.  */
6911   iface = DECL_CONTEXT (fn);
6912   iface_ref = lookup_field (iface, get_identifier ("class$"), 0, false);
6913   if (!iface_ref || TREE_CODE (iface_ref) != VAR_DECL
6914       || DECL_CONTEXT (iface_ref) != iface)
6915     {
6916       error ("could not find class$ field in java interface type %qT",
6917                 iface);
6918       return error_mark_node;
6919     }
6920   iface_ref = build_address (iface_ref);
6921   iface_ref = convert (build_pointer_type (iface), iface_ref);
6922
6923   /* Determine the itable index of FN.  */
6924   i = 1;
6925   for (method = TYPE_METHODS (iface); method; method = DECL_CHAIN (method))
6926     {
6927       if (!DECL_VIRTUAL_P (method))
6928         continue;
6929       if (fn == method)
6930         break;
6931       i++;
6932     }
6933   idx = build_int_cst (NULL_TREE, i);
6934
6935   lookup_fn = build1 (ADDR_EXPR,
6936                       build_pointer_type (TREE_TYPE (java_iface_lookup_fn)),
6937                       java_iface_lookup_fn);
6938   return build_call_nary (ptr_type_node, lookup_fn,
6939                           3, klass_ref, iface_ref, idx);
6940 }
6941
6942 /* Returns the value to use for the in-charge parameter when making a
6943    call to a function with the indicated NAME.
6944
6945    FIXME:Can't we find a neater way to do this mapping?  */
6946
6947 tree
6948 in_charge_arg_for_name (tree name)
6949 {
6950  if (name == base_ctor_identifier
6951       || name == base_dtor_identifier)
6952     return integer_zero_node;
6953   else if (name == complete_ctor_identifier)
6954     return integer_one_node;
6955   else if (name == complete_dtor_identifier)
6956     return integer_two_node;
6957   else if (name == deleting_dtor_identifier)
6958     return integer_three_node;
6959
6960   /* This function should only be called with one of the names listed
6961      above.  */
6962   gcc_unreachable ();
6963   return NULL_TREE;
6964 }
6965
6966 /* Build a call to a constructor, destructor, or an assignment
6967    operator for INSTANCE, an expression with class type.  NAME
6968    indicates the special member function to call; *ARGS are the
6969    arguments.  ARGS may be NULL.  This may change ARGS.  BINFO
6970    indicates the base of INSTANCE that is to be passed as the `this'
6971    parameter to the member function called.
6972
6973    FLAGS are the LOOKUP_* flags to use when processing the call.
6974
6975    If NAME indicates a complete object constructor, INSTANCE may be
6976    NULL_TREE.  In this case, the caller will call build_cplus_new to
6977    store the newly constructed object into a VAR_DECL.  */
6978
6979 tree
6980 build_special_member_call (tree instance, tree name, VEC(tree,gc) **args,
6981                            tree binfo, int flags, tsubst_flags_t complain)
6982 {
6983   tree fns;
6984   /* The type of the subobject to be constructed or destroyed.  */
6985   tree class_type;
6986   VEC(tree,gc) *allocated = NULL;
6987   tree ret;
6988
6989   gcc_assert (name == complete_ctor_identifier
6990               || name == base_ctor_identifier
6991               || name == complete_dtor_identifier
6992               || name == base_dtor_identifier
6993               || name == deleting_dtor_identifier
6994               || name == ansi_assopname (NOP_EXPR));
6995   if (TYPE_P (binfo))
6996     {
6997       /* Resolve the name.  */
6998       if (!complete_type_or_maybe_complain (binfo, NULL_TREE, complain))
6999         return error_mark_node;
7000
7001       binfo = TYPE_BINFO (binfo);
7002     }
7003
7004   gcc_assert (binfo != NULL_TREE);
7005
7006   class_type = BINFO_TYPE (binfo);
7007
7008   /* Handle the special case where INSTANCE is NULL_TREE.  */
7009   if (name == complete_ctor_identifier && !instance)
7010     {
7011       instance = build_int_cst (build_pointer_type (class_type), 0);
7012       instance = build1 (INDIRECT_REF, class_type, instance);
7013     }
7014   else
7015     {
7016       if (name == complete_dtor_identifier
7017           || name == base_dtor_identifier
7018           || name == deleting_dtor_identifier)
7019         gcc_assert (args == NULL || VEC_empty (tree, *args));
7020
7021       /* Convert to the base class, if necessary.  */
7022       if (!same_type_ignoring_top_level_qualifiers_p
7023           (TREE_TYPE (instance), BINFO_TYPE (binfo)))
7024         {
7025           if (name != ansi_assopname (NOP_EXPR))
7026             /* For constructors and destructors, either the base is
7027                non-virtual, or it is virtual but we are doing the
7028                conversion from a constructor or destructor for the
7029                complete object.  In either case, we can convert
7030                statically.  */
7031             instance = convert_to_base_statically (instance, binfo);
7032           else
7033             /* However, for assignment operators, we must convert
7034                dynamically if the base is virtual.  */
7035             instance = build_base_path (PLUS_EXPR, instance,
7036                                         binfo, /*nonnull=*/1);
7037         }
7038     }
7039
7040   gcc_assert (instance != NULL_TREE);
7041
7042   fns = lookup_fnfields (binfo, name, 1);
7043
7044   /* When making a call to a constructor or destructor for a subobject
7045      that uses virtual base classes, pass down a pointer to a VTT for
7046      the subobject.  */
7047   if ((name == base_ctor_identifier
7048        || name == base_dtor_identifier)
7049       && CLASSTYPE_VBASECLASSES (class_type))
7050     {
7051       tree vtt;
7052       tree sub_vtt;
7053
7054       /* If the current function is a complete object constructor
7055          or destructor, then we fetch the VTT directly.
7056          Otherwise, we look it up using the VTT we were given.  */
7057       vtt = DECL_CHAIN (CLASSTYPE_VTABLES (current_class_type));
7058       vtt = decay_conversion (vtt);
7059       vtt = build3 (COND_EXPR, TREE_TYPE (vtt),
7060                     build2 (EQ_EXPR, boolean_type_node,
7061                             current_in_charge_parm, integer_zero_node),
7062                     current_vtt_parm,
7063                     vtt);
7064       gcc_assert (BINFO_SUBVTT_INDEX (binfo));
7065       sub_vtt = build2 (POINTER_PLUS_EXPR, TREE_TYPE (vtt), vtt,
7066                         BINFO_SUBVTT_INDEX (binfo));
7067
7068       if (args == NULL)
7069         {
7070           allocated = make_tree_vector ();
7071           args = &allocated;
7072         }
7073
7074       VEC_safe_insert (tree, gc, *args, 0, sub_vtt);
7075     }
7076
7077   ret = build_new_method_call (instance, fns, args,
7078                                TYPE_BINFO (BINFO_TYPE (binfo)),
7079                                flags, /*fn=*/NULL,
7080                                complain);
7081
7082   if (allocated != NULL)
7083     release_tree_vector (allocated);
7084
7085   return ret;
7086 }
7087
7088 /* Return the NAME, as a C string.  The NAME indicates a function that
7089    is a member of TYPE.  *FREE_P is set to true if the caller must
7090    free the memory returned.
7091
7092    Rather than go through all of this, we should simply set the names
7093    of constructors and destructors appropriately, and dispense with
7094    ctor_identifier, dtor_identifier, etc.  */
7095
7096 static char *
7097 name_as_c_string (tree name, tree type, bool *free_p)
7098 {
7099   char *pretty_name;
7100
7101   /* Assume that we will not allocate memory.  */
7102   *free_p = false;
7103   /* Constructors and destructors are special.  */
7104   if (IDENTIFIER_CTOR_OR_DTOR_P (name))
7105     {
7106       pretty_name
7107         = CONST_CAST (char *, identifier_to_locale (IDENTIFIER_POINTER (constructor_name (type))));
7108       /* For a destructor, add the '~'.  */
7109       if (name == complete_dtor_identifier
7110           || name == base_dtor_identifier
7111           || name == deleting_dtor_identifier)
7112         {
7113           pretty_name = concat ("~", pretty_name, NULL);
7114           /* Remember that we need to free the memory allocated.  */
7115           *free_p = true;
7116         }
7117     }
7118   else if (IDENTIFIER_TYPENAME_P (name))
7119     {
7120       pretty_name = concat ("operator ",
7121                             type_as_string_translate (TREE_TYPE (name),
7122                                                       TFF_PLAIN_IDENTIFIER),
7123                             NULL);
7124       /* Remember that we need to free the memory allocated.  */
7125       *free_p = true;
7126     }
7127   else
7128     pretty_name = CONST_CAST (char *, identifier_to_locale (IDENTIFIER_POINTER (name)));
7129
7130   return pretty_name;
7131 }
7132
7133 /* Build a call to "INSTANCE.FN (ARGS)".  If FN_P is non-NULL, it will
7134    be set, upon return, to the function called.  ARGS may be NULL.
7135    This may change ARGS.  */
7136
7137 static tree
7138 build_new_method_call_1 (tree instance, tree fns, VEC(tree,gc) **args,
7139                          tree conversion_path, int flags,
7140                          tree *fn_p, tsubst_flags_t complain)
7141 {
7142   struct z_candidate *candidates = 0, *cand;
7143   tree explicit_targs = NULL_TREE;
7144   tree basetype = NULL_TREE;
7145   tree access_binfo;
7146   tree optype;
7147   tree first_mem_arg = NULL_TREE;
7148   tree instance_ptr;
7149   tree name;
7150   bool skip_first_for_error;
7151   VEC(tree,gc) *user_args;
7152   tree call;
7153   tree fn;
7154   int template_only = 0;
7155   bool any_viable_p;
7156   tree orig_instance;
7157   tree orig_fns;
7158   VEC(tree,gc) *orig_args = NULL;
7159   void *p;
7160
7161   gcc_assert (instance != NULL_TREE);
7162
7163   /* We don't know what function we're going to call, yet.  */
7164   if (fn_p)
7165     *fn_p = NULL_TREE;
7166
7167   if (error_operand_p (instance)
7168       || !fns || error_operand_p (fns))
7169     return error_mark_node;
7170
7171   if (!BASELINK_P (fns))
7172     {
7173       if (complain & tf_error)
7174         error ("call to non-function %qD", fns);
7175       return error_mark_node;
7176     }
7177
7178   orig_instance = instance;
7179   orig_fns = fns;
7180
7181   /* Dismantle the baselink to collect all the information we need.  */
7182   if (!conversion_path)
7183     conversion_path = BASELINK_BINFO (fns);
7184   access_binfo = BASELINK_ACCESS_BINFO (fns);
7185   optype = BASELINK_OPTYPE (fns);
7186   fns = BASELINK_FUNCTIONS (fns);
7187   if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
7188     {
7189       explicit_targs = TREE_OPERAND (fns, 1);
7190       fns = TREE_OPERAND (fns, 0);
7191       template_only = 1;
7192     }
7193   gcc_assert (TREE_CODE (fns) == FUNCTION_DECL
7194               || TREE_CODE (fns) == TEMPLATE_DECL
7195               || TREE_CODE (fns) == OVERLOAD);
7196   fn = get_first_fn (fns);
7197   name = DECL_NAME (fn);
7198
7199   basetype = TYPE_MAIN_VARIANT (TREE_TYPE (instance));
7200   gcc_assert (CLASS_TYPE_P (basetype));
7201
7202   if (processing_template_decl)
7203     {
7204       orig_args = args == NULL ? NULL : make_tree_vector_copy (*args);
7205       instance = build_non_dependent_expr (instance);
7206       if (args != NULL)
7207         make_args_non_dependent (*args);
7208     }
7209
7210   user_args = args == NULL ? NULL : *args;
7211   /* Under DR 147 A::A() is an invalid constructor call,
7212      not a functional cast.  */
7213   if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (fn))
7214     {
7215       if (! (complain & tf_error))
7216         return error_mark_node;
7217
7218       permerror (input_location,
7219                  "cannot call constructor %<%T::%D%> directly",
7220                  basetype, name);
7221       permerror (input_location, "  for a function-style cast, remove the "
7222                  "redundant %<::%D%>", name);
7223       call = build_functional_cast (basetype, build_tree_list_vec (user_args),
7224                                     complain);
7225       return call;
7226     }
7227
7228   /* Figure out whether to skip the first argument for the error
7229      message we will display to users if an error occurs.  We don't
7230      want to display any compiler-generated arguments.  The "this"
7231      pointer hasn't been added yet.  However, we must remove the VTT
7232      pointer if this is a call to a base-class constructor or
7233      destructor.  */
7234   skip_first_for_error = false;
7235   if (IDENTIFIER_CTOR_OR_DTOR_P (name))
7236     {
7237       /* Callers should explicitly indicate whether they want to construct
7238          the complete object or just the part without virtual bases.  */
7239       gcc_assert (name != ctor_identifier);
7240       /* Similarly for destructors.  */
7241       gcc_assert (name != dtor_identifier);
7242       /* Remove the VTT pointer, if present.  */
7243       if ((name == base_ctor_identifier || name == base_dtor_identifier)
7244           && CLASSTYPE_VBASECLASSES (basetype))
7245         skip_first_for_error = true;
7246     }
7247
7248   /* Process the argument list.  */
7249   if (args != NULL && *args != NULL)
7250     {
7251       *args = resolve_args (*args, complain);
7252       if (*args == NULL)
7253         return error_mark_node;
7254     }
7255
7256   instance_ptr = build_this (instance);
7257
7258   /* It's OK to call destructors and constructors on cv-qualified objects.
7259      Therefore, convert the INSTANCE_PTR to the unqualified type, if
7260      necessary.  */
7261   if (DECL_DESTRUCTOR_P (fn)
7262       || DECL_CONSTRUCTOR_P (fn))
7263     {
7264       tree type = build_pointer_type (basetype);
7265       if (!same_type_p (type, TREE_TYPE (instance_ptr)))
7266         instance_ptr = build_nop (type, instance_ptr);
7267     }
7268   if (DECL_DESTRUCTOR_P (fn))
7269     name = complete_dtor_identifier;
7270
7271   first_mem_arg = instance_ptr;
7272
7273   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
7274   p = conversion_obstack_alloc (0);
7275
7276   /* If CONSTRUCTOR_IS_DIRECT_INIT is set, this was a T{ } form
7277      initializer, not T({ }).  */
7278   if (DECL_CONSTRUCTOR_P (fn) && args != NULL && !VEC_empty (tree, *args)
7279       && BRACE_ENCLOSED_INITIALIZER_P (VEC_index (tree, *args, 0))
7280       && CONSTRUCTOR_IS_DIRECT_INIT (VEC_index (tree, *args, 0)))
7281     {
7282       tree init_list = VEC_index (tree, *args, 0);
7283
7284       gcc_assert (VEC_length (tree, *args) == 1
7285                   && !(flags & LOOKUP_ONLYCONVERTING));
7286
7287       /* If the initializer list has no elements and T is a class type with
7288          a default constructor, the object is value-initialized.  Handle
7289          this here so we don't need to handle it wherever we use
7290          build_special_member_call.  */
7291       if (CONSTRUCTOR_NELTS (init_list) == 0
7292           && TYPE_HAS_DEFAULT_CONSTRUCTOR (basetype)
7293           && !processing_template_decl)
7294         {
7295           tree ob, init = build_value_init (basetype, complain);
7296           if (integer_zerop (instance_ptr))
7297             return get_target_expr_sfinae (init, complain);
7298           ob = build_fold_indirect_ref (instance_ptr);
7299           init = build2 (INIT_EXPR, TREE_TYPE (ob), ob, init);
7300           TREE_SIDE_EFFECTS (init) = true;
7301           return init;
7302         }
7303
7304       add_list_candidates (fns, first_mem_arg, init_list,
7305                            basetype, explicit_targs, template_only,
7306                            conversion_path, access_binfo, flags, &candidates);
7307     }
7308   else
7309     {
7310       add_candidates (fns, first_mem_arg, user_args, optype,
7311                       explicit_targs, template_only, conversion_path,
7312                       access_binfo, flags, &candidates);
7313     }
7314   any_viable_p = false;
7315   candidates = splice_viable (candidates, pedantic, &any_viable_p);
7316
7317   if (!any_viable_p)
7318     {
7319       if (complain & tf_error)
7320         {
7321           if (!COMPLETE_OR_OPEN_TYPE_P (basetype))
7322             cxx_incomplete_type_error (instance_ptr, basetype);
7323           else if (optype)
7324             error ("no matching function for call to %<%T::operator %T(%A)%#V%>",
7325                    basetype, optype, build_tree_list_vec (user_args),
7326                    TREE_TYPE (TREE_TYPE (instance_ptr)));
7327           else
7328             {
7329               char *pretty_name;
7330               bool free_p;
7331               tree arglist;
7332
7333               pretty_name = name_as_c_string (name, basetype, &free_p);
7334               arglist = build_tree_list_vec (user_args);
7335               if (skip_first_for_error)
7336                 arglist = TREE_CHAIN (arglist);
7337               error ("no matching function for call to %<%T::%s(%A)%#V%>",
7338                      basetype, pretty_name, arglist,
7339                      TREE_TYPE (TREE_TYPE (instance_ptr)));
7340               if (free_p)
7341                 free (pretty_name);
7342             }
7343           print_z_candidates (location_of (name), candidates);
7344         }
7345       call = error_mark_node;
7346     }
7347   else
7348     {
7349       cand = tourney (candidates);
7350       if (cand == 0)
7351         {
7352           char *pretty_name;
7353           bool free_p;
7354           tree arglist;
7355
7356           if (complain & tf_error)
7357             {
7358               pretty_name = name_as_c_string (name, basetype, &free_p);
7359               arglist = build_tree_list_vec (user_args);
7360               if (skip_first_for_error)
7361                 arglist = TREE_CHAIN (arglist);
7362               error ("call of overloaded %<%s(%A)%> is ambiguous", pretty_name,
7363                      arglist);
7364               print_z_candidates (location_of (name), candidates);
7365               if (free_p)
7366                 free (pretty_name);
7367             }
7368           call = error_mark_node;
7369         }
7370       else
7371         {
7372           fn = cand->fn;
7373
7374           if (!(flags & LOOKUP_NONVIRTUAL)
7375               && DECL_PURE_VIRTUAL_P (fn)
7376               && instance == current_class_ref
7377               && (DECL_CONSTRUCTOR_P (current_function_decl)
7378                   || DECL_DESTRUCTOR_P (current_function_decl))
7379               && (complain & tf_warning))
7380             /* This is not an error, it is runtime undefined
7381                behavior.  */
7382             warning (0, (DECL_CONSTRUCTOR_P (current_function_decl) ?
7383                       "pure virtual %q#D called from constructor"
7384                       : "pure virtual %q#D called from destructor"),
7385                      fn);
7386
7387           if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE
7388               && is_dummy_object (instance_ptr))
7389             {
7390               if (complain & tf_error)
7391                 error ("cannot call member function %qD without object",
7392                        fn);
7393               call = error_mark_node;
7394             }
7395           else
7396             {
7397               if (DECL_VINDEX (fn) && ! (flags & LOOKUP_NONVIRTUAL)
7398                   && resolves_to_fixed_type_p (instance, 0))
7399                 flags |= LOOKUP_NONVIRTUAL;
7400               if (explicit_targs)
7401                 flags |= LOOKUP_EXPLICIT_TMPL_ARGS;
7402               /* Now we know what function is being called.  */
7403               if (fn_p)
7404                 *fn_p = fn;
7405               /* Build the actual CALL_EXPR.  */
7406               call = build_over_call (cand, flags, complain);
7407               /* In an expression of the form `a->f()' where `f' turns
7408                  out to be a static member function, `a' is
7409                  none-the-less evaluated.  */
7410               if (TREE_CODE (TREE_TYPE (fn)) != METHOD_TYPE
7411                   && !is_dummy_object (instance_ptr)
7412                   && TREE_SIDE_EFFECTS (instance_ptr))
7413                 call = build2 (COMPOUND_EXPR, TREE_TYPE (call),
7414                                instance_ptr, call);
7415               else if (call != error_mark_node
7416                        && DECL_DESTRUCTOR_P (cand->fn)
7417                        && !VOID_TYPE_P (TREE_TYPE (call)))
7418                 /* An explicit call of the form "x->~X()" has type
7419                    "void".  However, on platforms where destructors
7420                    return "this" (i.e., those where
7421                    targetm.cxx.cdtor_returns_this is true), such calls
7422                    will appear to have a return value of pointer type
7423                    to the low-level call machinery.  We do not want to
7424                    change the low-level machinery, since we want to be
7425                    able to optimize "delete f()" on such platforms as
7426                    "operator delete(~X(f()))" (rather than generating
7427                    "t = f(), ~X(t), operator delete (t)").  */
7428                 call = build_nop (void_type_node, call);
7429             }
7430         }
7431     }
7432
7433   if (processing_template_decl && call != error_mark_node)
7434     {
7435       bool cast_to_void = false;
7436
7437       if (TREE_CODE (call) == COMPOUND_EXPR)
7438         call = TREE_OPERAND (call, 1);
7439       else if (TREE_CODE (call) == NOP_EXPR)
7440         {
7441           cast_to_void = true;
7442           call = TREE_OPERAND (call, 0);
7443         }
7444       if (TREE_CODE (call) == INDIRECT_REF)
7445         call = TREE_OPERAND (call, 0);
7446       call = (build_min_non_dep_call_vec
7447               (call,
7448                build_min (COMPONENT_REF, TREE_TYPE (CALL_EXPR_FN (call)),
7449                           orig_instance, orig_fns, NULL_TREE),
7450                orig_args));
7451       call = convert_from_reference (call);
7452       if (cast_to_void)
7453         call = build_nop (void_type_node, call);
7454     }
7455
7456  /* Free all the conversions we allocated.  */
7457   obstack_free (&conversion_obstack, p);
7458
7459   if (orig_args != NULL)
7460     release_tree_vector (orig_args);
7461
7462   return call;
7463 }
7464
7465 /* Wrapper for above.  */
7466
7467 tree
7468 build_new_method_call (tree instance, tree fns, VEC(tree,gc) **args,
7469                        tree conversion_path, int flags,
7470                        tree *fn_p, tsubst_flags_t complain)
7471 {
7472   tree ret;
7473   bool subtime = timevar_cond_start (TV_OVERLOAD);
7474   ret = build_new_method_call_1 (instance, fns, args, conversion_path, flags,
7475                                  fn_p, complain);
7476   timevar_cond_stop (TV_OVERLOAD, subtime);
7477   return ret;
7478 }
7479
7480 /* Returns true iff standard conversion sequence ICS1 is a proper
7481    subsequence of ICS2.  */
7482
7483 static bool
7484 is_subseq (conversion *ics1, conversion *ics2)
7485 {
7486   /* We can assume that a conversion of the same code
7487      between the same types indicates a subsequence since we only get
7488      here if the types we are converting from are the same.  */
7489
7490   while (ics1->kind == ck_rvalue
7491          || ics1->kind == ck_lvalue)
7492     ics1 = ics1->u.next;
7493
7494   while (1)
7495     {
7496       while (ics2->kind == ck_rvalue
7497              || ics2->kind == ck_lvalue)
7498         ics2 = ics2->u.next;
7499
7500       if (ics2->kind == ck_user
7501           || ics2->kind == ck_ambig
7502           || ics2->kind == ck_aggr
7503           || ics2->kind == ck_list
7504           || ics2->kind == ck_identity)
7505         /* At this point, ICS1 cannot be a proper subsequence of
7506            ICS2.  We can get a USER_CONV when we are comparing the
7507            second standard conversion sequence of two user conversion
7508            sequences.  */
7509         return false;
7510
7511       ics2 = ics2->u.next;
7512
7513       if (ics2->kind == ics1->kind
7514           && same_type_p (ics2->type, ics1->type)
7515           && same_type_p (ics2->u.next->type,
7516                           ics1->u.next->type))
7517         return true;
7518     }
7519 }
7520
7521 /* Returns nonzero iff DERIVED is derived from BASE.  The inputs may
7522    be any _TYPE nodes.  */
7523
7524 bool
7525 is_properly_derived_from (tree derived, tree base)
7526 {
7527   if (!CLASS_TYPE_P (derived) || !CLASS_TYPE_P (base))
7528     return false;
7529
7530   /* We only allow proper derivation here.  The DERIVED_FROM_P macro
7531      considers every class derived from itself.  */
7532   return (!same_type_ignoring_top_level_qualifiers_p (derived, base)
7533           && DERIVED_FROM_P (base, derived));
7534 }
7535
7536 /* We build the ICS for an implicit object parameter as a pointer
7537    conversion sequence.  However, such a sequence should be compared
7538    as if it were a reference conversion sequence.  If ICS is the
7539    implicit conversion sequence for an implicit object parameter,
7540    modify it accordingly.  */
7541
7542 static void
7543 maybe_handle_implicit_object (conversion **ics)
7544 {
7545   if ((*ics)->this_p)
7546     {
7547       /* [over.match.funcs]
7548
7549          For non-static member functions, the type of the
7550          implicit object parameter is "reference to cv X"
7551          where X is the class of which the function is a
7552          member and cv is the cv-qualification on the member
7553          function declaration.  */
7554       conversion *t = *ics;
7555       tree reference_type;
7556
7557       /* The `this' parameter is a pointer to a class type.  Make the
7558          implicit conversion talk about a reference to that same class
7559          type.  */
7560       reference_type = TREE_TYPE (t->type);
7561       reference_type = build_reference_type (reference_type);
7562
7563       if (t->kind == ck_qual)
7564         t = t->u.next;
7565       if (t->kind == ck_ptr)
7566         t = t->u.next;
7567       t = build_identity_conv (TREE_TYPE (t->type), NULL_TREE);
7568       t = direct_reference_binding (reference_type, t);
7569       t->this_p = 1;
7570       t->rvaluedness_matches_p = 0;
7571       *ics = t;
7572     }
7573 }
7574
7575 /* If *ICS is a REF_BIND set *ICS to the remainder of the conversion,
7576    and return the initial reference binding conversion. Otherwise,
7577    leave *ICS unchanged and return NULL.  */
7578
7579 static conversion *
7580 maybe_handle_ref_bind (conversion **ics)
7581 {
7582   if ((*ics)->kind == ck_ref_bind)
7583     {
7584       conversion *old_ics = *ics;
7585       *ics = old_ics->u.next;
7586       (*ics)->user_conv_p = old_ics->user_conv_p;
7587       return old_ics;
7588     }
7589
7590   return NULL;
7591 }
7592
7593 /* Compare two implicit conversion sequences according to the rules set out in
7594    [over.ics.rank].  Return values:
7595
7596       1: ics1 is better than ics2
7597      -1: ics2 is better than ics1
7598       0: ics1 and ics2 are indistinguishable */
7599
7600 static int
7601 compare_ics (conversion *ics1, conversion *ics2)
7602 {
7603   tree from_type1;
7604   tree from_type2;
7605   tree to_type1;
7606   tree to_type2;
7607   tree deref_from_type1 = NULL_TREE;
7608   tree deref_from_type2 = NULL_TREE;
7609   tree deref_to_type1 = NULL_TREE;
7610   tree deref_to_type2 = NULL_TREE;
7611   conversion_rank rank1, rank2;
7612
7613   /* REF_BINDING is nonzero if the result of the conversion sequence
7614      is a reference type.   In that case REF_CONV is the reference
7615      binding conversion. */
7616   conversion *ref_conv1;
7617   conversion *ref_conv2;
7618
7619   /* Handle implicit object parameters.  */
7620   maybe_handle_implicit_object (&ics1);
7621   maybe_handle_implicit_object (&ics2);
7622
7623   /* Handle reference parameters.  */
7624   ref_conv1 = maybe_handle_ref_bind (&ics1);
7625   ref_conv2 = maybe_handle_ref_bind (&ics2);
7626
7627   /* List-initialization sequence L1 is a better conversion sequence than
7628      list-initialization sequence L2 if L1 converts to
7629      std::initializer_list<X> for some X and L2 does not.  */
7630   if (ics1->kind == ck_list && ics2->kind != ck_list)
7631     return 1;
7632   if (ics2->kind == ck_list && ics1->kind != ck_list)
7633     return -1;
7634
7635   /* [over.ics.rank]
7636
7637      When  comparing  the  basic forms of implicit conversion sequences (as
7638      defined in _over.best.ics_)
7639
7640      --a standard conversion sequence (_over.ics.scs_) is a better
7641        conversion sequence than a user-defined conversion sequence
7642        or an ellipsis conversion sequence, and
7643
7644      --a user-defined conversion sequence (_over.ics.user_) is a
7645        better conversion sequence than an ellipsis conversion sequence
7646        (_over.ics.ellipsis_).  */
7647   rank1 = CONVERSION_RANK (ics1);
7648   rank2 = CONVERSION_RANK (ics2);
7649
7650   if (rank1 > rank2)
7651     return -1;
7652   else if (rank1 < rank2)
7653     return 1;
7654
7655   if (rank1 == cr_bad)
7656     {
7657       /* Both ICS are bad.  We try to make a decision based on what would
7658          have happened if they'd been good.  This is not an extension,
7659          we'll still give an error when we build up the call; this just
7660          helps us give a more helpful error message.  */
7661       rank1 = BAD_CONVERSION_RANK (ics1);
7662       rank2 = BAD_CONVERSION_RANK (ics2);
7663
7664       if (rank1 > rank2)
7665         return -1;
7666       else if (rank1 < rank2)
7667         return 1;
7668
7669       /* We couldn't make up our minds; try to figure it out below.  */
7670     }
7671
7672   if (ics1->ellipsis_p)
7673     /* Both conversions are ellipsis conversions.  */
7674     return 0;
7675
7676   /* User-defined  conversion sequence U1 is a better conversion sequence
7677      than another user-defined conversion sequence U2 if they contain the
7678      same user-defined conversion operator or constructor and if the sec-
7679      ond standard conversion sequence of U1 is  better  than  the  second
7680      standard conversion sequence of U2.  */
7681
7682   /* Handle list-conversion with the same code even though it isn't always
7683      ranked as a user-defined conversion and it doesn't have a second
7684      standard conversion sequence; it will still have the desired effect.
7685      Specifically, we need to do the reference binding comparison at the
7686      end of this function.  */
7687
7688   if (ics1->user_conv_p || ics1->kind == ck_list)
7689     {
7690       conversion *t1;
7691       conversion *t2;
7692
7693       for (t1 = ics1; t1->kind != ck_user; t1 = t1->u.next)
7694         if (t1->kind == ck_ambig || t1->kind == ck_aggr
7695             || t1->kind == ck_list)
7696           break;
7697       for (t2 = ics2; t2->kind != ck_user; t2 = t2->u.next)
7698         if (t2->kind == ck_ambig || t2->kind == ck_aggr
7699             || t2->kind == ck_list)
7700           break;
7701
7702       if (t1->kind != t2->kind)
7703         return 0;
7704       else if (t1->kind == ck_user)
7705         {
7706           if (t1->cand->fn != t2->cand->fn)
7707             return 0;
7708         }
7709       else
7710         {
7711           /* For ambiguous or aggregate conversions, use the target type as
7712              a proxy for the conversion function.  */
7713           if (!same_type_ignoring_top_level_qualifiers_p (t1->type, t2->type))
7714             return 0;
7715         }
7716
7717       /* We can just fall through here, after setting up
7718          FROM_TYPE1 and FROM_TYPE2.  */
7719       from_type1 = t1->type;
7720       from_type2 = t2->type;
7721     }
7722   else
7723     {
7724       conversion *t1;
7725       conversion *t2;
7726
7727       /* We're dealing with two standard conversion sequences.
7728
7729          [over.ics.rank]
7730
7731          Standard conversion sequence S1 is a better conversion
7732          sequence than standard conversion sequence S2 if
7733
7734          --S1 is a proper subsequence of S2 (comparing the conversion
7735            sequences in the canonical form defined by _over.ics.scs_,
7736            excluding any Lvalue Transformation; the identity
7737            conversion sequence is considered to be a subsequence of
7738            any non-identity conversion sequence */
7739
7740       t1 = ics1;
7741       while (t1->kind != ck_identity)
7742         t1 = t1->u.next;
7743       from_type1 = t1->type;
7744
7745       t2 = ics2;
7746       while (t2->kind != ck_identity)
7747         t2 = t2->u.next;
7748       from_type2 = t2->type;
7749     }
7750
7751   /* One sequence can only be a subsequence of the other if they start with
7752      the same type.  They can start with different types when comparing the
7753      second standard conversion sequence in two user-defined conversion
7754      sequences.  */
7755   if (same_type_p (from_type1, from_type2))
7756     {
7757       if (is_subseq (ics1, ics2))
7758         return 1;
7759       if (is_subseq (ics2, ics1))
7760         return -1;
7761     }
7762
7763   /* [over.ics.rank]
7764
7765      Or, if not that,
7766
7767      --the rank of S1 is better than the rank of S2 (by the rules
7768        defined below):
7769
7770     Standard conversion sequences are ordered by their ranks: an Exact
7771     Match is a better conversion than a Promotion, which is a better
7772     conversion than a Conversion.
7773
7774     Two conversion sequences with the same rank are indistinguishable
7775     unless one of the following rules applies:
7776
7777     --A conversion that does not a convert a pointer, pointer to member,
7778       or std::nullptr_t to bool is better than one that does.
7779
7780     The ICS_STD_RANK automatically handles the pointer-to-bool rule,
7781     so that we do not have to check it explicitly.  */
7782   if (ics1->rank < ics2->rank)
7783     return 1;
7784   else if (ics2->rank < ics1->rank)
7785     return -1;
7786
7787   to_type1 = ics1->type;
7788   to_type2 = ics2->type;
7789
7790   /* A conversion from scalar arithmetic type to complex is worse than a
7791      conversion between scalar arithmetic types.  */
7792   if (same_type_p (from_type1, from_type2)
7793       && ARITHMETIC_TYPE_P (from_type1)
7794       && ARITHMETIC_TYPE_P (to_type1)
7795       && ARITHMETIC_TYPE_P (to_type2)
7796       && ((TREE_CODE (to_type1) == COMPLEX_TYPE)
7797           != (TREE_CODE (to_type2) == COMPLEX_TYPE)))
7798     {
7799       if (TREE_CODE (to_type1) == COMPLEX_TYPE)
7800         return -1;
7801       else
7802         return 1;
7803     }
7804
7805   if (TYPE_PTR_P (from_type1)
7806       && TYPE_PTR_P (from_type2)
7807       && TYPE_PTR_P (to_type1)
7808       && TYPE_PTR_P (to_type2))
7809     {
7810       deref_from_type1 = TREE_TYPE (from_type1);
7811       deref_from_type2 = TREE_TYPE (from_type2);
7812       deref_to_type1 = TREE_TYPE (to_type1);
7813       deref_to_type2 = TREE_TYPE (to_type2);
7814     }
7815   /* The rules for pointers to members A::* are just like the rules
7816      for pointers A*, except opposite: if B is derived from A then
7817      A::* converts to B::*, not vice versa.  For that reason, we
7818      switch the from_ and to_ variables here.  */
7819   else if ((TYPE_PTRMEM_P (from_type1) && TYPE_PTRMEM_P (from_type2)
7820             && TYPE_PTRMEM_P (to_type1) && TYPE_PTRMEM_P (to_type2))
7821            || (TYPE_PTRMEMFUNC_P (from_type1)
7822                && TYPE_PTRMEMFUNC_P (from_type2)
7823                && TYPE_PTRMEMFUNC_P (to_type1)
7824                && TYPE_PTRMEMFUNC_P (to_type2)))
7825     {
7826       deref_to_type1 = TYPE_PTRMEM_CLASS_TYPE (from_type1);
7827       deref_to_type2 = TYPE_PTRMEM_CLASS_TYPE (from_type2);
7828       deref_from_type1 = TYPE_PTRMEM_CLASS_TYPE (to_type1);
7829       deref_from_type2 = TYPE_PTRMEM_CLASS_TYPE (to_type2);
7830     }
7831
7832   if (deref_from_type1 != NULL_TREE
7833       && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_from_type1))
7834       && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_from_type2)))
7835     {
7836       /* This was one of the pointer or pointer-like conversions.
7837
7838          [over.ics.rank]
7839
7840          --If class B is derived directly or indirectly from class A,
7841            conversion of B* to A* is better than conversion of B* to
7842            void*, and conversion of A* to void* is better than
7843            conversion of B* to void*.  */
7844       if (TREE_CODE (deref_to_type1) == VOID_TYPE
7845           && TREE_CODE (deref_to_type2) == VOID_TYPE)
7846         {
7847           if (is_properly_derived_from (deref_from_type1,
7848                                         deref_from_type2))
7849             return -1;
7850           else if (is_properly_derived_from (deref_from_type2,
7851                                              deref_from_type1))
7852             return 1;
7853         }
7854       else if (TREE_CODE (deref_to_type1) == VOID_TYPE
7855                || TREE_CODE (deref_to_type2) == VOID_TYPE)
7856         {
7857           if (same_type_p (deref_from_type1, deref_from_type2))
7858             {
7859               if (TREE_CODE (deref_to_type2) == VOID_TYPE)
7860                 {
7861                   if (is_properly_derived_from (deref_from_type1,
7862                                                 deref_to_type1))
7863                     return 1;
7864                 }
7865               /* We know that DEREF_TO_TYPE1 is `void' here.  */
7866               else if (is_properly_derived_from (deref_from_type1,
7867                                                  deref_to_type2))
7868                 return -1;
7869             }
7870         }
7871       else if (RECORD_OR_UNION_CODE_P (TREE_CODE (deref_to_type1))
7872                && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_to_type2)))
7873         {
7874           /* [over.ics.rank]
7875
7876              --If class B is derived directly or indirectly from class A
7877                and class C is derived directly or indirectly from B,
7878
7879              --conversion of C* to B* is better than conversion of C* to
7880                A*,
7881
7882              --conversion of B* to A* is better than conversion of C* to
7883                A*  */
7884           if (same_type_p (deref_from_type1, deref_from_type2))
7885             {
7886               if (is_properly_derived_from (deref_to_type1,
7887                                             deref_to_type2))
7888                 return 1;
7889               else if (is_properly_derived_from (deref_to_type2,
7890                                                  deref_to_type1))
7891                 return -1;
7892             }
7893           else if (same_type_p (deref_to_type1, deref_to_type2))
7894             {
7895               if (is_properly_derived_from (deref_from_type2,
7896                                             deref_from_type1))
7897                 return 1;
7898               else if (is_properly_derived_from (deref_from_type1,
7899                                                  deref_from_type2))
7900                 return -1;
7901             }
7902         }
7903     }
7904   else if (CLASS_TYPE_P (non_reference (from_type1))
7905            && same_type_p (from_type1, from_type2))
7906     {
7907       tree from = non_reference (from_type1);
7908
7909       /* [over.ics.rank]
7910
7911          --binding of an expression of type C to a reference of type
7912            B& is better than binding an expression of type C to a
7913            reference of type A&
7914
7915          --conversion of C to B is better than conversion of C to A,  */
7916       if (is_properly_derived_from (from, to_type1)
7917           && is_properly_derived_from (from, to_type2))
7918         {
7919           if (is_properly_derived_from (to_type1, to_type2))
7920             return 1;
7921           else if (is_properly_derived_from (to_type2, to_type1))
7922             return -1;
7923         }
7924     }
7925   else if (CLASS_TYPE_P (non_reference (to_type1))
7926            && same_type_p (to_type1, to_type2))
7927     {
7928       tree to = non_reference (to_type1);
7929
7930       /* [over.ics.rank]
7931
7932          --binding of an expression of type B to a reference of type
7933            A& is better than binding an expression of type C to a
7934            reference of type A&,
7935
7936          --conversion of B to A is better than conversion of C to A  */
7937       if (is_properly_derived_from (from_type1, to)
7938           && is_properly_derived_from (from_type2, to))
7939         {
7940           if (is_properly_derived_from (from_type2, from_type1))
7941             return 1;
7942           else if (is_properly_derived_from (from_type1, from_type2))
7943             return -1;
7944         }
7945     }
7946
7947   /* [over.ics.rank]
7948
7949      --S1 and S2 differ only in their qualification conversion and  yield
7950        similar  types  T1 and T2 (_conv.qual_), respectively, and the cv-
7951        qualification signature of type T1 is a proper subset of  the  cv-
7952        qualification signature of type T2  */
7953   if (ics1->kind == ck_qual
7954       && ics2->kind == ck_qual
7955       && same_type_p (from_type1, from_type2))
7956     {
7957       int result = comp_cv_qual_signature (to_type1, to_type2);
7958       if (result != 0)
7959         return result;
7960     }
7961
7962   /* [over.ics.rank]
7963
7964      --S1 and S2 are reference bindings (_dcl.init.ref_) and neither refers
7965      to an implicit object parameter, and either S1 binds an lvalue reference
7966      to an lvalue and S2 binds an rvalue reference or S1 binds an rvalue
7967      reference to an rvalue and S2 binds an lvalue reference
7968      (C++0x draft standard, 13.3.3.2)
7969
7970      --S1 and S2 are reference bindings (_dcl.init.ref_), and the
7971      types to which the references refer are the same type except for
7972      top-level cv-qualifiers, and the type to which the reference
7973      initialized by S2 refers is more cv-qualified than the type to
7974      which the reference initialized by S1 refers */
7975
7976   if (ref_conv1 && ref_conv2)
7977     {
7978       if (!ref_conv1->this_p && !ref_conv2->this_p
7979           && (TYPE_REF_IS_RVALUE (ref_conv1->type)
7980               != TYPE_REF_IS_RVALUE (ref_conv2->type)))
7981         {
7982           if (ref_conv1->rvaluedness_matches_p)
7983             return 1;
7984           if (ref_conv2->rvaluedness_matches_p)
7985             return -1;
7986         }
7987
7988       if (same_type_ignoring_top_level_qualifiers_p (to_type1, to_type2))
7989         return comp_cv_qualification (TREE_TYPE (ref_conv2->type),
7990                                       TREE_TYPE (ref_conv1->type));
7991     }
7992
7993   /* Neither conversion sequence is better than the other.  */
7994   return 0;
7995 }
7996
7997 /* The source type for this standard conversion sequence.  */
7998
7999 static tree
8000 source_type (conversion *t)
8001 {
8002   for (;; t = t->u.next)
8003     {
8004       if (t->kind == ck_user
8005           || t->kind == ck_ambig
8006           || t->kind == ck_identity)
8007         return t->type;
8008     }
8009   gcc_unreachable ();
8010 }
8011
8012 /* Note a warning about preferring WINNER to LOSER.  We do this by storing
8013    a pointer to LOSER and re-running joust to produce the warning if WINNER
8014    is actually used.  */
8015
8016 static void
8017 add_warning (struct z_candidate *winner, struct z_candidate *loser)
8018 {
8019   candidate_warning *cw = (candidate_warning *)
8020     conversion_obstack_alloc (sizeof (candidate_warning));
8021   cw->loser = loser;
8022   cw->next = winner->warnings;
8023   winner->warnings = cw;
8024 }
8025
8026 /* Compare two candidates for overloading as described in
8027    [over.match.best].  Return values:
8028
8029       1: cand1 is better than cand2
8030      -1: cand2 is better than cand1
8031       0: cand1 and cand2 are indistinguishable */
8032
8033 static int
8034 joust (struct z_candidate *cand1, struct z_candidate *cand2, bool warn)
8035 {
8036   int winner = 0;
8037   int off1 = 0, off2 = 0;
8038   size_t i;
8039   size_t len;
8040
8041   /* Candidates that involve bad conversions are always worse than those
8042      that don't.  */
8043   if (cand1->viable > cand2->viable)
8044     return 1;
8045   if (cand1->viable < cand2->viable)
8046     return -1;
8047
8048   /* If we have two pseudo-candidates for conversions to the same type,
8049      or two candidates for the same function, arbitrarily pick one.  */
8050   if (cand1->fn == cand2->fn
8051       && (IS_TYPE_OR_DECL_P (cand1->fn)))
8052     return 1;
8053
8054   /* a viable function F1
8055      is defined to be a better function than another viable function F2  if
8056      for  all arguments i, ICSi(F1) is not a worse conversion sequence than
8057      ICSi(F2), and then */
8058
8059   /* for some argument j, ICSj(F1) is a better conversion  sequence  than
8060      ICSj(F2) */
8061
8062   /* For comparing static and non-static member functions, we ignore
8063      the implicit object parameter of the non-static function.  The
8064      standard says to pretend that the static function has an object
8065      parm, but that won't work with operator overloading.  */
8066   len = cand1->num_convs;
8067   if (len != cand2->num_convs)
8068     {
8069       int static_1 = DECL_STATIC_FUNCTION_P (cand1->fn);
8070       int static_2 = DECL_STATIC_FUNCTION_P (cand2->fn);
8071
8072       gcc_assert (static_1 != static_2);
8073
8074       if (static_1)
8075         off2 = 1;
8076       else
8077         {
8078           off1 = 1;
8079           --len;
8080         }
8081     }
8082
8083   for (i = 0; i < len; ++i)
8084     {
8085       conversion *t1 = cand1->convs[i + off1];
8086       conversion *t2 = cand2->convs[i + off2];
8087       int comp = compare_ics (t1, t2);
8088
8089       if (comp != 0)
8090         {
8091           if (warn_sign_promo
8092               && (CONVERSION_RANK (t1) + CONVERSION_RANK (t2)
8093                   == cr_std + cr_promotion)
8094               && t1->kind == ck_std
8095               && t2->kind == ck_std
8096               && TREE_CODE (t1->type) == INTEGER_TYPE
8097               && TREE_CODE (t2->type) == INTEGER_TYPE
8098               && (TYPE_PRECISION (t1->type)
8099                   == TYPE_PRECISION (t2->type))
8100               && (TYPE_UNSIGNED (t1->u.next->type)
8101                   || (TREE_CODE (t1->u.next->type)
8102                       == ENUMERAL_TYPE)))
8103             {
8104               tree type = t1->u.next->type;
8105               tree type1, type2;
8106               struct z_candidate *w, *l;
8107               if (comp > 0)
8108                 type1 = t1->type, type2 = t2->type,
8109                   w = cand1, l = cand2;
8110               else
8111                 type1 = t2->type, type2 = t1->type,
8112                   w = cand2, l = cand1;
8113
8114               if (warn)
8115                 {
8116                   warning (OPT_Wsign_promo, "passing %qT chooses %qT over %qT",
8117                            type, type1, type2);
8118                   warning (OPT_Wsign_promo, "  in call to %qD", w->fn);
8119                 }
8120               else
8121                 add_warning (w, l);
8122             }
8123
8124           if (winner && comp != winner)
8125             {
8126               winner = 0;
8127               goto tweak;
8128             }
8129           winner = comp;
8130         }
8131     }
8132
8133   /* warn about confusing overload resolution for user-defined conversions,
8134      either between a constructor and a conversion op, or between two
8135      conversion ops.  */
8136   if (winner && warn_conversion && cand1->second_conv
8137       && (!DECL_CONSTRUCTOR_P (cand1->fn) || !DECL_CONSTRUCTOR_P (cand2->fn))
8138       && winner != compare_ics (cand1->second_conv, cand2->second_conv))
8139     {
8140       struct z_candidate *w, *l;
8141       bool give_warning = false;
8142
8143       if (winner == 1)
8144         w = cand1, l = cand2;
8145       else
8146         w = cand2, l = cand1;
8147
8148       /* We don't want to complain about `X::operator T1 ()'
8149          beating `X::operator T2 () const', when T2 is a no less
8150          cv-qualified version of T1.  */
8151       if (DECL_CONTEXT (w->fn) == DECL_CONTEXT (l->fn)
8152           && !DECL_CONSTRUCTOR_P (w->fn) && !DECL_CONSTRUCTOR_P (l->fn))
8153         {
8154           tree t = TREE_TYPE (TREE_TYPE (l->fn));
8155           tree f = TREE_TYPE (TREE_TYPE (w->fn));
8156
8157           if (TREE_CODE (t) == TREE_CODE (f) && POINTER_TYPE_P (t))
8158             {
8159               t = TREE_TYPE (t);
8160               f = TREE_TYPE (f);
8161             }
8162           if (!comp_ptr_ttypes (t, f))
8163             give_warning = true;
8164         }
8165       else
8166         give_warning = true;
8167
8168       if (!give_warning)
8169         /*NOP*/;
8170       else if (warn)
8171         {
8172           tree source = source_type (w->convs[0]);
8173           if (! DECL_CONSTRUCTOR_P (w->fn))
8174             source = TREE_TYPE (source);
8175           if (warning (OPT_Wconversion, "choosing %qD over %qD", w->fn, l->fn)
8176               && warning (OPT_Wconversion, "  for conversion from %qT to %qT",
8177                           source, w->second_conv->type)) 
8178             {
8179               inform (input_location, "  because conversion sequence for the argument is better");
8180             }
8181         }
8182       else
8183         add_warning (w, l);
8184     }
8185
8186   if (winner)
8187     return winner;
8188
8189   /* or, if not that,
8190      F1 is a non-template function and F2 is a template function
8191      specialization.  */
8192
8193   if (!cand1->template_decl && cand2->template_decl)
8194     return 1;
8195   else if (cand1->template_decl && !cand2->template_decl)
8196     return -1;
8197
8198   /* or, if not that,
8199      F1 and F2 are template functions and the function template for F1 is
8200      more specialized than the template for F2 according to the partial
8201      ordering rules.  */
8202
8203   if (cand1->template_decl && cand2->template_decl)
8204     {
8205       winner = more_specialized_fn
8206         (TI_TEMPLATE (cand1->template_decl),
8207          TI_TEMPLATE (cand2->template_decl),
8208          /* [temp.func.order]: The presence of unused ellipsis and default
8209             arguments has no effect on the partial ordering of function
8210             templates.   add_function_candidate() will not have
8211             counted the "this" argument for constructors.  */
8212          cand1->num_convs + DECL_CONSTRUCTOR_P (cand1->fn));
8213       if (winner)
8214         return winner;
8215     }
8216
8217   /* or, if not that,
8218      the  context  is  an  initialization by user-defined conversion (see
8219      _dcl.init_  and  _over.match.user_)  and  the  standard   conversion
8220      sequence  from  the return type of F1 to the destination type (i.e.,
8221      the type of the entity being initialized)  is  a  better  conversion
8222      sequence  than the standard conversion sequence from the return type
8223      of F2 to the destination type.  */
8224
8225   if (cand1->second_conv)
8226     {
8227       winner = compare_ics (cand1->second_conv, cand2->second_conv);
8228       if (winner)
8229         return winner;
8230     }
8231
8232   /* Check whether we can discard a builtin candidate, either because we
8233      have two identical ones or matching builtin and non-builtin candidates.
8234
8235      (Pedantically in the latter case the builtin which matched the user
8236      function should not be added to the overload set, but we spot it here.
8237
8238      [over.match.oper]
8239      ... the builtin candidates include ...
8240      - do not have the same parameter type list as any non-template
8241        non-member candidate.  */
8242
8243   if (TREE_CODE (cand1->fn) == IDENTIFIER_NODE
8244       || TREE_CODE (cand2->fn) == IDENTIFIER_NODE)
8245     {
8246       for (i = 0; i < len; ++i)
8247         if (!same_type_p (cand1->convs[i]->type,
8248                           cand2->convs[i]->type))
8249           break;
8250       if (i == cand1->num_convs)
8251         {
8252           if (cand1->fn == cand2->fn)
8253             /* Two built-in candidates; arbitrarily pick one.  */
8254             return 1;
8255           else if (TREE_CODE (cand1->fn) == IDENTIFIER_NODE)
8256             /* cand1 is built-in; prefer cand2.  */
8257             return -1;
8258           else
8259             /* cand2 is built-in; prefer cand1.  */
8260             return 1;
8261         }
8262     }
8263
8264   /* If the two function declarations represent the same function (this can
8265      happen with declarations in multiple scopes and arg-dependent lookup),
8266      arbitrarily choose one.  But first make sure the default args we're
8267      using match.  */
8268   if (DECL_P (cand1->fn) && DECL_P (cand2->fn)
8269       && equal_functions (cand1->fn, cand2->fn))
8270     {
8271       tree parms1 = TYPE_ARG_TYPES (TREE_TYPE (cand1->fn));
8272       tree parms2 = TYPE_ARG_TYPES (TREE_TYPE (cand2->fn));
8273
8274       gcc_assert (!DECL_CONSTRUCTOR_P (cand1->fn));
8275
8276       for (i = 0; i < len; ++i)
8277         {
8278           /* Don't crash if the fn is variadic.  */
8279           if (!parms1)
8280             break;
8281           parms1 = TREE_CHAIN (parms1);
8282           parms2 = TREE_CHAIN (parms2);
8283         }
8284
8285       if (off1)
8286         parms1 = TREE_CHAIN (parms1);
8287       else if (off2)
8288         parms2 = TREE_CHAIN (parms2);
8289
8290       for (; parms1; ++i)
8291         {
8292           if (!cp_tree_equal (TREE_PURPOSE (parms1),
8293                               TREE_PURPOSE (parms2)))
8294             {
8295               if (warn)
8296                 {
8297                   permerror (input_location, "default argument mismatch in "
8298                              "overload resolution");
8299                   inform (input_location,
8300                           " candidate 1: %q+#F", cand1->fn);
8301                   inform (input_location,
8302                           " candidate 2: %q+#F", cand2->fn);
8303                 }
8304               else
8305                 add_warning (cand1, cand2);
8306               break;
8307             }
8308           parms1 = TREE_CHAIN (parms1);
8309           parms2 = TREE_CHAIN (parms2);
8310         }
8311
8312       return 1;
8313     }
8314
8315 tweak:
8316
8317   /* Extension: If the worst conversion for one candidate is worse than the
8318      worst conversion for the other, take the first.  */
8319   if (!pedantic)
8320     {
8321       conversion_rank rank1 = cr_identity, rank2 = cr_identity;
8322       struct z_candidate *w = 0, *l = 0;
8323
8324       for (i = 0; i < len; ++i)
8325         {
8326           if (CONVERSION_RANK (cand1->convs[i+off1]) > rank1)
8327             rank1 = CONVERSION_RANK (cand1->convs[i+off1]);
8328           if (CONVERSION_RANK (cand2->convs[i + off2]) > rank2)
8329             rank2 = CONVERSION_RANK (cand2->convs[i + off2]);
8330         }
8331       if (rank1 < rank2)
8332         winner = 1, w = cand1, l = cand2;
8333       if (rank1 > rank2)
8334         winner = -1, w = cand2, l = cand1;
8335       if (winner)
8336         {
8337           /* Don't choose a deleted function over ambiguity.  */
8338           if (DECL_P (w->fn) && DECL_DELETED_FN (w->fn))
8339             return 0;
8340           if (warn)
8341             {
8342               pedwarn (input_location, 0,
8343               "ISO C++ says that these are ambiguous, even "
8344               "though the worst conversion for the first is better than "
8345               "the worst conversion for the second:");
8346               print_z_candidate (_("candidate 1:"), w);
8347               print_z_candidate (_("candidate 2:"), l);
8348             }
8349           else
8350             add_warning (w, l);
8351           return winner;
8352         }
8353     }
8354
8355   gcc_assert (!winner);
8356   return 0;
8357 }
8358
8359 /* Given a list of candidates for overloading, find the best one, if any.
8360    This algorithm has a worst case of O(2n) (winner is last), and a best
8361    case of O(n/2) (totally ambiguous); much better than a sorting
8362    algorithm.  */
8363
8364 static struct z_candidate *
8365 tourney (struct z_candidate *candidates)
8366 {
8367   struct z_candidate *champ = candidates, *challenger;
8368   int fate;
8369   int champ_compared_to_predecessor = 0;
8370
8371   /* Walk through the list once, comparing each current champ to the next
8372      candidate, knocking out a candidate or two with each comparison.  */
8373
8374   for (challenger = champ->next; challenger; )
8375     {
8376       fate = joust (champ, challenger, 0);
8377       if (fate == 1)
8378         challenger = challenger->next;
8379       else
8380         {
8381           if (fate == 0)
8382             {
8383               champ = challenger->next;
8384               if (champ == 0)
8385                 return NULL;
8386               champ_compared_to_predecessor = 0;
8387             }
8388           else
8389             {
8390               champ = challenger;
8391               champ_compared_to_predecessor = 1;
8392             }
8393
8394           challenger = champ->next;
8395         }
8396     }
8397
8398   /* Make sure the champ is better than all the candidates it hasn't yet
8399      been compared to.  */
8400
8401   for (challenger = candidates;
8402        challenger != champ
8403          && !(champ_compared_to_predecessor && challenger->next == champ);
8404        challenger = challenger->next)
8405     {
8406       fate = joust (champ, challenger, 0);
8407       if (fate != 1)
8408         return NULL;
8409     }
8410
8411   return champ;
8412 }
8413
8414 /* Returns nonzero if things of type FROM can be converted to TO.  */
8415
8416 bool
8417 can_convert (tree to, tree from)
8418 {
8419   return can_convert_arg (to, from, NULL_TREE, LOOKUP_IMPLICIT);
8420 }
8421
8422 /* Returns nonzero if ARG (of type FROM) can be converted to TO.  */
8423
8424 bool
8425 can_convert_arg (tree to, tree from, tree arg, int flags)
8426 {
8427   conversion *t;
8428   void *p;
8429   bool ok_p;
8430
8431   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
8432   p = conversion_obstack_alloc (0);
8433
8434   t  = implicit_conversion (to, from, arg, /*c_cast_p=*/false,
8435                             flags);
8436   ok_p = (t && !t->bad_p);
8437
8438   /* Free all the conversions we allocated.  */
8439   obstack_free (&conversion_obstack, p);
8440
8441   return ok_p;
8442 }
8443
8444 /* Like can_convert_arg, but allows dubious conversions as well.  */
8445
8446 bool
8447 can_convert_arg_bad (tree to, tree from, tree arg, int flags)
8448 {
8449   conversion *t;
8450   void *p;
8451
8452   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
8453   p = conversion_obstack_alloc (0);
8454   /* Try to perform the conversion.  */
8455   t  = implicit_conversion (to, from, arg, /*c_cast_p=*/false,
8456                             flags);
8457   /* Free all the conversions we allocated.  */
8458   obstack_free (&conversion_obstack, p);
8459
8460   return t != NULL;
8461 }
8462
8463 /* Convert EXPR to TYPE.  Return the converted expression.
8464
8465    Note that we allow bad conversions here because by the time we get to
8466    this point we are committed to doing the conversion.  If we end up
8467    doing a bad conversion, convert_like will complain.  */
8468
8469 tree
8470 perform_implicit_conversion_flags (tree type, tree expr, tsubst_flags_t complain, int flags)
8471 {
8472   conversion *conv;
8473   void *p;
8474
8475   if (error_operand_p (expr))
8476     return error_mark_node;
8477
8478   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
8479   p = conversion_obstack_alloc (0);
8480
8481   conv = implicit_conversion (type, TREE_TYPE (expr), expr,
8482                               /*c_cast_p=*/false,
8483                               flags);
8484
8485   if (!conv)
8486     {
8487       if (complain & tf_error)
8488         {
8489           /* If expr has unknown type, then it is an overloaded function.
8490              Call instantiate_type to get good error messages.  */
8491           if (TREE_TYPE (expr) == unknown_type_node)
8492             instantiate_type (type, expr, complain);
8493           else if (invalid_nonstatic_memfn_p (expr, complain))
8494             /* We gave an error.  */;
8495           else
8496             error ("could not convert %qE from %qT to %qT", expr,
8497                    TREE_TYPE (expr), type);
8498         }
8499       expr = error_mark_node;
8500     }
8501   else if (processing_template_decl)
8502     {
8503       /* In a template, we are only concerned about determining the
8504          type of non-dependent expressions, so we do not have to
8505          perform the actual conversion.  */
8506       if (TREE_TYPE (expr) != type)
8507         expr = build_nop (type, expr);
8508     }
8509   else
8510     expr = convert_like (conv, expr, complain);
8511
8512   /* Free all the conversions we allocated.  */
8513   obstack_free (&conversion_obstack, p);
8514
8515   return expr;
8516 }
8517
8518 tree
8519 perform_implicit_conversion (tree type, tree expr, tsubst_flags_t complain)
8520 {
8521   return perform_implicit_conversion_flags (type, expr, complain, LOOKUP_IMPLICIT);
8522 }
8523
8524 /* Convert EXPR to TYPE (as a direct-initialization) if that is
8525    permitted.  If the conversion is valid, the converted expression is
8526    returned.  Otherwise, NULL_TREE is returned, except in the case
8527    that TYPE is a class type; in that case, an error is issued.  If
8528    C_CAST_P is true, then this direct-initialization is taking
8529    place as part of a static_cast being attempted as part of a C-style
8530    cast.  */
8531
8532 tree
8533 perform_direct_initialization_if_possible (tree type,
8534                                            tree expr,
8535                                            bool c_cast_p,
8536                                            tsubst_flags_t complain)
8537 {
8538   conversion *conv;
8539   void *p;
8540
8541   if (type == error_mark_node || error_operand_p (expr))
8542     return error_mark_node;
8543   /* [dcl.init]
8544
8545      If the destination type is a (possibly cv-qualified) class type:
8546
8547      -- If the initialization is direct-initialization ...,
8548      constructors are considered. ... If no constructor applies, or
8549      the overload resolution is ambiguous, the initialization is
8550      ill-formed.  */
8551   if (CLASS_TYPE_P (type))
8552     {
8553       VEC(tree,gc) *args = make_tree_vector_single (expr);
8554       expr = build_special_member_call (NULL_TREE, complete_ctor_identifier,
8555                                         &args, type, LOOKUP_NORMAL, complain);
8556       release_tree_vector (args);
8557       return build_cplus_new (type, expr, complain);
8558     }
8559
8560   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
8561   p = conversion_obstack_alloc (0);
8562
8563   conv = implicit_conversion (type, TREE_TYPE (expr), expr,
8564                               c_cast_p,
8565                               LOOKUP_NORMAL);
8566   if (!conv || conv->bad_p)
8567     expr = NULL_TREE;
8568   else
8569     expr = convert_like_real (conv, expr, NULL_TREE, 0, 0,
8570                               /*issue_conversion_warnings=*/false,
8571                               c_cast_p,
8572                               complain);
8573
8574   /* Free all the conversions we allocated.  */
8575   obstack_free (&conversion_obstack, p);
8576
8577   return expr;
8578 }
8579
8580 /* DECL is a VAR_DECL whose type is a REFERENCE_TYPE.  The reference
8581    is being bound to a temporary.  Create and return a new VAR_DECL
8582    with the indicated TYPE; this variable will store the value to
8583    which the reference is bound.  */
8584
8585 tree
8586 make_temporary_var_for_ref_to_temp (tree decl, tree type)
8587 {
8588   tree var;
8589
8590   /* Create the variable.  */
8591   var = create_temporary_var (type);
8592
8593   /* Register the variable.  */
8594   if (TREE_STATIC (decl))
8595     {
8596       /* Namespace-scope or local static; give it a mangled name.  */
8597       tree name;
8598
8599       TREE_STATIC (var) = 1;
8600       name = mangle_ref_init_variable (decl);
8601       DECL_NAME (var) = name;
8602       SET_DECL_ASSEMBLER_NAME (var, name);
8603       var = pushdecl_top_level (var);
8604     }
8605   else
8606     /* Create a new cleanup level if necessary.  */
8607     maybe_push_cleanup_level (type);
8608
8609   return var;
8610 }
8611
8612 /* EXPR is the initializer for a variable DECL of reference or
8613    std::initializer_list type.  Create, push and return a new VAR_DECL
8614    for the initializer so that it will live as long as DECL.  Any
8615    cleanup for the new variable is returned through CLEANUP, and the
8616    code to initialize the new variable is returned through INITP.  */
8617
8618 tree
8619 set_up_extended_ref_temp (tree decl, tree expr, tree *cleanup, tree *initp)
8620 {
8621   tree init;
8622   tree type;
8623   tree var;
8624
8625   /* Create the temporary variable.  */
8626   type = TREE_TYPE (expr);
8627   var = make_temporary_var_for_ref_to_temp (decl, type);
8628   layout_decl (var, 0);
8629   /* If the rvalue is the result of a function call it will be
8630      a TARGET_EXPR.  If it is some other construct (such as a
8631      member access expression where the underlying object is
8632      itself the result of a function call), turn it into a
8633      TARGET_EXPR here.  It is important that EXPR be a
8634      TARGET_EXPR below since otherwise the INIT_EXPR will
8635      attempt to make a bitwise copy of EXPR to initialize
8636      VAR.  */
8637   if (TREE_CODE (expr) != TARGET_EXPR)
8638     expr = get_target_expr (expr);
8639
8640   /* If the initializer is constant, put it in DECL_INITIAL so we get
8641      static initialization and use in constant expressions.  */
8642   init = maybe_constant_init (expr);
8643   if (TREE_CONSTANT (init))
8644     {
8645       if (literal_type_p (type) && CP_TYPE_CONST_NON_VOLATILE_P (type))
8646         {
8647           /* 5.19 says that a constant expression can include an
8648              lvalue-rvalue conversion applied to "a glvalue of literal type
8649              that refers to a non-volatile temporary object initialized
8650              with a constant expression".  Rather than try to communicate
8651              that this VAR_DECL is a temporary, just mark it constexpr.
8652
8653              Currently this is only useful for initializer_list temporaries,
8654              since reference vars can't appear in constant expressions.  */
8655           DECL_DECLARED_CONSTEXPR_P (var) = true;
8656           DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (var) = true;
8657           TREE_CONSTANT (var) = true;
8658         }
8659       DECL_INITIAL (var) = init;
8660       init = NULL_TREE;
8661     }
8662   else
8663     /* Create the INIT_EXPR that will initialize the temporary
8664        variable.  */
8665     init = build2 (INIT_EXPR, type, var, expr);
8666   if (at_function_scope_p ())
8667     {
8668       add_decl_expr (var);
8669
8670       if (TREE_STATIC (var))
8671         init = add_stmt_to_compound (init, register_dtor_fn (var));
8672       else
8673         *cleanup = cxx_maybe_build_cleanup (var, tf_warning_or_error);
8674
8675       /* We must be careful to destroy the temporary only
8676          after its initialization has taken place.  If the
8677          initialization throws an exception, then the
8678          destructor should not be run.  We cannot simply
8679          transform INIT into something like:
8680
8681          (INIT, ({ CLEANUP_STMT; }))
8682
8683          because emit_local_var always treats the
8684          initializer as a full-expression.  Thus, the
8685          destructor would run too early; it would run at the
8686          end of initializing the reference variable, rather
8687          than at the end of the block enclosing the
8688          reference variable.
8689
8690          The solution is to pass back a cleanup expression
8691          which the caller is responsible for attaching to
8692          the statement tree.  */
8693     }
8694   else
8695     {
8696       rest_of_decl_compilation (var, /*toplev=*/1, at_eof);
8697       if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
8698         static_aggregates = tree_cons (NULL_TREE, var,
8699                                        static_aggregates);
8700     }
8701
8702   *initp = init;
8703   return var;
8704 }
8705
8706 /* Convert EXPR to the indicated reference TYPE, in a way suitable for
8707    initializing a variable of that TYPE.  If DECL is non-NULL, it is
8708    the VAR_DECL being initialized with the EXPR.  (In that case, the
8709    type of DECL will be TYPE.)  If DECL is non-NULL, then CLEANUP must
8710    also be non-NULL, and with *CLEANUP initialized to NULL.  Upon
8711    return, if *CLEANUP is no longer NULL, it will be an expression
8712    that should be pushed as a cleanup after the returned expression
8713    is used to initialize DECL.
8714
8715    Return the converted expression.  */
8716
8717 tree
8718 initialize_reference (tree type, tree expr, tree decl, tree *cleanup,
8719                       tsubst_flags_t complain)
8720 {
8721   conversion *conv;
8722   void *p;
8723
8724   if (type == error_mark_node || error_operand_p (expr))
8725     return error_mark_node;
8726
8727   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
8728   p = conversion_obstack_alloc (0);
8729
8730   conv = reference_binding (type, TREE_TYPE (expr), expr, /*c_cast_p=*/false,
8731                             LOOKUP_NORMAL);
8732   if (!conv || conv->bad_p)
8733     {
8734       if (complain & tf_error)
8735         {
8736           if (!CP_TYPE_CONST_P (TREE_TYPE (type))
8737               && !TYPE_REF_IS_RVALUE (type)
8738               && !real_lvalue_p (expr))
8739             error ("invalid initialization of non-const reference of "
8740                    "type %qT from an rvalue of type %qT",
8741                    type, TREE_TYPE (expr));
8742           else
8743             error ("invalid initialization of reference of type "
8744                    "%qT from expression of type %qT", type,
8745                    TREE_TYPE (expr));
8746         }
8747       return error_mark_node;
8748     }
8749
8750   /* If DECL is non-NULL, then this special rule applies:
8751
8752        [class.temporary]
8753
8754        The temporary to which the reference is bound or the temporary
8755        that is the complete object to which the reference is bound
8756        persists for the lifetime of the reference.
8757
8758        The temporaries created during the evaluation of the expression
8759        initializing the reference, except the temporary to which the
8760        reference is bound, are destroyed at the end of the
8761        full-expression in which they are created.
8762
8763      In that case, we store the converted expression into a new
8764      VAR_DECL in a new scope.
8765
8766      However, we want to be careful not to create temporaries when
8767      they are not required.  For example, given:
8768
8769        struct B {};
8770        struct D : public B {};
8771        D f();
8772        const B& b = f();
8773
8774      there is no need to copy the return value from "f"; we can just
8775      extend its lifetime.  Similarly, given:
8776
8777        struct S {};
8778        struct T { operator S(); };
8779        T t;
8780        const S& s = t;
8781
8782     we can extend the lifetime of the return value of the conversion
8783     operator.  */
8784   gcc_assert (conv->kind == ck_ref_bind);
8785   if (decl)
8786     {
8787       tree var;
8788       tree base_conv_type;
8789
8790       gcc_assert (complain == tf_warning_or_error);
8791
8792       /* Skip over the REF_BIND.  */
8793       conv = conv->u.next;
8794       /* If the next conversion is a BASE_CONV, skip that too -- but
8795          remember that the conversion was required.  */
8796       if (conv->kind == ck_base)
8797         {
8798           base_conv_type = conv->type;
8799           conv = conv->u.next;
8800         }
8801       else
8802         base_conv_type = NULL_TREE;
8803       /* Perform the remainder of the conversion.  */
8804       expr = convert_like_real (conv, expr,
8805                                 /*fn=*/NULL_TREE, /*argnum=*/0,
8806                                 /*inner=*/-1,
8807                                 /*issue_conversion_warnings=*/true,
8808                                 /*c_cast_p=*/false,
8809                                 complain);
8810       if (error_operand_p (expr))
8811         expr = error_mark_node;
8812       else
8813         {
8814           if (!lvalue_or_rvalue_with_address_p (expr))
8815             {
8816               tree init;
8817               var = set_up_extended_ref_temp (decl, expr, cleanup, &init);
8818               /* Use its address to initialize the reference variable.  */
8819               expr = build_address (var);
8820               if (base_conv_type)
8821                 expr = convert_to_base (expr,
8822                                         build_pointer_type (base_conv_type),
8823                                         /*check_access=*/true,
8824                                         /*nonnull=*/true, complain);
8825               if (init)
8826                 expr = build2 (COMPOUND_EXPR, TREE_TYPE (expr), init, expr);
8827             }
8828           else
8829             /* Take the address of EXPR.  */
8830             expr = cp_build_addr_expr (expr, complain);
8831           /* If a BASE_CONV was required, perform it now.  */
8832           if (base_conv_type)
8833             expr = (perform_implicit_conversion
8834                     (build_pointer_type (base_conv_type), expr,
8835                      complain));
8836           expr = build_nop (type, expr);
8837           if (DECL_DECLARED_CONSTEXPR_P (decl))
8838             {
8839               expr = cxx_constant_value (expr);
8840               DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl)
8841                 = reduced_constant_expression_p (expr);
8842             }
8843         }
8844     }
8845   else
8846     /* Perform the conversion.  */
8847     expr = convert_like (conv, expr, complain);
8848
8849   /* Free all the conversions we allocated.  */
8850   obstack_free (&conversion_obstack, p);
8851
8852   return expr;
8853 }
8854
8855 /* Returns true iff TYPE is some variant of std::initializer_list.  */
8856
8857 bool
8858 is_std_init_list (tree type)
8859 {
8860   /* Look through typedefs.  */
8861   if (!TYPE_P (type))
8862     return false;
8863   type = TYPE_MAIN_VARIANT (type);
8864   return (CLASS_TYPE_P (type)
8865           && CP_TYPE_CONTEXT (type) == std_node
8866           && strcmp (TYPE_NAME_STRING (type), "initializer_list") == 0);
8867 }
8868
8869 /* Returns true iff DECL is a list constructor: i.e. a constructor which
8870    will accept an argument list of a single std::initializer_list<T>.  */
8871
8872 bool
8873 is_list_ctor (tree decl)
8874 {
8875   tree args = FUNCTION_FIRST_USER_PARMTYPE (decl);
8876   tree arg;
8877
8878   if (!args || args == void_list_node)
8879     return false;
8880
8881   arg = non_reference (TREE_VALUE (args));
8882   if (!is_std_init_list (arg))
8883     return false;
8884
8885   args = TREE_CHAIN (args);
8886
8887   if (args && args != void_list_node && !TREE_PURPOSE (args))
8888     /* There are more non-defaulted parms.  */
8889     return false;
8890
8891   return true;
8892 }
8893
8894 #include "gt-cp-call.h"