PR c/7652
[official-gcc.git] / gcc / cp / call.c
blob05f0431b2a5dc12ed54efcbf677298ed41fe5f13
1 /* Functions related to invoking -*- C++ -*- methods and overloaded functions.
2 Copyright (C) 1987-2016 Free Software Foundation, Inc.
3 Contributed by Michael Tiemann (tiemann@cygnus.com) and
4 modified by Brendan Kehoe (brendan@cygnus.com).
6 This file is part of GCC.
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.
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.
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/>. */
23 /* High-level class interface. */
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"
43 /* The various kinds of conversion. */
45 enum conversion_kind {
46 ck_identity,
47 ck_lvalue,
48 ck_tsafe,
49 ck_qual,
50 ck_std,
51 ck_ptr,
52 ck_pmem,
53 ck_base,
54 ck_ref_bind,
55 ck_user,
56 ck_ambig,
57 ck_list,
58 ck_aggr,
59 ck_rvalue
62 /* The rank of the conversion. Order of the enumerals matters; better
63 conversions should come earlier in the list. */
65 enum conversion_rank {
66 cr_identity,
67 cr_exact,
68 cr_promotion,
69 cr_std,
70 cr_pbool,
71 cr_user,
72 cr_ellipsis,
73 cr_bad
76 /* An implicit conversion sequence, in the sense of [over.best.ics].
77 The first conversion to be performed is at the end of the chain.
78 That conversion is always a cr_identity conversion. */
80 struct conversion {
81 /* The kind of conversion represented by this step. */
82 conversion_kind kind;
83 /* The rank of this conversion. */
84 conversion_rank rank;
85 BOOL_BITFIELD user_conv_p : 1;
86 BOOL_BITFIELD ellipsis_p : 1;
87 BOOL_BITFIELD this_p : 1;
88 /* True if this conversion would be permitted with a bending of
89 language standards, e.g. disregarding pointer qualifiers or
90 converting integers to pointers. */
91 BOOL_BITFIELD bad_p : 1;
92 /* If KIND is ck_ref_bind ck_base_conv, true to indicate that a
93 temporary should be created to hold the result of the
94 conversion. */
95 BOOL_BITFIELD need_temporary_p : 1;
96 /* If KIND is ck_ptr or ck_pmem, true to indicate that a conversion
97 from a pointer-to-derived to pointer-to-base is being performed. */
98 BOOL_BITFIELD base_p : 1;
99 /* If KIND is ck_ref_bind, true when either an lvalue reference is
100 being bound to an lvalue expression or an rvalue reference is
101 being bound to an rvalue expression. If KIND is ck_rvalue,
102 true when we should treat an lvalue as an rvalue (12.8p33). If
103 KIND is ck_base, always false. */
104 BOOL_BITFIELD rvaluedness_matches_p: 1;
105 BOOL_BITFIELD check_narrowing: 1;
106 /* The type of the expression resulting from the conversion. */
107 tree type;
108 union {
109 /* The next conversion in the chain. Since the conversions are
110 arranged from outermost to innermost, the NEXT conversion will
111 actually be performed before this conversion. This variant is
112 used only when KIND is neither ck_identity, ck_ambig nor
113 ck_list. Please use the next_conversion function instead
114 of using this field directly. */
115 conversion *next;
116 /* The expression at the beginning of the conversion chain. This
117 variant is used only if KIND is ck_identity or ck_ambig. */
118 tree expr;
119 /* The array of conversions for an initializer_list, so this
120 variant is used only when KIN D is ck_list. */
121 conversion **list;
122 } u;
123 /* The function candidate corresponding to this conversion
124 sequence. This field is only used if KIND is ck_user. */
125 struct z_candidate *cand;
128 #define CONVERSION_RANK(NODE) \
129 ((NODE)->bad_p ? cr_bad \
130 : (NODE)->ellipsis_p ? cr_ellipsis \
131 : (NODE)->user_conv_p ? cr_user \
132 : (NODE)->rank)
134 #define BAD_CONVERSION_RANK(NODE) \
135 ((NODE)->ellipsis_p ? cr_ellipsis \
136 : (NODE)->user_conv_p ? cr_user \
137 : (NODE)->rank)
139 static struct obstack conversion_obstack;
140 static bool conversion_obstack_initialized;
141 struct rejection_reason;
143 static struct z_candidate * tourney (struct z_candidate *, tsubst_flags_t);
144 static int equal_functions (tree, tree);
145 static int joust (struct z_candidate *, struct z_candidate *, bool,
146 tsubst_flags_t);
147 static int compare_ics (conversion *, conversion *);
148 static tree build_over_call (struct z_candidate *, int, tsubst_flags_t);
149 static tree build_java_interface_fn_ref (tree, tree);
150 #define convert_like(CONV, EXPR, COMPLAIN) \
151 convert_like_real ((CONV), (EXPR), NULL_TREE, 0, 0, \
152 /*issue_conversion_warnings=*/true, \
153 /*c_cast_p=*/false, (COMPLAIN))
154 #define convert_like_with_context(CONV, EXPR, FN, ARGNO, COMPLAIN ) \
155 convert_like_real ((CONV), (EXPR), (FN), (ARGNO), 0, \
156 /*issue_conversion_warnings=*/true, \
157 /*c_cast_p=*/false, (COMPLAIN))
158 static tree convert_like_real (conversion *, tree, tree, int, int, bool,
159 bool, tsubst_flags_t);
160 static void op_error (location_t, enum tree_code, enum tree_code, tree,
161 tree, tree, bool);
162 static struct z_candidate *build_user_type_conversion_1 (tree, tree, int,
163 tsubst_flags_t);
164 static void print_z_candidate (location_t, const char *, struct z_candidate *);
165 static void print_z_candidates (location_t, struct z_candidate *);
166 static tree build_this (tree);
167 static struct z_candidate *splice_viable (struct z_candidate *, bool, bool *);
168 static bool any_strictly_viable (struct z_candidate *);
169 static struct z_candidate *add_template_candidate
170 (struct z_candidate **, tree, tree, tree, tree, const vec<tree, va_gc> *,
171 tree, tree, tree, int, unification_kind_t, tsubst_flags_t);
172 static struct z_candidate *add_template_candidate_real
173 (struct z_candidate **, tree, tree, tree, tree, const vec<tree, va_gc> *,
174 tree, tree, tree, int, tree, unification_kind_t, tsubst_flags_t);
175 static void add_builtin_candidates
176 (struct z_candidate **, enum tree_code, enum tree_code,
177 tree, tree *, int, tsubst_flags_t);
178 static void add_builtin_candidate
179 (struct z_candidate **, enum tree_code, enum tree_code,
180 tree, tree, tree, tree *, tree *, int, tsubst_flags_t);
181 static bool is_complete (tree);
182 static void build_builtin_candidate
183 (struct z_candidate **, tree, tree, tree, tree *, tree *,
184 int, tsubst_flags_t);
185 static struct z_candidate *add_conv_candidate
186 (struct z_candidate **, tree, tree, const vec<tree, va_gc> *, tree,
187 tree, tsubst_flags_t);
188 static struct z_candidate *add_function_candidate
189 (struct z_candidate **, tree, tree, tree, const vec<tree, va_gc> *, tree,
190 tree, int, tsubst_flags_t);
191 static conversion *implicit_conversion (tree, tree, tree, bool, int,
192 tsubst_flags_t);
193 static conversion *reference_binding (tree, tree, tree, bool, int,
194 tsubst_flags_t);
195 static conversion *build_conv (conversion_kind, tree, conversion *);
196 static conversion *build_list_conv (tree, tree, int, tsubst_flags_t);
197 static conversion *next_conversion (conversion *);
198 static bool is_subseq (conversion *, conversion *);
199 static conversion *maybe_handle_ref_bind (conversion **);
200 static void maybe_handle_implicit_object (conversion **);
201 static struct z_candidate *add_candidate
202 (struct z_candidate **, tree, tree, const vec<tree, va_gc> *, size_t,
203 conversion **, tree, tree, int, struct rejection_reason *, int);
204 static tree source_type (conversion *);
205 static void add_warning (struct z_candidate *, struct z_candidate *);
206 static bool reference_compatible_p (tree, tree);
207 static conversion *direct_reference_binding (tree, conversion *);
208 static bool promoted_arithmetic_type_p (tree);
209 static conversion *conditional_conversion (tree, tree, tsubst_flags_t);
210 static char *name_as_c_string (tree, tree, bool *);
211 static tree prep_operand (tree);
212 static void add_candidates (tree, tree, const vec<tree, va_gc> *, tree, tree,
213 bool, tree, tree, int, struct z_candidate **,
214 tsubst_flags_t);
215 static conversion *merge_conversion_sequences (conversion *, conversion *);
216 static tree build_temp (tree, tree, int, diagnostic_t *, tsubst_flags_t);
218 /* Returns nonzero iff the destructor name specified in NAME matches BASETYPE.
219 NAME can take many forms... */
221 bool
222 check_dtor_name (tree basetype, tree name)
224 /* Just accept something we've already complained about. */
225 if (name == error_mark_node)
226 return true;
228 if (TREE_CODE (name) == TYPE_DECL)
229 name = TREE_TYPE (name);
230 else if (TYPE_P (name))
231 /* OK */;
232 else if (identifier_p (name))
234 if ((MAYBE_CLASS_TYPE_P (basetype)
235 && name == constructor_name (basetype))
236 || (TREE_CODE (basetype) == ENUMERAL_TYPE
237 && name == TYPE_IDENTIFIER (basetype)))
238 return true;
239 else
240 name = get_type_value (name);
242 else
244 /* In the case of:
246 template <class T> struct S { ~S(); };
247 int i;
248 i.~S();
250 NAME will be a class template. */
251 gcc_assert (DECL_CLASS_TEMPLATE_P (name));
252 return false;
255 if (!name || name == error_mark_node)
256 return false;
257 return same_type_p (TYPE_MAIN_VARIANT (basetype), TYPE_MAIN_VARIANT (name));
260 /* We want the address of a function or method. We avoid creating a
261 pointer-to-member function. */
263 tree
264 build_addr_func (tree function, tsubst_flags_t complain)
266 tree type = TREE_TYPE (function);
268 /* We have to do these by hand to avoid real pointer to member
269 functions. */
270 if (TREE_CODE (type) == METHOD_TYPE)
272 if (TREE_CODE (function) == OFFSET_REF)
274 tree object = build_address (TREE_OPERAND (function, 0));
275 return get_member_function_from_ptrfunc (&object,
276 TREE_OPERAND (function, 1),
277 complain);
279 function = build_address (function);
281 else
282 function = decay_conversion (function, complain, /*reject_builtin=*/false);
284 return function;
287 /* Build a CALL_EXPR, we can handle FUNCTION_TYPEs, METHOD_TYPEs, or
288 POINTER_TYPE to those. Note, pointer to member function types
289 (TYPE_PTRMEMFUNC_P) must be handled by our callers. There are
290 two variants. build_call_a is the primitive taking an array of
291 arguments, while build_call_n is a wrapper that handles varargs. */
293 tree
294 build_call_n (tree function, int n, ...)
296 if (n == 0)
297 return build_call_a (function, 0, NULL);
298 else
300 tree *argarray = XALLOCAVEC (tree, n);
301 va_list ap;
302 int i;
304 va_start (ap, n);
305 for (i = 0; i < n; i++)
306 argarray[i] = va_arg (ap, tree);
307 va_end (ap);
308 return build_call_a (function, n, argarray);
312 /* Update various flags in cfun and the call itself based on what is being
313 called. Split out of build_call_a so that bot_manip can use it too. */
315 void
316 set_flags_from_callee (tree call)
318 bool nothrow;
319 tree decl = get_callee_fndecl (call);
321 /* We check both the decl and the type; a function may be known not to
322 throw without being declared throw(). */
323 nothrow = decl && TREE_NOTHROW (decl);
324 if (CALL_EXPR_FN (call))
325 nothrow |= TYPE_NOTHROW_P (TREE_TYPE (TREE_TYPE (CALL_EXPR_FN (call))));
326 else if (internal_fn_flags (CALL_EXPR_IFN (call)) & ECF_NOTHROW)
327 nothrow = true;
329 if (!nothrow && at_function_scope_p () && cfun && cp_function_chain)
330 cp_function_chain->can_throw = 1;
332 if (decl && TREE_THIS_VOLATILE (decl) && cfun && cp_function_chain)
333 current_function_returns_abnormally = 1;
335 TREE_NOTHROW (call) = nothrow;
338 tree
339 build_call_a (tree function, int n, tree *argarray)
341 tree decl;
342 tree result_type;
343 tree fntype;
344 int i;
346 function = build_addr_func (function, tf_warning_or_error);
348 gcc_assert (TYPE_PTR_P (TREE_TYPE (function)));
349 fntype = TREE_TYPE (TREE_TYPE (function));
350 gcc_assert (TREE_CODE (fntype) == FUNCTION_TYPE
351 || TREE_CODE (fntype) == METHOD_TYPE);
352 result_type = TREE_TYPE (fntype);
353 /* An rvalue has no cv-qualifiers. */
354 if (SCALAR_TYPE_P (result_type) || VOID_TYPE_P (result_type))
355 result_type = cv_unqualified (result_type);
357 function = build_call_array_loc (input_location,
358 result_type, function, n, argarray);
359 set_flags_from_callee (function);
361 decl = get_callee_fndecl (function);
363 if (decl && !TREE_USED (decl))
365 /* We invoke build_call directly for several library
366 functions. These may have been declared normally if
367 we're building libgcc, so we can't just check
368 DECL_ARTIFICIAL. */
369 gcc_assert (DECL_ARTIFICIAL (decl)
370 || !strncmp (IDENTIFIER_POINTER (DECL_NAME (decl)),
371 "__", 2));
372 mark_used (decl);
375 require_complete_eh_spec_types (fntype, decl);
377 TREE_HAS_CONSTRUCTOR (function) = (decl && DECL_CONSTRUCTOR_P (decl));
379 /* Don't pass empty class objects by value. This is useful
380 for tags in STL, which are used to control overload resolution.
381 We don't need to handle other cases of copying empty classes. */
382 if (! decl || ! DECL_BUILT_IN (decl))
383 for (i = 0; i < n; i++)
385 tree arg = CALL_EXPR_ARG (function, i);
386 if (is_empty_class (TREE_TYPE (arg))
387 && ! TREE_ADDRESSABLE (TREE_TYPE (arg)))
389 tree t = build0 (EMPTY_CLASS_EXPR, TREE_TYPE (arg));
390 arg = build2 (COMPOUND_EXPR, TREE_TYPE (t), arg, t);
391 CALL_EXPR_ARG (function, i) = arg;
395 return function;
398 /* New overloading code. */
400 struct z_candidate;
402 struct candidate_warning {
403 z_candidate *loser;
404 candidate_warning *next;
407 /* Information for providing diagnostics about why overloading failed. */
409 enum rejection_reason_code {
410 rr_none,
411 rr_arity,
412 rr_explicit_conversion,
413 rr_template_conversion,
414 rr_arg_conversion,
415 rr_bad_arg_conversion,
416 rr_template_unification,
417 rr_invalid_copy,
418 rr_constraint_failure
421 struct conversion_info {
422 /* The index of the argument, 0-based. */
423 int n_arg;
424 /* The actual argument or its type. */
425 tree from;
426 /* The type of the parameter. */
427 tree to_type;
430 struct rejection_reason {
431 enum rejection_reason_code code;
432 union {
433 /* Information about an arity mismatch. */
434 struct {
435 /* The expected number of arguments. */
436 int expected;
437 /* The actual number of arguments in the call. */
438 int actual;
439 /* Whether the call was a varargs call. */
440 bool call_varargs_p;
441 } arity;
442 /* Information about an argument conversion mismatch. */
443 struct conversion_info conversion;
444 /* Same, but for bad argument conversions. */
445 struct conversion_info bad_conversion;
446 /* Information about template unification failures. These are the
447 parameters passed to fn_type_unification. */
448 struct {
449 tree tmpl;
450 tree explicit_targs;
451 int num_targs;
452 const tree *args;
453 unsigned int nargs;
454 tree return_type;
455 unification_kind_t strict;
456 int flags;
457 } template_unification;
458 /* Information about template instantiation failures. These are the
459 parameters passed to instantiate_template. */
460 struct {
461 tree tmpl;
462 tree targs;
463 } template_instantiation;
464 } u;
467 struct z_candidate {
468 /* The FUNCTION_DECL that will be called if this candidate is
469 selected by overload resolution. */
470 tree fn;
471 /* If not NULL_TREE, the first argument to use when calling this
472 function. */
473 tree first_arg;
474 /* The rest of the arguments to use when calling this function. If
475 there are no further arguments this may be NULL or it may be an
476 empty vector. */
477 const vec<tree, va_gc> *args;
478 /* The implicit conversion sequences for each of the arguments to
479 FN. */
480 conversion **convs;
481 /* The number of implicit conversion sequences. */
482 size_t num_convs;
483 /* If FN is a user-defined conversion, the standard conversion
484 sequence from the type returned by FN to the desired destination
485 type. */
486 conversion *second_conv;
487 struct rejection_reason *reason;
488 /* If FN is a member function, the binfo indicating the path used to
489 qualify the name of FN at the call site. This path is used to
490 determine whether or not FN is accessible if it is selected by
491 overload resolution. The DECL_CONTEXT of FN will always be a
492 (possibly improper) base of this binfo. */
493 tree access_path;
494 /* If FN is a non-static member function, the binfo indicating the
495 subobject to which the `this' pointer should be converted if FN
496 is selected by overload resolution. The type pointed to by
497 the `this' pointer must correspond to the most derived class
498 indicated by the CONVERSION_PATH. */
499 tree conversion_path;
500 tree template_decl;
501 tree explicit_targs;
502 candidate_warning *warnings;
503 z_candidate *next;
504 int viable;
506 /* The flags active in add_candidate. */
507 int flags;
510 /* Returns true iff T is a null pointer constant in the sense of
511 [conv.ptr]. */
513 bool
514 null_ptr_cst_p (tree t)
516 tree type = TREE_TYPE (t);
518 /* [conv.ptr]
520 A null pointer constant is an integral constant expression
521 (_expr.const_) rvalue of integer type that evaluates to zero or
522 an rvalue of type std::nullptr_t. */
523 if (NULLPTR_TYPE_P (type))
524 return true;
526 if (cxx_dialect >= cxx11)
528 /* Core issue 903 says only literal 0 is a null pointer constant. */
529 if (TREE_CODE (type) == INTEGER_TYPE
530 && TREE_CODE (t) == INTEGER_CST
531 && integer_zerop (t)
532 && !TREE_OVERFLOW (t))
533 return true;
535 else if (CP_INTEGRAL_TYPE_P (type))
537 t = fold_non_dependent_expr (t);
538 STRIP_NOPS (t);
539 if (integer_zerop (t) && !TREE_OVERFLOW (t))
540 return true;
543 return false;
546 /* Returns true iff T is a null member pointer value (4.11). */
548 bool
549 null_member_pointer_value_p (tree t)
551 tree type = TREE_TYPE (t);
552 if (!type)
553 return false;
554 else if (TYPE_PTRMEMFUNC_P (type))
555 return (TREE_CODE (t) == CONSTRUCTOR
556 && integer_zerop (CONSTRUCTOR_ELT (t, 0)->value));
557 else if (TYPE_PTRDATAMEM_P (type))
558 return integer_all_onesp (t);
559 else
560 return false;
563 /* Returns nonzero if PARMLIST consists of only default parms,
564 ellipsis, and/or undeduced parameter packs. */
566 bool
567 sufficient_parms_p (const_tree parmlist)
569 for (; parmlist && parmlist != void_list_node;
570 parmlist = TREE_CHAIN (parmlist))
571 if (!TREE_PURPOSE (parmlist)
572 && !PACK_EXPANSION_P (TREE_VALUE (parmlist)))
573 return false;
574 return true;
577 /* Allocate N bytes of memory from the conversion obstack. The memory
578 is zeroed before being returned. */
580 static void *
581 conversion_obstack_alloc (size_t n)
583 void *p;
584 if (!conversion_obstack_initialized)
586 gcc_obstack_init (&conversion_obstack);
587 conversion_obstack_initialized = true;
589 p = obstack_alloc (&conversion_obstack, n);
590 memset (p, 0, n);
591 return p;
594 /* Allocate rejection reasons. */
596 static struct rejection_reason *
597 alloc_rejection (enum rejection_reason_code code)
599 struct rejection_reason *p;
600 p = (struct rejection_reason *) conversion_obstack_alloc (sizeof *p);
601 p->code = code;
602 return p;
605 static struct rejection_reason *
606 arity_rejection (tree first_arg, int expected, int actual)
608 struct rejection_reason *r = alloc_rejection (rr_arity);
609 int adjust = first_arg != NULL_TREE;
610 r->u.arity.expected = expected - adjust;
611 r->u.arity.actual = actual - adjust;
612 return r;
615 static struct rejection_reason *
616 arg_conversion_rejection (tree first_arg, int n_arg, tree from, tree to)
618 struct rejection_reason *r = alloc_rejection (rr_arg_conversion);
619 int adjust = first_arg != NULL_TREE;
620 r->u.conversion.n_arg = n_arg - adjust;
621 r->u.conversion.from = from;
622 r->u.conversion.to_type = to;
623 return r;
626 static struct rejection_reason *
627 bad_arg_conversion_rejection (tree first_arg, int n_arg, tree from, tree to)
629 struct rejection_reason *r = alloc_rejection (rr_bad_arg_conversion);
630 int adjust = first_arg != NULL_TREE;
631 r->u.bad_conversion.n_arg = n_arg - adjust;
632 r->u.bad_conversion.from = from;
633 r->u.bad_conversion.to_type = to;
634 return r;
637 static struct rejection_reason *
638 explicit_conversion_rejection (tree from, tree to)
640 struct rejection_reason *r = alloc_rejection (rr_explicit_conversion);
641 r->u.conversion.n_arg = 0;
642 r->u.conversion.from = from;
643 r->u.conversion.to_type = to;
644 return r;
647 static struct rejection_reason *
648 template_conversion_rejection (tree from, tree to)
650 struct rejection_reason *r = alloc_rejection (rr_template_conversion);
651 r->u.conversion.n_arg = 0;
652 r->u.conversion.from = from;
653 r->u.conversion.to_type = to;
654 return r;
657 static struct rejection_reason *
658 template_unification_rejection (tree tmpl, tree explicit_targs, tree targs,
659 const tree *args, unsigned int nargs,
660 tree return_type, unification_kind_t strict,
661 int flags)
663 size_t args_n_bytes = sizeof (*args) * nargs;
664 tree *args1 = (tree *) conversion_obstack_alloc (args_n_bytes);
665 struct rejection_reason *r = alloc_rejection (rr_template_unification);
666 r->u.template_unification.tmpl = tmpl;
667 r->u.template_unification.explicit_targs = explicit_targs;
668 r->u.template_unification.num_targs = TREE_VEC_LENGTH (targs);
669 /* Copy args to our own storage. */
670 memcpy (args1, args, args_n_bytes);
671 r->u.template_unification.args = args1;
672 r->u.template_unification.nargs = nargs;
673 r->u.template_unification.return_type = return_type;
674 r->u.template_unification.strict = strict;
675 r->u.template_unification.flags = flags;
676 return r;
679 static struct rejection_reason *
680 template_unification_error_rejection (void)
682 return alloc_rejection (rr_template_unification);
685 static struct rejection_reason *
686 invalid_copy_with_fn_template_rejection (void)
688 struct rejection_reason *r = alloc_rejection (rr_invalid_copy);
689 return r;
692 // Build a constraint failure record, saving information into the
693 // template_instantiation field of the rejection. If FN is not a template
694 // declaration, the TMPL member is the FN declaration and TARGS is empty.
696 static struct rejection_reason *
697 constraint_failure (tree fn)
699 struct rejection_reason *r = alloc_rejection (rr_constraint_failure);
700 if (tree ti = DECL_TEMPLATE_INFO (fn))
702 r->u.template_instantiation.tmpl = TI_TEMPLATE (ti);
703 r->u.template_instantiation.targs = TI_ARGS (ti);
705 else
707 r->u.template_instantiation.tmpl = fn;
708 r->u.template_instantiation.targs = NULL_TREE;
710 return r;
713 /* Dynamically allocate a conversion. */
715 static conversion *
716 alloc_conversion (conversion_kind kind)
718 conversion *c;
719 c = (conversion *) conversion_obstack_alloc (sizeof (conversion));
720 c->kind = kind;
721 return c;
724 /* Make sure that all memory on the conversion obstack has been
725 freed. */
727 void
728 validate_conversion_obstack (void)
730 if (conversion_obstack_initialized)
731 gcc_assert ((obstack_next_free (&conversion_obstack)
732 == obstack_base (&conversion_obstack)));
735 /* Dynamically allocate an array of N conversions. */
737 static conversion **
738 alloc_conversions (size_t n)
740 return (conversion **) conversion_obstack_alloc (n * sizeof (conversion *));
743 static conversion *
744 build_conv (conversion_kind code, tree type, conversion *from)
746 conversion *t;
747 conversion_rank rank = CONVERSION_RANK (from);
749 /* Note that the caller is responsible for filling in t->cand for
750 user-defined conversions. */
751 t = alloc_conversion (code);
752 t->type = type;
753 t->u.next = from;
755 switch (code)
757 case ck_ptr:
758 case ck_pmem:
759 case ck_base:
760 case ck_std:
761 if (rank < cr_std)
762 rank = cr_std;
763 break;
765 case ck_qual:
766 if (rank < cr_exact)
767 rank = cr_exact;
768 break;
770 default:
771 break;
773 t->rank = rank;
774 t->user_conv_p = (code == ck_user || from->user_conv_p);
775 t->bad_p = from->bad_p;
776 t->base_p = false;
777 return t;
780 /* Represent a conversion from CTOR, a braced-init-list, to TYPE, a
781 specialization of std::initializer_list<T>, if such a conversion is
782 possible. */
784 static conversion *
785 build_list_conv (tree type, tree ctor, int flags, tsubst_flags_t complain)
787 tree elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (type), 0);
788 unsigned len = CONSTRUCTOR_NELTS (ctor);
789 conversion **subconvs = alloc_conversions (len);
790 conversion *t;
791 unsigned i;
792 tree val;
794 /* Within a list-initialization we can have more user-defined
795 conversions. */
796 flags &= ~LOOKUP_NO_CONVERSION;
797 /* But no narrowing conversions. */
798 flags |= LOOKUP_NO_NARROWING;
800 /* Can't make an array of these types. */
801 if (TREE_CODE (elttype) == REFERENCE_TYPE
802 || TREE_CODE (elttype) == FUNCTION_TYPE
803 || VOID_TYPE_P (elttype))
804 return NULL;
806 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor), i, val)
808 conversion *sub
809 = implicit_conversion (elttype, TREE_TYPE (val), val,
810 false, flags, complain);
811 if (sub == NULL)
812 return NULL;
814 subconvs[i] = sub;
817 t = alloc_conversion (ck_list);
818 t->type = type;
819 t->u.list = subconvs;
820 t->rank = cr_exact;
822 for (i = 0; i < len; ++i)
824 conversion *sub = subconvs[i];
825 if (sub->rank > t->rank)
826 t->rank = sub->rank;
827 if (sub->user_conv_p)
828 t->user_conv_p = true;
829 if (sub->bad_p)
830 t->bad_p = true;
833 return t;
836 /* Return the next conversion of the conversion chain (if applicable),
837 or NULL otherwise. Please use this function instead of directly
838 accessing fields of struct conversion. */
840 static conversion *
841 next_conversion (conversion *conv)
843 if (conv == NULL
844 || conv->kind == ck_identity
845 || conv->kind == ck_ambig
846 || conv->kind == ck_list)
847 return NULL;
848 return conv->u.next;
851 /* Subroutine of build_aggr_conv: check whether CTOR, a braced-init-list,
852 is a valid aggregate initializer for array type ATYPE. */
854 static bool
855 can_convert_array (tree atype, tree ctor, int flags, tsubst_flags_t complain)
857 unsigned i;
858 tree elttype = TREE_TYPE (atype);
859 for (i = 0; i < CONSTRUCTOR_NELTS (ctor); ++i)
861 tree val = CONSTRUCTOR_ELT (ctor, i)->value;
862 bool ok;
863 if (TREE_CODE (elttype) == ARRAY_TYPE
864 && TREE_CODE (val) == CONSTRUCTOR)
865 ok = can_convert_array (elttype, val, flags, complain);
866 else
867 ok = can_convert_arg (elttype, TREE_TYPE (val), val, flags,
868 complain);
869 if (!ok)
870 return false;
872 return true;
875 /* Represent a conversion from CTOR, a braced-init-list, to TYPE, an
876 aggregate class, if such a conversion is possible. */
878 static conversion *
879 build_aggr_conv (tree type, tree ctor, int flags, tsubst_flags_t complain)
881 unsigned HOST_WIDE_INT i = 0;
882 conversion *c;
883 tree field = next_initializable_field (TYPE_FIELDS (type));
884 tree empty_ctor = NULL_TREE;
886 /* We already called reshape_init in implicit_conversion. */
888 /* The conversions within the init-list aren't affected by the enclosing
889 context; they're always simple copy-initialization. */
890 flags = LOOKUP_IMPLICIT|LOOKUP_NO_NARROWING;
892 for (; field; field = next_initializable_field (DECL_CHAIN (field)))
894 tree ftype = TREE_TYPE (field);
895 tree val;
896 bool ok;
898 if (i < CONSTRUCTOR_NELTS (ctor))
899 val = CONSTRUCTOR_ELT (ctor, i)->value;
900 else if (DECL_INITIAL (field))
901 val = get_nsdmi (field, /*ctor*/false);
902 else if (TREE_CODE (ftype) == REFERENCE_TYPE)
903 /* Value-initialization of reference is ill-formed. */
904 return NULL;
905 else
907 if (empty_ctor == NULL_TREE)
908 empty_ctor = build_constructor (init_list_type_node, NULL);
909 val = empty_ctor;
911 ++i;
913 if (TREE_CODE (ftype) == ARRAY_TYPE
914 && TREE_CODE (val) == CONSTRUCTOR)
915 ok = can_convert_array (ftype, val, flags, complain);
916 else
917 ok = can_convert_arg (ftype, TREE_TYPE (val), val, flags,
918 complain);
920 if (!ok)
921 return NULL;
923 if (TREE_CODE (type) == UNION_TYPE)
924 break;
927 if (i < CONSTRUCTOR_NELTS (ctor))
928 return NULL;
930 c = alloc_conversion (ck_aggr);
931 c->type = type;
932 c->rank = cr_exact;
933 c->user_conv_p = true;
934 c->check_narrowing = true;
935 c->u.next = NULL;
936 return c;
939 /* Represent a conversion from CTOR, a braced-init-list, to TYPE, an
940 array type, if such a conversion is possible. */
942 static conversion *
943 build_array_conv (tree type, tree ctor, int flags, tsubst_flags_t complain)
945 conversion *c;
946 unsigned HOST_WIDE_INT len = CONSTRUCTOR_NELTS (ctor);
947 tree elttype = TREE_TYPE (type);
948 unsigned i;
949 tree val;
950 bool bad = false;
951 bool user = false;
952 enum conversion_rank rank = cr_exact;
954 /* We might need to propagate the size from the element to the array. */
955 complete_type (type);
957 if (TYPE_DOMAIN (type)
958 && !variably_modified_type_p (TYPE_DOMAIN (type), NULL_TREE))
960 unsigned HOST_WIDE_INT alen = tree_to_uhwi (array_type_nelts_top (type));
961 if (alen < len)
962 return NULL;
965 flags = LOOKUP_IMPLICIT|LOOKUP_NO_NARROWING;
967 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor), i, val)
969 conversion *sub
970 = implicit_conversion (elttype, TREE_TYPE (val), val,
971 false, flags, complain);
972 if (sub == NULL)
973 return NULL;
975 if (sub->rank > rank)
976 rank = sub->rank;
977 if (sub->user_conv_p)
978 user = true;
979 if (sub->bad_p)
980 bad = true;
983 c = alloc_conversion (ck_aggr);
984 c->type = type;
985 c->rank = rank;
986 c->user_conv_p = user;
987 c->bad_p = bad;
988 c->u.next = NULL;
989 return c;
992 /* Represent a conversion from CTOR, a braced-init-list, to TYPE, a
993 complex type, if such a conversion is possible. */
995 static conversion *
996 build_complex_conv (tree type, tree ctor, int flags,
997 tsubst_flags_t complain)
999 conversion *c;
1000 unsigned HOST_WIDE_INT len = CONSTRUCTOR_NELTS (ctor);
1001 tree elttype = TREE_TYPE (type);
1002 unsigned i;
1003 tree val;
1004 bool bad = false;
1005 bool user = false;
1006 enum conversion_rank rank = cr_exact;
1008 if (len != 2)
1009 return NULL;
1011 flags = LOOKUP_IMPLICIT|LOOKUP_NO_NARROWING;
1013 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor), i, val)
1015 conversion *sub
1016 = implicit_conversion (elttype, TREE_TYPE (val), val,
1017 false, flags, complain);
1018 if (sub == NULL)
1019 return NULL;
1021 if (sub->rank > rank)
1022 rank = sub->rank;
1023 if (sub->user_conv_p)
1024 user = true;
1025 if (sub->bad_p)
1026 bad = true;
1029 c = alloc_conversion (ck_aggr);
1030 c->type = type;
1031 c->rank = rank;
1032 c->user_conv_p = user;
1033 c->bad_p = bad;
1034 c->u.next = NULL;
1035 return c;
1038 /* Build a representation of the identity conversion from EXPR to
1039 itself. The TYPE should match the type of EXPR, if EXPR is non-NULL. */
1041 static conversion *
1042 build_identity_conv (tree type, tree expr)
1044 conversion *c;
1046 c = alloc_conversion (ck_identity);
1047 c->type = type;
1048 c->u.expr = expr;
1050 return c;
1053 /* Converting from EXPR to TYPE was ambiguous in the sense that there
1054 were multiple user-defined conversions to accomplish the job.
1055 Build a conversion that indicates that ambiguity. */
1057 static conversion *
1058 build_ambiguous_conv (tree type, tree expr)
1060 conversion *c;
1062 c = alloc_conversion (ck_ambig);
1063 c->type = type;
1064 c->u.expr = expr;
1066 return c;
1069 tree
1070 strip_top_quals (tree t)
1072 if (TREE_CODE (t) == ARRAY_TYPE)
1073 return t;
1074 return cp_build_qualified_type (t, 0);
1077 /* Returns the standard conversion path (see [conv]) from type FROM to type
1078 TO, if any. For proper handling of null pointer constants, you must
1079 also pass the expression EXPR to convert from. If C_CAST_P is true,
1080 this conversion is coming from a C-style cast. */
1082 static conversion *
1083 standard_conversion (tree to, tree from, tree expr, bool c_cast_p,
1084 int flags, tsubst_flags_t complain)
1086 enum tree_code fcode, tcode;
1087 conversion *conv;
1088 bool fromref = false;
1089 tree qualified_to;
1091 to = non_reference (to);
1092 if (TREE_CODE (from) == REFERENCE_TYPE)
1094 fromref = true;
1095 from = TREE_TYPE (from);
1097 qualified_to = to;
1098 to = strip_top_quals (to);
1099 from = strip_top_quals (from);
1101 if (expr && type_unknown_p (expr))
1103 if (TYPE_PTRFN_P (to) || TYPE_PTRMEMFUNC_P (to))
1105 tsubst_flags_t tflags = tf_conv;
1106 expr = instantiate_type (to, expr, tflags);
1107 if (expr == error_mark_node)
1108 return NULL;
1109 from = TREE_TYPE (expr);
1111 else if (TREE_CODE (to) == BOOLEAN_TYPE)
1113 /* Necessary for eg, TEMPLATE_ID_EXPRs (c++/50961). */
1114 expr = resolve_nondeduced_context (expr, complain);
1115 from = TREE_TYPE (expr);
1119 fcode = TREE_CODE (from);
1120 tcode = TREE_CODE (to);
1122 conv = build_identity_conv (from, expr);
1123 if (fcode == FUNCTION_TYPE || fcode == ARRAY_TYPE)
1125 from = type_decays_to (from);
1126 fcode = TREE_CODE (from);
1127 conv = build_conv (ck_lvalue, from, conv);
1129 /* Wrapping a ck_rvalue around a class prvalue (as a result of using
1130 obvalue_p) seems odd, since it's already a prvalue, but that's how we
1131 express the copy constructor call required by copy-initialization. */
1132 else if (fromref || (expr && obvalue_p (expr)))
1134 if (expr)
1136 tree bitfield_type;
1137 bitfield_type = is_bitfield_expr_with_lowered_type (expr);
1138 if (bitfield_type)
1140 from = strip_top_quals (bitfield_type);
1141 fcode = TREE_CODE (from);
1144 conv = build_conv (ck_rvalue, from, conv);
1145 if (flags & LOOKUP_PREFER_RVALUE)
1146 conv->rvaluedness_matches_p = true;
1149 /* Allow conversion between `__complex__' data types. */
1150 if (tcode == COMPLEX_TYPE && fcode == COMPLEX_TYPE)
1152 /* The standard conversion sequence to convert FROM to TO is
1153 the standard conversion sequence to perform componentwise
1154 conversion. */
1155 conversion *part_conv = standard_conversion
1156 (TREE_TYPE (to), TREE_TYPE (from), NULL_TREE, c_cast_p, flags,
1157 complain);
1159 if (part_conv)
1161 conv = build_conv (part_conv->kind, to, conv);
1162 conv->rank = part_conv->rank;
1164 else
1165 conv = NULL;
1167 return conv;
1170 if (same_type_p (from, to))
1172 if (CLASS_TYPE_P (to) && conv->kind == ck_rvalue)
1173 conv->type = qualified_to;
1174 return conv;
1177 /* [conv.ptr]
1178 A null pointer constant can be converted to a pointer type; ... A
1179 null pointer constant of integral type can be converted to an
1180 rvalue of type std::nullptr_t. */
1181 if ((tcode == POINTER_TYPE || TYPE_PTRMEM_P (to)
1182 || NULLPTR_TYPE_P (to))
1183 && ((expr && null_ptr_cst_p (expr))
1184 || NULLPTR_TYPE_P (from)))
1185 conv = build_conv (ck_std, to, conv);
1186 else if ((tcode == INTEGER_TYPE && fcode == POINTER_TYPE)
1187 || (tcode == POINTER_TYPE && fcode == INTEGER_TYPE))
1189 /* For backwards brain damage compatibility, allow interconversion of
1190 pointers and integers with a pedwarn. */
1191 conv = build_conv (ck_std, to, conv);
1192 conv->bad_p = true;
1194 else if (UNSCOPED_ENUM_P (to) && fcode == INTEGER_TYPE)
1196 /* For backwards brain damage compatibility, allow interconversion of
1197 enums and integers with a pedwarn. */
1198 conv = build_conv (ck_std, to, conv);
1199 conv->bad_p = true;
1201 else if ((tcode == POINTER_TYPE && fcode == POINTER_TYPE)
1202 || (TYPE_PTRDATAMEM_P (to) && TYPE_PTRDATAMEM_P (from)))
1204 tree to_pointee;
1205 tree from_pointee;
1207 if (tcode == POINTER_TYPE
1208 && same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (from),
1209 TREE_TYPE (to)))
1211 else if (VOID_TYPE_P (TREE_TYPE (to))
1212 && !TYPE_PTRDATAMEM_P (from)
1213 && TREE_CODE (TREE_TYPE (from)) != FUNCTION_TYPE)
1215 tree nfrom = TREE_TYPE (from);
1216 /* Don't try to apply restrict to void. */
1217 int quals = cp_type_quals (nfrom) & ~TYPE_QUAL_RESTRICT;
1218 from = build_pointer_type
1219 (cp_build_qualified_type (void_type_node, quals));
1220 conv = build_conv (ck_ptr, from, conv);
1222 else if (TYPE_PTRDATAMEM_P (from))
1224 tree fbase = TYPE_PTRMEM_CLASS_TYPE (from);
1225 tree tbase = TYPE_PTRMEM_CLASS_TYPE (to);
1227 if (DERIVED_FROM_P (fbase, tbase)
1228 && (same_type_ignoring_top_level_qualifiers_p
1229 (TYPE_PTRMEM_POINTED_TO_TYPE (from),
1230 TYPE_PTRMEM_POINTED_TO_TYPE (to))))
1232 from = build_ptrmem_type (tbase,
1233 TYPE_PTRMEM_POINTED_TO_TYPE (from));
1234 conv = build_conv (ck_pmem, from, conv);
1236 else if (!same_type_p (fbase, tbase))
1237 return NULL;
1239 else if (CLASS_TYPE_P (TREE_TYPE (from))
1240 && CLASS_TYPE_P (TREE_TYPE (to))
1241 /* [conv.ptr]
1243 An rvalue of type "pointer to cv D," where D is a
1244 class type, can be converted to an rvalue of type
1245 "pointer to cv B," where B is a base class (clause
1246 _class.derived_) of D. If B is an inaccessible
1247 (clause _class.access_) or ambiguous
1248 (_class.member.lookup_) base class of D, a program
1249 that necessitates this conversion is ill-formed.
1250 Therefore, we use DERIVED_FROM_P, and do not check
1251 access or uniqueness. */
1252 && DERIVED_FROM_P (TREE_TYPE (to), TREE_TYPE (from)))
1254 from =
1255 cp_build_qualified_type (TREE_TYPE (to),
1256 cp_type_quals (TREE_TYPE (from)));
1257 from = build_pointer_type (from);
1258 conv = build_conv (ck_ptr, from, conv);
1259 conv->base_p = true;
1261 else if (tx_safe_fn_type_p (TREE_TYPE (from)))
1263 /* A prvalue of type "pointer to transaction_safe function" can be
1264 converted to a prvalue of type "pointer to function". */
1265 tree unsafe = tx_unsafe_fn_variant (TREE_TYPE (from));
1266 if (same_type_p (unsafe, TREE_TYPE (to)))
1268 from = build_pointer_type (unsafe);
1269 conv = build_conv (ck_tsafe, from, conv);
1273 if (tcode == POINTER_TYPE)
1275 to_pointee = TREE_TYPE (to);
1276 from_pointee = TREE_TYPE (from);
1278 else
1280 to_pointee = TYPE_PTRMEM_POINTED_TO_TYPE (to);
1281 from_pointee = TYPE_PTRMEM_POINTED_TO_TYPE (from);
1284 if (same_type_p (from, to))
1285 /* OK */;
1286 else if (c_cast_p && comp_ptr_ttypes_const (to, from))
1287 /* In a C-style cast, we ignore CV-qualification because we
1288 are allowed to perform a static_cast followed by a
1289 const_cast. */
1290 conv = build_conv (ck_qual, to, conv);
1291 else if (!c_cast_p && comp_ptr_ttypes (to_pointee, from_pointee))
1292 conv = build_conv (ck_qual, to, conv);
1293 else if (expr && string_conv_p (to, expr, 0))
1294 /* converting from string constant to char *. */
1295 conv = build_conv (ck_qual, to, conv);
1296 /* Allow conversions among compatible ObjC pointer types (base
1297 conversions have been already handled above). */
1298 else if (c_dialect_objc ()
1299 && objc_compare_types (to, from, -4, NULL_TREE))
1300 conv = build_conv (ck_ptr, to, conv);
1301 else if (ptr_reasonably_similar (to_pointee, from_pointee))
1303 conv = build_conv (ck_ptr, to, conv);
1304 conv->bad_p = true;
1306 else
1307 return NULL;
1309 from = to;
1311 else if (TYPE_PTRMEMFUNC_P (to) && TYPE_PTRMEMFUNC_P (from))
1313 tree fromfn = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (from));
1314 tree tofn = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (to));
1315 tree fbase = class_of_this_parm (fromfn);
1316 tree tbase = class_of_this_parm (tofn);
1318 if (!DERIVED_FROM_P (fbase, tbase)
1319 || !same_type_p (static_fn_type (fromfn),
1320 static_fn_type (tofn)))
1321 return NULL;
1323 from = build_memfn_type (fromfn,
1324 tbase,
1325 cp_type_quals (tbase),
1326 type_memfn_rqual (tofn));
1327 from = build_ptrmemfunc_type (build_pointer_type (from));
1328 conv = build_conv (ck_pmem, from, conv);
1329 conv->base_p = true;
1331 else if (tcode == BOOLEAN_TYPE)
1333 /* [conv.bool]
1335 A prvalue of arithmetic, unscoped enumeration, pointer, or pointer
1336 to member type can be converted to a prvalue of type bool. ...
1337 For direct-initialization (8.5 [dcl.init]), a prvalue of type
1338 std::nullptr_t can be converted to a prvalue of type bool; */
1339 if (ARITHMETIC_TYPE_P (from)
1340 || UNSCOPED_ENUM_P (from)
1341 || fcode == POINTER_TYPE
1342 || TYPE_PTRMEM_P (from)
1343 || NULLPTR_TYPE_P (from))
1345 conv = build_conv (ck_std, to, conv);
1346 if (fcode == POINTER_TYPE
1347 || TYPE_PTRDATAMEM_P (from)
1348 || (TYPE_PTRMEMFUNC_P (from)
1349 && conv->rank < cr_pbool)
1350 || NULLPTR_TYPE_P (from))
1351 conv->rank = cr_pbool;
1352 if (NULLPTR_TYPE_P (from) && (flags & LOOKUP_ONLYCONVERTING))
1353 conv->bad_p = true;
1354 return conv;
1357 return NULL;
1359 /* We don't check for ENUMERAL_TYPE here because there are no standard
1360 conversions to enum type. */
1361 /* As an extension, allow conversion to complex type. */
1362 else if (ARITHMETIC_TYPE_P (to))
1364 if (! (INTEGRAL_CODE_P (fcode)
1365 || (fcode == REAL_TYPE && !(flags & LOOKUP_NO_NON_INTEGRAL)))
1366 || SCOPED_ENUM_P (from))
1367 return NULL;
1368 conv = build_conv (ck_std, to, conv);
1370 /* Give this a better rank if it's a promotion. */
1371 if (same_type_p (to, type_promotes_to (from))
1372 && next_conversion (conv)->rank <= cr_promotion)
1373 conv->rank = cr_promotion;
1375 else if (fcode == VECTOR_TYPE && tcode == VECTOR_TYPE
1376 && vector_types_convertible_p (from, to, false))
1377 return build_conv (ck_std, to, conv);
1378 else if (MAYBE_CLASS_TYPE_P (to) && MAYBE_CLASS_TYPE_P (from)
1379 && is_properly_derived_from (from, to))
1381 if (conv->kind == ck_rvalue)
1382 conv = next_conversion (conv);
1383 conv = build_conv (ck_base, to, conv);
1384 /* The derived-to-base conversion indicates the initialization
1385 of a parameter with base type from an object of a derived
1386 type. A temporary object is created to hold the result of
1387 the conversion unless we're binding directly to a reference. */
1388 conv->need_temporary_p = !(flags & LOOKUP_NO_TEMP_BIND);
1390 else
1391 return NULL;
1393 if (flags & LOOKUP_NO_NARROWING)
1394 conv->check_narrowing = true;
1396 return conv;
1399 /* Returns nonzero if T1 is reference-related to T2. */
1401 bool
1402 reference_related_p (tree t1, tree t2)
1404 if (t1 == error_mark_node || t2 == error_mark_node)
1405 return false;
1407 t1 = TYPE_MAIN_VARIANT (t1);
1408 t2 = TYPE_MAIN_VARIANT (t2);
1410 /* [dcl.init.ref]
1412 Given types "cv1 T1" and "cv2 T2," "cv1 T1" is reference-related
1413 to "cv2 T2" if T1 is the same type as T2, or T1 is a base class
1414 of T2. */
1415 return (same_type_p (t1, t2)
1416 || (CLASS_TYPE_P (t1) && CLASS_TYPE_P (t2)
1417 && DERIVED_FROM_P (t1, t2)));
1420 /* Returns nonzero if T1 is reference-compatible with T2. */
1422 static bool
1423 reference_compatible_p (tree t1, tree t2)
1425 /* [dcl.init.ref]
1427 "cv1 T1" is reference compatible with "cv2 T2" if T1 is
1428 reference-related to T2 and cv1 is the same cv-qualification as,
1429 or greater cv-qualification than, cv2. */
1430 return (reference_related_p (t1, t2)
1431 && at_least_as_qualified_p (t1, t2));
1434 /* A reference of the indicated TYPE is being bound directly to the
1435 expression represented by the implicit conversion sequence CONV.
1436 Return a conversion sequence for this binding. */
1438 static conversion *
1439 direct_reference_binding (tree type, conversion *conv)
1441 tree t;
1443 gcc_assert (TREE_CODE (type) == REFERENCE_TYPE);
1444 gcc_assert (TREE_CODE (conv->type) != REFERENCE_TYPE);
1446 t = TREE_TYPE (type);
1448 /* [over.ics.rank]
1450 When a parameter of reference type binds directly
1451 (_dcl.init.ref_) to an argument expression, the implicit
1452 conversion sequence is the identity conversion, unless the
1453 argument expression has a type that is a derived class of the
1454 parameter type, in which case the implicit conversion sequence is
1455 a derived-to-base Conversion.
1457 If the parameter binds directly to the result of applying a
1458 conversion function to the argument expression, the implicit
1459 conversion sequence is a user-defined conversion sequence
1460 (_over.ics.user_), with the second standard conversion sequence
1461 either an identity conversion or, if the conversion function
1462 returns an entity of a type that is a derived class of the
1463 parameter type, a derived-to-base conversion. */
1464 if (!same_type_ignoring_top_level_qualifiers_p (t, conv->type))
1466 /* Represent the derived-to-base conversion. */
1467 conv = build_conv (ck_base, t, conv);
1468 /* We will actually be binding to the base-class subobject in
1469 the derived class, so we mark this conversion appropriately.
1470 That way, convert_like knows not to generate a temporary. */
1471 conv->need_temporary_p = false;
1473 return build_conv (ck_ref_bind, type, conv);
1476 /* Returns the conversion path from type FROM to reference type TO for
1477 purposes of reference binding. For lvalue binding, either pass a
1478 reference type to FROM or an lvalue expression to EXPR. If the
1479 reference will be bound to a temporary, NEED_TEMPORARY_P is set for
1480 the conversion returned. If C_CAST_P is true, this
1481 conversion is coming from a C-style cast. */
1483 static conversion *
1484 reference_binding (tree rto, tree rfrom, tree expr, bool c_cast_p, int flags,
1485 tsubst_flags_t complain)
1487 conversion *conv = NULL;
1488 tree to = TREE_TYPE (rto);
1489 tree from = rfrom;
1490 tree tfrom;
1491 bool related_p;
1492 bool compatible_p;
1493 cp_lvalue_kind gl_kind;
1494 bool is_lvalue;
1496 if (TREE_CODE (to) == FUNCTION_TYPE && expr && type_unknown_p (expr))
1498 expr = instantiate_type (to, expr, tf_none);
1499 if (expr == error_mark_node)
1500 return NULL;
1501 from = TREE_TYPE (expr);
1504 if (expr && BRACE_ENCLOSED_INITIALIZER_P (expr))
1506 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
1507 /* DR 1288: Otherwise, if the initializer list has a single element
1508 of type E and ... [T's] referenced type is reference-related to E,
1509 the object or reference is initialized from that element... */
1510 if (CONSTRUCTOR_NELTS (expr) == 1)
1512 tree elt = CONSTRUCTOR_ELT (expr, 0)->value;
1513 if (error_operand_p (elt))
1514 return NULL;
1515 tree etype = TREE_TYPE (elt);
1516 if (reference_related_p (to, etype))
1518 expr = elt;
1519 from = etype;
1520 goto skip;
1523 /* Otherwise, if T is a reference type, a prvalue temporary of the
1524 type referenced by T is copy-list-initialized or
1525 direct-list-initialized, depending on the kind of initialization
1526 for the reference, and the reference is bound to that temporary. */
1527 conv = implicit_conversion (to, from, expr, c_cast_p,
1528 flags|LOOKUP_NO_TEMP_BIND, complain);
1529 skip:;
1532 if (TREE_CODE (from) == REFERENCE_TYPE)
1534 from = TREE_TYPE (from);
1535 if (!TYPE_REF_IS_RVALUE (rfrom)
1536 || TREE_CODE (from) == FUNCTION_TYPE)
1537 gl_kind = clk_ordinary;
1538 else
1539 gl_kind = clk_rvalueref;
1541 else if (expr)
1543 gl_kind = lvalue_kind (expr);
1544 if (gl_kind & clk_class)
1545 /* A class prvalue is not a glvalue. */
1546 gl_kind = clk_none;
1548 else
1549 gl_kind = clk_none;
1550 is_lvalue = gl_kind && !(gl_kind & clk_rvalueref);
1552 tfrom = from;
1553 if ((gl_kind & clk_bitfield) != 0)
1554 tfrom = unlowered_expr_type (expr);
1556 /* Figure out whether or not the types are reference-related and
1557 reference compatible. We have to do this after stripping
1558 references from FROM. */
1559 related_p = reference_related_p (to, tfrom);
1560 /* If this is a C cast, first convert to an appropriately qualified
1561 type, so that we can later do a const_cast to the desired type. */
1562 if (related_p && c_cast_p
1563 && !at_least_as_qualified_p (to, tfrom))
1564 to = cp_build_qualified_type (to, cp_type_quals (tfrom));
1565 compatible_p = reference_compatible_p (to, tfrom);
1567 /* Directly bind reference when target expression's type is compatible with
1568 the reference and expression is an lvalue. In DR391, the wording in
1569 [8.5.3/5 dcl.init.ref] is changed to also require direct bindings for
1570 const and rvalue references to rvalues of compatible class type.
1571 We should also do direct bindings for non-class xvalues. */
1572 if (related_p
1573 && (gl_kind
1574 || (!(flags & LOOKUP_NO_TEMP_BIND)
1575 && (CLASS_TYPE_P (from)
1576 || TREE_CODE (from) == ARRAY_TYPE))))
1578 /* [dcl.init.ref]
1580 If the initializer expression
1582 -- is an lvalue (but not an lvalue for a bit-field), and "cv1 T1"
1583 is reference-compatible with "cv2 T2,"
1585 the reference is bound directly to the initializer expression
1586 lvalue.
1588 [...]
1589 If the initializer expression is an rvalue, with T2 a class type,
1590 and "cv1 T1" is reference-compatible with "cv2 T2", the reference
1591 is bound to the object represented by the rvalue or to a sub-object
1592 within that object. */
1594 conv = build_identity_conv (tfrom, expr);
1595 conv = direct_reference_binding (rto, conv);
1597 if (flags & LOOKUP_PREFER_RVALUE)
1598 /* The top-level caller requested that we pretend that the lvalue
1599 be treated as an rvalue. */
1600 conv->rvaluedness_matches_p = TYPE_REF_IS_RVALUE (rto);
1601 else if (TREE_CODE (rfrom) == REFERENCE_TYPE)
1602 /* Handle rvalue reference to function properly. */
1603 conv->rvaluedness_matches_p
1604 = (TYPE_REF_IS_RVALUE (rto) == TYPE_REF_IS_RVALUE (rfrom));
1605 else
1606 conv->rvaluedness_matches_p
1607 = (TYPE_REF_IS_RVALUE (rto) == !is_lvalue);
1609 if ((gl_kind & clk_bitfield) != 0
1610 || ((gl_kind & clk_packed) != 0 && !TYPE_PACKED (to)))
1611 /* For the purposes of overload resolution, we ignore the fact
1612 this expression is a bitfield or packed field. (In particular,
1613 [over.ics.ref] says specifically that a function with a
1614 non-const reference parameter is viable even if the
1615 argument is a bitfield.)
1617 However, when we actually call the function we must create
1618 a temporary to which to bind the reference. If the
1619 reference is volatile, or isn't const, then we cannot make
1620 a temporary, so we just issue an error when the conversion
1621 actually occurs. */
1622 conv->need_temporary_p = true;
1624 /* Don't allow binding of lvalues (other than function lvalues) to
1625 rvalue references. */
1626 if (is_lvalue && TYPE_REF_IS_RVALUE (rto)
1627 && TREE_CODE (to) != FUNCTION_TYPE
1628 && !(flags & LOOKUP_PREFER_RVALUE))
1629 conv->bad_p = true;
1631 /* Nor the reverse. */
1632 if (!is_lvalue && !TYPE_REF_IS_RVALUE (rto)
1633 && (!CP_TYPE_CONST_NON_VOLATILE_P (to)
1634 || (flags & LOOKUP_NO_RVAL_BIND))
1635 && TREE_CODE (to) != FUNCTION_TYPE)
1636 conv->bad_p = true;
1638 if (!compatible_p)
1639 conv->bad_p = true;
1641 return conv;
1643 /* [class.conv.fct] A conversion function is never used to convert a
1644 (possibly cv-qualified) object to the (possibly cv-qualified) same
1645 object type (or a reference to it), to a (possibly cv-qualified) base
1646 class of that type (or a reference to it).... */
1647 else if (CLASS_TYPE_P (from) && !related_p
1648 && !(flags & LOOKUP_NO_CONVERSION))
1650 /* [dcl.init.ref]
1652 If the initializer expression
1654 -- has a class type (i.e., T2 is a class type) can be
1655 implicitly converted to an lvalue of type "cv3 T3," where
1656 "cv1 T1" is reference-compatible with "cv3 T3". (this
1657 conversion is selected by enumerating the applicable
1658 conversion functions (_over.match.ref_) and choosing the
1659 best one through overload resolution. (_over.match_).
1661 the reference is bound to the lvalue result of the conversion
1662 in the second case. */
1663 z_candidate *cand = build_user_type_conversion_1 (rto, expr, flags,
1664 complain);
1665 if (cand)
1666 return cand->second_conv;
1669 /* From this point on, we conceptually need temporaries, even if we
1670 elide them. Only the cases above are "direct bindings". */
1671 if (flags & LOOKUP_NO_TEMP_BIND)
1672 return NULL;
1674 /* [over.ics.rank]
1676 When a parameter of reference type is not bound directly to an
1677 argument expression, the conversion sequence is the one required
1678 to convert the argument expression to the underlying type of the
1679 reference according to _over.best.ics_. Conceptually, this
1680 conversion sequence corresponds to copy-initializing a temporary
1681 of the underlying type with the argument expression. Any
1682 difference in top-level cv-qualification is subsumed by the
1683 initialization itself and does not constitute a conversion. */
1685 /* [dcl.init.ref]
1687 Otherwise, the reference shall be an lvalue reference to a
1688 non-volatile const type, or the reference shall be an rvalue
1689 reference.
1691 We try below to treat this as a bad conversion to improve diagnostics,
1692 but if TO is an incomplete class, we need to reject this conversion
1693 now to avoid unnecessary instantiation. */
1694 if (!CP_TYPE_CONST_NON_VOLATILE_P (to) && !TYPE_REF_IS_RVALUE (rto)
1695 && !COMPLETE_TYPE_P (to))
1696 return NULL;
1698 /* We're generating a temporary now, but don't bind any more in the
1699 conversion (specifically, don't slice the temporary returned by a
1700 conversion operator). */
1701 flags |= LOOKUP_NO_TEMP_BIND;
1703 /* Core issue 899: When [copy-]initializing a temporary to be bound
1704 to the first parameter of a copy constructor (12.8) called with
1705 a single argument in the context of direct-initialization,
1706 explicit conversion functions are also considered.
1708 So don't set LOOKUP_ONLYCONVERTING in that case. */
1709 if (!(flags & LOOKUP_COPY_PARM))
1710 flags |= LOOKUP_ONLYCONVERTING;
1712 if (!conv)
1713 conv = implicit_conversion (to, from, expr, c_cast_p,
1714 flags, complain);
1715 if (!conv)
1716 return NULL;
1718 if (conv->user_conv_p)
1720 /* If initializing the temporary used a conversion function,
1721 recalculate the second conversion sequence. */
1722 for (conversion *t = conv; t; t = next_conversion (t))
1723 if (t->kind == ck_user
1724 && DECL_CONV_FN_P (t->cand->fn))
1726 tree ftype = TREE_TYPE (TREE_TYPE (t->cand->fn));
1727 int sflags = (flags|LOOKUP_NO_CONVERSION)&~LOOKUP_NO_TEMP_BIND;
1728 conversion *new_second
1729 = reference_binding (rto, ftype, NULL_TREE, c_cast_p,
1730 sflags, complain);
1731 if (!new_second)
1732 return NULL;
1733 return merge_conversion_sequences (t, new_second);
1737 conv = build_conv (ck_ref_bind, rto, conv);
1738 /* This reference binding, unlike those above, requires the
1739 creation of a temporary. */
1740 conv->need_temporary_p = true;
1741 conv->rvaluedness_matches_p = TYPE_REF_IS_RVALUE (rto);
1743 /* [dcl.init.ref]
1745 Otherwise, the reference shall be an lvalue reference to a
1746 non-volatile const type, or the reference shall be an rvalue
1747 reference. */
1748 if (!CP_TYPE_CONST_NON_VOLATILE_P (to) && !TYPE_REF_IS_RVALUE (rto))
1749 conv->bad_p = true;
1751 /* [dcl.init.ref]
1753 Otherwise, a temporary of type "cv1 T1" is created and
1754 initialized from the initializer expression using the rules for a
1755 non-reference copy initialization. If T1 is reference-related to
1756 T2, cv1 must be the same cv-qualification as, or greater
1757 cv-qualification than, cv2; otherwise, the program is ill-formed. */
1758 if (related_p && !at_least_as_qualified_p (to, from))
1759 conv->bad_p = true;
1761 return conv;
1764 /* Returns the implicit conversion sequence (see [over.ics]) from type
1765 FROM to type TO. The optional expression EXPR may affect the
1766 conversion. FLAGS are the usual overloading flags. If C_CAST_P is
1767 true, this conversion is coming from a C-style cast. */
1769 static conversion *
1770 implicit_conversion (tree to, tree from, tree expr, bool c_cast_p,
1771 int flags, tsubst_flags_t complain)
1773 conversion *conv;
1775 if (from == error_mark_node || to == error_mark_node
1776 || expr == error_mark_node)
1777 return NULL;
1779 /* Other flags only apply to the primary function in overload
1780 resolution, or after we've chosen one. */
1781 flags &= (LOOKUP_ONLYCONVERTING|LOOKUP_NO_CONVERSION|LOOKUP_COPY_PARM
1782 |LOOKUP_NO_TEMP_BIND|LOOKUP_NO_RVAL_BIND|LOOKUP_PREFER_RVALUE
1783 |LOOKUP_NO_NARROWING|LOOKUP_PROTECT|LOOKUP_NO_NON_INTEGRAL);
1785 /* FIXME: actually we don't want warnings either, but we can't just
1786 have 'complain &= ~(tf_warning|tf_error)' because it would cause
1787 the regression of, eg, g++.old-deja/g++.benjamin/16077.C.
1788 We really ought not to issue that warning until we've committed
1789 to that conversion. */
1790 complain &= ~tf_error;
1792 /* Call reshape_init early to remove redundant braces. */
1793 if (expr && BRACE_ENCLOSED_INITIALIZER_P (expr)
1794 && CLASS_TYPE_P (to)
1795 && COMPLETE_TYPE_P (complete_type (to))
1796 && !CLASSTYPE_NON_AGGREGATE (to))
1798 expr = reshape_init (to, expr, complain);
1799 if (expr == error_mark_node)
1800 return NULL;
1801 from = TREE_TYPE (expr);
1804 if (TREE_CODE (to) == REFERENCE_TYPE)
1805 conv = reference_binding (to, from, expr, c_cast_p, flags, complain);
1806 else
1807 conv = standard_conversion (to, from, expr, c_cast_p, flags, complain);
1809 if (conv)
1810 return conv;
1812 if (expr && BRACE_ENCLOSED_INITIALIZER_P (expr))
1814 if (is_std_init_list (to))
1815 return build_list_conv (to, expr, flags, complain);
1817 /* As an extension, allow list-initialization of _Complex. */
1818 if (TREE_CODE (to) == COMPLEX_TYPE)
1820 conv = build_complex_conv (to, expr, flags, complain);
1821 if (conv)
1822 return conv;
1825 /* Allow conversion from an initializer-list with one element to a
1826 scalar type. */
1827 if (SCALAR_TYPE_P (to))
1829 int nelts = CONSTRUCTOR_NELTS (expr);
1830 tree elt;
1832 if (nelts == 0)
1833 elt = build_value_init (to, tf_none);
1834 else if (nelts == 1)
1835 elt = CONSTRUCTOR_ELT (expr, 0)->value;
1836 else
1837 elt = error_mark_node;
1839 conv = implicit_conversion (to, TREE_TYPE (elt), elt,
1840 c_cast_p, flags, complain);
1841 if (conv)
1843 conv->check_narrowing = true;
1844 if (BRACE_ENCLOSED_INITIALIZER_P (elt))
1845 /* Too many levels of braces, i.e. '{{1}}'. */
1846 conv->bad_p = true;
1847 return conv;
1850 else if (TREE_CODE (to) == ARRAY_TYPE)
1851 return build_array_conv (to, expr, flags, complain);
1854 if (expr != NULL_TREE
1855 && (MAYBE_CLASS_TYPE_P (from)
1856 || MAYBE_CLASS_TYPE_P (to))
1857 && (flags & LOOKUP_NO_CONVERSION) == 0)
1859 struct z_candidate *cand;
1861 if (CLASS_TYPE_P (to)
1862 && BRACE_ENCLOSED_INITIALIZER_P (expr)
1863 && !CLASSTYPE_NON_AGGREGATE (complete_type (to)))
1864 return build_aggr_conv (to, expr, flags, complain);
1866 cand = build_user_type_conversion_1 (to, expr, flags, complain);
1867 if (cand)
1869 if (BRACE_ENCLOSED_INITIALIZER_P (expr)
1870 && CONSTRUCTOR_NELTS (expr) == 1
1871 && !is_list_ctor (cand->fn))
1873 /* "If C is not an initializer-list constructor and the
1874 initializer list has a single element of type cv U, where U is
1875 X or a class derived from X, the implicit conversion sequence
1876 has Exact Match rank if U is X, or Conversion rank if U is
1877 derived from X." */
1878 tree elt = CONSTRUCTOR_ELT (expr, 0)->value;
1879 tree elttype = TREE_TYPE (elt);
1880 if (reference_related_p (to, elttype))
1881 return implicit_conversion (to, elttype, elt,
1882 c_cast_p, flags, complain);
1884 conv = cand->second_conv;
1887 /* We used to try to bind a reference to a temporary here, but that
1888 is now handled after the recursive call to this function at the end
1889 of reference_binding. */
1890 return conv;
1893 return NULL;
1896 /* Add a new entry to the list of candidates. Used by the add_*_candidate
1897 functions. ARGS will not be changed until a single candidate is
1898 selected. */
1900 static struct z_candidate *
1901 add_candidate (struct z_candidate **candidates,
1902 tree fn, tree first_arg, const vec<tree, va_gc> *args,
1903 size_t num_convs, conversion **convs,
1904 tree access_path, tree conversion_path,
1905 int viable, struct rejection_reason *reason,
1906 int flags)
1908 struct z_candidate *cand = (struct z_candidate *)
1909 conversion_obstack_alloc (sizeof (struct z_candidate));
1911 cand->fn = fn;
1912 cand->first_arg = first_arg;
1913 cand->args = args;
1914 cand->convs = convs;
1915 cand->num_convs = num_convs;
1916 cand->access_path = access_path;
1917 cand->conversion_path = conversion_path;
1918 cand->viable = viable;
1919 cand->reason = reason;
1920 cand->next = *candidates;
1921 cand->flags = flags;
1922 *candidates = cand;
1924 return cand;
1927 /* Return the number of remaining arguments in the parameter list
1928 beginning with ARG. */
1931 remaining_arguments (tree arg)
1933 int n;
1935 for (n = 0; arg != NULL_TREE && arg != void_list_node;
1936 arg = TREE_CHAIN (arg))
1937 n++;
1939 return n;
1942 /* Create an overload candidate for the function or method FN called
1943 with the argument list FIRST_ARG/ARGS and add it to CANDIDATES.
1944 FLAGS is passed on to implicit_conversion.
1946 This does not change ARGS.
1948 CTYPE, if non-NULL, is the type we want to pretend this function
1949 comes from for purposes of overload resolution. */
1951 static struct z_candidate *
1952 add_function_candidate (struct z_candidate **candidates,
1953 tree fn, tree ctype, tree first_arg,
1954 const vec<tree, va_gc> *args, tree access_path,
1955 tree conversion_path, int flags,
1956 tsubst_flags_t complain)
1958 tree parmlist = TYPE_ARG_TYPES (TREE_TYPE (fn));
1959 int i, len;
1960 conversion **convs;
1961 tree parmnode;
1962 tree orig_first_arg = first_arg;
1963 int skip;
1964 int viable = 1;
1965 struct rejection_reason *reason = NULL;
1967 /* At this point we should not see any functions which haven't been
1968 explicitly declared, except for friend functions which will have
1969 been found using argument dependent lookup. */
1970 gcc_assert (!DECL_ANTICIPATED (fn) || DECL_HIDDEN_FRIEND_P (fn));
1972 /* The `this', `in_chrg' and VTT arguments to constructors are not
1973 considered in overload resolution. */
1974 if (DECL_CONSTRUCTOR_P (fn))
1976 parmlist = skip_artificial_parms_for (fn, parmlist);
1977 skip = num_artificial_parms_for (fn);
1978 if (skip > 0 && first_arg != NULL_TREE)
1980 --skip;
1981 first_arg = NULL_TREE;
1984 else
1985 skip = 0;
1987 len = vec_safe_length (args) - skip + (first_arg != NULL_TREE ? 1 : 0);
1988 convs = alloc_conversions (len);
1990 /* 13.3.2 - Viable functions [over.match.viable]
1991 First, to be a viable function, a candidate function shall have enough
1992 parameters to agree in number with the arguments in the list.
1994 We need to check this first; otherwise, checking the ICSes might cause
1995 us to produce an ill-formed template instantiation. */
1997 parmnode = parmlist;
1998 for (i = 0; i < len; ++i)
2000 if (parmnode == NULL_TREE || parmnode == void_list_node)
2001 break;
2002 parmnode = TREE_CHAIN (parmnode);
2005 if ((i < len && parmnode)
2006 || !sufficient_parms_p (parmnode))
2008 int remaining = remaining_arguments (parmnode);
2009 viable = 0;
2010 reason = arity_rejection (first_arg, i + remaining, len);
2013 /* Second, for a function to be viable, its constraints must be
2014 satisfied. */
2015 if (flag_concepts && viable
2016 && !constraints_satisfied_p (fn))
2018 reason = constraint_failure (fn);
2019 viable = false;
2022 /* When looking for a function from a subobject from an implicit
2023 copy/move constructor/operator=, don't consider anything that takes (a
2024 reference to) an unrelated type. See c++/44909 and core 1092. */
2025 if (viable && parmlist && (flags & LOOKUP_DEFAULTED))
2027 if (DECL_CONSTRUCTOR_P (fn))
2028 i = 1;
2029 else if (DECL_ASSIGNMENT_OPERATOR_P (fn)
2030 && DECL_OVERLOADED_OPERATOR_P (fn) == NOP_EXPR)
2031 i = 2;
2032 else
2033 i = 0;
2034 if (i && len == i)
2036 parmnode = chain_index (i-1, parmlist);
2037 if (!reference_related_p (non_reference (TREE_VALUE (parmnode)),
2038 ctype))
2039 viable = 0;
2042 /* This only applies at the top level. */
2043 flags &= ~LOOKUP_DEFAULTED;
2046 if (! viable)
2047 goto out;
2049 /* Third, for F to be a viable function, there shall exist for each
2050 argument an implicit conversion sequence that converts that argument
2051 to the corresponding parameter of F. */
2053 parmnode = parmlist;
2055 for (i = 0; i < len; ++i)
2057 tree argtype, to_type;
2058 tree arg;
2059 conversion *t;
2060 int is_this;
2062 if (parmnode == void_list_node)
2063 break;
2065 if (i == 0 && first_arg != NULL_TREE)
2066 arg = first_arg;
2067 else
2068 arg = CONST_CAST_TREE (
2069 (*args)[i + skip - (first_arg != NULL_TREE ? 1 : 0)]);
2070 argtype = lvalue_type (arg);
2072 is_this = (i == 0 && DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
2073 && ! DECL_CONSTRUCTOR_P (fn));
2075 if (parmnode)
2077 tree parmtype = TREE_VALUE (parmnode);
2078 int lflags = flags;
2080 parmnode = TREE_CHAIN (parmnode);
2082 /* The type of the implicit object parameter ('this') for
2083 overload resolution is not always the same as for the
2084 function itself; conversion functions are considered to
2085 be members of the class being converted, and functions
2086 introduced by a using-declaration are considered to be
2087 members of the class that uses them.
2089 Since build_over_call ignores the ICS for the `this'
2090 parameter, we can just change the parm type. */
2091 if (ctype && is_this)
2093 parmtype = cp_build_qualified_type
2094 (ctype, cp_type_quals (TREE_TYPE (parmtype)));
2095 if (FUNCTION_REF_QUALIFIED (TREE_TYPE (fn)))
2097 /* If the function has a ref-qualifier, the implicit
2098 object parameter has reference type. */
2099 bool rv = FUNCTION_RVALUE_QUALIFIED (TREE_TYPE (fn));
2100 parmtype = cp_build_reference_type (parmtype, rv);
2101 /* The special handling of 'this' conversions in compare_ics
2102 does not apply if there is a ref-qualifier. */
2103 is_this = false;
2105 else
2107 parmtype = build_pointer_type (parmtype);
2108 arg = build_this (arg);
2109 argtype = lvalue_type (arg);
2113 /* Core issue 899: When [copy-]initializing a temporary to be bound
2114 to the first parameter of a copy constructor (12.8) called with
2115 a single argument in the context of direct-initialization,
2116 explicit conversion functions are also considered.
2118 So set LOOKUP_COPY_PARM to let reference_binding know that
2119 it's being called in that context. We generalize the above
2120 to handle move constructors and template constructors as well;
2121 the standardese should soon be updated similarly. */
2122 if (ctype && i == 0 && (len-skip == 1)
2123 && DECL_CONSTRUCTOR_P (fn)
2124 && parmtype != error_mark_node
2125 && (same_type_ignoring_top_level_qualifiers_p
2126 (non_reference (parmtype), ctype)))
2128 if (!(flags & LOOKUP_ONLYCONVERTING))
2129 lflags |= LOOKUP_COPY_PARM;
2130 /* We allow user-defined conversions within init-lists, but
2131 don't list-initialize the copy parm, as that would mean
2132 using two levels of braces for the same type. */
2133 if ((flags & LOOKUP_LIST_INIT_CTOR)
2134 && BRACE_ENCLOSED_INITIALIZER_P (arg))
2135 lflags |= LOOKUP_NO_CONVERSION;
2137 else
2138 lflags |= LOOKUP_ONLYCONVERTING;
2140 t = implicit_conversion (parmtype, argtype, arg,
2141 /*c_cast_p=*/false, lflags, complain);
2142 to_type = parmtype;
2144 else
2146 t = build_identity_conv (argtype, arg);
2147 t->ellipsis_p = true;
2148 to_type = argtype;
2151 if (t && is_this)
2152 t->this_p = true;
2154 convs[i] = t;
2155 if (! t)
2157 viable = 0;
2158 reason = arg_conversion_rejection (first_arg, i, argtype, to_type);
2159 break;
2162 if (t->bad_p)
2164 viable = -1;
2165 reason = bad_arg_conversion_rejection (first_arg, i, arg, to_type);
2169 out:
2170 return add_candidate (candidates, fn, orig_first_arg, args, len, convs,
2171 access_path, conversion_path, viable, reason, flags);
2174 /* Create an overload candidate for the conversion function FN which will
2175 be invoked for expression OBJ, producing a pointer-to-function which
2176 will in turn be called with the argument list FIRST_ARG/ARGLIST,
2177 and add it to CANDIDATES. This does not change ARGLIST. FLAGS is
2178 passed on to implicit_conversion.
2180 Actually, we don't really care about FN; we care about the type it
2181 converts to. There may be multiple conversion functions that will
2182 convert to that type, and we rely on build_user_type_conversion_1 to
2183 choose the best one; so when we create our candidate, we record the type
2184 instead of the function. */
2186 static struct z_candidate *
2187 add_conv_candidate (struct z_candidate **candidates, tree fn, tree obj,
2188 const vec<tree, va_gc> *arglist,
2189 tree access_path, tree conversion_path,
2190 tsubst_flags_t complain)
2192 tree totype = TREE_TYPE (TREE_TYPE (fn));
2193 int i, len, viable, flags;
2194 tree parmlist, parmnode;
2195 conversion **convs;
2196 struct rejection_reason *reason;
2198 for (parmlist = totype; TREE_CODE (parmlist) != FUNCTION_TYPE; )
2199 parmlist = TREE_TYPE (parmlist);
2200 parmlist = TYPE_ARG_TYPES (parmlist);
2202 len = vec_safe_length (arglist) + 1;
2203 convs = alloc_conversions (len);
2204 parmnode = parmlist;
2205 viable = 1;
2206 flags = LOOKUP_IMPLICIT;
2207 reason = NULL;
2209 /* Don't bother looking up the same type twice. */
2210 if (*candidates && (*candidates)->fn == totype)
2211 return NULL;
2213 for (i = 0; i < len; ++i)
2215 tree arg, argtype, convert_type = NULL_TREE;
2216 conversion *t;
2218 if (i == 0)
2219 arg = obj;
2220 else
2221 arg = (*arglist)[i - 1];
2222 argtype = lvalue_type (arg);
2224 if (i == 0)
2226 t = implicit_conversion (totype, argtype, arg, /*c_cast_p=*/false,
2227 flags, complain);
2228 convert_type = totype;
2230 else if (parmnode == void_list_node)
2231 break;
2232 else if (parmnode)
2234 t = implicit_conversion (TREE_VALUE (parmnode), argtype, arg,
2235 /*c_cast_p=*/false, flags, complain);
2236 convert_type = TREE_VALUE (parmnode);
2238 else
2240 t = build_identity_conv (argtype, arg);
2241 t->ellipsis_p = true;
2242 convert_type = argtype;
2245 convs[i] = t;
2246 if (! t)
2247 break;
2249 if (t->bad_p)
2251 viable = -1;
2252 reason = bad_arg_conversion_rejection (NULL_TREE, i, arg, convert_type);
2255 if (i == 0)
2256 continue;
2258 if (parmnode)
2259 parmnode = TREE_CHAIN (parmnode);
2262 if (i < len
2263 || ! sufficient_parms_p (parmnode))
2265 int remaining = remaining_arguments (parmnode);
2266 viable = 0;
2267 reason = arity_rejection (NULL_TREE, i + remaining, len);
2270 return add_candidate (candidates, totype, obj, arglist, len, convs,
2271 access_path, conversion_path, viable, reason, flags);
2274 static void
2275 build_builtin_candidate (struct z_candidate **candidates, tree fnname,
2276 tree type1, tree type2, tree *args, tree *argtypes,
2277 int flags, tsubst_flags_t complain)
2279 conversion *t;
2280 conversion **convs;
2281 size_t num_convs;
2282 int viable = 1, i;
2283 tree types[2];
2284 struct rejection_reason *reason = NULL;
2286 types[0] = type1;
2287 types[1] = type2;
2289 num_convs = args[2] ? 3 : (args[1] ? 2 : 1);
2290 convs = alloc_conversions (num_convs);
2292 /* TRUTH_*_EXPR do "contextual conversion to bool", which means explicit
2293 conversion ops are allowed. We handle that here by just checking for
2294 boolean_type_node because other operators don't ask for it. COND_EXPR
2295 also does contextual conversion to bool for the first operand, but we
2296 handle that in build_conditional_expr, and type1 here is operand 2. */
2297 if (type1 != boolean_type_node)
2298 flags |= LOOKUP_ONLYCONVERTING;
2300 for (i = 0; i < 2; ++i)
2302 if (! args[i])
2303 break;
2305 t = implicit_conversion (types[i], argtypes[i], args[i],
2306 /*c_cast_p=*/false, flags, complain);
2307 if (! t)
2309 viable = 0;
2310 /* We need something for printing the candidate. */
2311 t = build_identity_conv (types[i], NULL_TREE);
2312 reason = arg_conversion_rejection (NULL_TREE, i, argtypes[i],
2313 types[i]);
2315 else if (t->bad_p)
2317 viable = 0;
2318 reason = bad_arg_conversion_rejection (NULL_TREE, i, args[i],
2319 types[i]);
2321 convs[i] = t;
2324 /* For COND_EXPR we rearranged the arguments; undo that now. */
2325 if (args[2])
2327 convs[2] = convs[1];
2328 convs[1] = convs[0];
2329 t = implicit_conversion (boolean_type_node, argtypes[2], args[2],
2330 /*c_cast_p=*/false, flags,
2331 complain);
2332 if (t)
2333 convs[0] = t;
2334 else
2336 viable = 0;
2337 reason = arg_conversion_rejection (NULL_TREE, 0, argtypes[2],
2338 boolean_type_node);
2342 add_candidate (candidates, fnname, /*first_arg=*/NULL_TREE, /*args=*/NULL,
2343 num_convs, convs,
2344 /*access_path=*/NULL_TREE,
2345 /*conversion_path=*/NULL_TREE,
2346 viable, reason, flags);
2349 static bool
2350 is_complete (tree t)
2352 return COMPLETE_TYPE_P (complete_type (t));
2355 /* Returns nonzero if TYPE is a promoted arithmetic type. */
2357 static bool
2358 promoted_arithmetic_type_p (tree type)
2360 /* [over.built]
2362 In this section, the term promoted integral type is used to refer
2363 to those integral types which are preserved by integral promotion
2364 (including e.g. int and long but excluding e.g. char).
2365 Similarly, the term promoted arithmetic type refers to promoted
2366 integral types plus floating types. */
2367 return ((CP_INTEGRAL_TYPE_P (type)
2368 && same_type_p (type_promotes_to (type), type))
2369 || TREE_CODE (type) == REAL_TYPE);
2372 /* Create any builtin operator overload candidates for the operator in
2373 question given the converted operand types TYPE1 and TYPE2. The other
2374 args are passed through from add_builtin_candidates to
2375 build_builtin_candidate.
2377 TYPE1 and TYPE2 may not be permissible, and we must filter them.
2378 If CODE is requires candidates operands of the same type of the kind
2379 of which TYPE1 and TYPE2 are, we add both candidates
2380 CODE (TYPE1, TYPE1) and CODE (TYPE2, TYPE2). */
2382 static void
2383 add_builtin_candidate (struct z_candidate **candidates, enum tree_code code,
2384 enum tree_code code2, tree fnname, tree type1,
2385 tree type2, tree *args, tree *argtypes, int flags,
2386 tsubst_flags_t complain)
2388 switch (code)
2390 case POSTINCREMENT_EXPR:
2391 case POSTDECREMENT_EXPR:
2392 args[1] = integer_zero_node;
2393 type2 = integer_type_node;
2394 break;
2395 default:
2396 break;
2399 switch (code)
2402 /* 4 For every pair T, VQ), where T is an arithmetic or enumeration type,
2403 and VQ is either volatile or empty, there exist candidate operator
2404 functions of the form
2405 VQ T& operator++(VQ T&);
2406 T operator++(VQ T&, int);
2407 5 For every pair T, VQ), where T is an enumeration type or an arithmetic
2408 type other than bool, and VQ is either volatile or empty, there exist
2409 candidate operator functions of the form
2410 VQ T& operator--(VQ T&);
2411 T operator--(VQ T&, int);
2412 6 For every pair T, VQ), where T is a cv-qualified or cv-unqualified
2413 complete object type, and VQ is either volatile or empty, there exist
2414 candidate operator functions of the form
2415 T*VQ& operator++(T*VQ&);
2416 T*VQ& operator--(T*VQ&);
2417 T* operator++(T*VQ&, int);
2418 T* operator--(T*VQ&, int); */
2420 case POSTDECREMENT_EXPR:
2421 case PREDECREMENT_EXPR:
2422 if (TREE_CODE (type1) == BOOLEAN_TYPE)
2423 return;
2424 /* FALLTHRU */
2425 case POSTINCREMENT_EXPR:
2426 case PREINCREMENT_EXPR:
2427 if (ARITHMETIC_TYPE_P (type1) || TYPE_PTROB_P (type1))
2429 type1 = build_reference_type (type1);
2430 break;
2432 return;
2434 /* 7 For every cv-qualified or cv-unqualified object type T, there
2435 exist candidate operator functions of the form
2437 T& operator*(T*);
2439 8 For every function type T, there exist candidate operator functions of
2440 the form
2441 T& operator*(T*); */
2443 case INDIRECT_REF:
2444 if (TYPE_PTR_P (type1)
2445 && (TYPE_PTROB_P (type1)
2446 || TREE_CODE (TREE_TYPE (type1)) == FUNCTION_TYPE))
2447 break;
2448 return;
2450 /* 9 For every type T, there exist candidate operator functions of the form
2451 T* operator+(T*);
2453 10For every promoted arithmetic type T, there exist candidate operator
2454 functions of the form
2455 T operator+(T);
2456 T operator-(T); */
2458 case UNARY_PLUS_EXPR: /* unary + */
2459 if (TYPE_PTR_P (type1))
2460 break;
2461 /* FALLTHRU */
2462 case NEGATE_EXPR:
2463 if (ARITHMETIC_TYPE_P (type1))
2464 break;
2465 return;
2467 /* 11For every promoted integral type T, there exist candidate operator
2468 functions of the form
2469 T operator~(T); */
2471 case BIT_NOT_EXPR:
2472 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1))
2473 break;
2474 return;
2476 /* 12For every quintuple C1, C2, T, CV1, CV2), where C2 is a class type, C1
2477 is the same type as C2 or is a derived class of C2, T is a complete
2478 object type or a function type, and CV1 and CV2 are cv-qualifier-seqs,
2479 there exist candidate operator functions of the form
2480 CV12 T& operator->*(CV1 C1*, CV2 T C2::*);
2481 where CV12 is the union of CV1 and CV2. */
2483 case MEMBER_REF:
2484 if (TYPE_PTR_P (type1) && TYPE_PTRMEM_P (type2))
2486 tree c1 = TREE_TYPE (type1);
2487 tree c2 = TYPE_PTRMEM_CLASS_TYPE (type2);
2489 if (MAYBE_CLASS_TYPE_P (c1) && DERIVED_FROM_P (c2, c1)
2490 && (TYPE_PTRMEMFUNC_P (type2)
2491 || is_complete (TYPE_PTRMEM_POINTED_TO_TYPE (type2))))
2492 break;
2494 return;
2496 /* 13For every pair of promoted arithmetic types L and R, there exist can-
2497 didate operator functions of the form
2498 LR operator*(L, R);
2499 LR operator/(L, R);
2500 LR operator+(L, R);
2501 LR operator-(L, R);
2502 bool operator<(L, R);
2503 bool operator>(L, R);
2504 bool operator<=(L, R);
2505 bool operator>=(L, R);
2506 bool operator==(L, R);
2507 bool operator!=(L, R);
2508 where LR is the result of the usual arithmetic conversions between
2509 types L and R.
2511 14For every pair of types T and I, where T is a cv-qualified or cv-
2512 unqualified complete object type and I is a promoted integral type,
2513 there exist candidate operator functions of the form
2514 T* operator+(T*, I);
2515 T& operator[](T*, I);
2516 T* operator-(T*, I);
2517 T* operator+(I, T*);
2518 T& operator[](I, T*);
2520 15For every T, where T is a pointer to complete object type, there exist
2521 candidate operator functions of the form112)
2522 ptrdiff_t operator-(T, T);
2524 16For every pointer or enumeration type T, there exist candidate operator
2525 functions of the form
2526 bool operator<(T, T);
2527 bool operator>(T, T);
2528 bool operator<=(T, T);
2529 bool operator>=(T, T);
2530 bool operator==(T, T);
2531 bool operator!=(T, T);
2533 17For every pointer to member type T, there exist candidate operator
2534 functions of the form
2535 bool operator==(T, T);
2536 bool operator!=(T, T); */
2538 case MINUS_EXPR:
2539 if (TYPE_PTROB_P (type1) && TYPE_PTROB_P (type2))
2540 break;
2541 if (TYPE_PTROB_P (type1)
2542 && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2544 type2 = ptrdiff_type_node;
2545 break;
2547 /* XXX Really fallthru? */
2548 /* FALLTHRU */
2549 case MULT_EXPR:
2550 case TRUNC_DIV_EXPR:
2551 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2552 break;
2553 return;
2555 case EQ_EXPR:
2556 case NE_EXPR:
2557 if ((TYPE_PTRMEMFUNC_P (type1) && TYPE_PTRMEMFUNC_P (type2))
2558 || (TYPE_PTRDATAMEM_P (type1) && TYPE_PTRDATAMEM_P (type2)))
2559 break;
2560 if (TYPE_PTRMEM_P (type1) && null_ptr_cst_p (args[1]))
2562 type2 = type1;
2563 break;
2565 if (TYPE_PTRMEM_P (type2) && null_ptr_cst_p (args[0]))
2567 type1 = type2;
2568 break;
2570 /* Fall through. */
2571 case LT_EXPR:
2572 case GT_EXPR:
2573 case LE_EXPR:
2574 case GE_EXPR:
2575 case MAX_EXPR:
2576 case MIN_EXPR:
2577 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2578 break;
2579 if (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
2580 break;
2581 if (TREE_CODE (type1) == ENUMERAL_TYPE
2582 && TREE_CODE (type2) == ENUMERAL_TYPE)
2583 break;
2584 if (TYPE_PTR_P (type1)
2585 && null_ptr_cst_p (args[1]))
2587 type2 = type1;
2588 break;
2590 if (null_ptr_cst_p (args[0])
2591 && TYPE_PTR_P (type2))
2593 type1 = type2;
2594 break;
2596 return;
2598 case PLUS_EXPR:
2599 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2600 break;
2601 /* FALLTHRU */
2602 case ARRAY_REF:
2603 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1) && TYPE_PTROB_P (type2))
2605 type1 = ptrdiff_type_node;
2606 break;
2608 if (TYPE_PTROB_P (type1) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2610 type2 = ptrdiff_type_node;
2611 break;
2613 return;
2615 /* 18For every pair of promoted integral types L and R, there exist candi-
2616 date operator functions of the form
2617 LR operator%(L, R);
2618 LR operator&(L, R);
2619 LR operator^(L, R);
2620 LR operator|(L, R);
2621 L operator<<(L, R);
2622 L operator>>(L, R);
2623 where LR is the result of the usual arithmetic conversions between
2624 types L and R. */
2626 case TRUNC_MOD_EXPR:
2627 case BIT_AND_EXPR:
2628 case BIT_IOR_EXPR:
2629 case BIT_XOR_EXPR:
2630 case LSHIFT_EXPR:
2631 case RSHIFT_EXPR:
2632 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2633 break;
2634 return;
2636 /* 19For every triple L, VQ, R), where L is an arithmetic or enumeration
2637 type, VQ is either volatile or empty, and R is a promoted arithmetic
2638 type, there exist candidate operator functions of the form
2639 VQ L& operator=(VQ L&, R);
2640 VQ L& operator*=(VQ L&, R);
2641 VQ L& operator/=(VQ L&, R);
2642 VQ L& operator+=(VQ L&, R);
2643 VQ L& operator-=(VQ L&, R);
2645 20For every pair T, VQ), where T is any type and VQ is either volatile
2646 or empty, there exist candidate operator functions of the form
2647 T*VQ& operator=(T*VQ&, T*);
2649 21For every pair T, VQ), where T is a pointer to member type and VQ is
2650 either volatile or empty, there exist candidate operator functions of
2651 the form
2652 VQ T& operator=(VQ T&, T);
2654 22For every triple T, VQ, I), where T is a cv-qualified or cv-
2655 unqualified complete object type, VQ is either volatile or empty, and
2656 I is a promoted integral type, there exist candidate operator func-
2657 tions of the form
2658 T*VQ& operator+=(T*VQ&, I);
2659 T*VQ& operator-=(T*VQ&, I);
2661 23For every triple L, VQ, R), where L is an integral or enumeration
2662 type, VQ is either volatile or empty, and R is a promoted integral
2663 type, there exist candidate operator functions of the form
2665 VQ L& operator%=(VQ L&, R);
2666 VQ L& operator<<=(VQ L&, R);
2667 VQ L& operator>>=(VQ L&, R);
2668 VQ L& operator&=(VQ L&, R);
2669 VQ L& operator^=(VQ L&, R);
2670 VQ L& operator|=(VQ L&, R); */
2672 case MODIFY_EXPR:
2673 switch (code2)
2675 case PLUS_EXPR:
2676 case MINUS_EXPR:
2677 if (TYPE_PTROB_P (type1) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2679 type2 = ptrdiff_type_node;
2680 break;
2682 /* FALLTHRU */
2683 case MULT_EXPR:
2684 case TRUNC_DIV_EXPR:
2685 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2686 break;
2687 return;
2689 case TRUNC_MOD_EXPR:
2690 case BIT_AND_EXPR:
2691 case BIT_IOR_EXPR:
2692 case BIT_XOR_EXPR:
2693 case LSHIFT_EXPR:
2694 case RSHIFT_EXPR:
2695 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2696 break;
2697 return;
2699 case NOP_EXPR:
2700 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2701 break;
2702 if ((TYPE_PTRMEMFUNC_P (type1) && TYPE_PTRMEMFUNC_P (type2))
2703 || (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
2704 || (TYPE_PTRDATAMEM_P (type1) && TYPE_PTRDATAMEM_P (type2))
2705 || ((TYPE_PTRMEMFUNC_P (type1)
2706 || TYPE_PTR_P (type1))
2707 && null_ptr_cst_p (args[1])))
2709 type2 = type1;
2710 break;
2712 return;
2714 default:
2715 gcc_unreachable ();
2717 type1 = build_reference_type (type1);
2718 break;
2720 case COND_EXPR:
2721 /* [over.built]
2723 For every pair of promoted arithmetic types L and R, there
2724 exist candidate operator functions of the form
2726 LR operator?(bool, L, R);
2728 where LR is the result of the usual arithmetic conversions
2729 between types L and R.
2731 For every type T, where T is a pointer or pointer-to-member
2732 type, there exist candidate operator functions of the form T
2733 operator?(bool, T, T); */
2735 if (promoted_arithmetic_type_p (type1)
2736 && promoted_arithmetic_type_p (type2))
2737 /* That's OK. */
2738 break;
2740 /* Otherwise, the types should be pointers. */
2741 if (!TYPE_PTR_OR_PTRMEM_P (type1) || !TYPE_PTR_OR_PTRMEM_P (type2))
2742 return;
2744 /* We don't check that the two types are the same; the logic
2745 below will actually create two candidates; one in which both
2746 parameter types are TYPE1, and one in which both parameter
2747 types are TYPE2. */
2748 break;
2750 case REALPART_EXPR:
2751 case IMAGPART_EXPR:
2752 if (ARITHMETIC_TYPE_P (type1))
2753 break;
2754 return;
2756 default:
2757 gcc_unreachable ();
2760 /* Make sure we don't create builtin candidates with dependent types. */
2761 bool u1 = uses_template_parms (type1);
2762 bool u2 = type2 ? uses_template_parms (type2) : false;
2763 if (u1 || u2)
2765 /* Try to recover if one of the types is non-dependent. But if
2766 there's only one type, there's nothing we can do. */
2767 if (!type2)
2768 return;
2769 /* And we lose if both are dependent. */
2770 if (u1 && u2)
2771 return;
2772 /* Or if they have different forms. */
2773 if (TREE_CODE (type1) != TREE_CODE (type2))
2774 return;
2776 if (u1 && !u2)
2777 type1 = type2;
2778 else if (u2 && !u1)
2779 type2 = type1;
2782 /* If we're dealing with two pointer types or two enumeral types,
2783 we need candidates for both of them. */
2784 if (type2 && !same_type_p (type1, type2)
2785 && TREE_CODE (type1) == TREE_CODE (type2)
2786 && (TREE_CODE (type1) == REFERENCE_TYPE
2787 || (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
2788 || (TYPE_PTRDATAMEM_P (type1) && TYPE_PTRDATAMEM_P (type2))
2789 || TYPE_PTRMEMFUNC_P (type1)
2790 || MAYBE_CLASS_TYPE_P (type1)
2791 || TREE_CODE (type1) == ENUMERAL_TYPE))
2793 if (TYPE_PTR_OR_PTRMEM_P (type1))
2795 tree cptype = composite_pointer_type (type1, type2,
2796 error_mark_node,
2797 error_mark_node,
2798 CPO_CONVERSION,
2799 tf_none);
2800 if (cptype != error_mark_node)
2802 build_builtin_candidate
2803 (candidates, fnname, cptype, cptype, args, argtypes,
2804 flags, complain);
2805 return;
2809 build_builtin_candidate
2810 (candidates, fnname, type1, type1, args, argtypes, flags, complain);
2811 build_builtin_candidate
2812 (candidates, fnname, type2, type2, args, argtypes, flags, complain);
2813 return;
2816 build_builtin_candidate
2817 (candidates, fnname, type1, type2, args, argtypes, flags, complain);
2820 tree
2821 type_decays_to (tree type)
2823 if (TREE_CODE (type) == ARRAY_TYPE)
2824 return build_pointer_type (TREE_TYPE (type));
2825 if (TREE_CODE (type) == FUNCTION_TYPE)
2826 return build_pointer_type (type);
2827 return type;
2830 /* There are three conditions of builtin candidates:
2832 1) bool-taking candidates. These are the same regardless of the input.
2833 2) pointer-pair taking candidates. These are generated for each type
2834 one of the input types converts to.
2835 3) arithmetic candidates. According to the standard, we should generate
2836 all of these, but I'm trying not to...
2838 Here we generate a superset of the possible candidates for this particular
2839 case. That is a subset of the full set the standard defines, plus some
2840 other cases which the standard disallows. add_builtin_candidate will
2841 filter out the invalid set. */
2843 static void
2844 add_builtin_candidates (struct z_candidate **candidates, enum tree_code code,
2845 enum tree_code code2, tree fnname, tree *args,
2846 int flags, tsubst_flags_t complain)
2848 int ref1, i;
2849 int enum_p = 0;
2850 tree type, argtypes[3], t;
2851 /* TYPES[i] is the set of possible builtin-operator parameter types
2852 we will consider for the Ith argument. */
2853 vec<tree, va_gc> *types[2];
2854 unsigned ix;
2856 for (i = 0; i < 3; ++i)
2858 if (args[i])
2859 argtypes[i] = unlowered_expr_type (args[i]);
2860 else
2861 argtypes[i] = NULL_TREE;
2864 switch (code)
2866 /* 4 For every pair T, VQ), where T is an arithmetic or enumeration type,
2867 and VQ is either volatile or empty, there exist candidate operator
2868 functions of the form
2869 VQ T& operator++(VQ T&); */
2871 case POSTINCREMENT_EXPR:
2872 case PREINCREMENT_EXPR:
2873 case POSTDECREMENT_EXPR:
2874 case PREDECREMENT_EXPR:
2875 case MODIFY_EXPR:
2876 ref1 = 1;
2877 break;
2879 /* 24There also exist candidate operator functions of the form
2880 bool operator!(bool);
2881 bool operator&&(bool, bool);
2882 bool operator||(bool, bool); */
2884 case TRUTH_NOT_EXPR:
2885 build_builtin_candidate
2886 (candidates, fnname, boolean_type_node,
2887 NULL_TREE, args, argtypes, flags, complain);
2888 return;
2890 case TRUTH_ORIF_EXPR:
2891 case TRUTH_ANDIF_EXPR:
2892 build_builtin_candidate
2893 (candidates, fnname, boolean_type_node,
2894 boolean_type_node, args, argtypes, flags, complain);
2895 return;
2897 case ADDR_EXPR:
2898 case COMPOUND_EXPR:
2899 case COMPONENT_REF:
2900 return;
2902 case COND_EXPR:
2903 case EQ_EXPR:
2904 case NE_EXPR:
2905 case LT_EXPR:
2906 case LE_EXPR:
2907 case GT_EXPR:
2908 case GE_EXPR:
2909 enum_p = 1;
2910 /* Fall through. */
2912 default:
2913 ref1 = 0;
2916 types[0] = make_tree_vector ();
2917 types[1] = make_tree_vector ();
2919 for (i = 0; i < 2; ++i)
2921 if (! args[i])
2923 else if (MAYBE_CLASS_TYPE_P (argtypes[i]))
2925 tree convs;
2927 if (i == 0 && code == MODIFY_EXPR && code2 == NOP_EXPR)
2928 return;
2930 convs = lookup_conversions (argtypes[i]);
2932 if (code == COND_EXPR)
2934 if (lvalue_p (args[i]))
2935 vec_safe_push (types[i], build_reference_type (argtypes[i]));
2937 vec_safe_push (types[i], TYPE_MAIN_VARIANT (argtypes[i]));
2940 else if (! convs)
2941 return;
2943 for (; convs; convs = TREE_CHAIN (convs))
2945 type = TREE_TYPE (convs);
2947 if (i == 0 && ref1
2948 && (TREE_CODE (type) != REFERENCE_TYPE
2949 || CP_TYPE_CONST_P (TREE_TYPE (type))))
2950 continue;
2952 if (code == COND_EXPR && TREE_CODE (type) == REFERENCE_TYPE)
2953 vec_safe_push (types[i], type);
2955 type = non_reference (type);
2956 if (i != 0 || ! ref1)
2958 type = cv_unqualified (type_decays_to (type));
2959 if (enum_p && TREE_CODE (type) == ENUMERAL_TYPE)
2960 vec_safe_push (types[i], type);
2961 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
2962 type = type_promotes_to (type);
2965 if (! vec_member (type, types[i]))
2966 vec_safe_push (types[i], type);
2969 else
2971 if (code == COND_EXPR && lvalue_p (args[i]))
2972 vec_safe_push (types[i], build_reference_type (argtypes[i]));
2973 type = non_reference (argtypes[i]);
2974 if (i != 0 || ! ref1)
2976 type = cv_unqualified (type_decays_to (type));
2977 if (enum_p && UNSCOPED_ENUM_P (type))
2978 vec_safe_push (types[i], type);
2979 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
2980 type = type_promotes_to (type);
2982 vec_safe_push (types[i], type);
2986 /* Run through the possible parameter types of both arguments,
2987 creating candidates with those parameter types. */
2988 FOR_EACH_VEC_ELT_REVERSE (*(types[0]), ix, t)
2990 unsigned jx;
2991 tree u;
2993 if (!types[1]->is_empty ())
2994 FOR_EACH_VEC_ELT_REVERSE (*(types[1]), jx, u)
2995 add_builtin_candidate
2996 (candidates, code, code2, fnname, t,
2997 u, args, argtypes, flags, complain);
2998 else
2999 add_builtin_candidate
3000 (candidates, code, code2, fnname, t,
3001 NULL_TREE, args, argtypes, flags, complain);
3004 release_tree_vector (types[0]);
3005 release_tree_vector (types[1]);
3009 /* If TMPL can be successfully instantiated as indicated by
3010 EXPLICIT_TARGS and ARGLIST, adds the instantiation to CANDIDATES.
3012 TMPL is the template. EXPLICIT_TARGS are any explicit template
3013 arguments. ARGLIST is the arguments provided at the call-site.
3014 This does not change ARGLIST. The RETURN_TYPE is the desired type
3015 for conversion operators. If OBJ is NULL_TREE, FLAGS and CTYPE are
3016 as for add_function_candidate. If an OBJ is supplied, FLAGS and
3017 CTYPE are ignored, and OBJ is as for add_conv_candidate. */
3019 static struct z_candidate*
3020 add_template_candidate_real (struct z_candidate **candidates, tree tmpl,
3021 tree ctype, tree explicit_targs, tree first_arg,
3022 const vec<tree, va_gc> *arglist, tree return_type,
3023 tree access_path, tree conversion_path,
3024 int flags, tree obj, unification_kind_t strict,
3025 tsubst_flags_t complain)
3027 int ntparms = DECL_NTPARMS (tmpl);
3028 tree targs = make_tree_vec (ntparms);
3029 unsigned int len = vec_safe_length (arglist);
3030 unsigned int nargs = (first_arg == NULL_TREE ? 0 : 1) + len;
3031 unsigned int skip_without_in_chrg = 0;
3032 tree first_arg_without_in_chrg = first_arg;
3033 tree *args_without_in_chrg;
3034 unsigned int nargs_without_in_chrg;
3035 unsigned int ia, ix;
3036 tree arg;
3037 struct z_candidate *cand;
3038 tree fn;
3039 struct rejection_reason *reason = NULL;
3040 int errs;
3042 /* We don't do deduction on the in-charge parameter, the VTT
3043 parameter or 'this'. */
3044 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (tmpl))
3046 if (first_arg_without_in_chrg != NULL_TREE)
3047 first_arg_without_in_chrg = NULL_TREE;
3048 else if (return_type && strict == DEDUCE_CALL)
3049 /* We're deducing for a call to the result of a template conversion
3050 function, so the args don't contain 'this'; leave them alone. */;
3051 else
3052 ++skip_without_in_chrg;
3055 if ((DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (tmpl)
3056 || DECL_BASE_CONSTRUCTOR_P (tmpl))
3057 && CLASSTYPE_VBASECLASSES (DECL_CONTEXT (tmpl)))
3059 if (first_arg_without_in_chrg != NULL_TREE)
3060 first_arg_without_in_chrg = NULL_TREE;
3061 else
3062 ++skip_without_in_chrg;
3065 if (len < skip_without_in_chrg)
3066 return NULL;
3068 if (DECL_CONSTRUCTOR_P (tmpl) && nargs == 2
3069 && same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (first_arg),
3070 TREE_TYPE ((*arglist)[0])))
3072 /* 12.8/6 says, "A declaration of a constructor for a class X is
3073 ill-formed if its first parameter is of type (optionally cv-qualified)
3074 X and either there are no other parameters or else all other
3075 parameters have default arguments. A member function template is never
3076 instantiated to produce such a constructor signature."
3078 So if we're trying to copy an object of the containing class, don't
3079 consider a template constructor that has a first parameter type that
3080 is just a template parameter, as we would deduce a signature that we
3081 would then reject in the code below. */
3082 if (tree firstparm = FUNCTION_FIRST_USER_PARMTYPE (tmpl))
3084 firstparm = TREE_VALUE (firstparm);
3085 if (PACK_EXPANSION_P (firstparm))
3086 firstparm = PACK_EXPANSION_PATTERN (firstparm);
3087 if (TREE_CODE (firstparm) == TEMPLATE_TYPE_PARM)
3089 gcc_assert (!explicit_targs);
3090 reason = invalid_copy_with_fn_template_rejection ();
3091 goto fail;
3096 nargs_without_in_chrg = ((first_arg_without_in_chrg != NULL_TREE ? 1 : 0)
3097 + (len - skip_without_in_chrg));
3098 args_without_in_chrg = XALLOCAVEC (tree, nargs_without_in_chrg);
3099 ia = 0;
3100 if (first_arg_without_in_chrg != NULL_TREE)
3102 args_without_in_chrg[ia] = first_arg_without_in_chrg;
3103 ++ia;
3105 for (ix = skip_without_in_chrg;
3106 vec_safe_iterate (arglist, ix, &arg);
3107 ++ix)
3109 args_without_in_chrg[ia] = arg;
3110 ++ia;
3112 gcc_assert (ia == nargs_without_in_chrg);
3114 errs = errorcount+sorrycount;
3115 fn = fn_type_unification (tmpl, explicit_targs, targs,
3116 args_without_in_chrg,
3117 nargs_without_in_chrg,
3118 return_type, strict, flags, false,
3119 complain & tf_decltype);
3121 if (fn == error_mark_node)
3123 /* Don't repeat unification later if it already resulted in errors. */
3124 if (errorcount+sorrycount == errs)
3125 reason = template_unification_rejection (tmpl, explicit_targs,
3126 targs, args_without_in_chrg,
3127 nargs_without_in_chrg,
3128 return_type, strict, flags);
3129 else
3130 reason = template_unification_error_rejection ();
3131 goto fail;
3134 if (DECL_CONSTRUCTOR_P (fn) && nargs == 2)
3136 tree arg_types = FUNCTION_FIRST_USER_PARMTYPE (fn);
3137 if (arg_types && same_type_p (TYPE_MAIN_VARIANT (TREE_VALUE (arg_types)),
3138 ctype))
3140 /* We're trying to produce a constructor with a prohibited signature,
3141 as discussed above; handle here any cases we didn't catch then,
3142 such as X(X<T>). */
3143 reason = invalid_copy_with_fn_template_rejection ();
3144 goto fail;
3148 if (obj != NULL_TREE)
3149 /* Aha, this is a conversion function. */
3150 cand = add_conv_candidate (candidates, fn, obj, arglist,
3151 access_path, conversion_path, complain);
3152 else
3153 cand = add_function_candidate (candidates, fn, ctype,
3154 first_arg, arglist, access_path,
3155 conversion_path, flags, complain);
3156 if (DECL_TI_TEMPLATE (fn) != tmpl)
3157 /* This situation can occur if a member template of a template
3158 class is specialized. Then, instantiate_template might return
3159 an instantiation of the specialization, in which case the
3160 DECL_TI_TEMPLATE field will point at the original
3161 specialization. For example:
3163 template <class T> struct S { template <class U> void f(U);
3164 template <> void f(int) {}; };
3165 S<double> sd;
3166 sd.f(3);
3168 Here, TMPL will be template <class U> S<double>::f(U).
3169 And, instantiate template will give us the specialization
3170 template <> S<double>::f(int). But, the DECL_TI_TEMPLATE field
3171 for this will point at template <class T> template <> S<T>::f(int),
3172 so that we can find the definition. For the purposes of
3173 overload resolution, however, we want the original TMPL. */
3174 cand->template_decl = build_template_info (tmpl, targs);
3175 else
3176 cand->template_decl = DECL_TEMPLATE_INFO (fn);
3177 cand->explicit_targs = explicit_targs;
3179 return cand;
3180 fail:
3181 return add_candidate (candidates, tmpl, first_arg, arglist, nargs, NULL,
3182 access_path, conversion_path, 0, reason, flags);
3186 static struct z_candidate *
3187 add_template_candidate (struct z_candidate **candidates, tree tmpl, tree ctype,
3188 tree explicit_targs, tree first_arg,
3189 const vec<tree, va_gc> *arglist, tree return_type,
3190 tree access_path, tree conversion_path, int flags,
3191 unification_kind_t strict, tsubst_flags_t complain)
3193 return
3194 add_template_candidate_real (candidates, tmpl, ctype,
3195 explicit_targs, first_arg, arglist,
3196 return_type, access_path, conversion_path,
3197 flags, NULL_TREE, strict, complain);
3200 /* Create an overload candidate for the conversion function template TMPL,
3201 returning RETURN_TYPE, which will be invoked for expression OBJ to produce a
3202 pointer-to-function which will in turn be called with the argument list
3203 ARGLIST, and add it to CANDIDATES. This does not change ARGLIST. FLAGS is
3204 passed on to implicit_conversion. */
3206 static struct z_candidate *
3207 add_template_conv_candidate (struct z_candidate **candidates, tree tmpl,
3208 tree obj,
3209 const vec<tree, va_gc> *arglist,
3210 tree return_type, tree access_path,
3211 tree conversion_path, tsubst_flags_t complain)
3213 /* Making this work broke PR 71117, so until the committee resolves core
3214 issue 2189, let's disable this candidate if there are any viable call
3215 operators. */
3216 if (any_strictly_viable (*candidates))
3217 return NULL;
3219 return
3220 add_template_candidate_real (candidates, tmpl, NULL_TREE, NULL_TREE,
3221 NULL_TREE, arglist, return_type, access_path,
3222 conversion_path, 0, obj, DEDUCE_CALL,
3223 complain);
3226 /* The CANDS are the set of candidates that were considered for
3227 overload resolution. Return the set of viable candidates, or CANDS
3228 if none are viable. If any of the candidates were viable, set
3229 *ANY_VIABLE_P to true. STRICT_P is true if a candidate should be
3230 considered viable only if it is strictly viable. */
3232 static struct z_candidate*
3233 splice_viable (struct z_candidate *cands,
3234 bool strict_p,
3235 bool *any_viable_p)
3237 struct z_candidate *viable;
3238 struct z_candidate **last_viable;
3239 struct z_candidate **cand;
3240 bool found_strictly_viable = false;
3242 /* Be strict inside templates, since build_over_call won't actually
3243 do the conversions to get pedwarns. */
3244 if (processing_template_decl)
3245 strict_p = true;
3247 viable = NULL;
3248 last_viable = &viable;
3249 *any_viable_p = false;
3251 cand = &cands;
3252 while (*cand)
3254 struct z_candidate *c = *cand;
3255 if (!strict_p
3256 && (c->viable == 1 || TREE_CODE (c->fn) == TEMPLATE_DECL))
3258 /* Be strict in the presence of a viable candidate. Also if
3259 there are template candidates, so that we get deduction errors
3260 for them instead of silently preferring a bad conversion. */
3261 strict_p = true;
3262 if (viable && !found_strictly_viable)
3264 /* Put any spliced near matches back onto the main list so
3265 that we see them if there is no strict match. */
3266 *any_viable_p = false;
3267 *last_viable = cands;
3268 cands = viable;
3269 viable = NULL;
3270 last_viable = &viable;
3274 if (strict_p ? c->viable == 1 : c->viable)
3276 *last_viable = c;
3277 *cand = c->next;
3278 c->next = NULL;
3279 last_viable = &c->next;
3280 *any_viable_p = true;
3281 if (c->viable == 1)
3282 found_strictly_viable = true;
3284 else
3285 cand = &c->next;
3288 return viable ? viable : cands;
3291 static bool
3292 any_strictly_viable (struct z_candidate *cands)
3294 for (; cands; cands = cands->next)
3295 if (cands->viable == 1)
3296 return true;
3297 return false;
3300 /* OBJ is being used in an expression like "OBJ.f (...)". In other
3301 words, it is about to become the "this" pointer for a member
3302 function call. Take the address of the object. */
3304 static tree
3305 build_this (tree obj)
3307 /* In a template, we are only concerned about the type of the
3308 expression, so we can take a shortcut. */
3309 if (processing_template_decl)
3310 return build_address (obj);
3312 return cp_build_addr_expr (obj, tf_warning_or_error);
3315 /* Returns true iff functions are equivalent. Equivalent functions are
3316 not '==' only if one is a function-local extern function or if
3317 both are extern "C". */
3319 static inline int
3320 equal_functions (tree fn1, tree fn2)
3322 if (TREE_CODE (fn1) != TREE_CODE (fn2))
3323 return 0;
3324 if (TREE_CODE (fn1) == TEMPLATE_DECL)
3325 return fn1 == fn2;
3326 if (DECL_LOCAL_FUNCTION_P (fn1) || DECL_LOCAL_FUNCTION_P (fn2)
3327 || DECL_EXTERN_C_FUNCTION_P (fn1))
3328 return decls_match (fn1, fn2);
3329 return fn1 == fn2;
3332 /* Print information about a candidate being rejected due to INFO. */
3334 static void
3335 print_conversion_rejection (location_t loc, struct conversion_info *info)
3337 tree from = info->from;
3338 if (!TYPE_P (from))
3339 from = lvalue_type (from);
3340 if (info->n_arg == -1)
3342 /* Conversion of implicit `this' argument failed. */
3343 if (!TYPE_P (info->from))
3344 /* A bad conversion for 'this' must be discarding cv-quals. */
3345 inform (loc, " passing %qT as %<this%> "
3346 "argument discards qualifiers",
3347 from);
3348 else
3349 inform (loc, " no known conversion for implicit "
3350 "%<this%> parameter from %qT to %qT",
3351 from, info->to_type);
3353 else if (!TYPE_P (info->from))
3355 if (info->n_arg >= 0)
3356 inform (loc, " conversion of argument %d would be ill-formed:",
3357 info->n_arg + 1);
3358 perform_implicit_conversion (info->to_type, info->from,
3359 tf_warning_or_error);
3361 else if (info->n_arg == -2)
3362 /* Conversion of conversion function return value failed. */
3363 inform (loc, " no known conversion from %qT to %qT",
3364 from, info->to_type);
3365 else
3366 inform (loc, " no known conversion for argument %d from %qT to %qT",
3367 info->n_arg + 1, from, info->to_type);
3370 /* Print information about a candidate with WANT parameters and we found
3371 HAVE. */
3373 static void
3374 print_arity_information (location_t loc, unsigned int have, unsigned int want)
3376 inform_n (loc, want,
3377 " candidate expects %d argument, %d provided",
3378 " candidate expects %d arguments, %d provided",
3379 want, have);
3382 /* Print information about one overload candidate CANDIDATE. MSGSTR
3383 is the text to print before the candidate itself.
3385 NOTE: Unlike most diagnostic functions in GCC, MSGSTR is expected
3386 to have been run through gettext by the caller. This wart makes
3387 life simpler in print_z_candidates and for the translators. */
3389 static void
3390 print_z_candidate (location_t loc, const char *msgstr,
3391 struct z_candidate *candidate)
3393 const char *msg = (msgstr == NULL
3394 ? ""
3395 : ACONCAT ((msgstr, " ", NULL)));
3396 location_t cloc = location_of (candidate->fn);
3398 if (identifier_p (candidate->fn))
3400 cloc = loc;
3401 if (candidate->num_convs == 3)
3402 inform (cloc, "%s%D(%T, %T, %T) <built-in>", msg, candidate->fn,
3403 candidate->convs[0]->type,
3404 candidate->convs[1]->type,
3405 candidate->convs[2]->type);
3406 else if (candidate->num_convs == 2)
3407 inform (cloc, "%s%D(%T, %T) <built-in>", msg, candidate->fn,
3408 candidate->convs[0]->type,
3409 candidate->convs[1]->type);
3410 else
3411 inform (cloc, "%s%D(%T) <built-in>", msg, candidate->fn,
3412 candidate->convs[0]->type);
3414 else if (TYPE_P (candidate->fn))
3415 inform (cloc, "%s%T <conversion>", msg, candidate->fn);
3416 else if (candidate->viable == -1)
3417 inform (cloc, "%s%#D <near match>", msg, candidate->fn);
3418 else if (DECL_DELETED_FN (candidate->fn))
3419 inform (cloc, "%s%#D <deleted>", msg, candidate->fn);
3420 else
3421 inform (cloc, "%s%#D", msg, candidate->fn);
3422 /* Give the user some information about why this candidate failed. */
3423 if (candidate->reason != NULL)
3425 struct rejection_reason *r = candidate->reason;
3427 switch (r->code)
3429 case rr_arity:
3430 print_arity_information (cloc, r->u.arity.actual,
3431 r->u.arity.expected);
3432 break;
3433 case rr_arg_conversion:
3434 print_conversion_rejection (cloc, &r->u.conversion);
3435 break;
3436 case rr_bad_arg_conversion:
3437 print_conversion_rejection (cloc, &r->u.bad_conversion);
3438 break;
3439 case rr_explicit_conversion:
3440 inform (cloc, " return type %qT of explicit conversion function "
3441 "cannot be converted to %qT with a qualification "
3442 "conversion", r->u.conversion.from,
3443 r->u.conversion.to_type);
3444 break;
3445 case rr_template_conversion:
3446 inform (cloc, " conversion from return type %qT of template "
3447 "conversion function specialization to %qT is not an "
3448 "exact match", r->u.conversion.from,
3449 r->u.conversion.to_type);
3450 break;
3451 case rr_template_unification:
3452 /* We use template_unification_error_rejection if unification caused
3453 actual non-SFINAE errors, in which case we don't need to repeat
3454 them here. */
3455 if (r->u.template_unification.tmpl == NULL_TREE)
3457 inform (cloc, " substitution of deduced template arguments "
3458 "resulted in errors seen above");
3459 break;
3461 /* Re-run template unification with diagnostics. */
3462 inform (cloc, " template argument deduction/substitution failed:");
3463 fn_type_unification (r->u.template_unification.tmpl,
3464 r->u.template_unification.explicit_targs,
3465 (make_tree_vec
3466 (r->u.template_unification.num_targs)),
3467 r->u.template_unification.args,
3468 r->u.template_unification.nargs,
3469 r->u.template_unification.return_type,
3470 r->u.template_unification.strict,
3471 r->u.template_unification.flags,
3472 true, false);
3473 break;
3474 case rr_invalid_copy:
3475 inform (cloc,
3476 " a constructor taking a single argument of its own "
3477 "class type is invalid");
3478 break;
3479 case rr_constraint_failure:
3481 tree tmpl = r->u.template_instantiation.tmpl;
3482 tree args = r->u.template_instantiation.targs;
3483 diagnose_constraints (cloc, tmpl, args);
3485 break;
3486 case rr_none:
3487 default:
3488 /* This candidate didn't have any issues or we failed to
3489 handle a particular code. Either way... */
3490 gcc_unreachable ();
3495 static void
3496 print_z_candidates (location_t loc, struct z_candidate *candidates)
3498 struct z_candidate *cand1;
3499 struct z_candidate **cand2;
3501 if (!candidates)
3502 return;
3504 /* Remove non-viable deleted candidates. */
3505 cand1 = candidates;
3506 for (cand2 = &cand1; *cand2; )
3508 if (TREE_CODE ((*cand2)->fn) == FUNCTION_DECL
3509 && !(*cand2)->viable
3510 && DECL_DELETED_FN ((*cand2)->fn))
3511 *cand2 = (*cand2)->next;
3512 else
3513 cand2 = &(*cand2)->next;
3515 /* ...if there are any non-deleted ones. */
3516 if (cand1)
3517 candidates = cand1;
3519 /* There may be duplicates in the set of candidates. We put off
3520 checking this condition as long as possible, since we have no way
3521 to eliminate duplicates from a set of functions in less than n^2
3522 time. Now we are about to emit an error message, so it is more
3523 permissible to go slowly. */
3524 for (cand1 = candidates; cand1; cand1 = cand1->next)
3526 tree fn = cand1->fn;
3527 /* Skip builtin candidates and conversion functions. */
3528 if (!DECL_P (fn))
3529 continue;
3530 cand2 = &cand1->next;
3531 while (*cand2)
3533 if (DECL_P ((*cand2)->fn)
3534 && equal_functions (fn, (*cand2)->fn))
3535 *cand2 = (*cand2)->next;
3536 else
3537 cand2 = &(*cand2)->next;
3541 for (; candidates; candidates = candidates->next)
3542 print_z_candidate (loc, "candidate:", candidates);
3545 /* USER_SEQ is a user-defined conversion sequence, beginning with a
3546 USER_CONV. STD_SEQ is the standard conversion sequence applied to
3547 the result of the conversion function to convert it to the final
3548 desired type. Merge the two sequences into a single sequence,
3549 and return the merged sequence. */
3551 static conversion *
3552 merge_conversion_sequences (conversion *user_seq, conversion *std_seq)
3554 conversion **t;
3555 bool bad = user_seq->bad_p;
3557 gcc_assert (user_seq->kind == ck_user);
3559 /* Find the end of the second conversion sequence. */
3560 for (t = &std_seq; (*t)->kind != ck_identity; t = &((*t)->u.next))
3562 /* The entire sequence is a user-conversion sequence. */
3563 (*t)->user_conv_p = true;
3564 if (bad)
3565 (*t)->bad_p = true;
3568 /* Replace the identity conversion with the user conversion
3569 sequence. */
3570 *t = user_seq;
3572 return std_seq;
3575 /* Handle overload resolution for initializing an object of class type from
3576 an initializer list. First we look for a suitable constructor that
3577 takes a std::initializer_list; if we don't find one, we then look for a
3578 non-list constructor.
3580 Parameters are as for add_candidates, except that the arguments are in
3581 the form of a CONSTRUCTOR (the initializer list) rather than a vector, and
3582 the RETURN_TYPE parameter is replaced by TOTYPE, the desired type. */
3584 static void
3585 add_list_candidates (tree fns, tree first_arg,
3586 const vec<tree, va_gc> *args, tree totype,
3587 tree explicit_targs, bool template_only,
3588 tree conversion_path, tree access_path,
3589 int flags,
3590 struct z_candidate **candidates,
3591 tsubst_flags_t complain)
3593 gcc_assert (*candidates == NULL);
3595 /* We're looking for a ctor for list-initialization. */
3596 flags |= LOOKUP_LIST_INIT_CTOR;
3597 /* And we don't allow narrowing conversions. We also use this flag to
3598 avoid the copy constructor call for copy-list-initialization. */
3599 flags |= LOOKUP_NO_NARROWING;
3601 unsigned nart = num_artificial_parms_for (get_first_fn (fns)) - 1;
3602 tree init_list = (*args)[nart];
3604 /* Always use the default constructor if the list is empty (DR 990). */
3605 if (CONSTRUCTOR_NELTS (init_list) == 0
3606 && TYPE_HAS_DEFAULT_CONSTRUCTOR (totype))
3608 /* If the class has a list ctor, try passing the list as a single
3609 argument first, but only consider list ctors. */
3610 else if (TYPE_HAS_LIST_CTOR (totype))
3612 flags |= LOOKUP_LIST_ONLY;
3613 add_candidates (fns, first_arg, args, NULL_TREE,
3614 explicit_targs, template_only, conversion_path,
3615 access_path, flags, candidates, complain);
3616 if (any_strictly_viable (*candidates))
3617 return;
3620 /* Expand the CONSTRUCTOR into a new argument vec. */
3621 vec<tree, va_gc> *new_args;
3622 vec_alloc (new_args, nart + CONSTRUCTOR_NELTS (init_list));
3623 for (unsigned i = 0; i < nart; ++i)
3624 new_args->quick_push ((*args)[i]);
3625 for (unsigned i = 0; i < CONSTRUCTOR_NELTS (init_list); ++i)
3626 new_args->quick_push (CONSTRUCTOR_ELT (init_list, i)->value);
3628 /* We aren't looking for list-ctors anymore. */
3629 flags &= ~LOOKUP_LIST_ONLY;
3630 /* We allow more user-defined conversions within an init-list. */
3631 flags &= ~LOOKUP_NO_CONVERSION;
3633 add_candidates (fns, first_arg, new_args, NULL_TREE,
3634 explicit_targs, template_only, conversion_path,
3635 access_path, flags, candidates, complain);
3638 /* Returns the best overload candidate to perform the requested
3639 conversion. This function is used for three the overloading situations
3640 described in [over.match.copy], [over.match.conv], and [over.match.ref].
3641 If TOTYPE is a REFERENCE_TYPE, we're trying to find a direct binding as
3642 per [dcl.init.ref], so we ignore temporary bindings. */
3644 static struct z_candidate *
3645 build_user_type_conversion_1 (tree totype, tree expr, int flags,
3646 tsubst_flags_t complain)
3648 struct z_candidate *candidates, *cand;
3649 tree fromtype;
3650 tree ctors = NULL_TREE;
3651 tree conv_fns = NULL_TREE;
3652 conversion *conv = NULL;
3653 tree first_arg = NULL_TREE;
3654 vec<tree, va_gc> *args = NULL;
3655 bool any_viable_p;
3656 int convflags;
3658 if (!expr)
3659 return NULL;
3661 fromtype = TREE_TYPE (expr);
3663 /* We represent conversion within a hierarchy using RVALUE_CONV and
3664 BASE_CONV, as specified by [over.best.ics]; these become plain
3665 constructor calls, as specified in [dcl.init]. */
3666 gcc_assert (!MAYBE_CLASS_TYPE_P (fromtype) || !MAYBE_CLASS_TYPE_P (totype)
3667 || !DERIVED_FROM_P (totype, fromtype));
3669 if (MAYBE_CLASS_TYPE_P (totype))
3670 /* Use lookup_fnfields_slot instead of lookup_fnfields to avoid
3671 creating a garbage BASELINK; constructors can't be inherited. */
3672 ctors = lookup_fnfields_slot (totype, complete_ctor_identifier);
3674 if (MAYBE_CLASS_TYPE_P (fromtype))
3676 tree to_nonref = non_reference (totype);
3677 if (same_type_ignoring_top_level_qualifiers_p (to_nonref, fromtype) ||
3678 (CLASS_TYPE_P (to_nonref) && CLASS_TYPE_P (fromtype)
3679 && DERIVED_FROM_P (to_nonref, fromtype)))
3681 /* [class.conv.fct] A conversion function is never used to
3682 convert a (possibly cv-qualified) object to the (possibly
3683 cv-qualified) same object type (or a reference to it), to a
3684 (possibly cv-qualified) base class of that type (or a
3685 reference to it)... */
3687 else
3688 conv_fns = lookup_conversions (fromtype);
3691 candidates = 0;
3692 flags |= LOOKUP_NO_CONVERSION;
3693 if (BRACE_ENCLOSED_INITIALIZER_P (expr))
3694 flags |= LOOKUP_NO_NARROWING;
3696 /* It's OK to bind a temporary for converting constructor arguments, but
3697 not in converting the return value of a conversion operator. */
3698 convflags = ((flags & LOOKUP_NO_TEMP_BIND) | LOOKUP_NO_CONVERSION
3699 | (flags & LOOKUP_NO_NARROWING));
3700 flags &= ~LOOKUP_NO_TEMP_BIND;
3702 if (ctors)
3704 int ctorflags = flags;
3706 first_arg = build_dummy_object (totype);
3708 /* We should never try to call the abstract or base constructor
3709 from here. */
3710 gcc_assert (!DECL_HAS_IN_CHARGE_PARM_P (OVL_CURRENT (ctors))
3711 && !DECL_HAS_VTT_PARM_P (OVL_CURRENT (ctors)));
3713 args = make_tree_vector_single (expr);
3714 if (BRACE_ENCLOSED_INITIALIZER_P (expr))
3716 /* List-initialization. */
3717 add_list_candidates (ctors, first_arg, args, totype, NULL_TREE,
3718 false, TYPE_BINFO (totype), TYPE_BINFO (totype),
3719 ctorflags, &candidates, complain);
3721 else
3723 add_candidates (ctors, first_arg, args, NULL_TREE, NULL_TREE, false,
3724 TYPE_BINFO (totype), TYPE_BINFO (totype),
3725 ctorflags, &candidates, complain);
3728 for (cand = candidates; cand; cand = cand->next)
3730 cand->second_conv = build_identity_conv (totype, NULL_TREE);
3732 /* If totype isn't a reference, and LOOKUP_NO_TEMP_BIND isn't
3733 set, then this is copy-initialization. In that case, "The
3734 result of the call is then used to direct-initialize the
3735 object that is the destination of the copy-initialization."
3736 [dcl.init]
3738 We represent this in the conversion sequence with an
3739 rvalue conversion, which means a constructor call. */
3740 if (TREE_CODE (totype) != REFERENCE_TYPE
3741 && !(convflags & LOOKUP_NO_TEMP_BIND))
3742 cand->second_conv
3743 = build_conv (ck_rvalue, totype, cand->second_conv);
3747 if (conv_fns)
3748 first_arg = expr;
3750 for (; conv_fns; conv_fns = TREE_CHAIN (conv_fns))
3752 tree conversion_path = TREE_PURPOSE (conv_fns);
3753 struct z_candidate *old_candidates;
3755 /* If we are called to convert to a reference type, we are trying to
3756 find a direct binding, so don't even consider temporaries. If
3757 we don't find a direct binding, the caller will try again to
3758 look for a temporary binding. */
3759 if (TREE_CODE (totype) == REFERENCE_TYPE)
3760 convflags |= LOOKUP_NO_TEMP_BIND;
3762 old_candidates = candidates;
3763 add_candidates (TREE_VALUE (conv_fns), first_arg, NULL, totype,
3764 NULL_TREE, false,
3765 conversion_path, TYPE_BINFO (fromtype),
3766 flags, &candidates, complain);
3768 for (cand = candidates; cand != old_candidates; cand = cand->next)
3770 tree rettype = TREE_TYPE (TREE_TYPE (cand->fn));
3771 conversion *ics
3772 = implicit_conversion (totype,
3773 rettype,
3775 /*c_cast_p=*/false, convflags,
3776 complain);
3778 /* If LOOKUP_NO_TEMP_BIND isn't set, then this is
3779 copy-initialization. In that case, "The result of the
3780 call is then used to direct-initialize the object that is
3781 the destination of the copy-initialization." [dcl.init]
3783 We represent this in the conversion sequence with an
3784 rvalue conversion, which means a constructor call. But
3785 don't add a second rvalue conversion if there's already
3786 one there. Which there really shouldn't be, but it's
3787 harmless since we'd add it here anyway. */
3788 if (ics && MAYBE_CLASS_TYPE_P (totype) && ics->kind != ck_rvalue
3789 && !(convflags & LOOKUP_NO_TEMP_BIND))
3790 ics = build_conv (ck_rvalue, totype, ics);
3792 cand->second_conv = ics;
3794 if (!ics)
3796 cand->viable = 0;
3797 cand->reason = arg_conversion_rejection (NULL_TREE, -2,
3798 rettype, totype);
3800 else if (DECL_NONCONVERTING_P (cand->fn)
3801 && ics->rank > cr_exact)
3803 /* 13.3.1.5: For direct-initialization, those explicit
3804 conversion functions that are not hidden within S and
3805 yield type T or a type that can be converted to type T
3806 with a qualification conversion (4.4) are also candidate
3807 functions. */
3808 /* 13.3.1.6 doesn't have a parallel restriction, but it should;
3809 I've raised this issue with the committee. --jason 9/2011 */
3810 cand->viable = -1;
3811 cand->reason = explicit_conversion_rejection (rettype, totype);
3813 else if (cand->viable == 1 && ics->bad_p)
3815 cand->viable = -1;
3816 cand->reason
3817 = bad_arg_conversion_rejection (NULL_TREE, -2,
3818 rettype, totype);
3820 else if (primary_template_instantiation_p (cand->fn)
3821 && ics->rank > cr_exact)
3823 /* 13.3.3.1.2: If the user-defined conversion is specified by
3824 a specialization of a conversion function template, the
3825 second standard conversion sequence shall have exact match
3826 rank. */
3827 cand->viable = -1;
3828 cand->reason = template_conversion_rejection (rettype, totype);
3833 candidates = splice_viable (candidates, false, &any_viable_p);
3834 if (!any_viable_p)
3836 if (args)
3837 release_tree_vector (args);
3838 return NULL;
3841 cand = tourney (candidates, complain);
3842 if (cand == 0)
3844 if (complain & tf_error)
3846 error ("conversion from %qT to %qT is ambiguous",
3847 fromtype, totype);
3848 print_z_candidates (location_of (expr), candidates);
3851 cand = candidates; /* any one will do */
3852 cand->second_conv = build_ambiguous_conv (totype, expr);
3853 cand->second_conv->user_conv_p = true;
3854 if (!any_strictly_viable (candidates))
3855 cand->second_conv->bad_p = true;
3856 /* If there are viable candidates, don't set ICS_BAD_FLAG; an
3857 ambiguous conversion is no worse than another user-defined
3858 conversion. */
3860 return cand;
3863 tree convtype;
3864 if (!DECL_CONSTRUCTOR_P (cand->fn))
3865 convtype = non_reference (TREE_TYPE (TREE_TYPE (cand->fn)));
3866 else if (cand->second_conv->kind == ck_rvalue)
3867 /* DR 5: [in the first step of copy-initialization]...if the function
3868 is a constructor, the call initializes a temporary of the
3869 cv-unqualified version of the destination type. */
3870 convtype = cv_unqualified (totype);
3871 else
3872 convtype = totype;
3873 /* Build the user conversion sequence. */
3874 conv = build_conv
3875 (ck_user,
3876 convtype,
3877 build_identity_conv (TREE_TYPE (expr), expr));
3878 conv->cand = cand;
3879 if (cand->viable == -1)
3880 conv->bad_p = true;
3882 /* Remember that this was a list-initialization. */
3883 if (flags & LOOKUP_NO_NARROWING)
3884 conv->check_narrowing = true;
3886 /* Combine it with the second conversion sequence. */
3887 cand->second_conv = merge_conversion_sequences (conv,
3888 cand->second_conv);
3890 return cand;
3893 /* Wrapper for above. */
3895 tree
3896 build_user_type_conversion (tree totype, tree expr, int flags,
3897 tsubst_flags_t complain)
3899 struct z_candidate *cand;
3900 tree ret;
3902 bool subtime = timevar_cond_start (TV_OVERLOAD);
3903 cand = build_user_type_conversion_1 (totype, expr, flags, complain);
3905 if (cand)
3907 if (cand->second_conv->kind == ck_ambig)
3908 ret = error_mark_node;
3909 else
3911 expr = convert_like (cand->second_conv, expr, complain);
3912 ret = convert_from_reference (expr);
3915 else
3916 ret = NULL_TREE;
3918 timevar_cond_stop (TV_OVERLOAD, subtime);
3919 return ret;
3922 /* Subroutine of convert_nontype_argument.
3924 EXPR is an argument for a template non-type parameter of integral or
3925 enumeration type. Do any necessary conversions (that are permitted for
3926 non-type arguments) to convert it to the parameter type.
3928 If conversion is successful, returns the converted expression;
3929 otherwise, returns error_mark_node. */
3931 tree
3932 build_integral_nontype_arg_conv (tree type, tree expr, tsubst_flags_t complain)
3934 conversion *conv;
3935 void *p;
3936 tree t;
3937 location_t loc = EXPR_LOC_OR_LOC (expr, input_location);
3939 if (error_operand_p (expr))
3940 return error_mark_node;
3942 gcc_assert (INTEGRAL_OR_ENUMERATION_TYPE_P (type));
3944 /* Get the high-water mark for the CONVERSION_OBSTACK. */
3945 p = conversion_obstack_alloc (0);
3947 conv = implicit_conversion (type, TREE_TYPE (expr), expr,
3948 /*c_cast_p=*/false,
3949 LOOKUP_IMPLICIT, complain);
3951 /* for a non-type template-parameter of integral or
3952 enumeration type, integral promotions (4.5) and integral
3953 conversions (4.7) are applied. */
3954 /* It should be sufficient to check the outermost conversion step, since
3955 there are no qualification conversions to integer type. */
3956 if (conv)
3957 switch (conv->kind)
3959 /* A conversion function is OK. If it isn't constexpr, we'll
3960 complain later that the argument isn't constant. */
3961 case ck_user:
3962 /* The lvalue-to-rvalue conversion is OK. */
3963 case ck_rvalue:
3964 case ck_identity:
3965 break;
3967 case ck_std:
3968 t = next_conversion (conv)->type;
3969 if (INTEGRAL_OR_ENUMERATION_TYPE_P (t))
3970 break;
3972 if (complain & tf_error)
3973 error_at (loc, "conversion from %qT to %qT not considered for "
3974 "non-type template argument", t, type);
3975 /* fall through. */
3977 default:
3978 conv = NULL;
3979 break;
3982 if (conv)
3983 expr = convert_like (conv, expr, complain);
3984 else
3985 expr = error_mark_node;
3987 /* Free all the conversions we allocated. */
3988 obstack_free (&conversion_obstack, p);
3990 return expr;
3993 /* Do any initial processing on the arguments to a function call. */
3995 static vec<tree, va_gc> *
3996 resolve_args (vec<tree, va_gc> *args, tsubst_flags_t complain)
3998 unsigned int ix;
3999 tree arg;
4001 FOR_EACH_VEC_SAFE_ELT (args, ix, arg)
4003 if (error_operand_p (arg))
4004 return NULL;
4005 else if (VOID_TYPE_P (TREE_TYPE (arg)))
4007 if (complain & tf_error)
4008 error ("invalid use of void expression");
4009 return NULL;
4011 else if (invalid_nonstatic_memfn_p (input_location, arg, complain))
4012 return NULL;
4014 return args;
4017 /* Perform overload resolution on FN, which is called with the ARGS.
4019 Return the candidate function selected by overload resolution, or
4020 NULL if the event that overload resolution failed. In the case
4021 that overload resolution fails, *CANDIDATES will be the set of
4022 candidates considered, and ANY_VIABLE_P will be set to true or
4023 false to indicate whether or not any of the candidates were
4024 viable.
4026 The ARGS should already have gone through RESOLVE_ARGS before this
4027 function is called. */
4029 static struct z_candidate *
4030 perform_overload_resolution (tree fn,
4031 const vec<tree, va_gc> *args,
4032 struct z_candidate **candidates,
4033 bool *any_viable_p, tsubst_flags_t complain)
4035 struct z_candidate *cand;
4036 tree explicit_targs;
4037 int template_only;
4039 bool subtime = timevar_cond_start (TV_OVERLOAD);
4041 explicit_targs = NULL_TREE;
4042 template_only = 0;
4044 *candidates = NULL;
4045 *any_viable_p = true;
4047 /* Check FN. */
4048 gcc_assert (TREE_CODE (fn) == FUNCTION_DECL
4049 || TREE_CODE (fn) == TEMPLATE_DECL
4050 || TREE_CODE (fn) == OVERLOAD
4051 || TREE_CODE (fn) == TEMPLATE_ID_EXPR);
4053 if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
4055 explicit_targs = TREE_OPERAND (fn, 1);
4056 fn = TREE_OPERAND (fn, 0);
4057 template_only = 1;
4060 /* Add the various candidate functions. */
4061 add_candidates (fn, NULL_TREE, args, NULL_TREE,
4062 explicit_targs, template_only,
4063 /*conversion_path=*/NULL_TREE,
4064 /*access_path=*/NULL_TREE,
4065 LOOKUP_NORMAL,
4066 candidates, complain);
4068 *candidates = splice_viable (*candidates, false, any_viable_p);
4069 if (*any_viable_p)
4070 cand = tourney (*candidates, complain);
4071 else
4072 cand = NULL;
4074 timevar_cond_stop (TV_OVERLOAD, subtime);
4075 return cand;
4078 /* Print an error message about being unable to build a call to FN with
4079 ARGS. ANY_VIABLE_P indicates whether any candidate functions could
4080 be located; CANDIDATES is a possibly empty list of such
4081 functions. */
4083 static void
4084 print_error_for_call_failure (tree fn, vec<tree, va_gc> *args,
4085 struct z_candidate *candidates)
4087 tree name = DECL_NAME (OVL_CURRENT (fn));
4088 location_t loc = location_of (name);
4090 if (!any_strictly_viable (candidates))
4091 error_at (loc, "no matching function for call to %<%D(%A)%>",
4092 name, build_tree_list_vec (args));
4093 else
4094 error_at (loc, "call of overloaded %<%D(%A)%> is ambiguous",
4095 name, build_tree_list_vec (args));
4096 if (candidates)
4097 print_z_candidates (loc, candidates);
4100 /* Return an expression for a call to FN (a namespace-scope function,
4101 or a static member function) with the ARGS. This may change
4102 ARGS. */
4104 tree
4105 build_new_function_call (tree fn, vec<tree, va_gc> **args, bool koenig_p,
4106 tsubst_flags_t complain)
4108 struct z_candidate *candidates, *cand;
4109 bool any_viable_p;
4110 void *p;
4111 tree result;
4113 if (args != NULL && *args != NULL)
4115 *args = resolve_args (*args, complain);
4116 if (*args == NULL)
4117 return error_mark_node;
4120 if (flag_tm)
4121 tm_malloc_replacement (fn);
4123 /* If this function was found without using argument dependent
4124 lookup, then we want to ignore any undeclared friend
4125 functions. */
4126 if (!koenig_p)
4128 tree orig_fn = fn;
4130 fn = remove_hidden_names (fn);
4131 if (!fn)
4133 if (complain & tf_error)
4134 print_error_for_call_failure (orig_fn, *args, NULL);
4135 return error_mark_node;
4139 /* Get the high-water mark for the CONVERSION_OBSTACK. */
4140 p = conversion_obstack_alloc (0);
4142 cand = perform_overload_resolution (fn, *args, &candidates, &any_viable_p,
4143 complain);
4145 if (!cand)
4147 if (complain & tf_error)
4149 // If there is a single (non-viable) function candidate,
4150 // let the error be diagnosed by cp_build_function_call_vec.
4151 if (!any_viable_p && candidates && ! candidates->next
4152 && (TREE_CODE (candidates->fn) == FUNCTION_DECL))
4153 return cp_build_function_call_vec (candidates->fn, args, complain);
4155 // Otherwise, emit notes for non-viable candidates.
4156 if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
4157 fn = TREE_OPERAND (fn, 0);
4158 print_error_for_call_failure (fn, *args, candidates);
4160 result = error_mark_node;
4162 else
4164 int flags = LOOKUP_NORMAL;
4165 /* If fn is template_id_expr, the call has explicit template arguments
4166 (e.g. func<int>(5)), communicate this info to build_over_call
4167 through flags so that later we can use it to decide whether to warn
4168 about peculiar null pointer conversion. */
4169 if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
4171 /* If overload resolution selects a specialization of a
4172 function concept for non-dependent template arguments,
4173 the expression is true if the constraints are satisfied
4174 and false otherwise.
4176 NOTE: This is an extension of Concepts Lite TS that
4177 allows constraints to be used in expressions. */
4178 if (flag_concepts && !processing_template_decl)
4180 tree tmpl = DECL_TI_TEMPLATE (cand->fn);
4181 tree targs = DECL_TI_ARGS (cand->fn);
4182 tree decl = DECL_TEMPLATE_RESULT (tmpl);
4183 if (DECL_DECLARED_CONCEPT_P (decl))
4184 return evaluate_function_concept (decl, targs);
4187 flags |= LOOKUP_EXPLICIT_TMPL_ARGS;
4190 result = build_over_call (cand, flags, complain);
4193 /* Free all the conversions we allocated. */
4194 obstack_free (&conversion_obstack, p);
4196 return result;
4199 /* Build a call to a global operator new. FNNAME is the name of the
4200 operator (either "operator new" or "operator new[]") and ARGS are
4201 the arguments provided. This may change ARGS. *SIZE points to the
4202 total number of bytes required by the allocation, and is updated if
4203 that is changed here. *COOKIE_SIZE is non-NULL if a cookie should
4204 be used. If this function determines that no cookie should be
4205 used, after all, *COOKIE_SIZE is set to NULL_TREE. If SIZE_CHECK
4206 is not NULL_TREE, it is evaluated before calculating the final
4207 array size, and if it fails, the array size is replaced with
4208 (size_t)-1 (usually triggering a std::bad_alloc exception). If FN
4209 is non-NULL, it will be set, upon return, to the allocation
4210 function called. */
4212 tree
4213 build_operator_new_call (tree fnname, vec<tree, va_gc> **args,
4214 tree *size, tree *cookie_size, tree size_check,
4215 tree *fn, tsubst_flags_t complain)
4217 tree original_size = *size;
4218 tree fns;
4219 struct z_candidate *candidates;
4220 struct z_candidate *cand;
4221 bool any_viable_p;
4223 if (fn)
4224 *fn = NULL_TREE;
4225 /* Set to (size_t)-1 if the size check fails. */
4226 if (size_check != NULL_TREE)
4228 tree errval = TYPE_MAX_VALUE (sizetype);
4229 if (cxx_dialect >= cxx11 && flag_exceptions)
4230 errval = throw_bad_array_new_length ();
4231 *size = fold_build3 (COND_EXPR, sizetype, size_check,
4232 original_size, errval);
4234 vec_safe_insert (*args, 0, *size);
4235 *args = resolve_args (*args, complain);
4236 if (*args == NULL)
4237 return error_mark_node;
4239 /* Based on:
4241 [expr.new]
4243 If this lookup fails to find the name, or if the allocated type
4244 is not a class type, the allocation function's name is looked
4245 up in the global scope.
4247 we disregard block-scope declarations of "operator new". */
4248 fns = lookup_function_nonclass (fnname, *args, /*block_p=*/false);
4250 /* Figure out what function is being called. */
4251 cand = perform_overload_resolution (fns, *args, &candidates, &any_viable_p,
4252 complain);
4254 /* If no suitable function could be found, issue an error message
4255 and give up. */
4256 if (!cand)
4258 if (complain & tf_error)
4259 print_error_for_call_failure (fns, *args, candidates);
4260 return error_mark_node;
4263 /* If a cookie is required, add some extra space. Whether
4264 or not a cookie is required cannot be determined until
4265 after we know which function was called. */
4266 if (*cookie_size)
4268 bool use_cookie = true;
4269 tree arg_types;
4271 arg_types = TYPE_ARG_TYPES (TREE_TYPE (cand->fn));
4272 /* Skip the size_t parameter. */
4273 arg_types = TREE_CHAIN (arg_types);
4274 /* Check the remaining parameters (if any). */
4275 if (arg_types
4276 && TREE_CHAIN (arg_types) == void_list_node
4277 && same_type_p (TREE_VALUE (arg_types),
4278 ptr_type_node))
4279 use_cookie = false;
4280 /* If we need a cookie, adjust the number of bytes allocated. */
4281 if (use_cookie)
4283 /* Update the total size. */
4284 *size = size_binop (PLUS_EXPR, original_size, *cookie_size);
4285 if (size_check)
4287 /* Set to (size_t)-1 if the size check fails. */
4288 gcc_assert (size_check != NULL_TREE);
4289 *size = fold_build3 (COND_EXPR, sizetype, size_check,
4290 *size, TYPE_MAX_VALUE (sizetype));
4292 /* Update the argument list to reflect the adjusted size. */
4293 (**args)[0] = *size;
4295 else
4296 *cookie_size = NULL_TREE;
4299 /* Tell our caller which function we decided to call. */
4300 if (fn)
4301 *fn = cand->fn;
4303 /* Build the CALL_EXPR. */
4304 return build_over_call (cand, LOOKUP_NORMAL, complain);
4307 /* Build a new call to operator(). This may change ARGS. */
4309 static tree
4310 build_op_call_1 (tree obj, vec<tree, va_gc> **args, tsubst_flags_t complain)
4312 struct z_candidate *candidates = 0, *cand;
4313 tree fns, convs, first_mem_arg = NULL_TREE;
4314 tree type = TREE_TYPE (obj);
4315 bool any_viable_p;
4316 tree result = NULL_TREE;
4317 void *p;
4319 if (error_operand_p (obj))
4320 return error_mark_node;
4322 obj = prep_operand (obj);
4324 if (TYPE_PTRMEMFUNC_P (type))
4326 if (complain & tf_error)
4327 /* It's no good looking for an overloaded operator() on a
4328 pointer-to-member-function. */
4329 error ("pointer-to-member function %E cannot be called without an object; consider using .* or ->*", obj);
4330 return error_mark_node;
4333 if (TYPE_BINFO (type))
4335 fns = lookup_fnfields (TYPE_BINFO (type), ansi_opname (CALL_EXPR), 1);
4336 if (fns == error_mark_node)
4337 return error_mark_node;
4339 else
4340 fns = NULL_TREE;
4342 if (args != NULL && *args != NULL)
4344 *args = resolve_args (*args, complain);
4345 if (*args == NULL)
4346 return error_mark_node;
4349 /* Get the high-water mark for the CONVERSION_OBSTACK. */
4350 p = conversion_obstack_alloc (0);
4352 if (fns)
4354 first_mem_arg = obj;
4356 add_candidates (BASELINK_FUNCTIONS (fns),
4357 first_mem_arg, *args, NULL_TREE,
4358 NULL_TREE, false,
4359 BASELINK_BINFO (fns), BASELINK_ACCESS_BINFO (fns),
4360 LOOKUP_NORMAL, &candidates, complain);
4363 convs = lookup_conversions (type);
4365 for (; convs; convs = TREE_CHAIN (convs))
4367 tree fns = TREE_VALUE (convs);
4368 tree totype = TREE_TYPE (convs);
4370 if (TYPE_PTRFN_P (totype)
4371 || TYPE_REFFN_P (totype)
4372 || (TREE_CODE (totype) == REFERENCE_TYPE
4373 && TYPE_PTRFN_P (TREE_TYPE (totype))))
4374 for (; fns; fns = OVL_NEXT (fns))
4376 tree fn = OVL_CURRENT (fns);
4378 if (DECL_NONCONVERTING_P (fn))
4379 continue;
4381 if (TREE_CODE (fn) == TEMPLATE_DECL)
4382 add_template_conv_candidate
4383 (&candidates, fn, obj, *args, totype,
4384 /*access_path=*/NULL_TREE,
4385 /*conversion_path=*/NULL_TREE, complain);
4386 else
4387 add_conv_candidate (&candidates, fn, obj,
4388 *args, /*conversion_path=*/NULL_TREE,
4389 /*access_path=*/NULL_TREE, complain);
4393 /* Be strict here because if we choose a bad conversion candidate, the
4394 errors we get won't mention the call context. */
4395 candidates = splice_viable (candidates, true, &any_viable_p);
4396 if (!any_viable_p)
4398 if (complain & tf_error)
4400 error ("no match for call to %<(%T) (%A)%>", TREE_TYPE (obj),
4401 build_tree_list_vec (*args));
4402 print_z_candidates (location_of (TREE_TYPE (obj)), candidates);
4404 result = error_mark_node;
4406 else
4408 cand = tourney (candidates, complain);
4409 if (cand == 0)
4411 if (complain & tf_error)
4413 error ("call of %<(%T) (%A)%> is ambiguous",
4414 TREE_TYPE (obj), build_tree_list_vec (*args));
4415 print_z_candidates (location_of (TREE_TYPE (obj)), candidates);
4417 result = error_mark_node;
4419 /* Since cand->fn will be a type, not a function, for a conversion
4420 function, we must be careful not to unconditionally look at
4421 DECL_NAME here. */
4422 else if (TREE_CODE (cand->fn) == FUNCTION_DECL
4423 && DECL_OVERLOADED_OPERATOR_P (cand->fn) == CALL_EXPR)
4424 result = build_over_call (cand, LOOKUP_NORMAL, complain);
4425 else
4427 if (DECL_P (cand->fn))
4428 obj = convert_like_with_context (cand->convs[0], obj, cand->fn,
4429 -1, complain);
4430 else
4431 obj = convert_like (cand->convs[0], obj, complain);
4432 obj = convert_from_reference (obj);
4433 result = cp_build_function_call_vec (obj, args, complain);
4437 /* Free all the conversions we allocated. */
4438 obstack_free (&conversion_obstack, p);
4440 return result;
4443 /* Wrapper for above. */
4445 tree
4446 build_op_call (tree obj, vec<tree, va_gc> **args, tsubst_flags_t complain)
4448 tree ret;
4449 bool subtime = timevar_cond_start (TV_OVERLOAD);
4450 ret = build_op_call_1 (obj, args, complain);
4451 timevar_cond_stop (TV_OVERLOAD, subtime);
4452 return ret;
4455 /* Called by op_error to prepare format strings suitable for the error
4456 function. It concatenates a prefix (controlled by MATCH), ERRMSG,
4457 and a suffix (controlled by NTYPES). */
4459 static const char *
4460 op_error_string (const char *errmsg, int ntypes, bool match)
4462 const char *msg;
4464 const char *msgp = concat (match ? G_("ambiguous overload for ")
4465 : G_("no match for "), errmsg, NULL);
4467 if (ntypes == 3)
4468 msg = concat (msgp, G_(" (operand types are %qT, %qT, and %qT)"), NULL);
4469 else if (ntypes == 2)
4470 msg = concat (msgp, G_(" (operand types are %qT and %qT)"), NULL);
4471 else
4472 msg = concat (msgp, G_(" (operand type is %qT)"), NULL);
4474 return msg;
4477 static void
4478 op_error (location_t loc, enum tree_code code, enum tree_code code2,
4479 tree arg1, tree arg2, tree arg3, bool match)
4481 const char *opname;
4483 if (code == MODIFY_EXPR)
4484 opname = assignment_operator_name_info[code2].name;
4485 else
4486 opname = operator_name_info[code].name;
4488 switch (code)
4490 case COND_EXPR:
4491 if (flag_diagnostics_show_caret)
4492 error_at (loc, op_error_string (G_("ternary %<operator?:%>"),
4493 3, match),
4494 TREE_TYPE (arg1), TREE_TYPE (arg2), TREE_TYPE (arg3));
4495 else
4496 error_at (loc, op_error_string (G_("ternary %<operator?:%> "
4497 "in %<%E ? %E : %E%>"), 3, match),
4498 arg1, arg2, arg3,
4499 TREE_TYPE (arg1), TREE_TYPE (arg2), TREE_TYPE (arg3));
4500 break;
4502 case POSTINCREMENT_EXPR:
4503 case POSTDECREMENT_EXPR:
4504 if (flag_diagnostics_show_caret)
4505 error_at (loc, op_error_string (G_("%<operator%s%>"), 1, match),
4506 opname, TREE_TYPE (arg1));
4507 else
4508 error_at (loc, op_error_string (G_("%<operator%s%> in %<%E%s%>"),
4509 1, match),
4510 opname, arg1, opname, TREE_TYPE (arg1));
4511 break;
4513 case ARRAY_REF:
4514 if (flag_diagnostics_show_caret)
4515 error_at (loc, op_error_string (G_("%<operator[]%>"), 2, match),
4516 TREE_TYPE (arg1), TREE_TYPE (arg2));
4517 else
4518 error_at (loc, op_error_string (G_("%<operator[]%> in %<%E[%E]%>"),
4519 2, match),
4520 arg1, arg2, TREE_TYPE (arg1), TREE_TYPE (arg2));
4521 break;
4523 case REALPART_EXPR:
4524 case IMAGPART_EXPR:
4525 if (flag_diagnostics_show_caret)
4526 error_at (loc, op_error_string (G_("%qs"), 1, match),
4527 opname, TREE_TYPE (arg1));
4528 else
4529 error_at (loc, op_error_string (G_("%qs in %<%s %E%>"), 1, match),
4530 opname, opname, arg1, TREE_TYPE (arg1));
4531 break;
4533 default:
4534 if (arg2)
4535 if (flag_diagnostics_show_caret)
4536 error_at (loc, op_error_string (G_("%<operator%s%>"), 2, match),
4537 opname, TREE_TYPE (arg1), TREE_TYPE (arg2));
4538 else
4539 error_at (loc, op_error_string (G_("%<operator%s%> in %<%E %s %E%>"),
4540 2, match),
4541 opname, arg1, opname, arg2,
4542 TREE_TYPE (arg1), TREE_TYPE (arg2));
4543 else
4544 if (flag_diagnostics_show_caret)
4545 error_at (loc, op_error_string (G_("%<operator%s%>"), 1, match),
4546 opname, TREE_TYPE (arg1));
4547 else
4548 error_at (loc, op_error_string (G_("%<operator%s%> in %<%s%E%>"),
4549 1, match),
4550 opname, opname, arg1, TREE_TYPE (arg1));
4551 break;
4555 /* Return the implicit conversion sequence that could be used to
4556 convert E1 to E2 in [expr.cond]. */
4558 static conversion *
4559 conditional_conversion (tree e1, tree e2, tsubst_flags_t complain)
4561 tree t1 = non_reference (TREE_TYPE (e1));
4562 tree t2 = non_reference (TREE_TYPE (e2));
4563 conversion *conv;
4564 bool good_base;
4566 /* [expr.cond]
4568 If E2 is an lvalue: E1 can be converted to match E2 if E1 can be
4569 implicitly converted (clause _conv_) to the type "lvalue reference to
4570 T2", subject to the constraint that in the conversion the
4571 reference must bind directly (_dcl.init.ref_) to an lvalue.
4573 If E2 is an xvalue: E1 can be converted to match E2 if E1 can be
4574 implicitly converted to the type "rvalue reference to T2", subject to
4575 the constraint that the reference must bind directly. */
4576 if (glvalue_p (e2))
4578 tree rtype = cp_build_reference_type (t2, !lvalue_p (e2));
4579 conv = implicit_conversion (rtype,
4582 /*c_cast_p=*/false,
4583 LOOKUP_NO_TEMP_BIND|LOOKUP_NO_RVAL_BIND
4584 |LOOKUP_ONLYCONVERTING,
4585 complain);
4586 if (conv && !conv->bad_p)
4587 return conv;
4590 /* If E2 is a prvalue or if neither of the conversions above can be done
4591 and at least one of the operands has (possibly cv-qualified) class
4592 type: */
4593 if (!CLASS_TYPE_P (t1) && !CLASS_TYPE_P (t2))
4594 return NULL;
4596 /* [expr.cond]
4598 If E1 and E2 have class type, and the underlying class types are
4599 the same or one is a base class of the other: E1 can be converted
4600 to match E2 if the class of T2 is the same type as, or a base
4601 class of, the class of T1, and the cv-qualification of T2 is the
4602 same cv-qualification as, or a greater cv-qualification than, the
4603 cv-qualification of T1. If the conversion is applied, E1 is
4604 changed to an rvalue of type T2 that still refers to the original
4605 source class object (or the appropriate subobject thereof). */
4606 if (CLASS_TYPE_P (t1) && CLASS_TYPE_P (t2)
4607 && ((good_base = DERIVED_FROM_P (t2, t1)) || DERIVED_FROM_P (t1, t2)))
4609 if (good_base && at_least_as_qualified_p (t2, t1))
4611 conv = build_identity_conv (t1, e1);
4612 if (!same_type_p (TYPE_MAIN_VARIANT (t1),
4613 TYPE_MAIN_VARIANT (t2)))
4614 conv = build_conv (ck_base, t2, conv);
4615 else
4616 conv = build_conv (ck_rvalue, t2, conv);
4617 return conv;
4619 else
4620 return NULL;
4622 else
4623 /* [expr.cond]
4625 Otherwise: E1 can be converted to match E2 if E1 can be implicitly
4626 converted to the type that expression E2 would have if E2 were
4627 converted to an rvalue (or the type it has, if E2 is an rvalue). */
4628 return implicit_conversion (t2, t1, e1, /*c_cast_p=*/false,
4629 LOOKUP_IMPLICIT, complain);
4632 /* Implement [expr.cond]. ARG1, ARG2, and ARG3 are the three
4633 arguments to the conditional expression. */
4635 static tree
4636 build_conditional_expr_1 (location_t loc, tree arg1, tree arg2, tree arg3,
4637 tsubst_flags_t complain)
4639 tree arg2_type;
4640 tree arg3_type;
4641 tree result = NULL_TREE;
4642 tree result_type = NULL_TREE;
4643 bool is_lvalue = true;
4644 struct z_candidate *candidates = 0;
4645 struct z_candidate *cand;
4646 void *p;
4647 tree orig_arg2, orig_arg3;
4649 /* As a G++ extension, the second argument to the conditional can be
4650 omitted. (So that `a ? : c' is roughly equivalent to `a ? a :
4651 c'.) If the second operand is omitted, make sure it is
4652 calculated only once. */
4653 if (!arg2)
4655 if (complain & tf_error)
4656 pedwarn (loc, OPT_Wpedantic,
4657 "ISO C++ forbids omitting the middle term of a ?: expression");
4659 /* Make sure that lvalues remain lvalues. See g++.oliva/ext1.C. */
4660 if (lvalue_p (arg1))
4661 arg2 = arg1 = cp_stabilize_reference (arg1);
4662 else
4663 arg2 = arg1 = save_expr (arg1);
4666 /* If something has already gone wrong, just pass that fact up the
4667 tree. */
4668 if (error_operand_p (arg1)
4669 || error_operand_p (arg2)
4670 || error_operand_p (arg3))
4671 return error_mark_node;
4673 orig_arg2 = arg2;
4674 orig_arg3 = arg3;
4676 if (VECTOR_INTEGER_TYPE_P (TREE_TYPE (arg1)))
4678 tree arg1_type = TREE_TYPE (arg1);
4680 /* If arg1 is another cond_expr choosing between -1 and 0,
4681 then we can use its comparison. It may help to avoid
4682 additional comparison, produce more accurate diagnostics
4683 and enables folding. */
4684 if (TREE_CODE (arg1) == VEC_COND_EXPR
4685 && integer_minus_onep (TREE_OPERAND (arg1, 1))
4686 && integer_zerop (TREE_OPERAND (arg1, 2)))
4687 arg1 = TREE_OPERAND (arg1, 0);
4689 arg1 = force_rvalue (arg1, complain);
4690 arg2 = force_rvalue (arg2, complain);
4691 arg3 = force_rvalue (arg3, complain);
4693 /* force_rvalue can return error_mark on valid arguments. */
4694 if (error_operand_p (arg1)
4695 || error_operand_p (arg2)
4696 || error_operand_p (arg3))
4697 return error_mark_node;
4699 arg2_type = TREE_TYPE (arg2);
4700 arg3_type = TREE_TYPE (arg3);
4702 if (!VECTOR_TYPE_P (arg2_type)
4703 && !VECTOR_TYPE_P (arg3_type))
4705 /* Rely on the error messages of the scalar version. */
4706 tree scal = build_conditional_expr_1 (loc, integer_one_node,
4707 orig_arg2, orig_arg3, complain);
4708 if (scal == error_mark_node)
4709 return error_mark_node;
4710 tree stype = TREE_TYPE (scal);
4711 tree ctype = TREE_TYPE (arg1_type);
4712 if (TYPE_SIZE (stype) != TYPE_SIZE (ctype)
4713 || (!INTEGRAL_TYPE_P (stype) && !SCALAR_FLOAT_TYPE_P (stype)))
4715 if (complain & tf_error)
4716 error_at (loc, "inferred scalar type %qT is not an integer or "
4717 "floating point type of the same size as %qT", stype,
4718 COMPARISON_CLASS_P (arg1)
4719 ? TREE_TYPE (TREE_TYPE (TREE_OPERAND (arg1, 0)))
4720 : ctype);
4721 return error_mark_node;
4724 tree vtype = build_opaque_vector_type (stype,
4725 TYPE_VECTOR_SUBPARTS (arg1_type));
4726 /* We could pass complain & tf_warning to unsafe_conversion_p,
4727 but the warnings (like Wsign-conversion) have already been
4728 given by the scalar build_conditional_expr_1. We still check
4729 unsafe_conversion_p to forbid truncating long long -> float. */
4730 if (unsafe_conversion_p (loc, stype, arg2, false))
4732 if (complain & tf_error)
4733 error_at (loc, "conversion of scalar %qT to vector %qT "
4734 "involves truncation", arg2_type, vtype);
4735 return error_mark_node;
4737 if (unsafe_conversion_p (loc, stype, arg3, false))
4739 if (complain & tf_error)
4740 error_at (loc, "conversion of scalar %qT to vector %qT "
4741 "involves truncation", arg3_type, vtype);
4742 return error_mark_node;
4745 arg2 = cp_convert (stype, arg2, complain);
4746 arg2 = save_expr (arg2);
4747 arg2 = build_vector_from_val (vtype, arg2);
4748 arg2_type = vtype;
4749 arg3 = cp_convert (stype, arg3, complain);
4750 arg3 = save_expr (arg3);
4751 arg3 = build_vector_from_val (vtype, arg3);
4752 arg3_type = vtype;
4755 if (VECTOR_TYPE_P (arg2_type) != VECTOR_TYPE_P (arg3_type))
4757 enum stv_conv convert_flag =
4758 scalar_to_vector (loc, VEC_COND_EXPR, arg2, arg3,
4759 complain & tf_error);
4761 switch (convert_flag)
4763 case stv_error:
4764 return error_mark_node;
4765 case stv_firstarg:
4767 arg2 = save_expr (arg2);
4768 arg2 = convert (TREE_TYPE (arg3_type), arg2);
4769 arg2 = build_vector_from_val (arg3_type, arg2);
4770 arg2_type = TREE_TYPE (arg2);
4771 break;
4773 case stv_secondarg:
4775 arg3 = save_expr (arg3);
4776 arg3 = convert (TREE_TYPE (arg2_type), arg3);
4777 arg3 = build_vector_from_val (arg2_type, arg3);
4778 arg3_type = TREE_TYPE (arg3);
4779 break;
4781 default:
4782 break;
4786 if (!same_type_p (arg2_type, arg3_type)
4787 || TYPE_VECTOR_SUBPARTS (arg1_type)
4788 != TYPE_VECTOR_SUBPARTS (arg2_type)
4789 || TYPE_SIZE (arg1_type) != TYPE_SIZE (arg2_type))
4791 if (complain & tf_error)
4792 error_at (loc,
4793 "incompatible vector types in conditional expression: "
4794 "%qT, %qT and %qT", TREE_TYPE (arg1),
4795 TREE_TYPE (orig_arg2), TREE_TYPE (orig_arg3));
4796 return error_mark_node;
4799 if (!COMPARISON_CLASS_P (arg1))
4801 tree cmp_type = build_same_sized_truth_vector_type (arg1_type);
4802 arg1 = build2 (NE_EXPR, cmp_type, arg1, build_zero_cst (arg1_type));
4804 return build3_loc (loc, VEC_COND_EXPR, arg2_type, arg1, arg2, arg3);
4807 /* [expr.cond]
4809 The first expression is implicitly converted to bool (clause
4810 _conv_). */
4811 arg1 = perform_implicit_conversion_flags (boolean_type_node, arg1, complain,
4812 LOOKUP_NORMAL);
4813 if (error_operand_p (arg1))
4814 return error_mark_node;
4816 /* [expr.cond]
4818 If either the second or the third operand has type (possibly
4819 cv-qualified) void, then the lvalue-to-rvalue (_conv.lval_),
4820 array-to-pointer (_conv.array_), and function-to-pointer
4821 (_conv.func_) standard conversions are performed on the second
4822 and third operands. */
4823 arg2_type = unlowered_expr_type (arg2);
4824 arg3_type = unlowered_expr_type (arg3);
4825 if (VOID_TYPE_P (arg2_type) || VOID_TYPE_P (arg3_type))
4827 /* Do the conversions. We don't these for `void' type arguments
4828 since it can't have any effect and since decay_conversion
4829 does not handle that case gracefully. */
4830 if (!VOID_TYPE_P (arg2_type))
4831 arg2 = decay_conversion (arg2, complain);
4832 if (!VOID_TYPE_P (arg3_type))
4833 arg3 = decay_conversion (arg3, complain);
4834 arg2_type = TREE_TYPE (arg2);
4835 arg3_type = TREE_TYPE (arg3);
4837 /* [expr.cond]
4839 One of the following shall hold:
4841 --The second or the third operand (but not both) is a
4842 throw-expression (_except.throw_); the result is of the
4843 type of the other and is an rvalue.
4845 --Both the second and the third operands have type void; the
4846 result is of type void and is an rvalue.
4848 We must avoid calling force_rvalue for expressions of type
4849 "void" because it will complain that their value is being
4850 used. */
4851 if (TREE_CODE (arg2) == THROW_EXPR
4852 && TREE_CODE (arg3) != THROW_EXPR)
4854 if (!VOID_TYPE_P (arg3_type))
4856 arg3 = force_rvalue (arg3, complain);
4857 if (arg3 == error_mark_node)
4858 return error_mark_node;
4860 arg3_type = TREE_TYPE (arg3);
4861 result_type = arg3_type;
4863 else if (TREE_CODE (arg2) != THROW_EXPR
4864 && TREE_CODE (arg3) == THROW_EXPR)
4866 if (!VOID_TYPE_P (arg2_type))
4868 arg2 = force_rvalue (arg2, complain);
4869 if (arg2 == error_mark_node)
4870 return error_mark_node;
4872 arg2_type = TREE_TYPE (arg2);
4873 result_type = arg2_type;
4875 else if (VOID_TYPE_P (arg2_type) && VOID_TYPE_P (arg3_type))
4876 result_type = void_type_node;
4877 else
4879 if (complain & tf_error)
4881 if (VOID_TYPE_P (arg2_type))
4882 error_at (EXPR_LOC_OR_LOC (arg3, loc),
4883 "second operand to the conditional operator "
4884 "is of type %<void%>, but the third operand is "
4885 "neither a throw-expression nor of type %<void%>");
4886 else
4887 error_at (EXPR_LOC_OR_LOC (arg2, loc),
4888 "third operand to the conditional operator "
4889 "is of type %<void%>, but the second operand is "
4890 "neither a throw-expression nor of type %<void%>");
4892 return error_mark_node;
4895 is_lvalue = false;
4896 goto valid_operands;
4898 /* [expr.cond]
4900 Otherwise, if the second and third operand have different types,
4901 and either has (possibly cv-qualified) class type, or if both are
4902 glvalues of the same value category and the same type except for
4903 cv-qualification, an attempt is made to convert each of those operands
4904 to the type of the other. */
4905 else if (!same_type_p (arg2_type, arg3_type)
4906 && (CLASS_TYPE_P (arg2_type) || CLASS_TYPE_P (arg3_type)
4907 || (same_type_ignoring_top_level_qualifiers_p (arg2_type,
4908 arg3_type)
4909 && glvalue_p (arg2) && glvalue_p (arg3)
4910 && lvalue_p (arg2) == lvalue_p (arg3))))
4912 conversion *conv2;
4913 conversion *conv3;
4914 bool converted = false;
4916 /* Get the high-water mark for the CONVERSION_OBSTACK. */
4917 p = conversion_obstack_alloc (0);
4919 conv2 = conditional_conversion (arg2, arg3, complain);
4920 conv3 = conditional_conversion (arg3, arg2, complain);
4922 /* [expr.cond]
4924 If both can be converted, or one can be converted but the
4925 conversion is ambiguous, the program is ill-formed. If
4926 neither can be converted, the operands are left unchanged and
4927 further checking is performed as described below. If exactly
4928 one conversion is possible, that conversion is applied to the
4929 chosen operand and the converted operand is used in place of
4930 the original operand for the remainder of this section. */
4931 if ((conv2 && !conv2->bad_p
4932 && conv3 && !conv3->bad_p)
4933 || (conv2 && conv2->kind == ck_ambig)
4934 || (conv3 && conv3->kind == ck_ambig))
4936 if (complain & tf_error)
4938 error_at (loc, "operands to ?: have different types %qT and %qT",
4939 arg2_type, arg3_type);
4940 if (conv2 && !conv2->bad_p && conv3 && !conv3->bad_p)
4941 inform (loc, " and each type can be converted to the other");
4942 else if (conv2 && conv2->kind == ck_ambig)
4943 convert_like (conv2, arg2, complain);
4944 else
4945 convert_like (conv3, arg3, complain);
4947 result = error_mark_node;
4949 else if (conv2 && !conv2->bad_p)
4951 arg2 = convert_like (conv2, arg2, complain);
4952 arg2 = convert_from_reference (arg2);
4953 arg2_type = TREE_TYPE (arg2);
4954 /* Even if CONV2 is a valid conversion, the result of the
4955 conversion may be invalid. For example, if ARG3 has type
4956 "volatile X", and X does not have a copy constructor
4957 accepting a "volatile X&", then even if ARG2 can be
4958 converted to X, the conversion will fail. */
4959 if (error_operand_p (arg2))
4960 result = error_mark_node;
4961 converted = true;
4963 else if (conv3 && !conv3->bad_p)
4965 arg3 = convert_like (conv3, arg3, complain);
4966 arg3 = convert_from_reference (arg3);
4967 arg3_type = TREE_TYPE (arg3);
4968 if (error_operand_p (arg3))
4969 result = error_mark_node;
4970 converted = true;
4973 /* Free all the conversions we allocated. */
4974 obstack_free (&conversion_obstack, p);
4976 if (result)
4977 return result;
4979 /* If, after the conversion, both operands have class type,
4980 treat the cv-qualification of both operands as if it were the
4981 union of the cv-qualification of the operands.
4983 The standard is not clear about what to do in this
4984 circumstance. For example, if the first operand has type
4985 "const X" and the second operand has a user-defined
4986 conversion to "volatile X", what is the type of the second
4987 operand after this step? Making it be "const X" (matching
4988 the first operand) seems wrong, as that discards the
4989 qualification without actually performing a copy. Leaving it
4990 as "volatile X" seems wrong as that will result in the
4991 conditional expression failing altogether, even though,
4992 according to this step, the one operand could be converted to
4993 the type of the other. */
4994 if (converted
4995 && CLASS_TYPE_P (arg2_type)
4996 && cp_type_quals (arg2_type) != cp_type_quals (arg3_type))
4997 arg2_type = arg3_type =
4998 cp_build_qualified_type (arg2_type,
4999 cp_type_quals (arg2_type)
5000 | cp_type_quals (arg3_type));
5003 /* [expr.cond]
5005 If the second and third operands are glvalues of the same value
5006 category and have the same type, the result is of that type and
5007 value category. */
5008 if (((lvalue_p (arg2) && lvalue_p (arg3))
5009 || (xvalue_p (arg2) && xvalue_p (arg3)))
5010 && same_type_p (arg2_type, arg3_type))
5012 result_type = arg2_type;
5013 arg2 = mark_lvalue_use (arg2);
5014 arg3 = mark_lvalue_use (arg3);
5015 goto valid_operands;
5018 /* [expr.cond]
5020 Otherwise, the result is an rvalue. If the second and third
5021 operand do not have the same type, and either has (possibly
5022 cv-qualified) class type, overload resolution is used to
5023 determine the conversions (if any) to be applied to the operands
5024 (_over.match.oper_, _over.built_). */
5025 is_lvalue = false;
5026 if (!same_type_p (arg2_type, arg3_type)
5027 && (CLASS_TYPE_P (arg2_type) || CLASS_TYPE_P (arg3_type)))
5029 tree args[3];
5030 conversion *conv;
5031 bool any_viable_p;
5033 /* Rearrange the arguments so that add_builtin_candidate only has
5034 to know about two args. In build_builtin_candidate, the
5035 arguments are unscrambled. */
5036 args[0] = arg2;
5037 args[1] = arg3;
5038 args[2] = arg1;
5039 add_builtin_candidates (&candidates,
5040 COND_EXPR,
5041 NOP_EXPR,
5042 ansi_opname (COND_EXPR),
5043 args,
5044 LOOKUP_NORMAL, complain);
5046 /* [expr.cond]
5048 If the overload resolution fails, the program is
5049 ill-formed. */
5050 candidates = splice_viable (candidates, false, &any_viable_p);
5051 if (!any_viable_p)
5053 if (complain & tf_error)
5054 error_at (loc, "operands to ?: have different types %qT and %qT",
5055 arg2_type, arg3_type);
5056 return error_mark_node;
5058 cand = tourney (candidates, complain);
5059 if (!cand)
5061 if (complain & tf_error)
5063 op_error (loc, COND_EXPR, NOP_EXPR, arg1, arg2, arg3, FALSE);
5064 print_z_candidates (loc, candidates);
5066 return error_mark_node;
5069 /* [expr.cond]
5071 Otherwise, the conversions thus determined are applied, and
5072 the converted operands are used in place of the original
5073 operands for the remainder of this section. */
5074 conv = cand->convs[0];
5075 arg1 = convert_like (conv, arg1, complain);
5076 conv = cand->convs[1];
5077 arg2 = convert_like (conv, arg2, complain);
5078 arg2_type = TREE_TYPE (arg2);
5079 conv = cand->convs[2];
5080 arg3 = convert_like (conv, arg3, complain);
5081 arg3_type = TREE_TYPE (arg3);
5084 /* [expr.cond]
5086 Lvalue-to-rvalue (_conv.lval_), array-to-pointer (_conv.array_),
5087 and function-to-pointer (_conv.func_) standard conversions are
5088 performed on the second and third operands.
5090 We need to force the lvalue-to-rvalue conversion here for class types,
5091 so we get TARGET_EXPRs; trying to deal with a COND_EXPR of class rvalues
5092 that isn't wrapped with a TARGET_EXPR plays havoc with exception
5093 regions. */
5095 arg2 = force_rvalue (arg2, complain);
5096 if (!CLASS_TYPE_P (arg2_type))
5097 arg2_type = TREE_TYPE (arg2);
5099 arg3 = force_rvalue (arg3, complain);
5100 if (!CLASS_TYPE_P (arg3_type))
5101 arg3_type = TREE_TYPE (arg3);
5103 if (arg2 == error_mark_node || arg3 == error_mark_node)
5104 return error_mark_node;
5106 /* [expr.cond]
5108 After those conversions, one of the following shall hold:
5110 --The second and third operands have the same type; the result is of
5111 that type. */
5112 if (same_type_p (arg2_type, arg3_type))
5113 result_type = arg2_type;
5114 /* [expr.cond]
5116 --The second and third operands have arithmetic or enumeration
5117 type; the usual arithmetic conversions are performed to bring
5118 them to a common type, and the result is of that type. */
5119 else if ((ARITHMETIC_TYPE_P (arg2_type)
5120 || UNSCOPED_ENUM_P (arg2_type))
5121 && (ARITHMETIC_TYPE_P (arg3_type)
5122 || UNSCOPED_ENUM_P (arg3_type)))
5124 /* In this case, there is always a common type. */
5125 result_type = type_after_usual_arithmetic_conversions (arg2_type,
5126 arg3_type);
5127 if (complain & tf_warning)
5128 do_warn_double_promotion (result_type, arg2_type, arg3_type,
5129 "implicit conversion from %qT to %qT to "
5130 "match other result of conditional",
5131 loc);
5133 if (TREE_CODE (arg2_type) == ENUMERAL_TYPE
5134 && TREE_CODE (arg3_type) == ENUMERAL_TYPE)
5136 if (TREE_CODE (orig_arg2) == CONST_DECL
5137 && TREE_CODE (orig_arg3) == CONST_DECL
5138 && DECL_CONTEXT (orig_arg2) == DECL_CONTEXT (orig_arg3))
5139 /* Two enumerators from the same enumeration can have different
5140 types when the enumeration is still being defined. */;
5141 else if (complain & tf_warning)
5142 warning_at (loc, OPT_Wenum_compare, "enumeral mismatch in "
5143 "conditional expression: %qT vs %qT",
5144 arg2_type, arg3_type);
5146 else if (extra_warnings
5147 && ((TREE_CODE (arg2_type) == ENUMERAL_TYPE
5148 && !same_type_p (arg3_type, type_promotes_to (arg2_type)))
5149 || (TREE_CODE (arg3_type) == ENUMERAL_TYPE
5150 && !same_type_p (arg2_type,
5151 type_promotes_to (arg3_type)))))
5153 if (complain & tf_warning)
5154 warning_at (loc, OPT_Wextra, "enumeral and non-enumeral type in "
5155 "conditional expression");
5158 arg2 = perform_implicit_conversion (result_type, arg2, complain);
5159 arg3 = perform_implicit_conversion (result_type, arg3, complain);
5161 /* [expr.cond]
5163 --The second and third operands have pointer type, or one has
5164 pointer type and the other is a null pointer constant; pointer
5165 conversions (_conv.ptr_) and qualification conversions
5166 (_conv.qual_) are performed to bring them to their composite
5167 pointer type (_expr.rel_). The result is of the composite
5168 pointer type.
5170 --The second and third operands have pointer to member type, or
5171 one has pointer to member type and the other is a null pointer
5172 constant; pointer to member conversions (_conv.mem_) and
5173 qualification conversions (_conv.qual_) are performed to bring
5174 them to a common type, whose cv-qualification shall match the
5175 cv-qualification of either the second or the third operand.
5176 The result is of the common type. */
5177 else if ((null_ptr_cst_p (arg2)
5178 && TYPE_PTR_OR_PTRMEM_P (arg3_type))
5179 || (null_ptr_cst_p (arg3)
5180 && TYPE_PTR_OR_PTRMEM_P (arg2_type))
5181 || (TYPE_PTR_P (arg2_type) && TYPE_PTR_P (arg3_type))
5182 || (TYPE_PTRDATAMEM_P (arg2_type) && TYPE_PTRDATAMEM_P (arg3_type))
5183 || (TYPE_PTRMEMFUNC_P (arg2_type) && TYPE_PTRMEMFUNC_P (arg3_type)))
5185 result_type = composite_pointer_type (arg2_type, arg3_type, arg2,
5186 arg3, CPO_CONDITIONAL_EXPR,
5187 complain);
5188 if (result_type == error_mark_node)
5189 return error_mark_node;
5190 arg2 = perform_implicit_conversion (result_type, arg2, complain);
5191 arg3 = perform_implicit_conversion (result_type, arg3, complain);
5194 if (!result_type)
5196 if (complain & tf_error)
5197 error_at (loc, "operands to ?: have different types %qT and %qT",
5198 arg2_type, arg3_type);
5199 return error_mark_node;
5202 if (arg2 == error_mark_node || arg3 == error_mark_node)
5203 return error_mark_node;
5205 valid_operands:
5206 result = build3_loc (loc, COND_EXPR, result_type, arg1, arg2, arg3);
5208 /* We can't use result_type below, as fold might have returned a
5209 throw_expr. */
5211 if (!is_lvalue)
5213 /* Expand both sides into the same slot, hopefully the target of
5214 the ?: expression. We used to check for TARGET_EXPRs here,
5215 but now we sometimes wrap them in NOP_EXPRs so the test would
5216 fail. */
5217 if (CLASS_TYPE_P (TREE_TYPE (result)))
5218 result = get_target_expr_sfinae (result, complain);
5219 /* If this expression is an rvalue, but might be mistaken for an
5220 lvalue, we must add a NON_LVALUE_EXPR. */
5221 result = rvalue (result);
5223 else
5224 result = force_paren_expr (result);
5226 return result;
5229 /* Wrapper for above. */
5231 tree
5232 build_conditional_expr (location_t loc, tree arg1, tree arg2, tree arg3,
5233 tsubst_flags_t complain)
5235 tree ret;
5236 bool subtime = timevar_cond_start (TV_OVERLOAD);
5237 ret = build_conditional_expr_1 (loc, arg1, arg2, arg3, complain);
5238 timevar_cond_stop (TV_OVERLOAD, subtime);
5239 return ret;
5242 /* OPERAND is an operand to an expression. Perform necessary steps
5243 required before using it. If OPERAND is NULL_TREE, NULL_TREE is
5244 returned. */
5246 static tree
5247 prep_operand (tree operand)
5249 if (operand)
5251 if (CLASS_TYPE_P (TREE_TYPE (operand))
5252 && CLASSTYPE_TEMPLATE_INSTANTIATION (TREE_TYPE (operand)))
5253 /* Make sure the template type is instantiated now. */
5254 instantiate_class_template (TYPE_MAIN_VARIANT (TREE_TYPE (operand)));
5257 return operand;
5260 /* Add each of the viable functions in FNS (a FUNCTION_DECL or
5261 OVERLOAD) to the CANDIDATES, returning an updated list of
5262 CANDIDATES. The ARGS are the arguments provided to the call;
5263 if FIRST_ARG is non-null it is the implicit object argument,
5264 otherwise the first element of ARGS is used if needed. The
5265 EXPLICIT_TARGS are explicit template arguments provided.
5266 TEMPLATE_ONLY is true if only template functions should be
5267 considered. CONVERSION_PATH, ACCESS_PATH, and FLAGS are as for
5268 add_function_candidate. */
5270 static void
5271 add_candidates (tree fns, tree first_arg, const vec<tree, va_gc> *args,
5272 tree return_type,
5273 tree explicit_targs, bool template_only,
5274 tree conversion_path, tree access_path,
5275 int flags,
5276 struct z_candidate **candidates,
5277 tsubst_flags_t complain)
5279 tree ctype;
5280 const vec<tree, va_gc> *non_static_args;
5281 bool check_list_ctor;
5282 bool check_converting;
5283 unification_kind_t strict;
5284 tree fn;
5286 if (!fns)
5287 return;
5289 /* Precalculate special handling of constructors and conversion ops. */
5290 fn = OVL_CURRENT (fns);
5291 if (DECL_CONV_FN_P (fn))
5293 check_list_ctor = false;
5294 check_converting = !!(flags & LOOKUP_ONLYCONVERTING);
5295 if (flags & LOOKUP_NO_CONVERSION)
5296 /* We're doing return_type(x). */
5297 strict = DEDUCE_CONV;
5298 else
5299 /* We're doing x.operator return_type(). */
5300 strict = DEDUCE_EXACT;
5301 /* [over.match.funcs] For conversion functions, the function
5302 is considered to be a member of the class of the implicit
5303 object argument for the purpose of defining the type of
5304 the implicit object parameter. */
5305 ctype = TYPE_MAIN_VARIANT (TREE_TYPE (first_arg));
5307 else
5309 if (DECL_CONSTRUCTOR_P (fn))
5311 check_list_ctor = !!(flags & LOOKUP_LIST_ONLY);
5312 /* For list-initialization we consider explicit constructors
5313 and complain if one is chosen. */
5314 check_converting
5315 = ((flags & (LOOKUP_ONLYCONVERTING|LOOKUP_LIST_INIT_CTOR))
5316 == LOOKUP_ONLYCONVERTING);
5318 else
5320 check_list_ctor = false;
5321 check_converting = false;
5323 strict = DEDUCE_CALL;
5324 ctype = conversion_path ? BINFO_TYPE (conversion_path) : NULL_TREE;
5327 if (first_arg)
5328 non_static_args = args;
5329 else
5330 /* Delay creating the implicit this parameter until it is needed. */
5331 non_static_args = NULL;
5333 for (; fns; fns = OVL_NEXT (fns))
5335 tree fn_first_arg;
5336 const vec<tree, va_gc> *fn_args;
5338 fn = OVL_CURRENT (fns);
5340 if (check_converting && DECL_NONCONVERTING_P (fn))
5341 continue;
5342 if (check_list_ctor && !is_list_ctor (fn))
5343 continue;
5345 /* Figure out which set of arguments to use. */
5346 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
5348 /* If this function is a non-static member and we didn't get an
5349 implicit object argument, move it out of args. */
5350 if (first_arg == NULL_TREE)
5352 unsigned int ix;
5353 tree arg;
5354 vec<tree, va_gc> *tempvec;
5355 vec_alloc (tempvec, args->length () - 1);
5356 for (ix = 1; args->iterate (ix, &arg); ++ix)
5357 tempvec->quick_push (arg);
5358 non_static_args = tempvec;
5359 first_arg = (*args)[0];
5362 fn_first_arg = first_arg;
5363 fn_args = non_static_args;
5365 else
5367 /* Otherwise, just use the list of arguments provided. */
5368 fn_first_arg = NULL_TREE;
5369 fn_args = args;
5372 if (TREE_CODE (fn) == TEMPLATE_DECL)
5373 add_template_candidate (candidates,
5375 ctype,
5376 explicit_targs,
5377 fn_first_arg,
5378 fn_args,
5379 return_type,
5380 access_path,
5381 conversion_path,
5382 flags,
5383 strict,
5384 complain);
5385 else if (!template_only)
5386 add_function_candidate (candidates,
5388 ctype,
5389 fn_first_arg,
5390 fn_args,
5391 access_path,
5392 conversion_path,
5393 flags,
5394 complain);
5398 /* Returns 1 if P0145R2 says that the LHS of operator CODE is evaluated first,
5399 -1 if the RHS is evaluated first, or 0 if the order is unspecified. */
5401 static int
5402 op_is_ordered (tree_code code)
5404 switch (code)
5406 // 5. b @= a
5407 case MODIFY_EXPR:
5408 return (flag_strong_eval_order > 1 ? -1 : 0);
5410 // 6. a[b]
5411 case ARRAY_REF:
5412 return (flag_strong_eval_order > 1 ? 1 : 0);
5414 // 1. a.b
5415 // Not overloadable (yet).
5416 // 2. a->b
5417 // Only one argument.
5418 // 3. a->*b
5419 case MEMBER_REF:
5420 // 7. a << b
5421 case LSHIFT_EXPR:
5422 // 8. a >> b
5423 case RSHIFT_EXPR:
5424 return (flag_strong_eval_order ? 1 : 0);
5426 default:
5427 return 0;
5431 static tree
5432 build_new_op_1 (location_t loc, enum tree_code code, int flags, tree arg1,
5433 tree arg2, tree arg3, tree *overload, tsubst_flags_t complain)
5435 struct z_candidate *candidates = 0, *cand;
5436 vec<tree, va_gc> *arglist;
5437 tree fnname;
5438 tree args[3];
5439 tree result = NULL_TREE;
5440 bool result_valid_p = false;
5441 enum tree_code code2 = NOP_EXPR;
5442 enum tree_code code_orig_arg1 = ERROR_MARK;
5443 enum tree_code code_orig_arg2 = ERROR_MARK;
5444 conversion *conv;
5445 void *p;
5446 bool strict_p;
5447 bool any_viable_p;
5449 if (error_operand_p (arg1)
5450 || error_operand_p (arg2)
5451 || error_operand_p (arg3))
5452 return error_mark_node;
5454 if (code == MODIFY_EXPR)
5456 code2 = TREE_CODE (arg3);
5457 arg3 = NULL_TREE;
5458 fnname = ansi_assopname (code2);
5460 else
5461 fnname = ansi_opname (code);
5463 arg1 = prep_operand (arg1);
5465 bool memonly = false;
5466 switch (code)
5468 case NEW_EXPR:
5469 case VEC_NEW_EXPR:
5470 case VEC_DELETE_EXPR:
5471 case DELETE_EXPR:
5472 /* Use build_op_new_call and build_op_delete_call instead. */
5473 gcc_unreachable ();
5475 case CALL_EXPR:
5476 /* Use build_op_call instead. */
5477 gcc_unreachable ();
5479 case TRUTH_ORIF_EXPR:
5480 case TRUTH_ANDIF_EXPR:
5481 case TRUTH_AND_EXPR:
5482 case TRUTH_OR_EXPR:
5483 /* These are saved for the sake of warn_logical_operator. */
5484 code_orig_arg1 = TREE_CODE (arg1);
5485 code_orig_arg2 = TREE_CODE (arg2);
5486 break;
5487 case GT_EXPR:
5488 case LT_EXPR:
5489 case GE_EXPR:
5490 case LE_EXPR:
5491 case EQ_EXPR:
5492 case NE_EXPR:
5493 /* These are saved for the sake of maybe_warn_bool_compare. */
5494 code_orig_arg1 = TREE_CODE (TREE_TYPE (arg1));
5495 code_orig_arg2 = TREE_CODE (TREE_TYPE (arg2));
5496 break;
5498 /* =, ->, [], () must be non-static member functions. */
5499 case MODIFY_EXPR:
5500 if (code2 != NOP_EXPR)
5501 break;
5502 /* FALLTHRU */
5503 case COMPONENT_REF:
5504 case ARRAY_REF:
5505 memonly = true;
5506 break;
5508 default:
5509 break;
5512 arg2 = prep_operand (arg2);
5513 arg3 = prep_operand (arg3);
5515 if (code == COND_EXPR)
5516 /* Use build_conditional_expr instead. */
5517 gcc_unreachable ();
5518 else if (! OVERLOAD_TYPE_P (TREE_TYPE (arg1))
5519 && (! arg2 || ! OVERLOAD_TYPE_P (TREE_TYPE (arg2))))
5520 goto builtin;
5522 if (code == POSTINCREMENT_EXPR || code == POSTDECREMENT_EXPR)
5523 arg2 = integer_zero_node;
5525 vec_alloc (arglist, 3);
5526 arglist->quick_push (arg1);
5527 if (arg2 != NULL_TREE)
5528 arglist->quick_push (arg2);
5529 if (arg3 != NULL_TREE)
5530 arglist->quick_push (arg3);
5532 /* Get the high-water mark for the CONVERSION_OBSTACK. */
5533 p = conversion_obstack_alloc (0);
5535 /* Add namespace-scope operators to the list of functions to
5536 consider. */
5537 if (!memonly)
5538 add_candidates (lookup_function_nonclass (fnname, arglist,
5539 /*block_p=*/true),
5540 NULL_TREE, arglist, NULL_TREE,
5541 NULL_TREE, false, NULL_TREE, NULL_TREE,
5542 flags, &candidates, complain);
5544 args[0] = arg1;
5545 args[1] = arg2;
5546 args[2] = NULL_TREE;
5548 /* Add class-member operators to the candidate set. */
5549 if (CLASS_TYPE_P (TREE_TYPE (arg1)))
5551 tree fns;
5553 fns = lookup_fnfields (TREE_TYPE (arg1), fnname, 1);
5554 if (fns == error_mark_node)
5556 result = error_mark_node;
5557 goto user_defined_result_ready;
5559 if (fns)
5560 add_candidates (BASELINK_FUNCTIONS (fns),
5561 NULL_TREE, arglist, NULL_TREE,
5562 NULL_TREE, false,
5563 BASELINK_BINFO (fns),
5564 BASELINK_ACCESS_BINFO (fns),
5565 flags, &candidates, complain);
5567 /* Per 13.3.1.2/3, 2nd bullet, if no operand has a class type, then
5568 only non-member functions that have type T1 or reference to
5569 cv-qualified-opt T1 for the first argument, if the first argument
5570 has an enumeration type, or T2 or reference to cv-qualified-opt
5571 T2 for the second argument, if the second argument has an
5572 enumeration type. Filter out those that don't match. */
5573 else if (! arg2 || ! CLASS_TYPE_P (TREE_TYPE (arg2)))
5575 struct z_candidate **candp, **next;
5577 for (candp = &candidates; *candp; candp = next)
5579 tree parmlist, parmtype;
5580 int i, nargs = (arg2 ? 2 : 1);
5582 cand = *candp;
5583 next = &cand->next;
5585 parmlist = TYPE_ARG_TYPES (TREE_TYPE (cand->fn));
5587 for (i = 0; i < nargs; ++i)
5589 parmtype = TREE_VALUE (parmlist);
5591 if (TREE_CODE (parmtype) == REFERENCE_TYPE)
5592 parmtype = TREE_TYPE (parmtype);
5593 if (TREE_CODE (TREE_TYPE (args[i])) == ENUMERAL_TYPE
5594 && (same_type_ignoring_top_level_qualifiers_p
5595 (TREE_TYPE (args[i]), parmtype)))
5596 break;
5598 parmlist = TREE_CHAIN (parmlist);
5601 /* No argument has an appropriate type, so remove this
5602 candidate function from the list. */
5603 if (i == nargs)
5605 *candp = cand->next;
5606 next = candp;
5611 add_builtin_candidates (&candidates, code, code2, fnname, args,
5612 flags, complain);
5614 switch (code)
5616 case COMPOUND_EXPR:
5617 case ADDR_EXPR:
5618 /* For these, the built-in candidates set is empty
5619 [over.match.oper]/3. We don't want non-strict matches
5620 because exact matches are always possible with built-in
5621 operators. The built-in candidate set for COMPONENT_REF
5622 would be empty too, but since there are no such built-in
5623 operators, we accept non-strict matches for them. */
5624 strict_p = true;
5625 break;
5627 default:
5628 strict_p = false;
5629 break;
5632 candidates = splice_viable (candidates, strict_p, &any_viable_p);
5633 if (!any_viable_p)
5635 switch (code)
5637 case POSTINCREMENT_EXPR:
5638 case POSTDECREMENT_EXPR:
5639 /* Don't try anything fancy if we're not allowed to produce
5640 errors. */
5641 if (!(complain & tf_error))
5642 return error_mark_node;
5644 /* Look for an `operator++ (int)'. Pre-1985 C++ didn't
5645 distinguish between prefix and postfix ++ and
5646 operator++() was used for both, so we allow this with
5647 -fpermissive. */
5648 else
5650 const char *msg = (flag_permissive)
5651 ? G_("no %<%D(int)%> declared for postfix %qs,"
5652 " trying prefix operator instead")
5653 : G_("no %<%D(int)%> declared for postfix %qs");
5654 permerror (loc, msg, fnname, operator_name_info[code].name);
5657 if (!flag_permissive)
5658 return error_mark_node;
5660 if (code == POSTINCREMENT_EXPR)
5661 code = PREINCREMENT_EXPR;
5662 else
5663 code = PREDECREMENT_EXPR;
5664 result = build_new_op_1 (loc, code, flags, arg1, NULL_TREE,
5665 NULL_TREE, overload, complain);
5666 break;
5668 /* The caller will deal with these. */
5669 case ADDR_EXPR:
5670 case COMPOUND_EXPR:
5671 case COMPONENT_REF:
5672 result = NULL_TREE;
5673 result_valid_p = true;
5674 break;
5676 default:
5677 if (complain & tf_error)
5679 /* If one of the arguments of the operator represents
5680 an invalid use of member function pointer, try to report
5681 a meaningful error ... */
5682 if (invalid_nonstatic_memfn_p (loc, arg1, tf_error)
5683 || invalid_nonstatic_memfn_p (loc, arg2, tf_error)
5684 || invalid_nonstatic_memfn_p (loc, arg3, tf_error))
5685 /* We displayed the error message. */;
5686 else
5688 /* ... Otherwise, report the more generic
5689 "no matching operator found" error */
5690 op_error (loc, code, code2, arg1, arg2, arg3, FALSE);
5691 print_z_candidates (loc, candidates);
5694 result = error_mark_node;
5695 break;
5698 else
5700 cand = tourney (candidates, complain);
5701 if (cand == 0)
5703 if (complain & tf_error)
5705 op_error (loc, code, code2, arg1, arg2, arg3, TRUE);
5706 print_z_candidates (loc, candidates);
5708 result = error_mark_node;
5710 else if (TREE_CODE (cand->fn) == FUNCTION_DECL)
5712 if (overload)
5713 *overload = cand->fn;
5715 if (resolve_args (arglist, complain) == NULL)
5716 result = error_mark_node;
5717 else
5718 result = build_over_call (cand, LOOKUP_NORMAL, complain);
5720 if (trivial_fn_p (cand->fn))
5721 /* There won't be a CALL_EXPR. */;
5722 else if (result && result != error_mark_node)
5724 tree call = extract_call_expr (result);
5725 CALL_EXPR_OPERATOR_SYNTAX (call) = true;
5727 if (processing_template_decl && DECL_HIDDEN_FRIEND_P (cand->fn))
5728 /* This prevents build_new_function_call from discarding this
5729 function during instantiation of the enclosing template. */
5730 KOENIG_LOOKUP_P (call) = 1;
5732 /* Specify evaluation order as per P0145R2. */
5733 CALL_EXPR_ORDERED_ARGS (call) = false;
5734 switch (op_is_ordered (code))
5736 case -1:
5737 CALL_EXPR_REVERSE_ARGS (call) = true;
5738 break;
5740 case 1:
5741 CALL_EXPR_ORDERED_ARGS (call) = true;
5742 break;
5744 default:
5745 break;
5749 else
5751 /* Give any warnings we noticed during overload resolution. */
5752 if (cand->warnings && (complain & tf_warning))
5754 struct candidate_warning *w;
5755 for (w = cand->warnings; w; w = w->next)
5756 joust (cand, w->loser, 1, complain);
5759 /* Check for comparison of different enum types. */
5760 switch (code)
5762 case GT_EXPR:
5763 case LT_EXPR:
5764 case GE_EXPR:
5765 case LE_EXPR:
5766 case EQ_EXPR:
5767 case NE_EXPR:
5768 if (TREE_CODE (TREE_TYPE (arg1)) == ENUMERAL_TYPE
5769 && TREE_CODE (TREE_TYPE (arg2)) == ENUMERAL_TYPE
5770 && (TYPE_MAIN_VARIANT (TREE_TYPE (arg1))
5771 != TYPE_MAIN_VARIANT (TREE_TYPE (arg2)))
5772 && (complain & tf_warning))
5774 warning (OPT_Wenum_compare,
5775 "comparison between %q#T and %q#T",
5776 TREE_TYPE (arg1), TREE_TYPE (arg2));
5778 break;
5779 default:
5780 break;
5783 /* We need to strip any leading REF_BIND so that bitfields
5784 don't cause errors. This should not remove any important
5785 conversions, because builtins don't apply to class
5786 objects directly. */
5787 conv = cand->convs[0];
5788 if (conv->kind == ck_ref_bind)
5789 conv = next_conversion (conv);
5790 arg1 = convert_like (conv, arg1, complain);
5792 if (arg2)
5794 conv = cand->convs[1];
5795 if (conv->kind == ck_ref_bind)
5796 conv = next_conversion (conv);
5797 else
5798 arg2 = decay_conversion (arg2, complain);
5800 /* We need to call warn_logical_operator before
5801 converting arg2 to a boolean_type, but after
5802 decaying an enumerator to its value. */
5803 if (complain & tf_warning)
5804 warn_logical_operator (loc, code, boolean_type_node,
5805 code_orig_arg1, arg1,
5806 code_orig_arg2, arg2);
5808 arg2 = convert_like (conv, arg2, complain);
5810 if (arg3)
5812 conv = cand->convs[2];
5813 if (conv->kind == ck_ref_bind)
5814 conv = next_conversion (conv);
5815 arg3 = convert_like (conv, arg3, complain);
5821 user_defined_result_ready:
5823 /* Free all the conversions we allocated. */
5824 obstack_free (&conversion_obstack, p);
5826 if (result || result_valid_p)
5827 return result;
5829 builtin:
5830 switch (code)
5832 case MODIFY_EXPR:
5833 return cp_build_modify_expr (loc, arg1, code2, arg2, complain);
5835 case INDIRECT_REF:
5836 return cp_build_indirect_ref (arg1, RO_UNARY_STAR, complain);
5838 case TRUTH_ANDIF_EXPR:
5839 case TRUTH_ORIF_EXPR:
5840 case TRUTH_AND_EXPR:
5841 case TRUTH_OR_EXPR:
5842 if (complain & tf_warning)
5843 warn_logical_operator (loc, code, boolean_type_node,
5844 code_orig_arg1, arg1,
5845 code_orig_arg2, arg2);
5846 /* Fall through. */
5847 case GT_EXPR:
5848 case LT_EXPR:
5849 case GE_EXPR:
5850 case LE_EXPR:
5851 case EQ_EXPR:
5852 case NE_EXPR:
5853 if ((complain & tf_warning)
5854 && ((code_orig_arg1 == BOOLEAN_TYPE)
5855 ^ (code_orig_arg2 == BOOLEAN_TYPE)))
5856 maybe_warn_bool_compare (loc, code, arg1, arg2);
5857 if (complain & tf_warning && warn_tautological_compare)
5858 warn_tautological_cmp (loc, code, arg1, arg2);
5859 /* Fall through. */
5860 case PLUS_EXPR:
5861 case MINUS_EXPR:
5862 case MULT_EXPR:
5863 case TRUNC_DIV_EXPR:
5864 case MAX_EXPR:
5865 case MIN_EXPR:
5866 case LSHIFT_EXPR:
5867 case RSHIFT_EXPR:
5868 case TRUNC_MOD_EXPR:
5869 case BIT_AND_EXPR:
5870 case BIT_IOR_EXPR:
5871 case BIT_XOR_EXPR:
5872 return cp_build_binary_op (loc, code, arg1, arg2, complain);
5874 case UNARY_PLUS_EXPR:
5875 case NEGATE_EXPR:
5876 case BIT_NOT_EXPR:
5877 case TRUTH_NOT_EXPR:
5878 case PREINCREMENT_EXPR:
5879 case POSTINCREMENT_EXPR:
5880 case PREDECREMENT_EXPR:
5881 case POSTDECREMENT_EXPR:
5882 case REALPART_EXPR:
5883 case IMAGPART_EXPR:
5884 case ABS_EXPR:
5885 return cp_build_unary_op (code, arg1, candidates != 0, complain);
5887 case ARRAY_REF:
5888 return cp_build_array_ref (input_location, arg1, arg2, complain);
5890 case MEMBER_REF:
5891 return build_m_component_ref (cp_build_indirect_ref (arg1, RO_ARROW_STAR,
5892 complain),
5893 arg2, complain);
5895 /* The caller will deal with these. */
5896 case ADDR_EXPR:
5897 case COMPONENT_REF:
5898 case COMPOUND_EXPR:
5899 return NULL_TREE;
5901 default:
5902 gcc_unreachable ();
5904 return NULL_TREE;
5907 /* Wrapper for above. */
5909 tree
5910 build_new_op (location_t loc, enum tree_code code, int flags,
5911 tree arg1, tree arg2, tree arg3,
5912 tree *overload, tsubst_flags_t complain)
5914 tree ret;
5915 bool subtime = timevar_cond_start (TV_OVERLOAD);
5916 ret = build_new_op_1 (loc, code, flags, arg1, arg2, arg3,
5917 overload, complain);
5918 timevar_cond_stop (TV_OVERLOAD, subtime);
5919 return ret;
5922 /* CALL was returned by some call-building function; extract the actual
5923 CALL_EXPR from any bits that have been tacked on, e.g. by
5924 convert_from_reference. */
5926 tree
5927 extract_call_expr (tree call)
5929 while (TREE_CODE (call) == COMPOUND_EXPR)
5930 call = TREE_OPERAND (call, 1);
5931 if (REFERENCE_REF_P (call))
5932 call = TREE_OPERAND (call, 0);
5933 if (TREE_CODE (call) == TARGET_EXPR)
5934 call = TARGET_EXPR_INITIAL (call);
5935 gcc_assert (TREE_CODE (call) == CALL_EXPR
5936 || TREE_CODE (call) == AGGR_INIT_EXPR
5937 || call == error_mark_node);
5938 return call;
5941 /* Returns true if FN has two parameters, of which the second has type
5942 size_t. */
5944 static bool
5945 second_parm_is_size_t (tree fn)
5947 tree t = FUNCTION_ARG_CHAIN (fn);
5948 return (t
5949 && same_type_p (TREE_VALUE (t), size_type_node)
5950 && TREE_CHAIN (t) == void_list_node);
5953 /* Returns true iff T, an element of an OVERLOAD chain, is a usual
5954 deallocation function (3.7.4.2 [basic.stc.dynamic.deallocation]). */
5956 bool
5957 non_placement_deallocation_fn_p (tree t)
5959 /* A template instance is never a usual deallocation function,
5960 regardless of its signature. */
5961 if (TREE_CODE (t) == TEMPLATE_DECL
5962 || primary_template_instantiation_p (t))
5963 return false;
5965 /* If a class T has a member deallocation function named operator delete
5966 with exactly one parameter, then that function is a usual
5967 (non-placement) deallocation function. If class T does not declare
5968 such an operator delete but does declare a member deallocation
5969 function named operator delete with exactly two parameters, the second
5970 of which has type std::size_t (18.2), then this function is a usual
5971 deallocation function. */
5972 bool global = DECL_NAMESPACE_SCOPE_P (t);
5973 if (FUNCTION_ARG_CHAIN (t) == void_list_node
5974 || ((!global || flag_sized_deallocation)
5975 && second_parm_is_size_t (t)))
5976 return true;
5977 return false;
5980 /* Build a call to operator delete. This has to be handled very specially,
5981 because the restrictions on what signatures match are different from all
5982 other call instances. For a normal delete, only a delete taking (void *)
5983 or (void *, size_t) is accepted. For a placement delete, only an exact
5984 match with the placement new is accepted.
5986 CODE is either DELETE_EXPR or VEC_DELETE_EXPR.
5987 ADDR is the pointer to be deleted.
5988 SIZE is the size of the memory block to be deleted.
5989 GLOBAL_P is true if the delete-expression should not consider
5990 class-specific delete operators.
5991 PLACEMENT is the corresponding placement new call, or NULL_TREE.
5993 If this call to "operator delete" is being generated as part to
5994 deallocate memory allocated via a new-expression (as per [expr.new]
5995 which requires that if the initialization throws an exception then
5996 we call a deallocation function), then ALLOC_FN is the allocation
5997 function. */
5999 tree
6000 build_op_delete_call (enum tree_code code, tree addr, tree size,
6001 bool global_p, tree placement,
6002 tree alloc_fn, tsubst_flags_t complain)
6004 tree fn = NULL_TREE;
6005 tree fns, fnname, type, t;
6007 if (addr == error_mark_node)
6008 return error_mark_node;
6010 type = strip_array_types (TREE_TYPE (TREE_TYPE (addr)));
6012 fnname = ansi_opname (code);
6014 if (CLASS_TYPE_P (type)
6015 && COMPLETE_TYPE_P (complete_type (type))
6016 && !global_p)
6017 /* In [class.free]
6019 If the result of the lookup is ambiguous or inaccessible, or if
6020 the lookup selects a placement deallocation function, the
6021 program is ill-formed.
6023 Therefore, we ask lookup_fnfields to complain about ambiguity. */
6025 fns = lookup_fnfields (TYPE_BINFO (type), fnname, 1);
6026 if (fns == error_mark_node)
6027 return error_mark_node;
6029 else
6030 fns = NULL_TREE;
6032 if (fns == NULL_TREE)
6033 fns = lookup_name_nonclass (fnname);
6035 /* Strip const and volatile from addr. */
6036 addr = cp_convert (ptr_type_node, addr, complain);
6038 if (placement)
6040 /* "A declaration of a placement deallocation function matches the
6041 declaration of a placement allocation function if it has the same
6042 number of parameters and, after parameter transformations (8.3.5),
6043 all parameter types except the first are identical."
6045 So we build up the function type we want and ask instantiate_type
6046 to get it for us. */
6047 t = FUNCTION_ARG_CHAIN (alloc_fn);
6048 t = tree_cons (NULL_TREE, ptr_type_node, t);
6049 t = build_function_type (void_type_node, t);
6051 fn = instantiate_type (t, fns, tf_none);
6052 if (fn == error_mark_node)
6053 return NULL_TREE;
6055 if (BASELINK_P (fn))
6056 fn = BASELINK_FUNCTIONS (fn);
6058 /* "If the lookup finds the two-parameter form of a usual deallocation
6059 function (3.7.4.2) and that function, considered as a placement
6060 deallocation function, would have been selected as a match for the
6061 allocation function, the program is ill-formed." */
6062 if (second_parm_is_size_t (fn))
6064 const char *msg1
6065 = G_("exception cleanup for this placement new selects "
6066 "non-placement operator delete");
6067 const char *msg2
6068 = G_("%qD is a usual (non-placement) deallocation "
6069 "function in C++14 (or with -fsized-deallocation)");
6071 /* But if the class has an operator delete (void *), then that is
6072 the usual deallocation function, so we shouldn't complain
6073 about using the operator delete (void *, size_t). */
6074 if (DECL_CLASS_SCOPE_P (fn))
6075 for (t = BASELINK_P (fns) ? BASELINK_FUNCTIONS (fns) : fns;
6076 t; t = OVL_NEXT (t))
6078 tree elt = OVL_CURRENT (t);
6079 if (non_placement_deallocation_fn_p (elt)
6080 && FUNCTION_ARG_CHAIN (elt) == void_list_node)
6081 goto ok;
6083 /* Before C++14 a two-parameter global deallocation function is
6084 always a placement deallocation function, but warn if
6085 -Wc++14-compat. */
6086 else if (!flag_sized_deallocation)
6088 if ((complain & tf_warning)
6089 && warning (OPT_Wc__14_compat, msg1))
6090 inform (DECL_SOURCE_LOCATION (fn), msg2, fn);
6091 goto ok;
6094 if (complain & tf_warning_or_error)
6096 if (permerror (input_location, msg1))
6098 /* Only mention C++14 for namespace-scope delete. */
6099 if (DECL_NAMESPACE_SCOPE_P (fn))
6100 inform (DECL_SOURCE_LOCATION (fn), msg2, fn);
6101 else
6102 inform (DECL_SOURCE_LOCATION (fn),
6103 "%qD is a usual (non-placement) deallocation "
6104 "function", fn);
6107 else
6108 return error_mark_node;
6109 ok:;
6112 else
6113 /* "Any non-placement deallocation function matches a non-placement
6114 allocation function. If the lookup finds a single matching
6115 deallocation function, that function will be called; otherwise, no
6116 deallocation function will be called." */
6117 for (t = BASELINK_P (fns) ? BASELINK_FUNCTIONS (fns) : fns;
6118 t; t = OVL_NEXT (t))
6120 tree elt = OVL_CURRENT (t);
6121 if (non_placement_deallocation_fn_p (elt))
6123 fn = elt;
6124 /* "If a class T has a member deallocation function named
6125 operator delete with exactly one parameter, then that
6126 function is a usual (non-placement) deallocation
6127 function. If class T does not declare such an operator
6128 delete but does declare a member deallocation function named
6129 operator delete with exactly two parameters, the second of
6130 which has type std::size_t (18.2), then this function is a
6131 usual deallocation function."
6133 So in a class (void*) beats (void*, size_t). */
6134 if (DECL_CLASS_SCOPE_P (fn))
6136 if (FUNCTION_ARG_CHAIN (fn) == void_list_node)
6137 break;
6139 /* At global scope (in C++14 and above) the rules are different:
6141 If deallocation function lookup finds both a usual
6142 deallocation function with only a pointer parameter and a
6143 usual deallocation function with both a pointer parameter
6144 and a size parameter, the function to be called is selected
6145 as follows:
6147 * If the type is complete and if, for the second alternative
6148 (delete array) only, the operand is a pointer to a class
6149 type with a non-trivial destructor or a (possibly
6150 multi-dimensional) array thereof, the function with two
6151 parameters is selected.
6153 * Otherwise, it is unspecified which of the two deallocation
6154 functions is selected. */
6155 else
6157 bool want_size = COMPLETE_TYPE_P (type);
6158 if (code == VEC_DELETE_EXPR
6159 && !TYPE_VEC_NEW_USES_COOKIE (type))
6160 /* We need a cookie to determine the array size. */
6161 want_size = false;
6162 bool have_size = (FUNCTION_ARG_CHAIN (fn) != void_list_node);
6163 if (want_size == have_size)
6164 break;
6169 /* If we have a matching function, call it. */
6170 if (fn)
6172 gcc_assert (TREE_CODE (fn) == FUNCTION_DECL);
6174 /* If the FN is a member function, make sure that it is
6175 accessible. */
6176 if (BASELINK_P (fns))
6177 perform_or_defer_access_check (BASELINK_BINFO (fns), fn, fn,
6178 complain);
6180 /* Core issue 901: It's ok to new a type with deleted delete. */
6181 if (DECL_DELETED_FN (fn) && alloc_fn)
6182 return NULL_TREE;
6184 if (placement)
6186 /* The placement args might not be suitable for overload
6187 resolution at this point, so build the call directly. */
6188 int nargs = call_expr_nargs (placement);
6189 tree *argarray = XALLOCAVEC (tree, nargs);
6190 int i;
6191 argarray[0] = addr;
6192 for (i = 1; i < nargs; i++)
6193 argarray[i] = CALL_EXPR_ARG (placement, i);
6194 if (!mark_used (fn, complain) && !(complain & tf_error))
6195 return error_mark_node;
6196 return build_cxx_call (fn, nargs, argarray, complain);
6198 else
6200 tree ret;
6201 vec<tree, va_gc> *args = make_tree_vector ();
6202 args->quick_push (addr);
6203 if (FUNCTION_ARG_CHAIN (fn) != void_list_node)
6204 args->quick_push (size);
6205 ret = cp_build_function_call_vec (fn, &args, complain);
6206 release_tree_vector (args);
6207 return ret;
6211 /* [expr.new]
6213 If no unambiguous matching deallocation function can be found,
6214 propagating the exception does not cause the object's memory to
6215 be freed. */
6216 if (alloc_fn)
6218 if ((complain & tf_warning)
6219 && !placement)
6220 warning (0, "no corresponding deallocation function for %qD",
6221 alloc_fn);
6222 return NULL_TREE;
6225 if (complain & tf_error)
6226 error ("no suitable %<operator %s%> for %qT",
6227 operator_name_info[(int)code].name, type);
6228 return error_mark_node;
6231 /* If the current scope isn't allowed to access DECL along
6232 BASETYPE_PATH, give an error. The most derived class in
6233 BASETYPE_PATH is the one used to qualify DECL. DIAG_DECL is
6234 the declaration to use in the error diagnostic. */
6236 bool
6237 enforce_access (tree basetype_path, tree decl, tree diag_decl,
6238 tsubst_flags_t complain)
6240 gcc_assert (TREE_CODE (basetype_path) == TREE_BINFO);
6242 if (!accessible_p (basetype_path, decl, true))
6244 if (complain & tf_error)
6246 if (TREE_PRIVATE (decl))
6248 error ("%q#D is private within this context", diag_decl);
6249 inform (DECL_SOURCE_LOCATION (diag_decl),
6250 "declared private here");
6252 else if (TREE_PROTECTED (decl))
6254 error ("%q#D is protected within this context", diag_decl);
6255 inform (DECL_SOURCE_LOCATION (diag_decl),
6256 "declared protected here");
6258 else
6260 error ("%q#D is inaccessible within this context", diag_decl);
6261 inform (DECL_SOURCE_LOCATION (diag_decl), "declared here");
6264 return false;
6267 return true;
6270 /* Initialize a temporary of type TYPE with EXPR. The FLAGS are a
6271 bitwise or of LOOKUP_* values. If any errors are warnings are
6272 generated, set *DIAGNOSTIC_FN to "error" or "warning",
6273 respectively. If no diagnostics are generated, set *DIAGNOSTIC_FN
6274 to NULL. */
6276 static tree
6277 build_temp (tree expr, tree type, int flags,
6278 diagnostic_t *diagnostic_kind, tsubst_flags_t complain)
6280 int savew, savee;
6281 vec<tree, va_gc> *args;
6283 savew = warningcount + werrorcount, savee = errorcount;
6284 args = make_tree_vector_single (expr);
6285 expr = build_special_member_call (NULL_TREE, complete_ctor_identifier,
6286 &args, type, flags, complain);
6287 release_tree_vector (args);
6288 if (warningcount + werrorcount > savew)
6289 *diagnostic_kind = DK_WARNING;
6290 else if (errorcount > savee)
6291 *diagnostic_kind = DK_ERROR;
6292 else
6293 *diagnostic_kind = DK_UNSPECIFIED;
6294 return expr;
6297 /* Perform warnings about peculiar, but valid, conversions from/to NULL.
6298 EXPR is implicitly converted to type TOTYPE.
6299 FN and ARGNUM are used for diagnostics. */
6301 static void
6302 conversion_null_warnings (tree totype, tree expr, tree fn, int argnum)
6304 /* Issue warnings about peculiar, but valid, uses of NULL. */
6305 if (expr == null_node && TREE_CODE (totype) != BOOLEAN_TYPE
6306 && ARITHMETIC_TYPE_P (totype))
6308 source_location loc =
6309 expansion_point_location_if_in_system_header (input_location);
6311 if (fn)
6312 warning_at (loc, OPT_Wconversion_null,
6313 "passing NULL to non-pointer argument %P of %qD",
6314 argnum, fn);
6315 else
6316 warning_at (loc, OPT_Wconversion_null,
6317 "converting to non-pointer type %qT from NULL", totype);
6320 /* Issue warnings if "false" is converted to a NULL pointer */
6321 else if (TREE_CODE (TREE_TYPE (expr)) == BOOLEAN_TYPE
6322 && TYPE_PTR_P (totype))
6324 if (fn)
6325 warning_at (input_location, OPT_Wconversion_null,
6326 "converting %<false%> to pointer type for argument %P "
6327 "of %qD", argnum, fn);
6328 else
6329 warning_at (input_location, OPT_Wconversion_null,
6330 "converting %<false%> to pointer type %qT", totype);
6334 /* We gave a diagnostic during a conversion. If this was in the second
6335 standard conversion sequence of a user-defined conversion sequence, say
6336 which user-defined conversion. */
6338 static void
6339 maybe_print_user_conv_context (conversion *convs)
6341 if (convs->user_conv_p)
6342 for (conversion *t = convs; t; t = next_conversion (t))
6343 if (t->kind == ck_user)
6345 print_z_candidate (0, " after user-defined conversion:",
6346 t->cand);
6347 break;
6351 /* Perform the conversions in CONVS on the expression EXPR. FN and
6352 ARGNUM are used for diagnostics. ARGNUM is zero based, -1
6353 indicates the `this' argument of a method. INNER is nonzero when
6354 being called to continue a conversion chain. It is negative when a
6355 reference binding will be applied, positive otherwise. If
6356 ISSUE_CONVERSION_WARNINGS is true, warnings about suspicious
6357 conversions will be emitted if appropriate. If C_CAST_P is true,
6358 this conversion is coming from a C-style cast; in that case,
6359 conversions to inaccessible bases are permitted. */
6361 static tree
6362 convert_like_real (conversion *convs, tree expr, tree fn, int argnum,
6363 int inner, bool issue_conversion_warnings,
6364 bool c_cast_p, tsubst_flags_t complain)
6366 tree totype = convs->type;
6367 diagnostic_t diag_kind;
6368 int flags;
6369 location_t loc = EXPR_LOC_OR_LOC (expr, input_location);
6371 if (convs->bad_p && !(complain & tf_error))
6372 return error_mark_node;
6374 if (convs->bad_p
6375 && convs->kind != ck_user
6376 && convs->kind != ck_list
6377 && convs->kind != ck_ambig
6378 && (convs->kind != ck_ref_bind
6379 || (convs->user_conv_p && next_conversion (convs)->bad_p))
6380 && (convs->kind != ck_rvalue
6381 || SCALAR_TYPE_P (totype))
6382 && convs->kind != ck_base)
6384 bool complained = false;
6385 conversion *t = convs;
6387 /* Give a helpful error if this is bad because of excess braces. */
6388 if (BRACE_ENCLOSED_INITIALIZER_P (expr)
6389 && SCALAR_TYPE_P (totype)
6390 && CONSTRUCTOR_NELTS (expr) > 0
6391 && BRACE_ENCLOSED_INITIALIZER_P (CONSTRUCTOR_ELT (expr, 0)->value))
6393 complained = permerror (loc, "too many braces around initializer "
6394 "for %qT", totype);
6395 while (BRACE_ENCLOSED_INITIALIZER_P (expr)
6396 && CONSTRUCTOR_NELTS (expr) == 1)
6397 expr = CONSTRUCTOR_ELT (expr, 0)->value;
6400 /* Give a helpful error if this is bad because a conversion to bool
6401 from std::nullptr_t requires direct-initialization. */
6402 if (NULLPTR_TYPE_P (TREE_TYPE (expr))
6403 && TREE_CODE (totype) == BOOLEAN_TYPE)
6404 complained = permerror (loc, "converting to %qT from %qT requires "
6405 "direct-initialization",
6406 totype, TREE_TYPE (expr));
6408 for (; t ; t = next_conversion (t))
6410 if (t->kind == ck_user && t->cand->reason)
6412 complained = permerror (loc, "invalid user-defined conversion "
6413 "from %qT to %qT", TREE_TYPE (expr),
6414 totype);
6415 if (complained)
6416 print_z_candidate (loc, "candidate is:", t->cand);
6417 expr = convert_like_real (t, expr, fn, argnum, 1,
6418 /*issue_conversion_warnings=*/false,
6419 /*c_cast_p=*/false,
6420 complain);
6421 if (convs->kind == ck_ref_bind)
6422 expr = convert_to_reference (totype, expr, CONV_IMPLICIT,
6423 LOOKUP_NORMAL, NULL_TREE,
6424 complain);
6425 else
6426 expr = cp_convert (totype, expr, complain);
6427 if (complained && fn)
6428 inform (DECL_SOURCE_LOCATION (fn),
6429 " initializing argument %P of %qD", argnum, fn);
6430 return expr;
6432 else if (t->kind == ck_user || !t->bad_p)
6434 expr = convert_like_real (t, expr, fn, argnum, 1,
6435 /*issue_conversion_warnings=*/false,
6436 /*c_cast_p=*/false,
6437 complain);
6438 break;
6440 else if (t->kind == ck_ambig)
6441 return convert_like_real (t, expr, fn, argnum, 1,
6442 /*issue_conversion_warnings=*/false,
6443 /*c_cast_p=*/false,
6444 complain);
6445 else if (t->kind == ck_identity)
6446 break;
6448 if (!complained)
6449 complained = permerror (loc, "invalid conversion from %qT to %qT",
6450 TREE_TYPE (expr), totype);
6451 if (complained && fn)
6452 inform (DECL_SOURCE_LOCATION (fn),
6453 " initializing argument %P of %qD", argnum, fn);
6455 return cp_convert (totype, expr, complain);
6458 if (issue_conversion_warnings && (complain & tf_warning))
6459 conversion_null_warnings (totype, expr, fn, argnum);
6461 switch (convs->kind)
6463 case ck_user:
6465 struct z_candidate *cand = convs->cand;
6466 tree convfn = cand->fn;
6467 unsigned i;
6469 /* When converting from an init list we consider explicit
6470 constructors, but actually trying to call one is an error. */
6471 if (DECL_NONCONVERTING_P (convfn) && DECL_CONSTRUCTOR_P (convfn)
6472 && BRACE_ENCLOSED_INITIALIZER_P (expr)
6473 /* Unless this is for direct-list-initialization. */
6474 && !CONSTRUCTOR_IS_DIRECT_INIT (expr)
6475 /* And in C++98 a default constructor can't be explicit. */
6476 && cxx_dialect >= cxx11)
6478 if (!(complain & tf_error))
6479 return error_mark_node;
6480 location_t loc = location_of (expr);
6481 if (CONSTRUCTOR_NELTS (expr) == 0
6482 && FUNCTION_FIRST_USER_PARMTYPE (convfn) != void_list_node)
6484 if (pedwarn (loc, 0, "converting to %qT from initializer list "
6485 "would use explicit constructor %qD",
6486 totype, convfn))
6487 inform (loc, "in C++11 and above a default constructor "
6488 "can be explicit");
6490 else
6491 error ("converting to %qT from initializer list would use "
6492 "explicit constructor %qD", totype, convfn);
6495 /* If we're initializing from {}, it's value-initialization. */
6496 if (BRACE_ENCLOSED_INITIALIZER_P (expr)
6497 && CONSTRUCTOR_NELTS (expr) == 0
6498 && TYPE_HAS_DEFAULT_CONSTRUCTOR (totype))
6500 bool direct = CONSTRUCTOR_IS_DIRECT_INIT (expr);
6501 expr = build_value_init (totype, complain);
6502 expr = get_target_expr_sfinae (expr, complain);
6503 if (expr != error_mark_node)
6505 TARGET_EXPR_LIST_INIT_P (expr) = true;
6506 TARGET_EXPR_DIRECT_INIT_P (expr) = direct;
6508 return expr;
6511 expr = mark_rvalue_use (expr);
6513 /* Set user_conv_p on the argument conversions, so rvalue/base
6514 handling knows not to allow any more UDCs. */
6515 for (i = 0; i < cand->num_convs; ++i)
6516 cand->convs[i]->user_conv_p = true;
6518 expr = build_over_call (cand, LOOKUP_NORMAL, complain);
6520 /* If this is a constructor or a function returning an aggr type,
6521 we need to build up a TARGET_EXPR. */
6522 if (DECL_CONSTRUCTOR_P (convfn))
6524 expr = build_cplus_new (totype, expr, complain);
6526 /* Remember that this was list-initialization. */
6527 if (convs->check_narrowing && expr != error_mark_node)
6528 TARGET_EXPR_LIST_INIT_P (expr) = true;
6531 return expr;
6533 case ck_identity:
6534 if (BRACE_ENCLOSED_INITIALIZER_P (expr))
6536 int nelts = CONSTRUCTOR_NELTS (expr);
6537 if (nelts == 0)
6538 expr = build_value_init (totype, complain);
6539 else if (nelts == 1)
6540 expr = CONSTRUCTOR_ELT (expr, 0)->value;
6541 else
6542 gcc_unreachable ();
6544 expr = mark_rvalue_use (expr);
6546 if (type_unknown_p (expr))
6547 expr = instantiate_type (totype, expr, complain);
6548 /* Convert a constant to its underlying value, unless we are
6549 about to bind it to a reference, in which case we need to
6550 leave it as an lvalue. */
6551 if (inner >= 0)
6553 expr = scalar_constant_value (expr);
6554 if (expr == null_node && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (totype))
6555 /* If __null has been converted to an integer type, we do not
6556 want to warn about uses of EXPR as an integer, rather than
6557 as a pointer. */
6558 expr = build_int_cst (totype, 0);
6560 return expr;
6561 case ck_ambig:
6562 /* We leave bad_p off ck_ambig because overload resolution considers
6563 it valid, it just fails when we try to perform it. So we need to
6564 check complain here, too. */
6565 if (complain & tf_error)
6567 /* Call build_user_type_conversion again for the error. */
6568 build_user_type_conversion (totype, convs->u.expr, LOOKUP_NORMAL,
6569 complain);
6570 if (fn)
6571 inform (DECL_SOURCE_LOCATION (fn),
6572 " initializing argument %P of %qD", argnum, fn);
6574 return error_mark_node;
6576 case ck_list:
6578 /* Conversion to std::initializer_list<T>. */
6579 tree elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (totype), 0);
6580 tree new_ctor = build_constructor (init_list_type_node, NULL);
6581 unsigned len = CONSTRUCTOR_NELTS (expr);
6582 tree array, val, field;
6583 vec<constructor_elt, va_gc> *vec = NULL;
6584 unsigned ix;
6586 /* Convert all the elements. */
6587 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expr), ix, val)
6589 tree sub = convert_like_real (convs->u.list[ix], val, fn, argnum,
6590 1, false, false, complain);
6591 if (sub == error_mark_node)
6592 return sub;
6593 if (!BRACE_ENCLOSED_INITIALIZER_P (val)
6594 && !check_narrowing (TREE_TYPE (sub), val, complain))
6595 return error_mark_node;
6596 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_ctor), NULL_TREE, sub);
6597 if (!TREE_CONSTANT (sub))
6598 TREE_CONSTANT (new_ctor) = false;
6600 /* Build up the array. */
6601 elttype = cp_build_qualified_type
6602 (elttype, cp_type_quals (elttype) | TYPE_QUAL_CONST);
6603 array = build_array_of_n_type (elttype, len);
6604 array = finish_compound_literal (array, new_ctor, complain);
6605 /* Take the address explicitly rather than via decay_conversion
6606 to avoid the error about taking the address of a temporary. */
6607 array = cp_build_addr_expr (array, complain);
6608 array = cp_convert (build_pointer_type (elttype), array, complain);
6609 if (array == error_mark_node)
6610 return error_mark_node;
6612 /* Build up the initializer_list object. */
6613 totype = complete_type (totype);
6614 field = next_initializable_field (TYPE_FIELDS (totype));
6615 CONSTRUCTOR_APPEND_ELT (vec, field, array);
6616 field = next_initializable_field (DECL_CHAIN (field));
6617 CONSTRUCTOR_APPEND_ELT (vec, field, size_int (len));
6618 new_ctor = build_constructor (totype, vec);
6619 return get_target_expr_sfinae (new_ctor, complain);
6622 case ck_aggr:
6623 if (TREE_CODE (totype) == COMPLEX_TYPE)
6625 tree real = CONSTRUCTOR_ELT (expr, 0)->value;
6626 tree imag = CONSTRUCTOR_ELT (expr, 1)->value;
6627 real = perform_implicit_conversion (TREE_TYPE (totype),
6628 real, complain);
6629 imag = perform_implicit_conversion (TREE_TYPE (totype),
6630 imag, complain);
6631 expr = build2 (COMPLEX_EXPR, totype, real, imag);
6632 return expr;
6634 expr = reshape_init (totype, expr, complain);
6635 expr = get_target_expr_sfinae (digest_init (totype, expr, complain),
6636 complain);
6637 if (expr != error_mark_node)
6638 TARGET_EXPR_LIST_INIT_P (expr) = true;
6639 return expr;
6641 default:
6642 break;
6645 expr = convert_like_real (next_conversion (convs), expr, fn, argnum,
6646 convs->kind == ck_ref_bind ? -1 : 1,
6647 convs->kind == ck_ref_bind ? issue_conversion_warnings : false,
6648 c_cast_p,
6649 complain);
6650 if (expr == error_mark_node)
6651 return error_mark_node;
6653 switch (convs->kind)
6655 case ck_rvalue:
6656 expr = decay_conversion (expr, complain);
6657 if (expr == error_mark_node)
6659 if (complain & tf_error)
6661 maybe_print_user_conv_context (convs);
6662 if (fn)
6663 inform (DECL_SOURCE_LOCATION (fn),
6664 " initializing argument %P of %qD", argnum, fn);
6666 return error_mark_node;
6669 if (! MAYBE_CLASS_TYPE_P (totype))
6670 return expr;
6671 /* Fall through. */
6672 case ck_base:
6673 if (convs->kind == ck_base && !convs->need_temporary_p)
6675 /* We are going to bind a reference directly to a base-class
6676 subobject of EXPR. */
6677 /* Build an expression for `*((base*) &expr)'. */
6678 expr = convert_to_base (expr, totype,
6679 !c_cast_p, /*nonnull=*/true, complain);
6680 return expr;
6683 /* Copy-initialization where the cv-unqualified version of the source
6684 type is the same class as, or a derived class of, the class of the
6685 destination [is treated as direct-initialization]. [dcl.init] */
6686 flags = LOOKUP_NORMAL;
6687 if (convs->user_conv_p)
6688 /* This conversion is being done in the context of a user-defined
6689 conversion (i.e. the second step of copy-initialization), so
6690 don't allow any more. */
6691 flags |= LOOKUP_NO_CONVERSION;
6692 else
6693 flags |= LOOKUP_ONLYCONVERTING;
6694 if (convs->rvaluedness_matches_p)
6695 flags |= LOOKUP_PREFER_RVALUE;
6696 if (TREE_CODE (expr) == TARGET_EXPR
6697 && TARGET_EXPR_LIST_INIT_P (expr))
6698 /* Copy-list-initialization doesn't actually involve a copy. */
6699 return expr;
6700 expr = build_temp (expr, totype, flags, &diag_kind, complain);
6701 if (diag_kind && complain)
6703 maybe_print_user_conv_context (convs);
6704 if (fn)
6705 inform (DECL_SOURCE_LOCATION (fn),
6706 " initializing argument %P of %qD", argnum, fn);
6709 return build_cplus_new (totype, expr, complain);
6711 case ck_ref_bind:
6713 tree ref_type = totype;
6715 if (convs->bad_p && !next_conversion (convs)->bad_p)
6717 tree extype = TREE_TYPE (expr);
6718 if (TYPE_REF_IS_RVALUE (ref_type)
6719 && lvalue_p (expr))
6720 error_at (loc, "cannot bind rvalue reference of type %qT to "
6721 "lvalue of type %qT", totype, extype);
6722 else if (!TYPE_REF_IS_RVALUE (ref_type) && !lvalue_p (expr)
6723 && !CP_TYPE_CONST_NON_VOLATILE_P (TREE_TYPE (ref_type)))
6724 error_at (loc, "cannot bind non-const lvalue reference of "
6725 "type %qT to an rvalue of type %qT", totype, extype);
6726 else if (!reference_compatible_p (TREE_TYPE (totype), extype))
6727 error_at (loc, "binding reference of type %qT to %qT "
6728 "discards qualifiers", totype, extype);
6729 else
6730 gcc_unreachable ();
6731 maybe_print_user_conv_context (convs);
6732 if (fn)
6733 inform (DECL_SOURCE_LOCATION (fn),
6734 " initializing argument %P of %qD", argnum, fn);
6735 return error_mark_node;
6738 /* If necessary, create a temporary.
6740 VA_ARG_EXPR and CONSTRUCTOR expressions are special cases
6741 that need temporaries, even when their types are reference
6742 compatible with the type of reference being bound, so the
6743 upcoming call to cp_build_addr_expr doesn't fail. */
6744 if (convs->need_temporary_p
6745 || TREE_CODE (expr) == CONSTRUCTOR
6746 || TREE_CODE (expr) == VA_ARG_EXPR)
6748 /* Otherwise, a temporary of type "cv1 T1" is created and
6749 initialized from the initializer expression using the rules
6750 for a non-reference copy-initialization (8.5). */
6752 tree type = TREE_TYPE (ref_type);
6753 cp_lvalue_kind lvalue = lvalue_kind (expr);
6755 gcc_assert (same_type_ignoring_top_level_qualifiers_p
6756 (type, next_conversion (convs)->type));
6757 if (!CP_TYPE_CONST_NON_VOLATILE_P (type)
6758 && !TYPE_REF_IS_RVALUE (ref_type))
6760 /* If the reference is volatile or non-const, we
6761 cannot create a temporary. */
6762 if (lvalue & clk_bitfield)
6763 error_at (loc, "cannot bind bitfield %qE to %qT",
6764 expr, ref_type);
6765 else if (lvalue & clk_packed)
6766 error_at (loc, "cannot bind packed field %qE to %qT",
6767 expr, ref_type);
6768 else
6769 error_at (loc, "cannot bind rvalue %qE to %qT",
6770 expr, ref_type);
6771 return error_mark_node;
6773 /* If the source is a packed field, and we must use a copy
6774 constructor, then building the target expr will require
6775 binding the field to the reference parameter to the
6776 copy constructor, and we'll end up with an infinite
6777 loop. If we can use a bitwise copy, then we'll be
6778 OK. */
6779 if ((lvalue & clk_packed)
6780 && CLASS_TYPE_P (type)
6781 && type_has_nontrivial_copy_init (type))
6783 error_at (loc, "cannot bind packed field %qE to %qT",
6784 expr, ref_type);
6785 return error_mark_node;
6787 if (lvalue & clk_bitfield)
6789 expr = convert_bitfield_to_declared_type (expr);
6790 expr = fold_convert (type, expr);
6792 expr = build_target_expr_with_type (expr, type, complain);
6795 /* Take the address of the thing to which we will bind the
6796 reference. */
6797 expr = cp_build_addr_expr (expr, complain);
6798 if (expr == error_mark_node)
6799 return error_mark_node;
6801 /* Convert it to a pointer to the type referred to by the
6802 reference. This will adjust the pointer if a derived to
6803 base conversion is being performed. */
6804 expr = cp_convert (build_pointer_type (TREE_TYPE (ref_type)),
6805 expr, complain);
6806 /* Convert the pointer to the desired reference type. */
6807 return build_nop (ref_type, expr);
6810 case ck_lvalue:
6811 return decay_conversion (expr, complain);
6813 case ck_tsafe:
6814 /* ??? Should the address of a transaction-safe pointer point to the TM
6815 clone, and this conversion look up the primary function? */
6816 return build_nop (totype, expr);
6818 case ck_qual:
6819 /* Warn about deprecated conversion if appropriate. */
6820 string_conv_p (totype, expr, 1);
6821 break;
6823 case ck_ptr:
6824 if (convs->base_p)
6825 expr = convert_to_base (expr, totype, !c_cast_p,
6826 /*nonnull=*/false, complain);
6827 return build_nop (totype, expr);
6829 case ck_pmem:
6830 return convert_ptrmem (totype, expr, /*allow_inverse_p=*/false,
6831 c_cast_p, complain);
6833 default:
6834 break;
6837 if (convs->check_narrowing
6838 && !check_narrowing (totype, expr, complain))
6839 return error_mark_node;
6841 if (issue_conversion_warnings)
6842 expr = cp_convert_and_check (totype, expr, complain);
6843 else
6844 expr = cp_convert (totype, expr, complain);
6846 return expr;
6849 /* ARG is being passed to a varargs function. Perform any conversions
6850 required. Return the converted value. */
6852 tree
6853 convert_arg_to_ellipsis (tree arg, tsubst_flags_t complain)
6855 tree arg_type;
6856 location_t loc = EXPR_LOC_OR_LOC (arg, input_location);
6858 /* [expr.call]
6860 The lvalue-to-rvalue, array-to-pointer, and function-to-pointer
6861 standard conversions are performed. */
6862 arg = decay_conversion (arg, complain);
6863 arg_type = TREE_TYPE (arg);
6864 /* [expr.call]
6866 If the argument has integral or enumeration type that is subject
6867 to the integral promotions (_conv.prom_), or a floating point
6868 type that is subject to the floating point promotion
6869 (_conv.fpprom_), the value of the argument is converted to the
6870 promoted type before the call. */
6871 if (TREE_CODE (arg_type) == REAL_TYPE
6872 && (TYPE_PRECISION (arg_type)
6873 < TYPE_PRECISION (double_type_node))
6874 && !DECIMAL_FLOAT_MODE_P (TYPE_MODE (arg_type)))
6876 if ((complain & tf_warning)
6877 && warn_double_promotion && !c_inhibit_evaluation_warnings)
6878 warning_at (loc, OPT_Wdouble_promotion,
6879 "implicit conversion from %qT to %qT when passing "
6880 "argument to function",
6881 arg_type, double_type_node);
6882 arg = convert_to_real_nofold (double_type_node, arg);
6884 else if (NULLPTR_TYPE_P (arg_type))
6885 arg = null_pointer_node;
6886 else if (INTEGRAL_OR_ENUMERATION_TYPE_P (arg_type))
6888 if (SCOPED_ENUM_P (arg_type))
6890 tree prom = cp_convert (ENUM_UNDERLYING_TYPE (arg_type), arg,
6891 complain);
6892 prom = cp_perform_integral_promotions (prom, complain);
6893 if (abi_version_crosses (6)
6894 && TYPE_MODE (TREE_TYPE (prom)) != TYPE_MODE (arg_type)
6895 && (complain & tf_warning))
6896 warning_at (loc, OPT_Wabi, "scoped enum %qT passed through ... as "
6897 "%qT before -fabi-version=6, %qT after", arg_type,
6898 TREE_TYPE (prom), ENUM_UNDERLYING_TYPE (arg_type));
6899 if (!abi_version_at_least (6))
6900 arg = prom;
6902 else
6903 arg = cp_perform_integral_promotions (arg, complain);
6906 arg = require_complete_type_sfinae (arg, complain);
6907 arg_type = TREE_TYPE (arg);
6909 if (arg != error_mark_node
6910 /* In a template (or ill-formed code), we can have an incomplete type
6911 even after require_complete_type_sfinae, in which case we don't know
6912 whether it has trivial copy or not. */
6913 && COMPLETE_TYPE_P (arg_type))
6915 /* Build up a real lvalue-to-rvalue conversion in case the
6916 copy constructor is trivial but not callable. */
6917 if (!cp_unevaluated_operand && CLASS_TYPE_P (arg_type))
6918 force_rvalue (arg, complain);
6920 /* [expr.call] 5.2.2/7:
6921 Passing a potentially-evaluated argument of class type (Clause 9)
6922 with a non-trivial copy constructor or a non-trivial destructor
6923 with no corresponding parameter is conditionally-supported, with
6924 implementation-defined semantics.
6926 We support it as pass-by-invisible-reference, just like a normal
6927 value parameter.
6929 If the call appears in the context of a sizeof expression,
6930 it is not potentially-evaluated. */
6931 if (cp_unevaluated_operand == 0
6932 && (type_has_nontrivial_copy_init (arg_type)
6933 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (arg_type)))
6935 if (complain & tf_warning)
6936 warning (OPT_Wconditionally_supported,
6937 "passing objects of non-trivially-copyable "
6938 "type %q#T through %<...%> is conditionally supported",
6939 arg_type);
6940 return cp_build_addr_expr (arg, complain);
6944 return arg;
6947 /* va_arg (EXPR, TYPE) is a builtin. Make sure it is not abused. */
6949 tree
6950 build_x_va_arg (source_location loc, tree expr, tree type)
6952 if (processing_template_decl)
6954 tree r = build_min (VA_ARG_EXPR, type, expr);
6955 SET_EXPR_LOCATION (r, loc);
6956 return r;
6959 type = complete_type_or_else (type, NULL_TREE);
6961 if (expr == error_mark_node || !type)
6962 return error_mark_node;
6964 expr = mark_lvalue_use (expr);
6966 if (TREE_CODE (type) == REFERENCE_TYPE)
6968 error ("cannot receive reference type %qT through %<...%>", type);
6969 return error_mark_node;
6972 if (type_has_nontrivial_copy_init (type)
6973 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
6975 /* conditionally-supported behavior [expr.call] 5.2.2/7. Let's treat
6976 it as pass by invisible reference. */
6977 warning_at (loc, OPT_Wconditionally_supported,
6978 "receiving objects of non-trivially-copyable type %q#T "
6979 "through %<...%> is conditionally-supported", type);
6981 tree ref = cp_build_reference_type (type, false);
6982 expr = build_va_arg (loc, expr, ref);
6983 return convert_from_reference (expr);
6986 return build_va_arg (loc, expr, type);
6989 /* TYPE has been given to va_arg. Apply the default conversions which
6990 would have happened when passed via ellipsis. Return the promoted
6991 type, or the passed type if there is no change. */
6993 tree
6994 cxx_type_promotes_to (tree type)
6996 tree promote;
6998 /* Perform the array-to-pointer and function-to-pointer
6999 conversions. */
7000 type = type_decays_to (type);
7002 promote = type_promotes_to (type);
7003 if (same_type_p (type, promote))
7004 promote = type;
7006 return promote;
7009 /* ARG is a default argument expression being passed to a parameter of
7010 the indicated TYPE, which is a parameter to FN. PARMNUM is the
7011 zero-based argument number. Do any required conversions. Return
7012 the converted value. */
7014 static GTY(()) vec<tree, va_gc> *default_arg_context;
7015 void
7016 push_defarg_context (tree fn)
7017 { vec_safe_push (default_arg_context, fn); }
7019 void
7020 pop_defarg_context (void)
7021 { default_arg_context->pop (); }
7023 tree
7024 convert_default_arg (tree type, tree arg, tree fn, int parmnum,
7025 tsubst_flags_t complain)
7027 int i;
7028 tree t;
7030 /* See through clones. */
7031 fn = DECL_ORIGIN (fn);
7033 /* Detect recursion. */
7034 FOR_EACH_VEC_SAFE_ELT (default_arg_context, i, t)
7035 if (t == fn)
7037 if (complain & tf_error)
7038 error ("recursive evaluation of default argument for %q#D", fn);
7039 return error_mark_node;
7042 /* If the ARG is an unparsed default argument expression, the
7043 conversion cannot be performed. */
7044 if (TREE_CODE (arg) == DEFAULT_ARG)
7046 if (complain & tf_error)
7047 error ("call to %qD uses the default argument for parameter %P, which "
7048 "is not yet defined", fn, parmnum);
7049 return error_mark_node;
7052 push_defarg_context (fn);
7054 if (fn && DECL_TEMPLATE_INFO (fn))
7055 arg = tsubst_default_argument (fn, type, arg, complain);
7057 /* Due to:
7059 [dcl.fct.default]
7061 The names in the expression are bound, and the semantic
7062 constraints are checked, at the point where the default
7063 expressions appears.
7065 we must not perform access checks here. */
7066 push_deferring_access_checks (dk_no_check);
7067 /* We must make a copy of ARG, in case subsequent processing
7068 alters any part of it. */
7069 arg = break_out_target_exprs (arg);
7070 arg = convert_for_initialization (0, type, arg, LOOKUP_IMPLICIT,
7071 ICR_DEFAULT_ARGUMENT, fn, parmnum,
7072 complain);
7073 arg = convert_for_arg_passing (type, arg, complain);
7074 pop_deferring_access_checks();
7076 pop_defarg_context ();
7078 return arg;
7081 /* Returns the type which will really be used for passing an argument of
7082 type TYPE. */
7084 tree
7085 type_passed_as (tree type)
7087 /* Pass classes with copy ctors by invisible reference. */
7088 if (TREE_ADDRESSABLE (type))
7090 type = build_reference_type (type);
7091 /* There are no other pointers to this temporary. */
7092 type = cp_build_qualified_type (type, TYPE_QUAL_RESTRICT);
7094 else if (targetm.calls.promote_prototypes (type)
7095 && INTEGRAL_TYPE_P (type)
7096 && COMPLETE_TYPE_P (type)
7097 && tree_int_cst_lt (TYPE_SIZE (type), TYPE_SIZE (integer_type_node)))
7098 type = integer_type_node;
7100 return type;
7103 /* Actually perform the appropriate conversion. */
7105 tree
7106 convert_for_arg_passing (tree type, tree val, tsubst_flags_t complain)
7108 tree bitfield_type;
7110 /* If VAL is a bitfield, then -- since it has already been converted
7111 to TYPE -- it cannot have a precision greater than TYPE.
7113 If it has a smaller precision, we must widen it here. For
7114 example, passing "int f:3;" to a function expecting an "int" will
7115 not result in any conversion before this point.
7117 If the precision is the same we must not risk widening. For
7118 example, the COMPONENT_REF for a 32-bit "long long" bitfield will
7119 often have type "int", even though the C++ type for the field is
7120 "long long". If the value is being passed to a function
7121 expecting an "int", then no conversions will be required. But,
7122 if we call convert_bitfield_to_declared_type, the bitfield will
7123 be converted to "long long". */
7124 bitfield_type = is_bitfield_expr_with_lowered_type (val);
7125 if (bitfield_type
7126 && TYPE_PRECISION (TREE_TYPE (val)) < TYPE_PRECISION (type))
7127 val = convert_to_integer_nofold (TYPE_MAIN_VARIANT (bitfield_type), val);
7129 if (val == error_mark_node)
7131 /* Pass classes with copy ctors by invisible reference. */
7132 else if (TREE_ADDRESSABLE (type))
7133 val = build1 (ADDR_EXPR, build_reference_type (type), val);
7134 else if (targetm.calls.promote_prototypes (type)
7135 && INTEGRAL_TYPE_P (type)
7136 && COMPLETE_TYPE_P (type)
7137 && tree_int_cst_lt (TYPE_SIZE (type), TYPE_SIZE (integer_type_node)))
7138 val = cp_perform_integral_promotions (val, complain);
7139 if ((complain & tf_warning)
7140 && warn_suggest_attribute_format)
7142 tree rhstype = TREE_TYPE (val);
7143 const enum tree_code coder = TREE_CODE (rhstype);
7144 const enum tree_code codel = TREE_CODE (type);
7145 if ((codel == POINTER_TYPE || codel == REFERENCE_TYPE)
7146 && coder == codel
7147 && check_missing_format_attribute (type, rhstype))
7148 warning (OPT_Wsuggest_attribute_format,
7149 "argument of function call might be a candidate for a format attribute");
7151 return val;
7154 /* Returns non-zero iff FN is a function with magic varargs, i.e. ones for
7155 which just decay_conversion or no conversions at all should be done.
7156 This is true for some builtins which don't act like normal functions.
7157 Return 2 if no conversions at all should be done, 1 if just
7158 decay_conversion. Return 3 for special treatment of the 3rd argument
7159 for __builtin_*_overflow_p. */
7162 magic_varargs_p (tree fn)
7164 if (flag_cilkplus && is_cilkplus_reduce_builtin (fn) != BUILT_IN_NONE)
7165 return 2;
7167 if (DECL_BUILT_IN_CLASS (fn) == BUILT_IN_NORMAL)
7168 switch (DECL_FUNCTION_CODE (fn))
7170 case BUILT_IN_CLASSIFY_TYPE:
7171 case BUILT_IN_CONSTANT_P:
7172 case BUILT_IN_NEXT_ARG:
7173 case BUILT_IN_VA_START:
7174 return 1;
7176 case BUILT_IN_ADD_OVERFLOW_P:
7177 case BUILT_IN_SUB_OVERFLOW_P:
7178 case BUILT_IN_MUL_OVERFLOW_P:
7179 return 3;
7181 default:;
7182 return lookup_attribute ("type generic",
7183 TYPE_ATTRIBUTES (TREE_TYPE (fn))) != 0;
7186 return 0;
7189 /* Returns the decl of the dispatcher function if FN is a function version. */
7191 tree
7192 get_function_version_dispatcher (tree fn)
7194 tree dispatcher_decl = NULL;
7196 gcc_assert (TREE_CODE (fn) == FUNCTION_DECL
7197 && DECL_FUNCTION_VERSIONED (fn));
7199 gcc_assert (targetm.get_function_versions_dispatcher);
7200 dispatcher_decl = targetm.get_function_versions_dispatcher (fn);
7202 if (dispatcher_decl == NULL)
7204 error_at (input_location, "use of multiversioned function "
7205 "without a default");
7206 return NULL;
7209 retrofit_lang_decl (dispatcher_decl);
7210 gcc_assert (dispatcher_decl != NULL);
7211 return dispatcher_decl;
7214 /* fn is a function version dispatcher that is marked used. Mark all the
7215 semantically identical function versions it will dispatch as used. */
7217 void
7218 mark_versions_used (tree fn)
7220 struct cgraph_node *node;
7221 struct cgraph_function_version_info *node_v;
7222 struct cgraph_function_version_info *it_v;
7224 gcc_assert (TREE_CODE (fn) == FUNCTION_DECL);
7226 node = cgraph_node::get (fn);
7227 if (node == NULL)
7228 return;
7230 gcc_assert (node->dispatcher_function);
7232 node_v = node->function_version ();
7233 if (node_v == NULL)
7234 return;
7236 /* All semantically identical versions are chained. Traverse and mark each
7237 one of them as used. */
7238 it_v = node_v->next;
7239 while (it_v != NULL)
7241 mark_used (it_v->this_node->decl);
7242 it_v = it_v->next;
7246 /* Build a call to "the copy constructor" for the type of A, even if it
7247 wouldn't be selected by normal overload resolution. Used for
7248 diagnostics. */
7250 static tree
7251 call_copy_ctor (tree a, tsubst_flags_t complain)
7253 tree ctype = TYPE_MAIN_VARIANT (TREE_TYPE (a));
7254 tree binfo = TYPE_BINFO (ctype);
7255 tree copy = get_copy_ctor (ctype, complain);
7256 copy = build_baselink (binfo, binfo, copy, NULL_TREE);
7257 tree ob = build_dummy_object (ctype);
7258 vec<tree, va_gc>* args = make_tree_vector_single (a);
7259 tree r = build_new_method_call (ob, copy, &args, NULL_TREE,
7260 LOOKUP_NORMAL, NULL, complain);
7261 release_tree_vector (args);
7262 return r;
7265 /* Return true iff T refers to a base field. */
7267 static bool
7268 is_base_field_ref (tree t)
7270 STRIP_NOPS (t);
7271 if (TREE_CODE (t) == ADDR_EXPR)
7272 t = TREE_OPERAND (t, 0);
7273 if (TREE_CODE (t) == COMPONENT_REF)
7274 t = TREE_OPERAND (t, 1);
7275 if (TREE_CODE (t) == FIELD_DECL)
7276 return DECL_FIELD_IS_BASE (t);
7277 return false;
7280 /* We can't elide a copy from a function returning by value to a base
7281 subobject, as the callee might clobber tail padding. Return true iff this
7282 could be that case. */
7284 static bool
7285 unsafe_copy_elision_p (tree target, tree exp)
7287 /* Copy elision only happens with a TARGET_EXPR. */
7288 if (TREE_CODE (exp) != TARGET_EXPR)
7289 return false;
7290 tree type = TYPE_MAIN_VARIANT (TREE_TYPE (exp));
7291 /* It's safe to elide the copy for a class with no tail padding. */
7292 if (tree_int_cst_equal (TYPE_SIZE (type), CLASSTYPE_SIZE (type)))
7293 return false;
7294 /* It's safe to elide the copy if we aren't initializing a base object. */
7295 if (!is_base_field_ref (target))
7296 return false;
7297 tree init = TARGET_EXPR_INITIAL (exp);
7298 /* build_compound_expr pushes COMPOUND_EXPR inside TARGET_EXPR. */
7299 while (TREE_CODE (init) == COMPOUND_EXPR)
7300 init = TREE_OPERAND (init, 1);
7301 return (TREE_CODE (init) == AGGR_INIT_EXPR
7302 && !AGGR_INIT_VIA_CTOR_P (init));
7305 /* Subroutine of the various build_*_call functions. Overload resolution
7306 has chosen a winning candidate CAND; build up a CALL_EXPR accordingly.
7307 ARGS is a TREE_LIST of the unconverted arguments to the call. FLAGS is a
7308 bitmask of various LOOKUP_* flags which apply to the call itself. */
7310 static tree
7311 build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain)
7313 tree fn = cand->fn;
7314 const vec<tree, va_gc> *args = cand->args;
7315 tree first_arg = cand->first_arg;
7316 conversion **convs = cand->convs;
7317 conversion *conv;
7318 tree parm = TYPE_ARG_TYPES (TREE_TYPE (fn));
7319 int parmlen;
7320 tree val;
7321 int i = 0;
7322 int j = 0;
7323 unsigned int arg_index = 0;
7324 int is_method = 0;
7325 int nargs;
7326 tree *argarray;
7327 bool already_used = false;
7329 /* In a template, there is no need to perform all of the work that
7330 is normally done. We are only interested in the type of the call
7331 expression, i.e., the return type of the function. Any semantic
7332 errors will be deferred until the template is instantiated. */
7333 if (processing_template_decl)
7335 tree expr, addr;
7336 tree return_type;
7337 const tree *argarray;
7338 unsigned int nargs;
7340 return_type = TREE_TYPE (TREE_TYPE (fn));
7341 nargs = vec_safe_length (args);
7342 if (first_arg == NULL_TREE)
7343 argarray = args->address ();
7344 else
7346 tree *alcarray;
7347 unsigned int ix;
7348 tree arg;
7350 ++nargs;
7351 alcarray = XALLOCAVEC (tree, nargs);
7352 alcarray[0] = build_this (first_arg);
7353 FOR_EACH_VEC_SAFE_ELT (args, ix, arg)
7354 alcarray[ix + 1] = arg;
7355 argarray = alcarray;
7358 addr = build_addr_func (fn, complain);
7359 if (addr == error_mark_node)
7360 return error_mark_node;
7361 expr = build_call_array_loc (input_location, return_type,
7362 addr, nargs, argarray);
7363 if (TREE_THIS_VOLATILE (fn) && cfun)
7364 current_function_returns_abnormally = 1;
7365 return convert_from_reference (expr);
7368 /* Give any warnings we noticed during overload resolution. */
7369 if (cand->warnings && (complain & tf_warning))
7371 struct candidate_warning *w;
7372 for (w = cand->warnings; w; w = w->next)
7373 joust (cand, w->loser, 1, complain);
7376 /* Make =delete work with SFINAE. */
7377 if (DECL_DELETED_FN (fn) && !(complain & tf_error))
7378 return error_mark_node;
7380 if (DECL_FUNCTION_MEMBER_P (fn))
7382 tree access_fn;
7383 /* If FN is a template function, two cases must be considered.
7384 For example:
7386 struct A {
7387 protected:
7388 template <class T> void f();
7390 template <class T> struct B {
7391 protected:
7392 void g();
7394 struct C : A, B<int> {
7395 using A::f; // #1
7396 using B<int>::g; // #2
7399 In case #1 where `A::f' is a member template, DECL_ACCESS is
7400 recorded in the primary template but not in its specialization.
7401 We check access of FN using its primary template.
7403 In case #2, where `B<int>::g' has a DECL_TEMPLATE_INFO simply
7404 because it is a member of class template B, DECL_ACCESS is
7405 recorded in the specialization `B<int>::g'. We cannot use its
7406 primary template because `B<T>::g' and `B<int>::g' may have
7407 different access. */
7408 if (DECL_TEMPLATE_INFO (fn)
7409 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (fn)))
7410 access_fn = DECL_TI_TEMPLATE (fn);
7411 else
7412 access_fn = fn;
7413 if (!perform_or_defer_access_check (cand->access_path, access_fn,
7414 fn, complain))
7415 return error_mark_node;
7418 /* If we're checking for implicit delete, don't bother with argument
7419 conversions. */
7420 if (flags & LOOKUP_SPECULATIVE)
7422 if (DECL_DELETED_FN (fn))
7424 if (complain & tf_error)
7425 mark_used (fn);
7426 return error_mark_node;
7428 if (cand->viable == 1)
7429 return fn;
7430 else if (!(complain & tf_error))
7431 /* Reject bad conversions now. */
7432 return error_mark_node;
7433 /* else continue to get conversion error. */
7436 /* N3276 magic doesn't apply to nested calls. */
7437 int decltype_flag = (complain & tf_decltype);
7438 complain &= ~tf_decltype;
7440 /* Find maximum size of vector to hold converted arguments. */
7441 parmlen = list_length (parm);
7442 nargs = vec_safe_length (args) + (first_arg != NULL_TREE ? 1 : 0);
7443 if (parmlen > nargs)
7444 nargs = parmlen;
7445 argarray = XALLOCAVEC (tree, nargs);
7447 /* The implicit parameters to a constructor are not considered by overload
7448 resolution, and must be of the proper type. */
7449 if (DECL_CONSTRUCTOR_P (fn))
7451 tree object_arg;
7452 if (first_arg != NULL_TREE)
7454 object_arg = first_arg;
7455 first_arg = NULL_TREE;
7457 else
7459 object_arg = (*args)[arg_index];
7460 ++arg_index;
7462 argarray[j++] = build_this (object_arg);
7463 parm = TREE_CHAIN (parm);
7464 /* We should never try to call the abstract constructor. */
7465 gcc_assert (!DECL_HAS_IN_CHARGE_PARM_P (fn));
7467 if (DECL_HAS_VTT_PARM_P (fn))
7469 argarray[j++] = (*args)[arg_index];
7470 ++arg_index;
7471 parm = TREE_CHAIN (parm);
7474 /* Bypass access control for 'this' parameter. */
7475 else if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
7477 tree parmtype = TREE_VALUE (parm);
7478 tree arg = build_this (first_arg != NULL_TREE
7479 ? first_arg
7480 : (*args)[arg_index]);
7481 tree argtype = TREE_TYPE (arg);
7482 tree converted_arg;
7483 tree base_binfo;
7485 if (convs[i]->bad_p)
7487 if (complain & tf_error)
7489 if (permerror (input_location, "passing %qT as %<this%> "
7490 "argument discards qualifiers",
7491 TREE_TYPE (argtype)))
7492 inform (DECL_SOURCE_LOCATION (fn), " in call to %qD", fn);
7494 else
7495 return error_mark_node;
7498 /* See if the function member or the whole class type is declared
7499 final and the call can be devirtualized. */
7500 if (DECL_FINAL_P (fn)
7501 || CLASSTYPE_FINAL (TYPE_METHOD_BASETYPE (TREE_TYPE (fn))))
7502 flags |= LOOKUP_NONVIRTUAL;
7504 /* [class.mfct.nonstatic]: If a nonstatic member function of a class
7505 X is called for an object that is not of type X, or of a type
7506 derived from X, the behavior is undefined.
7508 So we can assume that anything passed as 'this' is non-null, and
7509 optimize accordingly. */
7510 gcc_assert (TYPE_PTR_P (parmtype));
7511 /* Convert to the base in which the function was declared. */
7512 gcc_assert (cand->conversion_path != NULL_TREE);
7513 converted_arg = build_base_path (PLUS_EXPR,
7514 arg,
7515 cand->conversion_path,
7516 1, complain);
7517 /* Check that the base class is accessible. */
7518 if (!accessible_base_p (TREE_TYPE (argtype),
7519 BINFO_TYPE (cand->conversion_path), true))
7521 if (complain & tf_error)
7522 error ("%qT is not an accessible base of %qT",
7523 BINFO_TYPE (cand->conversion_path),
7524 TREE_TYPE (argtype));
7525 else
7526 return error_mark_node;
7528 /* If fn was found by a using declaration, the conversion path
7529 will be to the derived class, not the base declaring fn. We
7530 must convert from derived to base. */
7531 base_binfo = lookup_base (TREE_TYPE (TREE_TYPE (converted_arg)),
7532 TREE_TYPE (parmtype), ba_unique,
7533 NULL, complain);
7534 converted_arg = build_base_path (PLUS_EXPR, converted_arg,
7535 base_binfo, 1, complain);
7537 argarray[j++] = converted_arg;
7538 parm = TREE_CHAIN (parm);
7539 if (first_arg != NULL_TREE)
7540 first_arg = NULL_TREE;
7541 else
7542 ++arg_index;
7543 ++i;
7544 is_method = 1;
7547 gcc_assert (first_arg == NULL_TREE);
7548 for (; arg_index < vec_safe_length (args) && parm;
7549 parm = TREE_CHAIN (parm), ++arg_index, ++i)
7551 tree type = TREE_VALUE (parm);
7552 tree arg = (*args)[arg_index];
7553 bool conversion_warning = true;
7555 conv = convs[i];
7557 /* If the argument is NULL and used to (implicitly) instantiate a
7558 template function (and bind one of the template arguments to
7559 the type of 'long int'), we don't want to warn about passing NULL
7560 to non-pointer argument.
7561 For example, if we have this template function:
7563 template<typename T> void func(T x) {}
7565 we want to warn (when -Wconversion is enabled) in this case:
7567 void foo() {
7568 func<int>(NULL);
7571 but not in this case:
7573 void foo() {
7574 func(NULL);
7577 if (arg == null_node
7578 && DECL_TEMPLATE_INFO (fn)
7579 && cand->template_decl
7580 && !(flags & LOOKUP_EXPLICIT_TMPL_ARGS))
7581 conversion_warning = false;
7583 /* Warn about initializer_list deduction that isn't currently in the
7584 working draft. */
7585 if (cxx_dialect > cxx98
7586 && flag_deduce_init_list
7587 && cand->template_decl
7588 && is_std_init_list (non_reference (type))
7589 && BRACE_ENCLOSED_INITIALIZER_P (arg))
7591 tree tmpl = TI_TEMPLATE (cand->template_decl);
7592 tree realparm = chain_index (j, DECL_ARGUMENTS (cand->fn));
7593 tree patparm = get_pattern_parm (realparm, tmpl);
7594 tree pattype = TREE_TYPE (patparm);
7595 if (PACK_EXPANSION_P (pattype))
7596 pattype = PACK_EXPANSION_PATTERN (pattype);
7597 pattype = non_reference (pattype);
7599 if (TREE_CODE (pattype) == TEMPLATE_TYPE_PARM
7600 && (cand->explicit_targs == NULL_TREE
7601 || (TREE_VEC_LENGTH (cand->explicit_targs)
7602 <= TEMPLATE_TYPE_IDX (pattype))))
7604 pedwarn (input_location, 0, "deducing %qT as %qT",
7605 non_reference (TREE_TYPE (patparm)),
7606 non_reference (type));
7607 pedwarn (DECL_SOURCE_LOCATION (cand->fn), 0,
7608 " in call to %qD", cand->fn);
7609 pedwarn (input_location, 0,
7610 " (you can disable this with -fno-deduce-init-list)");
7613 val = convert_like_with_context (conv, arg, fn, i - is_method,
7614 conversion_warning
7615 ? complain
7616 : complain & (~tf_warning));
7618 val = convert_for_arg_passing (type, val, complain);
7620 if (val == error_mark_node)
7621 return error_mark_node;
7622 else
7623 argarray[j++] = val;
7626 /* Default arguments */
7627 for (; parm && parm != void_list_node; parm = TREE_CHAIN (parm), i++)
7629 if (TREE_VALUE (parm) == error_mark_node)
7630 return error_mark_node;
7631 argarray[j++] = convert_default_arg (TREE_VALUE (parm),
7632 TREE_PURPOSE (parm),
7633 fn, i - is_method,
7634 complain);
7637 /* Ellipsis */
7638 int magic = magic_varargs_p (fn);
7639 for (; arg_index < vec_safe_length (args); ++arg_index)
7641 tree a = (*args)[arg_index];
7642 if ((magic == 3 && arg_index == 2) || magic == 2)
7644 /* Do no conversions for certain magic varargs. */
7645 a = mark_type_use (a);
7646 if (TREE_CODE (a) == FUNCTION_DECL && reject_gcc_builtin (a))
7647 return error_mark_node;
7649 else if (magic != 0)
7650 /* For other magic varargs only do decay_conversion. */
7651 a = decay_conversion (a, complain);
7652 else if (DECL_CONSTRUCTOR_P (fn)
7653 && same_type_ignoring_top_level_qualifiers_p (DECL_CONTEXT (fn),
7654 TREE_TYPE (a)))
7656 /* Avoid infinite recursion trying to call A(...). */
7657 if (complain & tf_error)
7658 /* Try to call the actual copy constructor for a good error. */
7659 call_copy_ctor (a, complain);
7660 return error_mark_node;
7662 else
7663 a = convert_arg_to_ellipsis (a, complain);
7664 if (a == error_mark_node)
7665 return error_mark_node;
7666 argarray[j++] = a;
7669 gcc_assert (j <= nargs);
7670 nargs = j;
7672 /* Avoid to do argument-transformation, if warnings for format, and for
7673 nonnull are disabled. Just in case that at least one of them is active
7674 the check_function_arguments function might warn about something. */
7676 if (warn_nonnull || warn_format || warn_suggest_attribute_format)
7678 tree *fargs = (!nargs ? argarray
7679 : (tree *) alloca (nargs * sizeof (tree)));
7680 for (j = 0; j < nargs; j++)
7681 fargs[j] = maybe_constant_value (argarray[j]);
7683 check_function_arguments (input_location, TREE_TYPE (fn), nargs, fargs);
7686 /* Avoid actually calling copy constructors and copy assignment operators,
7687 if possible. */
7689 if (! flag_elide_constructors)
7690 /* Do things the hard way. */;
7691 else if (cand->num_convs == 1
7692 && (DECL_COPY_CONSTRUCTOR_P (fn)
7693 || DECL_MOVE_CONSTRUCTOR_P (fn))
7694 /* It's unsafe to elide the constructor when handling
7695 a noexcept-expression, it may evaluate to the wrong
7696 value (c++/53025). */
7697 && cp_noexcept_operand == 0)
7699 tree targ;
7700 tree arg = argarray[num_artificial_parms_for (fn)];
7701 tree fa;
7702 bool trivial = trivial_fn_p (fn);
7704 /* Pull out the real argument, disregarding const-correctness. */
7705 targ = arg;
7706 while (CONVERT_EXPR_P (targ)
7707 || TREE_CODE (targ) == NON_LVALUE_EXPR)
7708 targ = TREE_OPERAND (targ, 0);
7709 if (TREE_CODE (targ) == ADDR_EXPR)
7711 targ = TREE_OPERAND (targ, 0);
7712 if (!same_type_ignoring_top_level_qualifiers_p
7713 (TREE_TYPE (TREE_TYPE (arg)), TREE_TYPE (targ)))
7714 targ = NULL_TREE;
7716 else
7717 targ = NULL_TREE;
7719 if (targ)
7720 arg = targ;
7721 else
7722 arg = cp_build_indirect_ref (arg, RO_NULL, complain);
7724 /* [class.copy]: the copy constructor is implicitly defined even if
7725 the implementation elided its use. */
7726 if (!trivial || DECL_DELETED_FN (fn))
7728 if (!mark_used (fn, complain) && !(complain & tf_error))
7729 return error_mark_node;
7730 already_used = true;
7733 /* If we're creating a temp and we already have one, don't create a
7734 new one. If we're not creating a temp but we get one, use
7735 INIT_EXPR to collapse the temp into our target. Otherwise, if the
7736 ctor is trivial, do a bitwise copy with a simple TARGET_EXPR for a
7737 temp or an INIT_EXPR otherwise. */
7738 fa = argarray[0];
7739 if (is_dummy_object (fa))
7741 if (TREE_CODE (arg) == TARGET_EXPR)
7742 return arg;
7743 else if (trivial)
7744 return force_target_expr (DECL_CONTEXT (fn), arg, complain);
7746 else if ((trivial || TREE_CODE (arg) == TARGET_EXPR)
7747 && !unsafe_copy_elision_p (fa, arg))
7749 tree to = cp_stabilize_reference (cp_build_indirect_ref (fa,
7750 RO_NULL,
7751 complain));
7753 val = build2 (INIT_EXPR, DECL_CONTEXT (fn), to, arg);
7754 return val;
7757 else if (DECL_OVERLOADED_OPERATOR_P (fn) == NOP_EXPR
7758 && trivial_fn_p (fn)
7759 && !DECL_DELETED_FN (fn))
7761 tree to = cp_stabilize_reference
7762 (cp_build_indirect_ref (argarray[0], RO_NULL, complain));
7763 tree type = TREE_TYPE (to);
7764 tree as_base = CLASSTYPE_AS_BASE (type);
7765 tree arg = argarray[1];
7767 if (is_really_empty_class (type))
7769 /* Avoid copying empty classes. */
7770 val = build2 (COMPOUND_EXPR, type, arg, to);
7771 TREE_NO_WARNING (val) = 1;
7773 else if (tree_int_cst_equal (TYPE_SIZE (type), TYPE_SIZE (as_base)))
7775 arg = cp_build_indirect_ref (arg, RO_NULL, complain);
7776 val = build2 (MODIFY_EXPR, TREE_TYPE (to), to, arg);
7778 else
7780 /* We must only copy the non-tail padding parts. */
7781 tree arg0, arg2, t;
7782 tree array_type, alias_set;
7784 arg2 = TYPE_SIZE_UNIT (as_base);
7785 arg0 = cp_build_addr_expr (to, complain);
7787 array_type = build_array_type (char_type_node,
7788 build_index_type
7789 (size_binop (MINUS_EXPR,
7790 arg2, size_int (1))));
7791 alias_set = build_int_cst (build_pointer_type (type), 0);
7792 t = build2 (MODIFY_EXPR, void_type_node,
7793 build2 (MEM_REF, array_type, arg0, alias_set),
7794 build2 (MEM_REF, array_type, arg, alias_set));
7795 val = build2 (COMPOUND_EXPR, TREE_TYPE (to), t, to);
7796 TREE_NO_WARNING (val) = 1;
7799 return val;
7801 else if (DECL_DESTRUCTOR_P (fn)
7802 && trivial_fn_p (fn)
7803 && !DECL_DELETED_FN (fn))
7804 return fold_convert (void_type_node, argarray[0]);
7805 /* FIXME handle trivial default constructor, too. */
7807 /* For calls to a multi-versioned function, overload resolution
7808 returns the function with the highest target priority, that is,
7809 the version that will checked for dispatching first. If this
7810 version is inlinable, a direct call to this version can be made
7811 otherwise the call should go through the dispatcher. */
7813 if (DECL_FUNCTION_VERSIONED (fn)
7814 && (current_function_decl == NULL
7815 || !targetm.target_option.can_inline_p (current_function_decl, fn)))
7817 fn = get_function_version_dispatcher (fn);
7818 if (fn == NULL)
7819 return NULL;
7820 if (!already_used)
7821 mark_versions_used (fn);
7824 if (!already_used
7825 && !mark_used (fn, complain))
7826 return error_mark_node;
7828 if (DECL_VINDEX (fn) && (flags & LOOKUP_NONVIRTUAL) == 0
7829 /* Don't mess with virtual lookup in instantiate_non_dependent_expr;
7830 virtual functions can't be constexpr. */
7831 && !in_template_function ())
7833 tree t;
7834 tree binfo = lookup_base (TREE_TYPE (TREE_TYPE (argarray[0])),
7835 DECL_CONTEXT (fn),
7836 ba_any, NULL, complain);
7837 gcc_assert (binfo && binfo != error_mark_node);
7839 argarray[0] = build_base_path (PLUS_EXPR, argarray[0], binfo, 1,
7840 complain);
7841 if (TREE_SIDE_EFFECTS (argarray[0]))
7842 argarray[0] = save_expr (argarray[0]);
7843 t = build_pointer_type (TREE_TYPE (fn));
7844 if (DECL_CONTEXT (fn) && TYPE_JAVA_INTERFACE (DECL_CONTEXT (fn)))
7845 fn = build_java_interface_fn_ref (fn, argarray[0]);
7846 else
7847 fn = build_vfn_ref (argarray[0], DECL_VINDEX (fn));
7848 TREE_TYPE (fn) = t;
7850 else
7852 fn = build_addr_func (fn, complain);
7853 if (fn == error_mark_node)
7854 return error_mark_node;
7857 tree call = build_cxx_call (fn, nargs, argarray, complain|decltype_flag);
7858 if (call != error_mark_node
7859 && cand->flags & LOOKUP_LIST_INIT_CTOR)
7861 tree c = extract_call_expr (call);
7862 /* build_new_op_1 will clear this when appropriate. */
7863 CALL_EXPR_ORDERED_ARGS (c) = true;
7865 return call;
7868 /* Build and return a call to FN, using NARGS arguments in ARGARRAY.
7869 This function performs no overload resolution, conversion, or other
7870 high-level operations. */
7872 tree
7873 build_cxx_call (tree fn, int nargs, tree *argarray,
7874 tsubst_flags_t complain)
7876 tree fndecl;
7878 /* Remember roughly where this call is. */
7879 location_t loc = EXPR_LOC_OR_LOC (fn, input_location);
7880 fn = build_call_a (fn, nargs, argarray);
7881 SET_EXPR_LOCATION (fn, loc);
7883 fndecl = get_callee_fndecl (fn);
7885 /* Check that arguments to builtin functions match the expectations. */
7886 if (fndecl
7887 && DECL_BUILT_IN (fndecl)
7888 && DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_NORMAL)
7890 int i;
7892 /* We need to take care that values to BUILT_IN_NORMAL
7893 are reduced. */
7894 for (i = 0; i < nargs; i++)
7895 argarray[i] = fold_non_dependent_expr (argarray[i]);
7897 if (!check_builtin_function_arguments (EXPR_LOCATION (fn), vNULL, fndecl,
7898 nargs, argarray))
7899 return error_mark_node;
7902 /* If it is a built-in array notation function, then the return type of
7903 the function is the element type of the array passed in as array
7904 notation (i.e. the first parameter of the function). */
7905 if (flag_cilkplus && TREE_CODE (fn) == CALL_EXPR)
7907 enum built_in_function bif =
7908 is_cilkplus_reduce_builtin (CALL_EXPR_FN (fn));
7909 if (bif == BUILT_IN_CILKPLUS_SEC_REDUCE_ADD
7910 || bif == BUILT_IN_CILKPLUS_SEC_REDUCE_MUL
7911 || bif == BUILT_IN_CILKPLUS_SEC_REDUCE_MAX
7912 || bif == BUILT_IN_CILKPLUS_SEC_REDUCE_MIN
7913 || bif == BUILT_IN_CILKPLUS_SEC_REDUCE
7914 || bif == BUILT_IN_CILKPLUS_SEC_REDUCE_MUTATING)
7916 if (call_expr_nargs (fn) == 0)
7918 error_at (EXPR_LOCATION (fn), "Invalid builtin arguments");
7919 return error_mark_node;
7921 /* for bif == BUILT_IN_CILKPLUS_SEC_REDUCE_ALL_ZERO or
7922 BUILT_IN_CILKPLUS_SEC_REDUCE_ANY_ZERO or
7923 BUILT_IN_CILKPLUS_SEC_REDUCE_ANY_NONZERO or
7924 BUILT_IN_CILKPLUS_SEC_REDUCE_ALL_NONZERO or
7925 BUILT_IN_CILKPLUS_SEC_REDUCE_MIN_IND or
7926 BUILT_IN_CILKPLUS_SEC_REDUCE_MAX_IND
7927 The pre-defined return-type is the correct one. */
7928 tree array_ntn = CALL_EXPR_ARG (fn, 0);
7929 TREE_TYPE (fn) = TREE_TYPE (array_ntn);
7930 return fn;
7934 if (VOID_TYPE_P (TREE_TYPE (fn)))
7935 return fn;
7937 /* 5.2.2/11: If a function call is a prvalue of object type: if the
7938 function call is either the operand of a decltype-specifier or the
7939 right operand of a comma operator that is the operand of a
7940 decltype-specifier, a temporary object is not introduced for the
7941 prvalue. The type of the prvalue may be incomplete. */
7942 if (!(complain & tf_decltype))
7944 fn = require_complete_type_sfinae (fn, complain);
7945 if (fn == error_mark_node)
7946 return error_mark_node;
7948 if (MAYBE_CLASS_TYPE_P (TREE_TYPE (fn)))
7949 fn = build_cplus_new (TREE_TYPE (fn), fn, complain);
7951 return convert_from_reference (fn);
7954 static GTY(()) tree java_iface_lookup_fn;
7956 /* Make an expression which yields the address of the Java interface
7957 method FN. This is achieved by generating a call to libjava's
7958 _Jv_LookupInterfaceMethodIdx(). */
7960 static tree
7961 build_java_interface_fn_ref (tree fn, tree instance)
7963 tree lookup_fn, method, idx;
7964 tree klass_ref, iface, iface_ref;
7965 int i;
7967 if (!java_iface_lookup_fn)
7969 tree ftype = build_function_type_list (ptr_type_node,
7970 ptr_type_node, ptr_type_node,
7971 java_int_type_node, NULL_TREE);
7972 java_iface_lookup_fn
7973 = add_builtin_function ("_Jv_LookupInterfaceMethodIdx", ftype,
7974 0, NOT_BUILT_IN, NULL, NULL_TREE);
7977 /* Look up the pointer to the runtime java.lang.Class object for `instance'.
7978 This is the first entry in the vtable. */
7979 klass_ref = build_vtbl_ref (cp_build_indirect_ref (instance, RO_NULL,
7980 tf_warning_or_error),
7981 integer_zero_node);
7983 /* Get the java.lang.Class pointer for the interface being called. */
7984 iface = DECL_CONTEXT (fn);
7985 iface_ref = lookup_field (iface, get_identifier ("class$"), 0, false);
7986 if (!iface_ref || !VAR_P (iface_ref)
7987 || DECL_CONTEXT (iface_ref) != iface)
7989 error ("could not find class$ field in java interface type %qT",
7990 iface);
7991 return error_mark_node;
7993 iface_ref = build_address (iface_ref);
7994 iface_ref = convert (build_pointer_type (iface), iface_ref);
7996 /* Determine the itable index of FN. */
7997 i = 1;
7998 for (method = TYPE_METHODS (iface); method; method = DECL_CHAIN (method))
8000 if (!DECL_VIRTUAL_P (method))
8001 continue;
8002 if (fn == method)
8003 break;
8004 i++;
8006 idx = build_int_cst (NULL_TREE, i);
8008 lookup_fn = build1 (ADDR_EXPR,
8009 build_pointer_type (TREE_TYPE (java_iface_lookup_fn)),
8010 java_iface_lookup_fn);
8011 return build_call_nary (ptr_type_node, lookup_fn,
8012 3, klass_ref, iface_ref, idx);
8015 /* Returns the value to use for the in-charge parameter when making a
8016 call to a function with the indicated NAME.
8018 FIXME:Can't we find a neater way to do this mapping? */
8020 tree
8021 in_charge_arg_for_name (tree name)
8023 if (name == base_ctor_identifier
8024 || name == base_dtor_identifier)
8025 return integer_zero_node;
8026 else if (name == complete_ctor_identifier)
8027 return integer_one_node;
8028 else if (name == complete_dtor_identifier)
8029 return integer_two_node;
8030 else if (name == deleting_dtor_identifier)
8031 return integer_three_node;
8033 /* This function should only be called with one of the names listed
8034 above. */
8035 gcc_unreachable ();
8036 return NULL_TREE;
8039 /* Build a call to a constructor, destructor, or an assignment
8040 operator for INSTANCE, an expression with class type. NAME
8041 indicates the special member function to call; *ARGS are the
8042 arguments. ARGS may be NULL. This may change ARGS. BINFO
8043 indicates the base of INSTANCE that is to be passed as the `this'
8044 parameter to the member function called.
8046 FLAGS are the LOOKUP_* flags to use when processing the call.
8048 If NAME indicates a complete object constructor, INSTANCE may be
8049 NULL_TREE. In this case, the caller will call build_cplus_new to
8050 store the newly constructed object into a VAR_DECL. */
8052 tree
8053 build_special_member_call (tree instance, tree name, vec<tree, va_gc> **args,
8054 tree binfo, int flags, tsubst_flags_t complain)
8056 tree fns;
8057 /* The type of the subobject to be constructed or destroyed. */
8058 tree class_type;
8059 vec<tree, va_gc> *allocated = NULL;
8060 tree ret;
8062 gcc_assert (name == complete_ctor_identifier
8063 || name == base_ctor_identifier
8064 || name == complete_dtor_identifier
8065 || name == base_dtor_identifier
8066 || name == deleting_dtor_identifier
8067 || name == ansi_assopname (NOP_EXPR));
8068 if (TYPE_P (binfo))
8070 /* Resolve the name. */
8071 if (!complete_type_or_maybe_complain (binfo, NULL_TREE, complain))
8072 return error_mark_node;
8074 binfo = TYPE_BINFO (binfo);
8077 gcc_assert (binfo != NULL_TREE);
8079 class_type = BINFO_TYPE (binfo);
8081 /* Handle the special case where INSTANCE is NULL_TREE. */
8082 if (name == complete_ctor_identifier && !instance)
8083 instance = build_dummy_object (class_type);
8084 else
8086 if (name == complete_dtor_identifier
8087 || name == base_dtor_identifier
8088 || name == deleting_dtor_identifier)
8089 gcc_assert (args == NULL || vec_safe_is_empty (*args));
8091 /* Convert to the base class, if necessary. */
8092 if (!same_type_ignoring_top_level_qualifiers_p
8093 (TREE_TYPE (instance), BINFO_TYPE (binfo)))
8095 if (name != ansi_assopname (NOP_EXPR))
8096 /* For constructors and destructors, either the base is
8097 non-virtual, or it is virtual but we are doing the
8098 conversion from a constructor or destructor for the
8099 complete object. In either case, we can convert
8100 statically. */
8101 instance = convert_to_base_statically (instance, binfo);
8102 else
8103 /* However, for assignment operators, we must convert
8104 dynamically if the base is virtual. */
8105 instance = build_base_path (PLUS_EXPR, instance,
8106 binfo, /*nonnull=*/1, complain);
8110 gcc_assert (instance != NULL_TREE);
8112 fns = lookup_fnfields (binfo, name, 1);
8114 /* When making a call to a constructor or destructor for a subobject
8115 that uses virtual base classes, pass down a pointer to a VTT for
8116 the subobject. */
8117 if ((name == base_ctor_identifier
8118 || name == base_dtor_identifier)
8119 && CLASSTYPE_VBASECLASSES (class_type))
8121 tree vtt;
8122 tree sub_vtt;
8124 /* If the current function is a complete object constructor
8125 or destructor, then we fetch the VTT directly.
8126 Otherwise, we look it up using the VTT we were given. */
8127 vtt = DECL_CHAIN (CLASSTYPE_VTABLES (current_class_type));
8128 vtt = decay_conversion (vtt, complain);
8129 if (vtt == error_mark_node)
8130 return error_mark_node;
8131 vtt = build_if_in_charge (vtt, current_vtt_parm);
8132 if (BINFO_SUBVTT_INDEX (binfo))
8133 sub_vtt = fold_build_pointer_plus (vtt, BINFO_SUBVTT_INDEX (binfo));
8134 else
8135 sub_vtt = vtt;
8137 if (args == NULL)
8139 allocated = make_tree_vector ();
8140 args = &allocated;
8143 vec_safe_insert (*args, 0, sub_vtt);
8146 ret = build_new_method_call (instance, fns, args,
8147 TYPE_BINFO (BINFO_TYPE (binfo)),
8148 flags, /*fn=*/NULL,
8149 complain);
8151 if (allocated != NULL)
8152 release_tree_vector (allocated);
8154 if ((complain & tf_error)
8155 && (flags & LOOKUP_DELEGATING_CONS)
8156 && name == complete_ctor_identifier
8157 && TREE_CODE (ret) == CALL_EXPR
8158 && (DECL_ABSTRACT_ORIGIN (TREE_OPERAND (CALL_EXPR_FN (ret), 0))
8159 == current_function_decl))
8160 error ("constructor delegates to itself");
8162 return ret;
8165 /* Return the NAME, as a C string. The NAME indicates a function that
8166 is a member of TYPE. *FREE_P is set to true if the caller must
8167 free the memory returned.
8169 Rather than go through all of this, we should simply set the names
8170 of constructors and destructors appropriately, and dispense with
8171 ctor_identifier, dtor_identifier, etc. */
8173 static char *
8174 name_as_c_string (tree name, tree type, bool *free_p)
8176 char *pretty_name;
8178 /* Assume that we will not allocate memory. */
8179 *free_p = false;
8180 /* Constructors and destructors are special. */
8181 if (IDENTIFIER_CTOR_OR_DTOR_P (name))
8183 pretty_name
8184 = CONST_CAST (char *, identifier_to_locale (IDENTIFIER_POINTER (constructor_name (type))));
8185 /* For a destructor, add the '~'. */
8186 if (name == complete_dtor_identifier
8187 || name == base_dtor_identifier
8188 || name == deleting_dtor_identifier)
8190 pretty_name = concat ("~", pretty_name, NULL);
8191 /* Remember that we need to free the memory allocated. */
8192 *free_p = true;
8195 else if (IDENTIFIER_TYPENAME_P (name))
8197 pretty_name = concat ("operator ",
8198 type_as_string_translate (TREE_TYPE (name),
8199 TFF_PLAIN_IDENTIFIER),
8200 NULL);
8201 /* Remember that we need to free the memory allocated. */
8202 *free_p = true;
8204 else
8205 pretty_name = CONST_CAST (char *, identifier_to_locale (IDENTIFIER_POINTER (name)));
8207 return pretty_name;
8210 /* Build a call to "INSTANCE.FN (ARGS)". If FN_P is non-NULL, it will
8211 be set, upon return, to the function called. ARGS may be NULL.
8212 This may change ARGS. */
8214 static tree
8215 build_new_method_call_1 (tree instance, tree fns, vec<tree, va_gc> **args,
8216 tree conversion_path, int flags,
8217 tree *fn_p, tsubst_flags_t complain)
8219 struct z_candidate *candidates = 0, *cand;
8220 tree explicit_targs = NULL_TREE;
8221 tree basetype = NULL_TREE;
8222 tree access_binfo, binfo;
8223 tree optype;
8224 tree first_mem_arg = NULL_TREE;
8225 tree name;
8226 bool skip_first_for_error;
8227 vec<tree, va_gc> *user_args;
8228 tree call;
8229 tree fn;
8230 int template_only = 0;
8231 bool any_viable_p;
8232 tree orig_instance;
8233 tree orig_fns;
8234 vec<tree, va_gc> *orig_args = NULL;
8235 void *p;
8237 gcc_assert (instance != NULL_TREE);
8239 /* We don't know what function we're going to call, yet. */
8240 if (fn_p)
8241 *fn_p = NULL_TREE;
8243 if (error_operand_p (instance)
8244 || !fns || error_operand_p (fns))
8245 return error_mark_node;
8247 if (!BASELINK_P (fns))
8249 if (complain & tf_error)
8250 error ("call to non-function %qD", fns);
8251 return error_mark_node;
8254 orig_instance = instance;
8255 orig_fns = fns;
8257 /* Dismantle the baselink to collect all the information we need. */
8258 if (!conversion_path)
8259 conversion_path = BASELINK_BINFO (fns);
8260 access_binfo = BASELINK_ACCESS_BINFO (fns);
8261 binfo = BASELINK_BINFO (fns);
8262 optype = BASELINK_OPTYPE (fns);
8263 fns = BASELINK_FUNCTIONS (fns);
8264 if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
8266 explicit_targs = TREE_OPERAND (fns, 1);
8267 fns = TREE_OPERAND (fns, 0);
8268 template_only = 1;
8270 gcc_assert (TREE_CODE (fns) == FUNCTION_DECL
8271 || TREE_CODE (fns) == TEMPLATE_DECL
8272 || TREE_CODE (fns) == OVERLOAD);
8273 fn = get_first_fn (fns);
8274 name = DECL_NAME (fn);
8276 basetype = TYPE_MAIN_VARIANT (TREE_TYPE (instance));
8277 gcc_assert (CLASS_TYPE_P (basetype));
8279 if (processing_template_decl)
8281 orig_args = args == NULL ? NULL : make_tree_vector_copy (*args);
8282 instance = build_non_dependent_expr (instance);
8283 if (args != NULL)
8284 make_args_non_dependent (*args);
8287 user_args = args == NULL ? NULL : *args;
8288 /* Under DR 147 A::A() is an invalid constructor call,
8289 not a functional cast. */
8290 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (fn))
8292 if (! (complain & tf_error))
8293 return error_mark_node;
8295 if (permerror (input_location,
8296 "cannot call constructor %<%T::%D%> directly",
8297 basetype, name))
8298 inform (input_location, "for a function-style cast, remove the "
8299 "redundant %<::%D%>", name);
8300 call = build_functional_cast (basetype, build_tree_list_vec (user_args),
8301 complain);
8302 return call;
8305 /* Figure out whether to skip the first argument for the error
8306 message we will display to users if an error occurs. We don't
8307 want to display any compiler-generated arguments. The "this"
8308 pointer hasn't been added yet. However, we must remove the VTT
8309 pointer if this is a call to a base-class constructor or
8310 destructor. */
8311 skip_first_for_error = false;
8312 if (IDENTIFIER_CTOR_OR_DTOR_P (name))
8314 /* Callers should explicitly indicate whether they want to construct
8315 the complete object or just the part without virtual bases. */
8316 gcc_assert (name != ctor_identifier);
8317 /* Similarly for destructors. */
8318 gcc_assert (name != dtor_identifier);
8319 /* Remove the VTT pointer, if present. */
8320 if ((name == base_ctor_identifier || name == base_dtor_identifier)
8321 && CLASSTYPE_VBASECLASSES (basetype))
8322 skip_first_for_error = true;
8325 /* Process the argument list. */
8326 if (args != NULL && *args != NULL)
8328 *args = resolve_args (*args, complain);
8329 if (*args == NULL)
8330 return error_mark_node;
8333 /* Consider the object argument to be used even if we end up selecting a
8334 static member function. */
8335 instance = mark_type_use (instance);
8337 /* It's OK to call destructors and constructors on cv-qualified objects.
8338 Therefore, convert the INSTANCE to the unqualified type, if
8339 necessary. */
8340 if (DECL_DESTRUCTOR_P (fn)
8341 || DECL_CONSTRUCTOR_P (fn))
8343 if (!same_type_p (basetype, TREE_TYPE (instance)))
8345 instance = build_this (instance);
8346 instance = build_nop (build_pointer_type (basetype), instance);
8347 instance = build_fold_indirect_ref (instance);
8350 if (DECL_DESTRUCTOR_P (fn))
8351 name = complete_dtor_identifier;
8353 /* For the overload resolution we need to find the actual `this`
8354 that would be captured if the call turns out to be to a
8355 non-static member function. Do not actually capture it at this
8356 point. */
8357 if (DECL_CONSTRUCTOR_P (fn))
8358 /* Constructors don't use the enclosing 'this'. */
8359 first_mem_arg = instance;
8360 else
8361 first_mem_arg = maybe_resolve_dummy (instance, false);
8363 /* Get the high-water mark for the CONVERSION_OBSTACK. */
8364 p = conversion_obstack_alloc (0);
8366 /* The number of arguments artificial parms in ARGS; we subtract one because
8367 there's no 'this' in ARGS. */
8368 unsigned skip = num_artificial_parms_for (fn) - 1;
8370 /* If CONSTRUCTOR_IS_DIRECT_INIT is set, this was a T{ } form
8371 initializer, not T({ }). */
8372 if (DECL_CONSTRUCTOR_P (fn)
8373 && vec_safe_length (user_args) > skip
8374 && DIRECT_LIST_INIT_P ((*user_args)[skip]))
8376 tree init_list = (*user_args)[skip];
8377 tree init = NULL_TREE;
8379 gcc_assert (user_args->length () == skip + 1
8380 && !(flags & LOOKUP_ONLYCONVERTING));
8382 /* If the initializer list has no elements and T is a class type with
8383 a default constructor, the object is value-initialized. Handle
8384 this here so we don't need to handle it wherever we use
8385 build_special_member_call. */
8386 if (CONSTRUCTOR_NELTS (init_list) == 0
8387 && TYPE_HAS_DEFAULT_CONSTRUCTOR (basetype)
8388 /* For a user-provided default constructor, use the normal
8389 mechanisms so that protected access works. */
8390 && type_has_non_user_provided_default_constructor (basetype)
8391 && !processing_template_decl)
8392 init = build_value_init (basetype, complain);
8394 /* If BASETYPE is an aggregate, we need to do aggregate
8395 initialization. */
8396 else if (CP_AGGREGATE_TYPE_P (basetype))
8398 init = reshape_init (basetype, init_list, complain);
8399 init = digest_init (basetype, init, complain);
8402 if (init)
8404 if (is_dummy_object (instance))
8405 return get_target_expr_sfinae (init, complain);
8406 init = build2 (INIT_EXPR, TREE_TYPE (instance), instance, init);
8407 TREE_SIDE_EFFECTS (init) = true;
8408 return init;
8411 /* Otherwise go ahead with overload resolution. */
8412 add_list_candidates (fns, first_mem_arg, user_args,
8413 basetype, explicit_targs, template_only,
8414 conversion_path, access_binfo, flags,
8415 &candidates, complain);
8417 else
8419 add_candidates (fns, first_mem_arg, user_args, optype,
8420 explicit_targs, template_only, conversion_path,
8421 access_binfo, flags, &candidates, complain);
8423 any_viable_p = false;
8424 candidates = splice_viable (candidates, false, &any_viable_p);
8426 if (!any_viable_p)
8428 if (complain & tf_error)
8430 if (!COMPLETE_OR_OPEN_TYPE_P (basetype))
8431 cxx_incomplete_type_error (instance, basetype);
8432 else if (optype)
8433 error ("no matching function for call to %<%T::operator %T(%A)%#V%>",
8434 basetype, optype, build_tree_list_vec (user_args),
8435 TREE_TYPE (instance));
8436 else
8438 char *pretty_name;
8439 bool free_p;
8440 tree arglist;
8442 pretty_name = name_as_c_string (name, basetype, &free_p);
8443 arglist = build_tree_list_vec (user_args);
8444 if (skip_first_for_error)
8445 arglist = TREE_CHAIN (arglist);
8446 error ("no matching function for call to %<%T::%s(%A)%#V%>",
8447 basetype, pretty_name, arglist,
8448 TREE_TYPE (instance));
8449 if (free_p)
8450 free (pretty_name);
8452 print_z_candidates (location_of (name), candidates);
8454 call = error_mark_node;
8456 else
8458 cand = tourney (candidates, complain);
8459 if (cand == 0)
8461 char *pretty_name;
8462 bool free_p;
8463 tree arglist;
8465 if (complain & tf_error)
8467 pretty_name = name_as_c_string (name, basetype, &free_p);
8468 arglist = build_tree_list_vec (user_args);
8469 if (skip_first_for_error)
8470 arglist = TREE_CHAIN (arglist);
8471 if (!any_strictly_viable (candidates))
8472 error ("no matching function for call to %<%s(%A)%>",
8473 pretty_name, arglist);
8474 else
8475 error ("call of overloaded %<%s(%A)%> is ambiguous",
8476 pretty_name, arglist);
8477 print_z_candidates (location_of (name), candidates);
8478 if (free_p)
8479 free (pretty_name);
8481 call = error_mark_node;
8483 else
8485 fn = cand->fn;
8486 call = NULL_TREE;
8488 if (!(flags & LOOKUP_NONVIRTUAL)
8489 && DECL_PURE_VIRTUAL_P (fn)
8490 && instance == current_class_ref
8491 && (complain & tf_warning))
8493 /* This is not an error, it is runtime undefined
8494 behavior. */
8495 if (!current_function_decl)
8496 warning (0, "pure virtual %q#D called from "
8497 "non-static data member initializer", fn);
8498 else if (DECL_CONSTRUCTOR_P (current_function_decl)
8499 || DECL_DESTRUCTOR_P (current_function_decl))
8500 warning (0, (DECL_CONSTRUCTOR_P (current_function_decl)
8501 ? "pure virtual %q#D called from constructor"
8502 : "pure virtual %q#D called from destructor"),
8503 fn);
8506 if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE
8507 && !DECL_CONSTRUCTOR_P (fn)
8508 && is_dummy_object (instance))
8510 instance = maybe_resolve_dummy (instance, true);
8511 if (instance == error_mark_node)
8512 call = error_mark_node;
8513 else if (!is_dummy_object (instance))
8515 /* We captured 'this' in the current lambda now that
8516 we know we really need it. */
8517 cand->first_arg = instance;
8519 else if (any_dependent_bases_p ())
8520 /* We can't tell until instantiation time whether we can use
8521 *this as the implicit object argument. */;
8522 else
8524 if (complain & tf_error)
8525 error ("cannot call member function %qD without object",
8526 fn);
8527 call = error_mark_node;
8531 if (call != error_mark_node)
8533 /* Optimize away vtable lookup if we know that this
8534 function can't be overridden. We need to check if
8535 the context and the type where we found fn are the same,
8536 actually FN might be defined in a different class
8537 type because of a using-declaration. In this case, we
8538 do not want to perform a non-virtual call. */
8539 if (DECL_VINDEX (fn) && ! (flags & LOOKUP_NONVIRTUAL)
8540 && same_type_ignoring_top_level_qualifiers_p
8541 (DECL_CONTEXT (fn), BINFO_TYPE (binfo))
8542 && resolves_to_fixed_type_p (instance, 0))
8543 flags |= LOOKUP_NONVIRTUAL;
8544 if (explicit_targs)
8545 flags |= LOOKUP_EXPLICIT_TMPL_ARGS;
8546 /* Now we know what function is being called. */
8547 if (fn_p)
8548 *fn_p = fn;
8549 /* Build the actual CALL_EXPR. */
8550 call = build_over_call (cand, flags, complain);
8551 /* In an expression of the form `a->f()' where `f' turns
8552 out to be a static member function, `a' is
8553 none-the-less evaluated. */
8554 if (TREE_CODE (TREE_TYPE (fn)) != METHOD_TYPE
8555 && !is_dummy_object (instance)
8556 && TREE_SIDE_EFFECTS (instance))
8557 call = build2 (COMPOUND_EXPR, TREE_TYPE (call),
8558 instance, call);
8559 else if (call != error_mark_node
8560 && DECL_DESTRUCTOR_P (cand->fn)
8561 && !VOID_TYPE_P (TREE_TYPE (call)))
8562 /* An explicit call of the form "x->~X()" has type
8563 "void". However, on platforms where destructors
8564 return "this" (i.e., those where
8565 targetm.cxx.cdtor_returns_this is true), such calls
8566 will appear to have a return value of pointer type
8567 to the low-level call machinery. We do not want to
8568 change the low-level machinery, since we want to be
8569 able to optimize "delete f()" on such platforms as
8570 "operator delete(~X(f()))" (rather than generating
8571 "t = f(), ~X(t), operator delete (t)"). */
8572 call = build_nop (void_type_node, call);
8577 if (processing_template_decl && call != error_mark_node)
8579 bool cast_to_void = false;
8581 if (TREE_CODE (call) == COMPOUND_EXPR)
8582 call = TREE_OPERAND (call, 1);
8583 else if (TREE_CODE (call) == NOP_EXPR)
8585 cast_to_void = true;
8586 call = TREE_OPERAND (call, 0);
8588 if (INDIRECT_REF_P (call))
8589 call = TREE_OPERAND (call, 0);
8590 call = (build_min_non_dep_call_vec
8591 (call,
8592 build_min (COMPONENT_REF, TREE_TYPE (CALL_EXPR_FN (call)),
8593 orig_instance, orig_fns, NULL_TREE),
8594 orig_args));
8595 SET_EXPR_LOCATION (call, input_location);
8596 call = convert_from_reference (call);
8597 if (cast_to_void)
8598 call = build_nop (void_type_node, call);
8601 /* Free all the conversions we allocated. */
8602 obstack_free (&conversion_obstack, p);
8604 if (orig_args != NULL)
8605 release_tree_vector (orig_args);
8607 return call;
8610 /* Wrapper for above. */
8612 tree
8613 build_new_method_call (tree instance, tree fns, vec<tree, va_gc> **args,
8614 tree conversion_path, int flags,
8615 tree *fn_p, tsubst_flags_t complain)
8617 tree ret;
8618 bool subtime = timevar_cond_start (TV_OVERLOAD);
8619 ret = build_new_method_call_1 (instance, fns, args, conversion_path, flags,
8620 fn_p, complain);
8621 timevar_cond_stop (TV_OVERLOAD, subtime);
8622 return ret;
8625 /* Returns true iff standard conversion sequence ICS1 is a proper
8626 subsequence of ICS2. */
8628 static bool
8629 is_subseq (conversion *ics1, conversion *ics2)
8631 /* We can assume that a conversion of the same code
8632 between the same types indicates a subsequence since we only get
8633 here if the types we are converting from are the same. */
8635 while (ics1->kind == ck_rvalue
8636 || ics1->kind == ck_lvalue)
8637 ics1 = next_conversion (ics1);
8639 while (1)
8641 while (ics2->kind == ck_rvalue
8642 || ics2->kind == ck_lvalue)
8643 ics2 = next_conversion (ics2);
8645 if (ics2->kind == ck_user
8646 || ics2->kind == ck_ambig
8647 || ics2->kind == ck_aggr
8648 || ics2->kind == ck_list
8649 || ics2->kind == ck_identity)
8650 /* At this point, ICS1 cannot be a proper subsequence of
8651 ICS2. We can get a USER_CONV when we are comparing the
8652 second standard conversion sequence of two user conversion
8653 sequences. */
8654 return false;
8656 ics2 = next_conversion (ics2);
8658 if (ics2->kind == ics1->kind
8659 && same_type_p (ics2->type, ics1->type)
8660 && same_type_p (next_conversion (ics2)->type,
8661 next_conversion (ics1)->type))
8662 return true;
8666 /* Returns nonzero iff DERIVED is derived from BASE. The inputs may
8667 be any _TYPE nodes. */
8669 bool
8670 is_properly_derived_from (tree derived, tree base)
8672 if (!CLASS_TYPE_P (derived) || !CLASS_TYPE_P (base))
8673 return false;
8675 /* We only allow proper derivation here. The DERIVED_FROM_P macro
8676 considers every class derived from itself. */
8677 return (!same_type_ignoring_top_level_qualifiers_p (derived, base)
8678 && DERIVED_FROM_P (base, derived));
8681 /* We build the ICS for an implicit object parameter as a pointer
8682 conversion sequence. However, such a sequence should be compared
8683 as if it were a reference conversion sequence. If ICS is the
8684 implicit conversion sequence for an implicit object parameter,
8685 modify it accordingly. */
8687 static void
8688 maybe_handle_implicit_object (conversion **ics)
8690 if ((*ics)->this_p)
8692 /* [over.match.funcs]
8694 For non-static member functions, the type of the
8695 implicit object parameter is "reference to cv X"
8696 where X is the class of which the function is a
8697 member and cv is the cv-qualification on the member
8698 function declaration. */
8699 conversion *t = *ics;
8700 tree reference_type;
8702 /* The `this' parameter is a pointer to a class type. Make the
8703 implicit conversion talk about a reference to that same class
8704 type. */
8705 reference_type = TREE_TYPE (t->type);
8706 reference_type = build_reference_type (reference_type);
8708 if (t->kind == ck_qual)
8709 t = next_conversion (t);
8710 if (t->kind == ck_ptr)
8711 t = next_conversion (t);
8712 t = build_identity_conv (TREE_TYPE (t->type), NULL_TREE);
8713 t = direct_reference_binding (reference_type, t);
8714 t->this_p = 1;
8715 t->rvaluedness_matches_p = 0;
8716 *ics = t;
8720 /* If *ICS is a REF_BIND set *ICS to the remainder of the conversion,
8721 and return the initial reference binding conversion. Otherwise,
8722 leave *ICS unchanged and return NULL. */
8724 static conversion *
8725 maybe_handle_ref_bind (conversion **ics)
8727 if ((*ics)->kind == ck_ref_bind)
8729 conversion *old_ics = *ics;
8730 *ics = next_conversion (old_ics);
8731 (*ics)->user_conv_p = old_ics->user_conv_p;
8732 return old_ics;
8735 return NULL;
8738 /* Compare two implicit conversion sequences according to the rules set out in
8739 [over.ics.rank]. Return values:
8741 1: ics1 is better than ics2
8742 -1: ics2 is better than ics1
8743 0: ics1 and ics2 are indistinguishable */
8745 static int
8746 compare_ics (conversion *ics1, conversion *ics2)
8748 tree from_type1;
8749 tree from_type2;
8750 tree to_type1;
8751 tree to_type2;
8752 tree deref_from_type1 = NULL_TREE;
8753 tree deref_from_type2 = NULL_TREE;
8754 tree deref_to_type1 = NULL_TREE;
8755 tree deref_to_type2 = NULL_TREE;
8756 conversion_rank rank1, rank2;
8758 /* REF_BINDING is nonzero if the result of the conversion sequence
8759 is a reference type. In that case REF_CONV is the reference
8760 binding conversion. */
8761 conversion *ref_conv1;
8762 conversion *ref_conv2;
8764 /* Compare badness before stripping the reference conversion. */
8765 if (ics1->bad_p > ics2->bad_p)
8766 return -1;
8767 else if (ics1->bad_p < ics2->bad_p)
8768 return 1;
8770 /* Handle implicit object parameters. */
8771 maybe_handle_implicit_object (&ics1);
8772 maybe_handle_implicit_object (&ics2);
8774 /* Handle reference parameters. */
8775 ref_conv1 = maybe_handle_ref_bind (&ics1);
8776 ref_conv2 = maybe_handle_ref_bind (&ics2);
8778 /* List-initialization sequence L1 is a better conversion sequence than
8779 list-initialization sequence L2 if L1 converts to
8780 std::initializer_list<X> for some X and L2 does not. */
8781 if (ics1->kind == ck_list && ics2->kind != ck_list)
8782 return 1;
8783 if (ics2->kind == ck_list && ics1->kind != ck_list)
8784 return -1;
8786 /* [over.ics.rank]
8788 When comparing the basic forms of implicit conversion sequences (as
8789 defined in _over.best.ics_)
8791 --a standard conversion sequence (_over.ics.scs_) is a better
8792 conversion sequence than a user-defined conversion sequence
8793 or an ellipsis conversion sequence, and
8795 --a user-defined conversion sequence (_over.ics.user_) is a
8796 better conversion sequence than an ellipsis conversion sequence
8797 (_over.ics.ellipsis_). */
8798 /* Use BAD_CONVERSION_RANK because we already checked for a badness
8799 mismatch. If both ICS are bad, we try to make a decision based on
8800 what would have happened if they'd been good. This is not an
8801 extension, we'll still give an error when we build up the call; this
8802 just helps us give a more helpful error message. */
8803 rank1 = BAD_CONVERSION_RANK (ics1);
8804 rank2 = BAD_CONVERSION_RANK (ics2);
8806 if (rank1 > rank2)
8807 return -1;
8808 else if (rank1 < rank2)
8809 return 1;
8811 if (ics1->ellipsis_p)
8812 /* Both conversions are ellipsis conversions. */
8813 return 0;
8815 /* User-defined conversion sequence U1 is a better conversion sequence
8816 than another user-defined conversion sequence U2 if they contain the
8817 same user-defined conversion operator or constructor and if the sec-
8818 ond standard conversion sequence of U1 is better than the second
8819 standard conversion sequence of U2. */
8821 /* Handle list-conversion with the same code even though it isn't always
8822 ranked as a user-defined conversion and it doesn't have a second
8823 standard conversion sequence; it will still have the desired effect.
8824 Specifically, we need to do the reference binding comparison at the
8825 end of this function. */
8827 if (ics1->user_conv_p || ics1->kind == ck_list || ics1->kind == ck_aggr)
8829 conversion *t1;
8830 conversion *t2;
8832 for (t1 = ics1; t1->kind != ck_user; t1 = next_conversion (t1))
8833 if (t1->kind == ck_ambig || t1->kind == ck_aggr
8834 || t1->kind == ck_list)
8835 break;
8836 for (t2 = ics2; t2->kind != ck_user; t2 = next_conversion (t2))
8837 if (t2->kind == ck_ambig || t2->kind == ck_aggr
8838 || t2->kind == ck_list)
8839 break;
8841 if (t1->kind != t2->kind)
8842 return 0;
8843 else if (t1->kind == ck_user)
8845 if (t1->cand->fn != t2->cand->fn)
8846 return 0;
8848 else
8850 /* For ambiguous or aggregate conversions, use the target type as
8851 a proxy for the conversion function. */
8852 if (!same_type_ignoring_top_level_qualifiers_p (t1->type, t2->type))
8853 return 0;
8856 /* We can just fall through here, after setting up
8857 FROM_TYPE1 and FROM_TYPE2. */
8858 from_type1 = t1->type;
8859 from_type2 = t2->type;
8861 else
8863 conversion *t1;
8864 conversion *t2;
8866 /* We're dealing with two standard conversion sequences.
8868 [over.ics.rank]
8870 Standard conversion sequence S1 is a better conversion
8871 sequence than standard conversion sequence S2 if
8873 --S1 is a proper subsequence of S2 (comparing the conversion
8874 sequences in the canonical form defined by _over.ics.scs_,
8875 excluding any Lvalue Transformation; the identity
8876 conversion sequence is considered to be a subsequence of
8877 any non-identity conversion sequence */
8879 t1 = ics1;
8880 while (t1->kind != ck_identity)
8881 t1 = next_conversion (t1);
8882 from_type1 = t1->type;
8884 t2 = ics2;
8885 while (t2->kind != ck_identity)
8886 t2 = next_conversion (t2);
8887 from_type2 = t2->type;
8890 /* One sequence can only be a subsequence of the other if they start with
8891 the same type. They can start with different types when comparing the
8892 second standard conversion sequence in two user-defined conversion
8893 sequences. */
8894 if (same_type_p (from_type1, from_type2))
8896 if (is_subseq (ics1, ics2))
8897 return 1;
8898 if (is_subseq (ics2, ics1))
8899 return -1;
8902 /* [over.ics.rank]
8904 Or, if not that,
8906 --the rank of S1 is better than the rank of S2 (by the rules
8907 defined below):
8909 Standard conversion sequences are ordered by their ranks: an Exact
8910 Match is a better conversion than a Promotion, which is a better
8911 conversion than a Conversion.
8913 Two conversion sequences with the same rank are indistinguishable
8914 unless one of the following rules applies:
8916 --A conversion that does not a convert a pointer, pointer to member,
8917 or std::nullptr_t to bool is better than one that does.
8919 The ICS_STD_RANK automatically handles the pointer-to-bool rule,
8920 so that we do not have to check it explicitly. */
8921 if (ics1->rank < ics2->rank)
8922 return 1;
8923 else if (ics2->rank < ics1->rank)
8924 return -1;
8926 to_type1 = ics1->type;
8927 to_type2 = ics2->type;
8929 /* A conversion from scalar arithmetic type to complex is worse than a
8930 conversion between scalar arithmetic types. */
8931 if (same_type_p (from_type1, from_type2)
8932 && ARITHMETIC_TYPE_P (from_type1)
8933 && ARITHMETIC_TYPE_P (to_type1)
8934 && ARITHMETIC_TYPE_P (to_type2)
8935 && ((TREE_CODE (to_type1) == COMPLEX_TYPE)
8936 != (TREE_CODE (to_type2) == COMPLEX_TYPE)))
8938 if (TREE_CODE (to_type1) == COMPLEX_TYPE)
8939 return -1;
8940 else
8941 return 1;
8944 if (TYPE_PTR_P (from_type1)
8945 && TYPE_PTR_P (from_type2)
8946 && TYPE_PTR_P (to_type1)
8947 && TYPE_PTR_P (to_type2))
8949 deref_from_type1 = TREE_TYPE (from_type1);
8950 deref_from_type2 = TREE_TYPE (from_type2);
8951 deref_to_type1 = TREE_TYPE (to_type1);
8952 deref_to_type2 = TREE_TYPE (to_type2);
8954 /* The rules for pointers to members A::* are just like the rules
8955 for pointers A*, except opposite: if B is derived from A then
8956 A::* converts to B::*, not vice versa. For that reason, we
8957 switch the from_ and to_ variables here. */
8958 else if ((TYPE_PTRDATAMEM_P (from_type1) && TYPE_PTRDATAMEM_P (from_type2)
8959 && TYPE_PTRDATAMEM_P (to_type1) && TYPE_PTRDATAMEM_P (to_type2))
8960 || (TYPE_PTRMEMFUNC_P (from_type1)
8961 && TYPE_PTRMEMFUNC_P (from_type2)
8962 && TYPE_PTRMEMFUNC_P (to_type1)
8963 && TYPE_PTRMEMFUNC_P (to_type2)))
8965 deref_to_type1 = TYPE_PTRMEM_CLASS_TYPE (from_type1);
8966 deref_to_type2 = TYPE_PTRMEM_CLASS_TYPE (from_type2);
8967 deref_from_type1 = TYPE_PTRMEM_CLASS_TYPE (to_type1);
8968 deref_from_type2 = TYPE_PTRMEM_CLASS_TYPE (to_type2);
8971 if (deref_from_type1 != NULL_TREE
8972 && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_from_type1))
8973 && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_from_type2)))
8975 /* This was one of the pointer or pointer-like conversions.
8977 [over.ics.rank]
8979 --If class B is derived directly or indirectly from class A,
8980 conversion of B* to A* is better than conversion of B* to
8981 void*, and conversion of A* to void* is better than
8982 conversion of B* to void*. */
8983 if (VOID_TYPE_P (deref_to_type1)
8984 && VOID_TYPE_P (deref_to_type2))
8986 if (is_properly_derived_from (deref_from_type1,
8987 deref_from_type2))
8988 return -1;
8989 else if (is_properly_derived_from (deref_from_type2,
8990 deref_from_type1))
8991 return 1;
8993 else if (VOID_TYPE_P (deref_to_type1)
8994 || VOID_TYPE_P (deref_to_type2))
8996 if (same_type_p (deref_from_type1, deref_from_type2))
8998 if (VOID_TYPE_P (deref_to_type2))
9000 if (is_properly_derived_from (deref_from_type1,
9001 deref_to_type1))
9002 return 1;
9004 /* We know that DEREF_TO_TYPE1 is `void' here. */
9005 else if (is_properly_derived_from (deref_from_type1,
9006 deref_to_type2))
9007 return -1;
9010 else if (RECORD_OR_UNION_CODE_P (TREE_CODE (deref_to_type1))
9011 && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_to_type2)))
9013 /* [over.ics.rank]
9015 --If class B is derived directly or indirectly from class A
9016 and class C is derived directly or indirectly from B,
9018 --conversion of C* to B* is better than conversion of C* to
9021 --conversion of B* to A* is better than conversion of C* to
9022 A* */
9023 if (same_type_p (deref_from_type1, deref_from_type2))
9025 if (is_properly_derived_from (deref_to_type1,
9026 deref_to_type2))
9027 return 1;
9028 else if (is_properly_derived_from (deref_to_type2,
9029 deref_to_type1))
9030 return -1;
9032 else if (same_type_p (deref_to_type1, deref_to_type2))
9034 if (is_properly_derived_from (deref_from_type2,
9035 deref_from_type1))
9036 return 1;
9037 else if (is_properly_derived_from (deref_from_type1,
9038 deref_from_type2))
9039 return -1;
9043 else if (CLASS_TYPE_P (non_reference (from_type1))
9044 && same_type_p (from_type1, from_type2))
9046 tree from = non_reference (from_type1);
9048 /* [over.ics.rank]
9050 --binding of an expression of type C to a reference of type
9051 B& is better than binding an expression of type C to a
9052 reference of type A&
9054 --conversion of C to B is better than conversion of C to A, */
9055 if (is_properly_derived_from (from, to_type1)
9056 && is_properly_derived_from (from, to_type2))
9058 if (is_properly_derived_from (to_type1, to_type2))
9059 return 1;
9060 else if (is_properly_derived_from (to_type2, to_type1))
9061 return -1;
9064 else if (CLASS_TYPE_P (non_reference (to_type1))
9065 && same_type_p (to_type1, to_type2))
9067 tree to = non_reference (to_type1);
9069 /* [over.ics.rank]
9071 --binding of an expression of type B to a reference of type
9072 A& is better than binding an expression of type C to a
9073 reference of type A&,
9075 --conversion of B to A is better than conversion of C to A */
9076 if (is_properly_derived_from (from_type1, to)
9077 && is_properly_derived_from (from_type2, to))
9079 if (is_properly_derived_from (from_type2, from_type1))
9080 return 1;
9081 else if (is_properly_derived_from (from_type1, from_type2))
9082 return -1;
9086 /* [over.ics.rank]
9088 --S1 and S2 differ only in their qualification conversion and yield
9089 similar types T1 and T2 (_conv.qual_), respectively, and the cv-
9090 qualification signature of type T1 is a proper subset of the cv-
9091 qualification signature of type T2 */
9092 if (ics1->kind == ck_qual
9093 && ics2->kind == ck_qual
9094 && same_type_p (from_type1, from_type2))
9096 int result = comp_cv_qual_signature (to_type1, to_type2);
9097 if (result != 0)
9098 return result;
9101 /* [over.ics.rank]
9103 --S1 and S2 are reference bindings (_dcl.init.ref_) and neither refers
9104 to an implicit object parameter of a non-static member function
9105 declared without a ref-qualifier, and either S1 binds an lvalue
9106 reference to an lvalue and S2 binds an rvalue reference or S1 binds an
9107 rvalue reference to an rvalue and S2 binds an lvalue reference (C++0x
9108 draft standard, 13.3.3.2)
9110 --S1 and S2 are reference bindings (_dcl.init.ref_), and the
9111 types to which the references refer are the same type except for
9112 top-level cv-qualifiers, and the type to which the reference
9113 initialized by S2 refers is more cv-qualified than the type to
9114 which the reference initialized by S1 refers.
9116 DR 1328 [over.match.best]: the context is an initialization by
9117 conversion function for direct reference binding (13.3.1.6) of a
9118 reference to function type, the return type of F1 is the same kind of
9119 reference (i.e. lvalue or rvalue) as the reference being initialized,
9120 and the return type of F2 is not. */
9122 if (ref_conv1 && ref_conv2)
9124 if (!ref_conv1->this_p && !ref_conv2->this_p
9125 && (ref_conv1->rvaluedness_matches_p
9126 != ref_conv2->rvaluedness_matches_p)
9127 && (same_type_p (ref_conv1->type, ref_conv2->type)
9128 || (TYPE_REF_IS_RVALUE (ref_conv1->type)
9129 != TYPE_REF_IS_RVALUE (ref_conv2->type))))
9131 if (ref_conv1->bad_p
9132 && !same_type_p (TREE_TYPE (ref_conv1->type),
9133 TREE_TYPE (ref_conv2->type)))
9134 /* Don't prefer a bad conversion that drops cv-quals to a bad
9135 conversion with the wrong rvalueness. */
9136 return 0;
9137 return (ref_conv1->rvaluedness_matches_p
9138 - ref_conv2->rvaluedness_matches_p);
9141 if (same_type_ignoring_top_level_qualifiers_p (to_type1, to_type2))
9143 int q1 = cp_type_quals (TREE_TYPE (ref_conv1->type));
9144 int q2 = cp_type_quals (TREE_TYPE (ref_conv2->type));
9145 if (ref_conv1->bad_p)
9147 /* Prefer the one that drops fewer cv-quals. */
9148 tree ftype = next_conversion (ref_conv1)->type;
9149 int fquals = cp_type_quals (ftype);
9150 q1 ^= fquals;
9151 q2 ^= fquals;
9153 return comp_cv_qualification (q2, q1);
9157 /* Neither conversion sequence is better than the other. */
9158 return 0;
9161 /* The source type for this standard conversion sequence. */
9163 static tree
9164 source_type (conversion *t)
9166 for (;; t = next_conversion (t))
9168 if (t->kind == ck_user
9169 || t->kind == ck_ambig
9170 || t->kind == ck_identity)
9171 return t->type;
9173 gcc_unreachable ();
9176 /* Note a warning about preferring WINNER to LOSER. We do this by storing
9177 a pointer to LOSER and re-running joust to produce the warning if WINNER
9178 is actually used. */
9180 static void
9181 add_warning (struct z_candidate *winner, struct z_candidate *loser)
9183 candidate_warning *cw = (candidate_warning *)
9184 conversion_obstack_alloc (sizeof (candidate_warning));
9185 cw->loser = loser;
9186 cw->next = winner->warnings;
9187 winner->warnings = cw;
9190 /* Compare two candidates for overloading as described in
9191 [over.match.best]. Return values:
9193 1: cand1 is better than cand2
9194 -1: cand2 is better than cand1
9195 0: cand1 and cand2 are indistinguishable */
9197 static int
9198 joust (struct z_candidate *cand1, struct z_candidate *cand2, bool warn,
9199 tsubst_flags_t complain)
9201 int winner = 0;
9202 int off1 = 0, off2 = 0;
9203 size_t i;
9204 size_t len;
9206 /* Candidates that involve bad conversions are always worse than those
9207 that don't. */
9208 if (cand1->viable > cand2->viable)
9209 return 1;
9210 if (cand1->viable < cand2->viable)
9211 return -1;
9213 /* If we have two pseudo-candidates for conversions to the same type,
9214 or two candidates for the same function, arbitrarily pick one. */
9215 if (cand1->fn == cand2->fn
9216 && (IS_TYPE_OR_DECL_P (cand1->fn)))
9217 return 1;
9219 /* Prefer a non-deleted function over an implicitly deleted move
9220 constructor or assignment operator. This differs slightly from the
9221 wording for issue 1402 (which says the move op is ignored by overload
9222 resolution), but this way produces better error messages. */
9223 if (TREE_CODE (cand1->fn) == FUNCTION_DECL
9224 && TREE_CODE (cand2->fn) == FUNCTION_DECL
9225 && DECL_DELETED_FN (cand1->fn) != DECL_DELETED_FN (cand2->fn))
9227 if (DECL_DELETED_FN (cand1->fn) && DECL_DEFAULTED_FN (cand1->fn)
9228 && move_fn_p (cand1->fn))
9229 return -1;
9230 if (DECL_DELETED_FN (cand2->fn) && DECL_DEFAULTED_FN (cand2->fn)
9231 && move_fn_p (cand2->fn))
9232 return 1;
9235 /* a viable function F1
9236 is defined to be a better function than another viable function F2 if
9237 for all arguments i, ICSi(F1) is not a worse conversion sequence than
9238 ICSi(F2), and then */
9240 /* for some argument j, ICSj(F1) is a better conversion sequence than
9241 ICSj(F2) */
9243 /* For comparing static and non-static member functions, we ignore
9244 the implicit object parameter of the non-static function. The
9245 standard says to pretend that the static function has an object
9246 parm, but that won't work with operator overloading. */
9247 len = cand1->num_convs;
9248 if (len != cand2->num_convs)
9250 int static_1 = DECL_STATIC_FUNCTION_P (cand1->fn);
9251 int static_2 = DECL_STATIC_FUNCTION_P (cand2->fn);
9253 if (DECL_CONSTRUCTOR_P (cand1->fn)
9254 && is_list_ctor (cand1->fn) != is_list_ctor (cand2->fn))
9255 /* We're comparing a near-match list constructor and a near-match
9256 non-list constructor. Just treat them as unordered. */
9257 return 0;
9259 gcc_assert (static_1 != static_2);
9261 if (static_1)
9262 off2 = 1;
9263 else
9265 off1 = 1;
9266 --len;
9270 for (i = 0; i < len; ++i)
9272 conversion *t1 = cand1->convs[i + off1];
9273 conversion *t2 = cand2->convs[i + off2];
9274 int comp = compare_ics (t1, t2);
9276 if (comp != 0)
9278 if ((complain & tf_warning)
9279 && warn_sign_promo
9280 && (CONVERSION_RANK (t1) + CONVERSION_RANK (t2)
9281 == cr_std + cr_promotion)
9282 && t1->kind == ck_std
9283 && t2->kind == ck_std
9284 && TREE_CODE (t1->type) == INTEGER_TYPE
9285 && TREE_CODE (t2->type) == INTEGER_TYPE
9286 && (TYPE_PRECISION (t1->type)
9287 == TYPE_PRECISION (t2->type))
9288 && (TYPE_UNSIGNED (next_conversion (t1)->type)
9289 || (TREE_CODE (next_conversion (t1)->type)
9290 == ENUMERAL_TYPE)))
9292 tree type = next_conversion (t1)->type;
9293 tree type1, type2;
9294 struct z_candidate *w, *l;
9295 if (comp > 0)
9296 type1 = t1->type, type2 = t2->type,
9297 w = cand1, l = cand2;
9298 else
9299 type1 = t2->type, type2 = t1->type,
9300 w = cand2, l = cand1;
9302 if (warn)
9304 warning (OPT_Wsign_promo, "passing %qT chooses %qT over %qT",
9305 type, type1, type2);
9306 warning (OPT_Wsign_promo, " in call to %qD", w->fn);
9308 else
9309 add_warning (w, l);
9312 if (winner && comp != winner)
9314 winner = 0;
9315 goto tweak;
9317 winner = comp;
9321 /* warn about confusing overload resolution for user-defined conversions,
9322 either between a constructor and a conversion op, or between two
9323 conversion ops. */
9324 if ((complain & tf_warning)
9325 && winner && warn_conversion && cand1->second_conv
9326 && (!DECL_CONSTRUCTOR_P (cand1->fn) || !DECL_CONSTRUCTOR_P (cand2->fn))
9327 && winner != compare_ics (cand1->second_conv, cand2->second_conv))
9329 struct z_candidate *w, *l;
9330 bool give_warning = false;
9332 if (winner == 1)
9333 w = cand1, l = cand2;
9334 else
9335 w = cand2, l = cand1;
9337 /* We don't want to complain about `X::operator T1 ()'
9338 beating `X::operator T2 () const', when T2 is a no less
9339 cv-qualified version of T1. */
9340 if (DECL_CONTEXT (w->fn) == DECL_CONTEXT (l->fn)
9341 && !DECL_CONSTRUCTOR_P (w->fn) && !DECL_CONSTRUCTOR_P (l->fn))
9343 tree t = TREE_TYPE (TREE_TYPE (l->fn));
9344 tree f = TREE_TYPE (TREE_TYPE (w->fn));
9346 if (TREE_CODE (t) == TREE_CODE (f) && POINTER_TYPE_P (t))
9348 t = TREE_TYPE (t);
9349 f = TREE_TYPE (f);
9351 if (!comp_ptr_ttypes (t, f))
9352 give_warning = true;
9354 else
9355 give_warning = true;
9357 if (!give_warning)
9358 /*NOP*/;
9359 else if (warn)
9361 tree source = source_type (w->convs[0]);
9362 if (! DECL_CONSTRUCTOR_P (w->fn))
9363 source = TREE_TYPE (source);
9364 if (warning (OPT_Wconversion, "choosing %qD over %qD", w->fn, l->fn)
9365 && warning (OPT_Wconversion, " for conversion from %qT to %qT",
9366 source, w->second_conv->type))
9368 inform (input_location, " because conversion sequence for the argument is better");
9371 else
9372 add_warning (w, l);
9375 if (winner)
9376 return winner;
9378 /* DR 495 moved this tiebreaker above the template ones. */
9379 /* or, if not that,
9380 the context is an initialization by user-defined conversion (see
9381 _dcl.init_ and _over.match.user_) and the standard conversion
9382 sequence from the return type of F1 to the destination type (i.e.,
9383 the type of the entity being initialized) is a better conversion
9384 sequence than the standard conversion sequence from the return type
9385 of F2 to the destination type. */
9387 if (cand1->second_conv)
9389 winner = compare_ics (cand1->second_conv, cand2->second_conv);
9390 if (winner)
9391 return winner;
9394 /* or, if not that,
9395 F1 is a non-template function and F2 is a template function
9396 specialization. */
9398 if (!cand1->template_decl && cand2->template_decl)
9399 return 1;
9400 else if (cand1->template_decl && !cand2->template_decl)
9401 return -1;
9403 /* or, if not that,
9404 F1 and F2 are template functions and the function template for F1 is
9405 more specialized than the template for F2 according to the partial
9406 ordering rules. */
9408 if (cand1->template_decl && cand2->template_decl)
9410 winner = more_specialized_fn
9411 (TI_TEMPLATE (cand1->template_decl),
9412 TI_TEMPLATE (cand2->template_decl),
9413 /* [temp.func.order]: The presence of unused ellipsis and default
9414 arguments has no effect on the partial ordering of function
9415 templates. add_function_candidate() will not have
9416 counted the "this" argument for constructors. */
9417 cand1->num_convs + DECL_CONSTRUCTOR_P (cand1->fn));
9418 if (winner)
9419 return winner;
9422 // C++ Concepts
9423 // or, if not that, F1 is more constrained than F2.
9424 if (flag_concepts && DECL_P (cand1->fn) && DECL_P (cand2->fn))
9426 winner = more_constrained (cand1->fn, cand2->fn);
9427 if (winner)
9428 return winner;
9431 /* Check whether we can discard a builtin candidate, either because we
9432 have two identical ones or matching builtin and non-builtin candidates.
9434 (Pedantically in the latter case the builtin which matched the user
9435 function should not be added to the overload set, but we spot it here.
9437 [over.match.oper]
9438 ... the builtin candidates include ...
9439 - do not have the same parameter type list as any non-template
9440 non-member candidate. */
9442 if (identifier_p (cand1->fn) || identifier_p (cand2->fn))
9444 for (i = 0; i < len; ++i)
9445 if (!same_type_p (cand1->convs[i]->type,
9446 cand2->convs[i]->type))
9447 break;
9448 if (i == cand1->num_convs)
9450 if (cand1->fn == cand2->fn)
9451 /* Two built-in candidates; arbitrarily pick one. */
9452 return 1;
9453 else if (identifier_p (cand1->fn))
9454 /* cand1 is built-in; prefer cand2. */
9455 return -1;
9456 else
9457 /* cand2 is built-in; prefer cand1. */
9458 return 1;
9462 /* For candidates of a multi-versioned function, make the version with
9463 the highest priority win. This version will be checked for dispatching
9464 first. If this version can be inlined into the caller, the front-end
9465 will simply make a direct call to this function. */
9467 if (TREE_CODE (cand1->fn) == FUNCTION_DECL
9468 && DECL_FUNCTION_VERSIONED (cand1->fn)
9469 && TREE_CODE (cand2->fn) == FUNCTION_DECL
9470 && DECL_FUNCTION_VERSIONED (cand2->fn))
9472 tree f1 = TREE_TYPE (cand1->fn);
9473 tree f2 = TREE_TYPE (cand2->fn);
9474 tree p1 = TYPE_ARG_TYPES (f1);
9475 tree p2 = TYPE_ARG_TYPES (f2);
9477 /* Check if cand1->fn and cand2->fn are versions of the same function. It
9478 is possible that cand1->fn and cand2->fn are function versions but of
9479 different functions. Check types to see if they are versions of the same
9480 function. */
9481 if (compparms (p1, p2)
9482 && same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
9484 /* Always make the version with the higher priority, more
9485 specialized, win. */
9486 gcc_assert (targetm.compare_version_priority);
9487 if (targetm.compare_version_priority (cand1->fn, cand2->fn) >= 0)
9488 return 1;
9489 else
9490 return -1;
9494 /* If the two function declarations represent the same function (this can
9495 happen with declarations in multiple scopes and arg-dependent lookup),
9496 arbitrarily choose one. But first make sure the default args we're
9497 using match. */
9498 if (DECL_P (cand1->fn) && DECL_P (cand2->fn)
9499 && equal_functions (cand1->fn, cand2->fn))
9501 tree parms1 = TYPE_ARG_TYPES (TREE_TYPE (cand1->fn));
9502 tree parms2 = TYPE_ARG_TYPES (TREE_TYPE (cand2->fn));
9504 gcc_assert (!DECL_CONSTRUCTOR_P (cand1->fn));
9506 for (i = 0; i < len; ++i)
9508 /* Don't crash if the fn is variadic. */
9509 if (!parms1)
9510 break;
9511 parms1 = TREE_CHAIN (parms1);
9512 parms2 = TREE_CHAIN (parms2);
9515 if (off1)
9516 parms1 = TREE_CHAIN (parms1);
9517 else if (off2)
9518 parms2 = TREE_CHAIN (parms2);
9520 for (; parms1; ++i)
9522 if (!cp_tree_equal (TREE_PURPOSE (parms1),
9523 TREE_PURPOSE (parms2)))
9525 if (warn)
9527 if (complain & tf_error)
9529 if (permerror (input_location,
9530 "default argument mismatch in "
9531 "overload resolution"))
9533 inform (DECL_SOURCE_LOCATION (cand1->fn),
9534 " candidate 1: %q#F", cand1->fn);
9535 inform (DECL_SOURCE_LOCATION (cand2->fn),
9536 " candidate 2: %q#F", cand2->fn);
9539 else
9540 return 0;
9542 else
9543 add_warning (cand1, cand2);
9544 break;
9546 parms1 = TREE_CHAIN (parms1);
9547 parms2 = TREE_CHAIN (parms2);
9550 return 1;
9553 tweak:
9555 /* Extension: If the worst conversion for one candidate is worse than the
9556 worst conversion for the other, take the first. */
9557 if (!pedantic && (complain & tf_warning_or_error))
9559 conversion_rank rank1 = cr_identity, rank2 = cr_identity;
9560 struct z_candidate *w = 0, *l = 0;
9562 for (i = 0; i < len; ++i)
9564 if (CONVERSION_RANK (cand1->convs[i+off1]) > rank1)
9565 rank1 = CONVERSION_RANK (cand1->convs[i+off1]);
9566 if (CONVERSION_RANK (cand2->convs[i + off2]) > rank2)
9567 rank2 = CONVERSION_RANK (cand2->convs[i + off2]);
9569 if (rank1 < rank2)
9570 winner = 1, w = cand1, l = cand2;
9571 if (rank1 > rank2)
9572 winner = -1, w = cand2, l = cand1;
9573 if (winner)
9575 /* Don't choose a deleted function over ambiguity. */
9576 if (DECL_P (w->fn) && DECL_DELETED_FN (w->fn))
9577 return 0;
9578 if (warn)
9580 pedwarn (input_location, 0,
9581 "ISO C++ says that these are ambiguous, even "
9582 "though the worst conversion for the first is better than "
9583 "the worst conversion for the second:");
9584 print_z_candidate (input_location, _("candidate 1:"), w);
9585 print_z_candidate (input_location, _("candidate 2:"), l);
9587 else
9588 add_warning (w, l);
9589 return winner;
9593 gcc_assert (!winner);
9594 return 0;
9597 /* Given a list of candidates for overloading, find the best one, if any.
9598 This algorithm has a worst case of O(2n) (winner is last), and a best
9599 case of O(n/2) (totally ambiguous); much better than a sorting
9600 algorithm. */
9602 static struct z_candidate *
9603 tourney (struct z_candidate *candidates, tsubst_flags_t complain)
9605 struct z_candidate *champ = candidates, *challenger;
9606 int fate;
9607 int champ_compared_to_predecessor = 0;
9609 /* Walk through the list once, comparing each current champ to the next
9610 candidate, knocking out a candidate or two with each comparison. */
9612 for (challenger = champ->next; challenger; )
9614 fate = joust (champ, challenger, 0, complain);
9615 if (fate == 1)
9616 challenger = challenger->next;
9617 else
9619 if (fate == 0)
9621 champ = challenger->next;
9622 if (champ == 0)
9623 return NULL;
9624 champ_compared_to_predecessor = 0;
9626 else
9628 champ = challenger;
9629 champ_compared_to_predecessor = 1;
9632 challenger = champ->next;
9636 /* Make sure the champ is better than all the candidates it hasn't yet
9637 been compared to. */
9639 for (challenger = candidates;
9640 challenger != champ
9641 && !(champ_compared_to_predecessor && challenger->next == champ);
9642 challenger = challenger->next)
9644 fate = joust (champ, challenger, 0, complain);
9645 if (fate != 1)
9646 return NULL;
9649 return champ;
9652 /* Returns nonzero if things of type FROM can be converted to TO. */
9654 bool
9655 can_convert (tree to, tree from, tsubst_flags_t complain)
9657 tree arg = NULL_TREE;
9658 /* implicit_conversion only considers user-defined conversions
9659 if it has an expression for the call argument list. */
9660 if (CLASS_TYPE_P (from) || CLASS_TYPE_P (to))
9661 arg = build1 (CAST_EXPR, from, NULL_TREE);
9662 return can_convert_arg (to, from, arg, LOOKUP_IMPLICIT, complain);
9665 /* Returns nonzero if things of type FROM can be converted to TO with a
9666 standard conversion. */
9668 bool
9669 can_convert_standard (tree to, tree from, tsubst_flags_t complain)
9671 return can_convert_arg (to, from, NULL_TREE, LOOKUP_IMPLICIT, complain);
9674 /* Returns nonzero if ARG (of type FROM) can be converted to TO. */
9676 bool
9677 can_convert_arg (tree to, tree from, tree arg, int flags,
9678 tsubst_flags_t complain)
9680 conversion *t;
9681 void *p;
9682 bool ok_p;
9684 /* Get the high-water mark for the CONVERSION_OBSTACK. */
9685 p = conversion_obstack_alloc (0);
9686 /* We want to discard any access checks done for this test,
9687 as we might not be in the appropriate access context and
9688 we'll do the check again when we actually perform the
9689 conversion. */
9690 push_deferring_access_checks (dk_deferred);
9692 t = implicit_conversion (to, from, arg, /*c_cast_p=*/false,
9693 flags, complain);
9694 ok_p = (t && !t->bad_p);
9696 /* Discard the access checks now. */
9697 pop_deferring_access_checks ();
9698 /* Free all the conversions we allocated. */
9699 obstack_free (&conversion_obstack, p);
9701 return ok_p;
9704 /* Like can_convert_arg, but allows dubious conversions as well. */
9706 bool
9707 can_convert_arg_bad (tree to, tree from, tree arg, int flags,
9708 tsubst_flags_t complain)
9710 conversion *t;
9711 void *p;
9713 /* Get the high-water mark for the CONVERSION_OBSTACK. */
9714 p = conversion_obstack_alloc (0);
9715 /* Try to perform the conversion. */
9716 t = implicit_conversion (to, from, arg, /*c_cast_p=*/false,
9717 flags, complain);
9718 /* Free all the conversions we allocated. */
9719 obstack_free (&conversion_obstack, p);
9721 return t != NULL;
9724 /* Convert EXPR to TYPE. Return the converted expression.
9726 Note that we allow bad conversions here because by the time we get to
9727 this point we are committed to doing the conversion. If we end up
9728 doing a bad conversion, convert_like will complain. */
9730 tree
9731 perform_implicit_conversion_flags (tree type, tree expr,
9732 tsubst_flags_t complain, int flags)
9734 conversion *conv;
9735 void *p;
9736 location_t loc = EXPR_LOC_OR_LOC (expr, input_location);
9738 if (error_operand_p (expr))
9739 return error_mark_node;
9741 /* Get the high-water mark for the CONVERSION_OBSTACK. */
9742 p = conversion_obstack_alloc (0);
9744 conv = implicit_conversion (type, TREE_TYPE (expr), expr,
9745 /*c_cast_p=*/false,
9746 flags, complain);
9748 if (!conv)
9750 if (complain & tf_error)
9752 /* If expr has unknown type, then it is an overloaded function.
9753 Call instantiate_type to get good error messages. */
9754 if (TREE_TYPE (expr) == unknown_type_node)
9755 instantiate_type (type, expr, complain);
9756 else if (invalid_nonstatic_memfn_p (loc, expr, complain))
9757 /* We gave an error. */;
9758 else
9759 error_at (loc, "could not convert %qE from %qT to %qT", expr,
9760 TREE_TYPE (expr), type);
9762 expr = error_mark_node;
9764 else if (processing_template_decl && conv->kind != ck_identity)
9766 /* In a template, we are only concerned about determining the
9767 type of non-dependent expressions, so we do not have to
9768 perform the actual conversion. But for initializers, we
9769 need to be able to perform it at instantiation
9770 (or instantiate_non_dependent_expr) time. */
9771 expr = build1 (IMPLICIT_CONV_EXPR, type, expr);
9772 if (!(flags & LOOKUP_ONLYCONVERTING))
9773 IMPLICIT_CONV_EXPR_DIRECT_INIT (expr) = true;
9775 else
9776 expr = convert_like (conv, expr, complain);
9778 /* Free all the conversions we allocated. */
9779 obstack_free (&conversion_obstack, p);
9781 return expr;
9784 tree
9785 perform_implicit_conversion (tree type, tree expr, tsubst_flags_t complain)
9787 return perform_implicit_conversion_flags (type, expr, complain,
9788 LOOKUP_IMPLICIT);
9791 /* Convert EXPR to TYPE (as a direct-initialization) if that is
9792 permitted. If the conversion is valid, the converted expression is
9793 returned. Otherwise, NULL_TREE is returned, except in the case
9794 that TYPE is a class type; in that case, an error is issued. If
9795 C_CAST_P is true, then this direct-initialization is taking
9796 place as part of a static_cast being attempted as part of a C-style
9797 cast. */
9799 tree
9800 perform_direct_initialization_if_possible (tree type,
9801 tree expr,
9802 bool c_cast_p,
9803 tsubst_flags_t complain)
9805 conversion *conv;
9806 void *p;
9808 if (type == error_mark_node || error_operand_p (expr))
9809 return error_mark_node;
9810 /* [dcl.init]
9812 If the destination type is a (possibly cv-qualified) class type:
9814 -- If the initialization is direct-initialization ...,
9815 constructors are considered. ... If no constructor applies, or
9816 the overload resolution is ambiguous, the initialization is
9817 ill-formed. */
9818 if (CLASS_TYPE_P (type))
9820 vec<tree, va_gc> *args = make_tree_vector_single (expr);
9821 expr = build_special_member_call (NULL_TREE, complete_ctor_identifier,
9822 &args, type, LOOKUP_NORMAL, complain);
9823 release_tree_vector (args);
9824 return build_cplus_new (type, expr, complain);
9827 /* Get the high-water mark for the CONVERSION_OBSTACK. */
9828 p = conversion_obstack_alloc (0);
9830 conv = implicit_conversion (type, TREE_TYPE (expr), expr,
9831 c_cast_p,
9832 LOOKUP_NORMAL, complain);
9833 if (!conv || conv->bad_p)
9834 expr = NULL_TREE;
9835 else
9836 expr = convert_like_real (conv, expr, NULL_TREE, 0, 0,
9837 /*issue_conversion_warnings=*/false,
9838 c_cast_p,
9839 complain);
9841 /* Free all the conversions we allocated. */
9842 obstack_free (&conversion_obstack, p);
9844 return expr;
9847 /* When initializing a reference that lasts longer than a full-expression,
9848 this special rule applies:
9850 [class.temporary]
9852 The temporary to which the reference is bound or the temporary
9853 that is the complete object to which the reference is bound
9854 persists for the lifetime of the reference.
9856 The temporaries created during the evaluation of the expression
9857 initializing the reference, except the temporary to which the
9858 reference is bound, are destroyed at the end of the
9859 full-expression in which they are created.
9861 In that case, we store the converted expression into a new
9862 VAR_DECL in a new scope.
9864 However, we want to be careful not to create temporaries when
9865 they are not required. For example, given:
9867 struct B {};
9868 struct D : public B {};
9869 D f();
9870 const B& b = f();
9872 there is no need to copy the return value from "f"; we can just
9873 extend its lifetime. Similarly, given:
9875 struct S {};
9876 struct T { operator S(); };
9877 T t;
9878 const S& s = t;
9880 we can extend the lifetime of the return value of the conversion
9881 operator.
9883 The next several functions are involved in this lifetime extension. */
9885 /* DECL is a VAR_DECL or FIELD_DECL whose type is a REFERENCE_TYPE. The
9886 reference is being bound to a temporary. Create and return a new
9887 VAR_DECL with the indicated TYPE; this variable will store the value to
9888 which the reference is bound. */
9890 tree
9891 make_temporary_var_for_ref_to_temp (tree decl, tree type)
9893 tree var;
9895 /* Create the variable. */
9896 var = create_temporary_var (type);
9898 /* Register the variable. */
9899 if (VAR_P (decl)
9900 && (TREE_STATIC (decl) || CP_DECL_THREAD_LOCAL_P (decl)))
9902 /* Namespace-scope or local static; give it a mangled name. */
9903 /* FIXME share comdat with decl? */
9904 tree name;
9906 TREE_STATIC (var) = TREE_STATIC (decl);
9907 CP_DECL_THREAD_LOCAL_P (var) = CP_DECL_THREAD_LOCAL_P (decl);
9908 set_decl_tls_model (var, DECL_TLS_MODEL (decl));
9909 name = mangle_ref_init_variable (decl);
9910 DECL_NAME (var) = name;
9911 SET_DECL_ASSEMBLER_NAME (var, name);
9912 var = pushdecl_top_level (var);
9914 else
9915 /* Create a new cleanup level if necessary. */
9916 maybe_push_cleanup_level (type);
9918 return var;
9921 /* EXPR is the initializer for a variable DECL of reference or
9922 std::initializer_list type. Create, push and return a new VAR_DECL
9923 for the initializer so that it will live as long as DECL. Any
9924 cleanup for the new variable is returned through CLEANUP, and the
9925 code to initialize the new variable is returned through INITP. */
9927 static tree
9928 set_up_extended_ref_temp (tree decl, tree expr, vec<tree, va_gc> **cleanups,
9929 tree *initp)
9931 tree init;
9932 tree type;
9933 tree var;
9935 /* Create the temporary variable. */
9936 type = TREE_TYPE (expr);
9937 var = make_temporary_var_for_ref_to_temp (decl, type);
9938 layout_decl (var, 0);
9939 /* If the rvalue is the result of a function call it will be
9940 a TARGET_EXPR. If it is some other construct (such as a
9941 member access expression where the underlying object is
9942 itself the result of a function call), turn it into a
9943 TARGET_EXPR here. It is important that EXPR be a
9944 TARGET_EXPR below since otherwise the INIT_EXPR will
9945 attempt to make a bitwise copy of EXPR to initialize
9946 VAR. */
9947 if (TREE_CODE (expr) != TARGET_EXPR)
9948 expr = get_target_expr (expr);
9950 if (TREE_CODE (decl) == FIELD_DECL
9951 && extra_warnings && !TREE_NO_WARNING (decl))
9953 warning (OPT_Wextra, "a temporary bound to %qD only persists "
9954 "until the constructor exits", decl);
9955 TREE_NO_WARNING (decl) = true;
9958 /* Recursively extend temps in this initializer. */
9959 TARGET_EXPR_INITIAL (expr)
9960 = extend_ref_init_temps (decl, TARGET_EXPR_INITIAL (expr), cleanups);
9962 /* Any reference temp has a non-trivial initializer. */
9963 DECL_NONTRIVIALLY_INITIALIZED_P (var) = true;
9965 /* If the initializer is constant, put it in DECL_INITIAL so we get
9966 static initialization and use in constant expressions. */
9967 init = maybe_constant_init (expr);
9968 if (TREE_CONSTANT (init))
9970 if (literal_type_p (type) && CP_TYPE_CONST_NON_VOLATILE_P (type))
9972 /* 5.19 says that a constant expression can include an
9973 lvalue-rvalue conversion applied to "a glvalue of literal type
9974 that refers to a non-volatile temporary object initialized
9975 with a constant expression". Rather than try to communicate
9976 that this VAR_DECL is a temporary, just mark it constexpr.
9978 Currently this is only useful for initializer_list temporaries,
9979 since reference vars can't appear in constant expressions. */
9980 DECL_DECLARED_CONSTEXPR_P (var) = true;
9981 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (var) = true;
9982 TREE_CONSTANT (var) = true;
9984 DECL_INITIAL (var) = init;
9985 init = NULL_TREE;
9987 else
9988 /* Create the INIT_EXPR that will initialize the temporary
9989 variable. */
9990 init = split_nonconstant_init (var, expr);
9991 if (at_function_scope_p ())
9993 add_decl_expr (var);
9995 if (TREE_STATIC (var))
9996 init = add_stmt_to_compound (init, register_dtor_fn (var));
9997 else
9999 tree cleanup = cxx_maybe_build_cleanup (var, tf_warning_or_error);
10000 if (cleanup)
10001 vec_safe_push (*cleanups, cleanup);
10004 /* We must be careful to destroy the temporary only
10005 after its initialization has taken place. If the
10006 initialization throws an exception, then the
10007 destructor should not be run. We cannot simply
10008 transform INIT into something like:
10010 (INIT, ({ CLEANUP_STMT; }))
10012 because emit_local_var always treats the
10013 initializer as a full-expression. Thus, the
10014 destructor would run too early; it would run at the
10015 end of initializing the reference variable, rather
10016 than at the end of the block enclosing the
10017 reference variable.
10019 The solution is to pass back a cleanup expression
10020 which the caller is responsible for attaching to
10021 the statement tree. */
10023 else
10025 rest_of_decl_compilation (var, /*toplev=*/1, at_eof);
10026 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
10028 if (CP_DECL_THREAD_LOCAL_P (var))
10029 tls_aggregates = tree_cons (NULL_TREE, var,
10030 tls_aggregates);
10031 else
10032 static_aggregates = tree_cons (NULL_TREE, var,
10033 static_aggregates);
10035 else
10036 /* Check whether the dtor is callable. */
10037 cxx_maybe_build_cleanup (var, tf_warning_or_error);
10039 /* Avoid -Wunused-variable warning (c++/38958). */
10040 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
10041 && VAR_P (decl))
10042 TREE_USED (decl) = DECL_READ_P (decl) = true;
10044 *initp = init;
10045 return var;
10048 /* Convert EXPR to the indicated reference TYPE, in a way suitable for
10049 initializing a variable of that TYPE. */
10051 tree
10052 initialize_reference (tree type, tree expr,
10053 int flags, tsubst_flags_t complain)
10055 conversion *conv;
10056 void *p;
10057 location_t loc = EXPR_LOC_OR_LOC (expr, input_location);
10059 if (type == error_mark_node || error_operand_p (expr))
10060 return error_mark_node;
10062 /* Get the high-water mark for the CONVERSION_OBSTACK. */
10063 p = conversion_obstack_alloc (0);
10065 conv = reference_binding (type, TREE_TYPE (expr), expr, /*c_cast_p=*/false,
10066 flags, complain);
10067 if (!conv || conv->bad_p)
10069 if (complain & tf_error)
10071 if (conv)
10072 convert_like (conv, expr, complain);
10073 else if (!CP_TYPE_CONST_P (TREE_TYPE (type))
10074 && !TYPE_REF_IS_RVALUE (type)
10075 && !lvalue_p (expr))
10076 error_at (loc, "invalid initialization of non-const reference of "
10077 "type %qT from an rvalue of type %qT",
10078 type, TREE_TYPE (expr));
10079 else
10080 error_at (loc, "invalid initialization of reference of type "
10081 "%qT from expression of type %qT", type,
10082 TREE_TYPE (expr));
10084 return error_mark_node;
10087 if (conv->kind == ck_ref_bind)
10088 /* Perform the conversion. */
10089 expr = convert_like (conv, expr, complain);
10090 else if (conv->kind == ck_ambig)
10091 /* We gave an error in build_user_type_conversion_1. */
10092 expr = error_mark_node;
10093 else
10094 gcc_unreachable ();
10096 /* Free all the conversions we allocated. */
10097 obstack_free (&conversion_obstack, p);
10099 return expr;
10102 /* Subroutine of extend_ref_init_temps. Possibly extend one initializer,
10103 which is bound either to a reference or a std::initializer_list. */
10105 static tree
10106 extend_ref_init_temps_1 (tree decl, tree init, vec<tree, va_gc> **cleanups)
10108 tree sub = init;
10109 tree *p;
10110 STRIP_NOPS (sub);
10111 if (TREE_CODE (sub) == COMPOUND_EXPR)
10113 TREE_OPERAND (sub, 1)
10114 = extend_ref_init_temps_1 (decl, TREE_OPERAND (sub, 1), cleanups);
10115 return init;
10117 if (TREE_CODE (sub) != ADDR_EXPR)
10118 return init;
10119 /* Deal with binding to a subobject. */
10120 for (p = &TREE_OPERAND (sub, 0); TREE_CODE (*p) == COMPONENT_REF; )
10121 p = &TREE_OPERAND (*p, 0);
10122 if (TREE_CODE (*p) == TARGET_EXPR)
10124 tree subinit = NULL_TREE;
10125 *p = set_up_extended_ref_temp (decl, *p, cleanups, &subinit);
10126 recompute_tree_invariant_for_addr_expr (sub);
10127 if (init != sub)
10128 init = fold_convert (TREE_TYPE (init), sub);
10129 if (subinit)
10130 init = build2 (COMPOUND_EXPR, TREE_TYPE (init), subinit, init);
10132 return init;
10135 /* INIT is part of the initializer for DECL. If there are any
10136 reference or initializer lists being initialized, extend their
10137 lifetime to match that of DECL. */
10139 tree
10140 extend_ref_init_temps (tree decl, tree init, vec<tree, va_gc> **cleanups)
10142 tree type = TREE_TYPE (init);
10143 if (processing_template_decl)
10144 return init;
10145 if (TREE_CODE (type) == REFERENCE_TYPE)
10146 init = extend_ref_init_temps_1 (decl, init, cleanups);
10147 else if (is_std_init_list (type))
10149 /* The temporary array underlying a std::initializer_list
10150 is handled like a reference temporary. */
10151 tree ctor = init;
10152 if (TREE_CODE (ctor) == TARGET_EXPR)
10153 ctor = TARGET_EXPR_INITIAL (ctor);
10154 if (TREE_CODE (ctor) == CONSTRUCTOR)
10156 tree array = CONSTRUCTOR_ELT (ctor, 0)->value;
10157 array = extend_ref_init_temps_1 (decl, array, cleanups);
10158 CONSTRUCTOR_ELT (ctor, 0)->value = array;
10161 else if (TREE_CODE (init) == CONSTRUCTOR)
10163 unsigned i;
10164 constructor_elt *p;
10165 vec<constructor_elt, va_gc> *elts = CONSTRUCTOR_ELTS (init);
10166 FOR_EACH_VEC_SAFE_ELT (elts, i, p)
10167 p->value = extend_ref_init_temps (decl, p->value, cleanups);
10170 return init;
10173 /* Returns true iff an initializer for TYPE could contain temporaries that
10174 need to be extended because they are bound to references or
10175 std::initializer_list. */
10177 bool
10178 type_has_extended_temps (tree type)
10180 type = strip_array_types (type);
10181 if (TREE_CODE (type) == REFERENCE_TYPE)
10182 return true;
10183 if (CLASS_TYPE_P (type))
10185 if (is_std_init_list (type))
10186 return true;
10187 for (tree f = next_initializable_field (TYPE_FIELDS (type));
10188 f; f = next_initializable_field (DECL_CHAIN (f)))
10189 if (type_has_extended_temps (TREE_TYPE (f)))
10190 return true;
10192 return false;
10195 /* Returns true iff TYPE is some variant of std::initializer_list. */
10197 bool
10198 is_std_init_list (tree type)
10200 /* Look through typedefs. */
10201 if (!TYPE_P (type))
10202 return false;
10203 if (cxx_dialect == cxx98)
10204 return false;
10205 type = TYPE_MAIN_VARIANT (type);
10206 return (CLASS_TYPE_P (type)
10207 && CP_TYPE_CONTEXT (type) == std_node
10208 && strcmp (TYPE_NAME_STRING (type), "initializer_list") == 0);
10211 /* Returns true iff DECL is a list constructor: i.e. a constructor which
10212 will accept an argument list of a single std::initializer_list<T>. */
10214 bool
10215 is_list_ctor (tree decl)
10217 tree args = FUNCTION_FIRST_USER_PARMTYPE (decl);
10218 tree arg;
10220 if (!args || args == void_list_node)
10221 return false;
10223 arg = non_reference (TREE_VALUE (args));
10224 if (!is_std_init_list (arg))
10225 return false;
10227 args = TREE_CHAIN (args);
10229 if (args && args != void_list_node && !TREE_PURPOSE (args))
10230 /* There are more non-defaulted parms. */
10231 return false;
10233 return true;
10236 #include "gt-cp-call.h"