OSDN Git Service

2011-08-10 Richard Guenther <rguenther@suse.de>
[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 && at_function_scope_p () && 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           tree arg0, arg1, arg2, t;
6772
6773           arg2 = TYPE_SIZE_UNIT (as_base);
6774           arg1 = arg;
6775           arg0 = cp_build_addr_expr (to, complain);
6776
6777           t = implicit_built_in_decls[BUILT_IN_MEMCPY];
6778           t = build_call_n (t, 3, arg0, arg1, arg2);
6779
6780           t = convert (TREE_TYPE (arg0), t);
6781           val = cp_build_indirect_ref (t, RO_NULL, complain);
6782           TREE_NO_WARNING (val) = 1;
6783         }
6784
6785       return val;
6786     }
6787   else if (DECL_DESTRUCTOR_P (fn)
6788            && trivial_fn_p (fn)
6789            && !DECL_DELETED_FN (fn))
6790     return fold_convert (void_type_node, argarray[0]);
6791   /* FIXME handle trivial default constructor, too.  */
6792
6793   if (!already_used)
6794     mark_used (fn);
6795
6796   if (DECL_VINDEX (fn) && (flags & LOOKUP_NONVIRTUAL) == 0)
6797     {
6798       tree t;
6799       tree binfo = lookup_base (TREE_TYPE (TREE_TYPE (argarray[0])),
6800                                 DECL_CONTEXT (fn),
6801                                 ba_any, NULL);
6802       gcc_assert (binfo && binfo != error_mark_node);
6803
6804       /* Warn about deprecated virtual functions now, since we're about
6805          to throw away the decl.  */
6806       if (TREE_DEPRECATED (fn))
6807         warn_deprecated_use (fn, NULL_TREE);
6808
6809       argarray[0] = build_base_path (PLUS_EXPR, argarray[0], binfo, 1);
6810       if (TREE_SIDE_EFFECTS (argarray[0]))
6811         argarray[0] = save_expr (argarray[0]);
6812       t = build_pointer_type (TREE_TYPE (fn));
6813       if (DECL_CONTEXT (fn) && TYPE_JAVA_INTERFACE (DECL_CONTEXT (fn)))
6814         fn = build_java_interface_fn_ref (fn, argarray[0]);
6815       else
6816         fn = build_vfn_ref (argarray[0], DECL_VINDEX (fn));
6817       TREE_TYPE (fn) = t;
6818     }
6819   else
6820     fn = build_addr_func (fn);
6821
6822   return build_cxx_call (fn, nargs, argarray);
6823 }
6824
6825 /* Build and return a call to FN, using NARGS arguments in ARGARRAY.
6826    This function performs no overload resolution, conversion, or other
6827    high-level operations.  */
6828
6829 tree
6830 build_cxx_call (tree fn, int nargs, tree *argarray)
6831 {
6832   tree fndecl;
6833
6834   /* Remember roughly where this call is.  */
6835   location_t loc = EXPR_LOC_OR_HERE (fn);
6836   fn = build_call_a (fn, nargs, argarray);
6837   SET_EXPR_LOCATION (fn, loc);
6838
6839   /* If this call might throw an exception, note that fact.  */
6840   fndecl = get_callee_fndecl (fn);
6841
6842   /* Check that arguments to builtin functions match the expectations.  */
6843   if (fndecl
6844       && DECL_BUILT_IN (fndecl)
6845       && DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_NORMAL
6846       && !check_builtin_function_arguments (fndecl, nargs, argarray))
6847     return error_mark_node;
6848
6849   /* Some built-in function calls will be evaluated at compile-time in
6850      fold ().  */
6851   fn = fold_if_not_in_template (fn);
6852
6853   if (VOID_TYPE_P (TREE_TYPE (fn)))
6854     return fn;
6855
6856   fn = require_complete_type (fn);
6857   if (fn == error_mark_node)
6858     return error_mark_node;
6859
6860   if (MAYBE_CLASS_TYPE_P (TREE_TYPE (fn)))
6861     fn = build_cplus_new (TREE_TYPE (fn), fn, tf_warning_or_error);
6862   return convert_from_reference (fn);
6863 }
6864
6865 static GTY(()) tree java_iface_lookup_fn;
6866
6867 /* Make an expression which yields the address of the Java interface
6868    method FN.  This is achieved by generating a call to libjava's
6869    _Jv_LookupInterfaceMethodIdx().  */
6870
6871 static tree
6872 build_java_interface_fn_ref (tree fn, tree instance)
6873 {
6874   tree lookup_fn, method, idx;
6875   tree klass_ref, iface, iface_ref;
6876   int i;
6877
6878   if (!java_iface_lookup_fn)
6879     {
6880       tree ftype = build_function_type_list (ptr_type_node,
6881                                              ptr_type_node, ptr_type_node,
6882                                              java_int_type_node, NULL_TREE);
6883       java_iface_lookup_fn
6884         = add_builtin_function ("_Jv_LookupInterfaceMethodIdx", ftype,
6885                                 0, NOT_BUILT_IN, NULL, NULL_TREE);
6886     }
6887
6888   /* Look up the pointer to the runtime java.lang.Class object for `instance'.
6889      This is the first entry in the vtable.  */
6890   klass_ref = build_vtbl_ref (cp_build_indirect_ref (instance, RO_NULL, 
6891                                                      tf_warning_or_error),
6892                               integer_zero_node);
6893
6894   /* Get the java.lang.Class pointer for the interface being called.  */
6895   iface = DECL_CONTEXT (fn);
6896   iface_ref = lookup_field (iface, get_identifier ("class$"), 0, false);
6897   if (!iface_ref || TREE_CODE (iface_ref) != VAR_DECL
6898       || DECL_CONTEXT (iface_ref) != iface)
6899     {
6900       error ("could not find class$ field in java interface type %qT",
6901                 iface);
6902       return error_mark_node;
6903     }
6904   iface_ref = build_address (iface_ref);
6905   iface_ref = convert (build_pointer_type (iface), iface_ref);
6906
6907   /* Determine the itable index of FN.  */
6908   i = 1;
6909   for (method = TYPE_METHODS (iface); method; method = DECL_CHAIN (method))
6910     {
6911       if (!DECL_VIRTUAL_P (method))
6912         continue;
6913       if (fn == method)
6914         break;
6915       i++;
6916     }
6917   idx = build_int_cst (NULL_TREE, i);
6918
6919   lookup_fn = build1 (ADDR_EXPR,
6920                       build_pointer_type (TREE_TYPE (java_iface_lookup_fn)),
6921                       java_iface_lookup_fn);
6922   return build_call_nary (ptr_type_node, lookup_fn,
6923                           3, klass_ref, iface_ref, idx);
6924 }
6925
6926 /* Returns the value to use for the in-charge parameter when making a
6927    call to a function with the indicated NAME.
6928
6929    FIXME:Can't we find a neater way to do this mapping?  */
6930
6931 tree
6932 in_charge_arg_for_name (tree name)
6933 {
6934  if (name == base_ctor_identifier
6935       || name == base_dtor_identifier)
6936     return integer_zero_node;
6937   else if (name == complete_ctor_identifier)
6938     return integer_one_node;
6939   else if (name == complete_dtor_identifier)
6940     return integer_two_node;
6941   else if (name == deleting_dtor_identifier)
6942     return integer_three_node;
6943
6944   /* This function should only be called with one of the names listed
6945      above.  */
6946   gcc_unreachable ();
6947   return NULL_TREE;
6948 }
6949
6950 /* Build a call to a constructor, destructor, or an assignment
6951    operator for INSTANCE, an expression with class type.  NAME
6952    indicates the special member function to call; *ARGS are the
6953    arguments.  ARGS may be NULL.  This may change ARGS.  BINFO
6954    indicates the base of INSTANCE that is to be passed as the `this'
6955    parameter to the member function called.
6956
6957    FLAGS are the LOOKUP_* flags to use when processing the call.
6958
6959    If NAME indicates a complete object constructor, INSTANCE may be
6960    NULL_TREE.  In this case, the caller will call build_cplus_new to
6961    store the newly constructed object into a VAR_DECL.  */
6962
6963 tree
6964 build_special_member_call (tree instance, tree name, VEC(tree,gc) **args,
6965                            tree binfo, int flags, tsubst_flags_t complain)
6966 {
6967   tree fns;
6968   /* The type of the subobject to be constructed or destroyed.  */
6969   tree class_type;
6970   VEC(tree,gc) *allocated = NULL;
6971   tree ret;
6972
6973   gcc_assert (name == complete_ctor_identifier
6974               || name == base_ctor_identifier
6975               || name == complete_dtor_identifier
6976               || name == base_dtor_identifier
6977               || name == deleting_dtor_identifier
6978               || name == ansi_assopname (NOP_EXPR));
6979   if (TYPE_P (binfo))
6980     {
6981       /* Resolve the name.  */
6982       if (!complete_type_or_maybe_complain (binfo, NULL_TREE, complain))
6983         return error_mark_node;
6984
6985       binfo = TYPE_BINFO (binfo);
6986     }
6987
6988   gcc_assert (binfo != NULL_TREE);
6989
6990   class_type = BINFO_TYPE (binfo);
6991
6992   /* Handle the special case where INSTANCE is NULL_TREE.  */
6993   if (name == complete_ctor_identifier && !instance)
6994     {
6995       instance = build_int_cst (build_pointer_type (class_type), 0);
6996       instance = build1 (INDIRECT_REF, class_type, instance);
6997     }
6998   else
6999     {
7000       if (name == complete_dtor_identifier
7001           || name == base_dtor_identifier
7002           || name == deleting_dtor_identifier)
7003         gcc_assert (args == NULL || VEC_empty (tree, *args));
7004
7005       /* Convert to the base class, if necessary.  */
7006       if (!same_type_ignoring_top_level_qualifiers_p
7007           (TREE_TYPE (instance), BINFO_TYPE (binfo)))
7008         {
7009           if (name != ansi_assopname (NOP_EXPR))
7010             /* For constructors and destructors, either the base is
7011                non-virtual, or it is virtual but we are doing the
7012                conversion from a constructor or destructor for the
7013                complete object.  In either case, we can convert
7014                statically.  */
7015             instance = convert_to_base_statically (instance, binfo);
7016           else
7017             /* However, for assignment operators, we must convert
7018                dynamically if the base is virtual.  */
7019             instance = build_base_path (PLUS_EXPR, instance,
7020                                         binfo, /*nonnull=*/1);
7021         }
7022     }
7023
7024   gcc_assert (instance != NULL_TREE);
7025
7026   fns = lookup_fnfields (binfo, name, 1);
7027
7028   /* When making a call to a constructor or destructor for a subobject
7029      that uses virtual base classes, pass down a pointer to a VTT for
7030      the subobject.  */
7031   if ((name == base_ctor_identifier
7032        || name == base_dtor_identifier)
7033       && CLASSTYPE_VBASECLASSES (class_type))
7034     {
7035       tree vtt;
7036       tree sub_vtt;
7037
7038       /* If the current function is a complete object constructor
7039          or destructor, then we fetch the VTT directly.
7040          Otherwise, we look it up using the VTT we were given.  */
7041       vtt = DECL_CHAIN (CLASSTYPE_VTABLES (current_class_type));
7042       vtt = decay_conversion (vtt);
7043       vtt = build3 (COND_EXPR, TREE_TYPE (vtt),
7044                     build2 (EQ_EXPR, boolean_type_node,
7045                             current_in_charge_parm, integer_zero_node),
7046                     current_vtt_parm,
7047                     vtt);
7048       gcc_assert (BINFO_SUBVTT_INDEX (binfo));
7049       sub_vtt = fold_build_pointer_plus (vtt, BINFO_SUBVTT_INDEX (binfo));
7050
7051       if (args == NULL)
7052         {
7053           allocated = make_tree_vector ();
7054           args = &allocated;
7055         }
7056
7057       VEC_safe_insert (tree, gc, *args, 0, sub_vtt);
7058     }
7059
7060   ret = build_new_method_call (instance, fns, args,
7061                                TYPE_BINFO (BINFO_TYPE (binfo)),
7062                                flags, /*fn=*/NULL,
7063                                complain);
7064
7065   if (allocated != NULL)
7066     release_tree_vector (allocated);
7067
7068   return ret;
7069 }
7070
7071 /* Return the NAME, as a C string.  The NAME indicates a function that
7072    is a member of TYPE.  *FREE_P is set to true if the caller must
7073    free the memory returned.
7074
7075    Rather than go through all of this, we should simply set the names
7076    of constructors and destructors appropriately, and dispense with
7077    ctor_identifier, dtor_identifier, etc.  */
7078
7079 static char *
7080 name_as_c_string (tree name, tree type, bool *free_p)
7081 {
7082   char *pretty_name;
7083
7084   /* Assume that we will not allocate memory.  */
7085   *free_p = false;
7086   /* Constructors and destructors are special.  */
7087   if (IDENTIFIER_CTOR_OR_DTOR_P (name))
7088     {
7089       pretty_name
7090         = CONST_CAST (char *, identifier_to_locale (IDENTIFIER_POINTER (constructor_name (type))));
7091       /* For a destructor, add the '~'.  */
7092       if (name == complete_dtor_identifier
7093           || name == base_dtor_identifier
7094           || name == deleting_dtor_identifier)
7095         {
7096           pretty_name = concat ("~", pretty_name, NULL);
7097           /* Remember that we need to free the memory allocated.  */
7098           *free_p = true;
7099         }
7100     }
7101   else if (IDENTIFIER_TYPENAME_P (name))
7102     {
7103       pretty_name = concat ("operator ",
7104                             type_as_string_translate (TREE_TYPE (name),
7105                                                       TFF_PLAIN_IDENTIFIER),
7106                             NULL);
7107       /* Remember that we need to free the memory allocated.  */
7108       *free_p = true;
7109     }
7110   else
7111     pretty_name = CONST_CAST (char *, identifier_to_locale (IDENTIFIER_POINTER (name)));
7112
7113   return pretty_name;
7114 }
7115
7116 /* Build a call to "INSTANCE.FN (ARGS)".  If FN_P is non-NULL, it will
7117    be set, upon return, to the function called.  ARGS may be NULL.
7118    This may change ARGS.  */
7119
7120 static tree
7121 build_new_method_call_1 (tree instance, tree fns, VEC(tree,gc) **args,
7122                          tree conversion_path, int flags,
7123                          tree *fn_p, tsubst_flags_t complain)
7124 {
7125   struct z_candidate *candidates = 0, *cand;
7126   tree explicit_targs = NULL_TREE;
7127   tree basetype = NULL_TREE;
7128   tree access_binfo;
7129   tree optype;
7130   tree first_mem_arg = NULL_TREE;
7131   tree instance_ptr;
7132   tree name;
7133   bool skip_first_for_error;
7134   VEC(tree,gc) *user_args;
7135   tree call;
7136   tree fn;
7137   int template_only = 0;
7138   bool any_viable_p;
7139   tree orig_instance;
7140   tree orig_fns;
7141   VEC(tree,gc) *orig_args = NULL;
7142   void *p;
7143
7144   gcc_assert (instance != NULL_TREE);
7145
7146   /* We don't know what function we're going to call, yet.  */
7147   if (fn_p)
7148     *fn_p = NULL_TREE;
7149
7150   if (error_operand_p (instance)
7151       || !fns || error_operand_p (fns))
7152     return error_mark_node;
7153
7154   if (!BASELINK_P (fns))
7155     {
7156       if (complain & tf_error)
7157         error ("call to non-function %qD", fns);
7158       return error_mark_node;
7159     }
7160
7161   orig_instance = instance;
7162   orig_fns = fns;
7163
7164   /* Dismantle the baselink to collect all the information we need.  */
7165   if (!conversion_path)
7166     conversion_path = BASELINK_BINFO (fns);
7167   access_binfo = BASELINK_ACCESS_BINFO (fns);
7168   optype = BASELINK_OPTYPE (fns);
7169   fns = BASELINK_FUNCTIONS (fns);
7170   if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
7171     {
7172       explicit_targs = TREE_OPERAND (fns, 1);
7173       fns = TREE_OPERAND (fns, 0);
7174       template_only = 1;
7175     }
7176   gcc_assert (TREE_CODE (fns) == FUNCTION_DECL
7177               || TREE_CODE (fns) == TEMPLATE_DECL
7178               || TREE_CODE (fns) == OVERLOAD);
7179   fn = get_first_fn (fns);
7180   name = DECL_NAME (fn);
7181
7182   basetype = TYPE_MAIN_VARIANT (TREE_TYPE (instance));
7183   gcc_assert (CLASS_TYPE_P (basetype));
7184
7185   if (processing_template_decl)
7186     {
7187       orig_args = args == NULL ? NULL : make_tree_vector_copy (*args);
7188       instance = build_non_dependent_expr (instance);
7189       if (args != NULL)
7190         make_args_non_dependent (*args);
7191     }
7192
7193   user_args = args == NULL ? NULL : *args;
7194   /* Under DR 147 A::A() is an invalid constructor call,
7195      not a functional cast.  */
7196   if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (fn))
7197     {
7198       if (! (complain & tf_error))
7199         return error_mark_node;
7200
7201       permerror (input_location,
7202                  "cannot call constructor %<%T::%D%> directly",
7203                  basetype, name);
7204       permerror (input_location, "  for a function-style cast, remove the "
7205                  "redundant %<::%D%>", name);
7206       call = build_functional_cast (basetype, build_tree_list_vec (user_args),
7207                                     complain);
7208       return call;
7209     }
7210
7211   /* Figure out whether to skip the first argument for the error
7212      message we will display to users if an error occurs.  We don't
7213      want to display any compiler-generated arguments.  The "this"
7214      pointer hasn't been added yet.  However, we must remove the VTT
7215      pointer if this is a call to a base-class constructor or
7216      destructor.  */
7217   skip_first_for_error = false;
7218   if (IDENTIFIER_CTOR_OR_DTOR_P (name))
7219     {
7220       /* Callers should explicitly indicate whether they want to construct
7221          the complete object or just the part without virtual bases.  */
7222       gcc_assert (name != ctor_identifier);
7223       /* Similarly for destructors.  */
7224       gcc_assert (name != dtor_identifier);
7225       /* Remove the VTT pointer, if present.  */
7226       if ((name == base_ctor_identifier || name == base_dtor_identifier)
7227           && CLASSTYPE_VBASECLASSES (basetype))
7228         skip_first_for_error = true;
7229     }
7230
7231   /* Process the argument list.  */
7232   if (args != NULL && *args != NULL)
7233     {
7234       *args = resolve_args (*args, complain);
7235       if (*args == NULL)
7236         return error_mark_node;
7237     }
7238
7239   instance_ptr = build_this (instance);
7240
7241   /* It's OK to call destructors and constructors on cv-qualified objects.
7242      Therefore, convert the INSTANCE_PTR to the unqualified type, if
7243      necessary.  */
7244   if (DECL_DESTRUCTOR_P (fn)
7245       || DECL_CONSTRUCTOR_P (fn))
7246     {
7247       tree type = build_pointer_type (basetype);
7248       if (!same_type_p (type, TREE_TYPE (instance_ptr)))
7249         instance_ptr = build_nop (type, instance_ptr);
7250     }
7251   if (DECL_DESTRUCTOR_P (fn))
7252     name = complete_dtor_identifier;
7253
7254   first_mem_arg = instance_ptr;
7255
7256   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
7257   p = conversion_obstack_alloc (0);
7258
7259   /* If CONSTRUCTOR_IS_DIRECT_INIT is set, this was a T{ } form
7260      initializer, not T({ }).  */
7261   if (DECL_CONSTRUCTOR_P (fn) && args != NULL && !VEC_empty (tree, *args)
7262       && BRACE_ENCLOSED_INITIALIZER_P (VEC_index (tree, *args, 0))
7263       && CONSTRUCTOR_IS_DIRECT_INIT (VEC_index (tree, *args, 0)))
7264     {
7265       tree init_list = VEC_index (tree, *args, 0);
7266
7267       gcc_assert (VEC_length (tree, *args) == 1
7268                   && !(flags & LOOKUP_ONLYCONVERTING));
7269
7270       /* If the initializer list has no elements and T is a class type with
7271          a default constructor, the object is value-initialized.  Handle
7272          this here so we don't need to handle it wherever we use
7273          build_special_member_call.  */
7274       if (CONSTRUCTOR_NELTS (init_list) == 0
7275           && TYPE_HAS_DEFAULT_CONSTRUCTOR (basetype)
7276           && !processing_template_decl)
7277         {
7278           tree ob, init = build_value_init (basetype, complain);
7279           if (integer_zerop (instance_ptr))
7280             return get_target_expr_sfinae (init, complain);
7281           ob = build_fold_indirect_ref (instance_ptr);
7282           init = build2 (INIT_EXPR, TREE_TYPE (ob), ob, init);
7283           TREE_SIDE_EFFECTS (init) = true;
7284           return init;
7285         }
7286
7287       add_list_candidates (fns, first_mem_arg, init_list,
7288                            basetype, explicit_targs, template_only,
7289                            conversion_path, access_binfo, flags, &candidates);
7290     }
7291   else
7292     {
7293       add_candidates (fns, first_mem_arg, user_args, optype,
7294                       explicit_targs, template_only, conversion_path,
7295                       access_binfo, flags, &candidates);
7296     }
7297   any_viable_p = false;
7298   candidates = splice_viable (candidates, pedantic, &any_viable_p);
7299
7300   if (!any_viable_p)
7301     {
7302       if (complain & tf_error)
7303         {
7304           if (!COMPLETE_OR_OPEN_TYPE_P (basetype))
7305             cxx_incomplete_type_error (instance_ptr, basetype);
7306           else if (optype)
7307             error ("no matching function for call to %<%T::operator %T(%A)%#V%>",
7308                    basetype, optype, build_tree_list_vec (user_args),
7309                    TREE_TYPE (TREE_TYPE (instance_ptr)));
7310           else
7311             {
7312               char *pretty_name;
7313               bool free_p;
7314               tree arglist;
7315
7316               pretty_name = name_as_c_string (name, basetype, &free_p);
7317               arglist = build_tree_list_vec (user_args);
7318               if (skip_first_for_error)
7319                 arglist = TREE_CHAIN (arglist);
7320               error ("no matching function for call to %<%T::%s(%A)%#V%>",
7321                      basetype, pretty_name, arglist,
7322                      TREE_TYPE (TREE_TYPE (instance_ptr)));
7323               if (free_p)
7324                 free (pretty_name);
7325             }
7326           print_z_candidates (location_of (name), candidates);
7327         }
7328       call = error_mark_node;
7329     }
7330   else
7331     {
7332       cand = tourney (candidates);
7333       if (cand == 0)
7334         {
7335           char *pretty_name;
7336           bool free_p;
7337           tree arglist;
7338
7339           if (complain & tf_error)
7340             {
7341               pretty_name = name_as_c_string (name, basetype, &free_p);
7342               arglist = build_tree_list_vec (user_args);
7343               if (skip_first_for_error)
7344                 arglist = TREE_CHAIN (arglist);
7345               error ("call of overloaded %<%s(%A)%> is ambiguous", pretty_name,
7346                      arglist);
7347               print_z_candidates (location_of (name), candidates);
7348               if (free_p)
7349                 free (pretty_name);
7350             }
7351           call = error_mark_node;
7352         }
7353       else
7354         {
7355           fn = cand->fn;
7356
7357           if (!(flags & LOOKUP_NONVIRTUAL)
7358               && DECL_PURE_VIRTUAL_P (fn)
7359               && instance == current_class_ref
7360               && (DECL_CONSTRUCTOR_P (current_function_decl)
7361                   || DECL_DESTRUCTOR_P (current_function_decl))
7362               && (complain & tf_warning))
7363             /* This is not an error, it is runtime undefined
7364                behavior.  */
7365             warning (0, (DECL_CONSTRUCTOR_P (current_function_decl) ?
7366                       "pure virtual %q#D called from constructor"
7367                       : "pure virtual %q#D called from destructor"),
7368                      fn);
7369
7370           if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE
7371               && is_dummy_object (instance_ptr))
7372             {
7373               if (complain & tf_error)
7374                 error ("cannot call member function %qD without object",
7375                        fn);
7376               call = error_mark_node;
7377             }
7378           else
7379             {
7380               if (DECL_VINDEX (fn) && ! (flags & LOOKUP_NONVIRTUAL)
7381                   && resolves_to_fixed_type_p (instance, 0))
7382                 flags |= LOOKUP_NONVIRTUAL;
7383               if (explicit_targs)
7384                 flags |= LOOKUP_EXPLICIT_TMPL_ARGS;
7385               /* Now we know what function is being called.  */
7386               if (fn_p)
7387                 *fn_p = fn;
7388               /* Build the actual CALL_EXPR.  */
7389               call = build_over_call (cand, flags, complain);
7390               /* In an expression of the form `a->f()' where `f' turns
7391                  out to be a static member function, `a' is
7392                  none-the-less evaluated.  */
7393               if (TREE_CODE (TREE_TYPE (fn)) != METHOD_TYPE
7394                   && !is_dummy_object (instance_ptr)
7395                   && TREE_SIDE_EFFECTS (instance_ptr))
7396                 call = build2 (COMPOUND_EXPR, TREE_TYPE (call),
7397                                instance_ptr, call);
7398               else if (call != error_mark_node
7399                        && DECL_DESTRUCTOR_P (cand->fn)
7400                        && !VOID_TYPE_P (TREE_TYPE (call)))
7401                 /* An explicit call of the form "x->~X()" has type
7402                    "void".  However, on platforms where destructors
7403                    return "this" (i.e., those where
7404                    targetm.cxx.cdtor_returns_this is true), such calls
7405                    will appear to have a return value of pointer type
7406                    to the low-level call machinery.  We do not want to
7407                    change the low-level machinery, since we want to be
7408                    able to optimize "delete f()" on such platforms as
7409                    "operator delete(~X(f()))" (rather than generating
7410                    "t = f(), ~X(t), operator delete (t)").  */
7411                 call = build_nop (void_type_node, call);
7412             }
7413         }
7414     }
7415
7416   if (processing_template_decl && call != error_mark_node)
7417     {
7418       bool cast_to_void = false;
7419
7420       if (TREE_CODE (call) == COMPOUND_EXPR)
7421         call = TREE_OPERAND (call, 1);
7422       else if (TREE_CODE (call) == NOP_EXPR)
7423         {
7424           cast_to_void = true;
7425           call = TREE_OPERAND (call, 0);
7426         }
7427       if (TREE_CODE (call) == INDIRECT_REF)
7428         call = TREE_OPERAND (call, 0);
7429       call = (build_min_non_dep_call_vec
7430               (call,
7431                build_min (COMPONENT_REF, TREE_TYPE (CALL_EXPR_FN (call)),
7432                           orig_instance, orig_fns, NULL_TREE),
7433                orig_args));
7434       call = convert_from_reference (call);
7435       if (cast_to_void)
7436         call = build_nop (void_type_node, call);
7437     }
7438
7439  /* Free all the conversions we allocated.  */
7440   obstack_free (&conversion_obstack, p);
7441
7442   if (orig_args != NULL)
7443     release_tree_vector (orig_args);
7444
7445   return call;
7446 }
7447
7448 /* Wrapper for above.  */
7449
7450 tree
7451 build_new_method_call (tree instance, tree fns, VEC(tree,gc) **args,
7452                        tree conversion_path, int flags,
7453                        tree *fn_p, tsubst_flags_t complain)
7454 {
7455   tree ret;
7456   bool subtime = timevar_cond_start (TV_OVERLOAD);
7457   ret = build_new_method_call_1 (instance, fns, args, conversion_path, flags,
7458                                  fn_p, complain);
7459   timevar_cond_stop (TV_OVERLOAD, subtime);
7460   return ret;
7461 }
7462
7463 /* Returns true iff standard conversion sequence ICS1 is a proper
7464    subsequence of ICS2.  */
7465
7466 static bool
7467 is_subseq (conversion *ics1, conversion *ics2)
7468 {
7469   /* We can assume that a conversion of the same code
7470      between the same types indicates a subsequence since we only get
7471      here if the types we are converting from are the same.  */
7472
7473   while (ics1->kind == ck_rvalue
7474          || ics1->kind == ck_lvalue)
7475     ics1 = ics1->u.next;
7476
7477   while (1)
7478     {
7479       while (ics2->kind == ck_rvalue
7480              || ics2->kind == ck_lvalue)
7481         ics2 = ics2->u.next;
7482
7483       if (ics2->kind == ck_user
7484           || ics2->kind == ck_ambig
7485           || ics2->kind == ck_aggr
7486           || ics2->kind == ck_list
7487           || ics2->kind == ck_identity)
7488         /* At this point, ICS1 cannot be a proper subsequence of
7489            ICS2.  We can get a USER_CONV when we are comparing the
7490            second standard conversion sequence of two user conversion
7491            sequences.  */
7492         return false;
7493
7494       ics2 = ics2->u.next;
7495
7496       if (ics2->kind == ics1->kind
7497           && same_type_p (ics2->type, ics1->type)
7498           && same_type_p (ics2->u.next->type,
7499                           ics1->u.next->type))
7500         return true;
7501     }
7502 }
7503
7504 /* Returns nonzero iff DERIVED is derived from BASE.  The inputs may
7505    be any _TYPE nodes.  */
7506
7507 bool
7508 is_properly_derived_from (tree derived, tree base)
7509 {
7510   if (!CLASS_TYPE_P (derived) || !CLASS_TYPE_P (base))
7511     return false;
7512
7513   /* We only allow proper derivation here.  The DERIVED_FROM_P macro
7514      considers every class derived from itself.  */
7515   return (!same_type_ignoring_top_level_qualifiers_p (derived, base)
7516           && DERIVED_FROM_P (base, derived));
7517 }
7518
7519 /* We build the ICS for an implicit object parameter as a pointer
7520    conversion sequence.  However, such a sequence should be compared
7521    as if it were a reference conversion sequence.  If ICS is the
7522    implicit conversion sequence for an implicit object parameter,
7523    modify it accordingly.  */
7524
7525 static void
7526 maybe_handle_implicit_object (conversion **ics)
7527 {
7528   if ((*ics)->this_p)
7529     {
7530       /* [over.match.funcs]
7531
7532          For non-static member functions, the type of the
7533          implicit object parameter is "reference to cv X"
7534          where X is the class of which the function is a
7535          member and cv is the cv-qualification on the member
7536          function declaration.  */
7537       conversion *t = *ics;
7538       tree reference_type;
7539
7540       /* The `this' parameter is a pointer to a class type.  Make the
7541          implicit conversion talk about a reference to that same class
7542          type.  */
7543       reference_type = TREE_TYPE (t->type);
7544       reference_type = build_reference_type (reference_type);
7545
7546       if (t->kind == ck_qual)
7547         t = t->u.next;
7548       if (t->kind == ck_ptr)
7549         t = t->u.next;
7550       t = build_identity_conv (TREE_TYPE (t->type), NULL_TREE);
7551       t = direct_reference_binding (reference_type, t);
7552       t->this_p = 1;
7553       t->rvaluedness_matches_p = 0;
7554       *ics = t;
7555     }
7556 }
7557
7558 /* If *ICS is a REF_BIND set *ICS to the remainder of the conversion,
7559    and return the initial reference binding conversion. Otherwise,
7560    leave *ICS unchanged and return NULL.  */
7561
7562 static conversion *
7563 maybe_handle_ref_bind (conversion **ics)
7564 {
7565   if ((*ics)->kind == ck_ref_bind)
7566     {
7567       conversion *old_ics = *ics;
7568       *ics = old_ics->u.next;
7569       (*ics)->user_conv_p = old_ics->user_conv_p;
7570       return old_ics;
7571     }
7572
7573   return NULL;
7574 }
7575
7576 /* Compare two implicit conversion sequences according to the rules set out in
7577    [over.ics.rank].  Return values:
7578
7579       1: ics1 is better than ics2
7580      -1: ics2 is better than ics1
7581       0: ics1 and ics2 are indistinguishable */
7582
7583 static int
7584 compare_ics (conversion *ics1, conversion *ics2)
7585 {
7586   tree from_type1;
7587   tree from_type2;
7588   tree to_type1;
7589   tree to_type2;
7590   tree deref_from_type1 = NULL_TREE;
7591   tree deref_from_type2 = NULL_TREE;
7592   tree deref_to_type1 = NULL_TREE;
7593   tree deref_to_type2 = NULL_TREE;
7594   conversion_rank rank1, rank2;
7595
7596   /* REF_BINDING is nonzero if the result of the conversion sequence
7597      is a reference type.   In that case REF_CONV is the reference
7598      binding conversion. */
7599   conversion *ref_conv1;
7600   conversion *ref_conv2;
7601
7602   /* Handle implicit object parameters.  */
7603   maybe_handle_implicit_object (&ics1);
7604   maybe_handle_implicit_object (&ics2);
7605
7606   /* Handle reference parameters.  */
7607   ref_conv1 = maybe_handle_ref_bind (&ics1);
7608   ref_conv2 = maybe_handle_ref_bind (&ics2);
7609
7610   /* List-initialization sequence L1 is a better conversion sequence than
7611      list-initialization sequence L2 if L1 converts to
7612      std::initializer_list<X> for some X and L2 does not.  */
7613   if (ics1->kind == ck_list && ics2->kind != ck_list)
7614     return 1;
7615   if (ics2->kind == ck_list && ics1->kind != ck_list)
7616     return -1;
7617
7618   /* [over.ics.rank]
7619
7620      When  comparing  the  basic forms of implicit conversion sequences (as
7621      defined in _over.best.ics_)
7622
7623      --a standard conversion sequence (_over.ics.scs_) is a better
7624        conversion sequence than a user-defined conversion sequence
7625        or an ellipsis conversion sequence, and
7626
7627      --a user-defined conversion sequence (_over.ics.user_) is a
7628        better conversion sequence than an ellipsis conversion sequence
7629        (_over.ics.ellipsis_).  */
7630   rank1 = CONVERSION_RANK (ics1);
7631   rank2 = CONVERSION_RANK (ics2);
7632
7633   if (rank1 > rank2)
7634     return -1;
7635   else if (rank1 < rank2)
7636     return 1;
7637
7638   if (rank1 == cr_bad)
7639     {
7640       /* Both ICS are bad.  We try to make a decision based on what would
7641          have happened if they'd been good.  This is not an extension,
7642          we'll still give an error when we build up the call; this just
7643          helps us give a more helpful error message.  */
7644       rank1 = BAD_CONVERSION_RANK (ics1);
7645       rank2 = BAD_CONVERSION_RANK (ics2);
7646
7647       if (rank1 > rank2)
7648         return -1;
7649       else if (rank1 < rank2)
7650         return 1;
7651
7652       /* We couldn't make up our minds; try to figure it out below.  */
7653     }
7654
7655   if (ics1->ellipsis_p)
7656     /* Both conversions are ellipsis conversions.  */
7657     return 0;
7658
7659   /* User-defined  conversion sequence U1 is a better conversion sequence
7660      than another user-defined conversion sequence U2 if they contain the
7661      same user-defined conversion operator or constructor and if the sec-
7662      ond standard conversion sequence of U1 is  better  than  the  second
7663      standard conversion sequence of U2.  */
7664
7665   /* Handle list-conversion with the same code even though it isn't always
7666      ranked as a user-defined conversion and it doesn't have a second
7667      standard conversion sequence; it will still have the desired effect.
7668      Specifically, we need to do the reference binding comparison at the
7669      end of this function.  */
7670
7671   if (ics1->user_conv_p || ics1->kind == ck_list)
7672     {
7673       conversion *t1;
7674       conversion *t2;
7675
7676       for (t1 = ics1; t1->kind != ck_user; t1 = t1->u.next)
7677         if (t1->kind == ck_ambig || t1->kind == ck_aggr
7678             || t1->kind == ck_list)
7679           break;
7680       for (t2 = ics2; t2->kind != ck_user; t2 = t2->u.next)
7681         if (t2->kind == ck_ambig || t2->kind == ck_aggr
7682             || t2->kind == ck_list)
7683           break;
7684
7685       if (t1->kind != t2->kind)
7686         return 0;
7687       else if (t1->kind == ck_user)
7688         {
7689           if (t1->cand->fn != t2->cand->fn)
7690             return 0;
7691         }
7692       else
7693         {
7694           /* For ambiguous or aggregate conversions, use the target type as
7695              a proxy for the conversion function.  */
7696           if (!same_type_ignoring_top_level_qualifiers_p (t1->type, t2->type))
7697             return 0;
7698         }
7699
7700       /* We can just fall through here, after setting up
7701          FROM_TYPE1 and FROM_TYPE2.  */
7702       from_type1 = t1->type;
7703       from_type2 = t2->type;
7704     }
7705   else
7706     {
7707       conversion *t1;
7708       conversion *t2;
7709
7710       /* We're dealing with two standard conversion sequences.
7711
7712          [over.ics.rank]
7713
7714          Standard conversion sequence S1 is a better conversion
7715          sequence than standard conversion sequence S2 if
7716
7717          --S1 is a proper subsequence of S2 (comparing the conversion
7718            sequences in the canonical form defined by _over.ics.scs_,
7719            excluding any Lvalue Transformation; the identity
7720            conversion sequence is considered to be a subsequence of
7721            any non-identity conversion sequence */
7722
7723       t1 = ics1;
7724       while (t1->kind != ck_identity)
7725         t1 = t1->u.next;
7726       from_type1 = t1->type;
7727
7728       t2 = ics2;
7729       while (t2->kind != ck_identity)
7730         t2 = t2->u.next;
7731       from_type2 = t2->type;
7732     }
7733
7734   /* One sequence can only be a subsequence of the other if they start with
7735      the same type.  They can start with different types when comparing the
7736      second standard conversion sequence in two user-defined conversion
7737      sequences.  */
7738   if (same_type_p (from_type1, from_type2))
7739     {
7740       if (is_subseq (ics1, ics2))
7741         return 1;
7742       if (is_subseq (ics2, ics1))
7743         return -1;
7744     }
7745
7746   /* [over.ics.rank]
7747
7748      Or, if not that,
7749
7750      --the rank of S1 is better than the rank of S2 (by the rules
7751        defined below):
7752
7753     Standard conversion sequences are ordered by their ranks: an Exact
7754     Match is a better conversion than a Promotion, which is a better
7755     conversion than a Conversion.
7756
7757     Two conversion sequences with the same rank are indistinguishable
7758     unless one of the following rules applies:
7759
7760     --A conversion that does not a convert a pointer, pointer to member,
7761       or std::nullptr_t to bool is better than one that does.
7762
7763     The ICS_STD_RANK automatically handles the pointer-to-bool rule,
7764     so that we do not have to check it explicitly.  */
7765   if (ics1->rank < ics2->rank)
7766     return 1;
7767   else if (ics2->rank < ics1->rank)
7768     return -1;
7769
7770   to_type1 = ics1->type;
7771   to_type2 = ics2->type;
7772
7773   /* A conversion from scalar arithmetic type to complex is worse than a
7774      conversion between scalar arithmetic types.  */
7775   if (same_type_p (from_type1, from_type2)
7776       && ARITHMETIC_TYPE_P (from_type1)
7777       && ARITHMETIC_TYPE_P (to_type1)
7778       && ARITHMETIC_TYPE_P (to_type2)
7779       && ((TREE_CODE (to_type1) == COMPLEX_TYPE)
7780           != (TREE_CODE (to_type2) == COMPLEX_TYPE)))
7781     {
7782       if (TREE_CODE (to_type1) == COMPLEX_TYPE)
7783         return -1;
7784       else
7785         return 1;
7786     }
7787
7788   if (TYPE_PTR_P (from_type1)
7789       && TYPE_PTR_P (from_type2)
7790       && TYPE_PTR_P (to_type1)
7791       && TYPE_PTR_P (to_type2))
7792     {
7793       deref_from_type1 = TREE_TYPE (from_type1);
7794       deref_from_type2 = TREE_TYPE (from_type2);
7795       deref_to_type1 = TREE_TYPE (to_type1);
7796       deref_to_type2 = TREE_TYPE (to_type2);
7797     }
7798   /* The rules for pointers to members A::* are just like the rules
7799      for pointers A*, except opposite: if B is derived from A then
7800      A::* converts to B::*, not vice versa.  For that reason, we
7801      switch the from_ and to_ variables here.  */
7802   else if ((TYPE_PTRMEM_P (from_type1) && TYPE_PTRMEM_P (from_type2)
7803             && TYPE_PTRMEM_P (to_type1) && TYPE_PTRMEM_P (to_type2))
7804            || (TYPE_PTRMEMFUNC_P (from_type1)
7805                && TYPE_PTRMEMFUNC_P (from_type2)
7806                && TYPE_PTRMEMFUNC_P (to_type1)
7807                && TYPE_PTRMEMFUNC_P (to_type2)))
7808     {
7809       deref_to_type1 = TYPE_PTRMEM_CLASS_TYPE (from_type1);
7810       deref_to_type2 = TYPE_PTRMEM_CLASS_TYPE (from_type2);
7811       deref_from_type1 = TYPE_PTRMEM_CLASS_TYPE (to_type1);
7812       deref_from_type2 = TYPE_PTRMEM_CLASS_TYPE (to_type2);
7813     }
7814
7815   if (deref_from_type1 != NULL_TREE
7816       && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_from_type1))
7817       && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_from_type2)))
7818     {
7819       /* This was one of the pointer or pointer-like conversions.
7820
7821          [over.ics.rank]
7822
7823          --If class B is derived directly or indirectly from class A,
7824            conversion of B* to A* is better than conversion of B* to
7825            void*, and conversion of A* to void* is better than
7826            conversion of B* to void*.  */
7827       if (TREE_CODE (deref_to_type1) == VOID_TYPE
7828           && TREE_CODE (deref_to_type2) == VOID_TYPE)
7829         {
7830           if (is_properly_derived_from (deref_from_type1,
7831                                         deref_from_type2))
7832             return -1;
7833           else if (is_properly_derived_from (deref_from_type2,
7834                                              deref_from_type1))
7835             return 1;
7836         }
7837       else if (TREE_CODE (deref_to_type1) == VOID_TYPE
7838                || TREE_CODE (deref_to_type2) == VOID_TYPE)
7839         {
7840           if (same_type_p (deref_from_type1, deref_from_type2))
7841             {
7842               if (TREE_CODE (deref_to_type2) == VOID_TYPE)
7843                 {
7844                   if (is_properly_derived_from (deref_from_type1,
7845                                                 deref_to_type1))
7846                     return 1;
7847                 }
7848               /* We know that DEREF_TO_TYPE1 is `void' here.  */
7849               else if (is_properly_derived_from (deref_from_type1,
7850                                                  deref_to_type2))
7851                 return -1;
7852             }
7853         }
7854       else if (RECORD_OR_UNION_CODE_P (TREE_CODE (deref_to_type1))
7855                && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_to_type2)))
7856         {
7857           /* [over.ics.rank]
7858
7859              --If class B is derived directly or indirectly from class A
7860                and class C is derived directly or indirectly from B,
7861
7862              --conversion of C* to B* is better than conversion of C* to
7863                A*,
7864
7865              --conversion of B* to A* is better than conversion of C* to
7866                A*  */
7867           if (same_type_p (deref_from_type1, deref_from_type2))
7868             {
7869               if (is_properly_derived_from (deref_to_type1,
7870                                             deref_to_type2))
7871                 return 1;
7872               else if (is_properly_derived_from (deref_to_type2,
7873                                                  deref_to_type1))
7874                 return -1;
7875             }
7876           else if (same_type_p (deref_to_type1, deref_to_type2))
7877             {
7878               if (is_properly_derived_from (deref_from_type2,
7879                                             deref_from_type1))
7880                 return 1;
7881               else if (is_properly_derived_from (deref_from_type1,
7882                                                  deref_from_type2))
7883                 return -1;
7884             }
7885         }
7886     }
7887   else if (CLASS_TYPE_P (non_reference (from_type1))
7888            && same_type_p (from_type1, from_type2))
7889     {
7890       tree from = non_reference (from_type1);
7891
7892       /* [over.ics.rank]
7893
7894          --binding of an expression of type C to a reference of type
7895            B& is better than binding an expression of type C to a
7896            reference of type A&
7897
7898          --conversion of C to B is better than conversion of C to A,  */
7899       if (is_properly_derived_from (from, to_type1)
7900           && is_properly_derived_from (from, to_type2))
7901         {
7902           if (is_properly_derived_from (to_type1, to_type2))
7903             return 1;
7904           else if (is_properly_derived_from (to_type2, to_type1))
7905             return -1;
7906         }
7907     }
7908   else if (CLASS_TYPE_P (non_reference (to_type1))
7909            && same_type_p (to_type1, to_type2))
7910     {
7911       tree to = non_reference (to_type1);
7912
7913       /* [over.ics.rank]
7914
7915          --binding of an expression of type B to a reference of type
7916            A& is better than binding an expression of type C to a
7917            reference of type A&,
7918
7919          --conversion of B to A is better than conversion of C to A  */
7920       if (is_properly_derived_from (from_type1, to)
7921           && is_properly_derived_from (from_type2, to))
7922         {
7923           if (is_properly_derived_from (from_type2, from_type1))
7924             return 1;
7925           else if (is_properly_derived_from (from_type1, from_type2))
7926             return -1;
7927         }
7928     }
7929
7930   /* [over.ics.rank]
7931
7932      --S1 and S2 differ only in their qualification conversion and  yield
7933        similar  types  T1 and T2 (_conv.qual_), respectively, and the cv-
7934        qualification signature of type T1 is a proper subset of  the  cv-
7935        qualification signature of type T2  */
7936   if (ics1->kind == ck_qual
7937       && ics2->kind == ck_qual
7938       && same_type_p (from_type1, from_type2))
7939     {
7940       int result = comp_cv_qual_signature (to_type1, to_type2);
7941       if (result != 0)
7942         return result;
7943     }
7944
7945   /* [over.ics.rank]
7946
7947      --S1 and S2 are reference bindings (_dcl.init.ref_) and neither refers
7948      to an implicit object parameter, and either S1 binds an lvalue reference
7949      to an lvalue and S2 binds an rvalue reference or S1 binds an rvalue
7950      reference to an rvalue and S2 binds an lvalue reference
7951      (C++0x draft standard, 13.3.3.2)
7952
7953      --S1 and S2 are reference bindings (_dcl.init.ref_), and the
7954      types to which the references refer are the same type except for
7955      top-level cv-qualifiers, and the type to which the reference
7956      initialized by S2 refers is more cv-qualified than the type to
7957      which the reference initialized by S1 refers */
7958
7959   if (ref_conv1 && ref_conv2)
7960     {
7961       if (!ref_conv1->this_p && !ref_conv2->this_p
7962           && (TYPE_REF_IS_RVALUE (ref_conv1->type)
7963               != TYPE_REF_IS_RVALUE (ref_conv2->type)))
7964         {
7965           if (ref_conv1->rvaluedness_matches_p)
7966             return 1;
7967           if (ref_conv2->rvaluedness_matches_p)
7968             return -1;
7969         }
7970
7971       if (same_type_ignoring_top_level_qualifiers_p (to_type1, to_type2))
7972         return comp_cv_qualification (TREE_TYPE (ref_conv2->type),
7973                                       TREE_TYPE (ref_conv1->type));
7974     }
7975
7976   /* Neither conversion sequence is better than the other.  */
7977   return 0;
7978 }
7979
7980 /* The source type for this standard conversion sequence.  */
7981
7982 static tree
7983 source_type (conversion *t)
7984 {
7985   for (;; t = t->u.next)
7986     {
7987       if (t->kind == ck_user
7988           || t->kind == ck_ambig
7989           || t->kind == ck_identity)
7990         return t->type;
7991     }
7992   gcc_unreachable ();
7993 }
7994
7995 /* Note a warning about preferring WINNER to LOSER.  We do this by storing
7996    a pointer to LOSER and re-running joust to produce the warning if WINNER
7997    is actually used.  */
7998
7999 static void
8000 add_warning (struct z_candidate *winner, struct z_candidate *loser)
8001 {
8002   candidate_warning *cw = (candidate_warning *)
8003     conversion_obstack_alloc (sizeof (candidate_warning));
8004   cw->loser = loser;
8005   cw->next = winner->warnings;
8006   winner->warnings = cw;
8007 }
8008
8009 /* Compare two candidates for overloading as described in
8010    [over.match.best].  Return values:
8011
8012       1: cand1 is better than cand2
8013      -1: cand2 is better than cand1
8014       0: cand1 and cand2 are indistinguishable */
8015
8016 static int
8017 joust (struct z_candidate *cand1, struct z_candidate *cand2, bool warn)
8018 {
8019   int winner = 0;
8020   int off1 = 0, off2 = 0;
8021   size_t i;
8022   size_t len;
8023
8024   /* Candidates that involve bad conversions are always worse than those
8025      that don't.  */
8026   if (cand1->viable > cand2->viable)
8027     return 1;
8028   if (cand1->viable < cand2->viable)
8029     return -1;
8030
8031   /* If we have two pseudo-candidates for conversions to the same type,
8032      or two candidates for the same function, arbitrarily pick one.  */
8033   if (cand1->fn == cand2->fn
8034       && (IS_TYPE_OR_DECL_P (cand1->fn)))
8035     return 1;
8036
8037   /* a viable function F1
8038      is defined to be a better function than another viable function F2  if
8039      for  all arguments i, ICSi(F1) is not a worse conversion sequence than
8040      ICSi(F2), and then */
8041
8042   /* for some argument j, ICSj(F1) is a better conversion  sequence  than
8043      ICSj(F2) */
8044
8045   /* For comparing static and non-static member functions, we ignore
8046      the implicit object parameter of the non-static function.  The
8047      standard says to pretend that the static function has an object
8048      parm, but that won't work with operator overloading.  */
8049   len = cand1->num_convs;
8050   if (len != cand2->num_convs)
8051     {
8052       int static_1 = DECL_STATIC_FUNCTION_P (cand1->fn);
8053       int static_2 = DECL_STATIC_FUNCTION_P (cand2->fn);
8054
8055       gcc_assert (static_1 != static_2);
8056
8057       if (static_1)
8058         off2 = 1;
8059       else
8060         {
8061           off1 = 1;
8062           --len;
8063         }
8064     }
8065
8066   for (i = 0; i < len; ++i)
8067     {
8068       conversion *t1 = cand1->convs[i + off1];
8069       conversion *t2 = cand2->convs[i + off2];
8070       int comp = compare_ics (t1, t2);
8071
8072       if (comp != 0)
8073         {
8074           if (warn_sign_promo
8075               && (CONVERSION_RANK (t1) + CONVERSION_RANK (t2)
8076                   == cr_std + cr_promotion)
8077               && t1->kind == ck_std
8078               && t2->kind == ck_std
8079               && TREE_CODE (t1->type) == INTEGER_TYPE
8080               && TREE_CODE (t2->type) == INTEGER_TYPE
8081               && (TYPE_PRECISION (t1->type)
8082                   == TYPE_PRECISION (t2->type))
8083               && (TYPE_UNSIGNED (t1->u.next->type)
8084                   || (TREE_CODE (t1->u.next->type)
8085                       == ENUMERAL_TYPE)))
8086             {
8087               tree type = t1->u.next->type;
8088               tree type1, type2;
8089               struct z_candidate *w, *l;
8090               if (comp > 0)
8091                 type1 = t1->type, type2 = t2->type,
8092                   w = cand1, l = cand2;
8093               else
8094                 type1 = t2->type, type2 = t1->type,
8095                   w = cand2, l = cand1;
8096
8097               if (warn)
8098                 {
8099                   warning (OPT_Wsign_promo, "passing %qT chooses %qT over %qT",
8100                            type, type1, type2);
8101                   warning (OPT_Wsign_promo, "  in call to %qD", w->fn);
8102                 }
8103               else
8104                 add_warning (w, l);
8105             }
8106
8107           if (winner && comp != winner)
8108             {
8109               winner = 0;
8110               goto tweak;
8111             }
8112           winner = comp;
8113         }
8114     }
8115
8116   /* warn about confusing overload resolution for user-defined conversions,
8117      either between a constructor and a conversion op, or between two
8118      conversion ops.  */
8119   if (winner && warn_conversion && cand1->second_conv
8120       && (!DECL_CONSTRUCTOR_P (cand1->fn) || !DECL_CONSTRUCTOR_P (cand2->fn))
8121       && winner != compare_ics (cand1->second_conv, cand2->second_conv))
8122     {
8123       struct z_candidate *w, *l;
8124       bool give_warning = false;
8125
8126       if (winner == 1)
8127         w = cand1, l = cand2;
8128       else
8129         w = cand2, l = cand1;
8130
8131       /* We don't want to complain about `X::operator T1 ()'
8132          beating `X::operator T2 () const', when T2 is a no less
8133          cv-qualified version of T1.  */
8134       if (DECL_CONTEXT (w->fn) == DECL_CONTEXT (l->fn)
8135           && !DECL_CONSTRUCTOR_P (w->fn) && !DECL_CONSTRUCTOR_P (l->fn))
8136         {
8137           tree t = TREE_TYPE (TREE_TYPE (l->fn));
8138           tree f = TREE_TYPE (TREE_TYPE (w->fn));
8139
8140           if (TREE_CODE (t) == TREE_CODE (f) && POINTER_TYPE_P (t))
8141             {
8142               t = TREE_TYPE (t);
8143               f = TREE_TYPE (f);
8144             }
8145           if (!comp_ptr_ttypes (t, f))
8146             give_warning = true;
8147         }
8148       else
8149         give_warning = true;
8150
8151       if (!give_warning)
8152         /*NOP*/;
8153       else if (warn)
8154         {
8155           tree source = source_type (w->convs[0]);
8156           if (! DECL_CONSTRUCTOR_P (w->fn))
8157             source = TREE_TYPE (source);
8158           if (warning (OPT_Wconversion, "choosing %qD over %qD", w->fn, l->fn)
8159               && warning (OPT_Wconversion, "  for conversion from %qT to %qT",
8160                           source, w->second_conv->type)) 
8161             {
8162               inform (input_location, "  because conversion sequence for the argument is better");
8163             }
8164         }
8165       else
8166         add_warning (w, l);
8167     }
8168
8169   if (winner)
8170     return winner;
8171
8172   /* or, if not that,
8173      F1 is a non-template function and F2 is a template function
8174      specialization.  */
8175
8176   if (!cand1->template_decl && cand2->template_decl)
8177     return 1;
8178   else if (cand1->template_decl && !cand2->template_decl)
8179     return -1;
8180
8181   /* or, if not that,
8182      F1 and F2 are template functions and the function template for F1 is
8183      more specialized than the template for F2 according to the partial
8184      ordering rules.  */
8185
8186   if (cand1->template_decl && cand2->template_decl)
8187     {
8188       winner = more_specialized_fn
8189         (TI_TEMPLATE (cand1->template_decl),
8190          TI_TEMPLATE (cand2->template_decl),
8191          /* [temp.func.order]: The presence of unused ellipsis and default
8192             arguments has no effect on the partial ordering of function
8193             templates.   add_function_candidate() will not have
8194             counted the "this" argument for constructors.  */
8195          cand1->num_convs + DECL_CONSTRUCTOR_P (cand1->fn));
8196       if (winner)
8197         return winner;
8198     }
8199
8200   /* or, if not that,
8201      the  context  is  an  initialization by user-defined conversion (see
8202      _dcl.init_  and  _over.match.user_)  and  the  standard   conversion
8203      sequence  from  the return type of F1 to the destination type (i.e.,
8204      the type of the entity being initialized)  is  a  better  conversion
8205      sequence  than the standard conversion sequence from the return type
8206      of F2 to the destination type.  */
8207
8208   if (cand1->second_conv)
8209     {
8210       winner = compare_ics (cand1->second_conv, cand2->second_conv);
8211       if (winner)
8212         return winner;
8213     }
8214
8215   /* Check whether we can discard a builtin candidate, either because we
8216      have two identical ones or matching builtin and non-builtin candidates.
8217
8218      (Pedantically in the latter case the builtin which matched the user
8219      function should not be added to the overload set, but we spot it here.
8220
8221      [over.match.oper]
8222      ... the builtin candidates include ...
8223      - do not have the same parameter type list as any non-template
8224        non-member candidate.  */
8225
8226   if (TREE_CODE (cand1->fn) == IDENTIFIER_NODE
8227       || TREE_CODE (cand2->fn) == IDENTIFIER_NODE)
8228     {
8229       for (i = 0; i < len; ++i)
8230         if (!same_type_p (cand1->convs[i]->type,
8231                           cand2->convs[i]->type))
8232           break;
8233       if (i == cand1->num_convs)
8234         {
8235           if (cand1->fn == cand2->fn)
8236             /* Two built-in candidates; arbitrarily pick one.  */
8237             return 1;
8238           else if (TREE_CODE (cand1->fn) == IDENTIFIER_NODE)
8239             /* cand1 is built-in; prefer cand2.  */
8240             return -1;
8241           else
8242             /* cand2 is built-in; prefer cand1.  */
8243             return 1;
8244         }
8245     }
8246
8247   /* If the two function declarations represent the same function (this can
8248      happen with declarations in multiple scopes and arg-dependent lookup),
8249      arbitrarily choose one.  But first make sure the default args we're
8250      using match.  */
8251   if (DECL_P (cand1->fn) && DECL_P (cand2->fn)
8252       && equal_functions (cand1->fn, cand2->fn))
8253     {
8254       tree parms1 = TYPE_ARG_TYPES (TREE_TYPE (cand1->fn));
8255       tree parms2 = TYPE_ARG_TYPES (TREE_TYPE (cand2->fn));
8256
8257       gcc_assert (!DECL_CONSTRUCTOR_P (cand1->fn));
8258
8259       for (i = 0; i < len; ++i)
8260         {
8261           /* Don't crash if the fn is variadic.  */
8262           if (!parms1)
8263             break;
8264           parms1 = TREE_CHAIN (parms1);
8265           parms2 = TREE_CHAIN (parms2);
8266         }
8267
8268       if (off1)
8269         parms1 = TREE_CHAIN (parms1);
8270       else if (off2)
8271         parms2 = TREE_CHAIN (parms2);
8272
8273       for (; parms1; ++i)
8274         {
8275           if (!cp_tree_equal (TREE_PURPOSE (parms1),
8276                               TREE_PURPOSE (parms2)))
8277             {
8278               if (warn)
8279                 {
8280                   permerror (input_location, "default argument mismatch in "
8281                              "overload resolution");
8282                   inform (input_location,
8283                           " candidate 1: %q+#F", cand1->fn);
8284                   inform (input_location,
8285                           " candidate 2: %q+#F", cand2->fn);
8286                 }
8287               else
8288                 add_warning (cand1, cand2);
8289               break;
8290             }
8291           parms1 = TREE_CHAIN (parms1);
8292           parms2 = TREE_CHAIN (parms2);
8293         }
8294
8295       return 1;
8296     }
8297
8298 tweak:
8299
8300   /* Extension: If the worst conversion for one candidate is worse than the
8301      worst conversion for the other, take the first.  */
8302   if (!pedantic)
8303     {
8304       conversion_rank rank1 = cr_identity, rank2 = cr_identity;
8305       struct z_candidate *w = 0, *l = 0;
8306
8307       for (i = 0; i < len; ++i)
8308         {
8309           if (CONVERSION_RANK (cand1->convs[i+off1]) > rank1)
8310             rank1 = CONVERSION_RANK (cand1->convs[i+off1]);
8311           if (CONVERSION_RANK (cand2->convs[i + off2]) > rank2)
8312             rank2 = CONVERSION_RANK (cand2->convs[i + off2]);
8313         }
8314       if (rank1 < rank2)
8315         winner = 1, w = cand1, l = cand2;
8316       if (rank1 > rank2)
8317         winner = -1, w = cand2, l = cand1;
8318       if (winner)
8319         {
8320           /* Don't choose a deleted function over ambiguity.  */
8321           if (DECL_P (w->fn) && DECL_DELETED_FN (w->fn))
8322             return 0;
8323           if (warn)
8324             {
8325               pedwarn (input_location, 0,
8326               "ISO C++ says that these are ambiguous, even "
8327               "though the worst conversion for the first is better than "
8328               "the worst conversion for the second:");
8329               print_z_candidate (_("candidate 1:"), w);
8330               print_z_candidate (_("candidate 2:"), l);
8331             }
8332           else
8333             add_warning (w, l);
8334           return winner;
8335         }
8336     }
8337
8338   gcc_assert (!winner);
8339   return 0;
8340 }
8341
8342 /* Given a list of candidates for overloading, find the best one, if any.
8343    This algorithm has a worst case of O(2n) (winner is last), and a best
8344    case of O(n/2) (totally ambiguous); much better than a sorting
8345    algorithm.  */
8346
8347 static struct z_candidate *
8348 tourney (struct z_candidate *candidates)
8349 {
8350   struct z_candidate *champ = candidates, *challenger;
8351   int fate;
8352   int champ_compared_to_predecessor = 0;
8353
8354   /* Walk through the list once, comparing each current champ to the next
8355      candidate, knocking out a candidate or two with each comparison.  */
8356
8357   for (challenger = champ->next; challenger; )
8358     {
8359       fate = joust (champ, challenger, 0);
8360       if (fate == 1)
8361         challenger = challenger->next;
8362       else
8363         {
8364           if (fate == 0)
8365             {
8366               champ = challenger->next;
8367               if (champ == 0)
8368                 return NULL;
8369               champ_compared_to_predecessor = 0;
8370             }
8371           else
8372             {
8373               champ = challenger;
8374               champ_compared_to_predecessor = 1;
8375             }
8376
8377           challenger = champ->next;
8378         }
8379     }
8380
8381   /* Make sure the champ is better than all the candidates it hasn't yet
8382      been compared to.  */
8383
8384   for (challenger = candidates;
8385        challenger != champ
8386          && !(champ_compared_to_predecessor && challenger->next == champ);
8387        challenger = challenger->next)
8388     {
8389       fate = joust (champ, challenger, 0);
8390       if (fate != 1)
8391         return NULL;
8392     }
8393
8394   return champ;
8395 }
8396
8397 /* Returns nonzero if things of type FROM can be converted to TO.  */
8398
8399 bool
8400 can_convert (tree to, tree from)
8401 {
8402   return can_convert_arg (to, from, NULL_TREE, LOOKUP_IMPLICIT);
8403 }
8404
8405 /* Returns nonzero if ARG (of type FROM) can be converted to TO.  */
8406
8407 bool
8408 can_convert_arg (tree to, tree from, tree arg, int flags)
8409 {
8410   conversion *t;
8411   void *p;
8412   bool ok_p;
8413
8414   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
8415   p = conversion_obstack_alloc (0);
8416
8417   t  = implicit_conversion (to, from, arg, /*c_cast_p=*/false,
8418                             flags);
8419   ok_p = (t && !t->bad_p);
8420
8421   /* Free all the conversions we allocated.  */
8422   obstack_free (&conversion_obstack, p);
8423
8424   return ok_p;
8425 }
8426
8427 /* Like can_convert_arg, but allows dubious conversions as well.  */
8428
8429 bool
8430 can_convert_arg_bad (tree to, tree from, tree arg, int flags)
8431 {
8432   conversion *t;
8433   void *p;
8434
8435   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
8436   p = conversion_obstack_alloc (0);
8437   /* Try to perform the conversion.  */
8438   t  = implicit_conversion (to, from, arg, /*c_cast_p=*/false,
8439                             flags);
8440   /* Free all the conversions we allocated.  */
8441   obstack_free (&conversion_obstack, p);
8442
8443   return t != NULL;
8444 }
8445
8446 /* Convert EXPR to TYPE.  Return the converted expression.
8447
8448    Note that we allow bad conversions here because by the time we get to
8449    this point we are committed to doing the conversion.  If we end up
8450    doing a bad conversion, convert_like will complain.  */
8451
8452 tree
8453 perform_implicit_conversion_flags (tree type, tree expr, tsubst_flags_t complain, int flags)
8454 {
8455   conversion *conv;
8456   void *p;
8457
8458   if (error_operand_p (expr))
8459     return error_mark_node;
8460
8461   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
8462   p = conversion_obstack_alloc (0);
8463
8464   conv = implicit_conversion (type, TREE_TYPE (expr), expr,
8465                               /*c_cast_p=*/false,
8466                               flags);
8467
8468   if (!conv)
8469     {
8470       if (complain & tf_error)
8471         {
8472           /* If expr has unknown type, then it is an overloaded function.
8473              Call instantiate_type to get good error messages.  */
8474           if (TREE_TYPE (expr) == unknown_type_node)
8475             instantiate_type (type, expr, complain);
8476           else if (invalid_nonstatic_memfn_p (expr, complain))
8477             /* We gave an error.  */;
8478           else
8479             error ("could not convert %qE from %qT to %qT", expr,
8480                    TREE_TYPE (expr), type);
8481         }
8482       expr = error_mark_node;
8483     }
8484   else if (processing_template_decl)
8485     {
8486       /* In a template, we are only concerned about determining the
8487          type of non-dependent expressions, so we do not have to
8488          perform the actual conversion.  */
8489       if (TREE_TYPE (expr) != type)
8490         expr = build_nop (type, expr);
8491     }
8492   else
8493     expr = convert_like (conv, expr, complain);
8494
8495   /* Free all the conversions we allocated.  */
8496   obstack_free (&conversion_obstack, p);
8497
8498   return expr;
8499 }
8500
8501 tree
8502 perform_implicit_conversion (tree type, tree expr, tsubst_flags_t complain)
8503 {
8504   return perform_implicit_conversion_flags (type, expr, complain, LOOKUP_IMPLICIT);
8505 }
8506
8507 /* Convert EXPR to TYPE (as a direct-initialization) if that is
8508    permitted.  If the conversion is valid, the converted expression is
8509    returned.  Otherwise, NULL_TREE is returned, except in the case
8510    that TYPE is a class type; in that case, an error is issued.  If
8511    C_CAST_P is true, then this direct-initialization is taking
8512    place as part of a static_cast being attempted as part of a C-style
8513    cast.  */
8514
8515 tree
8516 perform_direct_initialization_if_possible (tree type,
8517                                            tree expr,
8518                                            bool c_cast_p,
8519                                            tsubst_flags_t complain)
8520 {
8521   conversion *conv;
8522   void *p;
8523
8524   if (type == error_mark_node || error_operand_p (expr))
8525     return error_mark_node;
8526   /* [dcl.init]
8527
8528      If the destination type is a (possibly cv-qualified) class type:
8529
8530      -- If the initialization is direct-initialization ...,
8531      constructors are considered. ... If no constructor applies, or
8532      the overload resolution is ambiguous, the initialization is
8533      ill-formed.  */
8534   if (CLASS_TYPE_P (type))
8535     {
8536       VEC(tree,gc) *args = make_tree_vector_single (expr);
8537       expr = build_special_member_call (NULL_TREE, complete_ctor_identifier,
8538                                         &args, type, LOOKUP_NORMAL, complain);
8539       release_tree_vector (args);
8540       return build_cplus_new (type, expr, complain);
8541     }
8542
8543   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
8544   p = conversion_obstack_alloc (0);
8545
8546   conv = implicit_conversion (type, TREE_TYPE (expr), expr,
8547                               c_cast_p,
8548                               LOOKUP_NORMAL);
8549   if (!conv || conv->bad_p)
8550     expr = NULL_TREE;
8551   else
8552     expr = convert_like_real (conv, expr, NULL_TREE, 0, 0,
8553                               /*issue_conversion_warnings=*/false,
8554                               c_cast_p,
8555                               complain);
8556
8557   /* Free all the conversions we allocated.  */
8558   obstack_free (&conversion_obstack, p);
8559
8560   return expr;
8561 }
8562
8563 /* DECL is a VAR_DECL whose type is a REFERENCE_TYPE.  The reference
8564    is being bound to a temporary.  Create and return a new VAR_DECL
8565    with the indicated TYPE; this variable will store the value to
8566    which the reference is bound.  */
8567
8568 tree
8569 make_temporary_var_for_ref_to_temp (tree decl, tree type)
8570 {
8571   tree var;
8572
8573   /* Create the variable.  */
8574   var = create_temporary_var (type);
8575
8576   /* Register the variable.  */
8577   if (TREE_STATIC (decl))
8578     {
8579       /* Namespace-scope or local static; give it a mangled name.  */
8580       tree name;
8581
8582       TREE_STATIC (var) = 1;
8583       name = mangle_ref_init_variable (decl);
8584       DECL_NAME (var) = name;
8585       SET_DECL_ASSEMBLER_NAME (var, name);
8586       var = pushdecl_top_level (var);
8587     }
8588   else
8589     /* Create a new cleanup level if necessary.  */
8590     maybe_push_cleanup_level (type);
8591
8592   return var;
8593 }
8594
8595 /* EXPR is the initializer for a variable DECL of reference or
8596    std::initializer_list type.  Create, push and return a new VAR_DECL
8597    for the initializer so that it will live as long as DECL.  Any
8598    cleanup for the new variable is returned through CLEANUP, and the
8599    code to initialize the new variable is returned through INITP.  */
8600
8601 tree
8602 set_up_extended_ref_temp (tree decl, tree expr, tree *cleanup, tree *initp)
8603 {
8604   tree init;
8605   tree type;
8606   tree var;
8607
8608   /* Create the temporary variable.  */
8609   type = TREE_TYPE (expr);
8610   var = make_temporary_var_for_ref_to_temp (decl, type);
8611   layout_decl (var, 0);
8612   /* If the rvalue is the result of a function call it will be
8613      a TARGET_EXPR.  If it is some other construct (such as a
8614      member access expression where the underlying object is
8615      itself the result of a function call), turn it into a
8616      TARGET_EXPR here.  It is important that EXPR be a
8617      TARGET_EXPR below since otherwise the INIT_EXPR will
8618      attempt to make a bitwise copy of EXPR to initialize
8619      VAR.  */
8620   if (TREE_CODE (expr) != TARGET_EXPR)
8621     expr = get_target_expr (expr);
8622
8623   /* If the initializer is constant, put it in DECL_INITIAL so we get
8624      static initialization and use in constant expressions.  */
8625   init = maybe_constant_init (expr);
8626   if (TREE_CONSTANT (init))
8627     {
8628       if (literal_type_p (type) && CP_TYPE_CONST_NON_VOLATILE_P (type))
8629         {
8630           /* 5.19 says that a constant expression can include an
8631              lvalue-rvalue conversion applied to "a glvalue of literal type
8632              that refers to a non-volatile temporary object initialized
8633              with a constant expression".  Rather than try to communicate
8634              that this VAR_DECL is a temporary, just mark it constexpr.
8635
8636              Currently this is only useful for initializer_list temporaries,
8637              since reference vars can't appear in constant expressions.  */
8638           DECL_DECLARED_CONSTEXPR_P (var) = true;
8639           DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (var) = true;
8640           TREE_CONSTANT (var) = true;
8641         }
8642       DECL_INITIAL (var) = init;
8643       init = NULL_TREE;
8644     }
8645   else
8646     /* Create the INIT_EXPR that will initialize the temporary
8647        variable.  */
8648     init = build2 (INIT_EXPR, type, var, expr);
8649   if (at_function_scope_p ())
8650     {
8651       add_decl_expr (var);
8652
8653       if (TREE_STATIC (var))
8654         init = add_stmt_to_compound (init, register_dtor_fn (var));
8655       else
8656         *cleanup = cxx_maybe_build_cleanup (var, tf_warning_or_error);
8657
8658       /* We must be careful to destroy the temporary only
8659          after its initialization has taken place.  If the
8660          initialization throws an exception, then the
8661          destructor should not be run.  We cannot simply
8662          transform INIT into something like:
8663
8664          (INIT, ({ CLEANUP_STMT; }))
8665
8666          because emit_local_var always treats the
8667          initializer as a full-expression.  Thus, the
8668          destructor would run too early; it would run at the
8669          end of initializing the reference variable, rather
8670          than at the end of the block enclosing the
8671          reference variable.
8672
8673          The solution is to pass back a cleanup expression
8674          which the caller is responsible for attaching to
8675          the statement tree.  */
8676     }
8677   else
8678     {
8679       rest_of_decl_compilation (var, /*toplev=*/1, at_eof);
8680       if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
8681         static_aggregates = tree_cons (NULL_TREE, var,
8682                                        static_aggregates);
8683     }
8684
8685   *initp = init;
8686   return var;
8687 }
8688
8689 /* Convert EXPR to the indicated reference TYPE, in a way suitable for
8690    initializing a variable of that TYPE.  If DECL is non-NULL, it is
8691    the VAR_DECL being initialized with the EXPR.  (In that case, the
8692    type of DECL will be TYPE.)  If DECL is non-NULL, then CLEANUP must
8693    also be non-NULL, and with *CLEANUP initialized to NULL.  Upon
8694    return, if *CLEANUP is no longer NULL, it will be an expression
8695    that should be pushed as a cleanup after the returned expression
8696    is used to initialize DECL.
8697
8698    Return the converted expression.  */
8699
8700 tree
8701 initialize_reference (tree type, tree expr, tree decl, tree *cleanup,
8702                       tsubst_flags_t complain)
8703 {
8704   conversion *conv;
8705   void *p;
8706
8707   if (type == error_mark_node || error_operand_p (expr))
8708     return error_mark_node;
8709
8710   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
8711   p = conversion_obstack_alloc (0);
8712
8713   conv = reference_binding (type, TREE_TYPE (expr), expr, /*c_cast_p=*/false,
8714                             LOOKUP_NORMAL);
8715   if (!conv || conv->bad_p)
8716     {
8717       if (complain & tf_error)
8718         {
8719           if (!CP_TYPE_CONST_P (TREE_TYPE (type))
8720               && !TYPE_REF_IS_RVALUE (type)
8721               && !real_lvalue_p (expr))
8722             error ("invalid initialization of non-const reference of "
8723                    "type %qT from an rvalue of type %qT",
8724                    type, TREE_TYPE (expr));
8725           else
8726             error ("invalid initialization of reference of type "
8727                    "%qT from expression of type %qT", type,
8728                    TREE_TYPE (expr));
8729         }
8730       return error_mark_node;
8731     }
8732
8733   /* If DECL is non-NULL, then this special rule applies:
8734
8735        [class.temporary]
8736
8737        The temporary to which the reference is bound or the temporary
8738        that is the complete object to which the reference is bound
8739        persists for the lifetime of the reference.
8740
8741        The temporaries created during the evaluation of the expression
8742        initializing the reference, except the temporary to which the
8743        reference is bound, are destroyed at the end of the
8744        full-expression in which they are created.
8745
8746      In that case, we store the converted expression into a new
8747      VAR_DECL in a new scope.
8748
8749      However, we want to be careful not to create temporaries when
8750      they are not required.  For example, given:
8751
8752        struct B {};
8753        struct D : public B {};
8754        D f();
8755        const B& b = f();
8756
8757      there is no need to copy the return value from "f"; we can just
8758      extend its lifetime.  Similarly, given:
8759
8760        struct S {};
8761        struct T { operator S(); };
8762        T t;
8763        const S& s = t;
8764
8765     we can extend the lifetime of the return value of the conversion
8766     operator.  */
8767   gcc_assert (conv->kind == ck_ref_bind);
8768   if (decl)
8769     {
8770       tree var;
8771       tree base_conv_type;
8772
8773       gcc_assert (complain == tf_warning_or_error);
8774
8775       /* Skip over the REF_BIND.  */
8776       conv = conv->u.next;
8777       /* If the next conversion is a BASE_CONV, skip that too -- but
8778          remember that the conversion was required.  */
8779       if (conv->kind == ck_base)
8780         {
8781           base_conv_type = conv->type;
8782           conv = conv->u.next;
8783         }
8784       else
8785         base_conv_type = NULL_TREE;
8786       /* Perform the remainder of the conversion.  */
8787       expr = convert_like_real (conv, expr,
8788                                 /*fn=*/NULL_TREE, /*argnum=*/0,
8789                                 /*inner=*/-1,
8790                                 /*issue_conversion_warnings=*/true,
8791                                 /*c_cast_p=*/false,
8792                                 complain);
8793       if (error_operand_p (expr))
8794         expr = error_mark_node;
8795       else
8796         {
8797           if (!lvalue_or_rvalue_with_address_p (expr))
8798             {
8799               tree init;
8800               var = set_up_extended_ref_temp (decl, expr, cleanup, &init);
8801               /* Use its address to initialize the reference variable.  */
8802               expr = build_address (var);
8803               if (base_conv_type)
8804                 expr = convert_to_base (expr,
8805                                         build_pointer_type (base_conv_type),
8806                                         /*check_access=*/true,
8807                                         /*nonnull=*/true, complain);
8808               if (init)
8809                 expr = build2 (COMPOUND_EXPR, TREE_TYPE (expr), init, expr);
8810             }
8811           else
8812             /* Take the address of EXPR.  */
8813             expr = cp_build_addr_expr (expr, complain);
8814           /* If a BASE_CONV was required, perform it now.  */
8815           if (base_conv_type)
8816             expr = (perform_implicit_conversion
8817                     (build_pointer_type (base_conv_type), expr,
8818                      complain));
8819           expr = build_nop (type, expr);
8820           if (DECL_DECLARED_CONSTEXPR_P (decl))
8821             {
8822               expr = cxx_constant_value (expr);
8823               DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl)
8824                 = reduced_constant_expression_p (expr);
8825             }
8826         }
8827     }
8828   else
8829     /* Perform the conversion.  */
8830     expr = convert_like (conv, expr, complain);
8831
8832   /* Free all the conversions we allocated.  */
8833   obstack_free (&conversion_obstack, p);
8834
8835   return expr;
8836 }
8837
8838 /* Returns true iff TYPE is some variant of std::initializer_list.  */
8839
8840 bool
8841 is_std_init_list (tree type)
8842 {
8843   /* Look through typedefs.  */
8844   if (!TYPE_P (type))
8845     return false;
8846   type = TYPE_MAIN_VARIANT (type);
8847   return (CLASS_TYPE_P (type)
8848           && CP_TYPE_CONTEXT (type) == std_node
8849           && strcmp (TYPE_NAME_STRING (type), "initializer_list") == 0);
8850 }
8851
8852 /* Returns true iff DECL is a list constructor: i.e. a constructor which
8853    will accept an argument list of a single std::initializer_list<T>.  */
8854
8855 bool
8856 is_list_ctor (tree decl)
8857 {
8858   tree args = FUNCTION_FIRST_USER_PARMTYPE (decl);
8859   tree arg;
8860
8861   if (!args || args == void_list_node)
8862     return false;
8863
8864   arg = non_reference (TREE_VALUE (args));
8865   if (!is_std_init_list (arg))
8866     return false;
8867
8868   args = TREE_CHAIN (args);
8869
8870   if (args && args != void_list_node && !TREE_PURPOSE (args))
8871     /* There are more non-defaulted parms.  */
8872     return false;
8873
8874   return true;
8875 }
8876
8877 #include "gt-cp-call.h"