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
4 Free Software Foundation, Inc.
5 Contributed by Michael Tiemann (tiemann@cygnus.com) and
6 modified by Brendan Kehoe (brendan@cygnus.com).
8 This file is part of GCC.
10 GCC is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation; either version 3, or (at your option)
15 GCC is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License for more details.
20 You should have received a copy of the GNU General Public License
21 along with GCC; see the file COPYING3. If not see
22 <http://www.gnu.org/licenses/>. */
25 /* High-level class interface. */
29 #include "coretypes.h"
38 #include "diagnostic.h"
42 #include "langhooks.h"
44 /* The various kinds of conversion. */
46 typedef enum conversion_kind {
62 /* The rank of the conversion. Order of the enumerals matters; better
63 conversions should come earlier in the list. */
65 typedef enum conversion_rank {
76 /* An implicit conversion sequence, in the sense of [over.best.ics].
77 The first conversion to be performed is at the end of the chain.
78 That conversion is always a cr_identity conversion. */
80 typedef struct conversion conversion;
82 /* The kind of conversion represented by this step. */
84 /* The rank of this conversion. */
86 BOOL_BITFIELD user_conv_p : 1;
87 BOOL_BITFIELD ellipsis_p : 1;
88 BOOL_BITFIELD this_p : 1;
89 BOOL_BITFIELD bad_p : 1;
90 /* If KIND is ck_ref_bind ck_base_conv, true to indicate that a
91 temporary should be created to hold the result of the
93 BOOL_BITFIELD need_temporary_p : 1;
94 /* If KIND is ck_ptr or ck_pmem, true to indicate that a conversion
95 from a pointer-to-derived to pointer-to-base is being performed. */
96 BOOL_BITFIELD base_p : 1;
97 /* If KIND is ck_ref_bind, true when either an lvalue reference is
98 being bound to an lvalue expression or an rvalue reference is
99 being bound to an rvalue expression. */
100 BOOL_BITFIELD rvaluedness_matches_p: 1;
101 BOOL_BITFIELD check_narrowing: 1;
102 /* The type of the expression resulting from the conversion. */
105 /* The next conversion in the chain. Since the conversions are
106 arranged from outermost to innermost, the NEXT conversion will
107 actually be performed before this conversion. This variant is
108 used only when KIND is neither ck_identity nor ck_ambig. */
110 /* The expression at the beginning of the conversion chain. This
111 variant is used only if KIND is ck_identity or ck_ambig. */
113 /* The array of conversions for an initializer_list. */
116 /* The function candidate corresponding to this conversion
117 sequence. This field is only used if KIND is ck_user. */
118 struct z_candidate *cand;
121 #define CONVERSION_RANK(NODE) \
122 ((NODE)->bad_p ? cr_bad \
123 : (NODE)->ellipsis_p ? cr_ellipsis \
124 : (NODE)->user_conv_p ? cr_user \
127 static struct obstack conversion_obstack;
128 static bool conversion_obstack_initialized;
130 static struct z_candidate * tourney (struct z_candidate *);
131 static int equal_functions (tree, tree);
132 static int joust (struct z_candidate *, struct z_candidate *, bool);
133 static int compare_ics (conversion *, conversion *);
134 static tree build_over_call (struct z_candidate *, int, tsubst_flags_t);
135 static tree build_java_interface_fn_ref (tree, tree);
136 #define convert_like(CONV, EXPR, COMPLAIN) \
137 convert_like_real ((CONV), (EXPR), NULL_TREE, 0, 0, \
138 /*issue_conversion_warnings=*/true, \
139 /*c_cast_p=*/false, (COMPLAIN))
140 #define convert_like_with_context(CONV, EXPR, FN, ARGNO, COMPLAIN ) \
141 convert_like_real ((CONV), (EXPR), (FN), (ARGNO), 0, \
142 /*issue_conversion_warnings=*/true, \
143 /*c_cast_p=*/false, (COMPLAIN))
144 static tree convert_like_real (conversion *, tree, tree, int, int, bool,
145 bool, tsubst_flags_t);
146 static void op_error (enum tree_code, enum tree_code, tree, tree,
148 static VEC(tree,gc) *resolve_args (VEC(tree,gc) *);
149 static struct z_candidate *build_user_type_conversion_1 (tree, tree, int);
150 static void print_z_candidate (const char *, struct z_candidate *);
151 static void print_z_candidates (struct z_candidate *);
152 static tree build_this (tree);
153 static struct z_candidate *splice_viable (struct z_candidate *, bool, bool *);
154 static bool any_strictly_viable (struct z_candidate *);
155 static struct z_candidate *add_template_candidate
156 (struct z_candidate **, tree, tree, tree, tree, const VEC(tree,gc) *,
157 tree, tree, tree, int, unification_kind_t);
158 static struct z_candidate *add_template_candidate_real
159 (struct z_candidate **, tree, tree, tree, tree, const VEC(tree,gc) *,
160 tree, tree, tree, int, tree, unification_kind_t);
161 static struct z_candidate *add_template_conv_candidate
162 (struct z_candidate **, tree, tree, tree, const VEC(tree,gc) *, tree,
164 static void add_builtin_candidates
165 (struct z_candidate **, enum tree_code, enum tree_code,
167 static void add_builtin_candidate
168 (struct z_candidate **, enum tree_code, enum tree_code,
169 tree, tree, tree, tree *, tree *, int);
170 static bool is_complete (tree);
171 static void build_builtin_candidate
172 (struct z_candidate **, tree, tree, tree, tree *, tree *,
174 static struct z_candidate *add_conv_candidate
175 (struct z_candidate **, tree, tree, tree, const VEC(tree,gc) *, tree,
177 static struct z_candidate *add_function_candidate
178 (struct z_candidate **, tree, tree, tree, const VEC(tree,gc) *, tree,
180 static conversion *implicit_conversion (tree, tree, tree, bool, int);
181 static conversion *standard_conversion (tree, tree, tree, bool, int);
182 static conversion *reference_binding (tree, tree, tree, bool, int);
183 static conversion *build_conv (conversion_kind, tree, conversion *);
184 static conversion *build_list_conv (tree, tree, int);
185 static bool is_subseq (conversion *, conversion *);
186 static conversion *maybe_handle_ref_bind (conversion **);
187 static void maybe_handle_implicit_object (conversion **);
188 static struct z_candidate *add_candidate
189 (struct z_candidate **, tree, tree, const VEC(tree,gc) *, size_t,
190 conversion **, tree, tree, int);
191 static tree source_type (conversion *);
192 static void add_warning (struct z_candidate *, struct z_candidate *);
193 static bool reference_related_p (tree, tree);
194 static bool reference_compatible_p (tree, tree);
195 static conversion *convert_class_to_reference (tree, tree, tree, int);
196 static conversion *direct_reference_binding (tree, conversion *);
197 static bool promoted_arithmetic_type_p (tree);
198 static conversion *conditional_conversion (tree, tree);
199 static char *name_as_c_string (tree, tree, bool *);
200 static tree prep_operand (tree);
201 static void add_candidates (tree, const VEC(tree,gc) *, tree, bool, tree, tree,
202 int, struct z_candidate **);
203 static conversion *merge_conversion_sequences (conversion *, conversion *);
204 static bool magic_varargs_p (tree);
205 static tree build_temp (tree, tree, int, diagnostic_t *);
207 /* Returns nonzero iff the destructor name specified in NAME matches BASETYPE.
208 NAME can take many forms... */
211 check_dtor_name (tree basetype, tree name)
213 /* Just accept something we've already complained about. */
214 if (name == error_mark_node)
217 if (TREE_CODE (name) == TYPE_DECL)
218 name = TREE_TYPE (name);
219 else if (TYPE_P (name))
221 else if (TREE_CODE (name) == IDENTIFIER_NODE)
223 if ((MAYBE_CLASS_TYPE_P (basetype)
224 && name == constructor_name (basetype))
225 || (TREE_CODE (basetype) == ENUMERAL_TYPE
226 && name == TYPE_IDENTIFIER (basetype)))
229 name = get_type_value (name);
235 template <class T> struct S { ~S(); };
239 NAME will be a class template. */
240 gcc_assert (DECL_CLASS_TEMPLATE_P (name));
244 if (!name || name == error_mark_node)
246 return same_type_p (TYPE_MAIN_VARIANT (basetype), TYPE_MAIN_VARIANT (name));
249 /* We want the address of a function or method. We avoid creating a
250 pointer-to-member function. */
253 build_addr_func (tree function)
255 tree type = TREE_TYPE (function);
257 /* We have to do these by hand to avoid real pointer to member
259 if (TREE_CODE (type) == METHOD_TYPE)
261 if (TREE_CODE (function) == OFFSET_REF)
263 tree object = build_address (TREE_OPERAND (function, 0));
264 return get_member_function_from_ptrfunc (&object,
265 TREE_OPERAND (function, 1));
267 function = build_address (function);
270 function = decay_conversion (function);
275 /* Build a CALL_EXPR, we can handle FUNCTION_TYPEs, METHOD_TYPEs, or
276 POINTER_TYPE to those. Note, pointer to member function types
277 (TYPE_PTRMEMFUNC_P) must be handled by our callers. There are
278 two variants. build_call_a is the primitive taking an array of
279 arguments, while build_call_n is a wrapper that handles varargs. */
282 build_call_n (tree function, int n, ...)
285 return build_call_a (function, 0, NULL);
288 tree *argarray = (tree *) alloca (n * sizeof (tree));
293 for (i = 0; i < n; i++)
294 argarray[i] = va_arg (ap, tree);
296 return build_call_a (function, n, argarray);
301 build_call_a (tree function, int n, tree *argarray)
303 int is_constructor = 0;
310 function = build_addr_func (function);
312 gcc_assert (TYPE_PTR_P (TREE_TYPE (function)));
313 fntype = TREE_TYPE (TREE_TYPE (function));
314 gcc_assert (TREE_CODE (fntype) == FUNCTION_TYPE
315 || TREE_CODE (fntype) == METHOD_TYPE);
316 result_type = TREE_TYPE (fntype);
318 if (TREE_CODE (function) == ADDR_EXPR
319 && TREE_CODE (TREE_OPERAND (function, 0)) == FUNCTION_DECL)
321 decl = TREE_OPERAND (function, 0);
322 if (!TREE_USED (decl))
324 /* We invoke build_call directly for several library
325 functions. These may have been declared normally if
326 we're building libgcc, so we can't just check
328 gcc_assert (DECL_ARTIFICIAL (decl)
329 || !strncmp (IDENTIFIER_POINTER (DECL_NAME (decl)),
337 /* We check both the decl and the type; a function may be known not to
338 throw without being declared throw(). */
339 nothrow = ((decl && TREE_NOTHROW (decl))
340 || TYPE_NOTHROW_P (TREE_TYPE (TREE_TYPE (function))));
342 if (decl && TREE_THIS_VOLATILE (decl) && cfun && cp_function_chain)
343 current_function_returns_abnormally = 1;
345 if (decl && TREE_DEPRECATED (decl))
346 warn_deprecated_use (decl, NULL_TREE);
347 require_complete_eh_spec_types (fntype, decl);
349 if (decl && DECL_CONSTRUCTOR_P (decl))
352 /* Don't pass empty class objects by value. This is useful
353 for tags in STL, which are used to control overload resolution.
354 We don't need to handle other cases of copying empty classes. */
355 if (! decl || ! DECL_BUILT_IN (decl))
356 for (i = 0; i < n; i++)
357 if (is_empty_class (TREE_TYPE (argarray[i]))
358 && ! TREE_ADDRESSABLE (TREE_TYPE (argarray[i])))
360 tree t = build0 (EMPTY_CLASS_EXPR, TREE_TYPE (argarray[i]));
361 argarray[i] = build2 (COMPOUND_EXPR, TREE_TYPE (t),
365 function = build_call_array_loc (input_location,
366 result_type, function, n, argarray);
367 TREE_HAS_CONSTRUCTOR (function) = is_constructor;
368 TREE_NOTHROW (function) = nothrow;
373 /* Build something of the form ptr->method (args)
374 or object.method (args). This can also build
375 calls to constructors, and find friends.
377 Member functions always take their class variable
380 INSTANCE is a class instance.
382 NAME is the name of the method desired, usually an IDENTIFIER_NODE.
384 PARMS help to figure out what that NAME really refers to.
386 BASETYPE_PATH, if non-NULL, contains a chain from the type of INSTANCE
387 down to the real instance type to use for access checking. We need this
388 information to get protected accesses correct.
390 FLAGS is the logical disjunction of zero or more LOOKUP_
391 flags. See cp-tree.h for more info.
393 If this is all OK, calls build_function_call with the resolved
396 This function must also handle being called to perform
397 initialization, promotion/coercion of arguments, and
398 instantiation of default parameters.
400 Note that NAME may refer to an instance variable name. If
401 `operator()()' is defined for the type of that field, then we return
404 /* New overloading code. */
406 typedef struct z_candidate z_candidate;
408 typedef struct candidate_warning candidate_warning;
409 struct candidate_warning {
411 candidate_warning *next;
415 /* The FUNCTION_DECL that will be called if this candidate is
416 selected by overload resolution. */
418 /* If not NULL_TREE, the first argument to use when calling this
421 /* The rest of the arguments to use when calling this function. If
422 there are no further arguments this may be NULL or it may be an
424 const VEC(tree,gc) *args;
425 /* The implicit conversion sequences for each of the arguments to
428 /* The number of implicit conversion sequences. */
430 /* If FN is a user-defined conversion, the standard conversion
431 sequence from the type returned by FN to the desired destination
433 conversion *second_conv;
435 /* If FN is a member function, the binfo indicating the path used to
436 qualify the name of FN at the call site. This path is used to
437 determine whether or not FN is accessible if it is selected by
438 overload resolution. The DECL_CONTEXT of FN will always be a
439 (possibly improper) base of this binfo. */
441 /* If FN is a non-static member function, the binfo indicating the
442 subobject to which the `this' pointer should be converted if FN
443 is selected by overload resolution. The type pointed to the by
444 the `this' pointer must correspond to the most derived class
445 indicated by the CONVERSION_PATH. */
446 tree conversion_path;
448 candidate_warning *warnings;
452 /* Returns true iff T is a null pointer constant in the sense of
456 null_ptr_cst_p (tree t)
460 A null pointer constant is an integral constant expression
461 (_expr.const_) rvalue of integer type that evaluates to zero. */
462 t = integral_constant_value (t);
465 if (CP_INTEGRAL_TYPE_P (TREE_TYPE (t)) && integer_zerop (t))
468 if (!TREE_OVERFLOW (t))
474 /* Returns nonzero if PARMLIST consists of only default parms and/or
478 sufficient_parms_p (const_tree parmlist)
480 for (; parmlist && parmlist != void_list_node;
481 parmlist = TREE_CHAIN (parmlist))
482 if (!TREE_PURPOSE (parmlist))
487 /* Allocate N bytes of memory from the conversion obstack. The memory
488 is zeroed before being returned. */
491 conversion_obstack_alloc (size_t n)
494 if (!conversion_obstack_initialized)
496 gcc_obstack_init (&conversion_obstack);
497 conversion_obstack_initialized = true;
499 p = obstack_alloc (&conversion_obstack, n);
504 /* Dynamically allocate a conversion. */
507 alloc_conversion (conversion_kind kind)
510 c = (conversion *) conversion_obstack_alloc (sizeof (conversion));
515 #ifdef ENABLE_CHECKING
517 /* Make sure that all memory on the conversion obstack has been
521 validate_conversion_obstack (void)
523 if (conversion_obstack_initialized)
524 gcc_assert ((obstack_next_free (&conversion_obstack)
525 == obstack_base (&conversion_obstack)));
528 #endif /* ENABLE_CHECKING */
530 /* Dynamically allocate an array of N conversions. */
533 alloc_conversions (size_t n)
535 return (conversion **) conversion_obstack_alloc (n * sizeof (conversion *));
539 build_conv (conversion_kind code, tree type, conversion *from)
542 conversion_rank rank = CONVERSION_RANK (from);
544 /* Note that the caller is responsible for filling in t->cand for
545 user-defined conversions. */
546 t = alloc_conversion (code);
569 t->user_conv_p = (code == ck_user || from->user_conv_p);
570 t->bad_p = from->bad_p;
575 /* Represent a conversion from CTOR, a braced-init-list, to TYPE, a
576 specialization of std::initializer_list<T>, if such a conversion is
580 build_list_conv (tree type, tree ctor, int flags)
582 tree elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (type), 0);
583 unsigned len = CONSTRUCTOR_NELTS (ctor);
584 conversion **subconvs = alloc_conversions (len);
589 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor), i, val)
592 = implicit_conversion (elttype, TREE_TYPE (val), val,
600 t = alloc_conversion (ck_list);
602 t->u.list = subconvs;
605 for (i = 0; i < len; ++i)
607 conversion *sub = subconvs[i];
608 if (sub->rank > t->rank)
610 if (sub->user_conv_p)
611 t->user_conv_p = true;
619 /* Represent a conversion from CTOR, a braced-init-list, to TYPE, an
620 aggregate class, if such a conversion is possible. */
623 build_aggr_conv (tree type, tree ctor, int flags)
625 unsigned HOST_WIDE_INT i = 0;
627 tree field = TYPE_FIELDS (type);
629 for (; field; field = TREE_CHAIN (field), ++i)
631 if (TREE_CODE (field) != FIELD_DECL)
633 if (i < CONSTRUCTOR_NELTS (ctor))
635 constructor_elt *ce = CONSTRUCTOR_ELT (ctor, i);
636 if (!can_convert_arg (TREE_TYPE (field), TREE_TYPE (ce->value),
640 else if (build_value_init (TREE_TYPE (field)) == error_mark_node)
644 c = alloc_conversion (ck_aggr);
647 c->user_conv_p = true;
652 /* Build a representation of the identity conversion from EXPR to
653 itself. The TYPE should match the type of EXPR, if EXPR is non-NULL. */
656 build_identity_conv (tree type, tree expr)
660 c = alloc_conversion (ck_identity);
667 /* Converting from EXPR to TYPE was ambiguous in the sense that there
668 were multiple user-defined conversions to accomplish the job.
669 Build a conversion that indicates that ambiguity. */
672 build_ambiguous_conv (tree type, tree expr)
676 c = alloc_conversion (ck_ambig);
684 strip_top_quals (tree t)
686 if (TREE_CODE (t) == ARRAY_TYPE)
688 return cp_build_qualified_type (t, 0);
691 /* Returns the standard conversion path (see [conv]) from type FROM to type
692 TO, if any. For proper handling of null pointer constants, you must
693 also pass the expression EXPR to convert from. If C_CAST_P is true,
694 this conversion is coming from a C-style cast. */
697 standard_conversion (tree to, tree from, tree expr, bool c_cast_p,
700 enum tree_code fcode, tcode;
702 bool fromref = false;
704 to = non_reference (to);
705 if (TREE_CODE (from) == REFERENCE_TYPE)
708 from = TREE_TYPE (from);
710 to = strip_top_quals (to);
711 from = strip_top_quals (from);
713 if ((TYPE_PTRFN_P (to) || TYPE_PTRMEMFUNC_P (to))
714 && expr && type_unknown_p (expr))
716 tsubst_flags_t tflags = tf_conv;
717 if (!(flags & LOOKUP_PROTECT))
718 tflags |= tf_no_access_control;
719 expr = instantiate_type (to, expr, tflags);
720 if (expr == error_mark_node)
722 from = TREE_TYPE (expr);
725 fcode = TREE_CODE (from);
726 tcode = TREE_CODE (to);
728 conv = build_identity_conv (from, expr);
729 if (fcode == FUNCTION_TYPE || fcode == ARRAY_TYPE)
731 from = type_decays_to (from);
732 fcode = TREE_CODE (from);
733 conv = build_conv (ck_lvalue, from, conv);
735 else if (fromref || (expr && lvalue_p (expr)))
740 bitfield_type = is_bitfield_expr_with_lowered_type (expr);
743 from = strip_top_quals (bitfield_type);
744 fcode = TREE_CODE (from);
747 conv = build_conv (ck_rvalue, from, conv);
750 /* Allow conversion between `__complex__' data types. */
751 if (tcode == COMPLEX_TYPE && fcode == COMPLEX_TYPE)
753 /* The standard conversion sequence to convert FROM to TO is
754 the standard conversion sequence to perform componentwise
756 conversion *part_conv = standard_conversion
757 (TREE_TYPE (to), TREE_TYPE (from), NULL_TREE, c_cast_p, flags);
761 conv = build_conv (part_conv->kind, to, conv);
762 conv->rank = part_conv->rank;
770 if (same_type_p (from, to))
773 if ((tcode == POINTER_TYPE || TYPE_PTR_TO_MEMBER_P (to))
774 && expr && null_ptr_cst_p (expr))
775 conv = build_conv (ck_std, to, conv);
776 else if ((tcode == INTEGER_TYPE && fcode == POINTER_TYPE)
777 || (tcode == POINTER_TYPE && fcode == INTEGER_TYPE))
779 /* For backwards brain damage compatibility, allow interconversion of
780 pointers and integers with a pedwarn. */
781 conv = build_conv (ck_std, to, conv);
784 else if (UNSCOPED_ENUM_P (to) && fcode == INTEGER_TYPE)
786 /* For backwards brain damage compatibility, allow interconversion of
787 enums and integers with a pedwarn. */
788 conv = build_conv (ck_std, to, conv);
791 else if ((tcode == POINTER_TYPE && fcode == POINTER_TYPE)
792 || (TYPE_PTRMEM_P (to) && TYPE_PTRMEM_P (from)))
797 if (tcode == POINTER_TYPE
798 && same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (from),
801 else if (VOID_TYPE_P (TREE_TYPE (to))
802 && !TYPE_PTRMEM_P (from)
803 && TREE_CODE (TREE_TYPE (from)) != FUNCTION_TYPE)
805 from = build_pointer_type
806 (cp_build_qualified_type (void_type_node,
807 cp_type_quals (TREE_TYPE (from))));
808 conv = build_conv (ck_ptr, from, conv);
810 else if (TYPE_PTRMEM_P (from))
812 tree fbase = TYPE_PTRMEM_CLASS_TYPE (from);
813 tree tbase = TYPE_PTRMEM_CLASS_TYPE (to);
815 if (DERIVED_FROM_P (fbase, tbase)
816 && (same_type_ignoring_top_level_qualifiers_p
817 (TYPE_PTRMEM_POINTED_TO_TYPE (from),
818 TYPE_PTRMEM_POINTED_TO_TYPE (to))))
820 from = build_ptrmem_type (tbase,
821 TYPE_PTRMEM_POINTED_TO_TYPE (from));
822 conv = build_conv (ck_pmem, from, conv);
824 else if (!same_type_p (fbase, tbase))
827 else if (CLASS_TYPE_P (TREE_TYPE (from))
828 && CLASS_TYPE_P (TREE_TYPE (to))
831 An rvalue of type "pointer to cv D," where D is a
832 class type, can be converted to an rvalue of type
833 "pointer to cv B," where B is a base class (clause
834 _class.derived_) of D. If B is an inaccessible
835 (clause _class.access_) or ambiguous
836 (_class.member.lookup_) base class of D, a program
837 that necessitates this conversion is ill-formed.
838 Therefore, we use DERIVED_FROM_P, and do not check
839 access or uniqueness. */
840 && DERIVED_FROM_P (TREE_TYPE (to), TREE_TYPE (from)))
843 cp_build_qualified_type (TREE_TYPE (to),
844 cp_type_quals (TREE_TYPE (from)));
845 from = build_pointer_type (from);
846 conv = build_conv (ck_ptr, from, conv);
850 if (tcode == POINTER_TYPE)
852 to_pointee = TREE_TYPE (to);
853 from_pointee = TREE_TYPE (from);
857 to_pointee = TYPE_PTRMEM_POINTED_TO_TYPE (to);
858 from_pointee = TYPE_PTRMEM_POINTED_TO_TYPE (from);
861 if (same_type_p (from, to))
863 else if (c_cast_p && comp_ptr_ttypes_const (to, from))
864 /* In a C-style cast, we ignore CV-qualification because we
865 are allowed to perform a static_cast followed by a
867 conv = build_conv (ck_qual, to, conv);
868 else if (!c_cast_p && comp_ptr_ttypes (to_pointee, from_pointee))
869 conv = build_conv (ck_qual, to, conv);
870 else if (expr && string_conv_p (to, expr, 0))
871 /* converting from string constant to char *. */
872 conv = build_conv (ck_qual, to, conv);
873 else if (ptr_reasonably_similar (to_pointee, from_pointee))
875 conv = build_conv (ck_ptr, to, conv);
883 else if (TYPE_PTRMEMFUNC_P (to) && TYPE_PTRMEMFUNC_P (from))
885 tree fromfn = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (from));
886 tree tofn = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (to));
887 tree fbase = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (fromfn)));
888 tree tbase = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (tofn)));
890 if (!DERIVED_FROM_P (fbase, tbase)
891 || !same_type_p (TREE_TYPE (fromfn), TREE_TYPE (tofn))
892 || !compparms (TREE_CHAIN (TYPE_ARG_TYPES (fromfn)),
893 TREE_CHAIN (TYPE_ARG_TYPES (tofn)))
894 || cp_type_quals (fbase) != cp_type_quals (tbase))
897 from = cp_build_qualified_type (tbase, cp_type_quals (fbase));
898 from = build_method_type_directly (from,
900 TREE_CHAIN (TYPE_ARG_TYPES (fromfn)));
901 from = build_ptrmemfunc_type (build_pointer_type (from));
902 conv = build_conv (ck_pmem, from, conv);
905 else if (tcode == BOOLEAN_TYPE)
909 An rvalue of arithmetic, unscoped enumeration, pointer, or
910 pointer to member type can be converted to an rvalue of type
912 if (ARITHMETIC_TYPE_P (from)
913 || UNSCOPED_ENUM_P (from)
914 || fcode == POINTER_TYPE
915 || TYPE_PTR_TO_MEMBER_P (from))
917 conv = build_conv (ck_std, to, conv);
918 if (fcode == POINTER_TYPE
919 || TYPE_PTRMEM_P (from)
920 || (TYPE_PTRMEMFUNC_P (from)
921 && conv->rank < cr_pbool))
922 conv->rank = cr_pbool;
928 /* We don't check for ENUMERAL_TYPE here because there are no standard
929 conversions to enum type. */
930 /* As an extension, allow conversion to complex type. */
931 else if (ARITHMETIC_TYPE_P (to))
933 if (! (INTEGRAL_CODE_P (fcode) || fcode == REAL_TYPE)
934 || SCOPED_ENUM_P (from))
936 conv = build_conv (ck_std, to, conv);
938 /* Give this a better rank if it's a promotion. */
939 if (same_type_p (to, type_promotes_to (from))
940 && conv->u.next->rank <= cr_promotion)
941 conv->rank = cr_promotion;
943 else if (fcode == VECTOR_TYPE && tcode == VECTOR_TYPE
944 && vector_types_convertible_p (from, to, false))
945 return build_conv (ck_std, to, conv);
946 else if (MAYBE_CLASS_TYPE_P (to) && MAYBE_CLASS_TYPE_P (from)
947 && is_properly_derived_from (from, to))
949 if (conv->kind == ck_rvalue)
951 conv = build_conv (ck_base, to, conv);
952 /* The derived-to-base conversion indicates the initialization
953 of a parameter with base type from an object of a derived
954 type. A temporary object is created to hold the result of
955 the conversion unless we're binding directly to a reference. */
956 conv->need_temporary_p = !(flags & LOOKUP_NO_TEMP_BIND);
961 if (flags & LOOKUP_NO_NARROWING)
962 conv->check_narrowing = true;
967 /* Returns nonzero if T1 is reference-related to T2. */
970 reference_related_p (tree t1, tree t2)
972 t1 = TYPE_MAIN_VARIANT (t1);
973 t2 = TYPE_MAIN_VARIANT (t2);
977 Given types "cv1 T1" and "cv2 T2," "cv1 T1" is reference-related
978 to "cv2 T2" if T1 is the same type as T2, or T1 is a base class
980 return (same_type_p (t1, t2)
981 || (CLASS_TYPE_P (t1) && CLASS_TYPE_P (t2)
982 && DERIVED_FROM_P (t1, t2)));
985 /* Returns nonzero if T1 is reference-compatible with T2. */
988 reference_compatible_p (tree t1, tree t2)
992 "cv1 T1" is reference compatible with "cv2 T2" if T1 is
993 reference-related to T2 and cv1 is the same cv-qualification as,
994 or greater cv-qualification than, cv2. */
995 return (reference_related_p (t1, t2)
996 && at_least_as_qualified_p (t1, t2));
999 /* Determine whether or not the EXPR (of class type S) can be
1000 converted to T as in [over.match.ref]. */
1003 convert_class_to_reference (tree reference_type, tree s, tree expr, int flags)
1009 struct z_candidate *candidates;
1010 struct z_candidate *cand;
1013 conversions = lookup_conversions (s);
1019 Assuming that "cv1 T" is the underlying type of the reference
1020 being initialized, and "cv S" is the type of the initializer
1021 expression, with S a class type, the candidate functions are
1022 selected as follows:
1024 --The conversion functions of S and its base classes are
1025 considered. Those that are not hidden within S and yield type
1026 "reference to cv2 T2", where "cv1 T" is reference-compatible
1027 (_dcl.init.ref_) with "cv2 T2", are candidate functions.
1029 The argument list has one argument, which is the initializer
1034 /* Conceptually, we should take the address of EXPR and put it in
1035 the argument list. Unfortunately, however, that can result in
1036 error messages, which we should not issue now because we are just
1037 trying to find a conversion operator. Therefore, we use NULL,
1038 cast to the appropriate type. */
1039 first_arg = build_int_cst (build_pointer_type (s), 0);
1041 t = TREE_TYPE (reference_type);
1043 for (; conversions; conversions = TREE_CHAIN (conversions))
1045 tree fns = TREE_VALUE (conversions);
1047 for (; fns; fns = OVL_NEXT (fns))
1049 tree f = OVL_CURRENT (fns);
1050 tree t2 = TREE_TYPE (TREE_TYPE (f));
1052 if (DECL_NONCONVERTING_P (f)
1053 && (flags & LOOKUP_ONLYCONVERTING))
1058 /* If this is a template function, try to get an exact
1060 if (TREE_CODE (f) == TEMPLATE_DECL)
1062 cand = add_template_candidate (&candidates,
1069 TREE_PURPOSE (conversions),
1075 /* Now, see if the conversion function really returns
1076 an lvalue of the appropriate type. From the
1077 point of view of unification, simply returning an
1078 rvalue of the right type is good enough. */
1080 t2 = TREE_TYPE (TREE_TYPE (f));
1081 if (TREE_CODE (t2) != REFERENCE_TYPE
1082 || !reference_compatible_p (t, TREE_TYPE (t2)))
1084 candidates = candidates->next;
1089 else if (TREE_CODE (t2) == REFERENCE_TYPE
1090 && reference_compatible_p (t, TREE_TYPE (t2)))
1091 cand = add_function_candidate (&candidates, f, s, first_arg,
1092 NULL, TYPE_BINFO (s),
1093 TREE_PURPOSE (conversions),
1098 conversion *identity_conv;
1099 /* Build a standard conversion sequence indicating the
1100 binding from the reference type returned by the
1101 function to the desired REFERENCE_TYPE. */
1103 = build_identity_conv (TREE_TYPE (TREE_TYPE
1104 (TREE_TYPE (cand->fn))),
1107 = (direct_reference_binding
1108 (reference_type, identity_conv));
1109 cand->second_conv->rvaluedness_matches_p
1110 = TYPE_REF_IS_RVALUE (TREE_TYPE (TREE_TYPE (cand->fn)))
1111 == TYPE_REF_IS_RVALUE (reference_type);
1112 cand->second_conv->bad_p |= cand->convs[0]->bad_p;
1117 candidates = splice_viable (candidates, pedantic, &any_viable_p);
1118 /* If none of the conversion functions worked out, let our caller
1123 cand = tourney (candidates);
1127 /* Now that we know that this is the function we're going to use fix
1128 the dummy first argument. */
1129 gcc_assert (cand->first_arg == NULL_TREE
1130 || integer_zerop (cand->first_arg));
1131 cand->first_arg = build_this (expr);
1133 /* Build a user-defined conversion sequence representing the
1135 conv = build_conv (ck_user,
1136 TREE_TYPE (TREE_TYPE (cand->fn)),
1137 build_identity_conv (TREE_TYPE (expr), expr));
1140 /* Merge it with the standard conversion sequence from the
1141 conversion function's return type to the desired type. */
1142 cand->second_conv = merge_conversion_sequences (conv, cand->second_conv);
1144 if (cand->viable == -1)
1147 return cand->second_conv;
1150 /* A reference of the indicated TYPE is being bound directly to the
1151 expression represented by the implicit conversion sequence CONV.
1152 Return a conversion sequence for this binding. */
1155 direct_reference_binding (tree type, conversion *conv)
1159 gcc_assert (TREE_CODE (type) == REFERENCE_TYPE);
1160 gcc_assert (TREE_CODE (conv->type) != REFERENCE_TYPE);
1162 t = TREE_TYPE (type);
1166 When a parameter of reference type binds directly
1167 (_dcl.init.ref_) to an argument expression, the implicit
1168 conversion sequence is the identity conversion, unless the
1169 argument expression has a type that is a derived class of the
1170 parameter type, in which case the implicit conversion sequence is
1171 a derived-to-base Conversion.
1173 If the parameter binds directly to the result of applying a
1174 conversion function to the argument expression, the implicit
1175 conversion sequence is a user-defined conversion sequence
1176 (_over.ics.user_), with the second standard conversion sequence
1177 either an identity conversion or, if the conversion function
1178 returns an entity of a type that is a derived class of the
1179 parameter type, a derived-to-base conversion. */
1180 if (!same_type_ignoring_top_level_qualifiers_p (t, conv->type))
1182 /* Represent the derived-to-base conversion. */
1183 conv = build_conv (ck_base, t, conv);
1184 /* We will actually be binding to the base-class subobject in
1185 the derived class, so we mark this conversion appropriately.
1186 That way, convert_like knows not to generate a temporary. */
1187 conv->need_temporary_p = false;
1189 return build_conv (ck_ref_bind, type, conv);
1192 /* Returns the conversion path from type FROM to reference type TO for
1193 purposes of reference binding. For lvalue binding, either pass a
1194 reference type to FROM or an lvalue expression to EXPR. If the
1195 reference will be bound to a temporary, NEED_TEMPORARY_P is set for
1196 the conversion returned. If C_CAST_P is true, this
1197 conversion is coming from a C-style cast. */
1200 reference_binding (tree rto, tree rfrom, tree expr, bool c_cast_p, int flags)
1202 conversion *conv = NULL;
1203 tree to = TREE_TYPE (rto);
1208 cp_lvalue_kind lvalue_p = clk_none;
1210 if (TREE_CODE (to) == FUNCTION_TYPE && expr && type_unknown_p (expr))
1212 expr = instantiate_type (to, expr, tf_none);
1213 if (expr == error_mark_node)
1215 from = TREE_TYPE (expr);
1218 if (TREE_CODE (from) == REFERENCE_TYPE)
1220 /* Anything with reference type is an lvalue. */
1221 lvalue_p = clk_ordinary;
1222 from = TREE_TYPE (from);
1225 if (expr && BRACE_ENCLOSED_INITIALIZER_P (expr))
1227 maybe_warn_cpp0x ("extended initializer lists");
1228 conv = implicit_conversion (to, from, expr, c_cast_p,
1230 if (!CLASS_TYPE_P (to)
1231 && CONSTRUCTOR_NELTS (expr) == 1)
1233 expr = CONSTRUCTOR_ELT (expr, 0)->value;
1234 from = TREE_TYPE (expr);
1238 if (lvalue_p == clk_none && expr)
1239 lvalue_p = real_lvalue_p (expr);
1242 if ((lvalue_p & clk_bitfield) != 0)
1243 tfrom = unlowered_expr_type (expr);
1245 /* Figure out whether or not the types are reference-related and
1246 reference compatible. We have do do this after stripping
1247 references from FROM. */
1248 related_p = reference_related_p (to, tfrom);
1249 /* If this is a C cast, first convert to an appropriately qualified
1250 type, so that we can later do a const_cast to the desired type. */
1251 if (related_p && c_cast_p
1252 && !at_least_as_qualified_p (to, tfrom))
1253 to = build_qualified_type (to, cp_type_quals (tfrom));
1254 compatible_p = reference_compatible_p (to, tfrom);
1256 /* Directly bind reference when target expression's type is compatible with
1257 the reference and expression is an lvalue. In DR391, the wording in
1258 [8.5.3/5 dcl.init.ref] is changed to also require direct bindings for
1259 const and rvalue references to rvalues of compatible class type. */
1262 || (!(flags & LOOKUP_NO_TEMP_BIND)
1263 && (CP_TYPE_CONST_NON_VOLATILE_P(to) || TYPE_REF_IS_RVALUE (rto))
1264 && CLASS_TYPE_P (from))))
1268 If the initializer expression
1270 -- is an lvalue (but not an lvalue for a bit-field), and "cv1 T1"
1271 is reference-compatible with "cv2 T2,"
1273 the reference is bound directly to the initializer expression
1277 If the initializer expression is an rvalue, with T2 a class type,
1278 and "cv1 T1" is reference-compatible with "cv2 T2", the reference
1279 is bound to the object represented by the rvalue or to a sub-object
1280 within that object. */
1282 conv = build_identity_conv (tfrom, expr);
1283 conv = direct_reference_binding (rto, conv);
1285 if (flags & LOOKUP_PREFER_RVALUE)
1286 /* The top-level caller requested that we pretend that the lvalue
1287 be treated as an rvalue. */
1288 conv->rvaluedness_matches_p = TYPE_REF_IS_RVALUE (rto);
1290 conv->rvaluedness_matches_p
1291 = (TYPE_REF_IS_RVALUE (rto) == !lvalue_p);
1293 if ((lvalue_p & clk_bitfield) != 0
1294 || ((lvalue_p & clk_packed) != 0 && !TYPE_PACKED (to)))
1295 /* For the purposes of overload resolution, we ignore the fact
1296 this expression is a bitfield or packed field. (In particular,
1297 [over.ics.ref] says specifically that a function with a
1298 non-const reference parameter is viable even if the
1299 argument is a bitfield.)
1301 However, when we actually call the function we must create
1302 a temporary to which to bind the reference. If the
1303 reference is volatile, or isn't const, then we cannot make
1304 a temporary, so we just issue an error when the conversion
1306 conv->need_temporary_p = true;
1310 /* [class.conv.fct] A conversion function is never used to convert a
1311 (possibly cv-qualified) object to the (possibly cv-qualified) same
1312 object type (or a reference to it), to a (possibly cv-qualified) base
1313 class of that type (or a reference to it).... */
1314 else if (CLASS_TYPE_P (from) && !related_p
1315 && !(flags & LOOKUP_NO_CONVERSION))
1319 If the initializer expression
1321 -- has a class type (i.e., T2 is a class type) can be
1322 implicitly converted to an lvalue of type "cv3 T3," where
1323 "cv1 T1" is reference-compatible with "cv3 T3". (this
1324 conversion is selected by enumerating the applicable
1325 conversion functions (_over.match.ref_) and choosing the
1326 best one through overload resolution. (_over.match_).
1328 the reference is bound to the lvalue result of the conversion
1329 in the second case. */
1330 conv = convert_class_to_reference (rto, from, expr, flags);
1335 /* From this point on, we conceptually need temporaries, even if we
1336 elide them. Only the cases above are "direct bindings". */
1337 if (flags & LOOKUP_NO_TEMP_BIND)
1342 When a parameter of reference type is not bound directly to an
1343 argument expression, the conversion sequence is the one required
1344 to convert the argument expression to the underlying type of the
1345 reference according to _over.best.ics_. Conceptually, this
1346 conversion sequence corresponds to copy-initializing a temporary
1347 of the underlying type with the argument expression. Any
1348 difference in top-level cv-qualification is subsumed by the
1349 initialization itself and does not constitute a conversion. */
1353 Otherwise, the reference shall be to a non-volatile const type.
1355 Under C++0x, [8.5.3/5 dcl.init.ref] it may also be an rvalue reference */
1356 if (!CP_TYPE_CONST_NON_VOLATILE_P (to) && !TYPE_REF_IS_RVALUE (rto))
1361 Otherwise, a temporary of type "cv1 T1" is created and
1362 initialized from the initializer expression using the rules for a
1363 non-reference copy initialization. If T1 is reference-related to
1364 T2, cv1 must be the same cv-qualification as, or greater
1365 cv-qualification than, cv2; otherwise, the program is ill-formed. */
1366 if (related_p && !at_least_as_qualified_p (to, from))
1369 /* We're generating a temporary now, but don't bind any more in the
1370 conversion (specifically, don't slice the temporary returned by a
1371 conversion operator). */
1372 flags |= LOOKUP_NO_TEMP_BIND;
1374 /* Temporaries are copy-initialized, except for this hack to allow
1375 explicit conversion ops to the copy ctor. See also
1376 add_function_candidate. */
1377 if (!(flags & LOOKUP_COPY_PARM))
1378 flags |= LOOKUP_ONLYCONVERTING;
1381 conv = implicit_conversion (to, from, expr, c_cast_p,
1386 conv = build_conv (ck_ref_bind, rto, conv);
1387 /* This reference binding, unlike those above, requires the
1388 creation of a temporary. */
1389 conv->need_temporary_p = true;
1390 conv->rvaluedness_matches_p = TYPE_REF_IS_RVALUE (rto);
1395 /* Returns the implicit conversion sequence (see [over.ics]) from type
1396 FROM to type TO. The optional expression EXPR may affect the
1397 conversion. FLAGS are the usual overloading flags. If C_CAST_P is
1398 true, this conversion is coming from a C-style cast. */
1401 implicit_conversion (tree to, tree from, tree expr, bool c_cast_p,
1406 if (from == error_mark_node || to == error_mark_node
1407 || expr == error_mark_node)
1410 if (TREE_CODE (to) == REFERENCE_TYPE)
1411 conv = reference_binding (to, from, expr, c_cast_p, flags);
1413 conv = standard_conversion (to, from, expr, c_cast_p, flags);
1418 if (expr && BRACE_ENCLOSED_INITIALIZER_P (expr))
1420 if (is_std_init_list (to))
1421 return build_list_conv (to, expr, flags);
1423 /* Allow conversion from an initializer-list with one element to a
1425 if (SCALAR_TYPE_P (to))
1427 int nelts = CONSTRUCTOR_NELTS (expr);
1431 elt = integer_zero_node;
1432 else if (nelts == 1)
1433 elt = CONSTRUCTOR_ELT (expr, 0)->value;
1435 elt = error_mark_node;
1437 conv = implicit_conversion (to, TREE_TYPE (elt), elt,
1441 conv->check_narrowing = true;
1442 if (BRACE_ENCLOSED_INITIALIZER_P (elt))
1443 /* Too many levels of braces, i.e. '{{1}}'. */
1450 if (expr != NULL_TREE
1451 && (MAYBE_CLASS_TYPE_P (from)
1452 || MAYBE_CLASS_TYPE_P (to))
1453 && (flags & LOOKUP_NO_CONVERSION) == 0)
1455 struct z_candidate *cand;
1456 int convflags = (flags & (LOOKUP_NO_TEMP_BIND|LOOKUP_ONLYCONVERTING));
1458 if (CLASS_TYPE_P (to)
1459 && !CLASSTYPE_NON_AGGREGATE (complete_type (to))
1460 && BRACE_ENCLOSED_INITIALIZER_P (expr))
1461 return build_aggr_conv (to, expr, flags);
1463 cand = build_user_type_conversion_1 (to, expr, convflags);
1465 conv = cand->second_conv;
1467 /* We used to try to bind a reference to a temporary here, but that
1468 is now handled after the recursive call to this function at the end
1469 of reference_binding. */
1476 /* Add a new entry to the list of candidates. Used by the add_*_candidate
1477 functions. ARGS will not be changed until a single candidate is
1480 static struct z_candidate *
1481 add_candidate (struct z_candidate **candidates,
1482 tree fn, tree first_arg, const VEC(tree,gc) *args,
1483 size_t num_convs, conversion **convs,
1484 tree access_path, tree conversion_path,
1487 struct z_candidate *cand = (struct z_candidate *)
1488 conversion_obstack_alloc (sizeof (struct z_candidate));
1491 cand->first_arg = first_arg;
1493 cand->convs = convs;
1494 cand->num_convs = num_convs;
1495 cand->access_path = access_path;
1496 cand->conversion_path = conversion_path;
1497 cand->viable = viable;
1498 cand->next = *candidates;
1504 /* Create an overload candidate for the function or method FN called
1505 with the argument list FIRST_ARG/ARGS and add it to CANDIDATES.
1506 FLAGS is passed on to implicit_conversion.
1508 This does not change ARGS.
1510 CTYPE, if non-NULL, is the type we want to pretend this function
1511 comes from for purposes of overload resolution. */
1513 static struct z_candidate *
1514 add_function_candidate (struct z_candidate **candidates,
1515 tree fn, tree ctype, tree first_arg,
1516 const VEC(tree,gc) *args, tree access_path,
1517 tree conversion_path, int flags)
1519 tree parmlist = TYPE_ARG_TYPES (TREE_TYPE (fn));
1523 tree orig_first_arg = first_arg;
1527 /* At this point we should not see any functions which haven't been
1528 explicitly declared, except for friend functions which will have
1529 been found using argument dependent lookup. */
1530 gcc_assert (!DECL_ANTICIPATED (fn) || DECL_HIDDEN_FRIEND_P (fn));
1532 /* The `this', `in_chrg' and VTT arguments to constructors are not
1533 considered in overload resolution. */
1534 if (DECL_CONSTRUCTOR_P (fn))
1536 parmlist = skip_artificial_parms_for (fn, parmlist);
1537 skip = num_artificial_parms_for (fn);
1538 if (skip > 0 && first_arg != NULL_TREE)
1541 first_arg = NULL_TREE;
1547 len = VEC_length (tree, args) - skip + (first_arg != NULL_TREE ? 1 : 0);
1548 convs = alloc_conversions (len);
1550 /* 13.3.2 - Viable functions [over.match.viable]
1551 First, to be a viable function, a candidate function shall have enough
1552 parameters to agree in number with the arguments in the list.
1554 We need to check this first; otherwise, checking the ICSes might cause
1555 us to produce an ill-formed template instantiation. */
1557 parmnode = parmlist;
1558 for (i = 0; i < len; ++i)
1560 if (parmnode == NULL_TREE || parmnode == void_list_node)
1562 parmnode = TREE_CHAIN (parmnode);
1565 if (i < len && parmnode)
1568 /* Make sure there are default args for the rest of the parms. */
1569 else if (!sufficient_parms_p (parmnode))
1575 /* Second, for F to be a viable function, there shall exist for each
1576 argument an implicit conversion sequence that converts that argument
1577 to the corresponding parameter of F. */
1579 parmnode = parmlist;
1581 for (i = 0; i < len; ++i)
1587 if (parmnode == void_list_node)
1590 if (i == 0 && first_arg != NULL_TREE)
1593 arg = VEC_index (tree, args,
1594 i + skip - (first_arg != NULL_TREE ? 1 : 0));
1595 argtype = lvalue_type (arg);
1597 is_this = (i == 0 && DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
1598 && ! DECL_CONSTRUCTOR_P (fn));
1602 tree parmtype = TREE_VALUE (parmnode);
1605 /* The type of the implicit object parameter ('this') for
1606 overload resolution is not always the same as for the
1607 function itself; conversion functions are considered to
1608 be members of the class being converted, and functions
1609 introduced by a using-declaration are considered to be
1610 members of the class that uses them.
1612 Since build_over_call ignores the ICS for the `this'
1613 parameter, we can just change the parm type. */
1614 if (ctype && is_this)
1617 = build_qualified_type (ctype,
1618 TYPE_QUALS (TREE_TYPE (parmtype)));
1619 parmtype = build_pointer_type (parmtype);
1622 if (ctype && i == 0 && DECL_COPY_CONSTRUCTOR_P (fn))
1624 /* Hack: Direct-initialize copy parm (i.e. suppress
1625 LOOKUP_ONLYCONVERTING) to make explicit conversion ops
1626 work. See also reference_binding. */
1627 lflags |= LOOKUP_COPY_PARM;
1628 if (flags & LOOKUP_NO_COPY_CTOR_CONVERSION)
1629 lflags |= LOOKUP_NO_CONVERSION;
1632 lflags |= LOOKUP_ONLYCONVERTING;
1634 t = implicit_conversion (parmtype, argtype, arg,
1635 /*c_cast_p=*/false, lflags);
1639 t = build_identity_conv (argtype, arg);
1640 t->ellipsis_p = true;
1657 parmnode = TREE_CHAIN (parmnode);
1661 return add_candidate (candidates, fn, orig_first_arg, args, len, convs,
1662 access_path, conversion_path, viable);
1665 /* Create an overload candidate for the conversion function FN which will
1666 be invoked for expression OBJ, producing a pointer-to-function which
1667 will in turn be called with the argument list FIRST_ARG/ARGLIST,
1668 and add it to CANDIDATES. This does not change ARGLIST. FLAGS is
1669 passed on to implicit_conversion.
1671 Actually, we don't really care about FN; we care about the type it
1672 converts to. There may be multiple conversion functions that will
1673 convert to that type, and we rely on build_user_type_conversion_1 to
1674 choose the best one; so when we create our candidate, we record the type
1675 instead of the function. */
1677 static struct z_candidate *
1678 add_conv_candidate (struct z_candidate **candidates, tree fn, tree obj,
1679 tree first_arg, const VEC(tree,gc) *arglist,
1680 tree access_path, tree conversion_path)
1682 tree totype = TREE_TYPE (TREE_TYPE (fn));
1683 int i, len, viable, flags;
1684 tree parmlist, parmnode;
1687 for (parmlist = totype; TREE_CODE (parmlist) != FUNCTION_TYPE; )
1688 parmlist = TREE_TYPE (parmlist);
1689 parmlist = TYPE_ARG_TYPES (parmlist);
1691 len = VEC_length (tree, arglist) + (first_arg != NULL_TREE ? 1 : 0) + 1;
1692 convs = alloc_conversions (len);
1693 parmnode = parmlist;
1695 flags = LOOKUP_IMPLICIT;
1697 /* Don't bother looking up the same type twice. */
1698 if (*candidates && (*candidates)->fn == totype)
1701 for (i = 0; i < len; ++i)
1708 else if (i == 1 && first_arg != NULL_TREE)
1711 arg = VEC_index (tree, arglist,
1712 i - (first_arg != NULL_TREE ? 1 : 0) - 1);
1713 argtype = lvalue_type (arg);
1716 t = implicit_conversion (totype, argtype, arg, /*c_cast_p=*/false,
1718 else if (parmnode == void_list_node)
1721 t = implicit_conversion (TREE_VALUE (parmnode), argtype, arg,
1722 /*c_cast_p=*/false, flags);
1725 t = build_identity_conv (argtype, arg);
1726 t->ellipsis_p = true;
1740 parmnode = TREE_CHAIN (parmnode);
1746 if (!sufficient_parms_p (parmnode))
1749 return add_candidate (candidates, totype, first_arg, arglist, len, convs,
1750 access_path, conversion_path, viable);
1754 build_builtin_candidate (struct z_candidate **candidates, tree fnname,
1755 tree type1, tree type2, tree *args, tree *argtypes,
1767 num_convs = args[2] ? 3 : (args[1] ? 2 : 1);
1768 convs = alloc_conversions (num_convs);
1769 flags |= LOOKUP_ONLYCONVERTING;
1771 for (i = 0; i < 2; ++i)
1776 t = implicit_conversion (types[i], argtypes[i], args[i],
1777 /*c_cast_p=*/false, flags);
1781 /* We need something for printing the candidate. */
1782 t = build_identity_conv (types[i], NULL_TREE);
1789 /* For COND_EXPR we rearranged the arguments; undo that now. */
1792 convs[2] = convs[1];
1793 convs[1] = convs[0];
1794 t = implicit_conversion (boolean_type_node, argtypes[2], args[2],
1795 /*c_cast_p=*/false, flags);
1802 add_candidate (candidates, fnname, /*first_arg=*/NULL_TREE, /*args=*/NULL,
1804 /*access_path=*/NULL_TREE,
1805 /*conversion_path=*/NULL_TREE,
1810 is_complete (tree t)
1812 return COMPLETE_TYPE_P (complete_type (t));
1815 /* Returns nonzero if TYPE is a promoted arithmetic type. */
1818 promoted_arithmetic_type_p (tree type)
1822 In this section, the term promoted integral type is used to refer
1823 to those integral types which are preserved by integral promotion
1824 (including e.g. int and long but excluding e.g. char).
1825 Similarly, the term promoted arithmetic type refers to promoted
1826 integral types plus floating types. */
1827 return ((CP_INTEGRAL_TYPE_P (type)
1828 && same_type_p (type_promotes_to (type), type))
1829 || TREE_CODE (type) == REAL_TYPE);
1832 /* Create any builtin operator overload candidates for the operator in
1833 question given the converted operand types TYPE1 and TYPE2. The other
1834 args are passed through from add_builtin_candidates to
1835 build_builtin_candidate.
1837 TYPE1 and TYPE2 may not be permissible, and we must filter them.
1838 If CODE is requires candidates operands of the same type of the kind
1839 of which TYPE1 and TYPE2 are, we add both candidates
1840 CODE (TYPE1, TYPE1) and CODE (TYPE2, TYPE2). */
1843 add_builtin_candidate (struct z_candidate **candidates, enum tree_code code,
1844 enum tree_code code2, tree fnname, tree type1,
1845 tree type2, tree *args, tree *argtypes, int flags)
1849 case POSTINCREMENT_EXPR:
1850 case POSTDECREMENT_EXPR:
1851 args[1] = integer_zero_node;
1852 type2 = integer_type_node;
1861 /* 4 For every pair T, VQ), where T is an arithmetic or enumeration type,
1862 and VQ is either volatile or empty, there exist candidate operator
1863 functions of the form
1864 VQ T& operator++(VQ T&);
1865 T operator++(VQ T&, int);
1866 5 For every pair T, VQ), where T is an enumeration type or an arithmetic
1867 type other than bool, and VQ is either volatile or empty, there exist
1868 candidate operator functions of the form
1869 VQ T& operator--(VQ T&);
1870 T operator--(VQ T&, int);
1871 6 For every pair T, VQ), where T is a cv-qualified or cv-unqualified
1872 complete object type, and VQ is either volatile or empty, there exist
1873 candidate operator functions of the form
1874 T*VQ& operator++(T*VQ&);
1875 T*VQ& operator--(T*VQ&);
1876 T* operator++(T*VQ&, int);
1877 T* operator--(T*VQ&, int); */
1879 case POSTDECREMENT_EXPR:
1880 case PREDECREMENT_EXPR:
1881 if (TREE_CODE (type1) == BOOLEAN_TYPE)
1883 case POSTINCREMENT_EXPR:
1884 case PREINCREMENT_EXPR:
1885 if (ARITHMETIC_TYPE_P (type1) || TYPE_PTROB_P (type1))
1887 type1 = build_reference_type (type1);
1892 /* 7 For every cv-qualified or cv-unqualified complete object type T, there
1893 exist candidate operator functions of the form
1897 8 For every function type T, there exist candidate operator functions of
1899 T& operator*(T*); */
1902 if (TREE_CODE (type1) == POINTER_TYPE
1903 && (TYPE_PTROB_P (type1)
1904 || TREE_CODE (TREE_TYPE (type1)) == FUNCTION_TYPE))
1908 /* 9 For every type T, there exist candidate operator functions of the form
1911 10For every promoted arithmetic type T, there exist candidate operator
1912 functions of the form
1916 case UNARY_PLUS_EXPR: /* unary + */
1917 if (TREE_CODE (type1) == POINTER_TYPE)
1920 if (ARITHMETIC_TYPE_P (type1))
1924 /* 11For every promoted integral type T, there exist candidate operator
1925 functions of the form
1929 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1))
1933 /* 12For every quintuple C1, C2, T, CV1, CV2), where C2 is a class type, C1
1934 is the same type as C2 or is a derived class of C2, T is a complete
1935 object type or a function type, and CV1 and CV2 are cv-qualifier-seqs,
1936 there exist candidate operator functions of the form
1937 CV12 T& operator->*(CV1 C1*, CV2 T C2::*);
1938 where CV12 is the union of CV1 and CV2. */
1941 if (TREE_CODE (type1) == POINTER_TYPE
1942 && TYPE_PTR_TO_MEMBER_P (type2))
1944 tree c1 = TREE_TYPE (type1);
1945 tree c2 = TYPE_PTRMEM_CLASS_TYPE (type2);
1947 if (MAYBE_CLASS_TYPE_P (c1) && DERIVED_FROM_P (c2, c1)
1948 && (TYPE_PTRMEMFUNC_P (type2)
1949 || is_complete (TYPE_PTRMEM_POINTED_TO_TYPE (type2))))
1954 /* 13For every pair of promoted arithmetic types L and R, there exist can-
1955 didate operator functions of the form
1960 bool operator<(L, R);
1961 bool operator>(L, R);
1962 bool operator<=(L, R);
1963 bool operator>=(L, R);
1964 bool operator==(L, R);
1965 bool operator!=(L, R);
1966 where LR is the result of the usual arithmetic conversions between
1969 14For every pair of types T and I, where T is a cv-qualified or cv-
1970 unqualified complete object type and I is a promoted integral type,
1971 there exist candidate operator functions of the form
1972 T* operator+(T*, I);
1973 T& operator[](T*, I);
1974 T* operator-(T*, I);
1975 T* operator+(I, T*);
1976 T& operator[](I, T*);
1978 15For every T, where T is a pointer to complete object type, there exist
1979 candidate operator functions of the form112)
1980 ptrdiff_t operator-(T, T);
1982 16For every pointer or enumeration type T, there exist candidate operator
1983 functions of the form
1984 bool operator<(T, T);
1985 bool operator>(T, T);
1986 bool operator<=(T, T);
1987 bool operator>=(T, T);
1988 bool operator==(T, T);
1989 bool operator!=(T, T);
1991 17For every pointer to member type T, there exist candidate operator
1992 functions of the form
1993 bool operator==(T, T);
1994 bool operator!=(T, T); */
1997 if (TYPE_PTROB_P (type1) && TYPE_PTROB_P (type2))
1999 if (TYPE_PTROB_P (type1)
2000 && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2002 type2 = ptrdiff_type_node;
2006 case TRUNC_DIV_EXPR:
2007 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2013 if ((TYPE_PTRMEMFUNC_P (type1) && TYPE_PTRMEMFUNC_P (type2))
2014 || (TYPE_PTRMEM_P (type1) && TYPE_PTRMEM_P (type2)))
2016 if (TYPE_PTR_TO_MEMBER_P (type1) && null_ptr_cst_p (args[1]))
2021 if (TYPE_PTR_TO_MEMBER_P (type2) && null_ptr_cst_p (args[0]))
2033 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2035 if (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
2037 if (TREE_CODE (type1) == ENUMERAL_TYPE
2038 && TREE_CODE (type2) == ENUMERAL_TYPE)
2040 if (TYPE_PTR_P (type1)
2041 && null_ptr_cst_p (args[1])
2042 && !uses_template_parms (type1))
2047 if (null_ptr_cst_p (args[0])
2048 && TYPE_PTR_P (type2)
2049 && !uses_template_parms (type2))
2057 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2060 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1) && TYPE_PTROB_P (type2))
2062 type1 = ptrdiff_type_node;
2065 if (TYPE_PTROB_P (type1) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2067 type2 = ptrdiff_type_node;
2072 /* 18For every pair of promoted integral types L and R, there exist candi-
2073 date operator functions of the form
2080 where LR is the result of the usual arithmetic conversions between
2083 case TRUNC_MOD_EXPR:
2089 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2093 /* 19For every triple L, VQ, R), where L is an arithmetic or enumeration
2094 type, VQ is either volatile or empty, and R is a promoted arithmetic
2095 type, there exist candidate operator functions of the form
2096 VQ L& operator=(VQ L&, R);
2097 VQ L& operator*=(VQ L&, R);
2098 VQ L& operator/=(VQ L&, R);
2099 VQ L& operator+=(VQ L&, R);
2100 VQ L& operator-=(VQ L&, R);
2102 20For every pair T, VQ), where T is any type and VQ is either volatile
2103 or empty, there exist candidate operator functions of the form
2104 T*VQ& operator=(T*VQ&, T*);
2106 21For every pair T, VQ), where T is a pointer to member type and VQ is
2107 either volatile or empty, there exist candidate operator functions of
2109 VQ T& operator=(VQ T&, T);
2111 22For every triple T, VQ, I), where T is a cv-qualified or cv-
2112 unqualified complete object type, VQ is either volatile or empty, and
2113 I is a promoted integral type, there exist candidate operator func-
2115 T*VQ& operator+=(T*VQ&, I);
2116 T*VQ& operator-=(T*VQ&, I);
2118 23For every triple L, VQ, R), where L is an integral or enumeration
2119 type, VQ is either volatile or empty, and R is a promoted integral
2120 type, there exist candidate operator functions of the form
2122 VQ L& operator%=(VQ L&, R);
2123 VQ L& operator<<=(VQ L&, R);
2124 VQ L& operator>>=(VQ L&, R);
2125 VQ L& operator&=(VQ L&, R);
2126 VQ L& operator^=(VQ L&, R);
2127 VQ L& operator|=(VQ L&, R); */
2134 if (TYPE_PTROB_P (type1) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2136 type2 = ptrdiff_type_node;
2140 case TRUNC_DIV_EXPR:
2141 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2145 case TRUNC_MOD_EXPR:
2151 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2156 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2158 if ((TYPE_PTRMEMFUNC_P (type1) && TYPE_PTRMEMFUNC_P (type2))
2159 || (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
2160 || (TYPE_PTRMEM_P (type1) && TYPE_PTRMEM_P (type2))
2161 || ((TYPE_PTRMEMFUNC_P (type1)
2162 || TREE_CODE (type1) == POINTER_TYPE)
2163 && null_ptr_cst_p (args[1])))
2173 type1 = build_reference_type (type1);
2179 For every pair of promoted arithmetic types L and R, there
2180 exist candidate operator functions of the form
2182 LR operator?(bool, L, R);
2184 where LR is the result of the usual arithmetic conversions
2185 between types L and R.
2187 For every type T, where T is a pointer or pointer-to-member
2188 type, there exist candidate operator functions of the form T
2189 operator?(bool, T, T); */
2191 if (promoted_arithmetic_type_p (type1)
2192 && promoted_arithmetic_type_p (type2))
2196 /* Otherwise, the types should be pointers. */
2197 if (!(TYPE_PTR_P (type1) || TYPE_PTR_TO_MEMBER_P (type1))
2198 || !(TYPE_PTR_P (type2) || TYPE_PTR_TO_MEMBER_P (type2)))
2201 /* We don't check that the two types are the same; the logic
2202 below will actually create two candidates; one in which both
2203 parameter types are TYPE1, and one in which both parameter
2211 /* If we're dealing with two pointer types or two enumeral types,
2212 we need candidates for both of them. */
2213 if (type2 && !same_type_p (type1, type2)
2214 && TREE_CODE (type1) == TREE_CODE (type2)
2215 && (TREE_CODE (type1) == REFERENCE_TYPE
2216 || (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
2217 || (TYPE_PTRMEM_P (type1) && TYPE_PTRMEM_P (type2))
2218 || TYPE_PTRMEMFUNC_P (type1)
2219 || MAYBE_CLASS_TYPE_P (type1)
2220 || TREE_CODE (type1) == ENUMERAL_TYPE))
2222 build_builtin_candidate
2223 (candidates, fnname, type1, type1, args, argtypes, flags);
2224 build_builtin_candidate
2225 (candidates, fnname, type2, type2, args, argtypes, flags);
2229 build_builtin_candidate
2230 (candidates, fnname, type1, type2, args, argtypes, flags);
2234 type_decays_to (tree type)
2236 if (TREE_CODE (type) == ARRAY_TYPE)
2237 return build_pointer_type (TREE_TYPE (type));
2238 if (TREE_CODE (type) == FUNCTION_TYPE)
2239 return build_pointer_type (type);
2243 /* There are three conditions of builtin candidates:
2245 1) bool-taking candidates. These are the same regardless of the input.
2246 2) pointer-pair taking candidates. These are generated for each type
2247 one of the input types converts to.
2248 3) arithmetic candidates. According to the standard, we should generate
2249 all of these, but I'm trying not to...
2251 Here we generate a superset of the possible candidates for this particular
2252 case. That is a subset of the full set the standard defines, plus some
2253 other cases which the standard disallows. add_builtin_candidate will
2254 filter out the invalid set. */
2257 add_builtin_candidates (struct z_candidate **candidates, enum tree_code code,
2258 enum tree_code code2, tree fnname, tree *args,
2263 tree type, argtypes[3];
2264 /* TYPES[i] is the set of possible builtin-operator parameter types
2265 we will consider for the Ith argument. These are represented as
2266 a TREE_LIST; the TREE_VALUE of each node is the potential
2270 for (i = 0; i < 3; ++i)
2273 argtypes[i] = unlowered_expr_type (args[i]);
2275 argtypes[i] = NULL_TREE;
2280 /* 4 For every pair T, VQ), where T is an arithmetic or enumeration type,
2281 and VQ is either volatile or empty, there exist candidate operator
2282 functions of the form
2283 VQ T& operator++(VQ T&); */
2285 case POSTINCREMENT_EXPR:
2286 case PREINCREMENT_EXPR:
2287 case POSTDECREMENT_EXPR:
2288 case PREDECREMENT_EXPR:
2293 /* 24There also exist candidate operator functions of the form
2294 bool operator!(bool);
2295 bool operator&&(bool, bool);
2296 bool operator||(bool, bool); */
2298 case TRUTH_NOT_EXPR:
2299 build_builtin_candidate
2300 (candidates, fnname, boolean_type_node,
2301 NULL_TREE, args, argtypes, flags);
2304 case TRUTH_ORIF_EXPR:
2305 case TRUTH_ANDIF_EXPR:
2306 build_builtin_candidate
2307 (candidates, fnname, boolean_type_node,
2308 boolean_type_node, args, argtypes, flags);
2330 types[0] = types[1] = NULL_TREE;
2332 for (i = 0; i < 2; ++i)
2336 else if (MAYBE_CLASS_TYPE_P (argtypes[i]))
2340 if (i == 0 && code == MODIFY_EXPR && code2 == NOP_EXPR)
2343 convs = lookup_conversions (argtypes[i]);
2345 if (code == COND_EXPR)
2347 if (real_lvalue_p (args[i]))
2348 types[i] = tree_cons
2349 (NULL_TREE, build_reference_type (argtypes[i]), types[i]);
2351 types[i] = tree_cons
2352 (NULL_TREE, TYPE_MAIN_VARIANT (argtypes[i]), types[i]);
2358 for (; convs; convs = TREE_CHAIN (convs))
2360 type = TREE_TYPE (convs);
2363 && (TREE_CODE (type) != REFERENCE_TYPE
2364 || CP_TYPE_CONST_P (TREE_TYPE (type))))
2367 if (code == COND_EXPR && TREE_CODE (type) == REFERENCE_TYPE)
2368 types[i] = tree_cons (NULL_TREE, type, types[i]);
2370 type = non_reference (type);
2371 if (i != 0 || ! ref1)
2373 type = TYPE_MAIN_VARIANT (type_decays_to (type));
2374 if (enum_p && TREE_CODE (type) == ENUMERAL_TYPE)
2375 types[i] = tree_cons (NULL_TREE, type, types[i]);
2376 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
2377 type = type_promotes_to (type);
2380 if (! value_member (type, types[i]))
2381 types[i] = tree_cons (NULL_TREE, type, types[i]);
2386 if (code == COND_EXPR && real_lvalue_p (args[i]))
2387 types[i] = tree_cons
2388 (NULL_TREE, build_reference_type (argtypes[i]), types[i]);
2389 type = non_reference (argtypes[i]);
2390 if (i != 0 || ! ref1)
2392 type = TYPE_MAIN_VARIANT (type_decays_to (type));
2393 if (enum_p && UNSCOPED_ENUM_P (type))
2394 types[i] = tree_cons (NULL_TREE, type, types[i]);
2395 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
2396 type = type_promotes_to (type);
2398 types[i] = tree_cons (NULL_TREE, type, types[i]);
2402 /* Run through the possible parameter types of both arguments,
2403 creating candidates with those parameter types. */
2404 for (; types[0]; types[0] = TREE_CHAIN (types[0]))
2407 for (type = types[1]; type; type = TREE_CHAIN (type))
2408 add_builtin_candidate
2409 (candidates, code, code2, fnname, TREE_VALUE (types[0]),
2410 TREE_VALUE (type), args, argtypes, flags);
2412 add_builtin_candidate
2413 (candidates, code, code2, fnname, TREE_VALUE (types[0]),
2414 NULL_TREE, args, argtypes, flags);
2419 /* If TMPL can be successfully instantiated as indicated by
2420 EXPLICIT_TARGS and ARGLIST, adds the instantiation to CANDIDATES.
2422 TMPL is the template. EXPLICIT_TARGS are any explicit template
2423 arguments. ARGLIST is the arguments provided at the call-site.
2424 This does not change ARGLIST. The RETURN_TYPE is the desired type
2425 for conversion operators. If OBJ is NULL_TREE, FLAGS and CTYPE are
2426 as for add_function_candidate. If an OBJ is supplied, FLAGS and
2427 CTYPE are ignored, and OBJ is as for add_conv_candidate. */
2429 static struct z_candidate*
2430 add_template_candidate_real (struct z_candidate **candidates, tree tmpl,
2431 tree ctype, tree explicit_targs, tree first_arg,
2432 const VEC(tree,gc) *arglist, tree return_type,
2433 tree access_path, tree conversion_path,
2434 int flags, tree obj, unification_kind_t strict)
2436 int ntparms = DECL_NTPARMS (tmpl);
2437 tree targs = make_tree_vec (ntparms);
2439 int skip_without_in_chrg;
2440 tree first_arg_without_in_chrg;
2441 tree *args_without_in_chrg;
2442 unsigned int nargs_without_in_chrg;
2443 unsigned int ia, ix;
2445 struct z_candidate *cand;
2449 nargs = (first_arg == NULL_TREE ? 0 : 1) + VEC_length (tree, arglist);
2451 skip_without_in_chrg = 0;
2453 first_arg_without_in_chrg = first_arg;
2455 /* We don't do deduction on the in-charge parameter, the VTT
2456 parameter or 'this'. */
2457 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (tmpl))
2459 if (first_arg_without_in_chrg != NULL_TREE)
2460 first_arg_without_in_chrg = NULL_TREE;
2462 ++skip_without_in_chrg;
2465 if ((DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (tmpl)
2466 || DECL_BASE_CONSTRUCTOR_P (tmpl))
2467 && CLASSTYPE_VBASECLASSES (DECL_CONTEXT (tmpl)))
2469 if (first_arg_without_in_chrg != NULL_TREE)
2470 first_arg_without_in_chrg = NULL_TREE;
2472 ++skip_without_in_chrg;
2475 nargs_without_in_chrg = ((first_arg_without_in_chrg != NULL_TREE ? 1 : 0)
2476 + (VEC_length (tree, arglist)
2477 - skip_without_in_chrg));
2478 args_without_in_chrg = XALLOCAVEC (tree, nargs_without_in_chrg);
2480 if (first_arg_without_in_chrg != NULL_TREE)
2482 args_without_in_chrg[ia] = first_arg_without_in_chrg;
2485 for (ix = skip_without_in_chrg;
2486 VEC_iterate (tree, arglist, ix, arg);
2489 args_without_in_chrg[ia] = arg;
2492 gcc_assert (ia == nargs_without_in_chrg);
2494 i = fn_type_unification (tmpl, explicit_targs, targs,
2495 args_without_in_chrg,
2496 nargs_without_in_chrg,
2497 return_type, strict, flags);
2502 fn = instantiate_template (tmpl, targs, tf_none);
2503 if (fn == error_mark_node)
2508 A member function template is never instantiated to perform the
2509 copy of a class object to an object of its class type.
2511 It's a little unclear what this means; the standard explicitly
2512 does allow a template to be used to copy a class. For example,
2517 template <class T> A(const T&);
2520 void g () { A a (f ()); }
2522 the member template will be used to make the copy. The section
2523 quoted above appears in the paragraph that forbids constructors
2524 whose only parameter is (a possibly cv-qualified variant of) the
2525 class type, and a logical interpretation is that the intent was
2526 to forbid the instantiation of member templates which would then
2528 if (DECL_CONSTRUCTOR_P (fn) && nargs == 2)
2530 tree arg_types = FUNCTION_FIRST_USER_PARMTYPE (fn);
2531 if (arg_types && same_type_p (TYPE_MAIN_VARIANT (TREE_VALUE (arg_types)),
2536 if (obj != NULL_TREE)
2537 /* Aha, this is a conversion function. */
2538 cand = add_conv_candidate (candidates, fn, obj, first_arg, arglist,
2539 access_path, conversion_path);
2541 cand = add_function_candidate (candidates, fn, ctype,
2542 first_arg, arglist, access_path,
2543 conversion_path, flags);
2544 if (DECL_TI_TEMPLATE (fn) != tmpl)
2545 /* This situation can occur if a member template of a template
2546 class is specialized. Then, instantiate_template might return
2547 an instantiation of the specialization, in which case the
2548 DECL_TI_TEMPLATE field will point at the original
2549 specialization. For example:
2551 template <class T> struct S { template <class U> void f(U);
2552 template <> void f(int) {}; };
2556 Here, TMPL will be template <class U> S<double>::f(U).
2557 And, instantiate template will give us the specialization
2558 template <> S<double>::f(int). But, the DECL_TI_TEMPLATE field
2559 for this will point at template <class T> template <> S<T>::f(int),
2560 so that we can find the definition. For the purposes of
2561 overload resolution, however, we want the original TMPL. */
2562 cand->template_decl = tree_cons (tmpl, targs, NULL_TREE);
2564 cand->template_decl = DECL_TEMPLATE_INFO (fn);
2570 static struct z_candidate *
2571 add_template_candidate (struct z_candidate **candidates, tree tmpl, tree ctype,
2572 tree explicit_targs, tree first_arg,
2573 const VEC(tree,gc) *arglist, tree return_type,
2574 tree access_path, tree conversion_path, int flags,
2575 unification_kind_t strict)
2578 add_template_candidate_real (candidates, tmpl, ctype,
2579 explicit_targs, first_arg, arglist,
2580 return_type, access_path, conversion_path,
2581 flags, NULL_TREE, strict);
2585 static struct z_candidate *
2586 add_template_conv_candidate (struct z_candidate **candidates, tree tmpl,
2587 tree obj, tree first_arg,
2588 const VEC(tree,gc) *arglist,
2589 tree return_type, tree access_path,
2590 tree conversion_path)
2593 add_template_candidate_real (candidates, tmpl, NULL_TREE, NULL_TREE,
2594 first_arg, arglist, return_type, access_path,
2595 conversion_path, 0, obj, DEDUCE_CONV);
2598 /* The CANDS are the set of candidates that were considered for
2599 overload resolution. Return the set of viable candidates. If none
2600 of the candidates were viable, set *ANY_VIABLE_P to true. STRICT_P
2601 is true if a candidate should be considered viable only if it is
2604 static struct z_candidate*
2605 splice_viable (struct z_candidate *cands,
2609 struct z_candidate *viable;
2610 struct z_candidate **last_viable;
2611 struct z_candidate **cand;
2614 last_viable = &viable;
2615 *any_viable_p = false;
2620 struct z_candidate *c = *cand;
2621 if (strict_p ? c->viable == 1 : c->viable)
2626 last_viable = &c->next;
2627 *any_viable_p = true;
2633 return viable ? viable : cands;
2637 any_strictly_viable (struct z_candidate *cands)
2639 for (; cands; cands = cands->next)
2640 if (cands->viable == 1)
2645 /* OBJ is being used in an expression like "OBJ.f (...)". In other
2646 words, it is about to become the "this" pointer for a member
2647 function call. Take the address of the object. */
2650 build_this (tree obj)
2652 /* In a template, we are only concerned about the type of the
2653 expression, so we can take a shortcut. */
2654 if (processing_template_decl)
2655 return build_address (obj);
2657 return cp_build_unary_op (ADDR_EXPR, obj, 0, tf_warning_or_error);
2660 /* Returns true iff functions are equivalent. Equivalent functions are
2661 not '==' only if one is a function-local extern function or if
2662 both are extern "C". */
2665 equal_functions (tree fn1, tree fn2)
2667 if (DECL_LOCAL_FUNCTION_P (fn1) || DECL_LOCAL_FUNCTION_P (fn2)
2668 || DECL_EXTERN_C_FUNCTION_P (fn1))
2669 return decls_match (fn1, fn2);
2673 /* Print information about one overload candidate CANDIDATE. MSGSTR
2674 is the text to print before the candidate itself.
2676 NOTE: Unlike most diagnostic functions in GCC, MSGSTR is expected
2677 to have been run through gettext by the caller. This wart makes
2678 life simpler in print_z_candidates and for the translators. */
2681 print_z_candidate (const char *msgstr, struct z_candidate *candidate)
2683 if (TREE_CODE (candidate->fn) == IDENTIFIER_NODE)
2685 if (candidate->num_convs == 3)
2686 inform (input_location, "%s %D(%T, %T, %T) <built-in>", msgstr, candidate->fn,
2687 candidate->convs[0]->type,
2688 candidate->convs[1]->type,
2689 candidate->convs[2]->type);
2690 else if (candidate->num_convs == 2)
2691 inform (input_location, "%s %D(%T, %T) <built-in>", msgstr, candidate->fn,
2692 candidate->convs[0]->type,
2693 candidate->convs[1]->type);
2695 inform (input_location, "%s %D(%T) <built-in>", msgstr, candidate->fn,
2696 candidate->convs[0]->type);
2698 else if (TYPE_P (candidate->fn))
2699 inform (input_location, "%s %T <conversion>", msgstr, candidate->fn);
2700 else if (candidate->viable == -1)
2701 inform (input_location, "%s %+#D <near match>", msgstr, candidate->fn);
2703 inform (input_location, "%s %+#D", msgstr, candidate->fn);
2707 print_z_candidates (struct z_candidate *candidates)
2710 struct z_candidate *cand1;
2711 struct z_candidate **cand2;
2713 /* There may be duplicates in the set of candidates. We put off
2714 checking this condition as long as possible, since we have no way
2715 to eliminate duplicates from a set of functions in less than n^2
2716 time. Now we are about to emit an error message, so it is more
2717 permissible to go slowly. */
2718 for (cand1 = candidates; cand1; cand1 = cand1->next)
2720 tree fn = cand1->fn;
2721 /* Skip builtin candidates and conversion functions. */
2722 if (TREE_CODE (fn) != FUNCTION_DECL)
2724 cand2 = &cand1->next;
2727 if (TREE_CODE ((*cand2)->fn) == FUNCTION_DECL
2728 && equal_functions (fn, (*cand2)->fn))
2729 *cand2 = (*cand2)->next;
2731 cand2 = &(*cand2)->next;
2738 str = _("candidates are:");
2739 print_z_candidate (str, candidates);
2740 if (candidates->next)
2742 /* Indent successive candidates by the width of the translation
2743 of the above string. */
2744 size_t len = gcc_gettext_width (str) + 1;
2745 char *spaces = (char *) alloca (len);
2746 memset (spaces, ' ', len-1);
2747 spaces[len - 1] = '\0';
2749 candidates = candidates->next;
2752 print_z_candidate (spaces, candidates);
2753 candidates = candidates->next;
2759 /* USER_SEQ is a user-defined conversion sequence, beginning with a
2760 USER_CONV. STD_SEQ is the standard conversion sequence applied to
2761 the result of the conversion function to convert it to the final
2762 desired type. Merge the two sequences into a single sequence,
2763 and return the merged sequence. */
2766 merge_conversion_sequences (conversion *user_seq, conversion *std_seq)
2770 gcc_assert (user_seq->kind == ck_user);
2772 /* Find the end of the second conversion sequence. */
2774 while ((*t)->kind != ck_identity)
2775 t = &((*t)->u.next);
2777 /* Replace the identity conversion with the user conversion
2781 /* The entire sequence is a user-conversion sequence. */
2782 std_seq->user_conv_p = true;
2787 /* Returns the best overload candidate to perform the requested
2788 conversion. This function is used for three the overloading situations
2789 described in [over.match.copy], [over.match.conv], and [over.match.ref].
2790 If TOTYPE is a REFERENCE_TYPE, we're trying to find an lvalue binding as
2791 per [dcl.init.ref], so we ignore temporary bindings. */
2793 static struct z_candidate *
2794 build_user_type_conversion_1 (tree totype, tree expr, int flags)
2796 struct z_candidate *candidates, *cand;
2797 tree fromtype = TREE_TYPE (expr);
2798 tree ctors = NULL_TREE;
2799 tree conv_fns = NULL_TREE;
2800 conversion *conv = NULL;
2801 tree first_arg = NULL_TREE;
2802 VEC(tree,gc) *args = NULL;
2806 /* We represent conversion within a hierarchy using RVALUE_CONV and
2807 BASE_CONV, as specified by [over.best.ics]; these become plain
2808 constructor calls, as specified in [dcl.init]. */
2809 gcc_assert (!MAYBE_CLASS_TYPE_P (fromtype) || !MAYBE_CLASS_TYPE_P (totype)
2810 || !DERIVED_FROM_P (totype, fromtype));
2812 if (MAYBE_CLASS_TYPE_P (totype))
2813 ctors = lookup_fnfields (totype, complete_ctor_identifier, 0);
2815 if (MAYBE_CLASS_TYPE_P (fromtype))
2817 tree to_nonref = non_reference (totype);
2818 if (same_type_ignoring_top_level_qualifiers_p (to_nonref, fromtype) ||
2819 (CLASS_TYPE_P (to_nonref) && CLASS_TYPE_P (fromtype)
2820 && DERIVED_FROM_P (to_nonref, fromtype)))
2822 /* [class.conv.fct] A conversion function is never used to
2823 convert a (possibly cv-qualified) object to the (possibly
2824 cv-qualified) same object type (or a reference to it), to a
2825 (possibly cv-qualified) base class of that type (or a
2826 reference to it)... */
2829 conv_fns = lookup_conversions (fromtype);
2833 flags |= LOOKUP_NO_CONVERSION;
2835 /* It's OK to bind a temporary for converting constructor arguments, but
2836 not in converting the return value of a conversion operator. */
2837 convflags = ((flags & LOOKUP_NO_TEMP_BIND) | LOOKUP_NO_CONVERSION);
2838 flags &= ~LOOKUP_NO_TEMP_BIND;
2842 ctors = BASELINK_FUNCTIONS (ctors);
2844 first_arg = build_int_cst (build_pointer_type (totype), 0);
2845 if (BRACE_ENCLOSED_INITIALIZER_P (expr)
2846 && !TYPE_HAS_LIST_CTOR (totype))
2848 args = ctor_to_vec (expr);
2849 /* We still allow more conversions within an init-list. */
2850 flags = ((flags & ~LOOKUP_NO_CONVERSION)
2851 /* But not for the copy ctor. */
2852 |LOOKUP_NO_COPY_CTOR_CONVERSION
2853 |LOOKUP_NO_NARROWING);
2856 args = make_tree_vector_single (expr);
2858 /* We should never try to call the abstract or base constructor
2860 gcc_assert (!DECL_HAS_IN_CHARGE_PARM_P (OVL_CURRENT (ctors))
2861 && !DECL_HAS_VTT_PARM_P (OVL_CURRENT (ctors)));
2863 for (; ctors; ctors = OVL_NEXT (ctors))
2865 tree ctor = OVL_CURRENT (ctors);
2866 if (DECL_NONCONVERTING_P (ctor)
2867 && !BRACE_ENCLOSED_INITIALIZER_P (expr))
2870 if (TREE_CODE (ctor) == TEMPLATE_DECL)
2871 cand = add_template_candidate (&candidates, ctor, totype,
2872 NULL_TREE, first_arg, args, NULL_TREE,
2873 TYPE_BINFO (totype),
2874 TYPE_BINFO (totype),
2878 cand = add_function_candidate (&candidates, ctor, totype,
2879 first_arg, args, TYPE_BINFO (totype),
2880 TYPE_BINFO (totype),
2885 cand->second_conv = build_identity_conv (totype, NULL_TREE);
2887 /* If totype isn't a reference, and LOOKUP_NO_TEMP_BIND isn't
2888 set, then this is copy-initialization. In that case, "The
2889 result of the call is then used to direct-initialize the
2890 object that is the destination of the copy-initialization."
2893 We represent this in the conversion sequence with an
2894 rvalue conversion, which means a constructor call. */
2895 if (TREE_CODE (totype) != REFERENCE_TYPE
2896 && !(convflags & LOOKUP_NO_TEMP_BIND))
2898 = build_conv (ck_rvalue, totype, cand->second_conv);
2903 first_arg = build_this (expr);
2905 for (; conv_fns; conv_fns = TREE_CHAIN (conv_fns))
2908 tree conversion_path = TREE_PURPOSE (conv_fns);
2910 /* If we are called to convert to a reference type, we are trying to
2911 find an lvalue binding, so don't even consider temporaries. If
2912 we don't find an lvalue binding, the caller will try again to
2913 look for a temporary binding. */
2914 if (TREE_CODE (totype) == REFERENCE_TYPE)
2915 convflags |= LOOKUP_NO_TEMP_BIND;
2917 for (fns = TREE_VALUE (conv_fns); fns; fns = OVL_NEXT (fns))
2919 tree fn = OVL_CURRENT (fns);
2921 if (DECL_NONCONVERTING_P (fn)
2922 && (flags & LOOKUP_ONLYCONVERTING))
2925 /* [over.match.funcs] For conversion functions, the function
2926 is considered to be a member of the class of the implicit
2927 object argument for the purpose of defining the type of
2928 the implicit object parameter.
2930 So we pass fromtype as CTYPE to add_*_candidate. */
2932 if (TREE_CODE (fn) == TEMPLATE_DECL)
2933 cand = add_template_candidate (&candidates, fn, fromtype,
2935 first_arg, NULL, totype,
2936 TYPE_BINFO (fromtype),
2941 cand = add_function_candidate (&candidates, fn, fromtype,
2943 TYPE_BINFO (fromtype),
2950 = implicit_conversion (totype,
2951 TREE_TYPE (TREE_TYPE (cand->fn)),
2953 /*c_cast_p=*/false, convflags);
2955 /* If LOOKUP_NO_TEMP_BIND isn't set, then this is
2956 copy-initialization. In that case, "The result of the
2957 call is then used to direct-initialize the object that is
2958 the destination of the copy-initialization." [dcl.init]
2960 We represent this in the conversion sequence with an
2961 rvalue conversion, which means a constructor call. But
2962 don't add a second rvalue conversion if there's already
2963 one there. Which there really shouldn't be, but it's
2964 harmless since we'd add it here anyway. */
2965 if (ics && MAYBE_CLASS_TYPE_P (totype) && ics->kind != ck_rvalue
2966 && !(convflags & LOOKUP_NO_TEMP_BIND))
2967 ics = build_conv (ck_rvalue, totype, ics);
2969 cand->second_conv = ics;
2973 else if (candidates->viable == 1 && ics->bad_p)
2979 candidates = splice_viable (candidates, pedantic, &any_viable_p);
2983 cand = tourney (candidates);
2986 if (flags & LOOKUP_COMPLAIN)
2988 error ("conversion from %qT to %qT is ambiguous",
2990 print_z_candidates (candidates);
2993 cand = candidates; /* any one will do */
2994 cand->second_conv = build_ambiguous_conv (totype, expr);
2995 cand->second_conv->user_conv_p = true;
2996 if (!any_strictly_viable (candidates))
2997 cand->second_conv->bad_p = true;
2998 /* If there are viable candidates, don't set ICS_BAD_FLAG; an
2999 ambiguous conversion is no worse than another user-defined
3005 /* Build the user conversion sequence. */
3008 (DECL_CONSTRUCTOR_P (cand->fn)
3009 ? totype : non_reference (TREE_TYPE (TREE_TYPE (cand->fn)))),
3010 build_identity_conv (TREE_TYPE (expr), expr));
3013 /* Remember that this was a list-initialization. */
3014 if (flags & LOOKUP_NO_NARROWING)
3015 conv->check_narrowing = true;
3017 /* Combine it with the second conversion sequence. */
3018 cand->second_conv = merge_conversion_sequences (conv,
3021 if (cand->viable == -1)
3022 cand->second_conv->bad_p = true;
3028 build_user_type_conversion (tree totype, tree expr, int flags)
3030 struct z_candidate *cand
3031 = build_user_type_conversion_1 (totype, expr, flags);
3035 if (cand->second_conv->kind == ck_ambig)
3036 return error_mark_node;
3037 expr = convert_like (cand->second_conv, expr, tf_warning_or_error);
3038 return convert_from_reference (expr);
3043 /* Do any initial processing on the arguments to a function call. */
3045 static VEC(tree,gc) *
3046 resolve_args (VEC(tree,gc) *args)
3051 for (ix = 0; VEC_iterate (tree, args, ix, arg); ++ix)
3053 if (error_operand_p (arg))
3055 else if (VOID_TYPE_P (TREE_TYPE (arg)))
3057 error ("invalid use of void expression");
3060 else if (invalid_nonstatic_memfn_p (arg, tf_warning_or_error))
3066 /* Perform overload resolution on FN, which is called with the ARGS.
3068 Return the candidate function selected by overload resolution, or
3069 NULL if the event that overload resolution failed. In the case
3070 that overload resolution fails, *CANDIDATES will be the set of
3071 candidates considered, and ANY_VIABLE_P will be set to true or
3072 false to indicate whether or not any of the candidates were
3075 The ARGS should already have gone through RESOLVE_ARGS before this
3076 function is called. */
3078 static struct z_candidate *
3079 perform_overload_resolution (tree fn,
3080 const VEC(tree,gc) *args,
3081 struct z_candidate **candidates,
3084 struct z_candidate *cand;
3085 tree explicit_targs = NULL_TREE;
3086 int template_only = 0;
3089 *any_viable_p = true;
3092 gcc_assert (TREE_CODE (fn) == FUNCTION_DECL
3093 || TREE_CODE (fn) == TEMPLATE_DECL
3094 || TREE_CODE (fn) == OVERLOAD
3095 || TREE_CODE (fn) == TEMPLATE_ID_EXPR);
3097 if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
3099 explicit_targs = TREE_OPERAND (fn, 1);
3100 fn = TREE_OPERAND (fn, 0);
3104 /* Add the various candidate functions. */
3105 add_candidates (fn, args, explicit_targs, template_only,
3106 /*conversion_path=*/NULL_TREE,
3107 /*access_path=*/NULL_TREE,
3111 *candidates = splice_viable (*candidates, pedantic, any_viable_p);
3115 cand = tourney (*candidates);
3119 /* Return an expression for a call to FN (a namespace-scope function,
3120 or a static member function) with the ARGS. This may change
3124 build_new_function_call (tree fn, VEC(tree,gc) **args, bool koenig_p,
3125 tsubst_flags_t complain)
3127 struct z_candidate *candidates, *cand;
3132 if (args != NULL && *args != NULL)
3134 *args = resolve_args (*args);
3136 return error_mark_node;
3139 /* If this function was found without using argument dependent
3140 lookup, then we want to ignore any undeclared friend
3146 fn = remove_hidden_names (fn);
3149 if (complain & tf_error)
3150 error ("no matching function for call to %<%D(%A)%>",
3151 DECL_NAME (OVL_CURRENT (orig_fn)),
3152 build_tree_list_vec (*args));
3153 return error_mark_node;
3157 /* Get the high-water mark for the CONVERSION_OBSTACK. */
3158 p = conversion_obstack_alloc (0);
3160 cand = perform_overload_resolution (fn, *args, &candidates, &any_viable_p);
3164 if (complain & tf_error)
3166 if (!any_viable_p && candidates && ! candidates->next)
3167 return cp_build_function_call_vec (candidates->fn, args, complain);
3168 if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
3169 fn = TREE_OPERAND (fn, 0);
3171 error ("no matching function for call to %<%D(%A)%>",
3172 DECL_NAME (OVL_CURRENT (fn)), build_tree_list_vec (*args));
3174 error ("call of overloaded %<%D(%A)%> is ambiguous",
3175 DECL_NAME (OVL_CURRENT (fn)), build_tree_list_vec (*args));
3177 print_z_candidates (candidates);
3179 result = error_mark_node;
3182 result = build_over_call (cand, LOOKUP_NORMAL, complain);
3184 /* Free all the conversions we allocated. */
3185 obstack_free (&conversion_obstack, p);
3190 /* Build a call to a global operator new. FNNAME is the name of the
3191 operator (either "operator new" or "operator new[]") and ARGS are
3192 the arguments provided. This may change ARGS. *SIZE points to the
3193 total number of bytes required by the allocation, and is updated if
3194 that is changed here. *COOKIE_SIZE is non-NULL if a cookie should
3195 be used. If this function determines that no cookie should be
3196 used, after all, *COOKIE_SIZE is set to NULL_TREE. If FN is
3197 non-NULL, it will be set, upon return, to the allocation function
3201 build_operator_new_call (tree fnname, VEC(tree,gc) **args,
3202 tree *size, tree *cookie_size,
3206 struct z_candidate *candidates;
3207 struct z_candidate *cand;
3212 VEC_safe_insert (tree, gc, *args, 0, *size);
3213 *args = resolve_args (*args);
3215 return error_mark_node;
3221 If this lookup fails to find the name, or if the allocated type
3222 is not a class type, the allocation function's name is looked
3223 up in the global scope.
3225 we disregard block-scope declarations of "operator new". */
3226 fns = lookup_function_nonclass (fnname, *args, /*block_p=*/false);
3228 /* Figure out what function is being called. */
3229 cand = perform_overload_resolution (fns, *args, &candidates, &any_viable_p);
3231 /* If no suitable function could be found, issue an error message
3236 error ("no matching function for call to %<%D(%A)%>",
3237 DECL_NAME (OVL_CURRENT (fns)), build_tree_list_vec (*args));
3239 error ("call of overloaded %<%D(%A)%> is ambiguous",
3240 DECL_NAME (OVL_CURRENT (fns)), build_tree_list_vec (*args));
3242 print_z_candidates (candidates);
3243 return error_mark_node;
3246 /* If a cookie is required, add some extra space. Whether
3247 or not a cookie is required cannot be determined until
3248 after we know which function was called. */
3251 bool use_cookie = true;
3252 if (!abi_version_at_least (2))
3254 /* In G++ 3.2, the check was implemented incorrectly; it
3255 looked at the placement expression, rather than the
3256 type of the function. */
3257 if (VEC_length (tree, *args) == 2
3258 && same_type_p (TREE_TYPE (VEC_index (tree, *args, 1)),
3266 arg_types = TYPE_ARG_TYPES (TREE_TYPE (cand->fn));
3267 /* Skip the size_t parameter. */
3268 arg_types = TREE_CHAIN (arg_types);
3269 /* Check the remaining parameters (if any). */
3271 && TREE_CHAIN (arg_types) == void_list_node
3272 && same_type_p (TREE_VALUE (arg_types),
3276 /* If we need a cookie, adjust the number of bytes allocated. */
3279 /* Update the total size. */
3280 *size = size_binop (PLUS_EXPR, *size, *cookie_size);
3281 /* Update the argument list to reflect the adjusted size. */
3282 VEC_replace (tree, *args, 0, *size);
3285 *cookie_size = NULL_TREE;
3288 /* Tell our caller which function we decided to call. */
3292 /* Build the CALL_EXPR. */
3293 return build_over_call (cand, LOOKUP_NORMAL, tf_warning_or_error);
3296 /* Build a new call to operator(). This may change ARGS. */
3299 build_op_call (tree obj, VEC(tree,gc) **args, tsubst_flags_t complain)
3301 struct z_candidate *candidates = 0, *cand;
3302 tree fns, convs, first_mem_arg = NULL_TREE;
3303 tree type = TREE_TYPE (obj);
3305 tree result = NULL_TREE;
3308 if (error_operand_p (obj))
3309 return error_mark_node;
3311 obj = prep_operand (obj);
3313 if (TYPE_PTRMEMFUNC_P (type))
3315 if (complain & tf_error)
3316 /* It's no good looking for an overloaded operator() on a
3317 pointer-to-member-function. */
3318 error ("pointer-to-member function %E cannot be called without an object; consider using .* or ->*", obj);
3319 return error_mark_node;
3322 if (TYPE_BINFO (type))
3324 fns = lookup_fnfields (TYPE_BINFO (type), ansi_opname (CALL_EXPR), 1);
3325 if (fns == error_mark_node)
3326 return error_mark_node;
3331 if (args != NULL && *args != NULL)
3333 *args = resolve_args (*args);
3335 return error_mark_node;
3338 /* Get the high-water mark for the CONVERSION_OBSTACK. */
3339 p = conversion_obstack_alloc (0);
3343 tree base = BINFO_TYPE (BASELINK_BINFO (fns));
3344 first_mem_arg = build_this (obj);
3346 for (fns = BASELINK_FUNCTIONS (fns); fns; fns = OVL_NEXT (fns))
3348 tree fn = OVL_CURRENT (fns);
3349 if (TREE_CODE (fn) == TEMPLATE_DECL)
3350 add_template_candidate (&candidates, fn, base, NULL_TREE,
3351 first_mem_arg, *args, NULL_TREE,
3354 LOOKUP_NORMAL, DEDUCE_CALL);
3356 add_function_candidate
3357 (&candidates, fn, base, first_mem_arg, *args, TYPE_BINFO (type),
3358 TYPE_BINFO (type), LOOKUP_NORMAL);
3362 convs = lookup_conversions (type);
3364 for (; convs; convs = TREE_CHAIN (convs))
3366 tree fns = TREE_VALUE (convs);
3367 tree totype = TREE_TYPE (convs);
3369 if ((TREE_CODE (totype) == POINTER_TYPE
3370 && TREE_CODE (TREE_TYPE (totype)) == FUNCTION_TYPE)
3371 || (TREE_CODE (totype) == REFERENCE_TYPE
3372 && TREE_CODE (TREE_TYPE (totype)) == FUNCTION_TYPE)
3373 || (TREE_CODE (totype) == REFERENCE_TYPE
3374 && TREE_CODE (TREE_TYPE (totype)) == POINTER_TYPE
3375 && TREE_CODE (TREE_TYPE (TREE_TYPE (totype))) == FUNCTION_TYPE))
3376 for (; fns; fns = OVL_NEXT (fns))
3378 tree fn = OVL_CURRENT (fns);
3380 if (DECL_NONCONVERTING_P (fn))
3383 if (TREE_CODE (fn) == TEMPLATE_DECL)
3384 add_template_conv_candidate
3385 (&candidates, fn, obj, NULL_TREE, *args, totype,
3386 /*access_path=*/NULL_TREE,
3387 /*conversion_path=*/NULL_TREE);
3389 add_conv_candidate (&candidates, fn, obj, NULL_TREE,
3390 *args, /*conversion_path=*/NULL_TREE,
3391 /*access_path=*/NULL_TREE);
3395 candidates = splice_viable (candidates, pedantic, &any_viable_p);
3398 if (complain & tf_error)
3400 error ("no match for call to %<(%T) (%A)%>", TREE_TYPE (obj),
3401 build_tree_list_vec (*args));
3402 print_z_candidates (candidates);
3404 result = error_mark_node;
3408 cand = tourney (candidates);
3411 if (complain & tf_error)
3413 error ("call of %<(%T) (%A)%> is ambiguous",
3414 TREE_TYPE (obj), build_tree_list_vec (*args));
3415 print_z_candidates (candidates);
3417 result = error_mark_node;
3419 /* Since cand->fn will be a type, not a function, for a conversion
3420 function, we must be careful not to unconditionally look at
3422 else if (TREE_CODE (cand->fn) == FUNCTION_DECL
3423 && DECL_OVERLOADED_OPERATOR_P (cand->fn) == CALL_EXPR)
3424 result = build_over_call (cand, LOOKUP_NORMAL, complain);
3427 obj = convert_like_with_context (cand->convs[0], obj, cand->fn, -1,
3429 obj = convert_from_reference (obj);
3430 result = cp_build_function_call_vec (obj, args, complain);
3434 /* Free all the conversions we allocated. */
3435 obstack_free (&conversion_obstack, p);
3441 op_error (enum tree_code code, enum tree_code code2,
3442 tree arg1, tree arg2, tree arg3, const char *problem)
3446 if (code == MODIFY_EXPR)
3447 opname = assignment_operator_name_info[code2].name;
3449 opname = operator_name_info[code].name;
3454 error ("%s for ternary %<operator?:%> in %<%E ? %E : %E%>",
3455 problem, arg1, arg2, arg3);
3458 case POSTINCREMENT_EXPR:
3459 case POSTDECREMENT_EXPR:
3460 error ("%s for %<operator%s%> in %<%E%s%>", problem, opname, arg1, opname);
3464 error ("%s for %<operator[]%> in %<%E[%E]%>", problem, arg1, arg2);
3469 error ("%s for %qs in %<%s %E%>", problem, opname, opname, arg1);
3474 error ("%s for %<operator%s%> in %<%E %s %E%>",
3475 problem, opname, arg1, opname, arg2);
3477 error ("%s for %<operator%s%> in %<%s%E%>",
3478 problem, opname, opname, arg1);
3483 /* Return the implicit conversion sequence that could be used to
3484 convert E1 to E2 in [expr.cond]. */
3487 conditional_conversion (tree e1, tree e2)
3489 tree t1 = non_reference (TREE_TYPE (e1));
3490 tree t2 = non_reference (TREE_TYPE (e2));
3496 If E2 is an lvalue: E1 can be converted to match E2 if E1 can be
3497 implicitly converted (clause _conv_) to the type "reference to
3498 T2", subject to the constraint that in the conversion the
3499 reference must bind directly (_dcl.init.ref_) to E1. */
3500 if (real_lvalue_p (e2))
3502 conv = implicit_conversion (build_reference_type (t2),
3506 LOOKUP_NO_TEMP_BIND|LOOKUP_ONLYCONVERTING);
3513 If E1 and E2 have class type, and the underlying class types are
3514 the same or one is a base class of the other: E1 can be converted
3515 to match E2 if the class of T2 is the same type as, or a base
3516 class of, the class of T1, and the cv-qualification of T2 is the
3517 same cv-qualification as, or a greater cv-qualification than, the
3518 cv-qualification of T1. If the conversion is applied, E1 is
3519 changed to an rvalue of type T2 that still refers to the original
3520 source class object (or the appropriate subobject thereof). */
3521 if (CLASS_TYPE_P (t1) && CLASS_TYPE_P (t2)
3522 && ((good_base = DERIVED_FROM_P (t2, t1)) || DERIVED_FROM_P (t1, t2)))
3524 if (good_base && at_least_as_qualified_p (t2, t1))
3526 conv = build_identity_conv (t1, e1);
3527 if (!same_type_p (TYPE_MAIN_VARIANT (t1),
3528 TYPE_MAIN_VARIANT (t2)))
3529 conv = build_conv (ck_base, t2, conv);
3531 conv = build_conv (ck_rvalue, t2, conv);
3540 Otherwise: E1 can be converted to match E2 if E1 can be implicitly
3541 converted to the type that expression E2 would have if E2 were
3542 converted to an rvalue (or the type it has, if E2 is an rvalue). */
3543 return implicit_conversion (t2, t1, e1, /*c_cast_p=*/false,
3547 /* Implement [expr.cond]. ARG1, ARG2, and ARG3 are the three
3548 arguments to the conditional expression. */
3551 build_conditional_expr (tree arg1, tree arg2, tree arg3,
3552 tsubst_flags_t complain)
3556 tree result = NULL_TREE;
3557 tree result_type = NULL_TREE;
3558 bool lvalue_p = true;
3559 struct z_candidate *candidates = 0;
3560 struct z_candidate *cand;
3563 /* As a G++ extension, the second argument to the conditional can be
3564 omitted. (So that `a ? : c' is roughly equivalent to `a ? a :
3565 c'.) If the second operand is omitted, make sure it is
3566 calculated only once. */
3569 if (complain & tf_error)
3570 pedwarn (input_location, OPT_pedantic,
3571 "ISO C++ forbids omitting the middle term of a ?: expression");
3573 /* Make sure that lvalues remain lvalues. See g++.oliva/ext1.C. */
3574 if (real_lvalue_p (arg1))
3575 arg2 = arg1 = stabilize_reference (arg1);
3577 arg2 = arg1 = save_expr (arg1);
3582 The first expression is implicitly converted to bool (clause
3584 arg1 = perform_implicit_conversion (boolean_type_node, arg1, complain);
3586 /* If something has already gone wrong, just pass that fact up the
3588 if (error_operand_p (arg1)
3589 || error_operand_p (arg2)
3590 || error_operand_p (arg3))
3591 return error_mark_node;
3595 If either the second or the third operand has type (possibly
3596 cv-qualified) void, then the lvalue-to-rvalue (_conv.lval_),
3597 array-to-pointer (_conv.array_), and function-to-pointer
3598 (_conv.func_) standard conversions are performed on the second
3599 and third operands. */
3600 arg2_type = unlowered_expr_type (arg2);
3601 arg3_type = unlowered_expr_type (arg3);
3602 if (VOID_TYPE_P (arg2_type) || VOID_TYPE_P (arg3_type))
3604 /* Do the conversions. We don't these for `void' type arguments
3605 since it can't have any effect and since decay_conversion
3606 does not handle that case gracefully. */
3607 if (!VOID_TYPE_P (arg2_type))
3608 arg2 = decay_conversion (arg2);
3609 if (!VOID_TYPE_P (arg3_type))
3610 arg3 = decay_conversion (arg3);
3611 arg2_type = TREE_TYPE (arg2);
3612 arg3_type = TREE_TYPE (arg3);
3616 One of the following shall hold:
3618 --The second or the third operand (but not both) is a
3619 throw-expression (_except.throw_); the result is of the
3620 type of the other and is an rvalue.
3622 --Both the second and the third operands have type void; the
3623 result is of type void and is an rvalue.
3625 We must avoid calling force_rvalue for expressions of type
3626 "void" because it will complain that their value is being
3628 if (TREE_CODE (arg2) == THROW_EXPR
3629 && TREE_CODE (arg3) != THROW_EXPR)
3631 if (!VOID_TYPE_P (arg3_type))
3632 arg3 = force_rvalue (arg3);
3633 arg3_type = TREE_TYPE (arg3);
3634 result_type = arg3_type;
3636 else if (TREE_CODE (arg2) != THROW_EXPR
3637 && TREE_CODE (arg3) == THROW_EXPR)
3639 if (!VOID_TYPE_P (arg2_type))
3640 arg2 = force_rvalue (arg2);
3641 arg2_type = TREE_TYPE (arg2);
3642 result_type = arg2_type;
3644 else if (VOID_TYPE_P (arg2_type) && VOID_TYPE_P (arg3_type))
3645 result_type = void_type_node;
3648 if (complain & tf_error)
3650 if (VOID_TYPE_P (arg2_type))
3651 error ("second operand to the conditional operator "
3652 "is of type %<void%>, "
3653 "but the third operand is neither a throw-expression "
3654 "nor of type %<void%>");
3656 error ("third operand to the conditional operator "
3657 "is of type %<void%>, "
3658 "but the second operand is neither a throw-expression "
3659 "nor of type %<void%>");
3661 return error_mark_node;
3665 goto valid_operands;
3669 Otherwise, if the second and third operand have different types,
3670 and either has (possibly cv-qualified) class type, an attempt is
3671 made to convert each of those operands to the type of the other. */
3672 else if (!same_type_p (arg2_type, arg3_type)
3673 && (CLASS_TYPE_P (arg2_type) || CLASS_TYPE_P (arg3_type)))
3678 /* Get the high-water mark for the CONVERSION_OBSTACK. */
3679 p = conversion_obstack_alloc (0);
3681 conv2 = conditional_conversion (arg2, arg3);
3682 conv3 = conditional_conversion (arg3, arg2);
3686 If both can be converted, or one can be converted but the
3687 conversion is ambiguous, the program is ill-formed. If
3688 neither can be converted, the operands are left unchanged and
3689 further checking is performed as described below. If exactly
3690 one conversion is possible, that conversion is applied to the
3691 chosen operand and the converted operand is used in place of
3692 the original operand for the remainder of this section. */
3693 if ((conv2 && !conv2->bad_p
3694 && conv3 && !conv3->bad_p)
3695 || (conv2 && conv2->kind == ck_ambig)
3696 || (conv3 && conv3->kind == ck_ambig))
3698 error ("operands to ?: have different types %qT and %qT",
3699 arg2_type, arg3_type);
3700 result = error_mark_node;
3702 else if (conv2 && (!conv2->bad_p || !conv3))
3704 arg2 = convert_like (conv2, arg2, complain);
3705 arg2 = convert_from_reference (arg2);
3706 arg2_type = TREE_TYPE (arg2);
3707 /* Even if CONV2 is a valid conversion, the result of the
3708 conversion may be invalid. For example, if ARG3 has type
3709 "volatile X", and X does not have a copy constructor
3710 accepting a "volatile X&", then even if ARG2 can be
3711 converted to X, the conversion will fail. */
3712 if (error_operand_p (arg2))
3713 result = error_mark_node;
3715 else if (conv3 && (!conv3->bad_p || !conv2))
3717 arg3 = convert_like (conv3, arg3, complain);
3718 arg3 = convert_from_reference (arg3);
3719 arg3_type = TREE_TYPE (arg3);
3720 if (error_operand_p (arg3))
3721 result = error_mark_node;
3724 /* Free all the conversions we allocated. */
3725 obstack_free (&conversion_obstack, p);
3730 /* If, after the conversion, both operands have class type,
3731 treat the cv-qualification of both operands as if it were the
3732 union of the cv-qualification of the operands.
3734 The standard is not clear about what to do in this
3735 circumstance. For example, if the first operand has type
3736 "const X" and the second operand has a user-defined
3737 conversion to "volatile X", what is the type of the second
3738 operand after this step? Making it be "const X" (matching
3739 the first operand) seems wrong, as that discards the
3740 qualification without actually performing a copy. Leaving it
3741 as "volatile X" seems wrong as that will result in the
3742 conditional expression failing altogether, even though,
3743 according to this step, the one operand could be converted to
3744 the type of the other. */
3745 if ((conv2 || conv3)
3746 && CLASS_TYPE_P (arg2_type)
3747 && TYPE_QUALS (arg2_type) != TYPE_QUALS (arg3_type))
3748 arg2_type = arg3_type =
3749 cp_build_qualified_type (arg2_type,
3750 TYPE_QUALS (arg2_type)
3751 | TYPE_QUALS (arg3_type));
3756 If the second and third operands are lvalues and have the same
3757 type, the result is of that type and is an lvalue. */
3758 if (real_lvalue_p (arg2)
3759 && real_lvalue_p (arg3)
3760 && same_type_p (arg2_type, arg3_type))
3762 result_type = arg2_type;
3763 goto valid_operands;
3768 Otherwise, the result is an rvalue. If the second and third
3769 operand do not have the same type, and either has (possibly
3770 cv-qualified) class type, overload resolution is used to
3771 determine the conversions (if any) to be applied to the operands
3772 (_over.match.oper_, _over.built_). */
3774 if (!same_type_p (arg2_type, arg3_type)
3775 && (CLASS_TYPE_P (arg2_type) || CLASS_TYPE_P (arg3_type)))
3781 /* Rearrange the arguments so that add_builtin_candidate only has
3782 to know about two args. In build_builtin_candidates, the
3783 arguments are unscrambled. */
3787 add_builtin_candidates (&candidates,
3790 ansi_opname (COND_EXPR),
3796 If the overload resolution fails, the program is
3798 candidates = splice_viable (candidates, pedantic, &any_viable_p);
3801 if (complain & tf_error)
3803 op_error (COND_EXPR, NOP_EXPR, arg1, arg2, arg3, "no match");
3804 print_z_candidates (candidates);
3806 return error_mark_node;
3808 cand = tourney (candidates);
3811 if (complain & tf_error)
3813 op_error (COND_EXPR, NOP_EXPR, arg1, arg2, arg3, "no match");
3814 print_z_candidates (candidates);
3816 return error_mark_node;
3821 Otherwise, the conversions thus determined are applied, and
3822 the converted operands are used in place of the original
3823 operands for the remainder of this section. */
3824 conv = cand->convs[0];
3825 arg1 = convert_like (conv, arg1, complain);
3826 conv = cand->convs[1];
3827 arg2 = convert_like (conv, arg2, complain);
3828 conv = cand->convs[2];
3829 arg3 = convert_like (conv, arg3, complain);
3834 Lvalue-to-rvalue (_conv.lval_), array-to-pointer (_conv.array_),
3835 and function-to-pointer (_conv.func_) standard conversions are
3836 performed on the second and third operands.
3838 We need to force the lvalue-to-rvalue conversion here for class types,
3839 so we get TARGET_EXPRs; trying to deal with a COND_EXPR of class rvalues
3840 that isn't wrapped with a TARGET_EXPR plays havoc with exception
3843 arg2 = force_rvalue (arg2);
3844 if (!CLASS_TYPE_P (arg2_type))
3845 arg2_type = TREE_TYPE (arg2);
3847 arg3 = force_rvalue (arg3);
3848 if (!CLASS_TYPE_P (arg2_type))
3849 arg3_type = TREE_TYPE (arg3);
3851 if (arg2 == error_mark_node || arg3 == error_mark_node)
3852 return error_mark_node;
3856 After those conversions, one of the following shall hold:
3858 --The second and third operands have the same type; the result is of
3860 if (same_type_p (arg2_type, arg3_type))
3861 result_type = arg2_type;
3864 --The second and third operands have arithmetic or enumeration
3865 type; the usual arithmetic conversions are performed to bring
3866 them to a common type, and the result is of that type. */
3867 else if ((ARITHMETIC_TYPE_P (arg2_type)
3868 || UNSCOPED_ENUM_P (arg2_type))
3869 && (ARITHMETIC_TYPE_P (arg3_type)
3870 || UNSCOPED_ENUM_P (arg3_type)))
3872 /* In this case, there is always a common type. */
3873 result_type = type_after_usual_arithmetic_conversions (arg2_type,
3876 if (TREE_CODE (arg2_type) == ENUMERAL_TYPE
3877 && TREE_CODE (arg3_type) == ENUMERAL_TYPE)
3879 if (complain & tf_warning)
3881 "enumeral mismatch in conditional expression: %qT vs %qT",
3882 arg2_type, arg3_type);
3884 else if (extra_warnings
3885 && ((TREE_CODE (arg2_type) == ENUMERAL_TYPE
3886 && !same_type_p (arg3_type, type_promotes_to (arg2_type)))
3887 || (TREE_CODE (arg3_type) == ENUMERAL_TYPE
3888 && !same_type_p (arg2_type, type_promotes_to (arg3_type)))))
3890 if (complain & tf_warning)
3892 "enumeral and non-enumeral type in conditional expression");
3895 arg2 = perform_implicit_conversion (result_type, arg2, complain);
3896 arg3 = perform_implicit_conversion (result_type, arg3, complain);
3900 --The second and third operands have pointer type, or one has
3901 pointer type and the other is a null pointer constant; pointer
3902 conversions (_conv.ptr_) and qualification conversions
3903 (_conv.qual_) are performed to bring them to their composite
3904 pointer type (_expr.rel_). The result is of the composite
3907 --The second and third operands have pointer to member type, or
3908 one has pointer to member type and the other is a null pointer
3909 constant; pointer to member conversions (_conv.mem_) and
3910 qualification conversions (_conv.qual_) are performed to bring
3911 them to a common type, whose cv-qualification shall match the
3912 cv-qualification of either the second or the third operand.
3913 The result is of the common type. */
3914 else if ((null_ptr_cst_p (arg2)
3915 && (TYPE_PTR_P (arg3_type) || TYPE_PTR_TO_MEMBER_P (arg3_type)))
3916 || (null_ptr_cst_p (arg3)
3917 && (TYPE_PTR_P (arg2_type) || TYPE_PTR_TO_MEMBER_P (arg2_type)))
3918 || (TYPE_PTR_P (arg2_type) && TYPE_PTR_P (arg3_type))
3919 || (TYPE_PTRMEM_P (arg2_type) && TYPE_PTRMEM_P (arg3_type))
3920 || (TYPE_PTRMEMFUNC_P (arg2_type) && TYPE_PTRMEMFUNC_P (arg3_type)))
3922 result_type = composite_pointer_type (arg2_type, arg3_type, arg2,
3923 arg3, "conditional expression",
3925 if (result_type == error_mark_node)
3926 return error_mark_node;
3927 arg2 = perform_implicit_conversion (result_type, arg2, complain);
3928 arg3 = perform_implicit_conversion (result_type, arg3, complain);
3933 if (complain & tf_error)
3934 error ("operands to ?: have different types %qT and %qT",
3935 arg2_type, arg3_type);
3936 return error_mark_node;
3940 result = fold_if_not_in_template (build3 (COND_EXPR, result_type, arg1,
3942 /* We can't use result_type below, as fold might have returned a
3947 /* Expand both sides into the same slot, hopefully the target of
3948 the ?: expression. We used to check for TARGET_EXPRs here,
3949 but now we sometimes wrap them in NOP_EXPRs so the test would
3951 if (CLASS_TYPE_P (TREE_TYPE (result)))
3952 result = get_target_expr (result);
3953 /* If this expression is an rvalue, but might be mistaken for an
3954 lvalue, we must add a NON_LVALUE_EXPR. */
3955 result = rvalue (result);
3961 /* OPERAND is an operand to an expression. Perform necessary steps
3962 required before using it. If OPERAND is NULL_TREE, NULL_TREE is
3966 prep_operand (tree operand)
3970 if (CLASS_TYPE_P (TREE_TYPE (operand))
3971 && CLASSTYPE_TEMPLATE_INSTANTIATION (TREE_TYPE (operand)))
3972 /* Make sure the template type is instantiated now. */
3973 instantiate_class_template (TYPE_MAIN_VARIANT (TREE_TYPE (operand)));
3979 /* Add each of the viable functions in FNS (a FUNCTION_DECL or
3980 OVERLOAD) to the CANDIDATES, returning an updated list of
3981 CANDIDATES. The ARGS are the arguments provided to the call,
3982 without any implicit object parameter. This may change ARGS. The
3983 EXPLICIT_TARGS are explicit template arguments provided.
3984 TEMPLATE_ONLY is true if only template functions should be
3985 considered. CONVERSION_PATH, ACCESS_PATH, and FLAGS are as for
3986 add_function_candidate. */
3989 add_candidates (tree fns, const VEC(tree,gc) *args,
3990 tree explicit_targs, bool template_only,
3991 tree conversion_path, tree access_path,
3993 struct z_candidate **candidates)
3996 VEC(tree,gc) *non_static_args;
3999 ctype = conversion_path ? BINFO_TYPE (conversion_path) : NULL_TREE;
4000 /* Delay creating the implicit this parameter until it is needed. */
4001 non_static_args = NULL;
4002 first_arg = NULL_TREE;
4008 const VEC(tree,gc) *fn_args;
4010 fn = OVL_CURRENT (fns);
4011 /* Figure out which set of arguments to use. */
4012 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
4014 /* If this function is a non-static member, prepend the implicit
4015 object parameter. */
4016 if (non_static_args == NULL)
4021 non_static_args = VEC_alloc (tree, gc,
4022 VEC_length (tree, args) - 1);
4023 for (ix = 1; VEC_iterate (tree, args, ix, arg); ++ix)
4024 VEC_quick_push (tree, non_static_args, arg);
4026 if (first_arg == NULL_TREE)
4027 first_arg = build_this (VEC_index (tree, args, 0));
4028 fn_first_arg = first_arg;
4029 fn_args = non_static_args;
4033 /* Otherwise, just use the list of arguments provided. */
4034 fn_first_arg = NULL_TREE;
4038 if (TREE_CODE (fn) == TEMPLATE_DECL)
4039 add_template_candidate (candidates,
4050 else if (!template_only)
4051 add_function_candidate (candidates,
4059 fns = OVL_NEXT (fns);
4063 /* Even unsigned enum types promote to signed int. We don't want to
4064 issue -Wsign-compare warnings for this case. Here ORIG_ARG is the
4065 original argument and ARG is the argument after any conversions
4066 have been applied. We set TREE_NO_WARNING if we have added a cast
4067 from an unsigned enum type to a signed integer type. */
4070 avoid_sign_compare_warnings (tree orig_arg, tree arg)
4072 if (orig_arg != NULL_TREE
4075 && TREE_CODE (TREE_TYPE (orig_arg)) == ENUMERAL_TYPE
4076 && TYPE_UNSIGNED (TREE_TYPE (orig_arg))
4077 && INTEGRAL_TYPE_P (TREE_TYPE (arg))
4078 && !TYPE_UNSIGNED (TREE_TYPE (arg)))
4079 TREE_NO_WARNING (arg) = 1;
4083 build_new_op (enum tree_code code, int flags, tree arg1, tree arg2, tree arg3,
4084 bool *overloaded_p, tsubst_flags_t complain)
4086 tree orig_arg1 = arg1;
4087 tree orig_arg2 = arg2;
4088 tree orig_arg3 = arg3;
4089 struct z_candidate *candidates = 0, *cand;
4090 VEC(tree,gc) *arglist;
4093 tree result = NULL_TREE;
4094 bool result_valid_p = false;
4095 enum tree_code code2 = NOP_EXPR;
4096 enum tree_code code_orig_arg1 = ERROR_MARK;
4097 enum tree_code code_orig_arg2 = ERROR_MARK;
4103 if (error_operand_p (arg1)
4104 || error_operand_p (arg2)
4105 || error_operand_p (arg3))
4106 return error_mark_node;
4108 if (code == MODIFY_EXPR)
4110 code2 = TREE_CODE (arg3);
4112 fnname = ansi_assopname (code2);
4115 fnname = ansi_opname (code);
4117 arg1 = prep_operand (arg1);
4123 case VEC_DELETE_EXPR:
4125 /* Use build_op_new_call and build_op_delete_call instead. */
4129 /* Use build_op_call instead. */
4132 case TRUTH_ORIF_EXPR:
4133 case TRUTH_ANDIF_EXPR:
4134 case TRUTH_AND_EXPR:
4136 /* These are saved for the sake of warn_logical_operator. */
4137 code_orig_arg1 = TREE_CODE (arg1);
4138 code_orig_arg2 = TREE_CODE (arg2);
4144 arg2 = prep_operand (arg2);
4145 arg3 = prep_operand (arg3);
4147 if (code == COND_EXPR)
4149 if (arg2 == NULL_TREE
4150 || TREE_CODE (TREE_TYPE (arg2)) == VOID_TYPE
4151 || TREE_CODE (TREE_TYPE (arg3)) == VOID_TYPE
4152 || (! IS_OVERLOAD_TYPE (TREE_TYPE (arg2))
4153 && ! IS_OVERLOAD_TYPE (TREE_TYPE (arg3))))
4156 else if (! IS_OVERLOAD_TYPE (TREE_TYPE (arg1))
4157 && (! arg2 || ! IS_OVERLOAD_TYPE (TREE_TYPE (arg2))))
4160 if (code == POSTINCREMENT_EXPR || code == POSTDECREMENT_EXPR)
4161 arg2 = integer_zero_node;
4163 arglist = VEC_alloc (tree, gc, 3);
4164 VEC_quick_push (tree, arglist, arg1);
4165 if (arg2 != NULL_TREE)
4166 VEC_quick_push (tree, arglist, arg2);
4167 if (arg3 != NULL_TREE)
4168 VEC_quick_push (tree, arglist, arg3);
4170 /* Get the high-water mark for the CONVERSION_OBSTACK. */
4171 p = conversion_obstack_alloc (0);
4173 /* Add namespace-scope operators to the list of functions to
4175 add_candidates (lookup_function_nonclass (fnname, arglist, /*block_p=*/true),
4176 arglist, NULL_TREE, false, NULL_TREE, NULL_TREE,
4177 flags, &candidates);
4178 /* Add class-member operators to the candidate set. */
4179 if (CLASS_TYPE_P (TREE_TYPE (arg1)))
4183 fns = lookup_fnfields (TREE_TYPE (arg1), fnname, 1);
4184 if (fns == error_mark_node)
4186 result = error_mark_node;
4187 goto user_defined_result_ready;
4190 add_candidates (BASELINK_FUNCTIONS (fns), arglist,
4192 BASELINK_BINFO (fns),
4193 TYPE_BINFO (TREE_TYPE (arg1)),
4194 flags, &candidates);
4197 /* Rearrange the arguments for ?: so that add_builtin_candidate only has
4198 to know about two args; a builtin candidate will always have a first
4199 parameter of type bool. We'll handle that in
4200 build_builtin_candidate. */
4201 if (code == COND_EXPR)
4211 args[2] = NULL_TREE;
4214 add_builtin_candidates (&candidates, code, code2, fnname, args, flags);
4220 /* For these, the built-in candidates set is empty
4221 [over.match.oper]/3. We don't want non-strict matches
4222 because exact matches are always possible with built-in
4223 operators. The built-in candidate set for COMPONENT_REF
4224 would be empty too, but since there are no such built-in
4225 operators, we accept non-strict matches for them. */
4230 strict_p = pedantic;
4234 candidates = splice_viable (candidates, strict_p, &any_viable_p);
4239 case POSTINCREMENT_EXPR:
4240 case POSTDECREMENT_EXPR:
4241 /* Don't try anything fancy if we're not allowed to produce
4243 if (!(complain & tf_error))
4244 return error_mark_node;
4246 /* Look for an `operator++ (int)'. If they didn't have
4247 one, then we fall back to the old way of doing things. */
4248 if (flags & LOOKUP_COMPLAIN)
4249 permerror (input_location, "no %<%D(int)%> declared for postfix %qs, "
4250 "trying prefix operator instead",
4252 operator_name_info[code].name);
4253 if (code == POSTINCREMENT_EXPR)
4254 code = PREINCREMENT_EXPR;
4256 code = PREDECREMENT_EXPR;
4257 result = build_new_op (code, flags, arg1, NULL_TREE, NULL_TREE,
4258 overloaded_p, complain);
4261 /* The caller will deal with these. */
4266 result_valid_p = true;
4270 if ((flags & LOOKUP_COMPLAIN) && (complain & tf_error))
4272 /* If one of the arguments of the operator represents
4273 an invalid use of member function pointer, try to report
4274 a meaningful error ... */
4275 if (invalid_nonstatic_memfn_p (arg1, tf_error)
4276 || invalid_nonstatic_memfn_p (arg2, tf_error)
4277 || invalid_nonstatic_memfn_p (arg3, tf_error))
4278 /* We displayed the error message. */;
4281 /* ... Otherwise, report the more generic
4282 "no matching operator found" error */
4283 op_error (code, code2, arg1, arg2, arg3, "no match");
4284 print_z_candidates (candidates);
4287 result = error_mark_node;
4293 cand = tourney (candidates);
4296 if ((flags & LOOKUP_COMPLAIN) && (complain & tf_error))
4298 op_error (code, code2, arg1, arg2, arg3, "ambiguous overload");
4299 print_z_candidates (candidates);
4301 result = error_mark_node;
4303 else if (TREE_CODE (cand->fn) == FUNCTION_DECL)
4306 *overloaded_p = true;
4308 if (resolve_args (arglist) == NULL)
4309 result = error_mark_node;
4311 result = build_over_call (cand, LOOKUP_NORMAL, complain);
4315 /* Give any warnings we noticed during overload resolution. */
4316 if (cand->warnings && (complain & tf_warning))
4318 struct candidate_warning *w;
4319 for (w = cand->warnings; w; w = w->next)
4320 joust (cand, w->loser, 1);
4323 /* Check for comparison of different enum types. */
4332 if (TREE_CODE (TREE_TYPE (arg1)) == ENUMERAL_TYPE
4333 && TREE_CODE (TREE_TYPE (arg2)) == ENUMERAL_TYPE
4334 && (TYPE_MAIN_VARIANT (TREE_TYPE (arg1))
4335 != TYPE_MAIN_VARIANT (TREE_TYPE (arg2)))
4336 && (complain & tf_warning))
4338 warning (OPT_Wenum_compare,
4339 "comparison between %q#T and %q#T",
4340 TREE_TYPE (arg1), TREE_TYPE (arg2));
4347 /* We need to strip any leading REF_BIND so that bitfields
4348 don't cause errors. This should not remove any important
4349 conversions, because builtins don't apply to class
4350 objects directly. */
4351 conv = cand->convs[0];
4352 if (conv->kind == ck_ref_bind)
4353 conv = conv->u.next;
4354 arg1 = convert_like (conv, arg1, complain);
4358 /* We need to call warn_logical_operator before
4359 converting arg2 to a boolean_type. */
4360 if (complain & tf_warning)
4361 warn_logical_operator (input_location, code, boolean_type_node,
4362 code_orig_arg1, arg1,
4363 code_orig_arg2, arg2);
4365 conv = cand->convs[1];
4366 if (conv->kind == ck_ref_bind)
4367 conv = conv->u.next;
4368 arg2 = convert_like (conv, arg2, complain);
4372 conv = cand->convs[2];
4373 if (conv->kind == ck_ref_bind)
4374 conv = conv->u.next;
4375 arg3 = convert_like (conv, arg3, complain);
4381 user_defined_result_ready:
4383 /* Free all the conversions we allocated. */
4384 obstack_free (&conversion_obstack, p);
4386 if (result || result_valid_p)
4390 avoid_sign_compare_warnings (orig_arg1, arg1);
4391 avoid_sign_compare_warnings (orig_arg2, arg2);
4392 avoid_sign_compare_warnings (orig_arg3, arg3);
4397 return cp_build_modify_expr (arg1, code2, arg2, complain);
4400 return cp_build_indirect_ref (arg1, "unary *", complain);
4402 case TRUTH_ANDIF_EXPR:
4403 case TRUTH_ORIF_EXPR:
4404 case TRUTH_AND_EXPR:
4406 warn_logical_operator (input_location, code, boolean_type_node,
4407 code_orig_arg1, arg1, code_orig_arg2, arg2);
4412 case TRUNC_DIV_EXPR:
4423 case TRUNC_MOD_EXPR:
4427 return cp_build_binary_op (input_location, code, arg1, arg2, complain);
4429 case UNARY_PLUS_EXPR:
4432 case TRUTH_NOT_EXPR:
4433 case PREINCREMENT_EXPR:
4434 case POSTINCREMENT_EXPR:
4435 case PREDECREMENT_EXPR:
4436 case POSTDECREMENT_EXPR:
4439 return cp_build_unary_op (code, arg1, candidates != 0, complain);
4442 return build_array_ref (input_location, arg1, arg2);
4445 return build_conditional_expr (arg1, arg2, arg3, complain);
4448 return build_m_component_ref (cp_build_indirect_ref (arg1, NULL,
4452 /* The caller will deal with these. */
4464 /* Build a call to operator delete. This has to be handled very specially,
4465 because the restrictions on what signatures match are different from all
4466 other call instances. For a normal delete, only a delete taking (void *)
4467 or (void *, size_t) is accepted. For a placement delete, only an exact
4468 match with the placement new is accepted.
4470 CODE is either DELETE_EXPR or VEC_DELETE_EXPR.
4471 ADDR is the pointer to be deleted.
4472 SIZE is the size of the memory block to be deleted.
4473 GLOBAL_P is true if the delete-expression should not consider
4474 class-specific delete operators.
4475 PLACEMENT is the corresponding placement new call, or NULL_TREE.
4477 If this call to "operator delete" is being generated as part to
4478 deallocate memory allocated via a new-expression (as per [expr.new]
4479 which requires that if the initialization throws an exception then
4480 we call a deallocation function), then ALLOC_FN is the allocation
4484 build_op_delete_call (enum tree_code code, tree addr, tree size,
4485 bool global_p, tree placement,
4488 tree fn = NULL_TREE;
4489 tree fns, fnname, argtypes, type;
4492 if (addr == error_mark_node)
4493 return error_mark_node;
4495 type = strip_array_types (TREE_TYPE (TREE_TYPE (addr)));
4497 fnname = ansi_opname (code);
4499 if (CLASS_TYPE_P (type)
4500 && COMPLETE_TYPE_P (complete_type (type))
4504 If the result of the lookup is ambiguous or inaccessible, or if
4505 the lookup selects a placement deallocation function, the
4506 program is ill-formed.
4508 Therefore, we ask lookup_fnfields to complain about ambiguity. */
4510 fns = lookup_fnfields (TYPE_BINFO (type), fnname, 1);
4511 if (fns == error_mark_node)
4512 return error_mark_node;
4517 if (fns == NULL_TREE)
4518 fns = lookup_name_nonclass (fnname);
4520 /* Strip const and volatile from addr. */
4521 addr = cp_convert (ptr_type_node, addr);
4525 /* Get the parameter types for the allocation function that is
4527 gcc_assert (alloc_fn != NULL_TREE);
4528 argtypes = TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (alloc_fn)));
4532 /* First try it without the size argument. */
4533 argtypes = void_list_node;
4536 /* We make two tries at finding a matching `operator delete'. On
4537 the first pass, we look for a one-operator (or placement)
4538 operator delete. If we're not doing placement delete, then on
4539 the second pass we look for a two-argument delete. */
4540 for (pass = 0; pass < (placement ? 1 : 2); ++pass)
4542 /* Go through the `operator delete' functions looking for one
4543 with a matching type. */
4544 for (fn = BASELINK_P (fns) ? BASELINK_FUNCTIONS (fns) : fns;
4550 /* The first argument must be "void *". */
4551 t = TYPE_ARG_TYPES (TREE_TYPE (OVL_CURRENT (fn)));
4552 if (!same_type_p (TREE_VALUE (t), ptr_type_node))
4555 /* On the first pass, check the rest of the arguments. */
4561 if (!same_type_p (TREE_VALUE (a), TREE_VALUE (t)))
4569 /* On the second pass, look for a function with exactly two
4570 arguments: "void *" and "size_t". */
4572 /* For "operator delete(void *, ...)" there will be
4573 no second argument, but we will not get an exact
4576 && same_type_p (TREE_VALUE (t), size_type_node)
4577 && TREE_CHAIN (t) == void_list_node)
4581 /* If we found a match, we're done. */
4586 /* If we have a matching function, call it. */
4589 /* Make sure we have the actual function, and not an
4591 fn = OVL_CURRENT (fn);
4593 /* If the FN is a member function, make sure that it is
4595 if (DECL_CLASS_SCOPE_P (fn))
4596 perform_or_defer_access_check (TYPE_BINFO (type), fn, fn);
4600 /* The placement args might not be suitable for overload
4601 resolution at this point, so build the call directly. */
4602 int nargs = call_expr_nargs (placement);
4603 tree *argarray = (tree *) alloca (nargs * sizeof (tree));
4606 for (i = 1; i < nargs; i++)
4607 argarray[i] = CALL_EXPR_ARG (placement, i);
4609 return build_cxx_call (fn, nargs, argarray);
4614 VEC(tree,gc) *args = VEC_alloc (tree, gc, 2);
4615 VEC_quick_push (tree, args, addr);
4617 VEC_quick_push (tree, args, size);
4618 ret = cp_build_function_call_vec (fn, &args, tf_warning_or_error);
4619 VEC_free (tree, gc, args);
4626 If no unambiguous matching deallocation function can be found,
4627 propagating the exception does not cause the object's memory to
4632 warning (0, "no corresponding deallocation function for %qD",
4637 error ("no suitable %<operator %s%> for %qT",
4638 operator_name_info[(int)code].name, type);
4639 return error_mark_node;
4642 /* If the current scope isn't allowed to access DECL along
4643 BASETYPE_PATH, give an error. The most derived class in
4644 BASETYPE_PATH is the one used to qualify DECL. DIAG_DECL is
4645 the declaration to use in the error diagnostic. */
4648 enforce_access (tree basetype_path, tree decl, tree diag_decl)
4650 gcc_assert (TREE_CODE (basetype_path) == TREE_BINFO);
4652 if (!accessible_p (basetype_path, decl, true))
4654 if (TREE_PRIVATE (decl))
4655 error ("%q+#D is private", diag_decl);
4656 else if (TREE_PROTECTED (decl))
4657 error ("%q+#D is protected", diag_decl);
4659 error ("%q+#D is inaccessible", diag_decl);
4660 error ("within this context");
4667 /* Initialize a temporary of type TYPE with EXPR. The FLAGS are a
4668 bitwise or of LOOKUP_* values. If any errors are warnings are
4669 generated, set *DIAGNOSTIC_FN to "error" or "warning",
4670 respectively. If no diagnostics are generated, set *DIAGNOSTIC_FN
4674 build_temp (tree expr, tree type, int flags,
4675 diagnostic_t *diagnostic_kind)
4680 savew = warningcount, savee = errorcount;
4681 args = make_tree_vector_single (expr);
4682 expr = build_special_member_call (NULL_TREE, complete_ctor_identifier,
4683 &args, type, flags, tf_warning_or_error);
4684 release_tree_vector (args);
4685 if (warningcount > savew)
4686 *diagnostic_kind = DK_WARNING;
4687 else if (errorcount > savee)
4688 *diagnostic_kind = DK_ERROR;
4690 *diagnostic_kind = DK_UNSPECIFIED;
4694 /* Perform warnings about peculiar, but valid, conversions from/to NULL.
4695 EXPR is implicitly converted to type TOTYPE.
4696 FN and ARGNUM are used for diagnostics. */
4699 conversion_null_warnings (tree totype, tree expr, tree fn, int argnum)
4701 tree t = non_reference (totype);
4703 /* Issue warnings about peculiar, but valid, uses of NULL. */
4704 if (expr == null_node && TREE_CODE (t) != BOOLEAN_TYPE && ARITHMETIC_TYPE_P (t))
4707 warning (OPT_Wconversion, "passing NULL to non-pointer argument %P of %qD",
4710 warning (OPT_Wconversion, "converting to non-pointer type %qT from NULL", t);
4713 /* Issue warnings if "false" is converted to a NULL pointer */
4714 else if (expr == boolean_false_node && fn && POINTER_TYPE_P (t))
4715 warning (OPT_Wconversion,
4716 "converting %<false%> to pointer type for argument %P of %qD",
4720 /* Perform the conversions in CONVS on the expression EXPR. FN and
4721 ARGNUM are used for diagnostics. ARGNUM is zero based, -1
4722 indicates the `this' argument of a method. INNER is nonzero when
4723 being called to continue a conversion chain. It is negative when a
4724 reference binding will be applied, positive otherwise. If
4725 ISSUE_CONVERSION_WARNINGS is true, warnings about suspicious
4726 conversions will be emitted if appropriate. If C_CAST_P is true,
4727 this conversion is coming from a C-style cast; in that case,
4728 conversions to inaccessible bases are permitted. */
4731 convert_like_real (conversion *convs, tree expr, tree fn, int argnum,
4732 int inner, bool issue_conversion_warnings,
4733 bool c_cast_p, tsubst_flags_t complain)
4735 tree totype = convs->type;
4736 diagnostic_t diag_kind;
4740 && convs->kind != ck_user
4741 && convs->kind != ck_list
4742 && convs->kind != ck_ambig
4743 && convs->kind != ck_ref_bind
4744 && convs->kind != ck_rvalue
4745 && convs->kind != ck_base)
4747 conversion *t = convs;
4749 /* Give a helpful error if this is bad because of excess braces. */
4750 if (BRACE_ENCLOSED_INITIALIZER_P (expr)
4751 && SCALAR_TYPE_P (totype)
4752 && CONSTRUCTOR_NELTS (expr) > 0
4753 && BRACE_ENCLOSED_INITIALIZER_P (CONSTRUCTOR_ELT (expr, 0)->value))
4754 permerror (input_location, "too many braces around initializer for %qT", totype);
4756 for (; t; t = convs->u.next)
4758 if (t->kind == ck_user || !t->bad_p)
4760 expr = convert_like_real (t, expr, fn, argnum, 1,
4761 /*issue_conversion_warnings=*/false,
4766 else if (t->kind == ck_ambig)
4767 return convert_like_real (t, expr, fn, argnum, 1,
4768 /*issue_conversion_warnings=*/false,
4771 else if (t->kind == ck_identity)
4774 if (complain & tf_error)
4776 permerror (input_location, "invalid conversion from %qT to %qT", TREE_TYPE (expr), totype);
4778 permerror (input_location, " initializing argument %P of %qD", argnum, fn);
4781 return error_mark_node;
4783 return cp_convert (totype, expr);
4786 if (issue_conversion_warnings && (complain & tf_warning))
4787 conversion_null_warnings (totype, expr, fn, argnum);
4789 switch (convs->kind)
4793 struct z_candidate *cand = convs->cand;
4794 tree convfn = cand->fn;
4797 /* When converting from an init list we consider explicit
4798 constructors, but actually trying to call one is an error. */
4799 if (DECL_NONCONVERTING_P (convfn) && DECL_CONSTRUCTOR_P (convfn))
4801 if (complain & tf_error)
4802 error ("converting to %qT from initializer list would use "
4803 "explicit constructor %qD", totype, convfn);
4805 return error_mark_node;
4808 /* Set user_conv_p on the argument conversions, so rvalue/base
4809 handling knows not to allow any more UDCs. */
4810 for (i = 0; i < cand->num_convs; ++i)
4811 cand->convs[i]->user_conv_p = true;
4813 expr = build_over_call (cand, LOOKUP_NORMAL, complain);
4815 /* If this is a constructor or a function returning an aggr type,
4816 we need to build up a TARGET_EXPR. */
4817 if (DECL_CONSTRUCTOR_P (convfn))
4819 expr = build_cplus_new (totype, expr);
4821 /* Remember that this was list-initialization. */
4822 if (convs->check_narrowing)
4823 TARGET_EXPR_LIST_INIT_P (expr) = true;
4829 if (BRACE_ENCLOSED_INITIALIZER_P (expr))
4831 int nelts = CONSTRUCTOR_NELTS (expr);
4833 expr = integer_zero_node;
4834 else if (nelts == 1)
4835 expr = CONSTRUCTOR_ELT (expr, 0)->value;
4840 if (type_unknown_p (expr))
4841 expr = instantiate_type (totype, expr, complain);
4842 /* Convert a constant to its underlying value, unless we are
4843 about to bind it to a reference, in which case we need to
4844 leave it as an lvalue. */
4847 expr = decl_constant_value (expr);
4848 if (expr == null_node && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (totype))
4849 /* If __null has been converted to an integer type, we do not
4850 want to warn about uses of EXPR as an integer, rather than
4852 expr = build_int_cst (totype, 0);
4856 /* Call build_user_type_conversion again for the error. */
4857 return build_user_type_conversion
4858 (totype, convs->u.expr, LOOKUP_NORMAL);
4862 /* Conversion to std::initializer_list<T>. */
4863 tree elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (totype), 0);
4864 tree new_ctor = build_constructor (init_list_type_node, NULL);
4865 unsigned len = CONSTRUCTOR_NELTS (expr);
4867 VEC(tree,gc) *parms;
4870 /* Convert all the elements. */
4871 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expr), ix, val)
4873 tree sub = convert_like_real (convs->u.list[ix], val, fn, argnum,
4874 1, false, false, complain);
4875 if (sub == error_mark_node)
4877 check_narrowing (TREE_TYPE (sub), val);
4878 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_ctor), NULL_TREE, sub);
4880 /* Build up the array. */
4881 elttype = cp_build_qualified_type
4882 (elttype, TYPE_QUALS (elttype) | TYPE_QUAL_CONST);
4883 array = build_array_of_n_type (elttype, len);
4884 array = finish_compound_literal (array, new_ctor);
4886 parms = make_tree_vector ();
4887 VEC_safe_push (tree, gc, parms, decay_conversion (array));
4888 VEC_safe_push (tree, gc, parms, size_int (len));
4889 /* Call the private constructor. */
4890 push_deferring_access_checks (dk_no_check);
4891 new_ctor = build_special_member_call
4892 (NULL_TREE, complete_ctor_identifier, &parms, totype, 0, complain);
4893 release_tree_vector (parms);
4894 pop_deferring_access_checks ();
4895 return build_cplus_new (totype, new_ctor);
4899 return get_target_expr (digest_init (totype, expr));
4905 expr = convert_like_real (convs->u.next, expr, fn, argnum,
4906 convs->kind == ck_ref_bind ? -1 : 1,
4907 convs->kind == ck_ref_bind ? issue_conversion_warnings : false,
4910 if (expr == error_mark_node)
4911 return error_mark_node;
4913 switch (convs->kind)
4916 expr = convert_bitfield_to_declared_type (expr);
4917 if (! MAYBE_CLASS_TYPE_P (totype))
4919 /* Else fall through. */
4921 if (convs->kind == ck_base && !convs->need_temporary_p)
4923 /* We are going to bind a reference directly to a base-class
4924 subobject of EXPR. */
4925 /* Build an expression for `*((base*) &expr)'. */
4926 expr = cp_build_unary_op (ADDR_EXPR, expr, 0, complain);
4927 expr = convert_to_base (expr, build_pointer_type (totype),
4928 !c_cast_p, /*nonnull=*/true);
4929 expr = cp_build_indirect_ref (expr, "implicit conversion", complain);
4933 /* Copy-initialization where the cv-unqualified version of the source
4934 type is the same class as, or a derived class of, the class of the
4935 destination [is treated as direct-initialization]. [dcl.init] */
4936 flags = LOOKUP_NORMAL|LOOKUP_ONLYCONVERTING;
4937 if (convs->user_conv_p)
4938 /* This conversion is being done in the context of a user-defined
4939 conversion (i.e. the second step of copy-initialization), so
4940 don't allow any more. */
4941 flags |= LOOKUP_NO_CONVERSION;
4942 expr = build_temp (expr, totype, flags, &diag_kind);
4943 if (diag_kind && fn)
4945 if ((complain & tf_error))
4946 emit_diagnostic (diag_kind, input_location, 0,
4947 " initializing argument %P of %qD", argnum, fn);
4948 else if (diag_kind == DK_ERROR)
4949 return error_mark_node;
4951 return build_cplus_new (totype, expr);
4955 tree ref_type = totype;
4957 /* If necessary, create a temporary.
4959 VA_ARG_EXPR and CONSTRUCTOR expressions are special cases
4960 that need temporaries, even when their types are reference
4961 compatible with the type of reference being bound, so the
4962 upcoming call to cp_build_unary_op (ADDR_EXPR, expr, ...)
4964 if (convs->need_temporary_p
4965 || TREE_CODE (expr) == CONSTRUCTOR
4966 || TREE_CODE (expr) == VA_ARG_EXPR)
4968 tree type = convs->u.next->type;
4969 cp_lvalue_kind lvalue = real_lvalue_p (expr);
4971 if (!CP_TYPE_CONST_NON_VOLATILE_P (TREE_TYPE (ref_type))
4972 && !TYPE_REF_IS_RVALUE (ref_type))
4974 if (complain & tf_error)
4976 /* If the reference is volatile or non-const, we
4977 cannot create a temporary. */
4978 if (lvalue & clk_bitfield)
4979 error ("cannot bind bitfield %qE to %qT",
4981 else if (lvalue & clk_packed)
4982 error ("cannot bind packed field %qE to %qT",
4985 error ("cannot bind rvalue %qE to %qT", expr, ref_type);
4987 return error_mark_node;
4989 /* If the source is a packed field, and we must use a copy
4990 constructor, then building the target expr will require
4991 binding the field to the reference parameter to the
4992 copy constructor, and we'll end up with an infinite
4993 loop. If we can use a bitwise copy, then we'll be
4995 if ((lvalue & clk_packed)
4996 && CLASS_TYPE_P (type)
4997 && !TYPE_HAS_TRIVIAL_INIT_REF (type))
4999 if (complain & tf_error)
5000 error ("cannot bind packed field %qE to %qT",
5002 return error_mark_node;
5004 if (lvalue & clk_bitfield)
5006 expr = convert_bitfield_to_declared_type (expr);
5007 expr = fold_convert (type, expr);
5009 expr = build_target_expr_with_type (expr, type);
5012 /* Take the address of the thing to which we will bind the
5014 expr = cp_build_unary_op (ADDR_EXPR, expr, 1, complain);
5015 if (expr == error_mark_node)
5016 return error_mark_node;
5018 /* Convert it to a pointer to the type referred to by the
5019 reference. This will adjust the pointer if a derived to
5020 base conversion is being performed. */
5021 expr = cp_convert (build_pointer_type (TREE_TYPE (ref_type)),
5023 /* Convert the pointer to the desired reference type. */
5024 return build_nop (ref_type, expr);
5028 return decay_conversion (expr);
5031 /* Warn about deprecated conversion if appropriate. */
5032 string_conv_p (totype, expr, 1);
5037 expr = convert_to_base (expr, totype, !c_cast_p,
5039 return build_nop (totype, expr);
5042 return convert_ptrmem (totype, expr, /*allow_inverse_p=*/false,
5049 if (convs->check_narrowing)
5050 check_narrowing (totype, expr);
5052 if (issue_conversion_warnings && (complain & tf_warning))
5053 expr = convert_and_check (totype, expr);
5055 expr = convert (totype, expr);
5060 /* ARG is being passed to a varargs function. Perform any conversions
5061 required. Return the converted value. */
5064 convert_arg_to_ellipsis (tree arg)
5068 The lvalue-to-rvalue, array-to-pointer, and function-to-pointer
5069 standard conversions are performed. */
5070 arg = decay_conversion (arg);
5073 If the argument has integral or enumeration type that is subject
5074 to the integral promotions (_conv.prom_), or a floating point
5075 type that is subject to the floating point promotion
5076 (_conv.fpprom_), the value of the argument is converted to the
5077 promoted type before the call. */
5078 if (TREE_CODE (TREE_TYPE (arg)) == REAL_TYPE
5079 && (TYPE_PRECISION (TREE_TYPE (arg))
5080 < TYPE_PRECISION (double_type_node)))
5081 arg = convert_to_real (double_type_node, arg);
5082 else if (INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (arg)))
5083 arg = perform_integral_promotions (arg);
5085 arg = require_complete_type (arg);
5087 if (arg != error_mark_node
5088 && (type_has_nontrivial_copy_init (TREE_TYPE (arg))
5089 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (arg))))
5091 /* [expr.call] 5.2.2/7:
5092 Passing a potentially-evaluated argument of class type (Clause 9)
5093 with a non-trivial copy constructor or a non-trivial destructor
5094 with no corresponding parameter is conditionally-supported, with
5095 implementation-defined semantics.
5097 We used to just warn here and do a bitwise copy, but now
5098 cp_expr_size will abort if we try to do that.
5100 If the call appears in the context of a sizeof expression,
5101 it is not potentially-evaluated. */
5102 if (cp_unevaluated_operand == 0)
5103 error ("cannot pass objects of non-trivially-copyable "
5104 "type %q#T through %<...%>", TREE_TYPE (arg));
5110 /* va_arg (EXPR, TYPE) is a builtin. Make sure it is not abused. */
5113 build_x_va_arg (tree expr, tree type)
5115 if (processing_template_decl)
5116 return build_min (VA_ARG_EXPR, type, expr);
5118 type = complete_type_or_else (type, NULL_TREE);
5120 if (expr == error_mark_node || !type)
5121 return error_mark_node;
5123 if (type_has_nontrivial_copy_init (type)
5124 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
5125 || TREE_CODE (type) == REFERENCE_TYPE)
5127 /* Remove reference types so we don't ICE later on. */
5128 tree type1 = non_reference (type);
5129 /* conditionally-supported behavior [expr.call] 5.2.2/7. */
5130 error ("cannot receive objects of non-trivially-copyable type %q#T "
5131 "through %<...%>; ", type);
5132 expr = convert (build_pointer_type (type1), null_node);
5133 expr = cp_build_indirect_ref (expr, NULL, tf_warning_or_error);
5137 return build_va_arg (input_location, expr, type);
5140 /* TYPE has been given to va_arg. Apply the default conversions which
5141 would have happened when passed via ellipsis. Return the promoted
5142 type, or the passed type if there is no change. */
5145 cxx_type_promotes_to (tree type)
5149 /* Perform the array-to-pointer and function-to-pointer
5151 type = type_decays_to (type);
5153 promote = type_promotes_to (type);
5154 if (same_type_p (type, promote))
5160 /* ARG is a default argument expression being passed to a parameter of
5161 the indicated TYPE, which is a parameter to FN. Do any required
5162 conversions. Return the converted value. */
5164 static GTY(()) VEC(tree,gc) *default_arg_context;
5167 convert_default_arg (tree type, tree arg, tree fn, int parmnum)
5172 /* If the ARG is an unparsed default argument expression, the
5173 conversion cannot be performed. */
5174 if (TREE_CODE (arg) == DEFAULT_ARG)
5176 error ("the default argument for parameter %d of %qD has "
5177 "not yet been parsed",
5179 return error_mark_node;
5182 /* Detect recursion. */
5183 for (i = 0; VEC_iterate (tree, default_arg_context, i, t); ++i)
5186 error ("recursive evaluation of default argument for %q#D", fn);
5187 return error_mark_node;
5189 VEC_safe_push (tree, gc, default_arg_context, fn);
5191 if (fn && DECL_TEMPLATE_INFO (fn))
5192 arg = tsubst_default_argument (fn, type, arg);
5198 The names in the expression are bound, and the semantic
5199 constraints are checked, at the point where the default
5200 expressions appears.
5202 we must not perform access checks here. */
5203 push_deferring_access_checks (dk_no_check);
5204 arg = break_out_target_exprs (arg);
5205 if (TREE_CODE (arg) == CONSTRUCTOR)
5207 arg = digest_init (type, arg);
5208 arg = convert_for_initialization (0, type, arg, LOOKUP_NORMAL,
5209 "default argument", fn, parmnum,
5210 tf_warning_or_error);
5214 /* We must make a copy of ARG, in case subsequent processing
5215 alters any part of it. For example, during gimplification a
5216 cast of the form (T) &X::f (where "f" is a member function)
5217 will lead to replacing the PTRMEM_CST for &X::f with a
5218 VAR_DECL. We can avoid the copy for constants, since they
5219 are never modified in place. */
5220 if (!CONSTANT_CLASS_P (arg))
5221 arg = unshare_expr (arg);
5222 arg = convert_for_initialization (0, type, arg, LOOKUP_NORMAL,
5223 "default argument", fn, parmnum,
5224 tf_warning_or_error);
5225 arg = convert_for_arg_passing (type, arg);
5227 pop_deferring_access_checks();
5229 VEC_pop (tree, default_arg_context);
5234 /* Returns the type which will really be used for passing an argument of
5238 type_passed_as (tree type)
5240 /* Pass classes with copy ctors by invisible reference. */
5241 if (TREE_ADDRESSABLE (type))
5243 type = build_reference_type (type);
5244 /* There are no other pointers to this temporary. */
5245 type = build_qualified_type (type, TYPE_QUAL_RESTRICT);
5247 else if (targetm.calls.promote_prototypes (type)
5248 && INTEGRAL_TYPE_P (type)
5249 && COMPLETE_TYPE_P (type)
5250 && INT_CST_LT_UNSIGNED (TYPE_SIZE (type),
5251 TYPE_SIZE (integer_type_node)))
5252 type = integer_type_node;
5257 /* Actually perform the appropriate conversion. */
5260 convert_for_arg_passing (tree type, tree val)
5264 /* If VAL is a bitfield, then -- since it has already been converted
5265 to TYPE -- it cannot have a precision greater than TYPE.
5267 If it has a smaller precision, we must widen it here. For
5268 example, passing "int f:3;" to a function expecting an "int" will
5269 not result in any conversion before this point.
5271 If the precision is the same we must not risk widening. For
5272 example, the COMPONENT_REF for a 32-bit "long long" bitfield will
5273 often have type "int", even though the C++ type for the field is
5274 "long long". If the value is being passed to a function
5275 expecting an "int", then no conversions will be required. But,
5276 if we call convert_bitfield_to_declared_type, the bitfield will
5277 be converted to "long long". */
5278 bitfield_type = is_bitfield_expr_with_lowered_type (val);
5280 && TYPE_PRECISION (TREE_TYPE (val)) < TYPE_PRECISION (type))
5281 val = convert_to_integer (TYPE_MAIN_VARIANT (bitfield_type), val);
5283 if (val == error_mark_node)
5285 /* Pass classes with copy ctors by invisible reference. */
5286 else if (TREE_ADDRESSABLE (type))
5287 val = build1 (ADDR_EXPR, build_reference_type (type), val);
5288 else if (targetm.calls.promote_prototypes (type)
5289 && INTEGRAL_TYPE_P (type)
5290 && COMPLETE_TYPE_P (type)
5291 && INT_CST_LT_UNSIGNED (TYPE_SIZE (type),
5292 TYPE_SIZE (integer_type_node)))
5293 val = perform_integral_promotions (val);
5294 if (warn_missing_format_attribute)
5296 tree rhstype = TREE_TYPE (val);
5297 const enum tree_code coder = TREE_CODE (rhstype);
5298 const enum tree_code codel = TREE_CODE (type);
5299 if ((codel == POINTER_TYPE || codel == REFERENCE_TYPE)
5301 && check_missing_format_attribute (type, rhstype))
5302 warning (OPT_Wmissing_format_attribute,
5303 "argument of function call might be a candidate for a format attribute");
5308 /* Returns true iff FN is a function with magic varargs, i.e. ones for
5309 which no conversions at all should be done. This is true for some
5310 builtins which don't act like normal functions. */
5313 magic_varargs_p (tree fn)
5315 if (DECL_BUILT_IN (fn))
5316 switch (DECL_FUNCTION_CODE (fn))
5318 case BUILT_IN_CLASSIFY_TYPE:
5319 case BUILT_IN_CONSTANT_P:
5320 case BUILT_IN_NEXT_ARG:
5321 case BUILT_IN_VA_START:
5325 return lookup_attribute ("type generic",
5326 TYPE_ATTRIBUTES (TREE_TYPE (fn))) != 0;
5332 /* Subroutine of the various build_*_call functions. Overload resolution
5333 has chosen a winning candidate CAND; build up a CALL_EXPR accordingly.
5334 ARGS is a TREE_LIST of the unconverted arguments to the call. FLAGS is a
5335 bitmask of various LOOKUP_* flags which apply to the call itself. */
5338 build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain)
5341 const VEC(tree,gc) *args = cand->args;
5342 tree first_arg = cand->first_arg;
5343 conversion **convs = cand->convs;
5345 tree parm = TYPE_ARG_TYPES (TREE_TYPE (fn));
5350 unsigned int arg_index = 0;
5354 bool already_used = false;
5356 /* In a template, there is no need to perform all of the work that
5357 is normally done. We are only interested in the type of the call
5358 expression, i.e., the return type of the function. Any semantic
5359 errors will be deferred until the template is instantiated. */
5360 if (processing_template_decl)
5364 const tree *argarray;
5367 return_type = TREE_TYPE (TREE_TYPE (fn));
5368 nargs = VEC_length (tree, args);
5369 if (first_arg == NULL_TREE)
5370 argarray = VEC_address (tree, CONST_CAST (VEC(tree,gc) *, args));
5378 alcarray = XALLOCAVEC (tree, nargs);
5379 alcarray[0] = first_arg;
5380 for (ix = 0; VEC_iterate (tree, args, ix, arg); ++ix)
5381 alcarray[ix + 1] = arg;
5382 argarray = alcarray;
5384 expr = build_call_array_loc (input_location,
5385 return_type, build_addr_func (fn), nargs,
5387 if (TREE_THIS_VOLATILE (fn) && cfun)
5388 current_function_returns_abnormally = 1;
5389 if (!VOID_TYPE_P (return_type))
5390 require_complete_type (return_type);
5391 return convert_from_reference (expr);
5394 /* Give any warnings we noticed during overload resolution. */
5397 struct candidate_warning *w;
5398 for (w = cand->warnings; w; w = w->next)
5399 joust (cand, w->loser, 1);
5402 /* Make =delete work with SFINAE. */
5403 if (DECL_DELETED_FN (fn) && !(complain & tf_error))
5404 return error_mark_node;
5406 if (DECL_FUNCTION_MEMBER_P (fn))
5408 /* If FN is a template function, two cases must be considered.
5413 template <class T> void f();
5415 template <class T> struct B {
5419 struct C : A, B<int> {
5421 using B<int>::g; // #2
5424 In case #1 where `A::f' is a member template, DECL_ACCESS is
5425 recorded in the primary template but not in its specialization.
5426 We check access of FN using its primary template.
5428 In case #2, where `B<int>::g' has a DECL_TEMPLATE_INFO simply
5429 because it is a member of class template B, DECL_ACCESS is
5430 recorded in the specialization `B<int>::g'. We cannot use its
5431 primary template because `B<T>::g' and `B<int>::g' may have
5432 different access. */
5433 if (DECL_TEMPLATE_INFO (fn)
5434 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (fn)))
5435 perform_or_defer_access_check (cand->access_path,
5436 DECL_TI_TEMPLATE (fn), fn);
5438 perform_or_defer_access_check (cand->access_path, fn, fn);
5441 /* Find maximum size of vector to hold converted arguments. */
5442 parmlen = list_length (parm);
5443 nargs = VEC_length (tree, args) + (first_arg != NULL_TREE ? 1 : 0);
5444 if (parmlen > nargs)
5446 argarray = (tree *) alloca (nargs * sizeof (tree));
5448 /* The implicit parameters to a constructor are not considered by overload
5449 resolution, and must be of the proper type. */
5450 if (DECL_CONSTRUCTOR_P (fn))
5452 if (first_arg != NULL_TREE)
5454 argarray[j++] = first_arg;
5455 first_arg = NULL_TREE;
5459 argarray[j++] = VEC_index (tree, args, arg_index);
5462 parm = TREE_CHAIN (parm);
5463 /* We should never try to call the abstract constructor. */
5464 gcc_assert (!DECL_HAS_IN_CHARGE_PARM_P (fn));
5466 if (DECL_HAS_VTT_PARM_P (fn))
5468 argarray[j++] = VEC_index (tree, args, arg_index);
5470 parm = TREE_CHAIN (parm);
5473 /* Bypass access control for 'this' parameter. */
5474 else if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
5476 tree parmtype = TREE_VALUE (parm);
5477 tree arg = (first_arg != NULL_TREE
5479 : VEC_index (tree, args, arg_index));
5480 tree argtype = TREE_TYPE (arg);
5484 if (convs[i]->bad_p)
5486 if (complain & tf_error)
5487 permerror (input_location, "passing %qT as %<this%> argument of %q#D discards qualifiers",
5488 TREE_TYPE (argtype), fn);
5490 return error_mark_node;
5493 /* [class.mfct.nonstatic]: If a nonstatic member function of a class
5494 X is called for an object that is not of type X, or of a type
5495 derived from X, the behavior is undefined.
5497 So we can assume that anything passed as 'this' is non-null, and
5498 optimize accordingly. */
5499 gcc_assert (TREE_CODE (parmtype) == POINTER_TYPE);
5500 /* Convert to the base in which the function was declared. */
5501 gcc_assert (cand->conversion_path != NULL_TREE);
5502 converted_arg = build_base_path (PLUS_EXPR,
5504 cand->conversion_path,
5506 /* Check that the base class is accessible. */
5507 if (!accessible_base_p (TREE_TYPE (argtype),
5508 BINFO_TYPE (cand->conversion_path), true))
5509 error ("%qT is not an accessible base of %qT",
5510 BINFO_TYPE (cand->conversion_path),
5511 TREE_TYPE (argtype));
5512 /* If fn was found by a using declaration, the conversion path
5513 will be to the derived class, not the base declaring fn. We
5514 must convert from derived to base. */
5515 base_binfo = lookup_base (TREE_TYPE (TREE_TYPE (converted_arg)),
5516 TREE_TYPE (parmtype), ba_unique, NULL);
5517 converted_arg = build_base_path (PLUS_EXPR, converted_arg,
5520 argarray[j++] = converted_arg;
5521 parm = TREE_CHAIN (parm);
5522 if (first_arg != NULL_TREE)
5523 first_arg = NULL_TREE;
5530 gcc_assert (first_arg == NULL_TREE);
5531 for (; arg_index < VEC_length (tree, args) && parm;
5532 parm = TREE_CHAIN (parm), ++arg_index, ++i)
5534 tree type = TREE_VALUE (parm);
5538 /* Don't make a copy here if build_call is going to. */
5539 if (conv->kind == ck_rvalue
5540 && COMPLETE_TYPE_P (complete_type (type))
5541 && !TREE_ADDRESSABLE (type))
5542 conv = conv->u.next;
5544 val = convert_like_with_context
5545 (conv, VEC_index (tree, args, arg_index), fn, i - is_method,
5548 val = convert_for_arg_passing (type, val);
5549 if (val == error_mark_node)
5550 return error_mark_node;
5552 argarray[j++] = val;
5555 /* Default arguments */
5556 for (; parm && parm != void_list_node; parm = TREE_CHAIN (parm), i++)
5557 argarray[j++] = convert_default_arg (TREE_VALUE (parm),
5558 TREE_PURPOSE (parm),
5561 for (; arg_index < VEC_length (tree, args); ++arg_index)
5563 tree a = VEC_index (tree, args, arg_index);
5564 if (magic_varargs_p (fn))
5565 /* Do no conversions for magic varargs. */;
5567 a = convert_arg_to_ellipsis (a);
5571 gcc_assert (j <= nargs);
5574 check_function_arguments (TYPE_ATTRIBUTES (TREE_TYPE (fn)),
5575 nargs, argarray, TYPE_ARG_TYPES (TREE_TYPE (fn)));
5577 /* Avoid actually calling copy constructors and copy assignment operators,
5580 if (! flag_elide_constructors)
5581 /* Do things the hard way. */;
5582 else if (cand->num_convs == 1
5583 && (DECL_COPY_CONSTRUCTOR_P (fn)
5584 || DECL_MOVE_CONSTRUCTOR_P (fn)))
5587 tree arg = argarray[num_artificial_parms_for (fn)];
5590 /* Pull out the real argument, disregarding const-correctness. */
5592 while (CONVERT_EXPR_P (targ)
5593 || TREE_CODE (targ) == NON_LVALUE_EXPR)
5594 targ = TREE_OPERAND (targ, 0);
5595 if (TREE_CODE (targ) == ADDR_EXPR)
5597 targ = TREE_OPERAND (targ, 0);
5598 if (!same_type_ignoring_top_level_qualifiers_p
5599 (TREE_TYPE (TREE_TYPE (arg)), TREE_TYPE (targ)))
5608 arg = cp_build_indirect_ref (arg, 0, complain);
5610 if (TREE_CODE (arg) == TARGET_EXPR
5611 && TARGET_EXPR_LIST_INIT_P (arg))
5613 /* Copy-list-initialization doesn't require the copy constructor
5616 /* [class.copy]: the copy constructor is implicitly defined even if
5617 the implementation elided its use. */
5618 else if (TYPE_HAS_COMPLEX_INIT_REF (DECL_CONTEXT (fn)))
5621 already_used = true;
5624 /* If we're creating a temp and we already have one, don't create a
5625 new one. If we're not creating a temp but we get one, use
5626 INIT_EXPR to collapse the temp into our target. Otherwise, if the
5627 ctor is trivial, do a bitwise copy with a simple TARGET_EXPR for a
5628 temp or an INIT_EXPR otherwise. */
5629 fa = (cand->first_arg != NULL_TREE
5631 : VEC_index (tree, args, 0));
5632 if (integer_zerop (fa))
5634 if (TREE_CODE (arg) == TARGET_EXPR)
5636 else if (TYPE_HAS_TRIVIAL_INIT_REF (DECL_CONTEXT (fn)))
5637 return build_target_expr_with_type (arg, DECL_CONTEXT (fn));
5639 else if (TREE_CODE (arg) == TARGET_EXPR
5640 || (TYPE_HAS_TRIVIAL_INIT_REF (DECL_CONTEXT (fn))
5641 && !move_fn_p (fn)))
5643 tree to = stabilize_reference (cp_build_indirect_ref (fa, 0,
5646 val = build2 (INIT_EXPR, DECL_CONTEXT (fn), to, arg);
5650 else if (DECL_OVERLOADED_OPERATOR_P (fn) == NOP_EXPR
5652 && TYPE_HAS_TRIVIAL_ASSIGN_REF (DECL_CONTEXT (fn)))
5654 tree to = stabilize_reference
5655 (cp_build_indirect_ref (argarray[0], 0, complain));
5656 tree type = TREE_TYPE (to);
5657 tree as_base = CLASSTYPE_AS_BASE (type);
5658 tree arg = argarray[1];
5660 if (tree_int_cst_equal (TYPE_SIZE (type), TYPE_SIZE (as_base)))
5662 arg = cp_build_indirect_ref (arg, 0, complain);
5663 val = build2 (MODIFY_EXPR, TREE_TYPE (to), to, arg);
5667 /* We must only copy the non-tail padding parts.
5668 Use __builtin_memcpy for the bitwise copy.
5669 FIXME fix 22488 so we can go back to using MODIFY_EXPR
5670 instead of an explicit call to memcpy. */
5672 tree arg0, arg1, arg2, t;
5673 tree test = NULL_TREE;
5675 arg2 = TYPE_SIZE_UNIT (as_base);
5677 arg0 = cp_build_unary_op (ADDR_EXPR, to, 0, complain);
5679 if (!can_trust_pointer_alignment ())
5681 /* If we can't be sure about pointer alignment, a call
5682 to __builtin_memcpy is expanded as a call to memcpy, which
5683 is invalid with identical args. Otherwise it is
5684 expanded as a block move, which should be safe. */
5685 arg0 = save_expr (arg0);
5686 arg1 = save_expr (arg1);
5687 test = build2 (EQ_EXPR, boolean_type_node, arg0, arg1);
5689 t = implicit_built_in_decls[BUILT_IN_MEMCPY];
5690 t = build_call_n (t, 3, arg0, arg1, arg2);
5692 t = convert (TREE_TYPE (arg0), t);
5694 t = build3 (COND_EXPR, TREE_TYPE (t), test, arg0, t);
5695 val = cp_build_indirect_ref (t, 0, complain);
5696 TREE_NO_WARNING (val) = 1;
5705 if (DECL_VINDEX (fn) && (flags & LOOKUP_NONVIRTUAL) == 0)
5708 tree binfo = lookup_base (TREE_TYPE (TREE_TYPE (argarray[0])),
5711 gcc_assert (binfo && binfo != error_mark_node);
5713 /* Warn about deprecated virtual functions now, since we're about
5714 to throw away the decl. */
5715 if (TREE_DEPRECATED (fn))
5716 warn_deprecated_use (fn, NULL_TREE);
5718 argarray[0] = build_base_path (PLUS_EXPR, argarray[0], binfo, 1);
5719 if (TREE_SIDE_EFFECTS (argarray[0]))
5720 argarray[0] = save_expr (argarray[0]);
5721 t = build_pointer_type (TREE_TYPE (fn));
5722 if (DECL_CONTEXT (fn) && TYPE_JAVA_INTERFACE (DECL_CONTEXT (fn)))
5723 fn = build_java_interface_fn_ref (fn, argarray[0]);
5725 fn = build_vfn_ref (argarray[0], DECL_VINDEX (fn));
5729 fn = build_addr_func (fn);
5731 return build_cxx_call (fn, nargs, argarray);
5734 /* Build and return a call to FN, using NARGS arguments in ARGARRAY.
5735 This function performs no overload resolution, conversion, or other
5736 high-level operations. */
5739 build_cxx_call (tree fn, int nargs, tree *argarray)
5743 fn = build_call_a (fn, nargs, argarray);
5745 /* If this call might throw an exception, note that fact. */
5746 fndecl = get_callee_fndecl (fn);
5747 if ((!fndecl || !TREE_NOTHROW (fndecl))
5748 && at_function_scope_p ()
5750 cp_function_chain->can_throw = 1;
5752 /* Check that arguments to builtin functions match the expectations. */
5754 && DECL_BUILT_IN (fndecl)
5755 && DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_NORMAL
5756 && !check_builtin_function_arguments (fndecl, nargs, argarray))
5757 return error_mark_node;
5759 /* Some built-in function calls will be evaluated at compile-time in
5761 fn = fold_if_not_in_template (fn);
5763 if (VOID_TYPE_P (TREE_TYPE (fn)))
5766 fn = require_complete_type (fn);
5767 if (fn == error_mark_node)
5768 return error_mark_node;
5770 if (MAYBE_CLASS_TYPE_P (TREE_TYPE (fn)))
5771 fn = build_cplus_new (TREE_TYPE (fn), fn);
5772 return convert_from_reference (fn);
5775 static GTY(()) tree java_iface_lookup_fn;
5777 /* Make an expression which yields the address of the Java interface
5778 method FN. This is achieved by generating a call to libjava's
5779 _Jv_LookupInterfaceMethodIdx(). */
5782 build_java_interface_fn_ref (tree fn, tree instance)
5784 tree lookup_fn, method, idx;
5785 tree klass_ref, iface, iface_ref;
5788 if (!java_iface_lookup_fn)
5790 tree endlink = build_void_list_node ();
5791 tree t = tree_cons (NULL_TREE, ptr_type_node,
5792 tree_cons (NULL_TREE, ptr_type_node,
5793 tree_cons (NULL_TREE, java_int_type_node,
5795 java_iface_lookup_fn
5796 = add_builtin_function ("_Jv_LookupInterfaceMethodIdx",
5797 build_function_type (ptr_type_node, t),
5798 0, NOT_BUILT_IN, NULL, NULL_TREE);
5801 /* Look up the pointer to the runtime java.lang.Class object for `instance'.
5802 This is the first entry in the vtable. */
5803 klass_ref = build_vtbl_ref (cp_build_indirect_ref (instance, 0,
5804 tf_warning_or_error),
5807 /* Get the java.lang.Class pointer for the interface being called. */
5808 iface = DECL_CONTEXT (fn);
5809 iface_ref = lookup_field (iface, get_identifier ("class$"), 0, false);
5810 if (!iface_ref || TREE_CODE (iface_ref) != VAR_DECL
5811 || DECL_CONTEXT (iface_ref) != iface)
5813 error ("could not find class$ field in java interface type %qT",
5815 return error_mark_node;
5817 iface_ref = build_address (iface_ref);
5818 iface_ref = convert (build_pointer_type (iface), iface_ref);
5820 /* Determine the itable index of FN. */
5822 for (method = TYPE_METHODS (iface); method; method = TREE_CHAIN (method))
5824 if (!DECL_VIRTUAL_P (method))
5830 idx = build_int_cst (NULL_TREE, i);
5832 lookup_fn = build1 (ADDR_EXPR,
5833 build_pointer_type (TREE_TYPE (java_iface_lookup_fn)),
5834 java_iface_lookup_fn);
5835 return build_call_nary (ptr_type_node, lookup_fn,
5836 3, klass_ref, iface_ref, idx);
5839 /* Returns the value to use for the in-charge parameter when making a
5840 call to a function with the indicated NAME.
5842 FIXME:Can't we find a neater way to do this mapping? */
5845 in_charge_arg_for_name (tree name)
5847 if (name == base_ctor_identifier
5848 || name == base_dtor_identifier)
5849 return integer_zero_node;
5850 else if (name == complete_ctor_identifier)
5851 return integer_one_node;
5852 else if (name == complete_dtor_identifier)
5853 return integer_two_node;
5854 else if (name == deleting_dtor_identifier)
5855 return integer_three_node;
5857 /* This function should only be called with one of the names listed
5863 /* Build a call to a constructor, destructor, or an assignment
5864 operator for INSTANCE, an expression with class type. NAME
5865 indicates the special member function to call; *ARGS are the
5866 arguments. ARGS may be NULL. This may change ARGS. BINFO
5867 indicates the base of INSTANCE that is to be passed as the `this'
5868 parameter to the member function called.
5870 FLAGS are the LOOKUP_* flags to use when processing the call.
5872 If NAME indicates a complete object constructor, INSTANCE may be
5873 NULL_TREE. In this case, the caller will call build_cplus_new to
5874 store the newly constructed object into a VAR_DECL. */
5877 build_special_member_call (tree instance, tree name, VEC(tree,gc) **args,
5878 tree binfo, int flags, tsubst_flags_t complain)
5881 /* The type of the subobject to be constructed or destroyed. */
5883 VEC(tree,gc) *allocated = NULL;
5886 gcc_assert (name == complete_ctor_identifier
5887 || name == base_ctor_identifier
5888 || name == complete_dtor_identifier
5889 || name == base_dtor_identifier
5890 || name == deleting_dtor_identifier
5891 || name == ansi_assopname (NOP_EXPR));
5894 /* Resolve the name. */
5895 if (!complete_type_or_else (binfo, NULL_TREE))
5896 return error_mark_node;
5898 binfo = TYPE_BINFO (binfo);
5901 gcc_assert (binfo != NULL_TREE);
5903 class_type = BINFO_TYPE (binfo);
5905 /* Handle the special case where INSTANCE is NULL_TREE. */
5906 if (name == complete_ctor_identifier && !instance)
5908 instance = build_int_cst (build_pointer_type (class_type), 0);
5909 instance = build1 (INDIRECT_REF, class_type, instance);
5913 if (name == complete_dtor_identifier
5914 || name == base_dtor_identifier
5915 || name == deleting_dtor_identifier)
5916 gcc_assert (args == NULL || VEC_empty (tree, *args));
5918 /* Convert to the base class, if necessary. */
5919 if (!same_type_ignoring_top_level_qualifiers_p
5920 (TREE_TYPE (instance), BINFO_TYPE (binfo)))
5922 if (name != ansi_assopname (NOP_EXPR))
5923 /* For constructors and destructors, either the base is
5924 non-virtual, or it is virtual but we are doing the
5925 conversion from a constructor or destructor for the
5926 complete object. In either case, we can convert
5928 instance = convert_to_base_statically (instance, binfo);
5930 /* However, for assignment operators, we must convert
5931 dynamically if the base is virtual. */
5932 instance = build_base_path (PLUS_EXPR, instance,
5933 binfo, /*nonnull=*/1);
5937 gcc_assert (instance != NULL_TREE);
5939 fns = lookup_fnfields (binfo, name, 1);
5941 /* When making a call to a constructor or destructor for a subobject
5942 that uses virtual base classes, pass down a pointer to a VTT for
5944 if ((name == base_ctor_identifier
5945 || name == base_dtor_identifier)
5946 && CLASSTYPE_VBASECLASSES (class_type))
5951 /* If the current function is a complete object constructor
5952 or destructor, then we fetch the VTT directly.
5953 Otherwise, we look it up using the VTT we were given. */
5954 vtt = TREE_CHAIN (CLASSTYPE_VTABLES (current_class_type));
5955 vtt = decay_conversion (vtt);
5956 vtt = build3 (COND_EXPR, TREE_TYPE (vtt),
5957 build2 (EQ_EXPR, boolean_type_node,
5958 current_in_charge_parm, integer_zero_node),
5961 gcc_assert (BINFO_SUBVTT_INDEX (binfo));
5962 sub_vtt = build2 (POINTER_PLUS_EXPR, TREE_TYPE (vtt), vtt,
5963 BINFO_SUBVTT_INDEX (binfo));
5967 allocated = make_tree_vector ();
5971 VEC_safe_insert (tree, gc, *args, 0, sub_vtt);
5974 ret = build_new_method_call (instance, fns, args,
5975 TYPE_BINFO (BINFO_TYPE (binfo)),
5979 if (allocated != NULL)
5980 release_tree_vector (allocated);
5985 /* Return the NAME, as a C string. The NAME indicates a function that
5986 is a member of TYPE. *FREE_P is set to true if the caller must
5987 free the memory returned.
5989 Rather than go through all of this, we should simply set the names
5990 of constructors and destructors appropriately, and dispense with
5991 ctor_identifier, dtor_identifier, etc. */
5994 name_as_c_string (tree name, tree type, bool *free_p)
5998 /* Assume that we will not allocate memory. */
6000 /* Constructors and destructors are special. */
6001 if (IDENTIFIER_CTOR_OR_DTOR_P (name))
6004 = CONST_CAST (char *, identifier_to_locale (IDENTIFIER_POINTER (constructor_name (type))));
6005 /* For a destructor, add the '~'. */
6006 if (name == complete_dtor_identifier
6007 || name == base_dtor_identifier
6008 || name == deleting_dtor_identifier)
6010 pretty_name = concat ("~", pretty_name, NULL);
6011 /* Remember that we need to free the memory allocated. */
6015 else if (IDENTIFIER_TYPENAME_P (name))
6017 pretty_name = concat ("operator ",
6018 type_as_string_translate (TREE_TYPE (name),
6019 TFF_PLAIN_IDENTIFIER),
6021 /* Remember that we need to free the memory allocated. */
6025 pretty_name = CONST_CAST (char *, identifier_to_locale (IDENTIFIER_POINTER (name)));
6030 /* Build a call to "INSTANCE.FN (ARGS)". If FN_P is non-NULL, it will
6031 be set, upon return, to the function called. ARGS may be NULL.
6032 This may change ARGS. */
6035 build_new_method_call (tree instance, tree fns, VEC(tree,gc) **args,
6036 tree conversion_path, int flags,
6037 tree *fn_p, tsubst_flags_t complain)
6039 struct z_candidate *candidates = 0, *cand;
6040 tree explicit_targs = NULL_TREE;
6041 tree basetype = NULL_TREE;
6044 tree first_mem_arg = NULL_TREE;
6047 bool skip_first_for_error;
6048 VEC(tree,gc) *user_args;
6052 int template_only = 0;
6056 VEC(tree,gc) *orig_args = NULL;
6059 gcc_assert (instance != NULL_TREE);
6061 /* We don't know what function we're going to call, yet. */
6065 if (error_operand_p (instance)
6066 || error_operand_p (fns))
6067 return error_mark_node;
6069 if (!BASELINK_P (fns))
6071 if (complain & tf_error)
6072 error ("call to non-function %qD", fns);
6073 return error_mark_node;
6076 orig_instance = instance;
6079 /* Dismantle the baselink to collect all the information we need. */
6080 if (!conversion_path)
6081 conversion_path = BASELINK_BINFO (fns);
6082 access_binfo = BASELINK_ACCESS_BINFO (fns);
6083 optype = BASELINK_OPTYPE (fns);
6084 fns = BASELINK_FUNCTIONS (fns);
6085 if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
6087 explicit_targs = TREE_OPERAND (fns, 1);
6088 fns = TREE_OPERAND (fns, 0);
6091 gcc_assert (TREE_CODE (fns) == FUNCTION_DECL
6092 || TREE_CODE (fns) == TEMPLATE_DECL
6093 || TREE_CODE (fns) == OVERLOAD);
6094 fn = get_first_fn (fns);
6095 name = DECL_NAME (fn);
6097 basetype = TYPE_MAIN_VARIANT (TREE_TYPE (instance));
6098 gcc_assert (CLASS_TYPE_P (basetype));
6100 if (processing_template_decl)
6102 orig_args = args == NULL ? NULL : make_tree_vector_copy (*args);
6103 instance = build_non_dependent_expr (instance);
6105 make_args_non_dependent (*args);
6108 /* Figure out whether to skip the first argument for the error
6109 message we will display to users if an error occurs. We don't
6110 want to display any compiler-generated arguments. The "this"
6111 pointer hasn't been added yet. However, we must remove the VTT
6112 pointer if this is a call to a base-class constructor or
6114 skip_first_for_error = false;
6115 user_args = args == NULL ? NULL : *args;
6116 if (IDENTIFIER_CTOR_OR_DTOR_P (name))
6118 /* Callers should explicitly indicate whether they want to construct
6119 the complete object or just the part without virtual bases. */
6120 gcc_assert (name != ctor_identifier);
6121 /* Similarly for destructors. */
6122 gcc_assert (name != dtor_identifier);
6123 /* Remove the VTT pointer, if present. */
6124 if ((name == base_ctor_identifier || name == base_dtor_identifier)
6125 && CLASSTYPE_VBASECLASSES (basetype))
6126 skip_first_for_error = true;
6129 /* Process the argument list. */
6130 if (args != NULL && *args != NULL)
6132 *args = resolve_args (*args);
6134 return error_mark_node;
6137 instance_ptr = build_this (instance);
6139 /* It's OK to call destructors and constructors on cv-qualified objects.
6140 Therefore, convert the INSTANCE_PTR to the unqualified type, if
6142 if (DECL_DESTRUCTOR_P (fn)
6143 || DECL_CONSTRUCTOR_P (fn))
6145 tree type = build_pointer_type (basetype);
6146 if (!same_type_p (type, TREE_TYPE (instance_ptr)))
6147 instance_ptr = build_nop (type, instance_ptr);
6149 if (DECL_DESTRUCTOR_P (fn))
6150 name = complete_dtor_identifier;
6152 /* If CONSTRUCTOR_IS_DIRECT_INIT is set, this was a T{ } form
6153 initializer, not T({ }). If the type doesn't have a list ctor,
6154 break apart the list into separate ctor args. */
6155 if (DECL_CONSTRUCTOR_P (fn) && args != NULL && !VEC_empty (tree, *args)
6156 && BRACE_ENCLOSED_INITIALIZER_P (VEC_index (tree, *args, 0))
6157 && CONSTRUCTOR_IS_DIRECT_INIT (VEC_index (tree, *args, 0))
6158 && !TYPE_HAS_LIST_CTOR (basetype))
6160 gcc_assert (VEC_length (tree, *args) == 1);
6161 *args = ctor_to_vec (VEC_index (tree, *args, 0));
6164 class_type = (conversion_path ? BINFO_TYPE (conversion_path) : NULL_TREE);
6165 first_mem_arg = instance_ptr;
6167 /* Get the high-water mark for the CONVERSION_OBSTACK. */
6168 p = conversion_obstack_alloc (0);
6170 for (fn = fns; fn; fn = OVL_NEXT (fn))
6172 tree t = OVL_CURRENT (fn);
6173 tree this_first_arg;
6175 /* We can end up here for copy-init of same or base class. */
6176 if ((flags & LOOKUP_ONLYCONVERTING)
6177 && DECL_NONCONVERTING_P (t))
6180 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (t))
6181 this_first_arg = first_mem_arg;
6183 this_first_arg = NULL_TREE;
6185 if (TREE_CODE (t) == TEMPLATE_DECL)
6186 /* A member template. */
6187 add_template_candidate (&candidates, t,
6191 args == NULL ? NULL : *args,
6197 else if (! template_only)
6198 add_function_candidate (&candidates, t,
6201 args == NULL ? NULL : *args,
6207 candidates = splice_viable (candidates, pedantic, &any_viable_p);
6210 if (complain & tf_error)
6212 if (!COMPLETE_TYPE_P (basetype))
6213 cxx_incomplete_type_error (instance_ptr, basetype);
6220 pretty_name = name_as_c_string (name, basetype, &free_p);
6221 arglist = build_tree_list_vec (user_args);
6222 if (skip_first_for_error)
6223 arglist = TREE_CHAIN (arglist);
6224 error ("no matching function for call to %<%T::%s(%A)%#V%>",
6225 basetype, pretty_name, arglist,
6226 TREE_TYPE (TREE_TYPE (instance_ptr)));
6230 print_z_candidates (candidates);
6232 call = error_mark_node;
6236 cand = tourney (candidates);
6243 if (complain & tf_error)
6245 pretty_name = name_as_c_string (name, basetype, &free_p);
6246 arglist = build_tree_list_vec (user_args);
6247 if (skip_first_for_error)
6248 arglist = TREE_CHAIN (arglist);
6249 error ("call of overloaded %<%s(%A)%> is ambiguous", pretty_name,
6251 print_z_candidates (candidates);
6255 call = error_mark_node;
6261 if (!(flags & LOOKUP_NONVIRTUAL)
6262 && DECL_PURE_VIRTUAL_P (fn)
6263 && instance == current_class_ref
6264 && (DECL_CONSTRUCTOR_P (current_function_decl)
6265 || DECL_DESTRUCTOR_P (current_function_decl))
6266 && (complain & tf_warning))
6267 /* This is not an error, it is runtime undefined
6269 warning (0, (DECL_CONSTRUCTOR_P (current_function_decl) ?
6270 "abstract virtual %q#D called from constructor"
6271 : "abstract virtual %q#D called from destructor"),
6274 if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE
6275 && is_dummy_object (instance_ptr))
6277 if (complain & tf_error)
6278 error ("cannot call member function %qD without object",
6280 call = error_mark_node;
6284 if (DECL_VINDEX (fn) && ! (flags & LOOKUP_NONVIRTUAL)
6285 && resolves_to_fixed_type_p (instance, 0))
6286 flags |= LOOKUP_NONVIRTUAL;
6287 /* Now we know what function is being called. */
6290 /* Build the actual CALL_EXPR. */
6291 call = build_over_call (cand, flags, complain);
6292 /* In an expression of the form `a->f()' where `f' turns
6293 out to be a static member function, `a' is
6294 none-the-less evaluated. */
6295 if (TREE_CODE (TREE_TYPE (fn)) != METHOD_TYPE
6296 && !is_dummy_object (instance_ptr)
6297 && TREE_SIDE_EFFECTS (instance_ptr))
6298 call = build2 (COMPOUND_EXPR, TREE_TYPE (call),
6299 instance_ptr, call);
6300 else if (call != error_mark_node
6301 && DECL_DESTRUCTOR_P (cand->fn)
6302 && !VOID_TYPE_P (TREE_TYPE (call)))
6303 /* An explicit call of the form "x->~X()" has type
6304 "void". However, on platforms where destructors
6305 return "this" (i.e., those where
6306 targetm.cxx.cdtor_returns_this is true), such calls
6307 will appear to have a return value of pointer type
6308 to the low-level call machinery. We do not want to
6309 change the low-level machinery, since we want to be
6310 able to optimize "delete f()" on such platforms as
6311 "operator delete(~X(f()))" (rather than generating
6312 "t = f(), ~X(t), operator delete (t)"). */
6313 call = build_nop (void_type_node, call);
6318 if (processing_template_decl && call != error_mark_node)
6320 bool cast_to_void = false;
6322 if (TREE_CODE (call) == COMPOUND_EXPR)
6323 call = TREE_OPERAND (call, 1);
6324 else if (TREE_CODE (call) == NOP_EXPR)
6326 cast_to_void = true;
6327 call = TREE_OPERAND (call, 0);
6329 if (TREE_CODE (call) == INDIRECT_REF)
6330 call = TREE_OPERAND (call, 0);
6331 call = (build_min_non_dep_call_vec
6333 build_min (COMPONENT_REF, TREE_TYPE (CALL_EXPR_FN (call)),
6334 orig_instance, orig_fns, NULL_TREE),
6336 call = convert_from_reference (call);
6338 call = build_nop (void_type_node, call);
6341 /* Free all the conversions we allocated. */
6342 obstack_free (&conversion_obstack, p);
6344 if (orig_args != NULL)
6345 release_tree_vector (orig_args);
6350 /* Returns true iff standard conversion sequence ICS1 is a proper
6351 subsequence of ICS2. */
6354 is_subseq (conversion *ics1, conversion *ics2)
6356 /* We can assume that a conversion of the same code
6357 between the same types indicates a subsequence since we only get
6358 here if the types we are converting from are the same. */
6360 while (ics1->kind == ck_rvalue
6361 || ics1->kind == ck_lvalue)
6362 ics1 = ics1->u.next;
6366 while (ics2->kind == ck_rvalue
6367 || ics2->kind == ck_lvalue)
6368 ics2 = ics2->u.next;
6370 if (ics2->kind == ck_user
6371 || ics2->kind == ck_ambig
6372 || ics2->kind == ck_identity)
6373 /* At this point, ICS1 cannot be a proper subsequence of
6374 ICS2. We can get a USER_CONV when we are comparing the
6375 second standard conversion sequence of two user conversion
6379 ics2 = ics2->u.next;
6381 if (ics2->kind == ics1->kind
6382 && same_type_p (ics2->type, ics1->type)
6383 && same_type_p (ics2->u.next->type,
6384 ics1->u.next->type))
6389 /* Returns nonzero iff DERIVED is derived from BASE. The inputs may
6390 be any _TYPE nodes. */
6393 is_properly_derived_from (tree derived, tree base)
6395 if (!CLASS_TYPE_P (derived) || !CLASS_TYPE_P (base))
6398 /* We only allow proper derivation here. The DERIVED_FROM_P macro
6399 considers every class derived from itself. */
6400 return (!same_type_ignoring_top_level_qualifiers_p (derived, base)
6401 && DERIVED_FROM_P (base, derived));
6404 /* We build the ICS for an implicit object parameter as a pointer
6405 conversion sequence. However, such a sequence should be compared
6406 as if it were a reference conversion sequence. If ICS is the
6407 implicit conversion sequence for an implicit object parameter,
6408 modify it accordingly. */
6411 maybe_handle_implicit_object (conversion **ics)
6415 /* [over.match.funcs]
6417 For non-static member functions, the type of the
6418 implicit object parameter is "reference to cv X"
6419 where X is the class of which the function is a
6420 member and cv is the cv-qualification on the member
6421 function declaration. */
6422 conversion *t = *ics;
6423 tree reference_type;
6425 /* The `this' parameter is a pointer to a class type. Make the
6426 implicit conversion talk about a reference to that same class
6428 reference_type = TREE_TYPE (t->type);
6429 reference_type = build_reference_type (reference_type);
6431 if (t->kind == ck_qual)
6433 if (t->kind == ck_ptr)
6435 t = build_identity_conv (TREE_TYPE (t->type), NULL_TREE);
6436 t = direct_reference_binding (reference_type, t);
6438 t->rvaluedness_matches_p = 0;
6443 /* If *ICS is a REF_BIND set *ICS to the remainder of the conversion,
6444 and return the initial reference binding conversion. Otherwise,
6445 leave *ICS unchanged and return NULL. */
6448 maybe_handle_ref_bind (conversion **ics)
6450 if ((*ics)->kind == ck_ref_bind)
6452 conversion *old_ics = *ics;
6453 *ics = old_ics->u.next;
6454 (*ics)->user_conv_p = old_ics->user_conv_p;
6455 (*ics)->bad_p = old_ics->bad_p;
6462 /* Compare two implicit conversion sequences according to the rules set out in
6463 [over.ics.rank]. Return values:
6465 1: ics1 is better than ics2
6466 -1: ics2 is better than ics1
6467 0: ics1 and ics2 are indistinguishable */
6470 compare_ics (conversion *ics1, conversion *ics2)
6476 tree deref_from_type1 = NULL_TREE;
6477 tree deref_from_type2 = NULL_TREE;
6478 tree deref_to_type1 = NULL_TREE;
6479 tree deref_to_type2 = NULL_TREE;
6480 conversion_rank rank1, rank2;
6482 /* REF_BINDING is nonzero if the result of the conversion sequence
6483 is a reference type. In that case REF_CONV is the reference
6484 binding conversion. */
6485 conversion *ref_conv1;
6486 conversion *ref_conv2;
6488 /* Handle implicit object parameters. */
6489 maybe_handle_implicit_object (&ics1);
6490 maybe_handle_implicit_object (&ics2);
6492 /* Handle reference parameters. */
6493 ref_conv1 = maybe_handle_ref_bind (&ics1);
6494 ref_conv2 = maybe_handle_ref_bind (&ics2);
6496 /* List-initialization sequence L1 is a better conversion sequence than
6497 list-initialization sequence L2 if L1 converts to
6498 std::initializer_list<X> for some X and L2 does not. */
6499 if (ics1->kind == ck_list && ics2->kind != ck_list)
6501 if (ics2->kind == ck_list && ics1->kind != ck_list)
6506 When comparing the basic forms of implicit conversion sequences (as
6507 defined in _over.best.ics_)
6509 --a standard conversion sequence (_over.ics.scs_) is a better
6510 conversion sequence than a user-defined conversion sequence
6511 or an ellipsis conversion sequence, and
6513 --a user-defined conversion sequence (_over.ics.user_) is a
6514 better conversion sequence than an ellipsis conversion sequence
6515 (_over.ics.ellipsis_). */
6516 rank1 = CONVERSION_RANK (ics1);
6517 rank2 = CONVERSION_RANK (ics2);
6521 else if (rank1 < rank2)
6524 if (rank1 == cr_bad)
6526 /* XXX Isn't this an extension? */
6527 /* Both ICS are bad. We try to make a decision based on what
6528 would have happened if they'd been good. */
6529 if (ics1->user_conv_p > ics2->user_conv_p
6530 || ics1->rank > ics2->rank)
6532 else if (ics1->user_conv_p < ics2->user_conv_p
6533 || ics1->rank < ics2->rank)
6536 /* We couldn't make up our minds; try to figure it out below. */
6539 if (ics1->ellipsis_p)
6540 /* Both conversions are ellipsis conversions. */
6543 /* User-defined conversion sequence U1 is a better conversion sequence
6544 than another user-defined conversion sequence U2 if they contain the
6545 same user-defined conversion operator or constructor and if the sec-
6546 ond standard conversion sequence of U1 is better than the second
6547 standard conversion sequence of U2. */
6549 if (ics1->user_conv_p)
6554 for (t1 = ics1; t1->kind != ck_user; t1 = t1->u.next)
6555 if (t1->kind == ck_ambig || t1->kind == ck_aggr)
6557 for (t2 = ics2; t2->kind != ck_user; t2 = t2->u.next)
6558 if (t2->kind == ck_ambig || t2->kind == ck_aggr)
6561 if (t1->cand->fn != t2->cand->fn)
6564 /* We can just fall through here, after setting up
6565 FROM_TYPE1 and FROM_TYPE2. */
6566 from_type1 = t1->type;
6567 from_type2 = t2->type;
6574 /* We're dealing with two standard conversion sequences.
6578 Standard conversion sequence S1 is a better conversion
6579 sequence than standard conversion sequence S2 if
6581 --S1 is a proper subsequence of S2 (comparing the conversion
6582 sequences in the canonical form defined by _over.ics.scs_,
6583 excluding any Lvalue Transformation; the identity
6584 conversion sequence is considered to be a subsequence of
6585 any non-identity conversion sequence */
6588 while (t1->kind != ck_identity)
6590 from_type1 = t1->type;
6593 while (t2->kind != ck_identity)
6595 from_type2 = t2->type;
6598 /* One sequence can only be a subsequence of the other if they start with
6599 the same type. They can start with different types when comparing the
6600 second standard conversion sequence in two user-defined conversion
6602 if (same_type_p (from_type1, from_type2))
6604 if (is_subseq (ics1, ics2))
6606 if (is_subseq (ics2, ics1))
6614 --the rank of S1 is better than the rank of S2 (by the rules
6617 Standard conversion sequences are ordered by their ranks: an Exact
6618 Match is a better conversion than a Promotion, which is a better
6619 conversion than a Conversion.
6621 Two conversion sequences with the same rank are indistinguishable
6622 unless one of the following rules applies:
6624 --A conversion that is not a conversion of a pointer, or pointer
6625 to member, to bool is better than another conversion that is such
6628 The ICS_STD_RANK automatically handles the pointer-to-bool rule,
6629 so that we do not have to check it explicitly. */
6630 if (ics1->rank < ics2->rank)
6632 else if (ics2->rank < ics1->rank)
6635 to_type1 = ics1->type;
6636 to_type2 = ics2->type;
6638 /* A conversion from scalar arithmetic type to complex is worse than a
6639 conversion between scalar arithmetic types. */
6640 if (same_type_p (from_type1, from_type2)
6641 && ARITHMETIC_TYPE_P (from_type1)
6642 && ARITHMETIC_TYPE_P (to_type1)
6643 && ARITHMETIC_TYPE_P (to_type2)
6644 && ((TREE_CODE (to_type1) == COMPLEX_TYPE)
6645 != (TREE_CODE (to_type2) == COMPLEX_TYPE)))
6647 if (TREE_CODE (to_type1) == COMPLEX_TYPE)
6653 if (TYPE_PTR_P (from_type1)
6654 && TYPE_PTR_P (from_type2)
6655 && TYPE_PTR_P (to_type1)
6656 && TYPE_PTR_P (to_type2))
6658 deref_from_type1 = TREE_TYPE (from_type1);
6659 deref_from_type2 = TREE_TYPE (from_type2);
6660 deref_to_type1 = TREE_TYPE (to_type1);
6661 deref_to_type2 = TREE_TYPE (to_type2);
6663 /* The rules for pointers to members A::* are just like the rules
6664 for pointers A*, except opposite: if B is derived from A then
6665 A::* converts to B::*, not vice versa. For that reason, we
6666 switch the from_ and to_ variables here. */
6667 else if ((TYPE_PTRMEM_P (from_type1) && TYPE_PTRMEM_P (from_type2)
6668 && TYPE_PTRMEM_P (to_type1) && TYPE_PTRMEM_P (to_type2))
6669 || (TYPE_PTRMEMFUNC_P (from_type1)
6670 && TYPE_PTRMEMFUNC_P (from_type2)
6671 && TYPE_PTRMEMFUNC_P (to_type1)
6672 && TYPE_PTRMEMFUNC_P (to_type2)))
6674 deref_to_type1 = TYPE_PTRMEM_CLASS_TYPE (from_type1);
6675 deref_to_type2 = TYPE_PTRMEM_CLASS_TYPE (from_type2);
6676 deref_from_type1 = TYPE_PTRMEM_CLASS_TYPE (to_type1);
6677 deref_from_type2 = TYPE_PTRMEM_CLASS_TYPE (to_type2);
6680 if (deref_from_type1 != NULL_TREE
6681 && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_from_type1))
6682 && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_from_type2)))
6684 /* This was one of the pointer or pointer-like conversions.
6688 --If class B is derived directly or indirectly from class A,
6689 conversion of B* to A* is better than conversion of B* to
6690 void*, and conversion of A* to void* is better than
6691 conversion of B* to void*. */
6692 if (TREE_CODE (deref_to_type1) == VOID_TYPE
6693 && TREE_CODE (deref_to_type2) == VOID_TYPE)
6695 if (is_properly_derived_from (deref_from_type1,
6698 else if (is_properly_derived_from (deref_from_type2,
6702 else if (TREE_CODE (deref_to_type1) == VOID_TYPE
6703 || TREE_CODE (deref_to_type2) == VOID_TYPE)
6705 if (same_type_p (deref_from_type1, deref_from_type2))
6707 if (TREE_CODE (deref_to_type2) == VOID_TYPE)
6709 if (is_properly_derived_from (deref_from_type1,
6713 /* We know that DEREF_TO_TYPE1 is `void' here. */
6714 else if (is_properly_derived_from (deref_from_type1,
6719 else if (RECORD_OR_UNION_CODE_P (TREE_CODE (deref_to_type1))
6720 && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_to_type2)))
6724 --If class B is derived directly or indirectly from class A
6725 and class C is derived directly or indirectly from B,
6727 --conversion of C* to B* is better than conversion of C* to
6730 --conversion of B* to A* is better than conversion of C* to
6732 if (same_type_p (deref_from_type1, deref_from_type2))
6734 if (is_properly_derived_from (deref_to_type1,
6737 else if (is_properly_derived_from (deref_to_type2,
6741 else if (same_type_p (deref_to_type1, deref_to_type2))
6743 if (is_properly_derived_from (deref_from_type2,
6746 else if (is_properly_derived_from (deref_from_type1,
6752 else if (CLASS_TYPE_P (non_reference (from_type1))
6753 && same_type_p (from_type1, from_type2))
6755 tree from = non_reference (from_type1);
6759 --binding of an expression of type C to a reference of type
6760 B& is better than binding an expression of type C to a
6761 reference of type A&
6763 --conversion of C to B is better than conversion of C to A, */
6764 if (is_properly_derived_from (from, to_type1)
6765 && is_properly_derived_from (from, to_type2))
6767 if (is_properly_derived_from (to_type1, to_type2))
6769 else if (is_properly_derived_from (to_type2, to_type1))
6773 else if (CLASS_TYPE_P (non_reference (to_type1))
6774 && same_type_p (to_type1, to_type2))
6776 tree to = non_reference (to_type1);
6780 --binding of an expression of type B to a reference of type
6781 A& is better than binding an expression of type C to a
6782 reference of type A&,
6784 --conversion of B to A is better than conversion of C to A */
6785 if (is_properly_derived_from (from_type1, to)
6786 && is_properly_derived_from (from_type2, to))
6788 if (is_properly_derived_from (from_type2, from_type1))
6790 else if (is_properly_derived_from (from_type1, from_type2))
6797 --S1 and S2 differ only in their qualification conversion and yield
6798 similar types T1 and T2 (_conv.qual_), respectively, and the cv-
6799 qualification signature of type T1 is a proper subset of the cv-
6800 qualification signature of type T2 */
6801 if (ics1->kind == ck_qual
6802 && ics2->kind == ck_qual
6803 && same_type_p (from_type1, from_type2))
6805 int result = comp_cv_qual_signature (to_type1, to_type2);
6812 --S1 and S2 are reference bindings (_dcl.init.ref_) and neither refers
6813 to an implicit object parameter, and either S1 binds an lvalue reference
6814 to an lvalue and S2 binds an rvalue reference or S1 binds an rvalue
6815 reference to an rvalue and S2 binds an lvalue reference
6816 (C++0x draft standard, 13.3.3.2)
6818 --S1 and S2 are reference bindings (_dcl.init.ref_), and the
6819 types to which the references refer are the same type except for
6820 top-level cv-qualifiers, and the type to which the reference
6821 initialized by S2 refers is more cv-qualified than the type to
6822 which the reference initialized by S1 refers */
6824 if (ref_conv1 && ref_conv2)
6826 if (!ref_conv1->this_p && !ref_conv2->this_p
6827 && (TYPE_REF_IS_RVALUE (ref_conv1->type)
6828 != TYPE_REF_IS_RVALUE (ref_conv2->type)))
6830 if (ref_conv1->rvaluedness_matches_p)
6832 if (ref_conv2->rvaluedness_matches_p)
6836 if (same_type_ignoring_top_level_qualifiers_p (to_type1, to_type2))
6837 return comp_cv_qualification (TREE_TYPE (ref_conv2->type),
6838 TREE_TYPE (ref_conv1->type));
6841 /* Neither conversion sequence is better than the other. */
6845 /* The source type for this standard conversion sequence. */
6848 source_type (conversion *t)
6850 for (;; t = t->u.next)
6852 if (t->kind == ck_user
6853 || t->kind == ck_ambig
6854 || t->kind == ck_identity)
6860 /* Note a warning about preferring WINNER to LOSER. We do this by storing
6861 a pointer to LOSER and re-running joust to produce the warning if WINNER
6862 is actually used. */
6865 add_warning (struct z_candidate *winner, struct z_candidate *loser)
6867 candidate_warning *cw = (candidate_warning *)
6868 conversion_obstack_alloc (sizeof (candidate_warning));
6870 cw->next = winner->warnings;
6871 winner->warnings = cw;
6874 /* Compare two candidates for overloading as described in
6875 [over.match.best]. Return values:
6877 1: cand1 is better than cand2
6878 -1: cand2 is better than cand1
6879 0: cand1 and cand2 are indistinguishable */
6882 joust (struct z_candidate *cand1, struct z_candidate *cand2, bool warn)
6885 int off1 = 0, off2 = 0;
6889 /* Candidates that involve bad conversions are always worse than those
6891 if (cand1->viable > cand2->viable)
6893 if (cand1->viable < cand2->viable)
6896 /* If we have two pseudo-candidates for conversions to the same type,
6897 or two candidates for the same function, arbitrarily pick one. */
6898 if (cand1->fn == cand2->fn
6899 && (IS_TYPE_OR_DECL_P (cand1->fn)))
6902 /* a viable function F1
6903 is defined to be a better function than another viable function F2 if
6904 for all arguments i, ICSi(F1) is not a worse conversion sequence than
6905 ICSi(F2), and then */
6907 /* for some argument j, ICSj(F1) is a better conversion sequence than
6910 /* For comparing static and non-static member functions, we ignore
6911 the implicit object parameter of the non-static function. The
6912 standard says to pretend that the static function has an object
6913 parm, but that won't work with operator overloading. */
6914 len = cand1->num_convs;
6915 if (len != cand2->num_convs)
6917 int static_1 = DECL_STATIC_FUNCTION_P (cand1->fn);
6918 int static_2 = DECL_STATIC_FUNCTION_P (cand2->fn);
6920 gcc_assert (static_1 != static_2);
6931 for (i = 0; i < len; ++i)
6933 conversion *t1 = cand1->convs[i + off1];
6934 conversion *t2 = cand2->convs[i + off2];
6935 int comp = compare_ics (t1, t2);
6940 && (CONVERSION_RANK (t1) + CONVERSION_RANK (t2)
6941 == cr_std + cr_promotion)
6942 && t1->kind == ck_std
6943 && t2->kind == ck_std
6944 && TREE_CODE (t1->type) == INTEGER_TYPE
6945 && TREE_CODE (t2->type) == INTEGER_TYPE
6946 && (TYPE_PRECISION (t1->type)
6947 == TYPE_PRECISION (t2->type))
6948 && (TYPE_UNSIGNED (t1->u.next->type)
6949 || (TREE_CODE (t1->u.next->type)
6952 tree type = t1->u.next->type;
6954 struct z_candidate *w, *l;
6956 type1 = t1->type, type2 = t2->type,
6957 w = cand1, l = cand2;
6959 type1 = t2->type, type2 = t1->type,
6960 w = cand2, l = cand1;
6964 warning (OPT_Wsign_promo, "passing %qT chooses %qT over %qT",
6965 type, type1, type2);
6966 warning (OPT_Wsign_promo, " in call to %qD", w->fn);
6972 if (winner && comp != winner)
6981 /* warn about confusing overload resolution for user-defined conversions,
6982 either between a constructor and a conversion op, or between two
6984 if (winner && warn_conversion && cand1->second_conv
6985 && (!DECL_CONSTRUCTOR_P (cand1->fn) || !DECL_CONSTRUCTOR_P (cand2->fn))
6986 && winner != compare_ics (cand1->second_conv, cand2->second_conv))
6988 struct z_candidate *w, *l;
6989 bool give_warning = false;
6992 w = cand1, l = cand2;
6994 w = cand2, l = cand1;
6996 /* We don't want to complain about `X::operator T1 ()'
6997 beating `X::operator T2 () const', when T2 is a no less
6998 cv-qualified version of T1. */
6999 if (DECL_CONTEXT (w->fn) == DECL_CONTEXT (l->fn)
7000 && !DECL_CONSTRUCTOR_P (w->fn) && !DECL_CONSTRUCTOR_P (l->fn))
7002 tree t = TREE_TYPE (TREE_TYPE (l->fn));
7003 tree f = TREE_TYPE (TREE_TYPE (w->fn));
7005 if (TREE_CODE (t) == TREE_CODE (f) && POINTER_TYPE_P (t))
7010 if (!comp_ptr_ttypes (t, f))
7011 give_warning = true;
7014 give_warning = true;
7020 tree source = source_type (w->convs[0]);
7021 if (! DECL_CONSTRUCTOR_P (w->fn))
7022 source = TREE_TYPE (source);
7023 if (warning (OPT_Wconversion, "choosing %qD over %qD", w->fn, l->fn)
7024 && warning (OPT_Wconversion, " for conversion from %qT to %qT",
7025 source, w->second_conv->type))
7027 inform (input_location, " because conversion sequence for the argument is better");
7038 F1 is a non-template function and F2 is a template function
7041 if (!cand1->template_decl && cand2->template_decl)
7043 else if (cand1->template_decl && !cand2->template_decl)
7047 F1 and F2 are template functions and the function template for F1 is
7048 more specialized than the template for F2 according to the partial
7051 if (cand1->template_decl && cand2->template_decl)
7053 winner = more_specialized_fn
7054 (TI_TEMPLATE (cand1->template_decl),
7055 TI_TEMPLATE (cand2->template_decl),
7056 /* [temp.func.order]: The presence of unused ellipsis and default
7057 arguments has no effect on the partial ordering of function
7058 templates. add_function_candidate() will not have
7059 counted the "this" argument for constructors. */
7060 cand1->num_convs + DECL_CONSTRUCTOR_P (cand1->fn));
7066 the context is an initialization by user-defined conversion (see
7067 _dcl.init_ and _over.match.user_) and the standard conversion
7068 sequence from the return type of F1 to the destination type (i.e.,
7069 the type of the entity being initialized) is a better conversion
7070 sequence than the standard conversion sequence from the return type
7071 of F2 to the destination type. */
7073 if (cand1->second_conv)
7075 winner = compare_ics (cand1->second_conv, cand2->second_conv);
7080 /* Check whether we can discard a builtin candidate, either because we
7081 have two identical ones or matching builtin and non-builtin candidates.
7083 (Pedantically in the latter case the builtin which matched the user
7084 function should not be added to the overload set, but we spot it here.
7087 ... the builtin candidates include ...
7088 - do not have the same parameter type list as any non-template
7089 non-member candidate. */
7091 if (TREE_CODE (cand1->fn) == IDENTIFIER_NODE
7092 || TREE_CODE (cand2->fn) == IDENTIFIER_NODE)
7094 for (i = 0; i < len; ++i)
7095 if (!same_type_p (cand1->convs[i]->type,
7096 cand2->convs[i]->type))
7098 if (i == cand1->num_convs)
7100 if (cand1->fn == cand2->fn)
7101 /* Two built-in candidates; arbitrarily pick one. */
7103 else if (TREE_CODE (cand1->fn) == IDENTIFIER_NODE)
7104 /* cand1 is built-in; prefer cand2. */
7107 /* cand2 is built-in; prefer cand1. */
7112 /* If the two function declarations represent the same function (this can
7113 happen with declarations in multiple scopes and arg-dependent lookup),
7114 arbitrarily choose one. But first make sure the default args we're
7116 if (DECL_P (cand1->fn) && DECL_P (cand2->fn)
7117 && equal_functions (cand1->fn, cand2->fn))
7119 tree parms1 = TYPE_ARG_TYPES (TREE_TYPE (cand1->fn));
7120 tree parms2 = TYPE_ARG_TYPES (TREE_TYPE (cand2->fn));
7122 gcc_assert (!DECL_CONSTRUCTOR_P (cand1->fn));
7124 for (i = 0; i < len; ++i)
7126 /* Don't crash if the fn is variadic. */
7129 parms1 = TREE_CHAIN (parms1);
7130 parms2 = TREE_CHAIN (parms2);
7134 parms1 = TREE_CHAIN (parms1);
7136 parms2 = TREE_CHAIN (parms2);
7140 if (!cp_tree_equal (TREE_PURPOSE (parms1),
7141 TREE_PURPOSE (parms2)))
7145 permerror (input_location, "default argument mismatch in "
7146 "overload resolution");
7147 inform (input_location,
7148 " candidate 1: %q+#F", cand1->fn);
7149 inform (input_location,
7150 " candidate 2: %q+#F", cand2->fn);
7153 add_warning (cand1, cand2);
7156 parms1 = TREE_CHAIN (parms1);
7157 parms2 = TREE_CHAIN (parms2);
7165 /* Extension: If the worst conversion for one candidate is worse than the
7166 worst conversion for the other, take the first. */
7169 conversion_rank rank1 = cr_identity, rank2 = cr_identity;
7170 struct z_candidate *w = 0, *l = 0;
7172 for (i = 0; i < len; ++i)
7174 if (CONVERSION_RANK (cand1->convs[i+off1]) > rank1)
7175 rank1 = CONVERSION_RANK (cand1->convs[i+off1]);
7176 if (CONVERSION_RANK (cand2->convs[i + off2]) > rank2)
7177 rank2 = CONVERSION_RANK (cand2->convs[i + off2]);
7180 winner = 1, w = cand1, l = cand2;
7182 winner = -1, w = cand2, l = cand1;
7187 pedwarn (input_location, 0,
7188 "ISO C++ says that these are ambiguous, even "
7189 "though the worst conversion for the first is better than "
7190 "the worst conversion for the second:");
7191 print_z_candidate (_("candidate 1:"), w);
7192 print_z_candidate (_("candidate 2:"), l);
7200 gcc_assert (!winner);
7204 /* Given a list of candidates for overloading, find the best one, if any.
7205 This algorithm has a worst case of O(2n) (winner is last), and a best
7206 case of O(n/2) (totally ambiguous); much better than a sorting
7209 static struct z_candidate *
7210 tourney (struct z_candidate *candidates)
7212 struct z_candidate *champ = candidates, *challenger;
7214 int champ_compared_to_predecessor = 0;
7216 /* Walk through the list once, comparing each current champ to the next
7217 candidate, knocking out a candidate or two with each comparison. */
7219 for (challenger = champ->next; challenger; )
7221 fate = joust (champ, challenger, 0);
7223 challenger = challenger->next;
7228 champ = challenger->next;
7231 champ_compared_to_predecessor = 0;
7236 champ_compared_to_predecessor = 1;
7239 challenger = champ->next;
7243 /* Make sure the champ is better than all the candidates it hasn't yet
7244 been compared to. */
7246 for (challenger = candidates;
7248 && !(champ_compared_to_predecessor && challenger->next == champ);
7249 challenger = challenger->next)
7251 fate = joust (champ, challenger, 0);
7259 /* Returns nonzero if things of type FROM can be converted to TO. */
7262 can_convert (tree to, tree from)
7264 return can_convert_arg (to, from, NULL_TREE, LOOKUP_IMPLICIT);
7267 /* Returns nonzero if ARG (of type FROM) can be converted to TO. */
7270 can_convert_arg (tree to, tree from, tree arg, int flags)
7276 /* Get the high-water mark for the CONVERSION_OBSTACK. */
7277 p = conversion_obstack_alloc (0);
7279 t = implicit_conversion (to, from, arg, /*c_cast_p=*/false,
7281 ok_p = (t && !t->bad_p);
7283 /* Free all the conversions we allocated. */
7284 obstack_free (&conversion_obstack, p);
7289 /* Like can_convert_arg, but allows dubious conversions as well. */
7292 can_convert_arg_bad (tree to, tree from, tree arg, int flags)
7297 /* Get the high-water mark for the CONVERSION_OBSTACK. */
7298 p = conversion_obstack_alloc (0);
7299 /* Try to perform the conversion. */
7300 t = implicit_conversion (to, from, arg, /*c_cast_p=*/false,
7302 /* Free all the conversions we allocated. */
7303 obstack_free (&conversion_obstack, p);
7308 /* Convert EXPR to TYPE. Return the converted expression.
7310 Note that we allow bad conversions here because by the time we get to
7311 this point we are committed to doing the conversion. If we end up
7312 doing a bad conversion, convert_like will complain. */
7315 perform_implicit_conversion_flags (tree type, tree expr, tsubst_flags_t complain, int flags)
7320 if (error_operand_p (expr))
7321 return error_mark_node;
7323 /* Get the high-water mark for the CONVERSION_OBSTACK. */
7324 p = conversion_obstack_alloc (0);
7326 conv = implicit_conversion (type, TREE_TYPE (expr), expr,
7332 if (complain & tf_error)
7334 /* If expr has unknown type, then it is an overloaded function.
7335 Call instantiate_type to get good error messages. */
7336 if (TREE_TYPE (expr) == unknown_type_node)
7337 instantiate_type (type, expr, complain);
7338 else if (invalid_nonstatic_memfn_p (expr, complain))
7339 /* We gave an error. */;
7341 error ("could not convert %qE to %qT", expr, type);
7343 expr = error_mark_node;
7345 else if (processing_template_decl)
7347 /* In a template, we are only concerned about determining the
7348 type of non-dependent expressions, so we do not have to
7349 perform the actual conversion. */
7350 if (TREE_TYPE (expr) != type)
7351 expr = build_nop (type, expr);
7354 expr = convert_like (conv, expr, complain);
7356 /* Free all the conversions we allocated. */
7357 obstack_free (&conversion_obstack, p);
7363 perform_implicit_conversion (tree type, tree expr, tsubst_flags_t complain)
7365 return perform_implicit_conversion_flags (type, expr, complain, LOOKUP_IMPLICIT);
7368 /* Convert EXPR to TYPE (as a direct-initialization) if that is
7369 permitted. If the conversion is valid, the converted expression is
7370 returned. Otherwise, NULL_TREE is returned, except in the case
7371 that TYPE is a class type; in that case, an error is issued. If
7372 C_CAST_P is true, then this direction initialization is taking
7373 place as part of a static_cast being attempted as part of a C-style
7377 perform_direct_initialization_if_possible (tree type,
7380 tsubst_flags_t complain)
7385 if (type == error_mark_node || error_operand_p (expr))
7386 return error_mark_node;
7389 If the destination type is a (possibly cv-qualified) class type:
7391 -- If the initialization is direct-initialization ...,
7392 constructors are considered. ... If no constructor applies, or
7393 the overload resolution is ambiguous, the initialization is
7395 if (CLASS_TYPE_P (type))
7397 VEC(tree,gc) *args = make_tree_vector_single (expr);
7398 expr = build_special_member_call (NULL_TREE, complete_ctor_identifier,
7399 &args, type, LOOKUP_NORMAL, complain);
7400 release_tree_vector (args);
7401 return build_cplus_new (type, expr);
7404 /* Get the high-water mark for the CONVERSION_OBSTACK. */
7405 p = conversion_obstack_alloc (0);
7407 conv = implicit_conversion (type, TREE_TYPE (expr), expr,
7410 if (!conv || conv->bad_p)
7413 expr = convert_like_real (conv, expr, NULL_TREE, 0, 0,
7414 /*issue_conversion_warnings=*/false,
7416 tf_warning_or_error);
7418 /* Free all the conversions we allocated. */
7419 obstack_free (&conversion_obstack, p);
7424 /* DECL is a VAR_DECL whose type is a REFERENCE_TYPE. The reference
7425 is being bound to a temporary. Create and return a new VAR_DECL
7426 with the indicated TYPE; this variable will store the value to
7427 which the reference is bound. */
7430 make_temporary_var_for_ref_to_temp (tree decl, tree type)
7434 /* Create the variable. */
7435 var = create_temporary_var (type);
7437 /* Register the variable. */
7438 if (TREE_STATIC (decl))
7440 /* Namespace-scope or local static; give it a mangled name. */
7443 TREE_STATIC (var) = 1;
7444 name = mangle_ref_init_variable (decl);
7445 DECL_NAME (var) = name;
7446 SET_DECL_ASSEMBLER_NAME (var, name);
7447 var = pushdecl_top_level (var);
7450 /* Create a new cleanup level if necessary. */
7451 maybe_push_cleanup_level (type);
7456 /* EXPR is the initializer for a variable DECL of reference or
7457 std::initializer_list type. Create, push and return a new VAR_DECL
7458 for the initializer so that it will live as long as DECL. Any
7459 cleanup for the new variable is returned through CLEANUP, and the
7460 code to initialize the new variable is returned through INITP. */
7463 set_up_extended_ref_temp (tree decl, tree expr, tree *cleanup, tree *initp)
7469 /* Create the temporary variable. */
7470 type = TREE_TYPE (expr);
7471 var = make_temporary_var_for_ref_to_temp (decl, type);
7472 layout_decl (var, 0);
7473 /* If the rvalue is the result of a function call it will be
7474 a TARGET_EXPR. If it is some other construct (such as a
7475 member access expression where the underlying object is
7476 itself the result of a function call), turn it into a
7477 TARGET_EXPR here. It is important that EXPR be a
7478 TARGET_EXPR below since otherwise the INIT_EXPR will
7479 attempt to make a bitwise copy of EXPR to initialize
7481 if (TREE_CODE (expr) != TARGET_EXPR)
7482 expr = get_target_expr (expr);
7483 /* Create the INIT_EXPR that will initialize the temporary
7485 init = build2 (INIT_EXPR, type, var, expr);
7486 if (at_function_scope_p ())
7488 add_decl_expr (var);
7490 if (TREE_STATIC (var))
7491 init = add_stmt_to_compound (init, register_dtor_fn (var));
7493 *cleanup = cxx_maybe_build_cleanup (var);
7495 /* We must be careful to destroy the temporary only
7496 after its initialization has taken place. If the
7497 initialization throws an exception, then the
7498 destructor should not be run. We cannot simply
7499 transform INIT into something like:
7501 (INIT, ({ CLEANUP_STMT; }))
7503 because emit_local_var always treats the
7504 initializer as a full-expression. Thus, the
7505 destructor would run too early; it would run at the
7506 end of initializing the reference variable, rather
7507 than at the end of the block enclosing the
7510 The solution is to pass back a cleanup expression
7511 which the caller is responsible for attaching to
7512 the statement tree. */
7516 rest_of_decl_compilation (var, /*toplev=*/1, at_eof);
7517 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
7518 static_aggregates = tree_cons (NULL_TREE, var,
7526 /* Convert EXPR to the indicated reference TYPE, in a way suitable for
7527 initializing a variable of that TYPE. If DECL is non-NULL, it is
7528 the VAR_DECL being initialized with the EXPR. (In that case, the
7529 type of DECL will be TYPE.) If DECL is non-NULL, then CLEANUP must
7530 also be non-NULL, and with *CLEANUP initialized to NULL. Upon
7531 return, if *CLEANUP is no longer NULL, it will be an expression
7532 that should be pushed as a cleanup after the returned expression
7533 is used to initialize DECL.
7535 Return the converted expression. */
7538 initialize_reference (tree type, tree expr, tree decl, tree *cleanup)
7543 if (type == error_mark_node || error_operand_p (expr))
7544 return error_mark_node;
7546 /* Get the high-water mark for the CONVERSION_OBSTACK. */
7547 p = conversion_obstack_alloc (0);
7549 conv = reference_binding (type, TREE_TYPE (expr), expr, /*c_cast_p=*/false,
7551 if (!conv || conv->bad_p)
7553 if (!(TYPE_QUALS (TREE_TYPE (type)) & TYPE_QUAL_CONST)
7554 && !TYPE_REF_IS_RVALUE (type)
7555 && !real_lvalue_p (expr))
7556 error ("invalid initialization of non-const reference of "
7557 "type %qT from a temporary of type %qT",
7558 type, TREE_TYPE (expr));
7560 error ("invalid initialization of reference of type "
7561 "%qT from expression of type %qT", type,
7563 return error_mark_node;
7566 /* If DECL is non-NULL, then this special rule applies:
7570 The temporary to which the reference is bound or the temporary
7571 that is the complete object to which the reference is bound
7572 persists for the lifetime of the reference.
7574 The temporaries created during the evaluation of the expression
7575 initializing the reference, except the temporary to which the
7576 reference is bound, are destroyed at the end of the
7577 full-expression in which they are created.
7579 In that case, we store the converted expression into a new
7580 VAR_DECL in a new scope.
7582 However, we want to be careful not to create temporaries when
7583 they are not required. For example, given:
7586 struct D : public B {};
7590 there is no need to copy the return value from "f"; we can just
7591 extend its lifetime. Similarly, given:
7594 struct T { operator S(); };
7598 we can extend the lifetime of the return value of the conversion
7600 gcc_assert (conv->kind == ck_ref_bind);
7604 tree base_conv_type;
7606 /* Skip over the REF_BIND. */
7607 conv = conv->u.next;
7608 /* If the next conversion is a BASE_CONV, skip that too -- but
7609 remember that the conversion was required. */
7610 if (conv->kind == ck_base)
7612 base_conv_type = conv->type;
7613 conv = conv->u.next;
7616 base_conv_type = NULL_TREE;
7617 /* Perform the remainder of the conversion. */
7618 expr = convert_like_real (conv, expr,
7619 /*fn=*/NULL_TREE, /*argnum=*/0,
7621 /*issue_conversion_warnings=*/true,
7623 tf_warning_or_error);
7624 if (error_operand_p (expr))
7625 expr = error_mark_node;
7628 if (!lvalue_or_rvalue_with_address_p (expr))
7631 var = set_up_extended_ref_temp (decl, expr, cleanup, &init);
7632 /* Use its address to initialize the reference variable. */
7633 expr = build_address (var);
7635 expr = convert_to_base (expr,
7636 build_pointer_type (base_conv_type),
7637 /*check_access=*/true,
7639 expr = build2 (COMPOUND_EXPR, TREE_TYPE (expr), init, expr);
7642 /* Take the address of EXPR. */
7643 expr = cp_build_unary_op (ADDR_EXPR, expr, 0, tf_warning_or_error);
7644 /* If a BASE_CONV was required, perform it now. */
7646 expr = (perform_implicit_conversion
7647 (build_pointer_type (base_conv_type), expr,
7648 tf_warning_or_error));
7649 expr = build_nop (type, expr);
7653 /* Perform the conversion. */
7654 expr = convert_like (conv, expr, tf_warning_or_error);
7656 /* Free all the conversions we allocated. */
7657 obstack_free (&conversion_obstack, p);
7662 /* Returns true iff TYPE is some variant of std::initializer_list. */
7665 is_std_init_list (tree type)
7667 return (CLASS_TYPE_P (type)
7668 && CP_TYPE_CONTEXT (type) == std_node
7669 && strcmp (TYPE_NAME_STRING (type), "initializer_list") == 0);
7672 /* Returns true iff DECL is a list constructor: i.e. a constructor which
7673 will accept an argument list of a single std::initializer_list<T>. */
7676 is_list_ctor (tree decl)
7678 tree args = FUNCTION_FIRST_USER_PARMTYPE (decl);
7681 if (!args || args == void_list_node)
7684 arg = non_reference (TREE_VALUE (args));
7685 if (!is_std_init_list (arg))
7688 args = TREE_CHAIN (args);
7690 if (args && args != void_list_node && !TREE_PURPOSE (args))
7691 /* There are more non-defaulted parms. */
7697 #include "gt-cp-call.h"