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 tree build_object_call (tree, tree, tsubst_flags_t);
149 static tree resolve_args (tree);
150 static struct z_candidate *build_user_type_conversion_1 (tree, tree, int);
151 static void print_z_candidate (const char *, struct z_candidate *);
152 static void print_z_candidates (struct z_candidate *);
153 static tree build_this (tree);
154 static struct z_candidate *splice_viable (struct z_candidate *, bool, bool *);
155 static bool any_strictly_viable (struct z_candidate *);
156 static struct z_candidate *add_template_candidate
157 (struct z_candidate **, tree, tree, tree, tree, tree,
158 tree, tree, int, unification_kind_t);
159 static struct z_candidate *add_template_candidate_real
160 (struct z_candidate **, tree, tree, tree, tree, tree,
161 tree, tree, int, tree, unification_kind_t);
162 static struct z_candidate *add_template_conv_candidate
163 (struct z_candidate **, tree, tree, tree, tree, tree, 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, tree, tree);
176 static struct z_candidate *add_function_candidate
177 (struct z_candidate **, tree, tree, tree, tree, tree, int);
178 static conversion *implicit_conversion (tree, tree, tree, bool, int);
179 static conversion *standard_conversion (tree, tree, tree, bool, int);
180 static conversion *reference_binding (tree, tree, tree, bool, int);
181 static conversion *build_conv (conversion_kind, tree, conversion *);
182 static conversion *build_list_conv (tree, tree, int);
183 static bool is_subseq (conversion *, conversion *);
184 static conversion *maybe_handle_ref_bind (conversion **);
185 static void maybe_handle_implicit_object (conversion **);
186 static struct z_candidate *add_candidate
187 (struct z_candidate **, tree, tree, size_t,
188 conversion **, tree, tree, int);
189 static tree source_type (conversion *);
190 static void add_warning (struct z_candidate *, struct z_candidate *);
191 static bool reference_related_p (tree, tree);
192 static bool reference_compatible_p (tree, tree);
193 static conversion *convert_class_to_reference (tree, tree, tree);
194 static conversion *direct_reference_binding (tree, conversion *);
195 static bool promoted_arithmetic_type_p (tree);
196 static conversion *conditional_conversion (tree, tree);
197 static char *name_as_c_string (tree, tree, bool *);
198 static tree call_builtin_trap (void);
199 static tree prep_operand (tree);
200 static void add_candidates (tree, tree, tree, bool, tree, tree,
201 int, struct z_candidate **);
202 static conversion *merge_conversion_sequences (conversion *, conversion *);
203 static bool magic_varargs_p (tree);
204 static tree build_temp (tree, tree, int, diagnostic_t *);
206 /* Returns nonzero iff the destructor name specified in NAME matches BASETYPE.
207 NAME can take many forms... */
210 check_dtor_name (tree basetype, tree name)
212 /* Just accept something we've already complained about. */
213 if (name == error_mark_node)
216 if (TREE_CODE (name) == TYPE_DECL)
217 name = TREE_TYPE (name);
218 else if (TYPE_P (name))
220 else if (TREE_CODE (name) == IDENTIFIER_NODE)
222 if ((MAYBE_CLASS_TYPE_P (basetype)
223 && name == constructor_name (basetype))
224 || (TREE_CODE (basetype) == ENUMERAL_TYPE
225 && name == TYPE_IDENTIFIER (basetype)))
228 name = get_type_value (name);
234 template <class T> struct S { ~S(); };
238 NAME will be a class template. */
239 gcc_assert (DECL_CLASS_TEMPLATE_P (name));
243 if (!name || name == error_mark_node)
245 return same_type_p (TYPE_MAIN_VARIANT (basetype), TYPE_MAIN_VARIANT (name));
248 /* We want the address of a function or method. We avoid creating a
249 pointer-to-member function. */
252 build_addr_func (tree function)
254 tree type = TREE_TYPE (function);
256 /* We have to do these by hand to avoid real pointer to member
258 if (TREE_CODE (type) == METHOD_TYPE)
260 if (TREE_CODE (function) == OFFSET_REF)
262 tree object = build_address (TREE_OPERAND (function, 0));
263 return get_member_function_from_ptrfunc (&object,
264 TREE_OPERAND (function, 1));
266 function = build_address (function);
269 function = decay_conversion (function);
274 /* Build a CALL_EXPR, we can handle FUNCTION_TYPEs, METHOD_TYPEs, or
275 POINTER_TYPE to those. Note, pointer to member function types
276 (TYPE_PTRMEMFUNC_P) must be handled by our callers. There are
277 two variants. build_call_a is the primitive taking an array of
278 arguments, while build_call_n is a wrapper that handles varargs. */
281 build_call_n (tree function, int n, ...)
284 return build_call_a (function, 0, NULL);
287 tree *argarray = (tree *) alloca (n * sizeof (tree));
292 for (i = 0; i < n; i++)
293 argarray[i] = va_arg (ap, tree);
295 return build_call_a (function, n, argarray);
300 build_call_a (tree function, int n, tree *argarray)
302 int is_constructor = 0;
309 function = build_addr_func (function);
311 gcc_assert (TYPE_PTR_P (TREE_TYPE (function)));
312 fntype = TREE_TYPE (TREE_TYPE (function));
313 gcc_assert (TREE_CODE (fntype) == FUNCTION_TYPE
314 || TREE_CODE (fntype) == METHOD_TYPE);
315 result_type = TREE_TYPE (fntype);
317 if (TREE_CODE (function) == ADDR_EXPR
318 && TREE_CODE (TREE_OPERAND (function, 0)) == FUNCTION_DECL)
320 decl = TREE_OPERAND (function, 0);
321 if (!TREE_USED (decl))
323 /* We invoke build_call directly for several library
324 functions. These may have been declared normally if
325 we're building libgcc, so we can't just check
327 gcc_assert (DECL_ARTIFICIAL (decl)
328 || !strncmp (IDENTIFIER_POINTER (DECL_NAME (decl)),
336 /* We check both the decl and the type; a function may be known not to
337 throw without being declared throw(). */
338 nothrow = ((decl && TREE_NOTHROW (decl))
339 || TYPE_NOTHROW_P (TREE_TYPE (TREE_TYPE (function))));
341 if (decl && TREE_THIS_VOLATILE (decl) && cfun && cp_function_chain)
342 current_function_returns_abnormally = 1;
344 if (decl && TREE_DEPRECATED (decl))
345 warn_deprecated_use (decl);
346 require_complete_eh_spec_types (fntype, decl);
348 if (decl && DECL_CONSTRUCTOR_P (decl))
351 /* Don't pass empty class objects by value. This is useful
352 for tags in STL, which are used to control overload resolution.
353 We don't need to handle other cases of copying empty classes. */
354 if (! decl || ! DECL_BUILT_IN (decl))
355 for (i = 0; i < n; i++)
356 if (is_empty_class (TREE_TYPE (argarray[i]))
357 && ! TREE_ADDRESSABLE (TREE_TYPE (argarray[i])))
359 tree t = build0 (EMPTY_CLASS_EXPR, TREE_TYPE (argarray[i]));
360 argarray[i] = build2 (COMPOUND_EXPR, TREE_TYPE (t),
364 function = build_call_array (result_type, function, n, argarray);
365 TREE_HAS_CONSTRUCTOR (function) = is_constructor;
366 TREE_NOTHROW (function) = nothrow;
371 /* Build something of the form ptr->method (args)
372 or object.method (args). This can also build
373 calls to constructors, and find friends.
375 Member functions always take their class variable
378 INSTANCE is a class instance.
380 NAME is the name of the method desired, usually an IDENTIFIER_NODE.
382 PARMS help to figure out what that NAME really refers to.
384 BASETYPE_PATH, if non-NULL, contains a chain from the type of INSTANCE
385 down to the real instance type to use for access checking. We need this
386 information to get protected accesses correct.
388 FLAGS is the logical disjunction of zero or more LOOKUP_
389 flags. See cp-tree.h for more info.
391 If this is all OK, calls build_function_call with the resolved
394 This function must also handle being called to perform
395 initialization, promotion/coercion of arguments, and
396 instantiation of default parameters.
398 Note that NAME may refer to an instance variable name. If
399 `operator()()' is defined for the type of that field, then we return
402 /* New overloading code. */
404 typedef struct z_candidate z_candidate;
406 typedef struct candidate_warning candidate_warning;
407 struct candidate_warning {
409 candidate_warning *next;
413 /* The FUNCTION_DECL that will be called if this candidate is
414 selected by overload resolution. */
416 /* The arguments to use when calling this function. */
418 /* The implicit conversion sequences for each of the arguments to
421 /* The number of implicit conversion sequences. */
423 /* If FN is a user-defined conversion, the standard conversion
424 sequence from the type returned by FN to the desired destination
426 conversion *second_conv;
428 /* If FN is a member function, the binfo indicating the path used to
429 qualify the name of FN at the call site. This path is used to
430 determine whether or not FN is accessible if it is selected by
431 overload resolution. The DECL_CONTEXT of FN will always be a
432 (possibly improper) base of this binfo. */
434 /* If FN is a non-static member function, the binfo indicating the
435 subobject to which the `this' pointer should be converted if FN
436 is selected by overload resolution. The type pointed to the by
437 the `this' pointer must correspond to the most derived class
438 indicated by the CONVERSION_PATH. */
439 tree conversion_path;
441 candidate_warning *warnings;
445 /* Returns true iff T is a null pointer constant in the sense of
449 null_ptr_cst_p (tree t)
453 A null pointer constant is an integral constant expression
454 (_expr.const_) rvalue of integer type that evaluates to zero. */
455 t = integral_constant_value (t);
458 if (CP_INTEGRAL_TYPE_P (TREE_TYPE (t)) && integer_zerop (t))
461 if (!TREE_OVERFLOW (t))
467 /* Returns nonzero if PARMLIST consists of only default parms and/or
471 sufficient_parms_p (const_tree parmlist)
473 for (; parmlist && parmlist != void_list_node;
474 parmlist = TREE_CHAIN (parmlist))
475 if (!TREE_PURPOSE (parmlist))
480 /* Allocate N bytes of memory from the conversion obstack. The memory
481 is zeroed before being returned. */
484 conversion_obstack_alloc (size_t n)
487 if (!conversion_obstack_initialized)
489 gcc_obstack_init (&conversion_obstack);
490 conversion_obstack_initialized = true;
492 p = obstack_alloc (&conversion_obstack, n);
497 /* Dynamically allocate a conversion. */
500 alloc_conversion (conversion_kind kind)
503 c = (conversion *) conversion_obstack_alloc (sizeof (conversion));
508 #ifdef ENABLE_CHECKING
510 /* Make sure that all memory on the conversion obstack has been
514 validate_conversion_obstack (void)
516 if (conversion_obstack_initialized)
517 gcc_assert ((obstack_next_free (&conversion_obstack)
518 == obstack_base (&conversion_obstack)));
521 #endif /* ENABLE_CHECKING */
523 /* Dynamically allocate an array of N conversions. */
526 alloc_conversions (size_t n)
528 return (conversion **) conversion_obstack_alloc (n * sizeof (conversion *));
532 build_conv (conversion_kind code, tree type, conversion *from)
535 conversion_rank rank = CONVERSION_RANK (from);
537 /* Note that the caller is responsible for filling in t->cand for
538 user-defined conversions. */
539 t = alloc_conversion (code);
562 t->user_conv_p = (code == ck_user || from->user_conv_p);
563 t->bad_p = from->bad_p;
568 /* Represent a conversion from CTOR, a braced-init-list, to TYPE, a
569 specialization of std::initializer_list<T>, if such a conversion is
573 build_list_conv (tree type, tree ctor, int flags)
575 tree elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (type), 0);
576 unsigned len = CONSTRUCTOR_NELTS (ctor);
577 conversion **subconvs = alloc_conversions (len);
582 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor), i, val)
585 = implicit_conversion (elttype, TREE_TYPE (val), val,
593 t = alloc_conversion (ck_list);
595 t->u.list = subconvs;
598 for (i = 0; i < len; ++i)
600 conversion *sub = subconvs[i];
601 if (sub->rank > t->rank)
603 if (sub->user_conv_p)
604 t->user_conv_p = true;
612 /* Represent a conversion from CTOR, a braced-init-list, to TYPE, an
613 aggregate class, if such a conversion is possible. */
616 build_aggr_conv (tree type, tree ctor, int flags)
618 unsigned HOST_WIDE_INT i = 0;
620 tree field = TYPE_FIELDS (type);
622 for (; field; field = TREE_CHAIN (field), ++i)
624 if (TREE_CODE (field) != FIELD_DECL)
626 if (i < CONSTRUCTOR_NELTS (ctor))
628 constructor_elt *ce = CONSTRUCTOR_ELT (ctor, i);
629 if (!can_convert_arg (TREE_TYPE (field), TREE_TYPE (ce->value),
633 else if (build_value_init (TREE_TYPE (field)) == error_mark_node)
637 c = alloc_conversion (ck_aggr);
640 c->user_conv_p = true;
645 /* Build a representation of the identity conversion from EXPR to
646 itself. The TYPE should match the type of EXPR, if EXPR is non-NULL. */
649 build_identity_conv (tree type, tree expr)
653 c = alloc_conversion (ck_identity);
660 /* Converting from EXPR to TYPE was ambiguous in the sense that there
661 were multiple user-defined conversions to accomplish the job.
662 Build a conversion that indicates that ambiguity. */
665 build_ambiguous_conv (tree type, tree expr)
669 c = alloc_conversion (ck_ambig);
677 strip_top_quals (tree t)
679 if (TREE_CODE (t) == ARRAY_TYPE)
681 return cp_build_qualified_type (t, 0);
684 /* Returns the standard conversion path (see [conv]) from type FROM to type
685 TO, if any. For proper handling of null pointer constants, you must
686 also pass the expression EXPR to convert from. If C_CAST_P is true,
687 this conversion is coming from a C-style cast. */
690 standard_conversion (tree to, tree from, tree expr, bool c_cast_p,
693 enum tree_code fcode, tcode;
695 bool fromref = false;
697 to = non_reference (to);
698 if (TREE_CODE (from) == REFERENCE_TYPE)
701 from = TREE_TYPE (from);
703 to = strip_top_quals (to);
704 from = strip_top_quals (from);
706 if ((TYPE_PTRFN_P (to) || TYPE_PTRMEMFUNC_P (to))
707 && expr && type_unknown_p (expr))
709 tsubst_flags_t tflags = tf_conv;
710 if (!(flags & LOOKUP_PROTECT))
711 tflags |= tf_no_access_control;
712 expr = instantiate_type (to, expr, tflags);
713 if (expr == error_mark_node)
715 from = TREE_TYPE (expr);
718 fcode = TREE_CODE (from);
719 tcode = TREE_CODE (to);
721 conv = build_identity_conv (from, expr);
722 if (fcode == FUNCTION_TYPE || fcode == ARRAY_TYPE)
724 from = type_decays_to (from);
725 fcode = TREE_CODE (from);
726 conv = build_conv (ck_lvalue, from, conv);
728 else if (fromref || (expr && lvalue_p (expr)))
733 bitfield_type = is_bitfield_expr_with_lowered_type (expr);
736 from = strip_top_quals (bitfield_type);
737 fcode = TREE_CODE (from);
740 conv = build_conv (ck_rvalue, from, conv);
743 /* Allow conversion between `__complex__' data types. */
744 if (tcode == COMPLEX_TYPE && fcode == COMPLEX_TYPE)
746 /* The standard conversion sequence to convert FROM to TO is
747 the standard conversion sequence to perform componentwise
749 conversion *part_conv = standard_conversion
750 (TREE_TYPE (to), TREE_TYPE (from), NULL_TREE, c_cast_p, flags);
754 conv = build_conv (part_conv->kind, to, conv);
755 conv->rank = part_conv->rank;
763 if (same_type_p (from, to))
766 if ((tcode == POINTER_TYPE || TYPE_PTR_TO_MEMBER_P (to))
767 && expr && null_ptr_cst_p (expr))
768 conv = build_conv (ck_std, to, conv);
769 else if ((tcode == INTEGER_TYPE && fcode == POINTER_TYPE)
770 || (tcode == POINTER_TYPE && fcode == INTEGER_TYPE))
772 /* For backwards brain damage compatibility, allow interconversion of
773 pointers and integers with a pedwarn. */
774 conv = build_conv (ck_std, to, conv);
777 else if (UNSCOPED_ENUM_P (to) && fcode == INTEGER_TYPE)
779 /* For backwards brain damage compatibility, allow interconversion of
780 enums and integers with a pedwarn. */
781 conv = build_conv (ck_std, to, conv);
784 else if ((tcode == POINTER_TYPE && fcode == POINTER_TYPE)
785 || (TYPE_PTRMEM_P (to) && TYPE_PTRMEM_P (from)))
790 if (tcode == POINTER_TYPE
791 && same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (from),
794 else if (VOID_TYPE_P (TREE_TYPE (to))
795 && !TYPE_PTRMEM_P (from)
796 && TREE_CODE (TREE_TYPE (from)) != FUNCTION_TYPE)
798 from = build_pointer_type
799 (cp_build_qualified_type (void_type_node,
800 cp_type_quals (TREE_TYPE (from))));
801 conv = build_conv (ck_ptr, from, conv);
803 else if (TYPE_PTRMEM_P (from))
805 tree fbase = TYPE_PTRMEM_CLASS_TYPE (from);
806 tree tbase = TYPE_PTRMEM_CLASS_TYPE (to);
808 if (DERIVED_FROM_P (fbase, tbase)
809 && (same_type_ignoring_top_level_qualifiers_p
810 (TYPE_PTRMEM_POINTED_TO_TYPE (from),
811 TYPE_PTRMEM_POINTED_TO_TYPE (to))))
813 from = build_ptrmem_type (tbase,
814 TYPE_PTRMEM_POINTED_TO_TYPE (from));
815 conv = build_conv (ck_pmem, from, conv);
817 else if (!same_type_p (fbase, tbase))
820 else if (CLASS_TYPE_P (TREE_TYPE (from))
821 && CLASS_TYPE_P (TREE_TYPE (to))
824 An rvalue of type "pointer to cv D," where D is a
825 class type, can be converted to an rvalue of type
826 "pointer to cv B," where B is a base class (clause
827 _class.derived_) of D. If B is an inaccessible
828 (clause _class.access_) or ambiguous
829 (_class.member.lookup_) base class of D, a program
830 that necessitates this conversion is ill-formed.
831 Therefore, we use DERIVED_FROM_P, and do not check
832 access or uniqueness. */
833 && DERIVED_FROM_P (TREE_TYPE (to), TREE_TYPE (from)))
836 cp_build_qualified_type (TREE_TYPE (to),
837 cp_type_quals (TREE_TYPE (from)));
838 from = build_pointer_type (from);
839 conv = build_conv (ck_ptr, from, conv);
843 if (tcode == POINTER_TYPE)
845 to_pointee = TREE_TYPE (to);
846 from_pointee = TREE_TYPE (from);
850 to_pointee = TYPE_PTRMEM_POINTED_TO_TYPE (to);
851 from_pointee = TYPE_PTRMEM_POINTED_TO_TYPE (from);
854 if (same_type_p (from, to))
856 else if (c_cast_p && comp_ptr_ttypes_const (to, from))
857 /* In a C-style cast, we ignore CV-qualification because we
858 are allowed to perform a static_cast followed by a
860 conv = build_conv (ck_qual, to, conv);
861 else if (!c_cast_p && comp_ptr_ttypes (to_pointee, from_pointee))
862 conv = build_conv (ck_qual, to, conv);
863 else if (expr && string_conv_p (to, expr, 0))
864 /* converting from string constant to char *. */
865 conv = build_conv (ck_qual, to, conv);
866 else if (ptr_reasonably_similar (to_pointee, from_pointee))
868 conv = build_conv (ck_ptr, to, conv);
876 else if (TYPE_PTRMEMFUNC_P (to) && TYPE_PTRMEMFUNC_P (from))
878 tree fromfn = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (from));
879 tree tofn = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (to));
880 tree fbase = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (fromfn)));
881 tree tbase = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (tofn)));
883 if (!DERIVED_FROM_P (fbase, tbase)
884 || !same_type_p (TREE_TYPE (fromfn), TREE_TYPE (tofn))
885 || !compparms (TREE_CHAIN (TYPE_ARG_TYPES (fromfn)),
886 TREE_CHAIN (TYPE_ARG_TYPES (tofn)))
887 || cp_type_quals (fbase) != cp_type_quals (tbase))
890 from = cp_build_qualified_type (tbase, cp_type_quals (fbase));
891 from = build_method_type_directly (from,
893 TREE_CHAIN (TYPE_ARG_TYPES (fromfn)));
894 from = build_ptrmemfunc_type (build_pointer_type (from));
895 conv = build_conv (ck_pmem, from, conv);
898 else if (tcode == BOOLEAN_TYPE)
902 An rvalue of arithmetic, unscoped enumeration, pointer, or
903 pointer to member type can be converted to an rvalue of type
905 if (ARITHMETIC_TYPE_P (from)
906 || UNSCOPED_ENUM_P (from)
907 || fcode == POINTER_TYPE
908 || TYPE_PTR_TO_MEMBER_P (from))
910 conv = build_conv (ck_std, to, conv);
911 if (fcode == POINTER_TYPE
912 || TYPE_PTRMEM_P (from)
913 || (TYPE_PTRMEMFUNC_P (from)
914 && conv->rank < cr_pbool))
915 conv->rank = cr_pbool;
921 /* We don't check for ENUMERAL_TYPE here because there are no standard
922 conversions to enum type. */
923 /* As an extension, allow conversion to complex type. */
924 else if (ARITHMETIC_TYPE_P (to))
926 if (! (INTEGRAL_CODE_P (fcode) || fcode == REAL_TYPE)
927 || SCOPED_ENUM_P (from))
929 conv = build_conv (ck_std, to, conv);
931 /* Give this a better rank if it's a promotion. */
932 if (same_type_p (to, type_promotes_to (from))
933 && conv->u.next->rank <= cr_promotion)
934 conv->rank = cr_promotion;
936 else if (fcode == VECTOR_TYPE && tcode == VECTOR_TYPE
937 && vector_types_convertible_p (from, to, false))
938 return build_conv (ck_std, to, conv);
939 else if (MAYBE_CLASS_TYPE_P (to) && MAYBE_CLASS_TYPE_P (from)
940 && is_properly_derived_from (from, to))
942 if (conv->kind == ck_rvalue)
944 conv = build_conv (ck_base, to, conv);
945 /* The derived-to-base conversion indicates the initialization
946 of a parameter with base type from an object of a derived
947 type. A temporary object is created to hold the result of
948 the conversion unless we're binding directly to a reference. */
949 conv->need_temporary_p = !(flags & LOOKUP_NO_TEMP_BIND);
954 if (flags & LOOKUP_NO_NARROWING)
955 conv->check_narrowing = true;
960 /* Returns nonzero if T1 is reference-related to T2. */
963 reference_related_p (tree t1, tree t2)
965 t1 = TYPE_MAIN_VARIANT (t1);
966 t2 = TYPE_MAIN_VARIANT (t2);
970 Given types "cv1 T1" and "cv2 T2," "cv1 T1" is reference-related
971 to "cv2 T2" if T1 is the same type as T2, or T1 is a base class
973 return (same_type_p (t1, t2)
974 || (CLASS_TYPE_P (t1) && CLASS_TYPE_P (t2)
975 && DERIVED_FROM_P (t1, t2)));
978 /* Returns nonzero if T1 is reference-compatible with T2. */
981 reference_compatible_p (tree t1, tree t2)
985 "cv1 T1" is reference compatible with "cv2 T2" if T1 is
986 reference-related to T2 and cv1 is the same cv-qualification as,
987 or greater cv-qualification than, cv2. */
988 return (reference_related_p (t1, t2)
989 && at_least_as_qualified_p (t1, t2));
992 /* Determine whether or not the EXPR (of class type S) can be
993 converted to T as in [over.match.ref]. */
996 convert_class_to_reference (tree reference_type, tree s, tree expr)
1002 struct z_candidate *candidates;
1003 struct z_candidate *cand;
1006 conversions = lookup_conversions (s);
1012 Assuming that "cv1 T" is the underlying type of the reference
1013 being initialized, and "cv S" is the type of the initializer
1014 expression, with S a class type, the candidate functions are
1015 selected as follows:
1017 --The conversion functions of S and its base classes are
1018 considered. Those that are not hidden within S and yield type
1019 "reference to cv2 T2", where "cv1 T" is reference-compatible
1020 (_dcl.init.ref_) with "cv2 T2", are candidate functions.
1022 The argument list has one argument, which is the initializer
1027 /* Conceptually, we should take the address of EXPR and put it in
1028 the argument list. Unfortunately, however, that can result in
1029 error messages, which we should not issue now because we are just
1030 trying to find a conversion operator. Therefore, we use NULL,
1031 cast to the appropriate type. */
1032 arglist = build_int_cst (build_pointer_type (s), 0);
1033 arglist = build_tree_list (NULL_TREE, arglist);
1035 t = TREE_TYPE (reference_type);
1039 tree fns = TREE_VALUE (conversions);
1041 for (; fns; fns = OVL_NEXT (fns))
1043 tree f = OVL_CURRENT (fns);
1044 tree t2 = TREE_TYPE (TREE_TYPE (f));
1048 /* If this is a template function, try to get an exact
1050 if (TREE_CODE (f) == TEMPLATE_DECL)
1052 cand = add_template_candidate (&candidates,
1058 TREE_PURPOSE (conversions),
1064 /* Now, see if the conversion function really returns
1065 an lvalue of the appropriate type. From the
1066 point of view of unification, simply returning an
1067 rvalue of the right type is good enough. */
1069 t2 = TREE_TYPE (TREE_TYPE (f));
1070 if (TREE_CODE (t2) != REFERENCE_TYPE
1071 || !reference_compatible_p (t, TREE_TYPE (t2)))
1073 candidates = candidates->next;
1078 else if (TREE_CODE (t2) == REFERENCE_TYPE
1079 && reference_compatible_p (t, TREE_TYPE (t2)))
1080 cand = add_function_candidate (&candidates, f, s, arglist,
1082 TREE_PURPOSE (conversions),
1087 conversion *identity_conv;
1088 /* Build a standard conversion sequence indicating the
1089 binding from the reference type returned by the
1090 function to the desired REFERENCE_TYPE. */
1092 = build_identity_conv (TREE_TYPE (TREE_TYPE
1093 (TREE_TYPE (cand->fn))),
1096 = (direct_reference_binding
1097 (reference_type, identity_conv));
1098 cand->second_conv->rvaluedness_matches_p
1099 = TYPE_REF_IS_RVALUE (TREE_TYPE (TREE_TYPE (cand->fn)))
1100 == TYPE_REF_IS_RVALUE (reference_type);
1101 cand->second_conv->bad_p |= cand->convs[0]->bad_p;
1104 conversions = TREE_CHAIN (conversions);
1107 candidates = splice_viable (candidates, pedantic, &any_viable_p);
1108 /* If none of the conversion functions worked out, let our caller
1113 cand = tourney (candidates);
1117 /* Now that we know that this is the function we're going to use fix
1118 the dummy first argument. */
1119 cand->args = tree_cons (NULL_TREE,
1121 TREE_CHAIN (cand->args));
1123 /* Build a user-defined conversion sequence representing the
1125 conv = build_conv (ck_user,
1126 TREE_TYPE (TREE_TYPE (cand->fn)),
1127 build_identity_conv (TREE_TYPE (expr), expr));
1130 /* Merge it with the standard conversion sequence from the
1131 conversion function's return type to the desired type. */
1132 cand->second_conv = merge_conversion_sequences (conv, cand->second_conv);
1134 if (cand->viable == -1)
1137 return cand->second_conv;
1140 /* A reference of the indicated TYPE is being bound directly to the
1141 expression represented by the implicit conversion sequence CONV.
1142 Return a conversion sequence for this binding. */
1145 direct_reference_binding (tree type, conversion *conv)
1149 gcc_assert (TREE_CODE (type) == REFERENCE_TYPE);
1150 gcc_assert (TREE_CODE (conv->type) != REFERENCE_TYPE);
1152 t = TREE_TYPE (type);
1156 When a parameter of reference type binds directly
1157 (_dcl.init.ref_) to an argument expression, the implicit
1158 conversion sequence is the identity conversion, unless the
1159 argument expression has a type that is a derived class of the
1160 parameter type, in which case the implicit conversion sequence is
1161 a derived-to-base Conversion.
1163 If the parameter binds directly to the result of applying a
1164 conversion function to the argument expression, the implicit
1165 conversion sequence is a user-defined conversion sequence
1166 (_over.ics.user_), with the second standard conversion sequence
1167 either an identity conversion or, if the conversion function
1168 returns an entity of a type that is a derived class of the
1169 parameter type, a derived-to-base conversion. */
1170 if (!same_type_ignoring_top_level_qualifiers_p (t, conv->type))
1172 /* Represent the derived-to-base conversion. */
1173 conv = build_conv (ck_base, t, conv);
1174 /* We will actually be binding to the base-class subobject in
1175 the derived class, so we mark this conversion appropriately.
1176 That way, convert_like knows not to generate a temporary. */
1177 conv->need_temporary_p = false;
1179 return build_conv (ck_ref_bind, type, conv);
1182 /* Returns the conversion path from type FROM to reference type TO for
1183 purposes of reference binding. For lvalue binding, either pass a
1184 reference type to FROM or an lvalue expression to EXPR. If the
1185 reference will be bound to a temporary, NEED_TEMPORARY_P is set for
1186 the conversion returned. If C_CAST_P is true, this
1187 conversion is coming from a C-style cast. */
1190 reference_binding (tree rto, tree rfrom, tree expr, bool c_cast_p, int flags)
1192 conversion *conv = NULL;
1193 tree to = TREE_TYPE (rto);
1198 cp_lvalue_kind lvalue_p = clk_none;
1200 if (TREE_CODE (to) == FUNCTION_TYPE && expr && type_unknown_p (expr))
1202 expr = instantiate_type (to, expr, tf_none);
1203 if (expr == error_mark_node)
1205 from = TREE_TYPE (expr);
1208 if (TREE_CODE (from) == REFERENCE_TYPE)
1210 /* Anything with reference type is an lvalue. */
1211 lvalue_p = clk_ordinary;
1212 from = TREE_TYPE (from);
1215 lvalue_p = real_lvalue_p (expr);
1218 if ((lvalue_p & clk_bitfield) != 0)
1219 tfrom = unlowered_expr_type (expr);
1221 /* Figure out whether or not the types are reference-related and
1222 reference compatible. We have do do this after stripping
1223 references from FROM. */
1224 related_p = reference_related_p (to, tfrom);
1225 /* If this is a C cast, first convert to an appropriately qualified
1226 type, so that we can later do a const_cast to the desired type. */
1227 if (related_p && c_cast_p
1228 && !at_least_as_qualified_p (to, tfrom))
1229 to = build_qualified_type (to, cp_type_quals (tfrom));
1230 compatible_p = reference_compatible_p (to, tfrom);
1232 /* Directly bind reference when target expression's type is compatible with
1233 the reference and expression is an lvalue. In DR391, the wording in
1234 [8.5.3/5 dcl.init.ref] is changed to also require direct bindings for
1235 const and rvalue references to rvalues of compatible class type. */
1238 || (!(flags & LOOKUP_NO_TEMP_BIND)
1239 && (CP_TYPE_CONST_NON_VOLATILE_P(to) || TYPE_REF_IS_RVALUE (rto))
1240 && CLASS_TYPE_P (from))))
1244 If the initializer expression
1246 -- is an lvalue (but not an lvalue for a bit-field), and "cv1 T1"
1247 is reference-compatible with "cv2 T2,"
1249 the reference is bound directly to the initializer expression
1253 If the initializer expression is an rvalue, with T2 a class type,
1254 and "cv1 T1" is reference-compatible with "cv2 T2", the reference
1255 is bound to the object represented by the rvalue or to a sub-object
1256 within that object. */
1258 conv = build_identity_conv (tfrom, expr);
1259 conv = direct_reference_binding (rto, conv);
1261 if (flags & LOOKUP_PREFER_RVALUE)
1262 /* The top-level caller requested that we pretend that the lvalue
1263 be treated as an rvalue. */
1264 conv->rvaluedness_matches_p = TYPE_REF_IS_RVALUE (rto);
1266 conv->rvaluedness_matches_p
1267 = (TYPE_REF_IS_RVALUE (rto) == !lvalue_p);
1269 if ((lvalue_p & clk_bitfield) != 0
1270 || ((lvalue_p & clk_packed) != 0 && !TYPE_PACKED (to)))
1271 /* For the purposes of overload resolution, we ignore the fact
1272 this expression is a bitfield or packed field. (In particular,
1273 [over.ics.ref] says specifically that a function with a
1274 non-const reference parameter is viable even if the
1275 argument is a bitfield.)
1277 However, when we actually call the function we must create
1278 a temporary to which to bind the reference. If the
1279 reference is volatile, or isn't const, then we cannot make
1280 a temporary, so we just issue an error when the conversion
1282 conv->need_temporary_p = true;
1286 /* [class.conv.fct] A conversion function is never used to convert a
1287 (possibly cv-qualified) object to the (possibly cv-qualified) same
1288 object type (or a reference to it), to a (possibly cv-qualified) base
1289 class of that type (or a reference to it).... */
1290 else if (CLASS_TYPE_P (from) && !related_p
1291 && !(flags & LOOKUP_NO_CONVERSION))
1295 If the initializer expression
1297 -- has a class type (i.e., T2 is a class type) can be
1298 implicitly converted to an lvalue of type "cv3 T3," where
1299 "cv1 T1" is reference-compatible with "cv3 T3". (this
1300 conversion is selected by enumerating the applicable
1301 conversion functions (_over.match.ref_) and choosing the
1302 best one through overload resolution. (_over.match_).
1304 the reference is bound to the lvalue result of the conversion
1305 in the second case. */
1306 conv = convert_class_to_reference (rto, from, expr);
1311 /* From this point on, we conceptually need temporaries, even if we
1312 elide them. Only the cases above are "direct bindings". */
1313 if (flags & LOOKUP_NO_TEMP_BIND)
1318 When a parameter of reference type is not bound directly to an
1319 argument expression, the conversion sequence is the one required
1320 to convert the argument expression to the underlying type of the
1321 reference according to _over.best.ics_. Conceptually, this
1322 conversion sequence corresponds to copy-initializing a temporary
1323 of the underlying type with the argument expression. Any
1324 difference in top-level cv-qualification is subsumed by the
1325 initialization itself and does not constitute a conversion. */
1329 Otherwise, the reference shall be to a non-volatile const type.
1331 Under C++0x, [8.5.3/5 dcl.init.ref] it may also be an rvalue reference */
1332 if (!CP_TYPE_CONST_NON_VOLATILE_P (to) && !TYPE_REF_IS_RVALUE (rto))
1337 Otherwise, a temporary of type "cv1 T1" is created and
1338 initialized from the initializer expression using the rules for a
1339 non-reference copy initialization. If T1 is reference-related to
1340 T2, cv1 must be the same cv-qualification as, or greater
1341 cv-qualification than, cv2; otherwise, the program is ill-formed. */
1342 if (related_p && !at_least_as_qualified_p (to, from))
1345 /* We're generating a temporary now, but don't bind any more in the
1346 conversion (specifically, don't slice the temporary returned by a
1347 conversion operator). */
1348 flags |= LOOKUP_NO_TEMP_BIND;
1350 conv = implicit_conversion (to, from, expr, c_cast_p,
1355 conv = build_conv (ck_ref_bind, rto, conv);
1356 /* This reference binding, unlike those above, requires the
1357 creation of a temporary. */
1358 conv->need_temporary_p = true;
1359 conv->rvaluedness_matches_p = TYPE_REF_IS_RVALUE (rto);
1364 /* Returns the implicit conversion sequence (see [over.ics]) from type
1365 FROM to type TO. The optional expression EXPR may affect the
1366 conversion. FLAGS are the usual overloading flags. If C_CAST_P is
1367 true, this conversion is coming from a C-style cast. */
1370 implicit_conversion (tree to, tree from, tree expr, bool c_cast_p,
1375 if (from == error_mark_node || to == error_mark_node
1376 || expr == error_mark_node)
1379 if (TREE_CODE (to) == REFERENCE_TYPE)
1380 conv = reference_binding (to, from, expr, c_cast_p, flags);
1382 conv = standard_conversion (to, from, expr, c_cast_p, flags);
1387 if (expr && BRACE_ENCLOSED_INITIALIZER_P (expr))
1389 if (is_std_init_list (to))
1390 return build_list_conv (to, expr, flags);
1392 /* Allow conversion from an initializer-list with one element to a
1394 if (SCALAR_TYPE_P (to))
1396 int nelts = CONSTRUCTOR_NELTS (expr);
1400 elt = integer_zero_node;
1401 else if (nelts == 1)
1402 elt = CONSTRUCTOR_ELT (expr, 0)->value;
1404 elt = error_mark_node;
1406 conv = implicit_conversion (to, TREE_TYPE (elt), elt,
1410 conv->check_narrowing = true;
1411 if (BRACE_ENCLOSED_INITIALIZER_P (elt))
1412 /* Too many levels of braces, i.e. '{{1}}'. */
1419 if (expr != NULL_TREE
1420 && (MAYBE_CLASS_TYPE_P (from)
1421 || MAYBE_CLASS_TYPE_P (to))
1422 && (flags & LOOKUP_NO_CONVERSION) == 0)
1424 struct z_candidate *cand;
1425 int convflags = ((flags & LOOKUP_NO_TEMP_BIND)
1426 |LOOKUP_ONLYCONVERTING);
1428 if (CLASS_TYPE_P (to)
1429 && !CLASSTYPE_NON_AGGREGATE (complete_type (to))
1430 && BRACE_ENCLOSED_INITIALIZER_P (expr))
1431 return build_aggr_conv (to, expr, flags);
1433 cand = build_user_type_conversion_1 (to, expr, convflags);
1435 conv = cand->second_conv;
1437 /* We used to try to bind a reference to a temporary here, but that
1438 is now handled after the recursive call to this function at the end
1439 of reference_binding. */
1446 /* Add a new entry to the list of candidates. Used by the add_*_candidate
1449 static struct z_candidate *
1450 add_candidate (struct z_candidate **candidates,
1452 size_t num_convs, conversion **convs,
1453 tree access_path, tree conversion_path,
1456 struct z_candidate *cand = (struct z_candidate *)
1457 conversion_obstack_alloc (sizeof (struct z_candidate));
1461 cand->convs = convs;
1462 cand->num_convs = num_convs;
1463 cand->access_path = access_path;
1464 cand->conversion_path = conversion_path;
1465 cand->viable = viable;
1466 cand->next = *candidates;
1472 /* Create an overload candidate for the function or method FN called with
1473 the argument list ARGLIST and add it to CANDIDATES. FLAGS is passed on
1474 to implicit_conversion.
1476 CTYPE, if non-NULL, is the type we want to pretend this function
1477 comes from for purposes of overload resolution. */
1479 static struct z_candidate *
1480 add_function_candidate (struct z_candidate **candidates,
1481 tree fn, tree ctype, tree arglist,
1482 tree access_path, tree conversion_path,
1485 tree parmlist = TYPE_ARG_TYPES (TREE_TYPE (fn));
1488 tree parmnode, argnode;
1492 /* At this point we should not see any functions which haven't been
1493 explicitly declared, except for friend functions which will have
1494 been found using argument dependent lookup. */
1495 gcc_assert (!DECL_ANTICIPATED (fn) || DECL_HIDDEN_FRIEND_P (fn));
1497 /* The `this', `in_chrg' and VTT arguments to constructors are not
1498 considered in overload resolution. */
1499 if (DECL_CONSTRUCTOR_P (fn))
1501 parmlist = skip_artificial_parms_for (fn, parmlist);
1502 orig_arglist = arglist;
1503 arglist = skip_artificial_parms_for (fn, arglist);
1506 orig_arglist = arglist;
1508 len = list_length (arglist);
1509 convs = alloc_conversions (len);
1511 /* 13.3.2 - Viable functions [over.match.viable]
1512 First, to be a viable function, a candidate function shall have enough
1513 parameters to agree in number with the arguments in the list.
1515 We need to check this first; otherwise, checking the ICSes might cause
1516 us to produce an ill-formed template instantiation. */
1518 parmnode = parmlist;
1519 for (i = 0; i < len; ++i)
1521 if (parmnode == NULL_TREE || parmnode == void_list_node)
1523 parmnode = TREE_CHAIN (parmnode);
1526 if (i < len && parmnode)
1529 /* Make sure there are default args for the rest of the parms. */
1530 else if (!sufficient_parms_p (parmnode))
1536 /* Second, for F to be a viable function, there shall exist for each
1537 argument an implicit conversion sequence that converts that argument
1538 to the corresponding parameter of F. */
1540 parmnode = parmlist;
1543 for (i = 0; i < len; ++i)
1545 tree arg = TREE_VALUE (argnode);
1546 tree argtype = lvalue_type (arg);
1550 if (parmnode == void_list_node)
1553 is_this = (i == 0 && DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
1554 && ! DECL_CONSTRUCTOR_P (fn));
1558 tree parmtype = TREE_VALUE (parmnode);
1561 /* The type of the implicit object parameter ('this') for
1562 overload resolution is not always the same as for the
1563 function itself; conversion functions are considered to
1564 be members of the class being converted, and functions
1565 introduced by a using-declaration are considered to be
1566 members of the class that uses them.
1568 Since build_over_call ignores the ICS for the `this'
1569 parameter, we can just change the parm type. */
1570 if (ctype && is_this)
1573 = build_qualified_type (ctype,
1574 TYPE_QUALS (TREE_TYPE (parmtype)));
1575 parmtype = build_pointer_type (parmtype);
1578 if ((flags & LOOKUP_NO_COPY_CTOR_CONVERSION)
1579 && ctype && i == 0 && DECL_COPY_CONSTRUCTOR_P (fn))
1580 lflags |= LOOKUP_NO_CONVERSION;
1582 t = implicit_conversion (parmtype, argtype, arg,
1583 /*c_cast_p=*/false, lflags);
1587 t = build_identity_conv (argtype, arg);
1588 t->ellipsis_p = true;
1605 parmnode = TREE_CHAIN (parmnode);
1606 argnode = TREE_CHAIN (argnode);
1610 return add_candidate (candidates, fn, orig_arglist, len, convs,
1611 access_path, conversion_path, viable);
1614 /* Create an overload candidate for the conversion function FN which will
1615 be invoked for expression OBJ, producing a pointer-to-function which
1616 will in turn be called with the argument list ARGLIST, and add it to
1617 CANDIDATES. FLAGS is passed on to implicit_conversion.
1619 Actually, we don't really care about FN; we care about the type it
1620 converts to. There may be multiple conversion functions that will
1621 convert to that type, and we rely on build_user_type_conversion_1 to
1622 choose the best one; so when we create our candidate, we record the type
1623 instead of the function. */
1625 static struct z_candidate *
1626 add_conv_candidate (struct z_candidate **candidates, tree fn, tree obj,
1627 tree arglist, tree access_path, tree conversion_path)
1629 tree totype = TREE_TYPE (TREE_TYPE (fn));
1630 int i, len, viable, flags;
1631 tree parmlist, parmnode, argnode;
1634 for (parmlist = totype; TREE_CODE (parmlist) != FUNCTION_TYPE; )
1635 parmlist = TREE_TYPE (parmlist);
1636 parmlist = TYPE_ARG_TYPES (parmlist);
1638 len = list_length (arglist) + 1;
1639 convs = alloc_conversions (len);
1640 parmnode = parmlist;
1643 flags = LOOKUP_NORMAL;
1645 /* Don't bother looking up the same type twice. */
1646 if (*candidates && (*candidates)->fn == totype)
1649 for (i = 0; i < len; ++i)
1651 tree arg = i == 0 ? obj : TREE_VALUE (argnode);
1652 tree argtype = lvalue_type (arg);
1656 t = implicit_conversion (totype, argtype, arg, /*c_cast_p=*/false,
1658 else if (parmnode == void_list_node)
1661 t = implicit_conversion (TREE_VALUE (parmnode), argtype, arg,
1662 /*c_cast_p=*/false, flags);
1665 t = build_identity_conv (argtype, arg);
1666 t->ellipsis_p = true;
1680 parmnode = TREE_CHAIN (parmnode);
1681 argnode = TREE_CHAIN (argnode);
1687 if (!sufficient_parms_p (parmnode))
1690 return add_candidate (candidates, totype, arglist, len, convs,
1691 access_path, conversion_path, viable);
1695 build_builtin_candidate (struct z_candidate **candidates, tree fnname,
1696 tree type1, tree type2, tree *args, tree *argtypes,
1708 num_convs = args[2] ? 3 : (args[1] ? 2 : 1);
1709 convs = alloc_conversions (num_convs);
1711 for (i = 0; i < 2; ++i)
1716 t = implicit_conversion (types[i], argtypes[i], args[i],
1717 /*c_cast_p=*/false, flags);
1721 /* We need something for printing the candidate. */
1722 t = build_identity_conv (types[i], NULL_TREE);
1729 /* For COND_EXPR we rearranged the arguments; undo that now. */
1732 convs[2] = convs[1];
1733 convs[1] = convs[0];
1734 t = implicit_conversion (boolean_type_node, argtypes[2], args[2],
1735 /*c_cast_p=*/false, flags);
1742 add_candidate (candidates, fnname, /*args=*/NULL_TREE,
1744 /*access_path=*/NULL_TREE,
1745 /*conversion_path=*/NULL_TREE,
1750 is_complete (tree t)
1752 return COMPLETE_TYPE_P (complete_type (t));
1755 /* Returns nonzero if TYPE is a promoted arithmetic type. */
1758 promoted_arithmetic_type_p (tree type)
1762 In this section, the term promoted integral type is used to refer
1763 to those integral types which are preserved by integral promotion
1764 (including e.g. int and long but excluding e.g. char).
1765 Similarly, the term promoted arithmetic type refers to promoted
1766 integral types plus floating types. */
1767 return ((INTEGRAL_TYPE_P (type)
1768 && same_type_p (type_promotes_to (type), type))
1769 || TREE_CODE (type) == REAL_TYPE);
1772 /* Create any builtin operator overload candidates for the operator in
1773 question given the converted operand types TYPE1 and TYPE2. The other
1774 args are passed through from add_builtin_candidates to
1775 build_builtin_candidate.
1777 TYPE1 and TYPE2 may not be permissible, and we must filter them.
1778 If CODE is requires candidates operands of the same type of the kind
1779 of which TYPE1 and TYPE2 are, we add both candidates
1780 CODE (TYPE1, TYPE1) and CODE (TYPE2, TYPE2). */
1783 add_builtin_candidate (struct z_candidate **candidates, enum tree_code code,
1784 enum tree_code code2, tree fnname, tree type1,
1785 tree type2, tree *args, tree *argtypes, int flags)
1789 case POSTINCREMENT_EXPR:
1790 case POSTDECREMENT_EXPR:
1791 args[1] = integer_zero_node;
1792 type2 = integer_type_node;
1801 /* 4 For every pair T, VQ), where T is an arithmetic or enumeration type,
1802 and VQ is either volatile or empty, there exist candidate operator
1803 functions of the form
1804 VQ T& operator++(VQ T&);
1805 T operator++(VQ T&, int);
1806 5 For every pair T, VQ), where T is an enumeration type or an arithmetic
1807 type other than bool, and VQ is either volatile or empty, there exist
1808 candidate operator functions of the form
1809 VQ T& operator--(VQ T&);
1810 T operator--(VQ T&, int);
1811 6 For every pair T, VQ), where T is a cv-qualified or cv-unqualified
1812 complete object type, and VQ is either volatile or empty, there exist
1813 candidate operator functions of the form
1814 T*VQ& operator++(T*VQ&);
1815 T*VQ& operator--(T*VQ&);
1816 T* operator++(T*VQ&, int);
1817 T* operator--(T*VQ&, int); */
1819 case POSTDECREMENT_EXPR:
1820 case PREDECREMENT_EXPR:
1821 if (TREE_CODE (type1) == BOOLEAN_TYPE)
1823 case POSTINCREMENT_EXPR:
1824 case PREINCREMENT_EXPR:
1825 if (ARITHMETIC_TYPE_P (type1) || TYPE_PTROB_P (type1))
1827 type1 = build_reference_type (type1);
1832 /* 7 For every cv-qualified or cv-unqualified complete object type T, there
1833 exist candidate operator functions of the form
1837 8 For every function type T, there exist candidate operator functions of
1839 T& operator*(T*); */
1842 if (TREE_CODE (type1) == POINTER_TYPE
1843 && (TYPE_PTROB_P (type1)
1844 || TREE_CODE (TREE_TYPE (type1)) == FUNCTION_TYPE))
1848 /* 9 For every type T, there exist candidate operator functions of the form
1851 10For every promoted arithmetic type T, there exist candidate operator
1852 functions of the form
1856 case UNARY_PLUS_EXPR: /* unary + */
1857 if (TREE_CODE (type1) == POINTER_TYPE)
1860 if (ARITHMETIC_TYPE_P (type1))
1864 /* 11For every promoted integral type T, there exist candidate operator
1865 functions of the form
1869 if (INTEGRAL_TYPE_P (type1))
1873 /* 12For every quintuple C1, C2, T, CV1, CV2), where C2 is a class type, C1
1874 is the same type as C2 or is a derived class of C2, T is a complete
1875 object type or a function type, and CV1 and CV2 are cv-qualifier-seqs,
1876 there exist candidate operator functions of the form
1877 CV12 T& operator->*(CV1 C1*, CV2 T C2::*);
1878 where CV12 is the union of CV1 and CV2. */
1881 if (TREE_CODE (type1) == POINTER_TYPE
1882 && TYPE_PTR_TO_MEMBER_P (type2))
1884 tree c1 = TREE_TYPE (type1);
1885 tree c2 = TYPE_PTRMEM_CLASS_TYPE (type2);
1887 if (MAYBE_CLASS_TYPE_P (c1) && DERIVED_FROM_P (c2, c1)
1888 && (TYPE_PTRMEMFUNC_P (type2)
1889 || is_complete (TYPE_PTRMEM_POINTED_TO_TYPE (type2))))
1894 /* 13For every pair of promoted arithmetic types L and R, there exist can-
1895 didate operator functions of the form
1900 bool operator<(L, R);
1901 bool operator>(L, R);
1902 bool operator<=(L, R);
1903 bool operator>=(L, R);
1904 bool operator==(L, R);
1905 bool operator!=(L, R);
1906 where LR is the result of the usual arithmetic conversions between
1909 14For every pair of types T and I, where T is a cv-qualified or cv-
1910 unqualified complete object type and I is a promoted integral type,
1911 there exist candidate operator functions of the form
1912 T* operator+(T*, I);
1913 T& operator[](T*, I);
1914 T* operator-(T*, I);
1915 T* operator+(I, T*);
1916 T& operator[](I, T*);
1918 15For every T, where T is a pointer to complete object type, there exist
1919 candidate operator functions of the form112)
1920 ptrdiff_t operator-(T, T);
1922 16For every pointer or enumeration type T, there exist candidate operator
1923 functions of the form
1924 bool operator<(T, T);
1925 bool operator>(T, T);
1926 bool operator<=(T, T);
1927 bool operator>=(T, T);
1928 bool operator==(T, T);
1929 bool operator!=(T, T);
1931 17For every pointer to member type T, there exist candidate operator
1932 functions of the form
1933 bool operator==(T, T);
1934 bool operator!=(T, T); */
1937 if (TYPE_PTROB_P (type1) && TYPE_PTROB_P (type2))
1939 if (TYPE_PTROB_P (type1) && INTEGRAL_TYPE_P (type2))
1941 type2 = ptrdiff_type_node;
1945 case TRUNC_DIV_EXPR:
1946 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
1952 if ((TYPE_PTRMEMFUNC_P (type1) && TYPE_PTRMEMFUNC_P (type2))
1953 || (TYPE_PTRMEM_P (type1) && TYPE_PTRMEM_P (type2)))
1955 if (TYPE_PTR_TO_MEMBER_P (type1) && null_ptr_cst_p (args[1]))
1960 if (TYPE_PTR_TO_MEMBER_P (type2) && null_ptr_cst_p (args[0]))
1972 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
1974 if (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
1976 if (TREE_CODE (type1) == ENUMERAL_TYPE
1977 && TREE_CODE (type2) == ENUMERAL_TYPE)
1979 if (TYPE_PTR_P (type1)
1980 && null_ptr_cst_p (args[1])
1981 && !uses_template_parms (type1))
1986 if (null_ptr_cst_p (args[0])
1987 && TYPE_PTR_P (type2)
1988 && !uses_template_parms (type2))
1996 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
1999 if (INTEGRAL_TYPE_P (type1) && TYPE_PTROB_P (type2))
2001 type1 = ptrdiff_type_node;
2004 if (TYPE_PTROB_P (type1) && INTEGRAL_TYPE_P (type2))
2006 type2 = ptrdiff_type_node;
2011 /* 18For every pair of promoted integral types L and R, there exist candi-
2012 date operator functions of the form
2019 where LR is the result of the usual arithmetic conversions between
2022 case TRUNC_MOD_EXPR:
2028 if (INTEGRAL_TYPE_P (type1) && INTEGRAL_TYPE_P (type2))
2032 /* 19For every triple L, VQ, R), where L is an arithmetic or enumeration
2033 type, VQ is either volatile or empty, and R is a promoted arithmetic
2034 type, there exist candidate operator functions of the form
2035 VQ L& operator=(VQ L&, R);
2036 VQ L& operator*=(VQ L&, R);
2037 VQ L& operator/=(VQ L&, R);
2038 VQ L& operator+=(VQ L&, R);
2039 VQ L& operator-=(VQ L&, R);
2041 20For every pair T, VQ), where T is any type and VQ is either volatile
2042 or empty, there exist candidate operator functions of the form
2043 T*VQ& operator=(T*VQ&, T*);
2045 21For every pair T, VQ), where T is a pointer to member type and VQ is
2046 either volatile or empty, there exist candidate operator functions of
2048 VQ T& operator=(VQ T&, T);
2050 22For every triple T, VQ, I), where T is a cv-qualified or cv-
2051 unqualified complete object type, VQ is either volatile or empty, and
2052 I is a promoted integral type, there exist candidate operator func-
2054 T*VQ& operator+=(T*VQ&, I);
2055 T*VQ& operator-=(T*VQ&, I);
2057 23For every triple L, VQ, R), where L is an integral or enumeration
2058 type, VQ is either volatile or empty, and R is a promoted integral
2059 type, there exist candidate operator functions of the form
2061 VQ L& operator%=(VQ L&, R);
2062 VQ L& operator<<=(VQ L&, R);
2063 VQ L& operator>>=(VQ L&, R);
2064 VQ L& operator&=(VQ L&, R);
2065 VQ L& operator^=(VQ L&, R);
2066 VQ L& operator|=(VQ L&, R); */
2073 if (TYPE_PTROB_P (type1) && INTEGRAL_TYPE_P (type2))
2075 type2 = ptrdiff_type_node;
2079 case TRUNC_DIV_EXPR:
2080 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2084 case TRUNC_MOD_EXPR:
2090 if (INTEGRAL_TYPE_P (type1) && INTEGRAL_TYPE_P (type2))
2095 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2097 if ((TYPE_PTRMEMFUNC_P (type1) && TYPE_PTRMEMFUNC_P (type2))
2098 || (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
2099 || (TYPE_PTRMEM_P (type1) && TYPE_PTRMEM_P (type2))
2100 || ((TYPE_PTRMEMFUNC_P (type1)
2101 || TREE_CODE (type1) == POINTER_TYPE)
2102 && null_ptr_cst_p (args[1])))
2112 type1 = build_reference_type (type1);
2118 For every pair of promoted arithmetic types L and R, there
2119 exist candidate operator functions of the form
2121 LR operator?(bool, L, R);
2123 where LR is the result of the usual arithmetic conversions
2124 between types L and R.
2126 For every type T, where T is a pointer or pointer-to-member
2127 type, there exist candidate operator functions of the form T
2128 operator?(bool, T, T); */
2130 if (promoted_arithmetic_type_p (type1)
2131 && promoted_arithmetic_type_p (type2))
2135 /* Otherwise, the types should be pointers. */
2136 if (!(TYPE_PTR_P (type1) || TYPE_PTR_TO_MEMBER_P (type1))
2137 || !(TYPE_PTR_P (type2) || TYPE_PTR_TO_MEMBER_P (type2)))
2140 /* We don't check that the two types are the same; the logic
2141 below will actually create two candidates; one in which both
2142 parameter types are TYPE1, and one in which both parameter
2150 /* If we're dealing with two pointer types or two enumeral types,
2151 we need candidates for both of them. */
2152 if (type2 && !same_type_p (type1, type2)
2153 && TREE_CODE (type1) == TREE_CODE (type2)
2154 && (TREE_CODE (type1) == REFERENCE_TYPE
2155 || (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
2156 || (TYPE_PTRMEM_P (type1) && TYPE_PTRMEM_P (type2))
2157 || TYPE_PTRMEMFUNC_P (type1)
2158 || MAYBE_CLASS_TYPE_P (type1)
2159 || TREE_CODE (type1) == ENUMERAL_TYPE))
2161 build_builtin_candidate
2162 (candidates, fnname, type1, type1, args, argtypes, flags);
2163 build_builtin_candidate
2164 (candidates, fnname, type2, type2, args, argtypes, flags);
2168 build_builtin_candidate
2169 (candidates, fnname, type1, type2, args, argtypes, flags);
2173 type_decays_to (tree type)
2175 if (TREE_CODE (type) == ARRAY_TYPE)
2176 return build_pointer_type (TREE_TYPE (type));
2177 if (TREE_CODE (type) == FUNCTION_TYPE)
2178 return build_pointer_type (type);
2182 /* There are three conditions of builtin candidates:
2184 1) bool-taking candidates. These are the same regardless of the input.
2185 2) pointer-pair taking candidates. These are generated for each type
2186 one of the input types converts to.
2187 3) arithmetic candidates. According to the standard, we should generate
2188 all of these, but I'm trying not to...
2190 Here we generate a superset of the possible candidates for this particular
2191 case. That is a subset of the full set the standard defines, plus some
2192 other cases which the standard disallows. add_builtin_candidate will
2193 filter out the invalid set. */
2196 add_builtin_candidates (struct z_candidate **candidates, enum tree_code code,
2197 enum tree_code code2, tree fnname, tree *args,
2202 tree type, argtypes[3];
2203 /* TYPES[i] is the set of possible builtin-operator parameter types
2204 we will consider for the Ith argument. These are represented as
2205 a TREE_LIST; the TREE_VALUE of each node is the potential
2209 for (i = 0; i < 3; ++i)
2212 argtypes[i] = unlowered_expr_type (args[i]);
2214 argtypes[i] = NULL_TREE;
2219 /* 4 For every pair T, VQ), where T is an arithmetic or enumeration type,
2220 and VQ is either volatile or empty, there exist candidate operator
2221 functions of the form
2222 VQ T& operator++(VQ T&); */
2224 case POSTINCREMENT_EXPR:
2225 case PREINCREMENT_EXPR:
2226 case POSTDECREMENT_EXPR:
2227 case PREDECREMENT_EXPR:
2232 /* 24There also exist candidate operator functions of the form
2233 bool operator!(bool);
2234 bool operator&&(bool, bool);
2235 bool operator||(bool, bool); */
2237 case TRUTH_NOT_EXPR:
2238 build_builtin_candidate
2239 (candidates, fnname, boolean_type_node,
2240 NULL_TREE, args, argtypes, flags);
2243 case TRUTH_ORIF_EXPR:
2244 case TRUTH_ANDIF_EXPR:
2245 build_builtin_candidate
2246 (candidates, fnname, boolean_type_node,
2247 boolean_type_node, args, argtypes, flags);
2269 types[0] = types[1] = NULL_TREE;
2271 for (i = 0; i < 2; ++i)
2275 else if (MAYBE_CLASS_TYPE_P (argtypes[i]))
2279 if (i == 0 && code == MODIFY_EXPR && code2 == NOP_EXPR)
2282 convs = lookup_conversions (argtypes[i]);
2284 if (code == COND_EXPR)
2286 if (real_lvalue_p (args[i]))
2287 types[i] = tree_cons
2288 (NULL_TREE, build_reference_type (argtypes[i]), types[i]);
2290 types[i] = tree_cons
2291 (NULL_TREE, TYPE_MAIN_VARIANT (argtypes[i]), types[i]);
2297 for (; convs; convs = TREE_CHAIN (convs))
2299 type = TREE_TYPE (TREE_TYPE (OVL_CURRENT (TREE_VALUE (convs))));
2302 && (TREE_CODE (type) != REFERENCE_TYPE
2303 || CP_TYPE_CONST_P (TREE_TYPE (type))))
2306 if (code == COND_EXPR && TREE_CODE (type) == REFERENCE_TYPE)
2307 types[i] = tree_cons (NULL_TREE, type, types[i]);
2309 type = non_reference (type);
2310 if (i != 0 || ! ref1)
2312 type = TYPE_MAIN_VARIANT (type_decays_to (type));
2313 if (enum_p && TREE_CODE (type) == ENUMERAL_TYPE)
2314 types[i] = tree_cons (NULL_TREE, type, types[i]);
2315 if (INTEGRAL_TYPE_P (type))
2316 type = type_promotes_to (type);
2319 if (! value_member (type, types[i]))
2320 types[i] = tree_cons (NULL_TREE, type, types[i]);
2325 if (code == COND_EXPR && real_lvalue_p (args[i]))
2326 types[i] = tree_cons
2327 (NULL_TREE, build_reference_type (argtypes[i]), types[i]);
2328 type = non_reference (argtypes[i]);
2329 if (i != 0 || ! ref1)
2331 type = TYPE_MAIN_VARIANT (type_decays_to (type));
2332 if (enum_p && TREE_CODE (type) == ENUMERAL_TYPE)
2333 types[i] = tree_cons (NULL_TREE, type, types[i]);
2334 if (INTEGRAL_TYPE_P (type))
2335 type = type_promotes_to (type);
2337 types[i] = tree_cons (NULL_TREE, type, types[i]);
2341 /* Run through the possible parameter types of both arguments,
2342 creating candidates with those parameter types. */
2343 for (; types[0]; types[0] = TREE_CHAIN (types[0]))
2346 for (type = types[1]; type; type = TREE_CHAIN (type))
2347 add_builtin_candidate
2348 (candidates, code, code2, fnname, TREE_VALUE (types[0]),
2349 TREE_VALUE (type), args, argtypes, flags);
2351 add_builtin_candidate
2352 (candidates, code, code2, fnname, TREE_VALUE (types[0]),
2353 NULL_TREE, args, argtypes, flags);
2358 /* If TMPL can be successfully instantiated as indicated by
2359 EXPLICIT_TARGS and ARGLIST, adds the instantiation to CANDIDATES.
2361 TMPL is the template. EXPLICIT_TARGS are any explicit template
2362 arguments. ARGLIST is the arguments provided at the call-site.
2363 The RETURN_TYPE is the desired type for conversion operators. If
2364 OBJ is NULL_TREE, FLAGS and CTYPE are as for add_function_candidate.
2365 If an OBJ is supplied, FLAGS and CTYPE are ignored, and OBJ is as for
2366 add_conv_candidate. */
2368 static struct z_candidate*
2369 add_template_candidate_real (struct z_candidate **candidates, tree tmpl,
2370 tree ctype, tree explicit_targs, tree arglist,
2371 tree return_type, tree access_path,
2372 tree conversion_path, int flags, tree obj,
2373 unification_kind_t strict)
2375 int ntparms = DECL_NTPARMS (tmpl);
2376 tree targs = make_tree_vec (ntparms);
2377 tree args_without_in_chrg = arglist;
2378 struct z_candidate *cand;
2382 /* We don't do deduction on the in-charge parameter, the VTT
2383 parameter or 'this'. */
2384 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (tmpl))
2385 args_without_in_chrg = TREE_CHAIN (args_without_in_chrg);
2387 if ((DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (tmpl)
2388 || DECL_BASE_CONSTRUCTOR_P (tmpl))
2389 && CLASSTYPE_VBASECLASSES (DECL_CONTEXT (tmpl)))
2390 args_without_in_chrg = TREE_CHAIN (args_without_in_chrg);
2392 i = fn_type_unification (tmpl, explicit_targs, targs,
2393 args_without_in_chrg,
2394 return_type, strict, flags);
2399 fn = instantiate_template (tmpl, targs, tf_none);
2400 if (fn == error_mark_node)
2405 A member function template is never instantiated to perform the
2406 copy of a class object to an object of its class type.
2408 It's a little unclear what this means; the standard explicitly
2409 does allow a template to be used to copy a class. For example,
2414 template <class T> A(const T&);
2417 void g () { A a (f ()); }
2419 the member template will be used to make the copy. The section
2420 quoted above appears in the paragraph that forbids constructors
2421 whose only parameter is (a possibly cv-qualified variant of) the
2422 class type, and a logical interpretation is that the intent was
2423 to forbid the instantiation of member templates which would then
2425 if (DECL_CONSTRUCTOR_P (fn) && list_length (arglist) == 2)
2427 tree arg_types = FUNCTION_FIRST_USER_PARMTYPE (fn);
2428 if (arg_types && same_type_p (TYPE_MAIN_VARIANT (TREE_VALUE (arg_types)),
2433 if (obj != NULL_TREE)
2434 /* Aha, this is a conversion function. */
2435 cand = add_conv_candidate (candidates, fn, obj, access_path,
2436 conversion_path, arglist);
2438 cand = add_function_candidate (candidates, fn, ctype,
2439 arglist, access_path,
2440 conversion_path, flags);
2441 if (DECL_TI_TEMPLATE (fn) != tmpl)
2442 /* This situation can occur if a member template of a template
2443 class is specialized. Then, instantiate_template might return
2444 an instantiation of the specialization, in which case the
2445 DECL_TI_TEMPLATE field will point at the original
2446 specialization. For example:
2448 template <class T> struct S { template <class U> void f(U);
2449 template <> void f(int) {}; };
2453 Here, TMPL will be template <class U> S<double>::f(U).
2454 And, instantiate template will give us the specialization
2455 template <> S<double>::f(int). But, the DECL_TI_TEMPLATE field
2456 for this will point at template <class T> template <> S<T>::f(int),
2457 so that we can find the definition. For the purposes of
2458 overload resolution, however, we want the original TMPL. */
2459 cand->template_decl = tree_cons (tmpl, targs, NULL_TREE);
2461 cand->template_decl = DECL_TEMPLATE_INFO (fn);
2467 static struct z_candidate *
2468 add_template_candidate (struct z_candidate **candidates, tree tmpl, tree ctype,
2469 tree explicit_targs, tree arglist, tree return_type,
2470 tree access_path, tree conversion_path, int flags,
2471 unification_kind_t strict)
2474 add_template_candidate_real (candidates, tmpl, ctype,
2475 explicit_targs, arglist, return_type,
2476 access_path, conversion_path,
2477 flags, NULL_TREE, strict);
2481 static struct z_candidate *
2482 add_template_conv_candidate (struct z_candidate **candidates, tree tmpl,
2483 tree obj, tree arglist, tree return_type,
2484 tree access_path, tree conversion_path)
2487 add_template_candidate_real (candidates, tmpl, NULL_TREE, NULL_TREE,
2488 arglist, return_type, access_path,
2489 conversion_path, 0, obj, DEDUCE_CONV);
2492 /* The CANDS are the set of candidates that were considered for
2493 overload resolution. Return the set of viable candidates. If none
2494 of the candidates were viable, set *ANY_VIABLE_P to true. STRICT_P
2495 is true if a candidate should be considered viable only if it is
2498 static struct z_candidate*
2499 splice_viable (struct z_candidate *cands,
2503 struct z_candidate *viable;
2504 struct z_candidate **last_viable;
2505 struct z_candidate **cand;
2508 last_viable = &viable;
2509 *any_viable_p = false;
2514 struct z_candidate *c = *cand;
2515 if (strict_p ? c->viable == 1 : c->viable)
2520 last_viable = &c->next;
2521 *any_viable_p = true;
2527 return viable ? viable : cands;
2531 any_strictly_viable (struct z_candidate *cands)
2533 for (; cands; cands = cands->next)
2534 if (cands->viable == 1)
2539 /* OBJ is being used in an expression like "OBJ.f (...)". In other
2540 words, it is about to become the "this" pointer for a member
2541 function call. Take the address of the object. */
2544 build_this (tree obj)
2546 /* In a template, we are only concerned about the type of the
2547 expression, so we can take a shortcut. */
2548 if (processing_template_decl)
2549 return build_address (obj);
2551 return cp_build_unary_op (ADDR_EXPR, obj, 0, tf_warning_or_error);
2554 /* Returns true iff functions are equivalent. Equivalent functions are
2555 not '==' only if one is a function-local extern function or if
2556 both are extern "C". */
2559 equal_functions (tree fn1, tree fn2)
2561 if (DECL_LOCAL_FUNCTION_P (fn1) || DECL_LOCAL_FUNCTION_P (fn2)
2562 || DECL_EXTERN_C_FUNCTION_P (fn1))
2563 return decls_match (fn1, fn2);
2567 /* Print information about one overload candidate CANDIDATE. MSGSTR
2568 is the text to print before the candidate itself.
2570 NOTE: Unlike most diagnostic functions in GCC, MSGSTR is expected
2571 to have been run through gettext by the caller. This wart makes
2572 life simpler in print_z_candidates and for the translators. */
2575 print_z_candidate (const char *msgstr, struct z_candidate *candidate)
2577 if (TREE_CODE (candidate->fn) == IDENTIFIER_NODE)
2579 if (candidate->num_convs == 3)
2580 inform (input_location, "%s %D(%T, %T, %T) <built-in>", msgstr, candidate->fn,
2581 candidate->convs[0]->type,
2582 candidate->convs[1]->type,
2583 candidate->convs[2]->type);
2584 else if (candidate->num_convs == 2)
2585 inform (input_location, "%s %D(%T, %T) <built-in>", msgstr, candidate->fn,
2586 candidate->convs[0]->type,
2587 candidate->convs[1]->type);
2589 inform (input_location, "%s %D(%T) <built-in>", msgstr, candidate->fn,
2590 candidate->convs[0]->type);
2592 else if (TYPE_P (candidate->fn))
2593 inform (input_location, "%s %T <conversion>", msgstr, candidate->fn);
2594 else if (candidate->viable == -1)
2595 inform (input_location, "%s %+#D <near match>", msgstr, candidate->fn);
2597 inform (input_location, "%s %+#D", msgstr, candidate->fn);
2601 print_z_candidates (struct z_candidate *candidates)
2604 struct z_candidate *cand1;
2605 struct z_candidate **cand2;
2607 /* There may be duplicates in the set of candidates. We put off
2608 checking this condition as long as possible, since we have no way
2609 to eliminate duplicates from a set of functions in less than n^2
2610 time. Now we are about to emit an error message, so it is more
2611 permissible to go slowly. */
2612 for (cand1 = candidates; cand1; cand1 = cand1->next)
2614 tree fn = cand1->fn;
2615 /* Skip builtin candidates and conversion functions. */
2616 if (TREE_CODE (fn) != FUNCTION_DECL)
2618 cand2 = &cand1->next;
2621 if (TREE_CODE ((*cand2)->fn) == FUNCTION_DECL
2622 && equal_functions (fn, (*cand2)->fn))
2623 *cand2 = (*cand2)->next;
2625 cand2 = &(*cand2)->next;
2632 str = _("candidates are:");
2633 print_z_candidate (str, candidates);
2634 if (candidates->next)
2636 /* Indent successive candidates by the width of the translation
2637 of the above string. */
2638 size_t len = gcc_gettext_width (str) + 1;
2639 char *spaces = (char *) alloca (len);
2640 memset (spaces, ' ', len-1);
2641 spaces[len - 1] = '\0';
2643 candidates = candidates->next;
2646 print_z_candidate (spaces, candidates);
2647 candidates = candidates->next;
2653 /* USER_SEQ is a user-defined conversion sequence, beginning with a
2654 USER_CONV. STD_SEQ is the standard conversion sequence applied to
2655 the result of the conversion function to convert it to the final
2656 desired type. Merge the two sequences into a single sequence,
2657 and return the merged sequence. */
2660 merge_conversion_sequences (conversion *user_seq, conversion *std_seq)
2664 gcc_assert (user_seq->kind == ck_user);
2666 /* Find the end of the second conversion sequence. */
2668 while ((*t)->kind != ck_identity)
2669 t = &((*t)->u.next);
2671 /* Replace the identity conversion with the user conversion
2675 /* The entire sequence is a user-conversion sequence. */
2676 std_seq->user_conv_p = true;
2681 /* Returns the best overload candidate to perform the requested
2682 conversion. This function is used for three the overloading situations
2683 described in [over.match.copy], [over.match.conv], and [over.match.ref].
2684 If TOTYPE is a REFERENCE_TYPE, we're trying to find an lvalue binding as
2685 per [dcl.init.ref], so we ignore temporary bindings. */
2687 static struct z_candidate *
2688 build_user_type_conversion_1 (tree totype, tree expr, int flags)
2690 struct z_candidate *candidates, *cand;
2691 tree fromtype = TREE_TYPE (expr);
2692 tree ctors = NULL_TREE;
2693 tree conv_fns = NULL_TREE;
2694 conversion *conv = NULL;
2695 tree args = NULL_TREE;
2699 /* We represent conversion within a hierarchy using RVALUE_CONV and
2700 BASE_CONV, as specified by [over.best.ics]; these become plain
2701 constructor calls, as specified in [dcl.init]. */
2702 gcc_assert (!MAYBE_CLASS_TYPE_P (fromtype) || !MAYBE_CLASS_TYPE_P (totype)
2703 || !DERIVED_FROM_P (totype, fromtype));
2705 if (MAYBE_CLASS_TYPE_P (totype))
2706 ctors = lookup_fnfields (totype, complete_ctor_identifier, 0);
2708 if (MAYBE_CLASS_TYPE_P (fromtype))
2710 tree to_nonref = non_reference (totype);
2711 if (same_type_ignoring_top_level_qualifiers_p (to_nonref, fromtype) ||
2712 (CLASS_TYPE_P (to_nonref) && CLASS_TYPE_P (fromtype)
2713 && DERIVED_FROM_P (to_nonref, fromtype)))
2715 /* [class.conv.fct] A conversion function is never used to
2716 convert a (possibly cv-qualified) object to the (possibly
2717 cv-qualified) same object type (or a reference to it), to a
2718 (possibly cv-qualified) base class of that type (or a
2719 reference to it)... */
2722 conv_fns = lookup_conversions (fromtype);
2726 flags |= LOOKUP_NO_CONVERSION;
2728 /* It's OK to bind a temporary for converting constructor arguments, but
2729 not in converting the return value of a conversion operator. */
2730 convflags = ((flags & LOOKUP_NO_TEMP_BIND) | LOOKUP_NO_CONVERSION);
2731 flags &= ~LOOKUP_NO_TEMP_BIND;
2737 ctors = BASELINK_FUNCTIONS (ctors);
2739 t = build_int_cst (build_pointer_type (totype), 0);
2740 if (BRACE_ENCLOSED_INITIALIZER_P (expr)
2741 && !TYPE_HAS_LIST_CTOR (totype))
2743 args = ctor_to_list (expr);
2744 /* We still allow more conversions within an init-list. */
2745 flags = ((flags & ~LOOKUP_NO_CONVERSION)
2746 /* But not for the copy ctor. */
2747 |LOOKUP_NO_COPY_CTOR_CONVERSION
2748 |LOOKUP_NO_NARROWING);
2751 args = build_tree_list (NULL_TREE, expr);
2752 /* We should never try to call the abstract or base constructor
2754 gcc_assert (!DECL_HAS_IN_CHARGE_PARM_P (OVL_CURRENT (ctors))
2755 && !DECL_HAS_VTT_PARM_P (OVL_CURRENT (ctors)));
2756 args = tree_cons (NULL_TREE, t, args);
2758 for (; ctors; ctors = OVL_NEXT (ctors))
2760 tree ctor = OVL_CURRENT (ctors);
2761 if (DECL_NONCONVERTING_P (ctor)
2762 && !BRACE_ENCLOSED_INITIALIZER_P (expr))
2765 if (TREE_CODE (ctor) == TEMPLATE_DECL)
2766 cand = add_template_candidate (&candidates, ctor, totype,
2767 NULL_TREE, args, NULL_TREE,
2768 TYPE_BINFO (totype),
2769 TYPE_BINFO (totype),
2773 cand = add_function_candidate (&candidates, ctor, totype,
2774 args, TYPE_BINFO (totype),
2775 TYPE_BINFO (totype),
2780 cand->second_conv = build_identity_conv (totype, NULL_TREE);
2782 /* If totype isn't a reference, and LOOKUP_NO_TEMP_BIND isn't
2783 set, then this is copy-initialization. In that case, "The
2784 result of the call is then used to direct-initialize the
2785 object that is the destination of the copy-initialization."
2788 We represent this in the conversion sequence with an
2789 rvalue conversion, which means a constructor call. */
2790 if (TREE_CODE (totype) != REFERENCE_TYPE
2791 && !(convflags & LOOKUP_NO_TEMP_BIND))
2793 = build_conv (ck_rvalue, totype, cand->second_conv);
2798 args = build_tree_list (NULL_TREE, build_this (expr));
2800 for (; conv_fns; conv_fns = TREE_CHAIN (conv_fns))
2803 tree conversion_path = TREE_PURPOSE (conv_fns);
2805 /* If we are called to convert to a reference type, we are trying to
2806 find an lvalue binding, so don't even consider temporaries. If
2807 we don't find an lvalue binding, the caller will try again to
2808 look for a temporary binding. */
2809 if (TREE_CODE (totype) == REFERENCE_TYPE)
2810 convflags |= LOOKUP_NO_TEMP_BIND;
2812 for (fns = TREE_VALUE (conv_fns); fns; fns = OVL_NEXT (fns))
2814 tree fn = OVL_CURRENT (fns);
2816 /* [over.match.funcs] For conversion functions, the function
2817 is considered to be a member of the class of the implicit
2818 object argument for the purpose of defining the type of
2819 the implicit object parameter.
2821 So we pass fromtype as CTYPE to add_*_candidate. */
2823 if (TREE_CODE (fn) == TEMPLATE_DECL)
2824 cand = add_template_candidate (&candidates, fn, fromtype,
2827 TYPE_BINFO (fromtype),
2832 cand = add_function_candidate (&candidates, fn, fromtype,
2834 TYPE_BINFO (fromtype),
2841 = implicit_conversion (totype,
2842 TREE_TYPE (TREE_TYPE (cand->fn)),
2844 /*c_cast_p=*/false, convflags);
2846 /* If LOOKUP_NO_TEMP_BIND isn't set, then this is
2847 copy-initialization. In that case, "The result of the
2848 call is then used to direct-initialize the object that is
2849 the destination of the copy-initialization." [dcl.init]
2851 We represent this in the conversion sequence with an
2852 rvalue conversion, which means a constructor call. But
2853 don't add a second rvalue conversion if there's already
2854 one there. Which there really shouldn't be, but it's
2855 harmless since we'd add it here anyway. */
2856 if (ics && MAYBE_CLASS_TYPE_P (totype) && ics->kind != ck_rvalue
2857 && !(convflags & LOOKUP_NO_TEMP_BIND))
2858 ics = build_conv (ck_rvalue, totype, ics);
2860 cand->second_conv = ics;
2864 else if (candidates->viable == 1 && ics->bad_p)
2870 candidates = splice_viable (candidates, pedantic, &any_viable_p);
2874 cand = tourney (candidates);
2877 if (flags & LOOKUP_COMPLAIN)
2879 error ("conversion from %qT to %qT is ambiguous",
2881 print_z_candidates (candidates);
2884 cand = candidates; /* any one will do */
2885 cand->second_conv = build_ambiguous_conv (totype, expr);
2886 cand->second_conv->user_conv_p = true;
2887 if (!any_strictly_viable (candidates))
2888 cand->second_conv->bad_p = true;
2889 /* If there are viable candidates, don't set ICS_BAD_FLAG; an
2890 ambiguous conversion is no worse than another user-defined
2896 /* Build the user conversion sequence. */
2899 (DECL_CONSTRUCTOR_P (cand->fn)
2900 ? totype : non_reference (TREE_TYPE (TREE_TYPE (cand->fn)))),
2901 build_identity_conv (TREE_TYPE (expr), expr));
2904 /* Remember that this was a list-initialization. */
2905 if (flags & LOOKUP_NO_NARROWING)
2906 conv->check_narrowing = true;
2908 /* Combine it with the second conversion sequence. */
2909 cand->second_conv = merge_conversion_sequences (conv,
2912 if (cand->viable == -1)
2913 cand->second_conv->bad_p = true;
2919 build_user_type_conversion (tree totype, tree expr, int flags)
2921 struct z_candidate *cand
2922 = build_user_type_conversion_1 (totype, expr, flags);
2926 if (cand->second_conv->kind == ck_ambig)
2927 return error_mark_node;
2928 expr = convert_like (cand->second_conv, expr, tf_warning_or_error);
2929 return convert_from_reference (expr);
2934 /* Do any initial processing on the arguments to a function call. */
2937 resolve_args (tree args)
2940 for (t = args; t; t = TREE_CHAIN (t))
2942 tree arg = TREE_VALUE (t);
2944 if (error_operand_p (arg))
2945 return error_mark_node;
2946 else if (VOID_TYPE_P (TREE_TYPE (arg)))
2948 error ("invalid use of void expression");
2949 return error_mark_node;
2951 else if (invalid_nonstatic_memfn_p (arg, tf_warning_or_error))
2952 return error_mark_node;
2957 /* Perform overload resolution on FN, which is called with the ARGS.
2959 Return the candidate function selected by overload resolution, or
2960 NULL if the event that overload resolution failed. In the case
2961 that overload resolution fails, *CANDIDATES will be the set of
2962 candidates considered, and ANY_VIABLE_P will be set to true or
2963 false to indicate whether or not any of the candidates were
2966 The ARGS should already have gone through RESOLVE_ARGS before this
2967 function is called. */
2969 static struct z_candidate *
2970 perform_overload_resolution (tree fn,
2972 struct z_candidate **candidates,
2975 struct z_candidate *cand;
2976 tree explicit_targs = NULL_TREE;
2977 int template_only = 0;
2980 *any_viable_p = true;
2982 /* Check FN and ARGS. */
2983 gcc_assert (TREE_CODE (fn) == FUNCTION_DECL
2984 || TREE_CODE (fn) == TEMPLATE_DECL
2985 || TREE_CODE (fn) == OVERLOAD
2986 || TREE_CODE (fn) == TEMPLATE_ID_EXPR);
2987 gcc_assert (!args || TREE_CODE (args) == TREE_LIST);
2989 if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
2991 explicit_targs = TREE_OPERAND (fn, 1);
2992 fn = TREE_OPERAND (fn, 0);
2996 /* Add the various candidate functions. */
2997 add_candidates (fn, args, explicit_targs, template_only,
2998 /*conversion_path=*/NULL_TREE,
2999 /*access_path=*/NULL_TREE,
3003 *candidates = splice_viable (*candidates, pedantic, any_viable_p);
3007 cand = tourney (*candidates);
3011 /* Return an expression for a call to FN (a namespace-scope function,
3012 or a static member function) with the ARGS. */
3015 build_new_function_call (tree fn, tree args, bool koenig_p,
3016 tsubst_flags_t complain)
3018 struct z_candidate *candidates, *cand;
3023 args = resolve_args (args);
3024 if (args == error_mark_node)
3025 return error_mark_node;
3027 /* If this function was found without using argument dependent
3028 lookup, then we want to ignore any undeclared friend
3034 fn = remove_hidden_names (fn);
3037 if (complain & tf_error)
3038 error ("no matching function for call to %<%D(%A)%>",
3039 DECL_NAME (OVL_CURRENT (orig_fn)), args);
3040 return error_mark_node;
3044 /* Get the high-water mark for the CONVERSION_OBSTACK. */
3045 p = conversion_obstack_alloc (0);
3047 cand = perform_overload_resolution (fn, args, &candidates, &any_viable_p);
3051 if (complain & tf_error)
3053 if (!any_viable_p && candidates && ! candidates->next)
3054 return cp_build_function_call (candidates->fn, args, complain);
3055 if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
3056 fn = TREE_OPERAND (fn, 0);
3058 error ("no matching function for call to %<%D(%A)%>",
3059 DECL_NAME (OVL_CURRENT (fn)), args);
3061 error ("call of overloaded %<%D(%A)%> is ambiguous",
3062 DECL_NAME (OVL_CURRENT (fn)), args);
3064 print_z_candidates (candidates);
3066 result = error_mark_node;
3069 result = build_over_call (cand, LOOKUP_NORMAL, complain);
3071 /* Free all the conversions we allocated. */
3072 obstack_free (&conversion_obstack, p);
3077 /* Build a call to a global operator new. FNNAME is the name of the
3078 operator (either "operator new" or "operator new[]") and ARGS are
3079 the arguments provided. *SIZE points to the total number of bytes
3080 required by the allocation, and is updated if that is changed here.
3081 *COOKIE_SIZE is non-NULL if a cookie should be used. If this
3082 function determines that no cookie should be used, after all,
3083 *COOKIE_SIZE is set to NULL_TREE. If FN is non-NULL, it will be
3084 set, upon return, to the allocation function called. */
3087 build_operator_new_call (tree fnname, tree args,
3088 tree *size, tree *cookie_size,
3092 struct z_candidate *candidates;
3093 struct z_candidate *cand;
3098 args = tree_cons (NULL_TREE, *size, args);
3099 args = resolve_args (args);
3100 if (args == error_mark_node)
3107 If this lookup fails to find the name, or if the allocated type
3108 is not a class type, the allocation function's name is looked
3109 up in the global scope.
3111 we disregard block-scope declarations of "operator new". */
3112 fns = lookup_function_nonclass (fnname, args, /*block_p=*/false);
3114 /* Figure out what function is being called. */
3115 cand = perform_overload_resolution (fns, args, &candidates, &any_viable_p);
3117 /* If no suitable function could be found, issue an error message
3122 error ("no matching function for call to %<%D(%A)%>",
3123 DECL_NAME (OVL_CURRENT (fns)), args);
3125 error ("call of overloaded %<%D(%A)%> is ambiguous",
3126 DECL_NAME (OVL_CURRENT (fns)), args);
3128 print_z_candidates (candidates);
3129 return error_mark_node;
3132 /* If a cookie is required, add some extra space. Whether
3133 or not a cookie is required cannot be determined until
3134 after we know which function was called. */
3137 bool use_cookie = true;
3138 if (!abi_version_at_least (2))
3140 tree placement = TREE_CHAIN (args);
3141 /* In G++ 3.2, the check was implemented incorrectly; it
3142 looked at the placement expression, rather than the
3143 type of the function. */
3144 if (placement && !TREE_CHAIN (placement)
3145 && same_type_p (TREE_TYPE (TREE_VALUE (placement)),
3153 arg_types = TYPE_ARG_TYPES (TREE_TYPE (cand->fn));
3154 /* Skip the size_t parameter. */
3155 arg_types = TREE_CHAIN (arg_types);
3156 /* Check the remaining parameters (if any). */
3158 && TREE_CHAIN (arg_types) == void_list_node
3159 && same_type_p (TREE_VALUE (arg_types),
3163 /* If we need a cookie, adjust the number of bytes allocated. */
3166 /* Update the total size. */
3167 *size = size_binop (PLUS_EXPR, *size, *cookie_size);
3168 /* Update the argument list to reflect the adjusted size. */
3169 TREE_VALUE (args) = *size;
3172 *cookie_size = NULL_TREE;
3175 /* Tell our caller which function we decided to call. */
3179 /* Build the CALL_EXPR. */
3180 return build_over_call (cand, LOOKUP_NORMAL, tf_warning_or_error);
3184 build_object_call (tree obj, tree args, tsubst_flags_t complain)
3186 struct z_candidate *candidates = 0, *cand;
3187 tree fns, convs, mem_args = NULL_TREE;
3188 tree type = TREE_TYPE (obj);
3190 tree result = NULL_TREE;
3193 if (TYPE_PTRMEMFUNC_P (type))
3195 if (complain & tf_error)
3196 /* It's no good looking for an overloaded operator() on a
3197 pointer-to-member-function. */
3198 error ("pointer-to-member function %E cannot be called without an object; consider using .* or ->*", obj);
3199 return error_mark_node;
3202 if (TYPE_BINFO (type))
3204 fns = lookup_fnfields (TYPE_BINFO (type), ansi_opname (CALL_EXPR), 1);
3205 if (fns == error_mark_node)
3206 return error_mark_node;
3211 args = resolve_args (args);
3213 if (args == error_mark_node)
3214 return error_mark_node;
3216 /* Get the high-water mark for the CONVERSION_OBSTACK. */
3217 p = conversion_obstack_alloc (0);
3221 tree base = BINFO_TYPE (BASELINK_BINFO (fns));
3222 mem_args = tree_cons (NULL_TREE, build_this (obj), args);
3224 for (fns = BASELINK_FUNCTIONS (fns); fns; fns = OVL_NEXT (fns))
3226 tree fn = OVL_CURRENT (fns);
3227 if (TREE_CODE (fn) == TEMPLATE_DECL)
3228 add_template_candidate (&candidates, fn, base, NULL_TREE,
3229 mem_args, NULL_TREE,
3232 LOOKUP_NORMAL, DEDUCE_CALL);
3234 add_function_candidate
3235 (&candidates, fn, base, mem_args, TYPE_BINFO (type),
3236 TYPE_BINFO (type), LOOKUP_NORMAL);
3240 convs = lookup_conversions (type);
3242 for (; convs; convs = TREE_CHAIN (convs))
3244 tree fns = TREE_VALUE (convs);
3245 tree totype = TREE_TYPE (TREE_TYPE (OVL_CURRENT (fns)));
3247 if ((TREE_CODE (totype) == POINTER_TYPE
3248 && TREE_CODE (TREE_TYPE (totype)) == FUNCTION_TYPE)
3249 || (TREE_CODE (totype) == REFERENCE_TYPE
3250 && TREE_CODE (TREE_TYPE (totype)) == FUNCTION_TYPE)
3251 || (TREE_CODE (totype) == REFERENCE_TYPE
3252 && TREE_CODE (TREE_TYPE (totype)) == POINTER_TYPE
3253 && TREE_CODE (TREE_TYPE (TREE_TYPE (totype))) == FUNCTION_TYPE))
3254 for (; fns; fns = OVL_NEXT (fns))
3256 tree fn = OVL_CURRENT (fns);
3257 if (TREE_CODE (fn) == TEMPLATE_DECL)
3258 add_template_conv_candidate
3259 (&candidates, fn, obj, args, totype,
3260 /*access_path=*/NULL_TREE,
3261 /*conversion_path=*/NULL_TREE);
3263 add_conv_candidate (&candidates, fn, obj, args,
3264 /*conversion_path=*/NULL_TREE,
3265 /*access_path=*/NULL_TREE);
3269 candidates = splice_viable (candidates, pedantic, &any_viable_p);
3272 if (complain & tf_error)
3274 error ("no match for call to %<(%T) (%A)%>", TREE_TYPE (obj), args);
3275 print_z_candidates (candidates);
3277 result = error_mark_node;
3281 cand = tourney (candidates);
3284 if (complain & tf_error)
3286 error ("call of %<(%T) (%A)%> is ambiguous",
3287 TREE_TYPE (obj), args);
3288 print_z_candidates (candidates);
3290 result = error_mark_node;
3292 /* Since cand->fn will be a type, not a function, for a conversion
3293 function, we must be careful not to unconditionally look at
3295 else if (TREE_CODE (cand->fn) == FUNCTION_DECL
3296 && DECL_OVERLOADED_OPERATOR_P (cand->fn) == CALL_EXPR)
3297 result = build_over_call (cand, LOOKUP_NORMAL, complain);
3300 obj = convert_like_with_context (cand->convs[0], obj, cand->fn, -1,
3302 obj = convert_from_reference (obj);
3303 result = cp_build_function_call (obj, args, complain);
3307 /* Free all the conversions we allocated. */
3308 obstack_free (&conversion_obstack, p);
3314 op_error (enum tree_code code, enum tree_code code2,
3315 tree arg1, tree arg2, tree arg3, const char *problem)
3319 if (code == MODIFY_EXPR)
3320 opname = assignment_operator_name_info[code2].name;
3322 opname = operator_name_info[code].name;
3327 error ("%s for ternary %<operator?:%> in %<%E ? %E : %E%>",
3328 problem, arg1, arg2, arg3);
3331 case POSTINCREMENT_EXPR:
3332 case POSTDECREMENT_EXPR:
3333 error ("%s for %<operator%s%> in %<%E%s%>", problem, opname, arg1, opname);
3337 error ("%s for %<operator[]%> in %<%E[%E]%>", problem, arg1, arg2);
3342 error ("%s for %qs in %<%s %E%>", problem, opname, opname, arg1);
3347 error ("%s for %<operator%s%> in %<%E %s %E%>",
3348 problem, opname, arg1, opname, arg2);
3350 error ("%s for %<operator%s%> in %<%s%E%>",
3351 problem, opname, opname, arg1);
3356 /* Return the implicit conversion sequence that could be used to
3357 convert E1 to E2 in [expr.cond]. */
3360 conditional_conversion (tree e1, tree e2)
3362 tree t1 = non_reference (TREE_TYPE (e1));
3363 tree t2 = non_reference (TREE_TYPE (e2));
3369 If E2 is an lvalue: E1 can be converted to match E2 if E1 can be
3370 implicitly converted (clause _conv_) to the type "reference to
3371 T2", subject to the constraint that in the conversion the
3372 reference must bind directly (_dcl.init.ref_) to E1. */
3373 if (real_lvalue_p (e2))
3375 conv = implicit_conversion (build_reference_type (t2),
3379 LOOKUP_NO_TEMP_BIND);
3386 If E1 and E2 have class type, and the underlying class types are
3387 the same or one is a base class of the other: E1 can be converted
3388 to match E2 if the class of T2 is the same type as, or a base
3389 class of, the class of T1, and the cv-qualification of T2 is the
3390 same cv-qualification as, or a greater cv-qualification than, the
3391 cv-qualification of T1. If the conversion is applied, E1 is
3392 changed to an rvalue of type T2 that still refers to the original
3393 source class object (or the appropriate subobject thereof). */
3394 if (CLASS_TYPE_P (t1) && CLASS_TYPE_P (t2)
3395 && ((good_base = DERIVED_FROM_P (t2, t1)) || DERIVED_FROM_P (t1, t2)))
3397 if (good_base && at_least_as_qualified_p (t2, t1))
3399 conv = build_identity_conv (t1, e1);
3400 if (!same_type_p (TYPE_MAIN_VARIANT (t1),
3401 TYPE_MAIN_VARIANT (t2)))
3402 conv = build_conv (ck_base, t2, conv);
3404 conv = build_conv (ck_rvalue, t2, conv);
3413 Otherwise: E1 can be converted to match E2 if E1 can be implicitly
3414 converted to the type that expression E2 would have if E2 were
3415 converted to an rvalue (or the type it has, if E2 is an rvalue). */
3416 return implicit_conversion (t2, t1, e1, /*c_cast_p=*/false,
3420 /* Implement [expr.cond]. ARG1, ARG2, and ARG3 are the three
3421 arguments to the conditional expression. */
3424 build_conditional_expr (tree arg1, tree arg2, tree arg3,
3425 tsubst_flags_t complain)
3429 tree result = NULL_TREE;
3430 tree result_type = NULL_TREE;
3431 bool lvalue_p = true;
3432 struct z_candidate *candidates = 0;
3433 struct z_candidate *cand;
3436 /* As a G++ extension, the second argument to the conditional can be
3437 omitted. (So that `a ? : c' is roughly equivalent to `a ? a :
3438 c'.) If the second operand is omitted, make sure it is
3439 calculated only once. */
3442 if (complain & tf_error)
3443 pedwarn (input_location, OPT_pedantic,
3444 "ISO C++ forbids omitting the middle term of a ?: expression");
3446 /* Make sure that lvalues remain lvalues. See g++.oliva/ext1.C. */
3447 if (real_lvalue_p (arg1))
3448 arg2 = arg1 = stabilize_reference (arg1);
3450 arg2 = arg1 = save_expr (arg1);
3455 The first expression is implicitly converted to bool (clause
3457 arg1 = perform_implicit_conversion (boolean_type_node, arg1, complain);
3459 /* If something has already gone wrong, just pass that fact up the
3461 if (error_operand_p (arg1)
3462 || error_operand_p (arg2)
3463 || error_operand_p (arg3))
3464 return error_mark_node;
3468 If either the second or the third operand has type (possibly
3469 cv-qualified) void, then the lvalue-to-rvalue (_conv.lval_),
3470 array-to-pointer (_conv.array_), and function-to-pointer
3471 (_conv.func_) standard conversions are performed on the second
3472 and third operands. */
3473 arg2_type = unlowered_expr_type (arg2);
3474 arg3_type = unlowered_expr_type (arg3);
3475 if (VOID_TYPE_P (arg2_type) || VOID_TYPE_P (arg3_type))
3477 /* Do the conversions. We don't these for `void' type arguments
3478 since it can't have any effect and since decay_conversion
3479 does not handle that case gracefully. */
3480 if (!VOID_TYPE_P (arg2_type))
3481 arg2 = decay_conversion (arg2);
3482 if (!VOID_TYPE_P (arg3_type))
3483 arg3 = decay_conversion (arg3);
3484 arg2_type = TREE_TYPE (arg2);
3485 arg3_type = TREE_TYPE (arg3);
3489 One of the following shall hold:
3491 --The second or the third operand (but not both) is a
3492 throw-expression (_except.throw_); the result is of the
3493 type of the other and is an rvalue.
3495 --Both the second and the third operands have type void; the
3496 result is of type void and is an rvalue.
3498 We must avoid calling force_rvalue for expressions of type
3499 "void" because it will complain that their value is being
3501 if (TREE_CODE (arg2) == THROW_EXPR
3502 && TREE_CODE (arg3) != THROW_EXPR)
3504 if (!VOID_TYPE_P (arg3_type))
3505 arg3 = force_rvalue (arg3);
3506 arg3_type = TREE_TYPE (arg3);
3507 result_type = arg3_type;
3509 else if (TREE_CODE (arg2) != THROW_EXPR
3510 && TREE_CODE (arg3) == THROW_EXPR)
3512 if (!VOID_TYPE_P (arg2_type))
3513 arg2 = force_rvalue (arg2);
3514 arg2_type = TREE_TYPE (arg2);
3515 result_type = arg2_type;
3517 else if (VOID_TYPE_P (arg2_type) && VOID_TYPE_P (arg3_type))
3518 result_type = void_type_node;
3521 if (complain & tf_error)
3523 if (VOID_TYPE_P (arg2_type))
3524 error ("second operand to the conditional operator "
3525 "is of type %<void%>, "
3526 "but the third operand is neither a throw-expression "
3527 "nor of type %<void%>");
3529 error ("third operand to the conditional operator "
3530 "is of type %<void%>, "
3531 "but the second operand is neither a throw-expression "
3532 "nor of type %<void%>");
3534 return error_mark_node;
3538 goto valid_operands;
3542 Otherwise, if the second and third operand have different types,
3543 and either has (possibly cv-qualified) class type, an attempt is
3544 made to convert each of those operands to the type of the other. */
3545 else if (!same_type_p (arg2_type, arg3_type)
3546 && (CLASS_TYPE_P (arg2_type) || CLASS_TYPE_P (arg3_type)))
3551 /* Get the high-water mark for the CONVERSION_OBSTACK. */
3552 p = conversion_obstack_alloc (0);
3554 conv2 = conditional_conversion (arg2, arg3);
3555 conv3 = conditional_conversion (arg3, arg2);
3559 If both can be converted, or one can be converted but the
3560 conversion is ambiguous, the program is ill-formed. If
3561 neither can be converted, the operands are left unchanged and
3562 further checking is performed as described below. If exactly
3563 one conversion is possible, that conversion is applied to the
3564 chosen operand and the converted operand is used in place of
3565 the original operand for the remainder of this section. */
3566 if ((conv2 && !conv2->bad_p
3567 && conv3 && !conv3->bad_p)
3568 || (conv2 && conv2->kind == ck_ambig)
3569 || (conv3 && conv3->kind == ck_ambig))
3571 error ("operands to ?: have different types %qT and %qT",
3572 arg2_type, arg3_type);
3573 result = error_mark_node;
3575 else if (conv2 && (!conv2->bad_p || !conv3))
3577 arg2 = convert_like (conv2, arg2, complain);
3578 arg2 = convert_from_reference (arg2);
3579 arg2_type = TREE_TYPE (arg2);
3580 /* Even if CONV2 is a valid conversion, the result of the
3581 conversion may be invalid. For example, if ARG3 has type
3582 "volatile X", and X does not have a copy constructor
3583 accepting a "volatile X&", then even if ARG2 can be
3584 converted to X, the conversion will fail. */
3585 if (error_operand_p (arg2))
3586 result = error_mark_node;
3588 else if (conv3 && (!conv3->bad_p || !conv2))
3590 arg3 = convert_like (conv3, arg3, complain);
3591 arg3 = convert_from_reference (arg3);
3592 arg3_type = TREE_TYPE (arg3);
3593 if (error_operand_p (arg3))
3594 result = error_mark_node;
3597 /* Free all the conversions we allocated. */
3598 obstack_free (&conversion_obstack, p);
3603 /* If, after the conversion, both operands have class type,
3604 treat the cv-qualification of both operands as if it were the
3605 union of the cv-qualification of the operands.
3607 The standard is not clear about what to do in this
3608 circumstance. For example, if the first operand has type
3609 "const X" and the second operand has a user-defined
3610 conversion to "volatile X", what is the type of the second
3611 operand after this step? Making it be "const X" (matching
3612 the first operand) seems wrong, as that discards the
3613 qualification without actually performing a copy. Leaving it
3614 as "volatile X" seems wrong as that will result in the
3615 conditional expression failing altogether, even though,
3616 according to this step, the one operand could be converted to
3617 the type of the other. */
3618 if ((conv2 || conv3)
3619 && CLASS_TYPE_P (arg2_type)
3620 && TYPE_QUALS (arg2_type) != TYPE_QUALS (arg3_type))
3621 arg2_type = arg3_type =
3622 cp_build_qualified_type (arg2_type,
3623 TYPE_QUALS (arg2_type)
3624 | TYPE_QUALS (arg3_type));
3629 If the second and third operands are lvalues and have the same
3630 type, the result is of that type and is an lvalue. */
3631 if (real_lvalue_p (arg2)
3632 && real_lvalue_p (arg3)
3633 && same_type_p (arg2_type, arg3_type))
3635 result_type = arg2_type;
3636 goto valid_operands;
3641 Otherwise, the result is an rvalue. If the second and third
3642 operand do not have the same type, and either has (possibly
3643 cv-qualified) class type, overload resolution is used to
3644 determine the conversions (if any) to be applied to the operands
3645 (_over.match.oper_, _over.built_). */
3647 if (!same_type_p (arg2_type, arg3_type)
3648 && (CLASS_TYPE_P (arg2_type) || CLASS_TYPE_P (arg3_type)))
3654 /* Rearrange the arguments so that add_builtin_candidate only has
3655 to know about two args. In build_builtin_candidates, the
3656 arguments are unscrambled. */
3660 add_builtin_candidates (&candidates,
3663 ansi_opname (COND_EXPR),
3669 If the overload resolution fails, the program is
3671 candidates = splice_viable (candidates, pedantic, &any_viable_p);
3674 if (complain & tf_error)
3676 op_error (COND_EXPR, NOP_EXPR, arg1, arg2, arg3, "no match");
3677 print_z_candidates (candidates);
3679 return error_mark_node;
3681 cand = tourney (candidates);
3684 if (complain & tf_error)
3686 op_error (COND_EXPR, NOP_EXPR, arg1, arg2, arg3, "no match");
3687 print_z_candidates (candidates);
3689 return error_mark_node;
3694 Otherwise, the conversions thus determined are applied, and
3695 the converted operands are used in place of the original
3696 operands for the remainder of this section. */
3697 conv = cand->convs[0];
3698 arg1 = convert_like (conv, arg1, complain);
3699 conv = cand->convs[1];
3700 arg2 = convert_like (conv, arg2, complain);
3701 conv = cand->convs[2];
3702 arg3 = convert_like (conv, arg3, complain);
3707 Lvalue-to-rvalue (_conv.lval_), array-to-pointer (_conv.array_),
3708 and function-to-pointer (_conv.func_) standard conversions are
3709 performed on the second and third operands.
3711 We need to force the lvalue-to-rvalue conversion here for class types,
3712 so we get TARGET_EXPRs; trying to deal with a COND_EXPR of class rvalues
3713 that isn't wrapped with a TARGET_EXPR plays havoc with exception
3716 arg2 = force_rvalue (arg2);
3717 if (!CLASS_TYPE_P (arg2_type))
3718 arg2_type = TREE_TYPE (arg2);
3720 arg3 = force_rvalue (arg3);
3721 if (!CLASS_TYPE_P (arg2_type))
3722 arg3_type = TREE_TYPE (arg3);
3724 if (arg2 == error_mark_node || arg3 == error_mark_node)
3725 return error_mark_node;
3729 After those conversions, one of the following shall hold:
3731 --The second and third operands have the same type; the result is of
3733 if (same_type_p (arg2_type, arg3_type))
3734 result_type = arg2_type;
3737 --The second and third operands have arithmetic or enumeration
3738 type; the usual arithmetic conversions are performed to bring
3739 them to a common type, and the result is of that type. */
3740 else if ((ARITHMETIC_TYPE_P (arg2_type)
3741 || UNSCOPED_ENUM_P (arg2_type))
3742 && (ARITHMETIC_TYPE_P (arg3_type)
3743 || UNSCOPED_ENUM_P (arg3_type)))
3745 /* In this case, there is always a common type. */
3746 result_type = type_after_usual_arithmetic_conversions (arg2_type,
3749 if (TREE_CODE (arg2_type) == ENUMERAL_TYPE
3750 && TREE_CODE (arg3_type) == ENUMERAL_TYPE)
3752 if (complain & tf_warning)
3754 "enumeral mismatch in conditional expression: %qT vs %qT",
3755 arg2_type, arg3_type);
3757 else if (extra_warnings
3758 && ((TREE_CODE (arg2_type) == ENUMERAL_TYPE
3759 && !same_type_p (arg3_type, type_promotes_to (arg2_type)))
3760 || (TREE_CODE (arg3_type) == ENUMERAL_TYPE
3761 && !same_type_p (arg2_type, type_promotes_to (arg3_type)))))
3763 if (complain & tf_warning)
3765 "enumeral and non-enumeral type in conditional expression");
3768 arg2 = perform_implicit_conversion (result_type, arg2, complain);
3769 arg3 = perform_implicit_conversion (result_type, arg3, complain);
3773 --The second and third operands have pointer type, or one has
3774 pointer type and the other is a null pointer constant; pointer
3775 conversions (_conv.ptr_) and qualification conversions
3776 (_conv.qual_) are performed to bring them to their composite
3777 pointer type (_expr.rel_). The result is of the composite
3780 --The second and third operands have pointer to member type, or
3781 one has pointer to member type and the other is a null pointer
3782 constant; pointer to member conversions (_conv.mem_) and
3783 qualification conversions (_conv.qual_) are performed to bring
3784 them to a common type, whose cv-qualification shall match the
3785 cv-qualification of either the second or the third operand.
3786 The result is of the common type. */
3787 else if ((null_ptr_cst_p (arg2)
3788 && (TYPE_PTR_P (arg3_type) || TYPE_PTR_TO_MEMBER_P (arg3_type)))
3789 || (null_ptr_cst_p (arg3)
3790 && (TYPE_PTR_P (arg2_type) || TYPE_PTR_TO_MEMBER_P (arg2_type)))
3791 || (TYPE_PTR_P (arg2_type) && TYPE_PTR_P (arg3_type))
3792 || (TYPE_PTRMEM_P (arg2_type) && TYPE_PTRMEM_P (arg3_type))
3793 || (TYPE_PTRMEMFUNC_P (arg2_type) && TYPE_PTRMEMFUNC_P (arg3_type)))
3795 result_type = composite_pointer_type (arg2_type, arg3_type, arg2,
3796 arg3, "conditional expression",
3798 if (result_type == error_mark_node)
3799 return error_mark_node;
3800 arg2 = perform_implicit_conversion (result_type, arg2, complain);
3801 arg3 = perform_implicit_conversion (result_type, arg3, complain);
3806 if (complain & tf_error)
3807 error ("operands to ?: have different types %qT and %qT",
3808 arg2_type, arg3_type);
3809 return error_mark_node;
3813 result = fold_if_not_in_template (build3 (COND_EXPR, result_type, arg1,
3815 /* We can't use result_type below, as fold might have returned a
3820 /* Expand both sides into the same slot, hopefully the target of
3821 the ?: expression. We used to check for TARGET_EXPRs here,
3822 but now we sometimes wrap them in NOP_EXPRs so the test would
3824 if (CLASS_TYPE_P (TREE_TYPE (result)))
3825 result = get_target_expr (result);
3826 /* If this expression is an rvalue, but might be mistaken for an
3827 lvalue, we must add a NON_LVALUE_EXPR. */
3828 result = rvalue (result);
3834 /* OPERAND is an operand to an expression. Perform necessary steps
3835 required before using it. If OPERAND is NULL_TREE, NULL_TREE is
3839 prep_operand (tree operand)
3843 if (CLASS_TYPE_P (TREE_TYPE (operand))
3844 && CLASSTYPE_TEMPLATE_INSTANTIATION (TREE_TYPE (operand)))
3845 /* Make sure the template type is instantiated now. */
3846 instantiate_class_template (TYPE_MAIN_VARIANT (TREE_TYPE (operand)));
3852 /* Add each of the viable functions in FNS (a FUNCTION_DECL or
3853 OVERLOAD) to the CANDIDATES, returning an updated list of
3854 CANDIDATES. The ARGS are the arguments provided to the call,
3855 without any implicit object parameter. The EXPLICIT_TARGS are
3856 explicit template arguments provided. TEMPLATE_ONLY is true if
3857 only template functions should be considered. CONVERSION_PATH,
3858 ACCESS_PATH, and FLAGS are as for add_function_candidate. */
3861 add_candidates (tree fns, tree args,
3862 tree explicit_targs, bool template_only,
3863 tree conversion_path, tree access_path,
3865 struct z_candidate **candidates)
3868 tree non_static_args;
3870 ctype = conversion_path ? BINFO_TYPE (conversion_path) : NULL_TREE;
3871 /* Delay creating the implicit this parameter until it is needed. */
3872 non_static_args = NULL_TREE;
3879 fn = OVL_CURRENT (fns);
3880 /* Figure out which set of arguments to use. */
3881 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
3883 /* If this function is a non-static member, prepend the implicit
3884 object parameter. */
3885 if (!non_static_args)
3886 non_static_args = tree_cons (NULL_TREE,
3887 build_this (TREE_VALUE (args)),
3889 fn_args = non_static_args;
3892 /* Otherwise, just use the list of arguments provided. */
3895 if (TREE_CODE (fn) == TEMPLATE_DECL)
3896 add_template_candidate (candidates,
3906 else if (!template_only)
3907 add_function_candidate (candidates,
3914 fns = OVL_NEXT (fns);
3919 build_new_op (enum tree_code code, int flags, tree arg1, tree arg2, tree arg3,
3920 bool *overloaded_p, tsubst_flags_t complain)
3922 struct z_candidate *candidates = 0, *cand;
3923 tree arglist, fnname;
3925 tree result = NULL_TREE;
3926 bool result_valid_p = false;
3927 enum tree_code code2 = NOP_EXPR;
3932 bool expl_eq_arg1 = false;
3934 if (error_operand_p (arg1)
3935 || error_operand_p (arg2)
3936 || error_operand_p (arg3))
3937 return error_mark_node;
3939 if (code == MODIFY_EXPR)
3941 code2 = TREE_CODE (arg3);
3943 fnname = ansi_assopname (code2);
3946 fnname = ansi_opname (code);
3948 arg1 = prep_operand (arg1);
3954 case VEC_DELETE_EXPR:
3956 /* Use build_op_new_call and build_op_delete_call instead. */
3960 return build_object_call (arg1, arg2, complain);
3962 case TRUTH_ORIF_EXPR:
3963 case TRUTH_ANDIF_EXPR:
3964 case TRUTH_AND_EXPR:
3966 if (COMPARISON_CLASS_P (arg1))
3967 expl_eq_arg1 = true;
3972 arg2 = prep_operand (arg2);
3973 arg3 = prep_operand (arg3);
3975 if (code == COND_EXPR)
3977 if (arg2 == NULL_TREE
3978 || TREE_CODE (TREE_TYPE (arg2)) == VOID_TYPE
3979 || TREE_CODE (TREE_TYPE (arg3)) == VOID_TYPE
3980 || (! IS_OVERLOAD_TYPE (TREE_TYPE (arg2))
3981 && ! IS_OVERLOAD_TYPE (TREE_TYPE (arg3))))
3984 else if (! IS_OVERLOAD_TYPE (TREE_TYPE (arg1))
3985 && (! arg2 || ! IS_OVERLOAD_TYPE (TREE_TYPE (arg2))))
3988 if (code == POSTINCREMENT_EXPR || code == POSTDECREMENT_EXPR)
3989 arg2 = integer_zero_node;
3991 arglist = NULL_TREE;
3993 arglist = tree_cons (NULL_TREE, arg3, arglist);
3995 arglist = tree_cons (NULL_TREE, arg2, arglist);
3996 arglist = tree_cons (NULL_TREE, arg1, arglist);
3998 /* Get the high-water mark for the CONVERSION_OBSTACK. */
3999 p = conversion_obstack_alloc (0);
4001 /* Add namespace-scope operators to the list of functions to
4003 add_candidates (lookup_function_nonclass (fnname, arglist, /*block_p=*/true),
4004 arglist, NULL_TREE, false, NULL_TREE, NULL_TREE,
4005 flags, &candidates);
4006 /* Add class-member operators to the candidate set. */
4007 if (CLASS_TYPE_P (TREE_TYPE (arg1)))
4011 fns = lookup_fnfields (TREE_TYPE (arg1), fnname, 1);
4012 if (fns == error_mark_node)
4014 result = error_mark_node;
4015 goto user_defined_result_ready;
4018 add_candidates (BASELINK_FUNCTIONS (fns), arglist,
4020 BASELINK_BINFO (fns),
4021 TYPE_BINFO (TREE_TYPE (arg1)),
4022 flags, &candidates);
4025 /* Rearrange the arguments for ?: so that add_builtin_candidate only has
4026 to know about two args; a builtin candidate will always have a first
4027 parameter of type bool. We'll handle that in
4028 build_builtin_candidate. */
4029 if (code == COND_EXPR)
4039 args[2] = NULL_TREE;
4042 add_builtin_candidates (&candidates, code, code2, fnname, args, flags);
4048 /* For these, the built-in candidates set is empty
4049 [over.match.oper]/3. We don't want non-strict matches
4050 because exact matches are always possible with built-in
4051 operators. The built-in candidate set for COMPONENT_REF
4052 would be empty too, but since there are no such built-in
4053 operators, we accept non-strict matches for them. */
4058 strict_p = pedantic;
4062 candidates = splice_viable (candidates, strict_p, &any_viable_p);
4067 case POSTINCREMENT_EXPR:
4068 case POSTDECREMENT_EXPR:
4069 /* Don't try anything fancy if we're not allowed to produce
4071 if (!(complain & tf_error))
4072 return error_mark_node;
4074 /* Look for an `operator++ (int)'. If they didn't have
4075 one, then we fall back to the old way of doing things. */
4076 if (flags & LOOKUP_COMPLAIN)
4077 permerror (input_location, "no %<%D(int)%> declared for postfix %qs, "
4078 "trying prefix operator instead",
4080 operator_name_info[code].name);
4081 if (code == POSTINCREMENT_EXPR)
4082 code = PREINCREMENT_EXPR;
4084 code = PREDECREMENT_EXPR;
4085 result = build_new_op (code, flags, arg1, NULL_TREE, NULL_TREE,
4086 overloaded_p, complain);
4089 /* The caller will deal with these. */
4094 result_valid_p = true;
4098 if ((flags & LOOKUP_COMPLAIN) && (complain & tf_error))
4100 /* If one of the arguments of the operator represents
4101 an invalid use of member function pointer, try to report
4102 a meaningful error ... */
4103 if (invalid_nonstatic_memfn_p (arg1, tf_error)
4104 || invalid_nonstatic_memfn_p (arg2, tf_error)
4105 || invalid_nonstatic_memfn_p (arg3, tf_error))
4106 /* We displayed the error message. */;
4109 /* ... Otherwise, report the more generic
4110 "no matching operator found" error */
4111 op_error (code, code2, arg1, arg2, arg3, "no match");
4112 print_z_candidates (candidates);
4115 result = error_mark_node;
4121 cand = tourney (candidates);
4124 if ((flags & LOOKUP_COMPLAIN) && (complain & tf_error))
4126 op_error (code, code2, arg1, arg2, arg3, "ambiguous overload");
4127 print_z_candidates (candidates);
4129 result = error_mark_node;
4131 else if (TREE_CODE (cand->fn) == FUNCTION_DECL)
4134 *overloaded_p = true;
4136 if (resolve_args (arglist) == error_mark_node)
4137 result = error_mark_node;
4139 result = build_over_call (cand, LOOKUP_NORMAL, complain);
4143 /* Give any warnings we noticed during overload resolution. */
4144 if (cand->warnings && (complain & tf_warning))
4146 struct candidate_warning *w;
4147 for (w = cand->warnings; w; w = w->next)
4148 joust (cand, w->loser, 1);
4151 /* Check for comparison of different enum types. */
4160 if (TREE_CODE (TREE_TYPE (arg1)) == ENUMERAL_TYPE
4161 && TREE_CODE (TREE_TYPE (arg2)) == ENUMERAL_TYPE
4162 && (TYPE_MAIN_VARIANT (TREE_TYPE (arg1))
4163 != TYPE_MAIN_VARIANT (TREE_TYPE (arg2)))
4164 && (complain & tf_warning))
4166 warning (OPT_Wenum_compare,
4167 "comparison between %q#T and %q#T",
4168 TREE_TYPE (arg1), TREE_TYPE (arg2));
4175 /* We need to strip any leading REF_BIND so that bitfields
4176 don't cause errors. This should not remove any important
4177 conversions, because builtins don't apply to class
4178 objects directly. */
4179 conv = cand->convs[0];
4180 if (conv->kind == ck_ref_bind)
4181 conv = conv->u.next;
4182 arg1 = convert_like (conv, arg1, complain);
4185 conv = cand->convs[1];
4186 if (conv->kind == ck_ref_bind)
4187 conv = conv->u.next;
4188 arg2 = convert_like (conv, arg2, complain);
4192 conv = cand->convs[2];
4193 if (conv->kind == ck_ref_bind)
4194 conv = conv->u.next;
4195 arg3 = convert_like (conv, arg3, complain);
4200 if (complain & tf_warning)
4201 warn_logical_operator (code, arg1, arg2);
4202 expl_eq_arg1 = true;
4207 user_defined_result_ready:
4209 /* Free all the conversions we allocated. */
4210 obstack_free (&conversion_obstack, p);
4212 if (result || result_valid_p)
4219 return cp_build_modify_expr (arg1, code2, arg2, complain);
4222 return cp_build_indirect_ref (arg1, "unary *", complain);
4224 case TRUTH_ANDIF_EXPR:
4225 case TRUTH_ORIF_EXPR:
4226 case TRUTH_AND_EXPR:
4229 warn_logical_operator (code, arg1, arg2);
4233 case TRUNC_DIV_EXPR:
4244 case TRUNC_MOD_EXPR:
4248 return cp_build_binary_op (input_location, code, arg1, arg2, complain);
4250 case UNARY_PLUS_EXPR:
4253 case TRUTH_NOT_EXPR:
4254 case PREINCREMENT_EXPR:
4255 case POSTINCREMENT_EXPR:
4256 case PREDECREMENT_EXPR:
4257 case POSTDECREMENT_EXPR:
4260 return cp_build_unary_op (code, arg1, candidates != 0, complain);
4263 return build_array_ref (arg1, arg2, input_location);
4266 return build_conditional_expr (arg1, arg2, arg3, complain);
4269 return build_m_component_ref (cp_build_indirect_ref (arg1, NULL,
4273 /* The caller will deal with these. */
4285 /* Build a call to operator delete. This has to be handled very specially,
4286 because the restrictions on what signatures match are different from all
4287 other call instances. For a normal delete, only a delete taking (void *)
4288 or (void *, size_t) is accepted. For a placement delete, only an exact
4289 match with the placement new is accepted.
4291 CODE is either DELETE_EXPR or VEC_DELETE_EXPR.
4292 ADDR is the pointer to be deleted.
4293 SIZE is the size of the memory block to be deleted.
4294 GLOBAL_P is true if the delete-expression should not consider
4295 class-specific delete operators.
4296 PLACEMENT is the corresponding placement new call, or NULL_TREE.
4298 If this call to "operator delete" is being generated as part to
4299 deallocate memory allocated via a new-expression (as per [expr.new]
4300 which requires that if the initialization throws an exception then
4301 we call a deallocation function), then ALLOC_FN is the allocation
4305 build_op_delete_call (enum tree_code code, tree addr, tree size,
4306 bool global_p, tree placement,
4309 tree fn = NULL_TREE;
4310 tree fns, fnname, argtypes, type;
4313 if (addr == error_mark_node)
4314 return error_mark_node;
4316 type = strip_array_types (TREE_TYPE (TREE_TYPE (addr)));
4318 fnname = ansi_opname (code);
4320 if (CLASS_TYPE_P (type)
4321 && COMPLETE_TYPE_P (complete_type (type))
4325 If the result of the lookup is ambiguous or inaccessible, or if
4326 the lookup selects a placement deallocation function, the
4327 program is ill-formed.
4329 Therefore, we ask lookup_fnfields to complain about ambiguity. */
4331 fns = lookup_fnfields (TYPE_BINFO (type), fnname, 1);
4332 if (fns == error_mark_node)
4333 return error_mark_node;
4338 if (fns == NULL_TREE)
4339 fns = lookup_name_nonclass (fnname);
4341 /* Strip const and volatile from addr. */
4342 addr = cp_convert (ptr_type_node, addr);
4346 /* Get the parameter types for the allocation function that is
4348 gcc_assert (alloc_fn != NULL_TREE);
4349 argtypes = TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (alloc_fn)));
4353 /* First try it without the size argument. */
4354 argtypes = void_list_node;
4357 /* We make two tries at finding a matching `operator delete'. On
4358 the first pass, we look for a one-operator (or placement)
4359 operator delete. If we're not doing placement delete, then on
4360 the second pass we look for a two-argument delete. */
4361 for (pass = 0; pass < (placement ? 1 : 2); ++pass)
4363 /* Go through the `operator delete' functions looking for one
4364 with a matching type. */
4365 for (fn = BASELINK_P (fns) ? BASELINK_FUNCTIONS (fns) : fns;
4371 /* The first argument must be "void *". */
4372 t = TYPE_ARG_TYPES (TREE_TYPE (OVL_CURRENT (fn)));
4373 if (!same_type_p (TREE_VALUE (t), ptr_type_node))
4376 /* On the first pass, check the rest of the arguments. */
4382 if (!same_type_p (TREE_VALUE (a), TREE_VALUE (t)))
4390 /* On the second pass, look for a function with exactly two
4391 arguments: "void *" and "size_t". */
4393 /* For "operator delete(void *, ...)" there will be
4394 no second argument, but we will not get an exact
4397 && same_type_p (TREE_VALUE (t), size_type_node)
4398 && TREE_CHAIN (t) == void_list_node)
4402 /* If we found a match, we're done. */
4407 /* If we have a matching function, call it. */
4410 /* Make sure we have the actual function, and not an
4412 fn = OVL_CURRENT (fn);
4414 /* If the FN is a member function, make sure that it is
4416 if (DECL_CLASS_SCOPE_P (fn))
4417 perform_or_defer_access_check (TYPE_BINFO (type), fn, fn);
4421 /* The placement args might not be suitable for overload
4422 resolution at this point, so build the call directly. */
4423 int nargs = call_expr_nargs (placement);
4424 tree *argarray = (tree *) alloca (nargs * sizeof (tree));
4427 for (i = 1; i < nargs; i++)
4428 argarray[i] = CALL_EXPR_ARG (placement, i);
4430 return build_cxx_call (fn, nargs, argarray);
4436 args = tree_cons (NULL_TREE, addr, NULL_TREE);
4438 args = tree_cons (NULL_TREE, addr,
4439 build_tree_list (NULL_TREE, size));
4440 return cp_build_function_call (fn, args, tf_warning_or_error);
4446 If no unambiguous matching deallocation function can be found,
4447 propagating the exception does not cause the object's memory to
4452 warning (0, "no corresponding deallocation function for %qD",
4457 error ("no suitable %<operator %s%> for %qT",
4458 operator_name_info[(int)code].name, type);
4459 return error_mark_node;
4462 /* If the current scope isn't allowed to access DECL along
4463 BASETYPE_PATH, give an error. The most derived class in
4464 BASETYPE_PATH is the one used to qualify DECL. DIAG_DECL is
4465 the declaration to use in the error diagnostic. */
4468 enforce_access (tree basetype_path, tree decl, tree diag_decl)
4470 gcc_assert (TREE_CODE (basetype_path) == TREE_BINFO);
4472 if (!accessible_p (basetype_path, decl, true))
4474 if (TREE_PRIVATE (decl))
4475 error ("%q+#D is private", diag_decl);
4476 else if (TREE_PROTECTED (decl))
4477 error ("%q+#D is protected", diag_decl);
4479 error ("%q+#D is inaccessible", diag_decl);
4480 error ("within this context");
4487 /* Initialize a temporary of type TYPE with EXPR. The FLAGS are a
4488 bitwise or of LOOKUP_* values. If any errors are warnings are
4489 generated, set *DIAGNOSTIC_FN to "error" or "warning",
4490 respectively. If no diagnostics are generated, set *DIAGNOSTIC_FN
4494 build_temp (tree expr, tree type, int flags,
4495 diagnostic_t *diagnostic_kind)
4499 savew = warningcount, savee = errorcount;
4500 expr = build_special_member_call (NULL_TREE,
4501 complete_ctor_identifier,
4502 build_tree_list (NULL_TREE, expr),
4503 type, flags, tf_warning_or_error);
4504 if (warningcount > savew)
4505 *diagnostic_kind = DK_WARNING;
4506 else if (errorcount > savee)
4507 *diagnostic_kind = DK_ERROR;
4509 *diagnostic_kind = 0;
4513 /* Perform warnings about peculiar, but valid, conversions from/to NULL.
4514 EXPR is implicitly converted to type TOTYPE.
4515 FN and ARGNUM are used for diagnostics. */
4518 conversion_null_warnings (tree totype, tree expr, tree fn, int argnum)
4520 tree t = non_reference (totype);
4522 /* Issue warnings about peculiar, but valid, uses of NULL. */
4523 if (expr == null_node && TREE_CODE (t) != BOOLEAN_TYPE && ARITHMETIC_TYPE_P (t))
4526 warning (OPT_Wconversion, "passing NULL to non-pointer argument %P of %qD",
4529 warning (OPT_Wconversion, "converting to non-pointer type %qT from NULL", t);
4532 /* Issue warnings if "false" is converted to a NULL pointer */
4533 else if (expr == boolean_false_node && fn && POINTER_TYPE_P (t))
4534 warning (OPT_Wconversion,
4535 "converting %<false%> to pointer type for argument %P of %qD",
4539 /* Perform the conversions in CONVS on the expression EXPR. FN and
4540 ARGNUM are used for diagnostics. ARGNUM is zero based, -1
4541 indicates the `this' argument of a method. INNER is nonzero when
4542 being called to continue a conversion chain. It is negative when a
4543 reference binding will be applied, positive otherwise. If
4544 ISSUE_CONVERSION_WARNINGS is true, warnings about suspicious
4545 conversions will be emitted if appropriate. If C_CAST_P is true,
4546 this conversion is coming from a C-style cast; in that case,
4547 conversions to inaccessible bases are permitted. */
4550 convert_like_real (conversion *convs, tree expr, tree fn, int argnum,
4551 int inner, bool issue_conversion_warnings,
4552 bool c_cast_p, tsubst_flags_t complain)
4554 tree totype = convs->type;
4555 diagnostic_t diag_kind;
4559 && convs->kind != ck_user
4560 && convs->kind != ck_list
4561 && convs->kind != ck_ambig
4562 && convs->kind != ck_ref_bind
4563 && convs->kind != ck_rvalue
4564 && convs->kind != ck_base)
4566 conversion *t = convs;
4568 /* Give a helpful error if this is bad because of excess braces. */
4569 if (BRACE_ENCLOSED_INITIALIZER_P (expr)
4570 && SCALAR_TYPE_P (totype)
4571 && CONSTRUCTOR_NELTS (expr) > 0
4572 && BRACE_ENCLOSED_INITIALIZER_P (CONSTRUCTOR_ELT (expr, 0)->value))
4573 permerror (input_location, "too many braces around initializer for %qT", totype);
4575 for (; t; t = convs->u.next)
4577 if (t->kind == ck_user || !t->bad_p)
4579 expr = convert_like_real (t, expr, fn, argnum, 1,
4580 /*issue_conversion_warnings=*/false,
4585 else if (t->kind == ck_ambig)
4586 return convert_like_real (t, expr, fn, argnum, 1,
4587 /*issue_conversion_warnings=*/false,
4590 else if (t->kind == ck_identity)
4593 if (complain & tf_error)
4595 permerror (input_location, "invalid conversion from %qT to %qT", TREE_TYPE (expr), totype);
4597 permerror (input_location, " initializing argument %P of %qD", argnum, fn);
4600 return error_mark_node;
4602 return cp_convert (totype, expr);
4605 if (issue_conversion_warnings && (complain & tf_warning))
4606 conversion_null_warnings (totype, expr, fn, argnum);
4608 switch (convs->kind)
4612 struct z_candidate *cand = convs->cand;
4613 tree convfn = cand->fn;
4616 /* When converting from an init list we consider explicit
4617 constructors, but actually trying to call one is an error. */
4618 if (DECL_NONCONVERTING_P (convfn))
4620 if (complain & tf_error)
4621 error ("converting to %qT from initializer list would use "
4622 "explicit constructor %qD", totype, convfn);
4624 return error_mark_node;
4627 /* Set user_conv_p on the argument conversions, so rvalue/base
4628 handling knows not to allow any more UDCs. */
4629 for (i = 0; i < cand->num_convs; ++i)
4630 cand->convs[i]->user_conv_p = true;
4632 expr = build_over_call (cand, LOOKUP_NORMAL, complain);
4634 /* If this is a constructor or a function returning an aggr type,
4635 we need to build up a TARGET_EXPR. */
4636 if (DECL_CONSTRUCTOR_P (convfn))
4638 expr = build_cplus_new (totype, expr);
4640 /* Remember that this was list-initialization. */
4641 if (convs->check_narrowing)
4642 TARGET_EXPR_LIST_INIT_P (expr) = true;
4648 if (BRACE_ENCLOSED_INITIALIZER_P (expr))
4650 int nelts = CONSTRUCTOR_NELTS (expr);
4652 expr = integer_zero_node;
4653 else if (nelts == 1)
4654 expr = CONSTRUCTOR_ELT (expr, 0)->value;
4659 if (type_unknown_p (expr))
4660 expr = instantiate_type (totype, expr, complain);
4661 /* Convert a constant to its underlying value, unless we are
4662 about to bind it to a reference, in which case we need to
4663 leave it as an lvalue. */
4666 expr = decl_constant_value (expr);
4667 if (expr == null_node && INTEGRAL_TYPE_P (totype))
4668 /* If __null has been converted to an integer type, we do not
4669 want to warn about uses of EXPR as an integer, rather than
4671 expr = build_int_cst (totype, 0);
4675 /* Call build_user_type_conversion again for the error. */
4676 return build_user_type_conversion
4677 (totype, convs->u.expr, LOOKUP_NORMAL);
4681 /* Conversion to std::initializer_list<T>. */
4682 tree elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (totype), 0);
4683 tree new_ctor = build_constructor (init_list_type_node, NULL);
4684 unsigned len = CONSTRUCTOR_NELTS (expr);
4685 tree array, parms, val;
4688 /* Convert all the elements. */
4689 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expr), ix, val)
4691 tree sub = convert_like_real (convs->u.list[ix], val, fn, argnum,
4692 1, false, false, complain);
4693 if (sub == error_mark_node)
4695 check_narrowing (TREE_TYPE (sub), val);
4696 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_ctor), NULL_TREE, sub);
4698 /* Build up the array. */
4699 elttype = cp_build_qualified_type
4700 (elttype, TYPE_QUALS (elttype) | TYPE_QUAL_CONST);
4701 array = build_array_of_n_type (elttype, len);
4702 array = finish_compound_literal (array, new_ctor);
4704 parms = build_tree_list (NULL_TREE, size_int (len));
4705 parms = tree_cons (NULL_TREE, decay_conversion (array), parms);
4706 /* Call the private constructor. */
4707 push_deferring_access_checks (dk_no_check);
4708 new_ctor = build_special_member_call
4709 (NULL_TREE, complete_ctor_identifier, parms, totype, 0, complain);
4710 pop_deferring_access_checks ();
4711 return build_cplus_new (totype, new_ctor);
4715 return get_target_expr (digest_init (totype, expr));
4721 expr = convert_like_real (convs->u.next, expr, fn, argnum,
4722 convs->kind == ck_ref_bind ? -1 : 1,
4723 convs->kind == ck_ref_bind ? issue_conversion_warnings : false,
4726 if (expr == error_mark_node)
4727 return error_mark_node;
4729 switch (convs->kind)
4732 expr = convert_bitfield_to_declared_type (expr);
4733 if (! MAYBE_CLASS_TYPE_P (totype))
4735 /* Else fall through. */
4737 if (convs->kind == ck_base && !convs->need_temporary_p)
4739 /* We are going to bind a reference directly to a base-class
4740 subobject of EXPR. */
4741 /* Build an expression for `*((base*) &expr)'. */
4742 expr = cp_build_unary_op (ADDR_EXPR, expr, 0, complain);
4743 expr = convert_to_base (expr, build_pointer_type (totype),
4744 !c_cast_p, /*nonnull=*/true);
4745 expr = cp_build_indirect_ref (expr, "implicit conversion", complain);
4749 /* Copy-initialization where the cv-unqualified version of the source
4750 type is the same class as, or a derived class of, the class of the
4751 destination [is treated as direct-initialization]. [dcl.init] */
4752 flags = LOOKUP_NORMAL|LOOKUP_ONLYCONVERTING;
4753 if (convs->user_conv_p)
4754 /* This conversion is being done in the context of a user-defined
4755 conversion (i.e. the second step of copy-initialization), so
4756 don't allow any more. */
4757 flags |= LOOKUP_NO_CONVERSION;
4758 expr = build_temp (expr, totype, flags, &diag_kind);
4759 if (diag_kind && fn)
4761 if ((complain & tf_error))
4762 emit_diagnostic (diag_kind, input_location, 0,
4763 " initializing argument %P of %qD", argnum, fn);
4764 else if (diag_kind == DK_ERROR)
4765 return error_mark_node;
4767 return build_cplus_new (totype, expr);
4771 tree ref_type = totype;
4773 /* If necessary, create a temporary.
4775 VA_ARG_EXPR and CONSTRUCTOR expressions are special cases
4776 that need temporaries, even when their types are reference
4777 compatible with the type of reference being bound, so the
4778 upcoming call to cp_build_unary_op (ADDR_EXPR, expr, ...)
4780 if (convs->need_temporary_p
4781 || TREE_CODE (expr) == CONSTRUCTOR
4782 || TREE_CODE (expr) == VA_ARG_EXPR)
4784 tree type = convs->u.next->type;
4785 cp_lvalue_kind lvalue = real_lvalue_p (expr);
4787 if (!CP_TYPE_CONST_NON_VOLATILE_P (TREE_TYPE (ref_type))
4788 && !TYPE_REF_IS_RVALUE (ref_type))
4790 if (complain & tf_error)
4792 /* If the reference is volatile or non-const, we
4793 cannot create a temporary. */
4794 if (lvalue & clk_bitfield)
4795 error ("cannot bind bitfield %qE to %qT",
4797 else if (lvalue & clk_packed)
4798 error ("cannot bind packed field %qE to %qT",
4801 error ("cannot bind rvalue %qE to %qT", expr, ref_type);
4803 return error_mark_node;
4805 /* If the source is a packed field, and we must use a copy
4806 constructor, then building the target expr will require
4807 binding the field to the reference parameter to the
4808 copy constructor, and we'll end up with an infinite
4809 loop. If we can use a bitwise copy, then we'll be
4811 if ((lvalue & clk_packed)
4812 && CLASS_TYPE_P (type)
4813 && !TYPE_HAS_TRIVIAL_INIT_REF (type))
4815 if (complain & tf_error)
4816 error ("cannot bind packed field %qE to %qT",
4818 return error_mark_node;
4820 if (lvalue & clk_bitfield)
4822 expr = convert_bitfield_to_declared_type (expr);
4823 expr = fold_convert (type, expr);
4825 expr = build_target_expr_with_type (expr, type);
4828 /* Take the address of the thing to which we will bind the
4830 expr = cp_build_unary_op (ADDR_EXPR, expr, 1, complain);
4831 if (expr == error_mark_node)
4832 return error_mark_node;
4834 /* Convert it to a pointer to the type referred to by the
4835 reference. This will adjust the pointer if a derived to
4836 base conversion is being performed. */
4837 expr = cp_convert (build_pointer_type (TREE_TYPE (ref_type)),
4839 /* Convert the pointer to the desired reference type. */
4840 return build_nop (ref_type, expr);
4844 return decay_conversion (expr);
4847 /* Warn about deprecated conversion if appropriate. */
4848 string_conv_p (totype, expr, 1);
4853 expr = convert_to_base (expr, totype, !c_cast_p,
4855 return build_nop (totype, expr);
4858 return convert_ptrmem (totype, expr, /*allow_inverse_p=*/false,
4865 if (convs->check_narrowing)
4866 check_narrowing (totype, expr);
4868 if (issue_conversion_warnings && (complain & tf_warning))
4869 expr = convert_and_check (totype, expr);
4871 expr = convert (totype, expr);
4876 /* Build a call to __builtin_trap. */
4879 call_builtin_trap (void)
4881 tree fn = implicit_built_in_decls[BUILT_IN_TRAP];
4883 gcc_assert (fn != NULL);
4884 fn = build_call_n (fn, 0);
4888 /* ARG is being passed to a varargs function. Perform any conversions
4889 required. Return the converted value. */
4892 convert_arg_to_ellipsis (tree arg)
4896 The lvalue-to-rvalue, array-to-pointer, and function-to-pointer
4897 standard conversions are performed. */
4898 arg = decay_conversion (arg);
4901 If the argument has integral or enumeration type that is subject
4902 to the integral promotions (_conv.prom_), or a floating point
4903 type that is subject to the floating point promotion
4904 (_conv.fpprom_), the value of the argument is converted to the
4905 promoted type before the call. */
4906 if (TREE_CODE (TREE_TYPE (arg)) == REAL_TYPE
4907 && (TYPE_PRECISION (TREE_TYPE (arg))
4908 < TYPE_PRECISION (double_type_node)))
4909 arg = convert_to_real (double_type_node, arg);
4910 else if (INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (arg)))
4911 arg = perform_integral_promotions (arg);
4913 arg = require_complete_type (arg);
4915 if (arg != error_mark_node
4916 && !pod_type_p (TREE_TYPE (arg)))
4918 /* Undefined behavior [expr.call] 5.2.2/7. We used to just warn
4919 here and do a bitwise copy, but now cp_expr_size will abort if we
4921 If the call appears in the context of a sizeof expression,
4922 there is no need to emit a warning, since the expression won't be
4923 evaluated. We keep the builtin_trap just as a safety check. */
4924 if (!skip_evaluation)
4925 warning (0, "cannot pass objects of non-POD type %q#T through %<...%>; "
4926 "call will abort at runtime", TREE_TYPE (arg));
4927 arg = call_builtin_trap ();
4928 arg = build2 (COMPOUND_EXPR, integer_type_node, arg,
4935 /* va_arg (EXPR, TYPE) is a builtin. Make sure it is not abused. */
4938 build_x_va_arg (tree expr, tree type)
4940 if (processing_template_decl)
4941 return build_min (VA_ARG_EXPR, type, expr);
4943 type = complete_type_or_else (type, NULL_TREE);
4945 if (expr == error_mark_node || !type)
4946 return error_mark_node;
4948 if (! pod_type_p (type))
4950 /* Remove reference types so we don't ICE later on. */
4951 tree type1 = non_reference (type);
4952 /* Undefined behavior [expr.call] 5.2.2/7. */
4953 warning (0, "cannot receive objects of non-POD type %q#T through %<...%>; "
4954 "call will abort at runtime", type);
4955 expr = convert (build_pointer_type (type1), null_node);
4956 expr = build2 (COMPOUND_EXPR, TREE_TYPE (expr),
4957 call_builtin_trap (), expr);
4958 expr = cp_build_indirect_ref (expr, NULL, tf_warning_or_error);
4962 return build_va_arg (expr, type);
4965 /* TYPE has been given to va_arg. Apply the default conversions which
4966 would have happened when passed via ellipsis. Return the promoted
4967 type, or the passed type if there is no change. */
4970 cxx_type_promotes_to (tree type)
4974 /* Perform the array-to-pointer and function-to-pointer
4976 type = type_decays_to (type);
4978 promote = type_promotes_to (type);
4979 if (same_type_p (type, promote))
4985 /* ARG is a default argument expression being passed to a parameter of
4986 the indicated TYPE, which is a parameter to FN. Do any required
4987 conversions. Return the converted value. */
4989 static GTY(()) VEC(tree,gc) *default_arg_context;
4992 convert_default_arg (tree type, tree arg, tree fn, int parmnum)
4997 /* If the ARG is an unparsed default argument expression, the
4998 conversion cannot be performed. */
4999 if (TREE_CODE (arg) == DEFAULT_ARG)
5001 error ("the default argument for parameter %d of %qD has "
5002 "not yet been parsed",
5004 return error_mark_node;
5007 /* Detect recursion. */
5008 for (i = 0; VEC_iterate (tree, default_arg_context, i, t); ++i)
5011 error ("recursive evaluation of default argument for %q#D", fn);
5012 return error_mark_node;
5014 VEC_safe_push (tree, gc, default_arg_context, fn);
5016 if (fn && DECL_TEMPLATE_INFO (fn))
5017 arg = tsubst_default_argument (fn, type, arg);
5023 The names in the expression are bound, and the semantic
5024 constraints are checked, at the point where the default
5025 expressions appears.
5027 we must not perform access checks here. */
5028 push_deferring_access_checks (dk_no_check);
5029 arg = break_out_target_exprs (arg);
5030 if (TREE_CODE (arg) == CONSTRUCTOR)
5032 arg = digest_init (type, arg);
5033 arg = convert_for_initialization (0, type, arg, LOOKUP_NORMAL,
5034 "default argument", fn, parmnum,
5035 tf_warning_or_error);
5039 /* We must make a copy of ARG, in case subsequent processing
5040 alters any part of it. For example, during gimplification a
5041 cast of the form (T) &X::f (where "f" is a member function)
5042 will lead to replacing the PTRMEM_CST for &X::f with a
5043 VAR_DECL. We can avoid the copy for constants, since they
5044 are never modified in place. */
5045 if (!CONSTANT_CLASS_P (arg))
5046 arg = unshare_expr (arg);
5047 arg = convert_for_initialization (0, type, arg, LOOKUP_NORMAL,
5048 "default argument", fn, parmnum,
5049 tf_warning_or_error);
5050 arg = convert_for_arg_passing (type, arg);
5052 pop_deferring_access_checks();
5054 VEC_pop (tree, default_arg_context);
5059 /* Returns the type which will really be used for passing an argument of
5063 type_passed_as (tree type)
5065 /* Pass classes with copy ctors by invisible reference. */
5066 if (TREE_ADDRESSABLE (type))
5068 type = build_reference_type (type);
5069 /* There are no other pointers to this temporary. */
5070 type = build_qualified_type (type, TYPE_QUAL_RESTRICT);
5072 else if (targetm.calls.promote_prototypes (type)
5073 && INTEGRAL_TYPE_P (type)
5074 && COMPLETE_TYPE_P (type)
5075 && INT_CST_LT_UNSIGNED (TYPE_SIZE (type),
5076 TYPE_SIZE (integer_type_node)))
5077 type = integer_type_node;
5082 /* Actually perform the appropriate conversion. */
5085 convert_for_arg_passing (tree type, tree val)
5089 /* If VAL is a bitfield, then -- since it has already been converted
5090 to TYPE -- it cannot have a precision greater than TYPE.
5092 If it has a smaller precision, we must widen it here. For
5093 example, passing "int f:3;" to a function expecting an "int" will
5094 not result in any conversion before this point.
5096 If the precision is the same we must not risk widening. For
5097 example, the COMPONENT_REF for a 32-bit "long long" bitfield will
5098 often have type "int", even though the C++ type for the field is
5099 "long long". If the value is being passed to a function
5100 expecting an "int", then no conversions will be required. But,
5101 if we call convert_bitfield_to_declared_type, the bitfield will
5102 be converted to "long long". */
5103 bitfield_type = is_bitfield_expr_with_lowered_type (val);
5105 && TYPE_PRECISION (TREE_TYPE (val)) < TYPE_PRECISION (type))
5106 val = convert_to_integer (TYPE_MAIN_VARIANT (bitfield_type), val);
5108 if (val == error_mark_node)
5110 /* Pass classes with copy ctors by invisible reference. */
5111 else if (TREE_ADDRESSABLE (type))
5112 val = build1 (ADDR_EXPR, build_reference_type (type), val);
5113 else if (targetm.calls.promote_prototypes (type)
5114 && INTEGRAL_TYPE_P (type)
5115 && COMPLETE_TYPE_P (type)
5116 && INT_CST_LT_UNSIGNED (TYPE_SIZE (type),
5117 TYPE_SIZE (integer_type_node)))
5118 val = perform_integral_promotions (val);
5119 if (warn_missing_format_attribute)
5121 tree rhstype = TREE_TYPE (val);
5122 const enum tree_code coder = TREE_CODE (rhstype);
5123 const enum tree_code codel = TREE_CODE (type);
5124 if ((codel == POINTER_TYPE || codel == REFERENCE_TYPE)
5126 && check_missing_format_attribute (type, rhstype))
5127 warning (OPT_Wmissing_format_attribute,
5128 "argument of function call might be a candidate for a format attribute");
5133 /* Returns true iff FN is a function with magic varargs, i.e. ones for
5134 which no conversions at all should be done. This is true for some
5135 builtins which don't act like normal functions. */
5138 magic_varargs_p (tree fn)
5140 if (DECL_BUILT_IN (fn))
5141 switch (DECL_FUNCTION_CODE (fn))
5143 case BUILT_IN_CLASSIFY_TYPE:
5144 case BUILT_IN_CONSTANT_P:
5145 case BUILT_IN_NEXT_ARG:
5146 case BUILT_IN_VA_START:
5150 return lookup_attribute ("type generic",
5151 TYPE_ATTRIBUTES (TREE_TYPE (fn))) != 0;
5157 /* Subroutine of the various build_*_call functions. Overload resolution
5158 has chosen a winning candidate CAND; build up a CALL_EXPR accordingly.
5159 ARGS is a TREE_LIST of the unconverted arguments to the call. FLAGS is a
5160 bitmask of various LOOKUP_* flags which apply to the call itself. */
5163 build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain)
5166 tree args = cand->args;
5167 conversion **convs = cand->convs;
5169 tree parm = TYPE_ARG_TYPES (TREE_TYPE (fn));
5177 bool already_used = false;
5179 /* In a template, there is no need to perform all of the work that
5180 is normally done. We are only interested in the type of the call
5181 expression, i.e., the return type of the function. Any semantic
5182 errors will be deferred until the template is instantiated. */
5183 if (processing_template_decl)
5187 return_type = TREE_TYPE (TREE_TYPE (fn));
5188 expr = build_call_list (return_type, build_addr_func (fn), args);
5189 if (TREE_THIS_VOLATILE (fn) && cfun)
5190 current_function_returns_abnormally = 1;
5191 if (!VOID_TYPE_P (return_type))
5192 require_complete_type (return_type);
5193 return convert_from_reference (expr);
5196 /* Give any warnings we noticed during overload resolution. */
5199 struct candidate_warning *w;
5200 for (w = cand->warnings; w; w = w->next)
5201 joust (cand, w->loser, 1);
5204 /* Make =delete work with SFINAE. */
5205 if (DECL_DELETED_FN (fn) && !(complain & tf_error))
5206 return error_mark_node;
5208 if (DECL_FUNCTION_MEMBER_P (fn))
5210 /* If FN is a template function, two cases must be considered.
5215 template <class T> void f();
5217 template <class T> struct B {
5221 struct C : A, B<int> {
5223 using B<int>::g; // #2
5226 In case #1 where `A::f' is a member template, DECL_ACCESS is
5227 recorded in the primary template but not in its specialization.
5228 We check access of FN using its primary template.
5230 In case #2, where `B<int>::g' has a DECL_TEMPLATE_INFO simply
5231 because it is a member of class template B, DECL_ACCESS is
5232 recorded in the specialization `B<int>::g'. We cannot use its
5233 primary template because `B<T>::g' and `B<int>::g' may have
5234 different access. */
5235 if (DECL_TEMPLATE_INFO (fn)
5236 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (fn)))
5237 perform_or_defer_access_check (cand->access_path,
5238 DECL_TI_TEMPLATE (fn), fn);
5240 perform_or_defer_access_check (cand->access_path, fn, fn);
5243 if (args && TREE_CODE (args) != TREE_LIST)
5244 args = build_tree_list (NULL_TREE, args);
5247 /* Find maximum size of vector to hold converted arguments. */
5248 parmlen = list_length (parm);
5249 nargs = list_length (args);
5250 if (parmlen > nargs)
5252 argarray = (tree *) alloca (nargs * sizeof (tree));
5254 /* The implicit parameters to a constructor are not considered by overload
5255 resolution, and must be of the proper type. */
5256 if (DECL_CONSTRUCTOR_P (fn))
5258 argarray[j++] = TREE_VALUE (arg);
5259 arg = TREE_CHAIN (arg);
5260 parm = TREE_CHAIN (parm);
5261 /* We should never try to call the abstract constructor. */
5262 gcc_assert (!DECL_HAS_IN_CHARGE_PARM_P (fn));
5264 if (DECL_HAS_VTT_PARM_P (fn))
5266 argarray[j++] = TREE_VALUE (arg);
5267 arg = TREE_CHAIN (arg);
5268 parm = TREE_CHAIN (parm);
5271 /* Bypass access control for 'this' parameter. */
5272 else if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
5274 tree parmtype = TREE_VALUE (parm);
5275 tree argtype = TREE_TYPE (TREE_VALUE (arg));
5279 if (convs[i]->bad_p)
5281 if (complain & tf_error)
5282 permerror (input_location, "passing %qT as %<this%> argument of %q#D discards qualifiers",
5283 TREE_TYPE (argtype), fn);
5285 return error_mark_node;
5288 /* [class.mfct.nonstatic]: If a nonstatic member function of a class
5289 X is called for an object that is not of type X, or of a type
5290 derived from X, the behavior is undefined.
5292 So we can assume that anything passed as 'this' is non-null, and
5293 optimize accordingly. */
5294 gcc_assert (TREE_CODE (parmtype) == POINTER_TYPE);
5295 /* Convert to the base in which the function was declared. */
5296 gcc_assert (cand->conversion_path != NULL_TREE);
5297 converted_arg = build_base_path (PLUS_EXPR,
5299 cand->conversion_path,
5301 /* Check that the base class is accessible. */
5302 if (!accessible_base_p (TREE_TYPE (argtype),
5303 BINFO_TYPE (cand->conversion_path), true))
5304 error ("%qT is not an accessible base of %qT",
5305 BINFO_TYPE (cand->conversion_path),
5306 TREE_TYPE (argtype));
5307 /* If fn was found by a using declaration, the conversion path
5308 will be to the derived class, not the base declaring fn. We
5309 must convert from derived to base. */
5310 base_binfo = lookup_base (TREE_TYPE (TREE_TYPE (converted_arg)),
5311 TREE_TYPE (parmtype), ba_unique, NULL);
5312 converted_arg = build_base_path (PLUS_EXPR, converted_arg,
5315 argarray[j++] = converted_arg;
5316 parm = TREE_CHAIN (parm);
5317 arg = TREE_CHAIN (arg);
5323 parm = TREE_CHAIN (parm), arg = TREE_CHAIN (arg), ++i)
5325 tree type = TREE_VALUE (parm);
5329 /* Don't make a copy here if build_call is going to. */
5330 if (conv->kind == ck_rvalue
5331 && COMPLETE_TYPE_P (complete_type (type))
5332 && !TREE_ADDRESSABLE (type))
5333 conv = conv->u.next;
5335 val = convert_like_with_context
5336 (conv, TREE_VALUE (arg), fn, i - is_method, complain);
5338 val = convert_for_arg_passing (type, val);
5339 if (val == error_mark_node)
5340 return error_mark_node;
5342 argarray[j++] = val;
5345 /* Default arguments */
5346 for (; parm && parm != void_list_node; parm = TREE_CHAIN (parm), i++)
5347 argarray[j++] = convert_default_arg (TREE_VALUE (parm),
5348 TREE_PURPOSE (parm),
5351 for (; arg; arg = TREE_CHAIN (arg))
5353 tree a = TREE_VALUE (arg);
5354 if (magic_varargs_p (fn))
5355 /* Do no conversions for magic varargs. */;
5357 a = convert_arg_to_ellipsis (a);
5361 gcc_assert (j <= nargs);
5364 check_function_arguments (TYPE_ATTRIBUTES (TREE_TYPE (fn)),
5365 nargs, argarray, TYPE_ARG_TYPES (TREE_TYPE (fn)));
5367 /* Avoid actually calling copy constructors and copy assignment operators,
5370 if (! flag_elide_constructors)
5371 /* Do things the hard way. */;
5372 else if (cand->num_convs == 1
5373 && (DECL_COPY_CONSTRUCTOR_P (fn)
5374 || DECL_MOVE_CONSTRUCTOR_P (fn)))
5377 arg = argarray[num_artificial_parms_for (fn)];
5379 /* Pull out the real argument, disregarding const-correctness. */
5381 while (CONVERT_EXPR_P (targ)
5382 || TREE_CODE (targ) == NON_LVALUE_EXPR)
5383 targ = TREE_OPERAND (targ, 0);
5384 if (TREE_CODE (targ) == ADDR_EXPR)
5386 targ = TREE_OPERAND (targ, 0);
5387 if (!same_type_ignoring_top_level_qualifiers_p
5388 (TREE_TYPE (TREE_TYPE (arg)), TREE_TYPE (targ)))
5397 arg = cp_build_indirect_ref (arg, 0, complain);
5399 if (TREE_CODE (arg) == TARGET_EXPR
5400 && TARGET_EXPR_LIST_INIT_P (arg))
5402 /* Copy-list-initialization doesn't require the copy constructor
5405 /* [class.copy]: the copy constructor is implicitly defined even if
5406 the implementation elided its use. */
5407 else if (TYPE_HAS_COMPLEX_INIT_REF (DECL_CONTEXT (fn)))
5410 already_used = true;
5413 /* If we're creating a temp and we already have one, don't create a
5414 new one. If we're not creating a temp but we get one, use
5415 INIT_EXPR to collapse the temp into our target. Otherwise, if the
5416 ctor is trivial, do a bitwise copy with a simple TARGET_EXPR for a
5417 temp or an INIT_EXPR otherwise. */
5418 if (integer_zerop (TREE_VALUE (args)))
5420 if (TREE_CODE (arg) == TARGET_EXPR)
5422 else if (TYPE_HAS_TRIVIAL_INIT_REF (DECL_CONTEXT (fn)))
5423 return build_target_expr_with_type (arg, DECL_CONTEXT (fn));
5425 else if (TREE_CODE (arg) == TARGET_EXPR
5426 || (TYPE_HAS_TRIVIAL_INIT_REF (DECL_CONTEXT (fn))
5427 && !move_fn_p (fn)))
5429 tree to = stabilize_reference
5430 (cp_build_indirect_ref (TREE_VALUE (args), 0, complain));
5432 val = build2 (INIT_EXPR, DECL_CONTEXT (fn), to, arg);
5436 else if (DECL_OVERLOADED_OPERATOR_P (fn) == NOP_EXPR
5438 && TYPE_HAS_TRIVIAL_ASSIGN_REF (DECL_CONTEXT (fn)))
5440 tree to = stabilize_reference
5441 (cp_build_indirect_ref (argarray[0], 0, complain));
5442 tree type = TREE_TYPE (to);
5443 tree as_base = CLASSTYPE_AS_BASE (type);
5446 if (tree_int_cst_equal (TYPE_SIZE (type), TYPE_SIZE (as_base)))
5448 arg = cp_build_indirect_ref (arg, 0, complain);
5449 val = build2 (MODIFY_EXPR, TREE_TYPE (to), to, arg);
5453 /* We must only copy the non-tail padding parts.
5454 Use __builtin_memcpy for the bitwise copy.
5455 FIXME fix 22488 so we can go back to using MODIFY_EXPR
5456 instead of an explicit call to memcpy. */
5458 tree arg0, arg1, arg2, t;
5459 tree test = NULL_TREE;
5461 arg2 = TYPE_SIZE_UNIT (as_base);
5463 arg0 = cp_build_unary_op (ADDR_EXPR, to, 0, complain);
5465 if (!(optimize && flag_tree_ter))
5467 /* When TER is off get_pointer_alignment returns 0, so a call
5468 to __builtin_memcpy is expanded as a call to memcpy, which
5469 is invalid with identical args. When TER is on it is
5470 expanded as a block move, which should be safe. */
5471 arg0 = save_expr (arg0);
5472 arg1 = save_expr (arg1);
5473 test = build2 (EQ_EXPR, boolean_type_node, arg0, arg1);
5475 t = implicit_built_in_decls[BUILT_IN_MEMCPY];
5476 t = build_call_n (t, 3, arg0, arg1, arg2);
5478 t = convert (TREE_TYPE (arg0), t);
5480 t = build3 (COND_EXPR, TREE_TYPE (t), test, arg0, t);
5481 val = cp_build_indirect_ref (t, 0, complain);
5490 if (DECL_VINDEX (fn) && (flags & LOOKUP_NONVIRTUAL) == 0)
5493 tree binfo = lookup_base (TREE_TYPE (TREE_TYPE (argarray[0])),
5496 gcc_assert (binfo && binfo != error_mark_node);
5498 /* Warn about deprecated virtual functions now, since we're about
5499 to throw away the decl. */
5500 if (TREE_DEPRECATED (fn))
5501 warn_deprecated_use (fn);
5503 argarray[0] = build_base_path (PLUS_EXPR, argarray[0], binfo, 1);
5504 if (TREE_SIDE_EFFECTS (argarray[0]))
5505 argarray[0] = save_expr (argarray[0]);
5506 t = build_pointer_type (TREE_TYPE (fn));
5507 if (DECL_CONTEXT (fn) && TYPE_JAVA_INTERFACE (DECL_CONTEXT (fn)))
5508 fn = build_java_interface_fn_ref (fn, argarray[0]);
5510 fn = build_vfn_ref (argarray[0], DECL_VINDEX (fn));
5514 fn = build_addr_func (fn);
5516 return build_cxx_call (fn, nargs, argarray);
5519 /* Build and return a call to FN, using NARGS arguments in ARGARRAY.
5520 This function performs no overload resolution, conversion, or other
5521 high-level operations. */
5524 build_cxx_call (tree fn, int nargs, tree *argarray)
5528 fn = build_call_a (fn, nargs, argarray);
5530 /* If this call might throw an exception, note that fact. */
5531 fndecl = get_callee_fndecl (fn);
5532 if ((!fndecl || !TREE_NOTHROW (fndecl))
5533 && at_function_scope_p ()
5535 cp_function_chain->can_throw = 1;
5537 /* Check that arguments to builtin functions match the expectations. */
5539 && DECL_BUILT_IN (fndecl)
5540 && DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_NORMAL
5541 && !check_builtin_function_arguments (fndecl, nargs, argarray))
5542 return error_mark_node;
5544 /* Some built-in function calls will be evaluated at compile-time in
5546 fn = fold_if_not_in_template (fn);
5548 if (VOID_TYPE_P (TREE_TYPE (fn)))
5551 fn = require_complete_type (fn);
5552 if (fn == error_mark_node)
5553 return error_mark_node;
5555 if (MAYBE_CLASS_TYPE_P (TREE_TYPE (fn)))
5556 fn = build_cplus_new (TREE_TYPE (fn), fn);
5557 return convert_from_reference (fn);
5560 static GTY(()) tree java_iface_lookup_fn;
5562 /* Make an expression which yields the address of the Java interface
5563 method FN. This is achieved by generating a call to libjava's
5564 _Jv_LookupInterfaceMethodIdx(). */
5567 build_java_interface_fn_ref (tree fn, tree instance)
5569 tree lookup_fn, method, idx;
5570 tree klass_ref, iface, iface_ref;
5573 if (!java_iface_lookup_fn)
5575 tree endlink = build_void_list_node ();
5576 tree t = tree_cons (NULL_TREE, ptr_type_node,
5577 tree_cons (NULL_TREE, ptr_type_node,
5578 tree_cons (NULL_TREE, java_int_type_node,
5580 java_iface_lookup_fn
5581 = add_builtin_function ("_Jv_LookupInterfaceMethodIdx",
5582 build_function_type (ptr_type_node, t),
5583 0, NOT_BUILT_IN, NULL, NULL_TREE);
5586 /* Look up the pointer to the runtime java.lang.Class object for `instance'.
5587 This is the first entry in the vtable. */
5588 klass_ref = build_vtbl_ref (cp_build_indirect_ref (instance, 0,
5589 tf_warning_or_error),
5592 /* Get the java.lang.Class pointer for the interface being called. */
5593 iface = DECL_CONTEXT (fn);
5594 iface_ref = lookup_field (iface, get_identifier ("class$"), 0, false);
5595 if (!iface_ref || TREE_CODE (iface_ref) != VAR_DECL
5596 || DECL_CONTEXT (iface_ref) != iface)
5598 error ("could not find class$ field in java interface type %qT",
5600 return error_mark_node;
5602 iface_ref = build_address (iface_ref);
5603 iface_ref = convert (build_pointer_type (iface), iface_ref);
5605 /* Determine the itable index of FN. */
5607 for (method = TYPE_METHODS (iface); method; method = TREE_CHAIN (method))
5609 if (!DECL_VIRTUAL_P (method))
5615 idx = build_int_cst (NULL_TREE, i);
5617 lookup_fn = build1 (ADDR_EXPR,
5618 build_pointer_type (TREE_TYPE (java_iface_lookup_fn)),
5619 java_iface_lookup_fn);
5620 return build_call_nary (ptr_type_node, lookup_fn,
5621 3, klass_ref, iface_ref, idx);
5624 /* Returns the value to use for the in-charge parameter when making a
5625 call to a function with the indicated NAME.
5627 FIXME:Can't we find a neater way to do this mapping? */
5630 in_charge_arg_for_name (tree name)
5632 if (name == base_ctor_identifier
5633 || name == base_dtor_identifier)
5634 return integer_zero_node;
5635 else if (name == complete_ctor_identifier)
5636 return integer_one_node;
5637 else if (name == complete_dtor_identifier)
5638 return integer_two_node;
5639 else if (name == deleting_dtor_identifier)
5640 return integer_three_node;
5642 /* This function should only be called with one of the names listed
5648 /* Build a call to a constructor, destructor, or an assignment
5649 operator for INSTANCE, an expression with class type. NAME
5650 indicates the special member function to call; ARGS are the
5651 arguments. BINFO indicates the base of INSTANCE that is to be
5652 passed as the `this' parameter to the member function called.
5654 FLAGS are the LOOKUP_* flags to use when processing the call.
5656 If NAME indicates a complete object constructor, INSTANCE may be
5657 NULL_TREE. In this case, the caller will call build_cplus_new to
5658 store the newly constructed object into a VAR_DECL. */
5661 build_special_member_call (tree instance, tree name, tree args,
5662 tree binfo, int flags, tsubst_flags_t complain)
5665 /* The type of the subobject to be constructed or destroyed. */
5668 gcc_assert (name == complete_ctor_identifier
5669 || name == base_ctor_identifier
5670 || name == complete_dtor_identifier
5671 || name == base_dtor_identifier
5672 || name == deleting_dtor_identifier
5673 || name == ansi_assopname (NOP_EXPR));
5676 /* Resolve the name. */
5677 if (!complete_type_or_else (binfo, NULL_TREE))
5678 return error_mark_node;
5680 binfo = TYPE_BINFO (binfo);
5683 gcc_assert (binfo != NULL_TREE);
5685 class_type = BINFO_TYPE (binfo);
5687 /* Handle the special case where INSTANCE is NULL_TREE. */
5688 if (name == complete_ctor_identifier && !instance)
5690 instance = build_int_cst (build_pointer_type (class_type), 0);
5691 instance = build1 (INDIRECT_REF, class_type, instance);
5695 if (name == complete_dtor_identifier
5696 || name == base_dtor_identifier
5697 || name == deleting_dtor_identifier)
5698 gcc_assert (args == NULL_TREE);
5700 /* Convert to the base class, if necessary. */
5701 if (!same_type_ignoring_top_level_qualifiers_p
5702 (TREE_TYPE (instance), BINFO_TYPE (binfo)))
5704 if (name != ansi_assopname (NOP_EXPR))
5705 /* For constructors and destructors, either the base is
5706 non-virtual, or it is virtual but we are doing the
5707 conversion from a constructor or destructor for the
5708 complete object. In either case, we can convert
5710 instance = convert_to_base_statically (instance, binfo);
5712 /* However, for assignment operators, we must convert
5713 dynamically if the base is virtual. */
5714 instance = build_base_path (PLUS_EXPR, instance,
5715 binfo, /*nonnull=*/1);
5719 gcc_assert (instance != NULL_TREE);
5721 fns = lookup_fnfields (binfo, name, 1);
5723 /* When making a call to a constructor or destructor for a subobject
5724 that uses virtual base classes, pass down a pointer to a VTT for
5726 if ((name == base_ctor_identifier
5727 || name == base_dtor_identifier)
5728 && CLASSTYPE_VBASECLASSES (class_type))
5733 /* If the current function is a complete object constructor
5734 or destructor, then we fetch the VTT directly.
5735 Otherwise, we look it up using the VTT we were given. */
5736 vtt = TREE_CHAIN (CLASSTYPE_VTABLES (current_class_type));
5737 vtt = decay_conversion (vtt);
5738 vtt = build3 (COND_EXPR, TREE_TYPE (vtt),
5739 build2 (EQ_EXPR, boolean_type_node,
5740 current_in_charge_parm, integer_zero_node),
5743 gcc_assert (BINFO_SUBVTT_INDEX (binfo));
5744 sub_vtt = build2 (POINTER_PLUS_EXPR, TREE_TYPE (vtt), vtt,
5745 BINFO_SUBVTT_INDEX (binfo));
5747 args = tree_cons (NULL_TREE, sub_vtt, args);
5750 return build_new_method_call (instance, fns, args,
5751 TYPE_BINFO (BINFO_TYPE (binfo)),
5756 /* Return the NAME, as a C string. The NAME indicates a function that
5757 is a member of TYPE. *FREE_P is set to true if the caller must
5758 free the memory returned.
5760 Rather than go through all of this, we should simply set the names
5761 of constructors and destructors appropriately, and dispense with
5762 ctor_identifier, dtor_identifier, etc. */
5765 name_as_c_string (tree name, tree type, bool *free_p)
5769 /* Assume that we will not allocate memory. */
5771 /* Constructors and destructors are special. */
5772 if (IDENTIFIER_CTOR_OR_DTOR_P (name))
5775 = CONST_CAST (char *, IDENTIFIER_POINTER (constructor_name (type)));
5776 /* For a destructor, add the '~'. */
5777 if (name == complete_dtor_identifier
5778 || name == base_dtor_identifier
5779 || name == deleting_dtor_identifier)
5781 pretty_name = concat ("~", pretty_name, NULL);
5782 /* Remember that we need to free the memory allocated. */
5786 else if (IDENTIFIER_TYPENAME_P (name))
5788 pretty_name = concat ("operator ",
5789 type_as_string (TREE_TYPE (name),
5790 TFF_PLAIN_IDENTIFIER),
5792 /* Remember that we need to free the memory allocated. */
5796 pretty_name = CONST_CAST (char *, IDENTIFIER_POINTER (name));
5801 /* Build a call to "INSTANCE.FN (ARGS)". If FN_P is non-NULL, it will
5802 be set, upon return, to the function called. */
5805 build_new_method_call (tree instance, tree fns, tree args,
5806 tree conversion_path, int flags,
5807 tree *fn_p, tsubst_flags_t complain)
5809 struct z_candidate *candidates = 0, *cand;
5810 tree explicit_targs = NULL_TREE;
5811 tree basetype = NULL_TREE;
5814 tree mem_args = NULL_TREE, instance_ptr;
5820 int template_only = 0;
5827 gcc_assert (instance != NULL_TREE);
5829 /* We don't know what function we're going to call, yet. */
5833 if (error_operand_p (instance)
5834 || error_operand_p (fns)
5835 || args == error_mark_node)
5836 return error_mark_node;
5838 if (!BASELINK_P (fns))
5840 if (complain & tf_error)
5841 error ("call to non-function %qD", fns);
5842 return error_mark_node;
5845 orig_instance = instance;
5849 /* Dismantle the baselink to collect all the information we need. */
5850 if (!conversion_path)
5851 conversion_path = BASELINK_BINFO (fns);
5852 access_binfo = BASELINK_ACCESS_BINFO (fns);
5853 optype = BASELINK_OPTYPE (fns);
5854 fns = BASELINK_FUNCTIONS (fns);
5855 if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
5857 explicit_targs = TREE_OPERAND (fns, 1);
5858 fns = TREE_OPERAND (fns, 0);
5861 gcc_assert (TREE_CODE (fns) == FUNCTION_DECL
5862 || TREE_CODE (fns) == TEMPLATE_DECL
5863 || TREE_CODE (fns) == OVERLOAD);
5864 fn = get_first_fn (fns);
5865 name = DECL_NAME (fn);
5867 basetype = TYPE_MAIN_VARIANT (TREE_TYPE (instance));
5868 gcc_assert (CLASS_TYPE_P (basetype));
5870 if (processing_template_decl)
5872 instance = build_non_dependent_expr (instance);
5873 args = build_non_dependent_args (orig_args);
5876 /* The USER_ARGS are the arguments we will display to users if an
5877 error occurs. The USER_ARGS should not include any
5878 compiler-generated arguments. The "this" pointer hasn't been
5879 added yet. However, we must remove the VTT pointer if this is a
5880 call to a base-class constructor or destructor. */
5882 if (IDENTIFIER_CTOR_OR_DTOR_P (name))
5884 /* Callers should explicitly indicate whether they want to construct
5885 the complete object or just the part without virtual bases. */
5886 gcc_assert (name != ctor_identifier);
5887 /* Similarly for destructors. */
5888 gcc_assert (name != dtor_identifier);
5889 /* Remove the VTT pointer, if present. */
5890 if ((name == base_ctor_identifier || name == base_dtor_identifier)
5891 && CLASSTYPE_VBASECLASSES (basetype))
5892 user_args = TREE_CHAIN (user_args);
5895 /* Process the argument list. */
5896 args = resolve_args (args);
5897 if (args == error_mark_node)
5898 return error_mark_node;
5900 instance_ptr = build_this (instance);
5902 /* It's OK to call destructors and constructors on cv-qualified objects.
5903 Therefore, convert the INSTANCE_PTR to the unqualified type, if
5905 if (DECL_DESTRUCTOR_P (fn)
5906 || DECL_CONSTRUCTOR_P (fn))
5908 tree type = build_pointer_type (basetype);
5909 if (!same_type_p (type, TREE_TYPE (instance_ptr)))
5910 instance_ptr = build_nop (type, instance_ptr);
5912 if (DECL_DESTRUCTOR_P (fn))
5913 name = complete_dtor_identifier;
5915 /* If CONSTRUCTOR_IS_DIRECT_INIT is set, this was a T{ } form
5916 initializer, not T({ }). If the type doesn't have a list ctor,
5917 break apart the list into separate ctor args. */
5918 if (DECL_CONSTRUCTOR_P (fn) && args
5919 && BRACE_ENCLOSED_INITIALIZER_P (TREE_VALUE (args))
5920 && CONSTRUCTOR_IS_DIRECT_INIT (TREE_VALUE (args))
5921 && !TYPE_HAS_LIST_CTOR (basetype))
5923 gcc_assert (TREE_CHAIN (args) == NULL_TREE);
5924 args = ctor_to_list (TREE_VALUE (args));
5927 class_type = (conversion_path ? BINFO_TYPE (conversion_path) : NULL_TREE);
5928 mem_args = tree_cons (NULL_TREE, instance_ptr, args);
5930 /* Get the high-water mark for the CONVERSION_OBSTACK. */
5931 p = conversion_obstack_alloc (0);
5933 for (fn = fns; fn; fn = OVL_NEXT (fn))
5935 tree t = OVL_CURRENT (fn);
5938 /* We can end up here for copy-init of same or base class. */
5939 if ((flags & LOOKUP_ONLYCONVERTING)
5940 && DECL_NONCONVERTING_P (t))
5943 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (t))
5944 this_arglist = mem_args;
5946 this_arglist = args;
5948 if (TREE_CODE (t) == TEMPLATE_DECL)
5949 /* A member template. */
5950 add_template_candidate (&candidates, t,
5953 this_arglist, optype,
5958 else if (! template_only)
5959 add_function_candidate (&candidates, t,
5967 candidates = splice_viable (candidates, pedantic, &any_viable_p);
5970 if (complain & tf_error)
5972 if (!COMPLETE_TYPE_P (basetype))
5973 cxx_incomplete_type_error (instance_ptr, basetype);
5979 pretty_name = name_as_c_string (name, basetype, &free_p);
5980 error ("no matching function for call to %<%T::%s(%A)%#V%>",
5981 basetype, pretty_name, user_args,
5982 TREE_TYPE (TREE_TYPE (instance_ptr)));
5986 print_z_candidates (candidates);
5988 call = error_mark_node;
5992 cand = tourney (candidates);
5998 if (complain & tf_error)
6000 pretty_name = name_as_c_string (name, basetype, &free_p);
6001 error ("call of overloaded %<%s(%A)%> is ambiguous", pretty_name,
6003 print_z_candidates (candidates);
6007 call = error_mark_node;
6013 if (!(flags & LOOKUP_NONVIRTUAL)
6014 && DECL_PURE_VIRTUAL_P (fn)
6015 && instance == current_class_ref
6016 && (DECL_CONSTRUCTOR_P (current_function_decl)
6017 || DECL_DESTRUCTOR_P (current_function_decl))
6018 && (complain & tf_warning))
6019 /* This is not an error, it is runtime undefined
6021 warning (0, (DECL_CONSTRUCTOR_P (current_function_decl) ?
6022 "abstract virtual %q#D called from constructor"
6023 : "abstract virtual %q#D called from destructor"),
6026 if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE
6027 && is_dummy_object (instance_ptr))
6029 if (complain & tf_error)
6030 error ("cannot call member function %qD without object",
6032 call = error_mark_node;
6036 if (DECL_VINDEX (fn) && ! (flags & LOOKUP_NONVIRTUAL)
6037 && resolves_to_fixed_type_p (instance, 0))
6038 flags |= LOOKUP_NONVIRTUAL;
6039 /* Now we know what function is being called. */
6042 /* Build the actual CALL_EXPR. */
6043 call = build_over_call (cand, flags, complain);
6044 /* In an expression of the form `a->f()' where `f' turns
6045 out to be a static member function, `a' is
6046 none-the-less evaluated. */
6047 if (TREE_CODE (TREE_TYPE (fn)) != METHOD_TYPE
6048 && !is_dummy_object (instance_ptr)
6049 && TREE_SIDE_EFFECTS (instance_ptr))
6050 call = build2 (COMPOUND_EXPR, TREE_TYPE (call),
6051 instance_ptr, call);
6052 else if (call != error_mark_node
6053 && DECL_DESTRUCTOR_P (cand->fn)
6054 && !VOID_TYPE_P (TREE_TYPE (call)))
6055 /* An explicit call of the form "x->~X()" has type
6056 "void". However, on platforms where destructors
6057 return "this" (i.e., those where
6058 targetm.cxx.cdtor_returns_this is true), such calls
6059 will appear to have a return value of pointer type
6060 to the low-level call machinery. We do not want to
6061 change the low-level machinery, since we want to be
6062 able to optimize "delete f()" on such platforms as
6063 "operator delete(~X(f()))" (rather than generating
6064 "t = f(), ~X(t), operator delete (t)"). */
6065 call = build_nop (void_type_node, call);
6070 if (processing_template_decl && call != error_mark_node)
6072 bool cast_to_void = false;
6074 if (TREE_CODE (call) == COMPOUND_EXPR)
6075 call = TREE_OPERAND (call, 1);
6076 else if (TREE_CODE (call) == NOP_EXPR)
6078 cast_to_void = true;
6079 call = TREE_OPERAND (call, 0);
6081 if (TREE_CODE (call) == INDIRECT_REF)
6082 call = TREE_OPERAND (call, 0);
6083 call = (build_min_non_dep_call_list
6085 build_min (COMPONENT_REF, TREE_TYPE (CALL_EXPR_FN (call)),
6086 orig_instance, orig_fns, NULL_TREE),
6088 call = convert_from_reference (call);
6090 call = build_nop (void_type_node, call);
6093 /* Free all the conversions we allocated. */
6094 obstack_free (&conversion_obstack, p);
6099 /* Returns true iff standard conversion sequence ICS1 is a proper
6100 subsequence of ICS2. */
6103 is_subseq (conversion *ics1, conversion *ics2)
6105 /* We can assume that a conversion of the same code
6106 between the same types indicates a subsequence since we only get
6107 here if the types we are converting from are the same. */
6109 while (ics1->kind == ck_rvalue
6110 || ics1->kind == ck_lvalue)
6111 ics1 = ics1->u.next;
6115 while (ics2->kind == ck_rvalue
6116 || ics2->kind == ck_lvalue)
6117 ics2 = ics2->u.next;
6119 if (ics2->kind == ck_user
6120 || ics2->kind == ck_ambig
6121 || ics2->kind == ck_identity)
6122 /* At this point, ICS1 cannot be a proper subsequence of
6123 ICS2. We can get a USER_CONV when we are comparing the
6124 second standard conversion sequence of two user conversion
6128 ics2 = ics2->u.next;
6130 if (ics2->kind == ics1->kind
6131 && same_type_p (ics2->type, ics1->type)
6132 && same_type_p (ics2->u.next->type,
6133 ics1->u.next->type))
6138 /* Returns nonzero iff DERIVED is derived from BASE. The inputs may
6139 be any _TYPE nodes. */
6142 is_properly_derived_from (tree derived, tree base)
6144 if (!CLASS_TYPE_P (derived) || !CLASS_TYPE_P (base))
6147 /* We only allow proper derivation here. The DERIVED_FROM_P macro
6148 considers every class derived from itself. */
6149 return (!same_type_ignoring_top_level_qualifiers_p (derived, base)
6150 && DERIVED_FROM_P (base, derived));
6153 /* We build the ICS for an implicit object parameter as a pointer
6154 conversion sequence. However, such a sequence should be compared
6155 as if it were a reference conversion sequence. If ICS is the
6156 implicit conversion sequence for an implicit object parameter,
6157 modify it accordingly. */
6160 maybe_handle_implicit_object (conversion **ics)
6164 /* [over.match.funcs]
6166 For non-static member functions, the type of the
6167 implicit object parameter is "reference to cv X"
6168 where X is the class of which the function is a
6169 member and cv is the cv-qualification on the member
6170 function declaration. */
6171 conversion *t = *ics;
6172 tree reference_type;
6174 /* The `this' parameter is a pointer to a class type. Make the
6175 implicit conversion talk about a reference to that same class
6177 reference_type = TREE_TYPE (t->type);
6178 reference_type = build_reference_type (reference_type);
6180 if (t->kind == ck_qual)
6182 if (t->kind == ck_ptr)
6184 t = build_identity_conv (TREE_TYPE (t->type), NULL_TREE);
6185 t = direct_reference_binding (reference_type, t);
6187 t->rvaluedness_matches_p = 0;
6192 /* If *ICS is a REF_BIND set *ICS to the remainder of the conversion,
6193 and return the initial reference binding conversion. Otherwise,
6194 leave *ICS unchanged and return NULL. */
6197 maybe_handle_ref_bind (conversion **ics)
6199 if ((*ics)->kind == ck_ref_bind)
6201 conversion *old_ics = *ics;
6202 *ics = old_ics->u.next;
6203 (*ics)->user_conv_p = old_ics->user_conv_p;
6204 (*ics)->bad_p = old_ics->bad_p;
6211 /* Compare two implicit conversion sequences according to the rules set out in
6212 [over.ics.rank]. Return values:
6214 1: ics1 is better than ics2
6215 -1: ics2 is better than ics1
6216 0: ics1 and ics2 are indistinguishable */
6219 compare_ics (conversion *ics1, conversion *ics2)
6225 tree deref_from_type1 = NULL_TREE;
6226 tree deref_from_type2 = NULL_TREE;
6227 tree deref_to_type1 = NULL_TREE;
6228 tree deref_to_type2 = NULL_TREE;
6229 conversion_rank rank1, rank2;
6231 /* REF_BINDING is nonzero if the result of the conversion sequence
6232 is a reference type. In that case REF_CONV is the reference
6233 binding conversion. */
6234 conversion *ref_conv1;
6235 conversion *ref_conv2;
6237 /* Handle implicit object parameters. */
6238 maybe_handle_implicit_object (&ics1);
6239 maybe_handle_implicit_object (&ics2);
6241 /* Handle reference parameters. */
6242 ref_conv1 = maybe_handle_ref_bind (&ics1);
6243 ref_conv2 = maybe_handle_ref_bind (&ics2);
6247 When comparing the basic forms of implicit conversion sequences (as
6248 defined in _over.best.ics_)
6250 --a standard conversion sequence (_over.ics.scs_) is a better
6251 conversion sequence than a user-defined conversion sequence
6252 or an ellipsis conversion sequence, and
6254 --a user-defined conversion sequence (_over.ics.user_) is a
6255 better conversion sequence than an ellipsis conversion sequence
6256 (_over.ics.ellipsis_). */
6257 rank1 = CONVERSION_RANK (ics1);
6258 rank2 = CONVERSION_RANK (ics2);
6262 else if (rank1 < rank2)
6265 if (rank1 == cr_bad)
6267 /* XXX Isn't this an extension? */
6268 /* Both ICS are bad. We try to make a decision based on what
6269 would have happened if they'd been good. */
6270 if (ics1->user_conv_p > ics2->user_conv_p
6271 || ics1->rank > ics2->rank)
6273 else if (ics1->user_conv_p < ics2->user_conv_p
6274 || ics1->rank < ics2->rank)
6277 /* We couldn't make up our minds; try to figure it out below. */
6280 if (ics1->ellipsis_p)
6281 /* Both conversions are ellipsis conversions. */
6284 /* User-defined conversion sequence U1 is a better conversion sequence
6285 than another user-defined conversion sequence U2 if they contain the
6286 same user-defined conversion operator or constructor and if the sec-
6287 ond standard conversion sequence of U1 is better than the second
6288 standard conversion sequence of U2. */
6290 if (ics1->user_conv_p)
6295 for (t1 = ics1; t1->kind != ck_user && t1->kind != ck_list; t1 = t1->u.next)
6296 if (t1->kind == ck_ambig || t1->kind == ck_aggr)
6298 for (t2 = ics2; t2->kind != ck_user && t2->kind != ck_list; t2 = t2->u.next)
6299 if (t2->kind == ck_ambig || t2->kind == ck_aggr)
6302 /* Conversion to std::initializer_list is better than other
6303 user-defined conversions. */
6304 if (t1->kind == ck_list
6305 || t2->kind == ck_list)
6307 if (t2->kind != ck_list)
6309 else if (t1->kind != ck_list)
6315 if (t1->cand->fn != t2->cand->fn)
6318 /* We can just fall through here, after setting up
6319 FROM_TYPE1 and FROM_TYPE2. */
6320 from_type1 = t1->type;
6321 from_type2 = t2->type;
6328 /* We're dealing with two standard conversion sequences.
6332 Standard conversion sequence S1 is a better conversion
6333 sequence than standard conversion sequence S2 if
6335 --S1 is a proper subsequence of S2 (comparing the conversion
6336 sequences in the canonical form defined by _over.ics.scs_,
6337 excluding any Lvalue Transformation; the identity
6338 conversion sequence is considered to be a subsequence of
6339 any non-identity conversion sequence */
6342 while (t1->kind != ck_identity)
6344 from_type1 = t1->type;
6347 while (t2->kind != ck_identity)
6349 from_type2 = t2->type;
6352 /* One sequence can only be a subsequence of the other if they start with
6353 the same type. They can start with different types when comparing the
6354 second standard conversion sequence in two user-defined conversion
6356 if (same_type_p (from_type1, from_type2))
6358 if (is_subseq (ics1, ics2))
6360 if (is_subseq (ics2, ics1))
6368 --the rank of S1 is better than the rank of S2 (by the rules
6371 Standard conversion sequences are ordered by their ranks: an Exact
6372 Match is a better conversion than a Promotion, which is a better
6373 conversion than a Conversion.
6375 Two conversion sequences with the same rank are indistinguishable
6376 unless one of the following rules applies:
6378 --A conversion that is not a conversion of a pointer, or pointer
6379 to member, to bool is better than another conversion that is such
6382 The ICS_STD_RANK automatically handles the pointer-to-bool rule,
6383 so that we do not have to check it explicitly. */
6384 if (ics1->rank < ics2->rank)
6386 else if (ics2->rank < ics1->rank)
6389 to_type1 = ics1->type;
6390 to_type2 = ics2->type;
6392 /* A conversion from scalar arithmetic type to complex is worse than a
6393 conversion between scalar arithmetic types. */
6394 if (same_type_p (from_type1, from_type2)
6395 && ARITHMETIC_TYPE_P (from_type1)
6396 && ARITHMETIC_TYPE_P (to_type1)
6397 && ARITHMETIC_TYPE_P (to_type2)
6398 && ((TREE_CODE (to_type1) == COMPLEX_TYPE)
6399 != (TREE_CODE (to_type2) == COMPLEX_TYPE)))
6401 if (TREE_CODE (to_type1) == COMPLEX_TYPE)
6407 if (TYPE_PTR_P (from_type1)
6408 && TYPE_PTR_P (from_type2)
6409 && TYPE_PTR_P (to_type1)
6410 && TYPE_PTR_P (to_type2))
6412 deref_from_type1 = TREE_TYPE (from_type1);
6413 deref_from_type2 = TREE_TYPE (from_type2);
6414 deref_to_type1 = TREE_TYPE (to_type1);
6415 deref_to_type2 = TREE_TYPE (to_type2);
6417 /* The rules for pointers to members A::* are just like the rules
6418 for pointers A*, except opposite: if B is derived from A then
6419 A::* converts to B::*, not vice versa. For that reason, we
6420 switch the from_ and to_ variables here. */
6421 else if ((TYPE_PTRMEM_P (from_type1) && TYPE_PTRMEM_P (from_type2)
6422 && TYPE_PTRMEM_P (to_type1) && TYPE_PTRMEM_P (to_type2))
6423 || (TYPE_PTRMEMFUNC_P (from_type1)
6424 && TYPE_PTRMEMFUNC_P (from_type2)
6425 && TYPE_PTRMEMFUNC_P (to_type1)
6426 && TYPE_PTRMEMFUNC_P (to_type2)))
6428 deref_to_type1 = TYPE_PTRMEM_CLASS_TYPE (from_type1);
6429 deref_to_type2 = TYPE_PTRMEM_CLASS_TYPE (from_type2);
6430 deref_from_type1 = TYPE_PTRMEM_CLASS_TYPE (to_type1);
6431 deref_from_type2 = TYPE_PTRMEM_CLASS_TYPE (to_type2);
6434 if (deref_from_type1 != NULL_TREE
6435 && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_from_type1))
6436 && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_from_type2)))
6438 /* This was one of the pointer or pointer-like conversions.
6442 --If class B is derived directly or indirectly from class A,
6443 conversion of B* to A* is better than conversion of B* to
6444 void*, and conversion of A* to void* is better than
6445 conversion of B* to void*. */
6446 if (TREE_CODE (deref_to_type1) == VOID_TYPE
6447 && TREE_CODE (deref_to_type2) == VOID_TYPE)
6449 if (is_properly_derived_from (deref_from_type1,
6452 else if (is_properly_derived_from (deref_from_type2,
6456 else if (TREE_CODE (deref_to_type1) == VOID_TYPE
6457 || TREE_CODE (deref_to_type2) == VOID_TYPE)
6459 if (same_type_p (deref_from_type1, deref_from_type2))
6461 if (TREE_CODE (deref_to_type2) == VOID_TYPE)
6463 if (is_properly_derived_from (deref_from_type1,
6467 /* We know that DEREF_TO_TYPE1 is `void' here. */
6468 else if (is_properly_derived_from (deref_from_type1,
6473 else if (RECORD_OR_UNION_CODE_P (TREE_CODE (deref_to_type1))
6474 && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_to_type2)))
6478 --If class B is derived directly or indirectly from class A
6479 and class C is derived directly or indirectly from B,
6481 --conversion of C* to B* is better than conversion of C* to
6484 --conversion of B* to A* is better than conversion of C* to
6486 if (same_type_p (deref_from_type1, deref_from_type2))
6488 if (is_properly_derived_from (deref_to_type1,
6491 else if (is_properly_derived_from (deref_to_type2,
6495 else if (same_type_p (deref_to_type1, deref_to_type2))
6497 if (is_properly_derived_from (deref_from_type2,
6500 else if (is_properly_derived_from (deref_from_type1,
6506 else if (CLASS_TYPE_P (non_reference (from_type1))
6507 && same_type_p (from_type1, from_type2))
6509 tree from = non_reference (from_type1);
6513 --binding of an expression of type C to a reference of type
6514 B& is better than binding an expression of type C to a
6515 reference of type A&
6517 --conversion of C to B is better than conversion of C to A, */
6518 if (is_properly_derived_from (from, to_type1)
6519 && is_properly_derived_from (from, to_type2))
6521 if (is_properly_derived_from (to_type1, to_type2))
6523 else if (is_properly_derived_from (to_type2, to_type1))
6527 else if (CLASS_TYPE_P (non_reference (to_type1))
6528 && same_type_p (to_type1, to_type2))
6530 tree to = non_reference (to_type1);
6534 --binding of an expression of type B to a reference of type
6535 A& is better than binding an expression of type C to a
6536 reference of type A&,
6538 --conversion of B to A is better than conversion of C to A */
6539 if (is_properly_derived_from (from_type1, to)
6540 && is_properly_derived_from (from_type2, to))
6542 if (is_properly_derived_from (from_type2, from_type1))
6544 else if (is_properly_derived_from (from_type1, from_type2))
6551 --S1 and S2 differ only in their qualification conversion and yield
6552 similar types T1 and T2 (_conv.qual_), respectively, and the cv-
6553 qualification signature of type T1 is a proper subset of the cv-
6554 qualification signature of type T2 */
6555 if (ics1->kind == ck_qual
6556 && ics2->kind == ck_qual
6557 && same_type_p (from_type1, from_type2))
6559 int result = comp_cv_qual_signature (to_type1, to_type2);
6566 --S1 and S2 are reference bindings (_dcl.init.ref_) and neither refers
6567 to an implicit object parameter, and either S1 binds an lvalue reference
6568 to an lvalue and S2 binds an rvalue reference or S1 binds an rvalue
6569 reference to an rvalue and S2 binds an lvalue reference
6570 (C++0x draft standard, 13.3.3.2)
6572 --S1 and S2 are reference bindings (_dcl.init.ref_), and the
6573 types to which the references refer are the same type except for
6574 top-level cv-qualifiers, and the type to which the reference
6575 initialized by S2 refers is more cv-qualified than the type to
6576 which the reference initialized by S1 refers */
6578 if (ref_conv1 && ref_conv2)
6580 if (!ref_conv1->this_p && !ref_conv2->this_p
6581 && (TYPE_REF_IS_RVALUE (ref_conv1->type)
6582 != TYPE_REF_IS_RVALUE (ref_conv2->type)))
6584 if (ref_conv1->rvaluedness_matches_p)
6586 if (ref_conv2->rvaluedness_matches_p)
6590 if (same_type_ignoring_top_level_qualifiers_p (to_type1, to_type2))
6591 return comp_cv_qualification (TREE_TYPE (ref_conv2->type),
6592 TREE_TYPE (ref_conv1->type));
6595 /* Neither conversion sequence is better than the other. */
6599 /* The source type for this standard conversion sequence. */
6602 source_type (conversion *t)
6604 for (;; t = t->u.next)
6606 if (t->kind == ck_user
6607 || t->kind == ck_ambig
6608 || t->kind == ck_identity)
6614 /* Note a warning about preferring WINNER to LOSER. We do this by storing
6615 a pointer to LOSER and re-running joust to produce the warning if WINNER
6616 is actually used. */
6619 add_warning (struct z_candidate *winner, struct z_candidate *loser)
6621 candidate_warning *cw = (candidate_warning *)
6622 conversion_obstack_alloc (sizeof (candidate_warning));
6624 cw->next = winner->warnings;
6625 winner->warnings = cw;
6628 /* Compare two candidates for overloading as described in
6629 [over.match.best]. Return values:
6631 1: cand1 is better than cand2
6632 -1: cand2 is better than cand1
6633 0: cand1 and cand2 are indistinguishable */
6636 joust (struct z_candidate *cand1, struct z_candidate *cand2, bool warn)
6639 int off1 = 0, off2 = 0;
6643 /* Candidates that involve bad conversions are always worse than those
6645 if (cand1->viable > cand2->viable)
6647 if (cand1->viable < cand2->viable)
6650 /* If we have two pseudo-candidates for conversions to the same type,
6651 or two candidates for the same function, arbitrarily pick one. */
6652 if (cand1->fn == cand2->fn
6653 && (IS_TYPE_OR_DECL_P (cand1->fn)))
6656 /* a viable function F1
6657 is defined to be a better function than another viable function F2 if
6658 for all arguments i, ICSi(F1) is not a worse conversion sequence than
6659 ICSi(F2), and then */
6661 /* for some argument j, ICSj(F1) is a better conversion sequence than
6664 /* For comparing static and non-static member functions, we ignore
6665 the implicit object parameter of the non-static function. The
6666 standard says to pretend that the static function has an object
6667 parm, but that won't work with operator overloading. */
6668 len = cand1->num_convs;
6669 if (len != cand2->num_convs)
6671 int static_1 = DECL_STATIC_FUNCTION_P (cand1->fn);
6672 int static_2 = DECL_STATIC_FUNCTION_P (cand2->fn);
6674 gcc_assert (static_1 != static_2);
6685 for (i = 0; i < len; ++i)
6687 conversion *t1 = cand1->convs[i + off1];
6688 conversion *t2 = cand2->convs[i + off2];
6689 int comp = compare_ics (t1, t2);
6694 && (CONVERSION_RANK (t1) + CONVERSION_RANK (t2)
6695 == cr_std + cr_promotion)
6696 && t1->kind == ck_std
6697 && t2->kind == ck_std
6698 && TREE_CODE (t1->type) == INTEGER_TYPE
6699 && TREE_CODE (t2->type) == INTEGER_TYPE
6700 && (TYPE_PRECISION (t1->type)
6701 == TYPE_PRECISION (t2->type))
6702 && (TYPE_UNSIGNED (t1->u.next->type)
6703 || (TREE_CODE (t1->u.next->type)
6706 tree type = t1->u.next->type;
6708 struct z_candidate *w, *l;
6710 type1 = t1->type, type2 = t2->type,
6711 w = cand1, l = cand2;
6713 type1 = t2->type, type2 = t1->type,
6714 w = cand2, l = cand1;
6718 warning (OPT_Wsign_promo, "passing %qT chooses %qT over %qT",
6719 type, type1, type2);
6720 warning (OPT_Wsign_promo, " in call to %qD", w->fn);
6726 if (winner && comp != winner)
6735 /* warn about confusing overload resolution for user-defined conversions,
6736 either between a constructor and a conversion op, or between two
6738 if (winner && warn_conversion && cand1->second_conv
6739 && (!DECL_CONSTRUCTOR_P (cand1->fn) || !DECL_CONSTRUCTOR_P (cand2->fn))
6740 && winner != compare_ics (cand1->second_conv, cand2->second_conv))
6742 struct z_candidate *w, *l;
6743 bool give_warning = false;
6746 w = cand1, l = cand2;
6748 w = cand2, l = cand1;
6750 /* We don't want to complain about `X::operator T1 ()'
6751 beating `X::operator T2 () const', when T2 is a no less
6752 cv-qualified version of T1. */
6753 if (DECL_CONTEXT (w->fn) == DECL_CONTEXT (l->fn)
6754 && !DECL_CONSTRUCTOR_P (w->fn) && !DECL_CONSTRUCTOR_P (l->fn))
6756 tree t = TREE_TYPE (TREE_TYPE (l->fn));
6757 tree f = TREE_TYPE (TREE_TYPE (w->fn));
6759 if (TREE_CODE (t) == TREE_CODE (f) && POINTER_TYPE_P (t))
6764 if (!comp_ptr_ttypes (t, f))
6765 give_warning = true;
6768 give_warning = true;
6774 tree source = source_type (w->convs[0]);
6775 if (! DECL_CONSTRUCTOR_P (w->fn))
6776 source = TREE_TYPE (source);
6777 if (warning (OPT_Wconversion, "choosing %qD over %qD", w->fn, l->fn)
6778 && warning (OPT_Wconversion, " for conversion from %qT to %qT",
6779 source, w->second_conv->type))
6781 inform (input_location, " because conversion sequence for the argument is better");
6792 F1 is a non-template function and F2 is a template function
6795 if (!cand1->template_decl && cand2->template_decl)
6797 else if (cand1->template_decl && !cand2->template_decl)
6801 F1 and F2 are template functions and the function template for F1 is
6802 more specialized than the template for F2 according to the partial
6805 if (cand1->template_decl && cand2->template_decl)
6807 winner = more_specialized_fn
6808 (TI_TEMPLATE (cand1->template_decl),
6809 TI_TEMPLATE (cand2->template_decl),
6810 /* [temp.func.order]: The presence of unused ellipsis and default
6811 arguments has no effect on the partial ordering of function
6812 templates. add_function_candidate() will not have
6813 counted the "this" argument for constructors. */
6814 cand1->num_convs + DECL_CONSTRUCTOR_P (cand1->fn));
6820 the context is an initialization by user-defined conversion (see
6821 _dcl.init_ and _over.match.user_) and the standard conversion
6822 sequence from the return type of F1 to the destination type (i.e.,
6823 the type of the entity being initialized) is a better conversion
6824 sequence than the standard conversion sequence from the return type
6825 of F2 to the destination type. */
6827 if (cand1->second_conv)
6829 winner = compare_ics (cand1->second_conv, cand2->second_conv);
6834 /* Check whether we can discard a builtin candidate, either because we
6835 have two identical ones or matching builtin and non-builtin candidates.
6837 (Pedantically in the latter case the builtin which matched the user
6838 function should not be added to the overload set, but we spot it here.
6841 ... the builtin candidates include ...
6842 - do not have the same parameter type list as any non-template
6843 non-member candidate. */
6845 if (TREE_CODE (cand1->fn) == IDENTIFIER_NODE
6846 || TREE_CODE (cand2->fn) == IDENTIFIER_NODE)
6848 for (i = 0; i < len; ++i)
6849 if (!same_type_p (cand1->convs[i]->type,
6850 cand2->convs[i]->type))
6852 if (i == cand1->num_convs)
6854 if (cand1->fn == cand2->fn)
6855 /* Two built-in candidates; arbitrarily pick one. */
6857 else if (TREE_CODE (cand1->fn) == IDENTIFIER_NODE)
6858 /* cand1 is built-in; prefer cand2. */
6861 /* cand2 is built-in; prefer cand1. */
6866 /* If the two function declarations represent the same function (this can
6867 happen with declarations in multiple scopes and arg-dependent lookup),
6868 arbitrarily choose one. But first make sure the default args we're
6870 if (DECL_P (cand1->fn) && DECL_P (cand2->fn)
6871 && equal_functions (cand1->fn, cand2->fn))
6873 tree parms1 = TYPE_ARG_TYPES (TREE_TYPE (cand1->fn));
6874 tree parms2 = TYPE_ARG_TYPES (TREE_TYPE (cand2->fn));
6876 gcc_assert (!DECL_CONSTRUCTOR_P (cand1->fn));
6878 for (i = 0; i < len; ++i)
6880 /* Don't crash if the fn is variadic. */
6883 parms1 = TREE_CHAIN (parms1);
6884 parms2 = TREE_CHAIN (parms2);
6888 parms1 = TREE_CHAIN (parms1);
6890 parms2 = TREE_CHAIN (parms2);
6894 if (!cp_tree_equal (TREE_PURPOSE (parms1),
6895 TREE_PURPOSE (parms2)))
6899 permerror (input_location, "default argument mismatch in "
6900 "overload resolution");
6901 inform (input_location,
6902 " candidate 1: %q+#F", cand1->fn);
6903 inform (input_location,
6904 " candidate 2: %q+#F", cand2->fn);
6907 add_warning (cand1, cand2);
6910 parms1 = TREE_CHAIN (parms1);
6911 parms2 = TREE_CHAIN (parms2);
6919 /* Extension: If the worst conversion for one candidate is worse than the
6920 worst conversion for the other, take the first. */
6923 conversion_rank rank1 = cr_identity, rank2 = cr_identity;
6924 struct z_candidate *w = 0, *l = 0;
6926 for (i = 0; i < len; ++i)
6928 if (CONVERSION_RANK (cand1->convs[i+off1]) > rank1)
6929 rank1 = CONVERSION_RANK (cand1->convs[i+off1]);
6930 if (CONVERSION_RANK (cand2->convs[i + off2]) > rank2)
6931 rank2 = CONVERSION_RANK (cand2->convs[i + off2]);
6934 winner = 1, w = cand1, l = cand2;
6936 winner = -1, w = cand2, l = cand1;
6941 pedwarn (input_location, 0,
6942 "ISO C++ says that these are ambiguous, even "
6943 "though the worst conversion for the first is better than "
6944 "the worst conversion for the second:");
6945 print_z_candidate (_("candidate 1:"), w);
6946 print_z_candidate (_("candidate 2:"), l);
6954 gcc_assert (!winner);
6958 /* Given a list of candidates for overloading, find the best one, if any.
6959 This algorithm has a worst case of O(2n) (winner is last), and a best
6960 case of O(n/2) (totally ambiguous); much better than a sorting
6963 static struct z_candidate *
6964 tourney (struct z_candidate *candidates)
6966 struct z_candidate *champ = candidates, *challenger;
6968 int champ_compared_to_predecessor = 0;
6970 /* Walk through the list once, comparing each current champ to the next
6971 candidate, knocking out a candidate or two with each comparison. */
6973 for (challenger = champ->next; challenger; )
6975 fate = joust (champ, challenger, 0);
6977 challenger = challenger->next;
6982 champ = challenger->next;
6985 champ_compared_to_predecessor = 0;
6990 champ_compared_to_predecessor = 1;
6993 challenger = champ->next;
6997 /* Make sure the champ is better than all the candidates it hasn't yet
6998 been compared to. */
7000 for (challenger = candidates;
7002 && !(champ_compared_to_predecessor && challenger->next == champ);
7003 challenger = challenger->next)
7005 fate = joust (champ, challenger, 0);
7013 /* Returns nonzero if things of type FROM can be converted to TO. */
7016 can_convert (tree to, tree from)
7018 return can_convert_arg (to, from, NULL_TREE, LOOKUP_NORMAL);
7021 /* Returns nonzero if ARG (of type FROM) can be converted to TO. */
7024 can_convert_arg (tree to, tree from, tree arg, int flags)
7030 /* Get the high-water mark for the CONVERSION_OBSTACK. */
7031 p = conversion_obstack_alloc (0);
7033 t = implicit_conversion (to, from, arg, /*c_cast_p=*/false,
7035 ok_p = (t && !t->bad_p);
7037 /* Free all the conversions we allocated. */
7038 obstack_free (&conversion_obstack, p);
7043 /* Like can_convert_arg, but allows dubious conversions as well. */
7046 can_convert_arg_bad (tree to, tree from, tree arg)
7051 /* Get the high-water mark for the CONVERSION_OBSTACK. */
7052 p = conversion_obstack_alloc (0);
7053 /* Try to perform the conversion. */
7054 t = implicit_conversion (to, from, arg, /*c_cast_p=*/false,
7056 /* Free all the conversions we allocated. */
7057 obstack_free (&conversion_obstack, p);
7062 /* Convert EXPR to TYPE. Return the converted expression.
7064 Note that we allow bad conversions here because by the time we get to
7065 this point we are committed to doing the conversion. If we end up
7066 doing a bad conversion, convert_like will complain. */
7069 perform_implicit_conversion (tree type, tree expr, tsubst_flags_t complain)
7074 if (error_operand_p (expr))
7075 return error_mark_node;
7077 /* Get the high-water mark for the CONVERSION_OBSTACK. */
7078 p = conversion_obstack_alloc (0);
7080 conv = implicit_conversion (type, TREE_TYPE (expr), expr,
7085 if (complain & tf_error)
7086 error ("could not convert %qE to %qT", expr, type);
7087 expr = error_mark_node;
7089 else if (processing_template_decl)
7091 /* In a template, we are only concerned about determining the
7092 type of non-dependent expressions, so we do not have to
7093 perform the actual conversion. */
7094 if (TREE_TYPE (expr) != type)
7095 expr = build_nop (type, expr);
7098 expr = convert_like (conv, expr, complain);
7100 /* Free all the conversions we allocated. */
7101 obstack_free (&conversion_obstack, p);
7106 /* Convert EXPR to TYPE (as a direct-initialization) if that is
7107 permitted. If the conversion is valid, the converted expression is
7108 returned. Otherwise, NULL_TREE is returned, except in the case
7109 that TYPE is a class type; in that case, an error is issued. If
7110 C_CAST_P is true, then this direction initialization is taking
7111 place as part of a static_cast being attempted as part of a C-style
7115 perform_direct_initialization_if_possible (tree type,
7118 tsubst_flags_t complain)
7123 if (type == error_mark_node || error_operand_p (expr))
7124 return error_mark_node;
7127 If the destination type is a (possibly cv-qualified) class type:
7129 -- If the initialization is direct-initialization ...,
7130 constructors are considered. ... If no constructor applies, or
7131 the overload resolution is ambiguous, the initialization is
7133 if (CLASS_TYPE_P (type))
7135 expr = build_special_member_call (NULL_TREE, complete_ctor_identifier,
7136 build_tree_list (NULL_TREE, expr),
7137 type, LOOKUP_NORMAL, complain);
7138 return build_cplus_new (type, expr);
7141 /* Get the high-water mark for the CONVERSION_OBSTACK. */
7142 p = conversion_obstack_alloc (0);
7144 conv = implicit_conversion (type, TREE_TYPE (expr), expr,
7147 if (!conv || conv->bad_p)
7150 expr = convert_like_real (conv, expr, NULL_TREE, 0, 0,
7151 /*issue_conversion_warnings=*/false,
7153 tf_warning_or_error);
7155 /* Free all the conversions we allocated. */
7156 obstack_free (&conversion_obstack, p);
7161 /* DECL is a VAR_DECL whose type is a REFERENCE_TYPE. The reference
7162 is being bound to a temporary. Create and return a new VAR_DECL
7163 with the indicated TYPE; this variable will store the value to
7164 which the reference is bound. */
7167 make_temporary_var_for_ref_to_temp (tree decl, tree type)
7171 /* Create the variable. */
7172 var = create_temporary_var (type);
7174 /* Register the variable. */
7175 if (TREE_STATIC (decl))
7177 /* Namespace-scope or local static; give it a mangled name. */
7180 TREE_STATIC (var) = 1;
7181 name = mangle_ref_init_variable (decl);
7182 DECL_NAME (var) = name;
7183 SET_DECL_ASSEMBLER_NAME (var, name);
7184 var = pushdecl_top_level (var);
7187 /* Create a new cleanup level if necessary. */
7188 maybe_push_cleanup_level (type);
7193 /* EXPR is the initializer for a variable DECL of reference or
7194 std::initializer_list type. Create, push and return a new VAR_DECL
7195 for the initializer so that it will live as long as DECL. Any
7196 cleanup for the new variable is returned through CLEANUP, and the
7197 code to initialize the new variable is returned through INITP. */
7200 set_up_extended_ref_temp (tree decl, tree expr, tree *cleanup, tree *initp)
7206 /* Create the temporary variable. */
7207 type = TREE_TYPE (expr);
7208 var = make_temporary_var_for_ref_to_temp (decl, type);
7209 layout_decl (var, 0);
7210 /* If the rvalue is the result of a function call it will be
7211 a TARGET_EXPR. If it is some other construct (such as a
7212 member access expression where the underlying object is
7213 itself the result of a function call), turn it into a
7214 TARGET_EXPR here. It is important that EXPR be a
7215 TARGET_EXPR below since otherwise the INIT_EXPR will
7216 attempt to make a bitwise copy of EXPR to initialize
7218 if (TREE_CODE (expr) != TARGET_EXPR)
7219 expr = get_target_expr (expr);
7220 /* Create the INIT_EXPR that will initialize the temporary
7222 init = build2 (INIT_EXPR, type, var, expr);
7223 if (at_function_scope_p ())
7225 add_decl_expr (var);
7227 if (TREE_STATIC (var))
7228 init = add_stmt_to_compound (init, register_dtor_fn (var));
7230 *cleanup = cxx_maybe_build_cleanup (var);
7232 /* We must be careful to destroy the temporary only
7233 after its initialization has taken place. If the
7234 initialization throws an exception, then the
7235 destructor should not be run. We cannot simply
7236 transform INIT into something like:
7238 (INIT, ({ CLEANUP_STMT; }))
7240 because emit_local_var always treats the
7241 initializer as a full-expression. Thus, the
7242 destructor would run too early; it would run at the
7243 end of initializing the reference variable, rather
7244 than at the end of the block enclosing the
7247 The solution is to pass back a cleanup expression
7248 which the caller is responsible for attaching to
7249 the statement tree. */
7253 rest_of_decl_compilation (var, /*toplev=*/1, at_eof);
7254 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
7255 static_aggregates = tree_cons (NULL_TREE, var,
7263 /* Convert EXPR to the indicated reference TYPE, in a way suitable for
7264 initializing a variable of that TYPE. If DECL is non-NULL, it is
7265 the VAR_DECL being initialized with the EXPR. (In that case, the
7266 type of DECL will be TYPE.) If DECL is non-NULL, then CLEANUP must
7267 also be non-NULL, and with *CLEANUP initialized to NULL. Upon
7268 return, if *CLEANUP is no longer NULL, it will be an expression
7269 that should be pushed as a cleanup after the returned expression
7270 is used to initialize DECL.
7272 Return the converted expression. */
7275 initialize_reference (tree type, tree expr, tree decl, tree *cleanup)
7280 if (type == error_mark_node || error_operand_p (expr))
7281 return error_mark_node;
7283 /* Get the high-water mark for the CONVERSION_OBSTACK. */
7284 p = conversion_obstack_alloc (0);
7286 conv = reference_binding (type, TREE_TYPE (expr), expr, /*c_cast_p=*/false,
7288 if (!conv || conv->bad_p)
7290 if (!(TYPE_QUALS (TREE_TYPE (type)) & TYPE_QUAL_CONST)
7291 && !real_lvalue_p (expr))
7292 error ("invalid initialization of non-const reference of "
7293 "type %qT from a temporary of type %qT",
7294 type, TREE_TYPE (expr));
7296 error ("invalid initialization of reference of type "
7297 "%qT from expression of type %qT", type,
7299 return error_mark_node;
7302 /* If DECL is non-NULL, then this special rule applies:
7306 The temporary to which the reference is bound or the temporary
7307 that is the complete object to which the reference is bound
7308 persists for the lifetime of the reference.
7310 The temporaries created during the evaluation of the expression
7311 initializing the reference, except the temporary to which the
7312 reference is bound, are destroyed at the end of the
7313 full-expression in which they are created.
7315 In that case, we store the converted expression into a new
7316 VAR_DECL in a new scope.
7318 However, we want to be careful not to create temporaries when
7319 they are not required. For example, given:
7322 struct D : public B {};
7326 there is no need to copy the return value from "f"; we can just
7327 extend its lifetime. Similarly, given:
7330 struct T { operator S(); };
7334 we can extend the lifetime of the return value of the conversion
7336 gcc_assert (conv->kind == ck_ref_bind);
7340 tree base_conv_type;
7342 /* Skip over the REF_BIND. */
7343 conv = conv->u.next;
7344 /* If the next conversion is a BASE_CONV, skip that too -- but
7345 remember that the conversion was required. */
7346 if (conv->kind == ck_base)
7348 base_conv_type = conv->type;
7349 conv = conv->u.next;
7352 base_conv_type = NULL_TREE;
7353 /* Perform the remainder of the conversion. */
7354 expr = convert_like_real (conv, expr,
7355 /*fn=*/NULL_TREE, /*argnum=*/0,
7357 /*issue_conversion_warnings=*/true,
7359 tf_warning_or_error);
7360 if (error_operand_p (expr))
7361 expr = error_mark_node;
7364 if (!lvalue_or_rvalue_with_address_p (expr))
7367 var = set_up_extended_ref_temp (decl, expr, cleanup, &init);
7368 /* Use its address to initialize the reference variable. */
7369 expr = build_address (var);
7371 expr = convert_to_base (expr,
7372 build_pointer_type (base_conv_type),
7373 /*check_access=*/true,
7375 expr = build2 (COMPOUND_EXPR, TREE_TYPE (expr), init, expr);
7378 /* Take the address of EXPR. */
7379 expr = cp_build_unary_op (ADDR_EXPR, expr, 0, tf_warning_or_error);
7380 /* If a BASE_CONV was required, perform it now. */
7382 expr = (perform_implicit_conversion
7383 (build_pointer_type (base_conv_type), expr,
7384 tf_warning_or_error));
7385 expr = build_nop (type, expr);
7389 /* Perform the conversion. */
7390 expr = convert_like (conv, expr, tf_warning_or_error);
7392 /* Free all the conversions we allocated. */
7393 obstack_free (&conversion_obstack, p);
7398 /* Returns true iff TYPE is some variant of std::initializer_list. */
7401 is_std_init_list (tree type)
7403 return (CLASS_TYPE_P (type)
7404 && CP_TYPE_CONTEXT (type) == std_node
7405 && strcmp (TYPE_NAME_STRING (type), "initializer_list") == 0);
7408 /* Returns true iff DECL is a list constructor: i.e. a constructor which
7409 will accept an argument list of a single std::initializer_list<T>. */
7412 is_list_ctor (tree decl)
7414 tree args = FUNCTION_FIRST_USER_PARMTYPE (decl);
7417 if (!args || args == void_list_node)
7420 arg = non_reference (TREE_VALUE (args));
7421 if (!is_std_init_list (arg))
7424 args = TREE_CHAIN (args);
7426 if (args && args != void_list_node && !TREE_PURPOSE (args))
7427 /* There are more non-defaulted parms. */
7433 #include "gt-cp-call.h"