Update GCC80 to version 8.3
[dragonfly.git] / contrib / gcc-8.0 / gcc / cp / call.c
1 /* Functions related to invoking -*- C++ -*- methods and overloaded functions.
2    Copyright (C) 1987-2018 Free Software Foundation, Inc.
3    Contributed by Michael Tiemann (tiemann@cygnus.com) and
4    modified by Brendan Kehoe (brendan@cygnus.com).
5
6 This file is part of GCC.
7
8 GCC is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 3, or (at your option)
11 any later version.
12
13 GCC is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3.  If not see
20 <http://www.gnu.org/licenses/>.  */
21
22
23 /* High-level class interface.  */
24
25 #include "config.h"
26 #include "system.h"
27 #include "coretypes.h"
28 #include "target.h"
29 #include "cp-tree.h"
30 #include "timevar.h"
31 #include "stringpool.h"
32 #include "cgraph.h"
33 #include "stor-layout.h"
34 #include "trans-mem.h"
35 #include "flags.h"
36 #include "toplev.h"
37 #include "intl.h"
38 #include "convert.h"
39 #include "langhooks.h"
40 #include "c-family/c-objc.h"
41 #include "internal-fn.h"
42 #include "stringpool.h"
43 #include "attribs.h"
44
45 /* The various kinds of conversion.  */
46
47 enum conversion_kind {
48   ck_identity,
49   ck_lvalue,
50   ck_fnptr,
51   ck_qual,
52   ck_std,
53   ck_ptr,
54   ck_pmem,
55   ck_base,
56   ck_ref_bind,
57   ck_user,
58   ck_ambig,
59   ck_list,
60   ck_aggr,
61   ck_rvalue
62 };
63
64 /* The rank of the conversion.  Order of the enumerals matters; better
65    conversions should come earlier in the list.  */
66
67 enum conversion_rank {
68   cr_identity,
69   cr_exact,
70   cr_promotion,
71   cr_std,
72   cr_pbool,
73   cr_user,
74   cr_ellipsis,
75   cr_bad
76 };
77
78 /* An implicit conversion sequence, in the sense of [over.best.ics].
79    The first conversion to be performed is at the end of the chain.
80    That conversion is always a cr_identity conversion.  */
81
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.  If KIND is ck_ambig, true if the context is
97      copy-initialization.  */
98   BOOL_BITFIELD need_temporary_p : 1;
99   /* If KIND is ck_ptr or ck_pmem, true to indicate that a conversion
100      from a pointer-to-derived to pointer-to-base is being performed.  */
101   BOOL_BITFIELD base_p : 1;
102   /* If KIND is ck_ref_bind, true when either an lvalue reference is
103      being bound to an lvalue expression or an rvalue reference is
104      being bound to an rvalue expression.  If KIND is ck_rvalue,
105      true when we are treating an lvalue as an rvalue (12.8p33).  If
106      KIND is ck_base, always false.  If ck_identity, we will be
107      binding a reference directly or decaying to a pointer.  */
108   BOOL_BITFIELD rvaluedness_matches_p: 1;
109   BOOL_BITFIELD check_narrowing: 1;
110   /* The type of the expression resulting from the conversion.  */
111   tree type;
112   union {
113     /* The next conversion in the chain.  Since the conversions are
114        arranged from outermost to innermost, the NEXT conversion will
115        actually be performed before this conversion.  This variant is
116        used only when KIND is neither ck_identity, ck_ambig nor
117        ck_list.  Please use the next_conversion function instead
118        of using this field directly.  */
119     conversion *next;
120     /* The expression at the beginning of the conversion chain.  This
121        variant is used only if KIND is ck_identity or ck_ambig.  */
122     tree expr;
123     /* The array of conversions for an initializer_list, so this
124        variant is used only when KIN D is ck_list.  */
125     conversion **list;
126   } u;
127   /* The function candidate corresponding to this conversion
128      sequence.  This field is only used if KIND is ck_user.  */
129   struct z_candidate *cand;
130 };
131
132 #define CONVERSION_RANK(NODE)                   \
133   ((NODE)->bad_p ? cr_bad                       \
134    : (NODE)->ellipsis_p ? cr_ellipsis           \
135    : (NODE)->user_conv_p ? cr_user              \
136    : (NODE)->rank)
137
138 #define BAD_CONVERSION_RANK(NODE)               \
139   ((NODE)->ellipsis_p ? cr_ellipsis             \
140    : (NODE)->user_conv_p ? cr_user              \
141    : (NODE)->rank)
142
143 static struct obstack conversion_obstack;
144 static bool conversion_obstack_initialized;
145 struct rejection_reason;
146
147 static struct z_candidate * tourney (struct z_candidate *, tsubst_flags_t);
148 static int equal_functions (tree, tree);
149 static int joust (struct z_candidate *, struct z_candidate *, bool,
150                   tsubst_flags_t);
151 static int compare_ics (conversion *, conversion *);
152 static void maybe_warn_class_memaccess (location_t, tree,
153                                         const vec<tree, va_gc> *);
154 static tree build_over_call (struct z_candidate *, int, tsubst_flags_t);
155 #define convert_like(CONV, EXPR, COMPLAIN)                      \
156   convert_like_real ((CONV), (EXPR), NULL_TREE, 0,              \
157                      /*issue_conversion_warnings=*/true,        \
158                      /*c_cast_p=*/false, (COMPLAIN))
159 #define convert_like_with_context(CONV, EXPR, FN, ARGNO, COMPLAIN )     \
160   convert_like_real ((CONV), (EXPR), (FN), (ARGNO),                     \
161                      /*issue_conversion_warnings=*/true,                \
162                      /*c_cast_p=*/false, (COMPLAIN))
163 static tree convert_like_real (conversion *, tree, tree, int, bool,
164                                bool, tsubst_flags_t);
165 static void op_error (location_t, enum tree_code, enum tree_code, tree,
166                       tree, tree, bool);
167 static struct z_candidate *build_user_type_conversion_1 (tree, tree, int,
168                                                          tsubst_flags_t);
169 static void print_z_candidate (location_t, const char *, struct z_candidate *);
170 static void print_z_candidates (location_t, struct z_candidate *);
171 static tree build_this (tree);
172 static struct z_candidate *splice_viable (struct z_candidate *, bool, bool *);
173 static bool any_strictly_viable (struct z_candidate *);
174 static struct z_candidate *add_template_candidate
175         (struct z_candidate **, tree, tree, tree, tree, const vec<tree, va_gc> *,
176          tree, tree, tree, int, unification_kind_t, tsubst_flags_t);
177 static struct z_candidate *add_template_candidate_real
178         (struct z_candidate **, tree, tree, tree, tree, const vec<tree, va_gc> *,
179          tree, tree, tree, int, tree, unification_kind_t, tsubst_flags_t);
180 static void add_builtin_candidates
181         (struct z_candidate **, enum tree_code, enum tree_code,
182          tree, tree *, int, tsubst_flags_t);
183 static void add_builtin_candidate
184         (struct z_candidate **, enum tree_code, enum tree_code,
185          tree, tree, tree, tree *, tree *, int, tsubst_flags_t);
186 static bool is_complete (tree);
187 static void build_builtin_candidate
188         (struct z_candidate **, tree, tree, tree, tree *, tree *,
189          int, tsubst_flags_t);
190 static struct z_candidate *add_conv_candidate
191         (struct z_candidate **, tree, tree, const vec<tree, va_gc> *, tree,
192          tree, tsubst_flags_t);
193 static struct z_candidate *add_function_candidate
194         (struct z_candidate **, tree, tree, tree, const vec<tree, va_gc> *, tree,
195          tree, int, tsubst_flags_t);
196 static conversion *implicit_conversion (tree, tree, tree, bool, int,
197                                         tsubst_flags_t);
198 static conversion *reference_binding (tree, tree, tree, bool, int,
199                                       tsubst_flags_t);
200 static conversion *build_conv (conversion_kind, tree, conversion *);
201 static conversion *build_list_conv (tree, tree, int, tsubst_flags_t);
202 static conversion *next_conversion (conversion *);
203 static bool is_subseq (conversion *, conversion *);
204 static conversion *maybe_handle_ref_bind (conversion **);
205 static void maybe_handle_implicit_object (conversion **);
206 static struct z_candidate *add_candidate
207         (struct z_candidate **, tree, tree, const vec<tree, va_gc> *, size_t,
208          conversion **, tree, tree, int, struct rejection_reason *, int);
209 static tree source_type (conversion *);
210 static void add_warning (struct z_candidate *, struct z_candidate *);
211 static bool reference_compatible_p (tree, tree);
212 static conversion *direct_reference_binding (tree, conversion *);
213 static bool promoted_arithmetic_type_p (tree);
214 static conversion *conditional_conversion (tree, tree, tsubst_flags_t);
215 static char *name_as_c_string (tree, tree, bool *);
216 static tree prep_operand (tree);
217 static void add_candidates (tree, tree, const vec<tree, va_gc> *, tree, tree,
218                             bool, tree, tree, int, struct z_candidate **,
219                             tsubst_flags_t);
220 static conversion *merge_conversion_sequences (conversion *, conversion *);
221 static tree build_temp (tree, tree, int, diagnostic_t *, tsubst_flags_t);
222
223 /* Returns nonzero iff the destructor name specified in NAME matches BASETYPE.
224    NAME can take many forms...  */
225
226 bool
227 check_dtor_name (tree basetype, tree name)
228 {
229   /* Just accept something we've already complained about.  */
230   if (name == error_mark_node)
231     return true;
232
233   if (TREE_CODE (name) == TYPE_DECL)
234     name = TREE_TYPE (name);
235   else if (TYPE_P (name))
236     /* OK */;
237   else if (identifier_p (name))
238     {
239       if ((MAYBE_CLASS_TYPE_P (basetype)
240            || TREE_CODE (basetype) == ENUMERAL_TYPE)
241           && name == constructor_name (basetype))
242         return true;
243       else
244         name = get_type_value (name);
245     }
246   else
247     {
248       /* In the case of:
249
250          template <class T> struct S { ~S(); };
251          int i;
252          i.~S();
253
254          NAME will be a class template.  */
255       gcc_assert (DECL_CLASS_TEMPLATE_P (name));
256       return false;
257     }
258
259   if (!name || name == error_mark_node)
260     return false;
261   return same_type_p (TYPE_MAIN_VARIANT (basetype), TYPE_MAIN_VARIANT (name));
262 }
263
264 /* We want the address of a function or method.  We avoid creating a
265    pointer-to-member function.  */
266
267 tree
268 build_addr_func (tree function, tsubst_flags_t complain)
269 {
270   tree type = TREE_TYPE (function);
271
272   /* We have to do these by hand to avoid real pointer to member
273      functions.  */
274   if (TREE_CODE (type) == METHOD_TYPE)
275     {
276       if (TREE_CODE (function) == OFFSET_REF)
277         {
278           tree object = build_address (TREE_OPERAND (function, 0));
279           return get_member_function_from_ptrfunc (&object,
280                                                    TREE_OPERAND (function, 1),
281                                                    complain);
282         }
283       function = build_address (function);
284     }
285   else
286     function = decay_conversion (function, complain, /*reject_builtin=*/false);
287
288   return function;
289 }
290
291 /* Build a CALL_EXPR, we can handle FUNCTION_TYPEs, METHOD_TYPEs, or
292    POINTER_TYPE to those.  Note, pointer to member function types
293    (TYPE_PTRMEMFUNC_P) must be handled by our callers.  There are
294    two variants.  build_call_a is the primitive taking an array of
295    arguments, while build_call_n is a wrapper that handles varargs.  */
296
297 tree
298 build_call_n (tree function, int n, ...)
299 {
300   if (n == 0)
301     return build_call_a (function, 0, NULL);
302   else
303     {
304       tree *argarray = XALLOCAVEC (tree, n);
305       va_list ap;
306       int i;
307
308       va_start (ap, n);
309       for (i = 0; i < n; i++)
310         argarray[i] = va_arg (ap, tree);
311       va_end (ap);
312       return build_call_a (function, n, argarray);
313     }
314 }
315
316 /* Update various flags in cfun and the call itself based on what is being
317    called.  Split out of build_call_a so that bot_manip can use it too.  */
318
319 void
320 set_flags_from_callee (tree call)
321 {
322   bool nothrow;
323   tree decl = get_callee_fndecl (call);
324
325   /* We check both the decl and the type; a function may be known not to
326      throw without being declared throw().  */
327   nothrow = decl && TREE_NOTHROW (decl);
328   if (CALL_EXPR_FN (call))
329     nothrow |= TYPE_NOTHROW_P (TREE_TYPE (TREE_TYPE (CALL_EXPR_FN (call))));
330   else if (internal_fn_flags (CALL_EXPR_IFN (call)) & ECF_NOTHROW)
331     nothrow = true;
332
333   if (!nothrow && at_function_scope_p () && cfun && cp_function_chain)
334     cp_function_chain->can_throw = 1;
335
336   if (decl && TREE_THIS_VOLATILE (decl) && cfun && cp_function_chain)
337     current_function_returns_abnormally = 1;
338
339   TREE_NOTHROW (call) = nothrow;
340 }
341
342 tree
343 build_call_a (tree function, int n, tree *argarray)
344 {
345   tree decl;
346   tree result_type;
347   tree fntype;
348   int i;
349
350   function = build_addr_func (function, tf_warning_or_error);
351
352   gcc_assert (TYPE_PTR_P (TREE_TYPE (function)));
353   fntype = TREE_TYPE (TREE_TYPE (function));
354   gcc_assert (TREE_CODE (fntype) == FUNCTION_TYPE
355               || TREE_CODE (fntype) == METHOD_TYPE);
356   result_type = TREE_TYPE (fntype);
357   /* An rvalue has no cv-qualifiers.  */
358   if (SCALAR_TYPE_P (result_type) || VOID_TYPE_P (result_type))
359     result_type = cv_unqualified (result_type);
360
361   function = build_call_array_loc (input_location,
362                                    result_type, function, n, argarray);
363   set_flags_from_callee (function);
364
365   decl = get_callee_fndecl (function);
366
367   if (decl && !TREE_USED (decl))
368     {
369       /* We invoke build_call directly for several library
370          functions.  These may have been declared normally if
371          we're building libgcc, so we can't just check
372          DECL_ARTIFICIAL.  */
373       gcc_assert (DECL_ARTIFICIAL (decl)
374                   || !strncmp (IDENTIFIER_POINTER (DECL_NAME (decl)),
375                                "__", 2));
376       mark_used (decl);
377     }
378
379   require_complete_eh_spec_types (fntype, decl);
380
381   TREE_HAS_CONSTRUCTOR (function) = (decl && DECL_CONSTRUCTOR_P (decl));
382
383   /* Don't pass empty class objects by value.  This is useful
384      for tags in STL, which are used to control overload resolution.
385      We don't need to handle other cases of copying empty classes.  */
386   if (! decl || ! DECL_BUILT_IN (decl))
387     for (i = 0; i < n; i++)
388       {
389         tree arg = CALL_EXPR_ARG (function, i);
390         if (is_empty_class (TREE_TYPE (arg))
391             && ! TREE_ADDRESSABLE (TREE_TYPE (arg)))
392           {
393             tree t = build0 (EMPTY_CLASS_EXPR, TREE_TYPE (arg));
394             arg = build2 (COMPOUND_EXPR, TREE_TYPE (t), arg, t);
395             CALL_EXPR_ARG (function, i) = arg;
396           }
397       }
398
399   return function;
400 }
401
402 /* New overloading code.  */
403
404 struct z_candidate;
405
406 struct candidate_warning {
407   z_candidate *loser;
408   candidate_warning *next;
409 };
410
411 /* Information for providing diagnostics about why overloading failed.  */
412
413 enum rejection_reason_code {
414   rr_none,
415   rr_arity,
416   rr_explicit_conversion,
417   rr_template_conversion,
418   rr_arg_conversion,
419   rr_bad_arg_conversion,
420   rr_template_unification,
421   rr_invalid_copy,
422   rr_inherited_ctor,
423   rr_constraint_failure
424 };
425
426 struct conversion_info {
427   /* The index of the argument, 0-based.  */
428   int n_arg;
429   /* The actual argument or its type.  */
430   tree from;
431   /* The type of the parameter.  */
432   tree to_type;
433 };
434   
435 struct rejection_reason {
436   enum rejection_reason_code code;
437   union {
438     /* Information about an arity mismatch.  */
439     struct {
440       /* The expected number of arguments.  */
441       int expected;
442       /* The actual number of arguments in the call.  */
443       int actual;
444       /* Whether the call was a varargs call.  */
445       bool call_varargs_p;
446     } arity;
447     /* Information about an argument conversion mismatch.  */
448     struct conversion_info conversion;
449     /* Same, but for bad argument conversions.  */
450     struct conversion_info bad_conversion;
451     /* Information about template unification failures.  These are the
452        parameters passed to fn_type_unification.  */
453     struct {
454       tree tmpl;
455       tree explicit_targs;
456       int num_targs;
457       const tree *args;
458       unsigned int nargs;
459       tree return_type;
460       unification_kind_t strict;
461       int flags;
462     } template_unification;
463     /* Information about template instantiation failures.  These are the
464        parameters passed to instantiate_template.  */
465     struct {
466       tree tmpl;
467       tree targs;
468     } template_instantiation;
469   } u;
470 };
471
472 struct z_candidate {
473   /* The FUNCTION_DECL that will be called if this candidate is
474      selected by overload resolution.  */
475   tree fn;
476   /* If not NULL_TREE, the first argument to use when calling this
477      function.  */
478   tree first_arg;
479   /* The rest of the arguments to use when calling this function.  If
480      there are no further arguments this may be NULL or it may be an
481      empty vector.  */
482   const vec<tree, va_gc> *args;
483   /* The implicit conversion sequences for each of the arguments to
484      FN.  */
485   conversion **convs;
486   /* The number of implicit conversion sequences.  */
487   size_t num_convs;
488   /* If FN is a user-defined conversion, the standard conversion
489      sequence from the type returned by FN to the desired destination
490      type.  */
491   conversion *second_conv;
492   struct rejection_reason *reason;
493   /* If FN is a member function, the binfo indicating the path used to
494      qualify the name of FN at the call site.  This path is used to
495      determine whether or not FN is accessible if it is selected by
496      overload resolution.  The DECL_CONTEXT of FN will always be a
497      (possibly improper) base of this binfo.  */
498   tree access_path;
499   /* If FN is a non-static member function, the binfo indicating the
500      subobject to which the `this' pointer should be converted if FN
501      is selected by overload resolution.  The type pointed to by
502      the `this' pointer must correspond to the most derived class
503      indicated by the CONVERSION_PATH.  */
504   tree conversion_path;
505   tree template_decl;
506   tree explicit_targs;
507   candidate_warning *warnings;
508   z_candidate *next;
509   int viable;
510
511   /* The flags active in add_candidate.  */
512   int flags;
513 };
514
515 /* Returns true iff T is a null pointer constant in the sense of
516    [conv.ptr].  */
517
518 bool
519 null_ptr_cst_p (tree t)
520 {
521   tree type = TREE_TYPE (t);
522
523   /* [conv.ptr]
524
525      A null pointer constant is an integral constant expression
526      (_expr.const_) rvalue of integer type that evaluates to zero or
527      an rvalue of type std::nullptr_t. */
528   if (NULLPTR_TYPE_P (type))
529     return true;
530
531   if (cxx_dialect >= cxx11)
532     {
533       STRIP_ANY_LOCATION_WRAPPER (t);
534
535       /* Core issue 903 says only literal 0 is a null pointer constant.  */
536       if (TREE_CODE (type) == INTEGER_TYPE
537           && !char_type_p (type)
538           && TREE_CODE (t) == INTEGER_CST
539           && integer_zerop (t)
540           && !TREE_OVERFLOW (t))
541         return true;
542     }
543   else if (CP_INTEGRAL_TYPE_P (type))
544     {
545       t = fold_non_dependent_expr (t);
546       STRIP_NOPS (t);
547       if (integer_zerop (t) && !TREE_OVERFLOW (t))
548         return true;
549     }
550
551   return false;
552 }
553
554 /* Returns true iff T is a null member pointer value (4.11).  */
555
556 bool
557 null_member_pointer_value_p (tree t)
558 {
559   tree type = TREE_TYPE (t);
560   if (!type)
561     return false;
562   else if (TYPE_PTRMEMFUNC_P (type))
563     return (TREE_CODE (t) == CONSTRUCTOR
564             && integer_zerop (CONSTRUCTOR_ELT (t, 0)->value));
565   else if (TYPE_PTRDATAMEM_P (type))
566     return integer_all_onesp (t);
567   else
568     return false;
569 }
570
571 /* Returns nonzero if PARMLIST consists of only default parms,
572    ellipsis, and/or undeduced parameter packs.  */
573
574 bool
575 sufficient_parms_p (const_tree parmlist)
576 {
577   for (; parmlist && parmlist != void_list_node;
578        parmlist = TREE_CHAIN (parmlist))
579     if (!TREE_PURPOSE (parmlist)
580         && !PACK_EXPANSION_P (TREE_VALUE (parmlist)))
581       return false;
582   return true;
583 }
584
585 /* Allocate N bytes of memory from the conversion obstack.  The memory
586    is zeroed before being returned.  */
587
588 static void *
589 conversion_obstack_alloc (size_t n)
590 {
591   void *p;
592   if (!conversion_obstack_initialized)
593     {
594       gcc_obstack_init (&conversion_obstack);
595       conversion_obstack_initialized = true;
596     }
597   p = obstack_alloc (&conversion_obstack, n);
598   memset (p, 0, n);
599   return p;
600 }
601
602 /* Allocate rejection reasons.  */
603
604 static struct rejection_reason *
605 alloc_rejection (enum rejection_reason_code code)
606 {
607   struct rejection_reason *p;
608   p = (struct rejection_reason *) conversion_obstack_alloc (sizeof *p);
609   p->code = code;
610   return p;
611 }
612
613 static struct rejection_reason *
614 arity_rejection (tree first_arg, int expected, int actual)
615 {
616   struct rejection_reason *r = alloc_rejection (rr_arity);
617   int adjust = first_arg != NULL_TREE;
618   r->u.arity.expected = expected - adjust;
619   r->u.arity.actual = actual - adjust;
620   return r;
621 }
622
623 static struct rejection_reason *
624 arg_conversion_rejection (tree first_arg, int n_arg, tree from, tree to)
625 {
626   struct rejection_reason *r = alloc_rejection (rr_arg_conversion);
627   int adjust = first_arg != NULL_TREE;
628   r->u.conversion.n_arg = n_arg - adjust;
629   r->u.conversion.from = from;
630   r->u.conversion.to_type = to;
631   return r;
632 }
633
634 static struct rejection_reason *
635 bad_arg_conversion_rejection (tree first_arg, int n_arg, tree from, tree to)
636 {
637   struct rejection_reason *r = alloc_rejection (rr_bad_arg_conversion);
638   int adjust = first_arg != NULL_TREE;
639   r->u.bad_conversion.n_arg = n_arg - adjust;
640   r->u.bad_conversion.from = from;
641   r->u.bad_conversion.to_type = to;
642   return r;
643 }
644
645 static struct rejection_reason *
646 explicit_conversion_rejection (tree from, tree to)
647 {
648   struct rejection_reason *r = alloc_rejection (rr_explicit_conversion);
649   r->u.conversion.n_arg = 0;
650   r->u.conversion.from = from;
651   r->u.conversion.to_type = to;
652   return r;
653 }
654
655 static struct rejection_reason *
656 template_conversion_rejection (tree from, tree to)
657 {
658   struct rejection_reason *r = alloc_rejection (rr_template_conversion);
659   r->u.conversion.n_arg = 0;
660   r->u.conversion.from = from;
661   r->u.conversion.to_type = to;
662   return r;
663 }
664
665 static struct rejection_reason *
666 template_unification_rejection (tree tmpl, tree explicit_targs, tree targs,
667                                 const tree *args, unsigned int nargs,
668                                 tree return_type, unification_kind_t strict,
669                                 int flags)
670 {
671   size_t args_n_bytes = sizeof (*args) * nargs;
672   tree *args1 = (tree *) conversion_obstack_alloc (args_n_bytes);
673   struct rejection_reason *r = alloc_rejection (rr_template_unification);
674   r->u.template_unification.tmpl = tmpl;
675   r->u.template_unification.explicit_targs = explicit_targs;
676   r->u.template_unification.num_targs = TREE_VEC_LENGTH (targs);
677   /* Copy args to our own storage.  */
678   memcpy (args1, args, args_n_bytes);
679   r->u.template_unification.args = args1;
680   r->u.template_unification.nargs = nargs;
681   r->u.template_unification.return_type = return_type;
682   r->u.template_unification.strict = strict;
683   r->u.template_unification.flags = flags;
684   return r;
685 }
686
687 static struct rejection_reason *
688 template_unification_error_rejection (void)
689 {
690   return alloc_rejection (rr_template_unification);
691 }
692
693 static struct rejection_reason *
694 invalid_copy_with_fn_template_rejection (void)
695 {
696   struct rejection_reason *r = alloc_rejection (rr_invalid_copy);
697   return r;
698 }
699
700 static struct rejection_reason *
701 inherited_ctor_rejection (void)
702 {
703   struct rejection_reason *r = alloc_rejection (rr_inherited_ctor);
704   return r;
705 }
706
707 // Build a constraint failure record, saving information into the
708 // template_instantiation field of the rejection. If FN is not a template
709 // declaration, the TMPL member is the FN declaration and TARGS is empty.
710
711 static struct rejection_reason *
712 constraint_failure (tree fn)
713 {
714   struct rejection_reason *r = alloc_rejection (rr_constraint_failure);
715   if (tree ti = DECL_TEMPLATE_INFO (fn))
716     {
717       r->u.template_instantiation.tmpl = TI_TEMPLATE (ti);
718       r->u.template_instantiation.targs = TI_ARGS (ti);
719     }
720   else
721     {
722       r->u.template_instantiation.tmpl = fn;
723       r->u.template_instantiation.targs = NULL_TREE;
724     }
725   return r;
726 }
727
728 /* Dynamically allocate a conversion.  */
729
730 static conversion *
731 alloc_conversion (conversion_kind kind)
732 {
733   conversion *c;
734   c = (conversion *) conversion_obstack_alloc (sizeof (conversion));
735   c->kind = kind;
736   return c;
737 }
738
739 /* Make sure that all memory on the conversion obstack has been
740    freed.  */
741
742 void
743 validate_conversion_obstack (void)
744 {
745   if (conversion_obstack_initialized)
746     gcc_assert ((obstack_next_free (&conversion_obstack)
747                  == obstack_base (&conversion_obstack)));
748 }
749
750 /* Dynamically allocate an array of N conversions.  */
751
752 static conversion **
753 alloc_conversions (size_t n)
754 {
755   return (conversion **) conversion_obstack_alloc (n * sizeof (conversion *));
756 }
757
758 static conversion *
759 build_conv (conversion_kind code, tree type, conversion *from)
760 {
761   conversion *t;
762   conversion_rank rank = CONVERSION_RANK (from);
763
764   /* Note that the caller is responsible for filling in t->cand for
765      user-defined conversions.  */
766   t = alloc_conversion (code);
767   t->type = type;
768   t->u.next = from;
769
770   switch (code)
771     {
772     case ck_ptr:
773     case ck_pmem:
774     case ck_base:
775     case ck_std:
776       if (rank < cr_std)
777         rank = cr_std;
778       break;
779
780     case ck_qual:
781     case ck_fnptr:
782       if (rank < cr_exact)
783         rank = cr_exact;
784       break;
785
786     default:
787       break;
788     }
789   t->rank = rank;
790   t->user_conv_p = (code == ck_user || from->user_conv_p);
791   t->bad_p = from->bad_p;
792   t->base_p = false;
793   return t;
794 }
795
796 /* Represent a conversion from CTOR, a braced-init-list, to TYPE, a
797    specialization of std::initializer_list<T>, if such a conversion is
798    possible.  */
799
800 static conversion *
801 build_list_conv (tree type, tree ctor, int flags, tsubst_flags_t complain)
802 {
803   tree elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (type), 0);
804   unsigned len = CONSTRUCTOR_NELTS (ctor);
805   conversion **subconvs = alloc_conversions (len);
806   conversion *t;
807   unsigned i;
808   tree val;
809
810   /* Within a list-initialization we can have more user-defined
811      conversions.  */
812   flags &= ~LOOKUP_NO_CONVERSION;
813   /* But no narrowing conversions.  */
814   flags |= LOOKUP_NO_NARROWING;
815
816   /* Can't make an array of these types.  */
817   if (TREE_CODE (elttype) == REFERENCE_TYPE
818       || TREE_CODE (elttype) == FUNCTION_TYPE
819       || VOID_TYPE_P (elttype))
820     return NULL;
821
822   FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor), i, val)
823     {
824       conversion *sub
825         = implicit_conversion (elttype, TREE_TYPE (val), val,
826                                false, flags, complain);
827       if (sub == NULL)
828         return NULL;
829
830       subconvs[i] = sub;
831     }
832
833   t = alloc_conversion (ck_list);
834   t->type = type;
835   t->u.list = subconvs;
836   t->rank = cr_exact;
837
838   for (i = 0; i < len; ++i)
839     {
840       conversion *sub = subconvs[i];
841       if (sub->rank > t->rank)
842         t->rank = sub->rank;
843       if (sub->user_conv_p)
844         t->user_conv_p = true;
845       if (sub->bad_p)
846         t->bad_p = true;
847     }
848
849   return t;
850 }
851
852 /* Return the next conversion of the conversion chain (if applicable),
853    or NULL otherwise.  Please use this function instead of directly
854    accessing fields of struct conversion.  */
855
856 static conversion *
857 next_conversion (conversion *conv)
858 {
859   if (conv == NULL
860       || conv->kind == ck_identity
861       || conv->kind == ck_ambig
862       || conv->kind == ck_list)
863     return NULL;
864   return conv->u.next;
865 }
866
867 /* Subroutine of build_aggr_conv: check whether CTOR, a braced-init-list,
868    is a valid aggregate initializer for array type ATYPE.  */
869
870 static bool
871 can_convert_array (tree atype, tree ctor, int flags, tsubst_flags_t complain)
872 {
873   unsigned i;
874   tree elttype = TREE_TYPE (atype);
875   for (i = 0; i < CONSTRUCTOR_NELTS (ctor); ++i)
876     {
877       tree val = CONSTRUCTOR_ELT (ctor, i)->value;
878       bool ok;
879       if (TREE_CODE (elttype) == ARRAY_TYPE
880           && TREE_CODE (val) == CONSTRUCTOR)
881         ok = can_convert_array (elttype, val, flags, complain);
882       else
883         ok = can_convert_arg (elttype, TREE_TYPE (val), val, flags,
884                               complain);
885       if (!ok)
886         return false;
887     }
888   return true;
889 }
890
891 /* Represent a conversion from CTOR, a braced-init-list, to TYPE, an
892    aggregate class, if such a conversion is possible.  */
893
894 static conversion *
895 build_aggr_conv (tree type, tree ctor, int flags, tsubst_flags_t complain)
896 {
897   unsigned HOST_WIDE_INT i = 0;
898   conversion *c;
899   tree field = next_initializable_field (TYPE_FIELDS (type));
900   tree empty_ctor = NULL_TREE;
901
902   /* We already called reshape_init in implicit_conversion.  */
903
904   /* The conversions within the init-list aren't affected by the enclosing
905      context; they're always simple copy-initialization.  */
906   flags = LOOKUP_IMPLICIT|LOOKUP_NO_NARROWING;
907
908   for (; field; field = next_initializable_field (DECL_CHAIN (field)))
909     {
910       tree ftype = TREE_TYPE (field);
911       tree val;
912       bool ok;
913
914       if (i < CONSTRUCTOR_NELTS (ctor))
915         val = CONSTRUCTOR_ELT (ctor, i)->value;
916       else if (DECL_INITIAL (field))
917         val = get_nsdmi (field, /*ctor*/false, complain);
918       else if (TREE_CODE (ftype) == REFERENCE_TYPE)
919         /* Value-initialization of reference is ill-formed.  */
920         return NULL;
921       else
922         {
923           if (empty_ctor == NULL_TREE)
924             empty_ctor = build_constructor (init_list_type_node, NULL);
925           val = empty_ctor;
926         }
927       ++i;
928
929       if (TREE_CODE (ftype) == ARRAY_TYPE
930           && TREE_CODE (val) == CONSTRUCTOR)
931         ok = can_convert_array (ftype, val, flags, complain);
932       else
933         ok = can_convert_arg (ftype, TREE_TYPE (val), val, flags,
934                               complain);
935
936       if (!ok)
937         return NULL;
938
939       if (TREE_CODE (type) == UNION_TYPE)
940         break;
941     }
942
943   if (i < CONSTRUCTOR_NELTS (ctor))
944     return NULL;
945
946   c = alloc_conversion (ck_aggr);
947   c->type = type;
948   c->rank = cr_exact;
949   c->user_conv_p = true;
950   c->check_narrowing = true;
951   c->u.next = NULL;
952   return c;
953 }
954
955 /* Represent a conversion from CTOR, a braced-init-list, to TYPE, an
956    array type, if such a conversion is possible.  */
957
958 static conversion *
959 build_array_conv (tree type, tree ctor, int flags, tsubst_flags_t complain)
960 {
961   conversion *c;
962   unsigned HOST_WIDE_INT len = CONSTRUCTOR_NELTS (ctor);
963   tree elttype = TREE_TYPE (type);
964   unsigned i;
965   tree val;
966   bool bad = false;
967   bool user = false;
968   enum conversion_rank rank = cr_exact;
969
970   /* We might need to propagate the size from the element to the array.  */
971   complete_type (type);
972
973   if (TYPE_DOMAIN (type)
974       && !variably_modified_type_p (TYPE_DOMAIN (type), NULL_TREE))
975     {
976       unsigned HOST_WIDE_INT alen = tree_to_uhwi (array_type_nelts_top (type));
977       if (alen < len)
978         return NULL;
979     }
980
981   flags = LOOKUP_IMPLICIT|LOOKUP_NO_NARROWING;
982
983   FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor), i, val)
984     {
985       conversion *sub
986         = implicit_conversion (elttype, TREE_TYPE (val), val,
987                                false, flags, complain);
988       if (sub == NULL)
989         return NULL;
990
991       if (sub->rank > rank)
992         rank = sub->rank;
993       if (sub->user_conv_p)
994         user = true;
995       if (sub->bad_p)
996         bad = true;
997     }
998
999   c = alloc_conversion (ck_aggr);
1000   c->type = type;
1001   c->rank = rank;
1002   c->user_conv_p = user;
1003   c->bad_p = bad;
1004   c->u.next = NULL;
1005   return c;
1006 }
1007
1008 /* Represent a conversion from CTOR, a braced-init-list, to TYPE, a
1009    complex type, if such a conversion is possible.  */
1010
1011 static conversion *
1012 build_complex_conv (tree type, tree ctor, int flags,
1013                     tsubst_flags_t complain)
1014 {
1015   conversion *c;
1016   unsigned HOST_WIDE_INT len = CONSTRUCTOR_NELTS (ctor);
1017   tree elttype = TREE_TYPE (type);
1018   unsigned i;
1019   tree val;
1020   bool bad = false;
1021   bool user = false;
1022   enum conversion_rank rank = cr_exact;
1023
1024   if (len != 2)
1025     return NULL;
1026
1027   flags = LOOKUP_IMPLICIT|LOOKUP_NO_NARROWING;
1028
1029   FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor), i, val)
1030     {
1031       conversion *sub
1032         = implicit_conversion (elttype, TREE_TYPE (val), val,
1033                                false, flags, complain);
1034       if (sub == NULL)
1035         return NULL;
1036
1037       if (sub->rank > rank)
1038         rank = sub->rank;
1039       if (sub->user_conv_p)
1040         user = true;
1041       if (sub->bad_p)
1042         bad = true;
1043     }
1044
1045   c = alloc_conversion (ck_aggr);
1046   c->type = type;
1047   c->rank = rank;
1048   c->user_conv_p = user;
1049   c->bad_p = bad;
1050   c->u.next = NULL;
1051   return c;
1052 }
1053
1054 /* Build a representation of the identity conversion from EXPR to
1055    itself.  The TYPE should match the type of EXPR, if EXPR is non-NULL.  */
1056
1057 static conversion *
1058 build_identity_conv (tree type, tree expr)
1059 {
1060   conversion *c;
1061
1062   c = alloc_conversion (ck_identity);
1063   c->type = type;
1064   c->u.expr = expr;
1065
1066   return c;
1067 }
1068
1069 /* Converting from EXPR to TYPE was ambiguous in the sense that there
1070    were multiple user-defined conversions to accomplish the job.
1071    Build a conversion that indicates that ambiguity.  */
1072
1073 static conversion *
1074 build_ambiguous_conv (tree type, tree expr)
1075 {
1076   conversion *c;
1077
1078   c = alloc_conversion (ck_ambig);
1079   c->type = type;
1080   c->u.expr = expr;
1081
1082   return c;
1083 }
1084
1085 tree
1086 strip_top_quals (tree t)
1087 {
1088   if (TREE_CODE (t) == ARRAY_TYPE)
1089     return t;
1090   return cp_build_qualified_type (t, 0);
1091 }
1092
1093 /* Returns the standard conversion path (see [conv]) from type FROM to type
1094    TO, if any.  For proper handling of null pointer constants, you must
1095    also pass the expression EXPR to convert from.  If C_CAST_P is true,
1096    this conversion is coming from a C-style cast.  */
1097
1098 static conversion *
1099 standard_conversion (tree to, tree from, tree expr, bool c_cast_p,
1100                      int flags, tsubst_flags_t complain)
1101 {
1102   enum tree_code fcode, tcode;
1103   conversion *conv;
1104   bool fromref = false;
1105   tree qualified_to;
1106
1107   to = non_reference (to);
1108   if (TREE_CODE (from) == REFERENCE_TYPE)
1109     {
1110       fromref = true;
1111       from = TREE_TYPE (from);
1112     }
1113   qualified_to = to;
1114   to = strip_top_quals (to);
1115   from = strip_top_quals (from);
1116
1117   if (expr && type_unknown_p (expr))
1118     {
1119       if (TYPE_PTRFN_P (to) || TYPE_PTRMEMFUNC_P (to))
1120         {
1121           tsubst_flags_t tflags = tf_conv;
1122           expr = instantiate_type (to, expr, tflags);
1123           if (expr == error_mark_node)
1124             return NULL;
1125           from = TREE_TYPE (expr);
1126         }
1127       else if (TREE_CODE (to) == BOOLEAN_TYPE)
1128         {
1129           /* Necessary for eg, TEMPLATE_ID_EXPRs (c++/50961).  */
1130           expr = resolve_nondeduced_context (expr, complain);
1131           from = TREE_TYPE (expr);
1132         }
1133     }
1134
1135   fcode = TREE_CODE (from);
1136   tcode = TREE_CODE (to);
1137
1138   conv = build_identity_conv (from, expr);
1139   if (fcode == FUNCTION_TYPE || fcode == ARRAY_TYPE)
1140     {
1141       from = type_decays_to (from);
1142       fcode = TREE_CODE (from);
1143       /* Tell convert_like_real that we're using the address.  */
1144       conv->rvaluedness_matches_p = true;
1145       conv = build_conv (ck_lvalue, from, conv);
1146     }
1147   /* Wrapping a ck_rvalue around a class prvalue (as a result of using
1148      obvalue_p) seems odd, since it's already a prvalue, but that's how we
1149      express the copy constructor call required by copy-initialization.  */
1150   else if (fromref || (expr && obvalue_p (expr)))
1151     {
1152       if (expr)
1153         {
1154           tree bitfield_type;
1155           bitfield_type = is_bitfield_expr_with_lowered_type (expr);
1156           if (bitfield_type)
1157             {
1158               from = strip_top_quals (bitfield_type);
1159               fcode = TREE_CODE (from);
1160             }
1161         }
1162       conv = build_conv (ck_rvalue, from, conv);
1163       if (flags & LOOKUP_PREFER_RVALUE)
1164         /* Tell convert_like_real to set LOOKUP_PREFER_RVALUE.  */
1165         conv->rvaluedness_matches_p = true;
1166     }
1167
1168    /* Allow conversion between `__complex__' data types.  */
1169   if (tcode == COMPLEX_TYPE && fcode == COMPLEX_TYPE)
1170     {
1171       /* The standard conversion sequence to convert FROM to TO is
1172          the standard conversion sequence to perform componentwise
1173          conversion.  */
1174       conversion *part_conv = standard_conversion
1175         (TREE_TYPE (to), TREE_TYPE (from), NULL_TREE, c_cast_p, flags,
1176          complain);
1177
1178       if (part_conv)
1179         {
1180           conv = build_conv (part_conv->kind, to, conv);
1181           conv->rank = part_conv->rank;
1182         }
1183       else
1184         conv = NULL;
1185
1186       return conv;
1187     }
1188
1189   if (same_type_p (from, to))
1190     {
1191       if (CLASS_TYPE_P (to) && conv->kind == ck_rvalue)
1192         conv->type = qualified_to;
1193       return conv;
1194     }
1195
1196   /* [conv.ptr]
1197      A null pointer constant can be converted to a pointer type; ... A
1198      null pointer constant of integral type can be converted to an
1199      rvalue of type std::nullptr_t. */
1200   if ((tcode == POINTER_TYPE || TYPE_PTRMEM_P (to)
1201        || NULLPTR_TYPE_P (to))
1202       && ((expr && null_ptr_cst_p (expr))
1203           || NULLPTR_TYPE_P (from)))
1204     conv = build_conv (ck_std, to, conv);
1205   else if ((tcode == INTEGER_TYPE && fcode == POINTER_TYPE)
1206            || (tcode == POINTER_TYPE && fcode == INTEGER_TYPE))
1207     {
1208       /* For backwards brain damage compatibility, allow interconversion of
1209          pointers and integers with a pedwarn.  */
1210       conv = build_conv (ck_std, to, conv);
1211       conv->bad_p = true;
1212     }
1213   else if (UNSCOPED_ENUM_P (to) && fcode == INTEGER_TYPE)
1214     {
1215       /* For backwards brain damage compatibility, allow interconversion of
1216          enums and integers with a pedwarn.  */
1217       conv = build_conv (ck_std, to, conv);
1218       conv->bad_p = true;
1219     }
1220   else if ((tcode == POINTER_TYPE && fcode == POINTER_TYPE)
1221            || (TYPE_PTRDATAMEM_P (to) && TYPE_PTRDATAMEM_P (from)))
1222     {
1223       tree to_pointee;
1224       tree from_pointee;
1225
1226       if (tcode == POINTER_TYPE)
1227         {
1228           to_pointee = TREE_TYPE (to);
1229           from_pointee = TREE_TYPE (from);
1230
1231           /* Since this is the target of a pointer, it can't have function
1232              qualifiers, so any TYPE_QUALS must be for attributes const or
1233              noreturn.  Strip them.  */
1234           if (TREE_CODE (to_pointee) == FUNCTION_TYPE
1235               && TYPE_QUALS (to_pointee))
1236             to_pointee = build_qualified_type (to_pointee, TYPE_UNQUALIFIED);
1237           if (TREE_CODE (from_pointee) == FUNCTION_TYPE
1238               && TYPE_QUALS (from_pointee))
1239             from_pointee = build_qualified_type (from_pointee, TYPE_UNQUALIFIED);
1240         }
1241       else
1242         {
1243           to_pointee = TYPE_PTRMEM_POINTED_TO_TYPE (to);
1244           from_pointee = TYPE_PTRMEM_POINTED_TO_TYPE (from);
1245         }
1246
1247       if (tcode == POINTER_TYPE
1248           && same_type_ignoring_top_level_qualifiers_p (from_pointee,
1249                                                         to_pointee))
1250         ;
1251       else if (VOID_TYPE_P (to_pointee)
1252                && !TYPE_PTRDATAMEM_P (from)
1253                && TREE_CODE (from_pointee) != FUNCTION_TYPE)
1254         {
1255           tree nfrom = TREE_TYPE (from);
1256           /* Don't try to apply restrict to void.  */
1257           int quals = cp_type_quals (nfrom) & ~TYPE_QUAL_RESTRICT;
1258           from_pointee = cp_build_qualified_type (void_type_node, quals);
1259           from = build_pointer_type (from_pointee);
1260           conv = build_conv (ck_ptr, from, conv);
1261         }
1262       else if (TYPE_PTRDATAMEM_P (from))
1263         {
1264           tree fbase = TYPE_PTRMEM_CLASS_TYPE (from);
1265           tree tbase = TYPE_PTRMEM_CLASS_TYPE (to);
1266
1267           if (same_type_p (fbase, tbase))
1268             /* No base conversion needed.  */;
1269           else if (DERIVED_FROM_P (fbase, tbase)
1270                    && (same_type_ignoring_top_level_qualifiers_p
1271                        (from_pointee, to_pointee)))
1272             {
1273               from = build_ptrmem_type (tbase, from_pointee);
1274               conv = build_conv (ck_pmem, from, conv);
1275             }
1276           else
1277             return NULL;
1278         }
1279       else if (CLASS_TYPE_P (from_pointee)
1280                && CLASS_TYPE_P (to_pointee)
1281                /* [conv.ptr]
1282
1283                   An rvalue of type "pointer to cv D," where D is a
1284                   class type, can be converted to an rvalue of type
1285                   "pointer to cv B," where B is a base class (clause
1286                   _class.derived_) of D.  If B is an inaccessible
1287                   (clause _class.access_) or ambiguous
1288                   (_class.member.lookup_) base class of D, a program
1289                   that necessitates this conversion is ill-formed.
1290                   Therefore, we use DERIVED_FROM_P, and do not check
1291                   access or uniqueness.  */
1292                && DERIVED_FROM_P (to_pointee, from_pointee))
1293         {
1294           from_pointee
1295             = cp_build_qualified_type (to_pointee,
1296                                        cp_type_quals (from_pointee));
1297           from = build_pointer_type (from_pointee);
1298           conv = build_conv (ck_ptr, from, conv);
1299           conv->base_p = true;
1300         }
1301
1302       if (same_type_p (from, to))
1303         /* OK */;
1304       else if (c_cast_p && comp_ptr_ttypes_const (to, from))
1305         /* In a C-style cast, we ignore CV-qualification because we
1306            are allowed to perform a static_cast followed by a
1307            const_cast.  */
1308         conv = build_conv (ck_qual, to, conv);
1309       else if (!c_cast_p && comp_ptr_ttypes (to_pointee, from_pointee))
1310         conv = build_conv (ck_qual, to, conv);
1311       else if (expr && string_conv_p (to, expr, 0))
1312         /* converting from string constant to char *.  */
1313         conv = build_conv (ck_qual, to, conv);
1314       else if (fnptr_conv_p (to, from))
1315         conv = build_conv (ck_fnptr, to, conv);
1316       /* Allow conversions among compatible ObjC pointer types (base
1317          conversions have been already handled above).  */
1318       else if (c_dialect_objc ()
1319                && objc_compare_types (to, from, -4, NULL_TREE))
1320         conv = build_conv (ck_ptr, to, conv);
1321       else if (ptr_reasonably_similar (to_pointee, from_pointee))
1322         {
1323           conv = build_conv (ck_ptr, to, conv);
1324           conv->bad_p = true;
1325         }
1326       else
1327         return NULL;
1328
1329       from = to;
1330     }
1331   else if (TYPE_PTRMEMFUNC_P (to) && TYPE_PTRMEMFUNC_P (from))
1332     {
1333       tree fromfn = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (from));
1334       tree tofn = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (to));
1335       tree fbase = class_of_this_parm (fromfn);
1336       tree tbase = class_of_this_parm (tofn);
1337
1338       if (!DERIVED_FROM_P (fbase, tbase))
1339         return NULL;
1340
1341       tree fstat = static_fn_type (fromfn);
1342       tree tstat = static_fn_type (tofn);
1343       if (same_type_p (tstat, fstat)
1344           || fnptr_conv_p (tstat, fstat))
1345         /* OK */;
1346       else
1347         return NULL;
1348
1349       if (!same_type_p (fbase, tbase))
1350         {
1351           from = build_memfn_type (fstat,
1352                                    tbase,
1353                                    cp_type_quals (tbase),
1354                                    type_memfn_rqual (tofn));
1355           from = build_ptrmemfunc_type (build_pointer_type (from));
1356           conv = build_conv (ck_pmem, from, conv);
1357           conv->base_p = true;
1358         }
1359       if (fnptr_conv_p (tstat, fstat))
1360         conv = build_conv (ck_fnptr, to, conv);
1361     }
1362   else if (tcode == BOOLEAN_TYPE)
1363     {
1364       /* [conv.bool]
1365
1366           A prvalue of arithmetic, unscoped enumeration, pointer, or pointer
1367           to member type can be converted to a prvalue of type bool. ...
1368           For direct-initialization (8.5 [dcl.init]), a prvalue of type
1369           std::nullptr_t can be converted to a prvalue of type bool;  */
1370       if (ARITHMETIC_TYPE_P (from)
1371           || UNSCOPED_ENUM_P (from)
1372           || fcode == POINTER_TYPE
1373           || TYPE_PTRMEM_P (from)
1374           || NULLPTR_TYPE_P (from))
1375         {
1376           conv = build_conv (ck_std, to, conv);
1377           if (fcode == POINTER_TYPE
1378               || TYPE_PTRDATAMEM_P (from)
1379               || (TYPE_PTRMEMFUNC_P (from)
1380                   && conv->rank < cr_pbool)
1381               || NULLPTR_TYPE_P (from))
1382             conv->rank = cr_pbool;
1383           if (NULLPTR_TYPE_P (from) && (flags & LOOKUP_ONLYCONVERTING))
1384             conv->bad_p = true;
1385           return conv;
1386         }
1387
1388       return NULL;
1389     }
1390   /* We don't check for ENUMERAL_TYPE here because there are no standard
1391      conversions to enum type.  */
1392   /* As an extension, allow conversion to complex type.  */
1393   else if (ARITHMETIC_TYPE_P (to))
1394     {
1395       if (! (INTEGRAL_CODE_P (fcode)
1396              || (fcode == REAL_TYPE && !(flags & LOOKUP_NO_NON_INTEGRAL)))
1397           || SCOPED_ENUM_P (from))
1398         return NULL;
1399
1400       /* If we're parsing an enum with no fixed underlying type, we're
1401          dealing with an incomplete type, which renders the conversion
1402          ill-formed.  */
1403       if (!COMPLETE_TYPE_P (from))
1404         return NULL;
1405
1406       conv = build_conv (ck_std, to, conv);
1407
1408       /* Give this a better rank if it's a promotion.  */
1409       if (same_type_p (to, type_promotes_to (from))
1410           && next_conversion (conv)->rank <= cr_promotion)
1411         conv->rank = cr_promotion;
1412     }
1413   else if (fcode == VECTOR_TYPE && tcode == VECTOR_TYPE
1414            && vector_types_convertible_p (from, to, false))
1415     return build_conv (ck_std, to, conv);
1416   else if (MAYBE_CLASS_TYPE_P (to) && MAYBE_CLASS_TYPE_P (from)
1417            && is_properly_derived_from (from, to))
1418     {
1419       if (conv->kind == ck_rvalue)
1420         conv = next_conversion (conv);
1421       conv = build_conv (ck_base, to, conv);
1422       /* The derived-to-base conversion indicates the initialization
1423          of a parameter with base type from an object of a derived
1424          type.  A temporary object is created to hold the result of
1425          the conversion unless we're binding directly to a reference.  */
1426       conv->need_temporary_p = !(flags & LOOKUP_NO_TEMP_BIND);
1427     }
1428   else
1429     return NULL;
1430
1431   if (flags & LOOKUP_NO_NARROWING)
1432     conv->check_narrowing = true;
1433
1434   return conv;
1435 }
1436
1437 /* Returns nonzero if T1 is reference-related to T2.  */
1438
1439 bool
1440 reference_related_p (tree t1, tree t2)
1441 {
1442   if (t1 == error_mark_node || t2 == error_mark_node)
1443     return false;
1444
1445   t1 = TYPE_MAIN_VARIANT (t1);
1446   t2 = TYPE_MAIN_VARIANT (t2);
1447
1448   /* [dcl.init.ref]
1449
1450      Given types "cv1 T1" and "cv2 T2," "cv1 T1" is reference-related
1451      to "cv2 T2" if T1 is the same type as T2, or T1 is a base class
1452      of T2.  */
1453   return (same_type_p (t1, t2)
1454           || (CLASS_TYPE_P (t1) && CLASS_TYPE_P (t2)
1455               && DERIVED_FROM_P (t1, t2)));
1456 }
1457
1458 /* Returns nonzero if T1 is reference-compatible with T2.  */
1459
1460 static bool
1461 reference_compatible_p (tree t1, tree t2)
1462 {
1463   /* [dcl.init.ref]
1464
1465      "cv1 T1" is reference compatible with "cv2 T2" if
1466        * T1 is reference-related to T2 or
1467        * T2 is "noexcept function" and T1 is "function", where the
1468          function types are otherwise the same,
1469      and cv1 is the same cv-qualification as, or greater cv-qualification
1470      than, cv2.  */
1471   return ((reference_related_p (t1, t2)
1472            || fnptr_conv_p (t1, t2))
1473           && at_least_as_qualified_p (t1, t2));
1474 }
1475
1476 /* A reference of the indicated TYPE is being bound directly to the
1477    expression represented by the implicit conversion sequence CONV.
1478    Return a conversion sequence for this binding.  */
1479
1480 static conversion *
1481 direct_reference_binding (tree type, conversion *conv)
1482 {
1483   tree t;
1484
1485   gcc_assert (TREE_CODE (type) == REFERENCE_TYPE);
1486   gcc_assert (TREE_CODE (conv->type) != REFERENCE_TYPE);
1487
1488   t = TREE_TYPE (type);
1489
1490   if (conv->kind == ck_identity)
1491     /* Mark the identity conv as to not decay to rvalue.  */
1492     conv->rvaluedness_matches_p = true;
1493
1494   /* [over.ics.rank]
1495
1496      When a parameter of reference type binds directly
1497      (_dcl.init.ref_) to an argument expression, the implicit
1498      conversion sequence is the identity conversion, unless the
1499      argument expression has a type that is a derived class of the
1500      parameter type, in which case the implicit conversion sequence is
1501      a derived-to-base Conversion.
1502
1503      If the parameter binds directly to the result of applying a
1504      conversion function to the argument expression, the implicit
1505      conversion sequence is a user-defined conversion sequence
1506      (_over.ics.user_), with the second standard conversion sequence
1507      either an identity conversion or, if the conversion function
1508      returns an entity of a type that is a derived class of the
1509      parameter type, a derived-to-base conversion.  */
1510   if (is_properly_derived_from (conv->type, t))
1511     {
1512       /* Represent the derived-to-base conversion.  */
1513       conv = build_conv (ck_base, t, conv);
1514       /* We will actually be binding to the base-class subobject in
1515          the derived class, so we mark this conversion appropriately.
1516          That way, convert_like knows not to generate a temporary.  */
1517       conv->need_temporary_p = false;
1518     }
1519
1520   return build_conv (ck_ref_bind, type, conv);
1521 }
1522
1523 /* Returns the conversion path from type FROM to reference type TO for
1524    purposes of reference binding.  For lvalue binding, either pass a
1525    reference type to FROM or an lvalue expression to EXPR.  If the
1526    reference will be bound to a temporary, NEED_TEMPORARY_P is set for
1527    the conversion returned.  If C_CAST_P is true, this
1528    conversion is coming from a C-style cast.  */
1529
1530 static conversion *
1531 reference_binding (tree rto, tree rfrom, tree expr, bool c_cast_p, int flags,
1532                    tsubst_flags_t complain)
1533 {
1534   conversion *conv = NULL;
1535   tree to = TREE_TYPE (rto);
1536   tree from = rfrom;
1537   tree tfrom;
1538   bool related_p;
1539   bool compatible_p;
1540   cp_lvalue_kind gl_kind;
1541   bool is_lvalue;
1542
1543   if (TREE_CODE (to) == FUNCTION_TYPE && expr && type_unknown_p (expr))
1544     {
1545       expr = instantiate_type (to, expr, tf_none);
1546       if (expr == error_mark_node)
1547         return NULL;
1548       from = TREE_TYPE (expr);
1549     }
1550
1551   if (expr && BRACE_ENCLOSED_INITIALIZER_P (expr))
1552     {
1553       maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
1554       /* DR 1288: Otherwise, if the initializer list has a single element
1555          of type E and ... [T's] referenced type is reference-related to E,
1556          the object or reference is initialized from that element... */
1557       if (CONSTRUCTOR_NELTS (expr) == 1)
1558         {
1559           tree elt = CONSTRUCTOR_ELT (expr, 0)->value;
1560           if (error_operand_p (elt))
1561             return NULL;
1562           tree etype = TREE_TYPE (elt);
1563           if (reference_related_p (to, etype))
1564             {
1565               expr = elt;
1566               from = etype;
1567               goto skip;
1568             }
1569         }
1570       /* Otherwise, if T is a reference type, a prvalue temporary of the
1571          type referenced by T is copy-list-initialized or
1572          direct-list-initialized, depending on the kind of initialization
1573          for the reference, and the reference is bound to that temporary. */
1574       conv = implicit_conversion (to, from, expr, c_cast_p,
1575                                   flags|LOOKUP_NO_TEMP_BIND, complain);
1576     skip:;
1577     }
1578
1579   if (TREE_CODE (from) == REFERENCE_TYPE)
1580     {
1581       from = TREE_TYPE (from);
1582       if (!TYPE_REF_IS_RVALUE (rfrom)
1583           || TREE_CODE (from) == FUNCTION_TYPE)
1584         gl_kind = clk_ordinary;
1585       else
1586         gl_kind = clk_rvalueref;
1587     }
1588   else if (expr)
1589     gl_kind = lvalue_kind (expr);
1590   else if (CLASS_TYPE_P (from)
1591            || TREE_CODE (from) == ARRAY_TYPE)
1592     gl_kind = clk_class;
1593   else
1594     gl_kind = clk_none;
1595
1596   /* Don't allow a class prvalue when LOOKUP_NO_TEMP_BIND.  */
1597   if ((flags & LOOKUP_NO_TEMP_BIND)
1598       && (gl_kind & clk_class))
1599     gl_kind = clk_none;
1600
1601   /* Same mask as real_lvalue_p.  */
1602   is_lvalue = gl_kind && !(gl_kind & (clk_rvalueref|clk_class));
1603
1604   tfrom = from;
1605   if ((gl_kind & clk_bitfield) != 0)
1606     tfrom = unlowered_expr_type (expr);
1607
1608   /* Figure out whether or not the types are reference-related and
1609      reference compatible.  We have to do this after stripping
1610      references from FROM.  */
1611   related_p = reference_related_p (to, tfrom);
1612   /* If this is a C cast, first convert to an appropriately qualified
1613      type, so that we can later do a const_cast to the desired type.  */
1614   if (related_p && c_cast_p
1615       && !at_least_as_qualified_p (to, tfrom))
1616     to = cp_build_qualified_type (to, cp_type_quals (tfrom));
1617   compatible_p = reference_compatible_p (to, tfrom);
1618
1619   /* Directly bind reference when target expression's type is compatible with
1620      the reference and expression is an lvalue. In DR391, the wording in
1621      [8.5.3/5 dcl.init.ref] is changed to also require direct bindings for
1622      const and rvalue references to rvalues of compatible class type.
1623      We should also do direct bindings for non-class xvalues.  */
1624   if ((related_p || compatible_p) && gl_kind)
1625     {
1626       /* [dcl.init.ref]
1627
1628          If the initializer expression
1629
1630          -- is an lvalue (but not an lvalue for a bit-field), and "cv1 T1"
1631             is reference-compatible with "cv2 T2,"
1632
1633          the reference is bound directly to the initializer expression
1634          lvalue.
1635
1636          [...]
1637          If the initializer expression is an rvalue, with T2 a class type,
1638          and "cv1 T1" is reference-compatible with "cv2 T2", the reference
1639          is bound to the object represented by the rvalue or to a sub-object
1640          within that object.  */
1641
1642       conv = build_identity_conv (tfrom, expr);
1643       conv = direct_reference_binding (rto, conv);
1644
1645       if (TREE_CODE (rfrom) == REFERENCE_TYPE)
1646         /* Handle rvalue reference to function properly.  */
1647         conv->rvaluedness_matches_p
1648           = (TYPE_REF_IS_RVALUE (rto) == TYPE_REF_IS_RVALUE (rfrom));
1649       else
1650         conv->rvaluedness_matches_p 
1651           = (TYPE_REF_IS_RVALUE (rto) == !is_lvalue);
1652
1653       if ((gl_kind & clk_bitfield) != 0
1654           || ((gl_kind & clk_packed) != 0 && !TYPE_PACKED (to)))
1655         /* For the purposes of overload resolution, we ignore the fact
1656            this expression is a bitfield or packed field. (In particular,
1657            [over.ics.ref] says specifically that a function with a
1658            non-const reference parameter is viable even if the
1659            argument is a bitfield.)
1660
1661            However, when we actually call the function we must create
1662            a temporary to which to bind the reference.  If the
1663            reference is volatile, or isn't const, then we cannot make
1664            a temporary, so we just issue an error when the conversion
1665            actually occurs.  */
1666         conv->need_temporary_p = true;
1667
1668       /* Don't allow binding of lvalues (other than function lvalues) to
1669          rvalue references.  */
1670       if (is_lvalue && TYPE_REF_IS_RVALUE (rto)
1671           && TREE_CODE (to) != FUNCTION_TYPE)
1672         conv->bad_p = true;
1673
1674       /* Nor the reverse.  */
1675       if (!is_lvalue && !TYPE_REF_IS_RVALUE (rto)
1676           && (!CP_TYPE_CONST_NON_VOLATILE_P (to)
1677               || (flags & LOOKUP_NO_RVAL_BIND))
1678           && TREE_CODE (to) != FUNCTION_TYPE)
1679         conv->bad_p = true;
1680
1681       if (!compatible_p)
1682         conv->bad_p = true;
1683
1684       return conv;
1685     }
1686   /* [class.conv.fct] A conversion function is never used to convert a
1687      (possibly cv-qualified) object to the (possibly cv-qualified) same
1688      object type (or a reference to it), to a (possibly cv-qualified) base
1689      class of that type (or a reference to it).... */
1690   else if (CLASS_TYPE_P (from) && !related_p
1691            && !(flags & LOOKUP_NO_CONVERSION))
1692     {
1693       /* [dcl.init.ref]
1694
1695          If the initializer expression
1696
1697          -- has a class type (i.e., T2 is a class type) can be
1698             implicitly converted to an lvalue of type "cv3 T3," where
1699             "cv1 T1" is reference-compatible with "cv3 T3".  (this
1700             conversion is selected by enumerating the applicable
1701             conversion functions (_over.match.ref_) and choosing the
1702             best one through overload resolution.  (_over.match_).
1703
1704         the reference is bound to the lvalue result of the conversion
1705         in the second case.  */
1706       z_candidate *cand = build_user_type_conversion_1 (rto, expr, flags,
1707                                                         complain);
1708       if (cand)
1709         return cand->second_conv;
1710     }
1711
1712   /* From this point on, we conceptually need temporaries, even if we
1713      elide them.  Only the cases above are "direct bindings".  */
1714   if (flags & LOOKUP_NO_TEMP_BIND)
1715     return NULL;
1716
1717   /* [over.ics.rank]
1718
1719      When a parameter of reference type is not bound directly to an
1720      argument expression, the conversion sequence is the one required
1721      to convert the argument expression to the underlying type of the
1722      reference according to _over.best.ics_.  Conceptually, this
1723      conversion sequence corresponds to copy-initializing a temporary
1724      of the underlying type with the argument expression.  Any
1725      difference in top-level cv-qualification is subsumed by the
1726      initialization itself and does not constitute a conversion.  */
1727
1728   /* [dcl.init.ref]
1729
1730      Otherwise, the reference shall be an lvalue reference to a
1731      non-volatile const type, or the reference shall be an rvalue
1732      reference.
1733
1734      We try below to treat this as a bad conversion to improve diagnostics,
1735      but if TO is an incomplete class, we need to reject this conversion
1736      now to avoid unnecessary instantiation.  */
1737   if (!CP_TYPE_CONST_NON_VOLATILE_P (to) && !TYPE_REF_IS_RVALUE (rto)
1738       && !COMPLETE_TYPE_P (to))
1739     return NULL;
1740
1741   /* We're generating a temporary now, but don't bind any more in the
1742      conversion (specifically, don't slice the temporary returned by a
1743      conversion operator).  */
1744   flags |= LOOKUP_NO_TEMP_BIND;
1745
1746   /* Core issue 899: When [copy-]initializing a temporary to be bound
1747      to the first parameter of a copy constructor (12.8) called with
1748      a single argument in the context of direct-initialization,
1749      explicit conversion functions are also considered.
1750
1751      So don't set LOOKUP_ONLYCONVERTING in that case.  */
1752   if (!(flags & LOOKUP_COPY_PARM))
1753     flags |= LOOKUP_ONLYCONVERTING;
1754
1755   if (!conv)
1756     conv = implicit_conversion (to, from, expr, c_cast_p,
1757                                 flags, complain);
1758   if (!conv)
1759     return NULL;
1760
1761   if (conv->user_conv_p)
1762     {
1763       /* If initializing the temporary used a conversion function,
1764          recalculate the second conversion sequence.  */
1765       for (conversion *t = conv; t; t = next_conversion (t))
1766         if (t->kind == ck_user
1767             && DECL_CONV_FN_P (t->cand->fn))
1768           {
1769             tree ftype = TREE_TYPE (TREE_TYPE (t->cand->fn));
1770             int sflags = (flags|LOOKUP_NO_CONVERSION)&~LOOKUP_NO_TEMP_BIND;
1771             conversion *new_second
1772               = reference_binding (rto, ftype, NULL_TREE, c_cast_p,
1773                                    sflags, complain);
1774             if (!new_second)
1775               return NULL;
1776             return merge_conversion_sequences (t, new_second);
1777           }
1778     }
1779
1780   conv = build_conv (ck_ref_bind, rto, conv);
1781   /* This reference binding, unlike those above, requires the
1782      creation of a temporary.  */
1783   conv->need_temporary_p = true;
1784   conv->rvaluedness_matches_p = TYPE_REF_IS_RVALUE (rto);
1785
1786   /* [dcl.init.ref]
1787
1788      Otherwise, the reference shall be an lvalue reference to a
1789      non-volatile const type, or the reference shall be an rvalue
1790      reference.  */
1791   if (!CP_TYPE_CONST_NON_VOLATILE_P (to) && !TYPE_REF_IS_RVALUE (rto))
1792     conv->bad_p = true;
1793
1794   /* [dcl.init.ref]
1795
1796      Otherwise, a temporary of type "cv1 T1" is created and
1797      initialized from the initializer expression using the rules for a
1798      non-reference copy initialization.  If T1 is reference-related to
1799      T2, cv1 must be the same cv-qualification as, or greater
1800      cv-qualification than, cv2; otherwise, the program is ill-formed.  */
1801   if (related_p && !at_least_as_qualified_p (to, from))
1802     conv->bad_p = true;
1803
1804   return conv;
1805 }
1806
1807 /* Returns the implicit conversion sequence (see [over.ics]) from type
1808    FROM to type TO.  The optional expression EXPR may affect the
1809    conversion.  FLAGS are the usual overloading flags.  If C_CAST_P is
1810    true, this conversion is coming from a C-style cast.  */
1811
1812 static conversion *
1813 implicit_conversion (tree to, tree from, tree expr, bool c_cast_p,
1814                      int flags, tsubst_flags_t complain)
1815 {
1816   conversion *conv;
1817
1818   if (from == error_mark_node || to == error_mark_node
1819       || expr == error_mark_node)
1820     return NULL;
1821
1822   /* Other flags only apply to the primary function in overload
1823      resolution, or after we've chosen one.  */
1824   flags &= (LOOKUP_ONLYCONVERTING|LOOKUP_NO_CONVERSION|LOOKUP_COPY_PARM
1825             |LOOKUP_NO_TEMP_BIND|LOOKUP_NO_RVAL_BIND|LOOKUP_PREFER_RVALUE
1826             |LOOKUP_NO_NARROWING|LOOKUP_PROTECT|LOOKUP_NO_NON_INTEGRAL);
1827
1828   /* FIXME: actually we don't want warnings either, but we can't just
1829      have 'complain &= ~(tf_warning|tf_error)' because it would cause
1830      the regression of, eg, g++.old-deja/g++.benjamin/16077.C.
1831      We really ought not to issue that warning until we've committed
1832      to that conversion.  */
1833   complain &= ~tf_error;
1834
1835   /* Call reshape_init early to remove redundant braces.  */
1836   if (expr && BRACE_ENCLOSED_INITIALIZER_P (expr)
1837       && CLASS_TYPE_P (to)
1838       && COMPLETE_TYPE_P (complete_type (to))
1839       && !CLASSTYPE_NON_AGGREGATE (to))
1840     {
1841       expr = reshape_init (to, expr, complain);
1842       if (expr == error_mark_node)
1843         return NULL;
1844       from = TREE_TYPE (expr);
1845     }
1846
1847   if (TREE_CODE (to) == REFERENCE_TYPE)
1848     conv = reference_binding (to, from, expr, c_cast_p, flags, complain);
1849   else
1850     conv = standard_conversion (to, from, expr, c_cast_p, flags, complain);
1851
1852   if (conv)
1853     return conv;
1854
1855   if (expr && BRACE_ENCLOSED_INITIALIZER_P (expr))
1856     {
1857       if (is_std_init_list (to))
1858         return build_list_conv (to, expr, flags, complain);
1859
1860       /* As an extension, allow list-initialization of _Complex.  */
1861       if (TREE_CODE (to) == COMPLEX_TYPE)
1862         {
1863           conv = build_complex_conv (to, expr, flags, complain);
1864           if (conv)
1865             return conv;
1866         }
1867
1868       /* Allow conversion from an initializer-list with one element to a
1869          scalar type.  */
1870       if (SCALAR_TYPE_P (to))
1871         {
1872           int nelts = CONSTRUCTOR_NELTS (expr);
1873           tree elt;
1874
1875           if (nelts == 0)
1876             elt = build_value_init (to, tf_none);
1877           else if (nelts == 1)
1878             elt = CONSTRUCTOR_ELT (expr, 0)->value;
1879           else
1880             elt = error_mark_node;
1881
1882           conv = implicit_conversion (to, TREE_TYPE (elt), elt,
1883                                       c_cast_p, flags, complain);
1884           if (conv)
1885             {
1886               conv->check_narrowing = true;
1887               if (BRACE_ENCLOSED_INITIALIZER_P (elt))
1888                 /* Too many levels of braces, i.e. '{{1}}'.  */
1889                 conv->bad_p = true;
1890               return conv;
1891             }
1892         }
1893       else if (TREE_CODE (to) == ARRAY_TYPE)
1894         return build_array_conv (to, expr, flags, complain);
1895     }
1896
1897   if (expr != NULL_TREE
1898       && (MAYBE_CLASS_TYPE_P (from)
1899           || MAYBE_CLASS_TYPE_P (to))
1900       && (flags & LOOKUP_NO_CONVERSION) == 0)
1901     {
1902       struct z_candidate *cand;
1903
1904       if (CLASS_TYPE_P (to)
1905           && BRACE_ENCLOSED_INITIALIZER_P (expr)
1906           && !CLASSTYPE_NON_AGGREGATE (complete_type (to)))
1907         return build_aggr_conv (to, expr, flags, complain);
1908
1909       cand = build_user_type_conversion_1 (to, expr, flags, complain);
1910       if (cand)
1911         {
1912           if (BRACE_ENCLOSED_INITIALIZER_P (expr)
1913               && CONSTRUCTOR_NELTS (expr) == 1
1914               && !is_list_ctor (cand->fn))
1915             {
1916               /* "If C is not an initializer-list constructor and the
1917                  initializer list has a single element of type cv U, where U is
1918                  X or a class derived from X, the implicit conversion sequence
1919                  has Exact Match rank if U is X, or Conversion rank if U is
1920                  derived from X."  */
1921               tree elt = CONSTRUCTOR_ELT (expr, 0)->value;
1922               tree elttype = TREE_TYPE (elt);
1923               if (reference_related_p (to, elttype))
1924                 return implicit_conversion (to, elttype, elt,
1925                                             c_cast_p, flags, complain);
1926             }
1927           conv = cand->second_conv;
1928         }
1929
1930       /* We used to try to bind a reference to a temporary here, but that
1931          is now handled after the recursive call to this function at the end
1932          of reference_binding.  */
1933       return conv;
1934     }
1935
1936   return NULL;
1937 }
1938
1939 /* Add a new entry to the list of candidates.  Used by the add_*_candidate
1940    functions.  ARGS will not be changed until a single candidate is
1941    selected.  */
1942
1943 static struct z_candidate *
1944 add_candidate (struct z_candidate **candidates,
1945                tree fn, tree first_arg, const vec<tree, va_gc> *args,
1946                size_t num_convs, conversion **convs,
1947                tree access_path, tree conversion_path,
1948                int viable, struct rejection_reason *reason,
1949                int flags)
1950 {
1951   struct z_candidate *cand = (struct z_candidate *)
1952     conversion_obstack_alloc (sizeof (struct z_candidate));
1953
1954   cand->fn = fn;
1955   cand->first_arg = first_arg;
1956   cand->args = args;
1957   cand->convs = convs;
1958   cand->num_convs = num_convs;
1959   cand->access_path = access_path;
1960   cand->conversion_path = conversion_path;
1961   cand->viable = viable;
1962   cand->reason = reason;
1963   cand->next = *candidates;
1964   cand->flags = flags;
1965   *candidates = cand;
1966
1967   return cand;
1968 }
1969
1970 /* Return the number of remaining arguments in the parameter list
1971    beginning with ARG.  */
1972
1973 int
1974 remaining_arguments (tree arg)
1975 {
1976   int n;
1977
1978   for (n = 0; arg != NULL_TREE && arg != void_list_node;
1979        arg = TREE_CHAIN (arg))
1980     n++;
1981
1982   return n;
1983 }
1984
1985 /* Create an overload candidate for the function or method FN called
1986    with the argument list FIRST_ARG/ARGS and add it to CANDIDATES.
1987    FLAGS is passed on to implicit_conversion.
1988
1989    This does not change ARGS.
1990
1991    CTYPE, if non-NULL, is the type we want to pretend this function
1992    comes from for purposes of overload resolution.  */
1993
1994 static struct z_candidate *
1995 add_function_candidate (struct z_candidate **candidates,
1996                         tree fn, tree ctype, tree first_arg,
1997                         const vec<tree, va_gc> *args, tree access_path,
1998                         tree conversion_path, int flags,
1999                         tsubst_flags_t complain)
2000 {
2001   tree parmlist = TYPE_ARG_TYPES (TREE_TYPE (fn));
2002   int i, len;
2003   conversion **convs;
2004   tree parmnode;
2005   tree orig_first_arg = first_arg;
2006   int skip;
2007   int viable = 1;
2008   struct rejection_reason *reason = NULL;
2009
2010   /* At this point we should not see any functions which haven't been
2011      explicitly declared, except for friend functions which will have
2012      been found using argument dependent lookup.  */
2013   gcc_assert (!DECL_ANTICIPATED (fn) || DECL_HIDDEN_FRIEND_P (fn));
2014
2015   /* The `this', `in_chrg' and VTT arguments to constructors are not
2016      considered in overload resolution.  */
2017   if (DECL_CONSTRUCTOR_P (fn))
2018     {
2019       if (ctor_omit_inherited_parms (fn))
2020         /* Bring back parameters omitted from an inherited ctor.  */
2021         parmlist = FUNCTION_FIRST_USER_PARMTYPE (DECL_ORIGIN (fn));
2022       else
2023         parmlist = skip_artificial_parms_for (fn, parmlist);
2024       skip = num_artificial_parms_for (fn);
2025       if (skip > 0 && first_arg != NULL_TREE)
2026         {
2027           --skip;
2028           first_arg = NULL_TREE;
2029         }
2030     }
2031   else
2032     skip = 0;
2033
2034   len = vec_safe_length (args) - skip + (first_arg != NULL_TREE ? 1 : 0);
2035   convs = alloc_conversions (len);
2036
2037   /* 13.3.2 - Viable functions [over.match.viable]
2038      First, to be a viable function, a candidate function shall have enough
2039      parameters to agree in number with the arguments in the list.
2040
2041      We need to check this first; otherwise, checking the ICSes might cause
2042      us to produce an ill-formed template instantiation.  */
2043
2044   parmnode = parmlist;
2045   for (i = 0; i < len; ++i)
2046     {
2047       if (parmnode == NULL_TREE || parmnode == void_list_node)
2048         break;
2049       parmnode = TREE_CHAIN (parmnode);
2050     }
2051
2052   if ((i < len && parmnode)
2053       || !sufficient_parms_p (parmnode))
2054     {
2055       int remaining = remaining_arguments (parmnode);
2056       viable = 0;
2057       reason = arity_rejection (first_arg, i + remaining, len);
2058     }
2059
2060   /* An inherited constructor (12.6.3 [class.inhctor.init]) that has a first
2061      parameter of type "reference to cv C" (including such a constructor
2062      instantiated from a template) is excluded from the set of candidate
2063      functions when used to construct an object of type D with an argument list
2064      containing a single argument if C is reference-related to D.  */
2065   if (viable && len == 1 && parmlist && DECL_CONSTRUCTOR_P (fn)
2066       && flag_new_inheriting_ctors
2067       && DECL_INHERITED_CTOR (fn))
2068     {
2069       tree ptype = non_reference (TREE_VALUE (parmlist));
2070       tree dtype = DECL_CONTEXT (fn);
2071       tree btype = DECL_INHERITED_CTOR_BASE (fn);
2072       if (reference_related_p (ptype, dtype)
2073           && reference_related_p (btype, ptype))
2074         {
2075           viable = false;
2076           reason = inherited_ctor_rejection ();
2077         }
2078     }
2079
2080   /* Second, for a function to be viable, its constraints must be
2081      satisfied. */
2082   if (flag_concepts && viable
2083       && !constraints_satisfied_p (fn))
2084     {
2085       reason = constraint_failure (fn);
2086       viable = false;
2087     }
2088
2089   /* When looking for a function from a subobject from an implicit
2090      copy/move constructor/operator=, don't consider anything that takes (a
2091      reference to) an unrelated type.  See c++/44909 and core 1092.  */
2092   if (viable && parmlist && (flags & LOOKUP_DEFAULTED))
2093     {
2094       if (DECL_CONSTRUCTOR_P (fn))
2095         i = 1;
2096       else if (DECL_ASSIGNMENT_OPERATOR_P (fn)
2097                && DECL_OVERLOADED_OPERATOR_IS (fn, NOP_EXPR))
2098         i = 2;
2099       else
2100         i = 0;
2101       if (i && len == i)
2102         {
2103           parmnode = chain_index (i-1, parmlist);
2104           if (!reference_related_p (non_reference (TREE_VALUE (parmnode)),
2105                                     ctype))
2106             viable = 0;
2107         }
2108
2109       /* This only applies at the top level.  */
2110       flags &= ~LOOKUP_DEFAULTED;
2111     }
2112
2113   if (! viable)
2114     goto out;
2115
2116   /* Third, for F to be a viable function, there shall exist for each
2117      argument an implicit conversion sequence that converts that argument
2118      to the corresponding parameter of F.  */
2119
2120   parmnode = parmlist;
2121
2122   for (i = 0; i < len; ++i)
2123     {
2124       tree argtype, to_type;
2125       tree arg;
2126       conversion *t;
2127       int is_this;
2128
2129       if (parmnode == void_list_node)
2130         break;
2131
2132       if (i == 0 && first_arg != NULL_TREE)
2133         arg = first_arg;
2134       else
2135         arg = CONST_CAST_TREE (
2136                 (*args)[i + skip - (first_arg != NULL_TREE ? 1 : 0)]);
2137       argtype = lvalue_type (arg);
2138
2139       is_this = (i == 0 && DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
2140                  && ! DECL_CONSTRUCTOR_P (fn));
2141
2142       if (parmnode)
2143         {
2144           tree parmtype = TREE_VALUE (parmnode);
2145           int lflags = flags;
2146
2147           parmnode = TREE_CHAIN (parmnode);
2148
2149           /* The type of the implicit object parameter ('this') for
2150              overload resolution is not always the same as for the
2151              function itself; conversion functions are considered to
2152              be members of the class being converted, and functions
2153              introduced by a using-declaration are considered to be
2154              members of the class that uses them.
2155
2156              Since build_over_call ignores the ICS for the `this'
2157              parameter, we can just change the parm type.  */
2158           if (ctype && is_this)
2159             {
2160               parmtype = cp_build_qualified_type
2161                 (ctype, cp_type_quals (TREE_TYPE (parmtype)));
2162               if (FUNCTION_REF_QUALIFIED (TREE_TYPE (fn)))
2163                 {
2164                   /* If the function has a ref-qualifier, the implicit
2165                      object parameter has reference type.  */
2166                   bool rv = FUNCTION_RVALUE_QUALIFIED (TREE_TYPE (fn));
2167                   parmtype = cp_build_reference_type (parmtype, rv);
2168                   /* The special handling of 'this' conversions in compare_ics
2169                      does not apply if there is a ref-qualifier.  */
2170                   is_this = false;
2171                 }
2172               else
2173                 {
2174                   parmtype = build_pointer_type (parmtype);
2175                   /* We don't use build_this here because we don't want to
2176                      capture the object argument until we've chosen a
2177                      non-static member function.  */
2178                   arg = build_address (arg);
2179                   argtype = lvalue_type (arg);
2180                 }
2181             }
2182
2183           /* Core issue 899: When [copy-]initializing a temporary to be bound
2184              to the first parameter of a copy constructor (12.8) called with
2185              a single argument in the context of direct-initialization,
2186              explicit conversion functions are also considered.
2187
2188              So set LOOKUP_COPY_PARM to let reference_binding know that
2189              it's being called in that context.  We generalize the above
2190              to handle move constructors and template constructors as well;
2191              the standardese should soon be updated similarly.  */
2192           if (ctype && i == 0 && (len-skip == 1)
2193               && DECL_CONSTRUCTOR_P (fn)
2194               && parmtype != error_mark_node
2195               && (same_type_ignoring_top_level_qualifiers_p
2196                   (non_reference (parmtype), ctype)))
2197             {
2198               if (!(flags & LOOKUP_ONLYCONVERTING))
2199                 lflags |= LOOKUP_COPY_PARM;
2200               /* We allow user-defined conversions within init-lists, but
2201                  don't list-initialize the copy parm, as that would mean
2202                  using two levels of braces for the same type.  */
2203               if ((flags & LOOKUP_LIST_INIT_CTOR)
2204                   && BRACE_ENCLOSED_INITIALIZER_P (arg))
2205                 lflags |= LOOKUP_NO_CONVERSION;
2206             }
2207           else
2208             lflags |= LOOKUP_ONLYCONVERTING;
2209
2210           t = implicit_conversion (parmtype, argtype, arg,
2211                                    /*c_cast_p=*/false, lflags, complain);
2212           to_type = parmtype;
2213         }
2214       else
2215         {
2216           t = build_identity_conv (argtype, arg);
2217           t->ellipsis_p = true;
2218           to_type = argtype;
2219         }
2220
2221       if (t && is_this)
2222         t->this_p = true;
2223
2224       convs[i] = t;
2225       if (! t)
2226         {
2227           viable = 0;
2228           reason = arg_conversion_rejection (first_arg, i, argtype, to_type);
2229           break;
2230         }
2231
2232       if (t->bad_p)
2233         {
2234           viable = -1;
2235           reason = bad_arg_conversion_rejection (first_arg, i, arg, to_type);
2236         }
2237     }
2238
2239  out:
2240   return add_candidate (candidates, fn, orig_first_arg, args, len, convs,
2241                         access_path, conversion_path, viable, reason, flags);
2242 }
2243
2244 /* Create an overload candidate for the conversion function FN which will
2245    be invoked for expression OBJ, producing a pointer-to-function which
2246    will in turn be called with the argument list FIRST_ARG/ARGLIST,
2247    and add it to CANDIDATES.  This does not change ARGLIST.  FLAGS is
2248    passed on to implicit_conversion.
2249
2250    Actually, we don't really care about FN; we care about the type it
2251    converts to.  There may be multiple conversion functions that will
2252    convert to that type, and we rely on build_user_type_conversion_1 to
2253    choose the best one; so when we create our candidate, we record the type
2254    instead of the function.  */
2255
2256 static struct z_candidate *
2257 add_conv_candidate (struct z_candidate **candidates, tree fn, tree obj,
2258                     const vec<tree, va_gc> *arglist,
2259                     tree access_path, tree conversion_path,
2260                     tsubst_flags_t complain)
2261 {
2262   tree totype = TREE_TYPE (TREE_TYPE (fn));
2263   int i, len, viable, flags;
2264   tree parmlist, parmnode;
2265   conversion **convs;
2266   struct rejection_reason *reason;
2267
2268   for (parmlist = totype; TREE_CODE (parmlist) != FUNCTION_TYPE; )
2269     parmlist = TREE_TYPE (parmlist);
2270   parmlist = TYPE_ARG_TYPES (parmlist);
2271
2272   len = vec_safe_length (arglist) + 1;
2273   convs = alloc_conversions (len);
2274   parmnode = parmlist;
2275   viable = 1;
2276   flags = LOOKUP_IMPLICIT;
2277   reason = NULL;
2278
2279   /* Don't bother looking up the same type twice.  */
2280   if (*candidates && (*candidates)->fn == totype)
2281     return NULL;
2282
2283   for (i = 0; i < len; ++i)
2284     {
2285       tree arg, argtype, convert_type = NULL_TREE;
2286       conversion *t;
2287
2288       if (i == 0)
2289         arg = obj;
2290       else
2291         arg = (*arglist)[i - 1];
2292       argtype = lvalue_type (arg);
2293
2294       if (i == 0)
2295         {
2296           t = build_identity_conv (argtype, NULL_TREE);
2297           t = build_conv (ck_user, totype, t);
2298           /* Leave the 'cand' field null; we'll figure out the conversion in
2299              convert_like_real if this candidate is chosen.  */
2300           convert_type = totype;
2301         }
2302       else if (parmnode == void_list_node)
2303         break;
2304       else if (parmnode)
2305         {
2306           t = implicit_conversion (TREE_VALUE (parmnode), argtype, arg,
2307                                    /*c_cast_p=*/false, flags, complain);
2308           convert_type = TREE_VALUE (parmnode);
2309         }
2310       else
2311         {
2312           t = build_identity_conv (argtype, arg);
2313           t->ellipsis_p = true;
2314           convert_type = argtype;
2315         }
2316
2317       convs[i] = t;
2318       if (! t)
2319         break;
2320
2321       if (t->bad_p)
2322         {
2323           viable = -1;
2324           reason = bad_arg_conversion_rejection (NULL_TREE, i, arg, convert_type);
2325         }
2326
2327       if (i == 0)
2328         continue;
2329
2330       if (parmnode)
2331         parmnode = TREE_CHAIN (parmnode);
2332     }
2333
2334   if (i < len
2335       || ! sufficient_parms_p (parmnode))
2336     {
2337       int remaining = remaining_arguments (parmnode);
2338       viable = 0;
2339       reason = arity_rejection (NULL_TREE, i + remaining, len);
2340     }
2341
2342   return add_candidate (candidates, totype, obj, arglist, len, convs,
2343                         access_path, conversion_path, viable, reason, flags);
2344 }
2345
2346 static void
2347 build_builtin_candidate (struct z_candidate **candidates, tree fnname,
2348                          tree type1, tree type2, tree *args, tree *argtypes,
2349                          int flags, tsubst_flags_t complain)
2350 {
2351   conversion *t;
2352   conversion **convs;
2353   size_t num_convs;
2354   int viable = 1, i;
2355   tree types[2];
2356   struct rejection_reason *reason = NULL;
2357
2358   types[0] = type1;
2359   types[1] = type2;
2360
2361   num_convs =  args[2] ? 3 : (args[1] ? 2 : 1);
2362   convs = alloc_conversions (num_convs);
2363
2364   /* TRUTH_*_EXPR do "contextual conversion to bool", which means explicit
2365      conversion ops are allowed.  We handle that here by just checking for
2366      boolean_type_node because other operators don't ask for it.  COND_EXPR
2367      also does contextual conversion to bool for the first operand, but we
2368      handle that in build_conditional_expr, and type1 here is operand 2.  */
2369   if (type1 != boolean_type_node)
2370     flags |= LOOKUP_ONLYCONVERTING;
2371
2372   for (i = 0; i < 2; ++i)
2373     {
2374       if (! args[i])
2375         break;
2376
2377       t = implicit_conversion (types[i], argtypes[i], args[i],
2378                                /*c_cast_p=*/false, flags, complain);
2379       if (! t)
2380         {
2381           viable = 0;
2382           /* We need something for printing the candidate.  */
2383           t = build_identity_conv (types[i], NULL_TREE);
2384           reason = arg_conversion_rejection (NULL_TREE, i, argtypes[i],
2385                                              types[i]);
2386         }
2387       else if (t->bad_p)
2388         {
2389           viable = 0;
2390           reason = bad_arg_conversion_rejection (NULL_TREE, i, args[i],
2391                                                  types[i]);
2392         }
2393       convs[i] = t;
2394     }
2395
2396   /* For COND_EXPR we rearranged the arguments; undo that now.  */
2397   if (args[2])
2398     {
2399       convs[2] = convs[1];
2400       convs[1] = convs[0];
2401       t = implicit_conversion (boolean_type_node, argtypes[2], args[2],
2402                                /*c_cast_p=*/false, flags,
2403                                complain);
2404       if (t)
2405         convs[0] = t;
2406       else
2407         {
2408           viable = 0;
2409           reason = arg_conversion_rejection (NULL_TREE, 0, argtypes[2],
2410                                              boolean_type_node);
2411         }
2412     }
2413
2414   add_candidate (candidates, fnname, /*first_arg=*/NULL_TREE, /*args=*/NULL,
2415                  num_convs, convs,
2416                  /*access_path=*/NULL_TREE,
2417                  /*conversion_path=*/NULL_TREE,
2418                  viable, reason, flags);
2419 }
2420
2421 static bool
2422 is_complete (tree t)
2423 {
2424   return COMPLETE_TYPE_P (complete_type (t));
2425 }
2426
2427 /* Returns nonzero if TYPE is a promoted arithmetic type.  */
2428
2429 static bool
2430 promoted_arithmetic_type_p (tree type)
2431 {
2432   /* [over.built]
2433
2434      In this section, the term promoted integral type is used to refer
2435      to those integral types which are preserved by integral promotion
2436      (including e.g.  int and long but excluding e.g.  char).
2437      Similarly, the term promoted arithmetic type refers to promoted
2438      integral types plus floating types.  */
2439   return ((CP_INTEGRAL_TYPE_P (type)
2440            && same_type_p (type_promotes_to (type), type))
2441           || TREE_CODE (type) == REAL_TYPE);
2442 }
2443
2444 /* Create any builtin operator overload candidates for the operator in
2445    question given the converted operand types TYPE1 and TYPE2.  The other
2446    args are passed through from add_builtin_candidates to
2447    build_builtin_candidate.
2448
2449    TYPE1 and TYPE2 may not be permissible, and we must filter them.
2450    If CODE is requires candidates operands of the same type of the kind
2451    of which TYPE1 and TYPE2 are, we add both candidates
2452    CODE (TYPE1, TYPE1) and CODE (TYPE2, TYPE2).  */
2453
2454 static void
2455 add_builtin_candidate (struct z_candidate **candidates, enum tree_code code,
2456                        enum tree_code code2, tree fnname, tree type1,
2457                        tree type2, tree *args, tree *argtypes, int flags,
2458                        tsubst_flags_t complain)
2459 {
2460   switch (code)
2461     {
2462     case POSTINCREMENT_EXPR:
2463     case POSTDECREMENT_EXPR:
2464       args[1] = integer_zero_node;
2465       type2 = integer_type_node;
2466       break;
2467     default:
2468       break;
2469     }
2470
2471   switch (code)
2472     {
2473
2474 /* 4 For every pair T, VQ), where T is an arithmetic or  enumeration  type,
2475      and  VQ  is  either  volatile or empty, there exist candidate operator
2476      functions of the form
2477              VQ T&   operator++(VQ T&);
2478              T       operator++(VQ T&, int);
2479    5 For every pair T, VQ), where T is an enumeration type or an arithmetic
2480      type  other than bool, and VQ is either volatile or empty, there exist
2481      candidate operator functions of the form
2482              VQ T&   operator--(VQ T&);
2483              T       operator--(VQ T&, int);
2484    6 For every pair T, VQ), where T is  a  cv-qualified  or  cv-unqualified
2485      complete  object type, and VQ is either volatile or empty, there exist
2486      candidate operator functions of the form
2487              T*VQ&   operator++(T*VQ&);
2488              T*VQ&   operator--(T*VQ&);
2489              T*      operator++(T*VQ&, int);
2490              T*      operator--(T*VQ&, int);  */
2491
2492     case POSTDECREMENT_EXPR:
2493     case PREDECREMENT_EXPR:
2494       if (TREE_CODE (type1) == BOOLEAN_TYPE)
2495         return;
2496       /* FALLTHRU */
2497     case POSTINCREMENT_EXPR:
2498     case PREINCREMENT_EXPR:
2499       if (ARITHMETIC_TYPE_P (type1) || TYPE_PTROB_P (type1))
2500         {
2501           type1 = build_reference_type (type1);
2502           break;
2503         }
2504       return;
2505
2506 /* 7 For every cv-qualified or cv-unqualified object type T, there
2507      exist candidate operator functions of the form
2508
2509              T&      operator*(T*);
2510
2511    8 For every function type T, there exist candidate operator functions of
2512      the form
2513              T&      operator*(T*);  */
2514
2515     case INDIRECT_REF:
2516       if (TYPE_PTR_P (type1)
2517           && (TYPE_PTROB_P (type1)
2518               || TREE_CODE (TREE_TYPE (type1)) == FUNCTION_TYPE))
2519         break;
2520       return;
2521
2522 /* 9 For every type T, there exist candidate operator functions of the form
2523              T*      operator+(T*);
2524
2525    10For  every  promoted arithmetic type T, there exist candidate operator
2526      functions of the form
2527              T       operator+(T);
2528              T       operator-(T);  */
2529
2530     case UNARY_PLUS_EXPR: /* unary + */
2531       if (TYPE_PTR_P (type1))
2532         break;
2533       /* FALLTHRU */
2534     case NEGATE_EXPR:
2535       if (ARITHMETIC_TYPE_P (type1))
2536         break;
2537       return;
2538
2539 /* 11For every promoted integral type T,  there  exist  candidate  operator
2540      functions of the form
2541              T       operator~(T);  */
2542
2543     case BIT_NOT_EXPR:
2544       if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1))
2545         break;
2546       return;
2547
2548 /* 12For every quintuple C1, C2, T, CV1, CV2), where C2 is a class type, C1
2549      is the same type as C2 or is a derived class of C2, T  is  a  complete
2550      object type or a function type, and CV1 and CV2 are cv-qualifier-seqs,
2551      there exist candidate operator functions of the form
2552              CV12 T& operator->*(CV1 C1*, CV2 T C2::*);
2553      where CV12 is the union of CV1 and CV2.  */
2554
2555     case MEMBER_REF:
2556       if (TYPE_PTR_P (type1) && TYPE_PTRMEM_P (type2))
2557         {
2558           tree c1 = TREE_TYPE (type1);
2559           tree c2 = TYPE_PTRMEM_CLASS_TYPE (type2);
2560
2561           if (MAYBE_CLASS_TYPE_P (c1) && DERIVED_FROM_P (c2, c1)
2562               && (TYPE_PTRMEMFUNC_P (type2)
2563                   || is_complete (TYPE_PTRMEM_POINTED_TO_TYPE (type2))))
2564             break;
2565         }
2566       return;
2567
2568 /* 13For every pair of promoted arithmetic types L and R, there exist  can-
2569      didate operator functions of the form
2570              LR      operator*(L, R);
2571              LR      operator/(L, R);
2572              LR      operator+(L, R);
2573              LR      operator-(L, R);
2574              bool    operator<(L, R);
2575              bool    operator>(L, R);
2576              bool    operator<=(L, R);
2577              bool    operator>=(L, R);
2578              bool    operator==(L, R);
2579              bool    operator!=(L, R);
2580      where  LR  is  the  result of the usual arithmetic conversions between
2581      types L and R.
2582
2583    14For every pair of types T and I, where T  is  a  cv-qualified  or  cv-
2584      unqualified  complete  object  type and I is a promoted integral type,
2585      there exist candidate operator functions of the form
2586              T*      operator+(T*, I);
2587              T&      operator[](T*, I);
2588              T*      operator-(T*, I);
2589              T*      operator+(I, T*);
2590              T&      operator[](I, T*);
2591
2592    15For every T, where T is a pointer to complete object type, there exist
2593      candidate operator functions of the form112)
2594              ptrdiff_t operator-(T, T);
2595
2596    16For every pointer or enumeration type T, there exist candidate operator
2597      functions of the form
2598              bool    operator<(T, T);
2599              bool    operator>(T, T);
2600              bool    operator<=(T, T);
2601              bool    operator>=(T, T);
2602              bool    operator==(T, T);
2603              bool    operator!=(T, T);
2604
2605    17For every pointer to member type T,  there  exist  candidate  operator
2606      functions of the form
2607              bool    operator==(T, T);
2608              bool    operator!=(T, T);  */
2609
2610     case MINUS_EXPR:
2611       if (TYPE_PTROB_P (type1) && TYPE_PTROB_P (type2))
2612         break;
2613       if (TYPE_PTROB_P (type1)
2614           && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2615         {
2616           type2 = ptrdiff_type_node;
2617           break;
2618         }
2619       /* FALLTHRU */
2620     case MULT_EXPR:
2621     case TRUNC_DIV_EXPR:
2622       if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2623         break;
2624       return;
2625
2626     case EQ_EXPR:
2627     case NE_EXPR:
2628       if ((TYPE_PTRMEMFUNC_P (type1) && TYPE_PTRMEMFUNC_P (type2))
2629           || (TYPE_PTRDATAMEM_P (type1) && TYPE_PTRDATAMEM_P (type2)))
2630         break;
2631       if (TYPE_PTRMEM_P (type1) && null_ptr_cst_p (args[1]))
2632         {
2633           type2 = type1;
2634           break;
2635         }
2636       if (TYPE_PTRMEM_P (type2) && null_ptr_cst_p (args[0]))
2637         {
2638           type1 = type2;
2639           break;
2640         }
2641       /* Fall through.  */
2642     case LT_EXPR:
2643     case GT_EXPR:
2644     case LE_EXPR:
2645     case GE_EXPR:
2646     case MAX_EXPR:
2647     case MIN_EXPR:
2648       if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2649         break;
2650       if (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
2651         break;
2652       if (TREE_CODE (type1) == ENUMERAL_TYPE 
2653           && TREE_CODE (type2) == ENUMERAL_TYPE)
2654         break;
2655       if (TYPE_PTR_P (type1) 
2656           && null_ptr_cst_p (args[1]))
2657         {
2658           type2 = type1;
2659           break;
2660         }
2661       if (null_ptr_cst_p (args[0]) 
2662           && TYPE_PTR_P (type2))
2663         {
2664           type1 = type2;
2665           break;
2666         }
2667       return;
2668
2669     case PLUS_EXPR:
2670       if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2671         break;
2672       /* FALLTHRU */
2673     case ARRAY_REF:
2674       if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1) && TYPE_PTROB_P (type2))
2675         {
2676           type1 = ptrdiff_type_node;
2677           break;
2678         }
2679       if (TYPE_PTROB_P (type1) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2680         {
2681           type2 = ptrdiff_type_node;
2682           break;
2683         }
2684       return;
2685
2686 /* 18For  every pair of promoted integral types L and R, there exist candi-
2687      date operator functions of the form
2688              LR      operator%(L, R);
2689              LR      operator&(L, R);
2690              LR      operator^(L, R);
2691              LR      operator|(L, R);
2692              L       operator<<(L, R);
2693              L       operator>>(L, R);
2694      where LR is the result of the  usual  arithmetic  conversions  between
2695      types L and R.  */
2696
2697     case TRUNC_MOD_EXPR:
2698     case BIT_AND_EXPR:
2699     case BIT_IOR_EXPR:
2700     case BIT_XOR_EXPR:
2701     case LSHIFT_EXPR:
2702     case RSHIFT_EXPR:
2703       if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2704         break;
2705       return;
2706
2707 /* 19For  every  triple  L, VQ, R), where L is an arithmetic or enumeration
2708      type, VQ is either volatile or empty, and R is a  promoted  arithmetic
2709      type, there exist candidate operator functions of the form
2710              VQ L&   operator=(VQ L&, R);
2711              VQ L&   operator*=(VQ L&, R);
2712              VQ L&   operator/=(VQ L&, R);
2713              VQ L&   operator+=(VQ L&, R);
2714              VQ L&   operator-=(VQ L&, R);
2715
2716    20For  every  pair T, VQ), where T is any type and VQ is either volatile
2717      or empty, there exist candidate operator functions of the form
2718              T*VQ&   operator=(T*VQ&, T*);
2719
2720    21For every pair T, VQ), where T is a pointer to member type and  VQ  is
2721      either  volatile or empty, there exist candidate operator functions of
2722      the form
2723              VQ T&   operator=(VQ T&, T);
2724
2725    22For every triple  T,  VQ,  I),  where  T  is  a  cv-qualified  or  cv-
2726      unqualified  complete object type, VQ is either volatile or empty, and
2727      I is a promoted integral type, there exist  candidate  operator  func-
2728      tions of the form
2729              T*VQ&   operator+=(T*VQ&, I);
2730              T*VQ&   operator-=(T*VQ&, I);
2731
2732    23For  every  triple  L,  VQ,  R), where L is an integral or enumeration
2733      type, VQ is either volatile or empty, and R  is  a  promoted  integral
2734      type, there exist candidate operator functions of the form
2735
2736              VQ L&   operator%=(VQ L&, R);
2737              VQ L&   operator<<=(VQ L&, R);
2738              VQ L&   operator>>=(VQ L&, R);
2739              VQ L&   operator&=(VQ L&, R);
2740              VQ L&   operator^=(VQ L&, R);
2741              VQ L&   operator|=(VQ L&, R);  */
2742
2743     case MODIFY_EXPR:
2744       switch (code2)
2745         {
2746         case PLUS_EXPR:
2747         case MINUS_EXPR:
2748           if (TYPE_PTROB_P (type1) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2749             {
2750               type2 = ptrdiff_type_node;
2751               break;
2752             }
2753           /* FALLTHRU */
2754         case MULT_EXPR:
2755         case TRUNC_DIV_EXPR:
2756           if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2757             break;
2758           return;
2759
2760         case TRUNC_MOD_EXPR:
2761         case BIT_AND_EXPR:
2762         case BIT_IOR_EXPR:
2763         case BIT_XOR_EXPR:
2764         case LSHIFT_EXPR:
2765         case RSHIFT_EXPR:
2766           if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2767             break;
2768           return;
2769
2770         case NOP_EXPR:
2771           if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2772             break;
2773           if ((TYPE_PTRMEMFUNC_P (type1) && TYPE_PTRMEMFUNC_P (type2))
2774               || (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
2775               || (TYPE_PTRDATAMEM_P (type1) && TYPE_PTRDATAMEM_P (type2))
2776               || ((TYPE_PTRMEMFUNC_P (type1)
2777                    || TYPE_PTR_P (type1))
2778                   && null_ptr_cst_p (args[1])))
2779             {
2780               type2 = type1;
2781               break;
2782             }
2783           return;
2784
2785         default:
2786           gcc_unreachable ();
2787         }
2788       type1 = build_reference_type (type1);
2789       break;
2790
2791     case COND_EXPR:
2792       /* [over.built]
2793
2794          For every pair of promoted arithmetic types L and R, there
2795          exist candidate operator functions of the form
2796
2797          LR operator?(bool, L, R);
2798
2799          where LR is the result of the usual arithmetic conversions
2800          between types L and R.
2801
2802          For every type T, where T is a pointer or pointer-to-member
2803          type, there exist candidate operator functions of the form T
2804          operator?(bool, T, T);  */
2805
2806       if (promoted_arithmetic_type_p (type1)
2807           && promoted_arithmetic_type_p (type2))
2808         /* That's OK.  */
2809         break;
2810
2811       /* Otherwise, the types should be pointers.  */
2812       if (!TYPE_PTR_OR_PTRMEM_P (type1) || !TYPE_PTR_OR_PTRMEM_P (type2))
2813         return;
2814
2815       /* We don't check that the two types are the same; the logic
2816          below will actually create two candidates; one in which both
2817          parameter types are TYPE1, and one in which both parameter
2818          types are TYPE2.  */
2819       break;
2820
2821     case REALPART_EXPR:
2822     case IMAGPART_EXPR:
2823       if (ARITHMETIC_TYPE_P (type1))
2824         break;
2825       return;
2826  
2827     default:
2828       gcc_unreachable ();
2829     }
2830
2831   /* Make sure we don't create builtin candidates with dependent types.  */
2832   bool u1 = uses_template_parms (type1);
2833   bool u2 = type2 ? uses_template_parms (type2) : false;
2834   if (u1 || u2)
2835     {
2836       /* Try to recover if one of the types is non-dependent.  But if
2837          there's only one type, there's nothing we can do.  */
2838       if (!type2)
2839         return;
2840       /* And we lose if both are dependent.  */
2841       if (u1 && u2)
2842         return;
2843       /* Or if they have different forms.  */
2844       if (TREE_CODE (type1) != TREE_CODE (type2))
2845         return;
2846
2847       if (u1 && !u2)
2848         type1 = type2;
2849       else if (u2 && !u1)
2850         type2 = type1;
2851     }
2852
2853   /* If we're dealing with two pointer types or two enumeral types,
2854      we need candidates for both of them.  */
2855   if (type2 && !same_type_p (type1, type2)
2856       && TREE_CODE (type1) == TREE_CODE (type2)
2857       && (TREE_CODE (type1) == REFERENCE_TYPE
2858           || (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
2859           || (TYPE_PTRDATAMEM_P (type1) && TYPE_PTRDATAMEM_P (type2))
2860           || TYPE_PTRMEMFUNC_P (type1)
2861           || MAYBE_CLASS_TYPE_P (type1)
2862           || TREE_CODE (type1) == ENUMERAL_TYPE))
2863     {
2864       if (TYPE_PTR_OR_PTRMEM_P (type1))
2865         {
2866           tree cptype = composite_pointer_type (type1, type2,
2867                                                 error_mark_node,
2868                                                 error_mark_node,
2869                                                 CPO_CONVERSION,
2870                                                 tf_none);
2871           if (cptype != error_mark_node)
2872             {
2873               build_builtin_candidate
2874                 (candidates, fnname, cptype, cptype, args, argtypes,
2875                  flags, complain);
2876               return;
2877             }
2878         }
2879
2880       build_builtin_candidate
2881         (candidates, fnname, type1, type1, args, argtypes, flags, complain);
2882       build_builtin_candidate
2883         (candidates, fnname, type2, type2, args, argtypes, flags, complain);
2884       return;
2885     }
2886
2887   build_builtin_candidate
2888     (candidates, fnname, type1, type2, args, argtypes, flags, complain);
2889 }
2890
2891 tree
2892 type_decays_to (tree type)
2893 {
2894   if (TREE_CODE (type) == ARRAY_TYPE)
2895     return build_pointer_type (TREE_TYPE (type));
2896   if (TREE_CODE (type) == FUNCTION_TYPE)
2897     return build_pointer_type (type);
2898   return type;
2899 }
2900
2901 /* There are three conditions of builtin candidates:
2902
2903    1) bool-taking candidates.  These are the same regardless of the input.
2904    2) pointer-pair taking candidates.  These are generated for each type
2905       one of the input types converts to.
2906    3) arithmetic candidates.  According to the standard, we should generate
2907       all of these, but I'm trying not to...
2908
2909    Here we generate a superset of the possible candidates for this particular
2910    case.  That is a subset of the full set the standard defines, plus some
2911    other cases which the standard disallows. add_builtin_candidate will
2912    filter out the invalid set.  */
2913
2914 static void
2915 add_builtin_candidates (struct z_candidate **candidates, enum tree_code code,
2916                         enum tree_code code2, tree fnname, tree *args,
2917                         int flags, tsubst_flags_t complain)
2918 {
2919   int ref1, i;
2920   int enum_p = 0;
2921   tree type, argtypes[3], t;
2922   /* TYPES[i] is the set of possible builtin-operator parameter types
2923      we will consider for the Ith argument.  */
2924   vec<tree, va_gc> *types[2];
2925   unsigned ix;
2926
2927   for (i = 0; i < 3; ++i)
2928     {
2929       if (args[i])
2930         argtypes[i] = unlowered_expr_type (args[i]);
2931       else
2932         argtypes[i] = NULL_TREE;
2933     }
2934
2935   switch (code)
2936     {
2937 /* 4 For every pair T, VQ), where T is an arithmetic or  enumeration  type,
2938      and  VQ  is  either  volatile or empty, there exist candidate operator
2939      functions of the form
2940                  VQ T&   operator++(VQ T&);  */
2941
2942     case POSTINCREMENT_EXPR:
2943     case PREINCREMENT_EXPR:
2944     case POSTDECREMENT_EXPR:
2945     case PREDECREMENT_EXPR:
2946     case MODIFY_EXPR:
2947       ref1 = 1;
2948       break;
2949
2950 /* 24There also exist candidate operator functions of the form
2951              bool    operator!(bool);
2952              bool    operator&&(bool, bool);
2953              bool    operator||(bool, bool);  */
2954
2955     case TRUTH_NOT_EXPR:
2956       build_builtin_candidate
2957         (candidates, fnname, boolean_type_node,
2958          NULL_TREE, args, argtypes, flags, complain);
2959       return;
2960
2961     case TRUTH_ORIF_EXPR:
2962     case TRUTH_ANDIF_EXPR:
2963       build_builtin_candidate
2964         (candidates, fnname, boolean_type_node,
2965          boolean_type_node, args, argtypes, flags, complain);
2966       return;
2967
2968     case ADDR_EXPR:
2969     case COMPOUND_EXPR:
2970     case COMPONENT_REF:
2971       return;
2972
2973     case COND_EXPR:
2974     case EQ_EXPR:
2975     case NE_EXPR:
2976     case LT_EXPR:
2977     case LE_EXPR:
2978     case GT_EXPR:
2979     case GE_EXPR:
2980       enum_p = 1;
2981       /* Fall through.  */
2982
2983     default:
2984       ref1 = 0;
2985     }
2986
2987   types[0] = make_tree_vector ();
2988   types[1] = make_tree_vector ();
2989
2990   for (i = 0; i < 2; ++i)
2991     {
2992       if (! args[i])
2993         ;
2994       else if (MAYBE_CLASS_TYPE_P (argtypes[i]))
2995         {
2996           tree convs;
2997
2998           if (i == 0 && code == MODIFY_EXPR && code2 == NOP_EXPR)
2999             return;
3000
3001           convs = lookup_conversions (argtypes[i]);
3002
3003           if (code == COND_EXPR)
3004             {
3005               if (lvalue_p (args[i]))
3006                 vec_safe_push (types[i], build_reference_type (argtypes[i]));
3007
3008               vec_safe_push (types[i], TYPE_MAIN_VARIANT (argtypes[i]));
3009             }
3010
3011           else if (! convs)
3012             return;
3013
3014           for (; convs; convs = TREE_CHAIN (convs))
3015             {
3016               type = TREE_TYPE (convs);
3017
3018               if (i == 0 && ref1
3019                   && (TREE_CODE (type) != REFERENCE_TYPE
3020                       || CP_TYPE_CONST_P (TREE_TYPE (type))))
3021                 continue;
3022
3023               if (code == COND_EXPR && TREE_CODE (type) == REFERENCE_TYPE)
3024                 vec_safe_push (types[i], type);
3025
3026               type = non_reference (type);
3027               if (i != 0 || ! ref1)
3028                 {
3029                   type = cv_unqualified (type_decays_to (type));
3030                   if (enum_p && TREE_CODE (type) == ENUMERAL_TYPE)
3031                     vec_safe_push (types[i], type);
3032                   if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
3033                     type = type_promotes_to (type);
3034                 }
3035
3036               if (! vec_member (type, types[i]))
3037                 vec_safe_push (types[i], type);
3038             }
3039         }
3040       else
3041         {
3042           if (code == COND_EXPR && lvalue_p (args[i]))
3043             vec_safe_push (types[i], build_reference_type (argtypes[i]));
3044           type = non_reference (argtypes[i]);
3045           if (i != 0 || ! ref1)
3046             {
3047               type = cv_unqualified (type_decays_to (type));
3048               if (enum_p && UNSCOPED_ENUM_P (type))
3049                 vec_safe_push (types[i], type);
3050               if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
3051                 type = type_promotes_to (type);
3052             }
3053           vec_safe_push (types[i], type);
3054         }
3055     }
3056
3057   /* Run through the possible parameter types of both arguments,
3058      creating candidates with those parameter types.  */
3059   FOR_EACH_VEC_ELT_REVERSE (*(types[0]), ix, t)
3060     {
3061       unsigned jx;
3062       tree u;
3063
3064       if (!types[1]->is_empty ())
3065         FOR_EACH_VEC_ELT_REVERSE (*(types[1]), jx, u)
3066           add_builtin_candidate
3067             (candidates, code, code2, fnname, t,
3068              u, args, argtypes, flags, complain);
3069       else
3070         add_builtin_candidate
3071           (candidates, code, code2, fnname, t,
3072            NULL_TREE, args, argtypes, flags, complain);
3073     }
3074
3075   release_tree_vector (types[0]);
3076   release_tree_vector (types[1]);
3077 }
3078
3079
3080 /* If TMPL can be successfully instantiated as indicated by
3081    EXPLICIT_TARGS and ARGLIST, adds the instantiation to CANDIDATES.
3082
3083    TMPL is the template.  EXPLICIT_TARGS are any explicit template
3084    arguments.  ARGLIST is the arguments provided at the call-site.
3085    This does not change ARGLIST.  The RETURN_TYPE is the desired type
3086    for conversion operators.  If OBJ is NULL_TREE, FLAGS and CTYPE are
3087    as for add_function_candidate.  If an OBJ is supplied, FLAGS and
3088    CTYPE are ignored, and OBJ is as for add_conv_candidate.  */
3089
3090 static struct z_candidate*
3091 add_template_candidate_real (struct z_candidate **candidates, tree tmpl,
3092                              tree ctype, tree explicit_targs, tree first_arg,
3093                              const vec<tree, va_gc> *arglist, tree return_type,
3094                              tree access_path, tree conversion_path,
3095                              int flags, tree obj, unification_kind_t strict,
3096                              tsubst_flags_t complain)
3097 {
3098   int ntparms = DECL_NTPARMS (tmpl);
3099   tree targs = make_tree_vec (ntparms);
3100   unsigned int len = vec_safe_length (arglist);
3101   unsigned int nargs = (first_arg == NULL_TREE ? 0 : 1) + len;
3102   unsigned int skip_without_in_chrg = 0;
3103   tree first_arg_without_in_chrg = first_arg;
3104   tree *args_without_in_chrg;
3105   unsigned int nargs_without_in_chrg;
3106   unsigned int ia, ix;
3107   tree arg;
3108   struct z_candidate *cand;
3109   tree fn;
3110   struct rejection_reason *reason = NULL;
3111   int errs;
3112
3113   /* We don't do deduction on the in-charge parameter, the VTT
3114      parameter or 'this'.  */
3115   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (tmpl))
3116     {
3117       if (first_arg_without_in_chrg != NULL_TREE)
3118         first_arg_without_in_chrg = NULL_TREE;
3119       else if (return_type && strict == DEDUCE_CALL)
3120         /* We're deducing for a call to the result of a template conversion
3121            function, so the args don't contain 'this'; leave them alone.  */;
3122       else
3123         ++skip_without_in_chrg;
3124     }
3125
3126   if ((DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (tmpl)
3127        || DECL_BASE_CONSTRUCTOR_P (tmpl))
3128       && CLASSTYPE_VBASECLASSES (DECL_CONTEXT (tmpl)))
3129     {
3130       if (first_arg_without_in_chrg != NULL_TREE)
3131         first_arg_without_in_chrg = NULL_TREE;
3132       else
3133         ++skip_without_in_chrg;
3134     }
3135
3136   if (len < skip_without_in_chrg)
3137     return NULL;
3138
3139   if (DECL_CONSTRUCTOR_P (tmpl) && nargs == 2
3140       && same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (first_arg),
3141                                                     TREE_TYPE ((*arglist)[0])))
3142     {
3143       /* 12.8/6 says, "A declaration of a constructor for a class X is
3144          ill-formed if its first parameter is of type (optionally cv-qualified)
3145          X and either there are no other parameters or else all other
3146          parameters have default arguments. A member function template is never
3147          instantiated to produce such a constructor signature."
3148
3149          So if we're trying to copy an object of the containing class, don't
3150          consider a template constructor that has a first parameter type that
3151          is just a template parameter, as we would deduce a signature that we
3152          would then reject in the code below.  */
3153       if (tree firstparm = FUNCTION_FIRST_USER_PARMTYPE (tmpl))
3154         {
3155           firstparm = TREE_VALUE (firstparm);
3156           if (PACK_EXPANSION_P (firstparm))
3157             firstparm = PACK_EXPANSION_PATTERN (firstparm);
3158           if (TREE_CODE (firstparm) == TEMPLATE_TYPE_PARM)
3159             {
3160               gcc_assert (!explicit_targs);
3161               reason = invalid_copy_with_fn_template_rejection ();
3162               goto fail;
3163             }
3164         }
3165     }
3166
3167   nargs_without_in_chrg = ((first_arg_without_in_chrg != NULL_TREE ? 1 : 0)
3168                            + (len - skip_without_in_chrg));
3169   args_without_in_chrg = XALLOCAVEC (tree, nargs_without_in_chrg);
3170   ia = 0;
3171   if (first_arg_without_in_chrg != NULL_TREE)
3172     {
3173       args_without_in_chrg[ia] = first_arg_without_in_chrg;
3174       ++ia;
3175     }
3176   for (ix = skip_without_in_chrg;
3177        vec_safe_iterate (arglist, ix, &arg);
3178        ++ix)
3179     {
3180       args_without_in_chrg[ia] = arg;
3181       ++ia;
3182     }
3183   gcc_assert (ia == nargs_without_in_chrg);
3184
3185   errs = errorcount+sorrycount;
3186   fn = fn_type_unification (tmpl, explicit_targs, targs,
3187                             args_without_in_chrg,
3188                             nargs_without_in_chrg,
3189                             return_type, strict, flags, false,
3190                             complain & tf_decltype);
3191
3192   if (fn == error_mark_node)
3193     {
3194       /* Don't repeat unification later if it already resulted in errors.  */
3195       if (errorcount+sorrycount == errs)
3196         reason = template_unification_rejection (tmpl, explicit_targs,
3197                                                  targs, args_without_in_chrg,
3198                                                  nargs_without_in_chrg,
3199                                                  return_type, strict, flags);
3200       else
3201         reason = template_unification_error_rejection ();
3202       goto fail;
3203     }
3204
3205   if (DECL_CONSTRUCTOR_P (fn) && nargs == 2)
3206     {
3207       tree arg_types = FUNCTION_FIRST_USER_PARMTYPE (fn);
3208       if (arg_types && same_type_p (TYPE_MAIN_VARIANT (TREE_VALUE (arg_types)),
3209                                     ctype))
3210         {
3211           /* We're trying to produce a constructor with a prohibited signature,
3212              as discussed above; handle here any cases we didn't catch then,
3213              such as X(X<T>).  */
3214           reason = invalid_copy_with_fn_template_rejection ();
3215           goto fail;
3216         }
3217     }
3218
3219   if (obj != NULL_TREE)
3220     /* Aha, this is a conversion function.  */
3221     cand = add_conv_candidate (candidates, fn, obj, arglist,
3222                                access_path, conversion_path, complain);
3223   else
3224     cand = add_function_candidate (candidates, fn, ctype,
3225                                    first_arg, arglist, access_path,
3226                                    conversion_path, flags, complain);
3227   if (DECL_TI_TEMPLATE (fn) != tmpl)
3228     /* This situation can occur if a member template of a template
3229        class is specialized.  Then, instantiate_template might return
3230        an instantiation of the specialization, in which case the
3231        DECL_TI_TEMPLATE field will point at the original
3232        specialization.  For example:
3233
3234          template <class T> struct S { template <class U> void f(U);
3235                                        template <> void f(int) {}; };
3236          S<double> sd;
3237          sd.f(3);
3238
3239        Here, TMPL will be template <class U> S<double>::f(U).
3240        And, instantiate template will give us the specialization
3241        template <> S<double>::f(int).  But, the DECL_TI_TEMPLATE field
3242        for this will point at template <class T> template <> S<T>::f(int),
3243        so that we can find the definition.  For the purposes of
3244        overload resolution, however, we want the original TMPL.  */
3245     cand->template_decl = build_template_info (tmpl, targs);
3246   else
3247     cand->template_decl = DECL_TEMPLATE_INFO (fn);
3248   cand->explicit_targs = explicit_targs;
3249
3250   return cand;
3251  fail:
3252   return add_candidate (candidates, tmpl, first_arg, arglist, nargs, NULL,
3253                         access_path, conversion_path, 0, reason, flags);
3254 }
3255
3256
3257 static struct z_candidate *
3258 add_template_candidate (struct z_candidate **candidates, tree tmpl, tree ctype,
3259                         tree explicit_targs, tree first_arg,
3260                         const vec<tree, va_gc> *arglist, tree return_type,
3261                         tree access_path, tree conversion_path, int flags,
3262                         unification_kind_t strict, tsubst_flags_t complain)
3263 {
3264   return
3265     add_template_candidate_real (candidates, tmpl, ctype,
3266                                  explicit_targs, first_arg, arglist,
3267                                  return_type, access_path, conversion_path,
3268                                  flags, NULL_TREE, strict, complain);
3269 }
3270
3271 /* Create an overload candidate for the conversion function template TMPL,
3272    returning RETURN_TYPE, which will be invoked for expression OBJ to produce a
3273    pointer-to-function which will in turn be called with the argument list
3274    ARGLIST, and add it to CANDIDATES.  This does not change ARGLIST.  FLAGS is
3275    passed on to implicit_conversion.  */
3276
3277 static struct z_candidate *
3278 add_template_conv_candidate (struct z_candidate **candidates, tree tmpl,
3279                              tree obj,
3280                              const vec<tree, va_gc> *arglist,
3281                              tree return_type, tree access_path,
3282                              tree conversion_path, tsubst_flags_t complain)
3283 {
3284   /* Making this work broke PR 71117 and 85118, so until the committee resolves
3285      core issue 2189, let's disable this candidate if there are any call
3286      operators.  */
3287   if (*candidates)
3288     return NULL;
3289
3290   return
3291     add_template_candidate_real (candidates, tmpl, NULL_TREE, NULL_TREE,
3292                                  NULL_TREE, arglist, return_type, access_path,
3293                                  conversion_path, 0, obj, DEDUCE_CALL,
3294                                  complain);
3295 }
3296
3297 /* The CANDS are the set of candidates that were considered for
3298    overload resolution.  Return the set of viable candidates, or CANDS
3299    if none are viable.  If any of the candidates were viable, set
3300    *ANY_VIABLE_P to true.  STRICT_P is true if a candidate should be
3301    considered viable only if it is strictly viable.  */
3302
3303 static struct z_candidate*
3304 splice_viable (struct z_candidate *cands,
3305                bool strict_p,
3306                bool *any_viable_p)
3307 {
3308   struct z_candidate *viable;
3309   struct z_candidate **last_viable;
3310   struct z_candidate **cand;
3311   bool found_strictly_viable = false;
3312
3313   /* Be strict inside templates, since build_over_call won't actually
3314      do the conversions to get pedwarns.  */
3315   if (processing_template_decl)
3316     strict_p = true;
3317
3318   viable = NULL;
3319   last_viable = &viable;
3320   *any_viable_p = false;
3321
3322   cand = &cands;
3323   while (*cand)
3324     {
3325       struct z_candidate *c = *cand;
3326       if (!strict_p
3327           && (c->viable == 1 || TREE_CODE (c->fn) == TEMPLATE_DECL))
3328         {
3329           /* Be strict in the presence of a viable candidate.  Also if
3330              there are template candidates, so that we get deduction errors
3331              for them instead of silently preferring a bad conversion.  */
3332           strict_p = true;
3333           if (viable && !found_strictly_viable)
3334             {
3335               /* Put any spliced near matches back onto the main list so
3336                  that we see them if there is no strict match.  */
3337               *any_viable_p = false;
3338               *last_viable = cands;
3339               cands = viable;
3340               viable = NULL;
3341               last_viable = &viable;
3342             }
3343         }
3344
3345       if (strict_p ? c->viable == 1 : c->viable)
3346         {
3347           *last_viable = c;
3348           *cand = c->next;
3349           c->next = NULL;
3350           last_viable = &c->next;
3351           *any_viable_p = true;
3352           if (c->viable == 1)
3353             found_strictly_viable = true;
3354         }
3355       else
3356         cand = &c->next;
3357     }
3358
3359   return viable ? viable : cands;
3360 }
3361
3362 static bool
3363 any_strictly_viable (struct z_candidate *cands)
3364 {
3365   for (; cands; cands = cands->next)
3366     if (cands->viable == 1)
3367       return true;
3368   return false;
3369 }
3370
3371 /* OBJ is being used in an expression like "OBJ.f (...)".  In other
3372    words, it is about to become the "this" pointer for a member
3373    function call.  Take the address of the object.  */
3374
3375 static tree
3376 build_this (tree obj)
3377 {
3378   /* In a template, we are only concerned about the type of the
3379      expression, so we can take a shortcut.  */
3380   if (processing_template_decl)
3381     return build_address (obj);
3382
3383   return cp_build_addr_expr (obj, tf_warning_or_error);
3384 }
3385
3386 /* Returns true iff functions are equivalent. Equivalent functions are
3387    not '==' only if one is a function-local extern function or if
3388    both are extern "C".  */
3389
3390 static inline int
3391 equal_functions (tree fn1, tree fn2)
3392 {
3393   if (TREE_CODE (fn1) != TREE_CODE (fn2))
3394     return 0;
3395   if (TREE_CODE (fn1) == TEMPLATE_DECL)
3396     return fn1 == fn2;
3397   if (DECL_LOCAL_FUNCTION_P (fn1) || DECL_LOCAL_FUNCTION_P (fn2)
3398       || DECL_EXTERN_C_FUNCTION_P (fn1))
3399     return decls_match (fn1, fn2);
3400   return fn1 == fn2;
3401 }
3402
3403 /* Print information about a candidate being rejected due to INFO.  */
3404
3405 static void
3406 print_conversion_rejection (location_t loc, struct conversion_info *info)
3407 {
3408   tree from = info->from;
3409   if (!TYPE_P (from))
3410     from = lvalue_type (from);
3411   if (info->n_arg == -1)
3412     {
3413       /* Conversion of implicit `this' argument failed.  */
3414       if (!TYPE_P (info->from))
3415         /* A bad conversion for 'this' must be discarding cv-quals.  */
3416         inform (loc, "  passing %qT as %<this%> "
3417                 "argument discards qualifiers",
3418                 from);
3419       else
3420         inform (loc, "  no known conversion for implicit "
3421                 "%<this%> parameter from %qH to %qI",
3422                 from, info->to_type);
3423     }
3424   else if (!TYPE_P (info->from))
3425     {
3426       if (info->n_arg >= 0)
3427         inform (loc, "  conversion of argument %d would be ill-formed:",
3428                 info->n_arg + 1);
3429       perform_implicit_conversion (info->to_type, info->from,
3430                                    tf_warning_or_error);
3431     }
3432   else if (info->n_arg == -2)
3433     /* Conversion of conversion function return value failed.  */
3434     inform (loc, "  no known conversion from %qH to %qI",
3435             from, info->to_type);
3436   else
3437     inform (loc, "  no known conversion for argument %d from %qH to %qI",
3438             info->n_arg + 1, from, info->to_type);
3439 }
3440
3441 /* Print information about a candidate with WANT parameters and we found
3442    HAVE.  */
3443
3444 static void
3445 print_arity_information (location_t loc, unsigned int have, unsigned int want)
3446 {
3447   inform_n (loc, want,
3448             "  candidate expects %d argument, %d provided",
3449             "  candidate expects %d arguments, %d provided",
3450             want, have);
3451 }
3452
3453 /* Print information about one overload candidate CANDIDATE.  MSGSTR
3454    is the text to print before the candidate itself.
3455
3456    NOTE: Unlike most diagnostic functions in GCC, MSGSTR is expected
3457    to have been run through gettext by the caller.  This wart makes
3458    life simpler in print_z_candidates and for the translators.  */
3459
3460 static void
3461 print_z_candidate (location_t loc, const char *msgstr,
3462                    struct z_candidate *candidate)
3463 {
3464   const char *msg = (msgstr == NULL
3465                      ? ""
3466                      : ACONCAT ((msgstr, " ", NULL)));
3467   tree fn = candidate->fn;
3468   if (flag_new_inheriting_ctors)
3469     fn = strip_inheriting_ctors (fn);
3470   location_t cloc = location_of (fn);
3471
3472   if (identifier_p (fn))
3473     {
3474       cloc = loc;
3475       if (candidate->num_convs == 3)
3476         inform (cloc, "%s%<%D(%T, %T, %T)%> <built-in>", msg, fn,
3477                 candidate->convs[0]->type,
3478                 candidate->convs[1]->type,
3479                 candidate->convs[2]->type);
3480       else if (candidate->num_convs == 2)
3481         inform (cloc, "%s%<%D(%T, %T)%> <built-in>", msg, fn,
3482                 candidate->convs[0]->type,
3483                 candidate->convs[1]->type);
3484       else
3485         inform (cloc, "%s%<%D(%T)%> <built-in>", msg, fn,
3486                 candidate->convs[0]->type);
3487     }
3488   else if (TYPE_P (fn))
3489     inform (cloc, "%s%qT <conversion>", msg, fn);
3490   else if (candidate->viable == -1)
3491     inform (cloc, "%s%#qD <near match>", msg, fn);
3492   else if (DECL_DELETED_FN (fn))
3493     inform (cloc, "%s%#qD <deleted>", msg, fn);
3494   else
3495     inform (cloc, "%s%#qD", msg, fn);
3496   if (fn != candidate->fn)
3497     {
3498       cloc = location_of (candidate->fn);
3499       inform (cloc, "  inherited here");
3500     }
3501   /* Give the user some information about why this candidate failed.  */
3502   if (candidate->reason != NULL)
3503     {
3504       struct rejection_reason *r = candidate->reason;
3505
3506       switch (r->code)
3507         {
3508         case rr_arity:
3509           print_arity_information (cloc, r->u.arity.actual,
3510                                    r->u.arity.expected);
3511           break;
3512         case rr_arg_conversion:
3513           print_conversion_rejection (cloc, &r->u.conversion);
3514           break;
3515         case rr_bad_arg_conversion:
3516           print_conversion_rejection (cloc, &r->u.bad_conversion);
3517           break;
3518         case rr_explicit_conversion:
3519           inform (cloc, "  return type %qT of explicit conversion function "
3520                   "cannot be converted to %qT with a qualification "
3521                   "conversion", r->u.conversion.from,
3522                   r->u.conversion.to_type);
3523           break;
3524         case rr_template_conversion:
3525           inform (cloc, "  conversion from return type %qT of template "
3526                   "conversion function specialization to %qT is not an "
3527                   "exact match", r->u.conversion.from,
3528                   r->u.conversion.to_type);
3529           break;
3530         case rr_template_unification:
3531           /* We use template_unification_error_rejection if unification caused
3532              actual non-SFINAE errors, in which case we don't need to repeat
3533              them here.  */
3534           if (r->u.template_unification.tmpl == NULL_TREE)
3535             {
3536               inform (cloc, "  substitution of deduced template arguments "
3537                       "resulted in errors seen above");
3538               break;
3539             }
3540           /* Re-run template unification with diagnostics.  */
3541           inform (cloc, "  template argument deduction/substitution failed:");
3542           fn_type_unification (r->u.template_unification.tmpl,
3543                                r->u.template_unification.explicit_targs,
3544                                (make_tree_vec
3545                                 (r->u.template_unification.num_targs)),
3546                                r->u.template_unification.args,
3547                                r->u.template_unification.nargs,
3548                                r->u.template_unification.return_type,
3549                                r->u.template_unification.strict,
3550                                r->u.template_unification.flags,
3551                                true, false);
3552           break;
3553         case rr_invalid_copy:
3554           inform (cloc,
3555                   "  a constructor taking a single argument of its own "
3556                   "class type is invalid");
3557           break;
3558         case rr_constraint_failure:
3559           {
3560             tree tmpl = r->u.template_instantiation.tmpl;
3561             tree args = r->u.template_instantiation.targs;
3562             diagnose_constraints (cloc, tmpl, args);
3563           }
3564           break;
3565         case rr_inherited_ctor:
3566           inform (cloc, "  an inherited constructor is not a candidate for "
3567                   "initialization from an expression of the same or derived "
3568                   "type");
3569           break;
3570         case rr_none:
3571         default:
3572           /* This candidate didn't have any issues or we failed to
3573              handle a particular code.  Either way...  */
3574           gcc_unreachable ();
3575         }
3576     }
3577 }
3578
3579 static void
3580 print_z_candidates (location_t loc, struct z_candidate *candidates)
3581 {
3582   struct z_candidate *cand1;
3583   struct z_candidate **cand2;
3584
3585   if (!candidates)
3586     return;
3587
3588   /* Remove non-viable deleted candidates.  */
3589   cand1 = candidates;
3590   for (cand2 = &cand1; *cand2; )
3591     {
3592       if (TREE_CODE ((*cand2)->fn) == FUNCTION_DECL
3593           && !(*cand2)->viable
3594           && DECL_DELETED_FN ((*cand2)->fn))
3595         *cand2 = (*cand2)->next;
3596       else
3597         cand2 = &(*cand2)->next;
3598     }
3599   /* ...if there are any non-deleted ones.  */
3600   if (cand1)
3601     candidates = cand1;
3602
3603   /* There may be duplicates in the set of candidates.  We put off
3604      checking this condition as long as possible, since we have no way
3605      to eliminate duplicates from a set of functions in less than n^2
3606      time.  Now we are about to emit an error message, so it is more
3607      permissible to go slowly.  */
3608   for (cand1 = candidates; cand1; cand1 = cand1->next)
3609     {
3610       tree fn = cand1->fn;
3611       /* Skip builtin candidates and conversion functions.  */
3612       if (!DECL_P (fn))
3613         continue;
3614       cand2 = &cand1->next;
3615       while (*cand2)
3616         {
3617           if (DECL_P ((*cand2)->fn)
3618               && equal_functions (fn, (*cand2)->fn))
3619             *cand2 = (*cand2)->next;
3620           else
3621             cand2 = &(*cand2)->next;
3622         }
3623     }
3624
3625   for (; candidates; candidates = candidates->next)
3626     print_z_candidate (loc, "candidate:", candidates);
3627 }
3628
3629 /* USER_SEQ is a user-defined conversion sequence, beginning with a
3630    USER_CONV.  STD_SEQ is the standard conversion sequence applied to
3631    the result of the conversion function to convert it to the final
3632    desired type.  Merge the two sequences into a single sequence,
3633    and return the merged sequence.  */
3634
3635 static conversion *
3636 merge_conversion_sequences (conversion *user_seq, conversion *std_seq)
3637 {
3638   conversion **t;
3639   bool bad = user_seq->bad_p;
3640
3641   gcc_assert (user_seq->kind == ck_user);
3642
3643   /* Find the end of the second conversion sequence.  */
3644   for (t = &std_seq; (*t)->kind != ck_identity; t = &((*t)->u.next))
3645     {
3646       /* The entire sequence is a user-conversion sequence.  */
3647       (*t)->user_conv_p = true;
3648       if (bad)
3649         (*t)->bad_p = true;
3650     }
3651
3652   if ((*t)->rvaluedness_matches_p)
3653     /* We're binding a reference directly to the result of the conversion.
3654        build_user_type_conversion_1 stripped the REFERENCE_TYPE from the return
3655        type, but we want it back.  */
3656     user_seq->type = TREE_TYPE (TREE_TYPE (user_seq->cand->fn));
3657
3658   /* Replace the identity conversion with the user conversion
3659      sequence.  */
3660   *t = user_seq;
3661
3662   return std_seq;
3663 }
3664
3665 /* Handle overload resolution for initializing an object of class type from
3666    an initializer list.  First we look for a suitable constructor that
3667    takes a std::initializer_list; if we don't find one, we then look for a
3668    non-list constructor.
3669
3670    Parameters are as for add_candidates, except that the arguments are in
3671    the form of a CONSTRUCTOR (the initializer list) rather than a vector, and
3672    the RETURN_TYPE parameter is replaced by TOTYPE, the desired type.  */
3673
3674 static void
3675 add_list_candidates (tree fns, tree first_arg,
3676                      const vec<tree, va_gc> *args, tree totype,
3677                      tree explicit_targs, bool template_only,
3678                      tree conversion_path, tree access_path,
3679                      int flags,
3680                      struct z_candidate **candidates,
3681                      tsubst_flags_t complain)
3682 {
3683   gcc_assert (*candidates == NULL);
3684
3685   /* We're looking for a ctor for list-initialization.  */
3686   flags |= LOOKUP_LIST_INIT_CTOR;
3687   /* And we don't allow narrowing conversions.  We also use this flag to
3688      avoid the copy constructor call for copy-list-initialization.  */
3689   flags |= LOOKUP_NO_NARROWING;
3690
3691   unsigned nart = num_artificial_parms_for (OVL_FIRST (fns)) - 1;
3692   tree init_list = (*args)[nart];
3693
3694   /* Always use the default constructor if the list is empty (DR 990).  */
3695   if (CONSTRUCTOR_NELTS (init_list) == 0
3696       && TYPE_HAS_DEFAULT_CONSTRUCTOR (totype))
3697     ;
3698   /* If the class has a list ctor, try passing the list as a single
3699      argument first, but only consider list ctors.  */
3700   else if (TYPE_HAS_LIST_CTOR (totype))
3701     {
3702       flags |= LOOKUP_LIST_ONLY;
3703       add_candidates (fns, first_arg, args, NULL_TREE,
3704                       explicit_targs, template_only, conversion_path,
3705                       access_path, flags, candidates, complain);
3706       if (any_strictly_viable (*candidates))
3707         return;
3708     }
3709
3710   /* Expand the CONSTRUCTOR into a new argument vec.  */
3711   vec<tree, va_gc> *new_args;
3712   vec_alloc (new_args, nart + CONSTRUCTOR_NELTS (init_list));
3713   for (unsigned i = 0; i < nart; ++i)
3714     new_args->quick_push ((*args)[i]);
3715   for (unsigned i = 0; i < CONSTRUCTOR_NELTS (init_list); ++i)
3716     new_args->quick_push (CONSTRUCTOR_ELT (init_list, i)->value);
3717
3718   /* We aren't looking for list-ctors anymore.  */
3719   flags &= ~LOOKUP_LIST_ONLY;
3720   /* We allow more user-defined conversions within an init-list.  */
3721   flags &= ~LOOKUP_NO_CONVERSION;
3722
3723   add_candidates (fns, first_arg, new_args, NULL_TREE,
3724                   explicit_targs, template_only, conversion_path,
3725                   access_path, flags, candidates, complain);
3726 }
3727
3728 /* Returns the best overload candidate to perform the requested
3729    conversion.  This function is used for three the overloading situations
3730    described in [over.match.copy], [over.match.conv], and [over.match.ref].
3731    If TOTYPE is a REFERENCE_TYPE, we're trying to find a direct binding as
3732    per [dcl.init.ref], so we ignore temporary bindings.  */
3733
3734 static struct z_candidate *
3735 build_user_type_conversion_1 (tree totype, tree expr, int flags,
3736                               tsubst_flags_t complain)
3737 {
3738   struct z_candidate *candidates, *cand;
3739   tree fromtype;
3740   tree ctors = NULL_TREE;
3741   tree conv_fns = NULL_TREE;
3742   conversion *conv = NULL;
3743   tree first_arg = NULL_TREE;
3744   vec<tree, va_gc> *args = NULL;
3745   bool any_viable_p;
3746   int convflags;
3747
3748   if (!expr)
3749     return NULL;
3750
3751   fromtype = TREE_TYPE (expr);
3752
3753   /* We represent conversion within a hierarchy using RVALUE_CONV and
3754      BASE_CONV, as specified by [over.best.ics]; these become plain
3755      constructor calls, as specified in [dcl.init].  */
3756   gcc_assert (!MAYBE_CLASS_TYPE_P (fromtype) || !MAYBE_CLASS_TYPE_P (totype)
3757               || !DERIVED_FROM_P (totype, fromtype));
3758
3759   if (CLASS_TYPE_P (totype))
3760     /* Use lookup_fnfields_slot instead of lookup_fnfields to avoid
3761        creating a garbage BASELINK; constructors can't be inherited.  */
3762     ctors = get_class_binding (totype, complete_ctor_identifier);
3763
3764   if (MAYBE_CLASS_TYPE_P (fromtype))
3765     {
3766       tree to_nonref = non_reference (totype);
3767       if (same_type_ignoring_top_level_qualifiers_p (to_nonref, fromtype) ||
3768           (CLASS_TYPE_P (to_nonref) && CLASS_TYPE_P (fromtype)
3769            && DERIVED_FROM_P (to_nonref, fromtype)))
3770         {
3771           /* [class.conv.fct] A conversion function is never used to
3772              convert a (possibly cv-qualified) object to the (possibly
3773              cv-qualified) same object type (or a reference to it), to a
3774              (possibly cv-qualified) base class of that type (or a
3775              reference to it)...  */
3776         }
3777       else
3778         conv_fns = lookup_conversions (fromtype);
3779     }
3780
3781   candidates = 0;
3782   flags |= LOOKUP_NO_CONVERSION;
3783   if (BRACE_ENCLOSED_INITIALIZER_P (expr))
3784     flags |= LOOKUP_NO_NARROWING;
3785
3786   /* It's OK to bind a temporary for converting constructor arguments, but
3787      not in converting the return value of a conversion operator.  */
3788   convflags = ((flags & LOOKUP_NO_TEMP_BIND) | LOOKUP_NO_CONVERSION
3789                | (flags & LOOKUP_NO_NARROWING));
3790   flags &= ~LOOKUP_NO_TEMP_BIND;
3791
3792   if (ctors)
3793     {
3794       int ctorflags = flags;
3795
3796       first_arg = build_dummy_object (totype);
3797
3798       /* We should never try to call the abstract or base constructor
3799          from here.  */
3800       gcc_assert (!DECL_HAS_IN_CHARGE_PARM_P (OVL_FIRST (ctors))
3801                   && !DECL_HAS_VTT_PARM_P (OVL_FIRST (ctors)));
3802
3803       args = make_tree_vector_single (expr);
3804       if (BRACE_ENCLOSED_INITIALIZER_P (expr))
3805         {
3806           /* List-initialization.  */
3807           add_list_candidates (ctors, first_arg, args, totype, NULL_TREE,
3808                                false, TYPE_BINFO (totype), TYPE_BINFO (totype),
3809                                ctorflags, &candidates, complain);
3810         }
3811       else
3812         {
3813           add_candidates (ctors, first_arg, args, NULL_TREE, NULL_TREE, false,
3814                           TYPE_BINFO (totype), TYPE_BINFO (totype),
3815                           ctorflags, &candidates, complain);
3816         }
3817
3818       for (cand = candidates; cand; cand = cand->next)
3819         {
3820           cand->second_conv = build_identity_conv (totype, NULL_TREE);
3821
3822           /* If totype isn't a reference, and LOOKUP_NO_TEMP_BIND isn't
3823              set, then this is copy-initialization.  In that case, "The
3824              result of the call is then used to direct-initialize the
3825              object that is the destination of the copy-initialization."
3826              [dcl.init]
3827
3828              We represent this in the conversion sequence with an
3829              rvalue conversion, which means a constructor call.  */
3830           if (TREE_CODE (totype) != REFERENCE_TYPE
3831               && !(convflags & LOOKUP_NO_TEMP_BIND))
3832             cand->second_conv
3833               = build_conv (ck_rvalue, totype, cand->second_conv);
3834         }
3835     }
3836
3837   if (conv_fns)
3838     {
3839       if (BRACE_ENCLOSED_INITIALIZER_P (expr))
3840         first_arg = CONSTRUCTOR_ELT (expr, 0)->value;
3841       else
3842         first_arg = expr;
3843     }
3844
3845   for (; conv_fns; conv_fns = TREE_CHAIN (conv_fns))
3846     {
3847       tree conversion_path = TREE_PURPOSE (conv_fns);
3848       struct z_candidate *old_candidates;
3849
3850       /* If we are called to convert to a reference type, we are trying to
3851          find a direct binding, so don't even consider temporaries.  If
3852          we don't find a direct binding, the caller will try again to
3853          look for a temporary binding.  */
3854       if (TREE_CODE (totype) == REFERENCE_TYPE)
3855         convflags |= LOOKUP_NO_TEMP_BIND;
3856
3857       old_candidates = candidates;
3858       add_candidates (TREE_VALUE (conv_fns), first_arg, NULL, totype,
3859                       NULL_TREE, false,
3860                       conversion_path, TYPE_BINFO (fromtype),
3861                       flags, &candidates, complain);
3862
3863       for (cand = candidates; cand != old_candidates; cand = cand->next)
3864         {
3865           tree rettype = TREE_TYPE (TREE_TYPE (cand->fn));
3866           conversion *ics
3867             = implicit_conversion (totype,
3868                                    rettype,
3869                                    0,
3870                                    /*c_cast_p=*/false, convflags,
3871                                    complain);
3872
3873           /* If LOOKUP_NO_TEMP_BIND isn't set, then this is
3874              copy-initialization.  In that case, "The result of the
3875              call is then used to direct-initialize the object that is
3876              the destination of the copy-initialization."  [dcl.init]
3877
3878              We represent this in the conversion sequence with an
3879              rvalue conversion, which means a constructor call.  But
3880              don't add a second rvalue conversion if there's already
3881              one there.  Which there really shouldn't be, but it's
3882              harmless since we'd add it here anyway. */
3883           if (ics && MAYBE_CLASS_TYPE_P (totype) && ics->kind != ck_rvalue
3884               && !(convflags & LOOKUP_NO_TEMP_BIND))
3885             ics = build_conv (ck_rvalue, totype, ics);
3886
3887           cand->second_conv = ics;
3888
3889           if (!ics)
3890             {
3891               cand->viable = 0;
3892               cand->reason = arg_conversion_rejection (NULL_TREE, -2,
3893                                                        rettype, totype);
3894             }
3895           else if (DECL_NONCONVERTING_P (cand->fn)
3896                    && ics->rank > cr_exact)
3897             {
3898               /* 13.3.1.5: For direct-initialization, those explicit
3899                  conversion functions that are not hidden within S and
3900                  yield type T or a type that can be converted to type T
3901                  with a qualification conversion (4.4) are also candidate
3902                  functions.  */
3903               /* 13.3.1.6 doesn't have a parallel restriction, but it should;
3904                  I've raised this issue with the committee. --jason 9/2011 */
3905               cand->viable = -1;
3906               cand->reason = explicit_conversion_rejection (rettype, totype);
3907             }
3908           else if (cand->viable == 1 && ics->bad_p)
3909             {
3910               cand->viable = -1;
3911               cand->reason
3912                 = bad_arg_conversion_rejection (NULL_TREE, -2,
3913                                                 rettype, totype);
3914             }
3915           else if (primary_template_specialization_p (cand->fn)
3916                    && ics->rank > cr_exact)
3917             {
3918               /* 13.3.3.1.2: If the user-defined conversion is specified by
3919                  a specialization of a conversion function template, the
3920                  second standard conversion sequence shall have exact match
3921                  rank.  */
3922               cand->viable = -1;
3923               cand->reason = template_conversion_rejection (rettype, totype);
3924             }
3925         }
3926     }
3927
3928   candidates = splice_viable (candidates, false, &any_viable_p);
3929   if (!any_viable_p)
3930     {
3931       if (args)
3932         release_tree_vector (args);
3933       return NULL;
3934     }
3935
3936   cand = tourney (candidates, complain);
3937   if (cand == 0)
3938     {
3939       if (complain & tf_error)
3940         {
3941           error ("conversion from %qH to %qI is ambiguous",
3942                  fromtype, totype);
3943           print_z_candidates (location_of (expr), candidates);
3944         }
3945
3946       cand = candidates;        /* any one will do */
3947       cand->second_conv = build_ambiguous_conv (totype, expr);
3948       cand->second_conv->user_conv_p = true;
3949       if (!any_strictly_viable (candidates))
3950         cand->second_conv->bad_p = true;
3951       if (flags & LOOKUP_ONLYCONVERTING)
3952         cand->second_conv->need_temporary_p = true;
3953       /* If there are viable candidates, don't set ICS_BAD_FLAG; an
3954          ambiguous conversion is no worse than another user-defined
3955          conversion.  */
3956
3957       return cand;
3958     }
3959
3960   tree convtype;
3961   if (!DECL_CONSTRUCTOR_P (cand->fn))
3962     convtype = non_reference (TREE_TYPE (TREE_TYPE (cand->fn)));
3963   else if (cand->second_conv->kind == ck_rvalue)
3964     /* DR 5: [in the first step of copy-initialization]...if the function
3965        is a constructor, the call initializes a temporary of the
3966        cv-unqualified version of the destination type. */
3967     convtype = cv_unqualified (totype);
3968   else
3969     convtype = totype;
3970   /* Build the user conversion sequence.  */
3971   conv = build_conv
3972     (ck_user,
3973      convtype,
3974      build_identity_conv (TREE_TYPE (expr), expr));
3975   conv->cand = cand;
3976   if (cand->viable == -1)
3977     conv->bad_p = true;
3978
3979   /* Remember that this was a list-initialization.  */
3980   if (flags & LOOKUP_NO_NARROWING)
3981     conv->check_narrowing = true;
3982
3983   /* Combine it with the second conversion sequence.  */
3984   cand->second_conv = merge_conversion_sequences (conv,
3985                                                   cand->second_conv);
3986
3987   return cand;
3988 }
3989
3990 /* Wrapper for above. */
3991
3992 tree
3993 build_user_type_conversion (tree totype, tree expr, int flags,
3994                             tsubst_flags_t complain)
3995 {
3996   struct z_candidate *cand;
3997   tree ret;
3998
3999   bool subtime = timevar_cond_start (TV_OVERLOAD);
4000   cand = build_user_type_conversion_1 (totype, expr, flags, complain);
4001
4002   if (cand)
4003     {
4004       if (cand->second_conv->kind == ck_ambig)
4005         ret = error_mark_node;
4006       else
4007         {
4008           expr = convert_like (cand->second_conv, expr, complain);
4009           ret = convert_from_reference (expr);
4010         }
4011     }
4012   else
4013     ret = NULL_TREE;
4014
4015   timevar_cond_stop (TV_OVERLOAD, subtime);
4016   return ret;
4017 }
4018
4019 /* Subroutine of convert_nontype_argument.
4020
4021    EXPR is an expression used in a context that requires a converted
4022    constant-expression, such as a template non-type parameter.  Do any
4023    necessary conversions (that are permitted for converted
4024    constant-expressions) to convert it to the desired type.
4025
4026    If conversion is successful, returns the converted expression;
4027    otherwise, returns error_mark_node.  */
4028
4029 tree
4030 build_converted_constant_expr (tree type, tree expr, tsubst_flags_t complain)
4031 {
4032   conversion *conv;
4033   void *p;
4034   tree t;
4035   location_t loc = EXPR_LOC_OR_LOC (expr, input_location);
4036
4037   if (error_operand_p (expr))
4038     return error_mark_node;
4039
4040   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
4041   p = conversion_obstack_alloc (0);
4042
4043   conv = implicit_conversion (type, TREE_TYPE (expr), expr,
4044                               /*c_cast_p=*/false,
4045                               LOOKUP_IMPLICIT, complain);
4046
4047   /* A converted constant expression of type T is an expression, implicitly
4048      converted to type T, where the converted expression is a constant
4049      expression and the implicit conversion sequence contains only
4050
4051        * user-defined conversions,
4052        * lvalue-to-rvalue conversions (7.1),
4053        * array-to-pointer conversions (7.2),
4054        * function-to-pointer conversions (7.3),
4055        * qualification conversions (7.5),
4056        * integral promotions (7.6),
4057        * integral conversions (7.8) other than narrowing conversions (11.6.4),
4058        * null pointer conversions (7.11) from std::nullptr_t,
4059        * null member pointer conversions (7.12) from std::nullptr_t, and
4060        * function pointer conversions (7.13),
4061
4062      and where the reference binding (if any) binds directly.  */
4063
4064   for (conversion *c = conv;
4065        conv && c->kind != ck_identity;
4066        c = next_conversion (c))
4067     {
4068       switch (c->kind)
4069         {
4070           /* A conversion function is OK.  If it isn't constexpr, we'll
4071              complain later that the argument isn't constant.  */
4072         case ck_user:
4073           /* The lvalue-to-rvalue conversion is OK.  */
4074         case ck_rvalue:
4075           /* Array-to-pointer and function-to-pointer.  */
4076         case ck_lvalue:
4077           /* Function pointer conversions.  */
4078         case ck_fnptr:
4079           /* Qualification conversions.  */
4080         case ck_qual:
4081           break;
4082
4083         case ck_ref_bind:
4084           if (c->need_temporary_p)
4085             {
4086               if (complain & tf_error)
4087                 error_at (loc, "initializing %qH with %qI in converted "
4088                           "constant expression does not bind directly",
4089                           type, next_conversion (c)->type);
4090               conv = NULL;
4091             }
4092           break;
4093
4094         case ck_base:
4095         case ck_pmem:
4096         case ck_ptr:
4097         case ck_std:
4098           t = next_conversion (c)->type;
4099           if (INTEGRAL_OR_ENUMERATION_TYPE_P (t)
4100               && INTEGRAL_OR_ENUMERATION_TYPE_P (type))
4101             /* Integral promotion or conversion.  */
4102             break;
4103           if (NULLPTR_TYPE_P (t))
4104             /* Conversion from nullptr to pointer or pointer-to-member.  */
4105             break;
4106
4107           if (complain & tf_error)
4108             error_at (loc, "conversion from %qH to %qI in a "
4109                       "converted constant expression", t, type);
4110           /* fall through.  */
4111
4112         default:
4113           conv = NULL;
4114           break;
4115         }
4116     }
4117
4118   /* Avoid confusing convert_nontype_argument by introducing
4119      a redundant conversion to the same reference type.  */
4120   if (conv && conv->kind == ck_ref_bind
4121       && REFERENCE_REF_P (expr))
4122     {
4123       tree ref = TREE_OPERAND (expr, 0);
4124       if (same_type_p (type, TREE_TYPE (ref)))
4125         return ref;
4126     }
4127
4128   if (conv)
4129     expr = convert_like (conv, expr, complain);
4130   else
4131     expr = error_mark_node;
4132
4133   /* Free all the conversions we allocated.  */
4134   obstack_free (&conversion_obstack, p);
4135
4136   return expr;
4137 }
4138
4139 /* Do any initial processing on the arguments to a function call.  */
4140
4141 static vec<tree, va_gc> *
4142 resolve_args (vec<tree, va_gc> *args, tsubst_flags_t complain)
4143 {
4144   unsigned int ix;
4145   tree arg;
4146
4147   FOR_EACH_VEC_SAFE_ELT (args, ix, arg)
4148     {
4149       if (error_operand_p (arg))
4150         return NULL;
4151       else if (VOID_TYPE_P (TREE_TYPE (arg)))
4152         {
4153           if (complain & tf_error)
4154             error ("invalid use of void expression");
4155           return NULL;
4156         }
4157       else if (invalid_nonstatic_memfn_p (input_location, arg, complain))
4158         return NULL;
4159     }
4160   return args;
4161 }
4162
4163 /* Perform overload resolution on FN, which is called with the ARGS.
4164
4165    Return the candidate function selected by overload resolution, or
4166    NULL if the event that overload resolution failed.  In the case
4167    that overload resolution fails, *CANDIDATES will be the set of
4168    candidates considered, and ANY_VIABLE_P will be set to true or
4169    false to indicate whether or not any of the candidates were
4170    viable.
4171
4172    The ARGS should already have gone through RESOLVE_ARGS before this
4173    function is called.  */
4174
4175 static struct z_candidate *
4176 perform_overload_resolution (tree fn,
4177                              const vec<tree, va_gc> *args,
4178                              struct z_candidate **candidates,
4179                              bool *any_viable_p, tsubst_flags_t complain)
4180 {
4181   struct z_candidate *cand;
4182   tree explicit_targs;
4183   int template_only;
4184
4185   bool subtime = timevar_cond_start (TV_OVERLOAD);
4186
4187   explicit_targs = NULL_TREE;
4188   template_only = 0;
4189
4190   *candidates = NULL;
4191   *any_viable_p = true;
4192
4193   /* Check FN.  */
4194   gcc_assert (TREE_CODE (fn) == FUNCTION_DECL
4195               || TREE_CODE (fn) == TEMPLATE_DECL
4196               || TREE_CODE (fn) == OVERLOAD
4197               || TREE_CODE (fn) == TEMPLATE_ID_EXPR);
4198
4199   if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
4200     {
4201       explicit_targs = TREE_OPERAND (fn, 1);
4202       fn = TREE_OPERAND (fn, 0);
4203       template_only = 1;
4204     }
4205
4206   /* Add the various candidate functions.  */
4207   add_candidates (fn, NULL_TREE, args, NULL_TREE,
4208                   explicit_targs, template_only,
4209                   /*conversion_path=*/NULL_TREE,
4210                   /*access_path=*/NULL_TREE,
4211                   LOOKUP_NORMAL,
4212                   candidates, complain);
4213
4214   *candidates = splice_viable (*candidates, false, any_viable_p);
4215   if (*any_viable_p)
4216     cand = tourney (*candidates, complain);
4217   else
4218     cand = NULL;
4219
4220   timevar_cond_stop (TV_OVERLOAD, subtime);
4221   return cand;
4222 }
4223
4224 /* Print an error message about being unable to build a call to FN with
4225    ARGS.  ANY_VIABLE_P indicates whether any candidate functions could
4226    be located; CANDIDATES is a possibly empty list of such
4227    functions.  */
4228
4229 static void
4230 print_error_for_call_failure (tree fn, vec<tree, va_gc> *args,
4231                               struct z_candidate *candidates)
4232 {
4233   tree targs = NULL_TREE;
4234   if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
4235     {
4236       targs = TREE_OPERAND (fn, 1);
4237       fn = TREE_OPERAND (fn, 0);
4238     }
4239   tree name = OVL_NAME (fn);
4240   location_t loc = location_of (name);
4241   if (targs)
4242     name = lookup_template_function (name, targs);
4243
4244   if (!any_strictly_viable (candidates))
4245     error_at (loc, "no matching function for call to %<%D(%A)%>",
4246               name, build_tree_list_vec (args));
4247   else
4248     error_at (loc, "call of overloaded %<%D(%A)%> is ambiguous",
4249               name, build_tree_list_vec (args));
4250   if (candidates)
4251     print_z_candidates (loc, candidates);
4252 }
4253
4254 /* Return an expression for a call to FN (a namespace-scope function,
4255    or a static member function) with the ARGS.  This may change
4256    ARGS.  */
4257
4258 tree
4259 build_new_function_call (tree fn, vec<tree, va_gc> **args,
4260                          tsubst_flags_t complain)
4261 {
4262   struct z_candidate *candidates, *cand;
4263   bool any_viable_p;
4264   void *p;
4265   tree result;
4266
4267   if (args != NULL && *args != NULL)
4268     {
4269       *args = resolve_args (*args, complain);
4270       if (*args == NULL)
4271         return error_mark_node;
4272     }
4273
4274   if (flag_tm)
4275     tm_malloc_replacement (fn);
4276
4277   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
4278   p = conversion_obstack_alloc (0);
4279
4280   cand = perform_overload_resolution (fn, *args, &candidates, &any_viable_p,
4281                                       complain);
4282
4283   if (!cand)
4284     {
4285       if (complain & tf_error)
4286         {
4287           // If there is a single (non-viable) function candidate,
4288           // let the error be diagnosed by cp_build_function_call_vec.
4289           if (!any_viable_p && candidates && ! candidates->next
4290               && (TREE_CODE (candidates->fn) == FUNCTION_DECL))
4291             return cp_build_function_call_vec (candidates->fn, args, complain);
4292
4293           // Otherwise, emit notes for non-viable candidates.
4294           print_error_for_call_failure (fn, *args, candidates);
4295         }
4296       result = error_mark_node;
4297     }
4298   else
4299     {
4300       int flags = LOOKUP_NORMAL;
4301       /* If fn is template_id_expr, the call has explicit template arguments
4302          (e.g. func<int>(5)), communicate this info to build_over_call
4303          through flags so that later we can use it to decide whether to warn
4304          about peculiar null pointer conversion.  */
4305       if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
4306         {
4307           /* If overload resolution selects a specialization of a
4308              function concept for non-dependent template arguments,
4309              the expression is true if the constraints are satisfied
4310              and false otherwise.
4311
4312              NOTE: This is an extension of Concepts Lite TS that
4313              allows constraints to be used in expressions. */
4314           if (flag_concepts && !processing_template_decl)
4315             {
4316               tree tmpl = DECL_TI_TEMPLATE (cand->fn);
4317               tree targs = DECL_TI_ARGS (cand->fn);
4318               tree decl = DECL_TEMPLATE_RESULT (tmpl);
4319               if (DECL_DECLARED_CONCEPT_P (decl))
4320                 return evaluate_function_concept (decl, targs);
4321             }
4322
4323           flags |= LOOKUP_EXPLICIT_TMPL_ARGS;
4324         }
4325
4326       result = build_over_call (cand, flags, complain);
4327     }
4328
4329   /* Free all the conversions we allocated.  */
4330   obstack_free (&conversion_obstack, p);
4331
4332   return result;
4333 }
4334
4335 /* Build a call to a global operator new.  FNNAME is the name of the
4336    operator (either "operator new" or "operator new[]") and ARGS are
4337    the arguments provided.  This may change ARGS.  *SIZE points to the
4338    total number of bytes required by the allocation, and is updated if
4339    that is changed here.  *COOKIE_SIZE is non-NULL if a cookie should
4340    be used.  If this function determines that no cookie should be
4341    used, after all, *COOKIE_SIZE is set to NULL_TREE.  If SIZE_CHECK
4342    is not NULL_TREE, it is evaluated before calculating the final
4343    array size, and if it fails, the array size is replaced with
4344    (size_t)-1 (usually triggering a std::bad_alloc exception).  If FN
4345    is non-NULL, it will be set, upon return, to the allocation
4346    function called.  */
4347
4348 tree
4349 build_operator_new_call (tree fnname, vec<tree, va_gc> **args,
4350                          tree *size, tree *cookie_size,
4351                          tree align_arg, tree size_check,
4352                          tree *fn, tsubst_flags_t complain)
4353 {
4354   tree original_size = *size;
4355   tree fns;
4356   struct z_candidate *candidates;
4357   struct z_candidate *cand = NULL;
4358   bool any_viable_p;
4359
4360   if (fn)
4361     *fn = NULL_TREE;
4362   /* Set to (size_t)-1 if the size check fails.  */
4363   if (size_check != NULL_TREE)
4364     {
4365       tree errval = TYPE_MAX_VALUE (sizetype);
4366       if (cxx_dialect >= cxx11 && flag_exceptions)
4367         errval = throw_bad_array_new_length ();
4368       *size = fold_build3 (COND_EXPR, sizetype, size_check,
4369                            original_size, errval);
4370     }
4371   vec_safe_insert (*args, 0, *size);
4372   *args = resolve_args (*args, complain);
4373   if (*args == NULL)
4374     return error_mark_node;
4375
4376   /* Based on:
4377
4378        [expr.new]
4379
4380        If this lookup fails to find the name, or if the allocated type
4381        is not a class type, the allocation function's name is looked
4382        up in the global scope.
4383
4384      we disregard block-scope declarations of "operator new".  */
4385   fns = lookup_name_real (fnname, 0, 1, /*block_p=*/false, 0, 0);
4386   fns = lookup_arg_dependent (fnname, fns, *args);
4387
4388   if (align_arg)
4389     {
4390       vec<tree, va_gc>* align_args
4391         = vec_copy_and_insert (*args, align_arg, 1);
4392       cand = perform_overload_resolution (fns, align_args, &candidates,
4393                                           &any_viable_p, tf_none);
4394       if (cand)
4395         *args = align_args;
4396       /* If no aligned allocation function matches, try again without the
4397          alignment.  */
4398     }
4399
4400   /* Figure out what function is being called.  */
4401   if (!cand)
4402     cand = perform_overload_resolution (fns, *args, &candidates, &any_viable_p,
4403                                         complain);
4404
4405   /* If no suitable function could be found, issue an error message
4406      and give up.  */
4407   if (!cand)
4408     {
4409       if (complain & tf_error)
4410         print_error_for_call_failure (fns, *args, candidates);
4411       return error_mark_node;
4412     }
4413
4414    /* If a cookie is required, add some extra space.  Whether
4415       or not a cookie is required cannot be determined until
4416       after we know which function was called.  */
4417    if (*cookie_size)
4418      {
4419        bool use_cookie = true;
4420        tree arg_types;
4421
4422        arg_types = TYPE_ARG_TYPES (TREE_TYPE (cand->fn));
4423        /* Skip the size_t parameter.  */
4424        arg_types = TREE_CHAIN (arg_types);
4425        /* Check the remaining parameters (if any).  */
4426        if (arg_types
4427            && TREE_CHAIN (arg_types) == void_list_node
4428            && same_type_p (TREE_VALUE (arg_types),
4429                            ptr_type_node))
4430          use_cookie = false;
4431        /* If we need a cookie, adjust the number of bytes allocated.  */
4432        if (use_cookie)
4433          {
4434            /* Update the total size.  */
4435            *size = size_binop (PLUS_EXPR, original_size, *cookie_size);
4436            if (size_check)
4437              {
4438                /* Set to (size_t)-1 if the size check fails.  */
4439                gcc_assert (size_check != NULL_TREE);
4440                *size = fold_build3 (COND_EXPR, sizetype, size_check,
4441                                     *size, TYPE_MAX_VALUE (sizetype));
4442             }
4443            /* Update the argument list to reflect the adjusted size.  */
4444            (**args)[0] = *size;
4445          }
4446        else
4447          *cookie_size = NULL_TREE;
4448      }
4449
4450    /* Tell our caller which function we decided to call.  */
4451    if (fn)
4452      *fn = cand->fn;
4453
4454    /* Build the CALL_EXPR.  */
4455    return build_over_call (cand, LOOKUP_NORMAL, complain);
4456 }
4457
4458 /* Build a new call to operator().  This may change ARGS.  */
4459
4460 static tree
4461 build_op_call_1 (tree obj, vec<tree, va_gc> **args, tsubst_flags_t complain)
4462 {
4463   struct z_candidate *candidates = 0, *cand;
4464   tree fns, convs, first_mem_arg = NULL_TREE;
4465   bool any_viable_p;
4466   tree result = NULL_TREE;
4467   void *p;
4468
4469   obj = mark_lvalue_use (obj);
4470
4471   if (error_operand_p (obj))
4472     return error_mark_node;
4473
4474   tree type = TREE_TYPE (obj);
4475
4476   obj = prep_operand (obj);
4477
4478   if (TYPE_PTRMEMFUNC_P (type))
4479     {
4480       if (complain & tf_error)
4481         /* It's no good looking for an overloaded operator() on a
4482            pointer-to-member-function.  */
4483         error ("pointer-to-member function %qE cannot be called without "
4484                "an object; consider using %<.*%> or %<->*%>", obj);
4485       return error_mark_node;
4486     }
4487
4488   if (TYPE_BINFO (type))
4489     {
4490       fns = lookup_fnfields (TYPE_BINFO (type), call_op_identifier, 1);
4491       if (fns == error_mark_node)
4492         return error_mark_node;
4493     }
4494   else
4495     fns = NULL_TREE;
4496
4497   if (args != NULL && *args != NULL)
4498     {
4499       *args = resolve_args (*args, complain);
4500       if (*args == NULL)
4501         return error_mark_node;
4502     }
4503
4504   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
4505   p = conversion_obstack_alloc (0);
4506
4507   if (fns)
4508     {
4509       first_mem_arg = obj;
4510
4511       add_candidates (BASELINK_FUNCTIONS (fns),
4512                       first_mem_arg, *args, NULL_TREE,
4513                       NULL_TREE, false,
4514                       BASELINK_BINFO (fns), BASELINK_ACCESS_BINFO (fns),
4515                       LOOKUP_NORMAL, &candidates, complain);
4516     }
4517
4518   convs = lookup_conversions (type);
4519
4520   for (; convs; convs = TREE_CHAIN (convs))
4521     {
4522       tree totype = TREE_TYPE (convs);
4523
4524       if (TYPE_PTRFN_P (totype)
4525           || TYPE_REFFN_P (totype)
4526           || (TREE_CODE (totype) == REFERENCE_TYPE
4527               && TYPE_PTRFN_P (TREE_TYPE (totype))))
4528         for (ovl_iterator iter (TREE_VALUE (convs)); iter; ++iter)
4529           {
4530             tree fn = *iter;
4531
4532             if (DECL_NONCONVERTING_P (fn))
4533               continue;
4534
4535             if (TREE_CODE (fn) == TEMPLATE_DECL)
4536               add_template_conv_candidate
4537                 (&candidates, fn, obj, *args, totype,
4538                  /*access_path=*/NULL_TREE,
4539                  /*conversion_path=*/NULL_TREE, complain);
4540             else
4541               add_conv_candidate (&candidates, fn, obj,
4542                                   *args, /*conversion_path=*/NULL_TREE,
4543                                   /*access_path=*/NULL_TREE, complain);
4544           }
4545     }
4546
4547   /* Be strict here because if we choose a bad conversion candidate, the
4548      errors we get won't mention the call context.  */
4549   candidates = splice_viable (candidates, true, &any_viable_p);
4550   if (!any_viable_p)
4551     {
4552       if (complain & tf_error)
4553         {
4554           error ("no match for call to %<(%T) (%A)%>", TREE_TYPE (obj),
4555                  build_tree_list_vec (*args));
4556           print_z_candidates (location_of (TREE_TYPE (obj)), candidates);
4557         }
4558       result = error_mark_node;
4559     }
4560   else
4561     {
4562       cand = tourney (candidates, complain);
4563       if (cand == 0)
4564         {
4565           if (complain & tf_error)
4566             {
4567               error ("call of %<(%T) (%A)%> is ambiguous", 
4568                      TREE_TYPE (obj), build_tree_list_vec (*args));
4569               print_z_candidates (location_of (TREE_TYPE (obj)), candidates);
4570             }
4571           result = error_mark_node;
4572         }
4573       else if (TREE_CODE (cand->fn) == FUNCTION_DECL
4574                && DECL_OVERLOADED_OPERATOR_P (cand->fn)
4575                && DECL_OVERLOADED_OPERATOR_IS (cand->fn, CALL_EXPR))
4576         result = build_over_call (cand, LOOKUP_NORMAL, complain);
4577       else
4578         {
4579           if (TREE_CODE (cand->fn) == FUNCTION_DECL)
4580             obj = convert_like_with_context (cand->convs[0], obj, cand->fn,
4581                                              -1, complain);
4582           else
4583             {
4584               gcc_checking_assert (TYPE_P (cand->fn));
4585               obj = convert_like (cand->convs[0], obj, complain);
4586             }
4587           obj = convert_from_reference (obj);
4588           result = cp_build_function_call_vec (obj, args, complain);
4589         }
4590     }
4591
4592   /* Free all the conversions we allocated.  */
4593   obstack_free (&conversion_obstack, p);
4594
4595   return result;
4596 }
4597
4598 /* Wrapper for above.  */
4599
4600 tree
4601 build_op_call (tree obj, vec<tree, va_gc> **args, tsubst_flags_t complain)
4602 {
4603   tree ret;
4604   bool subtime = timevar_cond_start (TV_OVERLOAD);
4605   ret = build_op_call_1 (obj, args, complain);
4606   timevar_cond_stop (TV_OVERLOAD, subtime);
4607   return ret;
4608 }
4609
4610 /* Called by op_error to prepare format strings suitable for the error
4611    function.  It concatenates a prefix (controlled by MATCH), ERRMSG,
4612    and a suffix (controlled by NTYPES).  */
4613
4614 static const char *
4615 op_error_string (const char *errmsg, int ntypes, bool match)
4616 {
4617   const char *msg;
4618
4619   const char *msgp = concat (match ? G_("ambiguous overload for ")
4620                                    : G_("no match for "), errmsg, NULL);
4621
4622   if (ntypes == 3)
4623     msg = concat (msgp, G_(" (operand types are %qT, %qT, and %qT)"), NULL);
4624   else if (ntypes == 2)
4625     msg = concat (msgp, G_(" (operand types are %qT and %qT)"), NULL);
4626   else
4627     msg = concat (msgp, G_(" (operand type is %qT)"), NULL);
4628
4629   return msg;
4630 }
4631
4632 static void
4633 op_error (location_t loc, enum tree_code code, enum tree_code code2,
4634           tree arg1, tree arg2, tree arg3, bool match)
4635 {
4636   bool assop = code == MODIFY_EXPR;
4637   const char *opname = OVL_OP_INFO (assop, assop ? code2 : code)->name;
4638
4639   switch (code)
4640     {
4641     case COND_EXPR:
4642       if (flag_diagnostics_show_caret)
4643         error_at (loc, op_error_string (G_("ternary %<operator?:%>"),
4644                                         3, match),
4645                   TREE_TYPE (arg1), TREE_TYPE (arg2), TREE_TYPE (arg3));
4646       else
4647         error_at (loc, op_error_string (G_("ternary %<operator?:%> "
4648                                            "in %<%E ? %E : %E%>"), 3, match),
4649                   arg1, arg2, arg3,
4650                   TREE_TYPE (arg1), TREE_TYPE (arg2), TREE_TYPE (arg3));
4651       break;
4652
4653     case POSTINCREMENT_EXPR:
4654     case POSTDECREMENT_EXPR:
4655       if (flag_diagnostics_show_caret)
4656         error_at (loc, op_error_string (G_("%<operator%s%>"), 1, match),
4657                   opname, TREE_TYPE (arg1));
4658       else
4659         error_at (loc, op_error_string (G_("%<operator%s%> in %<%E%s%>"),
4660                                         1, match),
4661                   opname, arg1, opname, TREE_TYPE (arg1));
4662       break;
4663
4664     case ARRAY_REF:
4665       if (flag_diagnostics_show_caret)
4666         error_at (loc, op_error_string (G_("%<operator[]%>"), 2, match),
4667                   TREE_TYPE (arg1), TREE_TYPE (arg2));
4668       else
4669         error_at (loc, op_error_string (G_("%<operator[]%> in %<%E[%E]%>"),
4670                                         2, match),
4671                   arg1, arg2, TREE_TYPE (arg1), TREE_TYPE (arg2));
4672       break;
4673
4674     case REALPART_EXPR:
4675     case IMAGPART_EXPR:
4676       if (flag_diagnostics_show_caret)
4677         error_at (loc, op_error_string (G_("%qs"), 1, match),
4678                   opname, TREE_TYPE (arg1));
4679       else
4680         error_at (loc, op_error_string (G_("%qs in %<%s %E%>"), 1, match),
4681                   opname, opname, arg1, TREE_TYPE (arg1));
4682       break;
4683
4684     default:
4685       if (arg2)
4686         if (flag_diagnostics_show_caret)
4687           error_at (loc, op_error_string (G_("%<operator%s%>"), 2, match),
4688                     opname, TREE_TYPE (arg1), TREE_TYPE (arg2));
4689         else
4690           error_at (loc, op_error_string (G_("%<operator%s%> in %<%E %s %E%>"),
4691                                           2, match),
4692                     opname, arg1, opname, arg2,
4693                     TREE_TYPE (arg1), TREE_TYPE (arg2));
4694       else
4695         if (flag_diagnostics_show_caret)
4696           error_at (loc, op_error_string (G_("%<operator%s%>"), 1, match),
4697                     opname, TREE_TYPE (arg1));
4698         else
4699           error_at (loc, op_error_string (G_("%<operator%s%> in %<%s%E%>"),
4700                                           1, match),
4701                     opname, opname, arg1, TREE_TYPE (arg1));
4702       break;
4703     }
4704 }
4705
4706 /* Return the implicit conversion sequence that could be used to
4707    convert E1 to E2 in [expr.cond].  */
4708
4709 static conversion *
4710 conditional_conversion (tree e1, tree e2, tsubst_flags_t complain)
4711 {
4712   tree t1 = non_reference (TREE_TYPE (e1));
4713   tree t2 = non_reference (TREE_TYPE (e2));
4714   conversion *conv;
4715   bool good_base;
4716
4717   /* [expr.cond]
4718
4719      If E2 is an lvalue: E1 can be converted to match E2 if E1 can be
4720      implicitly converted (clause _conv_) to the type "lvalue reference to
4721      T2", subject to the constraint that in the conversion the
4722      reference must bind directly (_dcl.init.ref_) to an lvalue.
4723
4724      If E2 is an xvalue: E1 can be converted to match E2 if E1 can be
4725      implicitly converted to the type "rvalue reference to T2", subject to
4726      the constraint that the reference must bind directly.  */
4727   if (glvalue_p (e2))
4728     {
4729       tree rtype = cp_build_reference_type (t2, !lvalue_p (e2));
4730       conv = implicit_conversion (rtype,
4731                                   t1,
4732                                   e1,
4733                                   /*c_cast_p=*/false,
4734                                   LOOKUP_NO_TEMP_BIND|LOOKUP_NO_RVAL_BIND
4735                                   |LOOKUP_ONLYCONVERTING,
4736                                   complain);
4737       if (conv && !conv->bad_p)
4738         return conv;
4739     }
4740
4741   /* If E2 is a prvalue or if neither of the conversions above can be done
4742      and at least one of the operands has (possibly cv-qualified) class
4743      type: */
4744   if (!CLASS_TYPE_P (t1) && !CLASS_TYPE_P (t2))
4745     return NULL;
4746
4747   /* [expr.cond]
4748
4749      If E1 and E2 have class type, and the underlying class types are
4750      the same or one is a base class of the other: E1 can be converted
4751      to match E2 if the class of T2 is the same type as, or a base
4752      class of, the class of T1, and the cv-qualification of T2 is the
4753      same cv-qualification as, or a greater cv-qualification than, the
4754      cv-qualification of T1.  If the conversion is applied, E1 is
4755      changed to an rvalue of type T2 that still refers to the original
4756      source class object (or the appropriate subobject thereof).  */
4757   if (CLASS_TYPE_P (t1) && CLASS_TYPE_P (t2)
4758       && ((good_base = DERIVED_FROM_P (t2, t1)) || DERIVED_FROM_P (t1, t2)))
4759     {
4760       if (good_base && at_least_as_qualified_p (t2, t1))
4761         {
4762           conv = build_identity_conv (t1, e1);
4763           if (!same_type_p (TYPE_MAIN_VARIANT (t1),
4764                             TYPE_MAIN_VARIANT (t2)))
4765             conv = build_conv (ck_base, t2, conv);
4766           else
4767             conv = build_conv (ck_rvalue, t2, conv);
4768           return conv;
4769         }
4770       else
4771         return NULL;
4772     }
4773   else
4774     /* [expr.cond]
4775
4776        Otherwise: E1 can be converted to match E2 if E1 can be implicitly
4777        converted to the type that expression E2 would have if E2 were
4778        converted to an rvalue (or the type it has, if E2 is an rvalue).  */
4779     return implicit_conversion (t2, t1, e1, /*c_cast_p=*/false,
4780                                 LOOKUP_IMPLICIT, complain);
4781 }
4782
4783 /* Implement [expr.cond].  ARG1, ARG2, and ARG3 are the three
4784    arguments to the conditional expression.  */
4785
4786 static tree
4787 build_conditional_expr_1 (location_t loc, tree arg1, tree arg2, tree arg3,
4788                           tsubst_flags_t complain)
4789 {
4790   tree arg2_type;
4791   tree arg3_type;
4792   tree result = NULL_TREE;
4793   tree result_type = NULL_TREE;
4794   bool is_glvalue = true;
4795   struct z_candidate *candidates = 0;
4796   struct z_candidate *cand;
4797   void *p;
4798   tree orig_arg2, orig_arg3;
4799
4800   /* As a G++ extension, the second argument to the conditional can be
4801      omitted.  (So that `a ? : c' is roughly equivalent to `a ? a :
4802      c'.)  If the second operand is omitted, make sure it is
4803      calculated only once.  */
4804   if (!arg2)
4805     {
4806       if (complain & tf_error)
4807         pedwarn (loc, OPT_Wpedantic,
4808                  "ISO C++ forbids omitting the middle term of a ?: expression");
4809
4810       if ((complain & tf_warning) && !truth_value_p (TREE_CODE (arg1)))
4811         warn_for_omitted_condop (loc, arg1);
4812
4813       /* Make sure that lvalues remain lvalues.  See g++.oliva/ext1.C.  */
4814       if (lvalue_p (arg1))
4815         arg2 = arg1 = cp_stabilize_reference (arg1);
4816       else
4817         arg2 = arg1 = cp_save_expr (arg1);
4818     }
4819
4820   /* If something has already gone wrong, just pass that fact up the
4821      tree.  */
4822   if (error_operand_p (arg1)
4823       || error_operand_p (arg2)
4824       || error_operand_p (arg3))
4825     return error_mark_node;
4826
4827   orig_arg2 = arg2;
4828   orig_arg3 = arg3;
4829
4830   if (VECTOR_INTEGER_TYPE_P (TREE_TYPE (arg1)))
4831     {
4832       tree arg1_type = TREE_TYPE (arg1);
4833
4834       /* If arg1 is another cond_expr choosing between -1 and 0,
4835          then we can use its comparison.  It may help to avoid
4836          additional comparison, produce more accurate diagnostics
4837          and enables folding.  */
4838       if (TREE_CODE (arg1) == VEC_COND_EXPR
4839           && integer_minus_onep (TREE_OPERAND (arg1, 1))
4840           && integer_zerop (TREE_OPERAND (arg1, 2)))
4841         arg1 = TREE_OPERAND (arg1, 0);
4842
4843       arg1 = force_rvalue (arg1, complain);
4844       arg2 = force_rvalue (arg2, complain);
4845       arg3 = force_rvalue (arg3, complain);
4846
4847       /* force_rvalue can return error_mark on valid arguments.  */
4848       if (error_operand_p (arg1)
4849           || error_operand_p (arg2)
4850           || error_operand_p (arg3))
4851         return error_mark_node;
4852
4853       arg2_type = TREE_TYPE (arg2);
4854       arg3_type = TREE_TYPE (arg3);
4855
4856       if (!VECTOR_TYPE_P (arg2_type)
4857           && !VECTOR_TYPE_P (arg3_type))
4858         {
4859           /* Rely on the error messages of the scalar version.  */
4860           tree scal = build_conditional_expr_1 (loc, integer_one_node,
4861                                                 orig_arg2, orig_arg3, complain);
4862           if (scal == error_mark_node)
4863             return error_mark_node;
4864           tree stype = TREE_TYPE (scal);
4865           tree ctype = TREE_TYPE (arg1_type);
4866           if (TYPE_SIZE (stype) != TYPE_SIZE (ctype)
4867               || (!INTEGRAL_TYPE_P (stype) && !SCALAR_FLOAT_TYPE_P (stype)))
4868             {
4869               if (complain & tf_error)
4870                 error_at (loc, "inferred scalar type %qT is not an integer or "
4871                           "floating point type of the same size as %qT", stype,
4872                           COMPARISON_CLASS_P (arg1)
4873                           ? TREE_TYPE (TREE_TYPE (TREE_OPERAND (arg1, 0)))
4874                           : ctype);
4875               return error_mark_node;
4876             }
4877
4878           tree vtype = build_opaque_vector_type (stype,
4879                          TYPE_VECTOR_SUBPARTS (arg1_type));
4880           /* We could pass complain & tf_warning to unsafe_conversion_p,
4881              but the warnings (like Wsign-conversion) have already been
4882              given by the scalar build_conditional_expr_1. We still check
4883              unsafe_conversion_p to forbid truncating long long -> float.  */
4884           if (unsafe_conversion_p (loc, stype, arg2, NULL_TREE, false))
4885             {
4886               if (complain & tf_error)
4887                 error_at (loc, "conversion of scalar %qH to vector %qI "
4888                                "involves truncation", arg2_type, vtype);
4889               return error_mark_node;
4890             }
4891           if (unsafe_conversion_p (loc, stype, arg3, NULL_TREE, false))
4892             {
4893               if (complain & tf_error)
4894                 error_at (loc, "conversion of scalar %qH to vector %qI "
4895                                "involves truncation", arg3_type, vtype);
4896               return error_mark_node;
4897             }
4898
4899           arg2 = cp_convert (stype, arg2, complain);
4900           arg2 = save_expr (arg2);
4901           arg2 = build_vector_from_val (vtype, arg2);
4902           arg2_type = vtype;
4903           arg3 = cp_convert (stype, arg3, complain);
4904           arg3 = save_expr (arg3);
4905           arg3 = build_vector_from_val (vtype, arg3);
4906           arg3_type = vtype;
4907         }
4908
4909       if (VECTOR_TYPE_P (arg2_type) != VECTOR_TYPE_P (arg3_type))
4910         {
4911           enum stv_conv convert_flag =
4912             scalar_to_vector (loc, VEC_COND_EXPR, arg2, arg3,
4913                               complain & tf_error);
4914
4915           switch (convert_flag)
4916             {
4917               case stv_error:
4918                 return error_mark_node;
4919               case stv_firstarg:
4920                 {
4921                   arg2 = save_expr (arg2);
4922                   arg2 = convert (TREE_TYPE (arg3_type), arg2);
4923                   arg2 = build_vector_from_val (arg3_type, arg2);
4924                   arg2_type = TREE_TYPE (arg2);
4925                   break;
4926                 }
4927               case stv_secondarg:
4928                 {
4929                   arg3 = save_expr (arg3);
4930                   arg3 = convert (TREE_TYPE (arg2_type), arg3);
4931                   arg3 = build_vector_from_val (arg2_type, arg3);
4932                   arg3_type = TREE_TYPE (arg3);
4933                   break;
4934                 }
4935               default:
4936                 break;
4937             }
4938         }
4939
4940       if (!same_type_p (arg2_type, arg3_type)
4941           || maybe_ne (TYPE_VECTOR_SUBPARTS (arg1_type),
4942                        TYPE_VECTOR_SUBPARTS (arg2_type))
4943           || TYPE_SIZE (arg1_type) != TYPE_SIZE (arg2_type))
4944         {
4945           if (complain & tf_error)
4946             error_at (loc,
4947                       "incompatible vector types in conditional expression: "
4948                       "%qT, %qT and %qT", TREE_TYPE (arg1),
4949                       TREE_TYPE (orig_arg2), TREE_TYPE (orig_arg3));
4950           return error_mark_node;
4951         }
4952
4953       if (!COMPARISON_CLASS_P (arg1))
4954         {
4955           tree cmp_type = build_same_sized_truth_vector_type (arg1_type);
4956           arg1 = build2 (NE_EXPR, cmp_type, arg1, build_zero_cst (arg1_type));
4957         }
4958       return build3_loc (loc, VEC_COND_EXPR, arg2_type, arg1, arg2, arg3);
4959     }
4960
4961   /* [expr.cond]
4962
4963      The first expression is implicitly converted to bool (clause
4964      _conv_).  */
4965   arg1 = perform_implicit_conversion_flags (boolean_type_node, arg1, complain,
4966                                             LOOKUP_NORMAL);
4967   if (error_operand_p (arg1))
4968     return error_mark_node;
4969
4970   /* [expr.cond]
4971
4972      If either the second or the third operand has type (possibly
4973      cv-qualified) void, then the lvalue-to-rvalue (_conv.lval_),
4974      array-to-pointer (_conv.array_), and function-to-pointer
4975      (_conv.func_) standard conversions are performed on the second
4976      and third operands.  */
4977   arg2_type = unlowered_expr_type (arg2);
4978   arg3_type = unlowered_expr_type (arg3);
4979   if (VOID_TYPE_P (arg2_type) || VOID_TYPE_P (arg3_type))
4980     {
4981       /* Do the conversions.  We don't these for `void' type arguments
4982          since it can't have any effect and since decay_conversion
4983          does not handle that case gracefully.  */
4984       if (!VOID_TYPE_P (arg2_type))
4985         arg2 = decay_conversion (arg2, complain);
4986       if (!VOID_TYPE_P (arg3_type))
4987         arg3 = decay_conversion (arg3, complain);
4988       arg2_type = TREE_TYPE (arg2);
4989       arg3_type = TREE_TYPE (arg3);
4990
4991       /* [expr.cond]
4992
4993          One of the following shall hold:
4994
4995          --The second or the third operand (but not both) is a
4996            throw-expression (_except.throw_); the result is of the
4997            type of the other and is an rvalue.
4998
4999          --Both the second and the third operands have type void; the
5000            result is of type void and is an rvalue.
5001
5002          We must avoid calling force_rvalue for expressions of type
5003          "void" because it will complain that their value is being
5004          used.  */
5005       if (TREE_CODE (arg2) == THROW_EXPR
5006           && TREE_CODE (arg3) != THROW_EXPR)
5007         {
5008           if (!VOID_TYPE_P (arg3_type))
5009             {
5010               arg3 = force_rvalue (arg3, complain);
5011               if (arg3 == error_mark_node)
5012                 return error_mark_node;
5013             }
5014           arg3_type = TREE_TYPE (arg3);
5015           result_type = arg3_type;
5016         }
5017       else if (TREE_CODE (arg2) != THROW_EXPR
5018                && TREE_CODE (arg3) == THROW_EXPR)
5019         {
5020           if (!VOID_TYPE_P (arg2_type))
5021             {
5022               arg2 = force_rvalue (arg2, complain);
5023               if (arg2 == error_mark_node)
5024                 return error_mark_node;
5025             }
5026           arg2_type = TREE_TYPE (arg2);
5027           result_type = arg2_type;
5028         }
5029       else if (VOID_TYPE_P (arg2_type) && VOID_TYPE_P (arg3_type))
5030         result_type = void_type_node;
5031       else
5032         {
5033           if (complain & tf_error)
5034             {
5035               if (VOID_TYPE_P (arg2_type))
5036                 error_at (EXPR_LOC_OR_LOC (arg3, loc),
5037                           "second operand to the conditional operator "
5038                           "is of type %<void%>, but the third operand is "
5039                           "neither a throw-expression nor of type %<void%>");
5040               else
5041                 error_at (EXPR_LOC_OR_LOC (arg2, loc),
5042                           "third operand to the conditional operator "
5043                           "is of type %<void%>, but the second operand is "
5044                           "neither a throw-expression nor of type %<void%>");
5045             }
5046           return error_mark_node;
5047         }
5048
5049       is_glvalue = false;
5050       goto valid_operands;
5051     }
5052   /* [expr.cond]
5053
5054      Otherwise, if the second and third operand have different types,
5055      and either has (possibly cv-qualified) class type, or if both are
5056      glvalues of the same value category and the same type except for
5057      cv-qualification, an attempt is made to convert each of those operands
5058      to the type of the other.  */
5059   else if (!same_type_p (arg2_type, arg3_type)
5060             && (CLASS_TYPE_P (arg2_type) || CLASS_TYPE_P (arg3_type)
5061                 || (same_type_ignoring_top_level_qualifiers_p (arg2_type,
5062                                                                arg3_type)
5063                     && glvalue_p (arg2) && glvalue_p (arg3)
5064                     && lvalue_p (arg2) == lvalue_p (arg3))))
5065     {
5066       conversion *conv2;
5067       conversion *conv3;
5068       bool converted = false;
5069
5070       /* Get the high-water mark for the CONVERSION_OBSTACK.  */
5071       p = conversion_obstack_alloc (0);
5072
5073       conv2 = conditional_conversion (arg2, arg3, complain);
5074       conv3 = conditional_conversion (arg3, arg2, complain);
5075
5076       /* [expr.cond]
5077
5078          If both can be converted, or one can be converted but the
5079          conversion is ambiguous, the program is ill-formed.  If
5080          neither can be converted, the operands are left unchanged and
5081          further checking is performed as described below.  If exactly
5082          one conversion is possible, that conversion is applied to the
5083          chosen operand and the converted operand is used in place of
5084          the original operand for the remainder of this section.  */
5085       if ((conv2 && !conv2->bad_p
5086            && conv3 && !conv3->bad_p)
5087           || (conv2 && conv2->kind == ck_ambig)
5088           || (conv3 && conv3->kind == ck_ambig))
5089         {
5090           if (complain & tf_error)
5091             {
5092               error_at (loc, "operands to ?: have different types %qT and %qT",
5093                         arg2_type, arg3_type);
5094               if (conv2 && !conv2->bad_p && conv3 && !conv3->bad_p)
5095                 inform (loc, "  and each type can be converted to the other");
5096               else if (conv2 && conv2->kind == ck_ambig)
5097                 convert_like (conv2, arg2, complain);
5098               else
5099                 convert_like (conv3, arg3, complain);
5100             }
5101           result = error_mark_node;
5102         }
5103       else if (conv2 && !conv2->bad_p)
5104         {
5105           arg2 = convert_like (conv2, arg2, complain);
5106           arg2 = convert_from_reference (arg2);
5107           arg2_type = TREE_TYPE (arg2);
5108           /* Even if CONV2 is a valid conversion, the result of the
5109              conversion may be invalid.  For example, if ARG3 has type
5110              "volatile X", and X does not have a copy constructor
5111              accepting a "volatile X&", then even if ARG2 can be
5112              converted to X, the conversion will fail.  */
5113           if (error_operand_p (arg2))
5114             result = error_mark_node;
5115           converted = true;
5116         }
5117       else if (conv3 && !conv3->bad_p)
5118         {
5119           arg3 = convert_like (conv3, arg3, complain);
5120           arg3 = convert_from_reference (arg3);
5121           arg3_type = TREE_TYPE (arg3);
5122           if (error_operand_p (arg3))
5123             result = error_mark_node;
5124           converted = true;
5125         }
5126
5127       /* Free all the conversions we allocated.  */
5128       obstack_free (&conversion_obstack, p);
5129
5130       if (result)
5131         return result;
5132
5133       /* If, after the conversion, both operands have class type,
5134          treat the cv-qualification of both operands as if it were the
5135          union of the cv-qualification of the operands.
5136
5137          The standard is not clear about what to do in this
5138          circumstance.  For example, if the first operand has type
5139          "const X" and the second operand has a user-defined
5140          conversion to "volatile X", what is the type of the second
5141          operand after this step?  Making it be "const X" (matching
5142          the first operand) seems wrong, as that discards the
5143          qualification without actually performing a copy.  Leaving it
5144          as "volatile X" seems wrong as that will result in the
5145          conditional expression failing altogether, even though,
5146          according to this step, the one operand could be converted to
5147          the type of the other.  */
5148       if (converted
5149           && CLASS_TYPE_P (arg2_type)
5150           && cp_type_quals (arg2_type) != cp_type_quals (arg3_type))
5151         arg2_type = arg3_type =
5152           cp_build_qualified_type (arg2_type,
5153                                    cp_type_quals (arg2_type)
5154                                    | cp_type_quals (arg3_type));
5155     }
5156
5157   /* [expr.cond]
5158
5159      If the second and third operands are glvalues of the same value
5160      category and have the same type, the result is of that type and
5161      value category.  */
5162   if (((lvalue_p (arg2) && lvalue_p (arg3))
5163        || (xvalue_p (arg2) && xvalue_p (arg3)))
5164       && same_type_p (arg2_type, arg3_type))
5165     {
5166       result_type = arg2_type;
5167       if (processing_template_decl)
5168         /* Let lvalue_kind know this was a glvalue.  */
5169         result_type = cp_build_reference_type (result_type, xvalue_p (arg2));
5170
5171       arg2 = mark_lvalue_use (arg2);
5172       arg3 = mark_lvalue_use (arg3);
5173       goto valid_operands;
5174     }
5175
5176   /* [expr.cond]
5177
5178      Otherwise, the result is an rvalue.  If the second and third
5179      operand do not have the same type, and either has (possibly
5180      cv-qualified) class type, overload resolution is used to
5181      determine the conversions (if any) to be applied to the operands
5182      (_over.match.oper_, _over.built_).  */
5183   is_glvalue = false;
5184   if (!same_type_p (arg2_type, arg3_type)
5185       && (CLASS_TYPE_P (arg2_type) || CLASS_TYPE_P (arg3_type)))
5186     {
5187       tree args[3];
5188       conversion *conv;
5189       bool any_viable_p;
5190
5191       /* Rearrange the arguments so that add_builtin_candidate only has
5192          to know about two args.  In build_builtin_candidate, the
5193          arguments are unscrambled.  */
5194       args[0] = arg2;
5195       args[1] = arg3;
5196       args[2] = arg1;
5197       add_builtin_candidates (&candidates,
5198                               COND_EXPR,
5199                               NOP_EXPR,
5200                               ovl_op_identifier (false, COND_EXPR),
5201                               args,
5202                               LOOKUP_NORMAL, complain);
5203
5204       /* [expr.cond]
5205
5206          If the overload resolution fails, the program is
5207          ill-formed.  */
5208       candidates = splice_viable (candidates, false, &any_viable_p);
5209       if (!any_viable_p)
5210         {
5211           if (complain & tf_error)
5212             error_at (loc, "operands to ?: have different types %qT and %qT",
5213                       arg2_type, arg3_type);
5214           return error_mark_node;
5215         }
5216       cand = tourney (candidates, complain);
5217       if (!cand)
5218         {
5219           if (complain & tf_error)
5220             {
5221               op_error (loc, COND_EXPR, NOP_EXPR, arg1, arg2, arg3, FALSE);
5222               print_z_candidates (loc, candidates);
5223             }
5224           return error_mark_node;
5225         }
5226
5227       /* [expr.cond]
5228
5229          Otherwise, the conversions thus determined are applied, and
5230          the converted operands are used in place of the original
5231          operands for the remainder of this section.  */
5232       conv = cand->convs[0];
5233       arg1 = convert_like (conv, arg1, complain);
5234       conv = cand->convs[1];
5235       arg2 = convert_like (conv, arg2, complain);
5236       arg2_type = TREE_TYPE (arg2);
5237       conv = cand->convs[2];
5238       arg3 = convert_like (conv, arg3, complain);
5239       arg3_type = TREE_TYPE (arg3);
5240     }
5241
5242   /* [expr.cond]
5243
5244      Lvalue-to-rvalue (_conv.lval_), array-to-pointer (_conv.array_),
5245      and function-to-pointer (_conv.func_) standard conversions are
5246      performed on the second and third operands.
5247
5248      We need to force the lvalue-to-rvalue conversion here for class types,
5249      so we get TARGET_EXPRs; trying to deal with a COND_EXPR of class rvalues
5250      that isn't wrapped with a TARGET_EXPR plays havoc with exception
5251      regions.  */
5252
5253   arg2 = force_rvalue (arg2, complain);
5254   if (!CLASS_TYPE_P (arg2_type))
5255     arg2_type = TREE_TYPE (arg2);
5256
5257   arg3 = force_rvalue (arg3, complain);
5258   if (!CLASS_TYPE_P (arg3_type))
5259     arg3_type = TREE_TYPE (arg3);
5260
5261   if (arg2 == error_mark_node || arg3 == error_mark_node)
5262     return error_mark_node;
5263
5264   /* [expr.cond]
5265
5266      After those conversions, one of the following shall hold:
5267
5268      --The second and third operands have the same type; the result  is  of
5269        that type.  */
5270   if (same_type_p (arg2_type, arg3_type))
5271     result_type = arg2_type;
5272   /* [expr.cond]
5273
5274      --The second and third operands have arithmetic or enumeration
5275        type; the usual arithmetic conversions are performed to bring
5276        them to a common type, and the result is of that type.  */
5277   else if ((ARITHMETIC_TYPE_P (arg2_type)
5278             || UNSCOPED_ENUM_P (arg2_type))
5279            && (ARITHMETIC_TYPE_P (arg3_type)
5280                || UNSCOPED_ENUM_P (arg3_type)))
5281     {
5282       /* In this case, there is always a common type.  */
5283       result_type = type_after_usual_arithmetic_conversions (arg2_type,
5284                                                              arg3_type);
5285       if (complain & tf_warning)
5286         do_warn_double_promotion (result_type, arg2_type, arg3_type,
5287                                   "implicit conversion from %qH to %qI to "
5288                                   "match other result of conditional",
5289                                   loc);
5290
5291       if (TREE_CODE (arg2_type) == ENUMERAL_TYPE
5292           && TREE_CODE (arg3_type) == ENUMERAL_TYPE)
5293         {
5294           if (TREE_CODE (orig_arg2) == CONST_DECL
5295               && TREE_CODE (orig_arg3) == CONST_DECL
5296               && DECL_CONTEXT (orig_arg2) == DECL_CONTEXT (orig_arg3))
5297             /* Two enumerators from the same enumeration can have different
5298                types when the enumeration is still being defined.  */;
5299           else if (complain & tf_warning)
5300             warning_at (loc, OPT_Wenum_compare, "enumeral mismatch in "
5301                         "conditional expression: %qT vs %qT",
5302                         arg2_type, arg3_type);
5303         }
5304       else if (extra_warnings
5305                && ((TREE_CODE (arg2_type) == ENUMERAL_TYPE
5306                     && !same_type_p (arg3_type, type_promotes_to (arg2_type)))
5307                    || (TREE_CODE (arg3_type) == ENUMERAL_TYPE
5308                        && !same_type_p (arg2_type,
5309                                         type_promotes_to (arg3_type)))))
5310         {
5311           if (complain & tf_warning)
5312             warning_at (loc, OPT_Wextra, "enumeral and non-enumeral type in "
5313                         "conditional expression");
5314         }
5315
5316       arg2 = perform_implicit_conversion (result_type, arg2, complain);
5317       arg3 = perform_implicit_conversion (result_type, arg3, complain);
5318     }
5319   /* [expr.cond]
5320
5321      --The second and third operands have pointer type, or one has
5322        pointer type and the other is a null pointer constant; pointer
5323        conversions (_conv.ptr_) and qualification conversions
5324        (_conv.qual_) are performed to bring them to their composite
5325        pointer type (_expr.rel_).  The result is of the composite
5326        pointer type.
5327
5328      --The second and third operands have pointer to member type, or
5329        one has pointer to member type and the other is a null pointer
5330        constant; pointer to member conversions (_conv.mem_) and
5331        qualification conversions (_conv.qual_) are performed to bring
5332        them to a common type, whose cv-qualification shall match the
5333        cv-qualification of either the second or the third operand.
5334        The result is of the common type.  */
5335   else if ((null_ptr_cst_p (arg2)
5336             && TYPE_PTR_OR_PTRMEM_P (arg3_type))
5337            || (null_ptr_cst_p (arg3)
5338                && TYPE_PTR_OR_PTRMEM_P (arg2_type))
5339            || (TYPE_PTR_P (arg2_type) && TYPE_PTR_P (arg3_type))
5340            || (TYPE_PTRDATAMEM_P (arg2_type) && TYPE_PTRDATAMEM_P (arg3_type))
5341            || (TYPE_PTRMEMFUNC_P (arg2_type) && TYPE_PTRMEMFUNC_P (arg3_type)))
5342     {
5343       result_type = composite_pointer_type (arg2_type, arg3_type, arg2,
5344                                             arg3, CPO_CONDITIONAL_EXPR,
5345                                             complain);
5346       if (result_type == error_mark_node)
5347         return error_mark_node;
5348       arg2 = perform_implicit_conversion (result_type, arg2, complain);
5349       arg3 = perform_implicit_conversion (result_type, arg3, complain);
5350     }
5351
5352   if (!result_type)
5353     {
5354       if (complain & tf_error)
5355         error_at (loc, "operands to ?: have different types %qT and %qT",
5356                   arg2_type, arg3_type);
5357       return error_mark_node;
5358     }
5359
5360   if (arg2 == error_mark_node || arg3 == error_mark_node)
5361     return error_mark_node;
5362
5363  valid_operands:
5364   result = build3_loc (loc, COND_EXPR, result_type, arg1, arg2, arg3);
5365
5366   /* If the ARG2 and ARG3 are the same and don't have side-effects,
5367      warn here, because the COND_EXPR will be turned into ARG2.  */
5368   if (warn_duplicated_branches
5369       && (complain & tf_warning)
5370       && (arg2 == arg3 || operand_equal_p (arg2, arg3, 0)))
5371     warning_at (EXPR_LOCATION (result), OPT_Wduplicated_branches,
5372                 "this condition has identical branches");
5373
5374   /* We can't use result_type below, as fold might have returned a
5375      throw_expr.  */
5376
5377   if (!is_glvalue)
5378     {
5379       /* Expand both sides into the same slot, hopefully the target of
5380          the ?: expression.  We used to check for TARGET_EXPRs here,
5381          but now we sometimes wrap them in NOP_EXPRs so the test would
5382          fail.  */
5383       if (CLASS_TYPE_P (TREE_TYPE (result)))
5384         result = get_target_expr_sfinae (result, complain);
5385       /* If this expression is an rvalue, but might be mistaken for an
5386          lvalue, we must add a NON_LVALUE_EXPR.  */
5387       result = rvalue (result);
5388     }
5389   else
5390     result = force_paren_expr (result);
5391
5392   return result;
5393 }
5394
5395 /* Wrapper for above.  */
5396
5397 tree
5398 build_conditional_expr (location_t loc, tree arg1, tree arg2, tree arg3,
5399                         tsubst_flags_t complain)
5400 {
5401   tree ret;
5402   bool subtime = timevar_cond_start (TV_OVERLOAD);
5403   ret = build_conditional_expr_1 (loc, arg1, arg2, arg3, complain);
5404   timevar_cond_stop (TV_OVERLOAD, subtime);
5405   return ret;
5406 }
5407
5408 /* OPERAND is an operand to an expression.  Perform necessary steps
5409    required before using it.  If OPERAND is NULL_TREE, NULL_TREE is
5410    returned.  */
5411
5412 static tree
5413 prep_operand (tree operand)
5414 {
5415   if (operand)
5416     {
5417       if (CLASS_TYPE_P (TREE_TYPE (operand))
5418           && CLASSTYPE_TEMPLATE_INSTANTIATION (TREE_TYPE (operand)))
5419         /* Make sure the template type is instantiated now.  */
5420         instantiate_class_template (TYPE_MAIN_VARIANT (TREE_TYPE (operand)));
5421     }
5422
5423   return operand;
5424 }
5425
5426 /* Add each of the viable functions in FNS (a FUNCTION_DECL or
5427    OVERLOAD) to the CANDIDATES, returning an updated list of
5428    CANDIDATES.  The ARGS are the arguments provided to the call;
5429    if FIRST_ARG is non-null it is the implicit object argument,
5430    otherwise the first element of ARGS is used if needed.  The
5431    EXPLICIT_TARGS are explicit template arguments provided.
5432    TEMPLATE_ONLY is true if only template functions should be
5433    considered.  CONVERSION_PATH, ACCESS_PATH, and FLAGS are as for
5434    add_function_candidate.  */
5435
5436 static void
5437 add_candidates (tree fns, tree first_arg, const vec<tree, va_gc> *args,
5438                 tree return_type,
5439                 tree explicit_targs, bool template_only,
5440                 tree conversion_path, tree access_path,
5441                 int flags,
5442                 struct z_candidate **candidates,
5443                 tsubst_flags_t complain)
5444 {
5445   tree ctype;
5446   const vec<tree, va_gc> *non_static_args;
5447   bool check_list_ctor = false;
5448   bool check_converting = false;
5449   unification_kind_t strict;
5450
5451   if (!fns)
5452     return;
5453
5454   /* Precalculate special handling of constructors and conversion ops.  */
5455   tree fn = OVL_FIRST (fns);
5456   if (DECL_CONV_FN_P (fn))
5457     {
5458       check_list_ctor = false;
5459       check_converting = (flags & LOOKUP_ONLYCONVERTING) != 0;
5460       if (flags & LOOKUP_NO_CONVERSION)
5461         /* We're doing return_type(x).  */
5462         strict = DEDUCE_CONV;
5463       else
5464         /* We're doing x.operator return_type().  */
5465         strict = DEDUCE_EXACT;
5466       /* [over.match.funcs] For conversion functions, the function
5467          is considered to be a member of the class of the implicit
5468          object argument for the purpose of defining the type of
5469          the implicit object parameter.  */
5470       ctype = TYPE_MAIN_VARIANT (TREE_TYPE (first_arg));
5471     }
5472   else
5473     {
5474       if (DECL_CONSTRUCTOR_P (fn))
5475         {
5476           check_list_ctor = (flags & LOOKUP_LIST_ONLY) != 0;
5477           /* For list-initialization we consider explicit constructors
5478              and complain if one is chosen.  */
5479           check_converting
5480             = ((flags & (LOOKUP_ONLYCONVERTING|LOOKUP_LIST_INIT_CTOR))
5481                == LOOKUP_ONLYCONVERTING);
5482         }
5483       strict = DEDUCE_CALL;
5484       ctype = conversion_path ? BINFO_TYPE (conversion_path) : NULL_TREE;
5485     }
5486
5487   if (first_arg)
5488     non_static_args = args;
5489   else
5490     /* Delay creating the implicit this parameter until it is needed.  */
5491     non_static_args = NULL;
5492
5493   for (lkp_iterator iter (fns); iter; ++iter)
5494     {
5495       fn = *iter;
5496
5497       if (check_converting && DECL_NONCONVERTING_P (fn))
5498         continue;
5499       if (check_list_ctor && !is_list_ctor (fn))
5500         continue;
5501
5502       tree fn_first_arg = NULL_TREE;
5503       const vec<tree, va_gc> *fn_args = args;
5504
5505       if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
5506         {
5507           /* Figure out where the object arg comes from.  If this
5508              function is a non-static member and we didn't get an
5509              implicit object argument, move it out of args.  */
5510           if (first_arg == NULL_TREE)
5511             {
5512               unsigned int ix;
5513               tree arg;
5514               vec<tree, va_gc> *tempvec;
5515               vec_alloc (tempvec, args->length () - 1);
5516               for (ix = 1; args->iterate (ix, &arg); ++ix)
5517                 tempvec->quick_push (arg);
5518               non_static_args = tempvec;
5519               first_arg = (*args)[0];
5520             }
5521
5522           fn_first_arg = first_arg;
5523           fn_args = non_static_args;
5524         }
5525
5526       if (TREE_CODE (fn) == TEMPLATE_DECL)
5527         add_template_candidate (candidates,
5528                                 fn,
5529                                 ctype,
5530                                 explicit_targs,
5531                                 fn_first_arg, 
5532                                 fn_args,
5533                                 return_type,
5534                                 access_path,
5535                                 conversion_path,
5536                                 flags,
5537                                 strict,
5538                                 complain);
5539       else if (!template_only)
5540         add_function_candidate (candidates,
5541                                 fn,
5542                                 ctype,
5543                                 fn_first_arg,
5544                                 fn_args,
5545                                 access_path,
5546                                 conversion_path,
5547                                 flags,
5548                                 complain);
5549     }
5550 }
5551
5552 /* Returns 1 if P0145R2 says that the LHS of operator CODE is evaluated first,
5553    -1 if the RHS is evaluated first, or 0 if the order is unspecified.  */
5554
5555 static int
5556 op_is_ordered (tree_code code)
5557 {
5558   switch (code)
5559     {
5560       // 5. b @= a
5561     case MODIFY_EXPR:
5562       return (flag_strong_eval_order > 1 ? -1 : 0);
5563
5564       // 6. a[b]
5565     case ARRAY_REF:
5566       return (flag_strong_eval_order > 1 ? 1 : 0);
5567
5568       // 1. a.b
5569       // Not overloadable (yet).
5570       // 2. a->b
5571       // Only one argument.
5572       // 3. a->*b
5573     case MEMBER_REF:
5574       // 7. a << b
5575     case LSHIFT_EXPR:
5576       // 8. a >> b
5577     case RSHIFT_EXPR:
5578       return (flag_strong_eval_order ? 1 : 0);
5579
5580     default:
5581       return 0;
5582     }
5583 }
5584
5585 static tree
5586 build_new_op_1 (location_t loc, enum tree_code code, int flags, tree arg1,
5587                 tree arg2, tree arg3, tree *overload, tsubst_flags_t complain)
5588 {
5589   struct z_candidate *candidates = 0, *cand;
5590   vec<tree, va_gc> *arglist;
5591   tree args[3];
5592   tree result = NULL_TREE;
5593   bool result_valid_p = false;
5594   enum tree_code code2 = NOP_EXPR;
5595   enum tree_code code_orig_arg1 = ERROR_MARK;
5596   enum tree_code code_orig_arg2 = ERROR_MARK;
5597   conversion *conv;
5598   void *p;
5599   bool strict_p;
5600   bool any_viable_p;
5601
5602   if (error_operand_p (arg1)
5603       || error_operand_p (arg2)
5604       || error_operand_p (arg3))
5605     return error_mark_node;
5606
5607   bool ismodop = code == MODIFY_EXPR;
5608   if (ismodop)
5609     {
5610       code2 = TREE_CODE (arg3);
5611       arg3 = NULL_TREE;
5612     }
5613   tree fnname = ovl_op_identifier (ismodop, ismodop ? code2 : code);
5614
5615   arg1 = prep_operand (arg1);
5616
5617   bool memonly = false;
5618   switch (code)
5619     {
5620     case NEW_EXPR:
5621     case VEC_NEW_EXPR:
5622     case VEC_DELETE_EXPR:
5623     case DELETE_EXPR:
5624       /* Use build_op_new_call and build_op_delete_call instead.  */
5625       gcc_unreachable ();
5626
5627     case CALL_EXPR:
5628       /* Use build_op_call instead.  */
5629       gcc_unreachable ();
5630
5631     case TRUTH_ORIF_EXPR:
5632     case TRUTH_ANDIF_EXPR:
5633     case TRUTH_AND_EXPR:
5634     case TRUTH_OR_EXPR:
5635       /* These are saved for the sake of warn_logical_operator.  */
5636       code_orig_arg1 = TREE_CODE (arg1);
5637       code_orig_arg2 = TREE_CODE (arg2);
5638       break;
5639     case GT_EXPR:
5640     case LT_EXPR:
5641     case GE_EXPR:
5642     case LE_EXPR:
5643     case EQ_EXPR:
5644     case NE_EXPR:
5645       /* These are saved for the sake of maybe_warn_bool_compare.  */
5646       code_orig_arg1 = TREE_CODE (TREE_TYPE (arg1));
5647       code_orig_arg2 = TREE_CODE (TREE_TYPE (arg2));
5648       break;
5649
5650       /* =, ->, [], () must be non-static member functions.  */
5651     case MODIFY_EXPR:
5652       if (code2 != NOP_EXPR)
5653         break;
5654       /* FALLTHRU */
5655     case COMPONENT_REF:
5656     case ARRAY_REF:
5657       memonly = true;
5658       break;
5659
5660     default:
5661       break;
5662     }
5663
5664   arg2 = prep_operand (arg2);
5665   arg3 = prep_operand (arg3);
5666
5667   if (code == COND_EXPR)
5668     /* Use build_conditional_expr instead.  */
5669     gcc_unreachable ();
5670   else if (! OVERLOAD_TYPE_P (TREE_TYPE (arg1))
5671            && (! arg2 || ! OVERLOAD_TYPE_P (TREE_TYPE (arg2))))
5672     goto builtin;
5673
5674   if (code == POSTINCREMENT_EXPR || code == POSTDECREMENT_EXPR)
5675     arg2 = integer_zero_node;
5676
5677   vec_alloc (arglist, 3);
5678   arglist->quick_push (arg1);
5679   if (arg2 != NULL_TREE)
5680     arglist->quick_push (arg2);
5681   if (arg3 != NULL_TREE)
5682     arglist->quick_push (arg3);
5683
5684   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
5685   p = conversion_obstack_alloc (0);
5686
5687   /* Add namespace-scope operators to the list of functions to
5688      consider.  */
5689   if (!memonly)
5690     {
5691       tree fns = lookup_name_real (fnname, 0, 1, /*block_p=*/true, 0, 0);
5692       fns = lookup_arg_dependent (fnname, fns, arglist);
5693       add_candidates (fns, NULL_TREE, arglist, NULL_TREE,
5694                       NULL_TREE, false, NULL_TREE, NULL_TREE,
5695                       flags, &candidates, complain);
5696     }
5697
5698   args[0] = arg1;
5699   args[1] = arg2;
5700   args[2] = NULL_TREE;
5701
5702   /* Add class-member operators to the candidate set.  */
5703   if (CLASS_TYPE_P (TREE_TYPE (arg1)))
5704     {
5705       tree fns;
5706
5707       fns = lookup_fnfields (TREE_TYPE (arg1), fnname, 1);
5708       if (fns == error_mark_node)
5709         {
5710           result = error_mark_node;
5711           goto user_defined_result_ready;
5712         }
5713       if (fns)
5714         add_candidates (BASELINK_FUNCTIONS (fns),
5715                         NULL_TREE, arglist, NULL_TREE,
5716                         NULL_TREE, false,
5717                         BASELINK_BINFO (fns),
5718                         BASELINK_ACCESS_BINFO (fns),
5719                         flags, &candidates, complain);
5720     }
5721   /* Per 13.3.1.2/3, 2nd bullet, if no operand has a class type, then
5722      only non-member functions that have type T1 or reference to
5723      cv-qualified-opt T1 for the first argument, if the first argument
5724      has an enumeration type, or T2 or reference to cv-qualified-opt
5725      T2 for the second argument, if the second argument has an
5726      enumeration type.  Filter out those that don't match.  */
5727   else if (! arg2 || ! CLASS_TYPE_P (TREE_TYPE (arg2)))
5728     {
5729       struct z_candidate **candp, **next;
5730
5731       for (candp = &candidates; *candp; candp = next)
5732         {
5733           tree parmlist, parmtype;
5734           int i, nargs = (arg2 ? 2 : 1);
5735
5736           cand = *candp;
5737           next = &cand->next;
5738
5739           parmlist = TYPE_ARG_TYPES (TREE_TYPE (cand->fn));
5740
5741           for (i = 0; i < nargs; ++i)
5742             {
5743               parmtype = TREE_VALUE (parmlist);
5744
5745               if (TREE_CODE (parmtype) == REFERENCE_TYPE)
5746                 parmtype = TREE_TYPE (parmtype);
5747               if (TREE_CODE (TREE_TYPE (args[i])) == ENUMERAL_TYPE
5748                   && (same_type_ignoring_top_level_qualifiers_p
5749                       (TREE_TYPE (args[i]), parmtype)))
5750                 break;
5751
5752               parmlist = TREE_CHAIN (parmlist);
5753             }
5754
5755           /* No argument has an appropriate type, so remove this
5756              candidate function from the list.  */
5757           if (i == nargs)
5758             {
5759               *candp = cand->next;
5760               next = candp;
5761             }
5762         }
5763     }
5764
5765   add_builtin_candidates (&candidates, code, code2, fnname, args,
5766                           flags, complain);
5767
5768   switch (code)
5769     {
5770     case COMPOUND_EXPR:
5771     case ADDR_EXPR:
5772       /* For these, the built-in candidates set is empty
5773          [over.match.oper]/3.  We don't want non-strict matches
5774          because exact matches are always possible with built-in
5775          operators.  The built-in candidate set for COMPONENT_REF
5776          would be empty too, but since there are no such built-in
5777          operators, we accept non-strict matches for them.  */
5778       strict_p = true;
5779       break;
5780
5781     default:
5782       strict_p = false;
5783       break;
5784     }
5785
5786   candidates = splice_viable (candidates, strict_p, &any_viable_p);
5787   if (!any_viable_p)
5788     {
5789       switch (code)
5790         {
5791         case POSTINCREMENT_EXPR:
5792         case POSTDECREMENT_EXPR:
5793           /* Don't try anything fancy if we're not allowed to produce
5794              errors.  */
5795           if (!(complain & tf_error))
5796             return error_mark_node;
5797
5798           /* Look for an `operator++ (int)'. Pre-1985 C++ didn't
5799              distinguish between prefix and postfix ++ and
5800              operator++() was used for both, so we allow this with
5801              -fpermissive.  */
5802           else
5803             {
5804               const char *msg = (flag_permissive) 
5805                 ? G_("no %<%D(int)%> declared for postfix %qs,"
5806                      " trying prefix operator instead")
5807                 : G_("no %<%D(int)%> declared for postfix %qs");
5808               permerror (loc, msg, fnname, OVL_OP_INFO (false, code)->name);
5809             }
5810
5811           if (!flag_permissive)
5812             return error_mark_node;
5813
5814           if (code == POSTINCREMENT_EXPR)
5815             code = PREINCREMENT_EXPR;
5816           else
5817             code = PREDECREMENT_EXPR;
5818           result = build_new_op_1 (loc, code, flags, arg1, NULL_TREE,
5819                                    NULL_TREE, overload, complain);
5820           break;
5821
5822           /* The caller will deal with these.  */
5823         case ADDR_EXPR:
5824         case COMPOUND_EXPR:
5825         case COMPONENT_REF:
5826           result = NULL_TREE;
5827           result_valid_p = true;
5828           break;
5829
5830         default:
5831           if (complain & tf_error)
5832             {
5833                 /* If one of the arguments of the operator represents
5834                    an invalid use of member function pointer, try to report
5835                    a meaningful error ...  */
5836               if (invalid_nonstatic_memfn_p (loc, arg1, tf_error)
5837                     || invalid_nonstatic_memfn_p (loc, arg2, tf_error)
5838                     || invalid_nonstatic_memfn_p (loc, arg3, tf_error))
5839                   /* We displayed the error message.  */;
5840                 else
5841                   {
5842                     /* ... Otherwise, report the more generic
5843                        "no matching operator found" error */
5844                     op_error (loc, code, code2, arg1, arg2, arg3, FALSE);
5845                     print_z_candidates (loc, candidates);
5846                   }
5847             }
5848           result = error_mark_node;
5849           break;
5850         }
5851     }
5852   else
5853     {
5854       cand = tourney (candidates, complain);
5855       if (cand == 0)
5856         {
5857           if (complain & tf_error)
5858             {
5859               op_error (loc, code, code2, arg1, arg2, arg3, TRUE);
5860               print_z_candidates (loc, candidates);
5861             }
5862           result = error_mark_node;
5863         }
5864       else if (TREE_CODE (cand->fn) == FUNCTION_DECL)
5865         {
5866           if (overload)
5867             *overload = cand->fn;
5868
5869           if (resolve_args (arglist, complain) == NULL)
5870             result = error_mark_node;
5871           else
5872             result = build_over_call (cand, LOOKUP_NORMAL, complain);
5873
5874           if (trivial_fn_p (cand->fn))
5875             /* There won't be a CALL_EXPR.  */;
5876           else if (result && result != error_mark_node)
5877             {
5878               tree call = extract_call_expr (result);
5879               CALL_EXPR_OPERATOR_SYNTAX (call) = true;
5880
5881               if (processing_template_decl && DECL_HIDDEN_FRIEND_P (cand->fn))
5882                 /* This prevents build_new_function_call from discarding this
5883                    function during instantiation of the enclosing template.  */
5884                 KOENIG_LOOKUP_P (call) = 1;
5885
5886               /* Specify evaluation order as per P0145R2.  */
5887               CALL_EXPR_ORDERED_ARGS (call) = false;
5888               switch (op_is_ordered (code))
5889                 {
5890                 case -1:
5891                   CALL_EXPR_REVERSE_ARGS (call) = true;
5892                   break;
5893
5894                 case 1:
5895                   CALL_EXPR_ORDERED_ARGS (call) = true;
5896                   break;
5897
5898                 default:
5899                   break;
5900                 }
5901             }
5902         }
5903       else
5904         {
5905           /* Give any warnings we noticed during overload resolution.  */
5906           if (cand->warnings && (complain & tf_warning))
5907             {
5908               struct candidate_warning *w;
5909               for (w = cand->warnings; w; w = w->next)
5910                 joust (cand, w->loser, 1, complain);
5911             }
5912
5913           /* Check for comparison of different enum types.  */
5914           switch (code)
5915             {
5916             case GT_EXPR:
5917             case LT_EXPR:
5918             case GE_EXPR:
5919             case LE_EXPR:
5920             case EQ_EXPR:
5921             case NE_EXPR:
5922               if (TREE_CODE (TREE_TYPE (arg1)) == ENUMERAL_TYPE
5923                   && TREE_CODE (TREE_TYPE (arg2)) == ENUMERAL_TYPE
5924                   && (TYPE_MAIN_VARIANT (TREE_TYPE (arg1))
5925                       != TYPE_MAIN_VARIANT (TREE_TYPE (arg2)))
5926                   && (complain & tf_warning))
5927                 {
5928                   warning (OPT_Wenum_compare,
5929                            "comparison between %q#T and %q#T",
5930                            TREE_TYPE (arg1), TREE_TYPE (arg2));
5931                 }
5932               break;
5933             default:
5934               break;
5935             }
5936
5937           /* We need to strip any leading REF_BIND so that bitfields
5938              don't cause errors.  This should not remove any important
5939              conversions, because builtins don't apply to class
5940              objects directly.  */
5941           conv = cand->convs[0];
5942           if (conv->kind == ck_ref_bind)
5943             conv = next_conversion (conv);
5944           arg1 = convert_like (conv, arg1, complain);
5945
5946           if (arg2)
5947             {
5948               conv = cand->convs[1];
5949               if (conv->kind == ck_ref_bind)
5950                 conv = next_conversion (conv);
5951               else
5952                 arg2 = decay_conversion (arg2, complain);
5953
5954               /* We need to call warn_logical_operator before
5955                  converting arg2 to a boolean_type, but after
5956                  decaying an enumerator to its value.  */
5957               if (complain & tf_warning)
5958                 warn_logical_operator (loc, code, boolean_type_node,
5959                                        code_orig_arg1, arg1,
5960                                        code_orig_arg2, arg2);
5961
5962               arg2 = convert_like (conv, arg2, complain);
5963             }
5964           if (arg3)
5965             {
5966               conv = cand->convs[2];
5967               if (conv->kind == ck_ref_bind)
5968                 conv = next_conversion (conv);
5969               arg3 = convert_like (conv, arg3, complain);
5970             }
5971
5972         }
5973     }
5974
5975  user_defined_result_ready:
5976
5977   /* Free all the conversions we allocated.  */
5978   obstack_free (&conversion_obstack, p);
5979
5980   if (result || result_valid_p)
5981     return result;
5982
5983  builtin:
5984   switch (code)
5985     {
5986     case MODIFY_EXPR:
5987       return cp_build_modify_expr (loc, arg1, code2, arg2, complain);
5988
5989     case INDIRECT_REF:
5990       return cp_build_indirect_ref (arg1, RO_UNARY_STAR, complain);
5991
5992     case TRUTH_ANDIF_EXPR:
5993     case TRUTH_ORIF_EXPR:
5994     case TRUTH_AND_EXPR:
5995     case TRUTH_OR_EXPR:
5996       if (complain & tf_warning)
5997         warn_logical_operator (loc, code, boolean_type_node,
5998                                code_orig_arg1, arg1,
5999                                code_orig_arg2, arg2);
6000       /* Fall through.  */
6001     case GT_EXPR:
6002     case LT_EXPR:
6003     case GE_EXPR:
6004     case LE_EXPR:
6005     case EQ_EXPR:
6006     case NE_EXPR:
6007       if ((complain & tf_warning)
6008           && ((code_orig_arg1 == BOOLEAN_TYPE)
6009               ^ (code_orig_arg2 == BOOLEAN_TYPE)))
6010         maybe_warn_bool_compare (loc, code, arg1, arg2);
6011       if (complain & tf_warning && warn_tautological_compare)
6012         warn_tautological_cmp (loc, code, arg1, arg2);
6013       /* Fall through.  */
6014     case PLUS_EXPR:
6015     case MINUS_EXPR:
6016     case MULT_EXPR:
6017     case TRUNC_DIV_EXPR:
6018     case MAX_EXPR:
6019     case MIN_EXPR:
6020     case LSHIFT_EXPR:
6021     case RSHIFT_EXPR:
6022     case TRUNC_MOD_EXPR:
6023     case BIT_AND_EXPR:
6024     case BIT_IOR_EXPR:
6025     case BIT_XOR_EXPR:
6026       return cp_build_binary_op (loc, code, arg1, arg2, complain);
6027
6028     case UNARY_PLUS_EXPR:
6029     case NEGATE_EXPR:
6030     case BIT_NOT_EXPR:
6031     case TRUTH_NOT_EXPR:
6032     case PREINCREMENT_EXPR:
6033     case POSTINCREMENT_EXPR:
6034     case PREDECREMENT_EXPR:
6035     case POSTDECREMENT_EXPR:
6036     case REALPART_EXPR:
6037     case IMAGPART_EXPR:
6038     case ABS_EXPR:
6039       return cp_build_unary_op (code, arg1, candidates != 0, complain);
6040
6041     case ARRAY_REF:
6042       return cp_build_array_ref (input_location, arg1, arg2, complain);
6043
6044     case MEMBER_REF:
6045       return build_m_component_ref (cp_build_indirect_ref (arg1, RO_ARROW_STAR, 
6046                                                            complain), 
6047                                     arg2, complain);
6048
6049       /* The caller will deal with these.  */
6050     case ADDR_EXPR:
6051     case COMPONENT_REF:
6052     case COMPOUND_EXPR:
6053       return NULL_TREE;
6054
6055     default:
6056       gcc_unreachable ();
6057     }
6058   return NULL_TREE;
6059 }
6060
6061 /* Wrapper for above.  */
6062
6063 tree
6064 build_new_op (location_t loc, enum tree_code code, int flags,
6065               tree arg1, tree arg2, tree arg3,
6066               tree *overload, tsubst_flags_t complain)
6067 {
6068   tree ret;
6069   bool subtime = timevar_cond_start (TV_OVERLOAD);
6070   ret = build_new_op_1 (loc, code, flags, arg1, arg2, arg3,
6071                         overload, complain);
6072   timevar_cond_stop (TV_OVERLOAD, subtime);
6073   return ret;
6074 }
6075
6076 /* CALL was returned by some call-building function; extract the actual
6077    CALL_EXPR from any bits that have been tacked on, e.g. by
6078    convert_from_reference.  */
6079
6080 tree
6081 extract_call_expr (tree call)
6082 {
6083   while (TREE_CODE (call) == COMPOUND_EXPR)
6084     call = TREE_OPERAND (call, 1);
6085   if (REFERENCE_REF_P (call))
6086     call = TREE_OPERAND (call, 0);
6087   if (TREE_CODE (call) == TARGET_EXPR)
6088     call = TARGET_EXPR_INITIAL (call);
6089   gcc_assert (TREE_CODE (call) == CALL_EXPR
6090               || TREE_CODE (call) == AGGR_INIT_EXPR
6091               || call == error_mark_node);
6092   return call;
6093 }
6094
6095 /* Returns true if FN has two parameters, of which the second has type
6096    size_t.  */
6097
6098 static bool
6099 second_parm_is_size_t (tree fn)
6100 {
6101   tree t = FUNCTION_ARG_CHAIN (fn);
6102   if (!t || !same_type_p (TREE_VALUE (t), size_type_node))
6103     return false;
6104   t = TREE_CHAIN (t);
6105   if (t == void_list_node)
6106     return true;
6107   if (aligned_new_threshold && t
6108       && same_type_p (TREE_VALUE (t), align_type_node)
6109       && TREE_CHAIN (t) == void_list_node)
6110     return true;
6111   return false;
6112 }
6113
6114 /* True if T, an allocation function, has std::align_val_t as its second
6115    argument.  */
6116
6117 bool
6118 aligned_allocation_fn_p (tree t)
6119 {
6120   if (!aligned_new_threshold)
6121     return false;
6122
6123   tree a = FUNCTION_ARG_CHAIN (t);
6124   return (a && same_type_p (TREE_VALUE (a), align_type_node));
6125 }
6126
6127 /* Returns true iff T, an element of an OVERLOAD chain, is a usual deallocation
6128    function (3.7.4.2 [basic.stc.dynamic.deallocation]) with a parameter of
6129    std::align_val_t.  */
6130
6131 static bool
6132 aligned_deallocation_fn_p (tree t)
6133 {
6134   if (!aligned_new_threshold)
6135     return false;
6136
6137   /* A template instance is never a usual deallocation function,
6138      regardless of its signature.  */
6139   if (TREE_CODE (t) == TEMPLATE_DECL
6140       || primary_template_specialization_p (t))
6141     return false;
6142
6143   tree a = FUNCTION_ARG_CHAIN (t);
6144   if (same_type_p (TREE_VALUE (a), align_type_node)
6145       && TREE_CHAIN (a) == void_list_node)
6146     return true;
6147   if (!same_type_p (TREE_VALUE (a), size_type_node))
6148     return false;
6149   a = TREE_CHAIN (a);
6150   if (a && same_type_p (TREE_VALUE (a), align_type_node)
6151       && TREE_CHAIN (a) == void_list_node)
6152     return true;
6153   return false;
6154 }
6155
6156 /* Returns true iff T, an element of an OVERLOAD chain, is a usual
6157    deallocation function (3.7.4.2 [basic.stc.dynamic.deallocation]).  */
6158
6159 bool
6160 usual_deallocation_fn_p (tree t)
6161 {
6162   /* A template instance is never a usual deallocation function,
6163      regardless of its signature.  */
6164   if (TREE_CODE (t) == TEMPLATE_DECL
6165       || primary_template_specialization_p (t))
6166     return false;
6167
6168   /* If a class T has a member deallocation function named operator delete
6169      with exactly one parameter, then that function is a usual
6170      (non-placement) deallocation function. If class T does not declare
6171      such an operator delete but does declare a member deallocation
6172      function named operator delete with exactly two parameters, the second
6173      of which has type std::size_t (18.2), then this function is a usual
6174      deallocation function.  */
6175   bool global = DECL_NAMESPACE_SCOPE_P (t);
6176   tree chain = FUNCTION_ARG_CHAIN (t);
6177   if (!chain)
6178     return false;
6179   if (chain == void_list_node
6180       || ((!global || flag_sized_deallocation)
6181           && second_parm_is_size_t (t)))
6182     return true;
6183   if (aligned_deallocation_fn_p (t))
6184     return true;
6185   return false;
6186 }
6187
6188 /* Build a call to operator delete.  This has to be handled very specially,
6189    because the restrictions on what signatures match are different from all
6190    other call instances.  For a normal delete, only a delete taking (void *)
6191    or (void *, size_t) is accepted.  For a placement delete, only an exact
6192    match with the placement new is accepted.
6193
6194    CODE is either DELETE_EXPR or VEC_DELETE_EXPR.
6195    ADDR is the pointer to be deleted.
6196    SIZE is the size of the memory block to be deleted.
6197    GLOBAL_P is true if the delete-expression should not consider
6198    class-specific delete operators.
6199    PLACEMENT is the corresponding placement new call, or NULL_TREE.
6200
6201    If this call to "operator delete" is being generated as part to
6202    deallocate memory allocated via a new-expression (as per [expr.new]
6203    which requires that if the initialization throws an exception then
6204    we call a deallocation function), then ALLOC_FN is the allocation
6205    function.  */
6206
6207 tree
6208 build_op_delete_call (enum tree_code code, tree addr, tree size,
6209                       bool global_p, tree placement,
6210                       tree alloc_fn, tsubst_flags_t complain)
6211 {
6212   tree fn = NULL_TREE;
6213   tree fns, fnname, type, t;
6214
6215   if (addr == error_mark_node)
6216     return error_mark_node;
6217
6218   type = strip_array_types (TREE_TYPE (TREE_TYPE (addr)));
6219
6220   fnname = ovl_op_identifier (false, code);
6221
6222   if (CLASS_TYPE_P (type)
6223       && COMPLETE_TYPE_P (complete_type (type))
6224       && !global_p)
6225     /* In [class.free]
6226
6227        If the result of the lookup is ambiguous or inaccessible, or if
6228        the lookup selects a placement deallocation function, the
6229        program is ill-formed.
6230
6231        Therefore, we ask lookup_fnfields to complain about ambiguity.  */
6232     {
6233       fns = lookup_fnfields (TYPE_BINFO (type), fnname, 1);
6234       if (fns == error_mark_node)
6235         return error_mark_node;
6236     }
6237   else
6238     fns = NULL_TREE;
6239
6240   if (fns == NULL_TREE)
6241     fns = lookup_name_nonclass (fnname);
6242
6243   /* Strip const and volatile from addr.  */
6244   addr = cp_convert (ptr_type_node, addr, complain);
6245
6246   if (placement)
6247     {
6248       /* "A declaration of a placement deallocation function matches the
6249          declaration of a placement allocation function if it has the same
6250          number of parameters and, after parameter transformations (8.3.5),
6251          all parameter types except the first are identical."
6252
6253          So we build up the function type we want and ask instantiate_type
6254          to get it for us.  */
6255       t = FUNCTION_ARG_CHAIN (alloc_fn);
6256       t = tree_cons (NULL_TREE, ptr_type_node, t);
6257       t = build_function_type (void_type_node, t);
6258
6259       fn = instantiate_type (t, fns, tf_none);
6260       if (fn == error_mark_node)
6261         return NULL_TREE;
6262
6263       fn = MAYBE_BASELINK_FUNCTIONS (fn);
6264
6265       /* "If the lookup finds the two-parameter form of a usual deallocation
6266          function (3.7.4.2) and that function, considered as a placement
6267          deallocation function, would have been selected as a match for the
6268          allocation function, the program is ill-formed."  */
6269       if (second_parm_is_size_t (fn))
6270         {
6271           const char *const msg1
6272             = G_("exception cleanup for this placement new selects "
6273                  "non-placement operator delete");
6274           const char *const msg2
6275             = G_("%qD is a usual (non-placement) deallocation "
6276                  "function in C++14 (or with -fsized-deallocation)");
6277
6278           /* But if the class has an operator delete (void *), then that is
6279              the usual deallocation function, so we shouldn't complain
6280              about using the operator delete (void *, size_t).  */
6281           if (DECL_CLASS_SCOPE_P (fn))
6282             for (lkp_iterator iter (MAYBE_BASELINK_FUNCTIONS (fns));
6283                  iter; ++iter)
6284               {
6285                 tree elt = *iter;
6286                 if (usual_deallocation_fn_p (elt)
6287                     && FUNCTION_ARG_CHAIN (elt) == void_list_node)
6288                   goto ok;
6289               }
6290           /* Before C++14 a two-parameter global deallocation function is
6291              always a placement deallocation function, but warn if
6292              -Wc++14-compat.  */
6293           else if (!flag_sized_deallocation)
6294             {
6295               if ((complain & tf_warning)
6296                   && warning (OPT_Wc__14_compat, msg1))
6297                 inform (DECL_SOURCE_LOCATION (fn), msg2, fn);
6298               goto ok;
6299             }
6300
6301           if (complain & tf_warning_or_error)
6302             {
6303               if (permerror (input_location, msg1))
6304                 {
6305                   /* Only mention C++14 for namespace-scope delete.  */
6306                   if (DECL_NAMESPACE_SCOPE_P (fn))
6307                     inform (DECL_SOURCE_LOCATION (fn), msg2, fn);
6308                   else
6309                     inform (DECL_SOURCE_LOCATION (fn),
6310                             "%qD is a usual (non-placement) deallocation "
6311                             "function", fn);
6312                 }
6313             }
6314           else
6315             return error_mark_node;
6316         ok:;
6317         }
6318     }
6319   else
6320     /* "Any non-placement deallocation function matches a non-placement
6321        allocation function. If the lookup finds a single matching
6322        deallocation function, that function will be called; otherwise, no
6323        deallocation function will be called."  */
6324     for (lkp_iterator iter (MAYBE_BASELINK_FUNCTIONS (fns)); iter; ++iter)
6325       {
6326         tree elt = *iter;
6327         if (usual_deallocation_fn_p (elt))
6328           {
6329             if (!fn)
6330               {
6331                 fn = elt;
6332                 continue;
6333               }
6334
6335             /* -- If the type has new-extended alignment, a function with a
6336                parameter of type std::align_val_t is preferred; otherwise a
6337                function without such a parameter is preferred. If exactly one
6338                preferred function is found, that function is selected and the
6339                selection process terminates. If more than one preferred
6340                function is found, all non-preferred functions are eliminated
6341                from further consideration.  */
6342             if (aligned_new_threshold)
6343               {
6344                 bool want_align = type_has_new_extended_alignment (type);
6345                 bool fn_align = aligned_deallocation_fn_p (fn);
6346                 bool elt_align = aligned_deallocation_fn_p (elt);
6347
6348                 if (elt_align != fn_align)
6349                   {
6350                     if (want_align == elt_align)
6351                       fn = elt;
6352                     continue;
6353                   }
6354               }
6355
6356             /* -- If the deallocation functions have class scope, the one
6357                without a parameter of type std::size_t is selected.  */
6358             bool want_size;
6359             if (DECL_CLASS_SCOPE_P (fn))
6360               want_size = false;
6361
6362             /* -- If the type is complete and if, for the second alternative
6363                (delete array) only, the operand is a pointer to a class type
6364                with a non-trivial destructor or a (possibly multi-dimensional)
6365                array thereof, the function with a parameter of type std::size_t
6366                is selected.
6367
6368                -- Otherwise, it is unspecified whether a deallocation function
6369                with a parameter of type std::size_t is selected.  */
6370             else
6371               {
6372                 want_size = COMPLETE_TYPE_P (type);
6373                 if (code == VEC_DELETE_EXPR
6374                     && !TYPE_VEC_NEW_USES_COOKIE (type))
6375                   /* We need a cookie to determine the array size.  */
6376                   want_size = false;
6377               }
6378             bool fn_size = second_parm_is_size_t (fn);
6379             bool elt_size = second_parm_is_size_t (elt);
6380             gcc_assert (fn_size != elt_size);
6381             if (want_size == elt_size)
6382               fn = elt;
6383           }
6384       }
6385
6386   /* If we have a matching function, call it.  */
6387   if (fn)
6388     {
6389       gcc_assert (TREE_CODE (fn) == FUNCTION_DECL);
6390
6391       /* If the FN is a member function, make sure that it is
6392          accessible.  */
6393       if (BASELINK_P (fns))
6394         perform_or_defer_access_check (BASELINK_BINFO (fns), fn, fn,
6395                                        complain);
6396
6397       /* Core issue 901: It's ok to new a type with deleted delete.  */
6398       if (DECL_DELETED_FN (fn) && alloc_fn)
6399         return NULL_TREE;
6400
6401       if (placement)
6402         {
6403           /* The placement args might not be suitable for overload
6404              resolution at this point, so build the call directly.  */
6405           int nargs = call_expr_nargs (placement);
6406           tree *argarray = XALLOCAVEC (tree, nargs);
6407           int i;
6408           argarray[0] = addr;
6409           for (i = 1; i < nargs; i++)
6410             argarray[i] = CALL_EXPR_ARG (placement, i);
6411           if (!mark_used (fn, complain) && !(complain & tf_error))
6412             return error_mark_node;
6413           return build_cxx_call (fn, nargs, argarray, complain);
6414         }
6415       else
6416         {
6417           tree ret;
6418           vec<tree, va_gc> *args = make_tree_vector ();
6419           args->quick_push (addr);
6420           if (second_parm_is_size_t (fn))
6421             args->quick_push (size);
6422           if (aligned_deallocation_fn_p (fn))
6423             {
6424               tree al = build_int_cst (align_type_node, TYPE_ALIGN_UNIT (type));
6425               args->quick_push (al);
6426             }
6427           ret = cp_build_function_call_vec (fn, &args, complain);
6428           release_tree_vector (args);
6429           return ret;
6430         }
6431     }
6432
6433   /* [expr.new]
6434
6435      If no unambiguous matching deallocation function can be found,
6436      propagating the exception does not cause the object's memory to
6437      be freed.  */
6438   if (alloc_fn)
6439     {
6440       if ((complain & tf_warning)
6441           && !placement)
6442         warning (0, "no corresponding deallocation function for %qD",
6443                  alloc_fn);
6444       return NULL_TREE;
6445     }
6446
6447   if (complain & tf_error)
6448     error ("no suitable %<operator %s%> for %qT",
6449            OVL_OP_INFO (false, code)->name, type);
6450   return error_mark_node;
6451 }
6452
6453 /* If the current scope isn't allowed to access DECL along
6454    BASETYPE_PATH, give an error.  The most derived class in
6455    BASETYPE_PATH is the one used to qualify DECL. DIAG_DECL is
6456    the declaration to use in the error diagnostic.  */
6457
6458 bool
6459 enforce_access (tree basetype_path, tree decl, tree diag_decl,
6460                 tsubst_flags_t complain, access_failure_info *afi)
6461 {
6462   gcc_assert (TREE_CODE (basetype_path) == TREE_BINFO);
6463
6464   if (flag_new_inheriting_ctors
6465       && DECL_INHERITED_CTOR (decl))
6466     {
6467       /* 7.3.3/18: The additional constructors are accessible if they would be
6468          accessible when used to construct an object of the corresponding base
6469          class.  */
6470       decl = strip_inheriting_ctors (decl);
6471       basetype_path = lookup_base (basetype_path, DECL_CONTEXT (decl),
6472                                    ba_any, NULL, complain);
6473     }
6474
6475   if (!accessible_p (basetype_path, decl, true))
6476     {
6477       if (complain & tf_error)
6478         {
6479           if (flag_new_inheriting_ctors)
6480             diag_decl = strip_inheriting_ctors (diag_decl);
6481           if (TREE_PRIVATE (decl))
6482             {
6483               error ("%q#D is private within this context", diag_decl);
6484               inform (DECL_SOURCE_LOCATION (diag_decl),
6485                       "declared private here");
6486               if (afi)
6487                 afi->record_access_failure (basetype_path, diag_decl);
6488             }
6489           else if (TREE_PROTECTED (decl))
6490             {
6491               error ("%q#D is protected within this context", diag_decl);
6492               inform (DECL_SOURCE_LOCATION (diag_decl),
6493                       "declared protected here");
6494               if (afi)
6495                 afi->record_access_failure (basetype_path, diag_decl);
6496             }
6497           else
6498             {
6499               error ("%q#D is inaccessible within this context", diag_decl);
6500               inform (DECL_SOURCE_LOCATION (diag_decl), "declared here");
6501               if (afi)
6502                 afi->record_access_failure (basetype_path, diag_decl);
6503             }
6504         }
6505       return false;
6506     }
6507
6508   return true;
6509 }
6510
6511 /* Initialize a temporary of type TYPE with EXPR.  The FLAGS are a
6512    bitwise or of LOOKUP_* values.  If any errors are warnings are
6513    generated, set *DIAGNOSTIC_FN to "error" or "warning",
6514    respectively.  If no diagnostics are generated, set *DIAGNOSTIC_FN
6515    to NULL.  */
6516
6517 static tree
6518 build_temp (tree expr, tree type, int flags,
6519             diagnostic_t *diagnostic_kind, tsubst_flags_t complain)
6520 {
6521   int savew, savee;
6522   vec<tree, va_gc> *args;
6523
6524   *diagnostic_kind = DK_UNSPECIFIED;
6525
6526   /* If the source is a packed field, calling the copy constructor will require
6527      binding the field to the reference parameter to the copy constructor, and
6528      we'll end up with an infinite loop.  If we can use a bitwise copy, then
6529      do that now.  */
6530   if ((lvalue_kind (expr) & clk_packed)
6531       && CLASS_TYPE_P (TREE_TYPE (expr))
6532       && !type_has_nontrivial_copy_init (TREE_TYPE (expr)))
6533     return get_target_expr_sfinae (expr, complain);
6534
6535   savew = warningcount + werrorcount, savee = errorcount;
6536   args = make_tree_vector_single (expr);
6537   expr = build_special_member_call (NULL_TREE, complete_ctor_identifier,
6538                                     &args, type, flags, complain);
6539   release_tree_vector (args);
6540   if (warningcount + werrorcount > savew)
6541     *diagnostic_kind = DK_WARNING;
6542   else if (errorcount > savee)
6543     *diagnostic_kind = DK_ERROR;
6544   return expr;
6545 }
6546
6547 /* Perform warnings about peculiar, but valid, conversions from/to NULL.
6548    EXPR is implicitly converted to type TOTYPE.
6549    FN and ARGNUM are used for diagnostics.  */
6550
6551 static void
6552 conversion_null_warnings (tree totype, tree expr, tree fn, int argnum)
6553 {
6554   /* Issue warnings about peculiar, but valid, uses of NULL.  */
6555   if (null_node_p (expr) && TREE_CODE (totype) != BOOLEAN_TYPE
6556       && ARITHMETIC_TYPE_P (totype))
6557     {
6558       source_location loc =
6559         expansion_point_location_if_in_system_header (input_location);
6560
6561       if (fn)
6562         warning_at (loc, OPT_Wconversion_null,
6563                     "passing NULL to non-pointer argument %P of %qD",
6564                     argnum, fn);
6565       else
6566         warning_at (loc, OPT_Wconversion_null,
6567                     "converting to non-pointer type %qT from NULL", totype);
6568     }
6569
6570   /* Issue warnings if "false" is converted to a NULL pointer */
6571   else if (TREE_CODE (TREE_TYPE (expr)) == BOOLEAN_TYPE
6572            && TYPE_PTR_P (totype))
6573     {
6574       if (fn)
6575         warning_at (input_location, OPT_Wconversion_null,
6576                     "converting %<false%> to pointer type for argument %P "
6577                     "of %qD", argnum, fn);
6578       else
6579         warning_at (input_location, OPT_Wconversion_null,
6580                     "converting %<false%> to pointer type %qT", totype);
6581     }
6582 }
6583
6584 /* We gave a diagnostic during a conversion.  If this was in the second
6585    standard conversion sequence of a user-defined conversion sequence, say
6586    which user-defined conversion.  */
6587
6588 static void
6589 maybe_print_user_conv_context (conversion *convs)
6590 {
6591   if (convs->user_conv_p)
6592     for (conversion *t = convs; t; t = next_conversion (t))
6593       if (t->kind == ck_user)
6594         {
6595           print_z_candidate (0, "  after user-defined conversion:",
6596                              t->cand);
6597           break;
6598         }
6599 }
6600
6601 /* Locate the parameter with the given index within FNDECL.
6602    ARGNUM is zero based, -1 indicates the `this' argument of a method.
6603    Return the location of the FNDECL itself if there are problems.  */
6604
6605 location_t
6606 get_fndecl_argument_location (tree fndecl, int argnum)
6607 {
6608   int i;
6609   tree param;
6610
6611   /* Locate param by index within DECL_ARGUMENTS (fndecl).  */
6612   for (i = 0, param = FUNCTION_FIRST_USER_PARM (fndecl);
6613        i < argnum && param;
6614        i++, param = TREE_CHAIN (param))
6615     ;
6616
6617   /* If something went wrong (e.g. if we have a builtin and thus no arguments),
6618      return the location of FNDECL.  */
6619   if (param == NULL)
6620     return DECL_SOURCE_LOCATION (fndecl);
6621
6622   return DECL_SOURCE_LOCATION (param);
6623 }
6624
6625 /* Perform the conversions in CONVS on the expression EXPR.  FN and
6626    ARGNUM are used for diagnostics.  ARGNUM is zero based, -1
6627    indicates the `this' argument of a method.  INNER is nonzero when
6628    being called to continue a conversion chain. It is negative when a
6629    reference binding will be applied, positive otherwise.  If
6630    ISSUE_CONVERSION_WARNINGS is true, warnings about suspicious
6631    conversions will be emitted if appropriate.  If C_CAST_P is true,
6632    this conversion is coming from a C-style cast; in that case,
6633    conversions to inaccessible bases are permitted.  */
6634
6635 static tree
6636 convert_like_real (conversion *convs, tree expr, tree fn, int argnum,
6637                    bool issue_conversion_warnings,
6638                    bool c_cast_p, tsubst_flags_t complain)
6639 {
6640   tree totype = convs->type;
6641   diagnostic_t diag_kind;
6642   int flags;
6643   location_t loc = EXPR_LOC_OR_LOC (expr, input_location);
6644
6645   if (convs->bad_p && !(complain & tf_error))
6646     return error_mark_node;
6647
6648   if (convs->bad_p
6649       && convs->kind != ck_user
6650       && convs->kind != ck_list
6651       && convs->kind != ck_ambig
6652       && (convs->kind != ck_ref_bind
6653           || (convs->user_conv_p && next_conversion (convs)->bad_p))
6654       && (convs->kind != ck_rvalue
6655           || SCALAR_TYPE_P (totype))
6656       && convs->kind != ck_base)
6657     {
6658       bool complained = false;
6659       conversion *t = convs;
6660
6661       /* Give a helpful error if this is bad because of excess braces.  */
6662       if (BRACE_ENCLOSED_INITIALIZER_P (expr)
6663           && SCALAR_TYPE_P (totype)
6664           && CONSTRUCTOR_NELTS (expr) > 0
6665           && BRACE_ENCLOSED_INITIALIZER_P (CONSTRUCTOR_ELT (expr, 0)->value))
6666         {
6667           complained = permerror (loc, "too many braces around initializer "
6668                                   "for %qT", totype);
6669           while (BRACE_ENCLOSED_INITIALIZER_P (expr)
6670                  && CONSTRUCTOR_NELTS (expr) == 1)
6671             expr = CONSTRUCTOR_ELT (expr, 0)->value;
6672         }
6673
6674       /* Give a helpful error if this is bad because a conversion to bool
6675          from std::nullptr_t requires direct-initialization.  */
6676       if (NULLPTR_TYPE_P (TREE_TYPE (expr))
6677           && TREE_CODE (totype) == BOOLEAN_TYPE)
6678         complained = permerror (loc, "converting to %qH from %qI requires "
6679                                 "direct-initialization",
6680                                 totype, TREE_TYPE (expr));
6681
6682       for (; t ; t = next_conversion (t))
6683         {
6684           if (t->kind == ck_user && t->cand->reason)
6685             {
6686               complained = permerror (loc, "invalid user-defined conversion "
6687                                       "from %qH to %qI", TREE_TYPE (expr),
6688                                       totype);
6689               if (complained)
6690                 print_z_candidate (loc, "candidate is:", t->cand);
6691               expr = convert_like_real (t, expr, fn, argnum,
6692                                         /*issue_conversion_warnings=*/false,
6693                                         /*c_cast_p=*/false,
6694                                         complain);
6695               if (convs->kind == ck_ref_bind)
6696                 expr = convert_to_reference (totype, expr, CONV_IMPLICIT,
6697                                              LOOKUP_NORMAL, NULL_TREE,
6698                                              complain);
6699               else
6700                 expr = cp_convert (totype, expr, complain);
6701               if (complained && fn)
6702                 inform (DECL_SOURCE_LOCATION (fn),
6703                         "  initializing argument %P of %qD", argnum, fn);
6704               return expr;
6705             }
6706           else if (t->kind == ck_user || !t->bad_p)
6707             {
6708               expr = convert_like_real (t, expr, fn, argnum,
6709                                         /*issue_conversion_warnings=*/false,
6710                                         /*c_cast_p=*/false,
6711                                         complain);
6712               break;
6713             }
6714           else if (t->kind == ck_ambig)
6715             return convert_like_real (t, expr, fn, argnum,
6716                                       /*issue_conversion_warnings=*/false,
6717                                       /*c_cast_p=*/false,
6718                                       complain);
6719           else if (t->kind == ck_identity)
6720             break;
6721         }
6722       if (!complained)
6723         complained = permerror (loc, "invalid conversion from %qH to %qI",
6724                                 TREE_TYPE (expr), totype);
6725       if (complained && fn)
6726         inform (get_fndecl_argument_location (fn, argnum),
6727                 "  initializing argument %P of %qD", argnum, fn);
6728
6729       return cp_convert (totype, expr, complain);
6730     }
6731
6732   if (issue_conversion_warnings && (complain & tf_warning))
6733     conversion_null_warnings (totype, expr, fn, argnum);
6734
6735   switch (convs->kind)
6736     {
6737     case ck_user:
6738       {
6739         struct z_candidate *cand = convs->cand;
6740
6741         if (cand == NULL)
6742           /* We chose the surrogate function from add_conv_candidate, now we
6743              actually need to build the conversion.  */
6744           cand = build_user_type_conversion_1 (totype, expr,
6745                                                LOOKUP_NO_CONVERSION, complain);
6746
6747         tree convfn = cand->fn;
6748
6749         /* When converting from an init list we consider explicit
6750            constructors, but actually trying to call one is an error.  */
6751         if (DECL_NONCONVERTING_P (convfn) && DECL_CONSTRUCTOR_P (convfn)
6752             && BRACE_ENCLOSED_INITIALIZER_P (expr)
6753             /* Unless this is for direct-list-initialization.  */
6754             && !CONSTRUCTOR_IS_DIRECT_INIT (expr)
6755             /* And in C++98 a default constructor can't be explicit.  */
6756             && cxx_dialect >= cxx11)
6757           {
6758             if (!(complain & tf_error))
6759               return error_mark_node;
6760             location_t loc = location_of (expr);
6761             if (CONSTRUCTOR_NELTS (expr) == 0
6762                 && FUNCTION_FIRST_USER_PARMTYPE (convfn) != void_list_node)
6763               {
6764                 if (pedwarn (loc, 0, "converting to %qT from initializer list "
6765                              "would use explicit constructor %qD",
6766                              totype, convfn))
6767                   inform (loc, "in C++11 and above a default constructor "
6768                           "can be explicit");
6769               }
6770             else
6771               error ("converting to %qT from initializer list would use "
6772                      "explicit constructor %qD", totype, convfn);
6773           }
6774
6775         /* If we're initializing from {}, it's value-initialization.  */
6776         if (BRACE_ENCLOSED_INITIALIZER_P (expr)
6777             && CONSTRUCTOR_NELTS (expr) == 0
6778             && TYPE_HAS_DEFAULT_CONSTRUCTOR (totype))
6779           {
6780             bool direct = CONSTRUCTOR_IS_DIRECT_INIT (expr);
6781             if (abstract_virtuals_error_sfinae (NULL_TREE, totype, complain))
6782               return error_mark_node;
6783             expr = build_value_init (totype, complain);
6784             expr = get_target_expr_sfinae (expr, complain);
6785             if (expr != error_mark_node)
6786               {
6787                 TARGET_EXPR_LIST_INIT_P (expr) = true;
6788                 TARGET_EXPR_DIRECT_INIT_P (expr) = direct;
6789               }
6790             return expr;
6791           }
6792
6793         /* We don't know here whether EXPR is being used as an lvalue or
6794            rvalue, but we know it's read.  */
6795         mark_exp_read (expr);
6796
6797         /* Pass LOOKUP_NO_CONVERSION so rvalue/base handling knows not to allow
6798            any more UDCs.  */
6799         expr = build_over_call (cand, LOOKUP_NORMAL|LOOKUP_NO_CONVERSION,
6800                                 complain);
6801
6802         /* If this is a constructor or a function returning an aggr type,
6803            we need to build up a TARGET_EXPR.  */
6804         if (DECL_CONSTRUCTOR_P (convfn))
6805           {
6806             expr = build_cplus_new (totype, expr, complain);
6807
6808             /* Remember that this was list-initialization.  */
6809             if (convs->check_narrowing && expr != error_mark_node)
6810               TARGET_EXPR_LIST_INIT_P (expr) = true;
6811           }
6812
6813         return expr;
6814       }
6815     case ck_identity:
6816       if (BRACE_ENCLOSED_INITIALIZER_P (expr))
6817         {
6818           int nelts = CONSTRUCTOR_NELTS (expr);
6819           if (nelts == 0)
6820             expr = build_value_init (totype, complain);
6821           else if (nelts == 1)
6822             expr = CONSTRUCTOR_ELT (expr, 0)->value;
6823           else
6824             gcc_unreachable ();
6825         }
6826       expr = mark_use (expr, /*rvalue_p=*/!convs->rvaluedness_matches_p,
6827                        /*read_p=*/true, UNKNOWN_LOCATION,
6828                        /*reject_builtin=*/true);
6829
6830       if (type_unknown_p (expr))
6831         expr = instantiate_type (totype, expr, complain);
6832       if (expr == null_node
6833           && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (totype))
6834         /* If __null has been converted to an integer type, we do not want to
6835            continue to warn about uses of EXPR as an integer, rather than as a
6836            pointer.  */
6837         expr = build_int_cst (totype, 0);
6838       return expr;
6839     case ck_ambig:
6840       /* We leave bad_p off ck_ambig because overload resolution considers
6841          it valid, it just fails when we try to perform it.  So we need to
6842          check complain here, too.  */
6843       if (complain & tf_error)
6844         {
6845           /* Call build_user_type_conversion again for the error.  */
6846           int flags = (convs->need_temporary_p
6847                        ? LOOKUP_IMPLICIT : LOOKUP_NORMAL);
6848           build_user_type_conversion (totype, convs->u.expr, flags, complain);
6849           gcc_assert (seen_error ());
6850           if (fn)
6851             inform (DECL_SOURCE_LOCATION (fn),
6852                     "  initializing argument %P of %qD", argnum, fn);
6853         }
6854       return error_mark_node;
6855
6856     case ck_list:
6857       {
6858         /* Conversion to std::initializer_list<T>.  */
6859         tree elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (totype), 0);
6860         tree new_ctor = build_constructor (init_list_type_node, NULL);
6861         unsigned len = CONSTRUCTOR_NELTS (expr);
6862         tree array, val, field;
6863         vec<constructor_elt, va_gc> *vec = NULL;
6864         unsigned ix;
6865
6866         /* Convert all the elements.  */
6867         FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expr), ix, val)
6868           {
6869             tree sub = convert_like_real (convs->u.list[ix], val, fn, argnum,
6870                                           false, false, complain);
6871             if (sub == error_mark_node)
6872               return sub;
6873             if (!BRACE_ENCLOSED_INITIALIZER_P (val)
6874                 && !check_narrowing (TREE_TYPE (sub), val, complain))
6875               return error_mark_node;
6876             CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_ctor), NULL_TREE, sub);
6877             if (!TREE_CONSTANT (sub))
6878               TREE_CONSTANT (new_ctor) = false;
6879           }
6880         /* Build up the array.  */
6881         elttype = cp_build_qualified_type
6882           (elttype, cp_type_quals (elttype) | TYPE_QUAL_CONST);
6883         array = build_array_of_n_type (elttype, len);
6884         array = finish_compound_literal (array, new_ctor, complain, fcl_c99);
6885         /* Take the address explicitly rather than via decay_conversion
6886            to avoid the error about taking the address of a temporary.  */
6887         array = cp_build_addr_expr (array, complain);
6888         array = cp_convert (build_pointer_type (elttype), array, complain);
6889         if (array == error_mark_node)
6890           return error_mark_node;
6891
6892         /* Build up the initializer_list object.  Note: fail gracefully
6893            if the object cannot be completed because, for example, no
6894            definition is provided (c++/80956).  */
6895         totype = complete_type_or_maybe_complain (totype, NULL_TREE, complain);
6896         if (!totype)
6897           return error_mark_node;
6898         field = next_initializable_field (TYPE_FIELDS (totype));
6899         CONSTRUCTOR_APPEND_ELT (vec, field, array);
6900         field = next_initializable_field (DECL_CHAIN (field));
6901         CONSTRUCTOR_APPEND_ELT (vec, field, size_int (len));
6902         new_ctor = build_constructor (totype, vec);
6903         return get_target_expr_sfinae (new_ctor, complain);
6904       }
6905
6906     case ck_aggr:
6907       if (TREE_CODE (totype) == COMPLEX_TYPE)
6908         {
6909           tree real = CONSTRUCTOR_ELT (expr, 0)->value;
6910           tree imag = CONSTRUCTOR_ELT (expr, 1)->value;
6911           real = perform_implicit_conversion (TREE_TYPE (totype),
6912                                               real, complain);
6913           imag = perform_implicit_conversion (TREE_TYPE (totype),
6914                                               imag, complain);
6915           expr = build2 (COMPLEX_EXPR, totype, real, imag);
6916           return expr;
6917         }
6918       expr = reshape_init (totype, expr, complain);
6919       expr = get_target_expr_sfinae (digest_init (totype, expr, complain),
6920                                      complain);
6921       if (expr != error_mark_node)
6922         TARGET_EXPR_LIST_INIT_P (expr) = true;
6923       return expr;
6924
6925     default:
6926       break;
6927     };
6928
6929   expr = convert_like_real (next_conversion (convs), expr, fn, argnum,
6930                             convs->kind == ck_ref_bind
6931                             ? issue_conversion_warnings : false, 
6932                             c_cast_p, complain);
6933   if (expr == error_mark_node)
6934     return error_mark_node;
6935
6936   switch (convs->kind)
6937     {
6938     case ck_rvalue:
6939       expr = decay_conversion (expr, complain);
6940       if (expr == error_mark_node)
6941         {
6942           if (complain & tf_error)
6943             {
6944               maybe_print_user_conv_context (convs);
6945               if (fn)
6946                 inform (DECL_SOURCE_LOCATION (fn),
6947                         "  initializing argument %P of %qD", argnum, fn);
6948             }
6949           return error_mark_node;
6950         }
6951
6952       if (! MAYBE_CLASS_TYPE_P (totype))
6953         return expr;
6954
6955       /* Don't introduce copies when passing arguments along to the inherited
6956          constructor.  */
6957       if (current_function_decl
6958           && flag_new_inheriting_ctors
6959           && DECL_INHERITED_CTOR (current_function_decl))
6960         return expr;
6961
6962       if (TREE_CODE (expr) == TARGET_EXPR
6963           && TARGET_EXPR_LIST_INIT_P (expr))
6964         /* Copy-list-initialization doesn't actually involve a copy.  */
6965         return expr;
6966
6967       /* Fall through.  */
6968     case ck_base:
6969       if (convs->kind == ck_base && !convs->need_temporary_p)
6970         {
6971           /* We are going to bind a reference directly to a base-class
6972              subobject of EXPR.  */
6973           /* Build an expression for `*((base*) &expr)'.  */
6974           expr = convert_to_base (expr, totype,
6975                                   !c_cast_p, /*nonnull=*/true, complain);
6976           return expr;
6977         }
6978
6979       /* Copy-initialization where the cv-unqualified version of the source
6980          type is the same class as, or a derived class of, the class of the
6981          destination [is treated as direct-initialization].  [dcl.init] */
6982       flags = LOOKUP_NORMAL;
6983       if (convs->user_conv_p)
6984         /* This conversion is being done in the context of a user-defined
6985            conversion (i.e. the second step of copy-initialization), so
6986            don't allow any more.  */
6987         flags |= LOOKUP_NO_CONVERSION;
6988       else
6989         flags |= LOOKUP_ONLYCONVERTING;
6990       if (convs->rvaluedness_matches_p)
6991         /* standard_conversion got LOOKUP_PREFER_RVALUE.  */
6992         flags |= LOOKUP_PREFER_RVALUE;
6993       expr = build_temp (expr, totype, flags, &diag_kind, complain);
6994       if (diag_kind && complain)
6995         {
6996           maybe_print_user_conv_context (convs);
6997           if (fn)
6998             inform (DECL_SOURCE_LOCATION (fn),
6999                     "  initializing argument %P of %qD", argnum, fn);
7000         }
7001
7002       return build_cplus_new (totype, expr, complain);
7003
7004     case ck_ref_bind:
7005       {
7006         tree ref_type = totype;
7007
7008         if (convs->bad_p && !next_conversion (convs)->bad_p)
7009           {
7010             tree extype = TREE_TYPE (expr);
7011             if (TYPE_REF_IS_RVALUE (ref_type)
7012                 && lvalue_p (expr))
7013               error_at (loc, "cannot bind rvalue reference of type %qH to "
7014                         "lvalue of type %qI", totype, extype);
7015             else if (!TYPE_REF_IS_RVALUE (ref_type) && !lvalue_p (expr)
7016                      && !CP_TYPE_CONST_NON_VOLATILE_P (TREE_TYPE (ref_type)))
7017               error_at (loc, "cannot bind non-const lvalue reference of "
7018                         "type %qH to an rvalue of type %qI", totype, extype);
7019             else if (!reference_compatible_p (TREE_TYPE (totype), extype))
7020               error_at (loc, "binding reference of type %qH to %qI "
7021                         "discards qualifiers", totype, extype);
7022             else
7023               gcc_unreachable ();
7024             maybe_print_user_conv_context (convs);
7025             if (fn)
7026               inform (DECL_SOURCE_LOCATION (fn),
7027                       "  initializing argument %P of %qD", argnum, fn);
7028             return error_mark_node;
7029           }
7030
7031         /* If necessary, create a temporary. 
7032
7033            VA_ARG_EXPR and CONSTRUCTOR expressions are special cases
7034            that need temporaries, even when their types are reference
7035            compatible with the type of reference being bound, so the
7036            upcoming call to cp_build_addr_expr doesn't fail.  */
7037         if (convs->need_temporary_p
7038             || TREE_CODE (expr) == CONSTRUCTOR
7039             || TREE_CODE (expr) == VA_ARG_EXPR)
7040           {
7041             /* Otherwise, a temporary of type "cv1 T1" is created and
7042                initialized from the initializer expression using the rules
7043                for a non-reference copy-initialization (8.5).  */
7044
7045             tree type = TREE_TYPE (ref_type);
7046             cp_lvalue_kind lvalue = lvalue_kind (expr);
7047
7048             gcc_assert (same_type_ignoring_top_level_qualifiers_p
7049                         (type, next_conversion (convs)->type));
7050             if (!CP_TYPE_CONST_NON_VOLATILE_P (type)
7051                 && !TYPE_REF_IS_RVALUE (ref_type))
7052               {
7053                 /* If the reference is volatile or non-const, we
7054                    cannot create a temporary.  */
7055                 if (lvalue & clk_bitfield)
7056                   error_at (loc, "cannot bind bitfield %qE to %qT",
7057                             expr, ref_type);
7058                 else if (lvalue & clk_packed)
7059                   error_at (loc, "cannot bind packed field %qE to %qT",
7060                             expr, ref_type);
7061                 else
7062                   error_at (loc, "cannot bind rvalue %qE to %qT",
7063                             expr, ref_type);
7064                 return error_mark_node;
7065               }
7066             /* If the source is a packed field, and we must use a copy
7067                constructor, then building the target expr will require
7068                binding the field to the reference parameter to the
7069                copy constructor, and we'll end up with an infinite
7070                loop.  If we can use a bitwise copy, then we'll be
7071                OK.  */
7072             if ((lvalue & clk_packed)
7073                 && CLASS_TYPE_P (type)
7074                 && type_has_nontrivial_copy_init (type))
7075               {
7076                 error_at (loc, "cannot bind packed field %qE to %qT",
7077                           expr, ref_type);
7078                 return error_mark_node;
7079               }
7080             if (lvalue & clk_bitfield)
7081               {
7082                 expr = convert_bitfield_to_declared_type (expr);
7083                 expr = fold_convert (type, expr);
7084               }
7085             expr = build_target_expr_with_type (expr, type, complain);
7086           }
7087
7088         /* Take the address of the thing to which we will bind the
7089            reference.  */
7090         expr = cp_build_addr_expr (expr, complain);
7091         if (expr == error_mark_node)
7092           return error_mark_node;
7093
7094         /* Convert it to a pointer to the type referred to by the
7095            reference.  This will adjust the pointer if a derived to
7096            base conversion is being performed.  */
7097         expr = cp_convert (build_pointer_type (TREE_TYPE (ref_type)),
7098                            expr, complain);
7099         /* Convert the pointer to the desired reference type.  */
7100         return build_nop (ref_type, expr);
7101       }
7102
7103     case ck_lvalue:
7104       return decay_conversion (expr, complain);
7105
7106     case ck_fnptr:
7107       /* ??? Should the address of a transaction-safe pointer point to the TM
7108         clone, and this conversion look up the primary function?  */
7109       return build_nop (totype, expr);
7110
7111     case ck_qual:
7112       /* Warn about deprecated conversion if appropriate.  */
7113       string_conv_p (totype, expr, 1);
7114       break;
7115
7116     case ck_ptr:
7117       if (convs->base_p)
7118         expr = convert_to_base (expr, totype, !c_cast_p,
7119                                 /*nonnull=*/false, complain);
7120       return build_nop (totype, expr);
7121
7122     case ck_pmem:
7123       return convert_ptrmem (totype, expr, /*allow_inverse_p=*/false,
7124                              c_cast_p, complain);
7125
7126     default:
7127       break;
7128     }
7129
7130   if (convs->check_narrowing
7131       && !check_narrowing (totype, expr, complain))
7132     return error_mark_node;
7133
7134   if (issue_conversion_warnings)
7135     expr = cp_convert_and_check (totype, expr, complain);
7136   else
7137     expr = cp_convert (totype, expr, complain);
7138
7139   return expr;
7140 }
7141
7142 /* ARG is being passed to a varargs function.  Perform any conversions
7143    required.  Return the converted value.  */
7144
7145 tree
7146 convert_arg_to_ellipsis (tree arg, tsubst_flags_t complain)
7147 {
7148   tree arg_type;
7149   location_t loc = EXPR_LOC_OR_LOC (arg, input_location);
7150
7151   /* [expr.call]
7152
7153      The lvalue-to-rvalue, array-to-pointer, and function-to-pointer
7154      standard conversions are performed.  */
7155   arg = decay_conversion (arg, complain);
7156   arg_type = TREE_TYPE (arg);
7157   /* [expr.call]
7158
7159      If the argument has integral or enumeration type that is subject
7160      to the integral promotions (_conv.prom_), or a floating point
7161      type that is subject to the floating point promotion
7162      (_conv.fpprom_), the value of the argument is converted to the
7163      promoted type before the call.  */
7164   if (TREE_CODE (arg_type) == REAL_TYPE
7165       && (TYPE_PRECISION (arg_type)
7166           < TYPE_PRECISION (double_type_node))
7167       && !DECIMAL_FLOAT_MODE_P (TYPE_MODE (arg_type)))
7168     {
7169       if ((complain & tf_warning)
7170           && warn_double_promotion && !c_inhibit_evaluation_warnings)
7171         warning_at (loc, OPT_Wdouble_promotion,
7172                     "implicit conversion from %qH to %qI when passing "
7173                     "argument to function",
7174                     arg_type, double_type_node);
7175       arg = convert_to_real_nofold (double_type_node, arg);
7176     }
7177   else if (NULLPTR_TYPE_P (arg_type))
7178     arg = null_pointer_node;
7179   else if (INTEGRAL_OR_ENUMERATION_TYPE_P (arg_type))
7180     {
7181       if (SCOPED_ENUM_P (arg_type))
7182         {
7183           tree prom = cp_convert (ENUM_UNDERLYING_TYPE (arg_type), arg,
7184                                   complain);
7185           prom = cp_perform_integral_promotions (prom, complain);
7186           if (abi_version_crosses (6)
7187               && TYPE_MODE (TREE_TYPE (prom)) != TYPE_MODE (arg_type)
7188               && (complain & tf_warning))
7189             warning_at (loc, OPT_Wabi, "scoped enum %qT passed through ... as "
7190                         "%qT before -fabi-version=6, %qT after", arg_type,
7191                         TREE_TYPE (prom), ENUM_UNDERLYING_TYPE (arg_type));
7192           if (!abi_version_at_least (6))
7193             arg = prom;
7194         }
7195       else
7196         arg = cp_perform_integral_promotions (arg, complain);
7197     }
7198
7199   arg = require_complete_type_sfinae (arg, complain);
7200   arg_type = TREE_TYPE (arg);
7201
7202   if (arg != error_mark_node
7203       /* In a template (or ill-formed code), we can have an incomplete type
7204          even after require_complete_type_sfinae, in which case we don't know
7205          whether it has trivial copy or not.  */
7206       && COMPLETE_TYPE_P (arg_type)
7207       && !cp_unevaluated_operand)
7208     {
7209       /* [expr.call] 5.2.2/7:
7210          Passing a potentially-evaluated argument of class type (Clause 9)
7211          with a non-trivial copy constructor or a non-trivial destructor
7212          with no corresponding parameter is conditionally-supported, with
7213          implementation-defined semantics.
7214
7215          We support it as pass-by-invisible-reference, just like a normal
7216          value parameter.
7217
7218          If the call appears in the context of a sizeof expression,
7219          it is not potentially-evaluated.  */
7220       if (type_has_nontrivial_copy_init (arg_type)
7221           || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (arg_type))
7222         {
7223           arg = force_rvalue (arg, complain);
7224           if (complain & tf_warning)
7225             warning (OPT_Wconditionally_supported,
7226                      "passing objects of non-trivially-copyable "
7227                      "type %q#T through %<...%> is conditionally supported",
7228                      arg_type);
7229           return build1 (ADDR_EXPR, build_reference_type (arg_type), arg);
7230         }
7231       /* Build up a real lvalue-to-rvalue conversion in case the
7232          copy constructor is trivial but not callable.  */
7233       else if (CLASS_TYPE_P (arg_type))
7234         force_rvalue (arg, complain);
7235
7236     }
7237
7238   return arg;
7239 }
7240
7241 /* va_arg (EXPR, TYPE) is a builtin. Make sure it is not abused.  */
7242
7243 tree
7244 build_x_va_arg (source_location loc, tree expr, tree type)
7245 {
7246   if (processing_template_decl)
7247     {
7248       tree r = build_min (VA_ARG_EXPR, type, expr);
7249       SET_EXPR_LOCATION (r, loc);
7250       return r;
7251     }
7252
7253   type = complete_type_or_else (type, NULL_TREE);
7254
7255   if (expr == error_mark_node || !type)
7256     return error_mark_node;
7257
7258   expr = mark_lvalue_use (expr);
7259
7260   if (TREE_CODE (type) == REFERENCE_TYPE)
7261     {
7262       error ("cannot receive reference type %qT through %<...%>", type);
7263       return error_mark_node;
7264     }
7265
7266   if (type_has_nontrivial_copy_init (type)
7267       || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
7268     {
7269       /* conditionally-supported behavior [expr.call] 5.2.2/7.  Let's treat
7270          it as pass by invisible reference.  */
7271       warning_at (loc, OPT_Wconditionally_supported,
7272                  "receiving objects of non-trivially-copyable type %q#T "
7273                  "through %<...%> is conditionally-supported", type);
7274
7275       tree ref = cp_build_reference_type (type, false);
7276       expr = build_va_arg (loc, expr, ref);
7277       return convert_from_reference (expr);
7278     }
7279
7280   tree ret = build_va_arg (loc, expr, type);
7281   if (CLASS_TYPE_P (type))
7282     /* Wrap the VA_ARG_EXPR in a TARGET_EXPR now so other code doesn't need to
7283        know how to handle it.  */
7284     ret = get_target_expr (ret);
7285   return ret;
7286 }
7287
7288 /* TYPE has been given to va_arg.  Apply the default conversions which
7289    would have happened when passed via ellipsis.  Return the promoted
7290    type, or the passed type if there is no change.  */
7291
7292 tree
7293 cxx_type_promotes_to (tree type)
7294 {
7295   tree promote;
7296
7297   /* Perform the array-to-pointer and function-to-pointer
7298      conversions.  */
7299   type = type_decays_to (type);
7300
7301   promote = type_promotes_to (type);
7302   if (same_type_p (type, promote))
7303     promote = type;
7304
7305   return promote;
7306 }
7307
7308 /* ARG is a default argument expression being passed to a parameter of
7309    the indicated TYPE, which is a parameter to FN.  PARMNUM is the
7310    zero-based argument number.  Do any required conversions.  Return
7311    the converted value.  */
7312
7313 static GTY(()) vec<tree, va_gc> *default_arg_context;
7314 void
7315 push_defarg_context (tree fn)
7316 { vec_safe_push (default_arg_context, fn); }
7317
7318 void
7319 pop_defarg_context (void)
7320 { default_arg_context->pop (); }
7321
7322 tree
7323 convert_default_arg (tree type, tree arg, tree fn, int parmnum,
7324                      tsubst_flags_t complain)
7325 {
7326   int i;
7327   tree t;
7328
7329   /* See through clones.  */
7330   fn = DECL_ORIGIN (fn);
7331   /* And inheriting ctors.  */
7332   if (flag_new_inheriting_ctors)
7333     fn = strip_inheriting_ctors (fn);
7334
7335   /* Detect recursion.  */
7336   FOR_EACH_VEC_SAFE_ELT (default_arg_context, i, t)
7337     if (t == fn)
7338       {
7339         if (complain & tf_error)
7340           error ("recursive evaluation of default argument for %q#D", fn);
7341         return error_mark_node;
7342       }
7343
7344   /* If the ARG is an unparsed default argument expression, the
7345      conversion cannot be performed.  */
7346   if (TREE_CODE (arg) == DEFAULT_ARG)
7347     {
7348       if (complain & tf_error)
7349         error ("call to %qD uses the default argument for parameter %P, which "
7350                "is not yet defined", fn, parmnum);
7351       return error_mark_node;
7352     }
7353
7354   push_defarg_context (fn);
7355
7356   if (fn && DECL_TEMPLATE_INFO (fn))
7357     arg = tsubst_default_argument (fn, parmnum, type, arg, complain);
7358
7359   /* Due to:
7360
7361        [dcl.fct.default]
7362
7363        The names in the expression are bound, and the semantic
7364        constraints are checked, at the point where the default
7365        expressions appears.
7366
7367      we must not perform access checks here.  */
7368   push_deferring_access_checks (dk_no_check);
7369   /* We must make a copy of ARG, in case subsequent processing
7370      alters any part of it.  */
7371   arg = break_out_target_exprs (arg, /*clear location*/true);
7372
7373   arg = convert_for_initialization (0, type, arg, LOOKUP_IMPLICIT,
7374                                     ICR_DEFAULT_ARGUMENT, fn, parmnum,
7375                                     complain);
7376   arg = convert_for_arg_passing (type, arg, complain);
7377   pop_deferring_access_checks();
7378
7379   pop_defarg_context ();
7380
7381   return arg;
7382 }
7383
7384 /* Returns the type which will really be used for passing an argument of
7385    type TYPE.  */
7386
7387 tree
7388 type_passed_as (tree type)
7389 {
7390   /* Pass classes with copy ctors by invisible reference.  */
7391   if (TREE_ADDRESSABLE (type))
7392     {
7393       type = build_reference_type (type);
7394       /* There are no other pointers to this temporary.  */
7395       type = cp_build_qualified_type (type, TYPE_QUAL_RESTRICT);
7396     }
7397   else if (targetm.calls.promote_prototypes (NULL_TREE)
7398            && INTEGRAL_TYPE_P (type)
7399            && COMPLETE_TYPE_P (type)
7400            && tree_int_cst_lt (TYPE_SIZE (type), TYPE_SIZE (integer_type_node)))
7401     type = integer_type_node;
7402
7403   return type;
7404 }
7405
7406 /* Actually perform the appropriate conversion.  */
7407
7408 tree
7409 convert_for_arg_passing (tree type, tree val, tsubst_flags_t complain)
7410 {
7411   tree bitfield_type;
7412
7413   /* If VAL is a bitfield, then -- since it has already been converted
7414      to TYPE -- it cannot have a precision greater than TYPE.  
7415
7416      If it has a smaller precision, we must widen it here.  For
7417      example, passing "int f:3;" to a function expecting an "int" will
7418      not result in any conversion before this point.
7419
7420      If the precision is the same we must not risk widening.  For
7421      example, the COMPONENT_REF for a 32-bit "long long" bitfield will
7422      often have type "int", even though the C++ type for the field is
7423      "long long".  If the value is being passed to a function
7424      expecting an "int", then no conversions will be required.  But,
7425      if we call convert_bitfield_to_declared_type, the bitfield will
7426      be converted to "long long".  */
7427   bitfield_type = is_bitfield_expr_with_lowered_type (val);
7428   if (bitfield_type 
7429       && TYPE_PRECISION (TREE_TYPE (val)) < TYPE_PRECISION (type))
7430     val = convert_to_integer_nofold (TYPE_MAIN_VARIANT (bitfield_type), val);
7431
7432   if (val == error_mark_node)
7433     ;
7434   /* Pass classes with copy ctors by invisible reference.  */
7435   else if (TREE_ADDRESSABLE (type))
7436     val = build1 (ADDR_EXPR, build_reference_type (type), val);
7437   else if (targetm.calls.promote_prototypes (NULL_TREE)
7438            && INTEGRAL_TYPE_P (type)
7439            && COMPLETE_TYPE_P (type)
7440            && tree_int_cst_lt (TYPE_SIZE (type), TYPE_SIZE (integer_type_node)))
7441     val = cp_perform_integral_promotions (val, complain);
7442   if (complain & tf_warning)
7443     {
7444       if (warn_suggest_attribute_format)
7445         {
7446           tree rhstype = TREE_TYPE (val);
7447           const enum tree_code coder = TREE_CODE (rhstype);
7448           const enum tree_code codel = TREE_CODE (type);
7449           if ((codel == POINTER_TYPE || codel == REFERENCE_TYPE)
7450               && coder == codel
7451               && check_missing_format_attribute (type, rhstype))
7452             warning (OPT_Wsuggest_attribute_format,
7453                      "argument of function call might be a candidate "
7454                      "for a format attribute");
7455         }
7456       maybe_warn_parm_abi (type, EXPR_LOC_OR_LOC (val, input_location));
7457     }
7458   return val;
7459 }
7460
7461 /* Returns non-zero iff FN is a function with magic varargs, i.e. ones for
7462    which just decay_conversion or no conversions at all should be done.
7463    This is true for some builtins which don't act like normal functions.
7464    Return 2 if no conversions at all should be done, 1 if just
7465    decay_conversion.  Return 3 for special treatment of the 3rd argument
7466    for __builtin_*_overflow_p.  */
7467
7468 int
7469 magic_varargs_p (tree fn)
7470 {
7471   if (DECL_BUILT_IN_CLASS (fn) == BUILT_IN_NORMAL)
7472     switch (DECL_FUNCTION_CODE (fn))
7473       {
7474       case BUILT_IN_CLASSIFY_TYPE:
7475       case BUILT_IN_CONSTANT_P:
7476       case BUILT_IN_NEXT_ARG:
7477       case BUILT_IN_VA_START:
7478         return 1;
7479
7480       case BUILT_IN_ADD_OVERFLOW_P:
7481       case BUILT_IN_SUB_OVERFLOW_P:
7482       case BUILT_IN_MUL_OVERFLOW_P:
7483         return 3;
7484
7485       default:;
7486         return lookup_attribute ("type generic",
7487                                  TYPE_ATTRIBUTES (TREE_TYPE (fn))) != 0;
7488       }
7489
7490   return 0;
7491 }
7492
7493 /* Returns the decl of the dispatcher function if FN is a function version.  */
7494
7495 tree
7496 get_function_version_dispatcher (tree fn)
7497 {
7498   tree dispatcher_decl = NULL;
7499
7500   gcc_assert (TREE_CODE (fn) == FUNCTION_DECL
7501               && DECL_FUNCTION_VERSIONED (fn));
7502
7503   gcc_assert (targetm.get_function_versions_dispatcher);
7504   dispatcher_decl = targetm.get_function_versions_dispatcher (fn);
7505
7506   if (dispatcher_decl == NULL)
7507     {
7508       error_at (input_location, "use of multiversioned function "
7509                                 "without a default");
7510       return NULL;
7511     }
7512
7513   retrofit_lang_decl (dispatcher_decl);
7514   gcc_assert (dispatcher_decl != NULL);
7515   return dispatcher_decl;
7516 }
7517
7518 /* fn is a function version dispatcher that is marked used. Mark all the 
7519    semantically identical function versions it will dispatch as used.  */
7520
7521 void
7522 mark_versions_used (tree fn)
7523 {
7524   struct cgraph_node *node;
7525   struct cgraph_function_version_info *node_v;
7526   struct cgraph_function_version_info *it_v;
7527
7528   gcc_assert (TREE_CODE (fn) == FUNCTION_DECL);
7529
7530   node = cgraph_node::get (fn);
7531   if (node == NULL)
7532     return;
7533
7534   gcc_assert (node->dispatcher_function);
7535
7536   node_v = node->function_version ();
7537   if (node_v == NULL)
7538     return;
7539
7540   /* All semantically identical versions are chained.  Traverse and mark each
7541      one of them as used.  */
7542   it_v = node_v->next;
7543   while (it_v != NULL)
7544     {
7545       mark_used (it_v->this_node->decl);
7546       it_v = it_v->next;
7547     }
7548 }
7549
7550 /* Build a call to "the copy constructor" for the type of A, even if it
7551    wouldn't be selected by normal overload resolution.  Used for
7552    diagnostics.  */
7553
7554 static tree
7555 call_copy_ctor (tree a, tsubst_flags_t complain)
7556 {
7557   tree ctype = TYPE_MAIN_VARIANT (TREE_TYPE (a));
7558   tree binfo = TYPE_BINFO (ctype);
7559   tree copy = get_copy_ctor (ctype, complain);
7560   copy = build_baselink (binfo, binfo, copy, NULL_TREE);
7561   tree ob = build_dummy_object (ctype);
7562   vec<tree, va_gc>* args = make_tree_vector_single (a);
7563   tree r = build_new_method_call (ob, copy, &args, NULL_TREE,
7564                                   LOOKUP_NORMAL, NULL, complain);
7565   release_tree_vector (args);
7566   return r;
7567 }
7568
7569 /* Return true iff T refers to a base field.  */
7570
7571 static bool
7572 is_base_field_ref (tree t)
7573 {
7574   STRIP_NOPS (t);
7575   if (TREE_CODE (t) == ADDR_EXPR)
7576     t = TREE_OPERAND (t, 0);
7577   if (TREE_CODE (t) == COMPONENT_REF)
7578     t = TREE_OPERAND (t, 1);
7579   if (TREE_CODE (t) == FIELD_DECL)
7580     return DECL_FIELD_IS_BASE (t);
7581   return false;
7582 }
7583
7584 /* We can't elide a copy from a function returning by value to a base
7585    subobject, as the callee might clobber tail padding.  Return true iff this
7586    could be that case.  */
7587
7588 static bool
7589 unsafe_copy_elision_p (tree target, tree exp)
7590 {
7591   /* Copy elision only happens with a TARGET_EXPR.  */
7592   if (TREE_CODE (exp) != TARGET_EXPR)
7593     return false;
7594   tree type = TYPE_MAIN_VARIANT (TREE_TYPE (exp));
7595   /* It's safe to elide the copy for a class with no tail padding.  */
7596   if (tree_int_cst_equal (TYPE_SIZE (type), CLASSTYPE_SIZE (type)))
7597     return false;
7598   /* It's safe to elide the copy if we aren't initializing a base object.  */
7599   if (!is_base_field_ref (target))
7600     return false;
7601   tree init = TARGET_EXPR_INITIAL (exp);
7602   /* build_compound_expr pushes COMPOUND_EXPR inside TARGET_EXPR.  */
7603   while (TREE_CODE (init) == COMPOUND_EXPR)
7604     init = TREE_OPERAND (init, 1);
7605   if (TREE_CODE (init) == COND_EXPR)
7606     {
7607       /* We'll end up copying from each of the arms of the COND_EXPR directly
7608          into the target, so look at them. */
7609       if (tree op = TREE_OPERAND (init, 1))
7610         if (unsafe_copy_elision_p (target, op))
7611           return true;
7612       return unsafe_copy_elision_p (target, TREE_OPERAND (init, 2));
7613     }
7614   return (TREE_CODE (init) == AGGR_INIT_EXPR
7615           && !AGGR_INIT_VIA_CTOR_P (init));
7616 }
7617
7618 /* True iff C is a conversion that binds a reference to a prvalue.  */
7619
7620 static bool
7621 conv_binds_ref_to_prvalue (conversion *c)
7622 {
7623   if (c->kind != ck_ref_bind)
7624     return false;
7625   if (c->need_temporary_p)
7626     return true;
7627
7628   c = next_conversion (c);
7629
7630   if (c->kind == ck_rvalue)
7631     return true;
7632   if (c->kind == ck_user && TREE_CODE (c->type) != REFERENCE_TYPE)
7633     return true;
7634   if (c->kind == ck_identity && c->u.expr
7635       && TREE_CODE (c->u.expr) == TARGET_EXPR)
7636     return true;
7637
7638   return false;
7639 }
7640
7641 /* Subroutine of the various build_*_call functions.  Overload resolution
7642    has chosen a winning candidate CAND; build up a CALL_EXPR accordingly.
7643    ARGS is a TREE_LIST of the unconverted arguments to the call.  FLAGS is a
7644    bitmask of various LOOKUP_* flags which apply to the call itself.  */
7645
7646 static tree
7647 build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain)
7648 {
7649   tree fn = cand->fn;
7650   const vec<tree, va_gc> *args = cand->args;
7651   tree first_arg = cand->first_arg;
7652   conversion **convs = cand->convs;
7653   conversion *conv;
7654   tree parm = TYPE_ARG_TYPES (TREE_TYPE (fn));
7655   int parmlen;
7656   tree val;
7657   int i = 0;
7658   int j = 0;
7659   unsigned int arg_index = 0;
7660   int is_method = 0;
7661   int nargs;
7662   tree *argarray;
7663   bool already_used = false;
7664
7665   /* In a template, there is no need to perform all of the work that
7666      is normally done.  We are only interested in the type of the call
7667      expression, i.e., the return type of the function.  Any semantic
7668      errors will be deferred until the template is instantiated.  */
7669   if (processing_template_decl)
7670     {
7671       tree expr, addr;
7672       tree return_type;
7673       const tree *argarray;
7674       unsigned int nargs;
7675
7676       if (undeduced_auto_decl (fn))
7677         mark_used (fn, complain);
7678       else
7679         /* Otherwise set TREE_USED for the benefit of -Wunused-function.
7680            See PR80598.  */
7681         TREE_USED (fn) = 1;
7682
7683       return_type = TREE_TYPE (TREE_TYPE (fn));
7684       nargs = vec_safe_length (args);
7685       if (first_arg == NULL_TREE)
7686         argarray = args->address ();
7687       else
7688         {
7689           tree *alcarray;
7690           unsigned int ix;
7691           tree arg;
7692
7693           ++nargs;
7694           alcarray = XALLOCAVEC (tree, nargs);
7695           alcarray[0] = build_this (first_arg);
7696           FOR_EACH_VEC_SAFE_ELT (args, ix, arg)
7697             alcarray[ix + 1] = arg;
7698           argarray = alcarray;
7699         }
7700
7701       addr = build_addr_func (fn, complain);
7702       if (addr == error_mark_node)
7703         return error_mark_node;
7704       expr = build_call_array_loc (input_location, return_type,
7705                                    addr, nargs, argarray);
7706       if (TREE_THIS_VOLATILE (fn) && cfun)
7707         current_function_returns_abnormally = 1;
7708       return convert_from_reference (expr);
7709     }
7710
7711   /* Give any warnings we noticed during overload resolution.  */
7712   if (cand->warnings && (complain & tf_warning))
7713     {
7714       struct candidate_warning *w;
7715       for (w = cand->warnings; w; w = w->next)
7716         joust (cand, w->loser, 1, complain);
7717     }
7718
7719   /* Core issue 2327: P0135 doesn't say how to handle the case where the
7720      argument to the copy constructor ends up being a prvalue after
7721      conversion.  Let's do the normal processing, but pretend we aren't
7722      actually using the copy constructor.  */
7723   bool force_elide = false;
7724   if (cxx_dialect >= cxx17
7725       && cand->num_convs == 1
7726       && DECL_COMPLETE_CONSTRUCTOR_P (fn)
7727       && (DECL_COPY_CONSTRUCTOR_P (fn)
7728           || DECL_MOVE_CONSTRUCTOR_P (fn))
7729       && conv_binds_ref_to_prvalue (convs[0]))
7730     {
7731       force_elide = true;
7732       goto not_really_used;
7733     }
7734
7735   /* OK, we're actually calling this inherited constructor; set its deletedness
7736      appropriately.  We can get away with doing this here because calling is
7737      the only way to refer to a constructor.  */
7738   if (DECL_INHERITED_CTOR (fn))
7739     deduce_inheriting_ctor (fn);
7740
7741   /* Make =delete work with SFINAE.  */
7742   if (DECL_DELETED_FN (fn))
7743     {
7744       if (complain & tf_error)
7745         mark_used (fn);
7746       return error_mark_node;
7747     }
7748
7749   if (DECL_FUNCTION_MEMBER_P (fn))
7750     {
7751       tree access_fn;
7752       /* If FN is a template function, two cases must be considered.
7753          For example:
7754
7755            struct A {
7756              protected:
7757                template <class T> void f();
7758            };
7759            template <class T> struct B {
7760              protected:
7761                void g();
7762            };
7763            struct C : A, B<int> {
7764              using A::f;        // #1
7765              using B<int>::g;   // #2
7766            };
7767
7768          In case #1 where `A::f' is a member template, DECL_ACCESS is
7769          recorded in the primary template but not in its specialization.
7770          We check access of FN using its primary template.
7771
7772          In case #2, where `B<int>::g' has a DECL_TEMPLATE_INFO simply
7773          because it is a member of class template B, DECL_ACCESS is
7774          recorded in the specialization `B<int>::g'.  We cannot use its
7775          primary template because `B<T>::g' and `B<int>::g' may have
7776          different access.  */
7777       if (DECL_TEMPLATE_INFO (fn)
7778           && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (fn)))
7779         access_fn = DECL_TI_TEMPLATE (fn);
7780       else
7781         access_fn = fn;
7782       if (!perform_or_defer_access_check (cand->access_path, access_fn,
7783                                           fn, complain))
7784         return error_mark_node;
7785     }
7786
7787   /* If we're checking for implicit delete, don't bother with argument
7788      conversions.  */
7789   if (flags & LOOKUP_SPECULATIVE)
7790     {
7791       if (cand->viable == 1)
7792         return fn;
7793       else if (!(complain & tf_error))
7794         /* Reject bad conversions now.  */
7795         return error_mark_node;
7796       /* else continue to get conversion error.  */
7797     }
7798
7799  not_really_used:
7800
7801   /* N3276 magic doesn't apply to nested calls.  */
7802   tsubst_flags_t decltype_flag = (complain & tf_decltype);
7803   complain &= ~tf_decltype;
7804   /* No-Cleanup doesn't apply to nested calls either.  */
7805   tsubst_flags_t no_cleanup_complain = complain;
7806   complain &= ~tf_no_cleanup;
7807
7808   /* Find maximum size of vector to hold converted arguments.  */
7809   parmlen = list_length (parm);
7810   nargs = vec_safe_length (args) + (first_arg != NULL_TREE ? 1 : 0);
7811   if (parmlen > nargs)
7812     nargs = parmlen;
7813   argarray = XALLOCAVEC (tree, nargs);
7814
7815   /* The implicit parameters to a constructor are not considered by overload
7816      resolution, and must be of the proper type.  */
7817   if (DECL_CONSTRUCTOR_P (fn))
7818     {
7819       tree object_arg;
7820       if (first_arg != NULL_TREE)
7821         {
7822           object_arg = first_arg;
7823           first_arg = NULL_TREE;
7824         }
7825       else
7826         {
7827           object_arg = (*args)[arg_index];
7828           ++arg_index;
7829         }
7830       argarray[j++] = build_this (object_arg);
7831       parm = TREE_CHAIN (parm);
7832       /* We should never try to call the abstract constructor.  */
7833       gcc_assert (!DECL_HAS_IN_CHARGE_PARM_P (fn));
7834
7835       if (DECL_HAS_VTT_PARM_P (fn))
7836         {
7837           argarray[j++] = (*args)[arg_index];
7838           ++arg_index;
7839           parm = TREE_CHAIN (parm);
7840         }
7841
7842       if (flags & LOOKUP_PREFER_RVALUE)
7843         {
7844           /* The implicit move specified in 15.8.3/3 fails "...if the type of
7845              the first parameter of the selected constructor is not an rvalue
7846              reference to the object’s type (possibly cv-qualified)...." */
7847           gcc_assert (!(complain & tf_error));
7848           tree ptype = convs[0]->type;
7849           if (TREE_CODE (ptype) != REFERENCE_TYPE
7850               || !TYPE_REF_IS_RVALUE (ptype)
7851               || CONVERSION_RANK (convs[0]) > cr_exact)
7852             return error_mark_node;
7853         }
7854     }
7855   /* Bypass access control for 'this' parameter.  */
7856   else if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
7857     {
7858       tree parmtype = TREE_VALUE (parm);
7859       tree arg = build_this (first_arg != NULL_TREE
7860                              ? first_arg
7861                              : (*args)[arg_index]);
7862       tree argtype = TREE_TYPE (arg);
7863       tree converted_arg;
7864       tree base_binfo;
7865
7866       if (arg == error_mark_node)
7867         return error_mark_node;
7868
7869       if (convs[i]->bad_p)
7870         {
7871           if (complain & tf_error)
7872             {
7873               if (permerror (input_location, "passing %qT as %<this%> "
7874                              "argument discards qualifiers",
7875                              TREE_TYPE (argtype)))
7876                 inform (DECL_SOURCE_LOCATION (fn), "  in call to %qD", fn);
7877             }
7878           else
7879             return error_mark_node;
7880         }
7881
7882       /* See if the function member or the whole class type is declared
7883          final and the call can be devirtualized.  */
7884       if (DECL_FINAL_P (fn)
7885           || CLASSTYPE_FINAL (TYPE_METHOD_BASETYPE (TREE_TYPE (fn))))
7886         flags |= LOOKUP_NONVIRTUAL;
7887
7888       /* [class.mfct.nonstatic]: If a nonstatic member function of a class
7889          X is called for an object that is not of type X, or of a type
7890          derived from X, the behavior is undefined.
7891
7892          So we can assume that anything passed as 'this' is non-null, and
7893          optimize accordingly.  */
7894       gcc_assert (TYPE_PTR_P (parmtype));
7895       /* Convert to the base in which the function was declared.  */
7896       gcc_assert (cand->conversion_path != NULL_TREE);
7897       converted_arg = build_base_path (PLUS_EXPR,
7898                                        arg,
7899                                        cand->conversion_path,
7900                                        1, complain);
7901       /* Check that the base class is accessible.  */
7902       if (!accessible_base_p (TREE_TYPE (argtype),
7903                               BINFO_TYPE (cand->conversion_path), true))
7904         {
7905           if (complain & tf_error)
7906             error ("%qT is not an accessible base of %qT",
7907                    BINFO_TYPE (cand->conversion_path),
7908                    TREE_TYPE (argtype));
7909           else
7910             return error_mark_node;
7911         }
7912       /* If fn was found by a using declaration, the conversion path
7913          will be to the derived class, not the base declaring fn. We
7914          must convert from derived to base.  */
7915       base_binfo = lookup_base (TREE_TYPE (TREE_TYPE (converted_arg)),
7916                                 TREE_TYPE (parmtype), ba_unique,
7917                                 NULL, complain);
7918       converted_arg = build_base_path (PLUS_EXPR, converted_arg,
7919                                        base_binfo, 1, complain);
7920
7921       argarray[j++] = converted_arg;
7922       parm = TREE_CHAIN (parm);
7923       if (first_arg != NULL_TREE)
7924         first_arg = NULL_TREE;
7925       else
7926         ++arg_index;
7927       ++i;
7928       is_method = 1;
7929     }
7930
7931   gcc_assert (first_arg == NULL_TREE);
7932   for (; arg_index < vec_safe_length (args) && parm;
7933        parm = TREE_CHAIN (parm), ++arg_index, ++i)
7934     {
7935       tree type = TREE_VALUE (parm);
7936       tree arg = (*args)[arg_index];
7937       bool conversion_warning = true;
7938
7939       conv = convs[i];
7940
7941       /* If the argument is NULL and used to (implicitly) instantiate a
7942          template function (and bind one of the template arguments to
7943          the type of 'long int'), we don't want to warn about passing NULL
7944          to non-pointer argument.
7945          For example, if we have this template function:
7946
7947            template<typename T> void func(T x) {}
7948
7949          we want to warn (when -Wconversion is enabled) in this case:
7950
7951            void foo() {
7952              func<int>(NULL);
7953            }
7954
7955          but not in this case:
7956
7957            void foo() {
7958              func(NULL);
7959            }
7960       */
7961       if (null_node_p (arg)
7962           && DECL_TEMPLATE_INFO (fn)
7963           && cand->template_decl
7964           && !(flags & LOOKUP_EXPLICIT_TMPL_ARGS))
7965         conversion_warning = false;
7966
7967       /* Warn about initializer_list deduction that isn't currently in the
7968          working draft.  */
7969       if (cxx_dialect > cxx98
7970           && flag_deduce_init_list
7971           && cand->template_decl
7972           && is_std_init_list (non_reference (type))
7973           && BRACE_ENCLOSED_INITIALIZER_P (arg))
7974         {
7975           tree tmpl = TI_TEMPLATE (cand->template_decl);
7976           tree realparm = chain_index (j, DECL_ARGUMENTS (cand->fn));
7977           tree patparm = get_pattern_parm (realparm, tmpl);
7978           tree pattype = TREE_TYPE (patparm);
7979           if (PACK_EXPANSION_P (pattype))
7980             pattype = PACK_EXPANSION_PATTERN (pattype);
7981           pattype = non_reference (pattype);
7982
7983           if (TREE_CODE (pattype) == TEMPLATE_TYPE_PARM
7984               && (cand->explicit_targs == NULL_TREE
7985                   || (TREE_VEC_LENGTH (cand->explicit_targs)
7986                       <= TEMPLATE_TYPE_IDX (pattype))))
7987             {
7988               pedwarn (input_location, 0, "deducing %qT as %qT",
7989                        non_reference (TREE_TYPE (patparm)),
7990                        non_reference (type));
7991               pedwarn (DECL_SOURCE_LOCATION (cand->fn), 0,
7992                        "  in call to %qD", cand->fn);
7993               pedwarn (input_location, 0,
7994                        "  (you can disable this with -fno-deduce-init-list)");
7995             }
7996         }
7997
7998       /* Set user_conv_p on the argument conversions, so rvalue/base handling
7999          knows not to allow any more UDCs.  This needs to happen after we
8000          process cand->warnings.  */
8001       if (flags & LOOKUP_NO_CONVERSION)
8002         conv->user_conv_p = true;
8003
8004       tsubst_flags_t arg_complain = complain;
8005       if (!conversion_warning)
8006         arg_complain &= ~tf_warning;
8007
8008       val = convert_like_with_context (conv, arg, fn, i - is_method,
8009                                        arg_complain);
8010       val = convert_for_arg_passing (type, val, arg_complain);
8011         
8012       if (val == error_mark_node)
8013         return error_mark_node;
8014       else
8015         argarray[j++] = val;
8016     }
8017
8018   /* Default arguments */
8019   for (; parm && parm != void_list_node; parm = TREE_CHAIN (parm), i++)
8020     {
8021       if (TREE_VALUE (parm) == error_mark_node)
8022         return error_mark_node;
8023       val = convert_default_arg (TREE_VALUE (parm),
8024                                  TREE_PURPOSE (parm),
8025                                  fn, i - is_method,
8026                                  complain);
8027       if (val == error_mark_node)
8028         return error_mark_node;
8029       argarray[j++] = val;
8030     }
8031
8032   /* Ellipsis */
8033   int magic = magic_varargs_p (fn);
8034   for (; arg_index < vec_safe_length (args); ++arg_index)
8035     {
8036       tree a = (*args)[arg_index];
8037       if ((magic == 3 && arg_index == 2) || magic == 2)
8038         {
8039           /* Do no conversions for certain magic varargs.  */
8040           a = mark_type_use (a);
8041           if (TREE_CODE (a) == FUNCTION_DECL && reject_gcc_builtin (a))
8042             return error_mark_node;
8043         }
8044       else if (magic != 0)
8045         /* For other magic varargs only do decay_conversion.  */
8046         a = decay_conversion (a, complain);
8047       else if (DECL_CONSTRUCTOR_P (fn)
8048                && same_type_ignoring_top_level_qualifiers_p (DECL_CONTEXT (fn),
8049                                                              TREE_TYPE (a)))
8050         {
8051           /* Avoid infinite recursion trying to call A(...).  */
8052           if (complain & tf_error)
8053             /* Try to call the actual copy constructor for a good error.  */
8054             call_copy_ctor (a, complain);
8055           return error_mark_node;
8056         }
8057       else
8058         a = convert_arg_to_ellipsis (a, complain);
8059       if (a == error_mark_node)
8060         return error_mark_node;
8061       argarray[j++] = a;
8062     }
8063
8064   gcc_assert (j <= nargs);
8065   nargs = j;
8066
8067   /* Avoid to do argument-transformation, if warnings for format, and for
8068      nonnull are disabled.  Just in case that at least one of them is active
8069      the check_function_arguments function might warn about something.  */
8070
8071   bool warned_p = false;
8072   if (warn_nonnull
8073       || warn_format
8074       || warn_suggest_attribute_format
8075       || warn_restrict)
8076     {
8077       tree *fargs = (!nargs ? argarray
8078                             : (tree *) alloca (nargs * sizeof (tree)));
8079       for (j = 0; j < nargs; j++)
8080         {
8081           /* For -Wformat undo the implicit passing by hidden reference
8082              done by convert_arg_to_ellipsis.  */
8083           if (TREE_CODE (argarray[j]) == ADDR_EXPR
8084               && TREE_CODE (TREE_TYPE (argarray[j])) == REFERENCE_TYPE)
8085             fargs[j] = TREE_OPERAND (argarray[j], 0);
8086           else
8087             fargs[j] = maybe_constant_value (argarray[j]);
8088         }
8089
8090       warned_p = check_function_arguments (input_location, fn, TREE_TYPE (fn),
8091                                            nargs, fargs, NULL);
8092     }
8093
8094   if (DECL_INHERITED_CTOR (fn))
8095     {
8096       /* Check for passing ellipsis arguments to an inherited constructor.  We
8097          could handle this by open-coding the inherited constructor rather than
8098          defining it, but let's not bother now.  */
8099       if (!cp_unevaluated_operand
8100           && cand->num_convs
8101           && cand->convs[cand->num_convs-1]->ellipsis_p)
8102         {
8103           if (complain & tf_error)
8104             {
8105               sorry ("passing arguments to ellipsis of inherited constructor "
8106                      "%qD", cand->fn);
8107               inform (DECL_SOURCE_LOCATION (cand->fn), "declared here");
8108             }
8109           return error_mark_node;
8110         }
8111
8112       /* A base constructor inheriting from a virtual base doesn't get the
8113          inherited arguments, just this and __vtt.  */
8114       if (ctor_omit_inherited_parms (fn))
8115         nargs = 2;
8116     }
8117
8118   /* Avoid actually calling copy constructors and copy assignment operators,
8119      if possible.  */
8120
8121   if (! flag_elide_constructors && !force_elide)
8122     /* Do things the hard way.  */;
8123   else if (cand->num_convs == 1 
8124            && (DECL_COPY_CONSTRUCTOR_P (fn) 
8125                || DECL_MOVE_CONSTRUCTOR_P (fn))
8126            /* It's unsafe to elide the constructor when handling
8127               a noexcept-expression, it may evaluate to the wrong
8128               value (c++/53025).  */
8129            && (force_elide || cp_noexcept_operand == 0))
8130     {
8131       tree targ;
8132       tree arg = argarray[num_artificial_parms_for (fn)];
8133       tree fa;
8134       bool trivial = trivial_fn_p (fn);
8135
8136       /* Pull out the real argument, disregarding const-correctness.  */
8137       targ = arg;
8138       /* Strip the reference binding for the constructor parameter.  */
8139       if (CONVERT_EXPR_P (targ)
8140           && TREE_CODE (TREE_TYPE (targ)) == REFERENCE_TYPE)
8141         targ = TREE_OPERAND (targ, 0);
8142       /* But don't strip any other reference bindings; binding a temporary to a
8143          reference prevents copy elision.  */
8144       while ((CONVERT_EXPR_P (targ)
8145               && TREE_CODE (TREE_TYPE (targ)) != REFERENCE_TYPE)
8146              || TREE_CODE (targ) == NON_LVALUE_EXPR)
8147         targ = TREE_OPERAND (targ, 0);
8148       if (TREE_CODE (targ) == ADDR_EXPR)
8149         {
8150           targ = TREE_OPERAND (targ, 0);
8151           if (!same_type_ignoring_top_level_qualifiers_p
8152               (TREE_TYPE (TREE_TYPE (arg)), TREE_TYPE (targ)))
8153             targ = NULL_TREE;
8154         }
8155       else
8156         targ = NULL_TREE;
8157
8158       if (targ)
8159         arg = targ;
8160       else
8161         arg = cp_build_fold_indirect_ref (arg);
8162
8163       /* In C++17 we shouldn't be copying a TARGET_EXPR except into a base
8164          subobject.  */
8165       if (CHECKING_P && cxx_dialect >= cxx17)
8166         gcc_assert (TREE_CODE (arg) != TARGET_EXPR
8167                     || force_elide
8168                     /* It's from binding the ref parm to a packed field. */
8169                     || convs[0]->need_temporary_p
8170                     || seen_error ()
8171                     /* See unsafe_copy_elision_p.  */
8172                     || DECL_BASE_CONSTRUCTOR_P (fn));
8173
8174       /* [class.copy]: the copy constructor is implicitly defined even if
8175          the implementation elided its use.  */
8176       if (!trivial && !force_elide)
8177         {
8178           if (!mark_used (fn, complain) && !(complain & tf_error))
8179             return error_mark_node;
8180           already_used = true;
8181         }
8182
8183       /* If we're creating a temp and we already have one, don't create a
8184          new one.  If we're not creating a temp but we get one, use
8185          INIT_EXPR to collapse the temp into our target.  Otherwise, if the
8186          ctor is trivial, do a bitwise copy with a simple TARGET_EXPR for a
8187          temp or an INIT_EXPR otherwise.  */
8188       fa = argarray[0];
8189       if (is_dummy_object (fa))
8190         {
8191           if (TREE_CODE (arg) == TARGET_EXPR)
8192             return arg;
8193           else if (trivial)
8194             return force_target_expr (DECL_CONTEXT (fn), arg, complain);
8195         }
8196       else if ((trivial || TREE_CODE (arg) == TARGET_EXPR)
8197                && !unsafe_copy_elision_p (fa, arg))
8198         {
8199           tree to = cp_stabilize_reference (cp_build_fold_indirect_ref (fa));
8200
8201           val = build2 (INIT_EXPR, DECL_CONTEXT (fn), to, arg);
8202           return val;
8203         }
8204     }
8205   else if (DECL_ASSIGNMENT_OPERATOR_P (fn)
8206            && DECL_OVERLOADED_OPERATOR_IS (fn, NOP_EXPR)
8207            && trivial_fn_p (fn))
8208     {
8209       tree to = cp_stabilize_reference
8210         (cp_build_fold_indirect_ref (argarray[0]));
8211       tree type = TREE_TYPE (to);
8212       tree as_base = CLASSTYPE_AS_BASE (type);
8213       tree arg = argarray[1];
8214
8215       if (is_really_empty_class (type))
8216         {
8217           /* Avoid copying empty classes.  */
8218           val = build2 (COMPOUND_EXPR, type, arg, to);
8219           TREE_NO_WARNING (val) = 1;
8220         }
8221       else if (tree_int_cst_equal (TYPE_SIZE (type), TYPE_SIZE (as_base)))
8222         {
8223           arg = cp_build_fold_indirect_ref (arg);
8224           val = build2 (MODIFY_EXPR, TREE_TYPE (to), to, arg);
8225         }
8226       else
8227         {
8228           /* We must only copy the non-tail padding parts.  */
8229           tree arg0, arg2, t;
8230           tree array_type, alias_set;
8231
8232           arg2 = TYPE_SIZE_UNIT (as_base);
8233           arg0 = cp_build_addr_expr (to, complain);
8234
8235           array_type = build_array_type (unsigned_char_type_node,
8236                                          build_index_type
8237                                            (size_binop (MINUS_EXPR,
8238                                                         arg2, size_int (1))));
8239           alias_set = build_int_cst (build_pointer_type (type), 0);
8240           t = build2 (MODIFY_EXPR, void_type_node,
8241                       build2 (MEM_REF, array_type, arg0, alias_set),
8242                       build2 (MEM_REF, array_type, arg, alias_set));
8243           val = build2 (COMPOUND_EXPR, TREE_TYPE (to), t, to);
8244           TREE_NO_WARNING (val) = 1;
8245         }
8246
8247       return val;
8248     }
8249   else if (trivial_fn_p (fn))
8250     {
8251       if (DECL_DESTRUCTOR_P (fn))
8252         return fold_convert (void_type_node, argarray[0]);
8253       else if (default_ctor_p (fn))
8254         {
8255           if (is_dummy_object (argarray[0]))
8256             return force_target_expr (DECL_CONTEXT (fn), void_node,
8257                                       no_cleanup_complain);
8258           else
8259             return cp_build_fold_indirect_ref (argarray[0]);
8260         }
8261     }
8262
8263   gcc_assert (!force_elide);
8264
8265   if (!already_used
8266       && !mark_used (fn, complain))
8267     return error_mark_node;
8268
8269   /* Warn if the built-in writes to an object of a non-trivial type.  */
8270   if (warn_class_memaccess
8271       && vec_safe_length (args) >= 2
8272       && DECL_BUILT_IN_CLASS (fn) == BUILT_IN_NORMAL)
8273     maybe_warn_class_memaccess (input_location, fn, args);
8274
8275   if (DECL_VINDEX (fn) && (flags & LOOKUP_NONVIRTUAL) == 0
8276       /* Don't mess with virtual lookup in instantiate_non_dependent_expr;
8277          virtual functions can't be constexpr.  */
8278       && !in_template_function ())
8279     {
8280       tree t;
8281       tree binfo = lookup_base (TREE_TYPE (TREE_TYPE (argarray[0])),
8282                                 DECL_CONTEXT (fn),
8283                                 ba_any, NULL, complain);
8284       gcc_assert (binfo && binfo != error_mark_node);
8285
8286       argarray[0] = build_base_path (PLUS_EXPR, argarray[0], binfo, 1,
8287                                      complain);
8288       if (TREE_SIDE_EFFECTS (argarray[0]))
8289         argarray[0] = save_expr (argarray[0]);
8290       t = build_pointer_type (TREE_TYPE (fn));
8291       fn = build_vfn_ref (argarray[0], DECL_VINDEX (fn));
8292       TREE_TYPE (fn) = t;
8293     }
8294   else
8295     {
8296       fn = build_addr_func (fn, complain);
8297       if (fn == error_mark_node)
8298         return error_mark_node;
8299     }
8300
8301   tree call = build_cxx_call (fn, nargs, argarray, complain|decltype_flag);
8302   if (call == error_mark_node)
8303     return call;
8304   if (cand->flags & LOOKUP_LIST_INIT_CTOR)
8305     {
8306       tree c = extract_call_expr (call);
8307       /* build_new_op_1 will clear this when appropriate.  */
8308       CALL_EXPR_ORDERED_ARGS (c) = true;
8309     }
8310   if (warned_p)
8311     {
8312       tree c = extract_call_expr (call);
8313       if (TREE_CODE (c) == CALL_EXPR)
8314         TREE_NO_WARNING (c) = 1;
8315     }
8316   return call;
8317 }
8318
8319 namespace
8320 {
8321
8322 /* Return the DECL of the first non-static subobject of class TYPE
8323    that satisfies the predicate PRED or null if none can be found.  */
8324
8325 template <class Predicate>
8326 tree
8327 first_non_static_field (tree type, Predicate pred)
8328 {
8329   if (!type || !CLASS_TYPE_P (type))
8330     return NULL_TREE;
8331
8332   for (tree field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
8333     {
8334       if (TREE_CODE (field) != FIELD_DECL)
8335         continue;
8336       if (TREE_STATIC (field))
8337         continue;
8338       if (pred (field))
8339         return field;
8340     }
8341
8342   int i = 0;
8343
8344   for (tree base_binfo, binfo = TYPE_BINFO (type);
8345        BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
8346     {
8347       tree base = TREE_TYPE (base_binfo);
8348       if (pred (base))
8349         return base;
8350       if (tree field = first_non_static_field (base, pred))
8351         return field;
8352     }
8353
8354   return NULL_TREE;
8355 }
8356
8357 struct NonPublicField
8358 {
8359   bool operator() (const_tree t)
8360   {
8361     return DECL_P (t) && (TREE_PRIVATE (t) || TREE_PROTECTED (t));
8362   }
8363 };
8364
8365 /* Return the DECL of the first non-public subobject of class TYPE
8366    or null if none can be found.  */
8367
8368 static inline tree
8369 first_non_public_field (tree type)
8370 {
8371   return first_non_static_field (type, NonPublicField ());
8372 }
8373
8374 struct NonTrivialField
8375 {
8376   bool operator() (const_tree t)
8377   {
8378     return !trivial_type_p (DECL_P (t) ? TREE_TYPE (t) : t);
8379   }
8380 };
8381
8382 /* Return the DECL of the first non-trivial subobject of class TYPE
8383    or null if none can be found.  */
8384
8385 static inline tree
8386 first_non_trivial_field (tree type)
8387 {
8388   return first_non_static_field (type, NonTrivialField ());
8389 }
8390
8391 }   /* unnamed namespace */
8392
8393 /* Return true if all copy and move assignment operator overloads for
8394    class TYPE are trivial and at least one of them is not deleted and,
8395    when ACCESS is set, accessible.  Return false otherwise.  Set
8396    HASASSIGN to true when the TYPE has a (not necessarily trivial)
8397    copy or move assignment.  */
8398
8399 static bool
8400 has_trivial_copy_assign_p (tree type, bool access, bool *hasassign)
8401 {
8402   tree fns = get_class_binding (type, assign_op_identifier);
8403   bool all_trivial = true;
8404
8405   /* Iterate over overloads of the assignment operator, checking
8406      accessible copy assignments for triviality.  */
8407
8408   for (ovl_iterator oi (fns); oi; ++oi)
8409     {
8410       tree f = *oi;
8411
8412       /* Skip operators that aren't copy assignments.  */
8413       if (!copy_fn_p (f))
8414         continue;
8415
8416       bool accessible = (!access || !(TREE_PRIVATE (f) || TREE_PROTECTED (f))
8417                          || accessible_p (TYPE_BINFO (type), f, true));
8418
8419       /* Skip template assignment operators and deleted functions.  */
8420       if (TREE_CODE (f) != FUNCTION_DECL || DECL_DELETED_FN (f))
8421         continue;
8422
8423       if (accessible)
8424         *hasassign = true;
8425
8426       if (!accessible || !trivial_fn_p (f))
8427         all_trivial = false;
8428
8429       /* Break early when both properties have been determined.  */
8430       if (*hasassign && !all_trivial)
8431         break;
8432     }
8433
8434   /* Return true if they're all trivial and one of the expressions
8435      TYPE() = TYPE() or TYPE() = (TYPE&)() is valid.  */
8436   tree ref = cp_build_reference_type (type, false);
8437   return (all_trivial
8438           && (is_trivially_xible (MODIFY_EXPR, type, type)
8439               || is_trivially_xible (MODIFY_EXPR, type, ref)));
8440 }
8441
8442 /* Return true if all copy and move ctor overloads for class TYPE are
8443    trivial and at least one of them is not deleted and, when ACCESS is
8444    set, accessible.  Return false otherwise.  Set each element of HASCTOR[]
8445    to true when the TYPE has a (not necessarily trivial) default and copy
8446    (or move) ctor, respectively.  */
8447
8448 static bool
8449 has_trivial_copy_p (tree type, bool access, bool hasctor[2])
8450 {
8451   tree fns = get_class_binding (type, complete_ctor_identifier);
8452   bool all_trivial = true;
8453
8454   for (ovl_iterator oi (fns); oi; ++oi)
8455     {
8456       tree f = *oi;
8457
8458       /* Skip template constructors.  */
8459       if (TREE_CODE (f) != FUNCTION_DECL)
8460         continue;
8461
8462       bool cpy_or_move_ctor_p = copy_fn_p (f);
8463
8464       /* Skip ctors other than default, copy, and move.  */
8465       if (!cpy_or_move_ctor_p && !default_ctor_p (f))
8466         continue;
8467
8468       if (DECL_DELETED_FN (f))
8469         continue;
8470
8471       bool accessible = (!access || !(TREE_PRIVATE (f) || TREE_PROTECTED (f))
8472                          || accessible_p (TYPE_BINFO (type), f, true));
8473
8474       if (accessible)
8475         hasctor[cpy_or_move_ctor_p] = true;
8476
8477       if (cpy_or_move_ctor_p && (!accessible || !trivial_fn_p (f)))
8478         all_trivial = false;
8479
8480       /* Break early when both properties have been determined.  */
8481       if (hasctor[0] && hasctor[1] && !all_trivial)
8482         break;
8483     }
8484
8485   return all_trivial;
8486 }
8487
8488 /* Issue a warning on a call to the built-in function FNDECL if it is
8489    a raw memory write whose destination is not an object of (something
8490    like) trivial or standard layout type with a non-deleted assignment
8491    and copy ctor.  Detects const correctness violations, corrupting
8492    references, virtual table pointers, and bypassing non-trivial
8493    assignments.  */
8494
8495 static void
8496 maybe_warn_class_memaccess (location_t loc, tree fndecl,
8497                             const vec<tree, va_gc> *args)
8498 {
8499   /* Except for bcopy where it's second, the destination pointer is
8500      the first argument for all functions handled here.  Compute
8501      the index of the destination and source arguments.  */
8502   unsigned dstidx = DECL_FUNCTION_CODE (fndecl) == BUILT_IN_BCOPY;
8503   unsigned srcidx = !dstidx;
8504
8505   tree dest = (*args)[dstidx];
8506   if (!TREE_TYPE (dest) || !POINTER_TYPE_P (TREE_TYPE (dest)))
8507     return;
8508
8509   tree srctype = NULL_TREE;
8510
8511   /* Determine the type of the pointed-to object and whether it's
8512      a complete class type.  */
8513   tree desttype = TREE_TYPE (TREE_TYPE (dest));
8514
8515   if (!desttype || !COMPLETE_TYPE_P (desttype) || !CLASS_TYPE_P (desttype))
8516     return;
8517
8518   /* Check to see if the raw memory call is made by a non-static member
8519      function with THIS as the destination argument for the destination
8520      type.  If so, and if the class has no non-trivial bases or members,
8521      be more permissive.  */
8522   if (current_function_decl
8523       && DECL_NONSTATIC_MEMBER_FUNCTION_P (current_function_decl)
8524       && is_this_parameter (tree_strip_nop_conversions (dest)))
8525     {
8526       tree ctx = DECL_CONTEXT (current_function_decl);
8527       bool special = same_type_ignoring_top_level_qualifiers_p (ctx, desttype);
8528       tree binfo = TYPE_BINFO (ctx);
8529
8530       /* FIXME: The following if statement is overly permissive (see
8531          bug 84851).  Remove it in GCC 9.  */
8532       if (special
8533           && !BINFO_VTABLE (binfo)
8534           && !BINFO_N_BASE_BINFOS (binfo)
8535           && (DECL_CONSTRUCTOR_P (current_function_decl)
8536               || DECL_DESTRUCTOR_P (current_function_decl)))
8537         return;
8538
8539       if (special
8540           && !BINFO_VTABLE (binfo)
8541           && !first_non_trivial_field (desttype))
8542         return;
8543     }
8544
8545   /* True if the class is trivial.  */
8546   bool trivial = trivial_type_p (desttype);
8547
8548   /* Set to true if DESTYPE has an accessible copy assignment.  */
8549   bool hasassign = false;
8550   /* True if all of the class' overloaded copy assignment operators
8551      are all trivial (and not deleted) and at least one of them is
8552      accessible.  */
8553   bool trivassign = has_trivial_copy_assign_p (desttype, true, &hasassign);
8554
8555   /* Set to true if DESTTYPE has an accessible default and copy ctor,
8556      respectively.  */
8557   bool hasctors[2] = { false, false };
8558
8559   /* True if all of the class' overloaded copy constructors are all
8560      trivial (and not deleted) and at least one of them is accessible.  */
8561   bool trivcopy = has_trivial_copy_p (desttype, true, hasctors);
8562
8563   /* Set FLD to the first private/protected member of the class.  */
8564   tree fld = trivial ? first_non_public_field (desttype) : NULL_TREE;
8565
8566   /* The warning format string.  */
8567   const char *warnfmt = NULL;
8568   /* A suggested alternative to offer instead of the raw memory call.
8569      Empty string when none can be come up with.  */
8570   const char *suggest = "";
8571   bool warned = false;
8572
8573   switch (DECL_FUNCTION_CODE (fndecl))
8574     {
8575     case BUILT_IN_MEMSET:
8576       if (!integer_zerop (maybe_constant_value ((*args)[1])))
8577         {
8578           /* Diagnose setting non-copy-assignable or non-trivial types,
8579              or types with a private member, to (potentially) non-zero
8580              bytes.  Since the value of the bytes being written is unknown,
8581              suggest using assignment instead (if one exists).  Also warn
8582              for writes into objects for which zero-initialization doesn't
8583              mean all bits clear (pointer-to-member data, where null is all
8584              bits set).  Since the value being written is (most likely)
8585              non-zero, simply suggest assignment (but not copy assignment).  */
8586           suggest = "; use assignment instead";
8587           if (!trivassign)
8588             warnfmt = G_("%qD writing to an object of type %#qT with "
8589                          "no trivial copy-assignment");
8590           else if (!trivial)
8591             warnfmt = G_("%qD writing to an object of non-trivial type %#qT%s");
8592           else if (fld)
8593             {
8594               const char *access = TREE_PRIVATE (fld) ? "private" : "protected";
8595               warned = warning_at (loc, OPT_Wclass_memaccess,
8596                                    "%qD writing to an object of type %#qT with "
8597                                    "%qs member %qD",
8598                                    fndecl, desttype, access, fld);
8599             }
8600           else if (!zero_init_p (desttype))
8601             warnfmt = G_("%qD writing to an object of type %#qT containing "
8602                          "a pointer to data member%s");
8603
8604           break;
8605         }
8606       /* Fall through.  */
8607
8608     case BUILT_IN_BZERO:
8609       /* Similarly to the above, diagnose clearing non-trivial or non-
8610          standard layout objects, or objects of types with no assignmenmt.
8611          Since the value being written is known to be zero, suggest either
8612          copy assignment, copy ctor, or default ctor as an alternative,
8613          depending on what's available.  */
8614
8615       if (hasassign && hasctors[0])
8616         suggest = G_("; use assignment or value-initialization instead");
8617       else if (hasassign)
8618         suggest = G_("; use assignment instead");
8619       else if (hasctors[0])
8620         suggest = G_("; use value-initialization instead");
8621
8622       if (!trivassign)
8623         warnfmt = G_("%qD clearing an object of type %#qT with "
8624                      "no trivial copy-assignment%s");
8625       else if (!trivial)
8626         warnfmt =  G_("%qD clearing an object of non-trivial type %#qT%s");
8627       else if (!zero_init_p (desttype))
8628         warnfmt = G_("%qD clearing an object of type %#qT containing "
8629                      "a pointer-to-member%s");
8630       break;
8631
8632     case BUILT_IN_BCOPY:
8633     case BUILT_IN_MEMCPY:
8634     case BUILT_IN_MEMMOVE:
8635     case BUILT_IN_MEMPCPY:
8636       /* Determine the type of the source object.  */
8637       srctype = TREE_TYPE ((*args)[srcidx]);
8638       if (!srctype || !POINTER_TYPE_P (srctype))
8639         srctype = void_type_node;
8640       else
8641         srctype = TREE_TYPE (srctype);
8642
8643       /* Since it's impossible to determine wheter the byte copy is
8644          being used in place of assignment to an existing object or
8645          as a substitute for initialization, assume it's the former.
8646          Determine the best alternative to use instead depending on
8647          what's not deleted.  */
8648       if (hasassign && hasctors[1])
8649         suggest = G_("; use copy-assignment or copy-initialization instead");
8650       else if (hasassign)
8651         suggest = G_("; use copy-assignment instead");
8652       else if (hasctors[1])
8653         suggest = G_("; use copy-initialization instead");
8654
8655       if (!trivassign)
8656         warnfmt = G_("%qD writing to an object of type %#qT with no trivial "
8657                      "copy-assignment%s");
8658       else if (!trivially_copyable_p (desttype))
8659         warnfmt = G_("%qD writing to an object of non-trivially copyable "
8660                      "type %#qT%s");
8661       else if (!trivcopy)
8662         warnfmt = G_("%qD writing to an object with a deleted copy constructor");
8663
8664       else if (!trivial
8665                && !VOID_TYPE_P (srctype)
8666                && !char_type_p (TYPE_MAIN_VARIANT (srctype))
8667                && !same_type_ignoring_top_level_qualifiers_p (desttype,
8668                                                               srctype))
8669         {
8670           /* Warn when copying into a non-trivial object from an object
8671              of a different type other than void or char.  */
8672           warned = warning_at (loc, OPT_Wclass_memaccess,
8673                                "%qD copying an object of non-trivial type "
8674                                "%#qT from an array of %#qT",
8675                                fndecl, desttype, srctype);
8676         }
8677       else if (fld
8678                && !VOID_TYPE_P (srctype)
8679                && !char_type_p (TYPE_MAIN_VARIANT (srctype))
8680                && !same_type_ignoring_top_level_qualifiers_p (desttype,
8681                                                               srctype))
8682         {
8683           const char *access = TREE_PRIVATE (fld) ? "private" : "protected";
8684           warned = warning_at (loc, OPT_Wclass_memaccess,
8685                                "%qD copying an object of type %#qT with "
8686                                "%qs member %qD from an array of %#qT; use "
8687                                "assignment or copy-initialization instead",
8688                                fndecl, desttype, access, fld, srctype);
8689         }
8690       else if (!trivial && vec_safe_length (args) > 2)
8691         {
8692           tree sz = maybe_constant_value ((*args)[2]);
8693           if (!tree_fits_uhwi_p (sz))
8694             break;
8695
8696           /* Finally, warn on partial copies.  */
8697           unsigned HOST_WIDE_INT typesize
8698             = tree_to_uhwi (TYPE_SIZE_UNIT (desttype));
8699           if (unsigned HOST_WIDE_INT partial = tree_to_uhwi (sz) % typesize)
8700             warned = warning_at (loc, OPT_Wclass_memaccess,
8701                                  (typesize - partial > 1
8702                                   ? G_("%qD writing to an object of "
8703                                        "a non-trivial type %#qT leaves %wu "
8704                                        "bytes unchanged")
8705                                   : G_("%qD writing to an object of "
8706                                        "a non-trivial type %#qT leaves %wu "
8707                                        "byte unchanged")),
8708                                  fndecl, desttype, typesize - partial);
8709         }
8710       break;
8711
8712     case BUILT_IN_REALLOC:
8713
8714       if (!trivially_copyable_p (desttype))
8715         warnfmt = G_("%qD moving an object of non-trivially copyable type "
8716                      "%#qT; use %<new%> and %<delete%> instead");
8717       else if (!trivcopy)
8718         warnfmt = G_("%qD moving an object of type %#qT with deleted copy "
8719                      "constructor; use %<new%> and %<delete%> instead");
8720       else if (!get_dtor (desttype, tf_none))
8721         warnfmt = G_("%qD moving an object of type %#qT with deleted "
8722                      "destructor");
8723       else if (!trivial)
8724         {
8725           tree sz = maybe_constant_value ((*args)[1]);
8726           if (TREE_CODE (sz) == INTEGER_CST
8727               && tree_int_cst_lt (sz, TYPE_SIZE_UNIT (desttype)))
8728             /* Finally, warn on reallocation into insufficient space.  */
8729             warned = warning_at (loc, OPT_Wclass_memaccess,
8730                                  "%qD moving an object of non-trivial type "
8731                                  "%#qT and size %E into a region of size %E",
8732                                  fndecl, desttype, TYPE_SIZE_UNIT (desttype),
8733                                  sz);
8734         }
8735       break;
8736
8737     default:
8738       return;
8739     }
8740
8741   if (warnfmt)
8742     {
8743       if (suggest)
8744         warned = warning_at (loc, OPT_Wclass_memaccess,
8745                              warnfmt, fndecl, desttype, suggest);
8746       else
8747         warned = warning_at (loc, OPT_Wclass_memaccess,
8748                              warnfmt, fndecl, desttype);
8749     }
8750
8751   if (warned)
8752     inform (location_of (desttype), "%#qT declared here", desttype);
8753 }
8754
8755 /* Build and return a call to FN, using NARGS arguments in ARGARRAY.
8756    This function performs no overload resolution, conversion, or other
8757    high-level operations.  */
8758
8759 tree
8760 build_cxx_call (tree fn, int nargs, tree *argarray,
8761                 tsubst_flags_t complain)
8762 {
8763   tree fndecl;
8764
8765   /* Remember roughly where this call is.  */
8766   location_t loc = EXPR_LOC_OR_LOC (fn, input_location);
8767   fn = build_call_a (fn, nargs, argarray);
8768   SET_EXPR_LOCATION (fn, loc);
8769
8770   fndecl = get_callee_fndecl (fn);
8771
8772   /* Check that arguments to builtin functions match the expectations.  */
8773   if (fndecl
8774       && DECL_BUILT_IN (fndecl)
8775       && DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_NORMAL)
8776     {
8777       int i;
8778
8779       /* We need to take care that values to BUILT_IN_NORMAL
8780          are reduced.  */
8781       for (i = 0; i < nargs; i++)
8782         argarray[i] = fold_non_dependent_expr (argarray[i]);
8783
8784       if (!check_builtin_function_arguments (EXPR_LOCATION (fn), vNULL, fndecl,
8785                                              nargs, argarray))
8786         return error_mark_node;
8787     }
8788
8789   if (VOID_TYPE_P (TREE_TYPE (fn)))
8790     return fn;
8791
8792   /* 5.2.2/11: If a function call is a prvalue of object type: if the
8793      function call is either the operand of a decltype-specifier or the
8794      right operand of a comma operator that is the operand of a
8795      decltype-specifier, a temporary object is not introduced for the
8796      prvalue. The type of the prvalue may be incomplete.  */
8797   if (!(complain & tf_decltype))
8798     {
8799       fn = require_complete_type_sfinae (fn, complain);
8800       if (fn == error_mark_node)
8801         return error_mark_node;
8802
8803       if (MAYBE_CLASS_TYPE_P (TREE_TYPE (fn)))
8804         {
8805           fn = build_cplus_new (TREE_TYPE (fn), fn, complain);
8806           maybe_warn_parm_abi (TREE_TYPE (fn), loc);
8807         }
8808     }
8809   return convert_from_reference (fn);
8810 }
8811
8812 /* Returns the value to use for the in-charge parameter when making a
8813    call to a function with the indicated NAME.
8814
8815    FIXME:Can't we find a neater way to do this mapping?  */
8816
8817 tree
8818 in_charge_arg_for_name (tree name)
8819 {
8820   if (IDENTIFIER_CTOR_P (name))
8821     {
8822       if (name == complete_ctor_identifier)
8823         return integer_one_node;
8824       gcc_checking_assert (name == base_ctor_identifier);
8825     }
8826   else
8827     {
8828       if (name == complete_dtor_identifier)
8829         return integer_two_node;
8830       else if (name == deleting_dtor_identifier)
8831         return integer_three_node;
8832       gcc_checking_assert (name == base_dtor_identifier);
8833     }
8834
8835   return integer_zero_node;
8836 }
8837
8838 /* We've built up a constructor call RET.  Complain if it delegates to the
8839    constructor we're currently compiling.  */
8840
8841 static void
8842 check_self_delegation (tree ret)
8843 {
8844   if (TREE_CODE (ret) == TARGET_EXPR)
8845     ret = TARGET_EXPR_INITIAL (ret);
8846   tree fn = cp_get_callee_fndecl_nofold (ret);
8847   if (fn && DECL_ABSTRACT_ORIGIN (fn) == current_function_decl)
8848     error ("constructor delegates to itself");
8849 }
8850
8851 /* Build a call to a constructor, destructor, or an assignment
8852    operator for INSTANCE, an expression with class type.  NAME
8853    indicates the special member function to call; *ARGS are the
8854    arguments.  ARGS may be NULL.  This may change ARGS.  BINFO
8855    indicates the base of INSTANCE that is to be passed as the `this'
8856    parameter to the member function called.
8857
8858    FLAGS are the LOOKUP_* flags to use when processing the call.
8859
8860    If NAME indicates a complete object constructor, INSTANCE may be
8861    NULL_TREE.  In this case, the caller will call build_cplus_new to
8862    store the newly constructed object into a VAR_DECL.  */
8863
8864 tree
8865 build_special_member_call (tree instance, tree name, vec<tree, va_gc> **args,
8866                            tree binfo, int flags, tsubst_flags_t complain)
8867 {
8868   tree fns;
8869   /* The type of the subobject to be constructed or destroyed.  */
8870   tree class_type;
8871   vec<tree, va_gc> *allocated = NULL;
8872   tree ret;
8873
8874   gcc_assert (IDENTIFIER_CDTOR_P (name) || name == assign_op_identifier);
8875   if (TYPE_P (binfo))
8876     {
8877       /* Resolve the name.  */
8878       if (!complete_type_or_maybe_complain (binfo, NULL_TREE, complain))
8879         return error_mark_node;
8880
8881       binfo = TYPE_BINFO (binfo);
8882     }
8883
8884   gcc_assert (binfo != NULL_TREE);
8885
8886   class_type = BINFO_TYPE (binfo);
8887
8888   /* Handle the special case where INSTANCE is NULL_TREE.  */
8889   if (name == complete_ctor_identifier && !instance)
8890     instance = build_dummy_object (class_type);
8891   else
8892     {
8893       if (IDENTIFIER_DTOR_P (name))
8894         gcc_assert (args == NULL || vec_safe_is_empty (*args));
8895
8896       /* Convert to the base class, if necessary.  */
8897       if (!same_type_ignoring_top_level_qualifiers_p
8898           (TREE_TYPE (instance), BINFO_TYPE (binfo)))
8899         {
8900           if (IDENTIFIER_CDTOR_P (name))
8901             /* For constructors and destructors, either the base is
8902                non-virtual, or it is virtual but we are doing the
8903                conversion from a constructor or destructor for the
8904                complete object.  In either case, we can convert
8905                statically.  */
8906             instance = convert_to_base_statically (instance, binfo);
8907           else
8908             {
8909               /* However, for assignment operators, we must convert
8910                  dynamically if the base is virtual.  */
8911               gcc_checking_assert (name == assign_op_identifier);
8912               instance = build_base_path (PLUS_EXPR, instance,
8913                                           binfo, /*nonnull=*/1, complain);
8914             }
8915         }
8916     }
8917
8918   gcc_assert (instance != NULL_TREE);
8919
8920   /* In C++17, "If the initializer expression is a prvalue and the
8921      cv-unqualified version of the source type is the same class as the class
8922      of the destination, the initializer expression is used to initialize the
8923      destination object."  Handle that here to avoid doing overload
8924      resolution.  */
8925   if (cxx_dialect >= cxx17
8926       && args && vec_safe_length (*args) == 1
8927       && name == complete_ctor_identifier)
8928     {
8929       tree arg = (**args)[0];
8930
8931       if (BRACE_ENCLOSED_INITIALIZER_P (arg)
8932           && !TYPE_HAS_LIST_CTOR (class_type)
8933           && CONSTRUCTOR_NELTS (arg) == 1)
8934         arg = CONSTRUCTOR_ELT (arg, 0)->value;
8935
8936       if ((TREE_CODE (arg) == TARGET_EXPR
8937            || TREE_CODE (arg) == CONSTRUCTOR)
8938           && (same_type_ignoring_top_level_qualifiers_p
8939               (class_type, TREE_TYPE (arg))))
8940         {
8941           if (is_dummy_object (instance))
8942             return arg;
8943           else if (TREE_CODE (arg) == TARGET_EXPR)
8944             TARGET_EXPR_DIRECT_INIT_P (arg) = true;
8945
8946           if ((complain & tf_error)
8947               && (flags & LOOKUP_DELEGATING_CONS))
8948             check_self_delegation (arg);
8949           /* Avoid change of behavior on Wunused-var-2.C.  */
8950           instance = mark_lvalue_use (instance);
8951           return build2 (INIT_EXPR, class_type, instance, arg);
8952         }
8953     }
8954
8955   fns = lookup_fnfields (binfo, name, 1);
8956
8957   /* When making a call to a constructor or destructor for a subobject
8958      that uses virtual base classes, pass down a pointer to a VTT for
8959      the subobject.  */
8960   if ((name == base_ctor_identifier
8961        || name == base_dtor_identifier)
8962       && CLASSTYPE_VBASECLASSES (class_type))
8963     {
8964       tree vtt;
8965       tree sub_vtt;
8966
8967       /* If the current function is a complete object constructor
8968          or destructor, then we fetch the VTT directly.
8969          Otherwise, we look it up using the VTT we were given.  */
8970       vtt = DECL_CHAIN (CLASSTYPE_VTABLES (current_class_type));
8971       vtt = decay_conversion (vtt, complain);
8972       if (vtt == error_mark_node)
8973         return error_mark_node;
8974       vtt = build_if_in_charge (vtt, current_vtt_parm);
8975       if (BINFO_SUBVTT_INDEX (binfo))
8976         sub_vtt = fold_build_pointer_plus (vtt, BINFO_SUBVTT_INDEX (binfo));
8977       else
8978         sub_vtt = vtt;
8979
8980       if (args == NULL)
8981         {
8982           allocated = make_tree_vector ();
8983           args = &allocated;
8984         }
8985
8986       vec_safe_insert (*args, 0, sub_vtt);
8987     }
8988
8989   ret = build_new_method_call (instance, fns, args,
8990                                TYPE_BINFO (BINFO_TYPE (binfo)),
8991                                flags, /*fn=*/NULL,
8992                                complain);
8993
8994   if (allocated != NULL)
8995     release_tree_vector (allocated);
8996
8997   if ((complain & tf_error)
8998       && (flags & LOOKUP_DELEGATING_CONS)
8999       && name == complete_ctor_identifier)
9000     check_self_delegation (ret);
9001
9002   return ret;
9003 }
9004
9005 /* Return the NAME, as a C string.  The NAME indicates a function that
9006    is a member of TYPE.  *FREE_P is set to true if the caller must
9007    free the memory returned.
9008
9009    Rather than go through all of this, we should simply set the names
9010    of constructors and destructors appropriately, and dispense with
9011    ctor_identifier, dtor_identifier, etc.  */
9012
9013 static char *
9014 name_as_c_string (tree name, tree type, bool *free_p)
9015 {
9016   const char *pretty_name;
9017
9018   /* Assume that we will not allocate memory.  */
9019   *free_p = false;
9020   /* Constructors and destructors are special.  */
9021   if (IDENTIFIER_CDTOR_P (name))
9022     {
9023       pretty_name
9024         = identifier_to_locale (IDENTIFIER_POINTER (constructor_name (type)));
9025       /* For a destructor, add the '~'.  */
9026       if (IDENTIFIER_DTOR_P (name))
9027         {
9028           pretty_name = concat ("~", pretty_name, NULL);
9029           /* Remember that we need to free the memory allocated.  */
9030           *free_p = true;
9031         }
9032     }
9033   else if (IDENTIFIER_CONV_OP_P (name))
9034     {
9035       pretty_name = concat ("operator ",
9036                             type_as_string_translate (TREE_TYPE (name),
9037                                                       TFF_PLAIN_IDENTIFIER),
9038                             NULL);
9039       /* Remember that we need to free the memory allocated.  */
9040       *free_p = true;
9041     }
9042   else
9043     pretty_name = identifier_to_locale (IDENTIFIER_POINTER (name));
9044
9045   return CONST_CAST (char *, pretty_name);
9046 }
9047
9048 /* Build a call to "INSTANCE.FN (ARGS)".  If FN_P is non-NULL, it will
9049    be set, upon return, to the function called.  ARGS may be NULL.
9050    This may change ARGS.  */
9051
9052 static tree
9053 build_new_method_call_1 (tree instance, tree fns, vec<tree, va_gc> **args,
9054                          tree conversion_path, int flags,
9055                          tree *fn_p, tsubst_flags_t complain)
9056 {
9057   struct z_candidate *candidates = 0, *cand;
9058   tree explicit_targs = NULL_TREE;
9059   tree basetype = NULL_TREE;
9060   tree access_binfo, binfo;
9061   tree optype;
9062   tree first_mem_arg = NULL_TREE;
9063   tree name;
9064   bool skip_first_for_error;
9065   vec<tree, va_gc> *user_args;
9066   tree call;
9067   tree fn;
9068   int template_only = 0;
9069   bool any_viable_p;
9070   tree orig_instance;
9071   tree orig_fns;
9072   vec<tree, va_gc> *orig_args = NULL;
9073   void *p;
9074
9075   gcc_assert (instance != NULL_TREE);
9076
9077   /* We don't know what function we're going to call, yet.  */
9078   if (fn_p)
9079     *fn_p = NULL_TREE;
9080
9081   if (error_operand_p (instance)
9082       || !fns || error_operand_p (fns))
9083     return error_mark_node;
9084
9085   if (!BASELINK_P (fns))
9086     {
9087       if (complain & tf_error)
9088         error ("call to non-function %qD", fns);
9089       return error_mark_node;
9090     }
9091
9092   orig_instance = instance;
9093   orig_fns = fns;
9094
9095   /* Dismantle the baselink to collect all the information we need.  */
9096   if (!conversion_path)
9097     conversion_path = BASELINK_BINFO (fns);
9098   access_binfo = BASELINK_ACCESS_BINFO (fns);
9099   binfo = BASELINK_BINFO (fns);
9100   optype = BASELINK_OPTYPE (fns);
9101   fns = BASELINK_FUNCTIONS (fns);
9102   if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
9103     {
9104       explicit_targs = TREE_OPERAND (fns, 1);
9105       fns = TREE_OPERAND (fns, 0);
9106       template_only = 1;
9107     }
9108   gcc_assert (TREE_CODE (fns) == FUNCTION_DECL
9109               || TREE_CODE (fns) == TEMPLATE_DECL
9110               || TREE_CODE (fns) == OVERLOAD);
9111   fn = OVL_FIRST (fns);
9112   name = DECL_NAME (fn);
9113
9114   basetype = TYPE_MAIN_VARIANT (TREE_TYPE (instance));
9115   gcc_assert (CLASS_TYPE_P (basetype));
9116
9117   user_args = args == NULL ? NULL : *args;
9118   /* Under DR 147 A::A() is an invalid constructor call,
9119      not a functional cast.  */
9120   if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (fn))
9121     {
9122       if (! (complain & tf_error))
9123         return error_mark_node;
9124
9125       basetype = DECL_CONTEXT (fn);
9126       name = constructor_name (basetype);
9127       if (permerror (input_location,
9128                      "cannot call constructor %<%T::%D%> directly",
9129                      basetype, name))
9130         inform (input_location, "for a function-style cast, remove the "
9131                 "redundant %<::%D%>", name);
9132       call = build_functional_cast (basetype, build_tree_list_vec (user_args),
9133                                     complain);
9134       return call;
9135     }
9136
9137   if (processing_template_decl)
9138     {
9139       orig_args = args == NULL ? NULL : make_tree_vector_copy (*args);
9140       instance = build_non_dependent_expr (instance);
9141       if (args != NULL)
9142         make_args_non_dependent (*args);
9143     }
9144
9145   /* Process the argument list.  */
9146   if (args != NULL && *args != NULL)
9147     {
9148       *args = resolve_args (*args, complain);
9149       if (*args == NULL)
9150         return error_mark_node;
9151       user_args = *args;
9152     }
9153
9154   /* Consider the object argument to be used even if we end up selecting a
9155      static member function.  */
9156   instance = mark_type_use (instance);
9157
9158   /* Figure out whether to skip the first argument for the error
9159      message we will display to users if an error occurs.  We don't
9160      want to display any compiler-generated arguments.  The "this"
9161      pointer hasn't been added yet.  However, we must remove the VTT
9162      pointer if this is a call to a base-class constructor or
9163      destructor.  */
9164   skip_first_for_error = false;
9165   if (IDENTIFIER_CDTOR_P (name))
9166     {
9167       /* Callers should explicitly indicate whether they want to ctor
9168          the complete object or just the part without virtual bases.  */
9169       gcc_assert (name != ctor_identifier);
9170
9171       /* Remove the VTT pointer, if present.  */
9172       if ((name == base_ctor_identifier || name == base_dtor_identifier)
9173           && CLASSTYPE_VBASECLASSES (basetype))
9174         skip_first_for_error = true;
9175
9176       /* It's OK to call destructors and constructors on cv-qualified
9177          objects.  Therefore, convert the INSTANCE to the unqualified
9178          type, if necessary.  */
9179       if (!same_type_p (basetype, TREE_TYPE (instance)))
9180         {
9181           instance = build_this (instance);
9182           instance = build_nop (build_pointer_type (basetype), instance);
9183           instance = build_fold_indirect_ref (instance);
9184         }
9185     }
9186   else
9187     gcc_assert (!DECL_DESTRUCTOR_P (fn) && !DECL_CONSTRUCTOR_P (fn));
9188
9189   /* For the overload resolution we need to find the actual `this`
9190      that would be captured if the call turns out to be to a
9191      non-static member function.  Do not actually capture it at this
9192      point.  */
9193   if (DECL_CONSTRUCTOR_P (fn))
9194     /* Constructors don't use the enclosing 'this'.  */
9195     first_mem_arg = instance;
9196   else
9197     first_mem_arg = maybe_resolve_dummy (instance, false);
9198
9199   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
9200   p = conversion_obstack_alloc (0);
9201
9202   /* The number of arguments artificial parms in ARGS; we subtract one because
9203      there's no 'this' in ARGS.  */
9204   unsigned skip = num_artificial_parms_for (fn) - 1;
9205
9206   /* If CONSTRUCTOR_IS_DIRECT_INIT is set, this was a T{ } form
9207      initializer, not T({ }).  */
9208   if (DECL_CONSTRUCTOR_P (fn)
9209       && vec_safe_length (user_args) > skip
9210       && DIRECT_LIST_INIT_P ((*user_args)[skip]))
9211     {
9212       tree init_list = (*user_args)[skip];
9213       tree init = NULL_TREE;
9214
9215       gcc_assert (user_args->length () == skip + 1
9216                   && !(flags & LOOKUP_ONLYCONVERTING));
9217
9218       /* If the initializer list has no elements and T is a class type with
9219          a default constructor, the object is value-initialized.  Handle
9220          this here so we don't need to handle it wherever we use
9221          build_special_member_call.  */
9222       if (CONSTRUCTOR_NELTS (init_list) == 0
9223           && TYPE_HAS_DEFAULT_CONSTRUCTOR (basetype)
9224           /* For a user-provided default constructor, use the normal
9225              mechanisms so that protected access works.  */
9226           && type_has_non_user_provided_default_constructor (basetype)
9227           && !processing_template_decl)
9228         init = build_value_init (basetype, complain);
9229
9230       /* If BASETYPE is an aggregate, we need to do aggregate
9231          initialization.  */
9232       else if (CP_AGGREGATE_TYPE_P (basetype))
9233         {
9234           init = reshape_init (basetype, init_list, complain);
9235           init = digest_init (basetype, init, complain);
9236         }
9237
9238       if (init)
9239         {
9240           if (is_dummy_object (instance))
9241             return get_target_expr_sfinae (init, complain);
9242           init = build2 (INIT_EXPR, TREE_TYPE (instance), instance, init);
9243           TREE_SIDE_EFFECTS (init) = true;
9244           return init;
9245         }
9246
9247       /* Otherwise go ahead with overload resolution.  */
9248       add_list_candidates (fns, first_mem_arg, user_args,
9249                            basetype, explicit_targs, template_only,
9250                            conversion_path, access_binfo, flags,
9251                            &candidates, complain);
9252     }
9253   else
9254     add_candidates (fns, first_mem_arg, user_args, optype,
9255                     explicit_targs, template_only, conversion_path,
9256                     access_binfo, flags, &candidates, complain);
9257
9258   any_viable_p = false;
9259   candidates = splice_viable (candidates, false, &any_viable_p);
9260
9261   if (!any_viable_p)
9262     {
9263       if (complain & tf_error)
9264         {
9265           if (!COMPLETE_OR_OPEN_TYPE_P (basetype))
9266             cxx_incomplete_type_error (instance, basetype);
9267           else if (optype)
9268             error ("no matching function for call to %<%T::operator %T(%A)%#V%>",
9269                    basetype, optype, build_tree_list_vec (user_args),
9270                    TREE_TYPE (instance));
9271           else
9272             {
9273               tree arglist = build_tree_list_vec (user_args);
9274               tree errname = name;
9275               bool twiddle = false;
9276               if (IDENTIFIER_CDTOR_P (errname))
9277                 {
9278                   twiddle = IDENTIFIER_DTOR_P (errname);
9279                   errname = constructor_name (basetype);
9280                 }
9281               if (explicit_targs)
9282                 errname = lookup_template_function (errname, explicit_targs);
9283               if (skip_first_for_error)
9284                 arglist = TREE_CHAIN (arglist);
9285               error ("no matching function for call to %<%T::%s%E(%A)%#V%>",
9286                      basetype, &"~"[!twiddle], errname, arglist,
9287                      TREE_TYPE (instance));
9288             }
9289           print_z_candidates (location_of (name), candidates);
9290         }
9291       call = error_mark_node;
9292     }
9293   else
9294     {
9295       cand = tourney (candidates, complain);
9296       if (cand == 0)
9297         {
9298           char *pretty_name;
9299           bool free_p;
9300           tree arglist;
9301
9302           if (complain & tf_error)
9303             {
9304               pretty_name = name_as_c_string (name, basetype, &free_p);
9305               arglist = build_tree_list_vec (user_args);
9306               if (skip_first_for_error)
9307                 arglist = TREE_CHAIN (arglist);
9308               if (!any_strictly_viable (candidates))
9309                 error ("no matching function for call to %<%s(%A)%>",
9310                        pretty_name, arglist);
9311               else
9312                 error ("call of overloaded %<%s(%A)%> is ambiguous",
9313                        pretty_name, arglist);
9314               print_z_candidates (location_of (name), candidates);
9315               if (free_p)
9316                 free (pretty_name);
9317             }
9318           call = error_mark_node;
9319         }
9320       else
9321         {
9322           fn = cand->fn;
9323           call = NULL_TREE;
9324
9325           if (!(flags & LOOKUP_NONVIRTUAL)
9326               && DECL_PURE_VIRTUAL_P (fn)
9327               && instance == current_class_ref
9328               && (complain & tf_warning))
9329             {
9330               /* This is not an error, it is runtime undefined
9331                  behavior.  */
9332               if (!current_function_decl)
9333                 warning (0, "pure virtual %q#D called from "
9334                          "non-static data member initializer", fn);
9335               else if (DECL_CONSTRUCTOR_P (current_function_decl)
9336                        || DECL_DESTRUCTOR_P (current_function_decl))
9337                 warning (0, (DECL_CONSTRUCTOR_P (current_function_decl)
9338                              ? G_("pure virtual %q#D called from constructor")
9339                              : G_("pure virtual %q#D called from destructor")),
9340                          fn);
9341             }
9342
9343           if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE
9344               && !DECL_CONSTRUCTOR_P (fn)
9345               && is_dummy_object (instance))
9346             {
9347               instance = maybe_resolve_dummy (instance, true);
9348               if (instance == error_mark_node)
9349                 call = error_mark_node;
9350               else if (!is_dummy_object (instance))
9351                 {
9352                   /* We captured 'this' in the current lambda now that
9353                      we know we really need it.  */
9354                   cand->first_arg = instance;
9355                 }
9356               else if (any_dependent_bases_p ())
9357                 /* We can't tell until instantiation time whether we can use
9358                    *this as the implicit object argument.  */;
9359               else
9360                 {
9361                   if (complain & tf_error)
9362                     error ("cannot call member function %qD without object",
9363                            fn);
9364                   call = error_mark_node;
9365                 }
9366             }
9367
9368           if (call != error_mark_node)
9369             {
9370               /* Optimize away vtable lookup if we know that this
9371                  function can't be overridden.  We need to check if
9372                  the context and the type where we found fn are the same,
9373                  actually FN might be defined in a different class
9374                  type because of a using-declaration. In this case, we
9375                  do not want to perform a non-virtual call.  */
9376               if (DECL_VINDEX (fn) && ! (flags & LOOKUP_NONVIRTUAL)
9377                   && same_type_ignoring_top_level_qualifiers_p
9378                   (DECL_CONTEXT (fn), BINFO_TYPE (binfo))
9379                   && resolves_to_fixed_type_p (instance, 0))
9380                 flags |= LOOKUP_NONVIRTUAL;
9381               if (explicit_targs)
9382                 flags |= LOOKUP_EXPLICIT_TMPL_ARGS;
9383               /* Now we know what function is being called.  */
9384               if (fn_p)
9385                 *fn_p = fn;
9386               /* Build the actual CALL_EXPR.  */
9387               call = build_over_call (cand, flags, complain);
9388               /* In an expression of the form `a->f()' where `f' turns
9389                  out to be a static member function, `a' is
9390                  none-the-less evaluated.  */
9391               if (TREE_CODE (TREE_TYPE (fn)) != METHOD_TYPE
9392                   && !is_dummy_object (instance)
9393                   && TREE_SIDE_EFFECTS (instance))
9394                 {
9395                   /* But avoid the implicit lvalue-rvalue conversion when 'a'
9396                      is volatile.  */
9397                   tree a = instance;
9398                   if (TREE_THIS_VOLATILE (a))
9399                     a = build_this (a);
9400                   call = build2 (COMPOUND_EXPR, TREE_TYPE (call), a, call);
9401                 }
9402               else if (call != error_mark_node
9403                        && DECL_DESTRUCTOR_P (cand->fn)
9404                        && !VOID_TYPE_P (TREE_TYPE (call)))
9405                 /* An explicit call of the form "x->~X()" has type
9406                    "void".  However, on platforms where destructors
9407                    return "this" (i.e., those where
9408                    targetm.cxx.cdtor_returns_this is true), such calls
9409                    will appear to have a return value of pointer type
9410                    to the low-level call machinery.  We do not want to
9411                    change the low-level machinery, since we want to be
9412                    able to optimize "delete f()" on such platforms as
9413                    "operator delete(~X(f()))" (rather than generating
9414                    "t = f(), ~X(t), operator delete (t)").  */
9415                 call = build_nop (void_type_node, call);
9416             }
9417         }
9418     }
9419
9420   if (processing_template_decl && call != error_mark_node)
9421     {
9422       bool cast_to_void = false;
9423
9424       if (TREE_CODE (call) == COMPOUND_EXPR)
9425         call = TREE_OPERAND (call, 1);
9426       else if (TREE_CODE (call) == NOP_EXPR)
9427         {
9428           cast_to_void = true;
9429           call = TREE_OPERAND (call, 0);
9430         }
9431       if (INDIRECT_REF_P (call))
9432         call = TREE_OPERAND (call, 0);
9433       call = (build_min_non_dep_call_vec
9434               (call,
9435                build_min (COMPONENT_REF, TREE_TYPE (CALL_EXPR_FN (call)),
9436                           orig_instance, orig_fns, NULL_TREE),
9437                orig_args));
9438       SET_EXPR_LOCATION (call, input_location);
9439       call = convert_from_reference (call);
9440       if (cast_to_void)
9441         call = build_nop (void_type_node, call);
9442     }
9443
9444  /* Free all the conversions we allocated.  */
9445   obstack_free (&conversion_obstack, p);
9446
9447   if (orig_args != NULL)
9448     release_tree_vector (orig_args);
9449
9450   return call;
9451 }
9452
9453 /* Wrapper for above.  */
9454
9455 tree
9456 build_new_method_call (tree instance, tree fns, vec<tree, va_gc> **args,
9457                        tree conversion_path, int flags,
9458                        tree *fn_p, tsubst_flags_t complain)
9459 {
9460   tree ret;
9461   bool subtime = timevar_cond_start (TV_OVERLOAD);
9462   ret = build_new_method_call_1 (instance, fns, args, conversion_path, flags,
9463                                  fn_p, complain);
9464   timevar_cond_stop (TV_OVERLOAD, subtime);
9465   return ret;
9466 }
9467
9468 /* Returns true iff standard conversion sequence ICS1 is a proper
9469    subsequence of ICS2.  */
9470
9471 static bool
9472 is_subseq (conversion *ics1, conversion *ics2)
9473 {
9474   /* We can assume that a conversion of the same code
9475      between the same types indicates a subsequence since we only get
9476      here if the types we are converting from are the same.  */
9477
9478   while (ics1->kind == ck_rvalue
9479          || ics1->kind == ck_lvalue)
9480     ics1 = next_conversion (ics1);
9481
9482   while (1)
9483     {
9484       while (ics2->kind == ck_rvalue
9485              || ics2->kind == ck_lvalue)
9486         ics2 = next_conversion (ics2);
9487
9488       if (ics2->kind == ck_user
9489           || ics2->kind == ck_ambig
9490           || ics2->kind == ck_aggr
9491           || ics2->kind == ck_list
9492           || ics2->kind == ck_identity)
9493         /* At this point, ICS1 cannot be a proper subsequence of
9494            ICS2.  We can get a USER_CONV when we are comparing the
9495            second standard conversion sequence of two user conversion
9496            sequences.  */
9497         return false;
9498
9499       ics2 = next_conversion (ics2);
9500
9501       while (ics2->kind == ck_rvalue
9502              || ics2->kind == ck_lvalue)
9503         ics2 = next_conversion (ics2);
9504
9505       if (ics2->kind == ics1->kind
9506           && same_type_p (ics2->type, ics1->type)
9507           && (ics1->kind == ck_identity
9508               || same_type_p (next_conversion (ics2)->type,
9509                               next_conversion (ics1)->type)))
9510         return true;
9511     }
9512 }
9513
9514 /* Returns nonzero iff DERIVED is derived from BASE.  The inputs may
9515    be any _TYPE nodes.  */
9516
9517 bool
9518 is_properly_derived_from (tree derived, tree base)
9519 {
9520   if (!CLASS_TYPE_P (derived) || !CLASS_TYPE_P (base))
9521     return false;
9522
9523   /* We only allow proper derivation here.  The DERIVED_FROM_P macro
9524      considers every class derived from itself.  */
9525   return (!same_type_ignoring_top_level_qualifiers_p (derived, base)
9526           && DERIVED_FROM_P (base, derived));
9527 }
9528
9529 /* We build the ICS for an implicit object parameter as a pointer
9530    conversion sequence.  However, such a sequence should be compared
9531    as if it were a reference conversion sequence.  If ICS is the
9532    implicit conversion sequence for an implicit object parameter,
9533    modify it accordingly.  */
9534
9535 static void
9536 maybe_handle_implicit_object (conversion **ics)
9537 {
9538   if ((*ics)->this_p)
9539     {
9540       /* [over.match.funcs]
9541
9542          For non-static member functions, the type of the
9543          implicit object parameter is "reference to cv X"
9544          where X is the class of which the function is a
9545          member and cv is the cv-qualification on the member
9546          function declaration.  */
9547       conversion *t = *ics;
9548       tree reference_type;
9549
9550       /* The `this' parameter is a pointer to a class type.  Make the
9551          implicit conversion talk about a reference to that same class
9552          type.  */
9553       reference_type = TREE_TYPE (t->type);
9554       reference_type = build_reference_type (reference_type);
9555
9556       if (t->kind == ck_qual)
9557         t = next_conversion (t);
9558       if (t->kind == ck_ptr)
9559         t = next_conversion (t);
9560       t = build_identity_conv (TREE_TYPE (t->type), NULL_TREE);
9561       t = direct_reference_binding (reference_type, t);
9562       t->this_p = 1;
9563       t->rvaluedness_matches_p = 0;
9564       *ics = t;
9565     }
9566 }
9567
9568 /* If *ICS is a REF_BIND set *ICS to the remainder of the conversion,
9569    and return the initial reference binding conversion. Otherwise,
9570    leave *ICS unchanged and return NULL.  */
9571
9572 static conversion *
9573 maybe_handle_ref_bind (conversion **ics)
9574 {
9575   if ((*ics)->kind == ck_ref_bind)
9576     {
9577       conversion *old_ics = *ics;
9578       *ics = next_conversion (old_ics);
9579       (*ics)->user_conv_p = old_ics->user_conv_p;
9580       return old_ics;
9581     }
9582
9583   return NULL;
9584 }
9585
9586 /* Compare two implicit conversion sequences according to the rules set out in
9587    [over.ics.rank].  Return values:
9588
9589       1: ics1 is better than ics2
9590      -1: ics2 is better than ics1
9591       0: ics1 and ics2 are indistinguishable */
9592
9593 static int
9594 compare_ics (conversion *ics1, conversion *ics2)
9595 {
9596   tree from_type1;
9597   tree from_type2;
9598   tree to_type1;
9599   tree to_type2;
9600   tree deref_from_type1 = NULL_TREE;
9601   tree deref_from_type2 = NULL_TREE;
9602   tree deref_to_type1 = NULL_TREE;
9603   tree deref_to_type2 = NULL_TREE;
9604   conversion_rank rank1, rank2;
9605
9606   /* REF_BINDING is nonzero if the result of the conversion sequence
9607      is a reference type.   In that case REF_CONV is the reference
9608      binding conversion. */
9609   conversion *ref_conv1;
9610   conversion *ref_conv2;
9611
9612   /* Compare badness before stripping the reference conversion.  */
9613   if (ics1->bad_p > ics2->bad_p)
9614     return -1;
9615   else if (ics1->bad_p < ics2->bad_p)
9616     return 1;
9617
9618   /* Handle implicit object parameters.  */
9619   maybe_handle_implicit_object (&ics1);
9620   maybe_handle_implicit_object (&ics2);
9621
9622   /* Handle reference parameters.  */
9623   ref_conv1 = maybe_handle_ref_bind (&ics1);
9624   ref_conv2 = maybe_handle_ref_bind (&ics2);
9625
9626   /* List-initialization sequence L1 is a better conversion sequence than
9627      list-initialization sequence L2 if L1 converts to
9628      std::initializer_list<X> for some X and L2 does not.  */
9629   if (ics1->kind == ck_list && ics2->kind != ck_list)
9630     return 1;
9631   if (ics2->kind == ck_list && ics1->kind != ck_list)
9632     return -1;
9633
9634   /* [over.ics.rank]
9635
9636      When  comparing  the  basic forms of implicit conversion sequences (as
9637      defined in _over.best.ics_)
9638
9639      --a standard conversion sequence (_over.ics.scs_) is a better
9640        conversion sequence than a user-defined conversion sequence
9641        or an ellipsis conversion sequence, and
9642
9643      --a user-defined conversion sequence (_over.ics.user_) is a
9644        better conversion sequence than an ellipsis conversion sequence
9645        (_over.ics.ellipsis_).  */
9646   /* Use BAD_CONVERSION_RANK because we already checked for a badness
9647      mismatch.  If both ICS are bad, we try to make a decision based on
9648      what would have happened if they'd been good.  This is not an
9649      extension, we'll still give an error when we build up the call; this
9650      just helps us give a more helpful error message.  */
9651   rank1 = BAD_CONVERSION_RANK (ics1);
9652   rank2 = BAD_CONVERSION_RANK (ics2);
9653
9654   if (rank1 > rank2)
9655     return -1;
9656   else if (rank1 < rank2)
9657     return 1;
9658
9659   if (ics1->ellipsis_p)
9660     /* Both conversions are ellipsis conversions.  */
9661     return 0;
9662
9663   /* User-defined  conversion sequence U1 is a better conversion sequence
9664      than another user-defined conversion sequence U2 if they contain the
9665      same user-defined conversion operator or constructor and if the sec-
9666      ond standard conversion sequence of U1 is  better  than  the  second
9667      standard conversion sequence of U2.  */
9668
9669   /* Handle list-conversion with the same code even though it isn't always
9670      ranked as a user-defined conversion and it doesn't have a second
9671      standard conversion sequence; it will still have the desired effect.
9672      Specifically, we need to do the reference binding comparison at the
9673      end of this function.  */
9674
9675   if (ics1->user_conv_p || ics1->kind == ck_list || ics1->kind == ck_aggr)
9676     {
9677       conversion *t1;
9678       conversion *t2;
9679
9680       for (t1 = ics1; t1->kind != ck_user; t1 = next_conversion (t1))
9681         if (t1->kind == ck_ambig || t1->kind == ck_aggr
9682             || t1->kind == ck_list)
9683           break;
9684       for (t2 = ics2; t2->kind != ck_user; t2 = next_conversion (t2))
9685         if (t2->kind == ck_ambig || t2->kind == ck_aggr
9686             || t2->kind == ck_list)
9687           break;
9688
9689       if (t1->kind != t2->kind)
9690         return 0;
9691       else if (t1->kind == ck_user)
9692         {
9693           tree f1 = t1->cand ? t1->cand->fn : t1->type;
9694           tree f2 = t2->cand ? t2->cand->fn : t2->type;
9695           if (f1 != f2)
9696             return 0;
9697         }
9698       else
9699         {
9700           /* For ambiguous or aggregate conversions, use the target type as
9701              a proxy for the conversion function.  */
9702           if (!same_type_ignoring_top_level_qualifiers_p (t1->type, t2->type))
9703             return 0;
9704         }
9705
9706       /* We can just fall through here, after setting up
9707          FROM_TYPE1 and FROM_TYPE2.  */
9708       from_type1 = t1->type;
9709       from_type2 = t2->type;
9710     }
9711   else
9712     {
9713       conversion *t1;
9714       conversion *t2;
9715
9716       /* We're dealing with two standard conversion sequences.
9717
9718          [over.ics.rank]
9719
9720          Standard conversion sequence S1 is a better conversion
9721          sequence than standard conversion sequence S2 if
9722
9723          --S1 is a proper subsequence of S2 (comparing the conversion
9724            sequences in the canonical form defined by _over.ics.scs_,
9725            excluding any Lvalue Transformation; the identity
9726            conversion sequence is considered to be a subsequence of
9727            any non-identity conversion sequence */
9728
9729       t1 = ics1;
9730       while (t1->kind != ck_identity)
9731         t1 = next_conversion (t1);
9732       from_type1 = t1->type;
9733
9734       t2 = ics2;
9735       while (t2->kind != ck_identity)
9736         t2 = next_conversion (t2);
9737       from_type2 = t2->type;
9738     }
9739
9740   /* One sequence can only be a subsequence of the other if they start with
9741      the same type.  They can start with different types when comparing the
9742      second standard conversion sequence in two user-defined conversion
9743      sequences.  */
9744   if (same_type_p (from_type1, from_type2))
9745     {
9746       if (is_subseq (ics1, ics2))
9747         return 1;
9748       if (is_subseq (ics2, ics1))
9749         return -1;
9750     }
9751
9752   /* [over.ics.rank]
9753
9754      Or, if not that,
9755
9756      --the rank of S1 is better than the rank of S2 (by the rules
9757        defined below):
9758
9759     Standard conversion sequences are ordered by their ranks: an Exact
9760     Match is a better conversion than a Promotion, which is a better
9761     conversion than a Conversion.
9762
9763     Two conversion sequences with the same rank are indistinguishable
9764     unless one of the following rules applies:
9765
9766     --A conversion that does not a convert a pointer, pointer to member,
9767       or std::nullptr_t to bool is better than one that does.
9768
9769     The ICS_STD_RANK automatically handles the pointer-to-bool rule,
9770     so that we do not have to check it explicitly.  */
9771   if (ics1->rank < ics2->rank)
9772     return 1;
9773   else if (ics2->rank < ics1->rank)
9774     return -1;
9775
9776   to_type1 = ics1->type;
9777   to_type2 = ics2->type;
9778
9779   /* A conversion from scalar arithmetic type to complex is worse than a
9780      conversion between scalar arithmetic types.  */
9781   if (same_type_p (from_type1, from_type2)
9782       && ARITHMETIC_TYPE_P (from_type1)
9783       && ARITHMETIC_TYPE_P (to_type1)
9784       && ARITHMETIC_TYPE_P (to_type2)
9785       && ((TREE_CODE (to_type1) == COMPLEX_TYPE)
9786           != (TREE_CODE (to_type2) == COMPLEX_TYPE)))
9787     {
9788       if (TREE_CODE (to_type1) == COMPLEX_TYPE)
9789         return -1;
9790       else
9791         return 1;
9792     }
9793
9794   if (TYPE_PTR_P (from_type1)
9795       && TYPE_PTR_P (from_type2)
9796       && TYPE_PTR_P (to_type1)
9797       && TYPE_PTR_P (to_type2))
9798     {
9799       deref_from_type1 = TREE_TYPE (from_type1);
9800       deref_from_type2 = TREE_TYPE (from_type2);
9801       deref_to_type1 = TREE_TYPE (to_type1);
9802       deref_to_type2 = TREE_TYPE (to_type2);
9803     }
9804   /* The rules for pointers to members A::* are just like the rules
9805      for pointers A*, except opposite: if B is derived from A then
9806      A::* converts to B::*, not vice versa.  For that reason, we
9807      switch the from_ and to_ variables here.  */
9808   else if ((TYPE_PTRDATAMEM_P (from_type1) && TYPE_PTRDATAMEM_P (from_type2)
9809             && TYPE_PTRDATAMEM_P (to_type1) && TYPE_PTRDATAMEM_P (to_type2))
9810            || (TYPE_PTRMEMFUNC_P (from_type1)
9811                && TYPE_PTRMEMFUNC_P (from_type2)
9812                && TYPE_PTRMEMFUNC_P (to_type1)
9813                && TYPE_PTRMEMFUNC_P (to_type2)))
9814     {
9815       deref_to_type1 = TYPE_PTRMEM_CLASS_TYPE (from_type1);
9816       deref_to_type2 = TYPE_PTRMEM_CLASS_TYPE (from_type2);
9817       deref_from_type1 = TYPE_PTRMEM_CLASS_TYPE (to_type1);
9818       deref_from_type2 = TYPE_PTRMEM_CLASS_TYPE (to_type2);
9819     }
9820
9821   if (deref_from_type1 != NULL_TREE
9822       && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_from_type1))
9823       && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_from_type2)))
9824     {
9825       /* This was one of the pointer or pointer-like conversions.
9826
9827          [over.ics.rank]
9828
9829          --If class B is derived directly or indirectly from class A,
9830            conversion of B* to A* is better than conversion of B* to
9831            void*, and conversion of A* to void* is better than
9832            conversion of B* to void*.  */
9833       if (VOID_TYPE_P (deref_to_type1)
9834           && VOID_TYPE_P (deref_to_type2))
9835         {
9836           if (is_properly_derived_from (deref_from_type1,
9837                                         deref_from_type2))
9838             return -1;
9839           else if (is_properly_derived_from (deref_from_type2,
9840                                              deref_from_type1))
9841             return 1;
9842         }
9843       else if (VOID_TYPE_P (deref_to_type1)
9844                || VOID_TYPE_P (deref_to_type2))
9845         {
9846           if (same_type_p (deref_from_type1, deref_from_type2))
9847             {
9848               if (VOID_TYPE_P (deref_to_type2))
9849                 {
9850                   if (is_properly_derived_from (deref_from_type1,
9851                                                 deref_to_type1))
9852                     return 1;
9853                 }
9854               /* We know that DEREF_TO_TYPE1 is `void' here.  */
9855               else if (is_properly_derived_from (deref_from_type1,
9856                                                  deref_to_type2))
9857                 return -1;
9858             }
9859         }
9860       else if (RECORD_OR_UNION_CODE_P (TREE_CODE (deref_to_type1))
9861                && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_to_type2)))
9862         {
9863           /* [over.ics.rank]
9864
9865              --If class B is derived directly or indirectly from class A
9866                and class C is derived directly or indirectly from B,
9867
9868              --conversion of C* to B* is better than conversion of C* to
9869                A*,
9870
9871              --conversion of B* to A* is better than conversion of C* to
9872                A*  */
9873           if (same_type_p (deref_from_type1, deref_from_type2))
9874             {
9875               if (is_properly_derived_from (deref_to_type1,
9876                                             deref_to_type2))
9877                 return 1;
9878               else if (is_properly_derived_from (deref_to_type2,
9879                                                  deref_to_type1))
9880                 return -1;
9881             }
9882           else if (same_type_p (deref_to_type1, deref_to_type2))
9883             {
9884               if (is_properly_derived_from (deref_from_type2,
9885                                             deref_from_type1))
9886                 return 1;
9887               else if (is_properly_derived_from (deref_from_type1,
9888                                                  deref_from_type2))
9889                 return -1;
9890             }
9891         }
9892     }
9893   else if (CLASS_TYPE_P (non_reference (from_type1))
9894            && same_type_p (from_type1, from_type2))
9895     {
9896       tree from = non_reference (from_type1);
9897
9898       /* [over.ics.rank]
9899
9900          --binding of an expression of type C to a reference of type
9901            B& is better than binding an expression of type C to a
9902            reference of type A&
9903
9904          --conversion of C to B is better than conversion of C to A,  */
9905       if (is_properly_derived_from (from, to_type1)
9906           && is_properly_derived_from (from, to_type2))
9907         {
9908           if (is_properly_derived_from (to_type1, to_type2))
9909             return 1;
9910           else if (is_properly_derived_from (to_type2, to_type1))
9911             return -1;
9912         }
9913     }
9914   else if (CLASS_TYPE_P (non_reference (to_type1))
9915            && same_type_p (to_type1, to_type2))
9916     {
9917       tree to = non_reference (to_type1);
9918
9919       /* [over.ics.rank]
9920
9921          --binding of an expression of type B to a reference of type
9922            A& is better than binding an expression of type C to a
9923            reference of type A&,
9924
9925          --conversion of B to A is better than conversion of C to A  */
9926       if (is_properly_derived_from (from_type1, to)
9927           && is_properly_derived_from (from_type2, to))
9928         {
9929           if (is_properly_derived_from (from_type2, from_type1))
9930             return 1;
9931           else if (is_properly_derived_from (from_type1, from_type2))
9932             return -1;
9933         }
9934     }
9935
9936   /* [over.ics.rank]
9937
9938      --S1 and S2 differ only in their qualification conversion and  yield
9939        similar  types  T1 and T2 (_conv.qual_), respectively, and the cv-
9940        qualification signature of type T1 is a proper subset of  the  cv-
9941        qualification signature of type T2  */
9942   if (ics1->kind == ck_qual
9943       && ics2->kind == ck_qual
9944       && same_type_p (from_type1, from_type2))
9945     {
9946       int result = comp_cv_qual_signature (to_type1, to_type2);
9947       if (result != 0)
9948         return result;
9949     }
9950
9951   /* [over.ics.rank]
9952
9953      --S1 and S2 are reference bindings (_dcl.init.ref_) and neither refers
9954      to an implicit object parameter of a non-static member function
9955      declared without a ref-qualifier, and either S1 binds an lvalue
9956      reference to an lvalue and S2 binds an rvalue reference or S1 binds an
9957      rvalue reference to an rvalue and S2 binds an lvalue reference (C++0x
9958      draft standard, 13.3.3.2)
9959
9960      --S1 and S2 are reference bindings (_dcl.init.ref_), and the
9961      types to which the references refer are the same type except for
9962      top-level cv-qualifiers, and the type to which the reference
9963      initialized by S2 refers is more cv-qualified than the type to
9964      which the reference initialized by S1 refers.
9965
9966      DR 1328 [over.match.best]: the context is an initialization by
9967      conversion function for direct reference binding (13.3.1.6) of a
9968      reference to function type, the return type of F1 is the same kind of
9969      reference (i.e. lvalue or rvalue) as the reference being initialized,
9970      and the return type of F2 is not.  */
9971
9972   if (ref_conv1 && ref_conv2)
9973     {
9974       if (!ref_conv1->this_p && !ref_conv2->this_p
9975           && (ref_conv1->rvaluedness_matches_p
9976               != ref_conv2->rvaluedness_matches_p)
9977           && (same_type_p (ref_conv1->type, ref_conv2->type)
9978               || (TYPE_REF_IS_RVALUE (ref_conv1->type)
9979                   != TYPE_REF_IS_RVALUE (ref_conv2->type))))
9980         {
9981           if (ref_conv1->bad_p
9982               && !same_type_p (TREE_TYPE (ref_conv1->type),
9983                                TREE_TYPE (ref_conv2->type)))
9984             /* Don't prefer a bad conversion that drops cv-quals to a bad
9985                conversion with the wrong rvalueness.  */
9986             return 0;
9987           return (ref_conv1->rvaluedness_matches_p
9988                   - ref_conv2->rvaluedness_matches_p);
9989         }
9990
9991       if (same_type_ignoring_top_level_qualifiers_p (to_type1, to_type2))
9992         {
9993           int q1 = cp_type_quals (TREE_TYPE (ref_conv1->type));
9994           int q2 = cp_type_quals (TREE_TYPE (ref_conv2->type));
9995           if (ref_conv1->bad_p)
9996             {
9997               /* Prefer the one that drops fewer cv-quals.  */
9998               tree ftype = next_conversion (ref_conv1)->type;
9999               int fquals = cp_type_quals (ftype);
10000               q1 ^= fquals;
10001               q2 ^= fquals;
10002             }
10003           return comp_cv_qualification (q2, q1);
10004         }
10005     }
10006
10007   /* Neither conversion sequence is better than the other.  */
10008   return 0;
10009 }
10010
10011 /* The source type for this standard conversion sequence.  */
10012
10013 static tree
10014 source_type (conversion *t)
10015 {
10016   for (;; t = next_conversion (t))
10017     {
10018       if (t->kind == ck_user
10019           || t->kind == ck_ambig
10020           || t->kind == ck_identity)
10021         return t->type;
10022     }
10023   gcc_unreachable ();
10024 }
10025
10026 /* Note a warning about preferring WINNER to LOSER.  We do this by storing
10027    a pointer to LOSER and re-running joust to produce the warning if WINNER
10028    is actually used.  */
10029
10030 static void
10031 add_warning (struct z_candidate *winner, struct z_candidate *loser)
10032 {
10033   candidate_warning *cw = (candidate_warning *)
10034     conversion_obstack_alloc (sizeof (candidate_warning));
10035   cw->loser = loser;
10036   cw->next = winner->warnings;
10037   winner->warnings = cw;
10038 }
10039
10040 /* Compare two candidates for overloading as described in
10041    [over.match.best].  Return values:
10042
10043       1: cand1 is better than cand2
10044      -1: cand2 is better than cand1
10045       0: cand1 and cand2 are indistinguishable */
10046
10047 static int
10048 joust (struct z_candidate *cand1, struct z_candidate *cand2, bool warn,
10049        tsubst_flags_t complain)
10050 {
10051   int winner = 0;
10052   int off1 = 0, off2 = 0;
10053   size_t i;
10054   size_t len;
10055
10056   /* Candidates that involve bad conversions are always worse than those
10057      that don't.  */
10058   if (cand1->viable > cand2->viable)
10059     return 1;
10060   if (cand1->viable < cand2->viable)
10061     return -1;
10062
10063   /* If we have two pseudo-candidates for conversions to the same type,
10064      or two candidates for the same function, arbitrarily pick one.  */
10065   if (cand1->fn == cand2->fn
10066       && (IS_TYPE_OR_DECL_P (cand1->fn)))
10067     return 1;
10068
10069   /* Prefer a non-deleted function over an implicitly deleted move
10070      constructor or assignment operator.  This differs slightly from the
10071      wording for issue 1402 (which says the move op is ignored by overload
10072      resolution), but this way produces better error messages.  */
10073   if (TREE_CODE (cand1->fn) == FUNCTION_DECL
10074       && TREE_CODE (cand2->fn) == FUNCTION_DECL
10075       && DECL_DELETED_FN (cand1->fn) != DECL_DELETED_FN (cand2->fn))
10076     {
10077       if (DECL_DELETED_FN (cand1->fn) && DECL_DEFAULTED_FN (cand1->fn)
10078           && move_fn_p (cand1->fn))
10079         return -1;
10080       if (DECL_DELETED_FN (cand2->fn) && DECL_DEFAULTED_FN (cand2->fn)
10081           && move_fn_p (cand2->fn))
10082         return 1;
10083     }
10084
10085   /* a viable function F1
10086      is defined to be a better function than another viable function F2  if
10087      for  all arguments i, ICSi(F1) is not a worse conversion sequence than
10088      ICSi(F2), and then */
10089
10090   /* for some argument j, ICSj(F1) is a better conversion  sequence  than
10091      ICSj(F2) */
10092
10093   /* For comparing static and non-static member functions, we ignore
10094      the implicit object parameter of the non-static function.  The
10095      standard says to pretend that the static function has an object
10096      parm, but that won't work with operator overloading.  */
10097   len = cand1->num_convs;
10098   if (len != cand2->num_convs)
10099     {
10100       int static_1 = DECL_STATIC_FUNCTION_P (cand1->fn);
10101       int static_2 = DECL_STATIC_FUNCTION_P (cand2->fn);
10102
10103       if (DECL_CONSTRUCTOR_P (cand1->fn)
10104           && is_list_ctor (cand1->fn) != is_list_ctor (cand2->fn))
10105         /* We're comparing a near-match list constructor and a near-match
10106            non-list constructor.  Just treat them as unordered.  */
10107         return 0;
10108
10109       gcc_assert (static_1 != static_2);
10110
10111       if (static_1)
10112         off2 = 1;
10113       else
10114         {
10115           off1 = 1;
10116           --len;
10117         }
10118     }
10119
10120   for (i = 0; i < len; ++i)
10121     {
10122       conversion *t1 = cand1->convs[i + off1];
10123       conversion *t2 = cand2->convs[i + off2];
10124       int comp = compare_ics (t1, t2);
10125
10126       if (comp != 0)
10127         {
10128           if ((complain & tf_warning)
10129               && warn_sign_promo
10130               && (CONVERSION_RANK (t1) + CONVERSION_RANK (t2)
10131                   == cr_std + cr_promotion)
10132               && t1->kind == ck_std
10133               && t2->kind == ck_std
10134               && TREE_CODE (t1->type) == INTEGER_TYPE
10135               && TREE_CODE (t2->type) == INTEGER_TYPE
10136               && (TYPE_PRECISION (t1->type)
10137                   == TYPE_PRECISION (t2->type))
10138               && (TYPE_UNSIGNED (next_conversion (t1)->type)
10139                   || (TREE_CODE (next_conversion (t1)->type)
10140                       == ENUMERAL_TYPE)))
10141             {
10142               tree type = next_conversion (t1)->type;
10143               tree type1, type2;
10144               struct z_candidate *w, *l;
10145               if (comp > 0)
10146                 type1 = t1->type, type2 = t2->type,
10147                   w = cand1, l = cand2;
10148               else
10149                 type1 = t2->type, type2 = t1->type,
10150                   w = cand2, l = cand1;
10151
10152               if (warn)
10153                 {
10154                   warning (OPT_Wsign_promo, "passing %qT chooses %qT over %qT",
10155                            type, type1, type2);
10156                   warning (OPT_Wsign_promo, "  in call to %qD", w->fn);
10157                 }
10158               else
10159                 add_warning (w, l);
10160             }
10161
10162           if (winner && comp != winner)
10163             {
10164               winner = 0;
10165               goto tweak;
10166             }
10167           winner = comp;
10168         }
10169     }
10170
10171   /* warn about confusing overload resolution for user-defined conversions,
10172      either between a constructor and a conversion op, or between two
10173      conversion ops.  */
10174   if ((complain & tf_warning)
10175       && winner && warn_conversion && cand1->second_conv
10176       && (!DECL_CONSTRUCTOR_P (cand1->fn) || !DECL_CONSTRUCTOR_P (cand2->fn))
10177       && winner != compare_ics (cand1->second_conv, cand2->second_conv))
10178     {
10179       struct z_candidate *w, *l;
10180       bool give_warning = false;
10181
10182       if (winner == 1)
10183         w = cand1, l = cand2;
10184       else
10185         w = cand2, l = cand1;
10186
10187       /* We don't want to complain about `X::operator T1 ()'
10188          beating `X::operator T2 () const', when T2 is a no less
10189          cv-qualified version of T1.  */
10190       if (DECL_CONTEXT (w->fn) == DECL_CONTEXT (l->fn)
10191           && !DECL_CONSTRUCTOR_P (w->fn) && !DECL_CONSTRUCTOR_P (l->fn))
10192         {
10193           tree t = TREE_TYPE (TREE_TYPE (l->fn));
10194           tree f = TREE_TYPE (TREE_TYPE (w->fn));
10195
10196           if (TREE_CODE (t) == TREE_CODE (f) && POINTER_TYPE_P (t))
10197             {
10198               t = TREE_TYPE (t);
10199               f = TREE_TYPE (f);
10200             }
10201           if (!comp_ptr_ttypes (t, f))
10202             give_warning = true;
10203         }
10204       else
10205         give_warning = true;
10206
10207       if (!give_warning)
10208         /*NOP*/;
10209       else if (warn)
10210         {
10211           tree source = source_type (w->convs[0]);
10212           if (POINTER_TYPE_P (source))
10213             source = TREE_TYPE (source);
10214           if (warning (OPT_Wconversion, "choosing %qD over %qD", w->fn, l->fn)
10215               && warning (OPT_Wconversion, "  for conversion from %qH to %qI",
10216                           source, w->second_conv->type)) 
10217             {
10218               inform (input_location, "  because conversion sequence for the argument is better");
10219             }
10220         }
10221       else
10222         add_warning (w, l);
10223     }
10224
10225   if (winner)
10226     return winner;
10227
10228   /* DR 495 moved this tiebreaker above the template ones.  */
10229   /* or, if not that,
10230      the  context  is  an  initialization by user-defined conversion (see
10231      _dcl.init_  and  _over.match.user_)  and  the  standard   conversion
10232      sequence  from  the return type of F1 to the destination type (i.e.,
10233      the type of the entity being initialized)  is  a  better  conversion
10234      sequence  than the standard conversion sequence from the return type
10235      of F2 to the destination type.  */
10236
10237   if (cand1->second_conv)
10238     {
10239       winner = compare_ics (cand1->second_conv, cand2->second_conv);
10240       if (winner)
10241         return winner;
10242     }
10243
10244   /* or, if not that,
10245      F1 is a non-template function and F2 is a template function
10246      specialization.  */
10247
10248   if (!cand1->template_decl && cand2->template_decl)
10249     return 1;
10250   else if (cand1->template_decl && !cand2->template_decl)
10251     return -1;
10252
10253   /* or, if not that,
10254      F1 and F2 are template functions and the function template for F1 is
10255      more specialized than the template for F2 according to the partial
10256      ordering rules.  */
10257
10258   if (cand1->template_decl && cand2->template_decl)
10259     {
10260       winner = more_specialized_fn
10261         (TI_TEMPLATE (cand1->template_decl),
10262          TI_TEMPLATE (cand2->template_decl),
10263          /* [temp.func.order]: The presence of unused ellipsis and default
10264             arguments has no effect on the partial ordering of function
10265             templates.   add_function_candidate() will not have
10266             counted the "this" argument for constructors.  */
10267          cand1->num_convs + DECL_CONSTRUCTOR_P (cand1->fn));
10268       if (winner)
10269         return winner;
10270     }
10271
10272   // C++ Concepts
10273   // or, if not that, F1 is more constrained than F2.
10274   if (flag_concepts && DECL_P (cand1->fn) && DECL_P (cand2->fn))
10275     {
10276       winner = more_constrained (cand1->fn, cand2->fn);
10277       if (winner)
10278         return winner;
10279     }
10280
10281   /* F1 is generated from a deduction-guide (13.3.1.8) and F2 is not */
10282   if (deduction_guide_p (cand1->fn))
10283     {
10284       gcc_assert (deduction_guide_p (cand2->fn));
10285       /* We distinguish between candidates from an explicit deduction guide and
10286          candidates built from a constructor based on DECL_ARTIFICIAL.  */
10287       int art1 = DECL_ARTIFICIAL (cand1->fn);
10288       int art2 = DECL_ARTIFICIAL (cand2->fn);
10289       if (art1 != art2)
10290         return art2 - art1;
10291
10292       if (art1)
10293         {
10294           /* Prefer the special copy guide over a declared copy/move
10295              constructor.  */
10296           if (copy_guide_p (cand1->fn))
10297             return 1;
10298           if (copy_guide_p (cand2->fn))
10299             return -1;
10300
10301           /* Prefer a candidate generated from a non-template constructor.  */
10302           int tg1 = template_guide_p (cand1->fn);
10303           int tg2 = template_guide_p (cand2->fn);
10304           if (tg1 != tg2)
10305             return tg2 - tg1;
10306         }
10307     }
10308
10309   /* F1 is a member of a class D, F2 is a member of a base class B of D, and
10310      for all arguments the corresponding parameters of F1 and F2 have the same
10311      type (CWG 2273/2277). */
10312   if (DECL_P (cand1->fn) && DECL_CLASS_SCOPE_P (cand1->fn)
10313       && !DECL_CONV_FN_P (cand1->fn)
10314       && DECL_P (cand2->fn) && DECL_CLASS_SCOPE_P (cand2->fn)
10315       && !DECL_CONV_FN_P (cand2->fn))
10316     {
10317       tree base1 = DECL_CONTEXT (strip_inheriting_ctors (cand1->fn));
10318       tree base2 = DECL_CONTEXT (strip_inheriting_ctors (cand2->fn));
10319
10320       bool used1 = false;
10321       bool used2 = false;
10322       if (base1 == base2)
10323         /* No difference.  */;
10324       else if (DERIVED_FROM_P (base1, base2))
10325         used1 = true;
10326       else if (DERIVED_FROM_P (base2, base1))
10327         used2 = true;
10328
10329       if (int diff = used2 - used1)
10330         {
10331           for (i = 0; i < len; ++i)
10332             {
10333               conversion *t1 = cand1->convs[i + off1];
10334               conversion *t2 = cand2->convs[i + off2];
10335               if (!same_type_p (t1->type, t2->type))
10336                 break;
10337             }
10338           if (i == len)
10339             return diff;
10340         }
10341     }
10342
10343   /* Check whether we can discard a builtin candidate, either because we
10344      have two identical ones or matching builtin and non-builtin candidates.
10345
10346      (Pedantically in the latter case the builtin which matched the user
10347      function should not be added to the overload set, but we spot it here.
10348
10349      [over.match.oper]
10350      ... the builtin candidates include ...
10351      - do not have the same parameter type list as any non-template
10352        non-member candidate.  */
10353
10354   if (identifier_p (cand1->fn) || identifier_p (cand2->fn))
10355     {
10356       for (i = 0; i < len; ++i)
10357         if (!same_type_p (cand1->convs[i]->type,
10358                           cand2->convs[i]->type))
10359           break;
10360       if (i == cand1->num_convs)
10361         {
10362           if (cand1->fn == cand2->fn)
10363             /* Two built-in candidates; arbitrarily pick one.  */
10364             return 1;
10365           else if (identifier_p (cand1->fn))
10366             /* cand1 is built-in; prefer cand2.  */
10367             return -1;
10368           else
10369             /* cand2 is built-in; prefer cand1.  */
10370             return 1;
10371         }
10372     }
10373
10374   /* For candidates of a multi-versioned function,  make the version with
10375      the highest priority win.  This version will be checked for dispatching
10376      first.  If this version can be inlined into the caller, the front-end
10377      will simply make a direct call to this function.  */
10378
10379   if (TREE_CODE (cand1->fn) == FUNCTION_DECL
10380       && DECL_FUNCTION_VERSIONED (cand1->fn)
10381       && TREE_CODE (cand2->fn) == FUNCTION_DECL
10382       && DECL_FUNCTION_VERSIONED (cand2->fn))
10383     {
10384       tree f1 = TREE_TYPE (cand1->fn);
10385       tree f2 = TREE_TYPE (cand2->fn);
10386       tree p1 = TYPE_ARG_TYPES (f1);
10387       tree p2 = TYPE_ARG_TYPES (f2);
10388      
10389       /* Check if cand1->fn and cand2->fn are versions of the same function.  It
10390          is possible that cand1->fn and cand2->fn are function versions but of
10391          different functions.  Check types to see if they are versions of the same
10392          function.  */
10393       if (compparms (p1, p2)
10394           && same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
10395         {
10396           /* Always make the version with the higher priority, more
10397              specialized, win.  */
10398           gcc_assert (targetm.compare_version_priority);
10399           if (targetm.compare_version_priority (cand1->fn, cand2->fn) >= 0)
10400             return 1;
10401           else
10402             return -1;
10403         }
10404     }
10405
10406   /* If the two function declarations represent the same function (this can
10407      happen with declarations in multiple scopes and arg-dependent lookup),
10408      arbitrarily choose one.  But first make sure the default args we're
10409      using match.  */
10410   if (DECL_P (cand1->fn) && DECL_P (cand2->fn)
10411       && equal_functions (cand1->fn, cand2->fn))
10412     {
10413       tree parms1 = TYPE_ARG_TYPES (TREE_TYPE (cand1->fn));
10414       tree parms2 = TYPE_ARG_TYPES (TREE_TYPE (cand2->fn));
10415
10416       gcc_assert (!DECL_CONSTRUCTOR_P (cand1->fn));
10417
10418       for (i = 0; i < len; ++i)
10419         {
10420           /* Don't crash if the fn is variadic.  */
10421           if (!parms1)
10422             break;
10423           parms1 = TREE_CHAIN (parms1);
10424           parms2 = TREE_CHAIN (parms2);
10425         }
10426
10427       if (off1)
10428         parms1 = TREE_CHAIN (parms1);
10429       else if (off2)
10430         parms2 = TREE_CHAIN (parms2);
10431
10432       for (; parms1; ++i)
10433         {
10434           if (!cp_tree_equal (TREE_PURPOSE (parms1),
10435                               TREE_PURPOSE (parms2)))
10436             {
10437               if (warn)
10438                 {
10439                   if (complain & tf_error)
10440                     {
10441                       if (permerror (input_location,
10442                                      "default argument mismatch in "
10443                                      "overload resolution"))
10444                         {
10445                           inform (DECL_SOURCE_LOCATION (cand1->fn),
10446                                   " candidate 1: %q#F", cand1->fn);
10447                           inform (DECL_SOURCE_LOCATION (cand2->fn),
10448                                   " candidate 2: %q#F", cand2->fn);
10449                         }
10450                     }
10451                   else
10452                     return 0;
10453                 }
10454               else
10455                 add_warning (cand1, cand2);
10456               break;
10457             }
10458           parms1 = TREE_CHAIN (parms1);
10459           parms2 = TREE_CHAIN (parms2);
10460         }
10461
10462       return 1;
10463     }
10464
10465 tweak:
10466
10467   /* Extension: If the worst conversion for one candidate is worse than the
10468      worst conversion for the other, take the first.  */
10469   if (!pedantic && (complain & tf_warning_or_error))
10470     {
10471       conversion_rank rank1 = cr_identity, rank2 = cr_identity;
10472       struct z_candidate *w = 0, *l = 0;
10473
10474       for (i = 0; i < len; ++i)
10475         {
10476           if (CONVERSION_RANK (cand1->convs[i+off1]) > rank1)
10477             rank1 = CONVERSION_RANK (cand1->convs[i+off1]);
10478           if (CONVERSION_RANK (cand2->convs[i + off2]) > rank2)
10479             rank2 = CONVERSION_RANK (cand2->convs[i + off2]);
10480         }
10481       if (rank1 < rank2)
10482         winner = 1, w = cand1, l = cand2;
10483       if (rank1 > rank2)
10484         winner = -1, w = cand2, l = cand1;
10485       if (winner)
10486         {
10487           /* Don't choose a deleted function over ambiguity.  */
10488           if (DECL_P (w->fn) && DECL_DELETED_FN (w->fn))
10489             return 0;
10490           if (warn)
10491             {
10492               pedwarn (input_location, 0,
10493               "ISO C++ says that these are ambiguous, even "
10494               "though the worst conversion for the first is better than "
10495               "the worst conversion for the second:");
10496               print_z_candidate (input_location, _("candidate 1:"), w);
10497               print_z_candidate (input_location, _("candidate 2:"), l);
10498             }
10499           else
10500             add_warning (w, l);
10501           return winner;
10502         }
10503     }
10504
10505   gcc_assert (!winner);
10506   return 0;
10507 }
10508
10509 /* Given a list of candidates for overloading, find the best one, if any.
10510    This algorithm has a worst case of O(2n) (winner is last), and a best
10511    case of O(n/2) (totally ambiguous); much better than a sorting
10512    algorithm.  */
10513
10514 static struct z_candidate *
10515 tourney (struct z_candidate *candidates, tsubst_flags_t complain)
10516 {
10517   struct z_candidate *champ = candidates, *challenger;
10518   int fate;
10519   int champ_compared_to_predecessor = 0;
10520
10521   /* Walk through the list once, comparing each current champ to the next
10522      candidate, knocking out a candidate or two with each comparison.  */
10523
10524   for (challenger = champ->next; challenger; )
10525     {
10526       fate = joust (champ, challenger, 0, complain);
10527       if (fate == 1)
10528         challenger = challenger->next;
10529       else
10530         {
10531           if (fate == 0)
10532             {
10533               champ = challenger->next;
10534               if (champ == 0)
10535                 return NULL;
10536               champ_compared_to_predecessor = 0;
10537             }
10538           else
10539             {
10540               champ = challenger;
10541               champ_compared_to_predecessor = 1;
10542             }
10543
10544           challenger = champ->next;
10545         }
10546     }
10547
10548   /* Make sure the champ is better than all the candidates it hasn't yet
10549      been compared to.  */
10550
10551   for (challenger = candidates;
10552        challenger != champ
10553          && !(champ_compared_to_predecessor && challenger->next == champ);
10554        challenger = challenger->next)
10555     {
10556       fate = joust (champ, challenger, 0, complain);
10557       if (fate != 1)
10558         return NULL;
10559     }
10560
10561   return champ;
10562 }
10563
10564 /* Returns nonzero if things of type FROM can be converted to TO.  */
10565
10566 bool
10567 can_convert (tree to, tree from, tsubst_flags_t complain)
10568 {
10569   tree arg = NULL_TREE;
10570   /* implicit_conversion only considers user-defined conversions
10571      if it has an expression for the call argument list.  */
10572   if (CLASS_TYPE_P (from) || CLASS_TYPE_P (to))
10573     arg = build1 (CAST_EXPR, from, NULL_TREE);
10574   return can_convert_arg (to, from, arg, LOOKUP_IMPLICIT, complain);
10575 }
10576
10577 /* Returns nonzero if things of type FROM can be converted to TO with a
10578    standard conversion.  */
10579
10580 bool
10581 can_convert_standard (tree to, tree from, tsubst_flags_t complain)
10582 {
10583   return can_convert_arg (to, from, NULL_TREE, LOOKUP_IMPLICIT, complain);
10584 }
10585
10586 /* Returns nonzero if ARG (of type FROM) can be converted to TO.  */
10587
10588 bool
10589 can_convert_arg (tree to, tree from, tree arg, int flags,
10590                  tsubst_flags_t complain)
10591 {
10592   conversion *t;
10593   void *p;
10594   bool ok_p;
10595
10596   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
10597   p = conversion_obstack_alloc (0);
10598   /* We want to discard any access checks done for this test,
10599      as we might not be in the appropriate access context and
10600      we'll do the check again when we actually perform the
10601      conversion.  */
10602   push_deferring_access_checks (dk_deferred);
10603
10604   t  = implicit_conversion (to, from, arg, /*c_cast_p=*/false,
10605                             flags, complain);
10606   ok_p = (t && !t->bad_p);
10607
10608   /* Discard the access checks now.  */
10609   pop_deferring_access_checks ();
10610   /* Free all the conversions we allocated.  */
10611   obstack_free (&conversion_obstack, p);
10612
10613   return ok_p;
10614 }
10615
10616 /* Like can_convert_arg, but allows dubious conversions as well.  */
10617
10618 bool
10619 can_convert_arg_bad (tree to, tree from, tree arg, int flags,
10620                      tsubst_flags_t complain)
10621 {
10622   conversion *t;
10623   void *p;
10624
10625   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
10626   p = conversion_obstack_alloc (0);
10627   /* Try to perform the conversion.  */
10628   t  = implicit_conversion (to, from, arg, /*c_cast_p=*/false,
10629                             flags, complain);
10630   /* Free all the conversions we allocated.  */
10631   obstack_free (&conversion_obstack, p);
10632
10633   return t != NULL;
10634 }
10635
10636 /* Convert EXPR to TYPE.  Return the converted expression.
10637
10638    Note that we allow bad conversions here because by the time we get to
10639    this point we are committed to doing the conversion.  If we end up
10640    doing a bad conversion, convert_like will complain.  */
10641
10642 tree
10643 perform_implicit_conversion_flags (tree type, tree expr,
10644                                    tsubst_flags_t complain, int flags)
10645 {
10646   conversion *conv;
10647   void *p;
10648   location_t loc = EXPR_LOC_OR_LOC (expr, input_location);
10649
10650   if (TREE_CODE (type) == REFERENCE_TYPE)
10651     expr = mark_lvalue_use (expr);
10652   else
10653     expr = mark_rvalue_use (expr);
10654
10655   if (error_operand_p (expr))
10656     return error_mark_node;
10657
10658   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
10659   p = conversion_obstack_alloc (0);
10660
10661   conv = implicit_conversion (type, TREE_TYPE (expr), expr,
10662                               /*c_cast_p=*/false,
10663                               flags, complain);
10664
10665   if (!conv)
10666     {
10667       if (complain & tf_error)
10668         {
10669           /* If expr has unknown type, then it is an overloaded function.
10670              Call instantiate_type to get good error messages.  */
10671           if (TREE_TYPE (expr) == unknown_type_node)
10672             instantiate_type (type, expr, complain);
10673           else if (invalid_nonstatic_memfn_p (loc, expr, complain))
10674             /* We gave an error.  */;
10675           else
10676             error_at (loc, "could not convert %qE from %qH to %qI", expr,
10677                       TREE_TYPE (expr), type);
10678         }
10679       expr = error_mark_node;
10680     }
10681   else if (processing_template_decl && conv->kind != ck_identity)
10682     {
10683       /* In a template, we are only concerned about determining the
10684          type of non-dependent expressions, so we do not have to
10685          perform the actual conversion.  But for initializers, we
10686          need to be able to perform it at instantiation
10687          (or instantiate_non_dependent_expr) time.  */
10688       expr = build1 (IMPLICIT_CONV_EXPR, type, expr);
10689       if (!(flags & LOOKUP_ONLYCONVERTING))
10690         IMPLICIT_CONV_EXPR_DIRECT_INIT (expr) = true;
10691     }
10692   else
10693     expr = convert_like (conv, expr, complain);
10694
10695   /* Free all the conversions we allocated.  */
10696   obstack_free (&conversion_obstack, p);
10697
10698   return expr;
10699 }
10700
10701 tree
10702 perform_implicit_conversion (tree type, tree expr, tsubst_flags_t complain)
10703 {
10704   return perform_implicit_conversion_flags (type, expr, complain,
10705                                             LOOKUP_IMPLICIT);
10706 }
10707
10708 /* Convert EXPR to TYPE (as a direct-initialization) if that is
10709    permitted.  If the conversion is valid, the converted expression is
10710    returned.  Otherwise, NULL_TREE is returned, except in the case
10711    that TYPE is a class type; in that case, an error is issued.  If
10712    C_CAST_P is true, then this direct-initialization is taking
10713    place as part of a static_cast being attempted as part of a C-style
10714    cast.  */
10715
10716 tree
10717 perform_direct_initialization_if_possible (tree type,
10718                                            tree expr,
10719                                            bool c_cast_p,
10720                                            tsubst_flags_t complain)
10721 {
10722   conversion *conv;
10723   void *p;
10724
10725   if (type == error_mark_node || error_operand_p (expr))
10726     return error_mark_node;
10727   /* [dcl.init]
10728
10729      If the destination type is a (possibly cv-qualified) class type:
10730
10731      -- If the initialization is direct-initialization ...,
10732      constructors are considered. ... If no constructor applies, or
10733      the overload resolution is ambiguous, the initialization is
10734      ill-formed.  */
10735   if (CLASS_TYPE_P (type))
10736     {
10737       vec<tree, va_gc> *args = make_tree_vector_single (expr);
10738       expr = build_special_member_call (NULL_TREE, complete_ctor_identifier,
10739                                         &args, type, LOOKUP_NORMAL, complain);
10740       release_tree_vector (args);
10741       return build_cplus_new (type, expr, complain);
10742     }
10743
10744   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
10745   p = conversion_obstack_alloc (0);
10746
10747   conv = implicit_conversion (type, TREE_TYPE (expr), expr,
10748                               c_cast_p,
10749                               LOOKUP_NORMAL, complain);
10750   if (!conv || conv->bad_p)
10751     expr = NULL_TREE;
10752   else if (processing_template_decl && conv->kind != ck_identity)
10753     {
10754       /* In a template, we are only concerned about determining the
10755          type of non-dependent expressions, so we do not have to
10756          perform the actual conversion.  But for initializers, we
10757          need to be able to perform it at instantiation
10758          (or instantiate_non_dependent_expr) time.  */
10759       expr = build1 (IMPLICIT_CONV_EXPR, type, expr);
10760       IMPLICIT_CONV_EXPR_DIRECT_INIT (expr) = true;
10761     }
10762   else
10763     expr = convert_like_real (conv, expr, NULL_TREE, 0,
10764                               /*issue_conversion_warnings=*/false,
10765                               c_cast_p,
10766                               complain);
10767
10768   /* Free all the conversions we allocated.  */
10769   obstack_free (&conversion_obstack, p);
10770
10771   return expr;
10772 }
10773
10774 /* When initializing a reference that lasts longer than a full-expression,
10775    this special rule applies:
10776
10777      [class.temporary]
10778
10779      The temporary to which the reference is bound or the temporary
10780      that is the complete object to which the reference is bound
10781      persists for the lifetime of the reference.
10782
10783      The temporaries created during the evaluation of the expression
10784      initializing the reference, except the temporary to which the
10785      reference is bound, are destroyed at the end of the
10786      full-expression in which they are created.
10787
10788    In that case, we store the converted expression into a new
10789    VAR_DECL in a new scope.
10790
10791    However, we want to be careful not to create temporaries when
10792    they are not required.  For example, given:
10793
10794      struct B {};
10795      struct D : public B {};
10796      D f();
10797      const B& b = f();
10798
10799    there is no need to copy the return value from "f"; we can just
10800    extend its lifetime.  Similarly, given:
10801
10802      struct S {};
10803      struct T { operator S(); };
10804      T t;
10805      const S& s = t;
10806
10807   we can extend the lifetime of the return value of the conversion
10808   operator.
10809
10810   The next several functions are involved in this lifetime extension.  */
10811
10812 /* DECL is a VAR_DECL or FIELD_DECL whose type is a REFERENCE_TYPE.  The
10813    reference is being bound to a temporary.  Create and return a new
10814    VAR_DECL with the indicated TYPE; this variable will store the value to
10815    which the reference is bound.  */
10816
10817 tree
10818 make_temporary_var_for_ref_to_temp (tree decl, tree type)
10819 {
10820   tree var = create_temporary_var (type);
10821
10822   /* Register the variable.  */
10823   if (VAR_P (decl)
10824       && (TREE_STATIC (decl) || CP_DECL_THREAD_LOCAL_P (decl)))
10825     {
10826       /* Namespace-scope or local static; give it a mangled name.  */
10827       /* FIXME share comdat with decl?  */
10828
10829       TREE_STATIC (var) = TREE_STATIC (decl);
10830       CP_DECL_THREAD_LOCAL_P (var) = CP_DECL_THREAD_LOCAL_P (decl);
10831       set_decl_tls_model (var, DECL_TLS_MODEL (decl));
10832
10833       tree name = mangle_ref_init_variable (decl);
10834       DECL_NAME (var) = name;
10835       SET_DECL_ASSEMBLER_NAME (var, name);
10836     }
10837   else
10838     /* Create a new cleanup level if necessary.  */
10839     maybe_push_cleanup_level (type);
10840
10841   return pushdecl (var);
10842 }
10843
10844 /* EXPR is the initializer for a variable DECL of reference or
10845    std::initializer_list type.  Create, push and return a new VAR_DECL
10846    for the initializer so that it will live as long as DECL.  Any
10847    cleanup for the new variable is returned through CLEANUP, and the
10848    code to initialize the new variable is returned through INITP.  */
10849
10850 static tree
10851 set_up_extended_ref_temp (tree decl, tree expr, vec<tree, va_gc> **cleanups,
10852                           tree *initp)
10853 {
10854   tree init;
10855   tree type;
10856   tree var;
10857
10858   /* Create the temporary variable.  */
10859   type = TREE_TYPE (expr);
10860   var = make_temporary_var_for_ref_to_temp (decl, type);
10861   layout_decl (var, 0);
10862   /* If the rvalue is the result of a function call it will be
10863      a TARGET_EXPR.  If it is some other construct (such as a
10864      member access expression where the underlying object is
10865      itself the result of a function call), turn it into a
10866      TARGET_EXPR here.  It is important that EXPR be a
10867      TARGET_EXPR below since otherwise the INIT_EXPR will
10868      attempt to make a bitwise copy of EXPR to initialize
10869      VAR.  */
10870   if (TREE_CODE (expr) != TARGET_EXPR)
10871     expr = get_target_expr (expr);
10872
10873   if (TREE_CODE (decl) == FIELD_DECL
10874       && extra_warnings && !TREE_NO_WARNING (decl))
10875     {
10876       warning (OPT_Wextra, "a temporary bound to %qD only persists "
10877                "until the constructor exits", decl);
10878       TREE_NO_WARNING (decl) = true;
10879     }
10880
10881   /* Recursively extend temps in this initializer.  */
10882   TARGET_EXPR_INITIAL (expr)
10883     = extend_ref_init_temps (decl, TARGET_EXPR_INITIAL (expr), cleanups);
10884
10885   /* Any reference temp has a non-trivial initializer.  */
10886   DECL_NONTRIVIALLY_INITIALIZED_P (var) = true;
10887
10888   /* If the initializer is constant, put it in DECL_INITIAL so we get
10889      static initialization and use in constant expressions.  */
10890   init = maybe_constant_init (expr);
10891   /* As in store_init_value.  */
10892   init = cp_fully_fold (init);
10893   if (TREE_CONSTANT (init))
10894     {
10895       if (literal_type_p (type) && CP_TYPE_CONST_NON_VOLATILE_P (type))
10896         {
10897           /* 5.19 says that a constant expression can include an
10898              lvalue-rvalue conversion applied to "a glvalue of literal type
10899              that refers to a non-volatile temporary object initialized
10900              with a constant expression".  Rather than try to communicate
10901              that this VAR_DECL is a temporary, just mark it constexpr.
10902
10903              Currently this is only useful for initializer_list temporaries,
10904              since reference vars can't appear in constant expressions.  */
10905           DECL_DECLARED_CONSTEXPR_P (var) = true;
10906           DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (var) = true;
10907           TREE_CONSTANT (var) = true;
10908         }
10909       DECL_INITIAL (var) = init;
10910       init = NULL_TREE;
10911     }
10912   else
10913     /* Create the INIT_EXPR that will initialize the temporary
10914        variable.  */
10915     init = split_nonconstant_init (var, expr);
10916   if (at_function_scope_p ())
10917     {
10918       add_decl_expr (var);
10919
10920       if (TREE_STATIC (var))
10921         init = add_stmt_to_compound (init, register_dtor_fn (var));
10922       else
10923         {
10924           tree cleanup = cxx_maybe_build_cleanup (var, tf_warning_or_error);
10925           if (cleanup)
10926             vec_safe_push (*cleanups, cleanup);
10927         }
10928
10929       /* We must be careful to destroy the temporary only
10930          after its initialization has taken place.  If the
10931          initialization throws an exception, then the
10932          destructor should not be run.  We cannot simply
10933          transform INIT into something like:
10934
10935          (INIT, ({ CLEANUP_STMT; }))
10936
10937          because emit_local_var always treats the
10938          initializer as a full-expression.  Thus, the
10939          destructor would run too early; it would run at the
10940          end of initializing the reference variable, rather
10941          than at the end of the block enclosing the
10942          reference variable.
10943
10944          The solution is to pass back a cleanup expression
10945          which the caller is responsible for attaching to
10946          the statement tree.  */
10947     }
10948   else
10949     {
10950       rest_of_decl_compilation (var, /*toplev=*/1, at_eof);
10951       if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
10952         {
10953           if (CP_DECL_THREAD_LOCAL_P (var))
10954             tls_aggregates = tree_cons (NULL_TREE, var,
10955                                         tls_aggregates);
10956           else
10957             static_aggregates = tree_cons (NULL_TREE, var,
10958                                            static_aggregates);
10959         }
10960       else
10961         /* Check whether the dtor is callable.  */
10962         cxx_maybe_build_cleanup (var, tf_warning_or_error);
10963     }
10964   /* Avoid -Wunused-variable warning (c++/38958).  */
10965   if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
10966       && VAR_P (decl))
10967     TREE_USED (decl) = DECL_READ_P (decl) = true;
10968
10969   *initp = init;
10970   return var;
10971 }
10972
10973 /* Convert EXPR to the indicated reference TYPE, in a way suitable for
10974    initializing a variable of that TYPE.  */
10975
10976 tree
10977 initialize_reference (tree type, tree expr,
10978                       int flags, tsubst_flags_t complain)
10979 {
10980   conversion *conv;
10981   void *p;
10982   location_t loc = EXPR_LOC_OR_LOC (expr, input_location);
10983
10984   if (type == error_mark_node || error_operand_p (expr))
10985     return error_mark_node;
10986
10987   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
10988   p = conversion_obstack_alloc (0);
10989
10990   conv = reference_binding (type, TREE_TYPE (expr), expr, /*c_cast_p=*/false,
10991                             flags, complain);
10992   if (!conv || conv->bad_p)
10993     {
10994       if (complain & tf_error)
10995         {
10996           if (conv)
10997             convert_like (conv, expr, complain);
10998           else if (!CP_TYPE_CONST_P (TREE_TYPE (type))
10999                    && !TYPE_REF_IS_RVALUE (type)
11000                    && !lvalue_p (expr))
11001             error_at (loc, "invalid initialization of non-const reference of "
11002                       "type %qH from an rvalue of type %qI",
11003                       type, TREE_TYPE (expr));
11004           else
11005             error_at (loc, "invalid initialization of reference of type "
11006                       "%qH from expression of type %qI", type,
11007                       TREE_TYPE (expr));
11008         }
11009       return error_mark_node;
11010     }
11011
11012   if (conv->kind == ck_ref_bind)
11013     /* Perform the conversion.  */
11014     expr = convert_like (conv, expr, complain);
11015   else if (conv->kind == ck_ambig)
11016     /* We gave an error in build_user_type_conversion_1.  */
11017     expr = error_mark_node;
11018   else
11019     gcc_unreachable ();
11020
11021   /* Free all the conversions we allocated.  */
11022   obstack_free (&conversion_obstack, p);
11023
11024   return expr;
11025 }
11026
11027 /* Subroutine of extend_ref_init_temps.  Possibly extend one initializer,
11028    which is bound either to a reference or a std::initializer_list.  */
11029
11030 static tree
11031 extend_ref_init_temps_1 (tree decl, tree init, vec<tree, va_gc> **cleanups)
11032 {
11033   tree sub = init;
11034   tree *p;
11035   STRIP_NOPS (sub);
11036   if (TREE_CODE (sub) == COMPOUND_EXPR)
11037     {
11038       TREE_OPERAND (sub, 1)
11039         = extend_ref_init_temps_1 (decl, TREE_OPERAND (sub, 1), cleanups);
11040       return init;
11041     }
11042   if (TREE_CODE (sub) != ADDR_EXPR)
11043     return init;
11044   /* Deal with binding to a subobject.  */
11045   for (p = &TREE_OPERAND (sub, 0);
11046        (TREE_CODE (*p) == COMPONENT_REF
11047         || TREE_CODE (*p) == ARRAY_REF); )
11048     p = &TREE_OPERAND (*p, 0);
11049   if (TREE_CODE (*p) == TARGET_EXPR)
11050     {
11051       tree subinit = NULL_TREE;
11052       *p = set_up_extended_ref_temp (decl, *p, cleanups, &subinit);
11053       recompute_tree_invariant_for_addr_expr (sub);
11054       if (init != sub)
11055         init = fold_convert (TREE_TYPE (init), sub);
11056       if (subinit)
11057         init = build2 (COMPOUND_EXPR, TREE_TYPE (init), subinit, init);
11058     }
11059   return init;
11060 }
11061
11062 /* INIT is part of the initializer for DECL.  If there are any
11063    reference or initializer lists being initialized, extend their
11064    lifetime to match that of DECL.  */
11065
11066 tree
11067 extend_ref_init_temps (tree decl, tree init, vec<tree, va_gc> **cleanups)
11068 {
11069   tree type = TREE_TYPE (init);
11070   if (processing_template_decl)
11071     return init;
11072   if (TREE_CODE (type) == REFERENCE_TYPE)
11073     init = extend_ref_init_temps_1 (decl, init, cleanups);
11074   else
11075     {
11076       tree ctor = init;
11077       if (TREE_CODE (ctor) == TARGET_EXPR)
11078         ctor = TARGET_EXPR_INITIAL (ctor);
11079       if (TREE_CODE (ctor) == CONSTRUCTOR)
11080         {
11081           if (is_std_init_list (type))
11082             {
11083               /* The temporary array underlying a std::initializer_list
11084                  is handled like a reference temporary.  */
11085               tree array = CONSTRUCTOR_ELT (ctor, 0)->value;
11086               array = extend_ref_init_temps_1 (decl, array, cleanups);
11087               CONSTRUCTOR_ELT (ctor, 0)->value = array;
11088             }
11089           else
11090             {
11091               unsigned i;
11092               constructor_elt *p;
11093               vec<constructor_elt, va_gc> *elts = CONSTRUCTOR_ELTS (ctor);
11094               FOR_EACH_VEC_SAFE_ELT (elts, i, p)
11095                 p->value = extend_ref_init_temps (decl, p->value, cleanups);
11096             }
11097           recompute_constructor_flags (ctor);
11098           if (decl_maybe_constant_var_p (decl) && TREE_CONSTANT (ctor))
11099             DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = true;
11100         }
11101     }
11102
11103   return init;
11104 }
11105
11106 /* Returns true iff an initializer for TYPE could contain temporaries that
11107    need to be extended because they are bound to references or
11108    std::initializer_list.  */
11109
11110 bool
11111 type_has_extended_temps (tree type)
11112 {
11113   type = strip_array_types (type);
11114   if (TREE_CODE (type) == REFERENCE_TYPE)
11115     return true;
11116   if (CLASS_TYPE_P (type))
11117     {
11118       if (is_std_init_list (type))
11119         return true;
11120       for (tree f = next_initializable_field (TYPE_FIELDS (type));
11121            f; f = next_initializable_field (DECL_CHAIN (f)))
11122         if (type_has_extended_temps (TREE_TYPE (f)))
11123           return true;
11124     }
11125   return false;
11126 }
11127
11128 /* Returns true iff TYPE is some variant of std::initializer_list.  */
11129
11130 bool
11131 is_std_init_list (tree type)
11132 {
11133   if (!TYPE_P (type))
11134     return false;
11135   if (cxx_dialect == cxx98)
11136     return false;
11137   /* Look through typedefs.  */
11138   type = TYPE_MAIN_VARIANT (type);
11139   return (CLASS_TYPE_P (type)
11140           && CP_TYPE_CONTEXT (type) == std_node
11141           && init_list_identifier == DECL_NAME (TYPE_NAME (type)));
11142 }
11143
11144 /* Returns true iff DECL is a list constructor: i.e. a constructor which
11145    will accept an argument list of a single std::initializer_list<T>.  */
11146
11147 bool
11148 is_list_ctor (tree decl)
11149 {
11150   tree args = FUNCTION_FIRST_USER_PARMTYPE (decl);
11151   tree arg;
11152
11153   if (!args || args == void_list_node)
11154     return false;
11155
11156   arg = non_reference (TREE_VALUE (args));
11157   if (!is_std_init_list (arg))
11158     return false;
11159
11160   args = TREE_CHAIN (args);
11161
11162   if (args && args != void_list_node && !TREE_PURPOSE (args))
11163     /* There are more non-defaulted parms.  */
11164     return false;
11165
11166   return true;
11167 }
11168
11169 #include "gt-cp-call.h"