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