1 /* Functions related to invoking methods and overloaded functions.
2 Copyright (C) 1987, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
5 Free Software Foundation, Inc.
6 Contributed by Michael Tiemann (tiemann@cygnus.com) and
7 modified by Brendan Kehoe (brendan@cygnus.com).
9 This file is part of GCC.
11 GCC is free software; you can redistribute it and/or modify
12 it under the terms of the GNU General Public License as published by
13 the Free Software Foundation; either version 3, or (at your option)
16 GCC is distributed in the hope that it will be useful,
17 but WITHOUT ANY WARRANTY; without even the implied warranty of
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 GNU General Public License for more details.
21 You should have received a copy of the GNU General Public License
22 along with GCC; see the file COPYING3. If not see
23 <http://www.gnu.org/licenses/>. */
26 /* High-level class interface. */
30 #include "coretypes.h"
37 #include "diagnostic-core.h"
41 #include "langhooks.h"
42 #include "c-family/c-objc.h"
45 /* The various kinds of conversion. */
47 typedef enum conversion_kind {
63 /* The rank of the conversion. Order of the enumerals matters; better
64 conversions should come earlier in the list. */
66 typedef enum conversion_rank {
77 /* An implicit conversion sequence, in the sense of [over.best.ics].
78 The first conversion to be performed is at the end of the chain.
79 That conversion is always a cr_identity conversion. */
81 typedef struct conversion conversion;
83 /* The kind of conversion represented by this step. */
85 /* The rank of this conversion. */
87 BOOL_BITFIELD user_conv_p : 1;
88 BOOL_BITFIELD ellipsis_p : 1;
89 BOOL_BITFIELD this_p : 1;
90 /* True if this conversion would be permitted with a bending of
91 language standards, e.g. disregarding pointer qualifiers or
92 converting integers to pointers. */
93 BOOL_BITFIELD bad_p : 1;
94 /* If KIND is ck_ref_bind ck_base_conv, true to indicate that a
95 temporary should be created to hold the result of the
97 BOOL_BITFIELD need_temporary_p : 1;
98 /* If KIND is ck_ptr or ck_pmem, true to indicate that a conversion
99 from a pointer-to-derived to pointer-to-base is being performed. */
100 BOOL_BITFIELD base_p : 1;
101 /* If KIND is ck_ref_bind, true when either an lvalue reference is
102 being bound to an lvalue expression or an rvalue reference is
103 being bound to an rvalue expression. If KIND is ck_rvalue,
104 true when we should treat an lvalue as an rvalue (12.8p33). If
105 KIND is ck_base, always false. */
106 BOOL_BITFIELD rvaluedness_matches_p: 1;
107 BOOL_BITFIELD check_narrowing: 1;
108 /* The type of the expression resulting from the conversion. */
111 /* The next conversion in the chain. Since the conversions are
112 arranged from outermost to innermost, the NEXT conversion will
113 actually be performed before this conversion. This variant is
114 used only when KIND is neither ck_identity, ck_ambig nor
115 ck_list. Please use the next_conversion function instead
116 of using this field directly. */
118 /* The expression at the beginning of the conversion chain. This
119 variant is used only if KIND is ck_identity or ck_ambig. */
121 /* The array of conversions for an initializer_list, so this
122 variant is used only when KIN D is ck_list. */
125 /* The function candidate corresponding to this conversion
126 sequence. This field is only used if KIND is ck_user. */
127 struct z_candidate *cand;
130 #define CONVERSION_RANK(NODE) \
131 ((NODE)->bad_p ? cr_bad \
132 : (NODE)->ellipsis_p ? cr_ellipsis \
133 : (NODE)->user_conv_p ? cr_user \
136 #define BAD_CONVERSION_RANK(NODE) \
137 ((NODE)->ellipsis_p ? cr_ellipsis \
138 : (NODE)->user_conv_p ? cr_user \
141 static struct obstack conversion_obstack;
142 static bool conversion_obstack_initialized;
143 struct rejection_reason;
145 static struct z_candidate * tourney (struct z_candidate *);
146 static int equal_functions (tree, tree);
147 static int joust (struct z_candidate *, struct z_candidate *, bool);
148 static int compare_ics (conversion *, conversion *);
149 static tree build_over_call (struct z_candidate *, int, tsubst_flags_t);
150 static tree build_java_interface_fn_ref (tree, tree);
151 #define convert_like(CONV, EXPR, COMPLAIN) \
152 convert_like_real ((CONV), (EXPR), NULL_TREE, 0, 0, \
153 /*issue_conversion_warnings=*/true, \
154 /*c_cast_p=*/false, (COMPLAIN))
155 #define convert_like_with_context(CONV, EXPR, FN, ARGNO, COMPLAIN ) \
156 convert_like_real ((CONV), (EXPR), (FN), (ARGNO), 0, \
157 /*issue_conversion_warnings=*/true, \
158 /*c_cast_p=*/false, (COMPLAIN))
159 static tree convert_like_real (conversion *, tree, tree, int, int, bool,
160 bool, tsubst_flags_t);
161 static void op_error (enum tree_code, enum tree_code, tree, tree,
163 static struct z_candidate *build_user_type_conversion_1 (tree, tree, int);
164 static void print_z_candidate (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,gc) *,
171 tree, tree, tree, int, unification_kind_t);
172 static struct z_candidate *add_template_candidate_real
173 (struct z_candidate **, tree, tree, tree, tree, const VEC(tree,gc) *,
174 tree, tree, tree, int, tree, unification_kind_t);
175 static struct z_candidate *add_template_conv_candidate
176 (struct z_candidate **, tree, tree, tree, const VEC(tree,gc) *, tree,
178 static void add_builtin_candidates
179 (struct z_candidate **, enum tree_code, enum tree_code,
181 static void add_builtin_candidate
182 (struct z_candidate **, enum tree_code, enum tree_code,
183 tree, tree, tree, tree *, tree *, int);
184 static bool is_complete (tree);
185 static void build_builtin_candidate
186 (struct z_candidate **, tree, tree, tree, tree *, tree *,
188 static struct z_candidate *add_conv_candidate
189 (struct z_candidate **, tree, tree, tree, const VEC(tree,gc) *, tree,
191 static struct z_candidate *add_function_candidate
192 (struct z_candidate **, tree, tree, tree, const VEC(tree,gc) *, tree,
194 static conversion *implicit_conversion (tree, tree, tree, bool, int);
195 static conversion *standard_conversion (tree, tree, tree, bool, int);
196 static conversion *reference_binding (tree, tree, tree, bool, int);
197 static conversion *build_conv (conversion_kind, tree, conversion *);
198 static conversion *build_list_conv (tree, tree, int);
199 static conversion *next_conversion (conversion *);
200 static bool is_subseq (conversion *, conversion *);
201 static conversion *maybe_handle_ref_bind (conversion **);
202 static void maybe_handle_implicit_object (conversion **);
203 static struct z_candidate *add_candidate
204 (struct z_candidate **, tree, tree, const VEC(tree,gc) *, size_t,
205 conversion **, tree, tree, int, struct rejection_reason *);
206 static tree source_type (conversion *);
207 static void add_warning (struct z_candidate *, struct z_candidate *);
208 static bool reference_compatible_p (tree, tree);
209 static conversion *direct_reference_binding (tree, conversion *);
210 static bool promoted_arithmetic_type_p (tree);
211 static conversion *conditional_conversion (tree, tree);
212 static char *name_as_c_string (tree, tree, bool *);
213 static tree prep_operand (tree);
214 static void add_candidates (tree, tree, const VEC(tree,gc) *, tree, tree, bool,
215 tree, tree, int, struct z_candidate **);
216 static conversion *merge_conversion_sequences (conversion *, conversion *);
217 static bool magic_varargs_p (tree);
218 static tree build_temp (tree, tree, int, diagnostic_t *, tsubst_flags_t);
220 /* Returns nonzero iff the destructor name specified in NAME matches BASETYPE.
221 NAME can take many forms... */
224 check_dtor_name (tree basetype, tree name)
226 /* Just accept something we've already complained about. */
227 if (name == error_mark_node)
230 if (TREE_CODE (name) == TYPE_DECL)
231 name = TREE_TYPE (name);
232 else if (TYPE_P (name))
234 else if (TREE_CODE (name) == IDENTIFIER_NODE)
236 if ((MAYBE_CLASS_TYPE_P (basetype)
237 && name == constructor_name (basetype))
238 || (TREE_CODE (basetype) == ENUMERAL_TYPE
239 && name == TYPE_IDENTIFIER (basetype)))
242 name = get_type_value (name);
248 template <class T> struct S { ~S(); };
252 NAME will be a class template. */
253 gcc_assert (DECL_CLASS_TEMPLATE_P (name));
257 if (!name || name == error_mark_node)
259 return same_type_p (TYPE_MAIN_VARIANT (basetype), TYPE_MAIN_VARIANT (name));
262 /* We want the address of a function or method. We avoid creating a
263 pointer-to-member function. */
266 build_addr_func (tree function)
268 tree type = TREE_TYPE (function);
270 /* We have to do these by hand to avoid real pointer to member
272 if (TREE_CODE (type) == METHOD_TYPE)
274 if (TREE_CODE (function) == OFFSET_REF)
276 tree object = build_address (TREE_OPERAND (function, 0));
277 return get_member_function_from_ptrfunc (&object,
278 TREE_OPERAND (function, 1));
280 function = build_address (function);
283 function = decay_conversion (function);
288 /* Build a CALL_EXPR, we can handle FUNCTION_TYPEs, METHOD_TYPEs, or
289 POINTER_TYPE to those. Note, pointer to member function types
290 (TYPE_PTRMEMFUNC_P) must be handled by our callers. There are
291 two variants. build_call_a is the primitive taking an array of
292 arguments, while build_call_n is a wrapper that handles varargs. */
295 build_call_n (tree function, int n, ...)
298 return build_call_a (function, 0, NULL);
301 tree *argarray = XALLOCAVEC (tree, n);
306 for (i = 0; i < n; i++)
307 argarray[i] = va_arg (ap, tree);
309 return build_call_a (function, n, argarray);
313 /* Update various flags in cfun and the call itself based on what is being
314 called. Split out of build_call_a so that bot_manip can use it too. */
317 set_flags_from_callee (tree call)
320 tree decl = get_callee_fndecl (call);
322 /* We check both the decl and the type; a function may be known not to
323 throw without being declared throw(). */
324 nothrow = ((decl && TREE_NOTHROW (decl))
325 || TYPE_NOTHROW_P (TREE_TYPE (TREE_TYPE (CALL_EXPR_FN (call)))));
327 if (!nothrow && at_function_scope_p () && cfun && cp_function_chain)
328 cp_function_chain->can_throw = 1;
330 if (decl && TREE_THIS_VOLATILE (decl) && cfun && cp_function_chain)
331 current_function_returns_abnormally = 1;
333 TREE_NOTHROW (call) = nothrow;
337 build_call_a (tree function, int n, tree *argarray)
344 function = build_addr_func (function);
346 gcc_assert (TYPE_PTR_P (TREE_TYPE (function)));
347 fntype = TREE_TYPE (TREE_TYPE (function));
348 gcc_assert (TREE_CODE (fntype) == FUNCTION_TYPE
349 || TREE_CODE (fntype) == METHOD_TYPE);
350 result_type = TREE_TYPE (fntype);
351 /* An rvalue has no cv-qualifiers. */
352 if (SCALAR_TYPE_P (result_type) || VOID_TYPE_P (result_type))
353 result_type = cv_unqualified (result_type);
355 function = build_call_array_loc (input_location,
356 result_type, function, n, argarray);
357 set_flags_from_callee (function);
359 decl = get_callee_fndecl (function);
361 if (decl && !TREE_USED (decl))
363 /* We invoke build_call directly for several library
364 functions. These may have been declared normally if
365 we're building libgcc, so we can't just check
367 gcc_assert (DECL_ARTIFICIAL (decl)
368 || !strncmp (IDENTIFIER_POINTER (DECL_NAME (decl)),
373 if (decl && TREE_DEPRECATED (decl))
374 warn_deprecated_use (decl, NULL_TREE);
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;
398 /* Build something of the form ptr->method (args)
399 or object.method (args). This can also build
400 calls to constructors, and find friends.
402 Member functions always take their class variable
405 INSTANCE is a class instance.
407 NAME is the name of the method desired, usually an IDENTIFIER_NODE.
409 PARMS help to figure out what that NAME really refers to.
411 BASETYPE_PATH, if non-NULL, contains a chain from the type of INSTANCE
412 down to the real instance type to use for access checking. We need this
413 information to get protected accesses correct.
415 FLAGS is the logical disjunction of zero or more LOOKUP_
416 flags. See cp-tree.h for more info.
418 If this is all OK, calls build_function_call with the resolved
421 This function must also handle being called to perform
422 initialization, promotion/coercion of arguments, and
423 instantiation of default parameters.
425 Note that NAME may refer to an instance variable name. If
426 `operator()()' is defined for the type of that field, then we return
429 /* New overloading code. */
431 typedef struct z_candidate z_candidate;
433 typedef struct candidate_warning candidate_warning;
434 struct candidate_warning {
436 candidate_warning *next;
439 /* Information for providing diagnostics about why overloading failed. */
441 enum rejection_reason_code {
444 rr_explicit_conversion,
445 rr_template_conversion,
447 rr_bad_arg_conversion,
448 rr_template_unification,
449 rr_template_instantiation,
453 struct conversion_info {
454 /* The index of the argument, 0-based. */
456 /* The type of the actual argument. */
458 /* The type of the formal argument. */
462 struct rejection_reason {
463 enum rejection_reason_code code;
465 /* Information about an arity mismatch. */
467 /* The expected number of arguments. */
469 /* The actual number of arguments in the call. */
471 /* Whether the call was a varargs call. */
474 /* Information about an argument conversion mismatch. */
475 struct conversion_info conversion;
476 /* Same, but for bad argument conversions. */
477 struct conversion_info bad_conversion;
478 /* Information about template unification failures. These are the
479 parameters passed to fn_type_unification. */
487 unification_kind_t strict;
489 } template_unification;
490 /* Information about template instantiation failures. These are the
491 parameters passed to instantiate_template. */
495 } template_instantiation;
500 /* The FUNCTION_DECL that will be called if this candidate is
501 selected by overload resolution. */
503 /* If not NULL_TREE, the first argument to use when calling this
506 /* The rest of the arguments to use when calling this function. If
507 there are no further arguments this may be NULL or it may be an
509 const VEC(tree,gc) *args;
510 /* The implicit conversion sequences for each of the arguments to
513 /* The number of implicit conversion sequences. */
515 /* If FN is a user-defined conversion, the standard conversion
516 sequence from the type returned by FN to the desired destination
518 conversion *second_conv;
520 struct rejection_reason *reason;
521 /* If FN is a member function, the binfo indicating the path used to
522 qualify the name of FN at the call site. This path is used to
523 determine whether or not FN is accessible if it is selected by
524 overload resolution. The DECL_CONTEXT of FN will always be a
525 (possibly improper) base of this binfo. */
527 /* If FN is a non-static member function, the binfo indicating the
528 subobject to which the `this' pointer should be converted if FN
529 is selected by overload resolution. The type pointed to the by
530 the `this' pointer must correspond to the most derived class
531 indicated by the CONVERSION_PATH. */
532 tree conversion_path;
535 candidate_warning *warnings;
539 /* Returns true iff T is a null pointer constant in the sense of
543 null_ptr_cst_p (tree t)
547 A null pointer constant is an integral constant expression
548 (_expr.const_) rvalue of integer type that evaluates to zero or
549 an rvalue of type std::nullptr_t. */
550 if (NULLPTR_TYPE_P (TREE_TYPE (t)))
552 if (CP_INTEGRAL_TYPE_P (TREE_TYPE (t)))
554 /* Core issue 903 says only literal 0 is a null pointer constant. */
555 if (cxx_dialect < cxx0x)
556 t = integral_constant_value (t);
558 if (integer_zerop (t) && !TREE_OVERFLOW (t))
564 /* Returns true iff T is a null member pointer value (4.11). */
567 null_member_pointer_value_p (tree t)
569 tree type = TREE_TYPE (t);
572 else if (TYPE_PTRMEMFUNC_P (type))
573 return (TREE_CODE (t) == CONSTRUCTOR
574 && integer_zerop (CONSTRUCTOR_ELT (t, 0)->value));
575 else if (TYPE_PTRMEM_P (type))
576 return integer_all_onesp (t);
581 /* Returns nonzero if PARMLIST consists of only default parms,
582 ellipsis, and/or undeduced parameter packs. */
585 sufficient_parms_p (const_tree parmlist)
587 for (; parmlist && parmlist != void_list_node;
588 parmlist = TREE_CHAIN (parmlist))
589 if (!TREE_PURPOSE (parmlist)
590 && !PACK_EXPANSION_P (TREE_VALUE (parmlist)))
595 /* Allocate N bytes of memory from the conversion obstack. The memory
596 is zeroed before being returned. */
599 conversion_obstack_alloc (size_t n)
602 if (!conversion_obstack_initialized)
604 gcc_obstack_init (&conversion_obstack);
605 conversion_obstack_initialized = true;
607 p = obstack_alloc (&conversion_obstack, n);
612 /* Allocate rejection reasons. */
614 static struct rejection_reason *
615 alloc_rejection (enum rejection_reason_code code)
617 struct rejection_reason *p;
618 p = (struct rejection_reason *) conversion_obstack_alloc (sizeof *p);
623 static struct rejection_reason *
624 arity_rejection (tree first_arg, int expected, int actual)
626 struct rejection_reason *r = alloc_rejection (rr_arity);
627 int adjust = first_arg != NULL_TREE;
628 r->u.arity.expected = expected - adjust;
629 r->u.arity.actual = actual - adjust;
633 static struct rejection_reason *
634 arg_conversion_rejection (tree first_arg, int n_arg, tree from, tree to)
636 struct rejection_reason *r = alloc_rejection (rr_arg_conversion);
637 int adjust = first_arg != NULL_TREE;
638 r->u.conversion.n_arg = n_arg - adjust;
639 r->u.conversion.from_type = from;
640 r->u.conversion.to_type = to;
644 static struct rejection_reason *
645 bad_arg_conversion_rejection (tree first_arg, int n_arg, tree from, tree to)
647 struct rejection_reason *r = alloc_rejection (rr_bad_arg_conversion);
648 int adjust = first_arg != NULL_TREE;
649 r->u.bad_conversion.n_arg = n_arg - adjust;
650 r->u.bad_conversion.from_type = from;
651 r->u.bad_conversion.to_type = to;
655 static struct rejection_reason *
656 explicit_conversion_rejection (tree from, tree to)
658 struct rejection_reason *r = alloc_rejection (rr_explicit_conversion);
659 r->u.conversion.n_arg = 0;
660 r->u.conversion.from_type = from;
661 r->u.conversion.to_type = to;
665 static struct rejection_reason *
666 template_conversion_rejection (tree from, tree to)
668 struct rejection_reason *r = alloc_rejection (rr_template_conversion);
669 r->u.conversion.n_arg = 0;
670 r->u.conversion.from_type = from;
671 r->u.conversion.to_type = to;
675 static struct rejection_reason *
676 template_unification_rejection (tree tmpl, tree explicit_targs, tree targs,
677 const tree *args, unsigned int nargs,
678 tree return_type, unification_kind_t strict,
681 size_t args_n_bytes = sizeof (*args) * nargs;
682 tree *args1 = (tree *) conversion_obstack_alloc (args_n_bytes);
683 struct rejection_reason *r = alloc_rejection (rr_template_unification);
684 r->u.template_unification.tmpl = tmpl;
685 r->u.template_unification.explicit_targs = explicit_targs;
686 r->u.template_unification.targs = targs;
687 /* Copy args to our own storage. */
688 memcpy (args1, args, args_n_bytes);
689 r->u.template_unification.args = args1;
690 r->u.template_unification.nargs = nargs;
691 r->u.template_unification.return_type = return_type;
692 r->u.template_unification.strict = strict;
693 r->u.template_unification.flags = flags;
697 static struct rejection_reason *
698 template_unification_error_rejection (void)
700 return alloc_rejection (rr_template_unification);
703 static struct rejection_reason *
704 template_instantiation_rejection (tree tmpl, tree targs)
706 struct rejection_reason *r = alloc_rejection (rr_template_instantiation);
707 r->u.template_instantiation.tmpl = tmpl;
708 r->u.template_instantiation.targs = targs;
712 static struct rejection_reason *
713 invalid_copy_with_fn_template_rejection (void)
715 struct rejection_reason *r = alloc_rejection (rr_invalid_copy);
719 /* Dynamically allocate a conversion. */
722 alloc_conversion (conversion_kind kind)
725 c = (conversion *) conversion_obstack_alloc (sizeof (conversion));
730 #ifdef ENABLE_CHECKING
732 /* Make sure that all memory on the conversion obstack has been
736 validate_conversion_obstack (void)
738 if (conversion_obstack_initialized)
739 gcc_assert ((obstack_next_free (&conversion_obstack)
740 == obstack_base (&conversion_obstack)));
743 #endif /* ENABLE_CHECKING */
745 /* Dynamically allocate an array of N conversions. */
748 alloc_conversions (size_t n)
750 return (conversion **) conversion_obstack_alloc (n * sizeof (conversion *));
754 build_conv (conversion_kind code, tree type, conversion *from)
757 conversion_rank rank = CONVERSION_RANK (from);
759 /* Note that the caller is responsible for filling in t->cand for
760 user-defined conversions. */
761 t = alloc_conversion (code);
784 t->user_conv_p = (code == ck_user || from->user_conv_p);
785 t->bad_p = from->bad_p;
790 /* Represent a conversion from CTOR, a braced-init-list, to TYPE, a
791 specialization of std::initializer_list<T>, if such a conversion is
795 build_list_conv (tree type, tree ctor, int flags)
797 tree elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (type), 0);
798 unsigned len = CONSTRUCTOR_NELTS (ctor);
799 conversion **subconvs = alloc_conversions (len);
804 /* Within a list-initialization we can have more user-defined
806 flags &= ~LOOKUP_NO_CONVERSION;
807 /* But no narrowing conversions. */
808 flags |= LOOKUP_NO_NARROWING;
810 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor), i, val)
813 = implicit_conversion (elttype, TREE_TYPE (val), val,
821 t = alloc_conversion (ck_list);
823 t->u.list = subconvs;
826 for (i = 0; i < len; ++i)
828 conversion *sub = subconvs[i];
829 if (sub->rank > t->rank)
831 if (sub->user_conv_p)
832 t->user_conv_p = true;
840 /* Return the next conversion of the conversion chain (if applicable),
841 or NULL otherwise. Please use this function instead of directly
842 accessing fields of struct conversion. */
845 next_conversion (conversion *conv)
848 || conv->kind == ck_identity
849 || conv->kind == ck_ambig
850 || conv->kind == ck_list)
855 /* Subroutine of build_aggr_conv: check whether CTOR, a braced-init-list,
856 is a valid aggregate initializer for array type ATYPE. */
859 can_convert_array (tree atype, tree ctor, int flags)
862 tree elttype = TREE_TYPE (atype);
863 for (i = 0; i < CONSTRUCTOR_NELTS (ctor); ++i)
865 tree val = CONSTRUCTOR_ELT (ctor, i)->value;
867 if (TREE_CODE (elttype) == ARRAY_TYPE
868 && TREE_CODE (val) == CONSTRUCTOR)
869 ok = can_convert_array (elttype, val, flags);
871 ok = can_convert_arg (elttype, TREE_TYPE (val), val, flags);
878 /* Represent a conversion from CTOR, a braced-init-list, to TYPE, an
879 aggregate class, if such a conversion is possible. */
882 build_aggr_conv (tree type, tree ctor, int flags)
884 unsigned HOST_WIDE_INT i = 0;
886 tree field = next_initializable_field (TYPE_FIELDS (type));
887 tree empty_ctor = NULL_TREE;
889 for (; field; field = next_initializable_field (DECL_CHAIN (field)))
891 tree ftype = TREE_TYPE (field);
895 if (i < CONSTRUCTOR_NELTS (ctor))
896 val = CONSTRUCTOR_ELT (ctor, i)->value;
899 if (empty_ctor == NULL_TREE)
900 empty_ctor = build_constructor (init_list_type_node, NULL);
905 if (TREE_CODE (ftype) == ARRAY_TYPE
906 && TREE_CODE (val) == CONSTRUCTOR)
907 ok = can_convert_array (ftype, val, flags);
909 ok = can_convert_arg (ftype, TREE_TYPE (val), val, flags);
914 if (TREE_CODE (type) == UNION_TYPE)
918 if (i < CONSTRUCTOR_NELTS (ctor))
921 c = alloc_conversion (ck_aggr);
924 c->user_conv_p = true;
929 /* Represent a conversion from CTOR, a braced-init-list, to TYPE, an
930 array type, if such a conversion is possible. */
933 build_array_conv (tree type, tree ctor, int flags)
936 unsigned HOST_WIDE_INT len = CONSTRUCTOR_NELTS (ctor);
937 tree elttype = TREE_TYPE (type);
942 enum conversion_rank rank = cr_exact;
944 if (TYPE_DOMAIN (type))
946 unsigned HOST_WIDE_INT alen = tree_low_cst (array_type_nelts_top (type), 1);
951 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor), i, val)
954 = implicit_conversion (elttype, TREE_TYPE (val), val,
959 if (sub->rank > rank)
961 if (sub->user_conv_p)
967 c = alloc_conversion (ck_aggr);
970 c->user_conv_p = user;
976 /* Represent a conversion from CTOR, a braced-init-list, to TYPE, a
977 complex type, if such a conversion is possible. */
980 build_complex_conv (tree type, tree ctor, int flags)
983 unsigned HOST_WIDE_INT len = CONSTRUCTOR_NELTS (ctor);
984 tree elttype = TREE_TYPE (type);
989 enum conversion_rank rank = cr_exact;
994 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor), i, val)
997 = implicit_conversion (elttype, TREE_TYPE (val), val,
1002 if (sub->rank > rank)
1004 if (sub->user_conv_p)
1010 c = alloc_conversion (ck_aggr);
1013 c->user_conv_p = user;
1019 /* Build a representation of the identity conversion from EXPR to
1020 itself. The TYPE should match the type of EXPR, if EXPR is non-NULL. */
1023 build_identity_conv (tree type, tree expr)
1027 c = alloc_conversion (ck_identity);
1034 /* Converting from EXPR to TYPE was ambiguous in the sense that there
1035 were multiple user-defined conversions to accomplish the job.
1036 Build a conversion that indicates that ambiguity. */
1039 build_ambiguous_conv (tree type, tree expr)
1043 c = alloc_conversion (ck_ambig);
1051 strip_top_quals (tree t)
1053 if (TREE_CODE (t) == ARRAY_TYPE)
1055 return cp_build_qualified_type (t, 0);
1058 /* Returns the standard conversion path (see [conv]) from type FROM to type
1059 TO, if any. For proper handling of null pointer constants, you must
1060 also pass the expression EXPR to convert from. If C_CAST_P is true,
1061 this conversion is coming from a C-style cast. */
1064 standard_conversion (tree to, tree from, tree expr, bool c_cast_p,
1067 enum tree_code fcode, tcode;
1069 bool fromref = false;
1072 to = non_reference (to);
1073 if (TREE_CODE (from) == REFERENCE_TYPE)
1076 from = TREE_TYPE (from);
1079 to = strip_top_quals (to);
1080 from = strip_top_quals (from);
1082 if ((TYPE_PTRFN_P (to) || TYPE_PTRMEMFUNC_P (to))
1083 && expr && type_unknown_p (expr))
1085 tsubst_flags_t tflags = tf_conv;
1086 if (!(flags & LOOKUP_PROTECT))
1087 tflags |= tf_no_access_control;
1088 expr = instantiate_type (to, expr, tflags);
1089 if (expr == error_mark_node)
1091 from = TREE_TYPE (expr);
1094 fcode = TREE_CODE (from);
1095 tcode = TREE_CODE (to);
1097 conv = build_identity_conv (from, expr);
1098 if (fcode == FUNCTION_TYPE || fcode == ARRAY_TYPE)
1100 from = type_decays_to (from);
1101 fcode = TREE_CODE (from);
1102 conv = build_conv (ck_lvalue, from, conv);
1104 else if (fromref || (expr && lvalue_p (expr)))
1109 bitfield_type = is_bitfield_expr_with_lowered_type (expr);
1112 from = strip_top_quals (bitfield_type);
1113 fcode = TREE_CODE (from);
1116 conv = build_conv (ck_rvalue, from, conv);
1117 if (flags & LOOKUP_PREFER_RVALUE)
1118 conv->rvaluedness_matches_p = true;
1121 /* Allow conversion between `__complex__' data types. */
1122 if (tcode == COMPLEX_TYPE && fcode == COMPLEX_TYPE)
1124 /* The standard conversion sequence to convert FROM to TO is
1125 the standard conversion sequence to perform componentwise
1127 conversion *part_conv = standard_conversion
1128 (TREE_TYPE (to), TREE_TYPE (from), NULL_TREE, c_cast_p, flags);
1132 conv = build_conv (part_conv->kind, to, conv);
1133 conv->rank = part_conv->rank;
1141 if (same_type_p (from, to))
1143 if (CLASS_TYPE_P (to) && conv->kind == ck_rvalue)
1144 conv->type = qualified_to;
1149 A null pointer constant can be converted to a pointer type; ... A
1150 null pointer constant of integral type can be converted to an
1151 rvalue of type std::nullptr_t. */
1152 if ((tcode == POINTER_TYPE || TYPE_PTR_TO_MEMBER_P (to)
1153 || NULLPTR_TYPE_P (to))
1154 && expr && null_ptr_cst_p (expr))
1155 conv = build_conv (ck_std, to, conv);
1156 else if ((tcode == INTEGER_TYPE && fcode == POINTER_TYPE)
1157 || (tcode == POINTER_TYPE && fcode == INTEGER_TYPE))
1159 /* For backwards brain damage compatibility, allow interconversion of
1160 pointers and integers with a pedwarn. */
1161 conv = build_conv (ck_std, to, conv);
1164 else if (UNSCOPED_ENUM_P (to) && fcode == INTEGER_TYPE)
1166 /* For backwards brain damage compatibility, allow interconversion of
1167 enums and integers with a pedwarn. */
1168 conv = build_conv (ck_std, to, conv);
1171 else if ((tcode == POINTER_TYPE && fcode == POINTER_TYPE)
1172 || (TYPE_PTRMEM_P (to) && TYPE_PTRMEM_P (from)))
1177 if (tcode == POINTER_TYPE
1178 && same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (from),
1181 else if (VOID_TYPE_P (TREE_TYPE (to))
1182 && !TYPE_PTRMEM_P (from)
1183 && TREE_CODE (TREE_TYPE (from)) != FUNCTION_TYPE)
1185 tree nfrom = TREE_TYPE (from);
1186 from = build_pointer_type
1187 (cp_build_qualified_type (void_type_node,
1188 cp_type_quals (nfrom)));
1189 conv = build_conv (ck_ptr, from, conv);
1191 else if (TYPE_PTRMEM_P (from))
1193 tree fbase = TYPE_PTRMEM_CLASS_TYPE (from);
1194 tree tbase = TYPE_PTRMEM_CLASS_TYPE (to);
1196 if (DERIVED_FROM_P (fbase, tbase)
1197 && (same_type_ignoring_top_level_qualifiers_p
1198 (TYPE_PTRMEM_POINTED_TO_TYPE (from),
1199 TYPE_PTRMEM_POINTED_TO_TYPE (to))))
1201 from = build_ptrmem_type (tbase,
1202 TYPE_PTRMEM_POINTED_TO_TYPE (from));
1203 conv = build_conv (ck_pmem, from, conv);
1205 else if (!same_type_p (fbase, tbase))
1208 else if (CLASS_TYPE_P (TREE_TYPE (from))
1209 && CLASS_TYPE_P (TREE_TYPE (to))
1212 An rvalue of type "pointer to cv D," where D is a
1213 class type, can be converted to an rvalue of type
1214 "pointer to cv B," where B is a base class (clause
1215 _class.derived_) of D. If B is an inaccessible
1216 (clause _class.access_) or ambiguous
1217 (_class.member.lookup_) base class of D, a program
1218 that necessitates this conversion is ill-formed.
1219 Therefore, we use DERIVED_FROM_P, and do not check
1220 access or uniqueness. */
1221 && DERIVED_FROM_P (TREE_TYPE (to), TREE_TYPE (from)))
1224 cp_build_qualified_type (TREE_TYPE (to),
1225 cp_type_quals (TREE_TYPE (from)));
1226 from = build_pointer_type (from);
1227 conv = build_conv (ck_ptr, from, conv);
1228 conv->base_p = true;
1231 if (tcode == POINTER_TYPE)
1233 to_pointee = TREE_TYPE (to);
1234 from_pointee = TREE_TYPE (from);
1238 to_pointee = TYPE_PTRMEM_POINTED_TO_TYPE (to);
1239 from_pointee = TYPE_PTRMEM_POINTED_TO_TYPE (from);
1242 if (same_type_p (from, to))
1244 else if (c_cast_p && comp_ptr_ttypes_const (to, from))
1245 /* In a C-style cast, we ignore CV-qualification because we
1246 are allowed to perform a static_cast followed by a
1248 conv = build_conv (ck_qual, to, conv);
1249 else if (!c_cast_p && comp_ptr_ttypes (to_pointee, from_pointee))
1250 conv = build_conv (ck_qual, to, conv);
1251 else if (expr && string_conv_p (to, expr, 0))
1252 /* converting from string constant to char *. */
1253 conv = build_conv (ck_qual, to, conv);
1254 /* Allow conversions among compatible ObjC pointer types (base
1255 conversions have been already handled above). */
1256 else if (c_dialect_objc ()
1257 && objc_compare_types (to, from, -4, NULL_TREE))
1258 conv = build_conv (ck_ptr, to, conv);
1259 else if (ptr_reasonably_similar (to_pointee, from_pointee))
1261 conv = build_conv (ck_ptr, to, conv);
1269 else if (TYPE_PTRMEMFUNC_P (to) && TYPE_PTRMEMFUNC_P (from))
1271 tree fromfn = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (from));
1272 tree tofn = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (to));
1273 tree fbase = class_of_this_parm (fromfn);
1274 tree tbase = class_of_this_parm (tofn);
1276 if (!DERIVED_FROM_P (fbase, tbase)
1277 || !same_type_p (TREE_TYPE (fromfn), TREE_TYPE (tofn))
1278 || !compparms (TREE_CHAIN (TYPE_ARG_TYPES (fromfn)),
1279 TREE_CHAIN (TYPE_ARG_TYPES (tofn)))
1280 || cp_type_quals (fbase) != cp_type_quals (tbase))
1283 from = build_memfn_type (fromfn, tbase, cp_type_quals (tbase));
1284 from = build_ptrmemfunc_type (build_pointer_type (from));
1285 conv = build_conv (ck_pmem, from, conv);
1286 conv->base_p = true;
1288 else if (tcode == BOOLEAN_TYPE)
1292 An rvalue of arithmetic, unscoped enumeration, pointer, or
1293 pointer to member type can be converted to an rvalue of type
1294 bool. ... An rvalue of type std::nullptr_t can be converted
1295 to an rvalue of type bool; */
1296 if (ARITHMETIC_TYPE_P (from)
1297 || UNSCOPED_ENUM_P (from)
1298 || fcode == POINTER_TYPE
1299 || TYPE_PTR_TO_MEMBER_P (from)
1300 || NULLPTR_TYPE_P (from))
1302 conv = build_conv (ck_std, to, conv);
1303 if (fcode == POINTER_TYPE
1304 || TYPE_PTRMEM_P (from)
1305 || (TYPE_PTRMEMFUNC_P (from)
1306 && conv->rank < cr_pbool)
1307 || NULLPTR_TYPE_P (from))
1308 conv->rank = cr_pbool;
1314 /* We don't check for ENUMERAL_TYPE here because there are no standard
1315 conversions to enum type. */
1316 /* As an extension, allow conversion to complex type. */
1317 else if (ARITHMETIC_TYPE_P (to))
1319 if (! (INTEGRAL_CODE_P (fcode) || fcode == REAL_TYPE)
1320 || SCOPED_ENUM_P (from))
1322 conv = build_conv (ck_std, to, conv);
1324 /* Give this a better rank if it's a promotion. */
1325 if (same_type_p (to, type_promotes_to (from))
1326 && conv->u.next->rank <= cr_promotion)
1327 conv->rank = cr_promotion;
1329 else if (fcode == VECTOR_TYPE && tcode == VECTOR_TYPE
1330 && vector_types_convertible_p (from, to, false))
1331 return build_conv (ck_std, to, conv);
1332 else if (MAYBE_CLASS_TYPE_P (to) && MAYBE_CLASS_TYPE_P (from)
1333 && is_properly_derived_from (from, to))
1335 if (conv->kind == ck_rvalue)
1336 conv = conv->u.next;
1337 conv = build_conv (ck_base, to, conv);
1338 /* The derived-to-base conversion indicates the initialization
1339 of a parameter with base type from an object of a derived
1340 type. A temporary object is created to hold the result of
1341 the conversion unless we're binding directly to a reference. */
1342 conv->need_temporary_p = !(flags & LOOKUP_NO_TEMP_BIND);
1347 if (flags & LOOKUP_NO_NARROWING)
1348 conv->check_narrowing = true;
1353 /* Returns nonzero if T1 is reference-related to T2. */
1356 reference_related_p (tree t1, tree t2)
1358 if (t1 == error_mark_node || t2 == error_mark_node)
1361 t1 = TYPE_MAIN_VARIANT (t1);
1362 t2 = TYPE_MAIN_VARIANT (t2);
1366 Given types "cv1 T1" and "cv2 T2," "cv1 T1" is reference-related
1367 to "cv2 T2" if T1 is the same type as T2, or T1 is a base class
1369 return (same_type_p (t1, t2)
1370 || (CLASS_TYPE_P (t1) && CLASS_TYPE_P (t2)
1371 && DERIVED_FROM_P (t1, t2)));
1374 /* Returns nonzero if T1 is reference-compatible with T2. */
1377 reference_compatible_p (tree t1, tree t2)
1381 "cv1 T1" is reference compatible with "cv2 T2" if T1 is
1382 reference-related to T2 and cv1 is the same cv-qualification as,
1383 or greater cv-qualification than, cv2. */
1384 return (reference_related_p (t1, t2)
1385 && at_least_as_qualified_p (t1, t2));
1388 /* A reference of the indicated TYPE is being bound directly to the
1389 expression represented by the implicit conversion sequence CONV.
1390 Return a conversion sequence for this binding. */
1393 direct_reference_binding (tree type, conversion *conv)
1397 gcc_assert (TREE_CODE (type) == REFERENCE_TYPE);
1398 gcc_assert (TREE_CODE (conv->type) != REFERENCE_TYPE);
1400 t = TREE_TYPE (type);
1404 When a parameter of reference type binds directly
1405 (_dcl.init.ref_) to an argument expression, the implicit
1406 conversion sequence is the identity conversion, unless the
1407 argument expression has a type that is a derived class of the
1408 parameter type, in which case the implicit conversion sequence is
1409 a derived-to-base Conversion.
1411 If the parameter binds directly to the result of applying a
1412 conversion function to the argument expression, the implicit
1413 conversion sequence is a user-defined conversion sequence
1414 (_over.ics.user_), with the second standard conversion sequence
1415 either an identity conversion or, if the conversion function
1416 returns an entity of a type that is a derived class of the
1417 parameter type, a derived-to-base conversion. */
1418 if (!same_type_ignoring_top_level_qualifiers_p (t, conv->type))
1420 /* Represent the derived-to-base conversion. */
1421 conv = build_conv (ck_base, t, conv);
1422 /* We will actually be binding to the base-class subobject in
1423 the derived class, so we mark this conversion appropriately.
1424 That way, convert_like knows not to generate a temporary. */
1425 conv->need_temporary_p = false;
1427 return build_conv (ck_ref_bind, type, conv);
1430 /* Returns the conversion path from type FROM to reference type TO for
1431 purposes of reference binding. For lvalue binding, either pass a
1432 reference type to FROM or an lvalue expression to EXPR. If the
1433 reference will be bound to a temporary, NEED_TEMPORARY_P is set for
1434 the conversion returned. If C_CAST_P is true, this
1435 conversion is coming from a C-style cast. */
1438 reference_binding (tree rto, tree rfrom, tree expr, bool c_cast_p, int flags)
1440 conversion *conv = NULL;
1441 tree to = TREE_TYPE (rto);
1446 cp_lvalue_kind gl_kind;
1449 if (TREE_CODE (to) == FUNCTION_TYPE && expr && type_unknown_p (expr))
1451 expr = instantiate_type (to, expr, tf_none);
1452 if (expr == error_mark_node)
1454 from = TREE_TYPE (expr);
1457 if (expr && BRACE_ENCLOSED_INITIALIZER_P (expr))
1459 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
1460 conv = implicit_conversion (to, from, expr, c_cast_p,
1462 if (!CLASS_TYPE_P (to)
1463 && CONSTRUCTOR_NELTS (expr) == 1)
1465 expr = CONSTRUCTOR_ELT (expr, 0)->value;
1466 if (error_operand_p (expr))
1468 from = TREE_TYPE (expr);
1472 if (TREE_CODE (from) == REFERENCE_TYPE)
1474 from = TREE_TYPE (from);
1475 if (!TYPE_REF_IS_RVALUE (rfrom)
1476 || TREE_CODE (from) == FUNCTION_TYPE)
1477 gl_kind = clk_ordinary;
1479 gl_kind = clk_rvalueref;
1483 gl_kind = lvalue_kind (expr);
1484 if (gl_kind & clk_class)
1485 /* A class prvalue is not a glvalue. */
1490 is_lvalue = gl_kind && !(gl_kind & clk_rvalueref);
1493 if ((gl_kind & clk_bitfield) != 0)
1494 tfrom = unlowered_expr_type (expr);
1496 /* Figure out whether or not the types are reference-related and
1497 reference compatible. We have do do this after stripping
1498 references from FROM. */
1499 related_p = reference_related_p (to, tfrom);
1500 /* If this is a C cast, first convert to an appropriately qualified
1501 type, so that we can later do a const_cast to the desired type. */
1502 if (related_p && c_cast_p
1503 && !at_least_as_qualified_p (to, tfrom))
1504 to = cp_build_qualified_type (to, cp_type_quals (tfrom));
1505 compatible_p = reference_compatible_p (to, tfrom);
1507 /* Directly bind reference when target expression's type is compatible with
1508 the reference and expression is an lvalue. In DR391, the wording in
1509 [8.5.3/5 dcl.init.ref] is changed to also require direct bindings for
1510 const and rvalue references to rvalues of compatible class type.
1511 We should also do direct bindings for non-class xvalues. */
1514 || (((CP_TYPE_CONST_NON_VOLATILE_P (to)
1515 && !(flags & LOOKUP_NO_RVAL_BIND))
1516 || TYPE_REF_IS_RVALUE (rto))
1518 || (!(flags & LOOKUP_NO_TEMP_BIND)
1519 && (CLASS_TYPE_P (from)
1520 || TREE_CODE (from) == ARRAY_TYPE))))))
1524 If the initializer expression
1526 -- is an lvalue (but not an lvalue for a bit-field), and "cv1 T1"
1527 is reference-compatible with "cv2 T2,"
1529 the reference is bound directly to the initializer expression
1533 If the initializer expression is an rvalue, with T2 a class type,
1534 and "cv1 T1" is reference-compatible with "cv2 T2", the reference
1535 is bound to the object represented by the rvalue or to a sub-object
1536 within that object. */
1538 conv = build_identity_conv (tfrom, expr);
1539 conv = direct_reference_binding (rto, conv);
1541 if (flags & LOOKUP_PREFER_RVALUE)
1542 /* The top-level caller requested that we pretend that the lvalue
1543 be treated as an rvalue. */
1544 conv->rvaluedness_matches_p = TYPE_REF_IS_RVALUE (rto);
1545 else if (TREE_CODE (rfrom) == REFERENCE_TYPE)
1546 /* Handle rvalue reference to function properly. */
1547 conv->rvaluedness_matches_p
1548 = (TYPE_REF_IS_RVALUE (rto) == TYPE_REF_IS_RVALUE (rfrom));
1550 conv->rvaluedness_matches_p
1551 = (TYPE_REF_IS_RVALUE (rto) == !is_lvalue);
1553 if ((gl_kind & clk_bitfield) != 0
1554 || ((gl_kind & clk_packed) != 0 && !TYPE_PACKED (to)))
1555 /* For the purposes of overload resolution, we ignore the fact
1556 this expression is a bitfield or packed field. (In particular,
1557 [over.ics.ref] says specifically that a function with a
1558 non-const reference parameter is viable even if the
1559 argument is a bitfield.)
1561 However, when we actually call the function we must create
1562 a temporary to which to bind the reference. If the
1563 reference is volatile, or isn't const, then we cannot make
1564 a temporary, so we just issue an error when the conversion
1566 conv->need_temporary_p = true;
1568 /* Don't allow binding of lvalues (other than function lvalues) to
1569 rvalue references. */
1570 if (is_lvalue && TYPE_REF_IS_RVALUE (rto)
1571 && TREE_CODE (to) != FUNCTION_TYPE
1572 && !(flags & LOOKUP_PREFER_RVALUE))
1577 /* [class.conv.fct] A conversion function is never used to convert a
1578 (possibly cv-qualified) object to the (possibly cv-qualified) same
1579 object type (or a reference to it), to a (possibly cv-qualified) base
1580 class of that type (or a reference to it).... */
1581 else if (CLASS_TYPE_P (from) && !related_p
1582 && !(flags & LOOKUP_NO_CONVERSION))
1586 If the initializer expression
1588 -- has a class type (i.e., T2 is a class type) can be
1589 implicitly converted to an lvalue of type "cv3 T3," where
1590 "cv1 T1" is reference-compatible with "cv3 T3". (this
1591 conversion is selected by enumerating the applicable
1592 conversion functions (_over.match.ref_) and choosing the
1593 best one through overload resolution. (_over.match_).
1595 the reference is bound to the lvalue result of the conversion
1596 in the second case. */
1597 z_candidate *cand = build_user_type_conversion_1 (rto, expr, flags);
1599 return cand->second_conv;
1602 /* From this point on, we conceptually need temporaries, even if we
1603 elide them. Only the cases above are "direct bindings". */
1604 if (flags & LOOKUP_NO_TEMP_BIND)
1609 When a parameter of reference type is not bound directly to an
1610 argument expression, the conversion sequence is the one required
1611 to convert the argument expression to the underlying type of the
1612 reference according to _over.best.ics_. Conceptually, this
1613 conversion sequence corresponds to copy-initializing a temporary
1614 of the underlying type with the argument expression. Any
1615 difference in top-level cv-qualification is subsumed by the
1616 initialization itself and does not constitute a conversion. */
1620 Otherwise, the reference shall be to a non-volatile const type.
1622 Under C++0x, [8.5.3/5 dcl.init.ref] it may also be an rvalue reference */
1623 if (!CP_TYPE_CONST_NON_VOLATILE_P (to) && !TYPE_REF_IS_RVALUE (rto))
1628 Otherwise, a temporary of type "cv1 T1" is created and
1629 initialized from the initializer expression using the rules for a
1630 non-reference copy initialization. If T1 is reference-related to
1631 T2, cv1 must be the same cv-qualification as, or greater
1632 cv-qualification than, cv2; otherwise, the program is ill-formed. */
1633 if (related_p && !at_least_as_qualified_p (to, from))
1636 /* We're generating a temporary now, but don't bind any more in the
1637 conversion (specifically, don't slice the temporary returned by a
1638 conversion operator). */
1639 flags |= LOOKUP_NO_TEMP_BIND;
1641 /* Core issue 899: When [copy-]initializing a temporary to be bound
1642 to the first parameter of a copy constructor (12.8) called with
1643 a single argument in the context of direct-initialization,
1644 explicit conversion functions are also considered.
1646 So don't set LOOKUP_ONLYCONVERTING in that case. */
1647 if (!(flags & LOOKUP_COPY_PARM))
1648 flags |= LOOKUP_ONLYCONVERTING;
1651 conv = implicit_conversion (to, from, expr, c_cast_p,
1656 conv = build_conv (ck_ref_bind, rto, conv);
1657 /* This reference binding, unlike those above, requires the
1658 creation of a temporary. */
1659 conv->need_temporary_p = true;
1660 conv->rvaluedness_matches_p = TYPE_REF_IS_RVALUE (rto);
1665 /* Returns the implicit conversion sequence (see [over.ics]) from type
1666 FROM to type TO. The optional expression EXPR may affect the
1667 conversion. FLAGS are the usual overloading flags. If C_CAST_P is
1668 true, this conversion is coming from a C-style cast. */
1671 implicit_conversion (tree to, tree from, tree expr, bool c_cast_p,
1676 if (from == error_mark_node || to == error_mark_node
1677 || expr == error_mark_node)
1680 /* Other flags only apply to the primary function in overload
1681 resolution, or after we've chosen one. */
1682 flags &= (LOOKUP_ONLYCONVERTING|LOOKUP_NO_CONVERSION|LOOKUP_COPY_PARM
1683 |LOOKUP_NO_TEMP_BIND|LOOKUP_NO_RVAL_BIND|LOOKUP_PREFER_RVALUE
1684 |LOOKUP_NO_NARROWING|LOOKUP_PROTECT);
1686 if (TREE_CODE (to) == REFERENCE_TYPE)
1687 conv = reference_binding (to, from, expr, c_cast_p, flags);
1689 conv = standard_conversion (to, from, expr, c_cast_p, flags);
1694 if (expr && BRACE_ENCLOSED_INITIALIZER_P (expr))
1696 if (is_std_init_list (to))
1697 return build_list_conv (to, expr, flags);
1699 /* As an extension, allow list-initialization of _Complex. */
1700 if (TREE_CODE (to) == COMPLEX_TYPE)
1702 conv = build_complex_conv (to, expr, flags);
1707 /* Allow conversion from an initializer-list with one element to a
1709 if (SCALAR_TYPE_P (to))
1711 int nelts = CONSTRUCTOR_NELTS (expr);
1715 elt = build_value_init (to, tf_none);
1716 else if (nelts == 1)
1717 elt = CONSTRUCTOR_ELT (expr, 0)->value;
1719 elt = error_mark_node;
1721 conv = implicit_conversion (to, TREE_TYPE (elt), elt,
1725 conv->check_narrowing = true;
1726 if (BRACE_ENCLOSED_INITIALIZER_P (elt))
1727 /* Too many levels of braces, i.e. '{{1}}'. */
1732 else if (TREE_CODE (to) == ARRAY_TYPE)
1733 return build_array_conv (to, expr, flags);
1736 if (expr != NULL_TREE
1737 && (MAYBE_CLASS_TYPE_P (from)
1738 || MAYBE_CLASS_TYPE_P (to))
1739 && (flags & LOOKUP_NO_CONVERSION) == 0)
1741 struct z_candidate *cand;
1743 if (CLASS_TYPE_P (to)
1744 && BRACE_ENCLOSED_INITIALIZER_P (expr)
1745 && !CLASSTYPE_NON_AGGREGATE (complete_type (to)))
1746 return build_aggr_conv (to, expr, flags);
1748 cand = build_user_type_conversion_1 (to, expr, flags);
1750 conv = cand->second_conv;
1752 /* We used to try to bind a reference to a temporary here, but that
1753 is now handled after the recursive call to this function at the end
1754 of reference_binding. */
1761 /* Add a new entry to the list of candidates. Used by the add_*_candidate
1762 functions. ARGS will not be changed until a single candidate is
1765 static struct z_candidate *
1766 add_candidate (struct z_candidate **candidates,
1767 tree fn, tree first_arg, const VEC(tree,gc) *args,
1768 size_t num_convs, conversion **convs,
1769 tree access_path, tree conversion_path,
1770 int viable, struct rejection_reason *reason)
1772 struct z_candidate *cand = (struct z_candidate *)
1773 conversion_obstack_alloc (sizeof (struct z_candidate));
1776 cand->first_arg = first_arg;
1778 cand->convs = convs;
1779 cand->num_convs = num_convs;
1780 cand->access_path = access_path;
1781 cand->conversion_path = conversion_path;
1782 cand->viable = viable;
1783 cand->reason = reason;
1784 cand->next = *candidates;
1790 /* Return the number of remaining arguments in the parameter list
1791 beginning with ARG. */
1794 remaining_arguments (tree arg)
1798 for (n = 0; arg != NULL_TREE && arg != void_list_node;
1799 arg = TREE_CHAIN (arg))
1805 /* Create an overload candidate for the function or method FN called
1806 with the argument list FIRST_ARG/ARGS and add it to CANDIDATES.
1807 FLAGS is passed on to implicit_conversion.
1809 This does not change ARGS.
1811 CTYPE, if non-NULL, is the type we want to pretend this function
1812 comes from for purposes of overload resolution. */
1814 static struct z_candidate *
1815 add_function_candidate (struct z_candidate **candidates,
1816 tree fn, tree ctype, tree first_arg,
1817 const VEC(tree,gc) *args, tree access_path,
1818 tree conversion_path, int flags)
1820 tree parmlist = TYPE_ARG_TYPES (TREE_TYPE (fn));
1824 tree orig_first_arg = first_arg;
1827 struct rejection_reason *reason = NULL;
1829 /* At this point we should not see any functions which haven't been
1830 explicitly declared, except for friend functions which will have
1831 been found using argument dependent lookup. */
1832 gcc_assert (!DECL_ANTICIPATED (fn) || DECL_HIDDEN_FRIEND_P (fn));
1834 /* The `this', `in_chrg' and VTT arguments to constructors are not
1835 considered in overload resolution. */
1836 if (DECL_CONSTRUCTOR_P (fn))
1838 parmlist = skip_artificial_parms_for (fn, parmlist);
1839 skip = num_artificial_parms_for (fn);
1840 if (skip > 0 && first_arg != NULL_TREE)
1843 first_arg = NULL_TREE;
1849 len = VEC_length (tree, args) - skip + (first_arg != NULL_TREE ? 1 : 0);
1850 convs = alloc_conversions (len);
1852 /* 13.3.2 - Viable functions [over.match.viable]
1853 First, to be a viable function, a candidate function shall have enough
1854 parameters to agree in number with the arguments in the list.
1856 We need to check this first; otherwise, checking the ICSes might cause
1857 us to produce an ill-formed template instantiation. */
1859 parmnode = parmlist;
1860 for (i = 0; i < len; ++i)
1862 if (parmnode == NULL_TREE || parmnode == void_list_node)
1864 parmnode = TREE_CHAIN (parmnode);
1867 if ((i < len && parmnode)
1868 || !sufficient_parms_p (parmnode))
1870 int remaining = remaining_arguments (parmnode);
1872 reason = arity_rejection (first_arg, i + remaining, len);
1874 /* When looking for a function from a subobject from an implicit
1875 copy/move constructor/operator=, don't consider anything that takes (a
1876 reference to) an unrelated type. See c++/44909 and core 1092. */
1877 else if (parmlist && (flags & LOOKUP_DEFAULTED))
1879 if (DECL_CONSTRUCTOR_P (fn))
1881 else if (DECL_ASSIGNMENT_OPERATOR_P (fn)
1882 && DECL_OVERLOADED_OPERATOR_P (fn) == NOP_EXPR)
1888 parmnode = chain_index (i-1, parmlist);
1889 if (!reference_related_p (non_reference (TREE_VALUE (parmnode)),
1894 /* This only applies at the top level. */
1895 flags &= ~LOOKUP_DEFAULTED;
1901 /* Second, for F to be a viable function, there shall exist for each
1902 argument an implicit conversion sequence that converts that argument
1903 to the corresponding parameter of F. */
1905 parmnode = parmlist;
1907 for (i = 0; i < len; ++i)
1909 tree arg, argtype, to_type;
1913 if (parmnode == void_list_node)
1916 if (i == 0 && first_arg != NULL_TREE)
1919 arg = VEC_index (tree, args,
1920 i + skip - (first_arg != NULL_TREE ? 1 : 0));
1921 argtype = lvalue_type (arg);
1923 is_this = (i == 0 && DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
1924 && ! DECL_CONSTRUCTOR_P (fn));
1928 tree parmtype = TREE_VALUE (parmnode);
1931 parmnode = TREE_CHAIN (parmnode);
1933 /* The type of the implicit object parameter ('this') for
1934 overload resolution is not always the same as for the
1935 function itself; conversion functions are considered to
1936 be members of the class being converted, and functions
1937 introduced by a using-declaration are considered to be
1938 members of the class that uses them.
1940 Since build_over_call ignores the ICS for the `this'
1941 parameter, we can just change the parm type. */
1942 if (ctype && is_this)
1944 parmtype = cp_build_qualified_type
1945 (ctype, cp_type_quals (TREE_TYPE (parmtype)));
1946 parmtype = build_pointer_type (parmtype);
1949 /* Core issue 899: When [copy-]initializing a temporary to be bound
1950 to the first parameter of a copy constructor (12.8) called with
1951 a single argument in the context of direct-initialization,
1952 explicit conversion functions are also considered.
1954 So set LOOKUP_COPY_PARM to let reference_binding know that
1955 it's being called in that context. We generalize the above
1956 to handle move constructors and template constructors as well;
1957 the standardese should soon be updated similarly. */
1958 if (ctype && i == 0 && (len-skip == 1)
1959 && !(flags & LOOKUP_ONLYCONVERTING)
1960 && DECL_CONSTRUCTOR_P (fn)
1961 && parmtype != error_mark_node
1962 && (same_type_ignoring_top_level_qualifiers_p
1963 (non_reference (parmtype), ctype)))
1965 lflags |= LOOKUP_COPY_PARM;
1966 /* We allow user-defined conversions within init-lists, but
1967 don't list-initialize the copy parm, as that would mean
1968 using two levels of braces for the same type. */
1969 if ((flags & LOOKUP_NO_COPY_CTOR_CONVERSION)
1970 && BRACE_ENCLOSED_INITIALIZER_P (arg))
1971 lflags |= LOOKUP_NO_CONVERSION;
1974 lflags |= LOOKUP_ONLYCONVERTING;
1976 t = implicit_conversion (parmtype, argtype, arg,
1977 /*c_cast_p=*/false, lflags);
1982 t = build_identity_conv (argtype, arg);
1983 t->ellipsis_p = true;
1994 reason = arg_conversion_rejection (first_arg, i, argtype, to_type);
2001 reason = bad_arg_conversion_rejection (first_arg, i, argtype, to_type);
2006 return add_candidate (candidates, fn, orig_first_arg, args, len, convs,
2007 access_path, conversion_path, viable, reason);
2010 /* Create an overload candidate for the conversion function FN which will
2011 be invoked for expression OBJ, producing a pointer-to-function which
2012 will in turn be called with the argument list FIRST_ARG/ARGLIST,
2013 and add it to CANDIDATES. This does not change ARGLIST. FLAGS is
2014 passed on to implicit_conversion.
2016 Actually, we don't really care about FN; we care about the type it
2017 converts to. There may be multiple conversion functions that will
2018 convert to that type, and we rely on build_user_type_conversion_1 to
2019 choose the best one; so when we create our candidate, we record the type
2020 instead of the function. */
2022 static struct z_candidate *
2023 add_conv_candidate (struct z_candidate **candidates, tree fn, tree obj,
2024 tree first_arg, const VEC(tree,gc) *arglist,
2025 tree access_path, tree conversion_path)
2027 tree totype = TREE_TYPE (TREE_TYPE (fn));
2028 int i, len, viable, flags;
2029 tree parmlist, parmnode;
2031 struct rejection_reason *reason;
2033 for (parmlist = totype; TREE_CODE (parmlist) != FUNCTION_TYPE; )
2034 parmlist = TREE_TYPE (parmlist);
2035 parmlist = TYPE_ARG_TYPES (parmlist);
2037 len = VEC_length (tree, arglist) + (first_arg != NULL_TREE ? 1 : 0) + 1;
2038 convs = alloc_conversions (len);
2039 parmnode = parmlist;
2041 flags = LOOKUP_IMPLICIT;
2044 /* Don't bother looking up the same type twice. */
2045 if (*candidates && (*candidates)->fn == totype)
2048 for (i = 0; i < len; ++i)
2050 tree arg, argtype, convert_type = NULL_TREE;
2055 else if (i == 1 && first_arg != NULL_TREE)
2058 arg = VEC_index (tree, arglist,
2059 i - (first_arg != NULL_TREE ? 1 : 0) - 1);
2060 argtype = lvalue_type (arg);
2064 t = implicit_conversion (totype, argtype, arg, /*c_cast_p=*/false,
2066 convert_type = totype;
2068 else if (parmnode == void_list_node)
2072 t = implicit_conversion (TREE_VALUE (parmnode), argtype, arg,
2073 /*c_cast_p=*/false, flags);
2074 convert_type = TREE_VALUE (parmnode);
2078 t = build_identity_conv (argtype, arg);
2079 t->ellipsis_p = true;
2080 convert_type = argtype;
2090 reason = bad_arg_conversion_rejection (NULL_TREE, i, argtype, convert_type);
2097 parmnode = TREE_CHAIN (parmnode);
2101 || ! sufficient_parms_p (parmnode))
2103 int remaining = remaining_arguments (parmnode);
2105 reason = arity_rejection (NULL_TREE, i + remaining, len);
2108 return add_candidate (candidates, totype, first_arg, arglist, len, convs,
2109 access_path, conversion_path, viable, reason);
2113 build_builtin_candidate (struct z_candidate **candidates, tree fnname,
2114 tree type1, tree type2, tree *args, tree *argtypes,
2122 struct rejection_reason *reason = NULL;
2127 num_convs = args[2] ? 3 : (args[1] ? 2 : 1);
2128 convs = alloc_conversions (num_convs);
2130 /* TRUTH_*_EXPR do "contextual conversion to bool", which means explicit
2131 conversion ops are allowed. We handle that here by just checking for
2132 boolean_type_node because other operators don't ask for it. COND_EXPR
2133 also does contextual conversion to bool for the first operand, but we
2134 handle that in build_conditional_expr, and type1 here is operand 2. */
2135 if (type1 != boolean_type_node)
2136 flags |= LOOKUP_ONLYCONVERTING;
2138 for (i = 0; i < 2; ++i)
2143 t = implicit_conversion (types[i], argtypes[i], args[i],
2144 /*c_cast_p=*/false, flags);
2148 /* We need something for printing the candidate. */
2149 t = build_identity_conv (types[i], NULL_TREE);
2150 reason = arg_conversion_rejection (NULL_TREE, i, argtypes[i], types[i]);
2155 reason = bad_arg_conversion_rejection (NULL_TREE, i, argtypes[i], types[i]);
2160 /* For COND_EXPR we rearranged the arguments; undo that now. */
2163 convs[2] = convs[1];
2164 convs[1] = convs[0];
2165 t = implicit_conversion (boolean_type_node, argtypes[2], args[2],
2166 /*c_cast_p=*/false, flags);
2172 reason = arg_conversion_rejection (NULL_TREE, 0, argtypes[2],
2177 add_candidate (candidates, fnname, /*first_arg=*/NULL_TREE, /*args=*/NULL,
2179 /*access_path=*/NULL_TREE,
2180 /*conversion_path=*/NULL_TREE,
2185 is_complete (tree t)
2187 return COMPLETE_TYPE_P (complete_type (t));
2190 /* Returns nonzero if TYPE is a promoted arithmetic type. */
2193 promoted_arithmetic_type_p (tree type)
2197 In this section, the term promoted integral type is used to refer
2198 to those integral types which are preserved by integral promotion
2199 (including e.g. int and long but excluding e.g. char).
2200 Similarly, the term promoted arithmetic type refers to promoted
2201 integral types plus floating types. */
2202 return ((CP_INTEGRAL_TYPE_P (type)
2203 && same_type_p (type_promotes_to (type), type))
2204 || TREE_CODE (type) == REAL_TYPE);
2207 /* Create any builtin operator overload candidates for the operator in
2208 question given the converted operand types TYPE1 and TYPE2. The other
2209 args are passed through from add_builtin_candidates to
2210 build_builtin_candidate.
2212 TYPE1 and TYPE2 may not be permissible, and we must filter them.
2213 If CODE is requires candidates operands of the same type of the kind
2214 of which TYPE1 and TYPE2 are, we add both candidates
2215 CODE (TYPE1, TYPE1) and CODE (TYPE2, TYPE2). */
2218 add_builtin_candidate (struct z_candidate **candidates, enum tree_code code,
2219 enum tree_code code2, tree fnname, tree type1,
2220 tree type2, tree *args, tree *argtypes, int flags)
2224 case POSTINCREMENT_EXPR:
2225 case POSTDECREMENT_EXPR:
2226 args[1] = integer_zero_node;
2227 type2 = integer_type_node;
2236 /* 4 For every pair T, VQ), where T is an arithmetic or enumeration type,
2237 and VQ is either volatile or empty, there exist candidate operator
2238 functions of the form
2239 VQ T& operator++(VQ T&);
2240 T operator++(VQ T&, int);
2241 5 For every pair T, VQ), where T is an enumeration type or an arithmetic
2242 type other than bool, and VQ is either volatile or empty, there exist
2243 candidate operator functions of the form
2244 VQ T& operator--(VQ T&);
2245 T operator--(VQ T&, int);
2246 6 For every pair T, VQ), where T is a cv-qualified or cv-unqualified
2247 complete object type, and VQ is either volatile or empty, there exist
2248 candidate operator functions of the form
2249 T*VQ& operator++(T*VQ&);
2250 T*VQ& operator--(T*VQ&);
2251 T* operator++(T*VQ&, int);
2252 T* operator--(T*VQ&, int); */
2254 case POSTDECREMENT_EXPR:
2255 case PREDECREMENT_EXPR:
2256 if (TREE_CODE (type1) == BOOLEAN_TYPE)
2258 case POSTINCREMENT_EXPR:
2259 case PREINCREMENT_EXPR:
2260 if (ARITHMETIC_TYPE_P (type1) || TYPE_PTROB_P (type1))
2262 type1 = build_reference_type (type1);
2267 /* 7 For every cv-qualified or cv-unqualified object type T, there
2268 exist candidate operator functions of the form
2272 8 For every function type T, there exist candidate operator functions of
2274 T& operator*(T*); */
2277 if (TREE_CODE (type1) == POINTER_TYPE
2278 && !uses_template_parms (TREE_TYPE (type1))
2279 && (TYPE_PTROB_P (type1)
2280 || TREE_CODE (TREE_TYPE (type1)) == FUNCTION_TYPE))
2284 /* 9 For every type T, there exist candidate operator functions of the form
2287 10For every promoted arithmetic type T, there exist candidate operator
2288 functions of the form
2292 case UNARY_PLUS_EXPR: /* unary + */
2293 if (TREE_CODE (type1) == POINTER_TYPE)
2296 if (ARITHMETIC_TYPE_P (type1))
2300 /* 11For every promoted integral type T, there exist candidate operator
2301 functions of the form
2305 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1))
2309 /* 12For every quintuple C1, C2, T, CV1, CV2), where C2 is a class type, C1
2310 is the same type as C2 or is a derived class of C2, T is a complete
2311 object type or a function type, and CV1 and CV2 are cv-qualifier-seqs,
2312 there exist candidate operator functions of the form
2313 CV12 T& operator->*(CV1 C1*, CV2 T C2::*);
2314 where CV12 is the union of CV1 and CV2. */
2317 if (TREE_CODE (type1) == POINTER_TYPE
2318 && TYPE_PTR_TO_MEMBER_P (type2))
2320 tree c1 = TREE_TYPE (type1);
2321 tree c2 = TYPE_PTRMEM_CLASS_TYPE (type2);
2323 if (MAYBE_CLASS_TYPE_P (c1) && DERIVED_FROM_P (c2, c1)
2324 && (TYPE_PTRMEMFUNC_P (type2)
2325 || is_complete (TYPE_PTRMEM_POINTED_TO_TYPE (type2))))
2330 /* 13For every pair of promoted arithmetic types L and R, there exist can-
2331 didate operator functions of the form
2336 bool operator<(L, R);
2337 bool operator>(L, R);
2338 bool operator<=(L, R);
2339 bool operator>=(L, R);
2340 bool operator==(L, R);
2341 bool operator!=(L, R);
2342 where LR is the result of the usual arithmetic conversions between
2345 14For every pair of types T and I, where T is a cv-qualified or cv-
2346 unqualified complete object type and I is a promoted integral type,
2347 there exist candidate operator functions of the form
2348 T* operator+(T*, I);
2349 T& operator[](T*, I);
2350 T* operator-(T*, I);
2351 T* operator+(I, T*);
2352 T& operator[](I, T*);
2354 15For every T, where T is a pointer to complete object type, there exist
2355 candidate operator functions of the form112)
2356 ptrdiff_t operator-(T, T);
2358 16For every pointer or enumeration type T, there exist candidate operator
2359 functions of the form
2360 bool operator<(T, T);
2361 bool operator>(T, T);
2362 bool operator<=(T, T);
2363 bool operator>=(T, T);
2364 bool operator==(T, T);
2365 bool operator!=(T, T);
2367 17For every pointer to member type T, there exist candidate operator
2368 functions of the form
2369 bool operator==(T, T);
2370 bool operator!=(T, T); */
2373 if (TYPE_PTROB_P (type1) && TYPE_PTROB_P (type2))
2375 if (TYPE_PTROB_P (type1)
2376 && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2378 type2 = ptrdiff_type_node;
2382 case TRUNC_DIV_EXPR:
2383 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2389 if ((TYPE_PTRMEMFUNC_P (type1) && TYPE_PTRMEMFUNC_P (type2))
2390 || (TYPE_PTRMEM_P (type1) && TYPE_PTRMEM_P (type2)))
2392 if (TYPE_PTR_TO_MEMBER_P (type1) && null_ptr_cst_p (args[1]))
2397 if (TYPE_PTR_TO_MEMBER_P (type2) && null_ptr_cst_p (args[0]))
2409 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2411 if (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
2413 if (TREE_CODE (type1) == ENUMERAL_TYPE
2414 && TREE_CODE (type2) == ENUMERAL_TYPE)
2416 if (TYPE_PTR_P (type1)
2417 && null_ptr_cst_p (args[1])
2418 && !uses_template_parms (type1))
2423 if (null_ptr_cst_p (args[0])
2424 && TYPE_PTR_P (type2)
2425 && !uses_template_parms (type2))
2433 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2436 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1) && TYPE_PTROB_P (type2))
2438 type1 = ptrdiff_type_node;
2441 if (TYPE_PTROB_P (type1) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2443 type2 = ptrdiff_type_node;
2448 /* 18For every pair of promoted integral types L and R, there exist candi-
2449 date operator functions of the form
2456 where LR is the result of the usual arithmetic conversions between
2459 case TRUNC_MOD_EXPR:
2465 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2469 /* 19For every triple L, VQ, R), where L is an arithmetic or enumeration
2470 type, VQ is either volatile or empty, and R is a promoted arithmetic
2471 type, there exist candidate operator functions of the form
2472 VQ L& operator=(VQ L&, R);
2473 VQ L& operator*=(VQ L&, R);
2474 VQ L& operator/=(VQ L&, R);
2475 VQ L& operator+=(VQ L&, R);
2476 VQ L& operator-=(VQ L&, R);
2478 20For every pair T, VQ), where T is any type and VQ is either volatile
2479 or empty, there exist candidate operator functions of the form
2480 T*VQ& operator=(T*VQ&, T*);
2482 21For every pair T, VQ), where T is a pointer to member type and VQ is
2483 either volatile or empty, there exist candidate operator functions of
2485 VQ T& operator=(VQ T&, T);
2487 22For every triple T, VQ, I), where T is a cv-qualified or cv-
2488 unqualified complete object type, VQ is either volatile or empty, and
2489 I is a promoted integral type, there exist candidate operator func-
2491 T*VQ& operator+=(T*VQ&, I);
2492 T*VQ& operator-=(T*VQ&, I);
2494 23For every triple L, VQ, R), where L is an integral or enumeration
2495 type, VQ is either volatile or empty, and R is a promoted integral
2496 type, there exist candidate operator functions of the form
2498 VQ L& operator%=(VQ L&, R);
2499 VQ L& operator<<=(VQ L&, R);
2500 VQ L& operator>>=(VQ L&, R);
2501 VQ L& operator&=(VQ L&, R);
2502 VQ L& operator^=(VQ L&, R);
2503 VQ L& operator|=(VQ L&, R); */
2510 if (TYPE_PTROB_P (type1) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2512 type2 = ptrdiff_type_node;
2516 case TRUNC_DIV_EXPR:
2517 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2521 case TRUNC_MOD_EXPR:
2527 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2532 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2534 if ((TYPE_PTRMEMFUNC_P (type1) && TYPE_PTRMEMFUNC_P (type2))
2535 || (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
2536 || (TYPE_PTRMEM_P (type1) && TYPE_PTRMEM_P (type2))
2537 || ((TYPE_PTRMEMFUNC_P (type1)
2538 || TREE_CODE (type1) == POINTER_TYPE)
2539 && null_ptr_cst_p (args[1])))
2549 type1 = build_reference_type (type1);
2555 For every pair of promoted arithmetic types L and R, there
2556 exist candidate operator functions of the form
2558 LR operator?(bool, L, R);
2560 where LR is the result of the usual arithmetic conversions
2561 between types L and R.
2563 For every type T, where T is a pointer or pointer-to-member
2564 type, there exist candidate operator functions of the form T
2565 operator?(bool, T, T); */
2567 if (promoted_arithmetic_type_p (type1)
2568 && promoted_arithmetic_type_p (type2))
2572 /* Otherwise, the types should be pointers. */
2573 if (!(TYPE_PTR_P (type1) || TYPE_PTR_TO_MEMBER_P (type1))
2574 || !(TYPE_PTR_P (type2) || TYPE_PTR_TO_MEMBER_P (type2)))
2577 /* We don't check that the two types are the same; the logic
2578 below will actually create two candidates; one in which both
2579 parameter types are TYPE1, and one in which both parameter
2585 if (ARITHMETIC_TYPE_P (type1))
2593 /* If we're dealing with two pointer types or two enumeral types,
2594 we need candidates for both of them. */
2595 if (type2 && !same_type_p (type1, type2)
2596 && TREE_CODE (type1) == TREE_CODE (type2)
2597 && (TREE_CODE (type1) == REFERENCE_TYPE
2598 || (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
2599 || (TYPE_PTRMEM_P (type1) && TYPE_PTRMEM_P (type2))
2600 || TYPE_PTRMEMFUNC_P (type1)
2601 || MAYBE_CLASS_TYPE_P (type1)
2602 || TREE_CODE (type1) == ENUMERAL_TYPE))
2604 if (TYPE_PTR_P (type1) || TYPE_PTR_TO_MEMBER_P (type1))
2606 tree cptype = composite_pointer_type (type1, type2,
2611 if (cptype != error_mark_node)
2613 build_builtin_candidate
2614 (candidates, fnname, cptype, cptype, args, argtypes, flags);
2619 build_builtin_candidate
2620 (candidates, fnname, type1, type1, args, argtypes, flags);
2621 build_builtin_candidate
2622 (candidates, fnname, type2, type2, args, argtypes, flags);
2626 build_builtin_candidate
2627 (candidates, fnname, type1, type2, args, argtypes, flags);
2631 type_decays_to (tree type)
2633 if (TREE_CODE (type) == ARRAY_TYPE)
2634 return build_pointer_type (TREE_TYPE (type));
2635 if (TREE_CODE (type) == FUNCTION_TYPE)
2636 return build_pointer_type (type);
2640 /* There are three conditions of builtin candidates:
2642 1) bool-taking candidates. These are the same regardless of the input.
2643 2) pointer-pair taking candidates. These are generated for each type
2644 one of the input types converts to.
2645 3) arithmetic candidates. According to the standard, we should generate
2646 all of these, but I'm trying not to...
2648 Here we generate a superset of the possible candidates for this particular
2649 case. That is a subset of the full set the standard defines, plus some
2650 other cases which the standard disallows. add_builtin_candidate will
2651 filter out the invalid set. */
2654 add_builtin_candidates (struct z_candidate **candidates, enum tree_code code,
2655 enum tree_code code2, tree fnname, tree *args,
2660 tree type, argtypes[3], t;
2661 /* TYPES[i] is the set of possible builtin-operator parameter types
2662 we will consider for the Ith argument. */
2663 VEC(tree,gc) *types[2];
2666 for (i = 0; i < 3; ++i)
2669 argtypes[i] = unlowered_expr_type (args[i]);
2671 argtypes[i] = NULL_TREE;
2676 /* 4 For every pair T, VQ), where T is an arithmetic or enumeration type,
2677 and VQ is either volatile or empty, there exist candidate operator
2678 functions of the form
2679 VQ T& operator++(VQ T&); */
2681 case POSTINCREMENT_EXPR:
2682 case PREINCREMENT_EXPR:
2683 case POSTDECREMENT_EXPR:
2684 case PREDECREMENT_EXPR:
2689 /* 24There also exist candidate operator functions of the form
2690 bool operator!(bool);
2691 bool operator&&(bool, bool);
2692 bool operator||(bool, bool); */
2694 case TRUTH_NOT_EXPR:
2695 build_builtin_candidate
2696 (candidates, fnname, boolean_type_node,
2697 NULL_TREE, args, argtypes, flags);
2700 case TRUTH_ORIF_EXPR:
2701 case TRUTH_ANDIF_EXPR:
2702 build_builtin_candidate
2703 (candidates, fnname, boolean_type_node,
2704 boolean_type_node, args, argtypes, flags);
2726 types[0] = make_tree_vector ();
2727 types[1] = make_tree_vector ();
2729 for (i = 0; i < 2; ++i)
2733 else if (MAYBE_CLASS_TYPE_P (argtypes[i]))
2737 if (i == 0 && code == MODIFY_EXPR && code2 == NOP_EXPR)
2740 convs = lookup_conversions (argtypes[i]);
2742 if (code == COND_EXPR)
2744 if (real_lvalue_p (args[i]))
2745 VEC_safe_push (tree, gc, types[i],
2746 build_reference_type (argtypes[i]));
2748 VEC_safe_push (tree, gc, types[i],
2749 TYPE_MAIN_VARIANT (argtypes[i]));
2755 for (; convs; convs = TREE_CHAIN (convs))
2757 type = TREE_TYPE (convs);
2760 && (TREE_CODE (type) != REFERENCE_TYPE
2761 || CP_TYPE_CONST_P (TREE_TYPE (type))))
2764 if (code == COND_EXPR && TREE_CODE (type) == REFERENCE_TYPE)
2765 VEC_safe_push (tree, gc, types[i], type);
2767 type = non_reference (type);
2768 if (i != 0 || ! ref1)
2770 type = cv_unqualified (type_decays_to (type));
2771 if (enum_p && TREE_CODE (type) == ENUMERAL_TYPE)
2772 VEC_safe_push (tree, gc, types[i], type);
2773 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
2774 type = type_promotes_to (type);
2777 if (! vec_member (type, types[i]))
2778 VEC_safe_push (tree, gc, types[i], type);
2783 if (code == COND_EXPR && real_lvalue_p (args[i]))
2784 VEC_safe_push (tree, gc, types[i],
2785 build_reference_type (argtypes[i]));
2786 type = non_reference (argtypes[i]);
2787 if (i != 0 || ! ref1)
2789 type = cv_unqualified (type_decays_to (type));
2790 if (enum_p && UNSCOPED_ENUM_P (type))
2791 VEC_safe_push (tree, gc, types[i], type);
2792 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
2793 type = type_promotes_to (type);
2795 VEC_safe_push (tree, gc, types[i], type);
2799 /* Run through the possible parameter types of both arguments,
2800 creating candidates with those parameter types. */
2801 FOR_EACH_VEC_ELT_REVERSE (tree, types[0], ix, t)
2806 if (!VEC_empty (tree, types[1]))
2807 FOR_EACH_VEC_ELT_REVERSE (tree, types[1], jx, u)
2808 add_builtin_candidate
2809 (candidates, code, code2, fnname, t,
2810 u, args, argtypes, flags);
2812 add_builtin_candidate
2813 (candidates, code, code2, fnname, t,
2814 NULL_TREE, args, argtypes, flags);
2817 release_tree_vector (types[0]);
2818 release_tree_vector (types[1]);
2822 /* If TMPL can be successfully instantiated as indicated by
2823 EXPLICIT_TARGS and ARGLIST, adds the instantiation to CANDIDATES.
2825 TMPL is the template. EXPLICIT_TARGS are any explicit template
2826 arguments. ARGLIST is the arguments provided at the call-site.
2827 This does not change ARGLIST. The RETURN_TYPE is the desired type
2828 for conversion operators. If OBJ is NULL_TREE, FLAGS and CTYPE are
2829 as for add_function_candidate. If an OBJ is supplied, FLAGS and
2830 CTYPE are ignored, and OBJ is as for add_conv_candidate. */
2832 static struct z_candidate*
2833 add_template_candidate_real (struct z_candidate **candidates, tree tmpl,
2834 tree ctype, tree explicit_targs, tree first_arg,
2835 const VEC(tree,gc) *arglist, tree return_type,
2836 tree access_path, tree conversion_path,
2837 int flags, tree obj, unification_kind_t strict)
2839 int ntparms = DECL_NTPARMS (tmpl);
2840 tree targs = make_tree_vec (ntparms);
2841 unsigned int len = VEC_length (tree, arglist);
2842 unsigned int nargs = (first_arg == NULL_TREE ? 0 : 1) + len;
2843 unsigned int skip_without_in_chrg = 0;
2844 tree first_arg_without_in_chrg = first_arg;
2845 tree *args_without_in_chrg;
2846 unsigned int nargs_without_in_chrg;
2847 unsigned int ia, ix;
2849 struct z_candidate *cand;
2852 struct rejection_reason *reason = NULL;
2855 /* We don't do deduction on the in-charge parameter, the VTT
2856 parameter or 'this'. */
2857 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (tmpl))
2859 if (first_arg_without_in_chrg != NULL_TREE)
2860 first_arg_without_in_chrg = NULL_TREE;
2862 ++skip_without_in_chrg;
2865 if ((DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (tmpl)
2866 || DECL_BASE_CONSTRUCTOR_P (tmpl))
2867 && CLASSTYPE_VBASECLASSES (DECL_CONTEXT (tmpl)))
2869 if (first_arg_without_in_chrg != NULL_TREE)
2870 first_arg_without_in_chrg = NULL_TREE;
2872 ++skip_without_in_chrg;
2875 if (len < skip_without_in_chrg)
2878 nargs_without_in_chrg = ((first_arg_without_in_chrg != NULL_TREE ? 1 : 0)
2879 + (len - skip_without_in_chrg));
2880 args_without_in_chrg = XALLOCAVEC (tree, nargs_without_in_chrg);
2882 if (first_arg_without_in_chrg != NULL_TREE)
2884 args_without_in_chrg[ia] = first_arg_without_in_chrg;
2887 for (ix = skip_without_in_chrg;
2888 VEC_iterate (tree, arglist, ix, arg);
2891 args_without_in_chrg[ia] = arg;
2894 gcc_assert (ia == nargs_without_in_chrg);
2896 errs = errorcount+sorrycount;
2897 i = fn_type_unification (tmpl, explicit_targs, targs,
2898 args_without_in_chrg,
2899 nargs_without_in_chrg,
2900 return_type, strict, flags, false);
2904 /* Don't repeat unification later if it already resulted in errors. */
2905 if (errorcount+sorrycount == errs)
2906 reason = template_unification_rejection (tmpl, explicit_targs,
2907 targs, args_without_in_chrg,
2908 nargs_without_in_chrg,
2909 return_type, strict, flags);
2911 reason = template_unification_error_rejection ();
2915 fn = instantiate_template (tmpl, targs, tf_none);
2916 if (fn == error_mark_node)
2918 reason = template_instantiation_rejection (tmpl, targs);
2924 A member function template is never instantiated to perform the
2925 copy of a class object to an object of its class type.
2927 It's a little unclear what this means; the standard explicitly
2928 does allow a template to be used to copy a class. For example,
2933 template <class T> A(const T&);
2936 void g () { A a (f ()); }
2938 the member template will be used to make the copy. The section
2939 quoted above appears in the paragraph that forbids constructors
2940 whose only parameter is (a possibly cv-qualified variant of) the
2941 class type, and a logical interpretation is that the intent was
2942 to forbid the instantiation of member templates which would then
2944 if (DECL_CONSTRUCTOR_P (fn) && nargs == 2)
2946 tree arg_types = FUNCTION_FIRST_USER_PARMTYPE (fn);
2947 if (arg_types && same_type_p (TYPE_MAIN_VARIANT (TREE_VALUE (arg_types)),
2950 reason = invalid_copy_with_fn_template_rejection ();
2955 if (obj != NULL_TREE)
2956 /* Aha, this is a conversion function. */
2957 cand = add_conv_candidate (candidates, fn, obj, first_arg, arglist,
2958 access_path, conversion_path);
2960 cand = add_function_candidate (candidates, fn, ctype,
2961 first_arg, arglist, access_path,
2962 conversion_path, flags);
2963 if (DECL_TI_TEMPLATE (fn) != tmpl)
2964 /* This situation can occur if a member template of a template
2965 class is specialized. Then, instantiate_template might return
2966 an instantiation of the specialization, in which case the
2967 DECL_TI_TEMPLATE field will point at the original
2968 specialization. For example:
2970 template <class T> struct S { template <class U> void f(U);
2971 template <> void f(int) {}; };
2975 Here, TMPL will be template <class U> S<double>::f(U).
2976 And, instantiate template will give us the specialization
2977 template <> S<double>::f(int). But, the DECL_TI_TEMPLATE field
2978 for this will point at template <class T> template <> S<T>::f(int),
2979 so that we can find the definition. For the purposes of
2980 overload resolution, however, we want the original TMPL. */
2981 cand->template_decl = build_template_info (tmpl, targs);
2983 cand->template_decl = DECL_TEMPLATE_INFO (fn);
2984 cand->explicit_targs = explicit_targs;
2988 return add_candidate (candidates, tmpl, first_arg, arglist, nargs, NULL,
2989 access_path, conversion_path, 0, reason);
2993 static struct z_candidate *
2994 add_template_candidate (struct z_candidate **candidates, tree tmpl, tree ctype,
2995 tree explicit_targs, tree first_arg,
2996 const VEC(tree,gc) *arglist, tree return_type,
2997 tree access_path, tree conversion_path, int flags,
2998 unification_kind_t strict)
3001 add_template_candidate_real (candidates, tmpl, ctype,
3002 explicit_targs, first_arg, arglist,
3003 return_type, access_path, conversion_path,
3004 flags, NULL_TREE, strict);
3008 static struct z_candidate *
3009 add_template_conv_candidate (struct z_candidate **candidates, tree tmpl,
3010 tree obj, tree first_arg,
3011 const VEC(tree,gc) *arglist,
3012 tree return_type, tree access_path,
3013 tree conversion_path)
3016 add_template_candidate_real (candidates, tmpl, NULL_TREE, NULL_TREE,
3017 first_arg, arglist, return_type, access_path,
3018 conversion_path, 0, obj, DEDUCE_CONV);
3021 /* The CANDS are the set of candidates that were considered for
3022 overload resolution. Return the set of viable candidates, or CANDS
3023 if none are viable. If any of the candidates were viable, set
3024 *ANY_VIABLE_P to true. STRICT_P is true if a candidate should be
3025 considered viable only if it is strictly viable. */
3027 static struct z_candidate*
3028 splice_viable (struct z_candidate *cands,
3032 struct z_candidate *viable;
3033 struct z_candidate **last_viable;
3034 struct z_candidate **cand;
3036 /* Be strict inside templates, since build_over_call won't actually
3037 do the conversions to get pedwarns. */
3038 if (processing_template_decl)
3042 last_viable = &viable;
3043 *any_viable_p = false;
3048 struct z_candidate *c = *cand;
3049 if (strict_p ? c->viable == 1 : c->viable)
3054 last_viable = &c->next;
3055 *any_viable_p = true;
3061 return viable ? viable : cands;
3065 any_strictly_viable (struct z_candidate *cands)
3067 for (; cands; cands = cands->next)
3068 if (cands->viable == 1)
3073 /* OBJ is being used in an expression like "OBJ.f (...)". In other
3074 words, it is about to become the "this" pointer for a member
3075 function call. Take the address of the object. */
3078 build_this (tree obj)
3080 /* In a template, we are only concerned about the type of the
3081 expression, so we can take a shortcut. */
3082 if (processing_template_decl)
3083 return build_address (obj);
3085 return cp_build_addr_expr (obj, tf_warning_or_error);
3088 /* Returns true iff functions are equivalent. Equivalent functions are
3089 not '==' only if one is a function-local extern function or if
3090 both are extern "C". */
3093 equal_functions (tree fn1, tree fn2)
3095 if (TREE_CODE (fn1) != TREE_CODE (fn2))
3097 if (TREE_CODE (fn1) == TEMPLATE_DECL)
3099 if (DECL_LOCAL_FUNCTION_P (fn1) || DECL_LOCAL_FUNCTION_P (fn2)
3100 || DECL_EXTERN_C_FUNCTION_P (fn1))
3101 return decls_match (fn1, fn2);
3105 /* Print information about a candidate being rejected due to INFO. */
3108 print_conversion_rejection (location_t loc, struct conversion_info *info)
3110 if (info->n_arg == -1)
3111 /* Conversion of implicit `this' argument failed. */
3112 inform (loc, " no known conversion for implicit "
3113 "%<this%> parameter from %qT to %qT",
3114 info->from_type, info->to_type);
3116 inform (loc, " no known conversion for argument %d from %qT to %qT",
3117 info->n_arg+1, info->from_type, info->to_type);
3120 /* Print information about a candidate with WANT parameters and we found
3124 print_arity_information (location_t loc, unsigned int have, unsigned int want)
3126 inform_n (loc, want,
3127 " candidate expects %d argument, %d provided",
3128 " candidate expects %d arguments, %d provided",
3132 /* Print information about one overload candidate CANDIDATE. MSGSTR
3133 is the text to print before the candidate itself.
3135 NOTE: Unlike most diagnostic functions in GCC, MSGSTR is expected
3136 to have been run through gettext by the caller. This wart makes
3137 life simpler in print_z_candidates and for the translators. */
3140 print_z_candidate (const char *msgstr, struct z_candidate *candidate)
3142 const char *msg = (msgstr == NULL
3144 : ACONCAT ((msgstr, " ", NULL)));
3145 location_t loc = location_of (candidate->fn);
3147 if (TREE_CODE (candidate->fn) == IDENTIFIER_NODE)
3149 if (candidate->num_convs == 3)
3150 inform (input_location, "%s%D(%T, %T, %T) <built-in>", msg, candidate->fn,
3151 candidate->convs[0]->type,
3152 candidate->convs[1]->type,
3153 candidate->convs[2]->type);
3154 else if (candidate->num_convs == 2)
3155 inform (input_location, "%s%D(%T, %T) <built-in>", msg, candidate->fn,
3156 candidate->convs[0]->type,
3157 candidate->convs[1]->type);
3159 inform (input_location, "%s%D(%T) <built-in>", msg, candidate->fn,
3160 candidate->convs[0]->type);
3162 else if (TYPE_P (candidate->fn))
3163 inform (input_location, "%s%T <conversion>", msg, candidate->fn);
3164 else if (candidate->viable == -1)
3165 inform (loc, "%s%#D <near match>", msg, candidate->fn);
3166 else if (DECL_DELETED_FN (STRIP_TEMPLATE (candidate->fn)))
3167 inform (loc, "%s%#D <deleted>", msg, candidate->fn);
3169 inform (loc, "%s%#D", msg, candidate->fn);
3170 /* Give the user some information about why this candidate failed. */
3171 if (candidate->reason != NULL)
3173 struct rejection_reason *r = candidate->reason;
3178 print_arity_information (loc, r->u.arity.actual,
3179 r->u.arity.expected);
3181 case rr_arg_conversion:
3182 print_conversion_rejection (loc, &r->u.conversion);
3184 case rr_bad_arg_conversion:
3185 print_conversion_rejection (loc, &r->u.bad_conversion);
3187 case rr_explicit_conversion:
3188 inform (loc, " return type %qT of explicit conversion function "
3189 "cannot be converted to %qT with a qualification "
3190 "conversion", r->u.conversion.from_type,
3191 r->u.conversion.to_type);
3193 case rr_template_conversion:
3194 inform (loc, " conversion from return type %qT of template "
3195 "conversion function specialization to %qT is not an "
3196 "exact match", r->u.conversion.from_type,
3197 r->u.conversion.to_type);
3199 case rr_template_unification:
3200 /* We use template_unification_error_rejection if unification caused
3201 actual non-SFINAE errors, in which case we don't need to repeat
3203 if (r->u.template_unification.tmpl == NULL_TREE)
3205 inform (loc, " substitution of deduced template arguments "
3206 "resulted in errors seen above");
3209 /* Re-run template unification with diagnostics. */
3210 inform (loc, " template argument deduction/substitution failed:");
3211 fn_type_unification (r->u.template_unification.tmpl,
3212 r->u.template_unification.explicit_targs,
3213 r->u.template_unification.targs,
3214 r->u.template_unification.args,
3215 r->u.template_unification.nargs,
3216 r->u.template_unification.return_type,
3217 r->u.template_unification.strict,
3218 r->u.template_unification.flags,
3221 case rr_template_instantiation:
3222 /* Re-run template instantiation with diagnostics. */
3223 instantiate_template (r->u.template_instantiation.tmpl,
3224 r->u.template_instantiation.targs,
3225 tf_warning_or_error);
3227 case rr_invalid_copy:
3229 " a constructor taking a single argument of its own "
3230 "class type is invalid");
3234 /* This candidate didn't have any issues or we failed to
3235 handle a particular code. Either way... */
3242 print_z_candidates (location_t loc, struct z_candidate *candidates)
3244 struct z_candidate *cand1;
3245 struct z_candidate **cand2;
3251 /* Remove non-viable deleted candidates. */
3253 for (cand2 = &cand1; *cand2; )
3255 if (TREE_CODE ((*cand2)->fn) == FUNCTION_DECL
3256 && !(*cand2)->viable
3257 && DECL_DELETED_FN ((*cand2)->fn))
3258 *cand2 = (*cand2)->next;
3260 cand2 = &(*cand2)->next;
3262 /* ...if there are any non-deleted ones. */
3266 /* There may be duplicates in the set of candidates. We put off
3267 checking this condition as long as possible, since we have no way
3268 to eliminate duplicates from a set of functions in less than n^2
3269 time. Now we are about to emit an error message, so it is more
3270 permissible to go slowly. */
3271 for (cand1 = candidates; cand1; cand1 = cand1->next)
3273 tree fn = cand1->fn;
3274 /* Skip builtin candidates and conversion functions. */
3277 cand2 = &cand1->next;
3280 if (DECL_P ((*cand2)->fn)
3281 && equal_functions (fn, (*cand2)->fn))
3282 *cand2 = (*cand2)->next;
3284 cand2 = &(*cand2)->next;
3288 for (n_candidates = 0, cand1 = candidates; cand1; cand1 = cand1->next)
3291 inform_n (loc, n_candidates, "candidate is:", "candidates are:");
3292 for (; candidates; candidates = candidates->next)
3293 print_z_candidate (NULL, candidates);
3296 /* USER_SEQ is a user-defined conversion sequence, beginning with a
3297 USER_CONV. STD_SEQ is the standard conversion sequence applied to
3298 the result of the conversion function to convert it to the final
3299 desired type. Merge the two sequences into a single sequence,
3300 and return the merged sequence. */
3303 merge_conversion_sequences (conversion *user_seq, conversion *std_seq)
3306 bool bad = user_seq->bad_p;
3308 gcc_assert (user_seq->kind == ck_user);
3310 /* Find the end of the second conversion sequence. */
3311 for (t = &std_seq; (*t)->kind != ck_identity; t = &((*t)->u.next))
3313 /* The entire sequence is a user-conversion sequence. */
3314 (*t)->user_conv_p = true;
3319 /* Replace the identity conversion with the user conversion
3326 /* Handle overload resolution for initializing an object of class type from
3327 an initializer list. First we look for a suitable constructor that
3328 takes a std::initializer_list; if we don't find one, we then look for a
3329 non-list constructor.
3331 Parameters are as for add_candidates, except that the arguments are in
3332 the form of a CONSTRUCTOR (the initializer list) rather than a VEC, and
3333 the RETURN_TYPE parameter is replaced by TOTYPE, the desired type. */
3336 add_list_candidates (tree fns, tree first_arg,
3337 tree init_list, tree totype,
3338 tree explicit_targs, bool template_only,
3339 tree conversion_path, tree access_path,
3341 struct z_candidate **candidates)
3345 gcc_assert (*candidates == NULL);
3347 /* For list-initialization we consider explicit constructors, but
3348 give an error if one is selected. */
3349 flags &= ~LOOKUP_ONLYCONVERTING;
3350 /* And we don't allow narrowing conversions. We also use this flag to
3351 avoid the copy constructor call for copy-list-initialization. */
3352 flags |= LOOKUP_NO_NARROWING;
3354 /* Always use the default constructor if the list is empty (DR 990). */
3355 if (CONSTRUCTOR_NELTS (init_list) == 0
3356 && TYPE_HAS_DEFAULT_CONSTRUCTOR (totype))
3358 /* If the class has a list ctor, try passing the list as a single
3359 argument first, but only consider list ctors. */
3360 else if (TYPE_HAS_LIST_CTOR (totype))
3362 flags |= LOOKUP_LIST_ONLY;
3363 args = make_tree_vector_single (init_list);
3364 add_candidates (fns, first_arg, args, NULL_TREE,
3365 explicit_targs, template_only, conversion_path,
3366 access_path, flags, candidates);
3367 if (any_strictly_viable (*candidates))
3371 args = ctor_to_vec (init_list);
3373 /* We aren't looking for list-ctors anymore. */
3374 flags &= ~LOOKUP_LIST_ONLY;
3375 /* We allow more user-defined conversions within an init-list. */
3376 flags &= ~LOOKUP_NO_CONVERSION;
3377 /* But not for the copy ctor. */
3378 flags |= LOOKUP_NO_COPY_CTOR_CONVERSION;
3380 add_candidates (fns, first_arg, args, NULL_TREE,
3381 explicit_targs, template_only, conversion_path,
3382 access_path, flags, candidates);
3385 /* Returns the best overload candidate to perform the requested
3386 conversion. This function is used for three the overloading situations
3387 described in [over.match.copy], [over.match.conv], and [over.match.ref].
3388 If TOTYPE is a REFERENCE_TYPE, we're trying to find a direct binding as
3389 per [dcl.init.ref], so we ignore temporary bindings. */
3391 static struct z_candidate *
3392 build_user_type_conversion_1 (tree totype, tree expr, int flags)
3394 struct z_candidate *candidates, *cand;
3396 tree ctors = NULL_TREE;
3397 tree conv_fns = NULL_TREE;
3398 conversion *conv = NULL;
3399 tree first_arg = NULL_TREE;
3400 VEC(tree,gc) *args = NULL;
3407 fromtype = TREE_TYPE (expr);
3409 /* We represent conversion within a hierarchy using RVALUE_CONV and
3410 BASE_CONV, as specified by [over.best.ics]; these become plain
3411 constructor calls, as specified in [dcl.init]. */
3412 gcc_assert (!MAYBE_CLASS_TYPE_P (fromtype) || !MAYBE_CLASS_TYPE_P (totype)
3413 || !DERIVED_FROM_P (totype, fromtype));
3415 if (MAYBE_CLASS_TYPE_P (totype))
3416 /* Use lookup_fnfields_slot instead of lookup_fnfields to avoid
3417 creating a garbage BASELINK; constructors can't be inherited. */
3418 ctors = lookup_fnfields_slot (totype, complete_ctor_identifier);
3420 if (MAYBE_CLASS_TYPE_P (fromtype))
3422 tree to_nonref = non_reference (totype);
3423 if (same_type_ignoring_top_level_qualifiers_p (to_nonref, fromtype) ||
3424 (CLASS_TYPE_P (to_nonref) && CLASS_TYPE_P (fromtype)
3425 && DERIVED_FROM_P (to_nonref, fromtype)))
3427 /* [class.conv.fct] A conversion function is never used to
3428 convert a (possibly cv-qualified) object to the (possibly
3429 cv-qualified) same object type (or a reference to it), to a
3430 (possibly cv-qualified) base class of that type (or a
3431 reference to it)... */
3434 conv_fns = lookup_conversions (fromtype);
3438 flags |= LOOKUP_NO_CONVERSION;
3439 if (BRACE_ENCLOSED_INITIALIZER_P (expr))
3440 flags |= LOOKUP_NO_NARROWING;
3442 /* It's OK to bind a temporary for converting constructor arguments, but
3443 not in converting the return value of a conversion operator. */
3444 convflags = ((flags & LOOKUP_NO_TEMP_BIND) | LOOKUP_NO_CONVERSION);
3445 flags &= ~LOOKUP_NO_TEMP_BIND;
3449 int ctorflags = flags;
3451 first_arg = build_int_cst (build_pointer_type (totype), 0);
3453 /* We should never try to call the abstract or base constructor
3455 gcc_assert (!DECL_HAS_IN_CHARGE_PARM_P (OVL_CURRENT (ctors))
3456 && !DECL_HAS_VTT_PARM_P (OVL_CURRENT (ctors)));
3458 if (BRACE_ENCLOSED_INITIALIZER_P (expr))
3460 /* List-initialization. */
3461 add_list_candidates (ctors, first_arg, expr, totype, NULL_TREE,
3462 false, TYPE_BINFO (totype), TYPE_BINFO (totype),
3463 ctorflags, &candidates);
3467 args = make_tree_vector_single (expr);
3468 add_candidates (ctors, first_arg, args, NULL_TREE, NULL_TREE, false,
3469 TYPE_BINFO (totype), TYPE_BINFO (totype),
3470 ctorflags, &candidates);
3473 for (cand = candidates; cand; cand = cand->next)
3475 cand->second_conv = build_identity_conv (totype, NULL_TREE);
3477 /* If totype isn't a reference, and LOOKUP_NO_TEMP_BIND isn't
3478 set, then this is copy-initialization. In that case, "The
3479 result of the call is then used to direct-initialize the
3480 object that is the destination of the copy-initialization."
3483 We represent this in the conversion sequence with an
3484 rvalue conversion, which means a constructor call. */
3485 if (TREE_CODE (totype) != REFERENCE_TYPE
3486 && !(convflags & LOOKUP_NO_TEMP_BIND))
3488 = build_conv (ck_rvalue, totype, cand->second_conv);
3493 first_arg = build_this (expr);
3495 for (; conv_fns; conv_fns = TREE_CHAIN (conv_fns))
3497 tree conversion_path = TREE_PURPOSE (conv_fns);
3498 struct z_candidate *old_candidates;
3500 /* If we are called to convert to a reference type, we are trying to
3501 find a direct binding, so don't even consider temporaries. If
3502 we don't find a direct binding, the caller will try again to
3503 look for a temporary binding. */
3504 if (TREE_CODE (totype) == REFERENCE_TYPE)
3505 convflags |= LOOKUP_NO_TEMP_BIND;
3507 old_candidates = candidates;
3508 add_candidates (TREE_VALUE (conv_fns), first_arg, NULL, totype,
3510 conversion_path, TYPE_BINFO (fromtype),
3511 flags, &candidates);
3513 for (cand = candidates; cand != old_candidates; cand = cand->next)
3515 tree rettype = TREE_TYPE (TREE_TYPE (cand->fn));
3517 = implicit_conversion (totype,
3520 /*c_cast_p=*/false, convflags);
3522 /* If LOOKUP_NO_TEMP_BIND isn't set, then this is
3523 copy-initialization. In that case, "The result of the
3524 call is then used to direct-initialize the object that is
3525 the destination of the copy-initialization." [dcl.init]
3527 We represent this in the conversion sequence with an
3528 rvalue conversion, which means a constructor call. But
3529 don't add a second rvalue conversion if there's already
3530 one there. Which there really shouldn't be, but it's
3531 harmless since we'd add it here anyway. */
3532 if (ics && MAYBE_CLASS_TYPE_P (totype) && ics->kind != ck_rvalue
3533 && !(convflags & LOOKUP_NO_TEMP_BIND))
3534 ics = build_conv (ck_rvalue, totype, ics);
3536 cand->second_conv = ics;