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