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