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
check_dtor_name(tree basetype,tree name)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
build_addr_func(tree function,tsubst_flags_t complain)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
build_call_n(tree function,int n,...)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
set_flags_from_callee(tree call)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
build_call_a(tree function,int n,tree * argarray)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
null_ptr_cst_p(tree t)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
null_member_pointer_value_p(tree t)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
sufficient_parms_p(const_tree parmlist)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 *
conversion_obstack_alloc(size_t n)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 *
alloc_rejection(enum rejection_reason_code code)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 *
arity_rejection(tree first_arg,int expected,int actual)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 *
arg_conversion_rejection(tree first_arg,int n_arg,tree from,tree to,location_t loc)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 *
bad_arg_conversion_rejection(tree first_arg,int n_arg,tree from,tree to,location_t loc)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 *
explicit_conversion_rejection(tree from,tree to)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 *
template_conversion_rejection(tree from,tree to)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 *
template_unification_rejection(tree tmpl,tree explicit_targs,tree targs,const tree * args,unsigned int nargs,tree return_type,unification_kind_t strict,int flags)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 *
template_unification_error_rejection(void)702 template_unification_error_rejection (void)
703 {
704   return alloc_rejection (rr_template_unification);
705 }
706 
707 static struct rejection_reason *
invalid_copy_with_fn_template_rejection(void)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 *
inherited_ctor_rejection(void)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 *
constraint_failure(tree fn)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 *
alloc_conversion(conversion_kind kind)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
validate_conversion_obstack(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 **
alloc_conversions(size_t n)767 alloc_conversions (size_t n)
768 {
769   return (conversion **) conversion_obstack_alloc (n * sizeof (conversion *));
770 }
771 
772 static conversion *
build_conv(conversion_kind code,tree type,conversion * from)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 *
build_list_conv(tree type,tree ctor,int flags,tsubst_flags_t complain)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 *
next_conversion(conversion * conv)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
can_convert_array(tree atype,tree ctor,int flags,tsubst_flags_t complain)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
field_in_pset(hash_set<tree,true> & pset,tree field)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 *
build_aggr_conv(tree type,tree ctor,int flags,tsubst_flags_t complain)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 *
build_array_conv(tree type,tree ctor,int flags,tsubst_flags_t complain)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 *
build_complex_conv(tree type,tree ctor,int flags,tsubst_flags_t complain)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 *
build_identity_conv(tree type,tree expr)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 *
build_ambiguous_conv(tree type,tree expr)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
strip_top_quals(tree t)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 *
standard_conversion(tree to,tree from,tree expr,bool c_cast_p,int flags,tsubst_flags_t complain)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
reference_related_p(tree t1,tree t2)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
reference_compatible_p(tree t1,tree t2)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 *
direct_reference_binding(tree type,conversion * conv)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 *
reference_binding(tree rto,tree rfrom,tree expr,bool c_cast_p,int flags,tsubst_flags_t complain)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 *
implicit_conversion(tree to,tree from,tree expr,bool c_cast_p,int flags,tsubst_flags_t complain)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 *
good_conversion(tree to,tree from,tree expr,int flags,tsubst_flags_t complain)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 *
add_candidate(struct z_candidate ** candidates,tree fn,tree first_arg,const vec<tree,va_gc> * args,size_t num_convs,conversion ** convs,tree access_path,tree conversion_path,int viable,struct rejection_reason * reason,int flags)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
remaining_arguments(tree arg)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
conv_flags(int i,int nargs,tree fn,tree arg,int flags)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 *
add_function_candidate(struct z_candidate ** candidates,tree fn,tree ctype,tree first_arg,const vec<tree,va_gc> * args,tree access_path,tree conversion_path,int flags,conversion ** convs,tsubst_flags_t complain)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 *
add_conv_candidate(struct z_candidate ** candidates,tree fn,tree obj,const vec<tree,va_gc> * arglist,tree access_path,tree conversion_path,tsubst_flags_t complain)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
build_builtin_candidate(struct z_candidate ** candidates,tree fnname,tree type1,tree type2,tree * args,tree * argtypes,int flags,tsubst_flags_t complain)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
is_complete(tree t)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
promoted_arithmetic_type_p(tree type)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
add_builtin_candidate(struct z_candidate ** candidates,enum tree_code code,enum tree_code code2,tree fnname,tree type1,tree type2,tree * args,tree * argtypes,int flags,tsubst_flags_t complain)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
type_decays_to(tree type)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
add_builtin_candidates(struct z_candidate ** candidates,enum tree_code code,enum tree_code code2,tree fnname,tree * args,int flags,tsubst_flags_t complain)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*
add_template_candidate_real(struct z_candidate ** candidates,tree tmpl,tree ctype,tree explicit_targs,tree first_arg,const vec<tree,va_gc> * arglist,tree return_type,tree access_path,tree conversion_path,int flags,tree obj,unification_kind_t strict,tsubst_flags_t complain)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 *
add_template_candidate(struct z_candidate ** candidates,tree tmpl,tree ctype,tree explicit_targs,tree first_arg,const vec<tree,va_gc> * arglist,tree return_type,tree access_path,tree conversion_path,int flags,unification_kind_t strict,tsubst_flags_t complain)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 *
add_template_conv_candidate(struct z_candidate ** candidates,tree tmpl,tree obj,const vec<tree,va_gc> * arglist,tree return_type,tree access_path,tree conversion_path,tsubst_flags_t complain)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*
splice_viable(struct z_candidate * cands,bool strict_p,bool * any_viable_p)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
any_strictly_viable(struct z_candidate * cands)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
build_this(tree obj)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
equal_functions(tree fn1,tree fn2)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
print_conversion_rejection(location_t loc,struct conversion_info * info,tree fn)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
print_arity_information(location_t loc,unsigned int have,unsigned int want)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
print_z_candidate(location_t loc,const char * msgstr,struct z_candidate * candidate)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
print_z_candidates(location_t loc,struct z_candidate * candidates)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 *
merge_conversion_sequences(conversion * user_seq,conversion * std_seq)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
add_list_candidates(tree fns,tree first_arg,const vec<tree,va_gc> * args,tree totype,tree explicit_targs,bool template_only,tree conversion_path,tree access_path,int flags,struct z_candidate ** candidates,tsubst_flags_t complain)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 *
build_user_type_conversion_1(tree totype,tree expr,int flags,tsubst_flags_t complain)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
build_user_type_conversion(tree totype,tree expr,int flags,tsubst_flags_t complain)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
build_converted_constant_expr_internal(tree type,tree expr,int flags,tsubst_flags_t complain)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
build_converted_constant_expr(tree type,tree expr,tsubst_flags_t complain)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
build_converted_constant_bool_expr(tree expr,tsubst_flags_t complain)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> *
resolve_args(vec<tree,va_gc> * args,tsubst_flags_t complain)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 *
perform_overload_resolution(tree fn,const vec<tree,va_gc> * args,struct z_candidate ** candidates,bool * any_viable_p,tsubst_flags_t complain)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
print_error_for_call_failure(tree fn,vec<tree,va_gc> * args,struct z_candidate * candidates)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
build_new_function_call(tree fn,vec<tree,va_gc> ** args,tsubst_flags_t complain)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
build_operator_new_call(tree fnname,vec<tree,va_gc> ** args,tree * size,tree * cookie_size,tree align_arg,tree size_check,tree * fn,tsubst_flags_t complain)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
build_op_call_1(tree obj,vec<tree,va_gc> ** args,tsubst_flags_t complain)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
build_op_call(tree obj,vec<tree,va_gc> ** args,tsubst_flags_t complain)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 *
op_error_string(const char * errmsg,int ntypes,bool match)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
op_error(const op_location_t & loc,enum tree_code code,enum tree_code code2,tree arg1,tree arg2,tree arg3,bool match)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 *
conditional_conversion(tree e1,tree e2,tsubst_flags_t complain)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
build_conditional_expr_1(const op_location_t & loc,tree arg1,tree arg2,tree arg3,tsubst_flags_t complain)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
build_conditional_expr(const op_location_t & loc,tree arg1,tree arg2,tree arg3,tsubst_flags_t complain)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
prep_operand(tree operand)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
add_candidates(tree fns,tree first_arg,const vec<tree,va_gc> * args,tree return_type,tree explicit_targs,bool template_only,tree conversion_path,tree access_path,int flags,struct z_candidate ** candidates,tsubst_flags_t complain)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
op_is_ordered(tree_code code)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       // a && b
5794       // Predates P0145R3.
5795     case TRUTH_ANDIF_EXPR:
5796       // a || b
5797       // Predates P0145R3.
5798     case TRUTH_ORIF_EXPR:
5799       // a , b
5800       // Predates P0145R3.
5801     case COMPOUND_EXPR:
5802       return (flag_strong_eval_order ? 1 : 0);
5803 
5804     default:
5805       return 0;
5806     }
5807 }
5808 
5809 static tree
build_new_op_1(const op_location_t & loc,enum tree_code code,int flags,tree arg1,tree arg2,tree arg3,tree * overload,tsubst_flags_t complain)5810 build_new_op_1 (const op_location_t &loc, enum tree_code code, int flags,
5811 		tree arg1, tree arg2, tree arg3, tree *overload,
5812 		tsubst_flags_t complain)
5813 {
5814   struct z_candidate *candidates = 0, *cand;
5815   vec<tree, va_gc> *arglist;
5816   tree args[3];
5817   tree result = NULL_TREE;
5818   bool result_valid_p = false;
5819   enum tree_code code2 = NOP_EXPR;
5820   enum tree_code code_orig_arg1 = ERROR_MARK;
5821   enum tree_code code_orig_arg2 = ERROR_MARK;
5822   conversion *conv;
5823   void *p;
5824   bool strict_p;
5825   bool any_viable_p;
5826 
5827   if (error_operand_p (arg1)
5828       || error_operand_p (arg2)
5829       || error_operand_p (arg3))
5830     return error_mark_node;
5831 
5832   bool ismodop = code == MODIFY_EXPR;
5833   if (ismodop)
5834     {
5835       code2 = TREE_CODE (arg3);
5836       arg3 = NULL_TREE;
5837     }
5838   tree fnname = ovl_op_identifier (ismodop, ismodop ? code2 : code);
5839 
5840   arg1 = prep_operand (arg1);
5841 
5842   bool memonly = false;
5843   switch (code)
5844     {
5845     case NEW_EXPR:
5846     case VEC_NEW_EXPR:
5847     case VEC_DELETE_EXPR:
5848     case DELETE_EXPR:
5849       /* Use build_op_new_call and build_op_delete_call instead.  */
5850       gcc_unreachable ();
5851 
5852     case CALL_EXPR:
5853       /* Use build_op_call instead.  */
5854       gcc_unreachable ();
5855 
5856     case TRUTH_ORIF_EXPR:
5857     case TRUTH_ANDIF_EXPR:
5858     case TRUTH_AND_EXPR:
5859     case TRUTH_OR_EXPR:
5860       /* These are saved for the sake of warn_logical_operator.  */
5861       code_orig_arg1 = TREE_CODE (arg1);
5862       code_orig_arg2 = TREE_CODE (arg2);
5863       break;
5864     case GT_EXPR:
5865     case LT_EXPR:
5866     case GE_EXPR:
5867     case LE_EXPR:
5868     case EQ_EXPR:
5869     case NE_EXPR:
5870       /* These are saved for the sake of maybe_warn_bool_compare.  */
5871       code_orig_arg1 = TREE_CODE (TREE_TYPE (arg1));
5872       code_orig_arg2 = TREE_CODE (TREE_TYPE (arg2));
5873       break;
5874 
5875       /* =, ->, [], () must be non-static member functions.  */
5876     case MODIFY_EXPR:
5877       if (code2 != NOP_EXPR)
5878 	break;
5879       /* FALLTHRU */
5880     case COMPONENT_REF:
5881     case ARRAY_REF:
5882       memonly = true;
5883       break;
5884 
5885     default:
5886       break;
5887     }
5888 
5889   arg2 = prep_operand (arg2);
5890   arg3 = prep_operand (arg3);
5891 
5892   if (code == COND_EXPR)
5893     /* Use build_conditional_expr instead.  */
5894     gcc_unreachable ();
5895   else if (! OVERLOAD_TYPE_P (TREE_TYPE (arg1))
5896 	   && (! arg2 || ! OVERLOAD_TYPE_P (TREE_TYPE (arg2))))
5897     goto builtin;
5898 
5899   if (code == POSTINCREMENT_EXPR || code == POSTDECREMENT_EXPR)
5900     arg2 = integer_zero_node;
5901 
5902   vec_alloc (arglist, 3);
5903   arglist->quick_push (arg1);
5904   if (arg2 != NULL_TREE)
5905     arglist->quick_push (arg2);
5906   if (arg3 != NULL_TREE)
5907     arglist->quick_push (arg3);
5908 
5909   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
5910   p = conversion_obstack_alloc (0);
5911 
5912   /* Add namespace-scope operators to the list of functions to
5913      consider.  */
5914   if (!memonly)
5915     {
5916       tree fns = lookup_name_real (fnname, 0, 1, /*block_p=*/true, 0, 0);
5917       fns = lookup_arg_dependent (fnname, fns, arglist);
5918       add_candidates (fns, NULL_TREE, arglist, NULL_TREE,
5919 		      NULL_TREE, false, NULL_TREE, NULL_TREE,
5920 		      flags, &candidates, complain);
5921     }
5922 
5923   args[0] = arg1;
5924   args[1] = arg2;
5925   args[2] = NULL_TREE;
5926 
5927   /* Add class-member operators to the candidate set.  */
5928   if (CLASS_TYPE_P (TREE_TYPE (arg1)))
5929     {
5930       tree fns;
5931 
5932       fns = lookup_fnfields (TREE_TYPE (arg1), fnname, 1);
5933       if (fns == error_mark_node)
5934 	{
5935 	  result = error_mark_node;
5936 	  goto user_defined_result_ready;
5937 	}
5938       if (fns)
5939 	add_candidates (BASELINK_FUNCTIONS (fns),
5940 			NULL_TREE, arglist, NULL_TREE,
5941 			NULL_TREE, false,
5942 			BASELINK_BINFO (fns),
5943 			BASELINK_ACCESS_BINFO (fns),
5944 			flags, &candidates, complain);
5945     }
5946   /* Per 13.3.1.2/3, 2nd bullet, if no operand has a class type, then
5947      only non-member functions that have type T1 or reference to
5948      cv-qualified-opt T1 for the first argument, if the first argument
5949      has an enumeration type, or T2 or reference to cv-qualified-opt
5950      T2 for the second argument, if the second argument has an
5951      enumeration type.  Filter out those that don't match.  */
5952   else if (! arg2 || ! CLASS_TYPE_P (TREE_TYPE (arg2)))
5953     {
5954       struct z_candidate **candp, **next;
5955 
5956       for (candp = &candidates; *candp; candp = next)
5957 	{
5958 	  tree parmlist, parmtype;
5959 	  int i, nargs = (arg2 ? 2 : 1);
5960 
5961 	  cand = *candp;
5962 	  next = &cand->next;
5963 
5964 	  parmlist = TYPE_ARG_TYPES (TREE_TYPE (cand->fn));
5965 
5966 	  for (i = 0; i < nargs; ++i)
5967 	    {
5968 	      parmtype = TREE_VALUE (parmlist);
5969 
5970 	      if (TYPE_REF_P (parmtype))
5971 		parmtype = TREE_TYPE (parmtype);
5972 	      if (TREE_CODE (TREE_TYPE (args[i])) == ENUMERAL_TYPE
5973 		  && (same_type_ignoring_top_level_qualifiers_p
5974 		      (TREE_TYPE (args[i]), parmtype)))
5975 		break;
5976 
5977 	      parmlist = TREE_CHAIN (parmlist);
5978 	    }
5979 
5980 	  /* No argument has an appropriate type, so remove this
5981 	     candidate function from the list.  */
5982 	  if (i == nargs)
5983 	    {
5984 	      *candp = cand->next;
5985 	      next = candp;
5986 	    }
5987 	}
5988     }
5989 
5990   add_builtin_candidates (&candidates, code, code2, fnname, args,
5991 			  flags, complain);
5992 
5993   switch (code)
5994     {
5995     case COMPOUND_EXPR:
5996     case ADDR_EXPR:
5997       /* For these, the built-in candidates set is empty
5998 	 [over.match.oper]/3.  We don't want non-strict matches
5999 	 because exact matches are always possible with built-in
6000 	 operators.  The built-in candidate set for COMPONENT_REF
6001 	 would be empty too, but since there are no such built-in
6002 	 operators, we accept non-strict matches for them.  */
6003       strict_p = true;
6004       break;
6005 
6006     default:
6007       strict_p = false;
6008       break;
6009     }
6010 
6011   candidates = splice_viable (candidates, strict_p, &any_viable_p);
6012   if (!any_viable_p)
6013     {
6014       switch (code)
6015 	{
6016 	case POSTINCREMENT_EXPR:
6017 	case POSTDECREMENT_EXPR:
6018 	  /* Don't try anything fancy if we're not allowed to produce
6019 	     errors.  */
6020 	  if (!(complain & tf_error))
6021 	    return error_mark_node;
6022 
6023 	  /* Look for an `operator++ (int)'. Pre-1985 C++ didn't
6024 	     distinguish between prefix and postfix ++ and
6025 	     operator++() was used for both, so we allow this with
6026 	     -fpermissive.  */
6027 	  else
6028 	    {
6029 	      const char *msg = (flag_permissive)
6030 		? G_("no %<%D(int)%> declared for postfix %qs,"
6031 		     " trying prefix operator instead")
6032 		: G_("no %<%D(int)%> declared for postfix %qs");
6033 	      permerror (loc, msg, fnname, OVL_OP_INFO (false, code)->name);
6034 	    }
6035 
6036 	  if (!flag_permissive)
6037 	    return error_mark_node;
6038 
6039 	  if (code == POSTINCREMENT_EXPR)
6040 	    code = PREINCREMENT_EXPR;
6041 	  else
6042 	    code = PREDECREMENT_EXPR;
6043 	  result = build_new_op_1 (loc, code, flags, arg1, NULL_TREE,
6044 				   NULL_TREE, overload, complain);
6045 	  break;
6046 
6047 	  /* The caller will deal with these.  */
6048 	case ADDR_EXPR:
6049 	case COMPOUND_EXPR:
6050 	case COMPONENT_REF:
6051 	  result = NULL_TREE;
6052 	  result_valid_p = true;
6053 	  break;
6054 
6055 	default:
6056 	  if (complain & tf_error)
6057 	    {
6058 		/* If one of the arguments of the operator represents
6059 		   an invalid use of member function pointer, try to report
6060 		   a meaningful error ...  */
6061 	      if (invalid_nonstatic_memfn_p (loc, arg1, tf_error)
6062 		    || invalid_nonstatic_memfn_p (loc, arg2, tf_error)
6063 		    || invalid_nonstatic_memfn_p (loc, arg3, tf_error))
6064 		  /* We displayed the error message.  */;
6065 		else
6066 		  {
6067 		    /* ... Otherwise, report the more generic
6068 		       "no matching operator found" error */
6069 		    auto_diagnostic_group d;
6070 		    op_error (loc, code, code2, arg1, arg2, arg3, FALSE);
6071 		    print_z_candidates (loc, candidates);
6072 		  }
6073 	    }
6074 	  result = error_mark_node;
6075 	  break;
6076 	}
6077     }
6078   else
6079     {
6080       cand = tourney (candidates, complain);
6081       if (cand == 0)
6082 	{
6083 	  if (complain & tf_error)
6084 	    {
6085 	      auto_diagnostic_group d;
6086 	      op_error (loc, code, code2, arg1, arg2, arg3, TRUE);
6087 	      print_z_candidates (loc, candidates);
6088 	    }
6089 	  result = error_mark_node;
6090 	}
6091       else if (TREE_CODE (cand->fn) == FUNCTION_DECL)
6092 	{
6093 	  if (overload)
6094 	    *overload = cand->fn;
6095 
6096 	  if (resolve_args (arglist, complain) == NULL)
6097 	    result = error_mark_node;
6098 	  else
6099 	    result = build_over_call (cand, LOOKUP_NORMAL, complain);
6100 
6101 	  if (trivial_fn_p (cand->fn))
6102 	    /* There won't be a CALL_EXPR.  */;
6103 	  else if (result && result != error_mark_node)
6104 	    {
6105 	      tree call = extract_call_expr (result);
6106 	      CALL_EXPR_OPERATOR_SYNTAX (call) = true;
6107 
6108 	      if (processing_template_decl && DECL_HIDDEN_FRIEND_P (cand->fn))
6109 		/* This prevents build_new_function_call from discarding this
6110 		   function during instantiation of the enclosing template.  */
6111 		KOENIG_LOOKUP_P (call) = 1;
6112 
6113 	      /* Specify evaluation order as per P0145R2.  */
6114 	      CALL_EXPR_ORDERED_ARGS (call) = false;
6115 	      switch (op_is_ordered (code))
6116 		{
6117 		case -1:
6118 		  CALL_EXPR_REVERSE_ARGS (call) = true;
6119 		  break;
6120 
6121 		case 1:
6122 		  CALL_EXPR_ORDERED_ARGS (call) = true;
6123 		  break;
6124 
6125 		default:
6126 		  break;
6127 		}
6128 	    }
6129 	}
6130       else
6131 	{
6132 	  /* Give any warnings we noticed during overload resolution.  */
6133 	  if (cand->warnings && (complain & tf_warning))
6134 	    {
6135 	      struct candidate_warning *w;
6136 	      for (w = cand->warnings; w; w = w->next)
6137 		joust (cand, w->loser, 1, complain);
6138 	    }
6139 
6140 	  /* Check for comparison of different enum types.  */
6141 	  switch (code)
6142 	    {
6143 	    case GT_EXPR:
6144 	    case LT_EXPR:
6145 	    case GE_EXPR:
6146 	    case LE_EXPR:
6147 	    case EQ_EXPR:
6148 	    case NE_EXPR:
6149 	      if (TREE_CODE (TREE_TYPE (arg1)) == ENUMERAL_TYPE
6150 		  && TREE_CODE (TREE_TYPE (arg2)) == ENUMERAL_TYPE
6151 		  && (TYPE_MAIN_VARIANT (TREE_TYPE (arg1))
6152 		      != TYPE_MAIN_VARIANT (TREE_TYPE (arg2)))
6153 		  && (complain & tf_warning))
6154 		{
6155 		  warning (OPT_Wenum_compare,
6156 			   "comparison between %q#T and %q#T",
6157 			   TREE_TYPE (arg1), TREE_TYPE (arg2));
6158 		}
6159 	      break;
6160 	    default:
6161 	      break;
6162 	    }
6163 
6164 	  /* We need to strip any leading REF_BIND so that bitfields
6165 	     don't cause errors.  This should not remove any important
6166 	     conversions, because builtins don't apply to class
6167 	     objects directly.  */
6168 	  conv = cand->convs[0];
6169 	  if (conv->kind == ck_ref_bind)
6170 	    conv = next_conversion (conv);
6171 	  arg1 = convert_like (conv, arg1, complain);
6172 
6173 	  if (arg2)
6174 	    {
6175 	      conv = cand->convs[1];
6176 	      if (conv->kind == ck_ref_bind)
6177 		conv = next_conversion (conv);
6178 	      else
6179 		arg2 = decay_conversion (arg2, complain);
6180 
6181 	      /* We need to call warn_logical_operator before
6182 		 converting arg2 to a boolean_type, but after
6183 		 decaying an enumerator to its value.  */
6184 	      if (complain & tf_warning)
6185 		warn_logical_operator (loc, code, boolean_type_node,
6186 				       code_orig_arg1, arg1,
6187 				       code_orig_arg2, arg2);
6188 
6189 	      arg2 = convert_like (conv, arg2, complain);
6190 	    }
6191 	  if (arg3)
6192 	    {
6193 	      conv = cand->convs[2];
6194 	      if (conv->kind == ck_ref_bind)
6195 		conv = next_conversion (conv);
6196 	      arg3 = convert_like (conv, arg3, complain);
6197 	    }
6198 
6199 	}
6200     }
6201 
6202  user_defined_result_ready:
6203 
6204   /* Free all the conversions we allocated.  */
6205   obstack_free (&conversion_obstack, p);
6206 
6207   if (result || result_valid_p)
6208     return result;
6209 
6210  builtin:
6211   switch (code)
6212     {
6213     case MODIFY_EXPR:
6214       return cp_build_modify_expr (loc, arg1, code2, arg2, complain);
6215 
6216     case INDIRECT_REF:
6217       return cp_build_indirect_ref (arg1, RO_UNARY_STAR, complain);
6218 
6219     case TRUTH_ANDIF_EXPR:
6220     case TRUTH_ORIF_EXPR:
6221     case TRUTH_AND_EXPR:
6222     case TRUTH_OR_EXPR:
6223       if (complain & tf_warning)
6224 	warn_logical_operator (loc, code, boolean_type_node,
6225 			       code_orig_arg1, arg1,
6226 			       code_orig_arg2, arg2);
6227       /* Fall through.  */
6228     case GT_EXPR:
6229     case LT_EXPR:
6230     case GE_EXPR:
6231     case LE_EXPR:
6232     case EQ_EXPR:
6233     case NE_EXPR:
6234       if ((complain & tf_warning)
6235 	  && ((code_orig_arg1 == BOOLEAN_TYPE)
6236 	      ^ (code_orig_arg2 == BOOLEAN_TYPE)))
6237 	maybe_warn_bool_compare (loc, code, arg1, arg2);
6238       if (complain & tf_warning && warn_tautological_compare)
6239 	warn_tautological_cmp (loc, code, arg1, arg2);
6240       /* Fall through.  */
6241     case PLUS_EXPR:
6242     case MINUS_EXPR:
6243     case MULT_EXPR:
6244     case TRUNC_DIV_EXPR:
6245     case MAX_EXPR:
6246     case MIN_EXPR:
6247     case LSHIFT_EXPR:
6248     case RSHIFT_EXPR:
6249     case TRUNC_MOD_EXPR:
6250     case BIT_AND_EXPR:
6251     case BIT_IOR_EXPR:
6252     case BIT_XOR_EXPR:
6253       return cp_build_binary_op (loc, code, arg1, arg2, complain);
6254 
6255     case UNARY_PLUS_EXPR:
6256     case NEGATE_EXPR:
6257     case BIT_NOT_EXPR:
6258     case TRUTH_NOT_EXPR:
6259     case PREINCREMENT_EXPR:
6260     case POSTINCREMENT_EXPR:
6261     case PREDECREMENT_EXPR:
6262     case POSTDECREMENT_EXPR:
6263     case REALPART_EXPR:
6264     case IMAGPART_EXPR:
6265     case ABS_EXPR:
6266       return cp_build_unary_op (code, arg1, candidates != 0, complain);
6267 
6268     case ARRAY_REF:
6269       return cp_build_array_ref (input_location, arg1, arg2, complain);
6270 
6271     case MEMBER_REF:
6272       return build_m_component_ref (cp_build_indirect_ref (arg1, RO_ARROW_STAR,
6273                                                            complain),
6274                                     arg2, complain);
6275 
6276       /* The caller will deal with these.  */
6277     case ADDR_EXPR:
6278     case COMPONENT_REF:
6279     case COMPOUND_EXPR:
6280       return NULL_TREE;
6281 
6282     default:
6283       gcc_unreachable ();
6284     }
6285   return NULL_TREE;
6286 }
6287 
6288 /* Wrapper for above.  */
6289 
6290 tree
build_new_op(const op_location_t & loc,enum tree_code code,int flags,tree arg1,tree arg2,tree arg3,tree * overload,tsubst_flags_t complain)6291 build_new_op (const op_location_t &loc, enum tree_code code, int flags,
6292 	      tree arg1, tree arg2, tree arg3,
6293 	      tree *overload, tsubst_flags_t complain)
6294 {
6295   tree ret;
6296   bool subtime = timevar_cond_start (TV_OVERLOAD);
6297   ret = build_new_op_1 (loc, code, flags, arg1, arg2, arg3,
6298 			overload, complain);
6299   timevar_cond_stop (TV_OVERLOAD, subtime);
6300   return ret;
6301 }
6302 
6303 /* CALL was returned by some call-building function; extract the actual
6304    CALL_EXPR from any bits that have been tacked on, e.g. by
6305    convert_from_reference.  */
6306 
6307 tree
extract_call_expr(tree call)6308 extract_call_expr (tree call)
6309 {
6310   while (TREE_CODE (call) == COMPOUND_EXPR)
6311     call = TREE_OPERAND (call, 1);
6312   if (REFERENCE_REF_P (call))
6313     call = TREE_OPERAND (call, 0);
6314   if (TREE_CODE (call) == TARGET_EXPR)
6315     call = TARGET_EXPR_INITIAL (call);
6316   gcc_assert (TREE_CODE (call) == CALL_EXPR
6317 	      || TREE_CODE (call) == AGGR_INIT_EXPR
6318 	      || call == error_mark_node);
6319   return call;
6320 }
6321 
6322 /* Returns true if FN has two parameters, of which the second has type
6323    size_t.  */
6324 
6325 static bool
second_parm_is_size_t(tree fn)6326 second_parm_is_size_t (tree fn)
6327 {
6328   tree t = FUNCTION_ARG_CHAIN (fn);
6329   if (!t || !same_type_p (TREE_VALUE (t), size_type_node))
6330     return false;
6331   t = TREE_CHAIN (t);
6332   if (t == void_list_node)
6333     return true;
6334   return false;
6335 }
6336 
6337 /* True if T, an allocation function, has std::align_val_t as its second
6338    argument.  */
6339 
6340 bool
aligned_allocation_fn_p(tree t)6341 aligned_allocation_fn_p (tree t)
6342 {
6343   if (!aligned_new_threshold)
6344     return false;
6345 
6346   tree a = FUNCTION_ARG_CHAIN (t);
6347   return (a && same_type_p (TREE_VALUE (a), align_type_node));
6348 }
6349 
6350 /* True if T is std::destroying_delete_t.  */
6351 
6352 static bool
std_destroying_delete_t_p(tree t)6353 std_destroying_delete_t_p (tree t)
6354 {
6355   return (TYPE_CONTEXT (t) == std_node
6356 	  && id_equal (TYPE_IDENTIFIER (t), "destroying_delete_t"));
6357 }
6358 
6359 /* A deallocation function with at least two parameters whose second parameter
6360    type is of type std::destroying_delete_t is a destroying operator delete. A
6361    destroying operator delete shall be a class member function named operator
6362    delete. [ Note: Array deletion cannot use a destroying operator
6363    delete. --end note ] */
6364 
6365 tree
destroying_delete_p(tree t)6366 destroying_delete_p (tree t)
6367 {
6368   tree a = TYPE_ARG_TYPES (TREE_TYPE (t));
6369   if (!a || !TREE_CHAIN (a))
6370     return NULL_TREE;
6371   tree type = TREE_VALUE (TREE_CHAIN (a));
6372   return std_destroying_delete_t_p (type) ? type : NULL_TREE;
6373 }
6374 
6375 /* Returns true iff T, an element of an OVERLOAD chain, is a usual deallocation
6376    function (3.7.4.2 [basic.stc.dynamic.deallocation]) with a parameter of
6377    std::align_val_t.  */
6378 
6379 static bool
aligned_deallocation_fn_p(tree t)6380 aligned_deallocation_fn_p (tree t)
6381 {
6382   if (!aligned_new_threshold)
6383     return false;
6384 
6385   /* A template instance is never a usual deallocation function,
6386      regardless of its signature.  */
6387   if (TREE_CODE (t) == TEMPLATE_DECL
6388       || primary_template_specialization_p (t))
6389     return false;
6390 
6391   tree a = FUNCTION_ARG_CHAIN (t);
6392   if (destroying_delete_p (t))
6393     a = TREE_CHAIN (a);
6394   if (same_type_p (TREE_VALUE (a), align_type_node)
6395       && TREE_CHAIN (a) == void_list_node)
6396     return true;
6397   if (!same_type_p (TREE_VALUE (a), size_type_node))
6398     return false;
6399   a = TREE_CHAIN (a);
6400   if (a && same_type_p (TREE_VALUE (a), align_type_node)
6401       && TREE_CHAIN (a) == void_list_node)
6402     return true;
6403   return false;
6404 }
6405 
6406 /* Returns true if FN is a usual deallocation fn with a size_t parameter.  */
6407 
6408 static bool
sized_deallocation_fn_p(tree fn)6409 sized_deallocation_fn_p (tree fn)
6410 {
6411   tree t = FUNCTION_ARG_CHAIN (fn);
6412   if (destroying_delete_p (fn))
6413     t = TREE_CHAIN (t);
6414   if (!t || !same_type_p (TREE_VALUE (t), size_type_node))
6415     return false;
6416   t = TREE_CHAIN (t);
6417   if (t == void_list_node)
6418     return true;
6419   if (aligned_new_threshold && t
6420       && same_type_p (TREE_VALUE (t), align_type_node)
6421       && TREE_CHAIN (t) == void_list_node)
6422     return true;
6423   return false;
6424 }
6425 
6426 /* Returns true iff T, an element of an OVERLOAD chain, is a usual
6427    deallocation function (3.7.4.2 [basic.stc.dynamic.deallocation]).  */
6428 
6429 bool
usual_deallocation_fn_p(tree t)6430 usual_deallocation_fn_p (tree t)
6431 {
6432   /* A template instance is never a usual deallocation function,
6433      regardless of its signature.  */
6434   if (TREE_CODE (t) == TEMPLATE_DECL
6435       || primary_template_specialization_p (t))
6436     return false;
6437 
6438   /* A usual deallocation function is a deallocation function whose parameters
6439      after the first are
6440      - optionally, a parameter of type std::destroying_delete_t, then
6441      - optionally, a parameter of type std::size_t, then
6442      - optionally, a parameter of type std::align_val_t.  */
6443   bool global = DECL_NAMESPACE_SCOPE_P (t);
6444   tree chain = FUNCTION_ARG_CHAIN (t);
6445   if (!chain)
6446     return false;
6447   if (destroying_delete_p (t))
6448     chain = TREE_CHAIN (chain);
6449   if (chain == void_list_node
6450       || ((!global || flag_sized_deallocation)
6451 	  && sized_deallocation_fn_p (t)))
6452     return true;
6453   if (aligned_deallocation_fn_p (t))
6454     return true;
6455   return false;
6456 }
6457 
6458 /* Build a call to operator delete.  This has to be handled very specially,
6459    because the restrictions on what signatures match are different from all
6460    other call instances.  For a normal delete, only a delete taking (void *)
6461    or (void *, size_t) is accepted.  For a placement delete, only an exact
6462    match with the placement new is accepted.
6463 
6464    CODE is either DELETE_EXPR or VEC_DELETE_EXPR.
6465    ADDR is the pointer to be deleted.
6466    SIZE is the size of the memory block to be deleted.
6467    GLOBAL_P is true if the delete-expression should not consider
6468    class-specific delete operators.
6469    PLACEMENT is the corresponding placement new call, or NULL_TREE.
6470 
6471    If this call to "operator delete" is being generated as part to
6472    deallocate memory allocated via a new-expression (as per [expr.new]
6473    which requires that if the initialization throws an exception then
6474    we call a deallocation function), then ALLOC_FN is the allocation
6475    function.  */
6476 
6477 tree
build_op_delete_call(enum tree_code code,tree addr,tree size,bool global_p,tree placement,tree alloc_fn,tsubst_flags_t complain)6478 build_op_delete_call (enum tree_code code, tree addr, tree size,
6479 		      bool global_p, tree placement,
6480 		      tree alloc_fn, tsubst_flags_t complain)
6481 {
6482   tree fn = NULL_TREE;
6483   tree fns, fnname, type, t;
6484 
6485   if (addr == error_mark_node)
6486     return error_mark_node;
6487 
6488   type = strip_array_types (TREE_TYPE (TREE_TYPE (addr)));
6489 
6490   fnname = ovl_op_identifier (false, code);
6491 
6492   if (CLASS_TYPE_P (type)
6493       && COMPLETE_TYPE_P (complete_type (type))
6494       && !global_p)
6495     /* In [class.free]
6496 
6497        If the result of the lookup is ambiguous or inaccessible, or if
6498        the lookup selects a placement deallocation function, the
6499        program is ill-formed.
6500 
6501        Therefore, we ask lookup_fnfields to complain about ambiguity.  */
6502     {
6503       fns = lookup_fnfields (TYPE_BINFO (type), fnname, 1);
6504       if (fns == error_mark_node)
6505 	return error_mark_node;
6506     }
6507   else
6508     fns = NULL_TREE;
6509 
6510   if (fns == NULL_TREE)
6511     fns = lookup_name_nonclass (fnname);
6512 
6513   /* Strip const and volatile from addr.  */
6514   tree oaddr = addr;
6515   addr = cp_convert (ptr_type_node, addr, complain);
6516 
6517   if (placement)
6518     {
6519       /* "A declaration of a placement deallocation function matches the
6520 	 declaration of a placement allocation function if it has the same
6521 	 number of parameters and, after parameter transformations (8.3.5),
6522 	 all parameter types except the first are identical."
6523 
6524 	 So we build up the function type we want and ask instantiate_type
6525 	 to get it for us.  */
6526       t = FUNCTION_ARG_CHAIN (alloc_fn);
6527       t = tree_cons (NULL_TREE, ptr_type_node, t);
6528       t = build_function_type (void_type_node, t);
6529 
6530       fn = instantiate_type (t, fns, tf_none);
6531       if (fn == error_mark_node)
6532 	return NULL_TREE;
6533 
6534       fn = MAYBE_BASELINK_FUNCTIONS (fn);
6535 
6536       /* "If the lookup finds the two-parameter form of a usual deallocation
6537 	 function (3.7.4.2) and that function, considered as a placement
6538 	 deallocation function, would have been selected as a match for the
6539 	 allocation function, the program is ill-formed."  */
6540       if (second_parm_is_size_t (fn))
6541 	{
6542 	  const char *const msg1
6543 	    = G_("exception cleanup for this placement new selects "
6544 		 "non-placement operator delete");
6545 	  const char *const msg2
6546 	    = G_("%qD is a usual (non-placement) deallocation "
6547 		 "function in C++14 (or with -fsized-deallocation)");
6548 
6549 	  /* But if the class has an operator delete (void *), then that is
6550 	     the usual deallocation function, so we shouldn't complain
6551 	     about using the operator delete (void *, size_t).  */
6552 	  if (DECL_CLASS_SCOPE_P (fn))
6553 	    for (lkp_iterator iter (MAYBE_BASELINK_FUNCTIONS (fns));
6554 		 iter; ++iter)
6555 	      {
6556 		tree elt = *iter;
6557 		if (usual_deallocation_fn_p (elt)
6558 		    && FUNCTION_ARG_CHAIN (elt) == void_list_node)
6559 		  goto ok;
6560 	      }
6561 	  /* Before C++14 a two-parameter global deallocation function is
6562 	     always a placement deallocation function, but warn if
6563 	     -Wc++14-compat.  */
6564 	  else if (!flag_sized_deallocation)
6565 	    {
6566 	      if (complain & tf_warning)
6567 		{
6568 		  auto_diagnostic_group d;
6569 		  if (warning (OPT_Wc__14_compat, msg1))
6570 		    inform (DECL_SOURCE_LOCATION (fn), msg2, fn);
6571 		}
6572 	      goto ok;
6573 	    }
6574 
6575 	  if (complain & tf_warning_or_error)
6576 	    {
6577 	      auto_diagnostic_group d;
6578 	      if (permerror (input_location, msg1))
6579 		{
6580 		  /* Only mention C++14 for namespace-scope delete.  */
6581 		  if (DECL_NAMESPACE_SCOPE_P (fn))
6582 		    inform (DECL_SOURCE_LOCATION (fn), msg2, fn);
6583 		  else
6584 		    inform (DECL_SOURCE_LOCATION (fn),
6585 			    "%qD is a usual (non-placement) deallocation "
6586 			    "function", fn);
6587 		}
6588 	    }
6589 	  else
6590 	    return error_mark_node;
6591 	ok:;
6592 	}
6593     }
6594   else
6595     /* "Any non-placement deallocation function matches a non-placement
6596        allocation function. If the lookup finds a single matching
6597        deallocation function, that function will be called; otherwise, no
6598        deallocation function will be called."  */
6599     for (lkp_iterator iter (MAYBE_BASELINK_FUNCTIONS (fns)); iter; ++iter)
6600       {
6601 	tree elt = *iter;
6602 	if (usual_deallocation_fn_p (elt))
6603 	  {
6604 	    if (!fn)
6605 	      {
6606 		fn = elt;
6607 		continue;
6608 	      }
6609 
6610 	    /* -- If any of the deallocation functions is a destroying
6611 	       operator delete, all deallocation functions that are not
6612 	       destroying operator deletes are eliminated from further
6613 	       consideration.  */
6614 	    bool fn_destroying = destroying_delete_p (fn);
6615 	    bool elt_destroying = destroying_delete_p (elt);
6616 	    if (elt_destroying != fn_destroying)
6617 	      {
6618 		if (elt_destroying)
6619 		  fn = elt;
6620 		continue;
6621 	      }
6622 
6623 	    /* -- If the type has new-extended alignment, a function with a
6624 	       parameter of type std::align_val_t is preferred; otherwise a
6625 	       function without such a parameter is preferred. If exactly one
6626 	       preferred function is found, that function is selected and the
6627 	       selection process terminates. If more than one preferred
6628 	       function is found, all non-preferred functions are eliminated
6629 	       from further consideration.  */
6630 	    if (aligned_new_threshold)
6631 	      {
6632 		bool want_align = type_has_new_extended_alignment (type);
6633 		bool fn_align = aligned_deallocation_fn_p (fn);
6634 		bool elt_align = aligned_deallocation_fn_p (elt);
6635 
6636 		if (elt_align != fn_align)
6637 		  {
6638 		    if (want_align == elt_align)
6639 		      fn = elt;
6640 		    continue;
6641 		  }
6642 	      }
6643 
6644 	    /* -- If the deallocation functions have class scope, the one
6645 	       without a parameter of type std::size_t is selected.  */
6646 	    bool want_size;
6647 	    if (DECL_CLASS_SCOPE_P (fn))
6648 	      want_size = false;
6649 
6650 	    /* -- If the type is complete and if, for the second alternative
6651 	       (delete array) only, the operand is a pointer to a class type
6652 	       with a non-trivial destructor or a (possibly multi-dimensional)
6653 	       array thereof, the function with a parameter of type std::size_t
6654 	       is selected.
6655 
6656 	       -- Otherwise, it is unspecified whether a deallocation function
6657 	       with a parameter of type std::size_t is selected.  */
6658 	    else
6659 	      {
6660 		want_size = COMPLETE_TYPE_P (type);
6661 		if (code == VEC_DELETE_EXPR
6662 		    && !TYPE_VEC_NEW_USES_COOKIE (type))
6663 		  /* We need a cookie to determine the array size.  */
6664 		  want_size = false;
6665 	      }
6666 	    bool fn_size = sized_deallocation_fn_p (fn);
6667 	    bool elt_size = sized_deallocation_fn_p (elt);
6668 	    gcc_assert (fn_size != elt_size);
6669 	    if (want_size == elt_size)
6670 	      fn = elt;
6671 	  }
6672       }
6673 
6674   /* If we have a matching function, call it.  */
6675   if (fn)
6676     {
6677       gcc_assert (TREE_CODE (fn) == FUNCTION_DECL);
6678 
6679       /* If the FN is a member function, make sure that it is
6680 	 accessible.  */
6681       if (BASELINK_P (fns))
6682 	perform_or_defer_access_check (BASELINK_BINFO (fns), fn, fn,
6683 				       complain);
6684 
6685       /* Core issue 901: It's ok to new a type with deleted delete.  */
6686       if (DECL_DELETED_FN (fn) && alloc_fn)
6687 	return NULL_TREE;
6688 
6689       if (placement)
6690 	{
6691 	  /* The placement args might not be suitable for overload
6692 	     resolution at this point, so build the call directly.  */
6693 	  int nargs = call_expr_nargs (placement);
6694 	  tree *argarray = XALLOCAVEC (tree, nargs);
6695 	  int i;
6696 	  argarray[0] = addr;
6697 	  for (i = 1; i < nargs; i++)
6698 	    argarray[i] = CALL_EXPR_ARG (placement, i);
6699 	  if (!mark_used (fn, complain) && !(complain & tf_error))
6700 	    return error_mark_node;
6701 	  return build_cxx_call (fn, nargs, argarray, complain);
6702 	}
6703       else
6704 	{
6705 	  tree destroying = destroying_delete_p (fn);
6706 	  if (destroying)
6707 	    {
6708 	      /* Strip const and volatile from addr but retain the type of the
6709 		 object.  */
6710 	      tree rtype = TREE_TYPE (TREE_TYPE (oaddr));
6711 	      rtype = cv_unqualified (rtype);
6712 	      rtype = TYPE_POINTER_TO (rtype);
6713 	      addr = cp_convert (rtype, oaddr, complain);
6714 	      destroying = build_functional_cast (destroying, NULL_TREE,
6715 						  complain);
6716 	    }
6717 
6718 	  tree ret;
6719 	  vec<tree, va_gc> *args = make_tree_vector ();
6720 	  args->quick_push (addr);
6721 	  if (destroying)
6722 	    args->quick_push (destroying);
6723 	  if (sized_deallocation_fn_p (fn))
6724 	    args->quick_push (size);
6725 	  if (aligned_deallocation_fn_p (fn))
6726 	    {
6727 	      tree al = build_int_cst (align_type_node, TYPE_ALIGN_UNIT (type));
6728 	      args->quick_push (al);
6729 	    }
6730 	  ret = cp_build_function_call_vec (fn, &args, complain);
6731 	  release_tree_vector (args);
6732 	  return ret;
6733 	}
6734     }
6735 
6736   /* [expr.new]
6737 
6738      If no unambiguous matching deallocation function can be found,
6739      propagating the exception does not cause the object's memory to
6740      be freed.  */
6741   if (alloc_fn)
6742     {
6743       if ((complain & tf_warning)
6744 	  && !placement)
6745 	warning (0, "no corresponding deallocation function for %qD",
6746 		 alloc_fn);
6747       return NULL_TREE;
6748     }
6749 
6750   if (complain & tf_error)
6751     error ("no suitable %<operator %s%> for %qT",
6752 	   OVL_OP_INFO (false, code)->name, type);
6753   return error_mark_node;
6754 }
6755 
6756 /* Issue diagnostics about a disallowed access of DECL, using DIAG_DECL
6757    in the diagnostics.
6758 
6759    If ISSUE_ERROR is true, then issue an error about the
6760    access, followed by a note showing the declaration.
6761    Otherwise, just show the note.  */
6762 
6763 void
complain_about_access(tree decl,tree diag_decl,bool issue_error)6764 complain_about_access (tree decl, tree diag_decl, bool issue_error)
6765 {
6766   if (TREE_PRIVATE (decl))
6767     {
6768       if (issue_error)
6769 	error ("%q#D is private within this context", diag_decl);
6770       inform (DECL_SOURCE_LOCATION (diag_decl),
6771 	      "declared private here");
6772     }
6773   else if (TREE_PROTECTED (decl))
6774     {
6775       if (issue_error)
6776 	error ("%q#D is protected within this context", diag_decl);
6777       inform (DECL_SOURCE_LOCATION (diag_decl),
6778 	      "declared protected here");
6779     }
6780   else
6781     {
6782       if (issue_error)
6783 	error ("%q#D is inaccessible within this context", diag_decl);
6784       inform (DECL_SOURCE_LOCATION (diag_decl), "declared here");
6785     }
6786 }
6787 
6788 /* If the current scope isn't allowed to access DECL along
6789    BASETYPE_PATH, give an error.  The most derived class in
6790    BASETYPE_PATH is the one used to qualify DECL. DIAG_DECL is
6791    the declaration to use in the error diagnostic.  */
6792 
6793 bool
enforce_access(tree basetype_path,tree decl,tree diag_decl,tsubst_flags_t complain,access_failure_info * afi)6794 enforce_access (tree basetype_path, tree decl, tree diag_decl,
6795 		tsubst_flags_t complain, access_failure_info *afi)
6796 {
6797   gcc_assert (TREE_CODE (basetype_path) == TREE_BINFO);
6798 
6799   if (flag_new_inheriting_ctors
6800       && DECL_INHERITED_CTOR (decl))
6801     {
6802       /* 7.3.3/18: The additional constructors are accessible if they would be
6803 	 accessible when used to construct an object of the corresponding base
6804 	 class.  */
6805       decl = strip_inheriting_ctors (decl);
6806       basetype_path = lookup_base (basetype_path, DECL_CONTEXT (decl),
6807 				   ba_any, NULL, complain);
6808     }
6809 
6810   if (!accessible_p (basetype_path, decl, true))
6811     {
6812       if (flag_new_inheriting_ctors)
6813 	diag_decl = strip_inheriting_ctors (diag_decl);
6814       if (complain & tf_error)
6815 	complain_about_access (decl, diag_decl, true);
6816       if (afi)
6817 	afi->record_access_failure (basetype_path, decl, diag_decl);
6818       return false;
6819     }
6820 
6821   return true;
6822 }
6823 
6824 /* Initialize a temporary of type TYPE with EXPR.  The FLAGS are a
6825    bitwise or of LOOKUP_* values.  If any errors are warnings are
6826    generated, set *DIAGNOSTIC_FN to "error" or "warning",
6827    respectively.  If no diagnostics are generated, set *DIAGNOSTIC_FN
6828    to NULL.  */
6829 
6830 static tree
build_temp(tree expr,tree type,int flags,diagnostic_t * diagnostic_kind,tsubst_flags_t complain)6831 build_temp (tree expr, tree type, int flags,
6832 	    diagnostic_t *diagnostic_kind, tsubst_flags_t complain)
6833 {
6834   int savew, savee;
6835   vec<tree, va_gc> *args;
6836 
6837   *diagnostic_kind = DK_UNSPECIFIED;
6838 
6839   /* If the source is a packed field, calling the copy constructor will require
6840      binding the field to the reference parameter to the copy constructor, and
6841      we'll end up with an infinite loop.  If we can use a bitwise copy, then
6842      do that now.  */
6843   if ((lvalue_kind (expr) & clk_packed)
6844       && CLASS_TYPE_P (TREE_TYPE (expr))
6845       && !type_has_nontrivial_copy_init (TREE_TYPE (expr)))
6846     return get_target_expr_sfinae (expr, complain);
6847 
6848   /* In decltype, we might have decided not to wrap this call in a TARGET_EXPR.
6849      But it turns out to be a subexpression, so perform temporary
6850      materialization now.  */
6851   if (TREE_CODE (expr) == CALL_EXPR
6852       && CLASS_TYPE_P (type)
6853       && same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (expr)))
6854     expr = build_cplus_new (type, expr, complain);
6855 
6856   savew = warningcount + werrorcount, savee = errorcount;
6857   args = make_tree_vector_single (expr);
6858   expr = build_special_member_call (NULL_TREE, complete_ctor_identifier,
6859 				    &args, type, flags, complain);
6860   release_tree_vector (args);
6861   if (warningcount + werrorcount > savew)
6862     *diagnostic_kind = DK_WARNING;
6863   else if (errorcount > savee)
6864     *diagnostic_kind = DK_ERROR;
6865   return expr;
6866 }
6867 
6868 /* Get any location for EXPR, falling back to input_location.
6869 
6870    If the result is in a system header and is the virtual location for
6871    a token coming from the expansion of a macro, unwind it to the
6872    location of the expansion point of the macro (e.g. to avoid the
6873    diagnostic being suppressed for expansions of NULL where "NULL" is
6874    in a system header).  */
6875 
6876 static location_t
get_location_for_expr_unwinding_for_system_header(tree expr)6877 get_location_for_expr_unwinding_for_system_header (tree expr)
6878 {
6879   location_t loc = EXPR_LOC_OR_LOC (expr, input_location);
6880   loc = expansion_point_location_if_in_system_header (loc);
6881   return loc;
6882 }
6883 
6884 /* Perform warnings about peculiar, but valid, conversions from/to NULL.
6885    Also handle a subset of zero as null warnings.
6886    EXPR is implicitly converted to type TOTYPE.
6887    FN and ARGNUM are used for diagnostics.  */
6888 
6889 static void
conversion_null_warnings(tree totype,tree expr,tree fn,int argnum)6890 conversion_null_warnings (tree totype, tree expr, tree fn, int argnum)
6891 {
6892   /* Issue warnings about peculiar, but valid, uses of NULL.  */
6893   if (TREE_CODE (totype) != BOOLEAN_TYPE
6894       && ARITHMETIC_TYPE_P (totype)
6895       && null_node_p (expr))
6896     {
6897       location_t loc = get_location_for_expr_unwinding_for_system_header (expr);
6898       if (fn)
6899 	{
6900 	  auto_diagnostic_group d;
6901 	  if (warning_at (loc, OPT_Wconversion_null,
6902 			  "passing NULL to non-pointer argument %P of %qD",
6903 			  argnum, fn))
6904 	    inform (get_fndecl_argument_location (fn, argnum),
6905 		    "  declared here");
6906 	}
6907       else
6908 	warning_at (loc, OPT_Wconversion_null,
6909 		    "converting to non-pointer type %qT from NULL", totype);
6910     }
6911 
6912   /* Issue warnings if "false" is converted to a NULL pointer */
6913   else if (TREE_CODE (TREE_TYPE (expr)) == BOOLEAN_TYPE
6914 	   && TYPE_PTR_P (totype))
6915     {
6916       location_t loc = get_location_for_expr_unwinding_for_system_header (expr);
6917       if (fn)
6918 	{
6919 	  auto_diagnostic_group d;
6920 	  if (warning_at (loc, OPT_Wconversion_null,
6921 			  "converting %<false%> to pointer type for argument "
6922 			  "%P of %qD", argnum, fn))
6923 	    inform (get_fndecl_argument_location (fn, argnum),
6924 		    "  declared here");
6925 	}
6926       else
6927 	warning_at (loc, OPT_Wconversion_null,
6928 		    "converting %<false%> to pointer type %qT", totype);
6929     }
6930   /* Handle zero as null pointer warnings for cases other
6931      than EQ_EXPR and NE_EXPR */
6932   else if ((TYPE_PTR_OR_PTRMEM_P (totype) || NULLPTR_TYPE_P (totype))
6933 	   && null_ptr_cst_p (expr))
6934     {
6935       location_t loc = get_location_for_expr_unwinding_for_system_header (expr);
6936       maybe_warn_zero_as_null_pointer_constant (expr, loc);
6937     }
6938 }
6939 
6940 /* We gave a diagnostic during a conversion.  If this was in the second
6941    standard conversion sequence of a user-defined conversion sequence, say
6942    which user-defined conversion.  */
6943 
6944 static void
maybe_print_user_conv_context(conversion * convs)6945 maybe_print_user_conv_context (conversion *convs)
6946 {
6947   if (convs->user_conv_p)
6948     for (conversion *t = convs; t; t = next_conversion (t))
6949       if (t->kind == ck_user)
6950 	{
6951 	  print_z_candidate (0, "  after user-defined conversion:",
6952 			     t->cand);
6953 	  break;
6954 	}
6955 }
6956 
6957 /* Locate the parameter with the given index within FNDECL.
6958    ARGNUM is zero based, -1 indicates the `this' argument of a method.
6959    Return the location of the FNDECL itself if there are problems.  */
6960 
6961 location_t
get_fndecl_argument_location(tree fndecl,int argnum)6962 get_fndecl_argument_location (tree fndecl, int argnum)
6963 {
6964   /* The locations of implicitly-declared functions are likely to be
6965      more meaningful than those of their parameters.  */
6966   if (DECL_ARTIFICIAL (fndecl))
6967     return DECL_SOURCE_LOCATION (fndecl);
6968 
6969   int i;
6970   tree param;
6971 
6972   /* Locate param by index within DECL_ARGUMENTS (fndecl).  */
6973   for (i = 0, param = FUNCTION_FIRST_USER_PARM (fndecl);
6974        i < argnum && param;
6975        i++, param = TREE_CHAIN (param))
6976     ;
6977 
6978   /* If something went wrong (e.g. if we have a builtin and thus no arguments),
6979      return the location of FNDECL.  */
6980   if (param == NULL)
6981     return DECL_SOURCE_LOCATION (fndecl);
6982 
6983   return DECL_SOURCE_LOCATION (param);
6984 }
6985 
6986 /* If FNDECL is non-NULL, issue a note highlighting ARGNUM
6987    within its declaration (or the fndecl itself if something went
6988    wrong).  */
6989 
6990 void
maybe_inform_about_fndecl_for_bogus_argument_init(tree fn,int argnum)6991 maybe_inform_about_fndecl_for_bogus_argument_init (tree fn, int argnum)
6992 {
6993   if (fn)
6994     inform (get_fndecl_argument_location (fn, argnum),
6995 	    "  initializing argument %P of %qD", argnum, fn);
6996 }
6997 
6998 /* Perform the conversions in CONVS on the expression EXPR.  FN and
6999    ARGNUM are used for diagnostics.  ARGNUM is zero based, -1
7000    indicates the `this' argument of a method.  INNER is nonzero when
7001    being called to continue a conversion chain. It is negative when a
7002    reference binding will be applied, positive otherwise.  If
7003    ISSUE_CONVERSION_WARNINGS is true, warnings about suspicious
7004    conversions will be emitted if appropriate.  If C_CAST_P is true,
7005    this conversion is coming from a C-style cast; in that case,
7006    conversions to inaccessible bases are permitted.  */
7007 
7008 static tree
convert_like_real(conversion * convs,tree expr,tree fn,int argnum,bool issue_conversion_warnings,bool c_cast_p,tsubst_flags_t complain)7009 convert_like_real (conversion *convs, tree expr, tree fn, int argnum,
7010 		   bool issue_conversion_warnings,
7011 		   bool c_cast_p, tsubst_flags_t complain)
7012 {
7013   tree totype = convs->type;
7014   diagnostic_t diag_kind;
7015   int flags;
7016   location_t loc = cp_expr_loc_or_loc (expr, input_location);
7017 
7018   if (convs->bad_p && !(complain & tf_error))
7019     return error_mark_node;
7020 
7021   if (convs->bad_p
7022       && convs->kind != ck_user
7023       && convs->kind != ck_list
7024       && convs->kind != ck_ambig
7025       && (convs->kind != ck_ref_bind
7026 	  || (convs->user_conv_p && next_conversion (convs)->bad_p))
7027       && (convs->kind != ck_rvalue
7028 	  || SCALAR_TYPE_P (totype))
7029       && convs->kind != ck_base)
7030     {
7031       bool complained = false;
7032       conversion *t = convs;
7033 
7034       /* Give a helpful error if this is bad because of excess braces.  */
7035       if (BRACE_ENCLOSED_INITIALIZER_P (expr)
7036 	  && SCALAR_TYPE_P (totype)
7037 	  && CONSTRUCTOR_NELTS (expr) > 0
7038 	  && BRACE_ENCLOSED_INITIALIZER_P (CONSTRUCTOR_ELT (expr, 0)->value))
7039 	{
7040 	  complained = permerror (loc, "too many braces around initializer "
7041 				  "for %qT", totype);
7042 	  while (BRACE_ENCLOSED_INITIALIZER_P (expr)
7043 		 && CONSTRUCTOR_NELTS (expr) == 1)
7044 	    expr = CONSTRUCTOR_ELT (expr, 0)->value;
7045 	}
7046 
7047       /* Give a helpful error if this is bad because a conversion to bool
7048 	 from std::nullptr_t requires direct-initialization.  */
7049       if (NULLPTR_TYPE_P (TREE_TYPE (expr))
7050 	  && TREE_CODE (totype) == BOOLEAN_TYPE)
7051 	complained = permerror (loc, "converting to %qH from %qI requires "
7052 				"direct-initialization",
7053 				totype, TREE_TYPE (expr));
7054 
7055       for (; t ; t = next_conversion (t))
7056 	{
7057 	  if (t->kind == ck_user && t->cand->reason)
7058 	    {
7059 	      auto_diagnostic_group d;
7060 	      complained = permerror (loc, "invalid user-defined conversion "
7061 				      "from %qH to %qI", TREE_TYPE (expr),
7062 				      totype);
7063 	      if (complained)
7064 		print_z_candidate (loc, "candidate is:", t->cand);
7065 	      expr = convert_like_real (t, expr, fn, argnum,
7066 					/*issue_conversion_warnings=*/false,
7067 					/*c_cast_p=*/false,
7068 					complain);
7069 	      if (convs->kind == ck_ref_bind)
7070 		expr = convert_to_reference (totype, expr, CONV_IMPLICIT,
7071 					     LOOKUP_NORMAL, NULL_TREE,
7072 					     complain);
7073 	      else
7074 		expr = cp_convert (totype, expr, complain);
7075 	      if (complained)
7076 		maybe_inform_about_fndecl_for_bogus_argument_init (fn, argnum);
7077 	      return expr;
7078 	    }
7079 	  else if (t->kind == ck_user || !t->bad_p)
7080 	    {
7081 	      expr = convert_like_real (t, expr, fn, argnum,
7082 					/*issue_conversion_warnings=*/false,
7083 					/*c_cast_p=*/false,
7084 					complain);
7085 	      break;
7086 	    }
7087 	  else if (t->kind == ck_ambig)
7088 	    return convert_like_real (t, expr, fn, argnum,
7089 				      /*issue_conversion_warnings=*/false,
7090 				      /*c_cast_p=*/false,
7091 				      complain);
7092 	  else if (t->kind == ck_identity)
7093 	    break;
7094 	}
7095       if (!complained)
7096 	{
7097 	  range_label_for_type_mismatch label (TREE_TYPE (expr), totype);
7098 	  gcc_rich_location richloc (loc, &label);
7099 	  complained = permerror (&richloc,
7100 				  "invalid conversion from %qH to %qI",
7101 				  TREE_TYPE (expr), totype);
7102 	}
7103       if (complained)
7104 	maybe_inform_about_fndecl_for_bogus_argument_init (fn, argnum);
7105 
7106       return cp_convert (totype, expr, complain);
7107     }
7108 
7109   if (issue_conversion_warnings && (complain & tf_warning))
7110     conversion_null_warnings (totype, expr, fn, argnum);
7111 
7112   switch (convs->kind)
7113     {
7114     case ck_user:
7115       {
7116 	struct z_candidate *cand = convs->cand;
7117 
7118 	if (cand == NULL)
7119 	  /* We chose the surrogate function from add_conv_candidate, now we
7120 	     actually need to build the conversion.  */
7121 	  cand = build_user_type_conversion_1 (totype, expr,
7122 					       LOOKUP_NO_CONVERSION, complain);
7123 
7124 	tree convfn = cand->fn;
7125 
7126 	/* When converting from an init list we consider explicit
7127 	   constructors, but actually trying to call one is an error.  */
7128 	if (DECL_NONCONVERTING_P (convfn) && DECL_CONSTRUCTOR_P (convfn)
7129 	    && BRACE_ENCLOSED_INITIALIZER_P (expr)
7130 	    /* Unless this is for direct-list-initialization.  */
7131 	    && (!CONSTRUCTOR_IS_DIRECT_INIT (expr) || convs->need_temporary_p)
7132 	    /* And in C++98 a default constructor can't be explicit.  */
7133 	    && cxx_dialect >= cxx11)
7134 	  {
7135 	    if (!(complain & tf_error))
7136 	      return error_mark_node;
7137 	    location_t loc = location_of (expr);
7138 	    if (CONSTRUCTOR_NELTS (expr) == 0
7139 		&& FUNCTION_FIRST_USER_PARMTYPE (convfn) != void_list_node)
7140 	      {
7141 		auto_diagnostic_group d;
7142 		if (pedwarn (loc, 0, "converting to %qT from initializer list "
7143 			     "would use explicit constructor %qD",
7144 			     totype, convfn))
7145 		  inform (loc, "in C++11 and above a default constructor "
7146 			  "can be explicit");
7147 	      }
7148 	    else
7149 	      error ("converting to %qT from initializer list would use "
7150 		     "explicit constructor %qD", totype, convfn);
7151 	  }
7152 
7153 	/* If we're initializing from {}, it's value-initialization.  */
7154 	if (BRACE_ENCLOSED_INITIALIZER_P (expr)
7155 	    && CONSTRUCTOR_NELTS (expr) == 0
7156 	    && TYPE_HAS_DEFAULT_CONSTRUCTOR (totype)
7157 	    && !processing_template_decl)
7158 	  {
7159 	    bool direct = CONSTRUCTOR_IS_DIRECT_INIT (expr);
7160 	    if (abstract_virtuals_error_sfinae (NULL_TREE, totype, complain))
7161 	      return error_mark_node;
7162 	    expr = build_value_init (totype, complain);
7163 	    expr = get_target_expr_sfinae (expr, complain);
7164 	    if (expr != error_mark_node)
7165 	      {
7166 		TARGET_EXPR_LIST_INIT_P (expr) = true;
7167 		TARGET_EXPR_DIRECT_INIT_P (expr) = direct;
7168 	      }
7169 	    return expr;
7170 	  }
7171 
7172 	/* We don't know here whether EXPR is being used as an lvalue or
7173 	   rvalue, but we know it's read.  */
7174 	mark_exp_read (expr);
7175 
7176 	/* Pass LOOKUP_NO_CONVERSION so rvalue/base handling knows not to allow
7177 	   any more UDCs.  */
7178 	expr = build_over_call (cand, LOOKUP_NORMAL|LOOKUP_NO_CONVERSION,
7179 				complain);
7180 
7181 	/* If this is a constructor or a function returning an aggr type,
7182 	   we need to build up a TARGET_EXPR.  */
7183 	if (DECL_CONSTRUCTOR_P (convfn))
7184 	  {
7185 	    expr = build_cplus_new (totype, expr, complain);
7186 
7187 	    /* Remember that this was list-initialization.  */
7188 	    if (convs->check_narrowing && expr != error_mark_node)
7189 	      TARGET_EXPR_LIST_INIT_P (expr) = true;
7190 	  }
7191 
7192 	return expr;
7193       }
7194     case ck_identity:
7195       if (BRACE_ENCLOSED_INITIALIZER_P (expr))
7196 	{
7197 	  int nelts = CONSTRUCTOR_NELTS (expr);
7198 	  if (nelts == 0)
7199 	    expr = build_value_init (totype, complain);
7200 	  else if (nelts == 1)
7201 	    expr = CONSTRUCTOR_ELT (expr, 0)->value;
7202 	  else
7203 	    gcc_unreachable ();
7204 	}
7205       expr = mark_use (expr, /*rvalue_p=*/!convs->rvaluedness_matches_p,
7206 		       /*read_p=*/true, UNKNOWN_LOCATION,
7207 		       /*reject_builtin=*/true);
7208 
7209       if (type_unknown_p (expr))
7210 	expr = instantiate_type (totype, expr, complain);
7211       if (expr == null_node
7212 	  && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (totype))
7213 	/* If __null has been converted to an integer type, we do not want to
7214 	   continue to warn about uses of EXPR as an integer, rather than as a
7215 	   pointer.  */
7216 	expr = build_int_cst (totype, 0);
7217       return expr;
7218     case ck_ambig:
7219       /* We leave bad_p off ck_ambig because overload resolution considers
7220 	 it valid, it just fails when we try to perform it.  So we need to
7221          check complain here, too.  */
7222       if (complain & tf_error)
7223 	{
7224 	  /* Call build_user_type_conversion again for the error.  */
7225 	  int flags = (convs->need_temporary_p
7226 		       ? LOOKUP_IMPLICIT : LOOKUP_NORMAL);
7227 	  build_user_type_conversion (totype, convs->u.expr, flags, complain);
7228 	  gcc_assert (seen_error ());
7229 	  maybe_inform_about_fndecl_for_bogus_argument_init (fn, argnum);
7230 	}
7231       return error_mark_node;
7232 
7233     case ck_list:
7234       {
7235 	/* Conversion to std::initializer_list<T>.  */
7236 	tree elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (totype), 0);
7237 	unsigned len = CONSTRUCTOR_NELTS (expr);
7238 	tree array;
7239 
7240 	if (len)
7241 	  {
7242 	    tree val; unsigned ix;
7243 
7244 	    tree new_ctor = build_constructor (init_list_type_node, NULL);
7245 
7246 	    /* Convert all the elements.  */
7247 	    FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expr), ix, val)
7248 	      {
7249 		tree sub = convert_like_real (convs->u.list[ix], val, fn,
7250 					      argnum, false, false, complain);
7251 		if (sub == error_mark_node)
7252 		  return sub;
7253 		if (!BRACE_ENCLOSED_INITIALIZER_P (val)
7254 		    && !check_narrowing (TREE_TYPE (sub), val, complain))
7255 		  return error_mark_node;
7256 		CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_ctor),
7257 					NULL_TREE, sub);
7258 		if (!TREE_CONSTANT (sub))
7259 		  TREE_CONSTANT (new_ctor) = false;
7260 	      }
7261 	    /* Build up the array.  */
7262 	    elttype = cp_build_qualified_type
7263 	      (elttype, cp_type_quals (elttype) | TYPE_QUAL_CONST);
7264 	    array = build_array_of_n_type (elttype, len);
7265 	    array = finish_compound_literal (array, new_ctor, complain);
7266 	    /* Take the address explicitly rather than via decay_conversion
7267 	       to avoid the error about taking the address of a temporary.  */
7268 	    array = cp_build_addr_expr (array, complain);
7269 	  }
7270 	else
7271 	  array = nullptr_node;
7272 
7273 	array = cp_convert (build_pointer_type (elttype), array, complain);
7274 	if (array == error_mark_node)
7275 	  return error_mark_node;
7276 
7277 	/* Build up the initializer_list object.  Note: fail gracefully
7278 	   if the object cannot be completed because, for example, no
7279 	   definition is provided (c++/80956).  */
7280 	totype = complete_type_or_maybe_complain (totype, NULL_TREE, complain);
7281 	if (!totype)
7282 	  return error_mark_node;
7283 	tree field = next_initializable_field (TYPE_FIELDS (totype));
7284 	vec<constructor_elt, va_gc> *vec = NULL;
7285 	CONSTRUCTOR_APPEND_ELT (vec, field, array);
7286 	field = next_initializable_field (DECL_CHAIN (field));
7287 	CONSTRUCTOR_APPEND_ELT (vec, field, size_int (len));
7288 	tree new_ctor = build_constructor (totype, vec);
7289 	return get_target_expr_sfinae (new_ctor, complain);
7290       }
7291 
7292     case ck_aggr:
7293       if (TREE_CODE (totype) == COMPLEX_TYPE)
7294 	{
7295 	  tree real = CONSTRUCTOR_ELT (expr, 0)->value;
7296 	  tree imag = CONSTRUCTOR_ELT (expr, 1)->value;
7297 	  real = perform_implicit_conversion (TREE_TYPE (totype),
7298 					      real, complain);
7299 	  imag = perform_implicit_conversion (TREE_TYPE (totype),
7300 					      imag, complain);
7301 	  expr = build2 (COMPLEX_EXPR, totype, real, imag);
7302 	  return expr;
7303 	}
7304       expr = reshape_init (totype, expr, complain);
7305       expr = get_target_expr_sfinae (digest_init (totype, expr, complain),
7306 				     complain);
7307       if (expr != error_mark_node)
7308 	TARGET_EXPR_LIST_INIT_P (expr) = true;
7309       return expr;
7310 
7311     default:
7312       break;
7313     };
7314 
7315   expr = convert_like_real (next_conversion (convs), expr, fn, argnum,
7316 			    convs->kind == ck_ref_bind
7317 			    ? issue_conversion_warnings : false,
7318 			    c_cast_p, complain);
7319   if (expr == error_mark_node)
7320     return error_mark_node;
7321 
7322   switch (convs->kind)
7323     {
7324     case ck_rvalue:
7325       expr = decay_conversion (expr, complain);
7326       if (expr == error_mark_node)
7327 	{
7328 	  if (complain & tf_error)
7329 	    {
7330 	      auto_diagnostic_group d;
7331 	      maybe_print_user_conv_context (convs);
7332 	      maybe_inform_about_fndecl_for_bogus_argument_init (fn, argnum);
7333 	    }
7334 	  return error_mark_node;
7335 	}
7336 
7337       if (! MAYBE_CLASS_TYPE_P (totype))
7338 	return expr;
7339 
7340       /* Don't introduce copies when passing arguments along to the inherited
7341 	 constructor.  */
7342       if (current_function_decl
7343 	  && flag_new_inheriting_ctors
7344 	  && DECL_INHERITED_CTOR (current_function_decl))
7345 	return expr;
7346 
7347       if (TREE_CODE (expr) == TARGET_EXPR
7348 	  && TARGET_EXPR_LIST_INIT_P (expr))
7349 	/* Copy-list-initialization doesn't actually involve a copy.  */
7350 	return expr;
7351 
7352       /* Fall through.  */
7353     case ck_base:
7354       if (convs->kind == ck_base && !convs->need_temporary_p)
7355 	{
7356 	  /* We are going to bind a reference directly to a base-class
7357 	     subobject of EXPR.  */
7358 	  /* Build an expression for `*((base*) &expr)'.  */
7359 	  expr = convert_to_base (expr, totype,
7360 				  !c_cast_p, /*nonnull=*/true, complain);
7361 	  return expr;
7362 	}
7363 
7364       /* Copy-initialization where the cv-unqualified version of the source
7365 	 type is the same class as, or a derived class of, the class of the
7366 	 destination [is treated as direct-initialization].  [dcl.init] */
7367       flags = LOOKUP_NORMAL;
7368       if (convs->user_conv_p)
7369 	/* This conversion is being done in the context of a user-defined
7370 	   conversion (i.e. the second step of copy-initialization), so
7371 	   don't allow any more.  */
7372 	flags |= LOOKUP_NO_CONVERSION;
7373       else
7374 	flags |= LOOKUP_ONLYCONVERTING;
7375       if (convs->rvaluedness_matches_p)
7376 	/* standard_conversion got LOOKUP_PREFER_RVALUE.  */
7377 	flags |= LOOKUP_PREFER_RVALUE;
7378       expr = build_temp (expr, totype, flags, &diag_kind, complain);
7379       if (diag_kind && complain)
7380 	{
7381 	  auto_diagnostic_group d;
7382 	  maybe_print_user_conv_context (convs);
7383 	  maybe_inform_about_fndecl_for_bogus_argument_init (fn, argnum);
7384 	}
7385 
7386       return build_cplus_new (totype, expr, complain);
7387 
7388     case ck_ref_bind:
7389       {
7390 	tree ref_type = totype;
7391 
7392 	if (convs->bad_p && !next_conversion (convs)->bad_p)
7393 	  {
7394 	    tree extype = TREE_TYPE (expr);
7395 	    auto_diagnostic_group d;
7396 	    if (TYPE_REF_IS_RVALUE (ref_type)
7397 		&& lvalue_p (expr))
7398 	      error_at (loc, "cannot bind rvalue reference of type %qH to "
7399                         "lvalue of type %qI", totype, extype);
7400 	    else if (!TYPE_REF_IS_RVALUE (ref_type) && !lvalue_p (expr)
7401 		     && !CP_TYPE_CONST_NON_VOLATILE_P (TREE_TYPE (ref_type)))
7402 	      error_at (loc, "cannot bind non-const lvalue reference of "
7403 			"type %qH to an rvalue of type %qI", totype, extype);
7404 	    else if (!reference_compatible_p (TREE_TYPE (totype), extype))
7405 	      error_at (loc, "binding reference of type %qH to %qI "
7406 			"discards qualifiers", totype, extype);
7407 	    else
7408 	      gcc_unreachable ();
7409 	    maybe_print_user_conv_context (convs);
7410 	    maybe_inform_about_fndecl_for_bogus_argument_init (fn, argnum);
7411 
7412 	    return error_mark_node;
7413 	  }
7414 
7415 	/* If necessary, create a temporary.
7416 
7417            VA_ARG_EXPR and CONSTRUCTOR expressions are special cases
7418            that need temporaries, even when their types are reference
7419            compatible with the type of reference being bound, so the
7420            upcoming call to cp_build_addr_expr doesn't fail.  */
7421 	if (convs->need_temporary_p
7422 	    || TREE_CODE (expr) == CONSTRUCTOR
7423 	    || TREE_CODE (expr) == VA_ARG_EXPR)
7424 	  {
7425 	    /* Otherwise, a temporary of type "cv1 T1" is created and
7426 	       initialized from the initializer expression using the rules
7427 	       for a non-reference copy-initialization (8.5).  */
7428 
7429 	    tree type = TREE_TYPE (ref_type);
7430 	    cp_lvalue_kind lvalue = lvalue_kind (expr);
7431 
7432 	    gcc_assert (same_type_ignoring_top_level_qualifiers_p
7433 			(type, next_conversion (convs)->type));
7434 	    if (!CP_TYPE_CONST_NON_VOLATILE_P (type)
7435 		&& !TYPE_REF_IS_RVALUE (ref_type))
7436 	      {
7437 		/* If the reference is volatile or non-const, we
7438 		   cannot create a temporary.  */
7439 		if (lvalue & clk_bitfield)
7440 		  error_at (loc, "cannot bind bitfield %qE to %qT",
7441 			    expr, ref_type);
7442 		else if (lvalue & clk_packed)
7443 		  error_at (loc, "cannot bind packed field %qE to %qT",
7444 			    expr, ref_type);
7445 		else
7446 		  error_at (loc, "cannot bind rvalue %qE to %qT",
7447 			    expr, ref_type);
7448 		return error_mark_node;
7449 	      }
7450 	    /* If the source is a packed field, and we must use a copy
7451 	       constructor, then building the target expr will require
7452 	       binding the field to the reference parameter to the
7453 	       copy constructor, and we'll end up with an infinite
7454 	       loop.  If we can use a bitwise copy, then we'll be
7455 	       OK.  */
7456 	    if ((lvalue & clk_packed)
7457 		&& CLASS_TYPE_P (type)
7458 		&& type_has_nontrivial_copy_init (type))
7459 	      {
7460 		error_at (loc, "cannot bind packed field %qE to %qT",
7461 			  expr, ref_type);
7462 		return error_mark_node;
7463 	      }
7464 	    if (lvalue & clk_bitfield)
7465 	      {
7466 		expr = convert_bitfield_to_declared_type (expr);
7467 		expr = fold_convert (type, expr);
7468 	      }
7469 	    expr = build_target_expr_with_type (expr, type, complain);
7470 	  }
7471 
7472 	/* Take the address of the thing to which we will bind the
7473 	   reference.  */
7474 	expr = cp_build_addr_expr (expr, complain);
7475 	if (expr == error_mark_node)
7476 	  return error_mark_node;
7477 
7478 	/* Convert it to a pointer to the type referred to by the
7479 	   reference.  This will adjust the pointer if a derived to
7480 	   base conversion is being performed.  */
7481 	expr = cp_convert (build_pointer_type (TREE_TYPE (ref_type)),
7482 			   expr, complain);
7483 	/* Convert the pointer to the desired reference type.  */
7484 	return build_nop (ref_type, expr);
7485       }
7486 
7487     case ck_lvalue:
7488       return decay_conversion (expr, complain);
7489 
7490     case ck_fnptr:
7491       /* ??? Should the address of a transaction-safe pointer point to the TM
7492         clone, and this conversion look up the primary function?  */
7493       return build_nop (totype, expr);
7494 
7495     case ck_qual:
7496       /* Warn about deprecated conversion if appropriate.  */
7497       if (complain & tf_warning)
7498 	string_conv_p (totype, expr, 1);
7499       break;
7500 
7501     case ck_ptr:
7502       if (convs->base_p)
7503 	expr = convert_to_base (expr, totype, !c_cast_p,
7504 				/*nonnull=*/false, complain);
7505       return build_nop (totype, expr);
7506 
7507     case ck_pmem:
7508       return convert_ptrmem (totype, expr, /*allow_inverse_p=*/false,
7509 			     c_cast_p, complain);
7510 
7511     default:
7512       break;
7513     }
7514 
7515   if (convs->check_narrowing
7516       && !check_narrowing (totype, expr, complain,
7517 			   convs->check_narrowing_const_only))
7518     return error_mark_node;
7519 
7520   warning_sentinel w (warn_zero_as_null_pointer_constant);
7521   if (issue_conversion_warnings)
7522     expr = cp_convert_and_check (totype, expr, complain);
7523   else
7524     expr = cp_convert (totype, expr, complain);
7525 
7526   return expr;
7527 }
7528 
7529 /* ARG is being passed to a varargs function.  Perform any conversions
7530    required.  Return the converted value.  */
7531 
7532 tree
convert_arg_to_ellipsis(tree arg,tsubst_flags_t complain)7533 convert_arg_to_ellipsis (tree arg, tsubst_flags_t complain)
7534 {
7535   tree arg_type;
7536   location_t loc = cp_expr_loc_or_loc (arg, input_location);
7537 
7538   /* [expr.call]
7539 
7540      The lvalue-to-rvalue, array-to-pointer, and function-to-pointer
7541      standard conversions are performed.  */
7542   arg = decay_conversion (arg, complain);
7543   arg_type = TREE_TYPE (arg);
7544   /* [expr.call]
7545 
7546      If the argument has integral or enumeration type that is subject
7547      to the integral promotions (_conv.prom_), or a floating point
7548      type that is subject to the floating point promotion
7549      (_conv.fpprom_), the value of the argument is converted to the
7550      promoted type before the call.  */
7551   if (TREE_CODE (arg_type) == REAL_TYPE
7552       && (TYPE_PRECISION (arg_type)
7553 	  < TYPE_PRECISION (double_type_node))
7554       && !DECIMAL_FLOAT_MODE_P (TYPE_MODE (arg_type)))
7555     {
7556       if ((complain & tf_warning)
7557 	  && warn_double_promotion && !c_inhibit_evaluation_warnings)
7558 	warning_at (loc, OPT_Wdouble_promotion,
7559 		    "implicit conversion from %qH to %qI when passing "
7560 		    "argument to function",
7561 		    arg_type, double_type_node);
7562       arg = convert_to_real_nofold (double_type_node, arg);
7563     }
7564   else if (NULLPTR_TYPE_P (arg_type))
7565     {
7566       if (TREE_SIDE_EFFECTS (arg))
7567 	arg = cp_build_compound_expr (arg, null_pointer_node, complain);
7568       else
7569 	arg = null_pointer_node;
7570     }
7571   else if (INTEGRAL_OR_ENUMERATION_TYPE_P (arg_type))
7572     {
7573       if (SCOPED_ENUM_P (arg_type))
7574 	{
7575 	  tree prom = cp_convert (ENUM_UNDERLYING_TYPE (arg_type), arg,
7576 				  complain);
7577 	  prom = cp_perform_integral_promotions (prom, complain);
7578 	  if (abi_version_crosses (6)
7579 	      && TYPE_MODE (TREE_TYPE (prom)) != TYPE_MODE (arg_type)
7580 	      && (complain & tf_warning))
7581 	    warning_at (loc, OPT_Wabi, "scoped enum %qT passed through ... as "
7582 			"%qT before %<-fabi-version=6%>, %qT after", arg_type,
7583 			TREE_TYPE (prom), ENUM_UNDERLYING_TYPE (arg_type));
7584 	  if (!abi_version_at_least (6))
7585 	    arg = prom;
7586 	}
7587       else
7588 	arg = cp_perform_integral_promotions (arg, complain);
7589     }
7590 
7591   arg = require_complete_type_sfinae (arg, complain);
7592   arg_type = TREE_TYPE (arg);
7593 
7594   if (arg != error_mark_node
7595       /* In a template (or ill-formed code), we can have an incomplete type
7596 	 even after require_complete_type_sfinae, in which case we don't know
7597 	 whether it has trivial copy or not.  */
7598       && COMPLETE_TYPE_P (arg_type)
7599       && !cp_unevaluated_operand)
7600     {
7601       /* [expr.call] 5.2.2/7:
7602 	 Passing a potentially-evaluated argument of class type (Clause 9)
7603 	 with a non-trivial copy constructor or a non-trivial destructor
7604 	 with no corresponding parameter is conditionally-supported, with
7605 	 implementation-defined semantics.
7606 
7607 	 We support it as pass-by-invisible-reference, just like a normal
7608 	 value parameter.
7609 
7610 	 If the call appears in the context of a sizeof expression,
7611 	 it is not potentially-evaluated.  */
7612       if (type_has_nontrivial_copy_init (arg_type)
7613 	  || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (arg_type))
7614 	{
7615 	  arg = force_rvalue (arg, complain);
7616 	  if (complain & tf_warning)
7617 	    warning (OPT_Wconditionally_supported,
7618 		     "passing objects of non-trivially-copyable "
7619 		     "type %q#T through %<...%> is conditionally supported",
7620 		     arg_type);
7621 	  return build1 (ADDR_EXPR, build_reference_type (arg_type), arg);
7622 	}
7623       /* Build up a real lvalue-to-rvalue conversion in case the
7624 	 copy constructor is trivial but not callable.  */
7625       else if (CLASS_TYPE_P (arg_type))
7626 	force_rvalue (arg, complain);
7627 
7628     }
7629 
7630   return arg;
7631 }
7632 
7633 /* va_arg (EXPR, TYPE) is a builtin. Make sure it is not abused.  */
7634 
7635 tree
build_x_va_arg(location_t loc,tree expr,tree type)7636 build_x_va_arg (location_t loc, tree expr, tree type)
7637 {
7638   if (processing_template_decl)
7639     {
7640       tree r = build_min (VA_ARG_EXPR, type, expr);
7641       SET_EXPR_LOCATION (r, loc);
7642       return r;
7643     }
7644 
7645   type = complete_type_or_else (type, NULL_TREE);
7646 
7647   if (expr == error_mark_node || !type)
7648     return error_mark_node;
7649 
7650   expr = mark_lvalue_use (expr);
7651 
7652   if (TYPE_REF_P (type))
7653     {
7654       error ("cannot receive reference type %qT through %<...%>", type);
7655       return error_mark_node;
7656     }
7657 
7658   if (type_has_nontrivial_copy_init (type)
7659       || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
7660     {
7661       /* conditionally-supported behavior [expr.call] 5.2.2/7.  Let's treat
7662 	 it as pass by invisible reference.  */
7663       warning_at (loc, OPT_Wconditionally_supported,
7664 		 "receiving objects of non-trivially-copyable type %q#T "
7665 		 "through %<...%> is conditionally-supported", type);
7666 
7667       tree ref = cp_build_reference_type (type, false);
7668       expr = build_va_arg (loc, expr, ref);
7669       return convert_from_reference (expr);
7670     }
7671 
7672   tree ret = build_va_arg (loc, expr, type);
7673   if (CLASS_TYPE_P (type))
7674     /* Wrap the VA_ARG_EXPR in a TARGET_EXPR now so other code doesn't need to
7675        know how to handle it.  */
7676     ret = get_target_expr (ret);
7677   return ret;
7678 }
7679 
7680 /* TYPE has been given to va_arg.  Apply the default conversions which
7681    would have happened when passed via ellipsis.  Return the promoted
7682    type, or the passed type if there is no change.  */
7683 
7684 tree
cxx_type_promotes_to(tree type)7685 cxx_type_promotes_to (tree type)
7686 {
7687   tree promote;
7688 
7689   /* Perform the array-to-pointer and function-to-pointer
7690      conversions.  */
7691   type = type_decays_to (type);
7692 
7693   promote = type_promotes_to (type);
7694   if (same_type_p (type, promote))
7695     promote = type;
7696 
7697   return promote;
7698 }
7699 
7700 /* ARG is a default argument expression being passed to a parameter of
7701    the indicated TYPE, which is a parameter to FN.  PARMNUM is the
7702    zero-based argument number.  Do any required conversions.  Return
7703    the converted value.  */
7704 
7705 static GTY(()) vec<tree, va_gc> *default_arg_context;
7706 void
push_defarg_context(tree fn)7707 push_defarg_context (tree fn)
7708 { vec_safe_push (default_arg_context, fn); }
7709 
7710 void
pop_defarg_context(void)7711 pop_defarg_context (void)
7712 { default_arg_context->pop (); }
7713 
7714 tree
convert_default_arg(tree type,tree arg,tree fn,int parmnum,tsubst_flags_t complain)7715 convert_default_arg (tree type, tree arg, tree fn, int parmnum,
7716 		     tsubst_flags_t complain)
7717 {
7718   int i;
7719   tree t;
7720 
7721   /* See through clones.  */
7722   fn = DECL_ORIGIN (fn);
7723   /* And inheriting ctors.  */
7724   if (flag_new_inheriting_ctors)
7725     fn = strip_inheriting_ctors (fn);
7726 
7727   /* Detect recursion.  */
7728   FOR_EACH_VEC_SAFE_ELT (default_arg_context, i, t)
7729     if (t == fn)
7730       {
7731 	if (complain & tf_error)
7732 	  error ("recursive evaluation of default argument for %q#D", fn);
7733 	return error_mark_node;
7734       }
7735 
7736   /* If the ARG is an unparsed default argument expression, the
7737      conversion cannot be performed.  */
7738   if (TREE_CODE (arg) == DEFAULT_ARG)
7739     {
7740       if (complain & tf_error)
7741 	error ("call to %qD uses the default argument for parameter %P, which "
7742 	       "is not yet defined", fn, parmnum);
7743       return error_mark_node;
7744     }
7745 
7746   push_defarg_context (fn);
7747 
7748   if (fn && DECL_TEMPLATE_INFO (fn))
7749     arg = tsubst_default_argument (fn, parmnum, type, arg, complain);
7750 
7751   /* Due to:
7752 
7753        [dcl.fct.default]
7754 
7755        The names in the expression are bound, and the semantic
7756        constraints are checked, at the point where the default
7757        expressions appears.
7758 
7759      we must not perform access checks here.  */
7760   push_deferring_access_checks (dk_no_check);
7761   /* We must make a copy of ARG, in case subsequent processing
7762      alters any part of it.  */
7763   arg = break_out_target_exprs (arg, /*clear location*/true);
7764 
7765   arg = convert_for_initialization (0, type, arg, LOOKUP_IMPLICIT,
7766 				    ICR_DEFAULT_ARGUMENT, fn, parmnum,
7767 				    complain);
7768   arg = convert_for_arg_passing (type, arg, complain);
7769   pop_deferring_access_checks();
7770 
7771   pop_defarg_context ();
7772 
7773   return arg;
7774 }
7775 
7776 /* Returns the type which will really be used for passing an argument of
7777    type TYPE.  */
7778 
7779 tree
type_passed_as(tree type)7780 type_passed_as (tree type)
7781 {
7782   /* Pass classes with copy ctors by invisible reference.  */
7783   if (TREE_ADDRESSABLE (type))
7784     {
7785       type = build_reference_type (type);
7786       /* There are no other pointers to this temporary.  */
7787       type = cp_build_qualified_type (type, TYPE_QUAL_RESTRICT);
7788     }
7789   else if (targetm.calls.promote_prototypes (NULL_TREE)
7790 	   && INTEGRAL_TYPE_P (type)
7791 	   && COMPLETE_TYPE_P (type)
7792 	   && tree_int_cst_lt (TYPE_SIZE (type), TYPE_SIZE (integer_type_node)))
7793     type = integer_type_node;
7794 
7795   return type;
7796 }
7797 
7798 /* Actually perform the appropriate conversion.  */
7799 
7800 tree
convert_for_arg_passing(tree type,tree val,tsubst_flags_t complain)7801 convert_for_arg_passing (tree type, tree val, tsubst_flags_t complain)
7802 {
7803   tree bitfield_type;
7804 
7805   /* If VAL is a bitfield, then -- since it has already been converted
7806      to TYPE -- it cannot have a precision greater than TYPE.
7807 
7808      If it has a smaller precision, we must widen it here.  For
7809      example, passing "int f:3;" to a function expecting an "int" will
7810      not result in any conversion before this point.
7811 
7812      If the precision is the same we must not risk widening.  For
7813      example, the COMPONENT_REF for a 32-bit "long long" bitfield will
7814      often have type "int", even though the C++ type for the field is
7815      "long long".  If the value is being passed to a function
7816      expecting an "int", then no conversions will be required.  But,
7817      if we call convert_bitfield_to_declared_type, the bitfield will
7818      be converted to "long long".  */
7819   bitfield_type = is_bitfield_expr_with_lowered_type (val);
7820   if (bitfield_type
7821       && TYPE_PRECISION (TREE_TYPE (val)) < TYPE_PRECISION (type))
7822     val = convert_to_integer_nofold (TYPE_MAIN_VARIANT (bitfield_type), val);
7823 
7824   if (val == error_mark_node)
7825     ;
7826   /* Pass classes with copy ctors by invisible reference.  */
7827   else if (TREE_ADDRESSABLE (type))
7828     val = build1 (ADDR_EXPR, build_reference_type (type), val);
7829   else if (targetm.calls.promote_prototypes (NULL_TREE)
7830 	   && INTEGRAL_TYPE_P (type)
7831 	   && COMPLETE_TYPE_P (type)
7832 	   && tree_int_cst_lt (TYPE_SIZE (type), TYPE_SIZE (integer_type_node)))
7833     val = cp_perform_integral_promotions (val, complain);
7834   if (complain & tf_warning)
7835     {
7836       if (warn_suggest_attribute_format)
7837 	{
7838 	  tree rhstype = TREE_TYPE (val);
7839 	  const enum tree_code coder = TREE_CODE (rhstype);
7840 	  const enum tree_code codel = TREE_CODE (type);
7841 	  if ((codel == POINTER_TYPE || codel == REFERENCE_TYPE)
7842 	      && coder == codel
7843 	      && check_missing_format_attribute (type, rhstype))
7844 	    warning (OPT_Wsuggest_attribute_format,
7845 		     "argument of function call might be a candidate "
7846 		     "for a format attribute");
7847 	}
7848       maybe_warn_parm_abi (type, cp_expr_loc_or_loc (val, input_location));
7849     }
7850 
7851   if (complain & tf_warning)
7852     warn_for_address_or_pointer_of_packed_member (type, val);
7853 
7854   return val;
7855 }
7856 
7857 /* Returns non-zero iff FN is a function with magic varargs, i.e. ones for
7858    which just decay_conversion or no conversions at all should be done.
7859    This is true for some builtins which don't act like normal functions.
7860    Return 2 if no conversions at all should be done, 1 if just
7861    decay_conversion.  Return 3 for special treatment of the 3rd argument
7862    for __builtin_*_overflow_p.  */
7863 
7864 int
magic_varargs_p(tree fn)7865 magic_varargs_p (tree fn)
7866 {
7867   if (DECL_BUILT_IN_CLASS (fn) == BUILT_IN_NORMAL)
7868     switch (DECL_FUNCTION_CODE (fn))
7869       {
7870       case BUILT_IN_CLASSIFY_TYPE:
7871       case BUILT_IN_CONSTANT_P:
7872       case BUILT_IN_NEXT_ARG:
7873       case BUILT_IN_VA_START:
7874 	return 1;
7875 
7876       case BUILT_IN_ADD_OVERFLOW_P:
7877       case BUILT_IN_SUB_OVERFLOW_P:
7878       case BUILT_IN_MUL_OVERFLOW_P:
7879 	return 3;
7880 
7881       default:;
7882 	return lookup_attribute ("type generic",
7883 				 TYPE_ATTRIBUTES (TREE_TYPE (fn))) != 0;
7884       }
7885 
7886   return 0;
7887 }
7888 
7889 /* Returns the decl of the dispatcher function if FN is a function version.  */
7890 
7891 tree
get_function_version_dispatcher(tree fn)7892 get_function_version_dispatcher (tree fn)
7893 {
7894   tree dispatcher_decl = NULL;
7895 
7896   gcc_assert (TREE_CODE (fn) == FUNCTION_DECL
7897 	      && DECL_FUNCTION_VERSIONED (fn));
7898 
7899   gcc_assert (targetm.get_function_versions_dispatcher);
7900   dispatcher_decl = targetm.get_function_versions_dispatcher (fn);
7901 
7902   if (dispatcher_decl == NULL)
7903     {
7904       error_at (input_location, "use of multiversioned function "
7905 				"without a default");
7906       return NULL;
7907     }
7908 
7909   retrofit_lang_decl (dispatcher_decl);
7910   gcc_assert (dispatcher_decl != NULL);
7911   return dispatcher_decl;
7912 }
7913 
7914 /* fn is a function version dispatcher that is marked used. Mark all the
7915    semantically identical function versions it will dispatch as used.  */
7916 
7917 void
mark_versions_used(tree fn)7918 mark_versions_used (tree fn)
7919 {
7920   struct cgraph_node *node;
7921   struct cgraph_function_version_info *node_v;
7922   struct cgraph_function_version_info *it_v;
7923 
7924   gcc_assert (TREE_CODE (fn) == FUNCTION_DECL);
7925 
7926   node = cgraph_node::get (fn);
7927   if (node == NULL)
7928     return;
7929 
7930   gcc_assert (node->dispatcher_function);
7931 
7932   node_v = node->function_version ();
7933   if (node_v == NULL)
7934     return;
7935 
7936   /* All semantically identical versions are chained.  Traverse and mark each
7937      one of them as used.  */
7938   it_v = node_v->next;
7939   while (it_v != NULL)
7940     {
7941       mark_used (it_v->this_node->decl);
7942       it_v = it_v->next;
7943     }
7944 }
7945 
7946 /* Build a call to "the copy constructor" for the type of A, even if it
7947    wouldn't be selected by normal overload resolution.  Used for
7948    diagnostics.  */
7949 
7950 static tree
call_copy_ctor(tree a,tsubst_flags_t complain)7951 call_copy_ctor (tree a, tsubst_flags_t complain)
7952 {
7953   tree ctype = TYPE_MAIN_VARIANT (TREE_TYPE (a));
7954   tree binfo = TYPE_BINFO (ctype);
7955   tree copy = get_copy_ctor (ctype, complain);
7956   copy = build_baselink (binfo, binfo, copy, NULL_TREE);
7957   tree ob = build_dummy_object (ctype);
7958   vec<tree, va_gc>* args = make_tree_vector_single (a);
7959   tree r = build_new_method_call (ob, copy, &args, NULL_TREE,
7960 				  LOOKUP_NORMAL, NULL, complain);
7961   release_tree_vector (args);
7962   return r;
7963 }
7964 
7965 /* Return true iff T refers to a base field.  */
7966 
7967 static bool
is_base_field_ref(tree t)7968 is_base_field_ref (tree t)
7969 {
7970   STRIP_NOPS (t);
7971   if (TREE_CODE (t) == ADDR_EXPR)
7972     t = TREE_OPERAND (t, 0);
7973   if (TREE_CODE (t) == COMPONENT_REF)
7974     t = TREE_OPERAND (t, 1);
7975   if (TREE_CODE (t) == FIELD_DECL)
7976     return DECL_FIELD_IS_BASE (t);
7977   return false;
7978 }
7979 
7980 /* We can't elide a copy from a function returning by value to a base
7981    subobject, as the callee might clobber tail padding.  Return true iff this
7982    could be that case.  */
7983 
7984 static bool
unsafe_copy_elision_p(tree target,tree exp)7985 unsafe_copy_elision_p (tree target, tree exp)
7986 {
7987   /* Copy elision only happens with a TARGET_EXPR.  */
7988   if (TREE_CODE (exp) != TARGET_EXPR)
7989     return false;
7990   tree type = TYPE_MAIN_VARIANT (TREE_TYPE (exp));
7991   /* It's safe to elide the copy for a class with no tail padding.  */
7992   if (tree_int_cst_equal (TYPE_SIZE (type), CLASSTYPE_SIZE (type)))
7993     return false;
7994   /* It's safe to elide the copy if we aren't initializing a base object.  */
7995   if (!is_base_field_ref (target))
7996     return false;
7997   tree init = TARGET_EXPR_INITIAL (exp);
7998   /* build_compound_expr pushes COMPOUND_EXPR inside TARGET_EXPR.  */
7999   while (TREE_CODE (init) == COMPOUND_EXPR)
8000     init = TREE_OPERAND (init, 1);
8001   if (TREE_CODE (init) == COND_EXPR)
8002     {
8003       /* We'll end up copying from each of the arms of the COND_EXPR directly
8004 	 into the target, so look at them. */
8005       if (tree op = TREE_OPERAND (init, 1))
8006 	if (unsafe_copy_elision_p (target, op))
8007 	  return true;
8008       return unsafe_copy_elision_p (target, TREE_OPERAND (init, 2));
8009     }
8010   return (TREE_CODE (init) == AGGR_INIT_EXPR
8011 	  && !AGGR_INIT_VIA_CTOR_P (init));
8012 }
8013 
8014 /* True iff C is a conversion that binds a reference to a prvalue.  */
8015 
8016 static bool
conv_binds_ref_to_prvalue(conversion * c)8017 conv_binds_ref_to_prvalue (conversion *c)
8018 {
8019   if (c->kind != ck_ref_bind)
8020     return false;
8021   if (c->need_temporary_p)
8022     return true;
8023 
8024   c = next_conversion (c);
8025 
8026   if (c->kind == ck_rvalue)
8027     return true;
8028   if (c->kind == ck_user && !TYPE_REF_P (c->type))
8029     return true;
8030   if (c->kind == ck_identity && c->u.expr
8031       && TREE_CODE (c->u.expr) == TARGET_EXPR)
8032     return true;
8033 
8034   return false;
8035 }
8036 
8037 /* Call the trivial destructor for INSTANCE, which can be either an lvalue of
8038    class type or a pointer to class type.  */
8039 
8040 tree
build_trivial_dtor_call(tree instance)8041 build_trivial_dtor_call (tree instance)
8042 {
8043   gcc_assert (!is_dummy_object (instance));
8044 
8045   if (!flag_lifetime_dse)
8046     {
8047     no_clobber:
8048       return fold_convert (void_type_node, instance);
8049     }
8050 
8051   if (INDIRECT_TYPE_P (TREE_TYPE (instance)))
8052     {
8053       if (VOID_TYPE_P (TREE_TYPE (TREE_TYPE (instance))))
8054 	goto no_clobber;
8055       instance = cp_build_fold_indirect_ref (instance);
8056     }
8057 
8058   /* A trivial destructor should still clobber the object.  */
8059   tree clobber = build_clobber (TREE_TYPE (instance));
8060   return build2 (MODIFY_EXPR, void_type_node,
8061 		 instance, clobber);
8062 }
8063 
8064 /* Subroutine of the various build_*_call functions.  Overload resolution
8065    has chosen a winning candidate CAND; build up a CALL_EXPR accordingly.
8066    ARGS is a TREE_LIST of the unconverted arguments to the call.  FLAGS is a
8067    bitmask of various LOOKUP_* flags which apply to the call itself.  */
8068 
8069 static tree
build_over_call(struct z_candidate * cand,int flags,tsubst_flags_t complain)8070 build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain)
8071 {
8072   tree fn = cand->fn;
8073   const vec<tree, va_gc> *args = cand->args;
8074   tree first_arg = cand->first_arg;
8075   conversion **convs = cand->convs;
8076   conversion *conv;
8077   tree parm = TYPE_ARG_TYPES (TREE_TYPE (fn));
8078   int parmlen;
8079   tree val;
8080   int i = 0;
8081   int j = 0;
8082   unsigned int arg_index = 0;
8083   int is_method = 0;
8084   int nargs;
8085   tree *argarray;
8086   bool already_used = false;
8087 
8088   /* In a template, there is no need to perform all of the work that
8089      is normally done.  We are only interested in the type of the call
8090      expression, i.e., the return type of the function.  Any semantic
8091      errors will be deferred until the template is instantiated.  */
8092   if (processing_template_decl)
8093     {
8094       tree expr, addr;
8095       tree return_type;
8096       const tree *argarray;
8097       unsigned int nargs;
8098 
8099       if (undeduced_auto_decl (fn))
8100 	mark_used (fn, complain);
8101       else
8102 	/* Otherwise set TREE_USED for the benefit of -Wunused-function.
8103 	   See PR80598.  */
8104 	TREE_USED (fn) = 1;
8105 
8106       return_type = TREE_TYPE (TREE_TYPE (fn));
8107       nargs = vec_safe_length (args);
8108       if (first_arg == NULL_TREE)
8109 	argarray = args->address ();
8110       else
8111 	{
8112 	  tree *alcarray;
8113 	  unsigned int ix;
8114 	  tree arg;
8115 
8116 	  ++nargs;
8117 	  alcarray = XALLOCAVEC (tree, nargs);
8118 	  alcarray[0] = build_this (first_arg);
8119 	  FOR_EACH_VEC_SAFE_ELT (args, ix, arg)
8120 	    alcarray[ix + 1] = arg;
8121 	  argarray = alcarray;
8122 	}
8123 
8124       addr = build_addr_func (fn, complain);
8125       if (addr == error_mark_node)
8126 	return error_mark_node;
8127       expr = build_call_array_loc (input_location, return_type,
8128 				   addr, nargs, argarray);
8129       if (TREE_THIS_VOLATILE (fn) && cfun)
8130 	current_function_returns_abnormally = 1;
8131       return convert_from_reference (expr);
8132     }
8133 
8134   /* Give any warnings we noticed during overload resolution.  */
8135   if (cand->warnings && (complain & tf_warning))
8136     {
8137       struct candidate_warning *w;
8138       for (w = cand->warnings; w; w = w->next)
8139 	joust (cand, w->loser, 1, complain);
8140     }
8141 
8142   /* Core issue 2327: P0135 doesn't say how to handle the case where the
8143      argument to the copy constructor ends up being a prvalue after
8144      conversion.  Let's do the normal processing, but pretend we aren't
8145      actually using the copy constructor.  */
8146   bool force_elide = false;
8147   if (cxx_dialect >= cxx17
8148       && cand->num_convs == 1
8149       && DECL_COMPLETE_CONSTRUCTOR_P (fn)
8150       && (DECL_COPY_CONSTRUCTOR_P (fn)
8151 	  || DECL_MOVE_CONSTRUCTOR_P (fn))
8152       && conv_binds_ref_to_prvalue (convs[0]))
8153     {
8154       force_elide = true;
8155       goto not_really_used;
8156     }
8157 
8158   /* OK, we're actually calling this inherited constructor; set its deletedness
8159      appropriately.  We can get away with doing this here because calling is
8160      the only way to refer to a constructor.  */
8161   if (DECL_INHERITED_CTOR (fn))
8162     deduce_inheriting_ctor (fn);
8163 
8164   /* Make =delete work with SFINAE.  */
8165   if (DECL_DELETED_FN (fn))
8166     {
8167       if (complain & tf_error)
8168 	mark_used (fn);
8169       return error_mark_node;
8170     }
8171 
8172   if (DECL_FUNCTION_MEMBER_P (fn))
8173     {
8174       tree access_fn;
8175       /* If FN is a template function, two cases must be considered.
8176 	 For example:
8177 
8178 	   struct A {
8179 	     protected:
8180 	       template <class T> void f();
8181 	   };
8182 	   template <class T> struct B {
8183 	     protected:
8184 	       void g();
8185 	   };
8186 	   struct C : A, B<int> {
8187 	     using A::f;	// #1
8188 	     using B<int>::g;	// #2
8189 	   };
8190 
8191 	 In case #1 where `A::f' is a member template, DECL_ACCESS is
8192 	 recorded in the primary template but not in its specialization.
8193 	 We check access of FN using its primary template.
8194 
8195 	 In case #2, where `B<int>::g' has a DECL_TEMPLATE_INFO simply
8196 	 because it is a member of class template B, DECL_ACCESS is
8197 	 recorded in the specialization `B<int>::g'.  We cannot use its
8198 	 primary template because `B<T>::g' and `B<int>::g' may have
8199 	 different access.  */
8200       if (DECL_TEMPLATE_INFO (fn)
8201 	  && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (fn)))
8202 	access_fn = DECL_TI_TEMPLATE (fn);
8203       else
8204 	access_fn = fn;
8205       if (!perform_or_defer_access_check (cand->access_path, access_fn,
8206 					  fn, complain))
8207 	return error_mark_node;
8208     }
8209 
8210   /* If we're checking for implicit delete, don't bother with argument
8211      conversions.  */
8212   if (flags & LOOKUP_SPECULATIVE)
8213     {
8214       if (cand->viable == 1)
8215 	return fn;
8216       else if (!(complain & tf_error))
8217 	/* Reject bad conversions now.  */
8218 	return error_mark_node;
8219       /* else continue to get conversion error.  */
8220     }
8221 
8222  not_really_used:
8223 
8224   /* N3276 magic doesn't apply to nested calls.  */
8225   tsubst_flags_t decltype_flag = (complain & tf_decltype);
8226   complain &= ~tf_decltype;
8227   /* No-Cleanup doesn't apply to nested calls either.  */
8228   tsubst_flags_t no_cleanup_complain = complain;
8229   complain &= ~tf_no_cleanup;
8230 
8231   /* Find maximum size of vector to hold converted arguments.  */
8232   parmlen = list_length (parm);
8233   nargs = vec_safe_length (args) + (first_arg != NULL_TREE ? 1 : 0);
8234   if (parmlen > nargs)
8235     nargs = parmlen;
8236   argarray = XALLOCAVEC (tree, nargs);
8237 
8238   /* The implicit parameters to a constructor are not considered by overload
8239      resolution, and must be of the proper type.  */
8240   if (DECL_CONSTRUCTOR_P (fn))
8241     {
8242       tree object_arg;
8243       if (first_arg != NULL_TREE)
8244 	{
8245 	  object_arg = first_arg;
8246 	  first_arg = NULL_TREE;
8247 	}
8248       else
8249 	{
8250 	  object_arg = (*args)[arg_index];
8251 	  ++arg_index;
8252 	}
8253       argarray[j++] = build_this (object_arg);
8254       parm = TREE_CHAIN (parm);
8255       /* We should never try to call the abstract constructor.  */
8256       gcc_assert (!DECL_HAS_IN_CHARGE_PARM_P (fn));
8257 
8258       if (DECL_HAS_VTT_PARM_P (fn))
8259 	{
8260 	  argarray[j++] = (*args)[arg_index];
8261 	  ++arg_index;
8262 	  parm = TREE_CHAIN (parm);
8263 	}
8264 
8265       if (flags & LOOKUP_PREFER_RVALUE)
8266 	{
8267 	  /* The implicit move specified in 15.8.3/3 fails "...if the type of
8268 	     the first parameter of the selected constructor is not an rvalue
8269 	     reference to the object's type (possibly cv-qualified)...." */
8270 	  gcc_assert (!(complain & tf_error));
8271 	  tree ptype = convs[0]->type;
8272 	  if (!TYPE_REF_P (ptype)
8273 	      || !TYPE_REF_IS_RVALUE (ptype)
8274 	      || CONVERSION_RANK (convs[0]) > cr_exact)
8275 	    return error_mark_node;
8276 	}
8277     }
8278   /* Bypass access control for 'this' parameter.  */
8279   else if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
8280     {
8281       tree parmtype = TREE_VALUE (parm);
8282       tree arg = build_this (first_arg != NULL_TREE
8283 			     ? first_arg
8284 			     : (*args)[arg_index]);
8285       tree argtype = TREE_TYPE (arg);
8286       tree converted_arg;
8287       tree base_binfo;
8288 
8289       if (arg == error_mark_node)
8290 	return error_mark_node;
8291 
8292       if (convs[i]->bad_p)
8293 	{
8294 	  if (complain & tf_error)
8295 	    {
8296 	      auto_diagnostic_group d;
8297 	      if (permerror (input_location, "passing %qT as %<this%> "
8298 			     "argument discards qualifiers",
8299 			     TREE_TYPE (argtype)))
8300 		inform (DECL_SOURCE_LOCATION (fn), "  in call to %qD", fn);
8301 	    }
8302 	  else
8303 	    return error_mark_node;
8304 	}
8305 
8306       /* See if the function member or the whole class type is declared
8307 	 final and the call can be devirtualized.  */
8308       if (DECL_FINAL_P (fn)
8309 	  || CLASSTYPE_FINAL (TYPE_METHOD_BASETYPE (TREE_TYPE (fn))))
8310 	flags |= LOOKUP_NONVIRTUAL;
8311 
8312       /* [class.mfct.nonstatic]: If a nonstatic member function of a class
8313 	 X is called for an object that is not of type X, or of a type
8314 	 derived from X, the behavior is undefined.
8315 
8316 	 So we can assume that anything passed as 'this' is non-null, and
8317 	 optimize accordingly.  */
8318       gcc_assert (TYPE_PTR_P (parmtype));
8319       /* Convert to the base in which the function was declared.  */
8320       gcc_assert (cand->conversion_path != NULL_TREE);
8321       /* Check that the base class is accessible.  */
8322       if (!accessible_base_p (TREE_TYPE (argtype),
8323 			      BINFO_TYPE (cand->conversion_path), true))
8324 	{
8325 	  if (complain & tf_error)
8326 	    error ("%qT is not an accessible base of %qT",
8327 		   BINFO_TYPE (cand->conversion_path),
8328 		   TREE_TYPE (argtype));
8329 	  else
8330 	    return error_mark_node;
8331 	}
8332       /* If fn was found by a using declaration, the conversion path
8333 	 will be to the derived class, not the base declaring fn. We
8334 	 must convert from derived to base.  */
8335       base_binfo = lookup_base (cand->conversion_path,
8336 				TREE_TYPE (parmtype), ba_unique,
8337 				NULL, complain);
8338 
8339       /* If we know the dynamic type of the object, look up the final overrider
8340 	 in the BINFO.  */
8341       if (DECL_VINDEX (fn) && (flags & LOOKUP_NONVIRTUAL) == 0
8342 	  && resolves_to_fixed_type_p (arg))
8343 	{
8344 	  tree ov = lookup_vfn_in_binfo (DECL_VINDEX (fn), base_binfo);
8345 
8346 	  /* And unwind base_binfo to match.  If we don't find the type we're
8347 	     looking for in BINFO_INHERITANCE_CHAIN, we're looking at diamond
8348 	     inheritance; for now do a normal virtual call in that case.  */
8349 	  tree octx = DECL_CONTEXT (ov);
8350 	  tree obinfo = base_binfo;
8351 	  while (obinfo && !SAME_BINFO_TYPE_P (BINFO_TYPE (obinfo), octx))
8352 	    obinfo = BINFO_INHERITANCE_CHAIN (obinfo);
8353 	  if (obinfo)
8354 	    {
8355 	      fn = ov;
8356 	      base_binfo = obinfo;
8357 	      flags |= LOOKUP_NONVIRTUAL;
8358 	    }
8359 	}
8360 
8361       converted_arg = build_base_path (PLUS_EXPR, arg,
8362 				       base_binfo, 1, complain);
8363 
8364       argarray[j++] = converted_arg;
8365       parm = TREE_CHAIN (parm);
8366       if (first_arg != NULL_TREE)
8367 	first_arg = NULL_TREE;
8368       else
8369 	++arg_index;
8370       ++i;
8371       is_method = 1;
8372     }
8373 
8374   gcc_assert (first_arg == NULL_TREE);
8375   for (; arg_index < vec_safe_length (args) && parm;
8376        parm = TREE_CHAIN (parm), ++arg_index, ++i)
8377     {
8378       tree type = TREE_VALUE (parm);
8379       tree arg = (*args)[arg_index];
8380       bool conversion_warning = true;
8381 
8382       conv = convs[i];
8383 
8384       /* If the argument is NULL and used to (implicitly) instantiate a
8385          template function (and bind one of the template arguments to
8386          the type of 'long int'), we don't want to warn about passing NULL
8387          to non-pointer argument.
8388          For example, if we have this template function:
8389 
8390            template<typename T> void func(T x) {}
8391 
8392          we want to warn (when -Wconversion is enabled) in this case:
8393 
8394            void foo() {
8395              func<int>(NULL);
8396            }
8397 
8398          but not in this case:
8399 
8400            void foo() {
8401              func(NULL);
8402            }
8403       */
8404       if (null_node_p (arg)
8405           && DECL_TEMPLATE_INFO (fn)
8406           && cand->template_decl
8407           && !(flags & LOOKUP_EXPLICIT_TMPL_ARGS))
8408         conversion_warning = false;
8409 
8410       /* Warn about initializer_list deduction that isn't currently in the
8411 	 working draft.  */
8412       if (cxx_dialect > cxx98
8413 	  && flag_deduce_init_list
8414 	  && cand->template_decl
8415 	  && is_std_init_list (non_reference (type))
8416 	  && BRACE_ENCLOSED_INITIALIZER_P (arg))
8417 	{
8418 	  tree tmpl = TI_TEMPLATE (cand->template_decl);
8419 	  tree realparm = chain_index (j, DECL_ARGUMENTS (cand->fn));
8420 	  tree patparm = get_pattern_parm (realparm, tmpl);
8421 	  tree pattype = TREE_TYPE (patparm);
8422 	  if (PACK_EXPANSION_P (pattype))
8423 	    pattype = PACK_EXPANSION_PATTERN (pattype);
8424 	  pattype = non_reference (pattype);
8425 
8426 	  if (TREE_CODE (pattype) == TEMPLATE_TYPE_PARM
8427 	      && (cand->explicit_targs == NULL_TREE
8428 		  || (TREE_VEC_LENGTH (cand->explicit_targs)
8429 		      <= TEMPLATE_TYPE_IDX (pattype))))
8430 	    {
8431 	      pedwarn (input_location, 0, "deducing %qT as %qT",
8432 		       non_reference (TREE_TYPE (patparm)),
8433 		       non_reference (type));
8434 	      pedwarn (DECL_SOURCE_LOCATION (cand->fn), 0,
8435 		       "  in call to %qD", cand->fn);
8436 	      pedwarn (input_location, 0,
8437 		       "  (you can disable this with "
8438 		       "%<-fno-deduce-init-list%>)");
8439 	    }
8440 	}
8441 
8442       /* Set user_conv_p on the argument conversions, so rvalue/base handling
8443 	 knows not to allow any more UDCs.  This needs to happen after we
8444 	 process cand->warnings.  */
8445       if (flags & LOOKUP_NO_CONVERSION)
8446 	conv->user_conv_p = true;
8447 
8448       tsubst_flags_t arg_complain = complain;
8449       if (!conversion_warning)
8450 	arg_complain &= ~tf_warning;
8451 
8452       val = convert_like_with_context (conv, arg, fn, i - is_method,
8453 				       arg_complain);
8454       val = convert_for_arg_passing (type, val, arg_complain);
8455 
8456       if (val == error_mark_node)
8457         return error_mark_node;
8458       else
8459         argarray[j++] = val;
8460     }
8461 
8462   /* Default arguments */
8463   for (; parm && parm != void_list_node; parm = TREE_CHAIN (parm), i++)
8464     {
8465       if (TREE_VALUE (parm) == error_mark_node)
8466 	return error_mark_node;
8467       val = convert_default_arg (TREE_VALUE (parm),
8468 				 TREE_PURPOSE (parm),
8469 				 fn, i - is_method,
8470 				 complain);
8471       if (val == error_mark_node)
8472         return error_mark_node;
8473       argarray[j++] = val;
8474     }
8475 
8476   /* Ellipsis */
8477   int magic = magic_varargs_p (fn);
8478   for (; arg_index < vec_safe_length (args); ++arg_index)
8479     {
8480       tree a = (*args)[arg_index];
8481       if ((magic == 3 && arg_index == 2) || magic == 2)
8482 	{
8483 	  /* Do no conversions for certain magic varargs.  */
8484 	  a = mark_type_use (a);
8485 	  if (TREE_CODE (a) == FUNCTION_DECL && reject_gcc_builtin (a))
8486 	    return error_mark_node;
8487 	}
8488       else if (magic != 0)
8489 	/* For other magic varargs only do decay_conversion.  */
8490 	a = decay_conversion (a, complain);
8491       else if (DECL_CONSTRUCTOR_P (fn)
8492 	       && same_type_ignoring_top_level_qualifiers_p (DECL_CONTEXT (fn),
8493 							     TREE_TYPE (a)))
8494 	{
8495 	  /* Avoid infinite recursion trying to call A(...).  */
8496 	  if (complain & tf_error)
8497 	    /* Try to call the actual copy constructor for a good error.  */
8498 	    call_copy_ctor (a, complain);
8499 	  return error_mark_node;
8500 	}
8501       else
8502 	a = convert_arg_to_ellipsis (a, complain);
8503       if (a == error_mark_node)
8504 	return error_mark_node;
8505       argarray[j++] = a;
8506     }
8507 
8508   gcc_assert (j <= nargs);
8509   nargs = j;
8510 
8511   /* Avoid to do argument-transformation, if warnings for format, and for
8512      nonnull are disabled.  Just in case that at least one of them is active
8513      the check_function_arguments function might warn about something.  */
8514 
8515   bool warned_p = false;
8516   if (warn_nonnull
8517       || warn_format
8518       || warn_suggest_attribute_format
8519       || warn_restrict)
8520     {
8521       tree *fargs = (!nargs ? argarray
8522 			    : (tree *) alloca (nargs * sizeof (tree)));
8523       for (j = 0; j < nargs; j++)
8524 	{
8525 	  /* For -Wformat undo the implicit passing by hidden reference
8526 	     done by convert_arg_to_ellipsis.  */
8527 	  if (TREE_CODE (argarray[j]) == ADDR_EXPR
8528 	      && TYPE_REF_P (TREE_TYPE (argarray[j])))
8529 	    fargs[j] = TREE_OPERAND (argarray[j], 0);
8530 	  else
8531 	    fargs[j] = argarray[j];
8532 	}
8533 
8534       warned_p = check_function_arguments (input_location, fn, TREE_TYPE (fn),
8535 					   nargs, fargs, NULL);
8536     }
8537 
8538   if (DECL_INHERITED_CTOR (fn))
8539     {
8540       /* Check for passing ellipsis arguments to an inherited constructor.  We
8541 	 could handle this by open-coding the inherited constructor rather than
8542 	 defining it, but let's not bother now.  */
8543       if (!cp_unevaluated_operand
8544 	  && cand->num_convs
8545 	  && cand->convs[cand->num_convs-1]->ellipsis_p)
8546 	{
8547 	  if (complain & tf_error)
8548 	    {
8549 	      sorry ("passing arguments to ellipsis of inherited constructor "
8550 		     "%qD", cand->fn);
8551 	      inform (DECL_SOURCE_LOCATION (cand->fn), "declared here");
8552 	    }
8553 	  return error_mark_node;
8554 	}
8555 
8556       /* A base constructor inheriting from a virtual base doesn't get the
8557 	 inherited arguments, just this and __vtt.  */
8558       if (ctor_omit_inherited_parms (fn))
8559 	nargs = 2;
8560     }
8561 
8562   /* Avoid actually calling copy constructors and copy assignment operators,
8563      if possible.  */
8564 
8565   if (! flag_elide_constructors && !force_elide)
8566     /* Do things the hard way.  */;
8567   else if (cand->num_convs == 1
8568            && (DECL_COPY_CONSTRUCTOR_P (fn)
8569                || DECL_MOVE_CONSTRUCTOR_P (fn))
8570 	   /* It's unsafe to elide the constructor when handling
8571 	      a noexcept-expression, it may evaluate to the wrong
8572 	      value (c++/53025).  */
8573 	   && (force_elide || cp_noexcept_operand == 0))
8574     {
8575       tree targ;
8576       tree arg = argarray[num_artificial_parms_for (fn)];
8577       tree fa;
8578       bool trivial = trivial_fn_p (fn);
8579 
8580       /* Pull out the real argument, disregarding const-correctness.  */
8581       targ = arg;
8582       /* Strip the reference binding for the constructor parameter.  */
8583       if (CONVERT_EXPR_P (targ)
8584 	  && TYPE_REF_P (TREE_TYPE (targ)))
8585 	targ = TREE_OPERAND (targ, 0);
8586       /* But don't strip any other reference bindings; binding a temporary to a
8587 	 reference prevents copy elision.  */
8588       while ((CONVERT_EXPR_P (targ)
8589 	      && !TYPE_REF_P (TREE_TYPE (targ)))
8590 	     || TREE_CODE (targ) == NON_LVALUE_EXPR)
8591 	targ = TREE_OPERAND (targ, 0);
8592       if (TREE_CODE (targ) == ADDR_EXPR)
8593 	{
8594 	  targ = TREE_OPERAND (targ, 0);
8595 	  if (!same_type_ignoring_top_level_qualifiers_p
8596 	      (TREE_TYPE (TREE_TYPE (arg)), TREE_TYPE (targ)))
8597 	    targ = NULL_TREE;
8598 	}
8599       else
8600 	targ = NULL_TREE;
8601 
8602       if (targ)
8603 	arg = targ;
8604       else
8605 	arg = cp_build_fold_indirect_ref (arg);
8606 
8607       /* In C++17 we shouldn't be copying a TARGET_EXPR except into a base
8608 	 subobject.  */
8609       if (CHECKING_P && cxx_dialect >= cxx17)
8610 	gcc_assert (TREE_CODE (arg) != TARGET_EXPR
8611 		    || force_elide
8612 		    /* It's from binding the ref parm to a packed field. */
8613 		    || convs[0]->need_temporary_p
8614 		    || seen_error ()
8615 		    /* See unsafe_copy_elision_p.  */
8616 		    || DECL_BASE_CONSTRUCTOR_P (fn));
8617 
8618       fa = argarray[0];
8619       bool unsafe = unsafe_copy_elision_p (fa, arg);
8620       bool eliding_temp = (TREE_CODE (arg) == TARGET_EXPR && !unsafe);
8621 
8622       /* [class.copy]: the copy constructor is implicitly defined even if the
8623 	 implementation elided its use.  But don't warn about deprecation when
8624 	 eliding a temporary, as then no copy is actually performed.  */
8625       warning_sentinel s (warn_deprecated_copy, eliding_temp);
8626       if (force_elide)
8627 	/* The language says this isn't called.  */;
8628       else if (!trivial)
8629 	{
8630 	  if (!mark_used (fn, complain) && !(complain & tf_error))
8631 	    return error_mark_node;
8632 	  already_used = true;
8633 	}
8634       else
8635 	cp_warn_deprecated_use (fn, complain);
8636 
8637       /* If we're creating a temp and we already have one, don't create a
8638 	 new one.  If we're not creating a temp but we get one, use
8639 	 INIT_EXPR to collapse the temp into our target.  Otherwise, if the
8640 	 ctor is trivial, do a bitwise copy with a simple TARGET_EXPR for a
8641 	 temp or an INIT_EXPR otherwise.  */
8642       if (is_dummy_object (fa))
8643 	{
8644 	  if (TREE_CODE (arg) == TARGET_EXPR)
8645 	    return arg;
8646 	  else if (trivial)
8647 	    return force_target_expr (DECL_CONTEXT (fn), arg, complain);
8648 	}
8649       else if ((trivial || TREE_CODE (arg) == TARGET_EXPR)
8650 	       && !unsafe)
8651 	{
8652 	  tree to = cp_stabilize_reference (cp_build_fold_indirect_ref (fa));
8653 
8654 	  val = build2 (INIT_EXPR, DECL_CONTEXT (fn), to, arg);
8655 	  return val;
8656 	}
8657     }
8658   else if (DECL_ASSIGNMENT_OPERATOR_P (fn)
8659 	   && DECL_OVERLOADED_OPERATOR_IS (fn, NOP_EXPR)
8660 	   && trivial_fn_p (fn))
8661     {
8662       tree to = cp_stabilize_reference
8663 	(cp_build_fold_indirect_ref (argarray[0]));
8664       tree type = TREE_TYPE (to);
8665       tree as_base = CLASSTYPE_AS_BASE (type);
8666       tree arg = argarray[1];
8667       location_t loc = cp_expr_loc_or_loc (arg, input_location);
8668 
8669       if (is_really_empty_class (type, /*ignore_vptr*/true))
8670 	{
8671 	  /* Avoid copying empty classes.  */
8672 	  val = build2 (COMPOUND_EXPR, type, arg, to);
8673 	  TREE_NO_WARNING (val) = 1;
8674 	}
8675       else if (tree_int_cst_equal (TYPE_SIZE (type), TYPE_SIZE (as_base)))
8676 	{
8677 	  if (is_std_init_list (type)
8678 	      && conv_binds_ref_to_prvalue (convs[1]))
8679 	    warning_at (loc, OPT_Winit_list_lifetime,
8680 			"assignment from temporary initializer_list does not "
8681 			"extend the lifetime of the underlying array");
8682 	  arg = cp_build_fold_indirect_ref (arg);
8683 	  val = build2 (MODIFY_EXPR, TREE_TYPE (to), to, arg);
8684 	}
8685       else
8686 	{
8687 	  /* We must only copy the non-tail padding parts.  */
8688 	  tree arg0, arg2, t;
8689 	  tree array_type, alias_set;
8690 
8691 	  arg2 = TYPE_SIZE_UNIT (as_base);
8692 	  arg0 = cp_build_addr_expr (to, complain);
8693 
8694 	  array_type = build_array_type (unsigned_char_type_node,
8695 					 build_index_type
8696 					   (size_binop (MINUS_EXPR,
8697 							arg2, size_int (1))));
8698 	  alias_set = build_int_cst (build_pointer_type (type), 0);
8699 	  t = build2 (MODIFY_EXPR, void_type_node,
8700 		      build2 (MEM_REF, array_type, arg0, alias_set),
8701 		      build2 (MEM_REF, array_type, arg, alias_set));
8702 	  val = build2 (COMPOUND_EXPR, TREE_TYPE (to), t, to);
8703           TREE_NO_WARNING (val) = 1;
8704 	}
8705 
8706       cp_warn_deprecated_use (fn, complain);
8707 
8708       return val;
8709     }
8710   else if (trivial_fn_p (fn))
8711     {
8712       if (DECL_DESTRUCTOR_P (fn))
8713 	return build_trivial_dtor_call (argarray[0]);
8714       else if (default_ctor_p (fn))
8715 	{
8716 	  if (is_dummy_object (argarray[0]))
8717 	    return force_target_expr (DECL_CONTEXT (fn), void_node,
8718 				      no_cleanup_complain);
8719 	  else
8720 	    return cp_build_fold_indirect_ref (argarray[0]);
8721 	}
8722     }
8723 
8724   gcc_assert (!force_elide);
8725 
8726   if (!already_used
8727       && !mark_used (fn, complain))
8728     return error_mark_node;
8729 
8730   /* Warn if the built-in writes to an object of a non-trivial type.  */
8731   if (warn_class_memaccess
8732       && vec_safe_length (args) >= 2
8733       && DECL_BUILT_IN_CLASS (fn) == BUILT_IN_NORMAL)
8734     maybe_warn_class_memaccess (input_location, fn, args);
8735 
8736   if (DECL_VINDEX (fn) && (flags & LOOKUP_NONVIRTUAL) == 0)
8737     {
8738       tree t;
8739       tree binfo = lookup_base (TREE_TYPE (TREE_TYPE (argarray[0])),
8740 				DECL_CONTEXT (fn),
8741 				ba_any, NULL, complain);
8742       gcc_assert (binfo && binfo != error_mark_node);
8743 
8744       argarray[0] = build_base_path (PLUS_EXPR, argarray[0], binfo, 1,
8745 				     complain);
8746       if (TREE_SIDE_EFFECTS (argarray[0]))
8747 	argarray[0] = save_expr (argarray[0]);
8748       t = build_pointer_type (TREE_TYPE (fn));
8749       fn = build_vfn_ref (argarray[0], DECL_VINDEX (fn));
8750       TREE_TYPE (fn) = t;
8751     }
8752   else
8753     {
8754       fn = build_addr_func (fn, complain);
8755       if (fn == error_mark_node)
8756 	return error_mark_node;
8757     }
8758 
8759   tree call = build_cxx_call (fn, nargs, argarray, complain|decltype_flag);
8760   if (call == error_mark_node)
8761     return call;
8762   if (cand->flags & LOOKUP_LIST_INIT_CTOR)
8763     {
8764       tree c = extract_call_expr (call);
8765       /* build_new_op_1 will clear this when appropriate.  */
8766       CALL_EXPR_ORDERED_ARGS (c) = true;
8767     }
8768   if (warned_p)
8769     {
8770       tree c = extract_call_expr (call);
8771       if (TREE_CODE (c) == CALL_EXPR)
8772 	TREE_NO_WARNING (c) = 1;
8773     }
8774   return call;
8775 }
8776 
8777 namespace
8778 {
8779 
8780 /* Return the DECL of the first non-static subobject of class TYPE
8781    that satisfies the predicate PRED or null if none can be found.  */
8782 
8783 template <class Predicate>
8784 tree
first_non_static_field(tree type,Predicate pred)8785 first_non_static_field (tree type, Predicate pred)
8786 {
8787   if (!type || !CLASS_TYPE_P (type))
8788     return NULL_TREE;
8789 
8790   for (tree field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
8791     {
8792       if (TREE_CODE (field) != FIELD_DECL)
8793 	continue;
8794       if (TREE_STATIC (field))
8795 	continue;
8796       if (pred (field))
8797 	return field;
8798     }
8799 
8800   int i = 0;
8801 
8802   for (tree base_binfo, binfo = TYPE_BINFO (type);
8803        BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
8804     {
8805       tree base = TREE_TYPE (base_binfo);
8806       if (pred (base))
8807 	return base;
8808       if (tree field = first_non_static_field (base, pred))
8809 	return field;
8810     }
8811 
8812   return NULL_TREE;
8813 }
8814 
8815 struct NonPublicField
8816 {
operatorNonPublicField8817   bool operator() (const_tree t)
8818   {
8819     return DECL_P (t) && (TREE_PRIVATE (t) || TREE_PROTECTED (t));
8820   }
8821 };
8822 
8823 /* Return the DECL of the first non-public subobject of class TYPE
8824    or null if none can be found.  */
8825 
8826 static inline tree
first_non_public_field(tree type)8827 first_non_public_field (tree type)
8828 {
8829   return first_non_static_field (type, NonPublicField ());
8830 }
8831 
8832 struct NonTrivialField
8833 {
operatorNonTrivialField8834   bool operator() (const_tree t)
8835   {
8836     return !trivial_type_p (DECL_P (t) ? TREE_TYPE (t) : t);
8837   }
8838 };
8839 
8840 /* Return the DECL of the first non-trivial subobject of class TYPE
8841    or null if none can be found.  */
8842 
8843 static inline tree
first_non_trivial_field(tree type)8844 first_non_trivial_field (tree type)
8845 {
8846   return first_non_static_field (type, NonTrivialField ());
8847 }
8848 
8849 }   /* unnamed namespace */
8850 
8851 /* Return true if all copy and move assignment operator overloads for
8852    class TYPE are trivial and at least one of them is not deleted and,
8853    when ACCESS is set, accessible.  Return false otherwise.  Set
8854    HASASSIGN to true when the TYPE has a (not necessarily trivial)
8855    copy or move assignment.  */
8856 
8857 static bool
has_trivial_copy_assign_p(tree type,bool access,bool * hasassign)8858 has_trivial_copy_assign_p (tree type, bool access, bool *hasassign)
8859 {
8860   tree fns = get_class_binding (type, assign_op_identifier);
8861   bool all_trivial = true;
8862 
8863   /* Iterate over overloads of the assignment operator, checking
8864      accessible copy assignments for triviality.  */
8865 
8866   for (ovl_iterator oi (fns); oi; ++oi)
8867     {
8868       tree f = *oi;
8869 
8870       /* Skip operators that aren't copy assignments.  */
8871       if (!copy_fn_p (f))
8872 	continue;
8873 
8874       bool accessible = (!access || !(TREE_PRIVATE (f) || TREE_PROTECTED (f))
8875 			 || accessible_p (TYPE_BINFO (type), f, true));
8876 
8877       /* Skip template assignment operators and deleted functions.  */
8878       if (TREE_CODE (f) != FUNCTION_DECL || DECL_DELETED_FN (f))
8879 	continue;
8880 
8881       if (accessible)
8882 	*hasassign = true;
8883 
8884       if (!accessible || !trivial_fn_p (f))
8885 	all_trivial = false;
8886 
8887       /* Break early when both properties have been determined.  */
8888       if (*hasassign && !all_trivial)
8889 	break;
8890     }
8891 
8892   /* Return true if they're all trivial and one of the expressions
8893      TYPE() = TYPE() or TYPE() = (TYPE&)() is valid.  */
8894   tree ref = cp_build_reference_type (type, false);
8895   return (all_trivial
8896 	  && (is_trivially_xible (MODIFY_EXPR, type, type)
8897 	      || is_trivially_xible (MODIFY_EXPR, type, ref)));
8898 }
8899 
8900 /* Return true if all copy and move ctor overloads for class TYPE are
8901    trivial and at least one of them is not deleted and, when ACCESS is
8902    set, accessible.  Return false otherwise.  Set each element of HASCTOR[]
8903    to true when the TYPE has a (not necessarily trivial) default and copy
8904    (or move) ctor, respectively.  */
8905 
8906 static bool
has_trivial_copy_p(tree type,bool access,bool hasctor[2])8907 has_trivial_copy_p (tree type, bool access, bool hasctor[2])
8908 {
8909   tree fns = get_class_binding (type, complete_ctor_identifier);
8910   bool all_trivial = true;
8911 
8912   for (ovl_iterator oi (fns); oi; ++oi)
8913     {
8914       tree f = *oi;
8915 
8916       /* Skip template constructors.  */
8917       if (TREE_CODE (f) != FUNCTION_DECL)
8918 	continue;
8919 
8920       bool cpy_or_move_ctor_p = copy_fn_p (f);
8921 
8922       /* Skip ctors other than default, copy, and move.  */
8923       if (!cpy_or_move_ctor_p && !default_ctor_p (f))
8924 	continue;
8925 
8926       if (DECL_DELETED_FN (f))
8927 	continue;
8928 
8929       bool accessible = (!access || !(TREE_PRIVATE (f) || TREE_PROTECTED (f))
8930 			 || accessible_p (TYPE_BINFO (type), f, true));
8931 
8932       if (accessible)
8933 	hasctor[cpy_or_move_ctor_p] = true;
8934 
8935       if (cpy_or_move_ctor_p && (!accessible || !trivial_fn_p (f)))
8936 	all_trivial = false;
8937 
8938       /* Break early when both properties have been determined.  */
8939       if (hasctor[0] && hasctor[1] && !all_trivial)
8940 	break;
8941     }
8942 
8943   return all_trivial;
8944 }
8945 
8946 /* Issue a warning on a call to the built-in function FNDECL if it is
8947    a raw memory write whose destination is not an object of (something
8948    like) trivial or standard layout type with a non-deleted assignment
8949    and copy ctor.  Detects const correctness violations, corrupting
8950    references, virtual table pointers, and bypassing non-trivial
8951    assignments.  */
8952 
8953 static void
maybe_warn_class_memaccess(location_t loc,tree fndecl,const vec<tree,va_gc> * args)8954 maybe_warn_class_memaccess (location_t loc, tree fndecl,
8955 			    const vec<tree, va_gc> *args)
8956 {
8957   /* Except for bcopy where it's second, the destination pointer is
8958      the first argument for all functions handled here.  Compute
8959      the index of the destination and source arguments.  */
8960   unsigned dstidx = DECL_FUNCTION_CODE (fndecl) == BUILT_IN_BCOPY;
8961   unsigned srcidx = !dstidx;
8962 
8963   tree dest = (*args)[dstidx];
8964   if (!TREE_TYPE (dest) || !INDIRECT_TYPE_P (TREE_TYPE (dest)))
8965     return;
8966 
8967   tree srctype = NULL_TREE;
8968 
8969   /* Determine the type of the pointed-to object and whether it's
8970      a complete class type.  */
8971   tree desttype = TREE_TYPE (TREE_TYPE (dest));
8972 
8973   if (!desttype || !COMPLETE_TYPE_P (desttype) || !CLASS_TYPE_P (desttype))
8974     return;
8975 
8976   /* Check to see if the raw memory call is made by a non-static member
8977      function with THIS as the destination argument for the destination
8978      type.  If so, and if the class has no non-trivial bases or members,
8979      be more permissive.  */
8980   if (current_function_decl
8981       && DECL_NONSTATIC_MEMBER_FUNCTION_P (current_function_decl)
8982       && is_this_parameter (tree_strip_nop_conversions (dest)))
8983     {
8984       tree ctx = DECL_CONTEXT (current_function_decl);
8985       bool special = same_type_ignoring_top_level_qualifiers_p (ctx, desttype);
8986       tree binfo = TYPE_BINFO (ctx);
8987 
8988       if (special
8989 	  && !BINFO_VTABLE (binfo)
8990 	  && !first_non_trivial_field (desttype))
8991 	return;
8992     }
8993 
8994   /* True if the class is trivial.  */
8995   bool trivial = trivial_type_p (desttype);
8996 
8997   /* Set to true if DESTYPE has an accessible copy assignment.  */
8998   bool hasassign = false;
8999   /* True if all of the class' overloaded copy assignment operators
9000      are all trivial (and not deleted) and at least one of them is
9001      accessible.  */
9002   bool trivassign = has_trivial_copy_assign_p (desttype, true, &hasassign);
9003 
9004   /* Set to true if DESTTYPE has an accessible default and copy ctor,
9005      respectively.  */
9006   bool hasctors[2] = { false, false };
9007 
9008   /* True if all of the class' overloaded copy constructors are all
9009      trivial (and not deleted) and at least one of them is accessible.  */
9010   bool trivcopy = has_trivial_copy_p (desttype, true, hasctors);
9011 
9012   /* Set FLD to the first private/protected member of the class.  */
9013   tree fld = trivial ? first_non_public_field (desttype) : NULL_TREE;
9014 
9015   /* The warning format string.  */
9016   const char *warnfmt = NULL;
9017   /* A suggested alternative to offer instead of the raw memory call.
9018      Empty string when none can be come up with.  */
9019   const char *suggest = "";
9020   bool warned = false;
9021 
9022   switch (DECL_FUNCTION_CODE (fndecl))
9023     {
9024     case BUILT_IN_MEMSET:
9025       if (!integer_zerop (maybe_constant_value ((*args)[1])))
9026 	{
9027 	  /* Diagnose setting non-copy-assignable or non-trivial types,
9028 	     or types with a private member, to (potentially) non-zero
9029 	     bytes.  Since the value of the bytes being written is unknown,
9030 	     suggest using assignment instead (if one exists).  Also warn
9031 	     for writes into objects for which zero-initialization doesn't
9032 	     mean all bits clear (pointer-to-member data, where null is all
9033 	     bits set).  Since the value being written is (most likely)
9034 	     non-zero, simply suggest assignment (but not copy assignment).  */
9035 	  suggest = "; use assignment instead";
9036 	  if (!trivassign)
9037 	    warnfmt = G_("%qD writing to an object of type %#qT with "
9038 			 "no trivial copy-assignment");
9039 	  else if (!trivial)
9040 	    warnfmt = G_("%qD writing to an object of non-trivial type %#qT%s");
9041 	  else if (fld)
9042 	    {
9043 	      const char *access = TREE_PRIVATE (fld) ? "private" : "protected";
9044 	      warned = warning_at (loc, OPT_Wclass_memaccess,
9045 				   "%qD writing to an object of type %#qT with "
9046 				   "%qs member %qD",
9047 				   fndecl, desttype, access, fld);
9048 	    }
9049 	  else if (!zero_init_p (desttype))
9050 	    warnfmt = G_("%qD writing to an object of type %#qT containing "
9051 			 "a pointer to data member%s");
9052 
9053 	  break;
9054 	}
9055       /* Fall through.  */
9056 
9057     case BUILT_IN_BZERO:
9058       /* Similarly to the above, diagnose clearing non-trivial or non-
9059 	 standard layout objects, or objects of types with no assignmenmt.
9060 	 Since the value being written is known to be zero, suggest either
9061 	 copy assignment, copy ctor, or default ctor as an alternative,
9062 	 depending on what's available.  */
9063 
9064       if (hasassign && hasctors[0])
9065 	suggest = G_("; use assignment or value-initialization instead");
9066       else if (hasassign)
9067 	suggest = G_("; use assignment instead");
9068       else if (hasctors[0])
9069 	suggest = G_("; use value-initialization instead");
9070 
9071       if (!trivassign)
9072 	warnfmt = G_("%qD clearing an object of type %#qT with "
9073 		     "no trivial copy-assignment%s");
9074       else if (!trivial)
9075 	warnfmt =  G_("%qD clearing an object of non-trivial type %#qT%s");
9076       else if (!zero_init_p (desttype))
9077 	warnfmt = G_("%qD clearing an object of type %#qT containing "
9078 		     "a pointer-to-member%s");
9079       break;
9080 
9081     case BUILT_IN_BCOPY:
9082     case BUILT_IN_MEMCPY:
9083     case BUILT_IN_MEMMOVE:
9084     case BUILT_IN_MEMPCPY:
9085       /* Determine the type of the source object.  */
9086       srctype = TREE_TYPE ((*args)[srcidx]);
9087       if (!srctype || !INDIRECT_TYPE_P (srctype))
9088 	srctype = void_type_node;
9089       else
9090 	srctype = TREE_TYPE (srctype);
9091 
9092       /* Since it's impossible to determine wheter the byte copy is
9093 	 being used in place of assignment to an existing object or
9094 	 as a substitute for initialization, assume it's the former.
9095 	 Determine the best alternative to use instead depending on
9096 	 what's not deleted.  */
9097       if (hasassign && hasctors[1])
9098 	suggest = G_("; use copy-assignment or copy-initialization instead");
9099       else if (hasassign)
9100 	suggest = G_("; use copy-assignment instead");
9101       else if (hasctors[1])
9102 	suggest = G_("; use copy-initialization instead");
9103 
9104       if (!trivassign)
9105 	warnfmt = G_("%qD writing to an object of type %#qT with no trivial "
9106 		     "copy-assignment%s");
9107       else if (!trivially_copyable_p (desttype))
9108 	warnfmt = G_("%qD writing to an object of non-trivially copyable "
9109 		     "type %#qT%s");
9110       else if (!trivcopy)
9111 	warnfmt = G_("%qD writing to an object with a deleted copy constructor");
9112 
9113       else if (!trivial
9114 	       && !VOID_TYPE_P (srctype)
9115 	       && !char_type_p (TYPE_MAIN_VARIANT (srctype))
9116 	       && !same_type_ignoring_top_level_qualifiers_p (desttype,
9117 							      srctype))
9118 	{
9119 	  /* Warn when copying into a non-trivial object from an object
9120 	     of a different type other than void or char.  */
9121 	  warned = warning_at (loc, OPT_Wclass_memaccess,
9122 			       "%qD copying an object of non-trivial type "
9123 			       "%#qT from an array of %#qT",
9124 			       fndecl, desttype, srctype);
9125 	}
9126       else if (fld
9127 	       && !VOID_TYPE_P (srctype)
9128 	       && !char_type_p (TYPE_MAIN_VARIANT (srctype))
9129 	       && !same_type_ignoring_top_level_qualifiers_p (desttype,
9130 							      srctype))
9131 	{
9132 	  const char *access = TREE_PRIVATE (fld) ? "private" : "protected";
9133 	  warned = warning_at (loc, OPT_Wclass_memaccess,
9134 			       "%qD copying an object of type %#qT with "
9135 			       "%qs member %qD from an array of %#qT; use "
9136 			       "assignment or copy-initialization instead",
9137 			       fndecl, desttype, access, fld, srctype);
9138 	}
9139       else if (!trivial && vec_safe_length (args) > 2)
9140 	{
9141 	  tree sz = maybe_constant_value ((*args)[2]);
9142 	  if (!tree_fits_uhwi_p (sz))
9143 	    break;
9144 
9145 	  /* Finally, warn on partial copies.  */
9146 	  unsigned HOST_WIDE_INT typesize
9147 	    = tree_to_uhwi (TYPE_SIZE_UNIT (desttype));
9148 	  if (unsigned HOST_WIDE_INT partial = tree_to_uhwi (sz) % typesize)
9149 	    warned = warning_at (loc, OPT_Wclass_memaccess,
9150 				 (typesize - partial > 1
9151 				  ? G_("%qD writing to an object of "
9152 				       "a non-trivial type %#qT leaves %wu "
9153 				       "bytes unchanged")
9154 				  : G_("%qD writing to an object of "
9155 				       "a non-trivial type %#qT leaves %wu "
9156 				       "byte unchanged")),
9157 				 fndecl, desttype, typesize - partial);
9158 	}
9159       break;
9160 
9161     case BUILT_IN_REALLOC:
9162 
9163       if (!trivially_copyable_p (desttype))
9164 	warnfmt = G_("%qD moving an object of non-trivially copyable type "
9165 		     "%#qT; use %<new%> and %<delete%> instead");
9166       else if (!trivcopy)
9167 	warnfmt = G_("%qD moving an object of type %#qT with deleted copy "
9168 		     "constructor; use %<new%> and %<delete%> instead");
9169       else if (!get_dtor (desttype, tf_none))
9170 	warnfmt = G_("%qD moving an object of type %#qT with deleted "
9171 		     "destructor");
9172       else if (!trivial)
9173 	{
9174 	  tree sz = maybe_constant_value ((*args)[1]);
9175 	  if (TREE_CODE (sz) == INTEGER_CST
9176 	      && tree_int_cst_lt (sz, TYPE_SIZE_UNIT (desttype)))
9177 	    /* Finally, warn on reallocation into insufficient space.  */
9178 	    warned = warning_at (loc, OPT_Wclass_memaccess,
9179 				 "%qD moving an object of non-trivial type "
9180 				 "%#qT and size %E into a region of size %E",
9181 				 fndecl, desttype, TYPE_SIZE_UNIT (desttype),
9182 				 sz);
9183 	}
9184       break;
9185 
9186     default:
9187       return;
9188     }
9189 
9190   if (warnfmt)
9191     {
9192       if (suggest)
9193 	warned = warning_at (loc, OPT_Wclass_memaccess,
9194 			     warnfmt, fndecl, desttype, suggest);
9195       else
9196 	warned = warning_at (loc, OPT_Wclass_memaccess,
9197 			     warnfmt, fndecl, desttype);
9198     }
9199 
9200   if (warned)
9201     inform (location_of (desttype), "%#qT declared here", desttype);
9202 }
9203 
9204 /* Build and return a call to FN, using NARGS arguments in ARGARRAY.
9205    This function performs no overload resolution, conversion, or other
9206    high-level operations.  */
9207 
9208 tree
build_cxx_call(tree fn,int nargs,tree * argarray,tsubst_flags_t complain)9209 build_cxx_call (tree fn, int nargs, tree *argarray,
9210 		tsubst_flags_t complain)
9211 {
9212   tree fndecl;
9213 
9214   /* Remember roughly where this call is.  */
9215   location_t loc = cp_expr_loc_or_loc (fn, input_location);
9216   fn = build_call_a (fn, nargs, argarray);
9217   SET_EXPR_LOCATION (fn, loc);
9218 
9219   fndecl = get_callee_fndecl (fn);
9220 
9221   /* Check that arguments to builtin functions match the expectations.  */
9222   if (fndecl
9223       && !processing_template_decl
9224       && fndecl_built_in_p (fndecl, BUILT_IN_NORMAL))
9225     {
9226       int i;
9227 
9228       /* We need to take care that values to BUILT_IN_NORMAL
9229          are reduced.  */
9230       for (i = 0; i < nargs; i++)
9231 	argarray[i] = maybe_constant_value (argarray[i]);
9232 
9233       if (!check_builtin_function_arguments (EXPR_LOCATION (fn), vNULL, fndecl,
9234 					     nargs, argarray))
9235 	return error_mark_node;
9236     }
9237 
9238   if (VOID_TYPE_P (TREE_TYPE (fn)))
9239     return fn;
9240 
9241   /* 5.2.2/11: If a function call is a prvalue of object type: if the
9242      function call is either the operand of a decltype-specifier or the
9243      right operand of a comma operator that is the operand of a
9244      decltype-specifier, a temporary object is not introduced for the
9245      prvalue. The type of the prvalue may be incomplete.  */
9246   if (!(complain & tf_decltype))
9247     {
9248       fn = require_complete_type_sfinae (fn, complain);
9249       if (fn == error_mark_node)
9250 	return error_mark_node;
9251 
9252       if (MAYBE_CLASS_TYPE_P (TREE_TYPE (fn)))
9253 	{
9254 	  fn = build_cplus_new (TREE_TYPE (fn), fn, complain);
9255 	  maybe_warn_parm_abi (TREE_TYPE (fn), loc);
9256 	}
9257     }
9258   return convert_from_reference (fn);
9259 }
9260 
9261 /* Returns the value to use for the in-charge parameter when making a
9262    call to a function with the indicated NAME.
9263 
9264    FIXME:Can't we find a neater way to do this mapping?  */
9265 
9266 tree
in_charge_arg_for_name(tree name)9267 in_charge_arg_for_name (tree name)
9268 {
9269   if (IDENTIFIER_CTOR_P (name))
9270     {
9271       if (name == complete_ctor_identifier)
9272 	return integer_one_node;
9273       gcc_checking_assert (name == base_ctor_identifier);
9274     }
9275   else
9276     {
9277       if (name == complete_dtor_identifier)
9278 	return integer_two_node;
9279       else if (name == deleting_dtor_identifier)
9280 	return integer_three_node;
9281       gcc_checking_assert (name == base_dtor_identifier);
9282     }
9283 
9284   return integer_zero_node;
9285 }
9286 
9287 /* We've built up a constructor call RET.  Complain if it delegates to the
9288    constructor we're currently compiling.  */
9289 
9290 static void
check_self_delegation(tree ret)9291 check_self_delegation (tree ret)
9292 {
9293   if (TREE_CODE (ret) == TARGET_EXPR)
9294     ret = TARGET_EXPR_INITIAL (ret);
9295   tree fn = cp_get_callee_fndecl_nofold (ret);
9296   if (fn && DECL_ABSTRACT_ORIGIN (fn) == current_function_decl)
9297     error ("constructor delegates to itself");
9298 }
9299 
9300 /* Build a call to a constructor, destructor, or an assignment
9301    operator for INSTANCE, an expression with class type.  NAME
9302    indicates the special member function to call; *ARGS are the
9303    arguments.  ARGS may be NULL.  This may change ARGS.  BINFO
9304    indicates the base of INSTANCE that is to be passed as the `this'
9305    parameter to the member function called.
9306 
9307    FLAGS are the LOOKUP_* flags to use when processing the call.
9308 
9309    If NAME indicates a complete object constructor, INSTANCE may be
9310    NULL_TREE.  In this case, the caller will call build_cplus_new to
9311    store the newly constructed object into a VAR_DECL.  */
9312 
9313 tree
build_special_member_call(tree instance,tree name,vec<tree,va_gc> ** args,tree binfo,int flags,tsubst_flags_t complain)9314 build_special_member_call (tree instance, tree name, vec<tree, va_gc> **args,
9315 			   tree binfo, int flags, tsubst_flags_t complain)
9316 {
9317   tree fns;
9318   /* The type of the subobject to be constructed or destroyed.  */
9319   tree class_type;
9320   vec<tree, va_gc> *allocated = NULL;
9321   tree ret;
9322 
9323   gcc_assert (IDENTIFIER_CDTOR_P (name) || name == assign_op_identifier);
9324 
9325   if (error_operand_p (instance))
9326     return error_mark_node;
9327 
9328   if (IDENTIFIER_DTOR_P (name))
9329     {
9330       gcc_assert (args == NULL || vec_safe_is_empty (*args));
9331       if (!type_build_dtor_call (TREE_TYPE (instance)))
9332 	/* Shortcut to avoid lazy destructor declaration.  */
9333 	return build_trivial_dtor_call (instance);
9334     }
9335 
9336   if (TYPE_P (binfo))
9337     {
9338       /* Resolve the name.  */
9339       if (!complete_type_or_maybe_complain (binfo, NULL_TREE, complain))
9340 	return error_mark_node;
9341 
9342       binfo = TYPE_BINFO (binfo);
9343     }
9344 
9345   gcc_assert (binfo != NULL_TREE);
9346 
9347   class_type = BINFO_TYPE (binfo);
9348 
9349   /* Handle the special case where INSTANCE is NULL_TREE.  */
9350   if (name == complete_ctor_identifier && !instance)
9351     instance = build_dummy_object (class_type);
9352   else
9353     {
9354       /* Convert to the base class, if necessary.  */
9355       if (!same_type_ignoring_top_level_qualifiers_p
9356 	  (TREE_TYPE (instance), BINFO_TYPE (binfo)))
9357 	{
9358 	  if (IDENTIFIER_CDTOR_P (name))
9359 	    /* For constructors and destructors, either the base is
9360 	       non-virtual, or it is virtual but we are doing the
9361 	       conversion from a constructor or destructor for the
9362 	       complete object.  In either case, we can convert
9363 	       statically.  */
9364 	    instance = convert_to_base_statically (instance, binfo);
9365 	  else
9366 	    {
9367 	      /* However, for assignment operators, we must convert
9368 		 dynamically if the base is virtual.  */
9369 	      gcc_checking_assert (name == assign_op_identifier);
9370 	      instance = build_base_path (PLUS_EXPR, instance,
9371 					  binfo, /*nonnull=*/1, complain);
9372 	    }
9373 	}
9374     }
9375 
9376   gcc_assert (instance != NULL_TREE);
9377 
9378   /* In C++17, "If the initializer expression is a prvalue and the
9379      cv-unqualified version of the source type is the same class as the class
9380      of the destination, the initializer expression is used to initialize the
9381      destination object."  Handle that here to avoid doing overload
9382      resolution.  */
9383   if (cxx_dialect >= cxx17
9384       && args && vec_safe_length (*args) == 1
9385       && name == complete_ctor_identifier)
9386     {
9387       tree arg = (**args)[0];
9388 
9389       if (BRACE_ENCLOSED_INITIALIZER_P (arg)
9390 	  && !TYPE_HAS_LIST_CTOR (class_type)
9391 	  && CONSTRUCTOR_NELTS (arg) == 1)
9392 	arg = CONSTRUCTOR_ELT (arg, 0)->value;
9393 
9394       if ((TREE_CODE (arg) == TARGET_EXPR
9395 	   || TREE_CODE (arg) == CONSTRUCTOR)
9396 	  && (same_type_ignoring_top_level_qualifiers_p
9397 	      (class_type, TREE_TYPE (arg))))
9398 	{
9399 	  if (is_dummy_object (instance))
9400 	    return arg;
9401 	  else if (TREE_CODE (arg) == TARGET_EXPR)
9402 	    TARGET_EXPR_DIRECT_INIT_P (arg) = true;
9403 
9404 	  if ((complain & tf_error)
9405 	      && (flags & LOOKUP_DELEGATING_CONS))
9406 	    check_self_delegation (arg);
9407 	  /* Avoid change of behavior on Wunused-var-2.C.  */
9408 	  instance = mark_lvalue_use (instance);
9409 	  return build2 (INIT_EXPR, class_type, instance, arg);
9410 	}
9411     }
9412 
9413   fns = lookup_fnfields (binfo, name, 1);
9414 
9415   /* When making a call to a constructor or destructor for a subobject
9416      that uses virtual base classes, pass down a pointer to a VTT for
9417      the subobject.  */
9418   if ((name == base_ctor_identifier
9419        || name == base_dtor_identifier)
9420       && CLASSTYPE_VBASECLASSES (class_type))
9421     {
9422       tree vtt;
9423       tree sub_vtt;
9424 
9425       /* If the current function is a complete object constructor
9426 	 or destructor, then we fetch the VTT directly.
9427 	 Otherwise, we look it up using the VTT we were given.  */
9428       vtt = DECL_CHAIN (CLASSTYPE_VTABLES (current_class_type));
9429       vtt = decay_conversion (vtt, complain);
9430       if (vtt == error_mark_node)
9431 	return error_mark_node;
9432       vtt = build_if_in_charge (vtt, current_vtt_parm);
9433       if (BINFO_SUBVTT_INDEX (binfo))
9434 	sub_vtt = fold_build_pointer_plus (vtt, BINFO_SUBVTT_INDEX (binfo));
9435       else
9436 	sub_vtt = vtt;
9437 
9438       if (args == NULL)
9439 	{
9440 	  allocated = make_tree_vector ();
9441 	  args = &allocated;
9442 	}
9443 
9444       vec_safe_insert (*args, 0, sub_vtt);
9445     }
9446 
9447   ret = build_new_method_call (instance, fns, args,
9448 			       TYPE_BINFO (BINFO_TYPE (binfo)),
9449 			       flags, /*fn=*/NULL,
9450 			       complain);
9451 
9452   if (allocated != NULL)
9453     release_tree_vector (allocated);
9454 
9455   if ((complain & tf_error)
9456       && (flags & LOOKUP_DELEGATING_CONS)
9457       && name == complete_ctor_identifier)
9458     check_self_delegation (ret);
9459 
9460   return ret;
9461 }
9462 
9463 /* Return the NAME, as a C string.  The NAME indicates a function that
9464    is a member of TYPE.  *FREE_P is set to true if the caller must
9465    free the memory returned.
9466 
9467    Rather than go through all of this, we should simply set the names
9468    of constructors and destructors appropriately, and dispense with
9469    ctor_identifier, dtor_identifier, etc.  */
9470 
9471 static char *
name_as_c_string(tree name,tree type,bool * free_p)9472 name_as_c_string (tree name, tree type, bool *free_p)
9473 {
9474   const char *pretty_name;
9475 
9476   /* Assume that we will not allocate memory.  */
9477   *free_p = false;
9478   /* Constructors and destructors are special.  */
9479   if (IDENTIFIER_CDTOR_P (name))
9480     {
9481       pretty_name
9482 	= identifier_to_locale (IDENTIFIER_POINTER (constructor_name (type)));
9483       /* For a destructor, add the '~'.  */
9484       if (IDENTIFIER_DTOR_P (name))
9485 	{
9486 	  pretty_name = concat ("~", pretty_name, NULL);
9487 	  /* Remember that we need to free the memory allocated.  */
9488 	  *free_p = true;
9489 	}
9490     }
9491   else if (IDENTIFIER_CONV_OP_P (name))
9492     {
9493       pretty_name = concat ("operator ",
9494 			    type_as_string_translate (TREE_TYPE (name),
9495 						      TFF_PLAIN_IDENTIFIER),
9496 			    NULL);
9497       /* Remember that we need to free the memory allocated.  */
9498       *free_p = true;
9499     }
9500   else
9501     pretty_name = identifier_to_locale (IDENTIFIER_POINTER (name));
9502 
9503   return CONST_CAST (char *, pretty_name);
9504 }
9505 
9506 /* If CANDIDATES contains exactly one candidate, return it, otherwise
9507    return NULL.  */
9508 
9509 static z_candidate *
single_z_candidate(z_candidate * candidates)9510 single_z_candidate (z_candidate *candidates)
9511 {
9512   if (candidates == NULL)
9513     return NULL;
9514 
9515   if (candidates->next)
9516     return NULL;
9517 
9518   return candidates;
9519 }
9520 
9521 /* If CANDIDATE is invalid due to a bad argument type, return the
9522    pertinent conversion_info.
9523 
9524    Otherwise, return NULL.  */
9525 
9526 static const conversion_info *
maybe_get_bad_conversion_for_unmatched_call(const z_candidate * candidate)9527 maybe_get_bad_conversion_for_unmatched_call (const z_candidate *candidate)
9528 {
9529   /* Must be an rr_arg_conversion or rr_bad_arg_conversion.  */
9530   rejection_reason *r = candidate->reason;
9531 
9532   if (r == NULL)
9533     return NULL;
9534 
9535   switch (r->code)
9536     {
9537     default:
9538       return NULL;
9539 
9540     case rr_arg_conversion:
9541       return &r->u.conversion;
9542 
9543     case rr_bad_arg_conversion:
9544       return &r->u.bad_conversion;
9545     }
9546 }
9547 
9548 /* Issue an error and note complaining about a bad argument type at a
9549    callsite with a single candidate FNDECL.
9550 
9551    ARG_LOC is the location of the argument (or UNKNOWN_LOCATION, in which
9552    case input_location is used).
9553    FROM_TYPE is the type of the actual argument; TO_TYPE is the type of
9554    the formal parameter.  */
9555 
9556 void
complain_about_bad_argument(location_t arg_loc,tree from_type,tree to_type,tree fndecl,int parmnum)9557 complain_about_bad_argument (location_t arg_loc,
9558 			     tree from_type, tree to_type,
9559 			     tree fndecl, int parmnum)
9560 {
9561   auto_diagnostic_group d;
9562   range_label_for_type_mismatch rhs_label (from_type, to_type);
9563   range_label *label = &rhs_label;
9564   if (arg_loc == UNKNOWN_LOCATION)
9565     {
9566       arg_loc = input_location;
9567       label = NULL;
9568     }
9569   gcc_rich_location richloc (arg_loc, label);
9570   error_at (&richloc,
9571 	    "cannot convert %qH to %qI",
9572 	    from_type, to_type);
9573   maybe_inform_about_fndecl_for_bogus_argument_init (fndecl,
9574 						     parmnum);
9575 }
9576 
9577 /* Subroutine of build_new_method_call_1, for where there are no viable
9578    candidates for the call.  */
9579 
9580 static void
complain_about_no_candidates_for_method_call(tree instance,z_candidate * candidates,tree explicit_targs,tree basetype,tree optype,tree name,bool skip_first_for_error,vec<tree,va_gc> * user_args)9581 complain_about_no_candidates_for_method_call (tree instance,
9582 					      z_candidate *candidates,
9583 					      tree explicit_targs,
9584 					      tree basetype,
9585 					      tree optype, tree name,
9586 					      bool skip_first_for_error,
9587 					      vec<tree, va_gc> *user_args)
9588 {
9589   auto_diagnostic_group d;
9590   if (!COMPLETE_OR_OPEN_TYPE_P (basetype))
9591     cxx_incomplete_type_error (instance, basetype);
9592   else if (optype)
9593     error ("no matching function for call to %<%T::operator %T(%A)%#V%>",
9594 	   basetype, optype, build_tree_list_vec (user_args),
9595 	   TREE_TYPE (instance));
9596   else
9597     {
9598       /* Special-case for when there's a single candidate that's failing
9599 	 due to a bad argument type.  */
9600       if (z_candidate *candidate = single_z_candidate (candidates))
9601 	  if (const conversion_info *conv
9602 		= maybe_get_bad_conversion_for_unmatched_call (candidate))
9603 	    {
9604 	      tree from_type = conv->from;
9605 	      if (!TYPE_P (conv->from))
9606 		from_type = lvalue_type (conv->from);
9607 	      complain_about_bad_argument (conv->loc,
9608 					   from_type, conv->to_type,
9609 					   candidate->fn, conv->n_arg);
9610 	      return;
9611 	    }
9612 
9613       tree arglist = build_tree_list_vec (user_args);
9614       tree errname = name;
9615       bool twiddle = false;
9616       if (IDENTIFIER_CDTOR_P (errname))
9617 	{
9618 	  twiddle = IDENTIFIER_DTOR_P (errname);
9619 	  errname = constructor_name (basetype);
9620 	}
9621       if (explicit_targs)
9622 	errname = lookup_template_function (errname, explicit_targs);
9623       if (skip_first_for_error)
9624 	arglist = TREE_CHAIN (arglist);
9625       error ("no matching function for call to %<%T::%s%E(%A)%#V%>",
9626 	     basetype, &"~"[!twiddle], errname, arglist,
9627 	     TREE_TYPE (instance));
9628     }
9629   print_z_candidates (location_of (name), candidates);
9630 }
9631 
9632 /* Build a call to "INSTANCE.FN (ARGS)".  If FN_P is non-NULL, it will
9633    be set, upon return, to the function called.  ARGS may be NULL.
9634    This may change ARGS.  */
9635 
9636 static tree
build_new_method_call_1(tree instance,tree fns,vec<tree,va_gc> ** args,tree conversion_path,int flags,tree * fn_p,tsubst_flags_t complain)9637 build_new_method_call_1 (tree instance, tree fns, vec<tree, va_gc> **args,
9638 		         tree conversion_path, int flags,
9639 		         tree *fn_p, tsubst_flags_t complain)
9640 {
9641   struct z_candidate *candidates = 0, *cand;
9642   tree explicit_targs = NULL_TREE;
9643   tree basetype = NULL_TREE;
9644   tree access_binfo, binfo;
9645   tree optype;
9646   tree first_mem_arg = NULL_TREE;
9647   tree name;
9648   bool skip_first_for_error;
9649   vec<tree, va_gc> *user_args;
9650   tree call;
9651   tree fn;
9652   int template_only = 0;
9653   bool any_viable_p;
9654   tree orig_instance;
9655   tree orig_fns;
9656   vec<tree, va_gc> *orig_args = NULL;
9657   void *p;
9658 
9659   gcc_assert (instance != NULL_TREE);
9660 
9661   /* We don't know what function we're going to call, yet.  */
9662   if (fn_p)
9663     *fn_p = NULL_TREE;
9664 
9665   if (error_operand_p (instance)
9666       || !fns || error_operand_p (fns))
9667     return error_mark_node;
9668 
9669   if (!BASELINK_P (fns))
9670     {
9671       if (complain & tf_error)
9672 	error ("call to non-function %qD", fns);
9673       return error_mark_node;
9674     }
9675 
9676   orig_instance = instance;
9677   orig_fns = fns;
9678 
9679   /* Dismantle the baselink to collect all the information we need.  */
9680   if (!conversion_path)
9681     conversion_path = BASELINK_BINFO (fns);
9682   access_binfo = BASELINK_ACCESS_BINFO (fns);
9683   binfo = BASELINK_BINFO (fns);
9684   optype = BASELINK_OPTYPE (fns);
9685   fns = BASELINK_FUNCTIONS (fns);
9686   if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
9687     {
9688       explicit_targs = TREE_OPERAND (fns, 1);
9689       fns = TREE_OPERAND (fns, 0);
9690       template_only = 1;
9691     }
9692   gcc_assert (TREE_CODE (fns) == FUNCTION_DECL
9693 	      || TREE_CODE (fns) == TEMPLATE_DECL
9694 	      || TREE_CODE (fns) == OVERLOAD);
9695   fn = OVL_FIRST (fns);
9696   name = DECL_NAME (fn);
9697 
9698   basetype = TYPE_MAIN_VARIANT (TREE_TYPE (instance));
9699   gcc_assert (CLASS_TYPE_P (basetype));
9700 
9701   user_args = args == NULL ? NULL : *args;
9702   /* Under DR 147 A::A() is an invalid constructor call,
9703      not a functional cast.  */
9704   if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (fn))
9705     {
9706       if (! (complain & tf_error))
9707 	return error_mark_node;
9708 
9709       basetype = DECL_CONTEXT (fn);
9710       name = constructor_name (basetype);
9711       auto_diagnostic_group d;
9712       if (permerror (input_location,
9713 		     "cannot call constructor %<%T::%D%> directly",
9714 		     basetype, name))
9715 	inform (input_location, "for a function-style cast, remove the "
9716 		"redundant %<::%D%>", name);
9717       call = build_functional_cast (basetype, build_tree_list_vec (user_args),
9718 				    complain);
9719       return call;
9720     }
9721 
9722   if (processing_template_decl)
9723     {
9724       orig_args = args == NULL ? NULL : make_tree_vector_copy (*args);
9725       instance = build_non_dependent_expr (instance);
9726       if (args != NULL)
9727 	make_args_non_dependent (*args);
9728     }
9729 
9730   /* Process the argument list.  */
9731   if (args != NULL && *args != NULL)
9732     {
9733       *args = resolve_args (*args, complain);
9734       if (*args == NULL)
9735 	return error_mark_node;
9736       user_args = *args;
9737     }
9738 
9739   /* Consider the object argument to be used even if we end up selecting a
9740      static member function.  */
9741   instance = mark_type_use (instance);
9742 
9743   /* Figure out whether to skip the first argument for the error
9744      message we will display to users if an error occurs.  We don't
9745      want to display any compiler-generated arguments.  The "this"
9746      pointer hasn't been added yet.  However, we must remove the VTT
9747      pointer if this is a call to a base-class constructor or
9748      destructor.  */
9749   skip_first_for_error = false;
9750   if (IDENTIFIER_CDTOR_P (name))
9751     {
9752       /* Callers should explicitly indicate whether they want to ctor
9753 	 the complete object or just the part without virtual bases.  */
9754       gcc_assert (name != ctor_identifier);
9755 
9756       /* Remove the VTT pointer, if present.  */
9757       if ((name == base_ctor_identifier || name == base_dtor_identifier)
9758 	  && CLASSTYPE_VBASECLASSES (basetype))
9759 	skip_first_for_error = true;
9760 
9761       /* It's OK to call destructors and constructors on cv-qualified
9762 	 objects.  Therefore, convert the INSTANCE to the unqualified
9763 	 type, if necessary.  */
9764       if (!same_type_p (basetype, TREE_TYPE (instance)))
9765 	{
9766 	  instance = build_this (instance);
9767 	  instance = build_nop (build_pointer_type (basetype), instance);
9768 	  instance = build_fold_indirect_ref (instance);
9769 	}
9770     }
9771   else
9772     gcc_assert (!DECL_DESTRUCTOR_P (fn) && !DECL_CONSTRUCTOR_P (fn));
9773 
9774   /* For the overload resolution we need to find the actual `this`
9775      that would be captured if the call turns out to be to a
9776      non-static member function.  Do not actually capture it at this
9777      point.  */
9778   if (DECL_CONSTRUCTOR_P (fn))
9779     /* Constructors don't use the enclosing 'this'.  */
9780     first_mem_arg = instance;
9781   else
9782     first_mem_arg = maybe_resolve_dummy (instance, false);
9783 
9784   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
9785   p = conversion_obstack_alloc (0);
9786 
9787   /* The number of arguments artificial parms in ARGS; we subtract one because
9788      there's no 'this' in ARGS.  */
9789   unsigned skip = num_artificial_parms_for (fn) - 1;
9790 
9791   /* If CONSTRUCTOR_IS_DIRECT_INIT is set, this was a T{ } form
9792      initializer, not T({ }).  */
9793   if (DECL_CONSTRUCTOR_P (fn)
9794       && vec_safe_length (user_args) > skip
9795       && DIRECT_LIST_INIT_P ((*user_args)[skip]))
9796     {
9797       tree init_list = (*user_args)[skip];
9798       tree init = NULL_TREE;
9799 
9800       gcc_assert (user_args->length () == skip + 1
9801 		  && !(flags & LOOKUP_ONLYCONVERTING));
9802 
9803       /* If the initializer list has no elements and T is a class type with
9804 	 a default constructor, the object is value-initialized.  Handle
9805 	 this here so we don't need to handle it wherever we use
9806 	 build_special_member_call.  */
9807       if (CONSTRUCTOR_NELTS (init_list) == 0
9808 	  && TYPE_HAS_DEFAULT_CONSTRUCTOR (basetype)
9809 	  /* For a user-provided default constructor, use the normal
9810 	     mechanisms so that protected access works.  */
9811 	  && type_has_non_user_provided_default_constructor (basetype)
9812 	  && !processing_template_decl)
9813 	init = build_value_init (basetype, complain);
9814 
9815       /* If BASETYPE is an aggregate, we need to do aggregate
9816 	 initialization.  */
9817       else if (CP_AGGREGATE_TYPE_P (basetype))
9818 	{
9819 	  init = reshape_init (basetype, init_list, complain);
9820 	  init = digest_init (basetype, init, complain);
9821 	}
9822 
9823       if (init)
9824 	{
9825 	  if (is_dummy_object (instance))
9826 	    return get_target_expr_sfinae (init, complain);
9827 	  init = build2 (INIT_EXPR, TREE_TYPE (instance), instance, init);
9828 	  TREE_SIDE_EFFECTS (init) = true;
9829 	  return init;
9830 	}
9831 
9832       /* Otherwise go ahead with overload resolution.  */
9833       add_list_candidates (fns, first_mem_arg, user_args,
9834 			   basetype, explicit_targs, template_only,
9835 			   conversion_path, access_binfo, flags,
9836 			   &candidates, complain);
9837     }
9838   else
9839     add_candidates (fns, first_mem_arg, user_args, optype,
9840 		    explicit_targs, template_only, conversion_path,
9841 		    access_binfo, flags, &candidates, complain);
9842 
9843   any_viable_p = false;
9844   candidates = splice_viable (candidates, false, &any_viable_p);
9845 
9846   if (!any_viable_p)
9847     {
9848       if (complain & tf_error)
9849 	complain_about_no_candidates_for_method_call (instance, candidates,
9850 						      explicit_targs, basetype,
9851 						      optype, name,
9852 						      skip_first_for_error,
9853 						      user_args);
9854       call = error_mark_node;
9855     }
9856   else
9857     {
9858       cand = tourney (candidates, complain);
9859       if (cand == 0)
9860 	{
9861 	  char *pretty_name;
9862 	  bool free_p;
9863 	  tree arglist;
9864 
9865 	  if (complain & tf_error)
9866 	    {
9867 	      pretty_name = name_as_c_string (name, basetype, &free_p);
9868 	      arglist = build_tree_list_vec (user_args);
9869 	      if (skip_first_for_error)
9870 		arglist = TREE_CHAIN (arglist);
9871 	      auto_diagnostic_group d;
9872 	      if (!any_strictly_viable (candidates))
9873 		error ("no matching function for call to %<%s(%A)%>",
9874 		       pretty_name, arglist);
9875 	      else
9876 		error ("call of overloaded %<%s(%A)%> is ambiguous",
9877 		       pretty_name, arglist);
9878 	      print_z_candidates (location_of (name), candidates);
9879 	      if (free_p)
9880 		free (pretty_name);
9881 	    }
9882 	  call = error_mark_node;
9883 	}
9884       else
9885 	{
9886 	  fn = cand->fn;
9887 	  call = NULL_TREE;
9888 
9889 	  if (!(flags & LOOKUP_NONVIRTUAL)
9890 	      && DECL_PURE_VIRTUAL_P (fn)
9891 	      && instance == current_class_ref
9892 	      && (complain & tf_warning))
9893 	    {
9894 	      /* This is not an error, it is runtime undefined
9895 		 behavior.  */
9896 	      if (!current_function_decl)
9897 		warning (0, "pure virtual %q#D called from "
9898 			 "non-static data member initializer", fn);
9899 	      else if (DECL_CONSTRUCTOR_P (current_function_decl)
9900 		       || DECL_DESTRUCTOR_P (current_function_decl))
9901 		warning (0, (DECL_CONSTRUCTOR_P (current_function_decl)
9902 			     ? G_("pure virtual %q#D called from constructor")
9903 			     : G_("pure virtual %q#D called from destructor")),
9904 			 fn);
9905 	    }
9906 
9907 	  if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE
9908 	      && !DECL_CONSTRUCTOR_P (fn)
9909 	      && is_dummy_object (instance))
9910 	    {
9911 	      instance = maybe_resolve_dummy (instance, true);
9912 	      if (instance == error_mark_node)
9913 		call = error_mark_node;
9914 	      else if (!is_dummy_object (instance))
9915 		{
9916 		  /* We captured 'this' in the current lambda now that
9917 		     we know we really need it.  */
9918 		  cand->first_arg = instance;
9919 		}
9920 	      else if (any_dependent_bases_p ())
9921 		/* We can't tell until instantiation time whether we can use
9922 		   *this as the implicit object argument.  */;
9923 	      else
9924 		{
9925 		  if (complain & tf_error)
9926 		    error ("cannot call member function %qD without object",
9927 			   fn);
9928 		  call = error_mark_node;
9929 		}
9930 	    }
9931 
9932 	  if (call != error_mark_node)
9933 	    {
9934               if (explicit_targs)
9935                 flags |= LOOKUP_EXPLICIT_TMPL_ARGS;
9936 	      /* Now we know what function is being called.  */
9937 	      if (fn_p)
9938 		*fn_p = fn;
9939 	      /* Build the actual CALL_EXPR.  */
9940 	      call = build_over_call (cand, flags, complain);
9941 	      /* In an expression of the form `a->f()' where `f' turns
9942 		 out to be a static member function, `a' is
9943 		 none-the-less evaluated.  */
9944 	      if (TREE_CODE (TREE_TYPE (fn)) != METHOD_TYPE
9945 		  && !is_dummy_object (instance)
9946 		  && TREE_SIDE_EFFECTS (instance))
9947 		{
9948 		  /* But avoid the implicit lvalue-rvalue conversion when 'a'
9949 		     is volatile.  */
9950 		  tree a = instance;
9951 		  if (TREE_THIS_VOLATILE (a))
9952 		    a = build_this (a);
9953 		  if (TREE_SIDE_EFFECTS (a))
9954 		    call = build2 (COMPOUND_EXPR, TREE_TYPE (call), a, call);
9955 		}
9956 	      else if (call != error_mark_node
9957 		       && DECL_DESTRUCTOR_P (cand->fn)
9958 		       && !VOID_TYPE_P (TREE_TYPE (call)))
9959 		/* An explicit call of the form "x->~X()" has type
9960 		   "void".  However, on platforms where destructors
9961 		   return "this" (i.e., those where
9962 		   targetm.cxx.cdtor_returns_this is true), such calls
9963 		   will appear to have a return value of pointer type
9964 		   to the low-level call machinery.  We do not want to
9965 		   change the low-level machinery, since we want to be
9966 		   able to optimize "delete f()" on such platforms as
9967 		   "operator delete(~X(f()))" (rather than generating
9968 		   "t = f(), ~X(t), operator delete (t)").  */
9969 		call = build_nop (void_type_node, call);
9970 	    }
9971 	}
9972     }
9973 
9974   if (processing_template_decl && call != error_mark_node)
9975     {
9976       bool cast_to_void = false;
9977 
9978       if (TREE_CODE (call) == COMPOUND_EXPR)
9979 	call = TREE_OPERAND (call, 1);
9980       else if (TREE_CODE (call) == NOP_EXPR)
9981 	{
9982 	  cast_to_void = true;
9983 	  call = TREE_OPERAND (call, 0);
9984 	}
9985       if (INDIRECT_REF_P (call))
9986 	call = TREE_OPERAND (call, 0);
9987       call = (build_min_non_dep_call_vec
9988 	      (call,
9989 	       build_min (COMPONENT_REF, TREE_TYPE (CALL_EXPR_FN (call)),
9990 			  orig_instance, orig_fns, NULL_TREE),
9991 	       orig_args));
9992       SET_EXPR_LOCATION (call, input_location);
9993       call = convert_from_reference (call);
9994       if (cast_to_void)
9995 	call = build_nop (void_type_node, call);
9996     }
9997 
9998  /* Free all the conversions we allocated.  */
9999   obstack_free (&conversion_obstack, p);
10000 
10001   if (orig_args != NULL)
10002     release_tree_vector (orig_args);
10003 
10004   return call;
10005 }
10006 
10007 /* Wrapper for above.  */
10008 
10009 tree
build_new_method_call(tree instance,tree fns,vec<tree,va_gc> ** args,tree conversion_path,int flags,tree * fn_p,tsubst_flags_t complain)10010 build_new_method_call (tree instance, tree fns, vec<tree, va_gc> **args,
10011 		       tree conversion_path, int flags,
10012 		       tree *fn_p, tsubst_flags_t complain)
10013 {
10014   tree ret;
10015   bool subtime = timevar_cond_start (TV_OVERLOAD);
10016   ret = build_new_method_call_1 (instance, fns, args, conversion_path, flags,
10017                                  fn_p, complain);
10018   timevar_cond_stop (TV_OVERLOAD, subtime);
10019   return ret;
10020 }
10021 
10022 /* Returns true iff standard conversion sequence ICS1 is a proper
10023    subsequence of ICS2.  */
10024 
10025 static bool
is_subseq(conversion * ics1,conversion * ics2)10026 is_subseq (conversion *ics1, conversion *ics2)
10027 {
10028   /* We can assume that a conversion of the same code
10029      between the same types indicates a subsequence since we only get
10030      here if the types we are converting from are the same.  */
10031 
10032   while (ics1->kind == ck_rvalue
10033 	 || ics1->kind == ck_lvalue)
10034     ics1 = next_conversion (ics1);
10035 
10036   while (1)
10037     {
10038       while (ics2->kind == ck_rvalue
10039 	     || ics2->kind == ck_lvalue)
10040 	ics2 = next_conversion (ics2);
10041 
10042       if (ics2->kind == ck_user
10043 	  || ics2->kind == ck_ambig
10044 	  || ics2->kind == ck_aggr
10045 	  || ics2->kind == ck_list
10046 	  || ics2->kind == ck_identity)
10047 	/* At this point, ICS1 cannot be a proper subsequence of
10048 	   ICS2.  We can get a USER_CONV when we are comparing the
10049 	   second standard conversion sequence of two user conversion
10050 	   sequences.  */
10051 	return false;
10052 
10053       ics2 = next_conversion (ics2);
10054 
10055       while (ics2->kind == ck_rvalue
10056 	     || ics2->kind == ck_lvalue)
10057 	ics2 = next_conversion (ics2);
10058 
10059       if (ics2->kind == ics1->kind
10060 	  && same_type_p (ics2->type, ics1->type)
10061 	  && (ics1->kind == ck_identity
10062 	      || same_type_p (next_conversion (ics2)->type,
10063 			      next_conversion (ics1)->type)))
10064 	return true;
10065     }
10066 }
10067 
10068 /* Returns nonzero iff DERIVED is derived from BASE.  The inputs may
10069    be any _TYPE nodes.  */
10070 
10071 bool
is_properly_derived_from(tree derived,tree base)10072 is_properly_derived_from (tree derived, tree base)
10073 {
10074   if (!CLASS_TYPE_P (derived) || !CLASS_TYPE_P (base))
10075     return false;
10076 
10077   /* We only allow proper derivation here.  The DERIVED_FROM_P macro
10078      considers every class derived from itself.  */
10079   return (!same_type_ignoring_top_level_qualifiers_p (derived, base)
10080 	  && DERIVED_FROM_P (base, derived));
10081 }
10082 
10083 /* We build the ICS for an implicit object parameter as a pointer
10084    conversion sequence.  However, such a sequence should be compared
10085    as if it were a reference conversion sequence.  If ICS is the
10086    implicit conversion sequence for an implicit object parameter,
10087    modify it accordingly.  */
10088 
10089 static void
maybe_handle_implicit_object(conversion ** ics)10090 maybe_handle_implicit_object (conversion **ics)
10091 {
10092   if ((*ics)->this_p)
10093     {
10094       /* [over.match.funcs]
10095 
10096 	 For non-static member functions, the type of the
10097 	 implicit object parameter is "reference to cv X"
10098 	 where X is the class of which the function is a
10099 	 member and cv is the cv-qualification on the member
10100 	 function declaration.  */
10101       conversion *t = *ics;
10102       tree reference_type;
10103 
10104       /* The `this' parameter is a pointer to a class type.  Make the
10105 	 implicit conversion talk about a reference to that same class
10106 	 type.  */
10107       reference_type = TREE_TYPE (t->type);
10108       reference_type = build_reference_type (reference_type);
10109 
10110       if (t->kind == ck_qual)
10111 	t = next_conversion (t);
10112       if (t->kind == ck_ptr)
10113 	t = next_conversion (t);
10114       t = build_identity_conv (TREE_TYPE (t->type), NULL_TREE);
10115       t = direct_reference_binding (reference_type, t);
10116       t->this_p = 1;
10117       t->rvaluedness_matches_p = 0;
10118       *ics = t;
10119     }
10120 }
10121 
10122 /* If *ICS is a REF_BIND set *ICS to the remainder of the conversion,
10123    and return the initial reference binding conversion. Otherwise,
10124    leave *ICS unchanged and return NULL.  */
10125 
10126 static conversion *
maybe_handle_ref_bind(conversion ** ics)10127 maybe_handle_ref_bind (conversion **ics)
10128 {
10129   if ((*ics)->kind == ck_ref_bind)
10130     {
10131       conversion *old_ics = *ics;
10132       *ics = next_conversion (old_ics);
10133       (*ics)->user_conv_p = old_ics->user_conv_p;
10134       return old_ics;
10135     }
10136 
10137   return NULL;
10138 }
10139 
10140 /* Compare two implicit conversion sequences according to the rules set out in
10141    [over.ics.rank].  Return values:
10142 
10143       1: ics1 is better than ics2
10144      -1: ics2 is better than ics1
10145       0: ics1 and ics2 are indistinguishable */
10146 
10147 static int
compare_ics(conversion * ics1,conversion * ics2)10148 compare_ics (conversion *ics1, conversion *ics2)
10149 {
10150   tree from_type1;
10151   tree from_type2;
10152   tree to_type1;
10153   tree to_type2;
10154   tree deref_from_type1 = NULL_TREE;
10155   tree deref_from_type2 = NULL_TREE;
10156   tree deref_to_type1 = NULL_TREE;
10157   tree deref_to_type2 = NULL_TREE;
10158   conversion_rank rank1, rank2;
10159 
10160   /* REF_BINDING is nonzero if the result of the conversion sequence
10161      is a reference type.   In that case REF_CONV is the reference
10162      binding conversion. */
10163   conversion *ref_conv1;
10164   conversion *ref_conv2;
10165 
10166   /* Compare badness before stripping the reference conversion.  */
10167   if (ics1->bad_p > ics2->bad_p)
10168     return -1;
10169   else if (ics1->bad_p < ics2->bad_p)
10170     return 1;
10171 
10172   /* Handle implicit object parameters.  */
10173   maybe_handle_implicit_object (&ics1);
10174   maybe_handle_implicit_object (&ics2);
10175 
10176   /* Handle reference parameters.  */
10177   ref_conv1 = maybe_handle_ref_bind (&ics1);
10178   ref_conv2 = maybe_handle_ref_bind (&ics2);
10179 
10180   /* List-initialization sequence L1 is a better conversion sequence than
10181      list-initialization sequence L2 if L1 converts to
10182      std::initializer_list<X> for some X and L2 does not.  */
10183   if (ics1->kind == ck_list && ics2->kind != ck_list)
10184     return 1;
10185   if (ics2->kind == ck_list && ics1->kind != ck_list)
10186     return -1;
10187 
10188   /* [over.ics.rank]
10189 
10190      When  comparing  the  basic forms of implicit conversion sequences (as
10191      defined in _over.best.ics_)
10192 
10193      --a standard conversion sequence (_over.ics.scs_) is a better
10194        conversion sequence than a user-defined conversion sequence
10195        or an ellipsis conversion sequence, and
10196 
10197      --a user-defined conversion sequence (_over.ics.user_) is a
10198        better conversion sequence than an ellipsis conversion sequence
10199        (_over.ics.ellipsis_).  */
10200   /* Use BAD_CONVERSION_RANK because we already checked for a badness
10201      mismatch.  If both ICS are bad, we try to make a decision based on
10202      what would have happened if they'd been good.  This is not an
10203      extension, we'll still give an error when we build up the call; this
10204      just helps us give a more helpful error message.  */
10205   rank1 = BAD_CONVERSION_RANK (ics1);
10206   rank2 = BAD_CONVERSION_RANK (ics2);
10207 
10208   if (rank1 > rank2)
10209     return -1;
10210   else if (rank1 < rank2)
10211     return 1;
10212 
10213   if (ics1->ellipsis_p)
10214     /* Both conversions are ellipsis conversions.  */
10215     return 0;
10216 
10217   /* User-defined  conversion sequence U1 is a better conversion sequence
10218      than another user-defined conversion sequence U2 if they contain the
10219      same user-defined conversion operator or constructor and if the sec-
10220      ond standard conversion sequence of U1 is  better  than  the  second
10221      standard conversion sequence of U2.  */
10222 
10223   /* Handle list-conversion with the same code even though it isn't always
10224      ranked as a user-defined conversion and it doesn't have a second
10225      standard conversion sequence; it will still have the desired effect.
10226      Specifically, we need to do the reference binding comparison at the
10227      end of this function.  */
10228 
10229   if (ics1->user_conv_p || ics1->kind == ck_list
10230       || ics1->kind == ck_aggr || ics2->kind == ck_aggr)
10231     {
10232       conversion *t1;
10233       conversion *t2;
10234 
10235       for (t1 = ics1; t1 && t1->kind != ck_user; t1 = next_conversion (t1))
10236 	if (t1->kind == ck_ambig || t1->kind == ck_aggr
10237 	    || t1->kind == ck_list)
10238 	  break;
10239       for (t2 = ics2; t2 && t2->kind != ck_user; t2 = next_conversion (t2))
10240 	if (t2->kind == ck_ambig || t2->kind == ck_aggr
10241 	    || t2->kind == ck_list)
10242 	  break;
10243 
10244       if (!t1 || !t2 || t1->kind != t2->kind)
10245 	return 0;
10246       else if (t1->kind == ck_user)
10247 	{
10248 	  tree f1 = t1->cand ? t1->cand->fn : t1->type;
10249 	  tree f2 = t2->cand ? t2->cand->fn : t2->type;
10250 	  if (f1 != f2)
10251 	    return 0;
10252 	}
10253       else
10254 	{
10255 	  /* For ambiguous or aggregate conversions, use the target type as
10256 	     a proxy for the conversion function.  */
10257 	  if (!same_type_ignoring_top_level_qualifiers_p (t1->type, t2->type))
10258 	    return 0;
10259 	}
10260 
10261       /* We can just fall through here, after setting up
10262 	 FROM_TYPE1 and FROM_TYPE2.  */
10263       from_type1 = t1->type;
10264       from_type2 = t2->type;
10265     }
10266   else
10267     {
10268       conversion *t1;
10269       conversion *t2;
10270 
10271       /* We're dealing with two standard conversion sequences.
10272 
10273 	 [over.ics.rank]
10274 
10275 	 Standard conversion sequence S1 is a better conversion
10276 	 sequence than standard conversion sequence S2 if
10277 
10278 	 --S1 is a proper subsequence of S2 (comparing the conversion
10279 	   sequences in the canonical form defined by _over.ics.scs_,
10280 	   excluding any Lvalue Transformation; the identity
10281 	   conversion sequence is considered to be a subsequence of
10282 	   any non-identity conversion sequence */
10283 
10284       t1 = ics1;
10285       while (t1->kind != ck_identity)
10286 	t1 = next_conversion (t1);
10287       from_type1 = t1->type;
10288 
10289       t2 = ics2;
10290       while (t2->kind != ck_identity)
10291 	t2 = next_conversion (t2);
10292       from_type2 = t2->type;
10293     }
10294 
10295   /* One sequence can only be a subsequence of the other if they start with
10296      the same type.  They can start with different types when comparing the
10297      second standard conversion sequence in two user-defined conversion
10298      sequences.  */
10299   if (same_type_p (from_type1, from_type2))
10300     {
10301       if (is_subseq (ics1, ics2))
10302 	return 1;
10303       if (is_subseq (ics2, ics1))
10304 	return -1;
10305     }
10306 
10307   /* [over.ics.rank]
10308 
10309      Or, if not that,
10310 
10311      --the rank of S1 is better than the rank of S2 (by the rules
10312        defined below):
10313 
10314     Standard conversion sequences are ordered by their ranks: an Exact
10315     Match is a better conversion than a Promotion, which is a better
10316     conversion than a Conversion.
10317 
10318     Two conversion sequences with the same rank are indistinguishable
10319     unless one of the following rules applies:
10320 
10321     --A conversion that does not a convert a pointer, pointer to member,
10322       or std::nullptr_t to bool is better than one that does.
10323 
10324     The ICS_STD_RANK automatically handles the pointer-to-bool rule,
10325     so that we do not have to check it explicitly.  */
10326   if (ics1->rank < ics2->rank)
10327     return 1;
10328   else if (ics2->rank < ics1->rank)
10329     return -1;
10330 
10331   to_type1 = ics1->type;
10332   to_type2 = ics2->type;
10333 
10334   /* A conversion from scalar arithmetic type to complex is worse than a
10335      conversion between scalar arithmetic types.  */
10336   if (same_type_p (from_type1, from_type2)
10337       && ARITHMETIC_TYPE_P (from_type1)
10338       && ARITHMETIC_TYPE_P (to_type1)
10339       && ARITHMETIC_TYPE_P (to_type2)
10340       && ((TREE_CODE (to_type1) == COMPLEX_TYPE)
10341 	  != (TREE_CODE (to_type2) == COMPLEX_TYPE)))
10342     {
10343       if (TREE_CODE (to_type1) == COMPLEX_TYPE)
10344 	return -1;
10345       else
10346 	return 1;
10347     }
10348 
10349   if (TYPE_PTR_P (from_type1)
10350       && TYPE_PTR_P (from_type2)
10351       && TYPE_PTR_P (to_type1)
10352       && TYPE_PTR_P (to_type2))
10353     {
10354       deref_from_type1 = TREE_TYPE (from_type1);
10355       deref_from_type2 = TREE_TYPE (from_type2);
10356       deref_to_type1 = TREE_TYPE (to_type1);
10357       deref_to_type2 = TREE_TYPE (to_type2);
10358     }
10359   /* The rules for pointers to members A::* are just like the rules
10360      for pointers A*, except opposite: if B is derived from A then
10361      A::* converts to B::*, not vice versa.  For that reason, we
10362      switch the from_ and to_ variables here.  */
10363   else if ((TYPE_PTRDATAMEM_P (from_type1) && TYPE_PTRDATAMEM_P (from_type2)
10364 	    && TYPE_PTRDATAMEM_P (to_type1) && TYPE_PTRDATAMEM_P (to_type2))
10365 	   || (TYPE_PTRMEMFUNC_P (from_type1)
10366 	       && TYPE_PTRMEMFUNC_P (from_type2)
10367 	       && TYPE_PTRMEMFUNC_P (to_type1)
10368 	       && TYPE_PTRMEMFUNC_P (to_type2)))
10369     {
10370       deref_to_type1 = TYPE_PTRMEM_CLASS_TYPE (from_type1);
10371       deref_to_type2 = TYPE_PTRMEM_CLASS_TYPE (from_type2);
10372       deref_from_type1 = TYPE_PTRMEM_CLASS_TYPE (to_type1);
10373       deref_from_type2 = TYPE_PTRMEM_CLASS_TYPE (to_type2);
10374     }
10375 
10376   if (deref_from_type1 != NULL_TREE
10377       && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_from_type1))
10378       && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_from_type2)))
10379     {
10380       /* This was one of the pointer or pointer-like conversions.
10381 
10382 	 [over.ics.rank]
10383 
10384 	 --If class B is derived directly or indirectly from class A,
10385 	   conversion of B* to A* is better than conversion of B* to
10386 	   void*, and conversion of A* to void* is better than
10387 	   conversion of B* to void*.  */
10388       if (VOID_TYPE_P (deref_to_type1)
10389 	  && VOID_TYPE_P (deref_to_type2))
10390 	{
10391 	  if (is_properly_derived_from (deref_from_type1,
10392 					deref_from_type2))
10393 	    return -1;
10394 	  else if (is_properly_derived_from (deref_from_type2,
10395 					     deref_from_type1))
10396 	    return 1;
10397 	}
10398       else if (VOID_TYPE_P (deref_to_type1)
10399 	       || VOID_TYPE_P (deref_to_type2))
10400 	{
10401 	  if (same_type_p (deref_from_type1, deref_from_type2))
10402 	    {
10403 	      if (VOID_TYPE_P (deref_to_type2))
10404 		{
10405 		  if (is_properly_derived_from (deref_from_type1,
10406 						deref_to_type1))
10407 		    return 1;
10408 		}
10409 	      /* We know that DEREF_TO_TYPE1 is `void' here.  */
10410 	      else if (is_properly_derived_from (deref_from_type1,
10411 						 deref_to_type2))
10412 		return -1;
10413 	    }
10414 	}
10415       else if (RECORD_OR_UNION_CODE_P (TREE_CODE (deref_to_type1))
10416 	       && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_to_type2)))
10417 	{
10418 	  /* [over.ics.rank]
10419 
10420 	     --If class B is derived directly or indirectly from class A
10421 	       and class C is derived directly or indirectly from B,
10422 
10423 	     --conversion of C* to B* is better than conversion of C* to
10424 	       A*,
10425 
10426 	     --conversion of B* to A* is better than conversion of C* to
10427 	       A*  */
10428 	  if (same_type_p (deref_from_type1, deref_from_type2))
10429 	    {
10430 	      if (is_properly_derived_from (deref_to_type1,
10431 					    deref_to_type2))
10432 		return 1;
10433 	      else if (is_properly_derived_from (deref_to_type2,
10434 						 deref_to_type1))
10435 		return -1;
10436 	    }
10437 	  else if (same_type_p (deref_to_type1, deref_to_type2))
10438 	    {
10439 	      if (is_properly_derived_from (deref_from_type2,
10440 					    deref_from_type1))
10441 		return 1;
10442 	      else if (is_properly_derived_from (deref_from_type1,
10443 						 deref_from_type2))
10444 		return -1;
10445 	    }
10446 	}
10447     }
10448   else if (CLASS_TYPE_P (non_reference (from_type1))
10449 	   && same_type_p (from_type1, from_type2))
10450     {
10451       tree from = non_reference (from_type1);
10452 
10453       /* [over.ics.rank]
10454 
10455 	 --binding of an expression of type C to a reference of type
10456 	   B& is better than binding an expression of type C to a
10457 	   reference of type A&
10458 
10459 	 --conversion of C to B is better than conversion of C to A,  */
10460       if (is_properly_derived_from (from, to_type1)
10461 	  && is_properly_derived_from (from, to_type2))
10462 	{
10463 	  if (is_properly_derived_from (to_type1, to_type2))
10464 	    return 1;
10465 	  else if (is_properly_derived_from (to_type2, to_type1))
10466 	    return -1;
10467 	}
10468     }
10469   else if (CLASS_TYPE_P (non_reference (to_type1))
10470 	   && same_type_p (to_type1, to_type2))
10471     {
10472       tree to = non_reference (to_type1);
10473 
10474       /* [over.ics.rank]
10475 
10476 	 --binding of an expression of type B to a reference of type
10477 	   A& is better than binding an expression of type C to a
10478 	   reference of type A&,
10479 
10480 	 --conversion of B to A is better than conversion of C to A  */
10481       if (is_properly_derived_from (from_type1, to)
10482 	  && is_properly_derived_from (from_type2, to))
10483 	{
10484 	  if (is_properly_derived_from (from_type2, from_type1))
10485 	    return 1;
10486 	  else if (is_properly_derived_from (from_type1, from_type2))
10487 	    return -1;
10488 	}
10489     }
10490 
10491   /* [over.ics.rank]
10492 
10493      --S1 and S2 differ only in their qualification conversion and  yield
10494        similar  types  T1 and T2 (_conv.qual_), respectively, and the cv-
10495        qualification signature of type T1 is a proper subset of  the  cv-
10496        qualification signature of type T2  */
10497   if (ics1->kind == ck_qual
10498       && ics2->kind == ck_qual
10499       && same_type_p (from_type1, from_type2))
10500     {
10501       int result = comp_cv_qual_signature (to_type1, to_type2);
10502       if (result != 0)
10503 	return result;
10504     }
10505 
10506   /* [over.ics.rank]
10507 
10508      --S1 and S2 are reference bindings (_dcl.init.ref_) and neither refers
10509      to an implicit object parameter of a non-static member function
10510      declared without a ref-qualifier, and either S1 binds an lvalue
10511      reference to an lvalue and S2 binds an rvalue reference or S1 binds an
10512      rvalue reference to an rvalue and S2 binds an lvalue reference (C++0x
10513      draft standard, 13.3.3.2)
10514 
10515      --S1 and S2 are reference bindings (_dcl.init.ref_), and the
10516      types to which the references refer are the same type except for
10517      top-level cv-qualifiers, and the type to which the reference
10518      initialized by S2 refers is more cv-qualified than the type to
10519      which the reference initialized by S1 refers.
10520 
10521      DR 1328 [over.match.best]: the context is an initialization by
10522      conversion function for direct reference binding (13.3.1.6) of a
10523      reference to function type, the return type of F1 is the same kind of
10524      reference (i.e. lvalue or rvalue) as the reference being initialized,
10525      and the return type of F2 is not.  */
10526 
10527   if (ref_conv1 && ref_conv2)
10528     {
10529       if (!ref_conv1->this_p && !ref_conv2->this_p
10530 	  && (ref_conv1->rvaluedness_matches_p
10531 	      != ref_conv2->rvaluedness_matches_p)
10532 	  && (same_type_p (ref_conv1->type, ref_conv2->type)
10533 	      || (TYPE_REF_IS_RVALUE (ref_conv1->type)
10534 		  != TYPE_REF_IS_RVALUE (ref_conv2->type))))
10535 	{
10536 	  if (ref_conv1->bad_p
10537 	      && !same_type_p (TREE_TYPE (ref_conv1->type),
10538 			       TREE_TYPE (ref_conv2->type)))
10539 	    /* Don't prefer a bad conversion that drops cv-quals to a bad
10540 	       conversion with the wrong rvalueness.  */
10541 	    return 0;
10542 	  return (ref_conv1->rvaluedness_matches_p
10543 		  - ref_conv2->rvaluedness_matches_p);
10544 	}
10545 
10546       if (same_type_ignoring_top_level_qualifiers_p (to_type1, to_type2))
10547 	{
10548 	  int q1 = cp_type_quals (TREE_TYPE (ref_conv1->type));
10549 	  int q2 = cp_type_quals (TREE_TYPE (ref_conv2->type));
10550 	  if (ref_conv1->bad_p)
10551 	    {
10552 	      /* Prefer the one that drops fewer cv-quals.  */
10553 	      tree ftype = next_conversion (ref_conv1)->type;
10554 	      int fquals = cp_type_quals (ftype);
10555 	      q1 ^= fquals;
10556 	      q2 ^= fquals;
10557 	    }
10558 	  return comp_cv_qualification (q2, q1);
10559 	}
10560     }
10561 
10562   /* Neither conversion sequence is better than the other.  */
10563   return 0;
10564 }
10565 
10566 /* The source type for this standard conversion sequence.  */
10567 
10568 static tree
source_type(conversion * t)10569 source_type (conversion *t)
10570 {
10571   for (;; t = next_conversion (t))
10572     {
10573       if (t->kind == ck_user
10574 	  || t->kind == ck_ambig
10575 	  || t->kind == ck_identity)
10576 	return t->type;
10577     }
10578   gcc_unreachable ();
10579 }
10580 
10581 /* Note a warning about preferring WINNER to LOSER.  We do this by storing
10582    a pointer to LOSER and re-running joust to produce the warning if WINNER
10583    is actually used.  */
10584 
10585 static void
add_warning(struct z_candidate * winner,struct z_candidate * loser)10586 add_warning (struct z_candidate *winner, struct z_candidate *loser)
10587 {
10588   candidate_warning *cw = (candidate_warning *)
10589     conversion_obstack_alloc (sizeof (candidate_warning));
10590   cw->loser = loser;
10591   cw->next = winner->warnings;
10592   winner->warnings = cw;
10593 }
10594 
10595 /* CAND is a constructor candidate in joust in C++17 and up.  If it copies a
10596    prvalue returned from a conversion function, replace CAND with the candidate
10597    for the conversion and return true.  Otherwise, return false.  */
10598 
10599 static bool
joust_maybe_elide_copy(z_candidate * & cand)10600 joust_maybe_elide_copy (z_candidate *&cand)
10601 {
10602   tree fn = cand->fn;
10603   if (!DECL_COPY_CONSTRUCTOR_P (fn) && !DECL_MOVE_CONSTRUCTOR_P (fn))
10604     return false;
10605   conversion *conv = cand->convs[0];
10606   gcc_checking_assert (conv->kind == ck_ref_bind);
10607   conv = next_conversion (conv);
10608   if (conv->kind == ck_user && !TYPE_REF_P (conv->type))
10609     {
10610       gcc_checking_assert (same_type_ignoring_top_level_qualifiers_p
10611 			   (conv->type, DECL_CONTEXT (fn)));
10612       z_candidate *uc = conv->cand;
10613       if (DECL_CONV_FN_P (uc->fn))
10614 	{
10615 	  cand = uc;
10616 	  return true;
10617 	}
10618     }
10619   return false;
10620 }
10621 
10622 /* Compare two candidates for overloading as described in
10623    [over.match.best].  Return values:
10624 
10625       1: cand1 is better than cand2
10626      -1: cand2 is better than cand1
10627       0: cand1 and cand2 are indistinguishable */
10628 
10629 static int
joust(struct z_candidate * cand1,struct z_candidate * cand2,bool warn,tsubst_flags_t complain)10630 joust (struct z_candidate *cand1, struct z_candidate *cand2, bool warn,
10631        tsubst_flags_t complain)
10632 {
10633   int winner = 0;
10634   int off1 = 0, off2 = 0;
10635   size_t i;
10636   size_t len;
10637 
10638   /* Candidates that involve bad conversions are always worse than those
10639      that don't.  */
10640   if (cand1->viable > cand2->viable)
10641     return 1;
10642   if (cand1->viable < cand2->viable)
10643     return -1;
10644 
10645   /* If we have two pseudo-candidates for conversions to the same type,
10646      or two candidates for the same function, arbitrarily pick one.  */
10647   if (cand1->fn == cand2->fn
10648       && (IS_TYPE_OR_DECL_P (cand1->fn)))
10649     return 1;
10650 
10651   /* Prefer a non-deleted function over an implicitly deleted move
10652      constructor or assignment operator.  This differs slightly from the
10653      wording for issue 1402 (which says the move op is ignored by overload
10654      resolution), but this way produces better error messages.  */
10655   if (TREE_CODE (cand1->fn) == FUNCTION_DECL
10656       && TREE_CODE (cand2->fn) == FUNCTION_DECL
10657       && DECL_DELETED_FN (cand1->fn) != DECL_DELETED_FN (cand2->fn))
10658     {
10659       if (DECL_DELETED_FN (cand1->fn) && DECL_DEFAULTED_FN (cand1->fn)
10660 	  && move_fn_p (cand1->fn))
10661 	return -1;
10662       if (DECL_DELETED_FN (cand2->fn) && DECL_DEFAULTED_FN (cand2->fn)
10663 	  && move_fn_p (cand2->fn))
10664 	return 1;
10665     }
10666 
10667   /* a viable function F1
10668      is defined to be a better function than another viable function F2  if
10669      for  all arguments i, ICSi(F1) is not a worse conversion sequence than
10670      ICSi(F2), and then */
10671 
10672   /* for some argument j, ICSj(F1) is a better conversion  sequence  than
10673      ICSj(F2) */
10674 
10675   /* For comparing static and non-static member functions, we ignore
10676      the implicit object parameter of the non-static function.  The
10677      standard says to pretend that the static function has an object
10678      parm, but that won't work with operator overloading.  */
10679   len = cand1->num_convs;
10680   if (len != cand2->num_convs)
10681     {
10682       int static_1 = DECL_STATIC_FUNCTION_P (cand1->fn);
10683       int static_2 = DECL_STATIC_FUNCTION_P (cand2->fn);
10684 
10685       if (DECL_CONSTRUCTOR_P (cand1->fn)
10686 	  && is_list_ctor (cand1->fn) != is_list_ctor (cand2->fn))
10687 	/* We're comparing a near-match list constructor and a near-match
10688 	   non-list constructor.  Just treat them as unordered.  */
10689 	return 0;
10690 
10691       gcc_assert (static_1 != static_2);
10692 
10693       if (static_1)
10694 	off2 = 1;
10695       else
10696 	{
10697 	  off1 = 1;
10698 	  --len;
10699 	}
10700     }
10701 
10702   /* Handle C++17 copy elision in [over.match.ctor] (direct-init) context.  The
10703      standard currently says that only constructors are candidates, but if one
10704      copies a prvalue returned by a conversion function we want to treat the
10705      conversion as the candidate instead.
10706 
10707      Clang does something similar, as discussed at
10708      http://lists.isocpp.org/core/2017/10/3166.php
10709      http://lists.isocpp.org/core/2019/03/5721.php  */
10710   int elided_tiebreaker = 0;
10711   if (len == 1 && cxx_dialect >= cxx17
10712       && DECL_P (cand1->fn)
10713       && DECL_COMPLETE_CONSTRUCTOR_P (cand1->fn)
10714       && !(cand1->flags & LOOKUP_ONLYCONVERTING))
10715     {
10716       bool elided1 = joust_maybe_elide_copy (cand1);
10717       bool elided2 = joust_maybe_elide_copy (cand2);
10718       /* As a tiebreaker below we will prefer a constructor to a conversion
10719 	 operator exposed this way.  */
10720       elided_tiebreaker = elided2 - elided1;
10721     }
10722 
10723   for (i = 0; i < len; ++i)
10724     {
10725       conversion *t1 = cand1->convs[i + off1];
10726       conversion *t2 = cand2->convs[i + off2];
10727       int comp = compare_ics (t1, t2);
10728 
10729       if (comp != 0)
10730 	{
10731 	  if ((complain & tf_warning)
10732 	      && warn_sign_promo
10733 	      && (CONVERSION_RANK (t1) + CONVERSION_RANK (t2)
10734 		  == cr_std + cr_promotion)
10735 	      && t1->kind == ck_std
10736 	      && t2->kind == ck_std
10737 	      && TREE_CODE (t1->type) == INTEGER_TYPE
10738 	      && TREE_CODE (t2->type) == INTEGER_TYPE
10739 	      && (TYPE_PRECISION (t1->type)
10740 		  == TYPE_PRECISION (t2->type))
10741 	      && (TYPE_UNSIGNED (next_conversion (t1)->type)
10742 		  || (TREE_CODE (next_conversion (t1)->type)
10743 		      == ENUMERAL_TYPE)))
10744 	    {
10745 	      tree type = next_conversion (t1)->type;
10746 	      tree type1, type2;
10747 	      struct z_candidate *w, *l;
10748 	      if (comp > 0)
10749 		type1 = t1->type, type2 = t2->type,
10750 		  w = cand1, l = cand2;
10751 	      else
10752 		type1 = t2->type, type2 = t1->type,
10753 		  w = cand2, l = cand1;
10754 
10755 	      if (warn)
10756 		{
10757 		  warning (OPT_Wsign_promo, "passing %qT chooses %qT over %qT",
10758 			   type, type1, type2);
10759 		  warning (OPT_Wsign_promo, "  in call to %qD", w->fn);
10760 		}
10761 	      else
10762 		add_warning (w, l);
10763 	    }
10764 
10765 	  if (winner && comp != winner)
10766 	    {
10767 	      winner = 0;
10768 	      goto tweak;
10769 	    }
10770 	  winner = comp;
10771 	}
10772     }
10773 
10774   /* warn about confusing overload resolution for user-defined conversions,
10775      either between a constructor and a conversion op, or between two
10776      conversion ops.  */
10777   if ((complain & tf_warning)
10778       /* In C++17, the constructor might have been elided, which means that
10779 	 an originally null ->second_conv could become non-null.  */
10780       && winner && warn_conversion && cand1->second_conv && cand2->second_conv
10781       && (!DECL_CONSTRUCTOR_P (cand1->fn) || !DECL_CONSTRUCTOR_P (cand2->fn))
10782       && winner != compare_ics (cand1->second_conv, cand2->second_conv))
10783     {
10784       struct z_candidate *w, *l;
10785       bool give_warning = false;
10786 
10787       if (winner == 1)
10788 	w = cand1, l = cand2;
10789       else
10790 	w = cand2, l = cand1;
10791 
10792       /* We don't want to complain about `X::operator T1 ()'
10793 	 beating `X::operator T2 () const', when T2 is a no less
10794 	 cv-qualified version of T1.  */
10795       if (DECL_CONTEXT (w->fn) == DECL_CONTEXT (l->fn)
10796 	  && !DECL_CONSTRUCTOR_P (w->fn) && !DECL_CONSTRUCTOR_P (l->fn))
10797 	{
10798 	  tree t = TREE_TYPE (TREE_TYPE (l->fn));
10799 	  tree f = TREE_TYPE (TREE_TYPE (w->fn));
10800 
10801 	  if (TREE_CODE (t) == TREE_CODE (f) && INDIRECT_TYPE_P (t))
10802 	    {
10803 	      t = TREE_TYPE (t);
10804 	      f = TREE_TYPE (f);
10805 	    }
10806 	  if (!comp_ptr_ttypes (t, f))
10807 	    give_warning = true;
10808 	}
10809       else
10810 	give_warning = true;
10811 
10812       if (!give_warning)
10813 	/*NOP*/;
10814       else if (warn)
10815 	{
10816 	  tree source = source_type (w->convs[0]);
10817 	  if (INDIRECT_TYPE_P (source))
10818 	    source = TREE_TYPE (source);
10819 	  auto_diagnostic_group d;
10820 	  if (warning (OPT_Wconversion, "choosing %qD over %qD", w->fn, l->fn)
10821 	      && warning (OPT_Wconversion, "  for conversion from %qH to %qI",
10822 			  source, w->second_conv->type))
10823 	    {
10824 	      inform (input_location, "  because conversion sequence for the argument is better");
10825 	    }
10826 	}
10827       else
10828 	add_warning (w, l);
10829     }
10830 
10831   if (winner)
10832     return winner;
10833 
10834   /* Put this tiebreaker first, so that we don't try to look at second_conv of
10835      a constructor candidate that doesn't have one.  */
10836   if (elided_tiebreaker)
10837     return elided_tiebreaker;
10838 
10839   /* DR 495 moved this tiebreaker above the template ones.  */
10840   /* or, if not that,
10841      the  context  is  an  initialization by user-defined conversion (see
10842      _dcl.init_  and  _over.match.user_)  and  the  standard   conversion
10843      sequence  from  the return type of F1 to the destination type (i.e.,
10844      the type of the entity being initialized)  is  a  better  conversion
10845      sequence  than the standard conversion sequence from the return type
10846      of F2 to the destination type.  */
10847 
10848   if (cand1->second_conv)
10849     {
10850       winner = compare_ics (cand1->second_conv, cand2->second_conv);
10851       if (winner)
10852 	return winner;
10853     }
10854 
10855   /* or, if not that,
10856      F1 is a non-template function and F2 is a template function
10857      specialization.  */
10858 
10859   if (!cand1->template_decl && cand2->template_decl)
10860     return 1;
10861   else if (cand1->template_decl && !cand2->template_decl)
10862     return -1;
10863 
10864   /* or, if not that,
10865      F1 and F2 are template functions and the function template for F1 is
10866      more specialized than the template for F2 according to the partial
10867      ordering rules.  */
10868 
10869   if (cand1->template_decl && cand2->template_decl)
10870     {
10871       winner = more_specialized_fn
10872 	(TI_TEMPLATE (cand1->template_decl),
10873 	 TI_TEMPLATE (cand2->template_decl),
10874 	 /* [temp.func.order]: The presence of unused ellipsis and default
10875 	    arguments has no effect on the partial ordering of function
10876 	    templates.   add_function_candidate() will not have
10877 	    counted the "this" argument for constructors.  */
10878 	 cand1->num_convs + DECL_CONSTRUCTOR_P (cand1->fn));
10879       if (winner)
10880 	return winner;
10881     }
10882 
10883   // C++ Concepts
10884   // or, if not that, F1 is more constrained than F2.
10885   if (flag_concepts && DECL_P (cand1->fn) && DECL_P (cand2->fn))
10886     {
10887       winner = more_constrained (cand1->fn, cand2->fn);
10888       if (winner)
10889 	return winner;
10890     }
10891 
10892   /* F1 is generated from a deduction-guide (13.3.1.8) and F2 is not */
10893   if (deduction_guide_p (cand1->fn))
10894     {
10895       gcc_assert (deduction_guide_p (cand2->fn));
10896       /* We distinguish between candidates from an explicit deduction guide and
10897 	 candidates built from a constructor based on DECL_ARTIFICIAL.  */
10898       int art1 = DECL_ARTIFICIAL (cand1->fn);
10899       int art2 = DECL_ARTIFICIAL (cand2->fn);
10900       if (art1 != art2)
10901 	return art2 - art1;
10902 
10903       if (art1)
10904 	{
10905 	  /* Prefer the special copy guide over a declared copy/move
10906 	     constructor.  */
10907 	  if (copy_guide_p (cand1->fn))
10908 	    return 1;
10909 	  if (copy_guide_p (cand2->fn))
10910 	    return -1;
10911 
10912 	  /* Prefer a candidate generated from a non-template constructor.  */
10913 	  int tg1 = template_guide_p (cand1->fn);
10914 	  int tg2 = template_guide_p (cand2->fn);
10915 	  if (tg1 != tg2)
10916 	    return tg2 - tg1;
10917 	}
10918     }
10919 
10920   /* F1 is a member of a class D, F2 is a member of a base class B of D, and
10921      for all arguments the corresponding parameters of F1 and F2 have the same
10922      type (CWG 2273/2277). */
10923   if (DECL_P (cand1->fn) && DECL_CLASS_SCOPE_P (cand1->fn)
10924       && !DECL_CONV_FN_P (cand1->fn)
10925       && DECL_P (cand2->fn) && DECL_CLASS_SCOPE_P (cand2->fn)
10926       && !DECL_CONV_FN_P (cand2->fn))
10927     {
10928       tree base1 = DECL_CONTEXT (strip_inheriting_ctors (cand1->fn));
10929       tree base2 = DECL_CONTEXT (strip_inheriting_ctors (cand2->fn));
10930 
10931       bool used1 = false;
10932       bool used2 = false;
10933       if (base1 == base2)
10934 	/* No difference.  */;
10935       else if (DERIVED_FROM_P (base1, base2))
10936 	used1 = true;
10937       else if (DERIVED_FROM_P (base2, base1))
10938 	used2 = true;
10939 
10940       if (int diff = used2 - used1)
10941 	{
10942 	  for (i = 0; i < len; ++i)
10943 	    {
10944 	      conversion *t1 = cand1->convs[i + off1];
10945 	      conversion *t2 = cand2->convs[i + off2];
10946 	      if (!same_type_p (t1->type, t2->type))
10947 		break;
10948 	    }
10949 	  if (i == len)
10950 	    return diff;
10951 	}
10952     }
10953 
10954   /* Check whether we can discard a builtin candidate, either because we
10955      have two identical ones or matching builtin and non-builtin candidates.
10956 
10957      (Pedantically in the latter case the builtin which matched the user
10958      function should not be added to the overload set, but we spot it here.
10959 
10960      [over.match.oper]
10961      ... the builtin candidates include ...
10962      - do not have the same parameter type list as any non-template
10963        non-member candidate.  */
10964 
10965   if (identifier_p (cand1->fn) || identifier_p (cand2->fn))
10966     {
10967       for (i = 0; i < len; ++i)
10968 	if (!same_type_p (cand1->convs[i]->type,
10969 			  cand2->convs[i]->type))
10970 	  break;
10971       if (i == cand1->num_convs)
10972 	{
10973 	  if (cand1->fn == cand2->fn)
10974 	    /* Two built-in candidates; arbitrarily pick one.  */
10975 	    return 1;
10976 	  else if (identifier_p (cand1->fn))
10977 	    /* cand1 is built-in; prefer cand2.  */
10978 	    return -1;
10979 	  else
10980 	    /* cand2 is built-in; prefer cand1.  */
10981 	    return 1;
10982 	}
10983     }
10984 
10985   /* For candidates of a multi-versioned function,  make the version with
10986      the highest priority win.  This version will be checked for dispatching
10987      first.  If this version can be inlined into the caller, the front-end
10988      will simply make a direct call to this function.  */
10989 
10990   if (TREE_CODE (cand1->fn) == FUNCTION_DECL
10991       && DECL_FUNCTION_VERSIONED (cand1->fn)
10992       && TREE_CODE (cand2->fn) == FUNCTION_DECL
10993       && DECL_FUNCTION_VERSIONED (cand2->fn))
10994     {
10995       tree f1 = TREE_TYPE (cand1->fn);
10996       tree f2 = TREE_TYPE (cand2->fn);
10997       tree p1 = TYPE_ARG_TYPES (f1);
10998       tree p2 = TYPE_ARG_TYPES (f2);
10999 
11000       /* Check if cand1->fn and cand2->fn are versions of the same function.  It
11001          is possible that cand1->fn and cand2->fn are function versions but of
11002          different functions.  Check types to see if they are versions of the same
11003          function.  */
11004       if (compparms (p1, p2)
11005 	  && same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
11006 	{
11007 	  /* Always make the version with the higher priority, more
11008 	     specialized, win.  */
11009 	  gcc_assert (targetm.compare_version_priority);
11010 	  if (targetm.compare_version_priority (cand1->fn, cand2->fn) >= 0)
11011 	    return 1;
11012 	  else
11013 	    return -1;
11014 	}
11015     }
11016 
11017   /* If the two function declarations represent the same function (this can
11018      happen with declarations in multiple scopes and arg-dependent lookup),
11019      arbitrarily choose one.  But first make sure the default args we're
11020      using match.  */
11021   if (DECL_P (cand1->fn) && DECL_P (cand2->fn)
11022       && equal_functions (cand1->fn, cand2->fn))
11023     {
11024       tree parms1 = TYPE_ARG_TYPES (TREE_TYPE (cand1->fn));
11025       tree parms2 = TYPE_ARG_TYPES (TREE_TYPE (cand2->fn));
11026 
11027       gcc_assert (!DECL_CONSTRUCTOR_P (cand1->fn));
11028 
11029       for (i = 0; i < len; ++i)
11030 	{
11031 	  /* Don't crash if the fn is variadic.  */
11032 	  if (!parms1)
11033 	    break;
11034 	  parms1 = TREE_CHAIN (parms1);
11035 	  parms2 = TREE_CHAIN (parms2);
11036 	}
11037 
11038       if (off1)
11039 	parms1 = TREE_CHAIN (parms1);
11040       else if (off2)
11041 	parms2 = TREE_CHAIN (parms2);
11042 
11043       for (; parms1; ++i)
11044 	{
11045 	  if (!cp_tree_equal (TREE_PURPOSE (parms1),
11046 			      TREE_PURPOSE (parms2)))
11047 	    {
11048 	      if (warn)
11049 		{
11050 		  if (complain & tf_error)
11051 		    {
11052 		      auto_diagnostic_group d;
11053 		      if (permerror (input_location,
11054 				     "default argument mismatch in "
11055 				     "overload resolution"))
11056 			{
11057 			  inform (DECL_SOURCE_LOCATION (cand1->fn),
11058 				  " candidate 1: %q#F", cand1->fn);
11059 			  inform (DECL_SOURCE_LOCATION (cand2->fn),
11060 				  " candidate 2: %q#F", cand2->fn);
11061 			}
11062 		    }
11063 		  else
11064 		    return 0;
11065 		}
11066 	      else
11067 		add_warning (cand1, cand2);
11068 	      break;
11069 	    }
11070 	  parms1 = TREE_CHAIN (parms1);
11071 	  parms2 = TREE_CHAIN (parms2);
11072 	}
11073 
11074       return 1;
11075     }
11076 
11077 tweak:
11078 
11079   /* Extension: If the worst conversion for one candidate is better than the
11080      worst conversion for the other, take the first.  */
11081   if (!pedantic && (complain & tf_warning_or_error))
11082     {
11083       conversion_rank rank1 = cr_identity, rank2 = cr_identity;
11084       struct z_candidate *w = 0, *l = 0;
11085 
11086       for (i = 0; i < len; ++i)
11087 	{
11088 	  if (CONVERSION_RANK (cand1->convs[i+off1]) > rank1)
11089 	    rank1 = CONVERSION_RANK (cand1->convs[i+off1]);
11090 	  if (CONVERSION_RANK (cand2->convs[i + off2]) > rank2)
11091 	    rank2 = CONVERSION_RANK (cand2->convs[i + off2]);
11092 	}
11093       if (rank1 < rank2)
11094 	winner = 1, w = cand1, l = cand2;
11095       if (rank1 > rank2)
11096 	winner = -1, w = cand2, l = cand1;
11097       if (winner)
11098 	{
11099 	  /* Don't choose a deleted function over ambiguity.  */
11100 	  if (DECL_P (w->fn) && DECL_DELETED_FN (w->fn))
11101 	    return 0;
11102 	  if (warn)
11103 	    {
11104 	      auto_diagnostic_group d;
11105 	      if (pedwarn (input_location, 0,
11106 			   "ISO C++ says that these are ambiguous, even "
11107 			   "though the worst conversion for the first is "
11108 			   "better than the worst conversion for the second:"))
11109 		{
11110 		  print_z_candidate (input_location, _("candidate 1:"), w);
11111 		  print_z_candidate (input_location, _("candidate 2:"), l);
11112 		}
11113 	    }
11114 	  else
11115 	    add_warning (w, l);
11116 	  return winner;
11117 	}
11118     }
11119 
11120   gcc_assert (!winner);
11121   return 0;
11122 }
11123 
11124 /* Given a list of candidates for overloading, find the best one, if any.
11125    This algorithm has a worst case of O(2n) (winner is last), and a best
11126    case of O(n/2) (totally ambiguous); much better than a sorting
11127    algorithm.  */
11128 
11129 static struct z_candidate *
tourney(struct z_candidate * candidates,tsubst_flags_t complain)11130 tourney (struct z_candidate *candidates, tsubst_flags_t complain)
11131 {
11132   struct z_candidate *champ = candidates, *challenger;
11133   int fate;
11134   int champ_compared_to_predecessor = 0;
11135 
11136   /* Walk through the list once, comparing each current champ to the next
11137      candidate, knocking out a candidate or two with each comparison.  */
11138 
11139   for (challenger = champ->next; challenger; )
11140     {
11141       fate = joust (champ, challenger, 0, complain);
11142       if (fate == 1)
11143 	challenger = challenger->next;
11144       else
11145 	{
11146 	  if (fate == 0)
11147 	    {
11148 	      champ = challenger->next;
11149 	      if (champ == 0)
11150 		return NULL;
11151 	      champ_compared_to_predecessor = 0;
11152 	    }
11153 	  else
11154 	    {
11155 	      champ = challenger;
11156 	      champ_compared_to_predecessor = 1;
11157 	    }
11158 
11159 	  challenger = champ->next;
11160 	}
11161     }
11162 
11163   /* Make sure the champ is better than all the candidates it hasn't yet
11164      been compared to.  */
11165 
11166   for (challenger = candidates;
11167        challenger != champ
11168 	 && !(champ_compared_to_predecessor && challenger->next == champ);
11169        challenger = challenger->next)
11170     {
11171       fate = joust (champ, challenger, 0, complain);
11172       if (fate != 1)
11173 	return NULL;
11174     }
11175 
11176   return champ;
11177 }
11178 
11179 /* Returns nonzero if things of type FROM can be converted to TO.  */
11180 
11181 bool
can_convert(tree to,tree from,tsubst_flags_t complain)11182 can_convert (tree to, tree from, tsubst_flags_t complain)
11183 {
11184   tree arg = NULL_TREE;
11185   /* implicit_conversion only considers user-defined conversions
11186      if it has an expression for the call argument list.  */
11187   if (CLASS_TYPE_P (from) || CLASS_TYPE_P (to))
11188     arg = build1 (CAST_EXPR, from, NULL_TREE);
11189   return can_convert_arg (to, from, arg, LOOKUP_IMPLICIT, complain);
11190 }
11191 
11192 /* Returns nonzero if things of type FROM can be converted to TO with a
11193    standard conversion.  */
11194 
11195 bool
can_convert_standard(tree to,tree from,tsubst_flags_t complain)11196 can_convert_standard (tree to, tree from, tsubst_flags_t complain)
11197 {
11198   return can_convert_arg (to, from, NULL_TREE, LOOKUP_IMPLICIT, complain);
11199 }
11200 
11201 /* Returns nonzero if ARG (of type FROM) can be converted to TO.  */
11202 
11203 bool
can_convert_arg(tree to,tree from,tree arg,int flags,tsubst_flags_t complain)11204 can_convert_arg (tree to, tree from, tree arg, int flags,
11205 		 tsubst_flags_t complain)
11206 {
11207   conversion *t;
11208   void *p;
11209   bool ok_p;
11210 
11211   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
11212   p = conversion_obstack_alloc (0);
11213   /* We want to discard any access checks done for this test,
11214      as we might not be in the appropriate access context and
11215      we'll do the check again when we actually perform the
11216      conversion.  */
11217   push_deferring_access_checks (dk_deferred);
11218 
11219   t  = implicit_conversion (to, from, arg, /*c_cast_p=*/false,
11220 			    flags, complain);
11221   ok_p = (t && !t->bad_p);
11222 
11223   /* Discard the access checks now.  */
11224   pop_deferring_access_checks ();
11225   /* Free all the conversions we allocated.  */
11226   obstack_free (&conversion_obstack, p);
11227 
11228   return ok_p;
11229 }
11230 
11231 /* Like can_convert_arg, but allows dubious conversions as well.  */
11232 
11233 bool
can_convert_arg_bad(tree to,tree from,tree arg,int flags,tsubst_flags_t complain)11234 can_convert_arg_bad (tree to, tree from, tree arg, int flags,
11235 		     tsubst_flags_t complain)
11236 {
11237   conversion *t;
11238   void *p;
11239 
11240   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
11241   p = conversion_obstack_alloc (0);
11242   /* Try to perform the conversion.  */
11243   t  = implicit_conversion (to, from, arg, /*c_cast_p=*/false,
11244 			    flags, complain);
11245   /* Free all the conversions we allocated.  */
11246   obstack_free (&conversion_obstack, p);
11247 
11248   return t != NULL;
11249 }
11250 
11251 /* Convert EXPR to TYPE.  Return the converted expression.
11252 
11253    Note that we allow bad conversions here because by the time we get to
11254    this point we are committed to doing the conversion.  If we end up
11255    doing a bad conversion, convert_like will complain.  */
11256 
11257 tree
perform_implicit_conversion_flags(tree type,tree expr,tsubst_flags_t complain,int flags)11258 perform_implicit_conversion_flags (tree type, tree expr,
11259 				   tsubst_flags_t complain, int flags)
11260 {
11261   conversion *conv;
11262   void *p;
11263   location_t loc = cp_expr_loc_or_loc (expr, input_location);
11264 
11265   if (TYPE_REF_P (type))
11266     expr = mark_lvalue_use (expr);
11267   else
11268     expr = mark_rvalue_use (expr);
11269 
11270   if (error_operand_p (expr))
11271     return error_mark_node;
11272 
11273   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
11274   p = conversion_obstack_alloc (0);
11275 
11276   conv = implicit_conversion (type, TREE_TYPE (expr), expr,
11277 			      /*c_cast_p=*/false,
11278 			      flags, complain);
11279 
11280   if (!conv)
11281     {
11282       if (complain & tf_error)
11283 	{
11284 	  /* If expr has unknown type, then it is an overloaded function.
11285 	     Call instantiate_type to get good error messages.  */
11286 	  if (TREE_TYPE (expr) == unknown_type_node)
11287 	    instantiate_type (type, expr, complain);
11288 	  else if (invalid_nonstatic_memfn_p (loc, expr, complain))
11289 	    /* We gave an error.  */;
11290 	  else
11291 	    {
11292 	      range_label_for_type_mismatch label (TREE_TYPE (expr), type);
11293 	      gcc_rich_location rich_loc (loc, &label);
11294 	      error_at (&rich_loc, "could not convert %qE from %qH to %qI",
11295 			expr, TREE_TYPE (expr), type);
11296 	    }
11297 	}
11298       expr = error_mark_node;
11299     }
11300   else if (processing_template_decl && conv->kind != ck_identity)
11301     {
11302       /* In a template, we are only concerned about determining the
11303 	 type of non-dependent expressions, so we do not have to
11304 	 perform the actual conversion.  But for initializers, we
11305 	 need to be able to perform it at instantiation
11306 	 (or instantiate_non_dependent_expr) time.  */
11307       expr = build1 (IMPLICIT_CONV_EXPR, type, expr);
11308       if (!(flags & LOOKUP_ONLYCONVERTING))
11309 	IMPLICIT_CONV_EXPR_DIRECT_INIT (expr) = true;
11310       if (flags & LOOKUP_NO_NARROWING)
11311 	IMPLICIT_CONV_EXPR_BRACED_INIT (expr) = true;
11312     }
11313   else
11314     expr = convert_like (conv, expr, complain);
11315 
11316   /* Free all the conversions we allocated.  */
11317   obstack_free (&conversion_obstack, p);
11318 
11319   return expr;
11320 }
11321 
11322 tree
perform_implicit_conversion(tree type,tree expr,tsubst_flags_t complain)11323 perform_implicit_conversion (tree type, tree expr, tsubst_flags_t complain)
11324 {
11325   return perform_implicit_conversion_flags (type, expr, complain,
11326 					    LOOKUP_IMPLICIT);
11327 }
11328 
11329 /* Convert EXPR to TYPE (as a direct-initialization) if that is
11330    permitted.  If the conversion is valid, the converted expression is
11331    returned.  Otherwise, NULL_TREE is returned, except in the case
11332    that TYPE is a class type; in that case, an error is issued.  If
11333    C_CAST_P is true, then this direct-initialization is taking
11334    place as part of a static_cast being attempted as part of a C-style
11335    cast.  */
11336 
11337 tree
perform_direct_initialization_if_possible(tree type,tree expr,bool c_cast_p,tsubst_flags_t complain)11338 perform_direct_initialization_if_possible (tree type,
11339 					   tree expr,
11340 					   bool c_cast_p,
11341                                            tsubst_flags_t complain)
11342 {
11343   conversion *conv;
11344   void *p;
11345 
11346   if (type == error_mark_node || error_operand_p (expr))
11347     return error_mark_node;
11348   /* [dcl.init]
11349 
11350      If the destination type is a (possibly cv-qualified) class type:
11351 
11352      -- If the initialization is direct-initialization ...,
11353      constructors are considered. ... If no constructor applies, or
11354      the overload resolution is ambiguous, the initialization is
11355      ill-formed.  */
11356   if (CLASS_TYPE_P (type))
11357     {
11358       vec<tree, va_gc> *args = make_tree_vector_single (expr);
11359       expr = build_special_member_call (NULL_TREE, complete_ctor_identifier,
11360 					&args, type, LOOKUP_NORMAL, complain);
11361       release_tree_vector (args);
11362       return build_cplus_new (type, expr, complain);
11363     }
11364 
11365   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
11366   p = conversion_obstack_alloc (0);
11367 
11368   conv = implicit_conversion (type, TREE_TYPE (expr), expr,
11369 			      c_cast_p,
11370 			      LOOKUP_NORMAL, complain);
11371   if (!conv || conv->bad_p)
11372     expr = NULL_TREE;
11373   else if (processing_template_decl && conv->kind != ck_identity)
11374     {
11375       /* In a template, we are only concerned about determining the
11376 	 type of non-dependent expressions, so we do not have to
11377 	 perform the actual conversion.  But for initializers, we
11378 	 need to be able to perform it at instantiation
11379 	 (or instantiate_non_dependent_expr) time.  */
11380       expr = build1 (IMPLICIT_CONV_EXPR, type, expr);
11381       IMPLICIT_CONV_EXPR_DIRECT_INIT (expr) = true;
11382     }
11383   else
11384     expr = convert_like_real (conv, expr, NULL_TREE, 0,
11385 			      /*issue_conversion_warnings=*/false,
11386 			      c_cast_p,
11387 			      complain);
11388 
11389   /* Free all the conversions we allocated.  */
11390   obstack_free (&conversion_obstack, p);
11391 
11392   return expr;
11393 }
11394 
11395 /* When initializing a reference that lasts longer than a full-expression,
11396    this special rule applies:
11397 
11398      [class.temporary]
11399 
11400      The temporary to which the reference is bound or the temporary
11401      that is the complete object to which the reference is bound
11402      persists for the lifetime of the reference.
11403 
11404      The temporaries created during the evaluation of the expression
11405      initializing the reference, except the temporary to which the
11406      reference is bound, are destroyed at the end of the
11407      full-expression in which they are created.
11408 
11409    In that case, we store the converted expression into a new
11410    VAR_DECL in a new scope.
11411 
11412    However, we want to be careful not to create temporaries when
11413    they are not required.  For example, given:
11414 
11415      struct B {};
11416      struct D : public B {};
11417      D f();
11418      const B& b = f();
11419 
11420    there is no need to copy the return value from "f"; we can just
11421    extend its lifetime.  Similarly, given:
11422 
11423      struct S {};
11424      struct T { operator S(); };
11425      T t;
11426      const S& s = t;
11427 
11428   we can extend the lifetime of the return value of the conversion
11429   operator.
11430 
11431   The next several functions are involved in this lifetime extension.  */
11432 
11433 /* DECL is a VAR_DECL or FIELD_DECL whose type is a REFERENCE_TYPE.  The
11434    reference is being bound to a temporary.  Create and return a new
11435    VAR_DECL with the indicated TYPE; this variable will store the value to
11436    which the reference is bound.  */
11437 
11438 tree
make_temporary_var_for_ref_to_temp(tree decl,tree type)11439 make_temporary_var_for_ref_to_temp (tree decl, tree type)
11440 {
11441   tree var = create_temporary_var (type);
11442 
11443   /* Register the variable.  */
11444   if (VAR_P (decl)
11445       && (TREE_STATIC (decl) || CP_DECL_THREAD_LOCAL_P (decl)))
11446     {
11447       /* Namespace-scope or local static; give it a mangled name.  */
11448 
11449       /* If an initializer is visible to multiple translation units, those
11450 	 translation units must agree on the addresses of the
11451 	 temporaries. Therefore the temporaries must be given a consistent name
11452 	 and vague linkage. The mangled name of a temporary is the name of the
11453 	 non-temporary object in whose initializer they appear, prefixed with
11454 	 GR and suffixed with a sequence number mangled using the usual rules
11455 	 for a seq-id. Temporaries are numbered with a pre-order, depth-first,
11456 	 left-to-right walk of the complete initializer.  */
11457 
11458       TREE_STATIC (var) = TREE_STATIC (decl);
11459       TREE_PUBLIC (var) = TREE_PUBLIC (decl);
11460       if (decl_anon_ns_mem_p (decl))
11461 	TREE_PUBLIC (var) = 0;
11462       if (vague_linkage_p (decl))
11463 	comdat_linkage (var);
11464 
11465       CP_DECL_THREAD_LOCAL_P (var) = CP_DECL_THREAD_LOCAL_P (decl);
11466       set_decl_tls_model (var, DECL_TLS_MODEL (decl));
11467 
11468       tree name = mangle_ref_init_variable (decl);
11469       DECL_NAME (var) = name;
11470       SET_DECL_ASSEMBLER_NAME (var, name);
11471     }
11472   else
11473     /* Create a new cleanup level if necessary.  */
11474     maybe_push_cleanup_level (type);
11475 
11476   return pushdecl (var);
11477 }
11478 
11479 /* EXPR is the initializer for a variable DECL of reference or
11480    std::initializer_list type.  Create, push and return a new VAR_DECL
11481    for the initializer so that it will live as long as DECL.  Any
11482    cleanup for the new variable is returned through CLEANUP, and the
11483    code to initialize the new variable is returned through INITP.  */
11484 
11485 static tree
set_up_extended_ref_temp(tree decl,tree expr,vec<tree,va_gc> ** cleanups,tree * initp,tree * cond_guard)11486 set_up_extended_ref_temp (tree decl, tree expr, vec<tree, va_gc> **cleanups,
11487 			  tree *initp, tree *cond_guard)
11488 {
11489   tree init;
11490   tree type;
11491   tree var;
11492 
11493   /* Create the temporary variable.  */
11494   type = TREE_TYPE (expr);
11495   var = make_temporary_var_for_ref_to_temp (decl, type);
11496   layout_decl (var, 0);
11497   /* If the rvalue is the result of a function call it will be
11498      a TARGET_EXPR.  If it is some other construct (such as a
11499      member access expression where the underlying object is
11500      itself the result of a function call), turn it into a
11501      TARGET_EXPR here.  It is important that EXPR be a
11502      TARGET_EXPR below since otherwise the INIT_EXPR will
11503      attempt to make a bitwise copy of EXPR to initialize
11504      VAR.  */
11505   if (TREE_CODE (expr) != TARGET_EXPR)
11506     expr = get_target_expr (expr);
11507 
11508   if (TREE_CODE (decl) == FIELD_DECL
11509       && extra_warnings && !TREE_NO_WARNING (decl))
11510     {
11511       warning (OPT_Wextra, "a temporary bound to %qD only persists "
11512 	       "until the constructor exits", decl);
11513       TREE_NO_WARNING (decl) = true;
11514     }
11515 
11516   /* Recursively extend temps in this initializer.  */
11517   TARGET_EXPR_INITIAL (expr)
11518     = extend_ref_init_temps (decl, TARGET_EXPR_INITIAL (expr), cleanups,
11519 			     cond_guard);
11520 
11521   /* Any reference temp has a non-trivial initializer.  */
11522   DECL_NONTRIVIALLY_INITIALIZED_P (var) = true;
11523 
11524   /* If the initializer is constant, put it in DECL_INITIAL so we get
11525      static initialization and use in constant expressions.  */
11526   init = maybe_constant_init (expr);
11527   /* As in store_init_value.  */
11528   init = cp_fully_fold (init);
11529   if (TREE_CONSTANT (init))
11530     {
11531       if (literal_type_p (type) && CP_TYPE_CONST_NON_VOLATILE_P (type))
11532 	{
11533 	  /* 5.19 says that a constant expression can include an
11534 	     lvalue-rvalue conversion applied to "a glvalue of literal type
11535 	     that refers to a non-volatile temporary object initialized
11536 	     with a constant expression".  Rather than try to communicate
11537 	     that this VAR_DECL is a temporary, just mark it constexpr.  */
11538 	  DECL_DECLARED_CONSTEXPR_P (var) = true;
11539 	  DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (var) = true;
11540 	  TREE_CONSTANT (var) = true;
11541 	  TREE_READONLY (var) = true;
11542 	}
11543       DECL_INITIAL (var) = init;
11544       init = NULL_TREE;
11545     }
11546   else
11547     /* Create the INIT_EXPR that will initialize the temporary
11548        variable.  */
11549     init = split_nonconstant_init (var, expr);
11550   if (at_function_scope_p ())
11551     {
11552       add_decl_expr (var);
11553 
11554       if (TREE_STATIC (var))
11555 	init = add_stmt_to_compound (init, register_dtor_fn (var));
11556       else
11557 	{
11558 	  tree cleanup = cxx_maybe_build_cleanup (var, tf_warning_or_error);
11559 	  if (cleanup)
11560 	    {
11561 	      if (cond_guard && cleanup != error_mark_node)
11562 		{
11563 		  if (*cond_guard == NULL_TREE)
11564 		    {
11565 		      *cond_guard = build_decl (input_location, VAR_DECL,
11566 						NULL_TREE, boolean_type_node);
11567 		      DECL_ARTIFICIAL (*cond_guard) = 1;
11568 		      DECL_IGNORED_P (*cond_guard) = 1;
11569 		      DECL_CONTEXT (*cond_guard) = current_function_decl;
11570 		      layout_decl (*cond_guard, 0);
11571 		      add_decl_expr (*cond_guard);
11572 		      tree set = cp_build_modify_expr (UNKNOWN_LOCATION,
11573 						       *cond_guard, NOP_EXPR,
11574 						       boolean_false_node,
11575 						       tf_warning_or_error);
11576 		      finish_expr_stmt (set);
11577 		    }
11578 		  cleanup = build3 (COND_EXPR, void_type_node,
11579 				    *cond_guard, cleanup, NULL_TREE);
11580 		}
11581 	      vec_safe_push (*cleanups, cleanup);
11582 	    }
11583 	}
11584 
11585       /* We must be careful to destroy the temporary only
11586 	 after its initialization has taken place.  If the
11587 	 initialization throws an exception, then the
11588 	 destructor should not be run.  We cannot simply
11589 	 transform INIT into something like:
11590 
11591 	 (INIT, ({ CLEANUP_STMT; }))
11592 
11593 	 because emit_local_var always treats the
11594 	 initializer as a full-expression.  Thus, the
11595 	 destructor would run too early; it would run at the
11596 	 end of initializing the reference variable, rather
11597 	 than at the end of the block enclosing the
11598 	 reference variable.
11599 
11600 	 The solution is to pass back a cleanup expression
11601 	 which the caller is responsible for attaching to
11602 	 the statement tree.  */
11603     }
11604   else
11605     {
11606       rest_of_decl_compilation (var, /*toplev=*/1, at_eof);
11607       if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
11608 	{
11609 	  if (CP_DECL_THREAD_LOCAL_P (var))
11610 	    tls_aggregates = tree_cons (NULL_TREE, var,
11611 					tls_aggregates);
11612 	  else
11613 	    static_aggregates = tree_cons (NULL_TREE, var,
11614 					   static_aggregates);
11615 	}
11616       else
11617 	/* Check whether the dtor is callable.  */
11618 	cxx_maybe_build_cleanup (var, tf_warning_or_error);
11619     }
11620   /* Avoid -Wunused-variable warning (c++/38958).  */
11621   if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
11622       && VAR_P (decl))
11623     TREE_USED (decl) = DECL_READ_P (decl) = true;
11624 
11625   *initp = init;
11626   return var;
11627 }
11628 
11629 /* Convert EXPR to the indicated reference TYPE, in a way suitable for
11630    initializing a variable of that TYPE.  */
11631 
11632 tree
initialize_reference(tree type,tree expr,int flags,tsubst_flags_t complain)11633 initialize_reference (tree type, tree expr,
11634 		      int flags, tsubst_flags_t complain)
11635 {
11636   conversion *conv;
11637   void *p;
11638   location_t loc = cp_expr_loc_or_loc (expr, input_location);
11639 
11640   if (type == error_mark_node || error_operand_p (expr))
11641     return error_mark_node;
11642 
11643   /* Get the high-water mark for the CONVERSION_OBSTACK.  */
11644   p = conversion_obstack_alloc (0);
11645 
11646   conv = reference_binding (type, TREE_TYPE (expr), expr, /*c_cast_p=*/false,
11647 			    flags, complain);
11648   if (!conv || conv->bad_p)
11649     {
11650       if (complain & tf_error)
11651 	{
11652 	  if (conv)
11653 	    convert_like (conv, expr, complain);
11654 	  else if (!CP_TYPE_CONST_P (TREE_TYPE (type))
11655 		   && !TYPE_REF_IS_RVALUE (type)
11656 		   && !lvalue_p (expr))
11657 	    error_at (loc, "invalid initialization of non-const reference of "
11658 		      "type %qH from an rvalue of type %qI",
11659 		      type, TREE_TYPE (expr));
11660 	  else
11661 	    error_at (loc, "invalid initialization of reference of type "
11662 		      "%qH from expression of type %qI", type,
11663 		      TREE_TYPE (expr));
11664 	}
11665       return error_mark_node;
11666     }
11667 
11668   if (conv->kind == ck_ref_bind)
11669     /* Perform the conversion.  */
11670     expr = convert_like (conv, expr, complain);
11671   else if (conv->kind == ck_ambig)
11672     /* We gave an error in build_user_type_conversion_1.  */
11673     expr = error_mark_node;
11674   else
11675     gcc_unreachable ();
11676 
11677   /* Free all the conversions we allocated.  */
11678   obstack_free (&conversion_obstack, p);
11679 
11680   return expr;
11681 }
11682 
11683 /* Subroutine of extend_ref_init_temps.  Possibly extend one initializer,
11684    which is bound either to a reference or a std::initializer_list.  */
11685 
11686 static tree
extend_ref_init_temps_1(tree decl,tree init,vec<tree,va_gc> ** cleanups,tree * cond_guard)11687 extend_ref_init_temps_1 (tree decl, tree init, vec<tree, va_gc> **cleanups,
11688 			 tree *cond_guard)
11689 {
11690   tree sub = init;
11691   tree *p;
11692   STRIP_NOPS (sub);
11693   if (TREE_CODE (sub) == COMPOUND_EXPR)
11694     {
11695       TREE_OPERAND (sub, 1)
11696 	= extend_ref_init_temps_1 (decl, TREE_OPERAND (sub, 1), cleanups,
11697 				   cond_guard);
11698       return init;
11699     }
11700   if (TREE_CODE (sub) == COND_EXPR)
11701     {
11702       tree cur_cond_guard = NULL_TREE;
11703       if (TREE_OPERAND (sub, 1))
11704 	TREE_OPERAND (sub, 1)
11705 	  = extend_ref_init_temps_1 (decl, TREE_OPERAND (sub, 1), cleanups,
11706 				     &cur_cond_guard);
11707       if (cur_cond_guard)
11708 	{
11709 	  tree set = cp_build_modify_expr (UNKNOWN_LOCATION, cur_cond_guard,
11710 					   NOP_EXPR, boolean_true_node,
11711 					   tf_warning_or_error);
11712 	  TREE_OPERAND (sub, 1)
11713 	    = cp_build_compound_expr (set, TREE_OPERAND (sub, 1),
11714 				      tf_warning_or_error);
11715 	}
11716       cur_cond_guard = NULL_TREE;
11717       if (TREE_OPERAND (sub, 2))
11718 	TREE_OPERAND (sub, 2)
11719 	  = extend_ref_init_temps_1 (decl, TREE_OPERAND (sub, 2), cleanups,
11720 				     &cur_cond_guard);
11721       if (cur_cond_guard)
11722 	{
11723 	  tree set = cp_build_modify_expr (UNKNOWN_LOCATION, cur_cond_guard,
11724 					   NOP_EXPR, boolean_true_node,
11725 					   tf_warning_or_error);
11726 	  TREE_OPERAND (sub, 2)
11727 	    = cp_build_compound_expr (set, TREE_OPERAND (sub, 2),
11728 				      tf_warning_or_error);
11729 	}
11730       return init;
11731     }
11732   if (TREE_CODE (sub) != ADDR_EXPR)
11733     return init;
11734   /* Deal with binding to a subobject.  */
11735   for (p = &TREE_OPERAND (sub, 0);
11736        TREE_CODE (*p) == COMPONENT_REF || TREE_CODE (*p) == ARRAY_REF; )
11737     p = &TREE_OPERAND (*p, 0);
11738   if (TREE_CODE (*p) == TARGET_EXPR)
11739     {
11740       tree subinit = NULL_TREE;
11741       *p = set_up_extended_ref_temp (decl, *p, cleanups, &subinit, cond_guard);
11742       recompute_tree_invariant_for_addr_expr (sub);
11743       if (init != sub)
11744 	init = fold_convert (TREE_TYPE (init), sub);
11745       if (subinit)
11746 	init = build2 (COMPOUND_EXPR, TREE_TYPE (init), subinit, init);
11747     }
11748   return init;
11749 }
11750 
11751 /* INIT is part of the initializer for DECL.  If there are any
11752    reference or initializer lists being initialized, extend their
11753    lifetime to match that of DECL.  */
11754 
11755 tree
extend_ref_init_temps(tree decl,tree init,vec<tree,va_gc> ** cleanups,tree * cond_guard)11756 extend_ref_init_temps (tree decl, tree init, vec<tree, va_gc> **cleanups,
11757 		       tree *cond_guard)
11758 {
11759   tree type = TREE_TYPE (init);
11760   if (processing_template_decl)
11761     return init;
11762   if (TYPE_REF_P (type))
11763     init = extend_ref_init_temps_1 (decl, init, cleanups, cond_guard);
11764   else
11765     {
11766       tree ctor = init;
11767       if (TREE_CODE (ctor) == TARGET_EXPR)
11768 	ctor = TARGET_EXPR_INITIAL (ctor);
11769       if (TREE_CODE (ctor) == CONSTRUCTOR)
11770 	{
11771 	  if (is_std_init_list (type))
11772 	    {
11773 	      /* The temporary array underlying a std::initializer_list
11774 		 is handled like a reference temporary.  */
11775 	      tree array = CONSTRUCTOR_ELT (ctor, 0)->value;
11776 	      array = extend_ref_init_temps_1 (decl, array, cleanups,
11777 					       cond_guard);
11778 	      CONSTRUCTOR_ELT (ctor, 0)->value = array;
11779 	    }
11780 	  else
11781 	    {
11782 	      unsigned i;
11783 	      constructor_elt *p;
11784 	      vec<constructor_elt, va_gc> *elts = CONSTRUCTOR_ELTS (ctor);
11785 	      FOR_EACH_VEC_SAFE_ELT (elts, i, p)
11786 		p->value = extend_ref_init_temps (decl, p->value, cleanups,
11787 						  cond_guard);
11788 	    }
11789 	  recompute_constructor_flags (ctor);
11790 	  if (decl_maybe_constant_var_p (decl) && TREE_CONSTANT (ctor))
11791 	    DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = true;
11792 	}
11793     }
11794 
11795   return init;
11796 }
11797 
11798 /* Returns true iff an initializer for TYPE could contain temporaries that
11799    need to be extended because they are bound to references or
11800    std::initializer_list.  */
11801 
11802 bool
type_has_extended_temps(tree type)11803 type_has_extended_temps (tree type)
11804 {
11805   type = strip_array_types (type);
11806   if (TYPE_REF_P (type))
11807     return true;
11808   if (CLASS_TYPE_P (type))
11809     {
11810       if (is_std_init_list (type))
11811 	return true;
11812       for (tree f = next_initializable_field (TYPE_FIELDS (type));
11813 	   f; f = next_initializable_field (DECL_CHAIN (f)))
11814 	if (type_has_extended_temps (TREE_TYPE (f)))
11815 	  return true;
11816     }
11817   return false;
11818 }
11819 
11820 /* Returns true iff TYPE is some variant of std::initializer_list.  */
11821 
11822 bool
is_std_init_list(tree type)11823 is_std_init_list (tree type)
11824 {
11825   if (!TYPE_P (type))
11826     return false;
11827   if (cxx_dialect == cxx98)
11828     return false;
11829   /* Look through typedefs.  */
11830   type = TYPE_MAIN_VARIANT (type);
11831   return (CLASS_TYPE_P (type)
11832 	  && CP_TYPE_CONTEXT (type) == std_node
11833 	  && init_list_identifier == DECL_NAME (TYPE_NAME (type)));
11834 }
11835 
11836 /* Returns true iff DECL is a list constructor: i.e. a constructor which
11837    will accept an argument list of a single std::initializer_list<T>.  */
11838 
11839 bool
is_list_ctor(tree decl)11840 is_list_ctor (tree decl)
11841 {
11842   tree args = FUNCTION_FIRST_USER_PARMTYPE (decl);
11843   tree arg;
11844 
11845   if (!args || args == void_list_node)
11846     return false;
11847 
11848   arg = non_reference (TREE_VALUE (args));
11849   if (!is_std_init_list (arg))
11850     return false;
11851 
11852   args = TREE_CHAIN (args);
11853 
11854   if (args && args != void_list_node && !TREE_PURPOSE (args))
11855     /* There are more non-defaulted parms.  */
11856     return false;
11857 
11858   return true;
11859 }
11860 
11861 #include "gt-cp-call.h"
11862