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