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, 2010
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"
36 #include "diagnostic-core.h"
40 #include "langhooks.h"
42 /* The various kinds of conversion. */
44 typedef enum conversion_kind
{
60 /* The rank of the conversion. Order of the enumerals matters; better
61 conversions should come earlier in the list. */
63 typedef enum conversion_rank
{
74 /* An implicit conversion sequence, in the sense of [over.best.ics].
75 The first conversion to be performed is at the end of the chain.
76 That conversion is always a cr_identity conversion. */
78 typedef struct conversion conversion
;
80 /* The kind of conversion represented by this step. */
82 /* The rank of this conversion. */
84 BOOL_BITFIELD user_conv_p
: 1;
85 BOOL_BITFIELD ellipsis_p
: 1;
86 BOOL_BITFIELD this_p
: 1;
87 BOOL_BITFIELD bad_p
: 1;
88 /* If KIND is ck_ref_bind ck_base_conv, true to indicate that a
89 temporary should be created to hold the result of the
91 BOOL_BITFIELD need_temporary_p
: 1;
92 /* If KIND is ck_ptr or ck_pmem, true to indicate that a conversion
93 from a pointer-to-derived to pointer-to-base is being performed. */
94 BOOL_BITFIELD base_p
: 1;
95 /* If KIND is ck_ref_bind, true when either an lvalue reference is
96 being bound to an lvalue expression or an rvalue reference is
97 being bound to an rvalue expression. */
98 BOOL_BITFIELD rvaluedness_matches_p
: 1;
99 BOOL_BITFIELD check_narrowing
: 1;
100 /* The type of the expression resulting from the conversion. */
103 /* The next conversion in the chain. Since the conversions are
104 arranged from outermost to innermost, the NEXT conversion will
105 actually be performed before this conversion. This variant is
106 used only when KIND is neither ck_identity nor ck_ambig. */
108 /* The expression at the beginning of the conversion chain. This
109 variant is used only if KIND is ck_identity or ck_ambig. */
111 /* The array of conversions for an initializer_list. */
114 /* The function candidate corresponding to this conversion
115 sequence. This field is only used if KIND is ck_user. */
116 struct z_candidate
*cand
;
119 #define CONVERSION_RANK(NODE) \
120 ((NODE)->bad_p ? cr_bad \
121 : (NODE)->ellipsis_p ? cr_ellipsis \
122 : (NODE)->user_conv_p ? cr_user \
125 #define BAD_CONVERSION_RANK(NODE) \
126 ((NODE)->ellipsis_p ? cr_ellipsis \
127 : (NODE)->user_conv_p ? cr_user \
130 static struct obstack conversion_obstack
;
131 static bool conversion_obstack_initialized
;
133 static struct z_candidate
* tourney (struct z_candidate
*);
134 static int equal_functions (tree
, tree
);
135 static int joust (struct z_candidate
*, struct z_candidate
*, bool);
136 static int compare_ics (conversion
*, conversion
*);
137 static tree
build_over_call (struct z_candidate
*, int, tsubst_flags_t
);
138 static tree
build_java_interface_fn_ref (tree
, tree
);
139 #define convert_like(CONV, EXPR, COMPLAIN) \
140 convert_like_real ((CONV), (EXPR), NULL_TREE, 0, 0, \
141 /*issue_conversion_warnings=*/true, \
142 /*c_cast_p=*/false, (COMPLAIN))
143 #define convert_like_with_context(CONV, EXPR, FN, ARGNO, COMPLAIN ) \
144 convert_like_real ((CONV), (EXPR), (FN), (ARGNO), 0, \
145 /*issue_conversion_warnings=*/true, \
146 /*c_cast_p=*/false, (COMPLAIN))
147 static tree
convert_like_real (conversion
*, tree
, tree
, int, int, bool,
148 bool, tsubst_flags_t
);
149 static void op_error (enum tree_code
, enum tree_code
, tree
, tree
,
151 static VEC(tree
,gc
) *resolve_args (VEC(tree
,gc
) *);
152 static struct z_candidate
*build_user_type_conversion_1 (tree
, tree
, int);
153 static void print_z_candidate (const char *, struct z_candidate
*);
154 static void print_z_candidates (struct z_candidate
*);
155 static tree
build_this (tree
);
156 static struct z_candidate
*splice_viable (struct z_candidate
*, bool, bool *);
157 static bool any_strictly_viable (struct z_candidate
*);
158 static struct z_candidate
*add_template_candidate
159 (struct z_candidate
**, tree
, tree
, tree
, tree
, const VEC(tree
,gc
) *,
160 tree
, tree
, tree
, int, unification_kind_t
);
161 static struct z_candidate
*add_template_candidate_real
162 (struct z_candidate
**, tree
, tree
, tree
, tree
, const VEC(tree
,gc
) *,
163 tree
, tree
, tree
, int, tree
, unification_kind_t
);
164 static struct z_candidate
*add_template_conv_candidate
165 (struct z_candidate
**, tree
, tree
, tree
, const VEC(tree
,gc
) *, tree
,
167 static void add_builtin_candidates
168 (struct z_candidate
**, enum tree_code
, enum tree_code
,
170 static void add_builtin_candidate
171 (struct z_candidate
**, enum tree_code
, enum tree_code
,
172 tree
, tree
, tree
, tree
*, tree
*, int);
173 static bool is_complete (tree
);
174 static void build_builtin_candidate
175 (struct z_candidate
**, tree
, tree
, tree
, tree
*, tree
*,
177 static struct z_candidate
*add_conv_candidate
178 (struct z_candidate
**, tree
, tree
, tree
, const VEC(tree
,gc
) *, tree
,
180 static struct z_candidate
*add_function_candidate
181 (struct z_candidate
**, tree
, tree
, tree
, const VEC(tree
,gc
) *, tree
,
183 static conversion
*implicit_conversion (tree
, tree
, tree
, bool, int);
184 static conversion
*standard_conversion (tree
, tree
, tree
, bool, int);
185 static conversion
*reference_binding (tree
, tree
, tree
, bool, int);
186 static conversion
*build_conv (conversion_kind
, tree
, conversion
*);
187 static conversion
*build_list_conv (tree
, tree
, int);
188 static bool is_subseq (conversion
*, conversion
*);
189 static conversion
*maybe_handle_ref_bind (conversion
**);
190 static void maybe_handle_implicit_object (conversion
**);
191 static struct z_candidate
*add_candidate
192 (struct z_candidate
**, tree
, tree
, const VEC(tree
,gc
) *, size_t,
193 conversion
**, tree
, tree
, int);
194 static tree
source_type (conversion
*);
195 static void add_warning (struct z_candidate
*, struct z_candidate
*);
196 static bool reference_compatible_p (tree
, tree
);
197 static conversion
*convert_class_to_reference (tree
, tree
, tree
, int);
198 static conversion
*direct_reference_binding (tree
, conversion
*);
199 static bool promoted_arithmetic_type_p (tree
);
200 static conversion
*conditional_conversion (tree
, tree
);
201 static char *name_as_c_string (tree
, tree
, bool *);
202 static tree
prep_operand (tree
);
203 static void add_candidates (tree
, tree
, const VEC(tree
,gc
) *, tree
, tree
, bool,
204 tree
, tree
, int, struct z_candidate
**);
205 static conversion
*merge_conversion_sequences (conversion
*, conversion
*);
206 static bool magic_varargs_p (tree
);
207 static tree
build_temp (tree
, tree
, int, diagnostic_t
*);
209 /* Returns nonzero iff the destructor name specified in NAME matches BASETYPE.
210 NAME can take many forms... */
213 check_dtor_name (tree basetype
, tree name
)
215 /* Just accept something we've already complained about. */
216 if (name
== error_mark_node
)
219 if (TREE_CODE (name
) == TYPE_DECL
)
220 name
= TREE_TYPE (name
);
221 else if (TYPE_P (name
))
223 else if (TREE_CODE (name
) == IDENTIFIER_NODE
)
225 if ((MAYBE_CLASS_TYPE_P (basetype
)
226 && name
== constructor_name (basetype
))
227 || (TREE_CODE (basetype
) == ENUMERAL_TYPE
228 && name
== TYPE_IDENTIFIER (basetype
)))
231 name
= get_type_value (name
);
237 template <class T> struct S { ~S(); };
241 NAME will be a class template. */
242 gcc_assert (DECL_CLASS_TEMPLATE_P (name
));
246 if (!name
|| name
== error_mark_node
)
248 return same_type_p (TYPE_MAIN_VARIANT (basetype
), TYPE_MAIN_VARIANT (name
));
251 /* We want the address of a function or method. We avoid creating a
252 pointer-to-member function. */
255 build_addr_func (tree function
)
257 tree type
= TREE_TYPE (function
);
259 /* We have to do these by hand to avoid real pointer to member
261 if (TREE_CODE (type
) == METHOD_TYPE
)
263 if (TREE_CODE (function
) == OFFSET_REF
)
265 tree object
= build_address (TREE_OPERAND (function
, 0));
266 return get_member_function_from_ptrfunc (&object
,
267 TREE_OPERAND (function
, 1));
269 function
= build_address (function
);
272 function
= decay_conversion (function
);
277 /* Build a CALL_EXPR, we can handle FUNCTION_TYPEs, METHOD_TYPEs, or
278 POINTER_TYPE to those. Note, pointer to member function types
279 (TYPE_PTRMEMFUNC_P) must be handled by our callers. There are
280 two variants. build_call_a is the primitive taking an array of
281 arguments, while build_call_n is a wrapper that handles varargs. */
284 build_call_n (tree function
, int n
, ...)
287 return build_call_a (function
, 0, NULL
);
290 tree
*argarray
= XALLOCAVEC (tree
, n
);
295 for (i
= 0; i
< n
; i
++)
296 argarray
[i
] = va_arg (ap
, tree
);
298 return build_call_a (function
, n
, argarray
);
303 build_call_a (tree function
, int n
, tree
*argarray
)
305 int is_constructor
= 0;
312 function
= build_addr_func (function
);
314 gcc_assert (TYPE_PTR_P (TREE_TYPE (function
)));
315 fntype
= TREE_TYPE (TREE_TYPE (function
));
316 gcc_assert (TREE_CODE (fntype
) == FUNCTION_TYPE
317 || TREE_CODE (fntype
) == METHOD_TYPE
);
318 result_type
= TREE_TYPE (fntype
);
319 /* An rvalue has no cv-qualifiers. */
320 if (SCALAR_TYPE_P (result_type
) || VOID_TYPE_P (result_type
))
321 result_type
= cv_unqualified (result_type
);
323 if (TREE_CODE (function
) == ADDR_EXPR
324 && TREE_CODE (TREE_OPERAND (function
, 0)) == FUNCTION_DECL
)
326 decl
= TREE_OPERAND (function
, 0);
327 if (!TREE_USED (decl
))
329 /* We invoke build_call directly for several library
330 functions. These may have been declared normally if
331 we're building libgcc, so we can't just check
333 gcc_assert (DECL_ARTIFICIAL (decl
)
334 || !strncmp (IDENTIFIER_POINTER (DECL_NAME (decl
)),
342 /* We check both the decl and the type; a function may be known not to
343 throw without being declared throw(). */
344 nothrow
= ((decl
&& TREE_NOTHROW (decl
))
345 || TYPE_NOTHROW_P (TREE_TYPE (TREE_TYPE (function
))));
347 if (decl
&& TREE_THIS_VOLATILE (decl
) && cfun
&& cp_function_chain
)
348 current_function_returns_abnormally
= 1;
350 if (decl
&& TREE_DEPRECATED (decl
))
351 warn_deprecated_use (decl
, NULL_TREE
);
352 require_complete_eh_spec_types (fntype
, decl
);
354 if (decl
&& DECL_CONSTRUCTOR_P (decl
))
357 /* Don't pass empty class objects by value. This is useful
358 for tags in STL, which are used to control overload resolution.
359 We don't need to handle other cases of copying empty classes. */
360 if (! decl
|| ! DECL_BUILT_IN (decl
))
361 for (i
= 0; i
< n
; i
++)
362 if (is_empty_class (TREE_TYPE (argarray
[i
]))
363 && ! TREE_ADDRESSABLE (TREE_TYPE (argarray
[i
])))
365 tree t
= build0 (EMPTY_CLASS_EXPR
, TREE_TYPE (argarray
[i
]));
366 argarray
[i
] = build2 (COMPOUND_EXPR
, TREE_TYPE (t
),
370 function
= build_call_array_loc (input_location
,
371 result_type
, function
, n
, argarray
);
372 TREE_HAS_CONSTRUCTOR (function
) = is_constructor
;
373 TREE_NOTHROW (function
) = nothrow
;
378 /* Build something of the form ptr->method (args)
379 or object.method (args). This can also build
380 calls to constructors, and find friends.
382 Member functions always take their class variable
385 INSTANCE is a class instance.
387 NAME is the name of the method desired, usually an IDENTIFIER_NODE.
389 PARMS help to figure out what that NAME really refers to.
391 BASETYPE_PATH, if non-NULL, contains a chain from the type of INSTANCE
392 down to the real instance type to use for access checking. We need this
393 information to get protected accesses correct.
395 FLAGS is the logical disjunction of zero or more LOOKUP_
396 flags. See cp-tree.h for more info.
398 If this is all OK, calls build_function_call with the resolved
401 This function must also handle being called to perform
402 initialization, promotion/coercion of arguments, and
403 instantiation of default parameters.
405 Note that NAME may refer to an instance variable name. If
406 `operator()()' is defined for the type of that field, then we return
409 /* New overloading code. */
411 typedef struct z_candidate z_candidate
;
413 typedef struct candidate_warning candidate_warning
;
414 struct candidate_warning
{
416 candidate_warning
*next
;
420 /* The FUNCTION_DECL that will be called if this candidate is
421 selected by overload resolution. */
423 /* If not NULL_TREE, the first argument to use when calling this
426 /* The rest of the arguments to use when calling this function. If
427 there are no further arguments this may be NULL or it may be an
429 const VEC(tree
,gc
) *args
;
430 /* The implicit conversion sequences for each of the arguments to
433 /* The number of implicit conversion sequences. */
435 /* If FN is a user-defined conversion, the standard conversion
436 sequence from the type returned by FN to the desired destination
438 conversion
*second_conv
;
440 /* If FN is a member function, the binfo indicating the path used to
441 qualify the name of FN at the call site. This path is used to
442 determine whether or not FN is accessible if it is selected by
443 overload resolution. The DECL_CONTEXT of FN will always be a
444 (possibly improper) base of this binfo. */
446 /* If FN is a non-static member function, the binfo indicating the
447 subobject to which the `this' pointer should be converted if FN
448 is selected by overload resolution. The type pointed to the by
449 the `this' pointer must correspond to the most derived class
450 indicated by the CONVERSION_PATH. */
451 tree conversion_path
;
454 candidate_warning
*warnings
;
458 /* Returns true iff T is a null pointer constant in the sense of
462 null_ptr_cst_p (tree t
)
466 A null pointer constant is an integral constant expression
467 (_expr.const_) rvalue of integer type that evaluates to zero or
468 an rvalue of type std::nullptr_t. */
469 t
= integral_constant_value (t
);
471 || NULLPTR_TYPE_P (TREE_TYPE (t
)))
473 if (CP_INTEGRAL_TYPE_P (TREE_TYPE (t
)) && integer_zerop (t
))
476 if (!TREE_OVERFLOW (t
))
482 /* Returns nonzero if PARMLIST consists of only default parms and/or
486 sufficient_parms_p (const_tree parmlist
)
488 for (; parmlist
&& parmlist
!= void_list_node
;
489 parmlist
= TREE_CHAIN (parmlist
))
490 if (!TREE_PURPOSE (parmlist
))
495 /* Allocate N bytes of memory from the conversion obstack. The memory
496 is zeroed before being returned. */
499 conversion_obstack_alloc (size_t n
)
502 if (!conversion_obstack_initialized
)
504 gcc_obstack_init (&conversion_obstack
);
505 conversion_obstack_initialized
= true;
507 p
= obstack_alloc (&conversion_obstack
, n
);
512 /* Dynamically allocate a conversion. */
515 alloc_conversion (conversion_kind kind
)
518 c
= (conversion
*) conversion_obstack_alloc (sizeof (conversion
));
523 #ifdef ENABLE_CHECKING
525 /* Make sure that all memory on the conversion obstack has been
529 validate_conversion_obstack (void)
531 if (conversion_obstack_initialized
)
532 gcc_assert ((obstack_next_free (&conversion_obstack
)
533 == obstack_base (&conversion_obstack
)));
536 #endif /* ENABLE_CHECKING */
538 /* Dynamically allocate an array of N conversions. */
541 alloc_conversions (size_t n
)
543 return (conversion
**) conversion_obstack_alloc (n
* sizeof (conversion
*));
547 build_conv (conversion_kind code
, tree type
, conversion
*from
)
550 conversion_rank rank
= CONVERSION_RANK (from
);
552 /* Note that the caller is responsible for filling in t->cand for
553 user-defined conversions. */
554 t
= alloc_conversion (code
);
577 t
->user_conv_p
= (code
== ck_user
|| from
->user_conv_p
);
578 t
->bad_p
= from
->bad_p
;
583 /* Represent a conversion from CTOR, a braced-init-list, to TYPE, a
584 specialization of std::initializer_list<T>, if such a conversion is
588 build_list_conv (tree type
, tree ctor
, int flags
)
590 tree elttype
= TREE_VEC_ELT (CLASSTYPE_TI_ARGS (type
), 0);
591 unsigned len
= CONSTRUCTOR_NELTS (ctor
);
592 conversion
**subconvs
= alloc_conversions (len
);
597 /* Within a list-initialization we can have more user-defined
599 flags
&= ~LOOKUP_NO_CONVERSION
;
600 /* But no narrowing conversions. */
601 flags
|= LOOKUP_NO_NARROWING
;
603 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor
), i
, val
)
606 = implicit_conversion (elttype
, TREE_TYPE (val
), val
,
614 t
= alloc_conversion (ck_list
);
616 t
->u
.list
= subconvs
;
619 for (i
= 0; i
< len
; ++i
)
621 conversion
*sub
= subconvs
[i
];
622 if (sub
->rank
> t
->rank
)
624 if (sub
->user_conv_p
)
625 t
->user_conv_p
= true;
633 /* Represent a conversion from CTOR, a braced-init-list, to TYPE, an
634 aggregate class, if such a conversion is possible. */
637 build_aggr_conv (tree type
, tree ctor
, int flags
)
639 unsigned HOST_WIDE_INT i
= 0;
641 tree field
= next_initializable_field (TYPE_FIELDS (type
));
642 tree empty_ctor
= NULL_TREE
;
644 for (; field
; field
= next_initializable_field (TREE_CHAIN (field
)))
646 if (i
< CONSTRUCTOR_NELTS (ctor
))
648 constructor_elt
*ce
= CONSTRUCTOR_ELT (ctor
, i
);
649 if (!can_convert_arg (TREE_TYPE (field
), TREE_TYPE (ce
->value
),
653 if (TREE_CODE (type
) == UNION_TYPE
)
658 if (empty_ctor
== NULL_TREE
)
659 empty_ctor
= build_constructor (init_list_type_node
, NULL
);
660 if (!can_convert_arg (TREE_TYPE (field
), TREE_TYPE (empty_ctor
),
666 if (i
< CONSTRUCTOR_NELTS (ctor
))
669 c
= alloc_conversion (ck_aggr
);
672 c
->user_conv_p
= true;
677 /* Build a representation of the identity conversion from EXPR to
678 itself. The TYPE should match the type of EXPR, if EXPR is non-NULL. */
681 build_identity_conv (tree type
, tree expr
)
685 c
= alloc_conversion (ck_identity
);
692 /* Converting from EXPR to TYPE was ambiguous in the sense that there
693 were multiple user-defined conversions to accomplish the job.
694 Build a conversion that indicates that ambiguity. */
697 build_ambiguous_conv (tree type
, tree expr
)
701 c
= alloc_conversion (ck_ambig
);
709 strip_top_quals (tree t
)
711 if (TREE_CODE (t
) == ARRAY_TYPE
)
713 return cp_build_qualified_type (t
, 0);
716 /* Returns the standard conversion path (see [conv]) from type FROM to type
717 TO, if any. For proper handling of null pointer constants, you must
718 also pass the expression EXPR to convert from. If C_CAST_P is true,
719 this conversion is coming from a C-style cast. */
722 standard_conversion (tree to
, tree from
, tree expr
, bool c_cast_p
,
725 enum tree_code fcode
, tcode
;
727 bool fromref
= false;
729 to
= non_reference (to
);
730 if (TREE_CODE (from
) == REFERENCE_TYPE
)
733 from
= TREE_TYPE (from
);
735 to
= strip_top_quals (to
);
736 from
= strip_top_quals (from
);
738 if ((TYPE_PTRFN_P (to
) || TYPE_PTRMEMFUNC_P (to
))
739 && expr
&& type_unknown_p (expr
))
741 tsubst_flags_t tflags
= tf_conv
;
742 if (!(flags
& LOOKUP_PROTECT
))
743 tflags
|= tf_no_access_control
;
744 expr
= instantiate_type (to
, expr
, tflags
);
745 if (expr
== error_mark_node
)
747 from
= TREE_TYPE (expr
);
750 fcode
= TREE_CODE (from
);
751 tcode
= TREE_CODE (to
);
753 conv
= build_identity_conv (from
, expr
);
754 if (fcode
== FUNCTION_TYPE
|| fcode
== ARRAY_TYPE
)
756 from
= type_decays_to (from
);
757 fcode
= TREE_CODE (from
);
758 conv
= build_conv (ck_lvalue
, from
, conv
);
760 else if (fromref
|| (expr
&& lvalue_p (expr
)))
765 bitfield_type
= is_bitfield_expr_with_lowered_type (expr
);
768 from
= strip_top_quals (bitfield_type
);
769 fcode
= TREE_CODE (from
);
772 conv
= build_conv (ck_rvalue
, from
, conv
);
775 /* Allow conversion between `__complex__' data types. */
776 if (tcode
== COMPLEX_TYPE
&& fcode
== COMPLEX_TYPE
)
778 /* The standard conversion sequence to convert FROM to TO is
779 the standard conversion sequence to perform componentwise
781 conversion
*part_conv
= standard_conversion
782 (TREE_TYPE (to
), TREE_TYPE (from
), NULL_TREE
, c_cast_p
, flags
);
786 conv
= build_conv (part_conv
->kind
, to
, conv
);
787 conv
->rank
= part_conv
->rank
;
795 if (same_type_p (from
, to
))
799 A null pointer constant can be converted to a pointer type; ... A
800 null pointer constant of integral type can be converted to an
801 rvalue of type std::nullptr_t. */
802 if ((tcode
== POINTER_TYPE
|| TYPE_PTR_TO_MEMBER_P (to
)
803 || NULLPTR_TYPE_P (to
))
804 && expr
&& null_ptr_cst_p (expr
))
805 conv
= build_conv (ck_std
, to
, conv
);
806 else if ((tcode
== INTEGER_TYPE
&& fcode
== POINTER_TYPE
)
807 || (tcode
== POINTER_TYPE
&& fcode
== INTEGER_TYPE
))
809 /* For backwards brain damage compatibility, allow interconversion of
810 pointers and integers with a pedwarn. */
811 conv
= build_conv (ck_std
, to
, conv
);
814 else if (UNSCOPED_ENUM_P (to
) && fcode
== INTEGER_TYPE
)
816 /* For backwards brain damage compatibility, allow interconversion of
817 enums and integers with a pedwarn. */
818 conv
= build_conv (ck_std
, to
, conv
);
821 else if ((tcode
== POINTER_TYPE
&& fcode
== POINTER_TYPE
)
822 || (TYPE_PTRMEM_P (to
) && TYPE_PTRMEM_P (from
)))
827 if (tcode
== POINTER_TYPE
828 && same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (from
),
831 else if (VOID_TYPE_P (TREE_TYPE (to
))
832 && !TYPE_PTRMEM_P (from
)
833 && TREE_CODE (TREE_TYPE (from
)) != FUNCTION_TYPE
)
835 from
= build_pointer_type
836 (cp_build_qualified_type (void_type_node
,
837 cp_type_quals (TREE_TYPE (from
))));
838 conv
= build_conv (ck_ptr
, from
, conv
);
840 else if (TYPE_PTRMEM_P (from
))
842 tree fbase
= TYPE_PTRMEM_CLASS_TYPE (from
);
843 tree tbase
= TYPE_PTRMEM_CLASS_TYPE (to
);
845 if (DERIVED_FROM_P (fbase
, tbase
)
846 && (same_type_ignoring_top_level_qualifiers_p
847 (TYPE_PTRMEM_POINTED_TO_TYPE (from
),
848 TYPE_PTRMEM_POINTED_TO_TYPE (to
))))
850 from
= build_ptrmem_type (tbase
,
851 TYPE_PTRMEM_POINTED_TO_TYPE (from
));
852 conv
= build_conv (ck_pmem
, from
, conv
);
854 else if (!same_type_p (fbase
, tbase
))
857 else if (CLASS_TYPE_P (TREE_TYPE (from
))
858 && CLASS_TYPE_P (TREE_TYPE (to
))
861 An rvalue of type "pointer to cv D," where D is a
862 class type, can be converted to an rvalue of type
863 "pointer to cv B," where B is a base class (clause
864 _class.derived_) of D. If B is an inaccessible
865 (clause _class.access_) or ambiguous
866 (_class.member.lookup_) base class of D, a program
867 that necessitates this conversion is ill-formed.
868 Therefore, we use DERIVED_FROM_P, and do not check
869 access or uniqueness. */
870 && DERIVED_FROM_P (TREE_TYPE (to
), TREE_TYPE (from
)))
873 cp_build_qualified_type (TREE_TYPE (to
),
874 cp_type_quals (TREE_TYPE (from
)));
875 from
= build_pointer_type (from
);
876 conv
= build_conv (ck_ptr
, from
, conv
);
880 if (tcode
== POINTER_TYPE
)
882 to_pointee
= TREE_TYPE (to
);
883 from_pointee
= TREE_TYPE (from
);
887 to_pointee
= TYPE_PTRMEM_POINTED_TO_TYPE (to
);
888 from_pointee
= TYPE_PTRMEM_POINTED_TO_TYPE (from
);
891 if (same_type_p (from
, to
))
893 else if (c_cast_p
&& comp_ptr_ttypes_const (to
, from
))
894 /* In a C-style cast, we ignore CV-qualification because we
895 are allowed to perform a static_cast followed by a
897 conv
= build_conv (ck_qual
, to
, conv
);
898 else if (!c_cast_p
&& comp_ptr_ttypes (to_pointee
, from_pointee
))
899 conv
= build_conv (ck_qual
, to
, conv
);
900 else if (expr
&& string_conv_p (to
, expr
, 0))
901 /* converting from string constant to char *. */
902 conv
= build_conv (ck_qual
, to
, conv
);
903 else if (ptr_reasonably_similar (to_pointee
, from_pointee
))
905 conv
= build_conv (ck_ptr
, to
, conv
);
913 else if (TYPE_PTRMEMFUNC_P (to
) && TYPE_PTRMEMFUNC_P (from
))
915 tree fromfn
= TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (from
));
916 tree tofn
= TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (to
));
917 tree fbase
= TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (fromfn
)));
918 tree tbase
= TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (tofn
)));
920 if (!DERIVED_FROM_P (fbase
, tbase
)
921 || !same_type_p (TREE_TYPE (fromfn
), TREE_TYPE (tofn
))
922 || !compparms (TREE_CHAIN (TYPE_ARG_TYPES (fromfn
)),
923 TREE_CHAIN (TYPE_ARG_TYPES (tofn
)))
924 || cp_type_quals (fbase
) != cp_type_quals (tbase
))
927 from
= build_memfn_type (fromfn
, tbase
, cp_type_quals (tbase
));
928 from
= build_ptrmemfunc_type (build_pointer_type (from
));
929 conv
= build_conv (ck_pmem
, from
, conv
);
932 else if (tcode
== BOOLEAN_TYPE
)
936 An rvalue of arithmetic, unscoped enumeration, pointer, or
937 pointer to member type can be converted to an rvalue of type
938 bool. ... An rvalue of type std::nullptr_t can be converted
939 to an rvalue of type bool; */
940 if (ARITHMETIC_TYPE_P (from
)
941 || UNSCOPED_ENUM_P (from
)
942 || fcode
== POINTER_TYPE
943 || TYPE_PTR_TO_MEMBER_P (from
)
944 || NULLPTR_TYPE_P (from
))
946 conv
= build_conv (ck_std
, to
, conv
);
947 if (fcode
== POINTER_TYPE
948 || TYPE_PTRMEM_P (from
)
949 || (TYPE_PTRMEMFUNC_P (from
)
950 && conv
->rank
< cr_pbool
)
951 || NULLPTR_TYPE_P (from
))
952 conv
->rank
= cr_pbool
;
958 /* We don't check for ENUMERAL_TYPE here because there are no standard
959 conversions to enum type. */
960 /* As an extension, allow conversion to complex type. */
961 else if (ARITHMETIC_TYPE_P (to
))
963 if (! (INTEGRAL_CODE_P (fcode
) || fcode
== REAL_TYPE
)
964 || SCOPED_ENUM_P (from
))
966 conv
= build_conv (ck_std
, to
, conv
);
968 /* Give this a better rank if it's a promotion. */
969 if (same_type_p (to
, type_promotes_to (from
))
970 && conv
->u
.next
->rank
<= cr_promotion
)
971 conv
->rank
= cr_promotion
;
973 else if (fcode
== VECTOR_TYPE
&& tcode
== VECTOR_TYPE
974 && vector_types_convertible_p (from
, to
, false))
975 return build_conv (ck_std
, to
, conv
);
976 else if (MAYBE_CLASS_TYPE_P (to
) && MAYBE_CLASS_TYPE_P (from
)
977 && is_properly_derived_from (from
, to
))
979 if (conv
->kind
== ck_rvalue
)
981 conv
= build_conv (ck_base
, to
, conv
);
982 /* The derived-to-base conversion indicates the initialization
983 of a parameter with base type from an object of a derived
984 type. A temporary object is created to hold the result of
985 the conversion unless we're binding directly to a reference. */
986 conv
->need_temporary_p
= !(flags
& LOOKUP_NO_TEMP_BIND
);
991 if (flags
& LOOKUP_NO_NARROWING
)
992 conv
->check_narrowing
= true;
997 /* Returns nonzero if T1 is reference-related to T2. */
1000 reference_related_p (tree t1
, tree t2
)
1002 t1
= TYPE_MAIN_VARIANT (t1
);
1003 t2
= TYPE_MAIN_VARIANT (t2
);
1007 Given types "cv1 T1" and "cv2 T2," "cv1 T1" is reference-related
1008 to "cv2 T2" if T1 is the same type as T2, or T1 is a base class
1010 return (same_type_p (t1
, t2
)
1011 || (CLASS_TYPE_P (t1
) && CLASS_TYPE_P (t2
)
1012 && DERIVED_FROM_P (t1
, t2
)));
1015 /* Returns nonzero if T1 is reference-compatible with T2. */
1018 reference_compatible_p (tree t1
, tree t2
)
1022 "cv1 T1" is reference compatible with "cv2 T2" if T1 is
1023 reference-related to T2 and cv1 is the same cv-qualification as,
1024 or greater cv-qualification than, cv2. */
1025 return (reference_related_p (t1
, t2
)
1026 && at_least_as_qualified_p (t1
, t2
));
1029 /* Determine whether or not the EXPR (of class type S) can be
1030 converted to T as in [over.match.ref]. */
1033 convert_class_to_reference (tree reference_type
, tree s
, tree expr
, int flags
)
1039 struct z_candidate
*candidates
;
1040 struct z_candidate
*cand
;
1046 conversions
= lookup_conversions (s
, /*lookup_template_convs_p=*/true);
1052 Assuming that "cv1 T" is the underlying type of the reference
1053 being initialized, and "cv S" is the type of the initializer
1054 expression, with S a class type, the candidate functions are
1055 selected as follows:
1057 --The conversion functions of S and its base classes are
1058 considered. Those that are not hidden within S and yield type
1059 "reference to cv2 T2", where "cv1 T" is reference-compatible
1060 (_dcl.init.ref_) with "cv2 T2", are candidate functions.
1062 The argument list has one argument, which is the initializer
1067 /* Conceptually, we should take the address of EXPR and put it in
1068 the argument list. Unfortunately, however, that can result in
1069 error messages, which we should not issue now because we are just
1070 trying to find a conversion operator. Therefore, we use NULL,
1071 cast to the appropriate type. */
1072 first_arg
= build_int_cst (build_pointer_type (s
), 0);
1074 t
= TREE_TYPE (reference_type
);
1076 /* We're performing a user-defined conversion to a desired type, so set
1077 this for the benefit of add_candidates. */
1078 flags
|= LOOKUP_NO_CONVERSION
;
1080 for (; conversions
; conversions
= TREE_CHAIN (conversions
))
1082 tree fns
= TREE_VALUE (conversions
);
1083 tree binfo
= TREE_PURPOSE (conversions
);
1084 struct z_candidate
*old_candidates
= candidates
;;
1086 add_candidates (fns
, first_arg
, NULL
, reference_type
,
1088 binfo
, TYPE_BINFO (s
),
1089 flags
, &candidates
);
1091 for (cand
= candidates
; cand
!= old_candidates
; cand
= cand
->next
)
1093 /* Now, see if the conversion function really returns
1094 an lvalue of the appropriate type. From the
1095 point of view of unification, simply returning an
1096 rvalue of the right type is good enough. */
1098 tree t2
= TREE_TYPE (TREE_TYPE (f
));
1099 if (TREE_CODE (t2
) != REFERENCE_TYPE
1100 || !reference_compatible_p (t
, TREE_TYPE (t2
)))
1106 conversion
*identity_conv
;
1107 /* Build a standard conversion sequence indicating the
1108 binding from the reference type returned by the
1109 function to the desired REFERENCE_TYPE. */
1111 = build_identity_conv (TREE_TYPE (TREE_TYPE
1112 (TREE_TYPE (cand
->fn
))),
1115 = (direct_reference_binding
1116 (reference_type
, identity_conv
));
1117 cand
->second_conv
->rvaluedness_matches_p
1118 = TYPE_REF_IS_RVALUE (TREE_TYPE (TREE_TYPE (cand
->fn
)))
1119 == TYPE_REF_IS_RVALUE (reference_type
);
1120 cand
->second_conv
->bad_p
|= cand
->convs
[0]->bad_p
;
1122 /* Don't allow binding of lvalues to rvalue references. */
1123 if (TYPE_REF_IS_RVALUE (reference_type
)
1124 && !TYPE_REF_IS_RVALUE (TREE_TYPE (TREE_TYPE (cand
->fn
))))
1125 cand
->second_conv
->bad_p
= true;
1130 candidates
= splice_viable (candidates
, pedantic
, &any_viable_p
);
1131 /* If none of the conversion functions worked out, let our caller
1136 cand
= tourney (candidates
);
1140 /* Now that we know that this is the function we're going to use fix
1141 the dummy first argument. */
1142 gcc_assert (cand
->first_arg
== NULL_TREE
1143 || integer_zerop (cand
->first_arg
));
1144 cand
->first_arg
= build_this (expr
);
1146 /* Build a user-defined conversion sequence representing the
1148 conv
= build_conv (ck_user
,
1149 TREE_TYPE (TREE_TYPE (cand
->fn
)),
1150 build_identity_conv (TREE_TYPE (expr
), expr
));
1153 if (cand
->viable
== -1)
1156 /* Merge it with the standard conversion sequence from the
1157 conversion function's return type to the desired type. */
1158 cand
->second_conv
= merge_conversion_sequences (conv
, cand
->second_conv
);
1160 return cand
->second_conv
;
1163 /* A reference of the indicated TYPE is being bound directly to the
1164 expression represented by the implicit conversion sequence CONV.
1165 Return a conversion sequence for this binding. */
1168 direct_reference_binding (tree type
, conversion
*conv
)
1172 gcc_assert (TREE_CODE (type
) == REFERENCE_TYPE
);
1173 gcc_assert (TREE_CODE (conv
->type
) != REFERENCE_TYPE
);
1175 t
= TREE_TYPE (type
);
1179 When a parameter of reference type binds directly
1180 (_dcl.init.ref_) to an argument expression, the implicit
1181 conversion sequence is the identity conversion, unless the
1182 argument expression has a type that is a derived class of the
1183 parameter type, in which case the implicit conversion sequence is
1184 a derived-to-base Conversion.
1186 If the parameter binds directly to the result of applying a
1187 conversion function to the argument expression, the implicit
1188 conversion sequence is a user-defined conversion sequence
1189 (_over.ics.user_), with the second standard conversion sequence
1190 either an identity conversion or, if the conversion function
1191 returns an entity of a type that is a derived class of the
1192 parameter type, a derived-to-base conversion. */
1193 if (!same_type_ignoring_top_level_qualifiers_p (t
, conv
->type
))
1195 /* Represent the derived-to-base conversion. */
1196 conv
= build_conv (ck_base
, t
, conv
);
1197 /* We will actually be binding to the base-class subobject in
1198 the derived class, so we mark this conversion appropriately.
1199 That way, convert_like knows not to generate a temporary. */
1200 conv
->need_temporary_p
= false;
1202 return build_conv (ck_ref_bind
, type
, conv
);
1205 /* Returns the conversion path from type FROM to reference type TO for
1206 purposes of reference binding. For lvalue binding, either pass a
1207 reference type to FROM or an lvalue expression to EXPR. If the
1208 reference will be bound to a temporary, NEED_TEMPORARY_P is set for
1209 the conversion returned. If C_CAST_P is true, this
1210 conversion is coming from a C-style cast. */
1213 reference_binding (tree rto
, tree rfrom
, tree expr
, bool c_cast_p
, int flags
)
1215 conversion
*conv
= NULL
;
1216 tree to
= TREE_TYPE (rto
);
1221 cp_lvalue_kind is_lvalue
= clk_none
;
1223 if (TREE_CODE (to
) == FUNCTION_TYPE
&& expr
&& type_unknown_p (expr
))
1225 expr
= instantiate_type (to
, expr
, tf_none
);
1226 if (expr
== error_mark_node
)
1228 from
= TREE_TYPE (expr
);
1231 if (TREE_CODE (from
) == REFERENCE_TYPE
)
1233 /* Anything with reference type is an lvalue. */
1234 is_lvalue
= clk_ordinary
;
1235 from
= TREE_TYPE (from
);
1238 if (expr
&& BRACE_ENCLOSED_INITIALIZER_P (expr
))
1240 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS
);
1241 conv
= implicit_conversion (to
, from
, expr
, c_cast_p
,
1243 if (!CLASS_TYPE_P (to
)
1244 && CONSTRUCTOR_NELTS (expr
) == 1)
1246 expr
= CONSTRUCTOR_ELT (expr
, 0)->value
;
1247 if (error_operand_p (expr
))
1249 from
= TREE_TYPE (expr
);
1253 if (is_lvalue
== clk_none
&& expr
)
1254 is_lvalue
= real_lvalue_p (expr
);
1257 if ((is_lvalue
& clk_bitfield
) != 0)
1258 tfrom
= unlowered_expr_type (expr
);
1260 /* Figure out whether or not the types are reference-related and
1261 reference compatible. We have do do this after stripping
1262 references from FROM. */
1263 related_p
= reference_related_p (to
, tfrom
);
1264 /* If this is a C cast, first convert to an appropriately qualified
1265 type, so that we can later do a const_cast to the desired type. */
1266 if (related_p
&& c_cast_p
1267 && !at_least_as_qualified_p (to
, tfrom
))
1268 to
= cp_build_qualified_type (to
, cp_type_quals (tfrom
));
1269 compatible_p
= reference_compatible_p (to
, tfrom
);
1271 /* Directly bind reference when target expression's type is compatible with
1272 the reference and expression is an lvalue. In DR391, the wording in
1273 [8.5.3/5 dcl.init.ref] is changed to also require direct bindings for
1274 const and rvalue references to rvalues of compatible class type.
1275 We should also do direct bindings for non-class "rvalues" derived from
1276 rvalue references. */
1279 || (((CP_TYPE_CONST_NON_VOLATILE_P (to
)
1280 && !(flags
& LOOKUP_NO_TEMP_BIND
))
1281 || TYPE_REF_IS_RVALUE (rto
))
1282 && (CLASS_TYPE_P (from
) || (expr
&& lvalue_p (expr
))))))
1286 If the initializer expression
1288 -- is an lvalue (but not an lvalue for a bit-field), and "cv1 T1"
1289 is reference-compatible with "cv2 T2,"
1291 the reference is bound directly to the initializer expression
1295 If the initializer expression is an rvalue, with T2 a class type,
1296 and "cv1 T1" is reference-compatible with "cv2 T2", the reference
1297 is bound to the object represented by the rvalue or to a sub-object
1298 within that object. */
1300 conv
= build_identity_conv (tfrom
, expr
);
1301 conv
= direct_reference_binding (rto
, conv
);
1303 if (flags
& LOOKUP_PREFER_RVALUE
)
1304 /* The top-level caller requested that we pretend that the lvalue
1305 be treated as an rvalue. */
1306 conv
->rvaluedness_matches_p
= TYPE_REF_IS_RVALUE (rto
);
1308 conv
->rvaluedness_matches_p
1309 = (TYPE_REF_IS_RVALUE (rto
) == !is_lvalue
);
1311 if ((is_lvalue
& clk_bitfield
) != 0
1312 || ((is_lvalue
& clk_packed
) != 0 && !TYPE_PACKED (to
)))
1313 /* For the purposes of overload resolution, we ignore the fact
1314 this expression is a bitfield or packed field. (In particular,
1315 [over.ics.ref] says specifically that a function with a
1316 non-const reference parameter is viable even if the
1317 argument is a bitfield.)
1319 However, when we actually call the function we must create
1320 a temporary to which to bind the reference. If the
1321 reference is volatile, or isn't const, then we cannot make
1322 a temporary, so we just issue an error when the conversion
1324 conv
->need_temporary_p
= true;
1326 /* Don't allow binding of lvalues to rvalue references. */
1327 if (is_lvalue
&& TYPE_REF_IS_RVALUE (rto
)
1328 && !(flags
& LOOKUP_PREFER_RVALUE
))
1333 /* [class.conv.fct] A conversion function is never used to convert a
1334 (possibly cv-qualified) object to the (possibly cv-qualified) same
1335 object type (or a reference to it), to a (possibly cv-qualified) base
1336 class of that type (or a reference to it).... */
1337 else if (CLASS_TYPE_P (from
) && !related_p
1338 && !(flags
& LOOKUP_NO_CONVERSION
))
1342 If the initializer expression
1344 -- has a class type (i.e., T2 is a class type) can be
1345 implicitly converted to an lvalue of type "cv3 T3," where
1346 "cv1 T1" is reference-compatible with "cv3 T3". (this
1347 conversion is selected by enumerating the applicable
1348 conversion functions (_over.match.ref_) and choosing the
1349 best one through overload resolution. (_over.match_).
1351 the reference is bound to the lvalue result of the conversion
1352 in the second case. */
1353 conv
= convert_class_to_reference (rto
, from
, expr
, flags
);
1358 /* From this point on, we conceptually need temporaries, even if we
1359 elide them. Only the cases above are "direct bindings". */
1360 if (flags
& LOOKUP_NO_TEMP_BIND
)
1365 When a parameter of reference type is not bound directly to an
1366 argument expression, the conversion sequence is the one required
1367 to convert the argument expression to the underlying type of the
1368 reference according to _over.best.ics_. Conceptually, this
1369 conversion sequence corresponds to copy-initializing a temporary
1370 of the underlying type with the argument expression. Any
1371 difference in top-level cv-qualification is subsumed by the
1372 initialization itself and does not constitute a conversion. */
1376 Otherwise, the reference shall be to a non-volatile const type.
1378 Under C++0x, [8.5.3/5 dcl.init.ref] it may also be an rvalue reference */
1379 if (!CP_TYPE_CONST_NON_VOLATILE_P (to
) && !TYPE_REF_IS_RVALUE (rto
))
1384 Otherwise, a temporary of type "cv1 T1" is created and
1385 initialized from the initializer expression using the rules for a
1386 non-reference copy initialization. If T1 is reference-related to
1387 T2, cv1 must be the same cv-qualification as, or greater
1388 cv-qualification than, cv2; otherwise, the program is ill-formed. */
1389 if (related_p
&& !at_least_as_qualified_p (to
, from
))
1392 /* We're generating a temporary now, but don't bind any more in the
1393 conversion (specifically, don't slice the temporary returned by a
1394 conversion operator). */
1395 flags
|= LOOKUP_NO_TEMP_BIND
;
1397 /* Core issue 899: When [copy-]initializing a temporary to be bound
1398 to the first parameter of a copy constructor (12.8) called with
1399 a single argument in the context of direct-initialization,
1400 explicit conversion functions are also considered.
1402 So don't set LOOKUP_ONLYCONVERTING in that case. */
1403 if (!(flags
& LOOKUP_COPY_PARM
))
1404 flags
|= LOOKUP_ONLYCONVERTING
;
1407 conv
= implicit_conversion (to
, from
, expr
, c_cast_p
,
1412 conv
= build_conv (ck_ref_bind
, rto
, conv
);
1413 /* This reference binding, unlike those above, requires the
1414 creation of a temporary. */
1415 conv
->need_temporary_p
= true;
1416 conv
->rvaluedness_matches_p
= TYPE_REF_IS_RVALUE (rto
);
1421 /* Returns the implicit conversion sequence (see [over.ics]) from type
1422 FROM to type TO. The optional expression EXPR may affect the
1423 conversion. FLAGS are the usual overloading flags. If C_CAST_P is
1424 true, this conversion is coming from a C-style cast. */
1427 implicit_conversion (tree to
, tree from
, tree expr
, bool c_cast_p
,
1432 if (from
== error_mark_node
|| to
== error_mark_node
1433 || expr
== error_mark_node
)
1436 if (TREE_CODE (to
) == REFERENCE_TYPE
)
1437 conv
= reference_binding (to
, from
, expr
, c_cast_p
, flags
);
1439 conv
= standard_conversion (to
, from
, expr
, c_cast_p
, flags
);
1444 if (expr
&& BRACE_ENCLOSED_INITIALIZER_P (expr
))
1446 if (is_std_init_list (to
))
1447 return build_list_conv (to
, expr
, flags
);
1449 /* Allow conversion from an initializer-list with one element to a
1451 if (SCALAR_TYPE_P (to
))
1453 int nelts
= CONSTRUCTOR_NELTS (expr
);
1457 elt
= integer_zero_node
;
1458 else if (nelts
== 1)
1459 elt
= CONSTRUCTOR_ELT (expr
, 0)->value
;
1461 elt
= error_mark_node
;
1463 conv
= implicit_conversion (to
, TREE_TYPE (elt
), elt
,
1467 conv
->check_narrowing
= true;
1468 if (BRACE_ENCLOSED_INITIALIZER_P (elt
))
1469 /* Too many levels of braces, i.e. '{{1}}'. */
1476 if (expr
!= NULL_TREE
1477 && (MAYBE_CLASS_TYPE_P (from
)
1478 || MAYBE_CLASS_TYPE_P (to
))
1479 && (flags
& LOOKUP_NO_CONVERSION
) == 0)
1481 struct z_candidate
*cand
;
1482 int convflags
= (flags
& (LOOKUP_NO_TEMP_BIND
|LOOKUP_ONLYCONVERTING
1483 |LOOKUP_NO_NARROWING
));
1485 if (CLASS_TYPE_P (to
)
1486 && !CLASSTYPE_NON_AGGREGATE (complete_type (to
))
1487 && BRACE_ENCLOSED_INITIALIZER_P (expr
))
1488 return build_aggr_conv (to
, expr
, flags
);
1490 cand
= build_user_type_conversion_1 (to
, expr
, convflags
);
1492 conv
= cand
->second_conv
;
1494 /* We used to try to bind a reference to a temporary here, but that
1495 is now handled after the recursive call to this function at the end
1496 of reference_binding. */
1503 /* Add a new entry to the list of candidates. Used by the add_*_candidate
1504 functions. ARGS will not be changed until a single candidate is
1507 static struct z_candidate
*
1508 add_candidate (struct z_candidate
**candidates
,
1509 tree fn
, tree first_arg
, const VEC(tree
,gc
) *args
,
1510 size_t num_convs
, conversion
**convs
,
1511 tree access_path
, tree conversion_path
,
1514 struct z_candidate
*cand
= (struct z_candidate
*)
1515 conversion_obstack_alloc (sizeof (struct z_candidate
));
1518 cand
->first_arg
= first_arg
;
1520 cand
->convs
= convs
;
1521 cand
->num_convs
= num_convs
;
1522 cand
->access_path
= access_path
;
1523 cand
->conversion_path
= conversion_path
;
1524 cand
->viable
= viable
;
1525 cand
->next
= *candidates
;
1531 /* Create an overload candidate for the function or method FN called
1532 with the argument list FIRST_ARG/ARGS and add it to CANDIDATES.
1533 FLAGS is passed on to implicit_conversion.
1535 This does not change ARGS.
1537 CTYPE, if non-NULL, is the type we want to pretend this function
1538 comes from for purposes of overload resolution. */
1540 static struct z_candidate
*
1541 add_function_candidate (struct z_candidate
**candidates
,
1542 tree fn
, tree ctype
, tree first_arg
,
1543 const VEC(tree
,gc
) *args
, tree access_path
,
1544 tree conversion_path
, int flags
)
1546 tree parmlist
= TYPE_ARG_TYPES (TREE_TYPE (fn
));
1550 tree orig_first_arg
= first_arg
;
1554 /* At this point we should not see any functions which haven't been
1555 explicitly declared, except for friend functions which will have
1556 been found using argument dependent lookup. */
1557 gcc_assert (!DECL_ANTICIPATED (fn
) || DECL_HIDDEN_FRIEND_P (fn
));
1559 /* The `this', `in_chrg' and VTT arguments to constructors are not
1560 considered in overload resolution. */
1561 if (DECL_CONSTRUCTOR_P (fn
))
1563 parmlist
= skip_artificial_parms_for (fn
, parmlist
);
1564 skip
= num_artificial_parms_for (fn
);
1565 if (skip
> 0 && first_arg
!= NULL_TREE
)
1568 first_arg
= NULL_TREE
;
1574 len
= VEC_length (tree
, args
) - skip
+ (first_arg
!= NULL_TREE
? 1 : 0);
1575 convs
= alloc_conversions (len
);
1577 /* 13.3.2 - Viable functions [over.match.viable]
1578 First, to be a viable function, a candidate function shall have enough
1579 parameters to agree in number with the arguments in the list.
1581 We need to check this first; otherwise, checking the ICSes might cause
1582 us to produce an ill-formed template instantiation. */
1584 parmnode
= parmlist
;
1585 for (i
= 0; i
< len
; ++i
)
1587 if (parmnode
== NULL_TREE
|| parmnode
== void_list_node
)
1589 parmnode
= TREE_CHAIN (parmnode
);
1592 if (i
< len
&& parmnode
)
1595 /* Make sure there are default args for the rest of the parms. */
1596 else if (!sufficient_parms_p (parmnode
))
1602 /* Second, for F to be a viable function, there shall exist for each
1603 argument an implicit conversion sequence that converts that argument
1604 to the corresponding parameter of F. */
1606 parmnode
= parmlist
;
1608 for (i
= 0; i
< len
; ++i
)
1614 if (parmnode
== void_list_node
)
1617 if (i
== 0 && first_arg
!= NULL_TREE
)
1620 arg
= VEC_index (tree
, args
,
1621 i
+ skip
- (first_arg
!= NULL_TREE
? 1 : 0));
1622 argtype
= lvalue_type (arg
);
1624 is_this
= (i
== 0 && DECL_NONSTATIC_MEMBER_FUNCTION_P (fn
)
1625 && ! DECL_CONSTRUCTOR_P (fn
));
1629 tree parmtype
= TREE_VALUE (parmnode
);
1632 parmnode
= TREE_CHAIN (parmnode
);
1634 /* The type of the implicit object parameter ('this') for
1635 overload resolution is not always the same as for the
1636 function itself; conversion functions are considered to
1637 be members of the class being converted, and functions
1638 introduced by a using-declaration are considered to be
1639 members of the class that uses them.
1641 Since build_over_call ignores the ICS for the `this'
1642 parameter, we can just change the parm type. */
1643 if (ctype
&& is_this
)
1645 parmtype
= cp_build_qualified_type
1646 (ctype
, cp_type_quals (TREE_TYPE (parmtype
)));
1647 parmtype
= build_pointer_type (parmtype
);
1650 /* Core issue 899: When [copy-]initializing a temporary to be bound
1651 to the first parameter of a copy constructor (12.8) called with
1652 a single argument in the context of direct-initialization,
1653 explicit conversion functions are also considered.
1655 So set LOOKUP_COPY_PARM to let reference_binding know that
1656 it's being called in that context. We generalize the above
1657 to handle move constructors and template constructors as well;
1658 the standardese should soon be updated similarly. */
1659 if (ctype
&& i
== 0 && (len
-skip
== 1)
1660 && !(flags
& LOOKUP_ONLYCONVERTING
)
1661 && DECL_CONSTRUCTOR_P (fn
)
1662 && parmtype
!= error_mark_node
1663 && (same_type_ignoring_top_level_qualifiers_p
1664 (non_reference (parmtype
), ctype
)))
1666 lflags
|= LOOKUP_COPY_PARM
;
1667 /* We allow user-defined conversions within init-lists, but
1668 not for the copy constructor. */
1669 if (flags
& LOOKUP_NO_COPY_CTOR_CONVERSION
)
1670 lflags
|= LOOKUP_NO_CONVERSION
;
1673 lflags
|= LOOKUP_ONLYCONVERTING
;
1675 t
= implicit_conversion (parmtype
, argtype
, arg
,
1676 /*c_cast_p=*/false, lflags
);
1680 t
= build_identity_conv (argtype
, arg
);
1681 t
->ellipsis_p
= true;
1699 return add_candidate (candidates
, fn
, orig_first_arg
, args
, len
, convs
,
1700 access_path
, conversion_path
, viable
);
1703 /* Create an overload candidate for the conversion function FN which will
1704 be invoked for expression OBJ, producing a pointer-to-function which
1705 will in turn be called with the argument list FIRST_ARG/ARGLIST,
1706 and add it to CANDIDATES. This does not change ARGLIST. FLAGS is
1707 passed on to implicit_conversion.
1709 Actually, we don't really care about FN; we care about the type it
1710 converts to. There may be multiple conversion functions that will
1711 convert to that type, and we rely on build_user_type_conversion_1 to
1712 choose the best one; so when we create our candidate, we record the type
1713 instead of the function. */
1715 static struct z_candidate
*
1716 add_conv_candidate (struct z_candidate
**candidates
, tree fn
, tree obj
,
1717 tree first_arg
, const VEC(tree
,gc
) *arglist
,
1718 tree access_path
, tree conversion_path
)
1720 tree totype
= TREE_TYPE (TREE_TYPE (fn
));
1721 int i
, len
, viable
, flags
;
1722 tree parmlist
, parmnode
;
1725 for (parmlist
= totype
; TREE_CODE (parmlist
) != FUNCTION_TYPE
; )
1726 parmlist
= TREE_TYPE (parmlist
);
1727 parmlist
= TYPE_ARG_TYPES (parmlist
);
1729 len
= VEC_length (tree
, arglist
) + (first_arg
!= NULL_TREE
? 1 : 0) + 1;
1730 convs
= alloc_conversions (len
);
1731 parmnode
= parmlist
;
1733 flags
= LOOKUP_IMPLICIT
;
1735 /* Don't bother looking up the same type twice. */
1736 if (*candidates
&& (*candidates
)->fn
== totype
)
1739 for (i
= 0; i
< len
; ++i
)
1746 else if (i
== 1 && first_arg
!= NULL_TREE
)
1749 arg
= VEC_index (tree
, arglist
,
1750 i
- (first_arg
!= NULL_TREE
? 1 : 0) - 1);
1751 argtype
= lvalue_type (arg
);
1754 t
= implicit_conversion (totype
, argtype
, arg
, /*c_cast_p=*/false,
1756 else if (parmnode
== void_list_node
)
1759 t
= implicit_conversion (TREE_VALUE (parmnode
), argtype
, arg
,
1760 /*c_cast_p=*/false, flags
);
1763 t
= build_identity_conv (argtype
, arg
);
1764 t
->ellipsis_p
= true;
1778 parmnode
= TREE_CHAIN (parmnode
);
1784 if (!sufficient_parms_p (parmnode
))
1787 return add_candidate (candidates
, totype
, first_arg
, arglist
, len
, convs
,
1788 access_path
, conversion_path
, viable
);
1792 build_builtin_candidate (struct z_candidate
**candidates
, tree fnname
,
1793 tree type1
, tree type2
, tree
*args
, tree
*argtypes
,
1805 num_convs
= args
[2] ? 3 : (args
[1] ? 2 : 1);
1806 convs
= alloc_conversions (num_convs
);
1808 /* TRUTH_*_EXPR do "contextual conversion to bool", which means explicit
1809 conversion ops are allowed. We handle that here by just checking for
1810 boolean_type_node because other operators don't ask for it. COND_EXPR
1811 also does contextual conversion to bool for the first operand, but we
1812 handle that in build_conditional_expr, and type1 here is operand 2. */
1813 if (type1
!= boolean_type_node
)
1814 flags
|= LOOKUP_ONLYCONVERTING
;
1816 for (i
= 0; i
< 2; ++i
)
1821 t
= implicit_conversion (types
[i
], argtypes
[i
], args
[i
],
1822 /*c_cast_p=*/false, flags
);
1826 /* We need something for printing the candidate. */
1827 t
= build_identity_conv (types
[i
], NULL_TREE
);
1834 /* For COND_EXPR we rearranged the arguments; undo that now. */
1837 convs
[2] = convs
[1];
1838 convs
[1] = convs
[0];
1839 t
= implicit_conversion (boolean_type_node
, argtypes
[2], args
[2],
1840 /*c_cast_p=*/false, flags
);
1847 add_candidate (candidates
, fnname
, /*first_arg=*/NULL_TREE
, /*args=*/NULL
,
1849 /*access_path=*/NULL_TREE
,
1850 /*conversion_path=*/NULL_TREE
,
1855 is_complete (tree t
)
1857 return COMPLETE_TYPE_P (complete_type (t
));
1860 /* Returns nonzero if TYPE is a promoted arithmetic type. */
1863 promoted_arithmetic_type_p (tree type
)
1867 In this section, the term promoted integral type is used to refer
1868 to those integral types which are preserved by integral promotion
1869 (including e.g. int and long but excluding e.g. char).
1870 Similarly, the term promoted arithmetic type refers to promoted
1871 integral types plus floating types. */
1872 return ((CP_INTEGRAL_TYPE_P (type
)
1873 && same_type_p (type_promotes_to (type
), type
))
1874 || TREE_CODE (type
) == REAL_TYPE
);
1877 /* Create any builtin operator overload candidates for the operator in
1878 question given the converted operand types TYPE1 and TYPE2. The other
1879 args are passed through from add_builtin_candidates to
1880 build_builtin_candidate.
1882 TYPE1 and TYPE2 may not be permissible, and we must filter them.
1883 If CODE is requires candidates operands of the same type of the kind
1884 of which TYPE1 and TYPE2 are, we add both candidates
1885 CODE (TYPE1, TYPE1) and CODE (TYPE2, TYPE2). */
1888 add_builtin_candidate (struct z_candidate
**candidates
, enum tree_code code
,
1889 enum tree_code code2
, tree fnname
, tree type1
,
1890 tree type2
, tree
*args
, tree
*argtypes
, int flags
)
1894 case POSTINCREMENT_EXPR
:
1895 case POSTDECREMENT_EXPR
:
1896 args
[1] = integer_zero_node
;
1897 type2
= integer_type_node
;
1906 /* 4 For every pair T, VQ), where T is an arithmetic or enumeration type,
1907 and VQ is either volatile or empty, there exist candidate operator
1908 functions of the form
1909 VQ T& operator++(VQ T&);
1910 T operator++(VQ T&, int);
1911 5 For every pair T, VQ), where T is an enumeration type or an arithmetic
1912 type other than bool, and VQ is either volatile or empty, there exist
1913 candidate operator functions of the form
1914 VQ T& operator--(VQ T&);
1915 T operator--(VQ T&, int);
1916 6 For every pair T, VQ), where T is a cv-qualified or cv-unqualified
1917 complete object type, and VQ is either volatile or empty, there exist
1918 candidate operator functions of the form
1919 T*VQ& operator++(T*VQ&);
1920 T*VQ& operator--(T*VQ&);
1921 T* operator++(T*VQ&, int);
1922 T* operator--(T*VQ&, int); */
1924 case POSTDECREMENT_EXPR
:
1925 case PREDECREMENT_EXPR
:
1926 if (TREE_CODE (type1
) == BOOLEAN_TYPE
)
1928 case POSTINCREMENT_EXPR
:
1929 case PREINCREMENT_EXPR
:
1930 if (ARITHMETIC_TYPE_P (type1
) || TYPE_PTROB_P (type1
))
1932 type1
= build_reference_type (type1
);
1937 /* 7 For every cv-qualified or cv-unqualified complete object type T, there
1938 exist candidate operator functions of the form
1942 8 For every function type T, there exist candidate operator functions of
1944 T& operator*(T*); */
1947 if (TREE_CODE (type1
) == POINTER_TYPE
1948 && (TYPE_PTROB_P (type1
)
1949 || TREE_CODE (TREE_TYPE (type1
)) == FUNCTION_TYPE
))
1953 /* 9 For every type T, there exist candidate operator functions of the form
1956 10For every promoted arithmetic type T, there exist candidate operator
1957 functions of the form
1961 case UNARY_PLUS_EXPR
: /* unary + */
1962 if (TREE_CODE (type1
) == POINTER_TYPE
)
1965 if (ARITHMETIC_TYPE_P (type1
))
1969 /* 11For every promoted integral type T, there exist candidate operator
1970 functions of the form
1974 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1
))
1978 /* 12For every quintuple C1, C2, T, CV1, CV2), where C2 is a class type, C1
1979 is the same type as C2 or is a derived class of C2, T is a complete
1980 object type or a function type, and CV1 and CV2 are cv-qualifier-seqs,
1981 there exist candidate operator functions of the form
1982 CV12 T& operator->*(CV1 C1*, CV2 T C2::*);
1983 where CV12 is the union of CV1 and CV2. */
1986 if (TREE_CODE (type1
) == POINTER_TYPE
1987 && TYPE_PTR_TO_MEMBER_P (type2
))
1989 tree c1
= TREE_TYPE (type1
);
1990 tree c2
= TYPE_PTRMEM_CLASS_TYPE (type2
);
1992 if (MAYBE_CLASS_TYPE_P (c1
) && DERIVED_FROM_P (c2
, c1
)
1993 && (TYPE_PTRMEMFUNC_P (type2
)
1994 || is_complete (TYPE_PTRMEM_POINTED_TO_TYPE (type2
))))
1999 /* 13For every pair of promoted arithmetic types L and R, there exist can-
2000 didate operator functions of the form
2005 bool operator<(L, R);
2006 bool operator>(L, R);
2007 bool operator<=(L, R);
2008 bool operator>=(L, R);
2009 bool operator==(L, R);
2010 bool operator!=(L, R);
2011 where LR is the result of the usual arithmetic conversions between
2014 14For every pair of types T and I, where T is a cv-qualified or cv-
2015 unqualified complete object type and I is a promoted integral type,
2016 there exist candidate operator functions of the form
2017 T* operator+(T*, I);
2018 T& operator[](T*, I);
2019 T* operator-(T*, I);
2020 T* operator+(I, T*);
2021 T& operator[](I, T*);
2023 15For every T, where T is a pointer to complete object type, there exist
2024 candidate operator functions of the form112)
2025 ptrdiff_t operator-(T, T);
2027 16For every pointer or enumeration type T, there exist candidate operator
2028 functions of the form
2029 bool operator<(T, T);
2030 bool operator>(T, T);
2031 bool operator<=(T, T);
2032 bool operator>=(T, T);
2033 bool operator==(T, T);
2034 bool operator!=(T, T);
2036 17For every pointer to member type T, there exist candidate operator
2037 functions of the form
2038 bool operator==(T, T);
2039 bool operator!=(T, T); */
2042 if (TYPE_PTROB_P (type1
) && TYPE_PTROB_P (type2
))
2044 if (TYPE_PTROB_P (type1
)
2045 && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2
))
2047 type2
= ptrdiff_type_node
;
2051 case TRUNC_DIV_EXPR
:
2052 if (ARITHMETIC_TYPE_P (type1
) && ARITHMETIC_TYPE_P (type2
))
2058 if ((TYPE_PTRMEMFUNC_P (type1
) && TYPE_PTRMEMFUNC_P (type2
))
2059 || (TYPE_PTRMEM_P (type1
) && TYPE_PTRMEM_P (type2
)))
2061 if (TYPE_PTR_TO_MEMBER_P (type1
) && null_ptr_cst_p (args
[1]))
2066 if (TYPE_PTR_TO_MEMBER_P (type2
) && null_ptr_cst_p (args
[0]))
2078 if (ARITHMETIC_TYPE_P (type1
) && ARITHMETIC_TYPE_P (type2
))
2080 if (TYPE_PTR_P (type1
) && TYPE_PTR_P (type2
))
2082 if (TREE_CODE (type1
) == ENUMERAL_TYPE
2083 && TREE_CODE (type2
) == ENUMERAL_TYPE
)
2085 if (TYPE_PTR_P (type1
)
2086 && null_ptr_cst_p (args
[1])
2087 && !uses_template_parms (type1
))
2092 if (null_ptr_cst_p (args
[0])
2093 && TYPE_PTR_P (type2
)
2094 && !uses_template_parms (type2
))
2102 if (ARITHMETIC_TYPE_P (type1
) && ARITHMETIC_TYPE_P (type2
))
2105 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1
) && TYPE_PTROB_P (type2
))
2107 type1
= ptrdiff_type_node
;
2110 if (TYPE_PTROB_P (type1
) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2
))
2112 type2
= ptrdiff_type_node
;
2117 /* 18For every pair of promoted integral types L and R, there exist candi-
2118 date operator functions of the form
2125 where LR is the result of the usual arithmetic conversions between
2128 case TRUNC_MOD_EXPR
:
2134 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1
) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2
))
2138 /* 19For every triple L, VQ, R), where L is an arithmetic or enumeration
2139 type, VQ is either volatile or empty, and R is a promoted arithmetic
2140 type, there exist candidate operator functions of the form
2141 VQ L& operator=(VQ L&, R);
2142 VQ L& operator*=(VQ L&, R);
2143 VQ L& operator/=(VQ L&, R);
2144 VQ L& operator+=(VQ L&, R);
2145 VQ L& operator-=(VQ L&, R);
2147 20For every pair T, VQ), where T is any type and VQ is either volatile
2148 or empty, there exist candidate operator functions of the form
2149 T*VQ& operator=(T*VQ&, T*);
2151 21For every pair T, VQ), where T is a pointer to member type and VQ is
2152 either volatile or empty, there exist candidate operator functions of
2154 VQ T& operator=(VQ T&, T);
2156 22For every triple T, VQ, I), where T is a cv-qualified or cv-
2157 unqualified complete object type, VQ is either volatile or empty, and
2158 I is a promoted integral type, there exist candidate operator func-
2160 T*VQ& operator+=(T*VQ&, I);
2161 T*VQ& operator-=(T*VQ&, I);
2163 23For every triple L, VQ, R), where L is an integral or enumeration
2164 type, VQ is either volatile or empty, and R is a promoted integral
2165 type, there exist candidate operator functions of the form
2167 VQ L& operator%=(VQ L&, R);
2168 VQ L& operator<<=(VQ L&, R);
2169 VQ L& operator>>=(VQ L&, R);
2170 VQ L& operator&=(VQ L&, R);
2171 VQ L& operator^=(VQ L&, R);
2172 VQ L& operator|=(VQ L&, R); */
2179 if (TYPE_PTROB_P (type1
) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2
))
2181 type2
= ptrdiff_type_node
;
2185 case TRUNC_DIV_EXPR
:
2186 if (ARITHMETIC_TYPE_P (type1
) && ARITHMETIC_TYPE_P (type2
))
2190 case TRUNC_MOD_EXPR
:
2196 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1
) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2
))
2201 if (ARITHMETIC_TYPE_P (type1
) && ARITHMETIC_TYPE_P (type2
))
2203 if ((TYPE_PTRMEMFUNC_P (type1
) && TYPE_PTRMEMFUNC_P (type2
))
2204 || (TYPE_PTR_P (type1
) && TYPE_PTR_P (type2
))
2205 || (TYPE_PTRMEM_P (type1
) && TYPE_PTRMEM_P (type2
))
2206 || ((TYPE_PTRMEMFUNC_P (type1
)
2207 || TREE_CODE (type1
) == POINTER_TYPE
)
2208 && null_ptr_cst_p (args
[1])))
2218 type1
= build_reference_type (type1
);
2224 For every pair of promoted arithmetic types L and R, there
2225 exist candidate operator functions of the form
2227 LR operator?(bool, L, R);
2229 where LR is the result of the usual arithmetic conversions
2230 between types L and R.
2232 For every type T, where T is a pointer or pointer-to-member
2233 type, there exist candidate operator functions of the form T
2234 operator?(bool, T, T); */
2236 if (promoted_arithmetic_type_p (type1
)
2237 && promoted_arithmetic_type_p (type2
))
2241 /* Otherwise, the types should be pointers. */
2242 if (!(TYPE_PTR_P (type1
) || TYPE_PTR_TO_MEMBER_P (type1
))
2243 || !(TYPE_PTR_P (type2
) || TYPE_PTR_TO_MEMBER_P (type2
)))
2246 /* We don't check that the two types are the same; the logic
2247 below will actually create two candidates; one in which both
2248 parameter types are TYPE1, and one in which both parameter
2256 /* If we're dealing with two pointer types or two enumeral types,
2257 we need candidates for both of them. */
2258 if (type2
&& !same_type_p (type1
, type2
)
2259 && TREE_CODE (type1
) == TREE_CODE (type2
)
2260 && (TREE_CODE (type1
) == REFERENCE_TYPE
2261 || (TYPE_PTR_P (type1
) && TYPE_PTR_P (type2
))
2262 || (TYPE_PTRMEM_P (type1
) && TYPE_PTRMEM_P (type2
))
2263 || TYPE_PTRMEMFUNC_P (type1
)
2264 || MAYBE_CLASS_TYPE_P (type1
)
2265 || TREE_CODE (type1
) == ENUMERAL_TYPE
))
2267 build_builtin_candidate
2268 (candidates
, fnname
, type1
, type1
, args
, argtypes
, flags
);
2269 build_builtin_candidate
2270 (candidates
, fnname
, type2
, type2
, args
, argtypes
, flags
);
2274 build_builtin_candidate
2275 (candidates
, fnname
, type1
, type2
, args
, argtypes
, flags
);
2279 type_decays_to (tree type
)
2281 if (TREE_CODE (type
) == ARRAY_TYPE
)
2282 return build_pointer_type (TREE_TYPE (type
));
2283 if (TREE_CODE (type
) == FUNCTION_TYPE
)
2284 return build_pointer_type (type
);
2285 if (!MAYBE_CLASS_TYPE_P (type
))
2286 type
= cv_unqualified (type
);
2290 /* There are three conditions of builtin candidates:
2292 1) bool-taking candidates. These are the same regardless of the input.
2293 2) pointer-pair taking candidates. These are generated for each type
2294 one of the input types converts to.
2295 3) arithmetic candidates. According to the standard, we should generate
2296 all of these, but I'm trying not to...
2298 Here we generate a superset of the possible candidates for this particular
2299 case. That is a subset of the full set the standard defines, plus some
2300 other cases which the standard disallows. add_builtin_candidate will
2301 filter out the invalid set. */
2304 add_builtin_candidates (struct z_candidate
**candidates
, enum tree_code code
,
2305 enum tree_code code2
, tree fnname
, tree
*args
,
2310 tree type
, argtypes
[3];
2311 /* TYPES[i] is the set of possible builtin-operator parameter types
2312 we will consider for the Ith argument. These are represented as
2313 a TREE_LIST; the TREE_VALUE of each node is the potential
2317 for (i
= 0; i
< 3; ++i
)
2320 argtypes
[i
] = unlowered_expr_type (args
[i
]);
2322 argtypes
[i
] = NULL_TREE
;
2327 /* 4 For every pair T, VQ), where T is an arithmetic or enumeration type,
2328 and VQ is either volatile or empty, there exist candidate operator
2329 functions of the form
2330 VQ T& operator++(VQ T&); */
2332 case POSTINCREMENT_EXPR
:
2333 case PREINCREMENT_EXPR
:
2334 case POSTDECREMENT_EXPR
:
2335 case PREDECREMENT_EXPR
:
2340 /* 24There also exist candidate operator functions of the form
2341 bool operator!(bool);
2342 bool operator&&(bool, bool);
2343 bool operator||(bool, bool); */
2345 case TRUTH_NOT_EXPR
:
2346 build_builtin_candidate
2347 (candidates
, fnname
, boolean_type_node
,
2348 NULL_TREE
, args
, argtypes
, flags
);
2351 case TRUTH_ORIF_EXPR
:
2352 case TRUTH_ANDIF_EXPR
:
2353 build_builtin_candidate
2354 (candidates
, fnname
, boolean_type_node
,
2355 boolean_type_node
, args
, argtypes
, flags
);
2377 types
[0] = types
[1] = NULL_TREE
;
2379 for (i
= 0; i
< 2; ++i
)
2383 else if (MAYBE_CLASS_TYPE_P (argtypes
[i
]))
2387 if (i
== 0 && code
== MODIFY_EXPR
&& code2
== NOP_EXPR
)
2390 convs
= lookup_conversions (argtypes
[i
],
2391 /*lookup_template_convs_p=*/false);
2393 if (code
== COND_EXPR
)
2395 if (real_lvalue_p (args
[i
]))
2396 types
[i
] = tree_cons
2397 (NULL_TREE
, build_reference_type (argtypes
[i
]), types
[i
]);
2399 types
[i
] = tree_cons
2400 (NULL_TREE
, TYPE_MAIN_VARIANT (argtypes
[i
]), types
[i
]);
2406 for (; convs
; convs
= TREE_CHAIN (convs
))
2408 type
= TREE_TYPE (convs
);
2411 && (TREE_CODE (type
) != REFERENCE_TYPE
2412 || CP_TYPE_CONST_P (TREE_TYPE (type
))))
2415 if (code
== COND_EXPR
&& TREE_CODE (type
) == REFERENCE_TYPE
)
2416 types
[i
] = tree_cons (NULL_TREE
, type
, types
[i
]);
2418 type
= non_reference (type
);
2419 if (i
!= 0 || ! ref1
)
2421 type
= TYPE_MAIN_VARIANT (type_decays_to (type
));
2422 if (enum_p
&& TREE_CODE (type
) == ENUMERAL_TYPE
)
2423 types
[i
] = tree_cons (NULL_TREE
, type
, types
[i
]);
2424 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type
))
2425 type
= type_promotes_to (type
);
2428 if (! value_member (type
, types
[i
]))
2429 types
[i
] = tree_cons (NULL_TREE
, type
, types
[i
]);
2434 if (code
== COND_EXPR
&& real_lvalue_p (args
[i
]))
2435 types
[i
] = tree_cons
2436 (NULL_TREE
, build_reference_type (argtypes
[i
]), types
[i
]);
2437 type
= non_reference (argtypes
[i
]);
2438 if (i
!= 0 || ! ref1
)
2440 type
= TYPE_MAIN_VARIANT (type_decays_to (type
));
2441 if (enum_p
&& UNSCOPED_ENUM_P (type
))
2442 types
[i
] = tree_cons (NULL_TREE
, type
, types
[i
]);
2443 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type
))
2444 type
= type_promotes_to (type
);
2446 types
[i
] = tree_cons (NULL_TREE
, type
, types
[i
]);
2450 /* Run through the possible parameter types of both arguments,
2451 creating candidates with those parameter types. */
2452 for (; types
[0]; types
[0] = TREE_CHAIN (types
[0]))
2455 for (type
= types
[1]; type
; type
= TREE_CHAIN (type
))
2456 add_builtin_candidate
2457 (candidates
, code
, code2
, fnname
, TREE_VALUE (types
[0]),
2458 TREE_VALUE (type
), args
, argtypes
, flags
);
2460 add_builtin_candidate
2461 (candidates
, code
, code2
, fnname
, TREE_VALUE (types
[0]),
2462 NULL_TREE
, args
, argtypes
, flags
);
2467 /* If TMPL can be successfully instantiated as indicated by
2468 EXPLICIT_TARGS and ARGLIST, adds the instantiation to CANDIDATES.
2470 TMPL is the template. EXPLICIT_TARGS are any explicit template
2471 arguments. ARGLIST is the arguments provided at the call-site.
2472 This does not change ARGLIST. The RETURN_TYPE is the desired type
2473 for conversion operators. If OBJ is NULL_TREE, FLAGS and CTYPE are
2474 as for add_function_candidate. If an OBJ is supplied, FLAGS and
2475 CTYPE are ignored, and OBJ is as for add_conv_candidate. */
2477 static struct z_candidate
*
2478 add_template_candidate_real (struct z_candidate
**candidates
, tree tmpl
,
2479 tree ctype
, tree explicit_targs
, tree first_arg
,
2480 const VEC(tree
,gc
) *arglist
, tree return_type
,
2481 tree access_path
, tree conversion_path
,
2482 int flags
, tree obj
, unification_kind_t strict
)
2484 int ntparms
= DECL_NTPARMS (tmpl
);
2485 tree targs
= make_tree_vec (ntparms
);
2486 unsigned int len
= VEC_length (tree
, arglist
);
2487 unsigned int nargs
= (first_arg
== NULL_TREE
? 0 : 1) + len
;
2488 unsigned int skip_without_in_chrg
= 0;
2489 tree first_arg_without_in_chrg
= first_arg
;
2490 tree
*args_without_in_chrg
;
2491 unsigned int nargs_without_in_chrg
;
2492 unsigned int ia
, ix
;
2494 struct z_candidate
*cand
;
2498 /* We don't do deduction on the in-charge parameter, the VTT
2499 parameter or 'this'. */
2500 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (tmpl
))
2502 if (first_arg_without_in_chrg
!= NULL_TREE
)
2503 first_arg_without_in_chrg
= NULL_TREE
;
2505 ++skip_without_in_chrg
;
2508 if ((DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (tmpl
)
2509 || DECL_BASE_CONSTRUCTOR_P (tmpl
))
2510 && CLASSTYPE_VBASECLASSES (DECL_CONTEXT (tmpl
)))
2512 if (first_arg_without_in_chrg
!= NULL_TREE
)
2513 first_arg_without_in_chrg
= NULL_TREE
;
2515 ++skip_without_in_chrg
;
2518 if (len
< skip_without_in_chrg
)
2521 nargs_without_in_chrg
= ((first_arg_without_in_chrg
!= NULL_TREE
? 1 : 0)
2522 + (len
- skip_without_in_chrg
));
2523 args_without_in_chrg
= XALLOCAVEC (tree
, nargs_without_in_chrg
);
2525 if (first_arg_without_in_chrg
!= NULL_TREE
)
2527 args_without_in_chrg
[ia
] = first_arg_without_in_chrg
;
2530 for (ix
= skip_without_in_chrg
;
2531 VEC_iterate (tree
, arglist
, ix
, arg
);
2534 args_without_in_chrg
[ia
] = arg
;
2537 gcc_assert (ia
== nargs_without_in_chrg
);
2539 i
= fn_type_unification (tmpl
, explicit_targs
, targs
,
2540 args_without_in_chrg
,
2541 nargs_without_in_chrg
,
2542 return_type
, strict
, flags
);
2547 fn
= instantiate_template (tmpl
, targs
, tf_none
);
2548 if (fn
== error_mark_node
)
2553 A member function template is never instantiated to perform the
2554 copy of a class object to an object of its class type.
2556 It's a little unclear what this means; the standard explicitly
2557 does allow a template to be used to copy a class. For example,
2562 template <class T> A(const T&);
2565 void g () { A a (f ()); }
2567 the member template will be used to make the copy. The section
2568 quoted above appears in the paragraph that forbids constructors
2569 whose only parameter is (a possibly cv-qualified variant of) the
2570 class type, and a logical interpretation is that the intent was
2571 to forbid the instantiation of member templates which would then
2573 if (DECL_CONSTRUCTOR_P (fn
) && nargs
== 2)
2575 tree arg_types
= FUNCTION_FIRST_USER_PARMTYPE (fn
);
2576 if (arg_types
&& same_type_p (TYPE_MAIN_VARIANT (TREE_VALUE (arg_types
)),
2581 if (obj
!= NULL_TREE
)
2582 /* Aha, this is a conversion function. */
2583 cand
= add_conv_candidate (candidates
, fn
, obj
, first_arg
, arglist
,
2584 access_path
, conversion_path
);
2586 cand
= add_function_candidate (candidates
, fn
, ctype
,
2587 first_arg
, arglist
, access_path
,
2588 conversion_path
, flags
);
2589 if (DECL_TI_TEMPLATE (fn
) != tmpl
)
2590 /* This situation can occur if a member template of a template
2591 class is specialized. Then, instantiate_template might return
2592 an instantiation of the specialization, in which case the
2593 DECL_TI_TEMPLATE field will point at the original
2594 specialization. For example:
2596 template <class T> struct S { template <class U> void f(U);
2597 template <> void f(int) {}; };
2601 Here, TMPL will be template <class U> S<double>::f(U).
2602 And, instantiate template will give us the specialization
2603 template <> S<double>::f(int). But, the DECL_TI_TEMPLATE field
2604 for this will point at template <class T> template <> S<T>::f(int),
2605 so that we can find the definition. For the purposes of
2606 overload resolution, however, we want the original TMPL. */
2607 cand
->template_decl
= build_template_info (tmpl
, targs
);
2609 cand
->template_decl
= DECL_TEMPLATE_INFO (fn
);
2610 cand
->explicit_targs
= explicit_targs
;
2614 return add_candidate (candidates
, tmpl
, first_arg
, arglist
, nargs
, NULL
,
2615 access_path
, conversion_path
, 0);
2619 static struct z_candidate
*
2620 add_template_candidate (struct z_candidate
**candidates
, tree tmpl
, tree ctype
,
2621 tree explicit_targs
, tree first_arg
,
2622 const VEC(tree
,gc
) *arglist
, tree return_type
,
2623 tree access_path
, tree conversion_path
, int flags
,
2624 unification_kind_t strict
)
2627 add_template_candidate_real (candidates
, tmpl
, ctype
,
2628 explicit_targs
, first_arg
, arglist
,
2629 return_type
, access_path
, conversion_path
,
2630 flags
, NULL_TREE
, strict
);
2634 static struct z_candidate
*
2635 add_template_conv_candidate (struct z_candidate
**candidates
, tree tmpl
,
2636 tree obj
, tree first_arg
,
2637 const VEC(tree
,gc
) *arglist
,
2638 tree return_type
, tree access_path
,
2639 tree conversion_path
)
2642 add_template_candidate_real (candidates
, tmpl
, NULL_TREE
, NULL_TREE
,
2643 first_arg
, arglist
, return_type
, access_path
,
2644 conversion_path
, 0, obj
, DEDUCE_CONV
);
2647 /* The CANDS are the set of candidates that were considered for
2648 overload resolution. Return the set of viable candidates, or CANDS
2649 if none are viable. If any of the candidates were viable, set
2650 *ANY_VIABLE_P to true. STRICT_P is true if a candidate should be
2651 considered viable only if it is strictly viable. */
2653 static struct z_candidate
*
2654 splice_viable (struct z_candidate
*cands
,
2658 struct z_candidate
*viable
;
2659 struct z_candidate
**last_viable
;
2660 struct z_candidate
**cand
;
2663 last_viable
= &viable
;
2664 *any_viable_p
= false;
2669 struct z_candidate
*c
= *cand
;
2670 if (strict_p
? c
->viable
== 1 : c
->viable
)
2675 last_viable
= &c
->next
;
2676 *any_viable_p
= true;
2682 return viable
? viable
: cands
;
2686 any_strictly_viable (struct z_candidate
*cands
)
2688 for (; cands
; cands
= cands
->next
)
2689 if (cands
->viable
== 1)
2694 /* OBJ is being used in an expression like "OBJ.f (...)". In other
2695 words, it is about to become the "this" pointer for a member
2696 function call. Take the address of the object. */
2699 build_this (tree obj
)
2701 /* In a template, we are only concerned about the type of the
2702 expression, so we can take a shortcut. */
2703 if (processing_template_decl
)
2704 return build_address (obj
);
2706 return cp_build_unary_op (ADDR_EXPR
, obj
, 0, tf_warning_or_error
);
2709 /* Returns true iff functions are equivalent. Equivalent functions are
2710 not '==' only if one is a function-local extern function or if
2711 both are extern "C". */
2714 equal_functions (tree fn1
, tree fn2
)
2716 if (TREE_CODE (fn1
) != TREE_CODE (fn2
))
2718 if (TREE_CODE (fn1
) == TEMPLATE_DECL
)
2720 if (DECL_LOCAL_FUNCTION_P (fn1
) || DECL_LOCAL_FUNCTION_P (fn2
)
2721 || DECL_EXTERN_C_FUNCTION_P (fn1
))
2722 return decls_match (fn1
, fn2
);
2726 /* Print information about one overload candidate CANDIDATE. MSGSTR
2727 is the text to print before the candidate itself.
2729 NOTE: Unlike most diagnostic functions in GCC, MSGSTR is expected
2730 to have been run through gettext by the caller. This wart makes
2731 life simpler in print_z_candidates and for the translators. */
2734 print_z_candidate (const char *msgstr
, struct z_candidate
*candidate
)
2736 if (TREE_CODE (candidate
->fn
) == IDENTIFIER_NODE
)
2738 if (candidate
->num_convs
== 3)
2739 inform (input_location
, "%s %D(%T, %T, %T) <built-in>", msgstr
, candidate
->fn
,
2740 candidate
->convs
[0]->type
,
2741 candidate
->convs
[1]->type
,
2742 candidate
->convs
[2]->type
);
2743 else if (candidate
->num_convs
== 2)
2744 inform (input_location
, "%s %D(%T, %T) <built-in>", msgstr
, candidate
->fn
,
2745 candidate
->convs
[0]->type
,
2746 candidate
->convs
[1]->type
);
2748 inform (input_location
, "%s %D(%T) <built-in>", msgstr
, candidate
->fn
,
2749 candidate
->convs
[0]->type
);
2751 else if (TYPE_P (candidate
->fn
))
2752 inform (input_location
, "%s %T <conversion>", msgstr
, candidate
->fn
);
2753 else if (candidate
->viable
== -1)
2754 inform (input_location
, "%s %+#D <near match>", msgstr
, candidate
->fn
);
2755 else if (DECL_DELETED_FN (STRIP_TEMPLATE (candidate
->fn
)))
2756 inform (input_location
, "%s %+#D <deleted>", msgstr
, candidate
->fn
);
2758 inform (input_location
, "%s %+#D", msgstr
, candidate
->fn
);
2762 print_z_candidates (struct z_candidate
*candidates
)
2765 struct z_candidate
*cand1
;
2766 struct z_candidate
**cand2
;
2772 /* Remove non-viable deleted candidates. */
2774 for (cand2
= &cand1
; *cand2
; )
2776 if (TREE_CODE ((*cand2
)->fn
) == FUNCTION_DECL
2777 && !(*cand2
)->viable
2778 && DECL_DELETED_FN ((*cand2
)->fn
))
2779 *cand2
= (*cand2
)->next
;
2781 cand2
= &(*cand2
)->next
;
2783 /* ...if there are any non-deleted ones. */
2787 /* There may be duplicates in the set of candidates. We put off
2788 checking this condition as long as possible, since we have no way
2789 to eliminate duplicates from a set of functions in less than n^2
2790 time. Now we are about to emit an error message, so it is more
2791 permissible to go slowly. */
2792 for (cand1
= candidates
; cand1
; cand1
= cand1
->next
)
2794 tree fn
= cand1
->fn
;
2795 /* Skip builtin candidates and conversion functions. */
2798 cand2
= &cand1
->next
;
2801 if (DECL_P ((*cand2
)->fn
)
2802 && equal_functions (fn
, (*cand2
)->fn
))
2803 *cand2
= (*cand2
)->next
;
2805 cand2
= &(*cand2
)->next
;
2809 str
= candidates
->next
? _("candidates are:") : _("candidate is:");
2811 for (; candidates
; candidates
= candidates
->next
)
2813 print_z_candidate (spaces
? spaces
: str
, candidates
);
2814 spaces
= spaces
? spaces
: get_spaces (str
);
2819 /* USER_SEQ is a user-defined conversion sequence, beginning with a
2820 USER_CONV. STD_SEQ is the standard conversion sequence applied to
2821 the result of the conversion function to convert it to the final
2822 desired type. Merge the two sequences into a single sequence,
2823 and return the merged sequence. */
2826 merge_conversion_sequences (conversion
*user_seq
, conversion
*std_seq
)
2830 gcc_assert (user_seq
->kind
== ck_user
);
2832 /* Find the end of the second conversion sequence. */
2834 while ((*t
)->kind
!= ck_identity
)
2835 t
= &((*t
)->u
.next
);
2837 /* Replace the identity conversion with the user conversion
2841 /* The entire sequence is a user-conversion sequence. */
2842 std_seq
->user_conv_p
= true;
2847 /* Handle overload resolution for initializing an object of class type from
2848 an initializer list. First we look for a suitable constructor that
2849 takes a std::initializer_list; if we don't find one, we then look for a
2850 non-list constructor.
2852 Parameters are as for add_candidates, except that the arguments are in
2853 the form of a CONSTRUCTOR (the initializer list) rather than a VEC, and
2854 the RETURN_TYPE parameter is replaced by TOTYPE, the desired type. */
2857 add_list_candidates (tree fns
, tree first_arg
,
2858 tree init_list
, tree totype
,
2859 tree explicit_targs
, bool template_only
,
2860 tree conversion_path
, tree access_path
,
2862 struct z_candidate
**candidates
)
2866 gcc_assert (*candidates
== NULL
);
2868 /* For list-initialization we consider explicit constructors, but
2869 give an error if one is selected. */
2870 flags
&= ~LOOKUP_ONLYCONVERTING
;
2871 /* And we don't allow narrowing conversions. We also use this flag to
2872 avoid the copy constructor call for copy-list-initialization. */
2873 flags
|= LOOKUP_NO_NARROWING
;
2875 /* Always use the default constructor if the list is empty (DR 990). */
2876 if (CONSTRUCTOR_NELTS (init_list
) == 0
2877 && TYPE_HAS_DEFAULT_CONSTRUCTOR (totype
))
2879 /* If the class has a list ctor, try passing the list as a single
2880 argument first, but only consider list ctors. */
2881 else if (TYPE_HAS_LIST_CTOR (totype
))
2883 flags
|= LOOKUP_LIST_ONLY
;
2884 args
= make_tree_vector_single (init_list
);
2885 add_candidates (fns
, first_arg
, args
, NULL_TREE
,
2886 explicit_targs
, template_only
, conversion_path
,
2887 access_path
, flags
, candidates
);
2888 if (any_strictly_viable (*candidates
))
2892 args
= ctor_to_vec (init_list
);
2894 /* We aren't looking for list-ctors anymore. */
2895 flags
&= ~LOOKUP_LIST_ONLY
;
2896 /* We allow more user-defined conversions within an init-list. */
2897 flags
&= ~LOOKUP_NO_CONVERSION
;
2898 /* But not for the copy ctor. */
2899 flags
|= LOOKUP_NO_COPY_CTOR_CONVERSION
;
2901 add_candidates (fns
, first_arg
, args
, NULL_TREE
,
2902 explicit_targs
, template_only
, conversion_path
,
2903 access_path
, flags
, candidates
);
2906 /* Returns the best overload candidate to perform the requested
2907 conversion. This function is used for three the overloading situations
2908 described in [over.match.copy], [over.match.conv], and [over.match.ref].
2909 If TOTYPE is a REFERENCE_TYPE, we're trying to find an lvalue binding as
2910 per [dcl.init.ref], so we ignore temporary bindings. */
2912 static struct z_candidate
*
2913 build_user_type_conversion_1 (tree totype
, tree expr
, int flags
)
2915 struct z_candidate
*candidates
, *cand
;
2916 tree fromtype
= TREE_TYPE (expr
);
2917 tree ctors
= NULL_TREE
;
2918 tree conv_fns
= NULL_TREE
;
2919 conversion
*conv
= NULL
;
2920 tree first_arg
= NULL_TREE
;
2921 VEC(tree
,gc
) *args
= NULL
;
2925 /* We represent conversion within a hierarchy using RVALUE_CONV and
2926 BASE_CONV, as specified by [over.best.ics]; these become plain
2927 constructor calls, as specified in [dcl.init]. */
2928 gcc_assert (!MAYBE_CLASS_TYPE_P (fromtype
) || !MAYBE_CLASS_TYPE_P (totype
)
2929 || !DERIVED_FROM_P (totype
, fromtype
));
2931 if (MAYBE_CLASS_TYPE_P (totype
))
2932 ctors
= lookup_fnfields (totype
, complete_ctor_identifier
, 0);
2934 if (MAYBE_CLASS_TYPE_P (fromtype
))
2936 tree to_nonref
= non_reference (totype
);
2937 if (same_type_ignoring_top_level_qualifiers_p (to_nonref
, fromtype
) ||
2938 (CLASS_TYPE_P (to_nonref
) && CLASS_TYPE_P (fromtype
)
2939 && DERIVED_FROM_P (to_nonref
, fromtype
)))
2941 /* [class.conv.fct] A conversion function is never used to
2942 convert a (possibly cv-qualified) object to the (possibly
2943 cv-qualified) same object type (or a reference to it), to a
2944 (possibly cv-qualified) base class of that type (or a
2945 reference to it)... */
2948 conv_fns
= lookup_conversions (fromtype
,
2949 /*lookup_template_convs_p=*/true);
2953 flags
|= LOOKUP_NO_CONVERSION
;
2954 if (BRACE_ENCLOSED_INITIALIZER_P (expr
))
2955 flags
|= LOOKUP_NO_NARROWING
;
2957 /* It's OK to bind a temporary for converting constructor arguments, but
2958 not in converting the return value of a conversion operator. */
2959 convflags
= ((flags
& LOOKUP_NO_TEMP_BIND
) | LOOKUP_NO_CONVERSION
);
2960 flags
&= ~LOOKUP_NO_TEMP_BIND
;
2964 int ctorflags
= flags
;
2965 ctors
= BASELINK_FUNCTIONS (ctors
);
2967 first_arg
= build_int_cst (build_pointer_type (totype
), 0);
2969 /* We should never try to call the abstract or base constructor
2971 gcc_assert (!DECL_HAS_IN_CHARGE_PARM_P (OVL_CURRENT (ctors
))
2972 && !DECL_HAS_VTT_PARM_P (OVL_CURRENT (ctors
)));
2974 if (BRACE_ENCLOSED_INITIALIZER_P (expr
))
2976 /* List-initialization. */
2977 add_list_candidates (ctors
, first_arg
, expr
, totype
, NULL_TREE
,
2978 false, TYPE_BINFO (totype
), TYPE_BINFO (totype
),
2979 ctorflags
, &candidates
);
2983 args
= make_tree_vector_single (expr
);
2984 add_candidates (ctors
, first_arg
, args
, NULL_TREE
, NULL_TREE
, false,
2985 TYPE_BINFO (totype
), TYPE_BINFO (totype
),
2986 ctorflags
, &candidates
);
2989 for (cand
= candidates
; cand
; cand
= cand
->next
)
2991 cand
->second_conv
= build_identity_conv (totype
, NULL_TREE
);
2993 /* If totype isn't a reference, and LOOKUP_NO_TEMP_BIND isn't
2994 set, then this is copy-initialization. In that case, "The
2995 result of the call is then used to direct-initialize the
2996 object that is the destination of the copy-initialization."
2999 We represent this in the conversion sequence with an
3000 rvalue conversion, which means a constructor call. */
3001 if (TREE_CODE (totype
) != REFERENCE_TYPE
3002 && !(convflags
& LOOKUP_NO_TEMP_BIND
))
3004 = build_conv (ck_rvalue
, totype
, cand
->second_conv
);
3009 first_arg
= build_this (expr
);
3011 for (; conv_fns
; conv_fns
= TREE_CHAIN (conv_fns
))
3013 tree conversion_path
= TREE_PURPOSE (conv_fns
);
3014 struct z_candidate
*old_candidates
;
3016 /* If we are called to convert to a reference type, we are trying to
3017 find an lvalue binding, so don't even consider temporaries. If
3018 we don't find an lvalue binding, the caller will try again to
3019 look for a temporary binding. */
3020 if (TREE_CODE (totype
) == REFERENCE_TYPE
)
3021 convflags
|= LOOKUP_NO_TEMP_BIND
;
3023 old_candidates
= candidates
;
3024 add_candidates (TREE_VALUE (conv_fns
), first_arg
, NULL
, totype
,
3026 conversion_path
, TYPE_BINFO (fromtype
),
3027 flags
, &candidates
);
3029 for (cand
= candidates
; cand
!= old_candidates
; cand
= cand
->next
)
3032 = implicit_conversion (totype
,
3033 TREE_TYPE (TREE_TYPE (cand
->fn
)),
3035 /*c_cast_p=*/false, convflags
);
3037 /* If LOOKUP_NO_TEMP_BIND isn't set, then this is
3038 copy-initialization. In that case, "The result of the
3039 call is then used to direct-initialize the object that is
3040 the destination of the copy-initialization." [dcl.init]
3042 We represent this in the conversion sequence with an
3043 rvalue conversion, which means a constructor call. But
3044 don't add a second rvalue conversion if there's already
3045 one there. Which there really shouldn't be, but it's
3046 harmless since we'd add it here anyway. */
3047 if (ics
&& MAYBE_CLASS_TYPE_P (totype
) && ics
->kind
!= ck_rvalue
3048 && !(convflags
& LOOKUP_NO_TEMP_BIND
))
3049 ics
= build_conv (ck_rvalue
, totype
, ics
);
3051 cand
->second_conv
= ics
;
3055 else if (cand
->viable
== 1 && ics
->bad_p
)
3060 candidates
= splice_viable (candidates
, pedantic
, &any_viable_p
);
3064 cand
= tourney (candidates
);
3067 if (flags
& LOOKUP_COMPLAIN
)
3069 error ("conversion from %qT to %qT is ambiguous",
3071 print_z_candidates (candidates
);
3074 cand
= candidates
; /* any one will do */
3075 cand
->second_conv
= build_ambiguous_conv (totype
, expr
);
3076 cand
->second_conv
->user_conv_p
= true;
3077 if (!any_strictly_viable (candidates
))
3078 cand
->second_conv
->bad_p
= true;
3079 /* If there are viable candidates, don't set ICS_BAD_FLAG; an
3080 ambiguous conversion is no worse than another user-defined
3086 /* Build the user conversion sequence. */
3089 (DECL_CONSTRUCTOR_P (cand
->fn
)
3090 ? totype
: non_reference (TREE_TYPE (TREE_TYPE (cand
->fn
)))),
3091 build_identity_conv (TREE_TYPE (expr
), expr
));
3094 /* Remember that this was a list-initialization. */
3095 if (flags
& LOOKUP_NO_NARROWING
)
3096 conv
->check_narrowing
= true;
3098 /* Combine it with the second conversion sequence. */
3099 cand
->second_conv
= merge_conversion_sequences (conv
,
3102 if (cand
->viable
== -1)
3103 cand
->second_conv
->bad_p
= true;
3109 build_user_type_conversion (tree totype
, tree expr
, int flags
)
3111 struct z_candidate
*cand
3112 = build_user_type_conversion_1 (totype
, expr
, flags
);
3116 if (cand
->second_conv
->kind
== ck_ambig
)
3117 return error_mark_node
;
3118 expr
= convert_like (cand
->second_conv
, expr
, tf_warning_or_error
);
3119 return convert_from_reference (expr
);
3124 /* Do any initial processing on the arguments to a function call. */
3126 static VEC(tree
,gc
) *
3127 resolve_args (VEC(tree
,gc
) *args
)
3132 for (ix
= 0; VEC_iterate (tree
, args
, ix
, arg
); ++ix
)
3134 if (error_operand_p (arg
))
3136 else if (VOID_TYPE_P (TREE_TYPE (arg
)))
3138 error ("invalid use of void expression");
3141 else if (invalid_nonstatic_memfn_p (arg
, tf_warning_or_error
))
3147 /* Perform overload resolution on FN, which is called with the ARGS.
3149 Return the candidate function selected by overload resolution, or
3150 NULL if the event that overload resolution failed. In the case
3151 that overload resolution fails, *CANDIDATES will be the set of
3152 candidates considered, and ANY_VIABLE_P will be set to true or
3153 false to indicate whether or not any of the candidates were
3156 The ARGS should already have gone through RESOLVE_ARGS before this
3157 function is called. */
3159 static struct z_candidate
*
3160 perform_overload_resolution (tree fn
,
3161 const VEC(tree
,gc
) *args
,
3162 struct z_candidate
**candidates
,
3165 struct z_candidate
*cand
;
3166 tree explicit_targs
= NULL_TREE
;
3167 int template_only
= 0;
3170 *any_viable_p
= true;
3173 gcc_assert (TREE_CODE (fn
) == FUNCTION_DECL
3174 || TREE_CODE (fn
) == TEMPLATE_DECL
3175 || TREE_CODE (fn
) == OVERLOAD
3176 || TREE_CODE (fn
) == TEMPLATE_ID_EXPR
);
3178 if (TREE_CODE (fn
) == TEMPLATE_ID_EXPR
)
3180 explicit_targs
= TREE_OPERAND (fn
, 1);
3181 fn
= TREE_OPERAND (fn
, 0);
3185 /* Add the various candidate functions. */
3186 add_candidates (fn
, NULL_TREE
, args
, NULL_TREE
,
3187 explicit_targs
, template_only
,
3188 /*conversion_path=*/NULL_TREE
,
3189 /*access_path=*/NULL_TREE
,
3193 *candidates
= splice_viable (*candidates
, pedantic
, any_viable_p
);
3197 cand
= tourney (*candidates
);
3201 /* Return an expression for a call to FN (a namespace-scope function,
3202 or a static member function) with the ARGS. This may change
3206 build_new_function_call (tree fn
, VEC(tree
,gc
) **args
, bool koenig_p
,
3207 tsubst_flags_t complain
)
3209 struct z_candidate
*candidates
, *cand
;
3214 if (args
!= NULL
&& *args
!= NULL
)
3216 *args
= resolve_args (*args
);
3218 return error_mark_node
;
3221 /* If this function was found without using argument dependent
3222 lookup, then we want to ignore any undeclared friend
3228 fn
= remove_hidden_names (fn
);
3231 if (complain
& tf_error
)
3232 error ("no matching function for call to %<%D(%A)%>",
3233 DECL_NAME (OVL_CURRENT (orig_fn
)),
3234 build_tree_list_vec (*args
));
3235 return error_mark_node
;
3239 /* Get the high-water mark for the CONVERSION_OBSTACK. */
3240 p
= conversion_obstack_alloc (0);
3242 cand
= perform_overload_resolution (fn
, *args
, &candidates
, &any_viable_p
);
3246 if (complain
& tf_error
)
3248 if (!any_viable_p
&& candidates
&& ! candidates
->next
3249 && (TREE_CODE (candidates
->fn
) == FUNCTION_DECL
))
3250 return cp_build_function_call_vec (candidates
->fn
, args
, complain
);
3251 if (TREE_CODE (fn
) == TEMPLATE_ID_EXPR
)
3252 fn
= TREE_OPERAND (fn
, 0);
3254 error ("no matching function for call to %<%D(%A)%>",
3255 DECL_NAME (OVL_CURRENT (fn
)), build_tree_list_vec (*args
));
3257 error ("call of overloaded %<%D(%A)%> is ambiguous",
3258 DECL_NAME (OVL_CURRENT (fn
)), build_tree_list_vec (*args
));
3260 print_z_candidates (candidates
);
3262 result
= error_mark_node
;
3265 result
= build_over_call (cand
, LOOKUP_NORMAL
, complain
);
3267 /* Free all the conversions we allocated. */
3268 obstack_free (&conversion_obstack
, p
);
3273 /* Build a call to a global operator new. FNNAME is the name of the
3274 operator (either "operator new" or "operator new[]") and ARGS are
3275 the arguments provided. This may change ARGS. *SIZE points to the
3276 total number of bytes required by the allocation, and is updated if
3277 that is changed here. *COOKIE_SIZE is non-NULL if a cookie should
3278 be used. If this function determines that no cookie should be
3279 used, after all, *COOKIE_SIZE is set to NULL_TREE. If FN is
3280 non-NULL, it will be set, upon return, to the allocation function
3284 build_operator_new_call (tree fnname
, VEC(tree
,gc
) **args
,
3285 tree
*size
, tree
*cookie_size
,
3289 struct z_candidate
*candidates
;
3290 struct z_candidate
*cand
;
3295 VEC_safe_insert (tree
, gc
, *args
, 0, *size
);
3296 *args
= resolve_args (*args
);
3298 return error_mark_node
;
3304 If this lookup fails to find the name, or if the allocated type
3305 is not a class type, the allocation function's name is looked
3306 up in the global scope.
3308 we disregard block-scope declarations of "operator new". */
3309 fns
= lookup_function_nonclass (fnname
, *args
, /*block_p=*/false);
3311 /* Figure out what function is being called. */
3312 cand
= perform_overload_resolution (fns
, *args
, &candidates
, &any_viable_p
);
3314 /* If no suitable function could be found, issue an error message
3319 error ("no matching function for call to %<%D(%A)%>",
3320 DECL_NAME (OVL_CURRENT (fns
)), build_tree_list_vec (*args
));
3322 error ("call of overloaded %<%D(%A)%> is ambiguous",
3323 DECL_NAME (OVL_CURRENT (fns
)), build_tree_list_vec (*args
));
3325 print_z_candidates (candidates
);
3326 return error_mark_node
;
3329 /* If a cookie is required, add some extra space. Whether
3330 or not a cookie is required cannot be determined until
3331 after we know which function was called. */
3334 bool use_cookie
= true;
3335 if (!abi_version_at_least (2))
3337 /* In G++ 3.2, the check was implemented incorrectly; it
3338 looked at the placement expression, rather than the
3339 type of the function. */
3340 if (VEC_length (tree
, *args
) == 2
3341 && same_type_p (TREE_TYPE (VEC_index (tree
, *args
, 1)),
3349 arg_types
= TYPE_ARG_TYPES (TREE_TYPE (cand
->fn
));
3350 /* Skip the size_t parameter. */
3351 arg_types
= TREE_CHAIN (arg_types
);
3352 /* Check the remaining parameters (if any). */
3354 && TREE_CHAIN (arg_types
) == void_list_node
3355 && same_type_p (TREE_VALUE (arg_types
),
3359 /* If we need a cookie, adjust the number of bytes allocated. */
3362 /* Update the total size. */
3363 *size
= size_binop (PLUS_EXPR
, *size
, *cookie_size
);
3364 /* Update the argument list to reflect the adjusted size. */
3365 VEC_replace (tree
, *args
, 0, *size
);
3368 *cookie_size
= NULL_TREE
;
3371 /* Tell our caller which function we decided to call. */
3375 /* Build the CALL_EXPR. */
3376 return build_over_call (cand
, LOOKUP_NORMAL
, tf_warning_or_error
);
3379 /* Build a new call to operator(). This may change ARGS. */
3382 build_op_call (tree obj
, VEC(tree
,gc
) **args
, tsubst_flags_t complain
)
3384 struct z_candidate
*candidates
= 0, *cand
;
3385 tree fns
, convs
, first_mem_arg
= NULL_TREE
;
3386 tree type
= TREE_TYPE (obj
);
3388 tree result
= NULL_TREE
;
3391 if (error_operand_p (obj
))
3392 return error_mark_node
;
3394 obj
= prep_operand (obj
);
3396 if (TYPE_PTRMEMFUNC_P (type
))
3398 if (complain
& tf_error
)
3399 /* It's no good looking for an overloaded operator() on a
3400 pointer-to-member-function. */
3401 error ("pointer-to-member function %E cannot be called without an object; consider using .* or ->*", obj
);
3402 return error_mark_node
;
3405 if (TYPE_BINFO (type
))
3407 fns
= lookup_fnfields (TYPE_BINFO (type
), ansi_opname (CALL_EXPR
), 1);
3408 if (fns
== error_mark_node
)
3409 return error_mark_node
;
3414 if (args
!= NULL
&& *args
!= NULL
)
3416 *args
= resolve_args (*args
);
3418 return error_mark_node
;
3421 /* Get the high-water mark for the CONVERSION_OBSTACK. */
3422 p
= conversion_obstack_alloc (0);
3426 first_mem_arg
= build_this (obj
);
3428 add_candidates (BASELINK_FUNCTIONS (fns
),
3429 first_mem_arg
, *args
, NULL_TREE
,
3431 BASELINK_BINFO (fns
), BASELINK_ACCESS_BINFO (fns
),
3432 LOOKUP_NORMAL
, &candidates
);
3435 convs
= lookup_conversions (type
, /*lookup_template_convs_p=*/true);
3437 for (; convs
; convs
= TREE_CHAIN (convs
))
3439 tree fns
= TREE_VALUE (convs
);
3440 tree totype
= TREE_TYPE (convs
);
3442 if ((TREE_CODE (totype
) == POINTER_TYPE
3443 && TREE_CODE (TREE_TYPE (totype
)) == FUNCTION_TYPE
)
3444 || (TREE_CODE (totype
) == REFERENCE_TYPE
3445 && TREE_CODE (TREE_TYPE (totype
)) == FUNCTION_TYPE
)
3446 || (TREE_CODE (totype
) == REFERENCE_TYPE
3447 && TREE_CODE (TREE_TYPE (totype
)) == POINTER_TYPE
3448 && TREE_CODE (TREE_TYPE (TREE_TYPE (totype
))) == FUNCTION_TYPE
))
3449 for (; fns
; fns
= OVL_NEXT (fns
))
3451 tree fn
= OVL_CURRENT (fns
);
3453 if (DECL_NONCONVERTING_P (fn
))
3456 if (TREE_CODE (fn
) == TEMPLATE_DECL
)
3457 add_template_conv_candidate
3458 (&candidates
, fn
, obj
, NULL_TREE
, *args
, totype
,
3459 /*access_path=*/NULL_TREE
,
3460 /*conversion_path=*/NULL_TREE
);
3462 add_conv_candidate (&candidates
, fn
, obj
, NULL_TREE
,
3463 *args
, /*conversion_path=*/NULL_TREE
,
3464 /*access_path=*/NULL_TREE
);
3468 candidates
= splice_viable (candidates
, pedantic
, &any_viable_p
);
3471 if (complain
& tf_error
)
3473 error ("no match for call to %<(%T) (%A)%>", TREE_TYPE (obj
),
3474 build_tree_list_vec (*args
));
3475 print_z_candidates (candidates
);
3477 result
= error_mark_node
;
3481 cand
= tourney (candidates
);
3484 if (complain
& tf_error
)
3486 error ("call of %<(%T) (%A)%> is ambiguous",
3487 TREE_TYPE (obj
), build_tree_list_vec (*args
));
3488 print_z_candidates (candidates
);
3490 result
= error_mark_node
;
3492 /* Since cand->fn will be a type, not a function, for a conversion
3493 function, we must be careful not to unconditionally look at
3495 else if (TREE_CODE (cand
->fn
) == FUNCTION_DECL
3496 && DECL_OVERLOADED_OPERATOR_P (cand
->fn
) == CALL_EXPR
)
3497 result
= build_over_call (cand
, LOOKUP_NORMAL
, complain
);
3500 obj
= convert_like_with_context (cand
->convs
[0], obj
, cand
->fn
, -1,
3502 obj
= convert_from_reference (obj
);
3503 result
= cp_build_function_call_vec (obj
, args
, complain
);
3507 /* Free all the conversions we allocated. */
3508 obstack_free (&conversion_obstack
, p
);
3514 op_error (enum tree_code code
, enum tree_code code2
,
3515 tree arg1
, tree arg2
, tree arg3
, bool match
)
3519 if (code
== MODIFY_EXPR
)
3520 opname
= assignment_operator_name_info
[code2
].name
;
3522 opname
= operator_name_info
[code
].name
;
3528 error ("ambiguous overload for ternary %<operator?:%> "
3529 "in %<%E ? %E : %E%>", arg1
, arg2
, arg3
);
3531 error ("no match for ternary %<operator?:%> "
3532 "in %<%E ? %E : %E%>", arg1
, arg2
, arg3
);
3535 case POSTINCREMENT_EXPR
:
3536 case POSTDECREMENT_EXPR
:
3538 error ("ambiguous overload for %<operator%s%> in %<%E%s%>",
3539 opname
, arg1
, opname
);
3541 error ("no match for %<operator%s%> in %<%E%s%>",
3542 opname
, arg1
, opname
);
3547 error ("ambiguous overload for %<operator[]%> in %<%E[%E]%>",
3550 error ("no match for %<operator[]%> in %<%E[%E]%>",
3557 error ("ambiguous overload for %qs in %<%s %E%>",
3558 opname
, opname
, arg1
);
3560 error ("no match for %qs in %<%s %E%>",
3561 opname
, opname
, arg1
);
3567 error ("ambiguous overload for %<operator%s%> in %<%E %s %E%>",
3568 opname
, arg1
, opname
, arg2
);
3570 error ("no match for %<operator%s%> in %<%E %s %E%>",
3571 opname
, arg1
, opname
, arg2
);
3574 error ("ambiguous overload for %<operator%s%> in %<%s%E%>",
3575 opname
, opname
, arg1
);
3577 error ("no match for %<operator%s%> in %<%s%E%>",
3578 opname
, opname
, arg1
);
3583 /* Return the implicit conversion sequence that could be used to
3584 convert E1 to E2 in [expr.cond]. */
3587 conditional_conversion (tree e1
, tree e2
)
3589 tree t1
= non_reference (TREE_TYPE (e1
));
3590 tree t2
= non_reference (TREE_TYPE (e2
));
3596 If E2 is an lvalue: E1 can be converted to match E2 if E1 can be
3597 implicitly converted (clause _conv_) to the type "reference to
3598 T2", subject to the constraint that in the conversion the
3599 reference must bind directly (_dcl.init.ref_) to E1. */
3600 if (real_lvalue_p (e2
))
3602 conv
= implicit_conversion (build_reference_type (t2
),
3606 LOOKUP_NO_TEMP_BIND
|LOOKUP_ONLYCONVERTING
);
3613 If E1 and E2 have class type, and the underlying class types are
3614 the same or one is a base class of the other: E1 can be converted
3615 to match E2 if the class of T2 is the same type as, or a base
3616 class of, the class of T1, and the cv-qualification of T2 is the
3617 same cv-qualification as, or a greater cv-qualification than, the
3618 cv-qualification of T1. If the conversion is applied, E1 is
3619 changed to an rvalue of type T2 that still refers to the original
3620 source class object (or the appropriate subobject thereof). */
3621 if (CLASS_TYPE_P (t1
) && CLASS_TYPE_P (t2
)
3622 && ((good_base
= DERIVED_FROM_P (t2
, t1
)) || DERIVED_FROM_P (t1
, t2
)))
3624 if (good_base
&& at_least_as_qualified_p (t2
, t1
))
3626 conv
= build_identity_conv (t1
, e1
);
3627 if (!same_type_p (TYPE_MAIN_VARIANT (t1
),
3628 TYPE_MAIN_VARIANT (t2
)))
3629 conv
= build_conv (ck_base
, t2
, conv
);
3631 conv
= build_conv (ck_rvalue
, t2
, conv
);
3640 Otherwise: E1 can be converted to match E2 if E1 can be implicitly
3641 converted to the type that expression E2 would have if E2 were
3642 converted to an rvalue (or the type it has, if E2 is an rvalue). */
3643 return implicit_conversion (t2
, t1
, e1
, /*c_cast_p=*/false,
3647 /* Implement [expr.cond]. ARG1, ARG2, and ARG3 are the three
3648 arguments to the conditional expression. */
3651 build_conditional_expr (tree arg1
, tree arg2
, tree arg3
,
3652 tsubst_flags_t complain
)
3656 tree result
= NULL_TREE
;
3657 tree result_type
= NULL_TREE
;
3658 bool lvalue_p
= true;
3659 struct z_candidate
*candidates
= 0;
3660 struct z_candidate
*cand
;
3663 /* As a G++ extension, the second argument to the conditional can be
3664 omitted. (So that `a ? : c' is roughly equivalent to `a ? a :
3665 c'.) If the second operand is omitted, make sure it is
3666 calculated only once. */
3669 if (complain
& tf_error
)
3670 pedwarn (input_location
, OPT_pedantic
,
3671 "ISO C++ forbids omitting the middle term of a ?: expression");
3673 /* Make sure that lvalues remain lvalues. See g++.oliva/ext1.C. */
3674 if (real_lvalue_p (arg1
))
3675 arg2
= arg1
= stabilize_reference (arg1
);
3677 arg2
= arg1
= save_expr (arg1
);
3682 The first expression is implicitly converted to bool (clause
3684 arg1
= perform_implicit_conversion_flags (boolean_type_node
, arg1
, complain
,
3687 /* If something has already gone wrong, just pass that fact up the
3689 if (error_operand_p (arg1
)
3690 || error_operand_p (arg2
)
3691 || error_operand_p (arg3
))
3692 return error_mark_node
;
3696 If either the second or the third operand has type (possibly
3697 cv-qualified) void, then the lvalue-to-rvalue (_conv.lval_),
3698 array-to-pointer (_conv.array_), and function-to-pointer
3699 (_conv.func_) standard conversions are performed on the second
3700 and third operands. */
3701 arg2_type
= unlowered_expr_type (arg2
);
3702 arg3_type
= unlowered_expr_type (arg3
);
3703 if (VOID_TYPE_P (arg2_type
) || VOID_TYPE_P (arg3_type
))
3705 /* Do the conversions. We don't these for `void' type arguments
3706 since it can't have any effect and since decay_conversion
3707 does not handle that case gracefully. */
3708 if (!VOID_TYPE_P (arg2_type
))
3709 arg2
= decay_conversion (arg2
);
3710 if (!VOID_TYPE_P (arg3_type
))
3711 arg3
= decay_conversion (arg3
);
3712 arg2_type
= TREE_TYPE (arg2
);
3713 arg3_type
= TREE_TYPE (arg3
);
3717 One of the following shall hold:
3719 --The second or the third operand (but not both) is a
3720 throw-expression (_except.throw_); the result is of the
3721 type of the other and is an rvalue.
3723 --Both the second and the third operands have type void; the
3724 result is of type void and is an rvalue.
3726 We must avoid calling force_rvalue for expressions of type
3727 "void" because it will complain that their value is being
3729 if (TREE_CODE (arg2
) == THROW_EXPR
3730 && TREE_CODE (arg3
) != THROW_EXPR
)
3732 if (!VOID_TYPE_P (arg3_type
))
3733 arg3
= force_rvalue (arg3
);
3734 arg3_type
= TREE_TYPE (arg3
);
3735 result_type
= arg3_type
;
3737 else if (TREE_CODE (arg2
) != THROW_EXPR
3738 && TREE_CODE (arg3
) == THROW_EXPR
)
3740 if (!VOID_TYPE_P (arg2_type
))
3741 arg2
= force_rvalue (arg2
);
3742 arg2_type
= TREE_TYPE (arg2
);
3743 result_type
= arg2_type
;
3745 else if (VOID_TYPE_P (arg2_type
) && VOID_TYPE_P (arg3_type
))
3746 result_type
= void_type_node
;
3749 if (complain
& tf_error
)
3751 if (VOID_TYPE_P (arg2_type
))
3752 error ("second operand to the conditional operator "
3753 "is of type %<void%>, "
3754 "but the third operand is neither a throw-expression "
3755 "nor of type %<void%>");
3757 error ("third operand to the conditional operator "
3758 "is of type %<void%>, "
3759 "but the second operand is neither a throw-expression "
3760 "nor of type %<void%>");
3762 return error_mark_node
;
3766 goto valid_operands
;
3770 Otherwise, if the second and third operand have different types,
3771 and either has (possibly cv-qualified) class type, an attempt is
3772 made to convert each of those operands to the type of the other. */
3773 else if (!same_type_p (arg2_type
, arg3_type
)
3774 && (CLASS_TYPE_P (arg2_type
) || CLASS_TYPE_P (arg3_type
)))
3779 /* Get the high-water mark for the CONVERSION_OBSTACK. */
3780 p
= conversion_obstack_alloc (0);
3782 conv2
= conditional_conversion (arg2
, arg3
);
3783 conv3
= conditional_conversion (arg3
, arg2
);
3787 If both can be converted, or one can be converted but the
3788 conversion is ambiguous, the program is ill-formed. If
3789 neither can be converted, the operands are left unchanged and
3790 further checking is performed as described below. If exactly
3791 one conversion is possible, that conversion is applied to the
3792 chosen operand and the converted operand is used in place of
3793 the original operand for the remainder of this section. */
3794 if ((conv2
&& !conv2
->bad_p
3795 && conv3
&& !conv3
->bad_p
)
3796 || (conv2
&& conv2
->kind
== ck_ambig
)
3797 || (conv3
&& conv3
->kind
== ck_ambig
))
3799 error ("operands to ?: have different types %qT and %qT",
3800 arg2_type
, arg3_type
);
3801 result
= error_mark_node
;
3803 else if (conv2
&& (!conv2
->bad_p
|| !conv3
))
3805 arg2
= convert_like (conv2
, arg2
, complain
);
3806 arg2
= convert_from_reference (arg2
);
3807 arg2_type
= TREE_TYPE (arg2
);
3808 /* Even if CONV2 is a valid conversion, the result of the
3809 conversion may be invalid. For example, if ARG3 has type
3810 "volatile X", and X does not have a copy constructor
3811 accepting a "volatile X&", then even if ARG2 can be
3812 converted to X, the conversion will fail. */
3813 if (error_operand_p (arg2
))
3814 result
= error_mark_node
;
3816 else if (conv3
&& (!conv3
->bad_p
|| !conv2
))
3818 arg3
= convert_like (conv3
, arg3
, complain
);
3819 arg3
= convert_from_reference (arg3
);
3820 arg3_type
= TREE_TYPE (arg3
);
3821 if (error_operand_p (arg3
))
3822 result
= error_mark_node
;
3825 /* Free all the conversions we allocated. */
3826 obstack_free (&conversion_obstack
, p
);
3831 /* If, after the conversion, both operands have class type,
3832 treat the cv-qualification of both operands as if it were the
3833 union of the cv-qualification of the operands.
3835 The standard is not clear about what to do in this
3836 circumstance. For example, if the first operand has type
3837 "const X" and the second operand has a user-defined
3838 conversion to "volatile X", what is the type of the second
3839 operand after this step? Making it be "const X" (matching
3840 the first operand) seems wrong, as that discards the
3841 qualification without actually performing a copy. Leaving it
3842 as "volatile X" seems wrong as that will result in the
3843 conditional expression failing altogether, even though,
3844 according to this step, the one operand could be converted to
3845 the type of the other. */
3846 if ((conv2
|| conv3
)
3847 && CLASS_TYPE_P (arg2_type
)
3848 && cp_type_quals (arg2_type
) != cp_type_quals (arg3_type
))
3849 arg2_type
= arg3_type
=
3850 cp_build_qualified_type (arg2_type
,
3851 cp_type_quals (arg2_type
)
3852 | cp_type_quals (arg3_type
));
3857 If the second and third operands are lvalues and have the same
3858 type, the result is of that type and is an lvalue. */
3859 if (real_lvalue_p (arg2
)
3860 && real_lvalue_p (arg3
)
3861 && same_type_p (arg2_type
, arg3_type
))
3863 result_type
= arg2_type
;
3864 arg2
= mark_lvalue_use (arg2
);
3865 arg3
= mark_lvalue_use (arg3
);
3866 goto valid_operands
;
3871 Otherwise, the result is an rvalue. If the second and third
3872 operand do not have the same type, and either has (possibly
3873 cv-qualified) class type, overload resolution is used to
3874 determine the conversions (if any) to be applied to the operands
3875 (_over.match.oper_, _over.built_). */
3877 if (!same_type_p (arg2_type
, arg3_type
)
3878 && (CLASS_TYPE_P (arg2_type
) || CLASS_TYPE_P (arg3_type
)))
3884 /* Rearrange the arguments so that add_builtin_candidate only has
3885 to know about two args. In build_builtin_candidate, the
3886 arguments are unscrambled. */
3890 add_builtin_candidates (&candidates
,
3893 ansi_opname (COND_EXPR
),
3899 If the overload resolution fails, the program is
3901 candidates
= splice_viable (candidates
, pedantic
, &any_viable_p
);
3904 if (complain
& tf_error
)
3906 op_error (COND_EXPR
, NOP_EXPR
, arg1
, arg2
, arg3
, FALSE
);
3907 print_z_candidates (candidates
);
3909 return error_mark_node
;
3911 cand
= tourney (candidates
);
3914 if (complain
& tf_error
)
3916 op_error (COND_EXPR
, NOP_EXPR
, arg1
, arg2
, arg3
, FALSE
);
3917 print_z_candidates (candidates
);
3919 return error_mark_node
;
3924 Otherwise, the conversions thus determined are applied, and
3925 the converted operands are used in place of the original
3926 operands for the remainder of this section. */
3927 conv
= cand
->convs
[0];
3928 arg1
= convert_like (conv
, arg1
, complain
);
3929 conv
= cand
->convs
[1];
3930 arg2
= convert_like (conv
, arg2
, complain
);
3931 arg2_type
= TREE_TYPE (arg2
);
3932 conv
= cand
->convs
[2];
3933 arg3
= convert_like (conv
, arg3
, complain
);
3934 arg3_type
= TREE_TYPE (arg3
);
3939 Lvalue-to-rvalue (_conv.lval_), array-to-pointer (_conv.array_),
3940 and function-to-pointer (_conv.func_) standard conversions are
3941 performed on the second and third operands.
3943 We need to force the lvalue-to-rvalue conversion here for class types,
3944 so we get TARGET_EXPRs; trying to deal with a COND_EXPR of class rvalues
3945 that isn't wrapped with a TARGET_EXPR plays havoc with exception
3948 arg2
= force_rvalue (arg2
);
3949 if (!CLASS_TYPE_P (arg2_type
))
3950 arg2_type
= TREE_TYPE (arg2
);
3952 arg3
= force_rvalue (arg3
);
3953 if (!CLASS_TYPE_P (arg3_type
))
3954 arg3_type
= TREE_TYPE (arg3
);
3956 if (arg2
== error_mark_node
|| arg3
== error_mark_node
)
3957 return error_mark_node
;
3961 After those conversions, one of the following shall hold:
3963 --The second and third operands have the same type; the result is of
3965 if (same_type_p (arg2_type
, arg3_type
))
3966 result_type
= arg2_type
;
3969 --The second and third operands have arithmetic or enumeration
3970 type; the usual arithmetic conversions are performed to bring
3971 them to a common type, and the result is of that type. */
3972 else if ((ARITHMETIC_TYPE_P (arg2_type
)
3973 || UNSCOPED_ENUM_P (arg2_type
))
3974 && (ARITHMETIC_TYPE_P (arg3_type
)
3975 || UNSCOPED_ENUM_P (arg3_type
)))
3977 /* In this case, there is always a common type. */
3978 result_type
= type_after_usual_arithmetic_conversions (arg2_type
,
3981 if (TREE_CODE (arg2_type
) == ENUMERAL_TYPE
3982 && TREE_CODE (arg3_type
) == ENUMERAL_TYPE
)
3984 if (complain
& tf_warning
)
3986 "enumeral mismatch in conditional expression: %qT vs %qT",
3987 arg2_type
, arg3_type
);
3989 else if (extra_warnings
3990 && ((TREE_CODE (arg2_type
) == ENUMERAL_TYPE
3991 && !same_type_p (arg3_type
, type_promotes_to (arg2_type
)))
3992 || (TREE_CODE (arg3_type
) == ENUMERAL_TYPE
3993 && !same_type_p (arg2_type
, type_promotes_to (arg3_type
)))))
3995 if (complain
& tf_warning
)
3997 "enumeral and non-enumeral type in conditional expression");
4000 arg2
= perform_implicit_conversion (result_type
, arg2
, complain
);
4001 arg3
= perform_implicit_conversion (result_type
, arg3
, complain
);
4005 --The second and third operands have pointer type, or one has
4006 pointer type and the other is a null pointer constant; pointer
4007 conversions (_conv.ptr_) and qualification conversions
4008 (_conv.qual_) are performed to bring them to their composite
4009 pointer type (_expr.rel_). The result is of the composite
4012 --The second and third operands have pointer to member type, or
4013 one has pointer to member type and the other is a null pointer
4014 constant; pointer to member conversions (_conv.mem_) and
4015 qualification conversions (_conv.qual_) are performed to bring
4016 them to a common type, whose cv-qualification shall match the
4017 cv-qualification of either the second or the third operand.
4018 The result is of the common type. */
4019 else if ((null_ptr_cst_p (arg2
)
4020 && (TYPE_PTR_P (arg3_type
) || TYPE_PTR_TO_MEMBER_P (arg3_type
)))
4021 || (null_ptr_cst_p (arg3
)
4022 && (TYPE_PTR_P (arg2_type
) || TYPE_PTR_TO_MEMBER_P (arg2_type
)))
4023 || (TYPE_PTR_P (arg2_type
) && TYPE_PTR_P (arg3_type
))
4024 || (TYPE_PTRMEM_P (arg2_type
) && TYPE_PTRMEM_P (arg3_type
))
4025 || (TYPE_PTRMEMFUNC_P (arg2_type
) && TYPE_PTRMEMFUNC_P (arg3_type
)))
4027 result_type
= composite_pointer_type (arg2_type
, arg3_type
, arg2
,
4028 arg3
, CPO_CONDITIONAL_EXPR
,
4030 if (result_type
== error_mark_node
)
4031 return error_mark_node
;
4032 arg2
= perform_implicit_conversion (result_type
, arg2
, complain
);
4033 arg3
= perform_implicit_conversion (result_type
, arg3
, complain
);
4038 if (complain
& tf_error
)
4039 error ("operands to ?: have different types %qT and %qT",
4040 arg2_type
, arg3_type
);
4041 return error_mark_node
;
4045 result
= build3 (COND_EXPR
, result_type
, arg1
, arg2
, arg3
);
4046 if (!cp_unevaluated_operand
)
4047 /* Avoid folding within decltype (c++/42013) and noexcept. */
4048 result
= fold_if_not_in_template (result
);
4050 /* We can't use result_type below, as fold might have returned a
4055 /* Expand both sides into the same slot, hopefully the target of
4056 the ?: expression. We used to check for TARGET_EXPRs here,
4057 but now we sometimes wrap them in NOP_EXPRs so the test would
4059 if (CLASS_TYPE_P (TREE_TYPE (result
)))
4060 result
= get_target_expr (result
);
4061 /* If this expression is an rvalue, but might be mistaken for an
4062 lvalue, we must add a NON_LVALUE_EXPR. */
4063 result
= rvalue (result
);
4069 /* OPERAND is an operand to an expression. Perform necessary steps
4070 required before using it. If OPERAND is NULL_TREE, NULL_TREE is
4074 prep_operand (tree operand
)
4078 if (CLASS_TYPE_P (TREE_TYPE (operand
))
4079 && CLASSTYPE_TEMPLATE_INSTANTIATION (TREE_TYPE (operand
)))
4080 /* Make sure the template type is instantiated now. */
4081 instantiate_class_template (TYPE_MAIN_VARIANT (TREE_TYPE (operand
)));
4087 /* Add each of the viable functions in FNS (a FUNCTION_DECL or
4088 OVERLOAD) to the CANDIDATES, returning an updated list of
4089 CANDIDATES. The ARGS are the arguments provided to the call;
4090 if FIRST_ARG is non-null it is the implicit object argument,
4091 otherwise the first element of ARGS is used if needed. The
4092 EXPLICIT_TARGS are explicit template arguments provided.
4093 TEMPLATE_ONLY is true if only template functions should be
4094 considered. CONVERSION_PATH, ACCESS_PATH, and FLAGS are as for
4095 add_function_candidate. */
4098 add_candidates (tree fns
, tree first_arg
, const VEC(tree
,gc
) *args
,
4100 tree explicit_targs
, bool template_only
,
4101 tree conversion_path
, tree access_path
,
4103 struct z_candidate
**candidates
)
4106 const VEC(tree
,gc
) *non_static_args
;
4107 bool check_list_ctor
;
4108 bool check_converting
;
4109 unification_kind_t strict
;
4115 /* Precalculate special handling of constructors and conversion ops. */
4116 fn
= OVL_CURRENT (fns
);
4117 if (DECL_CONV_FN_P (fn
))
4119 check_list_ctor
= false;
4120 check_converting
= !!(flags
& LOOKUP_ONLYCONVERTING
);
4121 if (flags
& LOOKUP_NO_CONVERSION
)
4122 /* We're doing return_type(x). */
4123 strict
= DEDUCE_CONV
;
4125 /* We're doing x.operator return_type(). */
4126 strict
= DEDUCE_EXACT
;
4127 /* [over.match.funcs] For conversion functions, the function
4128 is considered to be a member of the class of the implicit
4129 object argument for the purpose of defining the type of
4130 the implicit object parameter. */
4131 ctype
= TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (first_arg
)));
4135 if (DECL_CONSTRUCTOR_P (fn
))
4137 check_list_ctor
= !!(flags
& LOOKUP_LIST_ONLY
);
4138 check_converting
= !!(flags
& LOOKUP_ONLYCONVERTING
);
4142 check_list_ctor
= false;
4143 check_converting
= false;
4145 strict
= DEDUCE_CALL
;
4146 ctype
= conversion_path
? BINFO_TYPE (conversion_path
) : NULL_TREE
;
4150 non_static_args
= args
;
4152 /* Delay creating the implicit this parameter until it is needed. */
4153 non_static_args
= NULL
;
4155 for (; fns
; fns
= OVL_NEXT (fns
))
4158 const VEC(tree
,gc
) *fn_args
;
4160 fn
= OVL_CURRENT (fns
);
4162 if (check_converting
&& DECL_NONCONVERTING_P (fn
))
4164 if (check_list_ctor
&& !is_list_ctor (fn
))
4167 /* Figure out which set of arguments to use. */
4168 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn
))
4170 /* If this function is a non-static member and we didn't get an
4171 implicit object argument, move it out of args. */
4172 if (first_arg
== NULL_TREE
)
4176 VEC(tree
,gc
) *tempvec
4177 = VEC_alloc (tree
, gc
, VEC_length (tree
, args
) - 1);
4178 for (ix
= 1; VEC_iterate (tree
, args
, ix
, arg
); ++ix
)
4179 VEC_quick_push (tree
, tempvec
, arg
);
4180 non_static_args
= tempvec
;
4181 first_arg
= build_this (VEC_index (tree
, args
, 0));
4184 fn_first_arg
= first_arg
;
4185 fn_args
= non_static_args
;
4189 /* Otherwise, just use the list of arguments provided. */
4190 fn_first_arg
= NULL_TREE
;
4194 if (TREE_CODE (fn
) == TEMPLATE_DECL
)
4195 add_template_candidate (candidates
,
4206 else if (!template_only
)
4207 add_function_candidate (candidates
,
4218 /* Even unsigned enum types promote to signed int. We don't want to
4219 issue -Wsign-compare warnings for this case. Here ORIG_ARG is the
4220 original argument and ARG is the argument after any conversions
4221 have been applied. We set TREE_NO_WARNING if we have added a cast
4222 from an unsigned enum type to a signed integer type. */
4225 avoid_sign_compare_warnings (tree orig_arg
, tree arg
)
4227 if (orig_arg
!= NULL_TREE
4230 && TREE_CODE (TREE_TYPE (orig_arg
)) == ENUMERAL_TYPE
4231 && TYPE_UNSIGNED (TREE_TYPE (orig_arg
))
4232 && INTEGRAL_TYPE_P (TREE_TYPE (arg
))
4233 && !TYPE_UNSIGNED (TREE_TYPE (arg
)))
4234 TREE_NO_WARNING (arg
) = 1;
4238 build_new_op (enum tree_code code
, int flags
, tree arg1
, tree arg2
, tree arg3
,
4239 bool *overloaded_p
, tsubst_flags_t complain
)
4241 tree orig_arg1
= arg1
;
4242 tree orig_arg2
= arg2
;
4243 tree orig_arg3
= arg3
;
4244 struct z_candidate
*candidates
= 0, *cand
;
4245 VEC(tree
,gc
) *arglist
;
4248 tree result
= NULL_TREE
;
4249 bool result_valid_p
= false;
4250 enum tree_code code2
= NOP_EXPR
;
4251 enum tree_code code_orig_arg1
= ERROR_MARK
;
4252 enum tree_code code_orig_arg2
= ERROR_MARK
;
4258 if (error_operand_p (arg1
)
4259 || error_operand_p (arg2
)
4260 || error_operand_p (arg3
))
4261 return error_mark_node
;
4263 if (code
== MODIFY_EXPR
)
4265 code2
= TREE_CODE (arg3
);
4267 fnname
= ansi_assopname (code2
);
4270 fnname
= ansi_opname (code
);
4272 arg1
= prep_operand (arg1
);
4278 case VEC_DELETE_EXPR
:
4280 /* Use build_op_new_call and build_op_delete_call instead. */
4284 /* Use build_op_call instead. */
4287 case TRUTH_ORIF_EXPR
:
4288 case TRUTH_ANDIF_EXPR
:
4289 case TRUTH_AND_EXPR
:
4291 /* These are saved for the sake of warn_logical_operator. */
4292 code_orig_arg1
= TREE_CODE (arg1
);
4293 code_orig_arg2
= TREE_CODE (arg2
);
4299 arg2
= prep_operand (arg2
);
4300 arg3
= prep_operand (arg3
);
4302 if (code
== COND_EXPR
)
4303 /* Use build_conditional_expr instead. */
4305 else if (! IS_OVERLOAD_TYPE (TREE_TYPE (arg1
))
4306 && (! arg2
|| ! IS_OVERLOAD_TYPE (TREE_TYPE (arg2
))))
4309 if (code
== POSTINCREMENT_EXPR
|| code
== POSTDECREMENT_EXPR
)
4310 arg2
= integer_zero_node
;
4312 arglist
= VEC_alloc (tree
, gc
, 3);
4313 VEC_quick_push (tree
, arglist
, arg1
);
4314 if (arg2
!= NULL_TREE
)
4315 VEC_quick_push (tree
, arglist
, arg2
);
4316 if (arg3
!= NULL_TREE
)
4317 VEC_quick_push (tree
, arglist
, arg3
);
4319 /* Get the high-water mark for the CONVERSION_OBSTACK. */
4320 p
= conversion_obstack_alloc (0);
4322 /* Add namespace-scope operators to the list of functions to
4324 add_candidates (lookup_function_nonclass (fnname
, arglist
, /*block_p=*/true),
4325 NULL_TREE
, arglist
, NULL_TREE
,
4326 NULL_TREE
, false, NULL_TREE
, NULL_TREE
,
4327 flags
, &candidates
);
4328 /* Add class-member operators to the candidate set. */
4329 if (CLASS_TYPE_P (TREE_TYPE (arg1
)))
4333 fns
= lookup_fnfields (TREE_TYPE (arg1
), fnname
, 1);
4334 if (fns
== error_mark_node
)
4336 result
= error_mark_node
;
4337 goto user_defined_result_ready
;
4340 add_candidates (BASELINK_FUNCTIONS (fns
),
4341 NULL_TREE
, arglist
, NULL_TREE
,
4343 BASELINK_BINFO (fns
),
4344 BASELINK_ACCESS_BINFO (fns
),
4345 flags
, &candidates
);
4350 args
[2] = NULL_TREE
;
4352 add_builtin_candidates (&candidates
, code
, code2
, fnname
, args
, flags
);
4358 /* For these, the built-in candidates set is empty
4359 [over.match.oper]/3. We don't want non-strict matches
4360 because exact matches are always possible with built-in
4361 operators. The built-in candidate set for COMPONENT_REF
4362 would be empty too, but since there are no such built-in
4363 operators, we accept non-strict matches for them. */
4368 strict_p
= pedantic
;
4372 candidates
= splice_viable (candidates
, strict_p
, &any_viable_p
);
4377 case POSTINCREMENT_EXPR
:
4378 case POSTDECREMENT_EXPR
:
4379 /* Don't try anything fancy if we're not allowed to produce
4381 if (!(complain
& tf_error
))
4382 return error_mark_node
;
4384 /* Look for an `operator++ (int)'. Pre-1985 C++ didn't
4385 distinguish between prefix and postfix ++ and
4386 operator++() was used for both, so we allow this with
4388 if (flags
& LOOKUP_COMPLAIN
)
4390 const char *msg
= (flag_permissive
)
4391 ? G_("no %<%D(int)%> declared for postfix %qs,"
4392 " trying prefix operator instead")
4393 : G_("no %<%D(int)%> declared for postfix %qs");
4394 permerror (input_location
, msg
, fnname
,
4395 operator_name_info
[code
].name
);
4398 if (!flag_permissive
)
4399 return error_mark_node
;
4401 if (code
== POSTINCREMENT_EXPR
)
4402 code
= PREINCREMENT_EXPR
;
4404 code
= PREDECREMENT_EXPR
;
4405 result
= build_new_op (code
, flags
, arg1
, NULL_TREE
, NULL_TREE
,
4406 overloaded_p
, complain
);
4409 /* The caller will deal with these. */
4414 result_valid_p
= true;
4418 if ((flags
& LOOKUP_COMPLAIN
) && (complain
& tf_error
))
4420 /* If one of the arguments of the operator represents
4421 an invalid use of member function pointer, try to report
4422 a meaningful error ... */
4423 if (invalid_nonstatic_memfn_p (arg1
, tf_error
)
4424 || invalid_nonstatic_memfn_p (arg2
, tf_error
)
4425 || invalid_nonstatic_memfn_p (arg3
, tf_error
))
4426 /* We displayed the error message. */;
4429 /* ... Otherwise, report the more generic
4430 "no matching operator found" error */
4431 op_error (code
, code2
, arg1
, arg2
, arg3
, FALSE
);
4432 print_z_candidates (candidates
);
4435 result
= error_mark_node
;
4441 cand
= tourney (candidates
);
4444 if ((flags
& LOOKUP_COMPLAIN
) && (complain
& tf_error
))
4446 op_error (code
, code2
, arg1
, arg2
, arg3
, TRUE
);
4447 print_z_candidates (candidates
);
4449 result
= error_mark_node
;
4451 else if (TREE_CODE (cand
->fn
) == FUNCTION_DECL
)
4454 *overloaded_p
= true;
4456 if (resolve_args (arglist
) == NULL
)
4457 result
= error_mark_node
;
4459 result
= build_over_call (cand
, LOOKUP_NORMAL
, complain
);
4463 /* Give any warnings we noticed during overload resolution. */
4464 if (cand
->warnings
&& (complain
& tf_warning
))
4466 struct candidate_warning
*w
;
4467 for (w
= cand
->warnings
; w
; w
= w
->next
)
4468 joust (cand
, w
->loser
, 1);
4471 /* Check for comparison of different enum types. */
4480 if (TREE_CODE (TREE_TYPE (arg1
)) == ENUMERAL_TYPE
4481 && TREE_CODE (TREE_TYPE (arg2
)) == ENUMERAL_TYPE
4482 && (TYPE_MAIN_VARIANT (TREE_TYPE (arg1
))
4483 != TYPE_MAIN_VARIANT (TREE_TYPE (arg2
)))
4484 && (complain
& tf_warning
))
4486 warning (OPT_Wenum_compare
,
4487 "comparison between %q#T and %q#T",
4488 TREE_TYPE (arg1
), TREE_TYPE (arg2
));
4495 /* We need to strip any leading REF_BIND so that bitfields
4496 don't cause errors. This should not remove any important
4497 conversions, because builtins don't apply to class
4498 objects directly. */
4499 conv
= cand
->convs
[0];
4500 if (conv
->kind
== ck_ref_bind
)
4501 conv
= conv
->u
.next
;
4502 arg1
= convert_like (conv
, arg1
, complain
);
4506 /* We need to call warn_logical_operator before
4507 converting arg2 to a boolean_type. */
4508 if (complain
& tf_warning
)
4509 warn_logical_operator (input_location
, code
, boolean_type_node
,
4510 code_orig_arg1
, arg1
,
4511 code_orig_arg2
, arg2
);
4513 conv
= cand
->convs
[1];
4514 if (conv
->kind
== ck_ref_bind
)
4515 conv
= conv
->u
.next
;
4516 arg2
= convert_like (conv
, arg2
, complain
);
4520 conv
= cand
->convs
[2];
4521 if (conv
->kind
== ck_ref_bind
)
4522 conv
= conv
->u
.next
;
4523 arg3
= convert_like (conv
, arg3
, complain
);
4529 user_defined_result_ready
:
4531 /* Free all the conversions we allocated. */
4532 obstack_free (&conversion_obstack
, p
);
4534 if (result
|| result_valid_p
)
4538 avoid_sign_compare_warnings (orig_arg1
, arg1
);
4539 avoid_sign_compare_warnings (orig_arg2
, arg2
);
4540 avoid_sign_compare_warnings (orig_arg3
, arg3
);
4545 return cp_build_modify_expr (arg1
, code2
, arg2
, complain
);
4548 return cp_build_indirect_ref (arg1
, RO_UNARY_STAR
, complain
);
4550 case TRUTH_ANDIF_EXPR
:
4551 case TRUTH_ORIF_EXPR
:
4552 case TRUTH_AND_EXPR
:
4554 warn_logical_operator (input_location
, code
, boolean_type_node
,
4555 code_orig_arg1
, arg1
, code_orig_arg2
, arg2
);
4560 case TRUNC_DIV_EXPR
:
4571 case TRUNC_MOD_EXPR
:
4575 return cp_build_binary_op (input_location
, code
, arg1
, arg2
, complain
);
4577 case UNARY_PLUS_EXPR
:
4580 case TRUTH_NOT_EXPR
:
4581 case PREINCREMENT_EXPR
:
4582 case POSTINCREMENT_EXPR
:
4583 case PREDECREMENT_EXPR
:
4584 case POSTDECREMENT_EXPR
:
4587 return cp_build_unary_op (code
, arg1
, candidates
!= 0, complain
);
4590 return cp_build_array_ref (input_location
, arg1
, arg2
, complain
);
4593 return build_m_component_ref (cp_build_indirect_ref (arg1
, RO_NULL
,
4597 /* The caller will deal with these. */
4609 /* Returns true iff T, an element of an OVERLOAD chain, is a usual
4610 deallocation function (3.7.4.2 [basic.stc.dynamic.deallocation]). */
4613 non_placement_deallocation_fn_p (tree t
)
4615 /* A template instance is never a usual deallocation function,
4616 regardless of its signature. */
4617 if (TREE_CODE (t
) == TEMPLATE_DECL
4618 || primary_template_instantiation_p (t
))
4621 /* If a class T has a member deallocation function named operator delete
4622 with exactly one parameter, then that function is a usual
4623 (non-placement) deallocation function. If class T does not declare
4624 such an operator delete but does declare a member deallocation
4625 function named operator delete with exactly two parameters, the second
4626 of which has type std::size_t (18.2), then this function is a usual
4627 deallocation function. */
4628 t
= FUNCTION_ARG_CHAIN (t
);
4629 if (t
== void_list_node
4630 || (t
&& same_type_p (TREE_VALUE (t
), size_type_node
)
4631 && TREE_CHAIN (t
) == void_list_node
))
4636 /* Build a call to operator delete. This has to be handled very specially,
4637 because the restrictions on what signatures match are different from all
4638 other call instances. For a normal delete, only a delete taking (void *)
4639 or (void *, size_t) is accepted. For a placement delete, only an exact
4640 match with the placement new is accepted.
4642 CODE is either DELETE_EXPR or VEC_DELETE_EXPR.
4643 ADDR is the pointer to be deleted.
4644 SIZE is the size of the memory block to be deleted.
4645 GLOBAL_P is true if the delete-expression should not consider
4646 class-specific delete operators.
4647 PLACEMENT is the corresponding placement new call, or NULL_TREE.
4649 If this call to "operator delete" is being generated as part to
4650 deallocate memory allocated via a new-expression (as per [expr.new]
4651 which requires that if the initialization throws an exception then
4652 we call a deallocation function), then ALLOC_FN is the allocation
4656 build_op_delete_call (enum tree_code code
, tree addr
, tree size
,
4657 bool global_p
, tree placement
,
4660 tree fn
= NULL_TREE
;
4661 tree fns
, fnname
, type
, t
;
4663 if (addr
== error_mark_node
)
4664 return error_mark_node
;
4666 type
= strip_array_types (TREE_TYPE (TREE_TYPE (addr
)));
4668 fnname
= ansi_opname (code
);
4670 if (CLASS_TYPE_P (type
)
4671 && COMPLETE_TYPE_P (complete_type (type
))
4675 If the result of the lookup is ambiguous or inaccessible, or if
4676 the lookup selects a placement deallocation function, the
4677 program is ill-formed.
4679 Therefore, we ask lookup_fnfields to complain about ambiguity. */
4681 fns
= lookup_fnfields (TYPE_BINFO (type
), fnname
, 1);
4682 if (fns
== error_mark_node
)
4683 return error_mark_node
;
4688 if (fns
== NULL_TREE
)
4689 fns
= lookup_name_nonclass (fnname
);
4691 /* Strip const and volatile from addr. */
4692 addr
= cp_convert (ptr_type_node
, addr
);
4696 /* "A declaration of a placement deallocation function matches the
4697 declaration of a placement allocation function if it has the same
4698 number of parameters and, after parameter transformations (8.3.5),
4699 all parameter types except the first are identical."
4701 So we build up the function type we want and ask instantiate_type
4702 to get it for us. */
4703 t
= FUNCTION_ARG_CHAIN (alloc_fn
);
4704 t
= tree_cons (NULL_TREE
, ptr_type_node
, t
);
4705 t
= build_function_type (void_type_node
, t
);
4707 fn
= instantiate_type (t
, fns
, tf_none
);
4708 if (fn
== error_mark_node
)
4711 if (BASELINK_P (fn
))
4712 fn
= BASELINK_FUNCTIONS (fn
);
4714 /* "If the lookup finds the two-parameter form of a usual deallocation
4715 function (3.7.4.2) and that function, considered as a placement
4716 deallocation function, would have been selected as a match for the
4717 allocation function, the program is ill-formed." */
4718 if (non_placement_deallocation_fn_p (fn
))
4720 /* But if the class has an operator delete (void *), then that is
4721 the usual deallocation function, so we shouldn't complain
4722 about using the operator delete (void *, size_t). */
4723 for (t
= BASELINK_P (fns
) ? BASELINK_FUNCTIONS (fns
) : fns
;
4724 t
; t
= OVL_NEXT (t
))
4726 tree elt
= OVL_CURRENT (t
);
4727 if (non_placement_deallocation_fn_p (elt
)
4728 && FUNCTION_ARG_CHAIN (elt
) == void_list_node
)
4731 permerror (0, "non-placement deallocation function %q+D", fn
);
4732 permerror (input_location
, "selected for placement delete");
4737 /* "Any non-placement deallocation function matches a non-placement
4738 allocation function. If the lookup finds a single matching
4739 deallocation function, that function will be called; otherwise, no
4740 deallocation function will be called." */
4741 for (t
= BASELINK_P (fns
) ? BASELINK_FUNCTIONS (fns
) : fns
;
4742 t
; t
= OVL_NEXT (t
))
4744 tree elt
= OVL_CURRENT (t
);
4745 if (non_placement_deallocation_fn_p (elt
))
4748 /* "If a class T has a member deallocation function named
4749 operator delete with exactly one parameter, then that
4750 function is a usual (non-placement) deallocation
4751 function. If class T does not declare such an operator
4752 delete but does declare a member deallocation function named
4753 operator delete with exactly two parameters, the second of
4754 which has type std::size_t (18.2), then this function is a
4755 usual deallocation function."
4757 So (void*) beats (void*, size_t). */
4758 if (FUNCTION_ARG_CHAIN (fn
) == void_list_node
)
4763 /* If we have a matching function, call it. */
4766 gcc_assert (TREE_CODE (fn
) == FUNCTION_DECL
);
4768 /* If the FN is a member function, make sure that it is
4770 if (BASELINK_P (fns
))
4771 perform_or_defer_access_check (BASELINK_BINFO (fns
), fn
, fn
);
4773 /* Core issue 901: It's ok to new a type with deleted delete. */
4774 if (DECL_DELETED_FN (fn
) && alloc_fn
)
4779 /* The placement args might not be suitable for overload
4780 resolution at this point, so build the call directly. */
4781 int nargs
= call_expr_nargs (placement
);
4782 tree
*argarray
= XALLOCAVEC (tree
, nargs
);
4785 for (i
= 1; i
< nargs
; i
++)
4786 argarray
[i
] = CALL_EXPR_ARG (placement
, i
);
4788 return build_cxx_call (fn
, nargs
, argarray
);
4793 VEC(tree
,gc
) *args
= VEC_alloc (tree
, gc
, 2);
4794 VEC_quick_push (tree
, args
, addr
);
4795 if (FUNCTION_ARG_CHAIN (fn
) != void_list_node
)
4796 VEC_quick_push (tree
, args
, size
);
4797 ret
= cp_build_function_call_vec (fn
, &args
, tf_warning_or_error
);
4798 VEC_free (tree
, gc
, args
);
4805 If no unambiguous matching deallocation function can be found,
4806 propagating the exception does not cause the object's memory to
4811 warning (0, "no corresponding deallocation function for %qD",
4816 error ("no suitable %<operator %s%> for %qT",
4817 operator_name_info
[(int)code
].name
, type
);
4818 return error_mark_node
;
4821 /* If the current scope isn't allowed to access DECL along
4822 BASETYPE_PATH, give an error. The most derived class in
4823 BASETYPE_PATH is the one used to qualify DECL. DIAG_DECL is
4824 the declaration to use in the error diagnostic. */
4827 enforce_access (tree basetype_path
, tree decl
, tree diag_decl
)
4829 gcc_assert (TREE_CODE (basetype_path
) == TREE_BINFO
);
4831 if (!accessible_p (basetype_path
, decl
, true))
4833 if (TREE_PRIVATE (decl
))
4834 error ("%q+#D is private", diag_decl
);
4835 else if (TREE_PROTECTED (decl
))
4836 error ("%q+#D is protected", diag_decl
);
4838 error ("%q+#D is inaccessible", diag_decl
);
4839 error ("within this context");
4846 /* Initialize a temporary of type TYPE with EXPR. The FLAGS are a
4847 bitwise or of LOOKUP_* values. If any errors are warnings are
4848 generated, set *DIAGNOSTIC_FN to "error" or "warning",
4849 respectively. If no diagnostics are generated, set *DIAGNOSTIC_FN
4853 build_temp (tree expr
, tree type
, int flags
,
4854 diagnostic_t
*diagnostic_kind
)
4859 savew
= warningcount
, savee
= errorcount
;
4860 args
= make_tree_vector_single (expr
);
4861 expr
= build_special_member_call (NULL_TREE
, complete_ctor_identifier
,
4862 &args
, type
, flags
, tf_warning_or_error
);
4863 release_tree_vector (args
);
4864 if (warningcount
> savew
)
4865 *diagnostic_kind
= DK_WARNING
;
4866 else if (errorcount
> savee
)
4867 *diagnostic_kind
= DK_ERROR
;
4869 *diagnostic_kind
= DK_UNSPECIFIED
;
4873 /* Perform warnings about peculiar, but valid, conversions from/to NULL.
4874 EXPR is implicitly converted to type TOTYPE.
4875 FN and ARGNUM are used for diagnostics. */
4878 conversion_null_warnings (tree totype
, tree expr
, tree fn
, int argnum
)
4880 tree t
= non_reference (totype
);
4882 /* Issue warnings about peculiar, but valid, uses of NULL. */
4883 if (expr
== null_node
&& TREE_CODE (t
) != BOOLEAN_TYPE
&& ARITHMETIC_TYPE_P (t
))
4886 warning_at (input_location
, OPT_Wconversion_null
,
4887 "passing NULL to non-pointer argument %P of %qD",
4890 warning_at (input_location
, OPT_Wconversion_null
,
4891 "converting to non-pointer type %qT from NULL", t
);
4894 /* Issue warnings if "false" is converted to a NULL pointer */
4895 else if (expr
== boolean_false_node
&& fn
&& POINTER_TYPE_P (t
))
4896 warning_at (input_location
, OPT_Wconversion_null
,
4897 "converting %<false%> to pointer type for argument %P of %qD",
4901 /* Perform the conversions in CONVS on the expression EXPR. FN and
4902 ARGNUM are used for diagnostics. ARGNUM is zero based, -1
4903 indicates the `this' argument of a method. INNER is nonzero when
4904 being called to continue a conversion chain. It is negative when a
4905 reference binding will be applied, positive otherwise. If
4906 ISSUE_CONVERSION_WARNINGS is true, warnings about suspicious
4907 conversions will be emitted if appropriate. If C_CAST_P is true,
4908 this conversion is coming from a C-style cast; in that case,
4909 conversions to inaccessible bases are permitted. */
4912 convert_like_real (conversion
*convs
, tree expr
, tree fn
, int argnum
,
4913 int inner
, bool issue_conversion_warnings
,
4914 bool c_cast_p
, tsubst_flags_t complain
)
4916 tree totype
= convs
->type
;
4917 diagnostic_t diag_kind
;
4921 && convs
->kind
!= ck_user
4922 && convs
->kind
!= ck_list
4923 && convs
->kind
!= ck_ambig
4924 && convs
->kind
!= ck_ref_bind
4925 && convs
->kind
!= ck_rvalue
4926 && convs
->kind
!= ck_base
)
4928 conversion
*t
= convs
;
4930 /* Give a helpful error if this is bad because of excess braces. */
4931 if (BRACE_ENCLOSED_INITIALIZER_P (expr
)
4932 && SCALAR_TYPE_P (totype
)
4933 && CONSTRUCTOR_NELTS (expr
) > 0
4934 && BRACE_ENCLOSED_INITIALIZER_P (CONSTRUCTOR_ELT (expr
, 0)->value
))
4935 permerror (input_location
, "too many braces around initializer for %qT", totype
);
4937 for (; t
; t
= convs
->u
.next
)
4939 if (t
->kind
== ck_user
|| !t
->bad_p
)
4941 expr
= convert_like_real (t
, expr
, fn
, argnum
, 1,
4942 /*issue_conversion_warnings=*/false,
4947 else if (t
->kind
== ck_ambig
)
4948 return convert_like_real (t
, expr
, fn
, argnum
, 1,
4949 /*issue_conversion_warnings=*/false,
4952 else if (t
->kind
== ck_identity
)
4955 if (complain
& tf_error
)
4957 permerror (input_location
, "invalid conversion from %qT to %qT", TREE_TYPE (expr
), totype
);
4959 permerror (DECL_SOURCE_LOCATION (fn
),
4960 " initializing argument %P of %qD", argnum
, fn
);
4963 return error_mark_node
;
4965 return cp_convert (totype
, expr
);
4968 if (issue_conversion_warnings
&& (complain
& tf_warning
))
4969 conversion_null_warnings (totype
, expr
, fn
, argnum
);
4971 switch (convs
->kind
)
4975 struct z_candidate
*cand
= convs
->cand
;
4976 tree convfn
= cand
->fn
;
4979 expr
= mark_rvalue_use (expr
);
4981 /* When converting from an init list we consider explicit
4982 constructors, but actually trying to call one is an error. */
4983 if (DECL_NONCONVERTING_P (convfn
) && DECL_CONSTRUCTOR_P (convfn
)
4984 /* Unless we're calling it for value-initialization from an
4985 empty list, since that is handled separately in 8.5.4. */
4986 && cand
->num_convs
> 0)
4988 if (complain
& tf_error
)
4989 error ("converting to %qT from initializer list would use "
4990 "explicit constructor %qD", totype
, convfn
);
4992 return error_mark_node
;
4995 /* Set user_conv_p on the argument conversions, so rvalue/base
4996 handling knows not to allow any more UDCs. */
4997 for (i
= 0; i
< cand
->num_convs
; ++i
)
4998 cand
->convs
[i
]->user_conv_p
= true;
5000 expr
= build_over_call (cand
, LOOKUP_NORMAL
, complain
);
5002 /* If this is a constructor or a function returning an aggr type,
5003 we need to build up a TARGET_EXPR. */
5004 if (DECL_CONSTRUCTOR_P (convfn
))
5006 expr
= build_cplus_new (totype
, expr
);
5008 /* Remember that this was list-initialization. */
5009 if (convs
->check_narrowing
)
5010 TARGET_EXPR_LIST_INIT_P (expr
) = true;
5016 expr
= mark_rvalue_use (expr
);
5017 if (BRACE_ENCLOSED_INITIALIZER_P (expr
))
5019 int nelts
= CONSTRUCTOR_NELTS (expr
);
5021 expr
= integer_zero_node
;
5022 else if (nelts
== 1)
5023 expr
= CONSTRUCTOR_ELT (expr
, 0)->value
;
5028 if (type_unknown_p (expr
))
5029 expr
= instantiate_type (totype
, expr
, complain
);
5030 /* Convert a constant to its underlying value, unless we are
5031 about to bind it to a reference, in which case we need to
5032 leave it as an lvalue. */
5035 expr
= decl_constant_value (expr
);
5036 if (expr
== null_node
&& INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (totype
))
5037 /* If __null has been converted to an integer type, we do not
5038 want to warn about uses of EXPR as an integer, rather than
5040 expr
= build_int_cst (totype
, 0);
5044 if (complain
& tf_error
)
5046 /* Call build_user_type_conversion again for the error. */
5047 build_user_type_conversion (totype
, convs
->u
.expr
, LOOKUP_NORMAL
);
5049 error (" initializing argument %P of %q+D", argnum
, fn
);
5051 return error_mark_node
;
5055 /* Conversion to std::initializer_list<T>. */
5056 tree elttype
= TREE_VEC_ELT (CLASSTYPE_TI_ARGS (totype
), 0);
5057 tree new_ctor
= build_constructor (init_list_type_node
, NULL
);
5058 unsigned len
= CONSTRUCTOR_NELTS (expr
);
5060 VEC(tree
,gc
) *parms
;
5063 /* Convert all the elements. */
5064 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expr
), ix
, val
)
5066 tree sub
= convert_like_real (convs
->u
.list
[ix
], val
, fn
, argnum
,
5067 1, false, false, complain
);
5068 if (sub
== error_mark_node
)
5070 check_narrowing (TREE_TYPE (sub
), val
);
5071 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_ctor
), NULL_TREE
, sub
);
5073 /* Build up the array. */
5074 elttype
= cp_build_qualified_type
5075 (elttype
, cp_type_quals (elttype
) | TYPE_QUAL_CONST
);
5076 array
= build_array_of_n_type (elttype
, len
);
5077 array
= finish_compound_literal (array
, new_ctor
);
5079 parms
= make_tree_vector ();
5080 VEC_safe_push (tree
, gc
, parms
, decay_conversion (array
));
5081 VEC_safe_push (tree
, gc
, parms
, size_int (len
));
5082 /* Call the private constructor. */
5083 push_deferring_access_checks (dk_no_check
);
5084 new_ctor
= build_special_member_call
5085 (NULL_TREE
, complete_ctor_identifier
, &parms
, totype
, 0, complain
);
5086 release_tree_vector (parms
);
5087 pop_deferring_access_checks ();
5088 return build_cplus_new (totype
, new_ctor
);
5092 return get_target_expr (digest_init (totype
, expr
));
5098 expr
= convert_like_real (convs
->u
.next
, expr
, fn
, argnum
,
5099 convs
->kind
== ck_ref_bind
? -1 : 1,
5100 convs
->kind
== ck_ref_bind
? issue_conversion_warnings
: false,
5103 if (expr
== error_mark_node
)
5104 return error_mark_node
;
5106 switch (convs
->kind
)
5109 expr
= decay_conversion (expr
);
5110 if (! MAYBE_CLASS_TYPE_P (totype
))
5112 /* Else fall through. */
5114 if (convs
->kind
== ck_base
&& !convs
->need_temporary_p
)
5116 /* We are going to bind a reference directly to a base-class
5117 subobject of EXPR. */
5118 /* Build an expression for `*((base*) &expr)'. */
5119 expr
= cp_build_unary_op (ADDR_EXPR
, expr
, 0, complain
);
5120 expr
= convert_to_base (expr
, build_pointer_type (totype
),
5121 !c_cast_p
, /*nonnull=*/true, complain
);
5122 expr
= cp_build_indirect_ref (expr
, RO_IMPLICIT_CONVERSION
, complain
);
5126 /* Copy-initialization where the cv-unqualified version of the source
5127 type is the same class as, or a derived class of, the class of the
5128 destination [is treated as direct-initialization]. [dcl.init] */
5129 flags
= LOOKUP_NORMAL
|LOOKUP_ONLYCONVERTING
;
5130 if (convs
->user_conv_p
)
5131 /* This conversion is being done in the context of a user-defined
5132 conversion (i.e. the second step of copy-initialization), so
5133 don't allow any more. */
5134 flags
|= LOOKUP_NO_CONVERSION
;
5135 expr
= build_temp (expr
, totype
, flags
, &diag_kind
);
5136 if (diag_kind
&& fn
)
5138 if ((complain
& tf_error
))
5139 emit_diagnostic (diag_kind
, DECL_SOURCE_LOCATION (fn
), 0,
5140 " initializing argument %P of %qD", argnum
, fn
);
5141 else if (diag_kind
== DK_ERROR
)
5142 return error_mark_node
;
5144 return build_cplus_new (totype
, expr
);
5148 tree ref_type
= totype
;
5150 if (convs
->bad_p
&& TYPE_REF_IS_RVALUE (ref_type
)
5151 && real_lvalue_p (expr
))
5153 if (complain
& tf_error
)
5155 error ("cannot bind %qT lvalue to %qT",
5156 TREE_TYPE (expr
), totype
);
5158 error (" initializing argument %P of %q+D", argnum
, fn
);
5160 return error_mark_node
;
5163 /* If necessary, create a temporary.
5165 VA_ARG_EXPR and CONSTRUCTOR expressions are special cases
5166 that need temporaries, even when their types are reference
5167 compatible with the type of reference being bound, so the
5168 upcoming call to cp_build_unary_op (ADDR_EXPR, expr, ...)
5170 if (convs
->need_temporary_p
5171 || TREE_CODE (expr
) == CONSTRUCTOR
5172 || TREE_CODE (expr
) == VA_ARG_EXPR
)
5174 tree type
= convs
->u
.next
->type
;
5175 cp_lvalue_kind lvalue
= real_lvalue_p (expr
);
5177 if (!CP_TYPE_CONST_NON_VOLATILE_P (TREE_TYPE (ref_type
))
5178 && !TYPE_REF_IS_RVALUE (ref_type
))
5180 if (complain
& tf_error
)
5182 /* If the reference is volatile or non-const, we
5183 cannot create a temporary. */
5184 if (lvalue
& clk_bitfield
)
5185 error ("cannot bind bitfield %qE to %qT",
5187 else if (lvalue
& clk_packed
)
5188 error ("cannot bind packed field %qE to %qT",
5191 error ("cannot bind rvalue %qE to %qT", expr
, ref_type
);
5193 return error_mark_node
;
5195 /* If the source is a packed field, and we must use a copy
5196 constructor, then building the target expr will require
5197 binding the field to the reference parameter to the
5198 copy constructor, and we'll end up with an infinite
5199 loop. If we can use a bitwise copy, then we'll be
5201 if ((lvalue
& clk_packed
)
5202 && CLASS_TYPE_P (type
)
5203 && type_has_nontrivial_copy_init (type
))
5205 if (complain
& tf_error
)
5206 error ("cannot bind packed field %qE to %qT",
5208 return error_mark_node
;
5210 if (lvalue
& clk_bitfield
)
5212 expr
= convert_bitfield_to_declared_type (expr
);
5213 expr
= fold_convert (type
, expr
);
5215 expr
= build_target_expr_with_type (expr
, type
);
5218 /* Take the address of the thing to which we will bind the
5220 expr
= cp_build_unary_op (ADDR_EXPR
, expr
, 1, complain
);
5221 if (expr
== error_mark_node
)
5222 return error_mark_node
;
5224 /* Convert it to a pointer to the type referred to by the
5225 reference. This will adjust the pointer if a derived to
5226 base conversion is being performed. */
5227 expr
= cp_convert (build_pointer_type (TREE_TYPE (ref_type
)),
5229 /* Convert the pointer to the desired reference type. */
5230 return build_nop (ref_type
, expr
);
5234 return decay_conversion (expr
);
5237 /* Warn about deprecated conversion if appropriate. */
5238 string_conv_p (totype
, expr
, 1);
5243 expr
= convert_to_base (expr
, totype
, !c_cast_p
,
5244 /*nonnull=*/false, complain
);
5245 return build_nop (totype
, expr
);
5248 return convert_ptrmem (totype
, expr
, /*allow_inverse_p=*/false,
5255 if (convs
->check_narrowing
)
5256 check_narrowing (totype
, expr
);
5258 if (issue_conversion_warnings
&& (complain
& tf_warning
))
5259 expr
= convert_and_check (totype
, expr
);
5261 expr
= convert (totype
, expr
);
5266 /* ARG is being passed to a varargs function. Perform any conversions
5267 required. Return the converted value. */
5270 convert_arg_to_ellipsis (tree arg
)
5274 The lvalue-to-rvalue, array-to-pointer, and function-to-pointer
5275 standard conversions are performed. */
5276 arg
= decay_conversion (arg
);
5279 If the argument has integral or enumeration type that is subject
5280 to the integral promotions (_conv.prom_), or a floating point
5281 type that is subject to the floating point promotion
5282 (_conv.fpprom_), the value of the argument is converted to the
5283 promoted type before the call. */
5284 if (TREE_CODE (TREE_TYPE (arg
)) == REAL_TYPE
5285 && (TYPE_PRECISION (TREE_TYPE (arg
))
5286 < TYPE_PRECISION (double_type_node
))
5287 && !DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (arg
))))
5288 arg
= convert_to_real (double_type_node
, arg
);
5289 else if (NULLPTR_TYPE_P (TREE_TYPE (arg
)))
5290 arg
= null_pointer_node
;
5291 else if (INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (arg
)))
5292 arg
= perform_integral_promotions (arg
);
5294 arg
= require_complete_type (arg
);
5296 if (arg
!= error_mark_node
5297 && (type_has_nontrivial_copy_init (TREE_TYPE (arg
))
5298 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (arg
))))
5300 /* [expr.call] 5.2.2/7:
5301 Passing a potentially-evaluated argument of class type (Clause 9)
5302 with a non-trivial copy constructor or a non-trivial destructor
5303 with no corresponding parameter is conditionally-supported, with
5304 implementation-defined semantics.
5306 We used to just warn here and do a bitwise copy, but now
5307 cp_expr_size will abort if we try to do that.
5309 If the call appears in the context of a sizeof expression,
5310 it is not potentially-evaluated. */
5311 if (cp_unevaluated_operand
== 0)
5312 error ("cannot pass objects of non-trivially-copyable "
5313 "type %q#T through %<...%>", TREE_TYPE (arg
));
5319 /* va_arg (EXPR, TYPE) is a builtin. Make sure it is not abused. */
5322 build_x_va_arg (tree expr
, tree type
)
5324 if (processing_template_decl
)
5325 return build_min (VA_ARG_EXPR
, type
, expr
);
5327 type
= complete_type_or_else (type
, NULL_TREE
);
5329 if (expr
== error_mark_node
|| !type
)
5330 return error_mark_node
;
5332 expr
= mark_lvalue_use (expr
);
5334 if (type_has_nontrivial_copy_init (type
)
5335 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type
)
5336 || TREE_CODE (type
) == REFERENCE_TYPE
)
5338 /* Remove reference types so we don't ICE later on. */
5339 tree type1
= non_reference (type
);
5340 /* conditionally-supported behavior [expr.call] 5.2.2/7. */
5341 error ("cannot receive objects of non-trivially-copyable type %q#T "
5342 "through %<...%>; ", type
);
5343 expr
= convert (build_pointer_type (type1
), null_node
);
5344 expr
= cp_build_indirect_ref (expr
, RO_NULL
, tf_warning_or_error
);
5348 return build_va_arg (input_location
, expr
, type
);
5351 /* TYPE has been given to va_arg. Apply the default conversions which
5352 would have happened when passed via ellipsis. Return the promoted
5353 type, or the passed type if there is no change. */
5356 cxx_type_promotes_to (tree type
)
5360 /* Perform the array-to-pointer and function-to-pointer
5362 type
= type_decays_to (type
);
5364 promote
= type_promotes_to (type
);
5365 if (same_type_p (type
, promote
))
5371 /* ARG is a default argument expression being passed to a parameter of
5372 the indicated TYPE, which is a parameter to FN. Do any required
5373 conversions. Return the converted value. */
5375 static GTY(()) VEC(tree
,gc
) *default_arg_context
;
5378 convert_default_arg (tree type
, tree arg
, tree fn
, int parmnum
)
5383 /* If the ARG is an unparsed default argument expression, the
5384 conversion cannot be performed. */
5385 if (TREE_CODE (arg
) == DEFAULT_ARG
)
5387 error ("the default argument for parameter %d of %qD has "
5388 "not yet been parsed",
5390 return error_mark_node
;
5393 /* Detect recursion. */
5394 for (i
= 0; VEC_iterate (tree
, default_arg_context
, i
, t
); ++i
)
5397 error ("recursive evaluation of default argument for %q#D", fn
);
5398 return error_mark_node
;
5400 VEC_safe_push (tree
, gc
, default_arg_context
, fn
);
5402 if (fn
&& DECL_TEMPLATE_INFO (fn
))
5403 arg
= tsubst_default_argument (fn
, type
, arg
);
5409 The names in the expression are bound, and the semantic
5410 constraints are checked, at the point where the default
5411 expressions appears.
5413 we must not perform access checks here. */
5414 push_deferring_access_checks (dk_no_check
);
5415 arg
= break_out_target_exprs (arg
);
5416 if (TREE_CODE (arg
) == CONSTRUCTOR
)
5418 arg
= digest_init (type
, arg
);
5419 arg
= convert_for_initialization (0, type
, arg
, LOOKUP_NORMAL
,
5420 ICR_DEFAULT_ARGUMENT
, fn
, parmnum
,
5421 tf_warning_or_error
);
5425 /* We must make a copy of ARG, in case subsequent processing
5426 alters any part of it. For example, during gimplification a
5427 cast of the form (T) &X::f (where "f" is a member function)
5428 will lead to replacing the PTRMEM_CST for &X::f with a
5429 VAR_DECL. We can avoid the copy for constants, since they
5430 are never modified in place. */
5431 if (!CONSTANT_CLASS_P (arg
))
5432 arg
= unshare_expr (arg
);
5433 arg
= convert_for_initialization (0, type
, arg
, LOOKUP_NORMAL
,
5434 ICR_DEFAULT_ARGUMENT
, fn
, parmnum
,
5435 tf_warning_or_error
);
5436 arg
= convert_for_arg_passing (type
, arg
);
5438 pop_deferring_access_checks();
5440 VEC_pop (tree
, default_arg_context
);
5445 /* Returns the type which will really be used for passing an argument of
5449 type_passed_as (tree type
)
5451 /* Pass classes with copy ctors by invisible reference. */
5452 if (TREE_ADDRESSABLE (type
))
5454 type
= build_reference_type (type
);
5455 /* There are no other pointers to this temporary. */
5456 type
= cp_build_qualified_type (type
, TYPE_QUAL_RESTRICT
);
5458 else if (targetm
.calls
.promote_prototypes (type
)
5459 && INTEGRAL_TYPE_P (type
)
5460 && COMPLETE_TYPE_P (type
)
5461 && INT_CST_LT_UNSIGNED (TYPE_SIZE (type
),
5462 TYPE_SIZE (integer_type_node
)))
5463 type
= integer_type_node
;
5468 /* Actually perform the appropriate conversion. */
5471 convert_for_arg_passing (tree type
, tree val
)
5475 /* If VAL is a bitfield, then -- since it has already been converted
5476 to TYPE -- it cannot have a precision greater than TYPE.
5478 If it has a smaller precision, we must widen it here. For
5479 example, passing "int f:3;" to a function expecting an "int" will
5480 not result in any conversion before this point.
5482 If the precision is the same we must not risk widening. For
5483 example, the COMPONENT_REF for a 32-bit "long long" bitfield will
5484 often have type "int", even though the C++ type for the field is
5485 "long long". If the value is being passed to a function
5486 expecting an "int", then no conversions will be required. But,
5487 if we call convert_bitfield_to_declared_type, the bitfield will
5488 be converted to "long long". */
5489 bitfield_type
= is_bitfield_expr_with_lowered_type (val
);
5491 && TYPE_PRECISION (TREE_TYPE (val
)) < TYPE_PRECISION (type
))
5492 val
= convert_to_integer (TYPE_MAIN_VARIANT (bitfield_type
), val
);
5494 if (val
== error_mark_node
)
5496 /* Pass classes with copy ctors by invisible reference. */
5497 else if (TREE_ADDRESSABLE (type
))
5498 val
= build1 (ADDR_EXPR
, build_reference_type (type
), val
);
5499 else if (targetm
.calls
.promote_prototypes (type
)
5500 && INTEGRAL_TYPE_P (type
)
5501 && COMPLETE_TYPE_P (type
)
5502 && INT_CST_LT_UNSIGNED (TYPE_SIZE (type
),
5503 TYPE_SIZE (integer_type_node
)))
5504 val
= perform_integral_promotions (val
);
5505 if (warn_missing_format_attribute
)
5507 tree rhstype
= TREE_TYPE (val
);
5508 const enum tree_code coder
= TREE_CODE (rhstype
);
5509 const enum tree_code codel
= TREE_CODE (type
);
5510 if ((codel
== POINTER_TYPE
|| codel
== REFERENCE_TYPE
)
5512 && check_missing_format_attribute (type
, rhstype
))
5513 warning (OPT_Wmissing_format_attribute
,
5514 "argument of function call might be a candidate for a format attribute");
5519 /* Returns true iff FN is a function with magic varargs, i.e. ones for
5520 which no conversions at all should be done. This is true for some
5521 builtins which don't act like normal functions. */
5524 magic_varargs_p (tree fn
)
5526 if (DECL_BUILT_IN (fn
))
5527 switch (DECL_FUNCTION_CODE (fn
))
5529 case BUILT_IN_CLASSIFY_TYPE
:
5530 case BUILT_IN_CONSTANT_P
:
5531 case BUILT_IN_NEXT_ARG
:
5532 case BUILT_IN_VA_START
:
5536 return lookup_attribute ("type generic",
5537 TYPE_ATTRIBUTES (TREE_TYPE (fn
))) != 0;
5543 /* Subroutine of the various build_*_call functions. Overload resolution
5544 has chosen a winning candidate CAND; build up a CALL_EXPR accordingly.
5545 ARGS is a TREE_LIST of the unconverted arguments to the call. FLAGS is a
5546 bitmask of various LOOKUP_* flags which apply to the call itself. */
5549 build_over_call (struct z_candidate
*cand
, int flags
, tsubst_flags_t complain
)
5552 const VEC(tree
,gc
) *args
= cand
->args
;
5553 tree first_arg
= cand
->first_arg
;
5554 conversion
**convs
= cand
->convs
;
5556 tree parm
= TYPE_ARG_TYPES (TREE_TYPE (fn
));
5561 unsigned int arg_index
= 0;
5565 bool already_used
= false;
5567 /* In a template, there is no need to perform all of the work that
5568 is normally done. We are only interested in the type of the call
5569 expression, i.e., the return type of the function. Any semantic
5570 errors will be deferred until the template is instantiated. */
5571 if (processing_template_decl
)
5575 const tree
*argarray
;
5578 return_type
= TREE_TYPE (TREE_TYPE (fn
));
5579 nargs
= VEC_length (tree
, args
);
5580 if (first_arg
== NULL_TREE
)
5581 argarray
= VEC_address (tree
, CONST_CAST (VEC(tree
,gc
) *, args
));
5589 alcarray
= XALLOCAVEC (tree
, nargs
);
5590 alcarray
[0] = first_arg
;
5591 for (ix
= 0; VEC_iterate (tree
, args
, ix
, arg
); ++ix
)
5592 alcarray
[ix
+ 1] = arg
;
5593 argarray
= alcarray
;
5595 expr
= build_call_array_loc (input_location
,
5596 return_type
, build_addr_func (fn
), nargs
,
5598 if (TREE_THIS_VOLATILE (fn
) && cfun
)
5599 current_function_returns_abnormally
= 1;
5600 if (!VOID_TYPE_P (return_type
))
5601 require_complete_type (return_type
);
5602 return convert_from_reference (expr
);
5605 /* Give any warnings we noticed during overload resolution. */
5606 if (cand
->warnings
&& (complain
& tf_warning
))
5608 struct candidate_warning
*w
;
5609 for (w
= cand
->warnings
; w
; w
= w
->next
)
5610 joust (cand
, w
->loser
, 1);
5613 /* Make =delete work with SFINAE. */
5614 if (DECL_DELETED_FN (fn
) && !(complain
& tf_error
))
5615 return error_mark_node
;
5617 if (DECL_FUNCTION_MEMBER_P (fn
))
5620 /* If FN is a template function, two cases must be considered.
5625 template <class T> void f();
5627 template <class T> struct B {
5631 struct C : A, B<int> {
5633 using B<int>::g; // #2
5636 In case #1 where `A::f' is a member template, DECL_ACCESS is
5637 recorded in the primary template but not in its specialization.
5638 We check access of FN using its primary template.
5640 In case #2, where `B<int>::g' has a DECL_TEMPLATE_INFO simply
5641 because it is a member of class template B, DECL_ACCESS is
5642 recorded in the specialization `B<int>::g'. We cannot use its
5643 primary template because `B<T>::g' and `B<int>::g' may have
5644 different access. */
5645 if (DECL_TEMPLATE_INFO (fn
)
5646 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (fn
)))
5647 access_fn
= DECL_TI_TEMPLATE (fn
);
5650 if (flags
& LOOKUP_SPECULATIVE
)
5652 /* If we're checking for implicit delete, we don't want access
5654 if (!accessible_p (cand
->access_path
, access_fn
, true))
5656 /* Unless we're under maybe_explain_implicit_delete. */
5657 if (flags
& LOOKUP_COMPLAIN
)
5658 enforce_access (cand
->access_path
, access_fn
, fn
);
5659 return error_mark_node
;
5663 perform_or_defer_access_check (cand
->access_path
, access_fn
, fn
);
5666 /* If we're checking for implicit delete, don't bother with argument
5668 if (flags
& LOOKUP_SPECULATIVE
)
5670 if (DECL_DELETED_FN (fn
))
5672 if (flags
& LOOKUP_COMPLAIN
)
5674 return error_mark_node
;
5676 if (cand
->viable
== 1)
5678 else if (!(flags
& LOOKUP_COMPLAIN
))
5679 /* Reject bad conversions now. */
5680 return error_mark_node
;
5681 /* else continue to get conversion error. */
5684 /* Find maximum size of vector to hold converted arguments. */
5685 parmlen
= list_length (parm
);
5686 nargs
= VEC_length (tree
, args
) + (first_arg
!= NULL_TREE
? 1 : 0);
5687 if (parmlen
> nargs
)
5689 argarray
= XALLOCAVEC (tree
, nargs
);
5691 /* The implicit parameters to a constructor are not considered by overload
5692 resolution, and must be of the proper type. */
5693 if (DECL_CONSTRUCTOR_P (fn
))
5695 if (first_arg
!= NULL_TREE
)
5697 argarray
[j
++] = first_arg
;
5698 first_arg
= NULL_TREE
;
5702 argarray
[j
++] = VEC_index (tree
, args
, arg_index
);
5705 parm
= TREE_CHAIN (parm
);
5706 /* We should never try to call the abstract constructor. */
5707 gcc_assert (!DECL_HAS_IN_CHARGE_PARM_P (fn
));
5709 if (DECL_HAS_VTT_PARM_P (fn
))
5711 argarray
[j
++] = VEC_index (tree
, args
, arg_index
);
5713 parm
= TREE_CHAIN (parm
);
5716 /* Bypass access control for 'this' parameter. */
5717 else if (TREE_CODE (TREE_TYPE (fn
)) == METHOD_TYPE
)
5719 tree parmtype
= TREE_VALUE (parm
);
5720 tree arg
= (first_arg
!= NULL_TREE
5722 : VEC_index (tree
, args
, arg_index
));
5723 tree argtype
= TREE_TYPE (arg
);
5727 if (convs
[i
]->bad_p
)
5729 if (complain
& tf_error
)
5730 permerror (input_location
, "passing %qT as %<this%> argument of %q#D discards qualifiers",
5731 TREE_TYPE (argtype
), fn
);
5733 return error_mark_node
;
5736 /* [class.mfct.nonstatic]: If a nonstatic member function of a class
5737 X is called for an object that is not of type X, or of a type
5738 derived from X, the behavior is undefined.
5740 So we can assume that anything passed as 'this' is non-null, and
5741 optimize accordingly. */
5742 gcc_assert (TREE_CODE (parmtype
) == POINTER_TYPE
);
5743 /* Convert to the base in which the function was declared. */
5744 gcc_assert (cand
->conversion_path
!= NULL_TREE
);
5745 converted_arg
= build_base_path (PLUS_EXPR
,
5747 cand
->conversion_path
,
5749 /* Check that the base class is accessible. */
5750 if (!accessible_base_p (TREE_TYPE (argtype
),
5751 BINFO_TYPE (cand
->conversion_path
), true))
5752 error ("%qT is not an accessible base of %qT",
5753 BINFO_TYPE (cand
->conversion_path
),
5754 TREE_TYPE (argtype
));
5755 /* If fn was found by a using declaration, the conversion path
5756 will be to the derived class, not the base declaring fn. We
5757 must convert from derived to base. */
5758 base_binfo
= lookup_base (TREE_TYPE (TREE_TYPE (converted_arg
)),
5759 TREE_TYPE (parmtype
), ba_unique
, NULL
);
5760 converted_arg
= build_base_path (PLUS_EXPR
, converted_arg
,
5763 argarray
[j
++] = converted_arg
;
5764 parm
= TREE_CHAIN (parm
);
5765 if (first_arg
!= NULL_TREE
)
5766 first_arg
= NULL_TREE
;
5773 gcc_assert (first_arg
== NULL_TREE
);
5774 for (; arg_index
< VEC_length (tree
, args
) && parm
;
5775 parm
= TREE_CHAIN (parm
), ++arg_index
, ++i
)
5777 tree type
= TREE_VALUE (parm
);
5778 tree arg
= VEC_index (tree
, args
, arg_index
);
5782 /* Don't make a copy here if build_call is going to. */
5783 if (conv
->kind
== ck_rvalue
5784 && COMPLETE_TYPE_P (complete_type (type
))
5785 && !TREE_ADDRESSABLE (type
))
5786 conv
= conv
->u
.next
;
5788 /* Warn about initializer_list deduction that isn't currently in the
5790 if (cxx_dialect
> cxx98
5791 && flag_deduce_init_list
5792 && cand
->template_decl
5793 && is_std_init_list (non_reference (type
))
5794 && BRACE_ENCLOSED_INITIALIZER_P (arg
))
5796 tree tmpl
= TI_TEMPLATE (cand
->template_decl
);
5797 tree realparm
= chain_index (j
, DECL_ARGUMENTS (cand
->fn
));
5798 tree patparm
= get_pattern_parm (realparm
, tmpl
);
5799 tree pattype
= TREE_TYPE (patparm
);
5800 if (PACK_EXPANSION_P (pattype
))
5801 pattype
= PACK_EXPANSION_PATTERN (pattype
);
5802 pattype
= non_reference (pattype
);
5804 if (TREE_CODE (pattype
) == TEMPLATE_TYPE_PARM
5805 && (cand
->explicit_targs
== NULL_TREE
5806 || (TREE_VEC_LENGTH (cand
->explicit_targs
)
5807 <= TEMPLATE_TYPE_IDX (pattype
))))
5809 pedwarn (input_location
, 0, "deducing %qT as %qT",
5810 non_reference (TREE_TYPE (patparm
)),
5811 non_reference (type
));
5812 pedwarn (input_location
, 0, " in call to %q+D", cand
->fn
);
5813 pedwarn (input_location
, 0,
5814 " (you can disable this with -fno-deduce-init-list)");
5818 val
= convert_like_with_context (conv
, arg
, fn
, i
-is_method
, complain
);
5820 val
= convert_for_arg_passing (type
, val
);
5821 if (val
== error_mark_node
)
5822 return error_mark_node
;
5824 argarray
[j
++] = val
;
5827 /* Default arguments */
5828 for (; parm
&& parm
!= void_list_node
; parm
= TREE_CHAIN (parm
), i
++)
5829 argarray
[j
++] = convert_default_arg (TREE_VALUE (parm
),
5830 TREE_PURPOSE (parm
),
5833 for (; arg_index
< VEC_length (tree
, args
); ++arg_index
)
5835 tree a
= VEC_index (tree
, args
, arg_index
);
5836 if (magic_varargs_p (fn
))
5837 /* Do no conversions for magic varargs. */
5838 a
= mark_type_use (a
);
5840 a
= convert_arg_to_ellipsis (a
);
5844 gcc_assert (j
<= nargs
);
5847 check_function_arguments (TYPE_ATTRIBUTES (TREE_TYPE (fn
)),
5848 nargs
, argarray
, TYPE_ARG_TYPES (TREE_TYPE (fn
)));
5850 /* Avoid actually calling copy constructors and copy assignment operators,
5853 if (! flag_elide_constructors
)
5854 /* Do things the hard way. */;
5855 else if (cand
->num_convs
== 1
5856 && (DECL_COPY_CONSTRUCTOR_P (fn
)
5857 || DECL_MOVE_CONSTRUCTOR_P (fn
)))
5860 tree arg
= argarray
[num_artificial_parms_for (fn
)];
5862 bool trivial
= trivial_fn_p (fn
);
5864 /* Pull out the real argument, disregarding const-correctness. */
5866 while (CONVERT_EXPR_P (targ
)
5867 || TREE_CODE (targ
) == NON_LVALUE_EXPR
)
5868 targ
= TREE_OPERAND (targ
, 0);
5869 if (TREE_CODE (targ
) == ADDR_EXPR
)
5871 targ
= TREE_OPERAND (targ
, 0);
5872 if (!same_type_ignoring_top_level_qualifiers_p
5873 (TREE_TYPE (TREE_TYPE (arg
)), TREE_TYPE (targ
)))
5882 arg
= cp_build_indirect_ref (arg
, RO_NULL
, complain
);
5884 if (TREE_CODE (arg
) == TARGET_EXPR
5885 && TARGET_EXPR_LIST_INIT_P (arg
))
5887 /* Copy-list-initialization doesn't require the constructor
5890 /* [class.copy]: the copy constructor is implicitly defined even if
5891 the implementation elided its use. */
5895 already_used
= true;
5898 /* If we're creating a temp and we already have one, don't create a
5899 new one. If we're not creating a temp but we get one, use
5900 INIT_EXPR to collapse the temp into our target. Otherwise, if the
5901 ctor is trivial, do a bitwise copy with a simple TARGET_EXPR for a
5902 temp or an INIT_EXPR otherwise. */
5903 fa
= (cand
->first_arg
!= NULL_TREE
5905 : VEC_index (tree
, args
, 0));
5906 if (integer_zerop (fa
))
5908 if (TREE_CODE (arg
) == TARGET_EXPR
)
5911 return force_target_expr (DECL_CONTEXT (fn
), arg
);
5913 else if (TREE_CODE (arg
) == TARGET_EXPR
|| trivial
)
5915 tree to
= stabilize_reference (cp_build_indirect_ref (fa
, RO_NULL
,
5918 val
= build2 (INIT_EXPR
, DECL_CONTEXT (fn
), to
, arg
);
5922 else if (DECL_OVERLOADED_OPERATOR_P (fn
) == NOP_EXPR
5923 && trivial_fn_p (fn
))
5925 tree to
= stabilize_reference
5926 (cp_build_indirect_ref (argarray
[0], RO_NULL
, complain
));
5927 tree type
= TREE_TYPE (to
);
5928 tree as_base
= CLASSTYPE_AS_BASE (type
);
5929 tree arg
= argarray
[1];
5931 if (is_really_empty_class (type
))
5933 /* Avoid copying empty classes. */
5934 val
= build2 (COMPOUND_EXPR
, void_type_node
, to
, arg
);
5935 TREE_NO_WARNING (val
) = 1;
5936 val
= build2 (COMPOUND_EXPR
, type
, val
, to
);
5937 TREE_NO_WARNING (val
) = 1;
5939 else if (tree_int_cst_equal (TYPE_SIZE (type
), TYPE_SIZE (as_base
)))
5941 arg
= cp_build_indirect_ref (arg
, RO_NULL
, complain
);
5942 val
= build2 (MODIFY_EXPR
, TREE_TYPE (to
), to
, arg
);
5946 /* We must only copy the non-tail padding parts.
5947 Use __builtin_memcpy for the bitwise copy.
5948 FIXME fix 22488 so we can go back to using MODIFY_EXPR
5949 instead of an explicit call to memcpy. */
5951 tree arg0
, arg1
, arg2
, t
;
5952 tree test
= NULL_TREE
;
5954 arg2
= TYPE_SIZE_UNIT (as_base
);
5956 arg0
= cp_build_unary_op (ADDR_EXPR
, to
, 0, complain
);
5958 if (!can_trust_pointer_alignment ())
5960 /* If we can't be sure about pointer alignment, a call
5961 to __builtin_memcpy is expanded as a call to memcpy, which
5962 is invalid with identical args. Otherwise it is
5963 expanded as a block move, which should be safe. */
5964 arg0
= save_expr (arg0
);
5965 arg1
= save_expr (arg1
);
5966 test
= build2 (EQ_EXPR
, boolean_type_node
, arg0
, arg1
);
5968 t
= implicit_built_in_decls
[BUILT_IN_MEMCPY
];
5969 t
= build_call_n (t
, 3, arg0
, arg1
, arg2
);
5971 t
= convert (TREE_TYPE (arg0
), t
);
5973 t
= build3 (COND_EXPR
, TREE_TYPE (t
), test
, arg0
, t
);
5974 val
= cp_build_indirect_ref (t
, RO_NULL
, complain
);
5975 TREE_NO_WARNING (val
) = 1;
5984 if (DECL_VINDEX (fn
) && (flags
& LOOKUP_NONVIRTUAL
) == 0)
5987 tree binfo
= lookup_base (TREE_TYPE (TREE_TYPE (argarray
[0])),
5990 gcc_assert (binfo
&& binfo
!= error_mark_node
);
5992 /* Warn about deprecated virtual functions now, since we're about
5993 to throw away the decl. */
5994 if (TREE_DEPRECATED (fn
))
5995 warn_deprecated_use (fn
, NULL_TREE
);
5997 argarray
[0] = build_base_path (PLUS_EXPR
, argarray
[0], binfo
, 1);
5998 if (TREE_SIDE_EFFECTS (argarray
[0]))
5999 argarray
[0] = save_expr (argarray
[0]);
6000 t
= build_pointer_type (TREE_TYPE (fn
));
6001 if (DECL_CONTEXT (fn
) && TYPE_JAVA_INTERFACE (DECL_CONTEXT (fn
)))
6002 fn
= build_java_interface_fn_ref (fn
, argarray
[0]);
6004 fn
= build_vfn_ref (argarray
[0], DECL_VINDEX (fn
));
6008 fn
= build_addr_func (fn
);
6010 return build_cxx_call (fn
, nargs
, argarray
);
6013 /* Build and return a call to FN, using NARGS arguments in ARGARRAY.
6014 This function performs no overload resolution, conversion, or other
6015 high-level operations. */
6018 build_cxx_call (tree fn
, int nargs
, tree
*argarray
)
6022 fn
= build_call_a (fn
, nargs
, argarray
);
6024 /* If this call might throw an exception, note that fact. */
6025 fndecl
= get_callee_fndecl (fn
);
6026 if ((!fndecl
|| !TREE_NOTHROW (fndecl
))
6027 && at_function_scope_p ()
6029 cp_function_chain
->can_throw
= 1;
6031 /* Check that arguments to builtin functions match the expectations. */
6033 && DECL_BUILT_IN (fndecl
)
6034 && DECL_BUILT_IN_CLASS (fndecl
) == BUILT_IN_NORMAL
6035 && !check_builtin_function_arguments (fndecl
, nargs
, argarray
))
6036 return error_mark_node
;
6038 /* Some built-in function calls will be evaluated at compile-time in
6040 fn
= fold_if_not_in_template (fn
);
6042 if (VOID_TYPE_P (TREE_TYPE (fn
)))
6045 fn
= require_complete_type (fn
);
6046 if (fn
== error_mark_node
)
6047 return error_mark_node
;
6049 if (MAYBE_CLASS_TYPE_P (TREE_TYPE (fn
)))
6050 fn
= build_cplus_new (TREE_TYPE (fn
), fn
);
6051 return convert_from_reference (fn
);
6054 static GTY(()) tree java_iface_lookup_fn
;
6056 /* Make an expression which yields the address of the Java interface
6057 method FN. This is achieved by generating a call to libjava's
6058 _Jv_LookupInterfaceMethodIdx(). */
6061 build_java_interface_fn_ref (tree fn
, tree instance
)
6063 tree lookup_fn
, method
, idx
;
6064 tree klass_ref
, iface
, iface_ref
;
6067 if (!java_iface_lookup_fn
)
6069 tree ftype
= build_function_type_list (ptr_type_node
,
6070 ptr_type_node
, ptr_type_node
,
6071 java_int_type_node
, NULL_TREE
);
6072 java_iface_lookup_fn
6073 = add_builtin_function ("_Jv_LookupInterfaceMethodIdx", ftype
,
6074 0, NOT_BUILT_IN
, NULL
, NULL_TREE
);
6077 /* Look up the pointer to the runtime java.lang.Class object for `instance'.
6078 This is the first entry in the vtable. */
6079 klass_ref
= build_vtbl_ref (cp_build_indirect_ref (instance
, RO_NULL
,
6080 tf_warning_or_error
),
6083 /* Get the java.lang.Class pointer for the interface being called. */
6084 iface
= DECL_CONTEXT (fn
);
6085 iface_ref
= lookup_field (iface
, get_identifier ("class$"), 0, false);
6086 if (!iface_ref
|| TREE_CODE (iface_ref
) != VAR_DECL
6087 || DECL_CONTEXT (iface_ref
) != iface
)
6089 error ("could not find class$ field in java interface type %qT",
6091 return error_mark_node
;
6093 iface_ref
= build_address (iface_ref
);
6094 iface_ref
= convert (build_pointer_type (iface
), iface_ref
);
6096 /* Determine the itable index of FN. */
6098 for (method
= TYPE_METHODS (iface
); method
; method
= TREE_CHAIN (method
))
6100 if (!DECL_VIRTUAL_P (method
))
6106 idx
= build_int_cst (NULL_TREE
, i
);
6108 lookup_fn
= build1 (ADDR_EXPR
,
6109 build_pointer_type (TREE_TYPE (java_iface_lookup_fn
)),
6110 java_iface_lookup_fn
);
6111 return build_call_nary (ptr_type_node
, lookup_fn
,
6112 3, klass_ref
, iface_ref
, idx
);
6115 /* Returns the value to use for the in-charge parameter when making a
6116 call to a function with the indicated NAME.
6118 FIXME:Can't we find a neater way to do this mapping? */
6121 in_charge_arg_for_name (tree name
)
6123 if (name
== base_ctor_identifier
6124 || name
== base_dtor_identifier
)
6125 return integer_zero_node
;
6126 else if (name
== complete_ctor_identifier
)
6127 return integer_one_node
;
6128 else if (name
== complete_dtor_identifier
)
6129 return integer_two_node
;
6130 else if (name
== deleting_dtor_identifier
)
6131 return integer_three_node
;
6133 /* This function should only be called with one of the names listed
6139 /* Build a call to a constructor, destructor, or an assignment
6140 operator for INSTANCE, an expression with class type. NAME
6141 indicates the special member function to call; *ARGS are the
6142 arguments. ARGS may be NULL. This may change ARGS. BINFO
6143 indicates the base of INSTANCE that is to be passed as the `this'
6144 parameter to the member function called.
6146 FLAGS are the LOOKUP_* flags to use when processing the call.
6148 If NAME indicates a complete object constructor, INSTANCE may be
6149 NULL_TREE. In this case, the caller will call build_cplus_new to
6150 store the newly constructed object into a VAR_DECL. */
6153 build_special_member_call (tree instance
, tree name
, VEC(tree
,gc
) **args
,
6154 tree binfo
, int flags
, tsubst_flags_t complain
)
6157 /* The type of the subobject to be constructed or destroyed. */
6159 VEC(tree
,gc
) *allocated
= NULL
;
6162 gcc_assert (name
== complete_ctor_identifier
6163 || name
== base_ctor_identifier
6164 || name
== complete_dtor_identifier
6165 || name
== base_dtor_identifier
6166 || name
== deleting_dtor_identifier
6167 || name
== ansi_assopname (NOP_EXPR
));
6170 /* Resolve the name. */
6171 if (!complete_type_or_else (binfo
, NULL_TREE
))
6172 return error_mark_node
;
6174 binfo
= TYPE_BINFO (binfo
);
6177 gcc_assert (binfo
!= NULL_TREE
);
6179 class_type
= BINFO_TYPE (binfo
);
6181 /* Handle the special case where INSTANCE is NULL_TREE. */
6182 if (name
== complete_ctor_identifier
&& !instance
)
6184 instance
= build_int_cst (build_pointer_type (class_type
), 0);
6185 instance
= build1 (INDIRECT_REF
, class_type
, instance
);
6189 if (name
== complete_dtor_identifier
6190 || name
== base_dtor_identifier
6191 || name
== deleting_dtor_identifier
)
6192 gcc_assert (args
== NULL
|| VEC_empty (tree
, *args
));
6194 /* Convert to the base class, if necessary. */
6195 if (!same_type_ignoring_top_level_qualifiers_p
6196 (TREE_TYPE (instance
), BINFO_TYPE (binfo
)))
6198 if (name
!= ansi_assopname (NOP_EXPR
))
6199 /* For constructors and destructors, either the base is
6200 non-virtual, or it is virtual but we are doing the
6201 conversion from a constructor or destructor for the
6202 complete object. In either case, we can convert
6204 instance
= convert_to_base_statically (instance
, binfo
);
6206 /* However, for assignment operators, we must convert
6207 dynamically if the base is virtual. */
6208 instance
= build_base_path (PLUS_EXPR
, instance
,
6209 binfo
, /*nonnull=*/1);
6213 gcc_assert (instance
!= NULL_TREE
);
6215 fns
= lookup_fnfields (binfo
, name
, 1);
6217 /* When making a call to a constructor or destructor for a subobject
6218 that uses virtual base classes, pass down a pointer to a VTT for
6220 if ((name
== base_ctor_identifier
6221 || name
== base_dtor_identifier
)
6222 && CLASSTYPE_VBASECLASSES (class_type
))
6227 /* If the current function is a complete object constructor
6228 or destructor, then we fetch the VTT directly.
6229 Otherwise, we look it up using the VTT we were given. */
6230 vtt
= TREE_CHAIN (CLASSTYPE_VTABLES (current_class_type
));
6231 vtt
= decay_conversion (vtt
);
6232 vtt
= build3 (COND_EXPR
, TREE_TYPE (vtt
),
6233 build2 (EQ_EXPR
, boolean_type_node
,
6234 current_in_charge_parm
, integer_zero_node
),
6237 gcc_assert (BINFO_SUBVTT_INDEX (binfo
));
6238 sub_vtt
= build2 (POINTER_PLUS_EXPR
, TREE_TYPE (vtt
), vtt
,
6239 BINFO_SUBVTT_INDEX (binfo
));
6243 allocated
= make_tree_vector ();
6247 VEC_safe_insert (tree
, gc
, *args
, 0, sub_vtt
);
6250 ret
= build_new_method_call (instance
, fns
, args
,
6251 TYPE_BINFO (BINFO_TYPE (binfo
)),
6255 if (allocated
!= NULL
)
6256 release_tree_vector (allocated
);
6261 /* Return the NAME, as a C string. The NAME indicates a function that
6262 is a member of TYPE. *FREE_P is set to true if the caller must
6263 free the memory returned.
6265 Rather than go through all of this, we should simply set the names
6266 of constructors and destructors appropriately, and dispense with
6267 ctor_identifier, dtor_identifier, etc. */
6270 name_as_c_string (tree name
, tree type
, bool *free_p
)
6274 /* Assume that we will not allocate memory. */
6276 /* Constructors and destructors are special. */
6277 if (IDENTIFIER_CTOR_OR_DTOR_P (name
))
6280 = CONST_CAST (char *, identifier_to_locale (IDENTIFIER_POINTER (constructor_name (type
))));
6281 /* For a destructor, add the '~'. */
6282 if (name
== complete_dtor_identifier
6283 || name
== base_dtor_identifier
6284 || name
== deleting_dtor_identifier
)
6286 pretty_name
= concat ("~", pretty_name
, NULL
);
6287 /* Remember that we need to free the memory allocated. */
6291 else if (IDENTIFIER_TYPENAME_P (name
))
6293 pretty_name
= concat ("operator ",
6294 type_as_string_translate (TREE_TYPE (name
),
6295 TFF_PLAIN_IDENTIFIER
),
6297 /* Remember that we need to free the memory allocated. */
6301 pretty_name
= CONST_CAST (char *, identifier_to_locale (IDENTIFIER_POINTER (name
)));
6306 /* Build a call to "INSTANCE.FN (ARGS)". If FN_P is non-NULL, it will
6307 be set, upon return, to the function called. ARGS may be NULL.
6308 This may change ARGS. */
6311 build_new_method_call (tree instance
, tree fns
, VEC(tree
,gc
) **args
,
6312 tree conversion_path
, int flags
,
6313 tree
*fn_p
, tsubst_flags_t complain
)
6315 struct z_candidate
*candidates
= 0, *cand
;
6316 tree explicit_targs
= NULL_TREE
;
6317 tree basetype
= NULL_TREE
;
6320 tree first_mem_arg
= NULL_TREE
;
6323 bool skip_first_for_error
;
6324 VEC(tree
,gc
) *user_args
;
6327 int template_only
= 0;
6331 VEC(tree
,gc
) *orig_args
= NULL
;
6334 gcc_assert (instance
!= NULL_TREE
);
6336 /* We don't know what function we're going to call, yet. */
6340 if (error_operand_p (instance
)
6341 || !fns
|| error_operand_p (fns
))
6342 return error_mark_node
;
6344 if (!BASELINK_P (fns
))
6346 if (complain
& tf_error
)
6347 error ("call to non-function %qD", fns
);
6348 return error_mark_node
;
6351 orig_instance
= instance
;
6354 /* Dismantle the baselink to collect all the information we need. */
6355 if (!conversion_path
)
6356 conversion_path
= BASELINK_BINFO (fns
);
6357 access_binfo
= BASELINK_ACCESS_BINFO (fns
);
6358 optype
= BASELINK_OPTYPE (fns
);
6359 fns
= BASELINK_FUNCTIONS (fns
);
6360 if (TREE_CODE (fns
) == TEMPLATE_ID_EXPR
)
6362 explicit_targs
= TREE_OPERAND (fns
, 1);
6363 fns
= TREE_OPERAND (fns
, 0);
6366 gcc_assert (TREE_CODE (fns
) == FUNCTION_DECL
6367 || TREE_CODE (fns
) == TEMPLATE_DECL
6368 || TREE_CODE (fns
) == OVERLOAD
);
6369 fn
= get_first_fn (fns
);
6370 name
= DECL_NAME (fn
);
6372 basetype
= TYPE_MAIN_VARIANT (TREE_TYPE (instance
));
6373 gcc_assert (CLASS_TYPE_P (basetype
));
6375 if (processing_template_decl
)
6377 orig_args
= args
== NULL
? NULL
: make_tree_vector_copy (*args
);
6378 instance
= build_non_dependent_expr (instance
);
6380 make_args_non_dependent (*args
);
6383 user_args
= args
== NULL
? NULL
: *args
;
6384 /* Under DR 147 A::A() is an invalid constructor call,
6385 not a functional cast. */
6386 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (fn
))
6388 if (! (complain
& tf_error
))
6389 return error_mark_node
;
6391 permerror (input_location
,
6392 "cannot call constructor %<%T::%D%> directly",
6394 permerror (input_location
, " for a function-style cast, remove the "
6395 "redundant %<::%D%>", name
);
6396 call
= build_functional_cast (basetype
, build_tree_list_vec (user_args
),
6401 /* Figure out whether to skip the first argument for the error
6402 message we will display to users if an error occurs. We don't
6403 want to display any compiler-generated arguments. The "this"
6404 pointer hasn't been added yet. However, we must remove the VTT
6405 pointer if this is a call to a base-class constructor or
6407 skip_first_for_error
= false;
6408 if (IDENTIFIER_CTOR_OR_DTOR_P (name
))
6410 /* Callers should explicitly indicate whether they want to construct
6411 the complete object or just the part without virtual bases. */
6412 gcc_assert (name
!= ctor_identifier
);
6413 /* Similarly for destructors. */
6414 gcc_assert (name
!= dtor_identifier
);
6415 /* Remove the VTT pointer, if present. */
6416 if ((name
== base_ctor_identifier
|| name
== base_dtor_identifier
)
6417 && CLASSTYPE_VBASECLASSES (basetype
))
6418 skip_first_for_error
= true;
6421 /* Process the argument list. */
6422 if (args
!= NULL
&& *args
!= NULL
)
6424 *args
= resolve_args (*args
);
6426 return error_mark_node
;
6429 instance_ptr
= build_this (instance
);
6431 /* It's OK to call destructors and constructors on cv-qualified objects.
6432 Therefore, convert the INSTANCE_PTR to the unqualified type, if
6434 if (DECL_DESTRUCTOR_P (fn
)
6435 || DECL_CONSTRUCTOR_P (fn
))
6437 tree type
= build_pointer_type (basetype
);
6438 if (!same_type_p (type
, TREE_TYPE (instance_ptr
)))
6439 instance_ptr
= build_nop (type
, instance_ptr
);
6441 if (DECL_DESTRUCTOR_P (fn
))
6442 name
= complete_dtor_identifier
;
6444 first_mem_arg
= instance_ptr
;
6446 /* Get the high-water mark for the CONVERSION_OBSTACK. */
6447 p
= conversion_obstack_alloc (0);
6449 /* If CONSTRUCTOR_IS_DIRECT_INIT is set, this was a T{ } form
6450 initializer, not T({ }). */
6451 if (DECL_CONSTRUCTOR_P (fn
) && args
!= NULL
&& !VEC_empty (tree
, *args
)
6452 && BRACE_ENCLOSED_INITIALIZER_P (VEC_index (tree
, *args
, 0))
6453 && CONSTRUCTOR_IS_DIRECT_INIT (VEC_index (tree
, *args
, 0)))
6455 gcc_assert (VEC_length (tree
, *args
) == 1
6456 && !(flags
& LOOKUP_ONLYCONVERTING
));
6458 add_list_candidates (fns
, first_mem_arg
, VEC_index (tree
, *args
, 0),
6459 basetype
, explicit_targs
, template_only
,
6460 conversion_path
, access_binfo
, flags
, &candidates
);
6464 add_candidates (fns
, first_mem_arg
, user_args
, optype
,
6465 explicit_targs
, template_only
, conversion_path
,
6466 access_binfo
, flags
, &candidates
);
6468 any_viable_p
= false;
6469 candidates
= splice_viable (candidates
, pedantic
, &any_viable_p
);
6473 if (complain
& tf_error
)
6475 if (!COMPLETE_TYPE_P (basetype
))
6476 cxx_incomplete_type_error (instance_ptr
, basetype
);
6478 error ("no matching function for call to %<%T::operator %T(%A)%#V%>",
6479 basetype
, optype
, build_tree_list_vec (user_args
),
6480 TREE_TYPE (TREE_TYPE (instance_ptr
)));
6487 pretty_name
= name_as_c_string (name
, basetype
, &free_p
);
6488 arglist
= build_tree_list_vec (user_args
);
6489 if (skip_first_for_error
)
6490 arglist
= TREE_CHAIN (arglist
);
6491 error ("no matching function for call to %<%T::%s(%A)%#V%>",
6492 basetype
, pretty_name
, arglist
,
6493 TREE_TYPE (TREE_TYPE (instance_ptr
)));
6497 print_z_candidates (candidates
);
6499 call
= error_mark_node
;
6503 cand
= tourney (candidates
);
6510 if (complain
& tf_error
)
6512 pretty_name
= name_as_c_string (name
, basetype
, &free_p
);
6513 arglist
= build_tree_list_vec (user_args
);
6514 if (skip_first_for_error
)
6515 arglist
= TREE_CHAIN (arglist
);
6516 error ("call of overloaded %<%s(%A)%> is ambiguous", pretty_name
,
6518 print_z_candidates (candidates
);
6522 call
= error_mark_node
;
6528 if (!(flags
& LOOKUP_NONVIRTUAL
)
6529 && DECL_PURE_VIRTUAL_P (fn
)
6530 && instance
== current_class_ref
6531 && (DECL_CONSTRUCTOR_P (current_function_decl
)
6532 || DECL_DESTRUCTOR_P (current_function_decl
))
6533 && (complain
& tf_warning
))
6534 /* This is not an error, it is runtime undefined
6536 warning (0, (DECL_CONSTRUCTOR_P (current_function_decl
) ?
6537 "pure virtual %q#D called from constructor"
6538 : "pure virtual %q#D called from destructor"),
6541 if (TREE_CODE (TREE_TYPE (fn
)) == METHOD_TYPE
6542 && is_dummy_object (instance_ptr
))
6544 if (complain
& tf_error
)
6545 error ("cannot call member function %qD without object",
6547 call
= error_mark_node
;
6551 if (DECL_VINDEX (fn
) && ! (flags
& LOOKUP_NONVIRTUAL
)
6552 && resolves_to_fixed_type_p (instance
, 0))
6553 flags
|= LOOKUP_NONVIRTUAL
;
6554 /* Now we know what function is being called. */
6557 /* Build the actual CALL_EXPR. */
6558 call
= build_over_call (cand
, flags
, complain
);
6559 /* In an expression of the form `a->f()' where `f' turns
6560 out to be a static member function, `a' is
6561 none-the-less evaluated. */
6562 if (TREE_CODE (TREE_TYPE (fn
)) != METHOD_TYPE
6563 && !is_dummy_object (instance_ptr
)
6564 && TREE_SIDE_EFFECTS (instance_ptr
))
6565 call
= build2 (COMPOUND_EXPR
, TREE_TYPE (call
),
6566 instance_ptr
, call
);
6567 else if (call
!= error_mark_node
6568 && DECL_DESTRUCTOR_P (cand
->fn
)
6569 && !VOID_TYPE_P (TREE_TYPE (call
)))
6570 /* An explicit call of the form "x->~X()" has type
6571 "void". However, on platforms where destructors
6572 return "this" (i.e., those where
6573 targetm.cxx.cdtor_returns_this is true), such calls
6574 will appear to have a return value of pointer type
6575 to the low-level call machinery. We do not want to
6576 change the low-level machinery, since we want to be
6577 able to optimize "delete f()" on such platforms as
6578 "operator delete(~X(f()))" (rather than generating
6579 "t = f(), ~X(t), operator delete (t)"). */
6580 call
= build_nop (void_type_node
, call
);
6585 if (processing_template_decl
&& call
!= error_mark_node
)
6587 bool cast_to_void
= false;
6589 if (TREE_CODE (call
) == COMPOUND_EXPR
)
6590 call
= TREE_OPERAND (call
, 1);
6591 else if (TREE_CODE (call
) == NOP_EXPR
)
6593 cast_to_void
= true;
6594 call
= TREE_OPERAND (call
, 0);
6596 if (TREE_CODE (call
) == INDIRECT_REF
)
6597 call
= TREE_OPERAND (call
, 0);
6598 call
= (build_min_non_dep_call_vec
6600 build_min (COMPONENT_REF
, TREE_TYPE (CALL_EXPR_FN (call
)),
6601 orig_instance
, orig_fns
, NULL_TREE
),
6603 call
= convert_from_reference (call
);
6605 call
= build_nop (void_type_node
, call
);
6608 /* Free all the conversions we allocated. */
6609 obstack_free (&conversion_obstack
, p
);
6611 if (orig_args
!= NULL
)
6612 release_tree_vector (orig_args
);
6617 /* Returns true iff standard conversion sequence ICS1 is a proper
6618 subsequence of ICS2. */
6621 is_subseq (conversion
*ics1
, conversion
*ics2
)
6623 /* We can assume that a conversion of the same code
6624 between the same types indicates a subsequence since we only get
6625 here if the types we are converting from are the same. */
6627 while (ics1
->kind
== ck_rvalue
6628 || ics1
->kind
== ck_lvalue
)
6629 ics1
= ics1
->u
.next
;
6633 while (ics2
->kind
== ck_rvalue
6634 || ics2
->kind
== ck_lvalue
)
6635 ics2
= ics2
->u
.next
;
6637 if (ics2
->kind
== ck_user
6638 || ics2
->kind
== ck_ambig
6639 || ics2
->kind
== ck_aggr
6640 || ics2
->kind
== ck_list
6641 || ics2
->kind
== ck_identity
)
6642 /* At this point, ICS1 cannot be a proper subsequence of
6643 ICS2. We can get a USER_CONV when we are comparing the
6644 second standard conversion sequence of two user conversion
6648 ics2
= ics2
->u
.next
;
6650 if (ics2
->kind
== ics1
->kind
6651 && same_type_p (ics2
->type
, ics1
->type
)
6652 && same_type_p (ics2
->u
.next
->type
,
6653 ics1
->u
.next
->type
))
6658 /* Returns nonzero iff DERIVED is derived from BASE. The inputs may
6659 be any _TYPE nodes. */
6662 is_properly_derived_from (tree derived
, tree base
)
6664 if (!CLASS_TYPE_P (derived
) || !CLASS_TYPE_P (base
))
6667 /* We only allow proper derivation here. The DERIVED_FROM_P macro
6668 considers every class derived from itself. */
6669 return (!same_type_ignoring_top_level_qualifiers_p (derived
, base
)
6670 && DERIVED_FROM_P (base
, derived
));
6673 /* We build the ICS for an implicit object parameter as a pointer
6674 conversion sequence. However, such a sequence should be compared
6675 as if it were a reference conversion sequence. If ICS is the
6676 implicit conversion sequence for an implicit object parameter,
6677 modify it accordingly. */
6680 maybe_handle_implicit_object (conversion
**ics
)
6684 /* [over.match.funcs]
6686 For non-static member functions, the type of the
6687 implicit object parameter is "reference to cv X"
6688 where X is the class of which the function is a
6689 member and cv is the cv-qualification on the member
6690 function declaration. */
6691 conversion
*t
= *ics
;
6692 tree reference_type
;
6694 /* The `this' parameter is a pointer to a class type. Make the
6695 implicit conversion talk about a reference to that same class
6697 reference_type
= TREE_TYPE (t
->type
);
6698 reference_type
= build_reference_type (reference_type
);
6700 if (t
->kind
== ck_qual
)
6702 if (t
->kind
== ck_ptr
)
6704 t
= build_identity_conv (TREE_TYPE (t
->type
), NULL_TREE
);
6705 t
= direct_reference_binding (reference_type
, t
);
6707 t
->rvaluedness_matches_p
= 0;
6712 /* If *ICS is a REF_BIND set *ICS to the remainder of the conversion,
6713 and return the initial reference binding conversion. Otherwise,
6714 leave *ICS unchanged and return NULL. */
6717 maybe_handle_ref_bind (conversion
**ics
)
6719 if ((*ics
)->kind
== ck_ref_bind
)
6721 conversion
*old_ics
= *ics
;
6722 *ics
= old_ics
->u
.next
;
6723 (*ics
)->user_conv_p
= old_ics
->user_conv_p
;
6730 /* Compare two implicit conversion sequences according to the rules set out in
6731 [over.ics.rank]. Return values:
6733 1: ics1 is better than ics2
6734 -1: ics2 is better than ics1
6735 0: ics1 and ics2 are indistinguishable */
6738 compare_ics (conversion
*ics1
, conversion
*ics2
)
6744 tree deref_from_type1
= NULL_TREE
;
6745 tree deref_from_type2
= NULL_TREE
;
6746 tree deref_to_type1
= NULL_TREE
;
6747 tree deref_to_type2
= NULL_TREE
;
6748 conversion_rank rank1
, rank2
;
6750 /* REF_BINDING is nonzero if the result of the conversion sequence
6751 is a reference type. In that case REF_CONV is the reference
6752 binding conversion. */
6753 conversion
*ref_conv1
;
6754 conversion
*ref_conv2
;
6756 /* Handle implicit object parameters. */
6757 maybe_handle_implicit_object (&ics1
);
6758 maybe_handle_implicit_object (&ics2
);
6760 /* Handle reference parameters. */
6761 ref_conv1
= maybe_handle_ref_bind (&ics1
);
6762 ref_conv2
= maybe_handle_ref_bind (&ics2
);
6764 /* List-initialization sequence L1 is a better conversion sequence than
6765 list-initialization sequence L2 if L1 converts to
6766 std::initializer_list<X> for some X and L2 does not. */
6767 if (ics1
->kind
== ck_list
&& ics2
->kind
!= ck_list
)
6769 if (ics2
->kind
== ck_list
&& ics1
->kind
!= ck_list
)
6774 When comparing the basic forms of implicit conversion sequences (as
6775 defined in _over.best.ics_)
6777 --a standard conversion sequence (_over.ics.scs_) is a better
6778 conversion sequence than a user-defined conversion sequence
6779 or an ellipsis conversion sequence, and
6781 --a user-defined conversion sequence (_over.ics.user_) is a
6782 better conversion sequence than an ellipsis conversion sequence
6783 (_over.ics.ellipsis_). */
6784 rank1
= CONVERSION_RANK (ics1
);
6785 rank2
= CONVERSION_RANK (ics2
);
6789 else if (rank1
< rank2
)
6792 if (rank1
== cr_bad
)
6794 /* Both ICS are bad. We try to make a decision based on what would
6795 have happened if they'd been good. This is not an extension,
6796 we'll still give an error when we build up the call; this just
6797 helps us give a more helpful error message. */
6798 rank1
= BAD_CONVERSION_RANK (ics1
);
6799 rank2
= BAD_CONVERSION_RANK (ics2
);
6803 else if (rank1
< rank2
)
6806 /* We couldn't make up our minds; try to figure it out below. */
6809 if (ics1
->ellipsis_p
|| ics1
->kind
== ck_list
)
6810 /* Both conversions are ellipsis conversions or both are building a
6811 std::initializer_list. */
6814 /* User-defined conversion sequence U1 is a better conversion sequence
6815 than another user-defined conversion sequence U2 if they contain the
6816 same user-defined conversion operator or constructor and if the sec-
6817 ond standard conversion sequence of U1 is better than the second
6818 standard conversion sequence of U2. */
6820 if (ics1
->user_conv_p
)
6825 for (t1
= ics1
; t1
->kind
!= ck_user
; t1
= t1
->u
.next
)
6826 if (t1
->kind
== ck_ambig
|| t1
->kind
== ck_aggr
)
6828 for (t2
= ics2
; t2
->kind
!= ck_user
; t2
= t2
->u
.next
)
6829 if (t2
->kind
== ck_ambig
|| t2
->kind
== ck_aggr
)
6832 if (t1
->kind
!= t2
->kind
)
6834 else if (t1
->kind
== ck_user
)
6836 if (t1
->cand
->fn
!= t2
->cand
->fn
)
6841 /* For ambiguous or aggregate conversions, use the target type as
6842 a proxy for the conversion function. */
6843 if (!same_type_ignoring_top_level_qualifiers_p (t1
->type
, t2
->type
))
6847 /* We can just fall through here, after setting up
6848 FROM_TYPE1 and FROM_TYPE2. */
6849 from_type1
= t1
->type
;
6850 from_type2
= t2
->type
;
6857 /* We're dealing with two standard conversion sequences.
6861 Standard conversion sequence S1 is a better conversion
6862 sequence than standard conversion sequence S2 if
6864 --S1 is a proper subsequence of S2 (comparing the conversion
6865 sequences in the canonical form defined by _over.ics.scs_,
6866 excluding any Lvalue Transformation; the identity
6867 conversion sequence is considered to be a subsequence of
6868 any non-identity conversion sequence */
6871 while (t1
->kind
!= ck_identity
)
6873 from_type1
= t1
->type
;
6876 while (t2
->kind
!= ck_identity
)
6878 from_type2
= t2
->type
;
6881 /* One sequence can only be a subsequence of the other if they start with
6882 the same type. They can start with different types when comparing the
6883 second standard conversion sequence in two user-defined conversion
6885 if (same_type_p (from_type1
, from_type2
))
6887 if (is_subseq (ics1
, ics2
))
6889 if (is_subseq (ics2
, ics1
))
6897 --the rank of S1 is better than the rank of S2 (by the rules
6900 Standard conversion sequences are ordered by their ranks: an Exact
6901 Match is a better conversion than a Promotion, which is a better
6902 conversion than a Conversion.
6904 Two conversion sequences with the same rank are indistinguishable
6905 unless one of the following rules applies:
6907 --A conversion that does not a convert a pointer, pointer to member,
6908 or std::nullptr_t to bool is better than one that does.
6910 The ICS_STD_RANK automatically handles the pointer-to-bool rule,
6911 so that we do not have to check it explicitly. */
6912 if (ics1
->rank
< ics2
->rank
)
6914 else if (ics2
->rank
< ics1
->rank
)
6917 to_type1
= ics1
->type
;
6918 to_type2
= ics2
->type
;
6920 /* A conversion from scalar arithmetic type to complex is worse than a
6921 conversion between scalar arithmetic types. */
6922 if (same_type_p (from_type1
, from_type2
)
6923 && ARITHMETIC_TYPE_P (from_type1
)
6924 && ARITHMETIC_TYPE_P (to_type1
)
6925 && ARITHMETIC_TYPE_P (to_type2
)
6926 && ((TREE_CODE (to_type1
) == COMPLEX_TYPE
)
6927 != (TREE_CODE (to_type2
) == COMPLEX_TYPE
)))
6929 if (TREE_CODE (to_type1
) == COMPLEX_TYPE
)
6935 if (TYPE_PTR_P (from_type1
)
6936 && TYPE_PTR_P (from_type2
)
6937 && TYPE_PTR_P (to_type1
)
6938 && TYPE_PTR_P (to_type2
))
6940 deref_from_type1
= TREE_TYPE (from_type1
);
6941 deref_from_type2
= TREE_TYPE (from_type2
);
6942 deref_to_type1
= TREE_TYPE (to_type1
);
6943 deref_to_type2
= TREE_TYPE (to_type2
);
6945 /* The rules for pointers to members A::* are just like the rules
6946 for pointers A*, except opposite: if B is derived from A then
6947 A::* converts to B::*, not vice versa. For that reason, we
6948 switch the from_ and to_ variables here. */
6949 else if ((TYPE_PTRMEM_P (from_type1
) && TYPE_PTRMEM_P (from_type2
)
6950 && TYPE_PTRMEM_P (to_type1
) && TYPE_PTRMEM_P (to_type2
))
6951 || (TYPE_PTRMEMFUNC_P (from_type1
)
6952 && TYPE_PTRMEMFUNC_P (from_type2
)
6953 && TYPE_PTRMEMFUNC_P (to_type1
)
6954 && TYPE_PTRMEMFUNC_P (to_type2
)))
6956 deref_to_type1
= TYPE_PTRMEM_CLASS_TYPE (from_type1
);
6957 deref_to_type2
= TYPE_PTRMEM_CLASS_TYPE (from_type2
);
6958 deref_from_type1
= TYPE_PTRMEM_CLASS_TYPE (to_type1
);
6959 deref_from_type2
= TYPE_PTRMEM_CLASS_TYPE (to_type2
);
6962 if (deref_from_type1
!= NULL_TREE
6963 && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_from_type1
))
6964 && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_from_type2
)))
6966 /* This was one of the pointer or pointer-like conversions.
6970 --If class B is derived directly or indirectly from class A,
6971 conversion of B* to A* is better than conversion of B* to
6972 void*, and conversion of A* to void* is better than
6973 conversion of B* to void*. */
6974 if (TREE_CODE (deref_to_type1
) == VOID_TYPE
6975 && TREE_CODE (deref_to_type2
) == VOID_TYPE
)
6977 if (is_properly_derived_from (deref_from_type1
,
6980 else if (is_properly_derived_from (deref_from_type2
,
6984 else if (TREE_CODE (deref_to_type1
) == VOID_TYPE
6985 || TREE_CODE (deref_to_type2
) == VOID_TYPE
)
6987 if (same_type_p (deref_from_type1
, deref_from_type2
))
6989 if (TREE_CODE (deref_to_type2
) == VOID_TYPE
)
6991 if (is_properly_derived_from (deref_from_type1
,
6995 /* We know that DEREF_TO_TYPE1 is `void' here. */
6996 else if (is_properly_derived_from (deref_from_type1
,
7001 else if (RECORD_OR_UNION_CODE_P (TREE_CODE (deref_to_type1
))
7002 && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_to_type2
)))
7006 --If class B is derived directly or indirectly from class A
7007 and class C is derived directly or indirectly from B,
7009 --conversion of C* to B* is better than conversion of C* to
7012 --conversion of B* to A* is better than conversion of C* to
7014 if (same_type_p (deref_from_type1
, deref_from_type2
))
7016 if (is_properly_derived_from (deref_to_type1
,
7019 else if (is_properly_derived_from (deref_to_type2
,
7023 else if (same_type_p (deref_to_type1
, deref_to_type2
))
7025 if (is_properly_derived_from (deref_from_type2
,
7028 else if (is_properly_derived_from (deref_from_type1
,
7034 else if (CLASS_TYPE_P (non_reference (from_type1
))
7035 && same_type_p (from_type1
, from_type2
))
7037 tree from
= non_reference (from_type1
);
7041 --binding of an expression of type C to a reference of type
7042 B& is better than binding an expression of type C to a
7043 reference of type A&
7045 --conversion of C to B is better than conversion of C to A, */
7046 if (is_properly_derived_from (from
, to_type1
)
7047 && is_properly_derived_from (from
, to_type2
))
7049 if (is_properly_derived_from (to_type1
, to_type2
))
7051 else if (is_properly_derived_from (to_type2
, to_type1
))
7055 else if (CLASS_TYPE_P (non_reference (to_type1
))
7056 && same_type_p (to_type1
, to_type2
))
7058 tree to
= non_reference (to_type1
);
7062 --binding of an expression of type B to a reference of type
7063 A& is better than binding an expression of type C to a
7064 reference of type A&,
7066 --conversion of B to A is better than conversion of C to A */
7067 if (is_properly_derived_from (from_type1
, to
)
7068 && is_properly_derived_from (from_type2
, to
))
7070 if (is_properly_derived_from (from_type2
, from_type1
))
7072 else if (is_properly_derived_from (from_type1
, from_type2
))
7079 --S1 and S2 differ only in their qualification conversion and yield
7080 similar types T1 and T2 (_conv.qual_), respectively, and the cv-
7081 qualification signature of type T1 is a proper subset of the cv-
7082 qualification signature of type T2 */
7083 if (ics1
->kind
== ck_qual
7084 && ics2
->kind
== ck_qual
7085 && same_type_p (from_type1
, from_type2
))
7087 int result
= comp_cv_qual_signature (to_type1
, to_type2
);
7094 --S1 and S2 are reference bindings (_dcl.init.ref_) and neither refers
7095 to an implicit object parameter, and either S1 binds an lvalue reference
7096 to an lvalue and S2 binds an rvalue reference or S1 binds an rvalue
7097 reference to an rvalue and S2 binds an lvalue reference
7098 (C++0x draft standard, 13.3.3.2)
7100 --S1 and S2 are reference bindings (_dcl.init.ref_), and the
7101 types to which the references refer are the same type except for
7102 top-level cv-qualifiers, and the type to which the reference
7103 initialized by S2 refers is more cv-qualified than the type to
7104 which the reference initialized by S1 refers */
7106 if (ref_conv1
&& ref_conv2
)
7108 if (!ref_conv1
->this_p
&& !ref_conv2
->this_p
7109 && (TYPE_REF_IS_RVALUE (ref_conv1
->type
)
7110 != TYPE_REF_IS_RVALUE (ref_conv2
->type
)))
7112 if (ref_conv1
->rvaluedness_matches_p
)
7114 if (ref_conv2
->rvaluedness_matches_p
)
7118 if (same_type_ignoring_top_level_qualifiers_p (to_type1
, to_type2
))
7119 return comp_cv_qualification (TREE_TYPE (ref_conv2
->type
),
7120 TREE_TYPE (ref_conv1
->type
));
7123 /* Neither conversion sequence is better than the other. */
7127 /* The source type for this standard conversion sequence. */
7130 source_type (conversion
*t
)
7132 for (;; t
= t
->u
.next
)
7134 if (t
->kind
== ck_user
7135 || t
->kind
== ck_ambig
7136 || t
->kind
== ck_identity
)
7142 /* Note a warning about preferring WINNER to LOSER. We do this by storing
7143 a pointer to LOSER and re-running joust to produce the warning if WINNER
7144 is actually used. */
7147 add_warning (struct z_candidate
*winner
, struct z_candidate
*loser
)
7149 candidate_warning
*cw
= (candidate_warning
*)
7150 conversion_obstack_alloc (sizeof (candidate_warning
));
7152 cw
->next
= winner
->warnings
;
7153 winner
->warnings
= cw
;
7156 /* Compare two candidates for overloading as described in
7157 [over.match.best]. Return values:
7159 1: cand1 is better than cand2
7160 -1: cand2 is better than cand1
7161 0: cand1 and cand2 are indistinguishable */
7164 joust (struct z_candidate
*cand1
, struct z_candidate
*cand2
, bool warn
)
7167 int off1
= 0, off2
= 0;
7171 /* Candidates that involve bad conversions are always worse than those
7173 if (cand1
->viable
> cand2
->viable
)
7175 if (cand1
->viable
< cand2
->viable
)
7178 /* If we have two pseudo-candidates for conversions to the same type,
7179 or two candidates for the same function, arbitrarily pick one. */
7180 if (cand1
->fn
== cand2
->fn
7181 && (IS_TYPE_OR_DECL_P (cand1
->fn
)))
7184 /* a viable function F1
7185 is defined to be a better function than another viable function F2 if
7186 for all arguments i, ICSi(F1) is not a worse conversion sequence than
7187 ICSi(F2), and then */
7189 /* for some argument j, ICSj(F1) is a better conversion sequence than
7192 /* For comparing static and non-static member functions, we ignore
7193 the implicit object parameter of the non-static function. The
7194 standard says to pretend that the static function has an object
7195 parm, but that won't work with operator overloading. */
7196 len
= cand1
->num_convs
;
7197 if (len
!= cand2
->num_convs
)
7199 int static_1
= DECL_STATIC_FUNCTION_P (cand1
->fn
);
7200 int static_2
= DECL_STATIC_FUNCTION_P (cand2
->fn
);
7202 gcc_assert (static_1
!= static_2
);
7213 for (i
= 0; i
< len
; ++i
)
7215 conversion
*t1
= cand1
->convs
[i
+ off1
];
7216 conversion
*t2
= cand2
->convs
[i
+ off2
];
7217 int comp
= compare_ics (t1
, t2
);
7222 && (CONVERSION_RANK (t1
) + CONVERSION_RANK (t2
)
7223 == cr_std
+ cr_promotion
)
7224 && t1
->kind
== ck_std
7225 && t2
->kind
== ck_std
7226 && TREE_CODE (t1
->type
) == INTEGER_TYPE
7227 && TREE_CODE (t2
->type
) == INTEGER_TYPE
7228 && (TYPE_PRECISION (t1
->type
)
7229 == TYPE_PRECISION (t2
->type
))
7230 && (TYPE_UNSIGNED (t1
->u
.next
->type
)
7231 || (TREE_CODE (t1
->u
.next
->type
)
7234 tree type
= t1
->u
.next
->type
;
7236 struct z_candidate
*w
, *l
;
7238 type1
= t1
->type
, type2
= t2
->type
,
7239 w
= cand1
, l
= cand2
;
7241 type1
= t2
->type
, type2
= t1
->type
,
7242 w
= cand2
, l
= cand1
;
7246 warning (OPT_Wsign_promo
, "passing %qT chooses %qT over %qT",
7247 type
, type1
, type2
);
7248 warning (OPT_Wsign_promo
, " in call to %qD", w
->fn
);
7254 if (winner
&& comp
!= winner
)
7263 /* warn about confusing overload resolution for user-defined conversions,
7264 either between a constructor and a conversion op, or between two
7266 if (winner
&& warn_conversion
&& cand1
->second_conv
7267 && (!DECL_CONSTRUCTOR_P (cand1
->fn
) || !DECL_CONSTRUCTOR_P (cand2
->fn
))
7268 && winner
!= compare_ics (cand1
->second_conv
, cand2
->second_conv
))
7270 struct z_candidate
*w
, *l
;
7271 bool give_warning
= false;
7274 w
= cand1
, l
= cand2
;
7276 w
= cand2
, l
= cand1
;
7278 /* We don't want to complain about `X::operator T1 ()'
7279 beating `X::operator T2 () const', when T2 is a no less
7280 cv-qualified version of T1. */
7281 if (DECL_CONTEXT (w
->fn
) == DECL_CONTEXT (l
->fn
)
7282 && !DECL_CONSTRUCTOR_P (w
->fn
) && !DECL_CONSTRUCTOR_P (l
->fn
))
7284 tree t
= TREE_TYPE (TREE_TYPE (l
->fn
));
7285 tree f
= TREE_TYPE (TREE_TYPE (w
->fn
));
7287 if (TREE_CODE (t
) == TREE_CODE (f
) && POINTER_TYPE_P (t
))
7292 if (!comp_ptr_ttypes (t
, f
))
7293 give_warning
= true;
7296 give_warning
= true;
7302 tree source
= source_type (w
->convs
[0]);
7303 if (! DECL_CONSTRUCTOR_P (w
->fn
))
7304 source
= TREE_TYPE (source
);
7305 if (warning (OPT_Wconversion
, "choosing %qD over %qD", w
->fn
, l
->fn
)
7306 && warning (OPT_Wconversion
, " for conversion from %qT to %qT",
7307 source
, w
->second_conv
->type
))
7309 inform (input_location
, " because conversion sequence for the argument is better");
7320 F1 is a non-template function and F2 is a template function
7323 if (!cand1
->template_decl
&& cand2
->template_decl
)
7325 else if (cand1
->template_decl
&& !cand2
->template_decl
)
7329 F1 and F2 are template functions and the function template for F1 is
7330 more specialized than the template for F2 according to the partial
7333 if (cand1
->template_decl
&& cand2
->template_decl
)
7335 winner
= more_specialized_fn
7336 (TI_TEMPLATE (cand1
->template_decl
),
7337 TI_TEMPLATE (cand2
->template_decl
),
7338 /* [temp.func.order]: The presence of unused ellipsis and default
7339 arguments has no effect on the partial ordering of function
7340 templates. add_function_candidate() will not have
7341 counted the "this" argument for constructors. */
7342 cand1
->num_convs
+ DECL_CONSTRUCTOR_P (cand1
->fn
));
7348 the context is an initialization by user-defined conversion (see
7349 _dcl.init_ and _over.match.user_) and the standard conversion
7350 sequence from the return type of F1 to the destination type (i.e.,
7351 the type of the entity being initialized) is a better conversion
7352 sequence than the standard conversion sequence from the return type
7353 of F2 to the destination type. */
7355 if (cand1
->second_conv
)
7357 winner
= compare_ics (cand1
->second_conv
, cand2
->second_conv
);
7362 /* Check whether we can discard a builtin candidate, either because we
7363 have two identical ones or matching builtin and non-builtin candidates.
7365 (Pedantically in the latter case the builtin which matched the user
7366 function should not be added to the overload set, but we spot it here.
7369 ... the builtin candidates include ...
7370 - do not have the same parameter type list as any non-template
7371 non-member candidate. */
7373 if (TREE_CODE (cand1
->fn
) == IDENTIFIER_NODE
7374 || TREE_CODE (cand2
->fn
) == IDENTIFIER_NODE
)
7376 for (i
= 0; i
< len
; ++i
)
7377 if (!same_type_p (cand1
->convs
[i
]->type
,
7378 cand2
->convs
[i
]->type
))
7380 if (i
== cand1
->num_convs
)
7382 if (cand1
->fn
== cand2
->fn
)
7383 /* Two built-in candidates; arbitrarily pick one. */
7385 else if (TREE_CODE (cand1
->fn
) == IDENTIFIER_NODE
)
7386 /* cand1 is built-in; prefer cand2. */
7389 /* cand2 is built-in; prefer cand1. */
7394 /* If the two function declarations represent the same function (this can
7395 happen with declarations in multiple scopes and arg-dependent lookup),
7396 arbitrarily choose one. But first make sure the default args we're
7398 if (DECL_P (cand1
->fn
) && DECL_P (cand2
->fn
)
7399 && equal_functions (cand1
->fn
, cand2
->fn
))
7401 tree parms1
= TYPE_ARG_TYPES (TREE_TYPE (cand1
->fn
));
7402 tree parms2
= TYPE_ARG_TYPES (TREE_TYPE (cand2
->fn
));
7404 gcc_assert (!DECL_CONSTRUCTOR_P (cand1
->fn
));
7406 for (i
= 0; i
< len
; ++i
)
7408 /* Don't crash if the fn is variadic. */
7411 parms1
= TREE_CHAIN (parms1
);
7412 parms2
= TREE_CHAIN (parms2
);
7416 parms1
= TREE_CHAIN (parms1
);
7418 parms2
= TREE_CHAIN (parms2
);
7422 if (!cp_tree_equal (TREE_PURPOSE (parms1
),
7423 TREE_PURPOSE (parms2
)))
7427 permerror (input_location
, "default argument mismatch in "
7428 "overload resolution");
7429 inform (input_location
,
7430 " candidate 1: %q+#F", cand1
->fn
);
7431 inform (input_location
,
7432 " candidate 2: %q+#F", cand2
->fn
);
7435 add_warning (cand1
, cand2
);
7438 parms1
= TREE_CHAIN (parms1
);
7439 parms2
= TREE_CHAIN (parms2
);
7447 /* Extension: If the worst conversion for one candidate is worse than the
7448 worst conversion for the other, take the first. */
7451 conversion_rank rank1
= cr_identity
, rank2
= cr_identity
;
7452 struct z_candidate
*w
= 0, *l
= 0;
7454 for (i
= 0; i
< len
; ++i
)
7456 if (CONVERSION_RANK (cand1
->convs
[i
+off1
]) > rank1
)
7457 rank1
= CONVERSION_RANK (cand1
->convs
[i
+off1
]);
7458 if (CONVERSION_RANK (cand2
->convs
[i
+ off2
]) > rank2
)
7459 rank2
= CONVERSION_RANK (cand2
->convs
[i
+ off2
]);
7462 winner
= 1, w
= cand1
, l
= cand2
;
7464 winner
= -1, w
= cand2
, l
= cand1
;
7467 /* Don't choose a deleted function over ambiguity. */
7468 if (DECL_P (w
->fn
) && DECL_DELETED_FN (w
->fn
))
7472 pedwarn (input_location
, 0,
7473 "ISO C++ says that these are ambiguous, even "
7474 "though the worst conversion for the first is better than "
7475 "the worst conversion for the second:");
7476 print_z_candidate (_("candidate 1:"), w
);
7477 print_z_candidate (_("candidate 2:"), l
);
7485 gcc_assert (!winner
);
7489 /* Given a list of candidates for overloading, find the best one, if any.
7490 This algorithm has a worst case of O(2n) (winner is last), and a best
7491 case of O(n/2) (totally ambiguous); much better than a sorting
7494 static struct z_candidate
*
7495 tourney (struct z_candidate
*candidates
)
7497 struct z_candidate
*champ
= candidates
, *challenger
;
7499 int champ_compared_to_predecessor
= 0;
7501 /* Walk through the list once, comparing each current champ to the next
7502 candidate, knocking out a candidate or two with each comparison. */
7504 for (challenger
= champ
->next
; challenger
; )
7506 fate
= joust (champ
, challenger
, 0);
7508 challenger
= challenger
->next
;
7513 champ
= challenger
->next
;
7516 champ_compared_to_predecessor
= 0;
7521 champ_compared_to_predecessor
= 1;
7524 challenger
= champ
->next
;
7528 /* Make sure the champ is better than all the candidates it hasn't yet
7529 been compared to. */
7531 for (challenger
= candidates
;
7533 && !(champ_compared_to_predecessor
&& challenger
->next
== champ
);
7534 challenger
= challenger
->next
)
7536 fate
= joust (champ
, challenger
, 0);
7544 /* Returns nonzero if things of type FROM can be converted to TO. */
7547 can_convert (tree to
, tree from
)
7549 return can_convert_arg (to
, from
, NULL_TREE
, LOOKUP_IMPLICIT
);
7552 /* Returns nonzero if ARG (of type FROM) can be converted to TO. */
7555 can_convert_arg (tree to
, tree from
, tree arg
, int flags
)
7561 /* Get the high-water mark for the CONVERSION_OBSTACK. */
7562 p
= conversion_obstack_alloc (0);
7564 t
= implicit_conversion (to
, from
, arg
, /*c_cast_p=*/false,
7566 ok_p
= (t
&& !t
->bad_p
);
7568 /* Free all the conversions we allocated. */
7569 obstack_free (&conversion_obstack
, p
);
7574 /* Like can_convert_arg, but allows dubious conversions as well. */
7577 can_convert_arg_bad (tree to
, tree from
, tree arg
, int flags
)
7582 /* Get the high-water mark for the CONVERSION_OBSTACK. */
7583 p
= conversion_obstack_alloc (0);
7584 /* Try to perform the conversion. */
7585 t
= implicit_conversion (to
, from
, arg
, /*c_cast_p=*/false,
7587 /* Free all the conversions we allocated. */
7588 obstack_free (&conversion_obstack
, p
);
7593 /* Convert EXPR to TYPE. Return the converted expression.
7595 Note that we allow bad conversions here because by the time we get to
7596 this point we are committed to doing the conversion. If we end up
7597 doing a bad conversion, convert_like will complain. */
7600 perform_implicit_conversion_flags (tree type
, tree expr
, tsubst_flags_t complain
, int flags
)
7605 if (error_operand_p (expr
))
7606 return error_mark_node
;
7608 /* Get the high-water mark for the CONVERSION_OBSTACK. */
7609 p
= conversion_obstack_alloc (0);
7611 conv
= implicit_conversion (type
, TREE_TYPE (expr
), expr
,
7617 if (complain
& tf_error
)
7619 /* If expr has unknown type, then it is an overloaded function.
7620 Call instantiate_type to get good error messages. */
7621 if (TREE_TYPE (expr
) == unknown_type_node
)
7622 instantiate_type (type
, expr
, complain
);
7623 else if (invalid_nonstatic_memfn_p (expr
, complain
))
7624 /* We gave an error. */;
7626 error ("could not convert %qE to %qT", expr
, type
);
7628 expr
= error_mark_node
;
7630 else if (processing_template_decl
)
7632 /* In a template, we are only concerned about determining the
7633 type of non-dependent expressions, so we do not have to
7634 perform the actual conversion. */
7635 if (TREE_TYPE (expr
) != type
)
7636 expr
= build_nop (type
, expr
);
7639 expr
= convert_like (conv
, expr
, complain
);
7641 /* Free all the conversions we allocated. */
7642 obstack_free (&conversion_obstack
, p
);
7648 perform_implicit_conversion (tree type
, tree expr
, tsubst_flags_t complain
)
7650 return perform_implicit_conversion_flags (type
, expr
, complain
, LOOKUP_IMPLICIT
);
7653 /* Convert EXPR to TYPE (as a direct-initialization) if that is
7654 permitted. If the conversion is valid, the converted expression is
7655 returned. Otherwise, NULL_TREE is returned, except in the case
7656 that TYPE is a class type; in that case, an error is issued. If
7657 C_CAST_P is true, then this direction initialization is taking
7658 place as part of a static_cast being attempted as part of a C-style
7662 perform_direct_initialization_if_possible (tree type
,
7665 tsubst_flags_t complain
)
7670 if (type
== error_mark_node
|| error_operand_p (expr
))
7671 return error_mark_node
;
7674 If the destination type is a (possibly cv-qualified) class type:
7676 -- If the initialization is direct-initialization ...,
7677 constructors are considered. ... If no constructor applies, or
7678 the overload resolution is ambiguous, the initialization is
7680 if (CLASS_TYPE_P (type
))
7682 VEC(tree
,gc
) *args
= make_tree_vector_single (expr
);
7683 expr
= build_special_member_call (NULL_TREE
, complete_ctor_identifier
,
7684 &args
, type
, LOOKUP_NORMAL
, complain
);
7685 release_tree_vector (args
);
7686 return build_cplus_new (type
, expr
);
7689 /* Get the high-water mark for the CONVERSION_OBSTACK. */
7690 p
= conversion_obstack_alloc (0);
7692 conv
= implicit_conversion (type
, TREE_TYPE (expr
), expr
,
7695 if (!conv
|| conv
->bad_p
)
7698 expr
= convert_like_real (conv
, expr
, NULL_TREE
, 0, 0,
7699 /*issue_conversion_warnings=*/false,
7703 /* Free all the conversions we allocated. */
7704 obstack_free (&conversion_obstack
, p
);
7709 /* DECL is a VAR_DECL whose type is a REFERENCE_TYPE. The reference
7710 is being bound to a temporary. Create and return a new VAR_DECL
7711 with the indicated TYPE; this variable will store the value to
7712 which the reference is bound. */
7715 make_temporary_var_for_ref_to_temp (tree decl
, tree type
)
7719 /* Create the variable. */
7720 var
= create_temporary_var (type
);
7722 /* Register the variable. */
7723 if (TREE_STATIC (decl
))
7725 /* Namespace-scope or local static; give it a mangled name. */
7728 TREE_STATIC (var
) = 1;
7729 name
= mangle_ref_init_variable (decl
);
7730 DECL_NAME (var
) = name
;
7731 SET_DECL_ASSEMBLER_NAME (var
, name
);
7732 var
= pushdecl_top_level (var
);
7735 /* Create a new cleanup level if necessary. */
7736 maybe_push_cleanup_level (type
);
7741 /* EXPR is the initializer for a variable DECL of reference or
7742 std::initializer_list type. Create, push and return a new VAR_DECL
7743 for the initializer so that it will live as long as DECL. Any
7744 cleanup for the new variable is returned through CLEANUP, and the
7745 code to initialize the new variable is returned through INITP. */
7748 set_up_extended_ref_temp (tree decl
, tree expr
, tree
*cleanup
, tree
*initp
)
7754 /* Create the temporary variable. */
7755 type
= TREE_TYPE (expr
);
7756 var
= make_temporary_var_for_ref_to_temp (decl
, type
);
7757 layout_decl (var
, 0);
7758 /* If the rvalue is the result of a function call it will be
7759 a TARGET_EXPR. If it is some other construct (such as a
7760 member access expression where the underlying object is
7761 itself the result of a function call), turn it into a
7762 TARGET_EXPR here. It is important that EXPR be a
7763 TARGET_EXPR below since otherwise the INIT_EXPR will
7764 attempt to make a bitwise copy of EXPR to initialize
7766 if (TREE_CODE (expr
) != TARGET_EXPR
)
7767 expr
= get_target_expr (expr
);
7768 /* Create the INIT_EXPR that will initialize the temporary
7770 init
= build2 (INIT_EXPR
, type
, var
, expr
);
7771 if (at_function_scope_p ())
7773 add_decl_expr (var
);
7775 if (TREE_STATIC (var
))
7776 init
= add_stmt_to_compound (init
, register_dtor_fn (var
));
7778 *cleanup
= cxx_maybe_build_cleanup (var
);
7780 /* We must be careful to destroy the temporary only
7781 after its initialization has taken place. If the
7782 initialization throws an exception, then the
7783 destructor should not be run. We cannot simply
7784 transform INIT into something like:
7786 (INIT, ({ CLEANUP_STMT; }))
7788 because emit_local_var always treats the
7789 initializer as a full-expression. Thus, the
7790 destructor would run too early; it would run at the
7791 end of initializing the reference variable, rather
7792 than at the end of the block enclosing the
7795 The solution is to pass back a cleanup expression
7796 which the caller is responsible for attaching to
7797 the statement tree. */
7801 rest_of_decl_compilation (var
, /*toplev=*/1, at_eof
);
7802 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type
))
7803 static_aggregates
= tree_cons (NULL_TREE
, var
,
7811 /* Convert EXPR to the indicated reference TYPE, in a way suitable for
7812 initializing a variable of that TYPE. If DECL is non-NULL, it is
7813 the VAR_DECL being initialized with the EXPR. (In that case, the
7814 type of DECL will be TYPE.) If DECL is non-NULL, then CLEANUP must
7815 also be non-NULL, and with *CLEANUP initialized to NULL. Upon
7816 return, if *CLEANUP is no longer NULL, it will be an expression
7817 that should be pushed as a cleanup after the returned expression
7818 is used to initialize DECL.
7820 Return the converted expression. */
7823 initialize_reference (tree type
, tree expr
, tree decl
, tree
*cleanup
,
7824 tsubst_flags_t complain
)
7829 if (type
== error_mark_node
|| error_operand_p (expr
))
7830 return error_mark_node
;
7832 /* Get the high-water mark for the CONVERSION_OBSTACK. */
7833 p
= conversion_obstack_alloc (0);
7835 conv
= reference_binding (type
, TREE_TYPE (expr
), expr
, /*c_cast_p=*/false,
7837 if (!conv
|| conv
->bad_p
)
7839 if (complain
& tf_error
)
7841 if (!CP_TYPE_CONST_P (TREE_TYPE (type
))
7842 && !TYPE_REF_IS_RVALUE (type
)
7843 && !real_lvalue_p (expr
))
7844 error ("invalid initialization of non-const reference of "
7845 "type %qT from an rvalue of type %qT",
7846 type
, TREE_TYPE (expr
));
7848 error ("invalid initialization of reference of type "
7849 "%qT from expression of type %qT", type
,
7852 return error_mark_node
;
7855 /* If DECL is non-NULL, then this special rule applies:
7859 The temporary to which the reference is bound or the temporary
7860 that is the complete object to which the reference is bound
7861 persists for the lifetime of the reference.
7863 The temporaries created during the evaluation of the expression
7864 initializing the reference, except the temporary to which the
7865 reference is bound, are destroyed at the end of the
7866 full-expression in which they are created.
7868 In that case, we store the converted expression into a new
7869 VAR_DECL in a new scope.
7871 However, we want to be careful not to create temporaries when
7872 they are not required. For example, given:
7875 struct D : public B {};
7879 there is no need to copy the return value from "f"; we can just
7880 extend its lifetime. Similarly, given:
7883 struct T { operator S(); };
7887 we can extend the lifetime of the return value of the conversion
7889 gcc_assert (conv
->kind
== ck_ref_bind
);
7893 tree base_conv_type
;
7895 /* Skip over the REF_BIND. */
7896 conv
= conv
->u
.next
;
7897 /* If the next conversion is a BASE_CONV, skip that too -- but
7898 remember that the conversion was required. */
7899 if (conv
->kind
== ck_base
)
7901 base_conv_type
= conv
->type
;
7902 conv
= conv
->u
.next
;
7905 base_conv_type
= NULL_TREE
;
7906 /* Perform the remainder of the conversion. */
7907 expr
= convert_like_real (conv
, expr
,
7908 /*fn=*/NULL_TREE
, /*argnum=*/0,
7910 /*issue_conversion_warnings=*/true,
7912 tf_warning_or_error
);
7913 if (error_operand_p (expr
))
7914 expr
= error_mark_node
;
7917 if (!lvalue_or_rvalue_with_address_p (expr
))
7920 var
= set_up_extended_ref_temp (decl
, expr
, cleanup
, &init
);
7921 /* Use its address to initialize the reference variable. */
7922 expr
= build_address (var
);
7924 expr
= convert_to_base (expr
,
7925 build_pointer_type (base_conv_type
),
7926 /*check_access=*/true,
7927 /*nonnull=*/true, complain
);
7928 expr
= build2 (COMPOUND_EXPR
, TREE_TYPE (expr
), init
, expr
);
7931 /* Take the address of EXPR. */
7932 expr
= cp_build_unary_op (ADDR_EXPR
, expr
, 0, tf_warning_or_error
);
7933 /* If a BASE_CONV was required, perform it now. */
7935 expr
= (perform_implicit_conversion
7936 (build_pointer_type (base_conv_type
), expr
,
7937 tf_warning_or_error
));
7938 expr
= build_nop (type
, expr
);
7942 /* Perform the conversion. */
7943 expr
= convert_like (conv
, expr
, tf_warning_or_error
);
7945 /* Free all the conversions we allocated. */
7946 obstack_free (&conversion_obstack
, p
);
7951 /* Returns true iff TYPE is some variant of std::initializer_list. */
7954 is_std_init_list (tree type
)
7956 return (CLASS_TYPE_P (type
)
7957 && CP_TYPE_CONTEXT (type
) == std_node
7958 && strcmp (TYPE_NAME_STRING (type
), "initializer_list") == 0);
7961 /* Returns true iff DECL is a list constructor: i.e. a constructor which
7962 will accept an argument list of a single std::initializer_list<T>. */
7965 is_list_ctor (tree decl
)
7967 tree args
= FUNCTION_FIRST_USER_PARMTYPE (decl
);
7970 if (!args
|| args
== void_list_node
)
7973 arg
= non_reference (TREE_VALUE (args
));
7974 if (!is_std_init_list (arg
))
7977 args
= TREE_CHAIN (args
);
7979 if (args
&& args
!= void_list_node
&& !TREE_PURPOSE (args
))
7980 /* There are more non-defaulted parms. */
7986 #include "gt-cp-call.h"