1 /* Functions related to invoking methods and overloaded functions.
2 Copyright (C) 1987-2014 Free Software Foundation, Inc.
3 Contributed by Michael Tiemann (tiemann@cygnus.com) and
4 modified by Brendan Kehoe (brendan@cygnus.com).
6 This file is part of GCC.
8 GCC is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 3, or (at your option)
13 GCC is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3. If not see
20 <http://www.gnu.org/licenses/>. */
23 /* High-level class interface. */
27 #include "coretypes.h"
30 #include "stor-layout.h"
31 #include "trans-mem.h"
32 #include "stringpool.h"
36 #include "diagnostic-core.h"
40 #include "langhooks.h"
41 #include "c-family/c-objc.h"
46 /* The various kinds of conversion. */
48 typedef enum conversion_kind
{
64 /* The rank of the conversion. Order of the enumerals matters; better
65 conversions should come earlier in the list. */
67 typedef enum conversion_rank
{
78 /* An implicit conversion sequence, in the sense of [over.best.ics].
79 The first conversion to be performed is at the end of the chain.
80 That conversion is always a cr_identity conversion. */
82 typedef struct conversion conversion
;
84 /* The kind of conversion represented by this step. */
86 /* The rank of this conversion. */
88 BOOL_BITFIELD user_conv_p
: 1;
89 BOOL_BITFIELD ellipsis_p
: 1;
90 BOOL_BITFIELD this_p
: 1;
91 /* True if this conversion would be permitted with a bending of
92 language standards, e.g. disregarding pointer qualifiers or
93 converting integers to pointers. */
94 BOOL_BITFIELD bad_p
: 1;
95 /* If KIND is ck_ref_bind ck_base_conv, true to indicate that a
96 temporary should be created to hold the result of the
98 BOOL_BITFIELD need_temporary_p
: 1;
99 /* If KIND is ck_ptr or ck_pmem, true to indicate that a conversion
100 from a pointer-to-derived to pointer-to-base is being performed. */
101 BOOL_BITFIELD base_p
: 1;
102 /* If KIND is ck_ref_bind, true when either an lvalue reference is
103 being bound to an lvalue expression or an rvalue reference is
104 being bound to an rvalue expression. If KIND is ck_rvalue,
105 true when we should treat an lvalue as an rvalue (12.8p33). If
106 KIND is ck_base, always false. */
107 BOOL_BITFIELD rvaluedness_matches_p
: 1;
108 BOOL_BITFIELD check_narrowing
: 1;
109 /* The type of the expression resulting from the conversion. */
112 /* The next conversion in the chain. Since the conversions are
113 arranged from outermost to innermost, the NEXT conversion will
114 actually be performed before this conversion. This variant is
115 used only when KIND is neither ck_identity, ck_ambig nor
116 ck_list. Please use the next_conversion function instead
117 of using this field directly. */
119 /* The expression at the beginning of the conversion chain. This
120 variant is used only if KIND is ck_identity or ck_ambig. */
122 /* The array of conversions for an initializer_list, so this
123 variant is used only when KIN D is ck_list. */
126 /* The function candidate corresponding to this conversion
127 sequence. This field is only used if KIND is ck_user. */
128 struct z_candidate
*cand
;
131 #define CONVERSION_RANK(NODE) \
132 ((NODE)->bad_p ? cr_bad \
133 : (NODE)->ellipsis_p ? cr_ellipsis \
134 : (NODE)->user_conv_p ? cr_user \
137 #define BAD_CONVERSION_RANK(NODE) \
138 ((NODE)->ellipsis_p ? cr_ellipsis \
139 : (NODE)->user_conv_p ? cr_user \
142 static struct obstack conversion_obstack
;
143 static bool conversion_obstack_initialized
;
144 struct rejection_reason
;
146 static struct z_candidate
* tourney (struct z_candidate
*, tsubst_flags_t
);
147 static int equal_functions (tree
, tree
);
148 static int joust (struct z_candidate
*, struct z_candidate
*, bool,
150 static int compare_ics (conversion
*, conversion
*);
151 static tree
build_over_call (struct z_candidate
*, int, tsubst_flags_t
);
152 static tree
build_java_interface_fn_ref (tree
, tree
);
153 #define convert_like(CONV, EXPR, COMPLAIN) \
154 convert_like_real ((CONV), (EXPR), NULL_TREE, 0, 0, \
155 /*issue_conversion_warnings=*/true, \
156 /*c_cast_p=*/false, (COMPLAIN))
157 #define convert_like_with_context(CONV, EXPR, FN, ARGNO, COMPLAIN ) \
158 convert_like_real ((CONV), (EXPR), (FN), (ARGNO), 0, \
159 /*issue_conversion_warnings=*/true, \
160 /*c_cast_p=*/false, (COMPLAIN))
161 static tree
convert_like_real (conversion
*, tree
, tree
, int, int, bool,
162 bool, tsubst_flags_t
);
163 static void op_error (location_t
, enum tree_code
, enum tree_code
, tree
,
165 static struct z_candidate
*build_user_type_conversion_1 (tree
, tree
, int,
167 static void print_z_candidate (location_t
, const char *, struct z_candidate
*);
168 static void print_z_candidates (location_t
, struct z_candidate
*);
169 static tree
build_this (tree
);
170 static struct z_candidate
*splice_viable (struct z_candidate
*, bool, bool *);
171 static bool any_strictly_viable (struct z_candidate
*);
172 static struct z_candidate
*add_template_candidate
173 (struct z_candidate
**, tree
, tree
, tree
, tree
, const vec
<tree
, va_gc
> *,
174 tree
, tree
, tree
, int, unification_kind_t
, tsubst_flags_t
);
175 static struct z_candidate
*add_template_candidate_real
176 (struct z_candidate
**, tree
, tree
, tree
, tree
, const vec
<tree
, va_gc
> *,
177 tree
, tree
, tree
, int, tree
, unification_kind_t
, tsubst_flags_t
);
178 static struct z_candidate
*add_template_conv_candidate
179 (struct z_candidate
**, tree
, tree
, tree
, const vec
<tree
, va_gc
> *,
180 tree
, tree
, tree
, tsubst_flags_t
);
181 static void add_builtin_candidates
182 (struct z_candidate
**, enum tree_code
, enum tree_code
,
183 tree
, tree
*, int, tsubst_flags_t
);
184 static void add_builtin_candidate
185 (struct z_candidate
**, enum tree_code
, enum tree_code
,
186 tree
, tree
, tree
, tree
*, tree
*, int, tsubst_flags_t
);
187 static bool is_complete (tree
);
188 static void build_builtin_candidate
189 (struct z_candidate
**, tree
, tree
, tree
, tree
*, tree
*,
190 int, tsubst_flags_t
);
191 static struct z_candidate
*add_conv_candidate
192 (struct z_candidate
**, tree
, tree
, tree
, const vec
<tree
, va_gc
> *, tree
,
193 tree
, tsubst_flags_t
);
194 static struct z_candidate
*add_function_candidate
195 (struct z_candidate
**, tree
, tree
, tree
, const vec
<tree
, va_gc
> *, tree
,
196 tree
, int, tsubst_flags_t
);
197 static conversion
*implicit_conversion (tree
, tree
, tree
, bool, int,
199 static conversion
*standard_conversion (tree
, tree
, tree
, bool, int);
200 static conversion
*reference_binding (tree
, tree
, tree
, bool, int,
202 static conversion
*build_conv (conversion_kind
, tree
, conversion
*);
203 static conversion
*build_list_conv (tree
, tree
, int, tsubst_flags_t
);
204 static conversion
*next_conversion (conversion
*);
205 static bool is_subseq (conversion
*, conversion
*);
206 static conversion
*maybe_handle_ref_bind (conversion
**);
207 static void maybe_handle_implicit_object (conversion
**);
208 static struct z_candidate
*add_candidate
209 (struct z_candidate
**, tree
, tree
, const vec
<tree
, va_gc
> *, size_t,
210 conversion
**, tree
, tree
, int, struct rejection_reason
*, int);
211 static tree
source_type (conversion
*);
212 static void add_warning (struct z_candidate
*, struct z_candidate
*);
213 static bool reference_compatible_p (tree
, tree
);
214 static conversion
*direct_reference_binding (tree
, conversion
*);
215 static bool promoted_arithmetic_type_p (tree
);
216 static conversion
*conditional_conversion (tree
, tree
, tsubst_flags_t
);
217 static char *name_as_c_string (tree
, tree
, bool *);
218 static tree
prep_operand (tree
);
219 static void add_candidates (tree
, tree
, const vec
<tree
, va_gc
> *, tree
, tree
,
220 bool, tree
, tree
, int, struct z_candidate
**,
222 static conversion
*merge_conversion_sequences (conversion
*, conversion
*);
223 static tree
build_temp (tree
, tree
, int, diagnostic_t
*, tsubst_flags_t
);
225 /* Returns nonzero iff the destructor name specified in NAME matches BASETYPE.
226 NAME can take many forms... */
229 check_dtor_name (tree basetype
, tree name
)
231 /* Just accept something we've already complained about. */
232 if (name
== error_mark_node
)
235 if (TREE_CODE (name
) == TYPE_DECL
)
236 name
= TREE_TYPE (name
);
237 else if (TYPE_P (name
))
239 else if (identifier_p (name
))
241 if ((MAYBE_CLASS_TYPE_P (basetype
)
242 && name
== constructor_name (basetype
))
243 || (TREE_CODE (basetype
) == ENUMERAL_TYPE
244 && name
== TYPE_IDENTIFIER (basetype
)))
247 name
= get_type_value (name
);
253 template <class T> struct S { ~S(); };
257 NAME will be a class template. */
258 gcc_assert (DECL_CLASS_TEMPLATE_P (name
));
262 if (!name
|| name
== error_mark_node
)
264 return same_type_p (TYPE_MAIN_VARIANT (basetype
), TYPE_MAIN_VARIANT (name
));
267 /* We want the address of a function or method. We avoid creating a
268 pointer-to-member function. */
271 build_addr_func (tree function
, tsubst_flags_t complain
)
273 tree type
= TREE_TYPE (function
);
275 /* We have to do these by hand to avoid real pointer to member
277 if (TREE_CODE (type
) == METHOD_TYPE
)
279 if (TREE_CODE (function
) == OFFSET_REF
)
281 tree object
= build_address (TREE_OPERAND (function
, 0));
282 return get_member_function_from_ptrfunc (&object
,
283 TREE_OPERAND (function
, 1),
286 function
= build_address (function
);
289 function
= decay_conversion (function
, complain
);
294 /* Build a CALL_EXPR, we can handle FUNCTION_TYPEs, METHOD_TYPEs, or
295 POINTER_TYPE to those. Note, pointer to member function types
296 (TYPE_PTRMEMFUNC_P) must be handled by our callers. There are
297 two variants. build_call_a is the primitive taking an array of
298 arguments, while build_call_n is a wrapper that handles varargs. */
301 build_call_n (tree function
, int n
, ...)
304 return build_call_a (function
, 0, NULL
);
307 tree
*argarray
= XALLOCAVEC (tree
, n
);
312 for (i
= 0; i
< n
; i
++)
313 argarray
[i
] = va_arg (ap
, tree
);
315 return build_call_a (function
, n
, argarray
);
319 /* Update various flags in cfun and the call itself based on what is being
320 called. Split out of build_call_a so that bot_manip can use it too. */
323 set_flags_from_callee (tree call
)
326 tree decl
= get_callee_fndecl (call
);
328 /* We check both the decl and the type; a function may be known not to
329 throw without being declared throw(). */
330 nothrow
= ((decl
&& TREE_NOTHROW (decl
))
331 || TYPE_NOTHROW_P (TREE_TYPE (TREE_TYPE (CALL_EXPR_FN (call
)))));
333 if (!nothrow
&& at_function_scope_p () && cfun
&& cp_function_chain
)
334 cp_function_chain
->can_throw
= 1;
336 if (decl
&& TREE_THIS_VOLATILE (decl
) && cfun
&& cp_function_chain
)
337 current_function_returns_abnormally
= 1;
339 TREE_NOTHROW (call
) = nothrow
;
343 build_call_a (tree function
, int n
, tree
*argarray
)
350 function
= build_addr_func (function
, tf_warning_or_error
);
352 gcc_assert (TYPE_PTR_P (TREE_TYPE (function
)));
353 fntype
= TREE_TYPE (TREE_TYPE (function
));
354 gcc_assert (TREE_CODE (fntype
) == FUNCTION_TYPE
355 || TREE_CODE (fntype
) == METHOD_TYPE
);
356 result_type
= TREE_TYPE (fntype
);
357 /* An rvalue has no cv-qualifiers. */
358 if (SCALAR_TYPE_P (result_type
) || VOID_TYPE_P (result_type
))
359 result_type
= cv_unqualified (result_type
);
361 function
= build_call_array_loc (input_location
,
362 result_type
, function
, n
, argarray
);
363 set_flags_from_callee (function
);
365 decl
= get_callee_fndecl (function
);
367 if (decl
&& !TREE_USED (decl
))
369 /* We invoke build_call directly for several library
370 functions. These may have been declared normally if
371 we're building libgcc, so we can't just check
373 gcc_assert (DECL_ARTIFICIAL (decl
)
374 || !strncmp (IDENTIFIER_POINTER (DECL_NAME (decl
)),
379 if (decl
&& TREE_DEPRECATED (decl
))
380 warn_deprecated_use (decl
, NULL_TREE
);
381 require_complete_eh_spec_types (fntype
, decl
);
383 TREE_HAS_CONSTRUCTOR (function
) = (decl
&& DECL_CONSTRUCTOR_P (decl
));
385 /* Don't pass empty class objects by value. This is useful
386 for tags in STL, which are used to control overload resolution.
387 We don't need to handle other cases of copying empty classes. */
388 if (! decl
|| ! DECL_BUILT_IN (decl
))
389 for (i
= 0; i
< n
; i
++)
391 tree arg
= CALL_EXPR_ARG (function
, i
);
392 if (is_empty_class (TREE_TYPE (arg
))
393 && ! TREE_ADDRESSABLE (TREE_TYPE (arg
)))
395 tree t
= build0 (EMPTY_CLASS_EXPR
, TREE_TYPE (arg
));
396 arg
= build2 (COMPOUND_EXPR
, TREE_TYPE (t
), arg
, t
);
397 CALL_EXPR_ARG (function
, i
) = arg
;
404 /* Build something of the form ptr->method (args)
405 or object.method (args). This can also build
406 calls to constructors, and find friends.
408 Member functions always take their class variable
411 INSTANCE is a class instance.
413 NAME is the name of the method desired, usually an IDENTIFIER_NODE.
415 PARMS help to figure out what that NAME really refers to.
417 BASETYPE_PATH, if non-NULL, contains a chain from the type of INSTANCE
418 down to the real instance type to use for access checking. We need this
419 information to get protected accesses correct.
421 FLAGS is the logical disjunction of zero or more LOOKUP_
422 flags. See cp-tree.h for more info.
424 If this is all OK, calls build_function_call with the resolved
427 This function must also handle being called to perform
428 initialization, promotion/coercion of arguments, and
429 instantiation of default parameters.
431 Note that NAME may refer to an instance variable name. If
432 `operator()()' is defined for the type of that field, then we return
435 /* New overloading code. */
437 typedef struct z_candidate z_candidate
;
439 typedef struct candidate_warning candidate_warning
;
440 struct candidate_warning
{
442 candidate_warning
*next
;
445 /* Information for providing diagnostics about why overloading failed. */
447 enum rejection_reason_code
{
450 rr_explicit_conversion
,
451 rr_template_conversion
,
453 rr_bad_arg_conversion
,
454 rr_template_unification
,
458 struct conversion_info
{
459 /* The index of the argument, 0-based. */
461 /* The actual argument or its type. */
463 /* The type of the parameter. */
467 struct rejection_reason
{
468 enum rejection_reason_code code
;
470 /* Information about an arity mismatch. */
472 /* The expected number of arguments. */
474 /* The actual number of arguments in the call. */
476 /* Whether the call was a varargs call. */
479 /* Information about an argument conversion mismatch. */
480 struct conversion_info conversion
;
481 /* Same, but for bad argument conversions. */
482 struct conversion_info bad_conversion
;
483 /* Information about template unification failures. These are the
484 parameters passed to fn_type_unification. */
492 unification_kind_t strict
;
494 } template_unification
;
495 /* Information about template instantiation failures. These are the
496 parameters passed to instantiate_template. */
500 } template_instantiation
;
505 /* The FUNCTION_DECL that will be called if this candidate is
506 selected by overload resolution. */
508 /* If not NULL_TREE, the first argument to use when calling this
511 /* The rest of the arguments to use when calling this function. If
512 there are no further arguments this may be NULL or it may be an
514 const vec
<tree
, va_gc
> *args
;
515 /* The implicit conversion sequences for each of the arguments to
518 /* The number of implicit conversion sequences. */
520 /* If FN is a user-defined conversion, the standard conversion
521 sequence from the type returned by FN to the desired destination
523 conversion
*second_conv
;
524 struct rejection_reason
*reason
;
525 /* If FN is a member function, the binfo indicating the path used to
526 qualify the name of FN at the call site. This path is used to
527 determine whether or not FN is accessible if it is selected by
528 overload resolution. The DECL_CONTEXT of FN will always be a
529 (possibly improper) base of this binfo. */
531 /* If FN is a non-static member function, the binfo indicating the
532 subobject to which the `this' pointer should be converted if FN
533 is selected by overload resolution. The type pointed to by
534 the `this' pointer must correspond to the most derived class
535 indicated by the CONVERSION_PATH. */
536 tree conversion_path
;
539 candidate_warning
*warnings
;
543 /* The flags active in add_candidate. */
547 /* Returns true iff T is a null pointer constant in the sense of
551 null_ptr_cst_p (tree t
)
555 A null pointer constant is an integral constant expression
556 (_expr.const_) rvalue of integer type that evaluates to zero or
557 an rvalue of type std::nullptr_t. */
558 if (NULLPTR_TYPE_P (TREE_TYPE (t
)))
560 if (CP_INTEGRAL_TYPE_P (TREE_TYPE (t
)))
562 /* Core issue 903 says only literal 0 is a null pointer constant. */
563 if (cxx_dialect
< cxx11
)
564 t
= maybe_constant_value (fold_non_dependent_expr_sfinae (t
, tf_none
));
566 if (integer_zerop (t
) && !TREE_OVERFLOW (t
))
572 /* Returns true iff T is a null member pointer value (4.11). */
575 null_member_pointer_value_p (tree t
)
577 tree type
= TREE_TYPE (t
);
580 else if (TYPE_PTRMEMFUNC_P (type
))
581 return (TREE_CODE (t
) == CONSTRUCTOR
582 && integer_zerop (CONSTRUCTOR_ELT (t
, 0)->value
));
583 else if (TYPE_PTRDATAMEM_P (type
))
584 return integer_all_onesp (t
);
589 /* Returns nonzero if PARMLIST consists of only default parms,
590 ellipsis, and/or undeduced parameter packs. */
593 sufficient_parms_p (const_tree parmlist
)
595 for (; parmlist
&& parmlist
!= void_list_node
;
596 parmlist
= TREE_CHAIN (parmlist
))
597 if (!TREE_PURPOSE (parmlist
)
598 && !PACK_EXPANSION_P (TREE_VALUE (parmlist
)))
603 /* Allocate N bytes of memory from the conversion obstack. The memory
604 is zeroed before being returned. */
607 conversion_obstack_alloc (size_t n
)
610 if (!conversion_obstack_initialized
)
612 gcc_obstack_init (&conversion_obstack
);
613 conversion_obstack_initialized
= true;
615 p
= obstack_alloc (&conversion_obstack
, n
);
620 /* Allocate rejection reasons. */
622 static struct rejection_reason
*
623 alloc_rejection (enum rejection_reason_code code
)
625 struct rejection_reason
*p
;
626 p
= (struct rejection_reason
*) conversion_obstack_alloc (sizeof *p
);
631 static struct rejection_reason
*
632 arity_rejection (tree first_arg
, int expected
, int actual
)
634 struct rejection_reason
*r
= alloc_rejection (rr_arity
);
635 int adjust
= first_arg
!= NULL_TREE
;
636 r
->u
.arity
.expected
= expected
- adjust
;
637 r
->u
.arity
.actual
= actual
- adjust
;
641 static struct rejection_reason
*
642 arg_conversion_rejection (tree first_arg
, int n_arg
, tree from
, tree to
)
644 struct rejection_reason
*r
= alloc_rejection (rr_arg_conversion
);
645 int adjust
= first_arg
!= NULL_TREE
;
646 r
->u
.conversion
.n_arg
= n_arg
- adjust
;
647 r
->u
.conversion
.from
= from
;
648 r
->u
.conversion
.to_type
= to
;
652 static struct rejection_reason
*
653 bad_arg_conversion_rejection (tree first_arg
, int n_arg
, tree from
, tree to
)
655 struct rejection_reason
*r
= alloc_rejection (rr_bad_arg_conversion
);
656 int adjust
= first_arg
!= NULL_TREE
;
657 r
->u
.bad_conversion
.n_arg
= n_arg
- adjust
;
658 r
->u
.bad_conversion
.from
= from
;
659 r
->u
.bad_conversion
.to_type
= to
;
663 static struct rejection_reason
*
664 explicit_conversion_rejection (tree from
, tree to
)
666 struct rejection_reason
*r
= alloc_rejection (rr_explicit_conversion
);
667 r
->u
.conversion
.n_arg
= 0;
668 r
->u
.conversion
.from
= from
;
669 r
->u
.conversion
.to_type
= to
;
673 static struct rejection_reason
*
674 template_conversion_rejection (tree from
, tree to
)
676 struct rejection_reason
*r
= alloc_rejection (rr_template_conversion
);
677 r
->u
.conversion
.n_arg
= 0;
678 r
->u
.conversion
.from
= from
;
679 r
->u
.conversion
.to_type
= to
;
683 static struct rejection_reason
*
684 template_unification_rejection (tree tmpl
, tree explicit_targs
, tree targs
,
685 const tree
*args
, unsigned int nargs
,
686 tree return_type
, unification_kind_t strict
,
689 size_t args_n_bytes
= sizeof (*args
) * nargs
;
690 tree
*args1
= (tree
*) conversion_obstack_alloc (args_n_bytes
);
691 struct rejection_reason
*r
= alloc_rejection (rr_template_unification
);
692 r
->u
.template_unification
.tmpl
= tmpl
;
693 r
->u
.template_unification
.explicit_targs
= explicit_targs
;
694 r
->u
.template_unification
.num_targs
= TREE_VEC_LENGTH (targs
);
695 /* Copy args to our own storage. */
696 memcpy (args1
, args
, args_n_bytes
);
697 r
->u
.template_unification
.args
= args1
;
698 r
->u
.template_unification
.nargs
= nargs
;
699 r
->u
.template_unification
.return_type
= return_type
;
700 r
->u
.template_unification
.strict
= strict
;
701 r
->u
.template_unification
.flags
= flags
;
705 static struct rejection_reason
*
706 template_unification_error_rejection (void)
708 return alloc_rejection (rr_template_unification
);
711 static struct rejection_reason
*
712 invalid_copy_with_fn_template_rejection (void)
714 struct rejection_reason
*r
= alloc_rejection (rr_invalid_copy
);
718 /* Dynamically allocate a conversion. */
721 alloc_conversion (conversion_kind kind
)
724 c
= (conversion
*) conversion_obstack_alloc (sizeof (conversion
));
729 #ifdef ENABLE_CHECKING
731 /* Make sure that all memory on the conversion obstack has been
735 validate_conversion_obstack (void)
737 if (conversion_obstack_initialized
)
738 gcc_assert ((obstack_next_free (&conversion_obstack
)
739 == obstack_base (&conversion_obstack
)));
742 #endif /* ENABLE_CHECKING */
744 /* Dynamically allocate an array of N conversions. */
747 alloc_conversions (size_t n
)
749 return (conversion
**) conversion_obstack_alloc (n
* sizeof (conversion
*));
753 build_conv (conversion_kind code
, tree type
, conversion
*from
)
756 conversion_rank rank
= CONVERSION_RANK (from
);
758 /* Note that the caller is responsible for filling in t->cand for
759 user-defined conversions. */
760 t
= alloc_conversion (code
);
783 t
->user_conv_p
= (code
== ck_user
|| from
->user_conv_p
);
784 t
->bad_p
= from
->bad_p
;
789 /* Represent a conversion from CTOR, a braced-init-list, to TYPE, a
790 specialization of std::initializer_list<T>, if such a conversion is
794 build_list_conv (tree type
, tree ctor
, int flags
, tsubst_flags_t complain
)
796 tree elttype
= TREE_VEC_ELT (CLASSTYPE_TI_ARGS (type
), 0);
797 unsigned len
= CONSTRUCTOR_NELTS (ctor
);
798 conversion
**subconvs
= alloc_conversions (len
);
803 /* Within a list-initialization we can have more user-defined
805 flags
&= ~LOOKUP_NO_CONVERSION
;
806 /* But no narrowing conversions. */
807 flags
|= LOOKUP_NO_NARROWING
;
809 /* Can't make an array of these types. */
810 if (TREE_CODE (elttype
) == REFERENCE_TYPE
811 || TREE_CODE (elttype
) == FUNCTION_TYPE
812 || VOID_TYPE_P (elttype
))
815 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor
), i
, val
)
818 = implicit_conversion (elttype
, TREE_TYPE (val
), val
,
819 false, flags
, complain
);
826 t
= alloc_conversion (ck_list
);
828 t
->u
.list
= subconvs
;
831 for (i
= 0; i
< len
; ++i
)
833 conversion
*sub
= subconvs
[i
];
834 if (sub
->rank
> t
->rank
)
836 if (sub
->user_conv_p
)
837 t
->user_conv_p
= true;
845 /* Return the next conversion of the conversion chain (if applicable),
846 or NULL otherwise. Please use this function instead of directly
847 accessing fields of struct conversion. */
850 next_conversion (conversion
*conv
)
853 || conv
->kind
== ck_identity
854 || conv
->kind
== ck_ambig
855 || conv
->kind
== ck_list
)
860 /* Subroutine of build_aggr_conv: check whether CTOR, a braced-init-list,
861 is a valid aggregate initializer for array type ATYPE. */
864 can_convert_array (tree atype
, tree ctor
, int flags
, tsubst_flags_t complain
)
867 tree elttype
= TREE_TYPE (atype
);
868 for (i
= 0; i
< CONSTRUCTOR_NELTS (ctor
); ++i
)
870 tree val
= CONSTRUCTOR_ELT (ctor
, i
)->value
;
872 if (TREE_CODE (elttype
) == ARRAY_TYPE
873 && TREE_CODE (val
) == CONSTRUCTOR
)
874 ok
= can_convert_array (elttype
, val
, flags
, complain
);
876 ok
= can_convert_arg (elttype
, TREE_TYPE (val
), val
, flags
,
884 /* Represent a conversion from CTOR, a braced-init-list, to TYPE, an
885 aggregate class, if such a conversion is possible. */
888 build_aggr_conv (tree type
, tree ctor
, int flags
, tsubst_flags_t complain
)
890 unsigned HOST_WIDE_INT i
= 0;
892 tree field
= next_initializable_field (TYPE_FIELDS (type
));
893 tree empty_ctor
= NULL_TREE
;
895 ctor
= reshape_init (type
, ctor
, tf_none
);
896 if (ctor
== error_mark_node
)
899 /* The conversions within the init-list aren't affected by the enclosing
900 context; they're always simple copy-initialization. */
901 flags
= LOOKUP_IMPLICIT
|LOOKUP_NO_NARROWING
;
903 for (; field
; field
= next_initializable_field (DECL_CHAIN (field
)))
905 tree ftype
= TREE_TYPE (field
);
909 if (i
< CONSTRUCTOR_NELTS (ctor
))
910 val
= CONSTRUCTOR_ELT (ctor
, i
)->value
;
911 else if (TREE_CODE (ftype
) == REFERENCE_TYPE
)
912 /* Value-initialization of reference is ill-formed. */
916 if (empty_ctor
== NULL_TREE
)
917 empty_ctor
= build_constructor (init_list_type_node
, NULL
);
922 if (TREE_CODE (ftype
) == ARRAY_TYPE
923 && TREE_CODE (val
) == CONSTRUCTOR
)
924 ok
= can_convert_array (ftype
, val
, flags
, complain
);
926 ok
= can_convert_arg (ftype
, TREE_TYPE (val
), val
, flags
,
932 if (TREE_CODE (type
) == UNION_TYPE
)
936 if (i
< CONSTRUCTOR_NELTS (ctor
))
939 c
= alloc_conversion (ck_aggr
);
942 c
->user_conv_p
= true;
943 c
->check_narrowing
= true;
948 /* Represent a conversion from CTOR, a braced-init-list, to TYPE, an
949 array type, if such a conversion is possible. */
952 build_array_conv (tree type
, tree ctor
, int flags
, tsubst_flags_t complain
)
955 unsigned HOST_WIDE_INT len
= CONSTRUCTOR_NELTS (ctor
);
956 tree elttype
= TREE_TYPE (type
);
961 enum conversion_rank rank
= cr_exact
;
963 /* We might need to propagate the size from the element to the array. */
964 complete_type (type
);
966 if (TYPE_DOMAIN (type
)
967 && !variably_modified_type_p (TYPE_DOMAIN (type
), NULL_TREE
))
969 unsigned HOST_WIDE_INT alen
= tree_to_uhwi (array_type_nelts_top (type
));
974 flags
= LOOKUP_IMPLICIT
|LOOKUP_NO_NARROWING
;
976 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor
), i
, val
)
979 = implicit_conversion (elttype
, TREE_TYPE (val
), val
,
980 false, flags
, complain
);
984 if (sub
->rank
> rank
)
986 if (sub
->user_conv_p
)
992 c
= alloc_conversion (ck_aggr
);
995 c
->user_conv_p
= user
;
1001 /* Represent a conversion from CTOR, a braced-init-list, to TYPE, a
1002 complex type, if such a conversion is possible. */
1005 build_complex_conv (tree type
, tree ctor
, int flags
,
1006 tsubst_flags_t complain
)
1009 unsigned HOST_WIDE_INT len
= CONSTRUCTOR_NELTS (ctor
);
1010 tree elttype
= TREE_TYPE (type
);
1015 enum conversion_rank rank
= cr_exact
;
1020 flags
= LOOKUP_IMPLICIT
|LOOKUP_NO_NARROWING
;
1022 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor
), i
, val
)
1025 = implicit_conversion (elttype
, TREE_TYPE (val
), val
,
1026 false, flags
, complain
);
1030 if (sub
->rank
> rank
)
1032 if (sub
->user_conv_p
)
1038 c
= alloc_conversion (ck_aggr
);
1041 c
->user_conv_p
= user
;
1047 /* Build a representation of the identity conversion from EXPR to
1048 itself. The TYPE should match the type of EXPR, if EXPR is non-NULL. */
1051 build_identity_conv (tree type
, tree expr
)
1055 c
= alloc_conversion (ck_identity
);
1062 /* Converting from EXPR to TYPE was ambiguous in the sense that there
1063 were multiple user-defined conversions to accomplish the job.
1064 Build a conversion that indicates that ambiguity. */
1067 build_ambiguous_conv (tree type
, tree expr
)
1071 c
= alloc_conversion (ck_ambig
);
1079 strip_top_quals (tree t
)
1081 if (TREE_CODE (t
) == ARRAY_TYPE
)
1083 return cp_build_qualified_type (t
, 0);
1086 /* Returns the standard conversion path (see [conv]) from type FROM to type
1087 TO, if any. For proper handling of null pointer constants, you must
1088 also pass the expression EXPR to convert from. If C_CAST_P is true,
1089 this conversion is coming from a C-style cast. */
1092 standard_conversion (tree to
, tree from
, tree expr
, bool c_cast_p
,
1095 enum tree_code fcode
, tcode
;
1097 bool fromref
= false;
1100 to
= non_reference (to
);
1101 if (TREE_CODE (from
) == REFERENCE_TYPE
)
1104 from
= TREE_TYPE (from
);
1107 to
= strip_top_quals (to
);
1108 from
= strip_top_quals (from
);
1110 if (expr
&& type_unknown_p (expr
))
1112 if (TYPE_PTRFN_P (to
) || TYPE_PTRMEMFUNC_P (to
))
1114 tsubst_flags_t tflags
= tf_conv
;
1115 expr
= instantiate_type (to
, expr
, tflags
);
1116 if (expr
== error_mark_node
)
1118 from
= TREE_TYPE (expr
);
1120 else if (TREE_CODE (to
) == BOOLEAN_TYPE
)
1122 /* Necessary for eg, TEMPLATE_ID_EXPRs (c++/50961). */
1123 expr
= resolve_nondeduced_context (expr
);
1124 from
= TREE_TYPE (expr
);
1128 fcode
= TREE_CODE (from
);
1129 tcode
= TREE_CODE (to
);
1131 conv
= build_identity_conv (from
, expr
);
1132 if (fcode
== FUNCTION_TYPE
|| fcode
== ARRAY_TYPE
)
1134 from
= type_decays_to (from
);
1135 fcode
= TREE_CODE (from
);
1136 conv
= build_conv (ck_lvalue
, from
, conv
);
1138 else if (fromref
|| (expr
&& lvalue_p (expr
)))
1143 bitfield_type
= is_bitfield_expr_with_lowered_type (expr
);
1146 from
= strip_top_quals (bitfield_type
);
1147 fcode
= TREE_CODE (from
);
1150 conv
= build_conv (ck_rvalue
, from
, conv
);
1151 if (flags
& LOOKUP_PREFER_RVALUE
)
1152 conv
->rvaluedness_matches_p
= true;
1155 /* Allow conversion between `__complex__' data types. */
1156 if (tcode
== COMPLEX_TYPE
&& fcode
== COMPLEX_TYPE
)
1158 /* The standard conversion sequence to convert FROM to TO is
1159 the standard conversion sequence to perform componentwise
1161 conversion
*part_conv
= standard_conversion
1162 (TREE_TYPE (to
), TREE_TYPE (from
), NULL_TREE
, c_cast_p
, flags
);
1166 conv
= build_conv (part_conv
->kind
, to
, conv
);
1167 conv
->rank
= part_conv
->rank
;
1175 if (same_type_p (from
, to
))
1177 if (CLASS_TYPE_P (to
) && conv
->kind
== ck_rvalue
)
1178 conv
->type
= qualified_to
;
1183 A null pointer constant can be converted to a pointer type; ... A
1184 null pointer constant of integral type can be converted to an
1185 rvalue of type std::nullptr_t. */
1186 if ((tcode
== POINTER_TYPE
|| TYPE_PTRMEM_P (to
)
1187 || NULLPTR_TYPE_P (to
))
1188 && expr
&& null_ptr_cst_p (expr
))
1189 conv
= build_conv (ck_std
, to
, conv
);
1190 else if ((tcode
== INTEGER_TYPE
&& fcode
== POINTER_TYPE
)
1191 || (tcode
== POINTER_TYPE
&& fcode
== INTEGER_TYPE
))
1193 /* For backwards brain damage compatibility, allow interconversion of
1194 pointers and integers with a pedwarn. */
1195 conv
= build_conv (ck_std
, to
, conv
);
1198 else if (UNSCOPED_ENUM_P (to
) && fcode
== INTEGER_TYPE
)
1200 /* For backwards brain damage compatibility, allow interconversion of
1201 enums and integers with a pedwarn. */
1202 conv
= build_conv (ck_std
, to
, conv
);
1205 else if ((tcode
== POINTER_TYPE
&& fcode
== POINTER_TYPE
)
1206 || (TYPE_PTRDATAMEM_P (to
) && TYPE_PTRDATAMEM_P (from
)))
1211 if (tcode
== POINTER_TYPE
1212 && same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (from
),
1215 else if (VOID_TYPE_P (TREE_TYPE (to
))
1216 && !TYPE_PTRDATAMEM_P (from
)
1217 && TREE_CODE (TREE_TYPE (from
)) != FUNCTION_TYPE
)
1219 tree nfrom
= TREE_TYPE (from
);
1220 /* Don't try to apply restrict to void. */
1221 int quals
= cp_type_quals (nfrom
) & ~TYPE_QUAL_RESTRICT
;
1222 from
= build_pointer_type
1223 (cp_build_qualified_type (void_type_node
, quals
));
1224 conv
= build_conv (ck_ptr
, from
, conv
);
1226 else if (TYPE_PTRDATAMEM_P (from
))
1228 tree fbase
= TYPE_PTRMEM_CLASS_TYPE (from
);
1229 tree tbase
= TYPE_PTRMEM_CLASS_TYPE (to
);
1231 if (DERIVED_FROM_P (fbase
, tbase
)
1232 && (same_type_ignoring_top_level_qualifiers_p
1233 (TYPE_PTRMEM_POINTED_TO_TYPE (from
),
1234 TYPE_PTRMEM_POINTED_TO_TYPE (to
))))
1236 from
= build_ptrmem_type (tbase
,
1237 TYPE_PTRMEM_POINTED_TO_TYPE (from
));
1238 conv
= build_conv (ck_pmem
, from
, conv
);
1240 else if (!same_type_p (fbase
, tbase
))
1243 else if (CLASS_TYPE_P (TREE_TYPE (from
))
1244 && CLASS_TYPE_P (TREE_TYPE (to
))
1247 An rvalue of type "pointer to cv D," where D is a
1248 class type, can be converted to an rvalue of type
1249 "pointer to cv B," where B is a base class (clause
1250 _class.derived_) of D. If B is an inaccessible
1251 (clause _class.access_) or ambiguous
1252 (_class.member.lookup_) base class of D, a program
1253 that necessitates this conversion is ill-formed.
1254 Therefore, we use DERIVED_FROM_P, and do not check
1255 access or uniqueness. */
1256 && DERIVED_FROM_P (TREE_TYPE (to
), TREE_TYPE (from
)))
1259 cp_build_qualified_type (TREE_TYPE (to
),
1260 cp_type_quals (TREE_TYPE (from
)));
1261 from
= build_pointer_type (from
);
1262 conv
= build_conv (ck_ptr
, from
, conv
);
1263 conv
->base_p
= true;
1266 if (tcode
== POINTER_TYPE
)
1268 to_pointee
= TREE_TYPE (to
);
1269 from_pointee
= TREE_TYPE (from
);
1273 to_pointee
= TYPE_PTRMEM_POINTED_TO_TYPE (to
);
1274 from_pointee
= TYPE_PTRMEM_POINTED_TO_TYPE (from
);
1277 if (same_type_p (from
, to
))
1279 else if (c_cast_p
&& comp_ptr_ttypes_const (to
, from
))
1280 /* In a C-style cast, we ignore CV-qualification because we
1281 are allowed to perform a static_cast followed by a
1283 conv
= build_conv (ck_qual
, to
, conv
);
1284 else if (!c_cast_p
&& comp_ptr_ttypes (to_pointee
, from_pointee
))
1285 conv
= build_conv (ck_qual
, to
, conv
);
1286 else if (expr
&& string_conv_p (to
, expr
, 0))
1287 /* converting from string constant to char *. */
1288 conv
= build_conv (ck_qual
, to
, conv
);
1289 /* Allow conversions among compatible ObjC pointer types (base
1290 conversions have been already handled above). */
1291 else if (c_dialect_objc ()
1292 && objc_compare_types (to
, from
, -4, NULL_TREE
))
1293 conv
= build_conv (ck_ptr
, to
, conv
);
1294 else if (ptr_reasonably_similar (to_pointee
, from_pointee
))
1296 conv
= build_conv (ck_ptr
, to
, conv
);
1304 else if (TYPE_PTRMEMFUNC_P (to
) && TYPE_PTRMEMFUNC_P (from
))
1306 tree fromfn
= TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (from
));
1307 tree tofn
= TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (to
));
1308 tree fbase
= class_of_this_parm (fromfn
);
1309 tree tbase
= class_of_this_parm (tofn
);
1311 if (!DERIVED_FROM_P (fbase
, tbase
)
1312 || !same_type_p (static_fn_type (fromfn
),
1313 static_fn_type (tofn
)))
1316 from
= build_memfn_type (fromfn
,
1318 cp_type_quals (tbase
),
1319 type_memfn_rqual (tofn
));
1320 from
= build_ptrmemfunc_type (build_pointer_type (from
));
1321 conv
= build_conv (ck_pmem
, from
, conv
);
1322 conv
->base_p
= true;
1324 else if (tcode
== BOOLEAN_TYPE
)
1328 A prvalue of arithmetic, unscoped enumeration, pointer, or pointer
1329 to member type can be converted to a prvalue of type bool. ...
1330 For direct-initialization (8.5 [dcl.init]), a prvalue of type
1331 std::nullptr_t can be converted to a prvalue of type bool; */
1332 if (ARITHMETIC_TYPE_P (from
)
1333 || UNSCOPED_ENUM_P (from
)
1334 || fcode
== POINTER_TYPE
1335 || TYPE_PTRMEM_P (from
)
1336 || NULLPTR_TYPE_P (from
))
1338 conv
= build_conv (ck_std
, to
, conv
);
1339 if (fcode
== POINTER_TYPE
1340 || TYPE_PTRDATAMEM_P (from
)
1341 || (TYPE_PTRMEMFUNC_P (from
)
1342 && conv
->rank
< cr_pbool
)
1343 || NULLPTR_TYPE_P (from
))
1344 conv
->rank
= cr_pbool
;
1345 if (NULLPTR_TYPE_P (from
) && (flags
& LOOKUP_ONLYCONVERTING
))
1352 /* We don't check for ENUMERAL_TYPE here because there are no standard
1353 conversions to enum type. */
1354 /* As an extension, allow conversion to complex type. */
1355 else if (ARITHMETIC_TYPE_P (to
))
1357 if (! (INTEGRAL_CODE_P (fcode
)
1358 || (fcode
== REAL_TYPE
&& !(flags
& LOOKUP_NO_NON_INTEGRAL
)))
1359 || SCOPED_ENUM_P (from
))
1361 conv
= build_conv (ck_std
, to
, conv
);
1363 /* Give this a better rank if it's a promotion. */
1364 if (same_type_p (to
, type_promotes_to (from
))
1365 && next_conversion (conv
)->rank
<= cr_promotion
)
1366 conv
->rank
= cr_promotion
;
1368 else if (fcode
== VECTOR_TYPE
&& tcode
== VECTOR_TYPE
1369 && vector_types_convertible_p (from
, to
, false))
1370 return build_conv (ck_std
, to
, conv
);
1371 else if (MAYBE_CLASS_TYPE_P (to
) && MAYBE_CLASS_TYPE_P (from
)
1372 && is_properly_derived_from (from
, to
))
1374 if (conv
->kind
== ck_rvalue
)
1375 conv
= next_conversion (conv
);
1376 conv
= build_conv (ck_base
, to
, conv
);
1377 /* The derived-to-base conversion indicates the initialization
1378 of a parameter with base type from an object of a derived
1379 type. A temporary object is created to hold the result of
1380 the conversion unless we're binding directly to a reference. */
1381 conv
->need_temporary_p
= !(flags
& LOOKUP_NO_TEMP_BIND
);
1386 if (flags
& LOOKUP_NO_NARROWING
)
1387 conv
->check_narrowing
= true;
1392 /* Returns nonzero if T1 is reference-related to T2. */
1395 reference_related_p (tree t1
, tree t2
)
1397 if (t1
== error_mark_node
|| t2
== error_mark_node
)
1400 t1
= TYPE_MAIN_VARIANT (t1
);
1401 t2
= TYPE_MAIN_VARIANT (t2
);
1405 Given types "cv1 T1" and "cv2 T2," "cv1 T1" is reference-related
1406 to "cv2 T2" if T1 is the same type as T2, or T1 is a base class
1408 return (same_type_p (t1
, t2
)
1409 || (CLASS_TYPE_P (t1
) && CLASS_TYPE_P (t2
)
1410 && DERIVED_FROM_P (t1
, t2
)));
1413 /* Returns nonzero if T1 is reference-compatible with T2. */
1416 reference_compatible_p (tree t1
, tree t2
)
1420 "cv1 T1" is reference compatible with "cv2 T2" if T1 is
1421 reference-related to T2 and cv1 is the same cv-qualification as,
1422 or greater cv-qualification than, cv2. */
1423 return (reference_related_p (t1
, t2
)
1424 && at_least_as_qualified_p (t1
, t2
));
1427 /* A reference of the indicated TYPE is being bound directly to the
1428 expression represented by the implicit conversion sequence CONV.
1429 Return a conversion sequence for this binding. */
1432 direct_reference_binding (tree type
, conversion
*conv
)
1436 gcc_assert (TREE_CODE (type
) == REFERENCE_TYPE
);
1437 gcc_assert (TREE_CODE (conv
->type
) != REFERENCE_TYPE
);
1439 t
= TREE_TYPE (type
);
1443 When a parameter of reference type binds directly
1444 (_dcl.init.ref_) to an argument expression, the implicit
1445 conversion sequence is the identity conversion, unless the
1446 argument expression has a type that is a derived class of the
1447 parameter type, in which case the implicit conversion sequence is
1448 a derived-to-base Conversion.
1450 If the parameter binds directly to the result of applying a
1451 conversion function to the argument expression, the implicit
1452 conversion sequence is a user-defined conversion sequence
1453 (_over.ics.user_), with the second standard conversion sequence
1454 either an identity conversion or, if the conversion function
1455 returns an entity of a type that is a derived class of the
1456 parameter type, a derived-to-base conversion. */
1457 if (!same_type_ignoring_top_level_qualifiers_p (t
, conv
->type
))
1459 /* Represent the derived-to-base conversion. */
1460 conv
= build_conv (ck_base
, t
, conv
);
1461 /* We will actually be binding to the base-class subobject in
1462 the derived class, so we mark this conversion appropriately.
1463 That way, convert_like knows not to generate a temporary. */
1464 conv
->need_temporary_p
= false;
1466 return build_conv (ck_ref_bind
, type
, conv
);
1469 /* Returns the conversion path from type FROM to reference type TO for
1470 purposes of reference binding. For lvalue binding, either pass a
1471 reference type to FROM or an lvalue expression to EXPR. If the
1472 reference will be bound to a temporary, NEED_TEMPORARY_P is set for
1473 the conversion returned. If C_CAST_P is true, this
1474 conversion is coming from a C-style cast. */
1477 reference_binding (tree rto
, tree rfrom
, tree expr
, bool c_cast_p
, int flags
,
1478 tsubst_flags_t complain
)
1480 conversion
*conv
= NULL
;
1481 tree to
= TREE_TYPE (rto
);
1486 cp_lvalue_kind gl_kind
;
1489 if (TREE_CODE (to
) == FUNCTION_TYPE
&& expr
&& type_unknown_p (expr
))
1491 expr
= instantiate_type (to
, expr
, tf_none
);
1492 if (expr
== error_mark_node
)
1494 from
= TREE_TYPE (expr
);
1497 if (expr
&& BRACE_ENCLOSED_INITIALIZER_P (expr
))
1499 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS
);
1500 /* DR 1288: Otherwise, if the initializer list has a single element
1501 of type E and ... [T's] referenced type is reference-related to E,
1502 the object or reference is initialized from that element... */
1503 if (CONSTRUCTOR_NELTS (expr
) == 1)
1505 tree elt
= CONSTRUCTOR_ELT (expr
, 0)->value
;
1506 if (error_operand_p (elt
))
1508 tree etype
= TREE_TYPE (elt
);
1509 if (reference_related_p (to
, etype
))
1516 /* Otherwise, if T is a reference type, a prvalue temporary of the
1517 type referenced by T is copy-list-initialized or
1518 direct-list-initialized, depending on the kind of initialization
1519 for the reference, and the reference is bound to that temporary. */
1520 conv
= implicit_conversion (to
, from
, expr
, c_cast_p
,
1521 flags
|LOOKUP_NO_TEMP_BIND
, complain
);
1525 if (TREE_CODE (from
) == REFERENCE_TYPE
)
1527 from
= TREE_TYPE (from
);
1528 if (!TYPE_REF_IS_RVALUE (rfrom
)
1529 || TREE_CODE (from
) == FUNCTION_TYPE
)
1530 gl_kind
= clk_ordinary
;
1532 gl_kind
= clk_rvalueref
;
1536 gl_kind
= lvalue_kind (expr
);
1537 if (gl_kind
& clk_class
)
1538 /* A class prvalue is not a glvalue. */
1543 is_lvalue
= gl_kind
&& !(gl_kind
& clk_rvalueref
);
1546 if ((gl_kind
& clk_bitfield
) != 0)
1547 tfrom
= unlowered_expr_type (expr
);
1549 /* Figure out whether or not the types are reference-related and
1550 reference compatible. We have do do this after stripping
1551 references from FROM. */
1552 related_p
= reference_related_p (to
, tfrom
);
1553 /* If this is a C cast, first convert to an appropriately qualified
1554 type, so that we can later do a const_cast to the desired type. */
1555 if (related_p
&& c_cast_p
1556 && !at_least_as_qualified_p (to
, tfrom
))
1557 to
= cp_build_qualified_type (to
, cp_type_quals (tfrom
));
1558 compatible_p
= reference_compatible_p (to
, tfrom
);
1560 /* Directly bind reference when target expression's type is compatible with
1561 the reference and expression is an lvalue. In DR391, the wording in
1562 [8.5.3/5 dcl.init.ref] is changed to also require direct bindings for
1563 const and rvalue references to rvalues of compatible class type.
1564 We should also do direct bindings for non-class xvalues. */
1567 || (!(flags
& LOOKUP_NO_TEMP_BIND
)
1568 && (CLASS_TYPE_P (from
)
1569 || TREE_CODE (from
) == ARRAY_TYPE
))))
1573 If the initializer expression
1575 -- is an lvalue (but not an lvalue for a bit-field), and "cv1 T1"
1576 is reference-compatible with "cv2 T2,"
1578 the reference is bound directly to the initializer expression
1582 If the initializer expression is an rvalue, with T2 a class type,
1583 and "cv1 T1" is reference-compatible with "cv2 T2", the reference
1584 is bound to the object represented by the rvalue or to a sub-object
1585 within that object. */
1587 conv
= build_identity_conv (tfrom
, expr
);
1588 conv
= direct_reference_binding (rto
, conv
);
1590 if (flags
& LOOKUP_PREFER_RVALUE
)
1591 /* The top-level caller requested that we pretend that the lvalue
1592 be treated as an rvalue. */
1593 conv
->rvaluedness_matches_p
= TYPE_REF_IS_RVALUE (rto
);
1594 else if (TREE_CODE (rfrom
) == REFERENCE_TYPE
)
1595 /* Handle rvalue reference to function properly. */
1596 conv
->rvaluedness_matches_p
1597 = (TYPE_REF_IS_RVALUE (rto
) == TYPE_REF_IS_RVALUE (rfrom
));
1599 conv
->rvaluedness_matches_p
1600 = (TYPE_REF_IS_RVALUE (rto
) == !is_lvalue
);
1602 if ((gl_kind
& clk_bitfield
) != 0
1603 || ((gl_kind
& clk_packed
) != 0 && !TYPE_PACKED (to
)))
1604 /* For the purposes of overload resolution, we ignore the fact
1605 this expression is a bitfield or packed field. (In particular,
1606 [over.ics.ref] says specifically that a function with a
1607 non-const reference parameter is viable even if the
1608 argument is a bitfield.)
1610 However, when we actually call the function we must create
1611 a temporary to which to bind the reference. If the
1612 reference is volatile, or isn't const, then we cannot make
1613 a temporary, so we just issue an error when the conversion
1615 conv
->need_temporary_p
= true;
1617 /* Don't allow binding of lvalues (other than function lvalues) to
1618 rvalue references. */
1619 if (is_lvalue
&& TYPE_REF_IS_RVALUE (rto
)
1620 && TREE_CODE (to
) != FUNCTION_TYPE
1621 && !(flags
& LOOKUP_PREFER_RVALUE
))
1624 /* Nor the reverse. */
1625 if (!is_lvalue
&& !TYPE_REF_IS_RVALUE (rto
)
1626 && (!CP_TYPE_CONST_NON_VOLATILE_P (to
)
1627 || (flags
& LOOKUP_NO_RVAL_BIND
))
1628 && TREE_CODE (to
) != FUNCTION_TYPE
)
1636 /* [class.conv.fct] A conversion function is never used to convert a
1637 (possibly cv-qualified) object to the (possibly cv-qualified) same
1638 object type (or a reference to it), to a (possibly cv-qualified) base
1639 class of that type (or a reference to it).... */
1640 else if (CLASS_TYPE_P (from
) && !related_p
1641 && !(flags
& LOOKUP_NO_CONVERSION
))
1645 If the initializer expression
1647 -- has a class type (i.e., T2 is a class type) can be
1648 implicitly converted to an lvalue of type "cv3 T3," where
1649 "cv1 T1" is reference-compatible with "cv3 T3". (this
1650 conversion is selected by enumerating the applicable
1651 conversion functions (_over.match.ref_) and choosing the
1652 best one through overload resolution. (_over.match_).
1654 the reference is bound to the lvalue result of the conversion
1655 in the second case. */
1656 z_candidate
*cand
= build_user_type_conversion_1 (rto
, expr
, flags
,
1659 return cand
->second_conv
;
1662 /* From this point on, we conceptually need temporaries, even if we
1663 elide them. Only the cases above are "direct bindings". */
1664 if (flags
& LOOKUP_NO_TEMP_BIND
)
1669 When a parameter of reference type is not bound directly to an
1670 argument expression, the conversion sequence is the one required
1671 to convert the argument expression to the underlying type of the
1672 reference according to _over.best.ics_. Conceptually, this
1673 conversion sequence corresponds to copy-initializing a temporary
1674 of the underlying type with the argument expression. Any
1675 difference in top-level cv-qualification is subsumed by the
1676 initialization itself and does not constitute a conversion. */
1678 /* We're generating a temporary now, but don't bind any more in the
1679 conversion (specifically, don't slice the temporary returned by a
1680 conversion operator). */
1681 flags
|= LOOKUP_NO_TEMP_BIND
;
1683 /* Core issue 899: When [copy-]initializing a temporary to be bound
1684 to the first parameter of a copy constructor (12.8) called with
1685 a single argument in the context of direct-initialization,
1686 explicit conversion functions are also considered.
1688 So don't set LOOKUP_ONLYCONVERTING in that case. */
1689 if (!(flags
& LOOKUP_COPY_PARM
))
1690 flags
|= LOOKUP_ONLYCONVERTING
;
1693 conv
= implicit_conversion (to
, from
, expr
, c_cast_p
,
1698 if (conv
->user_conv_p
)
1700 /* If initializing the temporary used a conversion function,
1701 recalculate the second conversion sequence. */
1702 for (conversion
*t
= conv
; t
; t
= next_conversion (t
))
1703 if (t
->kind
== ck_user
1704 && DECL_CONV_FN_P (t
->cand
->fn
))
1706 tree ftype
= TREE_TYPE (TREE_TYPE (t
->cand
->fn
));
1707 int sflags
= (flags
|LOOKUP_NO_CONVERSION
)&~LOOKUP_NO_TEMP_BIND
;
1708 conversion
*new_second
1709 = reference_binding (rto
, ftype
, NULL_TREE
, c_cast_p
,
1713 return merge_conversion_sequences (t
, new_second
);
1717 conv
= build_conv (ck_ref_bind
, rto
, conv
);
1718 /* This reference binding, unlike those above, requires the
1719 creation of a temporary. */
1720 conv
->need_temporary_p
= true;
1721 conv
->rvaluedness_matches_p
= TYPE_REF_IS_RVALUE (rto
);
1725 Otherwise, the reference shall be an lvalue reference to a
1726 non-volatile const type, or the reference shall be an rvalue
1728 if (!CP_TYPE_CONST_NON_VOLATILE_P (to
) && !TYPE_REF_IS_RVALUE (rto
))
1733 Otherwise, a temporary of type "cv1 T1" is created and
1734 initialized from the initializer expression using the rules for a
1735 non-reference copy initialization. If T1 is reference-related to
1736 T2, cv1 must be the same cv-qualification as, or greater
1737 cv-qualification than, cv2; otherwise, the program is ill-formed. */
1738 if (related_p
&& !at_least_as_qualified_p (to
, from
))
1744 /* Returns the implicit conversion sequence (see [over.ics]) from type
1745 FROM to type TO. The optional expression EXPR may affect the
1746 conversion. FLAGS are the usual overloading flags. If C_CAST_P is
1747 true, this conversion is coming from a C-style cast. */
1750 implicit_conversion (tree to
, tree from
, tree expr
, bool c_cast_p
,
1751 int flags
, tsubst_flags_t complain
)
1755 if (from
== error_mark_node
|| to
== error_mark_node
1756 || expr
== error_mark_node
)
1759 /* Other flags only apply to the primary function in overload
1760 resolution, or after we've chosen one. */
1761 flags
&= (LOOKUP_ONLYCONVERTING
|LOOKUP_NO_CONVERSION
|LOOKUP_COPY_PARM
1762 |LOOKUP_NO_TEMP_BIND
|LOOKUP_NO_RVAL_BIND
|LOOKUP_PREFER_RVALUE
1763 |LOOKUP_NO_NARROWING
|LOOKUP_PROTECT
|LOOKUP_NO_NON_INTEGRAL
);
1765 /* FIXME: actually we don't want warnings either, but we can't just
1766 have 'complain &= ~(tf_warning|tf_error)' because it would cause
1767 the regression of, eg, g++.old-deja/g++.benjamin/16077.C.
1768 We really ought not to issue that warning until we've committed
1769 to that conversion. */
1770 complain
&= ~tf_error
;
1772 if (TREE_CODE (to
) == REFERENCE_TYPE
)
1773 conv
= reference_binding (to
, from
, expr
, c_cast_p
, flags
, complain
);
1775 conv
= standard_conversion (to
, from
, expr
, c_cast_p
, flags
);
1780 if (expr
&& BRACE_ENCLOSED_INITIALIZER_P (expr
))
1782 if (is_std_init_list (to
))
1783 return build_list_conv (to
, expr
, flags
, complain
);
1785 /* As an extension, allow list-initialization of _Complex. */
1786 if (TREE_CODE (to
) == COMPLEX_TYPE
)
1788 conv
= build_complex_conv (to
, expr
, flags
, complain
);
1793 /* Allow conversion from an initializer-list with one element to a
1795 if (SCALAR_TYPE_P (to
))
1797 int nelts
= CONSTRUCTOR_NELTS (expr
);
1801 elt
= build_value_init (to
, tf_none
);
1802 else if (nelts
== 1)
1803 elt
= CONSTRUCTOR_ELT (expr
, 0)->value
;
1805 elt
= error_mark_node
;
1807 conv
= implicit_conversion (to
, TREE_TYPE (elt
), elt
,
1808 c_cast_p
, flags
, complain
);
1811 conv
->check_narrowing
= true;
1812 if (BRACE_ENCLOSED_INITIALIZER_P (elt
))
1813 /* Too many levels of braces, i.e. '{{1}}'. */
1818 else if (TREE_CODE (to
) == ARRAY_TYPE
)
1819 return build_array_conv (to
, expr
, flags
, complain
);
1822 if (expr
!= NULL_TREE
1823 && (MAYBE_CLASS_TYPE_P (from
)
1824 || MAYBE_CLASS_TYPE_P (to
))
1825 && (flags
& LOOKUP_NO_CONVERSION
) == 0)
1827 struct z_candidate
*cand
;
1829 if (CLASS_TYPE_P (to
)
1830 && BRACE_ENCLOSED_INITIALIZER_P (expr
)
1831 && !CLASSTYPE_NON_AGGREGATE (complete_type (to
)))
1832 return build_aggr_conv (to
, expr
, flags
, complain
);
1834 cand
= build_user_type_conversion_1 (to
, expr
, flags
, complain
);
1836 conv
= cand
->second_conv
;
1838 /* We used to try to bind a reference to a temporary here, but that
1839 is now handled after the recursive call to this function at the end
1840 of reference_binding. */
1847 /* Add a new entry to the list of candidates. Used by the add_*_candidate
1848 functions. ARGS will not be changed until a single candidate is
1851 static struct z_candidate
*
1852 add_candidate (struct z_candidate
**candidates
,
1853 tree fn
, tree first_arg
, const vec
<tree
, va_gc
> *args
,
1854 size_t num_convs
, conversion
**convs
,
1855 tree access_path
, tree conversion_path
,
1856 int viable
, struct rejection_reason
*reason
,
1859 struct z_candidate
*cand
= (struct z_candidate
*)
1860 conversion_obstack_alloc (sizeof (struct z_candidate
));
1863 cand
->first_arg
= first_arg
;
1865 cand
->convs
= convs
;
1866 cand
->num_convs
= num_convs
;
1867 cand
->access_path
= access_path
;
1868 cand
->conversion_path
= conversion_path
;
1869 cand
->viable
= viable
;
1870 cand
->reason
= reason
;
1871 cand
->next
= *candidates
;
1872 cand
->flags
= flags
;
1878 /* Return the number of remaining arguments in the parameter list
1879 beginning with ARG. */
1882 remaining_arguments (tree arg
)
1886 for (n
= 0; arg
!= NULL_TREE
&& arg
!= void_list_node
;
1887 arg
= TREE_CHAIN (arg
))
1893 /* Create an overload candidate for the function or method FN called
1894 with the argument list FIRST_ARG/ARGS and add it to CANDIDATES.
1895 FLAGS is passed on to implicit_conversion.
1897 This does not change ARGS.
1899 CTYPE, if non-NULL, is the type we want to pretend this function
1900 comes from for purposes of overload resolution. */
1902 static struct z_candidate
*
1903 add_function_candidate (struct z_candidate
**candidates
,
1904 tree fn
, tree ctype
, tree first_arg
,
1905 const vec
<tree
, va_gc
> *args
, tree access_path
,
1906 tree conversion_path
, int flags
,
1907 tsubst_flags_t complain
)
1909 tree parmlist
= TYPE_ARG_TYPES (TREE_TYPE (fn
));
1913 tree orig_first_arg
= first_arg
;
1916 struct rejection_reason
*reason
= NULL
;
1918 /* At this point we should not see any functions which haven't been
1919 explicitly declared, except for friend functions which will have
1920 been found using argument dependent lookup. */
1921 gcc_assert (!DECL_ANTICIPATED (fn
) || DECL_HIDDEN_FRIEND_P (fn
));
1923 /* The `this', `in_chrg' and VTT arguments to constructors are not
1924 considered in overload resolution. */
1925 if (DECL_CONSTRUCTOR_P (fn
))
1927 parmlist
= skip_artificial_parms_for (fn
, parmlist
);
1928 skip
= num_artificial_parms_for (fn
);
1929 if (skip
> 0 && first_arg
!= NULL_TREE
)
1932 first_arg
= NULL_TREE
;
1938 len
= vec_safe_length (args
) - skip
+ (first_arg
!= NULL_TREE
? 1 : 0);
1939 convs
= alloc_conversions (len
);
1941 /* 13.3.2 - Viable functions [over.match.viable]
1942 First, to be a viable function, a candidate function shall have enough
1943 parameters to agree in number with the arguments in the list.
1945 We need to check this first; otherwise, checking the ICSes might cause
1946 us to produce an ill-formed template instantiation. */
1948 parmnode
= parmlist
;
1949 for (i
= 0; i
< len
; ++i
)
1951 if (parmnode
== NULL_TREE
|| parmnode
== void_list_node
)
1953 parmnode
= TREE_CHAIN (parmnode
);
1956 if ((i
< len
&& parmnode
)
1957 || !sufficient_parms_p (parmnode
))
1959 int remaining
= remaining_arguments (parmnode
);
1961 reason
= arity_rejection (first_arg
, i
+ remaining
, len
);
1963 /* When looking for a function from a subobject from an implicit
1964 copy/move constructor/operator=, don't consider anything that takes (a
1965 reference to) an unrelated type. See c++/44909 and core 1092. */
1966 else if (parmlist
&& (flags
& LOOKUP_DEFAULTED
))
1968 if (DECL_CONSTRUCTOR_P (fn
))
1970 else if (DECL_ASSIGNMENT_OPERATOR_P (fn
)
1971 && DECL_OVERLOADED_OPERATOR_P (fn
) == NOP_EXPR
)
1977 parmnode
= chain_index (i
-1, parmlist
);
1978 if (!reference_related_p (non_reference (TREE_VALUE (parmnode
)),
1983 /* This only applies at the top level. */
1984 flags
&= ~LOOKUP_DEFAULTED
;
1990 /* Second, for F to be a viable function, there shall exist for each
1991 argument an implicit conversion sequence that converts that argument
1992 to the corresponding parameter of F. */
1994 parmnode
= parmlist
;
1996 for (i
= 0; i
< len
; ++i
)
1998 tree argtype
, to_type
;
2003 if (parmnode
== void_list_node
)
2006 if (i
== 0 && first_arg
!= NULL_TREE
)
2009 arg
= CONST_CAST_TREE (
2010 (*args
)[i
+ skip
- (first_arg
!= NULL_TREE
? 1 : 0)]);
2011 argtype
= lvalue_type (arg
);
2013 is_this
= (i
== 0 && DECL_NONSTATIC_MEMBER_FUNCTION_P (fn
)
2014 && ! DECL_CONSTRUCTOR_P (fn
));
2018 tree parmtype
= TREE_VALUE (parmnode
);
2021 parmnode
= TREE_CHAIN (parmnode
);
2023 /* The type of the implicit object parameter ('this') for
2024 overload resolution is not always the same as for the
2025 function itself; conversion functions are considered to
2026 be members of the class being converted, and functions
2027 introduced by a using-declaration are considered to be
2028 members of the class that uses them.
2030 Since build_over_call ignores the ICS for the `this'
2031 parameter, we can just change the parm type. */
2032 if (ctype
&& is_this
)
2034 parmtype
= cp_build_qualified_type
2035 (ctype
, cp_type_quals (TREE_TYPE (parmtype
)));
2036 if (FUNCTION_REF_QUALIFIED (TREE_TYPE (fn
)))
2038 /* If the function has a ref-qualifier, the implicit
2039 object parameter has reference type. */
2040 bool rv
= FUNCTION_RVALUE_QUALIFIED (TREE_TYPE (fn
));
2041 parmtype
= cp_build_reference_type (parmtype
, rv
);
2042 /* The special handling of 'this' conversions in compare_ics
2043 does not apply if there is a ref-qualifier. */
2048 parmtype
= build_pointer_type (parmtype
);
2049 arg
= build_this (arg
);
2050 argtype
= lvalue_type (arg
);
2054 /* Core issue 899: When [copy-]initializing a temporary to be bound
2055 to the first parameter of a copy constructor (12.8) called with
2056 a single argument in the context of direct-initialization,
2057 explicit conversion functions are also considered.
2059 So set LOOKUP_COPY_PARM to let reference_binding know that
2060 it's being called in that context. We generalize the above
2061 to handle move constructors and template constructors as well;
2062 the standardese should soon be updated similarly. */
2063 if (ctype
&& i
== 0 && (len
-skip
== 1)
2064 && DECL_CONSTRUCTOR_P (fn
)
2065 && parmtype
!= error_mark_node
2066 && (same_type_ignoring_top_level_qualifiers_p
2067 (non_reference (parmtype
), ctype
)))
2069 if (!(flags
& LOOKUP_ONLYCONVERTING
))
2070 lflags
|= LOOKUP_COPY_PARM
;
2071 /* We allow user-defined conversions within init-lists, but
2072 don't list-initialize the copy parm, as that would mean
2073 using two levels of braces for the same type. */
2074 if ((flags
& LOOKUP_LIST_INIT_CTOR
)
2075 && BRACE_ENCLOSED_INITIALIZER_P (arg
))
2076 lflags
|= LOOKUP_NO_CONVERSION
;
2079 lflags
|= LOOKUP_ONLYCONVERTING
;
2081 t
= implicit_conversion (parmtype
, argtype
, arg
,
2082 /*c_cast_p=*/false, lflags
, complain
);
2087 t
= build_identity_conv (argtype
, arg
);
2088 t
->ellipsis_p
= true;
2099 reason
= arg_conversion_rejection (first_arg
, i
, argtype
, to_type
);
2106 reason
= bad_arg_conversion_rejection (first_arg
, i
, arg
, to_type
);
2111 return add_candidate (candidates
, fn
, orig_first_arg
, args
, len
, convs
,
2112 access_path
, conversion_path
, viable
, reason
, flags
);
2115 /* Create an overload candidate for the conversion function FN which will
2116 be invoked for expression OBJ, producing a pointer-to-function which
2117 will in turn be called with the argument list FIRST_ARG/ARGLIST,
2118 and add it to CANDIDATES. This does not change ARGLIST. FLAGS is
2119 passed on to implicit_conversion.
2121 Actually, we don't really care about FN; we care about the type it
2122 converts to. There may be multiple conversion functions that will
2123 convert to that type, and we rely on build_user_type_conversion_1 to
2124 choose the best one; so when we create our candidate, we record the type
2125 instead of the function. */
2127 static struct z_candidate
*
2128 add_conv_candidate (struct z_candidate
**candidates
, tree fn
, tree obj
,
2129 tree first_arg
, const vec
<tree
, va_gc
> *arglist
,
2130 tree access_path
, tree conversion_path
,
2131 tsubst_flags_t complain
)
2133 tree totype
= TREE_TYPE (TREE_TYPE (fn
));
2134 int i
, len
, viable
, flags
;
2135 tree parmlist
, parmnode
;
2137 struct rejection_reason
*reason
;
2139 for (parmlist
= totype
; TREE_CODE (parmlist
) != FUNCTION_TYPE
; )
2140 parmlist
= TREE_TYPE (parmlist
);
2141 parmlist
= TYPE_ARG_TYPES (parmlist
);
2143 len
= vec_safe_length (arglist
) + (first_arg
!= NULL_TREE
? 1 : 0) + 1;
2144 convs
= alloc_conversions (len
);
2145 parmnode
= parmlist
;
2147 flags
= LOOKUP_IMPLICIT
;
2150 /* Don't bother looking up the same type twice. */
2151 if (*candidates
&& (*candidates
)->fn
== totype
)
2154 for (i
= 0; i
< len
; ++i
)
2156 tree arg
, argtype
, convert_type
= NULL_TREE
;
2161 else if (i
== 1 && first_arg
!= NULL_TREE
)
2164 arg
= (*arglist
)[i
- (first_arg
!= NULL_TREE
? 1 : 0) - 1];
2165 argtype
= lvalue_type (arg
);
2169 t
= implicit_conversion (totype
, argtype
, arg
, /*c_cast_p=*/false,
2171 convert_type
= totype
;
2173 else if (parmnode
== void_list_node
)
2177 t
= implicit_conversion (TREE_VALUE (parmnode
), argtype
, arg
,
2178 /*c_cast_p=*/false, flags
, complain
);
2179 convert_type
= TREE_VALUE (parmnode
);
2183 t
= build_identity_conv (argtype
, arg
);
2184 t
->ellipsis_p
= true;
2185 convert_type
= argtype
;
2195 reason
= bad_arg_conversion_rejection (NULL_TREE
, i
, arg
, convert_type
);
2202 parmnode
= TREE_CHAIN (parmnode
);
2206 || ! sufficient_parms_p (parmnode
))
2208 int remaining
= remaining_arguments (parmnode
);
2210 reason
= arity_rejection (NULL_TREE
, i
+ remaining
, len
);
2213 return add_candidate (candidates
, totype
, first_arg
, arglist
, len
, convs
,
2214 access_path
, conversion_path
, viable
, reason
, flags
);
2218 build_builtin_candidate (struct z_candidate
**candidates
, tree fnname
,
2219 tree type1
, tree type2
, tree
*args
, tree
*argtypes
,
2220 int flags
, tsubst_flags_t complain
)
2227 struct rejection_reason
*reason
= NULL
;
2232 num_convs
= args
[2] ? 3 : (args
[1] ? 2 : 1);
2233 convs
= alloc_conversions (num_convs
);
2235 /* TRUTH_*_EXPR do "contextual conversion to bool", which means explicit
2236 conversion ops are allowed. We handle that here by just checking for
2237 boolean_type_node because other operators don't ask for it. COND_EXPR
2238 also does contextual conversion to bool for the first operand, but we
2239 handle that in build_conditional_expr, and type1 here is operand 2. */
2240 if (type1
!= boolean_type_node
)
2241 flags
|= LOOKUP_ONLYCONVERTING
;
2243 for (i
= 0; i
< 2; ++i
)
2248 t
= implicit_conversion (types
[i
], argtypes
[i
], args
[i
],
2249 /*c_cast_p=*/false, flags
, complain
);
2253 /* We need something for printing the candidate. */
2254 t
= build_identity_conv (types
[i
], NULL_TREE
);
2255 reason
= arg_conversion_rejection (NULL_TREE
, i
, argtypes
[i
],
2261 reason
= bad_arg_conversion_rejection (NULL_TREE
, i
, args
[i
],
2267 /* For COND_EXPR we rearranged the arguments; undo that now. */
2270 convs
[2] = convs
[1];
2271 convs
[1] = convs
[0];
2272 t
= implicit_conversion (boolean_type_node
, argtypes
[2], args
[2],
2273 /*c_cast_p=*/false, flags
,
2280 reason
= arg_conversion_rejection (NULL_TREE
, 0, argtypes
[2],
2285 add_candidate (candidates
, fnname
, /*first_arg=*/NULL_TREE
, /*args=*/NULL
,
2287 /*access_path=*/NULL_TREE
,
2288 /*conversion_path=*/NULL_TREE
,
2289 viable
, reason
, flags
);
2293 is_complete (tree t
)
2295 return COMPLETE_TYPE_P (complete_type (t
));
2298 /* Returns nonzero if TYPE is a promoted arithmetic type. */
2301 promoted_arithmetic_type_p (tree type
)
2305 In this section, the term promoted integral type is used to refer
2306 to those integral types which are preserved by integral promotion
2307 (including e.g. int and long but excluding e.g. char).
2308 Similarly, the term promoted arithmetic type refers to promoted
2309 integral types plus floating types. */
2310 return ((CP_INTEGRAL_TYPE_P (type
)
2311 && same_type_p (type_promotes_to (type
), type
))
2312 || TREE_CODE (type
) == REAL_TYPE
);
2315 /* Create any builtin operator overload candidates for the operator in
2316 question given the converted operand types TYPE1 and TYPE2. The other
2317 args are passed through from add_builtin_candidates to
2318 build_builtin_candidate.
2320 TYPE1 and TYPE2 may not be permissible, and we must filter them.
2321 If CODE is requires candidates operands of the same type of the kind
2322 of which TYPE1 and TYPE2 are, we add both candidates
2323 CODE (TYPE1, TYPE1) and CODE (TYPE2, TYPE2). */
2326 add_builtin_candidate (struct z_candidate
**candidates
, enum tree_code code
,
2327 enum tree_code code2
, tree fnname
, tree type1
,
2328 tree type2
, tree
*args
, tree
*argtypes
, int flags
,
2329 tsubst_flags_t complain
)
2333 case POSTINCREMENT_EXPR
:
2334 case POSTDECREMENT_EXPR
:
2335 args
[1] = integer_zero_node
;
2336 type2
= integer_type_node
;
2345 /* 4 For every pair T, VQ), where T is an arithmetic or enumeration type,
2346 and VQ is either volatile or empty, there exist candidate operator
2347 functions of the form
2348 VQ T& operator++(VQ T&);
2349 T operator++(VQ T&, int);
2350 5 For every pair T, VQ), where T is an enumeration type or an arithmetic
2351 type other than bool, and VQ is either volatile or empty, there exist
2352 candidate operator functions of the form
2353 VQ T& operator--(VQ T&);
2354 T operator--(VQ T&, int);
2355 6 For every pair T, VQ), where T is a cv-qualified or cv-unqualified
2356 complete object type, and VQ is either volatile or empty, there exist
2357 candidate operator functions of the form
2358 T*VQ& operator++(T*VQ&);
2359 T*VQ& operator--(T*VQ&);
2360 T* operator++(T*VQ&, int);
2361 T* operator--(T*VQ&, int); */
2363 case POSTDECREMENT_EXPR
:
2364 case PREDECREMENT_EXPR
:
2365 if (TREE_CODE (type1
) == BOOLEAN_TYPE
)
2367 case POSTINCREMENT_EXPR
:
2368 case PREINCREMENT_EXPR
:
2369 if (ARITHMETIC_TYPE_P (type1
) || TYPE_PTROB_P (type1
))
2371 type1
= build_reference_type (type1
);
2376 /* 7 For every cv-qualified or cv-unqualified object type T, there
2377 exist candidate operator functions of the form
2381 8 For every function type T, there exist candidate operator functions of
2383 T& operator*(T*); */
2386 if (TYPE_PTR_P (type1
)
2387 && (TYPE_PTROB_P (type1
)
2388 || TREE_CODE (TREE_TYPE (type1
)) == FUNCTION_TYPE
))
2392 /* 9 For every type T, there exist candidate operator functions of the form
2395 10For every promoted arithmetic type T, there exist candidate operator
2396 functions of the form
2400 case UNARY_PLUS_EXPR
: /* unary + */
2401 if (TYPE_PTR_P (type1
))
2404 if (ARITHMETIC_TYPE_P (type1
))
2408 /* 11For every promoted integral type T, there exist candidate operator
2409 functions of the form
2413 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1
))
2417 /* 12For every quintuple C1, C2, T, CV1, CV2), where C2 is a class type, C1
2418 is the same type as C2 or is a derived class of C2, T is a complete
2419 object type or a function type, and CV1 and CV2 are cv-qualifier-seqs,
2420 there exist candidate operator functions of the form
2421 CV12 T& operator->*(CV1 C1*, CV2 T C2::*);
2422 where CV12 is the union of CV1 and CV2. */
2425 if (TYPE_PTR_P (type1
) && TYPE_PTRMEM_P (type2
))
2427 tree c1
= TREE_TYPE (type1
);
2428 tree c2
= TYPE_PTRMEM_CLASS_TYPE (type2
);
2430 if (MAYBE_CLASS_TYPE_P (c1
) && DERIVED_FROM_P (c2
, c1
)
2431 && (TYPE_PTRMEMFUNC_P (type2
)
2432 || is_complete (TYPE_PTRMEM_POINTED_TO_TYPE (type2
))))
2437 /* 13For every pair of promoted arithmetic types L and R, there exist can-
2438 didate operator functions of the form
2443 bool operator<(L, R);
2444 bool operator>(L, R);
2445 bool operator<=(L, R);
2446 bool operator>=(L, R);
2447 bool operator==(L, R);
2448 bool operator!=(L, R);
2449 where LR is the result of the usual arithmetic conversions between
2452 14For every pair of types T and I, where T is a cv-qualified or cv-
2453 unqualified complete object type and I is a promoted integral type,
2454 there exist candidate operator functions of the form
2455 T* operator+(T*, I);
2456 T& operator[](T*, I);
2457 T* operator-(T*, I);
2458 T* operator+(I, T*);
2459 T& operator[](I, T*);
2461 15For every T, where T is a pointer to complete object type, there exist
2462 candidate operator functions of the form112)
2463 ptrdiff_t operator-(T, T);
2465 16For every pointer or enumeration type T, there exist candidate operator
2466 functions of the form
2467 bool operator<(T, T);
2468 bool operator>(T, T);
2469 bool operator<=(T, T);
2470 bool operator>=(T, T);
2471 bool operator==(T, T);
2472 bool operator!=(T, T);
2474 17For every pointer to member type T, there exist candidate operator
2475 functions of the form
2476 bool operator==(T, T);
2477 bool operator!=(T, T); */
2480 if (TYPE_PTROB_P (type1
) && TYPE_PTROB_P (type2
))
2482 if (TYPE_PTROB_P (type1
)
2483 && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2
))
2485 type2
= ptrdiff_type_node
;
2489 case TRUNC_DIV_EXPR
:
2490 if (ARITHMETIC_TYPE_P (type1
) && ARITHMETIC_TYPE_P (type2
))
2496 if ((TYPE_PTRMEMFUNC_P (type1
) && TYPE_PTRMEMFUNC_P (type2
))
2497 || (TYPE_PTRDATAMEM_P (type1
) && TYPE_PTRDATAMEM_P (type2
)))
2499 if (TYPE_PTRMEM_P (type1
) && null_ptr_cst_p (args
[1]))
2504 if (TYPE_PTRMEM_P (type2
) && null_ptr_cst_p (args
[0]))
2516 if (ARITHMETIC_TYPE_P (type1
) && ARITHMETIC_TYPE_P (type2
))
2518 if (TYPE_PTR_P (type1
) && TYPE_PTR_P (type2
))
2520 if (TREE_CODE (type1
) == ENUMERAL_TYPE
2521 && TREE_CODE (type2
) == ENUMERAL_TYPE
)
2523 if (TYPE_PTR_P (type1
)
2524 && null_ptr_cst_p (args
[1]))
2529 if (null_ptr_cst_p (args
[0])
2530 && TYPE_PTR_P (type2
))
2538 if (ARITHMETIC_TYPE_P (type1
) && ARITHMETIC_TYPE_P (type2
))
2541 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1
) && TYPE_PTROB_P (type2
))
2543 type1
= ptrdiff_type_node
;
2546 if (TYPE_PTROB_P (type1
) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2
))
2548 type2
= ptrdiff_type_node
;
2553 /* 18For every pair of promoted integral types L and R, there exist candi-
2554 date operator functions of the form
2561 where LR is the result of the usual arithmetic conversions between
2564 case TRUNC_MOD_EXPR
:
2570 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1
) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2
))
2574 /* 19For every triple L, VQ, R), where L is an arithmetic or enumeration
2575 type, VQ is either volatile or empty, and R is a promoted arithmetic
2576 type, there exist candidate operator functions of the form
2577 VQ L& operator=(VQ L&, R);
2578 VQ L& operator*=(VQ L&, R);
2579 VQ L& operator/=(VQ L&, R);
2580 VQ L& operator+=(VQ L&, R);
2581 VQ L& operator-=(VQ L&, R);
2583 20For every pair T, VQ), where T is any type and VQ is either volatile
2584 or empty, there exist candidate operator functions of the form
2585 T*VQ& operator=(T*VQ&, T*);
2587 21For every pair T, VQ), where T is a pointer to member type and VQ is
2588 either volatile or empty, there exist candidate operator functions of
2590 VQ T& operator=(VQ T&, T);
2592 22For every triple T, VQ, I), where T is a cv-qualified or cv-
2593 unqualified complete object type, VQ is either volatile or empty, and
2594 I is a promoted integral type, there exist candidate operator func-
2596 T*VQ& operator+=(T*VQ&, I);
2597 T*VQ& operator-=(T*VQ&, I);
2599 23For every triple L, VQ, R), where L is an integral or enumeration
2600 type, VQ is either volatile or empty, and R is a promoted integral
2601 type, there exist candidate operator functions of the form
2603 VQ L& operator%=(VQ L&, R);
2604 VQ L& operator<<=(VQ L&, R);
2605 VQ L& operator>>=(VQ L&, R);
2606 VQ L& operator&=(VQ L&, R);
2607 VQ L& operator^=(VQ L&, R);
2608 VQ L& operator|=(VQ L&, R); */
2615 if (TYPE_PTROB_P (type1
) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2
))
2617 type2
= ptrdiff_type_node
;
2621 case TRUNC_DIV_EXPR
:
2622 if (ARITHMETIC_TYPE_P (type1
) && ARITHMETIC_TYPE_P (type2
))
2626 case TRUNC_MOD_EXPR
:
2632 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1
) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2
))
2637 if (ARITHMETIC_TYPE_P (type1
) && ARITHMETIC_TYPE_P (type2
))
2639 if ((TYPE_PTRMEMFUNC_P (type1
) && TYPE_PTRMEMFUNC_P (type2
))
2640 || (TYPE_PTR_P (type1
) && TYPE_PTR_P (type2
))
2641 || (TYPE_PTRDATAMEM_P (type1
) && TYPE_PTRDATAMEM_P (type2
))
2642 || ((TYPE_PTRMEMFUNC_P (type1
)
2643 || TYPE_PTR_P (type1
))
2644 && null_ptr_cst_p (args
[1])))
2654 type1
= build_reference_type (type1
);
2660 For every pair of promoted arithmetic types L and R, there
2661 exist candidate operator functions of the form
2663 LR operator?(bool, L, R);
2665 where LR is the result of the usual arithmetic conversions
2666 between types L and R.
2668 For every type T, where T is a pointer or pointer-to-member
2669 type, there exist candidate operator functions of the form T
2670 operator?(bool, T, T); */
2672 if (promoted_arithmetic_type_p (type1
)
2673 && promoted_arithmetic_type_p (type2
))
2677 /* Otherwise, the types should be pointers. */
2678 if (!TYPE_PTR_OR_PTRMEM_P (type1
) || !TYPE_PTR_OR_PTRMEM_P (type2
))
2681 /* We don't check that the two types are the same; the logic
2682 below will actually create two candidates; one in which both
2683 parameter types are TYPE1, and one in which both parameter
2689 if (ARITHMETIC_TYPE_P (type1
))
2697 /* Make sure we don't create builtin candidates with dependent types. */
2698 bool u1
= uses_template_parms (type1
);
2699 bool u2
= type2
? uses_template_parms (type2
) : false;
2702 /* Try to recover if one of the types is non-dependent. But if
2703 there's only one type, there's nothing we can do. */
2706 /* And we lose if both are dependent. */
2709 /* Or if they have different forms. */
2710 if (TREE_CODE (type1
) != TREE_CODE (type2
))
2719 /* If we're dealing with two pointer types or two enumeral types,
2720 we need candidates for both of them. */
2721 if (type2
&& !same_type_p (type1
, type2
)
2722 && TREE_CODE (type1
) == TREE_CODE (type2
)
2723 && (TREE_CODE (type1
) == REFERENCE_TYPE
2724 || (TYPE_PTR_P (type1
) && TYPE_PTR_P (type2
))
2725 || (TYPE_PTRDATAMEM_P (type1
) && TYPE_PTRDATAMEM_P (type2
))
2726 || TYPE_PTRMEMFUNC_P (type1
)
2727 || MAYBE_CLASS_TYPE_P (type1
)
2728 || TREE_CODE (type1
) == ENUMERAL_TYPE
))
2730 if (TYPE_PTR_OR_PTRMEM_P (type1
))
2732 tree cptype
= composite_pointer_type (type1
, type2
,
2737 if (cptype
!= error_mark_node
)
2739 build_builtin_candidate
2740 (candidates
, fnname
, cptype
, cptype
, args
, argtypes
,
2746 build_builtin_candidate
2747 (candidates
, fnname
, type1
, type1
, args
, argtypes
, flags
, complain
);
2748 build_builtin_candidate
2749 (candidates
, fnname
, type2
, type2
, args
, argtypes
, flags
, complain
);
2753 build_builtin_candidate
2754 (candidates
, fnname
, type1
, type2
, args
, argtypes
, flags
, complain
);
2758 type_decays_to (tree type
)
2760 if (TREE_CODE (type
) == ARRAY_TYPE
)
2761 return build_pointer_type (TREE_TYPE (type
));
2762 if (TREE_CODE (type
) == FUNCTION_TYPE
)
2763 return build_pointer_type (type
);
2767 /* There are three conditions of builtin candidates:
2769 1) bool-taking candidates. These are the same regardless of the input.
2770 2) pointer-pair taking candidates. These are generated for each type
2771 one of the input types converts to.
2772 3) arithmetic candidates. According to the standard, we should generate
2773 all of these, but I'm trying not to...
2775 Here we generate a superset of the possible candidates for this particular
2776 case. That is a subset of the full set the standard defines, plus some
2777 other cases which the standard disallows. add_builtin_candidate will
2778 filter out the invalid set. */
2781 add_builtin_candidates (struct z_candidate
**candidates
, enum tree_code code
,
2782 enum tree_code code2
, tree fnname
, tree
*args
,
2783 int flags
, tsubst_flags_t complain
)
2787 tree type
, argtypes
[3], t
;
2788 /* TYPES[i] is the set of possible builtin-operator parameter types
2789 we will consider for the Ith argument. */
2790 vec
<tree
, va_gc
> *types
[2];
2793 for (i
= 0; i
< 3; ++i
)
2796 argtypes
[i
] = unlowered_expr_type (args
[i
]);
2798 argtypes
[i
] = NULL_TREE
;
2803 /* 4 For every pair T, VQ), where T is an arithmetic or enumeration type,
2804 and VQ is either volatile or empty, there exist candidate operator
2805 functions of the form
2806 VQ T& operator++(VQ T&); */
2808 case POSTINCREMENT_EXPR
:
2809 case PREINCREMENT_EXPR
:
2810 case POSTDECREMENT_EXPR
:
2811 case PREDECREMENT_EXPR
:
2816 /* 24There also exist candidate operator functions of the form
2817 bool operator!(bool);
2818 bool operator&&(bool, bool);
2819 bool operator||(bool, bool); */
2821 case TRUTH_NOT_EXPR
:
2822 build_builtin_candidate
2823 (candidates
, fnname
, boolean_type_node
,
2824 NULL_TREE
, args
, argtypes
, flags
, complain
);
2827 case TRUTH_ORIF_EXPR
:
2828 case TRUTH_ANDIF_EXPR
:
2829 build_builtin_candidate
2830 (candidates
, fnname
, boolean_type_node
,
2831 boolean_type_node
, args
, argtypes
, flags
, complain
);
2853 types
[0] = make_tree_vector ();
2854 types
[1] = make_tree_vector ();
2856 for (i
= 0; i
< 2; ++i
)
2860 else if (MAYBE_CLASS_TYPE_P (argtypes
[i
]))
2864 if (i
== 0 && code
== MODIFY_EXPR
&& code2
== NOP_EXPR
)
2867 convs
= lookup_conversions (argtypes
[i
]);
2869 if (code
== COND_EXPR
)
2871 if (real_lvalue_p (args
[i
]))
2872 vec_safe_push (types
[i
], build_reference_type (argtypes
[i
]));
2874 vec_safe_push (types
[i
], TYPE_MAIN_VARIANT (argtypes
[i
]));
2880 for (; convs
; convs
= TREE_CHAIN (convs
))
2882 type
= TREE_TYPE (convs
);
2885 && (TREE_CODE (type
) != REFERENCE_TYPE
2886 || CP_TYPE_CONST_P (TREE_TYPE (type
))))
2889 if (code
== COND_EXPR
&& TREE_CODE (type
) == REFERENCE_TYPE
)
2890 vec_safe_push (types
[i
], type
);
2892 type
= non_reference (type
);
2893 if (i
!= 0 || ! ref1
)
2895 type
= cv_unqualified (type_decays_to (type
));
2896 if (enum_p
&& TREE_CODE (type
) == ENUMERAL_TYPE
)
2897 vec_safe_push (types
[i
], type
);
2898 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type
))
2899 type
= type_promotes_to (type
);
2902 if (! vec_member (type
, types
[i
]))
2903 vec_safe_push (types
[i
], type
);
2908 if (code
== COND_EXPR
&& real_lvalue_p (args
[i
]))
2909 vec_safe_push (types
[i
], build_reference_type (argtypes
[i
]));
2910 type
= non_reference (argtypes
[i
]);
2911 if (i
!= 0 || ! ref1
)
2913 type
= cv_unqualified (type_decays_to (type
));
2914 if (enum_p
&& UNSCOPED_ENUM_P (type
))
2915 vec_safe_push (types
[i
], type
);
2916 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type
))
2917 type
= type_promotes_to (type
);
2919 vec_safe_push (types
[i
], type
);
2923 /* Run through the possible parameter types of both arguments,
2924 creating candidates with those parameter types. */
2925 FOR_EACH_VEC_ELT_REVERSE (*(types
[0]), ix
, t
)
2930 if (!types
[1]->is_empty ())
2931 FOR_EACH_VEC_ELT_REVERSE (*(types
[1]), jx
, u
)
2932 add_builtin_candidate
2933 (candidates
, code
, code2
, fnname
, t
,
2934 u
, args
, argtypes
, flags
, complain
);
2936 add_builtin_candidate
2937 (candidates
, code
, code2
, fnname
, t
,
2938 NULL_TREE
, args
, argtypes
, flags
, complain
);
2941 release_tree_vector (types
[0]);
2942 release_tree_vector (types
[1]);
2946 /* If TMPL can be successfully instantiated as indicated by
2947 EXPLICIT_TARGS and ARGLIST, adds the instantiation to CANDIDATES.
2949 TMPL is the template. EXPLICIT_TARGS are any explicit template
2950 arguments. ARGLIST is the arguments provided at the call-site.
2951 This does not change ARGLIST. The RETURN_TYPE is the desired type
2952 for conversion operators. If OBJ is NULL_TREE, FLAGS and CTYPE are
2953 as for add_function_candidate. If an OBJ is supplied, FLAGS and
2954 CTYPE are ignored, and OBJ is as for add_conv_candidate. */
2956 static struct z_candidate
*
2957 add_template_candidate_real (struct z_candidate
**candidates
, tree tmpl
,
2958 tree ctype
, tree explicit_targs
, tree first_arg
,
2959 const vec
<tree
, va_gc
> *arglist
, tree return_type
,
2960 tree access_path
, tree conversion_path
,
2961 int flags
, tree obj
, unification_kind_t strict
,
2962 tsubst_flags_t complain
)
2964 int ntparms
= DECL_NTPARMS (tmpl
);
2965 tree targs
= make_tree_vec (ntparms
);
2966 unsigned int len
= vec_safe_length (arglist
);
2967 unsigned int nargs
= (first_arg
== NULL_TREE
? 0 : 1) + len
;
2968 unsigned int skip_without_in_chrg
= 0;
2969 tree first_arg_without_in_chrg
= first_arg
;
2970 tree
*args_without_in_chrg
;
2971 unsigned int nargs_without_in_chrg
;
2972 unsigned int ia
, ix
;
2974 struct z_candidate
*cand
;
2976 struct rejection_reason
*reason
= NULL
;
2979 /* We don't do deduction on the in-charge parameter, the VTT
2980 parameter or 'this'. */
2981 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (tmpl
))
2983 if (first_arg_without_in_chrg
!= NULL_TREE
)
2984 first_arg_without_in_chrg
= NULL_TREE
;
2986 ++skip_without_in_chrg
;
2989 if ((DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (tmpl
)
2990 || DECL_BASE_CONSTRUCTOR_P (tmpl
))
2991 && CLASSTYPE_VBASECLASSES (DECL_CONTEXT (tmpl
)))
2993 if (first_arg_without_in_chrg
!= NULL_TREE
)
2994 first_arg_without_in_chrg
= NULL_TREE
;
2996 ++skip_without_in_chrg
;
2999 if (len
< skip_without_in_chrg
)
3002 nargs_without_in_chrg
= ((first_arg_without_in_chrg
!= NULL_TREE
? 1 : 0)
3003 + (len
- skip_without_in_chrg
));
3004 args_without_in_chrg
= XALLOCAVEC (tree
, nargs_without_in_chrg
);
3006 if (first_arg_without_in_chrg
!= NULL_TREE
)
3008 args_without_in_chrg
[ia
] = first_arg_without_in_chrg
;
3011 for (ix
= skip_without_in_chrg
;
3012 vec_safe_iterate (arglist
, ix
, &arg
);
3015 args_without_in_chrg
[ia
] = arg
;
3018 gcc_assert (ia
== nargs_without_in_chrg
);
3020 errs
= errorcount
+sorrycount
;
3021 fn
= fn_type_unification (tmpl
, explicit_targs
, targs
,
3022 args_without_in_chrg
,
3023 nargs_without_in_chrg
,
3024 return_type
, strict
, flags
, false,
3025 complain
& tf_decltype
);
3027 if (fn
== error_mark_node
)
3029 /* Don't repeat unification later if it already resulted in errors. */
3030 if (errorcount
+sorrycount
== errs
)
3031 reason
= template_unification_rejection (tmpl
, explicit_targs
,
3032 targs
, args_without_in_chrg
,
3033 nargs_without_in_chrg
,
3034 return_type
, strict
, flags
);
3036 reason
= template_unification_error_rejection ();
3042 A member function template is never instantiated to perform the
3043 copy of a class object to an object of its class type.
3045 It's a little unclear what this means; the standard explicitly
3046 does allow a template to be used to copy a class. For example,
3051 template <class T> A(const T&);
3054 void g () { A a (f ()); }
3056 the member template will be used to make the copy. The section
3057 quoted above appears in the paragraph that forbids constructors
3058 whose only parameter is (a possibly cv-qualified variant of) the
3059 class type, and a logical interpretation is that the intent was
3060 to forbid the instantiation of member templates which would then
3062 if (DECL_CONSTRUCTOR_P (fn
) && nargs
== 2)
3064 tree arg_types
= FUNCTION_FIRST_USER_PARMTYPE (fn
);
3065 if (arg_types
&& same_type_p (TYPE_MAIN_VARIANT (TREE_VALUE (arg_types
)),
3068 reason
= invalid_copy_with_fn_template_rejection ();
3073 if (obj
!= NULL_TREE
)
3074 /* Aha, this is a conversion function. */
3075 cand
= add_conv_candidate (candidates
, fn
, obj
, first_arg
, arglist
,
3076 access_path
, conversion_path
, complain
);
3078 cand
= add_function_candidate (candidates
, fn
, ctype
,
3079 first_arg
, arglist
, access_path
,
3080 conversion_path
, flags
, complain
);
3081 if (DECL_TI_TEMPLATE (fn
) != tmpl
)
3082 /* This situation can occur if a member template of a template
3083 class is specialized. Then, instantiate_template might return
3084 an instantiation of the specialization, in which case the
3085 DECL_TI_TEMPLATE field will point at the original
3086 specialization. For example:
3088 template <class T> struct S { template <class U> void f(U);
3089 template <> void f(int) {}; };
3093 Here, TMPL will be template <class U> S<double>::f(U).
3094 And, instantiate template will give us the specialization
3095 template <> S<double>::f(int). But, the DECL_TI_TEMPLATE field
3096 for this will point at template <class T> template <> S<T>::f(int),
3097 so that we can find the definition. For the purposes of
3098 overload resolution, however, we want the original TMPL. */
3099 cand
->template_decl
= build_template_info (tmpl
, targs
);
3101 cand
->template_decl
= DECL_TEMPLATE_INFO (fn
);
3102 cand
->explicit_targs
= explicit_targs
;
3106 return add_candidate (candidates
, tmpl
, first_arg
, arglist
, nargs
, NULL
,
3107 access_path
, conversion_path
, 0, reason
, flags
);
3111 static struct z_candidate
*
3112 add_template_candidate (struct z_candidate
**candidates
, tree tmpl
, tree ctype
,
3113 tree explicit_targs
, tree first_arg
,
3114 const vec
<tree
, va_gc
> *arglist
, tree return_type
,
3115 tree access_path
, tree conversion_path
, int flags
,
3116 unification_kind_t strict
, tsubst_flags_t complain
)
3119 add_template_candidate_real (candidates
, tmpl
, ctype
,
3120 explicit_targs
, first_arg
, arglist
,
3121 return_type
, access_path
, conversion_path
,
3122 flags
, NULL_TREE
, strict
, complain
);
3126 static struct z_candidate
*
3127 add_template_conv_candidate (struct z_candidate
**candidates
, tree tmpl
,
3128 tree obj
, tree first_arg
,
3129 const vec
<tree
, va_gc
> *arglist
,
3130 tree return_type
, tree access_path
,
3131 tree conversion_path
, tsubst_flags_t complain
)
3134 add_template_candidate_real (candidates
, tmpl
, NULL_TREE
, NULL_TREE
,
3135 first_arg
, arglist
, return_type
, access_path
,
3136 conversion_path
, 0, obj
, DEDUCE_CONV
,
3140 /* The CANDS are the set of candidates that were considered for
3141 overload resolution. Return the set of viable candidates, or CANDS
3142 if none are viable. If any of the candidates were viable, set
3143 *ANY_VIABLE_P to true. STRICT_P is true if a candidate should be
3144 considered viable only if it is strictly viable. */
3146 static struct z_candidate
*
3147 splice_viable (struct z_candidate
*cands
,
3151 struct z_candidate
*viable
;
3152 struct z_candidate
**last_viable
;
3153 struct z_candidate
**cand
;
3154 bool found_strictly_viable
= false;
3156 /* Be strict inside templates, since build_over_call won't actually
3157 do the conversions to get pedwarns. */
3158 if (processing_template_decl
)
3162 last_viable
= &viable
;
3163 *any_viable_p
= false;
3168 struct z_candidate
*c
= *cand
;
3170 && (c
->viable
== 1 || TREE_CODE (c
->fn
) == TEMPLATE_DECL
))
3172 /* Be strict in the presence of a viable candidate. Also if
3173 there are template candidates, so that we get deduction errors
3174 for them instead of silently preferring a bad conversion. */
3176 if (viable
&& !found_strictly_viable
)
3178 /* Put any spliced near matches back onto the main list so
3179 that we see them if there is no strict match. */
3180 *any_viable_p
= false;
3181 *last_viable
= cands
;
3184 last_viable
= &viable
;
3188 if (strict_p
? c
->viable
== 1 : c
->viable
)
3193 last_viable
= &c
->next
;
3194 *any_viable_p
= true;
3196 found_strictly_viable
= true;
3202 return viable
? viable
: cands
;
3206 any_strictly_viable (struct z_candidate
*cands
)
3208 for (; cands
; cands
= cands
->next
)
3209 if (cands
->viable
== 1)
3214 /* OBJ is being used in an expression like "OBJ.f (...)". In other
3215 words, it is about to become the "this" pointer for a member
3216 function call. Take the address of the object. */
3219 build_this (tree obj
)
3221 /* In a template, we are only concerned about the type of the
3222 expression, so we can take a shortcut. */
3223 if (processing_template_decl
)
3224 return build_address (obj
);
3226 return cp_build_addr_expr (obj
, tf_warning_or_error
);
3229 /* Returns true iff functions are equivalent. Equivalent functions are
3230 not '==' only if one is a function-local extern function or if
3231 both are extern "C". */
3234 equal_functions (tree fn1
, tree fn2
)
3236 if (TREE_CODE (fn1
) != TREE_CODE (fn2
))
3238 if (TREE_CODE (fn1
) == TEMPLATE_DECL
)
3240 if (DECL_LOCAL_FUNCTION_P (fn1
) || DECL_LOCAL_FUNCTION_P (fn2
)
3241 || DECL_EXTERN_C_FUNCTION_P (fn1
))
3242 return decls_match (fn1
, fn2
);
3246 /* Print information about a candidate being rejected due to INFO. */
3249 print_conversion_rejection (location_t loc
, struct conversion_info
*info
)
3251 tree from
= info
->from
;
3253 from
= lvalue_type (from
);
3254 if (info
->n_arg
== -1)
3256 /* Conversion of implicit `this' argument failed. */
3257 if (!TYPE_P (info
->from
))
3258 /* A bad conversion for 'this' must be discarding cv-quals. */
3259 inform (loc
, " passing %qT as %<this%> "
3260 "argument discards qualifiers",
3263 inform (loc
, " no known conversion for implicit "
3264 "%<this%> parameter from %qT to %qT",
3265 from
, info
->to_type
);
3267 else if (!TYPE_P (info
->from
))
3269 if (info
->n_arg
>= 0)
3270 inform (loc
, " conversion of argument %d would be ill-formed:",
3272 perform_implicit_conversion (info
->to_type
, info
->from
,
3273 tf_warning_or_error
);
3275 else if (info
->n_arg
== -2)
3276 /* Conversion of conversion function return value failed. */
3277 inform (loc
, " no known conversion from %qT to %qT",
3278 from
, info
->to_type
);
3280 inform (loc
, " no known conversion for argument %d from %qT to %qT",
3281 info
->n_arg
+ 1, from
, info
->to_type
);
3284 /* Print information about a candidate with WANT parameters and we found
3288 print_arity_information (location_t loc
, unsigned int have
, unsigned int want
)
3290 inform_n (loc
, want
,
3291 " candidate expects %d argument, %d provided",
3292 " candidate expects %d arguments, %d provided",
3296 /* Print information about one overload candidate CANDIDATE. MSGSTR
3297 is the text to print before the candidate itself.
3299 NOTE: Unlike most diagnostic functions in GCC, MSGSTR is expected
3300 to have been run through gettext by the caller. This wart makes
3301 life simpler in print_z_candidates and for the translators. */
3304 print_z_candidate (location_t loc
, const char *msgstr
,
3305 struct z_candidate
*candidate
)
3307 const char *msg
= (msgstr
== NULL
3309 : ACONCAT ((msgstr
, " ", NULL
)));
3310 location_t cloc
= location_of (candidate
->fn
);
3312 if (identifier_p (candidate
->fn
))
3315 if (candidate
->num_convs
== 3)
3316 inform (cloc
, "%s%D(%T, %T, %T) <built-in>", msg
, candidate
->fn
,
3317 candidate
->convs
[0]->type
,
3318 candidate
->convs
[1]->type
,
3319 candidate
->convs
[2]->type
);
3320 else if (candidate
->num_convs
== 2)
3321 inform (cloc
, "%s%D(%T, %T) <built-in>", msg
, candidate
->fn
,
3322 candidate
->convs
[0]->type
,
3323 candidate
->convs
[1]->type
);
3325 inform (cloc
, "%s%D(%T) <built-in>", msg
, candidate
->fn
,
3326 candidate
->convs
[0]->type
);
3328 else if (TYPE_P (candidate
->fn
))
3329 inform (cloc
, "%s%T <conversion>", msg
, candidate
->fn
);
3330 else if (candidate
->viable
== -1)
3331 inform (cloc
, "%s%#D <near match>", msg
, candidate
->fn
);
3332 else if (DECL_DELETED_FN (candidate
->fn
))
3333 inform (cloc
, "%s%#D <deleted>", msg
, candidate
->fn
);
3335 inform (cloc
, "%s%#D", msg
, candidate
->fn
);
3336 /* Give the user some information about why this candidate failed. */
3337 if (candidate
->reason
!= NULL
)
3339 struct rejection_reason
*r
= candidate
->reason
;
3344 print_arity_information (cloc
, r
->u
.arity
.actual
,
3345 r
->u
.arity
.expected
);
3347 case rr_arg_conversion
:
3348 print_conversion_rejection (cloc
, &r
->u
.conversion
);
3350 case rr_bad_arg_conversion
:
3351 print_conversion_rejection (cloc
, &r
->u
.bad_conversion
);
3353 case rr_explicit_conversion
:
3354 inform (cloc
, " return type %qT of explicit conversion function "
3355 "cannot be converted to %qT with a qualification "
3356 "conversion", r
->u
.conversion
.from
,
3357 r
->u
.conversion
.to_type
);
3359 case rr_template_conversion
:
3360 inform (cloc
, " conversion from return type %qT of template "
3361 "conversion function specialization to %qT is not an "
3362 "exact match", r
->u
.conversion
.from
,
3363 r
->u
.conversion
.to_type
);
3365 case rr_template_unification
:
3366 /* We use template_unification_error_rejection if unification caused
3367 actual non-SFINAE errors, in which case we don't need to repeat
3369 if (r
->u
.template_unification
.tmpl
== NULL_TREE
)
3371 inform (cloc
, " substitution of deduced template arguments "
3372 "resulted in errors seen above");
3375 /* Re-run template unification with diagnostics. */
3376 inform (cloc
, " template argument deduction/substitution failed:");
3377 fn_type_unification (r
->u
.template_unification
.tmpl
,
3378 r
->u
.template_unification
.explicit_targs
,
3380 (r
->u
.template_unification
.num_targs
)),
3381 r
->u
.template_unification
.args
,
3382 r
->u
.template_unification
.nargs
,
3383 r
->u
.template_unification
.return_type
,
3384 r
->u
.template_unification
.strict
,
3385 r
->u
.template_unification
.flags
,
3388 case rr_invalid_copy
:
3390 " a constructor taking a single argument of its own "
3391 "class type is invalid");
3395 /* This candidate didn't have any issues or we failed to
3396 handle a particular code. Either way... */
3403 print_z_candidates (location_t loc
, struct z_candidate
*candidates
)
3405 struct z_candidate
*cand1
;
3406 struct z_candidate
**cand2
;
3412 /* Remove non-viable deleted candidates. */
3414 for (cand2
= &cand1
; *cand2
; )
3416 if (TREE_CODE ((*cand2
)->fn
) == FUNCTION_DECL
3417 && !(*cand2
)->viable
3418 && DECL_DELETED_FN ((*cand2
)->fn
))
3419 *cand2
= (*cand2
)->next
;
3421 cand2
= &(*cand2
)->next
;
3423 /* ...if there are any non-deleted ones. */
3427 /* There may be duplicates in the set of candidates. We put off
3428 checking this condition as long as possible, since we have no way
3429 to eliminate duplicates from a set of functions in less than n^2
3430 time. Now we are about to emit an error message, so it is more
3431 permissible to go slowly. */
3432 for (cand1
= candidates
; cand1
; cand1
= cand1
->next
)
3434 tree fn
= cand1
->fn
;
3435 /* Skip builtin candidates and conversion functions. */
3438 cand2
= &cand1
->next
;
3441 if (DECL_P ((*cand2
)->fn
)
3442 && equal_functions (fn
, (*cand2
)->fn
))
3443 *cand2
= (*cand2
)->next
;
3445 cand2
= &(*cand2
)->next
;
3449 for (n_candidates
= 0, cand1
= candidates
; cand1
; cand1
= cand1
->next
)
3452 for (; candidates
; candidates
= candidates
->next
)
3453 print_z_candidate (loc
, "candidate:", candidates
);
3456 /* USER_SEQ is a user-defined conversion sequence, beginning with a
3457 USER_CONV. STD_SEQ is the standard conversion sequence applied to
3458 the result of the conversion function to convert it to the final
3459 desired type. Merge the two sequences into a single sequence,
3460 and return the merged sequence. */
3463 merge_conversion_sequences (conversion
*user_seq
, conversion
*std_seq
)
3466 bool bad
= user_seq
->bad_p
;
3468 gcc_assert (user_seq
->kind
== ck_user
);
3470 /* Find the end of the second conversion sequence. */
3471 for (t
= &std_seq
; (*t
)->kind
!= ck_identity
; t
= &((*t
)->u
.next
))
3473 /* The entire sequence is a user-conversion sequence. */
3474 (*t
)->user_conv_p
= true;
3479 /* Replace the identity conversion with the user conversion
3486 /* Handle overload resolution for initializing an object of class type from
3487 an initializer list. First we look for a suitable constructor that
3488 takes a std::initializer_list; if we don't find one, we then look for a
3489 non-list constructor.
3491 Parameters are as for add_candidates, except that the arguments are in
3492 the form of a CONSTRUCTOR (the initializer list) rather than a vector, and
3493 the RETURN_TYPE parameter is replaced by TOTYPE, the desired type. */
3496 add_list_candidates (tree fns
, tree first_arg
,
3497 tree init_list
, tree totype
,
3498 tree explicit_targs
, bool template_only
,
3499 tree conversion_path
, tree access_path
,
3501 struct z_candidate
**candidates
,
3502 tsubst_flags_t complain
)
3504 vec
<tree
, va_gc
> *args
;
3506 gcc_assert (*candidates
== NULL
);
3508 /* We're looking for a ctor for list-initialization. */
3509 flags
|= LOOKUP_LIST_INIT_CTOR
;
3510 /* And we don't allow narrowing conversions. We also use this flag to
3511 avoid the copy constructor call for copy-list-initialization. */
3512 flags
|= LOOKUP_NO_NARROWING
;
3514 /* Always use the default constructor if the list is empty (DR 990). */
3515 if (CONSTRUCTOR_NELTS (init_list
) == 0
3516 && TYPE_HAS_DEFAULT_CONSTRUCTOR (totype
))
3518 /* If the class has a list ctor, try passing the list as a single
3519 argument first, but only consider list ctors. */
3520 else if (TYPE_HAS_LIST_CTOR (totype
))
3522 flags
|= LOOKUP_LIST_ONLY
;
3523 args
= make_tree_vector_single (init_list
);
3524 add_candidates (fns
, first_arg
, args
, NULL_TREE
,
3525 explicit_targs
, template_only
, conversion_path
,
3526 access_path
, flags
, candidates
, complain
);
3527 if (any_strictly_viable (*candidates
))
3531 args
= ctor_to_vec (init_list
);
3533 /* We aren't looking for list-ctors anymore. */
3534 flags
&= ~LOOKUP_LIST_ONLY
;
3535 /* We allow more user-defined conversions within an init-list. */
3536 flags
&= ~LOOKUP_NO_CONVERSION
;
3538 add_candidates (fns
, first_arg
, args
, NULL_TREE
,
3539 explicit_targs
, template_only
, conversion_path
,
3540 access_path
, flags
, candidates
, complain
);
3543 /* Returns the best overload candidate to perform the requested
3544 conversion. This function is used for three the overloading situations
3545 described in [over.match.copy], [over.match.conv], and [over.match.ref].
3546 If TOTYPE is a REFERENCE_TYPE, we're trying to find a direct binding as
3547 per [dcl.init.ref], so we ignore temporary bindings. */
3549 static struct z_candidate
*
3550 build_user_type_conversion_1 (tree totype
, tree expr
, int flags
,
3551 tsubst_flags_t complain
)
3553 struct z_candidate
*candidates
, *cand
;
3555 tree ctors
= NULL_TREE
;
3556 tree conv_fns
= NULL_TREE
;
3557 conversion
*conv
= NULL
;
3558 tree first_arg
= NULL_TREE
;
3559 vec
<tree
, va_gc
> *args
= NULL
;
3566 fromtype
= TREE_TYPE (expr
);
3568 /* We represent conversion within a hierarchy using RVALUE_CONV and
3569 BASE_CONV, as specified by [over.best.ics]; these become plain
3570 constructor calls, as specified in [dcl.init]. */
3571 gcc_assert (!MAYBE_CLASS_TYPE_P (fromtype
) || !MAYBE_CLASS_TYPE_P (totype
)
3572 || !DERIVED_FROM_P (totype
, fromtype
));
3574 if (MAYBE_CLASS_TYPE_P (totype
))
3575 /* Use lookup_fnfields_slot instead of lookup_fnfields to avoid
3576 creating a garbage BASELINK; constructors can't be inherited. */
3577 ctors
= lookup_fnfields_slot (totype
, complete_ctor_identifier
);
3579 if (MAYBE_CLASS_TYPE_P (fromtype
))
3581 tree to_nonref
= non_reference (totype
);
3582 if (same_type_ignoring_top_level_qualifiers_p (to_nonref
, fromtype
) ||
3583 (CLASS_TYPE_P (to_nonref
) && CLASS_TYPE_P (fromtype
)
3584 && DERIVED_FROM_P (to_nonref
, fromtype
)))
3586 /* [class.conv.fct] A conversion function is never used to
3587 convert a (possibly cv-qualified) object to the (possibly
3588 cv-qualified) same object type (or a reference to it), to a
3589 (possibly cv-qualified) base class of that type (or a
3590 reference to it)... */
3593 conv_fns
= lookup_conversions (fromtype
);
3597 flags
|= LOOKUP_NO_CONVERSION
;
3598 if (BRACE_ENCLOSED_INITIALIZER_P (expr
))
3599 flags
|= LOOKUP_NO_NARROWING
;
3601 /* It's OK to bind a temporary for converting constructor arguments, but
3602 not in converting the return value of a conversion operator. */
3603 convflags
= ((flags
& LOOKUP_NO_TEMP_BIND
) | LOOKUP_NO_CONVERSION
3604 | (flags
& LOOKUP_NO_NARROWING
));
3605 flags
&= ~LOOKUP_NO_TEMP_BIND
;
3609 int ctorflags
= flags
;
3611 first_arg
= build_dummy_object (totype
);
3613 /* We should never try to call the abstract or base constructor
3615 gcc_assert (!DECL_HAS_IN_CHARGE_PARM_P (OVL_CURRENT (ctors
))
3616 && !DECL_HAS_VTT_PARM_P (OVL_CURRENT (ctors
)));
3618 if (BRACE_ENCLOSED_INITIALIZER_P (expr
))
3620 /* List-initialization. */
3621 add_list_candidates (ctors
, first_arg
, expr
, totype
, NULL_TREE
,
3622 false, TYPE_BINFO (totype
), TYPE_BINFO (totype
),
3623 ctorflags
, &candidates
, complain
);
3627 args
= make_tree_vector_single (expr
);
3628 add_candidates (ctors
, first_arg
, args
, NULL_TREE
, NULL_TREE
, false,
3629 TYPE_BINFO (totype
), TYPE_BINFO (totype
),
3630 ctorflags
, &candidates
, complain
);
3633 for (cand
= candidates
; cand
; cand
= cand
->next
)
3635 cand
->second_conv
= build_identity_conv (totype
, NULL_TREE
);
3637 /* If totype isn't a reference, and LOOKUP_NO_TEMP_BIND isn't
3638 set, then this is copy-initialization. In that case, "The
3639 result of the call is then used to direct-initialize the
3640 object that is the destination of the copy-initialization."
3643 We represent this in the conversion sequence with an
3644 rvalue conversion, which means a constructor call. */
3645 if (TREE_CODE (totype
) != REFERENCE_TYPE
3646 && !(convflags
& LOOKUP_NO_TEMP_BIND
))
3648 = build_conv (ck_rvalue
, totype
, cand
->second_conv
);
3655 for (; conv_fns
; conv_fns
= TREE_CHAIN (conv_fns
))
3657 tree conversion_path
= TREE_PURPOSE (conv_fns
);
3658 struct z_candidate
*old_candidates
;
3660 /* If we are called to convert to a reference type, we are trying to
3661 find a direct binding, so don't even consider temporaries. If
3662 we don't find a direct binding, the caller will try again to
3663 look for a temporary binding. */
3664 if (TREE_CODE (totype
) == REFERENCE_TYPE
)
3665 convflags
|= LOOKUP_NO_TEMP_BIND
;
3667 old_candidates
= candidates
;
3668 add_candidates (TREE_VALUE (conv_fns
), first_arg
, NULL
, totype
,
3670 conversion_path
, TYPE_BINFO (fromtype
),
3671 flags
, &candidates
, complain
);
3673 for (cand
= candidates
; cand
!= old_candidates
; cand
= cand
->next
)
3675 tree rettype
= TREE_TYPE (TREE_TYPE (cand
->fn
));
3677 = implicit_conversion (totype
,
3680 /*c_cast_p=*/false, convflags
,
3683 /* If LOOKUP_NO_TEMP_BIND isn't set, then this is
3684 copy-initialization. In that case, "The result of the
3685 call is then used to direct-initialize the object that is
3686 the destination of the copy-initialization." [dcl.init]
3688 We represent this in the conversion sequence with an
3689 rvalue conversion, which means a constructor call. But
3690 don't add a second rvalue conversion if there's already
3691 one there. Which there really shouldn't be, but it's
3692 harmless since we'd add it here anyway. */
3693 if (ics
&& MAYBE_CLASS_TYPE_P (totype
) && ics
->kind
!= ck_rvalue
3694 && !(convflags
& LOOKUP_NO_TEMP_BIND
))
3695 ics
= build_conv (ck_rvalue
, totype
, ics
);
3697 cand
->second_conv
= ics
;
3702 cand
->reason
= arg_conversion_rejection (NULL_TREE
, -2,
3705 else if (DECL_NONCONVERTING_P (cand
->fn
)
3706 && ics
->rank
> cr_exact
)
3708 /* 13.3.1.5: For direct-initialization, those explicit
3709 conversion functions that are not hidden within S and
3710 yield type T or a type that can be converted to type T
3711 with a qualification conversion (4.4) are also candidate
3713 /* 13.3.1.6 doesn't have a parallel restriction, but it should;
3714 I've raised this issue with the committee. --jason 9/2011 */
3716 cand
->reason
= explicit_conversion_rejection (rettype
, totype
);
3718 else if (cand
->viable
== 1 && ics
->bad_p
)
3722 = bad_arg_conversion_rejection (NULL_TREE
, -2,
3725 else if (primary_template_instantiation_p (cand
->fn
)
3726 && ics
->rank
> cr_exact
)
3728 /* 13.3.3.1.2: If the user-defined conversion is specified by
3729 a specialization of a conversion function template, the
3730 second standard conversion sequence shall have exact match
3733 cand
->reason
= template_conversion_rejection (rettype
, totype
);
3738 candidates
= splice_viable (candidates
, false, &any_viable_p
);
3742 release_tree_vector (args
);
3746 cand
= tourney (candidates
, complain
);
3749 if (complain
& tf_error
)
3751 error ("conversion from %qT to %qT is ambiguous",
3753 print_z_candidates (location_of (expr
), candidates
);
3756 cand
= candidates
; /* any one will do */
3757 cand
->second_conv
= build_ambiguous_conv (totype
, expr
);
3758 cand
->second_conv
->user_conv_p
= true;
3759 if (!any_strictly_viable (candidates
))
3760 cand
->second_conv
->bad_p
= true;
3761 /* If there are viable candidates, don't set ICS_BAD_FLAG; an
3762 ambiguous conversion is no worse than another user-defined
3769 if (!DECL_CONSTRUCTOR_P (cand
->fn
))
3770 convtype
= non_reference (TREE_TYPE (TREE_TYPE (cand
->fn
)));
3771 else if (cand
->second_conv
->kind
== ck_rvalue
)
3772 /* DR 5: [in the first step of copy-initialization]...if the function
3773 is a constructor, the call initializes a temporary of the
3774 cv-unqualified version of the destination type. */
3775 convtype
= cv_unqualified (totype
);
3778 /* Build the user conversion sequence. */
3782 build_identity_conv (TREE_TYPE (expr
), expr
));
3784 if (cand
->viable
== -1)
3787 /* Remember that this was a list-initialization. */
3788 if (flags
& LOOKUP_NO_NARROWING
)
3789 conv
->check_narrowing
= true;
3791 /* Combine it with the second conversion sequence. */
3792 cand
->second_conv
= merge_conversion_sequences (conv
,
3798 /* Wrapper for above. */
3801 build_user_type_conversion (tree totype
, tree expr
, int flags
,
3802 tsubst_flags_t complain
)
3804 struct z_candidate
*cand
;
3807 bool subtime
= timevar_cond_start (TV_OVERLOAD
);
3808 cand
= build_user_type_conversion_1 (totype
, expr
, flags
, complain
);
3812 if (cand
->second_conv
->kind
== ck_ambig
)
3813 ret
= error_mark_node
;
3816 expr
= convert_like (cand
->second_conv
, expr
, complain
);
3817 ret
= convert_from_reference (expr
);
3823 timevar_cond_stop (TV_OVERLOAD
, subtime
);
3827 /* Subroutine of convert_nontype_argument.
3829 EXPR is an argument for a template non-type parameter of integral or
3830 enumeration type. Do any necessary conversions (that are permitted for
3831 non-type arguments) to convert it to the parameter type.
3833 If conversion is successful, returns the converted expression;
3834 otherwise, returns error_mark_node. */
3837 build_integral_nontype_arg_conv (tree type
, tree expr
, tsubst_flags_t complain
)
3842 location_t loc
= EXPR_LOC_OR_LOC (expr
, input_location
);
3844 if (error_operand_p (expr
))
3845 return error_mark_node
;
3847 gcc_assert (INTEGRAL_OR_ENUMERATION_TYPE_P (type
));
3849 /* Get the high-water mark for the CONVERSION_OBSTACK. */
3850 p
= conversion_obstack_alloc (0);
3852 conv
= implicit_conversion (type
, TREE_TYPE (expr
), expr
,
3854 LOOKUP_IMPLICIT
, complain
);
3856 /* for a non-type template-parameter of integral or
3857 enumeration type, integral promotions (4.5) and integral
3858 conversions (4.7) are applied. */
3859 /* It should be sufficient to check the outermost conversion step, since
3860 there are no qualification conversions to integer type. */
3864 /* A conversion function is OK. If it isn't constexpr, we'll
3865 complain later that the argument isn't constant. */
3867 /* The lvalue-to-rvalue conversion is OK. */
3873 t
= next_conversion (conv
)->type
;
3874 if (INTEGRAL_OR_ENUMERATION_TYPE_P (t
))
3877 if (complain
& tf_error
)
3878 error_at (loc
, "conversion from %qT to %qT not considered for "
3879 "non-type template argument", t
, type
);
3880 /* and fall through. */
3888 expr
= convert_like (conv
, expr
, complain
);
3890 expr
= error_mark_node
;
3892 /* Free all the conversions we allocated. */
3893 obstack_free (&conversion_obstack
, p
);
3898 /* Do any initial processing on the arguments to a function call. */
3900 static vec
<tree
, va_gc
> *
3901 resolve_args (vec
<tree
, va_gc
> *args
, tsubst_flags_t complain
)
3906 FOR_EACH_VEC_SAFE_ELT (args
, ix
, arg
)
3908 if (error_operand_p (arg
))
3910 else if (VOID_TYPE_P (TREE_TYPE (arg
)))
3912 if (complain
& tf_error
)
3913 error ("invalid use of void expression");
3916 else if (invalid_nonstatic_memfn_p (arg
, complain
))
3922 /* Perform overload resolution on FN, which is called with the ARGS.
3924 Return the candidate function selected by overload resolution, or
3925 NULL if the event that overload resolution failed. In the case
3926 that overload resolution fails, *CANDIDATES will be the set of
3927 candidates considered, and ANY_VIABLE_P will be set to true or
3928 false to indicate whether or not any of the candidates were
3931 The ARGS should already have gone through RESOLVE_ARGS before this
3932 function is called. */
3934 static struct z_candidate
*
3935 perform_overload_resolution (tree fn
,
3936 const vec
<tree
, va_gc
> *args
,
3937 struct z_candidate
**candidates
,
3938 bool *any_viable_p
, tsubst_flags_t complain
)
3940 struct z_candidate
*cand
;
3941 tree explicit_targs
;
3944 bool subtime
= timevar_cond_start (TV_OVERLOAD
);
3946 explicit_targs
= NULL_TREE
;
3950 *any_viable_p
= true;
3953 gcc_assert (TREE_CODE (fn
) == FUNCTION_DECL
3954 || TREE_CODE (fn
) == TEMPLATE_DECL
3955 || TREE_CODE (fn
) == OVERLOAD
3956 || TREE_CODE (fn
) == TEMPLATE_ID_EXPR
);
3958 if (TREE_CODE (fn
) == TEMPLATE_ID_EXPR
)
3960 explicit_targs
= TREE_OPERAND (fn
, 1);
3961 fn
= TREE_OPERAND (fn
, 0);
3965 /* Add the various candidate functions. */
3966 add_candidates (fn
, NULL_TREE
, args
, NULL_TREE
,
3967 explicit_targs
, template_only
,
3968 /*conversion_path=*/NULL_TREE
,
3969 /*access_path=*/NULL_TREE
,
3971 candidates
, complain
);
3973 *candidates
= splice_viable (*candidates
, false, any_viable_p
);
3975 cand
= tourney (*candidates
, complain
);
3979 timevar_cond_stop (TV_OVERLOAD
, subtime
);
3983 /* Print an error message about being unable to build a call to FN with
3984 ARGS. ANY_VIABLE_P indicates whether any candidate functions could
3985 be located; CANDIDATES is a possibly empty list of such
3989 print_error_for_call_failure (tree fn
, vec
<tree
, va_gc
> *args
,
3990 struct z_candidate
*candidates
)
3992 tree name
= DECL_NAME (OVL_CURRENT (fn
));
3993 location_t loc
= location_of (name
);
3995 if (!any_strictly_viable (candidates
))
3996 error_at (loc
, "no matching function for call to %<%D(%A)%>",
3997 name
, build_tree_list_vec (args
));
3999 error_at (loc
, "call of overloaded %<%D(%A)%> is ambiguous",
4000 name
, build_tree_list_vec (args
));
4002 print_z_candidates (loc
, candidates
);
4005 /* Return an expression for a call to FN (a namespace-scope function,
4006 or a static member function) with the ARGS. This may change
4010 build_new_function_call (tree fn
, vec
<tree
, va_gc
> **args
, bool koenig_p
,
4011 tsubst_flags_t complain
)
4013 struct z_candidate
*candidates
, *cand
;
4018 if (args
!= NULL
&& *args
!= NULL
)
4020 *args
= resolve_args (*args
, complain
);
4022 return error_mark_node
;
4026 tm_malloc_replacement (fn
);
4028 /* If this function was found without using argument dependent
4029 lookup, then we want to ignore any undeclared friend
4035 fn
= remove_hidden_names (fn
);
4038 if (complain
& tf_error
)
4039 print_error_for_call_failure (orig_fn
, *args
, NULL
);
4040 return error_mark_node
;
4044 /* Get the high-water mark for the CONVERSION_OBSTACK. */
4045 p
= conversion_obstack_alloc (0);
4047 cand
= perform_overload_resolution (fn
, *args
, &candidates
, &any_viable_p
,
4052 if (complain
& tf_error
)
4054 if (!any_viable_p
&& candidates
&& ! candidates
->next
4055 && (TREE_CODE (candidates
->fn
) == FUNCTION_DECL
))
4056 return cp_build_function_call_vec (candidates
->fn
, args
, complain
);
4057 if (TREE_CODE (fn
) == TEMPLATE_ID_EXPR
)
4058 fn
= TREE_OPERAND (fn
, 0);
4059 print_error_for_call_failure (fn
, *args
, candidates
);
4061 result
= error_mark_node
;
4065 int flags
= LOOKUP_NORMAL
;
4066 /* If fn is template_id_expr, the call has explicit template arguments
4067 (e.g. func<int>(5)), communicate this info to build_over_call
4068 through flags so that later we can use it to decide whether to warn
4069 about peculiar null pointer conversion. */
4070 if (TREE_CODE (fn
) == TEMPLATE_ID_EXPR
)
4071 flags
|= LOOKUP_EXPLICIT_TMPL_ARGS
;
4072 result
= build_over_call (cand
, flags
, complain
);
4075 /* Free all the conversions we allocated. */
4076 obstack_free (&conversion_obstack
, p
);
4081 /* Build a call to a global operator new. FNNAME is the name of the
4082 operator (either "operator new" or "operator new[]") and ARGS are
4083 the arguments provided. This may change ARGS. *SIZE points to the
4084 total number of bytes required by the allocation, and is updated if
4085 that is changed here. *COOKIE_SIZE is non-NULL if a cookie should
4086 be used. If this function determines that no cookie should be
4087 used, after all, *COOKIE_SIZE is set to NULL_TREE. If SIZE_CHECK
4088 is not NULL_TREE, it is evaluated before calculating the final
4089 array size, and if it fails, the array size is replaced with
4090 (size_t)-1 (usually triggering a std::bad_alloc exception). If FN
4091 is non-NULL, it will be set, upon return, to the allocation
4095 build_operator_new_call (tree fnname
, vec
<tree
, va_gc
> **args
,
4096 tree
*size
, tree
*cookie_size
, tree size_check
,
4097 tree
*fn
, tsubst_flags_t complain
)
4099 tree original_size
= *size
;
4101 struct z_candidate
*candidates
;
4102 struct z_candidate
*cand
;
4107 /* Set to (size_t)-1 if the size check fails. */
4108 if (size_check
!= NULL_TREE
)
4110 tree errval
= TYPE_MAX_VALUE (sizetype
);
4111 if (cxx_dialect
>= cxx11
&& flag_exceptions
)
4112 errval
= throw_bad_array_new_length ();
4113 *size
= fold_build3 (COND_EXPR
, sizetype
, size_check
,
4114 original_size
, errval
);
4116 vec_safe_insert (*args
, 0, *size
);
4117 *args
= resolve_args (*args
, complain
);
4119 return error_mark_node
;
4125 If this lookup fails to find the name, or if the allocated type
4126 is not a class type, the allocation function's name is looked
4127 up in the global scope.
4129 we disregard block-scope declarations of "operator new". */
4130 fns
= lookup_function_nonclass (fnname
, *args
, /*block_p=*/false);
4132 /* Figure out what function is being called. */
4133 cand
= perform_overload_resolution (fns
, *args
, &candidates
, &any_viable_p
,
4136 /* If no suitable function could be found, issue an error message
4140 if (complain
& tf_error
)
4141 print_error_for_call_failure (fns
, *args
, candidates
);
4142 return error_mark_node
;
4145 /* If a cookie is required, add some extra space. Whether
4146 or not a cookie is required cannot be determined until
4147 after we know which function was called. */
4150 bool use_cookie
= true;
4153 arg_types
= TYPE_ARG_TYPES (TREE_TYPE (cand
->fn
));
4154 /* Skip the size_t parameter. */
4155 arg_types
= TREE_CHAIN (arg_types
);
4156 /* Check the remaining parameters (if any). */
4158 && TREE_CHAIN (arg_types
) == void_list_node
4159 && same_type_p (TREE_VALUE (arg_types
),
4162 /* If we need a cookie, adjust the number of bytes allocated. */
4165 /* Update the total size. */
4166 *size
= size_binop (PLUS_EXPR
, original_size
, *cookie_size
);
4167 /* Set to (size_t)-1 if the size check fails. */
4168 gcc_assert (size_check
!= NULL_TREE
);
4169 *size
= fold_build3 (COND_EXPR
, sizetype
, size_check
,
4170 *size
, TYPE_MAX_VALUE (sizetype
));
4171 /* Update the argument list to reflect the adjusted size. */
4172 (**args
)[0] = *size
;
4175 *cookie_size
= NULL_TREE
;
4178 /* Tell our caller which function we decided to call. */
4182 /* Build the CALL_EXPR. */
4183 return build_over_call (cand
, LOOKUP_NORMAL
, complain
);
4186 /* Build a new call to operator(). This may change ARGS. */
4189 build_op_call_1 (tree obj
, vec
<tree
, va_gc
> **args
, tsubst_flags_t complain
)
4191 struct z_candidate
*candidates
= 0, *cand
;
4192 tree fns
, convs
, first_mem_arg
= NULL_TREE
;
4193 tree type
= TREE_TYPE (obj
);
4195 tree result
= NULL_TREE
;
4198 if (error_operand_p (obj
))
4199 return error_mark_node
;
4201 obj
= prep_operand (obj
);
4203 if (TYPE_PTRMEMFUNC_P (type
))
4205 if (complain
& tf_error
)
4206 /* It's no good looking for an overloaded operator() on a
4207 pointer-to-member-function. */
4208 error ("pointer-to-member function %E cannot be called without an object; consider using .* or ->*", obj
);
4209 return error_mark_node
;
4212 if (TYPE_BINFO (type
))
4214 fns
= lookup_fnfields (TYPE_BINFO (type
), ansi_opname (CALL_EXPR
), 1);
4215 if (fns
== error_mark_node
)
4216 return error_mark_node
;
4221 if (args
!= NULL
&& *args
!= NULL
)
4223 *args
= resolve_args (*args
, complain
);
4225 return error_mark_node
;
4228 /* Get the high-water mark for the CONVERSION_OBSTACK. */
4229 p
= conversion_obstack_alloc (0);
4233 first_mem_arg
= obj
;
4235 add_candidates (BASELINK_FUNCTIONS (fns
),
4236 first_mem_arg
, *args
, NULL_TREE
,
4238 BASELINK_BINFO (fns
), BASELINK_ACCESS_BINFO (fns
),
4239 LOOKUP_NORMAL
, &candidates
, complain
);
4242 convs
= lookup_conversions (type
);
4244 for (; convs
; convs
= TREE_CHAIN (convs
))
4246 tree fns
= TREE_VALUE (convs
);
4247 tree totype
= TREE_TYPE (convs
);
4249 if (TYPE_PTRFN_P (totype
)
4250 || TYPE_REFFN_P (totype
)
4251 || (TREE_CODE (totype
) == REFERENCE_TYPE
4252 && TYPE_PTRFN_P (TREE_TYPE (totype
))))
4253 for (; fns
; fns
= OVL_NEXT (fns
))
4255 tree fn
= OVL_CURRENT (fns
);
4257 if (DECL_NONCONVERTING_P (fn
))
4260 if (TREE_CODE (fn
) == TEMPLATE_DECL
)
4261 add_template_conv_candidate
4262 (&candidates
, fn
, obj
, NULL_TREE
, *args
, totype
,
4263 /*access_path=*/NULL_TREE
,
4264 /*conversion_path=*/NULL_TREE
, complain
);
4266 add_conv_candidate (&candidates
, fn
, obj
, NULL_TREE
,
4267 *args
, /*conversion_path=*/NULL_TREE
,
4268 /*access_path=*/NULL_TREE
, complain
);
4272 /* Be strict here because if we choose a bad conversion candidate, the
4273 errors we get won't mention the call context. */
4274 candidates
= splice_viable (candidates
, true, &any_viable_p
);
4277 if (complain
& tf_error
)
4279 error ("no match for call to %<(%T) (%A)%>", TREE_TYPE (obj
),
4280 build_tree_list_vec (*args
));
4281 print_z_candidates (location_of (TREE_TYPE (obj
)), candidates
);
4283 result
= error_mark_node
;
4287 cand
= tourney (candidates
, complain
);
4290 if (complain
& tf_error
)
4292 error ("call of %<(%T) (%A)%> is ambiguous",
4293 TREE_TYPE (obj
), build_tree_list_vec (*args
));
4294 print_z_candidates (location_of (TREE_TYPE (obj
)), candidates
);
4296 result
= error_mark_node
;
4298 /* Since cand->fn will be a type, not a function, for a conversion
4299 function, we must be careful not to unconditionally look at
4301 else if (TREE_CODE (cand
->fn
) == FUNCTION_DECL
4302 && DECL_OVERLOADED_OPERATOR_P (cand
->fn
) == CALL_EXPR
)
4303 result
= build_over_call (cand
, LOOKUP_NORMAL
, complain
);
4306 obj
= convert_like_with_context (cand
->convs
[0], obj
, cand
->fn
, -1,
4308 obj
= convert_from_reference (obj
);
4309 result
= cp_build_function_call_vec (obj
, args
, complain
);
4313 /* Free all the conversions we allocated. */
4314 obstack_free (&conversion_obstack
, p
);
4319 /* Wrapper for above. */
4322 build_op_call (tree obj
, vec
<tree
, va_gc
> **args
, tsubst_flags_t complain
)
4325 bool subtime
= timevar_cond_start (TV_OVERLOAD
);
4326 ret
= build_op_call_1 (obj
, args
, complain
);
4327 timevar_cond_stop (TV_OVERLOAD
, subtime
);
4331 /* Called by op_error to prepare format strings suitable for the error
4332 function. It concatenates a prefix (controlled by MATCH), ERRMSG,
4333 and a suffix (controlled by NTYPES). */
4336 op_error_string (const char *errmsg
, int ntypes
, bool match
)
4340 const char *msgp
= concat (match
? G_("ambiguous overload for ")
4341 : G_("no match for "), errmsg
, NULL
);
4344 msg
= concat (msgp
, G_(" (operand types are %qT, %qT, and %qT)"), NULL
);
4345 else if (ntypes
== 2)
4346 msg
= concat (msgp
, G_(" (operand types are %qT and %qT)"), NULL
);
4348 msg
= concat (msgp
, G_(" (operand type is %qT)"), NULL
);
4354 op_error (location_t loc
, enum tree_code code
, enum tree_code code2
,
4355 tree arg1
, tree arg2
, tree arg3
, bool match
)
4359 if (code
== MODIFY_EXPR
)
4360 opname
= assignment_operator_name_info
[code2
].name
;
4362 opname
= operator_name_info
[code
].name
;
4367 if (flag_diagnostics_show_caret
)
4368 error_at (loc
, op_error_string (G_("ternary %<operator?:%>"),
4370 TREE_TYPE (arg1
), TREE_TYPE (arg2
), TREE_TYPE (arg3
));
4372 error_at (loc
, op_error_string (G_("ternary %<operator?:%> "
4373 "in %<%E ? %E : %E%>"), 3, match
),
4375 TREE_TYPE (arg1
), TREE_TYPE (arg2
), TREE_TYPE (arg3
));
4378 case POSTINCREMENT_EXPR
:
4379 case POSTDECREMENT_EXPR
:
4380 if (flag_diagnostics_show_caret
)
4381 error_at (loc
, op_error_string (G_("%<operator%s%>"), 1, match
),
4382 opname
, TREE_TYPE (arg1
));
4384 error_at (loc
, op_error_string (G_("%<operator%s%> in %<%E%s%>"),
4386 opname
, arg1
, opname
, TREE_TYPE (arg1
));
4390 if (flag_diagnostics_show_caret
)
4391 error_at (loc
, op_error_string (G_("%<operator[]%>"), 2, match
),
4392 TREE_TYPE (arg1
), TREE_TYPE (arg2
));
4394 error_at (loc
, op_error_string (G_("%<operator[]%> in %<%E[%E]%>"),
4396 arg1
, arg2
, TREE_TYPE (arg1
), TREE_TYPE (arg2
));
4401 if (flag_diagnostics_show_caret
)
4402 error_at (loc
, op_error_string (G_("%qs"), 1, match
),
4403 opname
, TREE_TYPE (arg1
));
4405 error_at (loc
, op_error_string (G_("%qs in %<%s %E%>"), 1, match
),
4406 opname
, opname
, arg1
, TREE_TYPE (arg1
));
4411 if (flag_diagnostics_show_caret
)
4412 error_at (loc
, op_error_string (G_("%<operator%s%>"), 2, match
),
4413 opname
, TREE_TYPE (arg1
), TREE_TYPE (arg2
));
4415 error_at (loc
, op_error_string (G_("%<operator%s%> in %<%E %s %E%>"),
4417 opname
, arg1
, opname
, arg2
,
4418 TREE_TYPE (arg1
), TREE_TYPE (arg2
));
4420 if (flag_diagnostics_show_caret
)
4421 error_at (loc
, op_error_string (G_("%<operator%s%>"), 1, match
),
4422 opname
, TREE_TYPE (arg1
));
4424 error_at (loc
, op_error_string (G_("%<operator%s%> in %<%s%E%>"),
4426 opname
, opname
, arg1
, TREE_TYPE (arg1
));
4431 /* Return the implicit conversion sequence that could be used to
4432 convert E1 to E2 in [expr.cond]. */
4435 conditional_conversion (tree e1
, tree e2
, tsubst_flags_t complain
)
4437 tree t1
= non_reference (TREE_TYPE (e1
));
4438 tree t2
= non_reference (TREE_TYPE (e2
));
4444 If E2 is an lvalue: E1 can be converted to match E2 if E1 can be
4445 implicitly converted (clause _conv_) to the type "lvalue reference to
4446 T2", subject to the constraint that in the conversion the
4447 reference must bind directly (_dcl.init.ref_) to an lvalue.
4449 If E2 is an xvalue: E1 can be converted to match E2 if E1 can be
4450 implicitly converted to the type "rvalue reference to T2", subject to
4451 the constraint that the reference must bind directly. */
4452 if (lvalue_or_rvalue_with_address_p (e2
))
4454 tree rtype
= cp_build_reference_type (t2
, !real_lvalue_p (e2
));
4455 conv
= implicit_conversion (rtype
,
4459 LOOKUP_NO_TEMP_BIND
|LOOKUP_NO_RVAL_BIND
4460 |LOOKUP_ONLYCONVERTING
,
4462 if (conv
&& !conv
->bad_p
)
4466 /* If E2 is a prvalue or if neither of the conversions above can be done
4467 and at least one of the operands has (possibly cv-qualified) class
4469 if (!CLASS_TYPE_P (t1
) && !CLASS_TYPE_P (t2
))
4474 If E1 and E2 have class type, and the underlying class types are
4475 the same or one is a base class of the other: E1 can be converted
4476 to match E2 if the class of T2 is the same type as, or a base
4477 class of, the class of T1, and the cv-qualification of T2 is the
4478 same cv-qualification as, or a greater cv-qualification than, the
4479 cv-qualification of T1. If the conversion is applied, E1 is
4480 changed to an rvalue of type T2 that still refers to the original
4481 source class object (or the appropriate subobject thereof). */
4482 if (CLASS_TYPE_P (t1
) && CLASS_TYPE_P (t2
)
4483 && ((good_base
= DERIVED_FROM_P (t2
, t1
)) || DERIVED_FROM_P (t1
, t2
)))
4485 if (good_base
&& at_least_as_qualified_p (t2
, t1
))
4487 conv
= build_identity_conv (t1
, e1
);
4488 if (!same_type_p (TYPE_MAIN_VARIANT (t1
),
4489 TYPE_MAIN_VARIANT (t2
)))
4490 conv
= build_conv (ck_base
, t2
, conv
);
4492 conv
= build_conv (ck_rvalue
, t2
, conv
);
4501 Otherwise: E1 can be converted to match E2 if E1 can be implicitly
4502 converted to the type that expression E2 would have if E2 were
4503 converted to an rvalue (or the type it has, if E2 is an rvalue). */
4504 return implicit_conversion (t2
, t1
, e1
, /*c_cast_p=*/false,
4505 LOOKUP_IMPLICIT
, complain
);
4508 /* Implement [expr.cond]. ARG1, ARG2, and ARG3 are the three
4509 arguments to the conditional expression. */
4512 build_conditional_expr_1 (location_t loc
, tree arg1
, tree arg2
, tree arg3
,
4513 tsubst_flags_t complain
)
4517 tree result
= NULL_TREE
;
4518 tree result_type
= NULL_TREE
;
4519 bool lvalue_p
= true;
4520 struct z_candidate
*candidates
= 0;
4521 struct z_candidate
*cand
;
4523 tree orig_arg2
, orig_arg3
;
4525 /* As a G++ extension, the second argument to the conditional can be
4526 omitted. (So that `a ? : c' is roughly equivalent to `a ? a :
4527 c'.) If the second operand is omitted, make sure it is
4528 calculated only once. */
4531 if (complain
& tf_error
)
4532 pedwarn (loc
, OPT_Wpedantic
,
4533 "ISO C++ forbids omitting the middle term of a ?: expression");
4535 /* Make sure that lvalues remain lvalues. See g++.oliva/ext1.C. */
4536 if (real_lvalue_p (arg1
))
4537 arg2
= arg1
= stabilize_reference (arg1
);
4539 arg2
= arg1
= save_expr (arg1
);
4542 /* If something has already gone wrong, just pass that fact up the
4544 if (error_operand_p (arg1
)
4545 || error_operand_p (arg2
)
4546 || error_operand_p (arg3
))
4547 return error_mark_node
;
4552 if (VECTOR_INTEGER_TYPE_P (TREE_TYPE (arg1
)))
4554 arg1
= force_rvalue (arg1
, complain
);
4555 arg2
= force_rvalue (arg2
, complain
);
4556 arg3
= force_rvalue (arg3
, complain
);
4558 /* force_rvalue can return error_mark on valid arguments. */
4559 if (error_operand_p (arg1
)
4560 || error_operand_p (arg2
)
4561 || error_operand_p (arg3
))
4562 return error_mark_node
;
4564 tree arg1_type
= TREE_TYPE (arg1
);
4565 arg2_type
= TREE_TYPE (arg2
);
4566 arg3_type
= TREE_TYPE (arg3
);
4568 if (TREE_CODE (arg2_type
) != VECTOR_TYPE
4569 && TREE_CODE (arg3_type
) != VECTOR_TYPE
)
4571 /* Rely on the error messages of the scalar version. */
4572 tree scal
= build_conditional_expr_1 (loc
, integer_one_node
,
4573 orig_arg2
, orig_arg3
, complain
);
4574 if (scal
== error_mark_node
)
4575 return error_mark_node
;
4576 tree stype
= TREE_TYPE (scal
);
4577 tree ctype
= TREE_TYPE (arg1_type
);
4578 if (TYPE_SIZE (stype
) != TYPE_SIZE (ctype
)
4579 || (!INTEGRAL_TYPE_P (stype
) && !SCALAR_FLOAT_TYPE_P (stype
)))
4581 if (complain
& tf_error
)
4582 error_at (loc
, "inferred scalar type %qT is not an integer or "
4583 "floating point type of the same size as %qT", stype
,
4584 COMPARISON_CLASS_P (arg1
)
4585 ? TREE_TYPE (TREE_TYPE (TREE_OPERAND (arg1
, 0)))
4587 return error_mark_node
;
4590 tree vtype
= build_opaque_vector_type (stype
,
4591 TYPE_VECTOR_SUBPARTS (arg1_type
));
4592 /* We could pass complain & tf_warning to unsafe_conversion_p,
4593 but the warnings (like Wsign-conversion) have already been
4594 given by the scalar build_conditional_expr_1. We still check
4595 unsafe_conversion_p to forbid truncating long long -> float. */
4596 if (unsafe_conversion_p (loc
, stype
, arg2
, false))
4598 if (complain
& tf_error
)
4599 error_at (loc
, "conversion of scalar %qT to vector %qT "
4600 "involves truncation", arg2_type
, vtype
);
4601 return error_mark_node
;
4603 if (unsafe_conversion_p (loc
, stype
, arg3
, false))
4605 if (complain
& tf_error
)
4606 error_at (loc
, "conversion of scalar %qT to vector %qT "
4607 "involves truncation", arg3_type
, vtype
);
4608 return error_mark_node
;
4611 arg2
= cp_convert (stype
, arg2
, complain
);
4612 arg2
= save_expr (arg2
);
4613 arg2
= build_vector_from_val (vtype
, arg2
);
4615 arg3
= cp_convert (stype
, arg3
, complain
);
4616 arg3
= save_expr (arg3
);
4617 arg3
= build_vector_from_val (vtype
, arg3
);
4621 if ((TREE_CODE (arg2_type
) == VECTOR_TYPE
)
4622 != (TREE_CODE (arg3_type
) == VECTOR_TYPE
))
4624 enum stv_conv convert_flag
=
4625 scalar_to_vector (loc
, VEC_COND_EXPR
, arg2
, arg3
,
4626 complain
& tf_error
);
4628 switch (convert_flag
)
4631 return error_mark_node
;
4634 arg2
= save_expr (arg2
);
4635 arg2
= convert (TREE_TYPE (arg3_type
), arg2
);
4636 arg2
= build_vector_from_val (arg3_type
, arg2
);
4637 arg2_type
= TREE_TYPE (arg2
);
4642 arg3
= save_expr (arg3
);
4643 arg3
= convert (TREE_TYPE (arg2_type
), arg3
);
4644 arg3
= build_vector_from_val (arg2_type
, arg3
);
4645 arg3_type
= TREE_TYPE (arg3
);
4653 if (!same_type_p (arg2_type
, arg3_type
)
4654 || TYPE_VECTOR_SUBPARTS (arg1_type
)
4655 != TYPE_VECTOR_SUBPARTS (arg2_type
)
4656 || TYPE_SIZE (arg1_type
) != TYPE_SIZE (arg2_type
))
4658 if (complain
& tf_error
)
4660 "incompatible vector types in conditional expression: "
4661 "%qT, %qT and %qT", TREE_TYPE (arg1
),
4662 TREE_TYPE (orig_arg2
), TREE_TYPE (orig_arg3
));
4663 return error_mark_node
;
4666 if (!COMPARISON_CLASS_P (arg1
))
4667 arg1
= cp_build_binary_op (loc
, NE_EXPR
, arg1
,
4668 build_zero_cst (arg1_type
), complain
);
4669 return fold_build3 (VEC_COND_EXPR
, arg2_type
, arg1
, arg2
, arg3
);
4674 The first expression is implicitly converted to bool (clause
4676 arg1
= perform_implicit_conversion_flags (boolean_type_node
, arg1
, complain
,
4678 if (error_operand_p (arg1
))
4679 return error_mark_node
;
4683 If either the second or the third operand has type (possibly
4684 cv-qualified) void, then the lvalue-to-rvalue (_conv.lval_),
4685 array-to-pointer (_conv.array_), and function-to-pointer
4686 (_conv.func_) standard conversions are performed on the second
4687 and third operands. */
4688 arg2_type
= unlowered_expr_type (arg2
);
4689 arg3_type
= unlowered_expr_type (arg3
);
4690 if (VOID_TYPE_P (arg2_type
) || VOID_TYPE_P (arg3_type
))
4692 /* Do the conversions. We don't these for `void' type arguments
4693 since it can't have any effect and since decay_conversion
4694 does not handle that case gracefully. */
4695 if (!VOID_TYPE_P (arg2_type
))
4696 arg2
= decay_conversion (arg2
, complain
);
4697 if (!VOID_TYPE_P (arg3_type
))
4698 arg3
= decay_conversion (arg3
, complain
);
4699 arg2_type
= TREE_TYPE (arg2
);
4700 arg3_type
= TREE_TYPE (arg3
);
4704 One of the following shall hold:
4706 --The second or the third operand (but not both) is a
4707 throw-expression (_except.throw_); the result is of the
4708 type of the other and is an rvalue.
4710 --Both the second and the third operands have type void; the
4711 result is of type void and is an rvalue.
4713 We must avoid calling force_rvalue for expressions of type
4714 "void" because it will complain that their value is being
4716 if (TREE_CODE (arg2
) == THROW_EXPR
4717 && TREE_CODE (arg3
) != THROW_EXPR
)
4719 if (!VOID_TYPE_P (arg3_type
))
4721 arg3
= force_rvalue (arg3
, complain
);
4722 if (arg3
== error_mark_node
)
4723 return error_mark_node
;
4725 arg3_type
= TREE_TYPE (arg3
);
4726 result_type
= arg3_type
;
4728 else if (TREE_CODE (arg2
) != THROW_EXPR
4729 && TREE_CODE (arg3
) == THROW_EXPR
)
4731 if (!VOID_TYPE_P (arg2_type
))
4733 arg2
= force_rvalue (arg2
, complain
);
4734 if (arg2
== error_mark_node
)
4735 return error_mark_node
;
4737 arg2_type
= TREE_TYPE (arg2
);
4738 result_type
= arg2_type
;
4740 else if (VOID_TYPE_P (arg2_type
) && VOID_TYPE_P (arg3_type
))
4741 result_type
= void_type_node
;
4744 if (complain
& tf_error
)
4746 if (VOID_TYPE_P (arg2_type
))
4747 error_at (EXPR_LOC_OR_LOC (arg3
, loc
),
4748 "second operand to the conditional operator "
4749 "is of type %<void%>, but the third operand is "
4750 "neither a throw-expression nor of type %<void%>");
4752 error_at (EXPR_LOC_OR_LOC (arg2
, loc
),
4753 "third operand to the conditional operator "
4754 "is of type %<void%>, but the second operand is "
4755 "neither a throw-expression nor of type %<void%>");
4757 return error_mark_node
;
4761 goto valid_operands
;
4765 Otherwise, if the second and third operand have different types,
4766 and either has (possibly cv-qualified) class type, or if both are
4767 glvalues of the same value category and the same type except for
4768 cv-qualification, an attempt is made to convert each of those operands
4769 to the type of the other. */
4770 else if (!same_type_p (arg2_type
, arg3_type
)
4771 && (CLASS_TYPE_P (arg2_type
) || CLASS_TYPE_P (arg3_type
)
4772 || (same_type_ignoring_top_level_qualifiers_p (arg2_type
,
4774 && lvalue_or_rvalue_with_address_p (arg2
)
4775 && lvalue_or_rvalue_with_address_p (arg3
)
4776 && real_lvalue_p (arg2
) == real_lvalue_p (arg3
))))
4780 bool converted
= false;
4782 /* Get the high-water mark for the CONVERSION_OBSTACK. */
4783 p
= conversion_obstack_alloc (0);
4785 conv2
= conditional_conversion (arg2
, arg3
, complain
);
4786 conv3
= conditional_conversion (arg3
, arg2
, complain
);
4790 If both can be converted, or one can be converted but the
4791 conversion is ambiguous, the program is ill-formed. If
4792 neither can be converted, the operands are left unchanged and
4793 further checking is performed as described below. If exactly
4794 one conversion is possible, that conversion is applied to the
4795 chosen operand and the converted operand is used in place of
4796 the original operand for the remainder of this section. */
4797 if ((conv2
&& !conv2
->bad_p
4798 && conv3
&& !conv3
->bad_p
)
4799 || (conv2
&& conv2
->kind
== ck_ambig
)
4800 || (conv3
&& conv3
->kind
== ck_ambig
))
4802 if (complain
& tf_error
)
4804 error_at (loc
, "operands to ?: have different types %qT and %qT",
4805 arg2_type
, arg3_type
);
4806 if (conv2
&& !conv2
->bad_p
&& conv3
&& !conv3
->bad_p
)
4807 inform (loc
, " and each type can be converted to the other");
4808 else if (conv2
&& conv2
->kind
== ck_ambig
)
4809 convert_like (conv2
, arg2
, complain
);
4811 convert_like (conv3
, arg3
, complain
);
4813 result
= error_mark_node
;
4815 else if (conv2
&& !conv2
->bad_p
)
4817 arg2
= convert_like (conv2
, arg2
, complain
);
4818 arg2
= convert_from_reference (arg2
);
4819 arg2_type
= TREE_TYPE (arg2
);
4820 /* Even if CONV2 is a valid conversion, the result of the
4821 conversion may be invalid. For example, if ARG3 has type
4822 "volatile X", and X does not have a copy constructor
4823 accepting a "volatile X&", then even if ARG2 can be
4824 converted to X, the conversion will fail. */
4825 if (error_operand_p (arg2
))
4826 result
= error_mark_node
;
4829 else if (conv3
&& !conv3
->bad_p
)
4831 arg3
= convert_like (conv3
, arg3
, complain
);
4832 arg3
= convert_from_reference (arg3
);
4833 arg3_type
= TREE_TYPE (arg3
);
4834 if (error_operand_p (arg3
))
4835 result
= error_mark_node
;
4839 /* Free all the conversions we allocated. */
4840 obstack_free (&conversion_obstack
, p
);
4845 /* If, after the conversion, both operands have class type,
4846 treat the cv-qualification of both operands as if it were the
4847 union of the cv-qualification of the operands.
4849 The standard is not clear about what to do in this
4850 circumstance. For example, if the first operand has type
4851 "const X" and the second operand has a user-defined
4852 conversion to "volatile X", what is the type of the second
4853 operand after this step? Making it be "const X" (matching
4854 the first operand) seems wrong, as that discards the
4855 qualification without actually performing a copy. Leaving it
4856 as "volatile X" seems wrong as that will result in the
4857 conditional expression failing altogether, even though,
4858 according to this step, the one operand could be converted to
4859 the type of the other. */
4861 && CLASS_TYPE_P (arg2_type
)
4862 && cp_type_quals (arg2_type
) != cp_type_quals (arg3_type
))
4863 arg2_type
= arg3_type
=
4864 cp_build_qualified_type (arg2_type
,
4865 cp_type_quals (arg2_type
)
4866 | cp_type_quals (arg3_type
));
4871 If the second and third operands are glvalues of the same value
4872 category and have the same type, the result is of that type and
4874 if (((real_lvalue_p (arg2
) && real_lvalue_p (arg3
))
4875 || (xvalue_p (arg2
) && xvalue_p (arg3
)))
4876 && same_type_p (arg2_type
, arg3_type
))
4878 result_type
= arg2_type
;
4879 arg2
= mark_lvalue_use (arg2
);
4880 arg3
= mark_lvalue_use (arg3
);
4881 goto valid_operands
;
4886 Otherwise, the result is an rvalue. If the second and third
4887 operand do not have the same type, and either has (possibly
4888 cv-qualified) class type, overload resolution is used to
4889 determine the conversions (if any) to be applied to the operands
4890 (_over.match.oper_, _over.built_). */
4892 if (!same_type_p (arg2_type
, arg3_type
)
4893 && (CLASS_TYPE_P (arg2_type
) || CLASS_TYPE_P (arg3_type
)))
4899 /* Rearrange the arguments so that add_builtin_candidate only has
4900 to know about two args. In build_builtin_candidate, the
4901 arguments are unscrambled. */
4905 add_builtin_candidates (&candidates
,
4908 ansi_opname (COND_EXPR
),
4910 LOOKUP_NORMAL
, complain
);
4914 If the overload resolution fails, the program is
4916 candidates
= splice_viable (candidates
, false, &any_viable_p
);
4919 if (complain
& tf_error
)
4920 error_at (loc
, "operands to ?: have different types %qT and %qT",
4921 arg2_type
, arg3_type
);
4922 return error_mark_node
;
4924 cand
= tourney (candidates
, complain
);
4927 if (complain
& tf_error
)
4929 op_error (loc
, COND_EXPR
, NOP_EXPR
, arg1
, arg2
, arg3
, FALSE
);
4930 print_z_candidates (loc
, candidates
);
4932 return error_mark_node
;
4937 Otherwise, the conversions thus determined are applied, and
4938 the converted operands are used in place of the original
4939 operands for the remainder of this section. */
4940 conv
= cand
->convs
[0];
4941 arg1
= convert_like (conv
, arg1
, complain
);
4942 conv
= cand
->convs
[1];
4943 arg2
= convert_like (conv
, arg2
, complain
);
4944 arg2_type
= TREE_TYPE (arg2
);
4945 conv
= cand
->convs
[2];
4946 arg3
= convert_like (conv
, arg3
, complain
);
4947 arg3_type
= TREE_TYPE (arg3
);
4952 Lvalue-to-rvalue (_conv.lval_), array-to-pointer (_conv.array_),
4953 and function-to-pointer (_conv.func_) standard conversions are
4954 performed on the second and third operands.
4956 We need to force the lvalue-to-rvalue conversion here for class types,
4957 so we get TARGET_EXPRs; trying to deal with a COND_EXPR of class rvalues
4958 that isn't wrapped with a TARGET_EXPR plays havoc with exception
4961 arg2
= force_rvalue (arg2
, complain
);
4962 if (!CLASS_TYPE_P (arg2_type
))
4963 arg2_type
= TREE_TYPE (arg2
);
4965 arg3
= force_rvalue (arg3
, complain
);
4966 if (!CLASS_TYPE_P (arg3_type
))
4967 arg3_type
= TREE_TYPE (arg3
);
4969 if (arg2
== error_mark_node
|| arg3
== error_mark_node
)
4970 return error_mark_node
;
4974 After those conversions, one of the following shall hold:
4976 --The second and third operands have the same type; the result is of
4978 if (same_type_p (arg2_type
, arg3_type
))
4979 result_type
= arg2_type
;
4982 --The second and third operands have arithmetic or enumeration
4983 type; the usual arithmetic conversions are performed to bring
4984 them to a common type, and the result is of that type. */
4985 else if ((ARITHMETIC_TYPE_P (arg2_type
)
4986 || UNSCOPED_ENUM_P (arg2_type
))
4987 && (ARITHMETIC_TYPE_P (arg3_type
)
4988 || UNSCOPED_ENUM_P (arg3_type
)))
4990 /* In this case, there is always a common type. */
4991 result_type
= type_after_usual_arithmetic_conversions (arg2_type
,
4993 if (complain
& tf_warning
)
4994 do_warn_double_promotion (result_type
, arg2_type
, arg3_type
,
4995 "implicit conversion from %qT to %qT to "
4996 "match other result of conditional",
4999 if (TREE_CODE (arg2_type
) == ENUMERAL_TYPE
5000 && TREE_CODE (arg3_type
) == ENUMERAL_TYPE
)
5002 if (TREE_CODE (orig_arg2
) == CONST_DECL
5003 && TREE_CODE (orig_arg3
) == CONST_DECL
5004 && DECL_CONTEXT (orig_arg2
) == DECL_CONTEXT (orig_arg3
))
5005 /* Two enumerators from the same enumeration can have different
5006 types when the enumeration is still being defined. */;
5007 else if (complain
& tf_warning
)
5008 warning_at (loc
, OPT_Wenum_compare
, "enumeral mismatch in "
5009 "conditional expression: %qT vs %qT",
5010 arg2_type
, arg3_type
);
5012 else if (extra_warnings
5013 && ((TREE_CODE (arg2_type
) == ENUMERAL_TYPE
5014 && !same_type_p (arg3_type
, type_promotes_to (arg2_type
)))
5015 || (TREE_CODE (arg3_type
) == ENUMERAL_TYPE
5016 && !same_type_p (arg2_type
,
5017 type_promotes_to (arg3_type
)))))
5019 if (complain
& tf_warning
)
5020 warning_at (loc
, 0, "enumeral and non-enumeral type in "
5021 "conditional expression");
5024 arg2
= perform_implicit_conversion (result_type
, arg2
, complain
);
5025 arg3
= perform_implicit_conversion (result_type
, arg3
, complain
);
5029 --The second and third operands have pointer type, or one has
5030 pointer type and the other is a null pointer constant; pointer
5031 conversions (_conv.ptr_) and qualification conversions
5032 (_conv.qual_) are performed to bring them to their composite
5033 pointer type (_expr.rel_). The result is of the composite
5036 --The second and third operands have pointer to member type, or
5037 one has pointer to member type and the other is a null pointer
5038 constant; pointer to member conversions (_conv.mem_) and
5039 qualification conversions (_conv.qual_) are performed to bring
5040 them to a common type, whose cv-qualification shall match the
5041 cv-qualification of either the second or the third operand.
5042 The result is of the common type. */
5043 else if ((null_ptr_cst_p (arg2
)
5044 && TYPE_PTR_OR_PTRMEM_P (arg3_type
))
5045 || (null_ptr_cst_p (arg3
)
5046 && TYPE_PTR_OR_PTRMEM_P (arg2_type
))
5047 || (TYPE_PTR_P (arg2_type
) && TYPE_PTR_P (arg3_type
))
5048 || (TYPE_PTRDATAMEM_P (arg2_type
) && TYPE_PTRDATAMEM_P (arg3_type
))
5049 || (TYPE_PTRMEMFUNC_P (arg2_type
) && TYPE_PTRMEMFUNC_P (arg3_type
)))
5051 result_type
= composite_pointer_type (arg2_type
, arg3_type
, arg2
,
5052 arg3
, CPO_CONDITIONAL_EXPR
,
5054 if (result_type
== error_mark_node
)
5055 return error_mark_node
;
5056 arg2
= perform_implicit_conversion (result_type
, arg2
, complain
);
5057 arg3
= perform_implicit_conversion (result_type
, arg3
, complain
);
5062 if (complain
& tf_error
)
5063 error_at (loc
, "operands to ?: have different types %qT and %qT",
5064 arg2_type
, arg3_type
);
5065 return error_mark_node
;
5068 if (arg2
== error_mark_node
|| arg3
== error_mark_node
)
5069 return error_mark_node
;
5072 result
= build3 (COND_EXPR
, result_type
, arg1
, arg2
, arg3
);
5073 if (!cp_unevaluated_operand
)
5074 /* Avoid folding within decltype (c++/42013) and noexcept. */
5075 result
= fold_if_not_in_template (result
);
5077 /* We can't use result_type below, as fold might have returned a
5082 /* Expand both sides into the same slot, hopefully the target of
5083 the ?: expression. We used to check for TARGET_EXPRs here,
5084 but now we sometimes wrap them in NOP_EXPRs so the test would
5086 if (CLASS_TYPE_P (TREE_TYPE (result
)))
5087 result
= get_target_expr_sfinae (result
, complain
);
5088 /* If this expression is an rvalue, but might be mistaken for an
5089 lvalue, we must add a NON_LVALUE_EXPR. */
5090 result
= rvalue (result
);
5093 result
= force_paren_expr (result
);
5098 /* Wrapper for above. */
5101 build_conditional_expr (location_t loc
, tree arg1
, tree arg2
, tree arg3
,
5102 tsubst_flags_t complain
)
5105 bool subtime
= timevar_cond_start (TV_OVERLOAD
);
5106 ret
= build_conditional_expr_1 (loc
, arg1
, arg2
, arg3
, complain
);
5107 timevar_cond_stop (TV_OVERLOAD
, subtime
);
5111 /* OPERAND is an operand to an expression. Perform necessary steps
5112 required before using it. If OPERAND is NULL_TREE, NULL_TREE is
5116 prep_operand (tree operand
)
5120 if (CLASS_TYPE_P (TREE_TYPE (operand
))
5121 && CLASSTYPE_TEMPLATE_INSTANTIATION (TREE_TYPE (operand
)))
5122 /* Make sure the template type is instantiated now. */
5123 instantiate_class_template (TYPE_MAIN_VARIANT (TREE_TYPE (operand
)));
5129 /* Add each of the viable functions in FNS (a FUNCTION_DECL or
5130 OVERLOAD) to the CANDIDATES, returning an updated list of
5131 CANDIDATES. The ARGS are the arguments provided to the call;
5132 if FIRST_ARG is non-null it is the implicit object argument,
5133 otherwise the first element of ARGS is used if needed. The
5134 EXPLICIT_TARGS are explicit template arguments provided.
5135 TEMPLATE_ONLY is true if only template functions should be
5136 considered. CONVERSION_PATH, ACCESS_PATH, and FLAGS are as for
5137 add_function_candidate. */
5140 add_candidates (tree fns
, tree first_arg
, const vec
<tree
, va_gc
> *args
,
5142 tree explicit_targs
, bool template_only
,
5143 tree conversion_path
, tree access_path
,
5145 struct z_candidate
**candidates
,
5146 tsubst_flags_t complain
)
5149 const vec
<tree
, va_gc
> *non_static_args
;
5150 bool check_list_ctor
;
5151 bool check_converting
;
5152 unification_kind_t strict
;
5158 /* Precalculate special handling of constructors and conversion ops. */
5159 fn
= OVL_CURRENT (fns
);
5160 if (DECL_CONV_FN_P (fn
))
5162 check_list_ctor
= false;
5163 check_converting
= !!(flags
& LOOKUP_ONLYCONVERTING
);
5164 if (flags
& LOOKUP_NO_CONVERSION
)
5165 /* We're doing return_type(x). */
5166 strict
= DEDUCE_CONV
;
5168 /* We're doing x.operator return_type(). */
5169 strict
= DEDUCE_EXACT
;
5170 /* [over.match.funcs] For conversion functions, the function
5171 is considered to be a member of the class of the implicit
5172 object argument for the purpose of defining the type of
5173 the implicit object parameter. */
5174 ctype
= TYPE_MAIN_VARIANT (TREE_TYPE (first_arg
));
5178 if (DECL_CONSTRUCTOR_P (fn
))
5180 check_list_ctor
= !!(flags
& LOOKUP_LIST_ONLY
);
5181 /* For list-initialization we consider explicit constructors
5182 and complain if one is chosen. */
5184 = ((flags
& (LOOKUP_ONLYCONVERTING
|LOOKUP_LIST_INIT_CTOR
))
5185 == LOOKUP_ONLYCONVERTING
);
5189 check_list_ctor
= false;
5190 check_converting
= false;
5192 strict
= DEDUCE_CALL
;
5193 ctype
= conversion_path
? BINFO_TYPE (conversion_path
) : NULL_TREE
;
5197 non_static_args
= args
;
5199 /* Delay creating the implicit this parameter until it is needed. */
5200 non_static_args
= NULL
;
5202 for (; fns
; fns
= OVL_NEXT (fns
))
5205 const vec
<tree
, va_gc
> *fn_args
;
5207 fn
= OVL_CURRENT (fns
);
5209 if (check_converting
&& DECL_NONCONVERTING_P (fn
))
5211 if (check_list_ctor
&& !is_list_ctor (fn
))
5214 /* Figure out which set of arguments to use. */
5215 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn
))
5217 /* If this function is a non-static member and we didn't get an
5218 implicit object argument, move it out of args. */
5219 if (first_arg
== NULL_TREE
)
5223 vec
<tree
, va_gc
> *tempvec
;
5224 vec_alloc (tempvec
, args
->length () - 1);
5225 for (ix
= 1; args
->iterate (ix
, &arg
); ++ix
)
5226 tempvec
->quick_push (arg
);
5227 non_static_args
= tempvec
;
5228 first_arg
= (*args
)[0];
5231 fn_first_arg
= first_arg
;
5232 fn_args
= non_static_args
;
5236 /* Otherwise, just use the list of arguments provided. */
5237 fn_first_arg
= NULL_TREE
;
5241 if (TREE_CODE (fn
) == TEMPLATE_DECL
)
5242 add_template_candidate (candidates
,
5254 else if (!template_only
)
5255 add_function_candidate (candidates
,
5268 build_new_op_1 (location_t loc
, enum tree_code code
, int flags
, tree arg1
,
5269 tree arg2
, tree arg3
, tree
*overload
, tsubst_flags_t complain
)
5271 struct z_candidate
*candidates
= 0, *cand
;
5272 vec
<tree
, va_gc
> *arglist
;
5275 tree result
= NULL_TREE
;
5276 bool result_valid_p
= false;
5277 enum tree_code code2
= NOP_EXPR
;
5278 enum tree_code code_orig_arg1
= ERROR_MARK
;
5279 enum tree_code code_orig_arg2
= ERROR_MARK
;
5285 if (error_operand_p (arg1
)
5286 || error_operand_p (arg2
)
5287 || error_operand_p (arg3
))
5288 return error_mark_node
;
5290 if (code
== MODIFY_EXPR
)
5292 code2
= TREE_CODE (arg3
);
5294 fnname
= ansi_assopname (code2
);
5297 fnname
= ansi_opname (code
);
5299 arg1
= prep_operand (arg1
);
5305 case VEC_DELETE_EXPR
:
5307 /* Use build_op_new_call and build_op_delete_call instead. */
5311 /* Use build_op_call instead. */
5314 case TRUTH_ORIF_EXPR
:
5315 case TRUTH_ANDIF_EXPR
:
5316 case TRUTH_AND_EXPR
:
5318 /* These are saved for the sake of warn_logical_operator. */
5319 code_orig_arg1
= TREE_CODE (arg1
);
5320 code_orig_arg2
= TREE_CODE (arg2
);
5326 arg2
= prep_operand (arg2
);
5327 arg3
= prep_operand (arg3
);
5329 if (code
== COND_EXPR
)
5330 /* Use build_conditional_expr instead. */
5332 else if (! OVERLOAD_TYPE_P (TREE_TYPE (arg1
))
5333 && (! arg2
|| ! OVERLOAD_TYPE_P (TREE_TYPE (arg2
))))
5336 if (code
== POSTINCREMENT_EXPR
|| code
== POSTDECREMENT_EXPR
)
5337 arg2
= integer_zero_node
;
5339 vec_alloc (arglist
, 3);
5340 arglist
->quick_push (arg1
);
5341 if (arg2
!= NULL_TREE
)
5342 arglist
->quick_push (arg2
);
5343 if (arg3
!= NULL_TREE
)
5344 arglist
->quick_push (arg3
);
5346 /* Get the high-water mark for the CONVERSION_OBSTACK. */
5347 p
= conversion_obstack_alloc (0);
5349 /* Add namespace-scope operators to the list of functions to
5351 add_candidates (lookup_function_nonclass (fnname
, arglist
, /*block_p=*/true),
5352 NULL_TREE
, arglist
, NULL_TREE
,
5353 NULL_TREE
, false, NULL_TREE
, NULL_TREE
,
5354 flags
, &candidates
, complain
);
5358 args
[2] = NULL_TREE
;
5360 /* Add class-member operators to the candidate set. */
5361 if (CLASS_TYPE_P (TREE_TYPE (arg1
)))
5365 fns
= lookup_fnfields (TREE_TYPE (arg1
), fnname
, 1);
5366 if (fns
== error_mark_node
)
5368 result
= error_mark_node
;
5369 goto user_defined_result_ready
;
5372 add_candidates (BASELINK_FUNCTIONS (fns
),
5373 NULL_TREE
, arglist
, NULL_TREE
,
5375 BASELINK_BINFO (fns
),
5376 BASELINK_ACCESS_BINFO (fns
),
5377 flags
, &candidates
, complain
);
5379 /* Per 13.3.1.2/3, 2nd bullet, if no operand has a class type, then
5380 only non-member functions that have type T1 or reference to
5381 cv-qualified-opt T1 for the first argument, if the first argument
5382 has an enumeration type, or T2 or reference to cv-qualified-opt
5383 T2 for the second argument, if the the second argument has an
5384 enumeration type. Filter out those that don't match. */
5385 else if (! arg2
|| ! CLASS_TYPE_P (TREE_TYPE (arg2
)))
5387 struct z_candidate
**candp
, **next
;
5389 for (candp
= &candidates
; *candp
; candp
= next
)
5391 tree parmlist
, parmtype
;
5392 int i
, nargs
= (arg2
? 2 : 1);
5397 parmlist
= TYPE_ARG_TYPES (TREE_TYPE (cand
->fn
));
5399 for (i
= 0; i
< nargs
; ++i
)
5401 parmtype
= TREE_VALUE (parmlist
);
5403 if (TREE_CODE (parmtype
) == REFERENCE_TYPE
)
5404 parmtype
= TREE_TYPE (parmtype
);
5405 if (TREE_CODE (TREE_TYPE (args
[i
])) == ENUMERAL_TYPE
5406 && (same_type_ignoring_top_level_qualifiers_p
5407 (TREE_TYPE (args
[i
]), parmtype
)))
5410 parmlist
= TREE_CHAIN (parmlist
);
5413 /* No argument has an appropriate type, so remove this
5414 candidate function from the list. */
5417 *candp
= cand
->next
;
5423 add_builtin_candidates (&candidates
, code
, code2
, fnname
, args
,
5430 /* For these, the built-in candidates set is empty
5431 [over.match.oper]/3. We don't want non-strict matches
5432 because exact matches are always possible with built-in
5433 operators. The built-in candidate set for COMPONENT_REF
5434 would be empty too, but since there are no such built-in
5435 operators, we accept non-strict matches for them. */
5444 candidates
= splice_viable (candidates
, strict_p
, &any_viable_p
);
5449 case POSTINCREMENT_EXPR
:
5450 case POSTDECREMENT_EXPR
:
5451 /* Don't try anything fancy if we're not allowed to produce
5453 if (!(complain
& tf_error
))
5454 return error_mark_node
;
5456 /* Look for an `operator++ (int)'. Pre-1985 C++ didn't
5457 distinguish between prefix and postfix ++ and
5458 operator++() was used for both, so we allow this with
5462 const char *msg
= (flag_permissive
)
5463 ? G_("no %<%D(int)%> declared for postfix %qs,"
5464 " trying prefix operator instead")
5465 : G_("no %<%D(int)%> declared for postfix %qs");
5466 permerror (loc
, msg
, fnname
, operator_name_info
[code
].name
);
5469 if (!flag_permissive
)
5470 return error_mark_node
;
5472 if (code
== POSTINCREMENT_EXPR
)
5473 code
= PREINCREMENT_EXPR
;
5475 code
= PREDECREMENT_EXPR
;
5476 result
= build_new_op_1 (loc
, code
, flags
, arg1
, NULL_TREE
,
5477 NULL_TREE
, overload
, complain
);
5480 /* The caller will deal with these. */
5485 result_valid_p
= true;
5489 if (complain
& tf_error
)
5491 /* If one of the arguments of the operator represents
5492 an invalid use of member function pointer, try to report
5493 a meaningful error ... */
5494 if (invalid_nonstatic_memfn_p (arg1
, tf_error
)
5495 || invalid_nonstatic_memfn_p (arg2
, tf_error
)
5496 || invalid_nonstatic_memfn_p (arg3
, tf_error
))
5497 /* We displayed the error message. */;
5500 /* ... Otherwise, report the more generic
5501 "no matching operator found" error */
5502 op_error (loc
, code
, code2
, arg1
, arg2
, arg3
, FALSE
);
5503 print_z_candidates (loc
, candidates
);
5506 result
= error_mark_node
;
5512 cand
= tourney (candidates
, complain
);
5515 if (complain
& tf_error
)
5517 op_error (loc
, code
, code2
, arg1
, arg2
, arg3
, TRUE
);
5518 print_z_candidates (loc
, candidates
);
5520 result
= error_mark_node
;
5522 else if (TREE_CODE (cand
->fn
) == FUNCTION_DECL
)
5525 *overload
= cand
->fn
;
5527 if (resolve_args (arglist
, complain
) == NULL
)
5528 result
= error_mark_node
;
5530 result
= build_over_call (cand
, LOOKUP_NORMAL
, complain
);
5534 /* Give any warnings we noticed during overload resolution. */
5535 if (cand
->warnings
&& (complain
& tf_warning
))
5537 struct candidate_warning
*w
;
5538 for (w
= cand
->warnings
; w
; w
= w
->next
)
5539 joust (cand
, w
->loser
, 1, complain
);
5542 /* Check for comparison of different enum types. */
5551 if (TREE_CODE (TREE_TYPE (arg1
)) == ENUMERAL_TYPE
5552 && TREE_CODE (TREE_TYPE (arg2
)) == ENUMERAL_TYPE
5553 && (TYPE_MAIN_VARIANT (TREE_TYPE (arg1
))
5554 != TYPE_MAIN_VARIANT (TREE_TYPE (arg2
)))
5555 && (complain
& tf_warning
))
5557 warning (OPT_Wenum_compare
,
5558 "comparison between %q#T and %q#T",
5559 TREE_TYPE (arg1
), TREE_TYPE (arg2
));
5566 /* We need to strip any leading REF_BIND so that bitfields
5567 don't cause errors. This should not remove any important
5568 conversions, because builtins don't apply to class
5569 objects directly. */
5570 conv
= cand
->convs
[0];
5571 if (conv
->kind
== ck_ref_bind
)
5572 conv
= next_conversion (conv
);
5573 arg1
= convert_like (conv
, arg1
, complain
);
5577 conv
= cand
->convs
[1];
5578 if (conv
->kind
== ck_ref_bind
)
5579 conv
= next_conversion (conv
);
5581 arg2
= decay_conversion (arg2
, complain
);
5583 /* We need to call warn_logical_operator before
5584 converting arg2 to a boolean_type, but after
5585 decaying an enumerator to its value. */
5586 if (complain
& tf_warning
)
5587 warn_logical_operator (loc
, code
, boolean_type_node
,
5588 code_orig_arg1
, arg1
,
5589 code_orig_arg2
, arg2
);
5591 arg2
= convert_like (conv
, arg2
, complain
);
5595 conv
= cand
->convs
[2];
5596 if (conv
->kind
== ck_ref_bind
)
5597 conv
= next_conversion (conv
);
5598 arg3
= convert_like (conv
, arg3
, complain
);
5604 user_defined_result_ready
:
5606 /* Free all the conversions we allocated. */
5607 obstack_free (&conversion_obstack
, p
);
5609 if (result
|| result_valid_p
)
5616 return cp_build_modify_expr (arg1
, code2
, arg2
, complain
);
5619 return cp_build_indirect_ref (arg1
, RO_UNARY_STAR
, complain
);
5621 case TRUTH_ANDIF_EXPR
:
5622 case TRUTH_ORIF_EXPR
:
5623 case TRUTH_AND_EXPR
:
5625 warn_logical_operator (loc
, code
, boolean_type_node
,
5626 code_orig_arg1
, arg1
, code_orig_arg2
, arg2
);
5631 case TRUNC_DIV_EXPR
:
5642 case TRUNC_MOD_EXPR
:
5646 return cp_build_binary_op (loc
, code
, arg1
, arg2
, complain
);
5648 case UNARY_PLUS_EXPR
:
5651 case TRUTH_NOT_EXPR
:
5652 case PREINCREMENT_EXPR
:
5653 case POSTINCREMENT_EXPR
:
5654 case PREDECREMENT_EXPR
:
5655 case POSTDECREMENT_EXPR
:
5659 return cp_build_unary_op (code
, arg1
, candidates
!= 0, complain
);
5662 return cp_build_array_ref (input_location
, arg1
, arg2
, complain
);
5665 return build_m_component_ref (cp_build_indirect_ref (arg1
, RO_ARROW_STAR
,
5669 /* The caller will deal with these. */
5681 /* Wrapper for above. */
5684 build_new_op (location_t loc
, enum tree_code code
, int flags
,
5685 tree arg1
, tree arg2
, tree arg3
,
5686 tree
*overload
, tsubst_flags_t complain
)
5689 bool subtime
= timevar_cond_start (TV_OVERLOAD
);
5690 ret
= build_new_op_1 (loc
, code
, flags
, arg1
, arg2
, arg3
,
5691 overload
, complain
);
5692 timevar_cond_stop (TV_OVERLOAD
, subtime
);
5696 /* Returns true iff T, an element of an OVERLOAD chain, is a usual
5697 deallocation function (3.7.4.2 [basic.stc.dynamic.deallocation]). */
5700 non_placement_deallocation_fn_p (tree t
)
5702 /* A template instance is never a usual deallocation function,
5703 regardless of its signature. */
5704 if (TREE_CODE (t
) == TEMPLATE_DECL
5705 || primary_template_instantiation_p (t
))
5708 /* If a class T has a member deallocation function named operator delete
5709 with exactly one parameter, then that function is a usual
5710 (non-placement) deallocation function. If class T does not declare
5711 such an operator delete but does declare a member deallocation
5712 function named operator delete with exactly two parameters, the second
5713 of which has type std::size_t (18.2), then this function is a usual
5714 deallocation function. */
5715 t
= FUNCTION_ARG_CHAIN (t
);
5716 if (t
== void_list_node
5717 || (t
&& same_type_p (TREE_VALUE (t
), size_type_node
)
5718 && TREE_CHAIN (t
) == void_list_node
))
5723 /* Build a call to operator delete. This has to be handled very specially,
5724 because the restrictions on what signatures match are different from all
5725 other call instances. For a normal delete, only a delete taking (void *)
5726 or (void *, size_t) is accepted. For a placement delete, only an exact
5727 match with the placement new is accepted.
5729 CODE is either DELETE_EXPR or VEC_DELETE_EXPR.
5730 ADDR is the pointer to be deleted.
5731 SIZE is the size of the memory block to be deleted.
5732 GLOBAL_P is true if the delete-expression should not consider
5733 class-specific delete operators.
5734 PLACEMENT is the corresponding placement new call, or NULL_TREE.
5736 If this call to "operator delete" is being generated as part to
5737 deallocate memory allocated via a new-expression (as per [expr.new]
5738 which requires that if the initialization throws an exception then
5739 we call a deallocation function), then ALLOC_FN is the allocation
5743 build_op_delete_call (enum tree_code code
, tree addr
, tree size
,
5744 bool global_p
, tree placement
,
5745 tree alloc_fn
, tsubst_flags_t complain
)
5747 tree fn
= NULL_TREE
;
5748 tree fns
, fnname
, type
, t
;
5750 if (addr
== error_mark_node
)
5751 return error_mark_node
;
5753 type
= strip_array_types (TREE_TYPE (TREE_TYPE (addr
)));
5755 fnname
= ansi_opname (code
);
5757 if (CLASS_TYPE_P (type
)
5758 && COMPLETE_TYPE_P (complete_type (type
))
5762 If the result of the lookup is ambiguous or inaccessible, or if
5763 the lookup selects a placement deallocation function, the
5764 program is ill-formed.
5766 Therefore, we ask lookup_fnfields to complain about ambiguity. */
5768 fns
= lookup_fnfields (TYPE_BINFO (type
), fnname
, 1);
5769 if (fns
== error_mark_node
)
5770 return error_mark_node
;
5775 if (fns
== NULL_TREE
)
5776 fns
= lookup_name_nonclass (fnname
);
5778 /* Strip const and volatile from addr. */
5779 addr
= cp_convert (ptr_type_node
, addr
, complain
);
5783 /* "A declaration of a placement deallocation function matches the
5784 declaration of a placement allocation function if it has the same
5785 number of parameters and, after parameter transformations (8.3.5),
5786 all parameter types except the first are identical."
5788 So we build up the function type we want and ask instantiate_type
5789 to get it for us. */
5790 t
= FUNCTION_ARG_CHAIN (alloc_fn
);
5791 t
= tree_cons (NULL_TREE
, ptr_type_node
, t
);
5792 t
= build_function_type (void_type_node
, t
);
5794 fn
= instantiate_type (t
, fns
, tf_none
);
5795 if (fn
== error_mark_node
)
5798 if (BASELINK_P (fn
))
5799 fn
= BASELINK_FUNCTIONS (fn
);
5801 /* "If the lookup finds the two-parameter form of a usual deallocation
5802 function (3.7.4.2) and that function, considered as a placement
5803 deallocation function, would have been selected as a match for the
5804 allocation function, the program is ill-formed." */
5805 if (non_placement_deallocation_fn_p (fn
))
5807 /* But if the class has an operator delete (void *), then that is
5808 the usual deallocation function, so we shouldn't complain
5809 about using the operator delete (void *, size_t). */
5810 for (t
= BASELINK_P (fns
) ? BASELINK_FUNCTIONS (fns
) : fns
;
5811 t
; t
= OVL_NEXT (t
))
5813 tree elt
= OVL_CURRENT (t
);
5814 if (non_placement_deallocation_fn_p (elt
)
5815 && FUNCTION_ARG_CHAIN (elt
) == void_list_node
)
5818 if (complain
& tf_error
)
5820 permerror (0, "non-placement deallocation function %q+D", fn
);
5821 permerror (input_location
, "selected for placement delete");
5824 return error_mark_node
;
5829 /* "Any non-placement deallocation function matches a non-placement
5830 allocation function. If the lookup finds a single matching
5831 deallocation function, that function will be called; otherwise, no
5832 deallocation function will be called." */
5833 for (t
= BASELINK_P (fns
) ? BASELINK_FUNCTIONS (fns
) : fns
;
5834 t
; t
= OVL_NEXT (t
))
5836 tree elt
= OVL_CURRENT (t
);
5837 if (non_placement_deallocation_fn_p (elt
))
5840 /* "If a class T has a member deallocation function named
5841 operator delete with exactly one parameter, then that
5842 function is a usual (non-placement) deallocation
5843 function. If class T does not declare such an operator
5844 delete but does declare a member deallocation function named
5845 operator delete with exactly two parameters, the second of
5846 which has type std::size_t (18.2), then this function is a
5847 usual deallocation function."
5849 So (void*) beats (void*, size_t). */
5850 if (FUNCTION_ARG_CHAIN (fn
) == void_list_node
)
5855 /* If we have a matching function, call it. */
5858 gcc_assert (TREE_CODE (fn
) == FUNCTION_DECL
);
5860 /* If the FN is a member function, make sure that it is
5862 if (BASELINK_P (fns
))
5863 perform_or_defer_access_check (BASELINK_BINFO (fns
), fn
, fn
,
5866 /* Core issue 901: It's ok to new a type with deleted delete. */
5867 if (DECL_DELETED_FN (fn
) && alloc_fn
)
5872 /* The placement args might not be suitable for overload
5873 resolution at this point, so build the call directly. */
5874 int nargs
= call_expr_nargs (placement
);
5875 tree
*argarray
= XALLOCAVEC (tree
, nargs
);
5878 for (i
= 1; i
< nargs
; i
++)
5879 argarray
[i
] = CALL_EXPR_ARG (placement
, i
);
5881 return build_cxx_call (fn
, nargs
, argarray
, complain
);
5886 vec
<tree
, va_gc
> *args
= make_tree_vector ();
5887 args
->quick_push (addr
);
5888 if (FUNCTION_ARG_CHAIN (fn
) != void_list_node
)
5889 args
->quick_push (size
);
5890 ret
= cp_build_function_call_vec (fn
, &args
, complain
);
5891 release_tree_vector (args
);
5898 If no unambiguous matching deallocation function can be found,
5899 propagating the exception does not cause the object's memory to
5903 if ((complain
& tf_warning
)
5905 warning (0, "no corresponding deallocation function for %qD",
5910 if (complain
& tf_error
)
5911 error ("no suitable %<operator %s%> for %qT",
5912 operator_name_info
[(int)code
].name
, type
);
5913 return error_mark_node
;
5916 /* If the current scope isn't allowed to access DECL along
5917 BASETYPE_PATH, give an error. The most derived class in
5918 BASETYPE_PATH is the one used to qualify DECL. DIAG_DECL is
5919 the declaration to use in the error diagnostic. */
5922 enforce_access (tree basetype_path
, tree decl
, tree diag_decl
,
5923 tsubst_flags_t complain
)
5925 gcc_assert (TREE_CODE (basetype_path
) == TREE_BINFO
);
5927 if (!accessible_p (basetype_path
, decl
, true))
5929 if (complain
& tf_error
)
5931 if (TREE_PRIVATE (decl
))
5932 error ("%q+#D is private", diag_decl
);
5933 else if (TREE_PROTECTED (decl
))
5934 error ("%q+#D is protected", diag_decl
);
5936 error ("%q+#D is inaccessible", diag_decl
);
5937 error ("within this context");
5945 /* Initialize a temporary of type TYPE with EXPR. The FLAGS are a
5946 bitwise or of LOOKUP_* values. If any errors are warnings are
5947 generated, set *DIAGNOSTIC_FN to "error" or "warning",
5948 respectively. If no diagnostics are generated, set *DIAGNOSTIC_FN
5952 build_temp (tree expr
, tree type
, int flags
,
5953 diagnostic_t
*diagnostic_kind
, tsubst_flags_t complain
)
5956 vec
<tree
, va_gc
> *args
;
5958 savew
= warningcount
+ werrorcount
, savee
= errorcount
;
5959 args
= make_tree_vector_single (expr
);
5960 expr
= build_special_member_call (NULL_TREE
, complete_ctor_identifier
,
5961 &args
, type
, flags
, complain
);
5962 release_tree_vector (args
);
5963 if (warningcount
+ werrorcount
> savew
)
5964 *diagnostic_kind
= DK_WARNING
;
5965 else if (errorcount
> savee
)
5966 *diagnostic_kind
= DK_ERROR
;
5968 *diagnostic_kind
= DK_UNSPECIFIED
;
5972 /* Perform warnings about peculiar, but valid, conversions from/to NULL.
5973 EXPR is implicitly converted to type TOTYPE.
5974 FN and ARGNUM are used for diagnostics. */
5977 conversion_null_warnings (tree totype
, tree expr
, tree fn
, int argnum
)
5979 /* Issue warnings about peculiar, but valid, uses of NULL. */
5980 if (expr
== null_node
&& TREE_CODE (totype
) != BOOLEAN_TYPE
5981 && ARITHMETIC_TYPE_P (totype
))
5983 source_location loc
=
5984 expansion_point_location_if_in_system_header (input_location
);
5987 warning_at (loc
, OPT_Wconversion_null
,
5988 "passing NULL to non-pointer argument %P of %qD",
5991 warning_at (loc
, OPT_Wconversion_null
,
5992 "converting to non-pointer type %qT from NULL", totype
);
5995 /* Issue warnings if "false" is converted to a NULL pointer */
5996 else if (TREE_CODE (TREE_TYPE (expr
)) == BOOLEAN_TYPE
5997 && TYPE_PTR_P (totype
))
6000 warning_at (input_location
, OPT_Wconversion_null
,
6001 "converting %<false%> to pointer type for argument %P "
6002 "of %qD", argnum
, fn
);
6004 warning_at (input_location
, OPT_Wconversion_null
,
6005 "converting %<false%> to pointer type %qT", totype
);
6009 /* We gave a diagnostic during a conversion. If this was in the second
6010 standard conversion sequence of a user-defined conversion sequence, say
6011 which user-defined conversion. */
6014 maybe_print_user_conv_context (conversion
*convs
)
6016 if (convs
->user_conv_p
)
6017 for (conversion
*t
= convs
; t
; t
= next_conversion (t
))
6018 if (t
->kind
== ck_user
)
6020 print_z_candidate (0, " after user-defined conversion:",
6026 /* Perform the conversions in CONVS on the expression EXPR. FN and
6027 ARGNUM are used for diagnostics. ARGNUM is zero based, -1
6028 indicates the `this' argument of a method. INNER is nonzero when
6029 being called to continue a conversion chain. It is negative when a
6030 reference binding will be applied, positive otherwise. If
6031 ISSUE_CONVERSION_WARNINGS is true, warnings about suspicious
6032 conversions will be emitted if appropriate. If C_CAST_P is true,
6033 this conversion is coming from a C-style cast; in that case,
6034 conversions to inaccessible bases are permitted. */
6037 convert_like_real (conversion
*convs
, tree expr
, tree fn
, int argnum
,
6038 int inner
, bool issue_conversion_warnings
,
6039 bool c_cast_p
, tsubst_flags_t complain
)
6041 tree totype
= convs
->type
;
6042 diagnostic_t diag_kind
;
6044 location_t loc
= EXPR_LOC_OR_LOC (expr
, input_location
);
6046 if (convs
->bad_p
&& !(complain
& tf_error
))
6047 return error_mark_node
;
6050 && convs
->kind
!= ck_user
6051 && convs
->kind
!= ck_list
6052 && convs
->kind
!= ck_ambig
6053 && (convs
->kind
!= ck_ref_bind
6054 || (convs
->user_conv_p
&& next_conversion (convs
)->bad_p
))
6055 && (convs
->kind
!= ck_rvalue
6056 || SCALAR_TYPE_P (totype
))
6057 && convs
->kind
!= ck_base
)
6059 bool complained
= false;
6060 conversion
*t
= convs
;
6062 /* Give a helpful error if this is bad because of excess braces. */
6063 if (BRACE_ENCLOSED_INITIALIZER_P (expr
)
6064 && SCALAR_TYPE_P (totype
)
6065 && CONSTRUCTOR_NELTS (expr
) > 0
6066 && BRACE_ENCLOSED_INITIALIZER_P (CONSTRUCTOR_ELT (expr
, 0)->value
))
6068 complained
= permerror (loc
, "too many braces around initializer "
6070 while (BRACE_ENCLOSED_INITIALIZER_P (expr
)
6071 && CONSTRUCTOR_NELTS (expr
) == 1)
6072 expr
= CONSTRUCTOR_ELT (expr
, 0)->value
;
6075 /* Give a helpful error if this is bad because a conversion to bool
6076 from std::nullptr_t requires direct-initialization. */
6077 if (NULLPTR_TYPE_P (TREE_TYPE (expr
))
6078 && TREE_CODE (totype
) == BOOLEAN_TYPE
)
6079 complained
= permerror (loc
, "converting to %qT from %qT requires "
6080 "direct-initialization",
6081 totype
, TREE_TYPE (expr
));
6083 for (; t
; t
= next_conversion (t
))
6085 if (t
->kind
== ck_user
&& t
->cand
->reason
)
6087 complained
= permerror (loc
, "invalid user-defined conversion "
6088 "from %qT to %qT", TREE_TYPE (expr
),
6091 print_z_candidate (loc
, "candidate is:", t
->cand
);
6092 expr
= convert_like_real (t
, expr
, fn
, argnum
, 1,
6093 /*issue_conversion_warnings=*/false,
6096 if (convs
->kind
== ck_ref_bind
)
6097 expr
= convert_to_reference (totype
, expr
, CONV_IMPLICIT
,
6098 LOOKUP_NORMAL
, NULL_TREE
,
6101 expr
= cp_convert (totype
, expr
, complain
);
6102 if (complained
&& fn
)
6103 inform (DECL_SOURCE_LOCATION (fn
),
6104 " initializing argument %P of %qD", argnum
, fn
);
6107 else if (t
->kind
== ck_user
|| !t
->bad_p
)
6109 expr
= convert_like_real (t
, expr
, fn
, argnum
, 1,
6110 /*issue_conversion_warnings=*/false,
6115 else if (t
->kind
== ck_ambig
)
6116 return convert_like_real (t
, expr
, fn
, argnum
, 1,
6117 /*issue_conversion_warnings=*/false,
6120 else if (t
->kind
== ck_identity
)
6124 complained
= permerror (loc
, "invalid conversion from %qT to %qT",
6125 TREE_TYPE (expr
), totype
);
6126 if (complained
&& fn
)
6127 inform (DECL_SOURCE_LOCATION (fn
),
6128 " initializing argument %P of %qD", argnum
, fn
);
6130 return cp_convert (totype
, expr
, complain
);
6133 if (issue_conversion_warnings
&& (complain
& tf_warning
))
6134 conversion_null_warnings (totype
, expr
, fn
, argnum
);
6136 switch (convs
->kind
)
6140 struct z_candidate
*cand
= convs
->cand
;
6141 tree convfn
= cand
->fn
;
6144 /* When converting from an init list we consider explicit
6145 constructors, but actually trying to call one is an error. */
6146 if (DECL_NONCONVERTING_P (convfn
) && DECL_CONSTRUCTOR_P (convfn
)
6147 /* Unless this is for direct-list-initialization. */
6148 && !DIRECT_LIST_INIT_P (expr
))
6150 if (!(complain
& tf_error
))
6151 return error_mark_node
;
6152 error ("converting to %qT from initializer list would use "
6153 "explicit constructor %qD", totype
, convfn
);
6156 /* If we're initializing from {}, it's value-initialization. */
6157 if (BRACE_ENCLOSED_INITIALIZER_P (expr
)
6158 && CONSTRUCTOR_NELTS (expr
) == 0
6159 && TYPE_HAS_DEFAULT_CONSTRUCTOR (totype
))
6161 bool direct
= CONSTRUCTOR_IS_DIRECT_INIT (expr
);
6162 expr
= build_value_init (totype
, complain
);
6163 expr
= get_target_expr_sfinae (expr
, complain
);
6164 if (expr
!= error_mark_node
)
6166 TARGET_EXPR_LIST_INIT_P (expr
) = true;
6167 TARGET_EXPR_DIRECT_INIT_P (expr
) = direct
;
6172 expr
= mark_rvalue_use (expr
);
6174 /* Set user_conv_p on the argument conversions, so rvalue/base
6175 handling knows not to allow any more UDCs. */
6176 for (i
= 0; i
< cand
->num_convs
; ++i
)
6177 cand
->convs
[i
]->user_conv_p
= true;
6179 expr
= build_over_call (cand
, LOOKUP_NORMAL
, complain
);
6181 /* If this is a constructor or a function returning an aggr type,
6182 we need to build up a TARGET_EXPR. */
6183 if (DECL_CONSTRUCTOR_P (convfn
))
6185 expr
= build_cplus_new (totype
, expr
, complain
);
6187 /* Remember that this was list-initialization. */
6188 if (convs
->check_narrowing
&& expr
!= error_mark_node
)
6189 TARGET_EXPR_LIST_INIT_P (expr
) = true;
6195 expr
= mark_rvalue_use (expr
);
6196 if (BRACE_ENCLOSED_INITIALIZER_P (expr
))
6198 int nelts
= CONSTRUCTOR_NELTS (expr
);
6200 expr
= build_value_init (totype
, complain
);
6201 else if (nelts
== 1)
6202 expr
= CONSTRUCTOR_ELT (expr
, 0)->value
;
6207 if (type_unknown_p (expr
))
6208 expr
= instantiate_type (totype
, expr
, complain
);
6209 /* Convert a constant to its underlying value, unless we are
6210 about to bind it to a reference, in which case we need to
6211 leave it as an lvalue. */
6214 expr
= decl_constant_value_safe (expr
);
6215 if (expr
== null_node
&& INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (totype
))
6216 /* If __null has been converted to an integer type, we do not
6217 want to warn about uses of EXPR as an integer, rather than
6219 expr
= build_int_cst (totype
, 0);
6223 /* We leave bad_p off ck_ambig because overload resolution considers
6224 it valid, it just fails when we try to perform it. So we need to
6225 check complain here, too. */
6226 if (complain
& tf_error
)
6228 /* Call build_user_type_conversion again for the error. */
6229 build_user_type_conversion (totype
, convs
->u
.expr
, LOOKUP_NORMAL
,
6232 inform (input_location
, " initializing argument %P of %q+D",
6235 return error_mark_node
;
6239 /* Conversion to std::initializer_list<T>. */
6240 tree elttype
= TREE_VEC_ELT (CLASSTYPE_TI_ARGS (totype
), 0);
6241 tree new_ctor
= build_constructor (init_list_type_node
, NULL
);
6242 unsigned len
= CONSTRUCTOR_NELTS (expr
);
6243 tree array
, val
, field
;
6244 vec
<constructor_elt
, va_gc
> *vec
= NULL
;
6247 /* Convert all the elements. */
6248 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expr
), ix
, val
)
6250 tree sub
= convert_like_real (convs
->u
.list
[ix
], val
, fn
, argnum
,
6251 1, false, false, complain
);
6252 if (sub
== error_mark_node
)
6254 if (!BRACE_ENCLOSED_INITIALIZER_P (val
))
6255 check_narrowing (TREE_TYPE (sub
), val
);
6256 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_ctor
), NULL_TREE
, sub
);
6257 if (!TREE_CONSTANT (sub
))
6258 TREE_CONSTANT (new_ctor
) = false;
6260 /* Build up the array. */
6261 elttype
= cp_build_qualified_type
6262 (elttype
, cp_type_quals (elttype
) | TYPE_QUAL_CONST
);
6263 array
= build_array_of_n_type (elttype
, len
);
6264 array
= finish_compound_literal (array
, new_ctor
, complain
);
6265 /* Take the address explicitly rather than via decay_conversion
6266 to avoid the error about taking the address of a temporary. */
6267 array
= cp_build_addr_expr (array
, complain
);
6268 array
= cp_convert (build_pointer_type (elttype
), array
, complain
);
6269 if (array
== error_mark_node
)
6270 return error_mark_node
;
6272 /* Build up the initializer_list object. */
6273 totype
= complete_type (totype
);
6274 field
= next_initializable_field (TYPE_FIELDS (totype
));
6275 CONSTRUCTOR_APPEND_ELT (vec
, field
, array
);
6276 field
= next_initializable_field (DECL_CHAIN (field
));
6277 CONSTRUCTOR_APPEND_ELT (vec
, field
, size_int (len
));
6278 new_ctor
= build_constructor (totype
, vec
);
6279 return get_target_expr_sfinae (new_ctor
, complain
);
6283 if (TREE_CODE (totype
) == COMPLEX_TYPE
)
6285 tree real
= CONSTRUCTOR_ELT (expr
, 0)->value
;
6286 tree imag
= CONSTRUCTOR_ELT (expr
, 1)->value
;
6287 real
= perform_implicit_conversion (TREE_TYPE (totype
),
6289 imag
= perform_implicit_conversion (TREE_TYPE (totype
),
6291 expr
= build2 (COMPLEX_EXPR
, totype
, real
, imag
);
6292 return fold_if_not_in_template (expr
);
6294 expr
= reshape_init (totype
, expr
, complain
);
6295 expr
= get_target_expr_sfinae (digest_init (totype
, expr
, complain
),
6297 if (expr
!= error_mark_node
)
6298 TARGET_EXPR_LIST_INIT_P (expr
) = true;
6305 expr
= convert_like_real (next_conversion (convs
), expr
, fn
, argnum
,
6306 convs
->kind
== ck_ref_bind
? -1 : 1,
6307 convs
->kind
== ck_ref_bind
? issue_conversion_warnings
: false,
6310 if (expr
== error_mark_node
)
6311 return error_mark_node
;
6313 switch (convs
->kind
)
6316 expr
= decay_conversion (expr
, complain
);
6317 if (expr
== error_mark_node
)
6318 return error_mark_node
;
6320 if (! MAYBE_CLASS_TYPE_P (totype
))
6322 /* Else fall through. */
6324 if (convs
->kind
== ck_base
&& !convs
->need_temporary_p
)
6326 /* We are going to bind a reference directly to a base-class
6327 subobject of EXPR. */
6328 /* Build an expression for `*((base*) &expr)'. */
6329 expr
= cp_build_addr_expr (expr
, complain
);
6330 expr
= convert_to_base (expr
, build_pointer_type (totype
),
6331 !c_cast_p
, /*nonnull=*/true, complain
);
6332 expr
= cp_build_indirect_ref (expr
, RO_IMPLICIT_CONVERSION
, complain
);
6336 /* Copy-initialization where the cv-unqualified version of the source
6337 type is the same class as, or a derived class of, the class of the
6338 destination [is treated as direct-initialization]. [dcl.init] */
6339 flags
= LOOKUP_NORMAL
|LOOKUP_ONLYCONVERTING
;
6340 if (convs
->user_conv_p
)
6341 /* This conversion is being done in the context of a user-defined
6342 conversion (i.e. the second step of copy-initialization), so
6343 don't allow any more. */
6344 flags
|= LOOKUP_NO_CONVERSION
;
6345 if (convs
->rvaluedness_matches_p
)
6346 flags
|= LOOKUP_PREFER_RVALUE
;
6347 if (TREE_CODE (expr
) == TARGET_EXPR
6348 && TARGET_EXPR_LIST_INIT_P (expr
))
6349 /* Copy-list-initialization doesn't actually involve a copy. */
6351 expr
= build_temp (expr
, totype
, flags
, &diag_kind
, complain
);
6352 if (diag_kind
&& complain
)
6354 maybe_print_user_conv_context (convs
);
6356 inform (DECL_SOURCE_LOCATION (fn
),
6357 " initializing argument %P of %qD", argnum
, fn
);
6360 return build_cplus_new (totype
, expr
, complain
);
6364 tree ref_type
= totype
;
6366 if (convs
->bad_p
&& !next_conversion (convs
)->bad_p
)
6368 tree extype
= TREE_TYPE (expr
);
6369 if (TYPE_REF_IS_RVALUE (ref_type
)
6370 && real_lvalue_p (expr
))
6371 error_at (loc
, "cannot bind %qT lvalue to %qT",
6373 else if (!TYPE_REF_IS_RVALUE (ref_type
) && !real_lvalue_p (expr
)
6374 && !CP_TYPE_CONST_NON_VOLATILE_P (TREE_TYPE (ref_type
)))
6375 error_at (loc
, "invalid initialization of non-const reference of "
6376 "type %qT from an rvalue of type %qT", totype
, extype
);
6377 else if (!reference_compatible_p (TREE_TYPE (totype
), extype
))
6378 error_at (loc
, "binding %qT to reference of type %qT "
6379 "discards qualifiers", extype
, totype
);
6382 maybe_print_user_conv_context (convs
);
6384 inform (input_location
,
6385 " initializing argument %P of %q+D", argnum
, fn
);
6386 return error_mark_node
;
6389 /* If necessary, create a temporary.
6391 VA_ARG_EXPR and CONSTRUCTOR expressions are special cases
6392 that need temporaries, even when their types are reference
6393 compatible with the type of reference being bound, so the
6394 upcoming call to cp_build_addr_expr doesn't fail. */
6395 if (convs
->need_temporary_p
6396 || TREE_CODE (expr
) == CONSTRUCTOR
6397 || TREE_CODE (expr
) == VA_ARG_EXPR
)
6399 /* Otherwise, a temporary of type "cv1 T1" is created and
6400 initialized from the initializer expression using the rules
6401 for a non-reference copy-initialization (8.5). */
6403 tree type
= TREE_TYPE (ref_type
);
6404 cp_lvalue_kind lvalue
= real_lvalue_p (expr
);
6406 gcc_assert (same_type_ignoring_top_level_qualifiers_p
6407 (type
, next_conversion (convs
)->type
));
6408 if (!CP_TYPE_CONST_NON_VOLATILE_P (type
)
6409 && !TYPE_REF_IS_RVALUE (ref_type
))
6411 /* If the reference is volatile or non-const, we
6412 cannot create a temporary. */
6413 if (lvalue
& clk_bitfield
)
6414 error_at (loc
, "cannot bind bitfield %qE to %qT",
6416 else if (lvalue
& clk_packed
)
6417 error_at (loc
, "cannot bind packed field %qE to %qT",
6420 error_at (loc
, "cannot bind rvalue %qE to %qT",
6422 return error_mark_node
;
6424 /* If the source is a packed field, and we must use a copy
6425 constructor, then building the target expr will require
6426 binding the field to the reference parameter to the
6427 copy constructor, and we'll end up with an infinite
6428 loop. If we can use a bitwise copy, then we'll be
6430 if ((lvalue
& clk_packed
)
6431 && CLASS_TYPE_P (type
)
6432 && type_has_nontrivial_copy_init (type
))
6434 error_at (loc
, "cannot bind packed field %qE to %qT",
6436 return error_mark_node
;
6438 if (lvalue
& clk_bitfield
)
6440 expr
= convert_bitfield_to_declared_type (expr
);
6441 expr
= fold_convert (type
, expr
);
6443 expr
= build_target_expr_with_type (expr
, type
, complain
);
6446 /* Take the address of the thing to which we will bind the
6448 expr
= cp_build_addr_expr (expr
, complain
);
6449 if (expr
== error_mark_node
)
6450 return error_mark_node
;
6452 /* Convert it to a pointer to the type referred to by the
6453 reference. This will adjust the pointer if a derived to
6454 base conversion is being performed. */
6455 expr
= cp_convert (build_pointer_type (TREE_TYPE (ref_type
)),
6457 /* Convert the pointer to the desired reference type. */
6458 return build_nop (ref_type
, expr
);
6462 return decay_conversion (expr
, complain
);
6465 /* Warn about deprecated conversion if appropriate. */
6466 string_conv_p (totype
, expr
, 1);
6471 expr
= convert_to_base (expr
, totype
, !c_cast_p
,
6472 /*nonnull=*/false, complain
);
6473 return build_nop (totype
, expr
);
6476 return convert_ptrmem (totype
, expr
, /*allow_inverse_p=*/false,
6477 c_cast_p
, complain
);
6483 if (convs
->check_narrowing
)
6484 check_narrowing (totype
, expr
);
6486 if (issue_conversion_warnings
)
6487 expr
= cp_convert_and_check (totype
, expr
, complain
);
6489 expr
= cp_convert (totype
, expr
, complain
);
6494 /* ARG is being passed to a varargs function. Perform any conversions
6495 required. Return the converted value. */
6498 convert_arg_to_ellipsis (tree arg
, tsubst_flags_t complain
)
6501 location_t loc
= EXPR_LOC_OR_LOC (arg
, input_location
);
6505 The lvalue-to-rvalue, array-to-pointer, and function-to-pointer
6506 standard conversions are performed. */
6507 arg
= decay_conversion (arg
, complain
);
6508 arg_type
= TREE_TYPE (arg
);
6511 If the argument has integral or enumeration type that is subject
6512 to the integral promotions (_conv.prom_), or a floating point
6513 type that is subject to the floating point promotion
6514 (_conv.fpprom_), the value of the argument is converted to the
6515 promoted type before the call. */
6516 if (TREE_CODE (arg_type
) == REAL_TYPE
6517 && (TYPE_PRECISION (arg_type
)
6518 < TYPE_PRECISION (double_type_node
))
6519 && !DECIMAL_FLOAT_MODE_P (TYPE_MODE (arg_type
)))
6521 if ((complain
& tf_warning
)
6522 && warn_double_promotion
&& !c_inhibit_evaluation_warnings
)
6523 warning_at (loc
, OPT_Wdouble_promotion
,
6524 "implicit conversion from %qT to %qT when passing "
6525 "argument to function",
6526 arg_type
, double_type_node
);
6527 arg
= convert_to_real (double_type_node
, arg
);
6529 else if (NULLPTR_TYPE_P (arg_type
))
6530 arg
= null_pointer_node
;
6531 else if (INTEGRAL_OR_ENUMERATION_TYPE_P (arg_type
))
6533 if (SCOPED_ENUM_P (arg_type
))
6535 tree prom
= cp_convert (ENUM_UNDERLYING_TYPE (arg_type
), arg
,
6537 prom
= cp_perform_integral_promotions (prom
, complain
);
6538 if (abi_version_crosses (6)
6539 && TYPE_MODE (TREE_TYPE (prom
)) != TYPE_MODE (arg_type
)
6540 && (complain
& tf_warning
))
6541 warning_at (loc
, OPT_Wabi
, "scoped enum %qT passed through ... as "
6542 "%qT before -fabi-version=6, %qT after", arg_type
,
6543 TREE_TYPE (prom
), ENUM_UNDERLYING_TYPE (arg_type
));
6544 if (!abi_version_at_least (6))
6548 arg
= cp_perform_integral_promotions (arg
, complain
);
6551 arg
= require_complete_type_sfinae (arg
, complain
);
6552 arg_type
= TREE_TYPE (arg
);
6554 if (arg
!= error_mark_node
6555 /* In a template (or ill-formed code), we can have an incomplete type
6556 even after require_complete_type_sfinae, in which case we don't know
6557 whether it has trivial copy or not. */
6558 && COMPLETE_TYPE_P (arg_type
))
6560 /* Build up a real lvalue-to-rvalue conversion in case the
6561 copy constructor is trivial but not callable. */
6562 if (!cp_unevaluated_operand
&& CLASS_TYPE_P (arg_type
))
6563 force_rvalue (arg
, complain
);
6565 /* [expr.call] 5.2.2/7:
6566 Passing a potentially-evaluated argument of class type (Clause 9)
6567 with a non-trivial copy constructor or a non-trivial destructor
6568 with no corresponding parameter is conditionally-supported, with
6569 implementation-defined semantics.
6571 We used to just warn here and do a bitwise copy, but now
6572 cp_expr_size will abort if we try to do that.
6574 If the call appears in the context of a sizeof expression,
6575 it is not potentially-evaluated. */
6576 if (cp_unevaluated_operand
== 0
6577 && (type_has_nontrivial_copy_init (arg_type
)
6578 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (arg_type
)))
6580 if (complain
& tf_error
)
6581 error_at (loc
, "cannot pass objects of non-trivially-copyable "
6582 "type %q#T through %<...%>", arg_type
);
6583 return error_mark_node
;
6590 /* va_arg (EXPR, TYPE) is a builtin. Make sure it is not abused. */
6593 build_x_va_arg (source_location loc
, tree expr
, tree type
)
6595 if (processing_template_decl
)
6596 return build_min (VA_ARG_EXPR
, type
, expr
);
6598 type
= complete_type_or_else (type
, NULL_TREE
);
6600 if (expr
== error_mark_node
|| !type
)
6601 return error_mark_node
;
6603 expr
= mark_lvalue_use (expr
);
6605 if (type_has_nontrivial_copy_init (type
)
6606 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type
)
6607 || TREE_CODE (type
) == REFERENCE_TYPE
)
6609 /* Remove reference types so we don't ICE later on. */
6610 tree type1
= non_reference (type
);
6611 /* conditionally-supported behavior [expr.call] 5.2.2/7. */
6612 error ("cannot receive objects of non-trivially-copyable type %q#T "
6613 "through %<...%>; ", type
);
6614 expr
= convert (build_pointer_type (type1
), null_node
);
6615 expr
= cp_build_indirect_ref (expr
, RO_NULL
, tf_warning_or_error
);
6619 return build_va_arg (loc
, expr
, type
);
6622 /* TYPE has been given to va_arg. Apply the default conversions which
6623 would have happened when passed via ellipsis. Return the promoted
6624 type, or the passed type if there is no change. */
6627 cxx_type_promotes_to (tree type
)
6631 /* Perform the array-to-pointer and function-to-pointer
6633 type
= type_decays_to (type
);
6635 promote
= type_promotes_to (type
);
6636 if (same_type_p (type
, promote
))
6642 /* ARG is a default argument expression being passed to a parameter of
6643 the indicated TYPE, which is a parameter to FN. PARMNUM is the
6644 zero-based argument number. Do any required conversions. Return
6645 the converted value. */
6647 static GTY(()) vec
<tree
, va_gc
> *default_arg_context
;
6649 push_defarg_context (tree fn
)
6650 { vec_safe_push (default_arg_context
, fn
); }
6653 pop_defarg_context (void)
6654 { default_arg_context
->pop (); }
6657 convert_default_arg (tree type
, tree arg
, tree fn
, int parmnum
,
6658 tsubst_flags_t complain
)
6663 /* See through clones. */
6664 fn
= DECL_ORIGIN (fn
);
6666 /* Detect recursion. */
6667 FOR_EACH_VEC_SAFE_ELT (default_arg_context
, i
, t
)
6670 if (complain
& tf_error
)
6671 error ("recursive evaluation of default argument for %q#D", fn
);
6672 return error_mark_node
;
6675 /* If the ARG is an unparsed default argument expression, the
6676 conversion cannot be performed. */
6677 if (TREE_CODE (arg
) == DEFAULT_ARG
)
6679 if (complain
& tf_error
)
6680 error ("call to %qD uses the default argument for parameter %P, which "
6681 "is not yet defined", fn
, parmnum
);
6682 return error_mark_node
;
6685 push_defarg_context (fn
);
6687 if (fn
&& DECL_TEMPLATE_INFO (fn
))
6688 arg
= tsubst_default_argument (fn
, type
, arg
, complain
);
6694 The names in the expression are bound, and the semantic
6695 constraints are checked, at the point where the default
6696 expressions appears.
6698 we must not perform access checks here. */
6699 push_deferring_access_checks (dk_no_check
);
6700 /* We must make a copy of ARG, in case subsequent processing
6701 alters any part of it. */
6702 arg
= break_out_target_exprs (arg
);
6703 arg
= convert_for_initialization (0, type
, arg
, LOOKUP_IMPLICIT
,
6704 ICR_DEFAULT_ARGUMENT
, fn
, parmnum
,
6706 arg
= convert_for_arg_passing (type
, arg
, complain
);
6707 pop_deferring_access_checks();
6709 pop_defarg_context ();
6714 /* Returns the type which will really be used for passing an argument of
6718 type_passed_as (tree type
)
6720 /* Pass classes with copy ctors by invisible reference. */
6721 if (TREE_ADDRESSABLE (type
))
6723 type
= build_reference_type (type
);
6724 /* There are no other pointers to this temporary. */
6725 type
= cp_build_qualified_type (type
, TYPE_QUAL_RESTRICT
);
6727 else if (targetm
.calls
.promote_prototypes (type
)
6728 && INTEGRAL_TYPE_P (type
)
6729 && COMPLETE_TYPE_P (type
)
6730 && tree_int_cst_lt (TYPE_SIZE (type
), TYPE_SIZE (integer_type_node
)))
6731 type
= integer_type_node
;
6736 /* Actually perform the appropriate conversion. */
6739 convert_for_arg_passing (tree type
, tree val
, tsubst_flags_t complain
)
6743 /* If VAL is a bitfield, then -- since it has already been converted
6744 to TYPE -- it cannot have a precision greater than TYPE.
6746 If it has a smaller precision, we must widen it here. For
6747 example, passing "int f:3;" to a function expecting an "int" will
6748 not result in any conversion before this point.
6750 If the precision is the same we must not risk widening. For
6751 example, the COMPONENT_REF for a 32-bit "long long" bitfield will
6752 often have type "int", even though the C++ type for the field is
6753 "long long". If the value is being passed to a function
6754 expecting an "int", then no conversions will be required. But,
6755 if we call convert_bitfield_to_declared_type, the bitfield will
6756 be converted to "long long". */
6757 bitfield_type
= is_bitfield_expr_with_lowered_type (val
);
6759 && TYPE_PRECISION (TREE_TYPE (val
)) < TYPE_PRECISION (type
))
6760 val
= convert_to_integer (TYPE_MAIN_VARIANT (bitfield_type
), val
);
6762 if (val
== error_mark_node
)
6764 /* Pass classes with copy ctors by invisible reference. */
6765 else if (TREE_ADDRESSABLE (type
))
6766 val
= build1 (ADDR_EXPR
, build_reference_type (type
), val
);
6767 else if (targetm
.calls
.promote_prototypes (type
)
6768 && INTEGRAL_TYPE_P (type
)
6769 && COMPLETE_TYPE_P (type
)
6770 && tree_int_cst_lt (TYPE_SIZE (type
), TYPE_SIZE (integer_type_node
)))
6771 val
= cp_perform_integral_promotions (val
, complain
);
6772 if ((complain
& tf_warning
)
6773 && warn_suggest_attribute_format
)
6775 tree rhstype
= TREE_TYPE (val
);
6776 const enum tree_code coder
= TREE_CODE (rhstype
);
6777 const enum tree_code codel
= TREE_CODE (type
);
6778 if ((codel
== POINTER_TYPE
|| codel
== REFERENCE_TYPE
)
6780 && check_missing_format_attribute (type
, rhstype
))
6781 warning (OPT_Wsuggest_attribute_format
,
6782 "argument of function call might be a candidate for a format attribute");
6787 /* Returns true iff FN is a function with magic varargs, i.e. ones for
6788 which no conversions at all should be done. This is true for some
6789 builtins which don't act like normal functions. */
6792 magic_varargs_p (tree fn
)
6794 if (flag_cilkplus
&& is_cilkplus_reduce_builtin (fn
) != BUILT_IN_NONE
)
6797 if (DECL_BUILT_IN (fn
))
6798 switch (DECL_FUNCTION_CODE (fn
))
6800 case BUILT_IN_CLASSIFY_TYPE
:
6801 case BUILT_IN_CONSTANT_P
:
6802 case BUILT_IN_NEXT_ARG
:
6803 case BUILT_IN_VA_START
:
6807 return lookup_attribute ("type generic",
6808 TYPE_ATTRIBUTES (TREE_TYPE (fn
))) != 0;
6814 /* Returns the decl of the dispatcher function if FN is a function version. */
6817 get_function_version_dispatcher (tree fn
)
6819 tree dispatcher_decl
= NULL
;
6821 gcc_assert (TREE_CODE (fn
) == FUNCTION_DECL
6822 && DECL_FUNCTION_VERSIONED (fn
));
6824 gcc_assert (targetm
.get_function_versions_dispatcher
);
6825 dispatcher_decl
= targetm
.get_function_versions_dispatcher (fn
);
6827 if (dispatcher_decl
== NULL
)
6829 error_at (input_location
, "use of multiversioned function "
6830 "without a default");
6834 retrofit_lang_decl (dispatcher_decl
);
6835 gcc_assert (dispatcher_decl
!= NULL
);
6836 return dispatcher_decl
;
6839 /* fn is a function version dispatcher that is marked used. Mark all the
6840 semantically identical function versions it will dispatch as used. */
6843 mark_versions_used (tree fn
)
6845 struct cgraph_node
*node
;
6846 struct cgraph_function_version_info
*node_v
;
6847 struct cgraph_function_version_info
*it_v
;
6849 gcc_assert (TREE_CODE (fn
) == FUNCTION_DECL
);
6851 node
= cgraph_node::get (fn
);
6855 gcc_assert (node
->dispatcher_function
);
6857 node_v
= node
->function_version ();
6861 /* All semantically identical versions are chained. Traverse and mark each
6862 one of them as used. */
6863 it_v
= node_v
->next
;
6864 while (it_v
!= NULL
)
6866 mark_used (it_v
->this_node
->decl
);
6871 /* Subroutine of the various build_*_call functions. Overload resolution
6872 has chosen a winning candidate CAND; build up a CALL_EXPR accordingly.
6873 ARGS is a TREE_LIST of the unconverted arguments to the call. FLAGS is a
6874 bitmask of various LOOKUP_* flags which apply to the call itself. */
6877 build_over_call (struct z_candidate
*cand
, int flags
, tsubst_flags_t complain
)
6880 const vec
<tree
, va_gc
> *args
= cand
->args
;
6881 tree first_arg
= cand
->first_arg
;
6882 conversion
**convs
= cand
->convs
;
6884 tree parm
= TYPE_ARG_TYPES (TREE_TYPE (fn
));
6889 unsigned int arg_index
= 0;
6893 bool already_used
= false;
6895 /* In a template, there is no need to perform all of the work that
6896 is normally done. We are only interested in the type of the call
6897 expression, i.e., the return type of the function. Any semantic
6898 errors will be deferred until the template is instantiated. */
6899 if (processing_template_decl
)
6903 const tree
*argarray
;
6906 return_type
= TREE_TYPE (TREE_TYPE (fn
));
6907 nargs
= vec_safe_length (args
);
6908 if (first_arg
== NULL_TREE
)
6909 argarray
= args
->address ();
6917 alcarray
= XALLOCAVEC (tree
, nargs
);
6918 alcarray
[0] = build_this (first_arg
);
6919 FOR_EACH_VEC_SAFE_ELT (args
, ix
, arg
)
6920 alcarray
[ix
+ 1] = arg
;
6921 argarray
= alcarray
;
6924 addr
= build_addr_func (fn
, complain
);
6925 if (addr
== error_mark_node
)
6926 return error_mark_node
;
6927 expr
= build_call_array_loc (input_location
, return_type
,
6928 addr
, nargs
, argarray
);
6929 if (TREE_THIS_VOLATILE (fn
) && cfun
)
6930 current_function_returns_abnormally
= 1;
6931 return convert_from_reference (expr
);
6934 /* Give any warnings we noticed during overload resolution. */
6935 if (cand
->warnings
&& (complain
& tf_warning
))
6937 struct candidate_warning
*w
;
6938 for (w
= cand
->warnings
; w
; w
= w
->next
)
6939 joust (cand
, w
->loser
, 1, complain
);
6942 /* Make =delete work with SFINAE. */
6943 if (DECL_DELETED_FN (fn
) && !(complain
& tf_error
))
6944 return error_mark_node
;
6946 if (DECL_FUNCTION_MEMBER_P (fn
))
6949 /* If FN is a template function, two cases must be considered.
6954 template <class T> void f();
6956 template <class T> struct B {
6960 struct C : A, B<int> {
6962 using B<int>::g; // #2
6965 In case #1 where `A::f' is a member template, DECL_ACCESS is
6966 recorded in the primary template but not in its specialization.
6967 We check access of FN using its primary template.
6969 In case #2, where `B<int>::g' has a DECL_TEMPLATE_INFO simply
6970 because it is a member of class template B, DECL_ACCESS is
6971 recorded in the specialization `B<int>::g'. We cannot use its
6972 primary template because `B<T>::g' and `B<int>::g' may have
6973 different access. */
6974 if (DECL_TEMPLATE_INFO (fn
)
6975 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (fn
)))
6976 access_fn
= DECL_TI_TEMPLATE (fn
);
6979 if (!perform_or_defer_access_check (cand
->access_path
, access_fn
,
6981 return error_mark_node
;
6984 /* If we're checking for implicit delete, don't bother with argument
6986 if (flags
& LOOKUP_SPECULATIVE
)
6988 if (DECL_DELETED_FN (fn
))
6990 if (complain
& tf_error
)
6992 return error_mark_node
;
6994 if (cand
->viable
== 1)
6996 else if (!(complain
& tf_error
))
6997 /* Reject bad conversions now. */
6998 return error_mark_node
;
6999 /* else continue to get conversion error. */
7002 /* N3276 magic doesn't apply to nested calls. */
7003 int decltype_flag
= (complain
& tf_decltype
);
7004 complain
&= ~tf_decltype
;
7006 /* Find maximum size of vector to hold converted arguments. */
7007 parmlen
= list_length (parm
);
7008 nargs
= vec_safe_length (args
) + (first_arg
!= NULL_TREE
? 1 : 0);
7009 if (parmlen
> nargs
)
7011 argarray
= XALLOCAVEC (tree
, nargs
);
7013 /* The implicit parameters to a constructor are not considered by overload
7014 resolution, and must be of the proper type. */
7015 if (DECL_CONSTRUCTOR_P (fn
))
7018 if (first_arg
!= NULL_TREE
)
7020 object_arg
= first_arg
;
7021 first_arg
= NULL_TREE
;
7025 object_arg
= (*args
)[arg_index
];
7028 argarray
[j
++] = build_this (object_arg
);
7029 parm
= TREE_CHAIN (parm
);
7030 /* We should never try to call the abstract constructor. */
7031 gcc_assert (!DECL_HAS_IN_CHARGE_PARM_P (fn
));
7033 if (DECL_HAS_VTT_PARM_P (fn
))
7035 argarray
[j
++] = (*args
)[arg_index
];
7037 parm
= TREE_CHAIN (parm
);
7040 /* Bypass access control for 'this' parameter. */
7041 else if (TREE_CODE (TREE_TYPE (fn
)) == METHOD_TYPE
)
7043 tree parmtype
= TREE_VALUE (parm
);
7044 tree arg
= build_this (first_arg
!= NULL_TREE
7046 : (*args
)[arg_index
]);
7047 tree argtype
= TREE_TYPE (arg
);
7051 if (convs
[i
]->bad_p
)
7053 if (complain
& tf_error
)
7055 if (permerror (input_location
, "passing %qT as %<this%> "
7056 "argument discards qualifiers",
7057 TREE_TYPE (argtype
)))
7058 inform (DECL_SOURCE_LOCATION (fn
), " in call to %qD", fn
);
7061 return error_mark_node
;
7064 /* See if the function member or the whole class type is declared
7065 final and the call can be devirtualized. */
7066 if (DECL_FINAL_P (fn
)
7067 || CLASSTYPE_FINAL (TYPE_METHOD_BASETYPE (TREE_TYPE (fn
))))
7068 flags
|= LOOKUP_NONVIRTUAL
;
7070 /* [class.mfct.nonstatic]: If a nonstatic member function of a class
7071 X is called for an object that is not of type X, or of a type
7072 derived from X, the behavior is undefined.
7074 So we can assume that anything passed as 'this' is non-null, and
7075 optimize accordingly. */
7076 gcc_assert (TYPE_PTR_P (parmtype
));
7077 /* Convert to the base in which the function was declared. */
7078 gcc_assert (cand
->conversion_path
!= NULL_TREE
);
7079 converted_arg
= build_base_path (PLUS_EXPR
,
7081 cand
->conversion_path
,
7083 /* Check that the base class is accessible. */
7084 if (!accessible_base_p (TREE_TYPE (argtype
),
7085 BINFO_TYPE (cand
->conversion_path
), true))
7087 if (complain
& tf_error
)
7088 error ("%qT is not an accessible base of %qT",
7089 BINFO_TYPE (cand
->conversion_path
),
7090 TREE_TYPE (argtype
));
7092 return error_mark_node
;
7094 /* If fn was found by a using declaration, the conversion path
7095 will be to the derived class, not the base declaring fn. We
7096 must convert from derived to base. */
7097 base_binfo
= lookup_base (TREE_TYPE (TREE_TYPE (converted_arg
)),
7098 TREE_TYPE (parmtype
), ba_unique
,
7100 converted_arg
= build_base_path (PLUS_EXPR
, converted_arg
,
7101 base_binfo
, 1, complain
);
7103 argarray
[j
++] = converted_arg
;
7104 parm
= TREE_CHAIN (parm
);
7105 if (first_arg
!= NULL_TREE
)
7106 first_arg
= NULL_TREE
;
7113 gcc_assert (first_arg
== NULL_TREE
);
7114 for (; arg_index
< vec_safe_length (args
) && parm
;
7115 parm
= TREE_CHAIN (parm
), ++arg_index
, ++i
)
7117 tree type
= TREE_VALUE (parm
);
7118 tree arg
= (*args
)[arg_index
];
7119 bool conversion_warning
= true;
7123 /* If the argument is NULL and used to (implicitly) instantiate a
7124 template function (and bind one of the template arguments to
7125 the type of 'long int'), we don't want to warn about passing NULL
7126 to non-pointer argument.
7127 For example, if we have this template function:
7129 template<typename T> void func(T x) {}
7131 we want to warn (when -Wconversion is enabled) in this case:
7137 but not in this case:
7143 if (arg
== null_node
7144 && DECL_TEMPLATE_INFO (fn
)
7145 && cand
->template_decl
7146 && !(flags
& LOOKUP_EXPLICIT_TMPL_ARGS
))
7147 conversion_warning
= false;
7149 /* Warn about initializer_list deduction that isn't currently in the
7151 if (cxx_dialect
> cxx98
7152 && flag_deduce_init_list
7153 && cand
->template_decl
7154 && is_std_init_list (non_reference (type
))
7155 && BRACE_ENCLOSED_INITIALIZER_P (arg
))
7157 tree tmpl
= TI_TEMPLATE (cand
->template_decl
);
7158 tree realparm
= chain_index (j
, DECL_ARGUMENTS (cand
->fn
));
7159 tree patparm
= get_pattern_parm (realparm
, tmpl
);
7160 tree pattype
= TREE_TYPE (patparm
);
7161 if (PACK_EXPANSION_P (pattype
))
7162 pattype
= PACK_EXPANSION_PATTERN (pattype
);
7163 pattype
= non_reference (pattype
);
7165 if (TREE_CODE (pattype
) == TEMPLATE_TYPE_PARM
7166 && (cand
->explicit_targs
== NULL_TREE
7167 || (TREE_VEC_LENGTH (cand
->explicit_targs
)
7168 <= TEMPLATE_TYPE_IDX (pattype
))))
7170 pedwarn (input_location
, 0, "deducing %qT as %qT",
7171 non_reference (TREE_TYPE (patparm
)),
7172 non_reference (type
));
7173 pedwarn (input_location
, 0, " in call to %q+D", cand
->fn
);
7174 pedwarn (input_location
, 0,
7175 " (you can disable this with -fno-deduce-init-list)");
7178 val
= convert_like_with_context (conv
, arg
, fn
, i
- is_method
,
7181 : complain
& (~tf_warning
));
7183 val
= convert_for_arg_passing (type
, val
, complain
);
7185 if (val
== error_mark_node
)
7186 return error_mark_node
;
7188 argarray
[j
++] = val
;
7191 /* Default arguments */
7192 for (; parm
&& parm
!= void_list_node
; parm
= TREE_CHAIN (parm
), i
++)
7194 if (TREE_VALUE (parm
) == error_mark_node
)
7195 return error_mark_node
;
7196 argarray
[j
++] = convert_default_arg (TREE_VALUE (parm
),
7197 TREE_PURPOSE (parm
),
7203 for (; arg_index
< vec_safe_length (args
); ++arg_index
)
7205 tree a
= (*args
)[arg_index
];
7206 if (magic_varargs_p (fn
))
7207 /* Do no conversions for magic varargs. */
7208 a
= mark_type_use (a
);
7210 a
= convert_arg_to_ellipsis (a
, complain
);
7214 gcc_assert (j
<= nargs
);
7217 check_function_arguments (TREE_TYPE (fn
), nargs
, argarray
);
7219 /* Avoid actually calling copy constructors and copy assignment operators,
7222 if (! flag_elide_constructors
)
7223 /* Do things the hard way. */;
7224 else if (cand
->num_convs
== 1
7225 && (DECL_COPY_CONSTRUCTOR_P (fn
)
7226 || DECL_MOVE_CONSTRUCTOR_P (fn
)))
7229 tree arg
= argarray
[num_artificial_parms_for (fn
)];
7231 bool trivial
= trivial_fn_p (fn
);
7233 /* Pull out the real argument, disregarding const-correctness. */
7235 while (CONVERT_EXPR_P (targ
)
7236 || TREE_CODE (targ
) == NON_LVALUE_EXPR
)
7237 targ
= TREE_OPERAND (targ
, 0);
7238 if (TREE_CODE (targ
) == ADDR_EXPR
)
7240 targ
= TREE_OPERAND (targ
, 0);
7241 if (!same_type_ignoring_top_level_qualifiers_p
7242 (TREE_TYPE (TREE_TYPE (arg
)), TREE_TYPE (targ
)))
7251 arg
= cp_build_indirect_ref (arg
, RO_NULL
, complain
);
7253 /* [class.copy]: the copy constructor is implicitly defined even if
7254 the implementation elided its use. */
7255 if (!trivial
|| DECL_DELETED_FN (fn
))
7258 already_used
= true;
7261 /* If we're creating a temp and we already have one, don't create a
7262 new one. If we're not creating a temp but we get one, use
7263 INIT_EXPR to collapse the temp into our target. Otherwise, if the
7264 ctor is trivial, do a bitwise copy with a simple TARGET_EXPR for a
7265 temp or an INIT_EXPR otherwise. */
7267 if (is_dummy_object (fa
))
7269 if (TREE_CODE (arg
) == TARGET_EXPR
)
7272 return force_target_expr (DECL_CONTEXT (fn
), arg
, complain
);
7274 else if (TREE_CODE (arg
) == TARGET_EXPR
|| trivial
)
7276 tree to
= stabilize_reference (cp_build_indirect_ref (fa
, RO_NULL
,
7279 val
= build2 (INIT_EXPR
, DECL_CONTEXT (fn
), to
, arg
);
7283 else if (DECL_OVERLOADED_OPERATOR_P (fn
) == NOP_EXPR
7284 && trivial_fn_p (fn
)
7285 && !DECL_DELETED_FN (fn
))
7287 tree to
= stabilize_reference
7288 (cp_build_indirect_ref (argarray
[0], RO_NULL
, complain
));
7289 tree type
= TREE_TYPE (to
);
7290 tree as_base
= CLASSTYPE_AS_BASE (type
);
7291 tree arg
= argarray
[1];
7293 if (is_really_empty_class (type
))
7295 /* Avoid copying empty classes. */
7296 val
= build2 (COMPOUND_EXPR
, void_type_node
, to
, arg
);
7297 TREE_NO_WARNING (val
) = 1;
7298 val
= build2 (COMPOUND_EXPR
, type
, val
, to
);
7299 TREE_NO_WARNING (val
) = 1;
7301 else if (tree_int_cst_equal (TYPE_SIZE (type
), TYPE_SIZE (as_base
)))
7303 arg
= cp_build_indirect_ref (arg
, RO_NULL
, complain
);
7304 val
= build2 (MODIFY_EXPR
, TREE_TYPE (to
), to
, arg
);
7308 /* We must only copy the non-tail padding parts. */
7310 tree array_type
, alias_set
;
7312 arg2
= TYPE_SIZE_UNIT (as_base
);
7313 arg0
= cp_build_addr_expr (to
, complain
);
7315 array_type
= build_array_type (char_type_node
,
7317 (size_binop (MINUS_EXPR
,
7318 arg2
, size_int (1))));
7319 alias_set
= build_int_cst (build_pointer_type (type
), 0);
7320 t
= build2 (MODIFY_EXPR
, void_type_node
,
7321 build2 (MEM_REF
, array_type
, arg0
, alias_set
),
7322 build2 (MEM_REF
, array_type
, arg
, alias_set
));
7323 val
= build2 (COMPOUND_EXPR
, TREE_TYPE (to
), t
, to
);
7324 TREE_NO_WARNING (val
) = 1;
7329 else if (DECL_DESTRUCTOR_P (fn
)
7330 && trivial_fn_p (fn
)
7331 && !DECL_DELETED_FN (fn
))
7332 return fold_convert (void_type_node
, argarray
[0]);
7333 /* FIXME handle trivial default constructor, too. */
7335 /* For calls to a multi-versioned function, overload resolution
7336 returns the function with the highest target priority, that is,
7337 the version that will checked for dispatching first. If this
7338 version is inlinable, a direct call to this version can be made
7339 otherwise the call should go through the dispatcher. */
7341 if (DECL_FUNCTION_VERSIONED (fn
)
7342 && (current_function_decl
== NULL
7343 || !targetm
.target_option
.can_inline_p (current_function_decl
, fn
)))
7345 fn
= get_function_version_dispatcher (fn
);
7349 mark_versions_used (fn
);
7354 return error_mark_node
;
7356 if (DECL_VINDEX (fn
) && (flags
& LOOKUP_NONVIRTUAL
) == 0
7357 /* Don't mess with virtual lookup in fold_non_dependent_expr; virtual
7358 functions can't be constexpr. */
7359 && !in_template_function ())
7362 tree binfo
= lookup_base (TREE_TYPE (TREE_TYPE (argarray
[0])),
7364 ba_any
, NULL
, complain
);
7365 gcc_assert (binfo
&& binfo
!= error_mark_node
);
7367 /* Warn about deprecated virtual functions now, since we're about
7368 to throw away the decl. */
7369 if (TREE_DEPRECATED (fn
))
7370 warn_deprecated_use (fn
, NULL_TREE
);
7372 argarray
[0] = build_base_path (PLUS_EXPR
, argarray
[0], binfo
, 1,
7374 if (TREE_SIDE_EFFECTS (argarray
[0]))
7375 argarray
[0] = save_expr (argarray
[0]);
7376 t
= build_pointer_type (TREE_TYPE (fn
));
7377 if (DECL_CONTEXT (fn
) && TYPE_JAVA_INTERFACE (DECL_CONTEXT (fn
)))
7378 fn
= build_java_interface_fn_ref (fn
, argarray
[0]);
7380 fn
= build_vfn_ref (argarray
[0], DECL_VINDEX (fn
));
7385 fn
= build_addr_func (fn
, complain
);
7386 if (fn
== error_mark_node
)
7387 return error_mark_node
;
7390 tree call
= build_cxx_call (fn
, nargs
, argarray
, complain
|decltype_flag
);
7391 if (TREE_CODE (call
) == CALL_EXPR
7392 && (cand
->flags
& LOOKUP_LIST_INIT_CTOR
))
7393 CALL_EXPR_LIST_INIT_P (call
) = true;
7397 /* Build and return a call to FN, using NARGS arguments in ARGARRAY.
7398 This function performs no overload resolution, conversion, or other
7399 high-level operations. */
7402 build_cxx_call (tree fn
, int nargs
, tree
*argarray
,
7403 tsubst_flags_t complain
)
7408 /* Remember roughly where this call is. */
7409 location_t loc
= EXPR_LOC_OR_LOC (fn
, input_location
);
7410 fn
= build_call_a (fn
, nargs
, argarray
);
7411 SET_EXPR_LOCATION (fn
, loc
);
7413 fndecl
= get_callee_fndecl (fn
);
7415 /* Check that arguments to builtin functions match the expectations. */
7417 && DECL_BUILT_IN (fndecl
)
7418 && DECL_BUILT_IN_CLASS (fndecl
) == BUILT_IN_NORMAL
7419 && !check_builtin_function_arguments (fndecl
, nargs
, argarray
))
7420 return error_mark_node
;
7422 /* If it is a built-in array notation function, then the return type of
7423 the function is the element type of the array passed in as array
7424 notation (i.e. the first parameter of the function). */
7425 if (flag_cilkplus
&& TREE_CODE (fn
) == CALL_EXPR
)
7427 enum built_in_function bif
=
7428 is_cilkplus_reduce_builtin (CALL_EXPR_FN (fn
));
7429 if (bif
== BUILT_IN_CILKPLUS_SEC_REDUCE_ADD
7430 || bif
== BUILT_IN_CILKPLUS_SEC_REDUCE_MUL
7431 || bif
== BUILT_IN_CILKPLUS_SEC_REDUCE_MAX
7432 || bif
== BUILT_IN_CILKPLUS_SEC_REDUCE_MIN
7433 || bif
== BUILT_IN_CILKPLUS_SEC_REDUCE
7434 || bif
== BUILT_IN_CILKPLUS_SEC_REDUCE_MUTATING
)
7436 if (call_expr_nargs (fn
) == 0)
7438 error_at (EXPR_LOCATION (fn
), "Invalid builtin arguments");
7439 return error_mark_node
;
7441 /* for bif == BUILT_IN_CILKPLUS_SEC_REDUCE_ALL_ZERO or
7442 BUILT_IN_CILKPLUS_SEC_REDUCE_ANY_ZERO or
7443 BUILT_IN_CILKPLUS_SEC_REDUCE_ANY_NONZERO or
7444 BUILT_IN_CILKPLUS_SEC_REDUCE_ALL_NONZERO or
7445 BUILT_IN_CILKPLUS_SEC_REDUCE_MIN_IND or
7446 BUILT_IN_CILKPLUS_SEC_REDUCE_MAX_IND
7447 The pre-defined return-type is the correct one. */
7448 tree array_ntn
= CALL_EXPR_ARG (fn
, 0);
7449 TREE_TYPE (fn
) = TREE_TYPE (array_ntn
);
7454 /* Some built-in function calls will be evaluated at compile-time in
7455 fold (). Set optimize to 1 when folding __builtin_constant_p inside
7456 a constexpr function so that fold_builtin_1 doesn't fold it to 0. */
7457 optimize_sav
= optimize
;
7458 if (!optimize
&& fndecl
&& DECL_IS_BUILTIN_CONSTANT_P (fndecl
)
7459 && current_function_decl
7460 && DECL_DECLARED_CONSTEXPR_P (current_function_decl
))
7462 fn
= fold_if_not_in_template (fn
);
7463 optimize
= optimize_sav
;
7465 if (VOID_TYPE_P (TREE_TYPE (fn
)))
7468 /* 5.2.2/11: If a function call is a prvalue of object type: if the
7469 function call is either the operand of a decltype-specifier or the
7470 right operand of a comma operator that is the operand of a
7471 decltype-specifier, a temporary object is not introduced for the
7472 prvalue. The type of the prvalue may be incomplete. */
7473 if (!(complain
& tf_decltype
))
7475 fn
= require_complete_type_sfinae (fn
, complain
);
7476 if (fn
== error_mark_node
)
7477 return error_mark_node
;
7479 if (MAYBE_CLASS_TYPE_P (TREE_TYPE (fn
)))
7480 fn
= build_cplus_new (TREE_TYPE (fn
), fn
, complain
);
7482 return convert_from_reference (fn
);
7485 static GTY(()) tree java_iface_lookup_fn
;
7487 /* Make an expression which yields the address of the Java interface
7488 method FN. This is achieved by generating a call to libjava's
7489 _Jv_LookupInterfaceMethodIdx(). */
7492 build_java_interface_fn_ref (tree fn
, tree instance
)
7494 tree lookup_fn
, method
, idx
;
7495 tree klass_ref
, iface
, iface_ref
;
7498 if (!java_iface_lookup_fn
)
7500 tree ftype
= build_function_type_list (ptr_type_node
,
7501 ptr_type_node
, ptr_type_node
,
7502 java_int_type_node
, NULL_TREE
);
7503 java_iface_lookup_fn
7504 = add_builtin_function ("_Jv_LookupInterfaceMethodIdx", ftype
,
7505 0, NOT_BUILT_IN
, NULL
, NULL_TREE
);
7508 /* Look up the pointer to the runtime java.lang.Class object for `instance'.
7509 This is the first entry in the vtable. */
7510 klass_ref
= build_vtbl_ref (cp_build_indirect_ref (instance
, RO_NULL
,
7511 tf_warning_or_error
),
7514 /* Get the java.lang.Class pointer for the interface being called. */
7515 iface
= DECL_CONTEXT (fn
);
7516 iface_ref
= lookup_field (iface
, get_identifier ("class$"), 0, false);
7517 if (!iface_ref
|| !VAR_P (iface_ref
)
7518 || DECL_CONTEXT (iface_ref
) != iface
)
7520 error ("could not find class$ field in java interface type %qT",
7522 return error_mark_node
;
7524 iface_ref
= build_address (iface_ref
);
7525 iface_ref
= convert (build_pointer_type (iface
), iface_ref
);
7527 /* Determine the itable index of FN. */
7529 for (method
= TYPE_METHODS (iface
); method
; method
= DECL_CHAIN (method
))
7531 if (!DECL_VIRTUAL_P (method
))
7537 idx
= build_int_cst (NULL_TREE
, i
);
7539 lookup_fn
= build1 (ADDR_EXPR
,
7540 build_pointer_type (TREE_TYPE (java_iface_lookup_fn
)),
7541 java_iface_lookup_fn
);
7542 return build_call_nary (ptr_type_node
, lookup_fn
,
7543 3, klass_ref
, iface_ref
, idx
);
7546 /* Returns the value to use for the in-charge parameter when making a
7547 call to a function with the indicated NAME.
7549 FIXME:Can't we find a neater way to do this mapping? */
7552 in_charge_arg_for_name (tree name
)
7554 if (name
== base_ctor_identifier
7555 || name
== base_dtor_identifier
)
7556 return integer_zero_node
;
7557 else if (name
== complete_ctor_identifier
)
7558 return integer_one_node
;
7559 else if (name
== complete_dtor_identifier
)
7560 return integer_two_node
;
7561 else if (name
== deleting_dtor_identifier
)
7562 return integer_three_node
;
7564 /* This function should only be called with one of the names listed
7570 /* Build a call to a constructor, destructor, or an assignment
7571 operator for INSTANCE, an expression with class type. NAME
7572 indicates the special member function to call; *ARGS are the
7573 arguments. ARGS may be NULL. This may change ARGS. BINFO
7574 indicates the base of INSTANCE that is to be passed as the `this'
7575 parameter to the member function called.
7577 FLAGS are the LOOKUP_* flags to use when processing the call.
7579 If NAME indicates a complete object constructor, INSTANCE may be
7580 NULL_TREE. In this case, the caller will call build_cplus_new to
7581 store the newly constructed object into a VAR_DECL. */
7584 build_special_member_call (tree instance
, tree name
, vec
<tree
, va_gc
> **args
,
7585 tree binfo
, int flags
, tsubst_flags_t complain
)
7588 /* The type of the subobject to be constructed or destroyed. */
7590 vec
<tree
, va_gc
> *allocated
= NULL
;
7593 gcc_assert (name
== complete_ctor_identifier
7594 || name
== base_ctor_identifier
7595 || name
== complete_dtor_identifier
7596 || name
== base_dtor_identifier
7597 || name
== deleting_dtor_identifier
7598 || name
== ansi_assopname (NOP_EXPR
));
7601 /* Resolve the name. */
7602 if (!complete_type_or_maybe_complain (binfo
, NULL_TREE
, complain
))
7603 return error_mark_node
;
7605 binfo
= TYPE_BINFO (binfo
);
7608 gcc_assert (binfo
!= NULL_TREE
);
7610 class_type
= BINFO_TYPE (binfo
);
7612 /* Handle the special case where INSTANCE is NULL_TREE. */
7613 if (name
== complete_ctor_identifier
&& !instance
)
7614 instance
= build_dummy_object (class_type
);
7617 if (name
== complete_dtor_identifier
7618 || name
== base_dtor_identifier
7619 || name
== deleting_dtor_identifier
)
7620 gcc_assert (args
== NULL
|| vec_safe_is_empty (*args
));
7622 /* Convert to the base class, if necessary. */
7623 if (!same_type_ignoring_top_level_qualifiers_p
7624 (TREE_TYPE (instance
), BINFO_TYPE (binfo
)))
7626 if (name
!= ansi_assopname (NOP_EXPR
))
7627 /* For constructors and destructors, either the base is
7628 non-virtual, or it is virtual but we are doing the
7629 conversion from a constructor or destructor for the
7630 complete object. In either case, we can convert
7632 instance
= convert_to_base_statically (instance
, binfo
);
7634 /* However, for assignment operators, we must convert
7635 dynamically if the base is virtual. */
7636 instance
= build_base_path (PLUS_EXPR
, instance
,
7637 binfo
, /*nonnull=*/1, complain
);
7641 gcc_assert (instance
!= NULL_TREE
);
7643 fns
= lookup_fnfields (binfo
, name
, 1);
7645 /* When making a call to a constructor or destructor for a subobject
7646 that uses virtual base classes, pass down a pointer to a VTT for
7648 if ((name
== base_ctor_identifier
7649 || name
== base_dtor_identifier
)
7650 && CLASSTYPE_VBASECLASSES (class_type
))
7655 /* If the current function is a complete object constructor
7656 or destructor, then we fetch the VTT directly.
7657 Otherwise, we look it up using the VTT we were given. */
7658 vtt
= DECL_CHAIN (CLASSTYPE_VTABLES (current_class_type
));
7659 vtt
= decay_conversion (vtt
, complain
);
7660 if (vtt
== error_mark_node
)
7661 return error_mark_node
;
7662 vtt
= build3 (COND_EXPR
, TREE_TYPE (vtt
),
7663 build2 (EQ_EXPR
, boolean_type_node
,
7664 current_in_charge_parm
, integer_zero_node
),
7667 if (BINFO_SUBVTT_INDEX (binfo
))
7668 sub_vtt
= fold_build_pointer_plus (vtt
, BINFO_SUBVTT_INDEX (binfo
));
7674 allocated
= make_tree_vector ();
7678 vec_safe_insert (*args
, 0, sub_vtt
);
7681 ret
= build_new_method_call (instance
, fns
, args
,
7682 TYPE_BINFO (BINFO_TYPE (binfo
)),
7686 if (allocated
!= NULL
)
7687 release_tree_vector (allocated
);
7689 if ((complain
& tf_error
)
7690 && (flags
& LOOKUP_DELEGATING_CONS
)
7691 && name
== complete_ctor_identifier
7692 && TREE_CODE (ret
) == CALL_EXPR
7693 && (DECL_ABSTRACT_ORIGIN (TREE_OPERAND (CALL_EXPR_FN (ret
), 0))
7694 == current_function_decl
))
7695 error ("constructor delegates to itself");
7700 /* Return the NAME, as a C string. The NAME indicates a function that
7701 is a member of TYPE. *FREE_P is set to true if the caller must
7702 free the memory returned.
7704 Rather than go through all of this, we should simply set the names
7705 of constructors and destructors appropriately, and dispense with
7706 ctor_identifier, dtor_identifier, etc. */
7709 name_as_c_string (tree name
, tree type
, bool *free_p
)
7713 /* Assume that we will not allocate memory. */
7715 /* Constructors and destructors are special. */
7716 if (IDENTIFIER_CTOR_OR_DTOR_P (name
))
7719 = CONST_CAST (char *, identifier_to_locale (IDENTIFIER_POINTER (constructor_name (type
))));
7720 /* For a destructor, add the '~'. */
7721 if (name
== complete_dtor_identifier
7722 || name
== base_dtor_identifier
7723 || name
== deleting_dtor_identifier
)
7725 pretty_name
= concat ("~", pretty_name
, NULL
);
7726 /* Remember that we need to free the memory allocated. */
7730 else if (IDENTIFIER_TYPENAME_P (name
))
7732 pretty_name
= concat ("operator ",
7733 type_as_string_translate (TREE_TYPE (name
),
7734 TFF_PLAIN_IDENTIFIER
),
7736 /* Remember that we need to free the memory allocated. */
7740 pretty_name
= CONST_CAST (char *, identifier_to_locale (IDENTIFIER_POINTER (name
)));
7745 /* Build a call to "INSTANCE.FN (ARGS)". If FN_P is non-NULL, it will
7746 be set, upon return, to the function called. ARGS may be NULL.
7747 This may change ARGS. */
7750 build_new_method_call_1 (tree instance
, tree fns
, vec
<tree
, va_gc
> **args
,
7751 tree conversion_path
, int flags
,
7752 tree
*fn_p
, tsubst_flags_t complain
)
7754 struct z_candidate
*candidates
= 0, *cand
;
7755 tree explicit_targs
= NULL_TREE
;
7756 tree basetype
= NULL_TREE
;
7757 tree access_binfo
, binfo
;
7759 tree first_mem_arg
= NULL_TREE
;
7761 bool skip_first_for_error
;
7762 vec
<tree
, va_gc
> *user_args
;
7765 int template_only
= 0;
7769 vec
<tree
, va_gc
> *orig_args
= NULL
;
7772 gcc_assert (instance
!= NULL_TREE
);
7774 /* We don't know what function we're going to call, yet. */
7778 if (error_operand_p (instance
)
7779 || !fns
|| error_operand_p (fns
))
7780 return error_mark_node
;
7782 if (!BASELINK_P (fns
))
7784 if (complain
& tf_error
)
7785 error ("call to non-function %qD", fns
);
7786 return error_mark_node
;
7789 orig_instance
= instance
;
7792 /* Dismantle the baselink to collect all the information we need. */
7793 if (!conversion_path
)
7794 conversion_path
= BASELINK_BINFO (fns
);
7795 access_binfo
= BASELINK_ACCESS_BINFO (fns
);
7796 binfo
= BASELINK_BINFO (fns
);
7797 optype
= BASELINK_OPTYPE (fns
);
7798 fns
= BASELINK_FUNCTIONS (fns
);
7799 if (TREE_CODE (fns
) == TEMPLATE_ID_EXPR
)
7801 explicit_targs
= TREE_OPERAND (fns
, 1);
7802 fns
= TREE_OPERAND (fns
, 0);
7805 gcc_assert (TREE_CODE (fns
) == FUNCTION_DECL
7806 || TREE_CODE (fns
) == TEMPLATE_DECL
7807 || TREE_CODE (fns
) == OVERLOAD
);
7808 fn
= get_first_fn (fns
);
7809 name
= DECL_NAME (fn
);
7811 basetype
= TYPE_MAIN_VARIANT (TREE_TYPE (instance
));
7812 gcc_assert (CLASS_TYPE_P (basetype
));
7814 if (processing_template_decl
)
7816 orig_args
= args
== NULL
? NULL
: make_tree_vector_copy (*args
);
7817 instance
= build_non_dependent_expr (instance
);
7819 make_args_non_dependent (*args
);
7822 user_args
= args
== NULL
? NULL
: *args
;
7823 /* Under DR 147 A::A() is an invalid constructor call,
7824 not a functional cast. */
7825 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (fn
))
7827 if (! (complain
& tf_error
))
7828 return error_mark_node
;
7830 if (permerror (input_location
,
7831 "cannot call constructor %<%T::%D%> directly",
7833 inform (input_location
, "for a function-style cast, remove the "
7834 "redundant %<::%D%>", name
);
7835 call
= build_functional_cast (basetype
, build_tree_list_vec (user_args
),
7840 /* Figure out whether to skip the first argument for the error
7841 message we will display to users if an error occurs. We don't
7842 want to display any compiler-generated arguments. The "this"
7843 pointer hasn't been added yet. However, we must remove the VTT
7844 pointer if this is a call to a base-class constructor or
7846 skip_first_for_error
= false;
7847 if (IDENTIFIER_CTOR_OR_DTOR_P (name
))
7849 /* Callers should explicitly indicate whether they want to construct
7850 the complete object or just the part without virtual bases. */
7851 gcc_assert (name
!= ctor_identifier
);
7852 /* Similarly for destructors. */
7853 gcc_assert (name
!= dtor_identifier
);
7854 /* Remove the VTT pointer, if present. */
7855 if ((name
== base_ctor_identifier
|| name
== base_dtor_identifier
)
7856 && CLASSTYPE_VBASECLASSES (basetype
))
7857 skip_first_for_error
= true;
7860 /* Process the argument list. */
7861 if (args
!= NULL
&& *args
!= NULL
)
7863 *args
= resolve_args (*args
, complain
);
7865 return error_mark_node
;
7868 /* Consider the object argument to be used even if we end up selecting a
7869 static member function. */
7870 instance
= mark_type_use (instance
);
7872 /* It's OK to call destructors and constructors on cv-qualified objects.
7873 Therefore, convert the INSTANCE to the unqualified type, if
7875 if (DECL_DESTRUCTOR_P (fn
)
7876 || DECL_CONSTRUCTOR_P (fn
))
7878 if (!same_type_p (basetype
, TREE_TYPE (instance
)))
7880 instance
= build_this (instance
);
7881 instance
= build_nop (build_pointer_type (basetype
), instance
);
7882 instance
= build_fold_indirect_ref (instance
);
7885 if (DECL_DESTRUCTOR_P (fn
))
7886 name
= complete_dtor_identifier
;
7888 /* For the overload resolution we need to find the actual `this`
7889 that would be captured if the call turns out to be to a
7890 non-static member function. Do not actually capture it at this
7892 first_mem_arg
= maybe_resolve_dummy (instance
, false);
7894 /* Get the high-water mark for the CONVERSION_OBSTACK. */
7895 p
= conversion_obstack_alloc (0);
7897 /* If CONSTRUCTOR_IS_DIRECT_INIT is set, this was a T{ } form
7898 initializer, not T({ }). */
7899 if (DECL_CONSTRUCTOR_P (fn
) && args
!= NULL
&& !vec_safe_is_empty (*args
)
7900 && DIRECT_LIST_INIT_P ((**args
)[0]))
7902 tree init_list
= (**args
)[0];
7903 tree init
= NULL_TREE
;
7905 gcc_assert ((*args
)->length () == 1
7906 && !(flags
& LOOKUP_ONLYCONVERTING
));
7908 /* If the initializer list has no elements and T is a class type with
7909 a default constructor, the object is value-initialized. Handle
7910 this here so we don't need to handle it wherever we use
7911 build_special_member_call. */
7912 if (CONSTRUCTOR_NELTS (init_list
) == 0
7913 && TYPE_HAS_DEFAULT_CONSTRUCTOR (basetype
)
7914 /* For a user-provided default constructor, use the normal
7915 mechanisms so that protected access works. */
7916 && !type_has_user_provided_default_constructor (basetype
)
7917 && !processing_template_decl
)
7918 init
= build_value_init (basetype
, complain
);
7920 /* If BASETYPE is an aggregate, we need to do aggregate
7922 else if (CP_AGGREGATE_TYPE_P (basetype
))
7923 init
= digest_init (basetype
, init_list
, complain
);
7927 if (is_dummy_object (instance
))
7928 return get_target_expr_sfinae (init
, complain
);
7929 init
= build2 (INIT_EXPR
, TREE_TYPE (instance
), instance
, init
);
7930 TREE_SIDE_EFFECTS (init
) = true;
7934 /* Otherwise go ahead with overload resolution. */
7935 add_list_candidates (fns
, first_mem_arg
, init_list
,
7936 basetype
, explicit_targs
, template_only
,
7937 conversion_path
, access_binfo
, flags
,
7938 &candidates
, complain
);
7942 add_candidates (fns
, first_mem_arg
, user_args
, optype
,
7943 explicit_targs
, template_only
, conversion_path
,
7944 access_binfo
, flags
, &candidates
, complain
);
7946 any_viable_p
= false;
7947 candidates
= splice_viable (candidates
, false, &any_viable_p
);
7951 if (complain
& tf_error
)
7953 if (!COMPLETE_OR_OPEN_TYPE_P (basetype
))
7954 cxx_incomplete_type_error (instance
, basetype
);
7956 error ("no matching function for call to %<%T::operator %T(%A)%#V%>",
7957 basetype
, optype
, build_tree_list_vec (user_args
),
7958 TREE_TYPE (instance
));
7965 pretty_name
= name_as_c_string (name
, basetype
, &free_p
);
7966 arglist
= build_tree_list_vec (user_args
);
7967 if (skip_first_for_error
)
7968 arglist
= TREE_CHAIN (arglist
);
7969 error ("no matching function for call to %<%T::%s(%A)%#V%>",
7970 basetype
, pretty_name
, arglist
,
7971 TREE_TYPE (instance
));
7975 print_z_candidates (location_of (name
), candidates
);
7977 call
= error_mark_node
;
7981 cand
= tourney (candidates
, complain
);
7988 if (complain
& tf_error
)
7990 pretty_name
= name_as_c_string (name
, basetype
, &free_p
);
7991 arglist
= build_tree_list_vec (user_args
);
7992 if (skip_first_for_error
)
7993 arglist
= TREE_CHAIN (arglist
);
7994 if (!any_strictly_viable (candidates
))
7995 error ("no matching function for call to %<%s(%A)%>",
7996 pretty_name
, arglist
);
7998 error ("call of overloaded %<%s(%A)%> is ambiguous",
7999 pretty_name
, arglist
);
8000 print_z_candidates (location_of (name
), candidates
);
8004 call
= error_mark_node
;
8011 if (!(flags
& LOOKUP_NONVIRTUAL
)
8012 && DECL_PURE_VIRTUAL_P (fn
)
8013 && instance
== current_class_ref
8014 && (complain
& tf_warning
))
8016 /* This is not an error, it is runtime undefined
8018 if (!current_function_decl
)
8019 warning (0, "pure virtual %q#D called from "
8020 "non-static data member initializer", fn
);
8021 else if (DECL_CONSTRUCTOR_P (current_function_decl
)
8022 || DECL_DESTRUCTOR_P (current_function_decl
))
8023 warning (0, (DECL_CONSTRUCTOR_P (current_function_decl
)
8024 ? "pure virtual %q#D called from constructor"
8025 : "pure virtual %q#D called from destructor"),
8029 if (TREE_CODE (TREE_TYPE (fn
)) == METHOD_TYPE
8030 && !DECL_CONSTRUCTOR_P (fn
)
8031 && is_dummy_object (instance
))
8033 instance
= maybe_resolve_dummy (instance
, true);
8034 if (instance
== error_mark_node
)
8035 call
= error_mark_node
;
8036 else if (!is_dummy_object (instance
))
8038 /* We captured 'this' in the current lambda now that
8039 we know we really need it. */
8040 cand
->first_arg
= instance
;
8044 if (complain
& tf_error
)
8045 error ("cannot call member function %qD without object",
8047 call
= error_mark_node
;
8051 if (call
!= error_mark_node
)
8053 /* Optimize away vtable lookup if we know that this
8054 function can't be overridden. We need to check if
8055 the context and the type where we found fn are the same,
8056 actually FN might be defined in a different class
8057 type because of a using-declaration. In this case, we
8058 do not want to perform a non-virtual call. */
8059 if (DECL_VINDEX (fn
) && ! (flags
& LOOKUP_NONVIRTUAL
)
8060 && same_type_ignoring_top_level_qualifiers_p
8061 (DECL_CONTEXT (fn
), BINFO_TYPE (binfo
))
8062 && resolves_to_fixed_type_p (instance
, 0))
8063 flags
|= LOOKUP_NONVIRTUAL
;
8065 flags
|= LOOKUP_EXPLICIT_TMPL_ARGS
;
8066 /* Now we know what function is being called. */
8069 /* Build the actual CALL_EXPR. */
8070 call
= build_over_call (cand
, flags
, complain
);
8071 /* In an expression of the form `a->f()' where `f' turns
8072 out to be a static member function, `a' is
8073 none-the-less evaluated. */
8074 if (TREE_CODE (TREE_TYPE (fn
)) != METHOD_TYPE
8075 && !is_dummy_object (instance
)
8076 && TREE_SIDE_EFFECTS (instance
))
8077 call
= build2 (COMPOUND_EXPR
, TREE_TYPE (call
),
8079 else if (call
!= error_mark_node
8080 && DECL_DESTRUCTOR_P (cand
->fn
)
8081 && !VOID_TYPE_P (TREE_TYPE (call
)))
8082 /* An explicit call of the form "x->~X()" has type
8083 "void". However, on platforms where destructors
8084 return "this" (i.e., those where
8085 targetm.cxx.cdtor_returns_this is true), such calls
8086 will appear to have a return value of pointer type
8087 to the low-level call machinery. We do not want to
8088 change the low-level machinery, since we want to be
8089 able to optimize "delete f()" on such platforms as
8090 "operator delete(~X(f()))" (rather than generating
8091 "t = f(), ~X(t), operator delete (t)"). */
8092 call
= build_nop (void_type_node
, call
);
8097 if (processing_template_decl
&& call
!= error_mark_node
)
8099 bool cast_to_void
= false;
8101 if (TREE_CODE (call
) == COMPOUND_EXPR
)
8102 call
= TREE_OPERAND (call
, 1);
8103 else if (TREE_CODE (call
) == NOP_EXPR
)
8105 cast_to_void
= true;
8106 call
= TREE_OPERAND (call
, 0);
8108 if (INDIRECT_REF_P (call
))
8109 call
= TREE_OPERAND (call
, 0);
8110 call
= (build_min_non_dep_call_vec
8112 build_min (COMPONENT_REF
, TREE_TYPE (CALL_EXPR_FN (call
)),
8113 orig_instance
, orig_fns
, NULL_TREE
),
8115 SET_EXPR_LOCATION (call
, input_location
);
8116 call
= convert_from_reference (call
);
8118 call
= build_nop (void_type_node
, call
);
8121 /* Free all the conversions we allocated. */
8122 obstack_free (&conversion_obstack
, p
);
8124 if (orig_args
!= NULL
)
8125 release_tree_vector (orig_args
);
8130 /* Wrapper for above. */
8133 build_new_method_call (tree instance
, tree fns
, vec
<tree
, va_gc
> **args
,
8134 tree conversion_path
, int flags
,
8135 tree
*fn_p
, tsubst_flags_t complain
)
8138 bool subtime
= timevar_cond_start (TV_OVERLOAD
);
8139 ret
= build_new_method_call_1 (instance
, fns
, args
, conversion_path
, flags
,
8141 timevar_cond_stop (TV_OVERLOAD
, subtime
);
8145 /* Returns true iff standard conversion sequence ICS1 is a proper
8146 subsequence of ICS2. */
8149 is_subseq (conversion
*ics1
, conversion
*ics2
)
8151 /* We can assume that a conversion of the same code
8152 between the same types indicates a subsequence since we only get
8153 here if the types we are converting from are the same. */
8155 while (ics1
->kind
== ck_rvalue
8156 || ics1
->kind
== ck_lvalue
)
8157 ics1
= next_conversion (ics1
);
8161 while (ics2
->kind
== ck_rvalue
8162 || ics2
->kind
== ck_lvalue
)
8163 ics2
= next_conversion (ics2
);
8165 if (ics2
->kind
== ck_user
8166 || ics2
->kind
== ck_ambig
8167 || ics2
->kind
== ck_aggr
8168 || ics2
->kind
== ck_list
8169 || ics2
->kind
== ck_identity
)
8170 /* At this point, ICS1 cannot be a proper subsequence of
8171 ICS2. We can get a USER_CONV when we are comparing the
8172 second standard conversion sequence of two user conversion
8176 ics2
= next_conversion (ics2
);
8178 if (ics2
->kind
== ics1
->kind
8179 && same_type_p (ics2
->type
, ics1
->type
)
8180 && same_type_p (next_conversion (ics2
)->type
,
8181 next_conversion (ics1
)->type
))
8186 /* Returns nonzero iff DERIVED is derived from BASE. The inputs may
8187 be any _TYPE nodes. */
8190 is_properly_derived_from (tree derived
, tree base
)
8192 if (!CLASS_TYPE_P (derived
) || !CLASS_TYPE_P (base
))
8195 /* We only allow proper derivation here. The DERIVED_FROM_P macro
8196 considers every class derived from itself. */
8197 return (!same_type_ignoring_top_level_qualifiers_p (derived
, base
)
8198 && DERIVED_FROM_P (base
, derived
));
8201 /* We build the ICS for an implicit object parameter as a pointer
8202 conversion sequence. However, such a sequence should be compared
8203 as if it were a reference conversion sequence. If ICS is the
8204 implicit conversion sequence for an implicit object parameter,
8205 modify it accordingly. */
8208 maybe_handle_implicit_object (conversion
**ics
)
8212 /* [over.match.funcs]
8214 For non-static member functions, the type of the
8215 implicit object parameter is "reference to cv X"
8216 where X is the class of which the function is a
8217 member and cv is the cv-qualification on the member
8218 function declaration. */
8219 conversion
*t
= *ics
;
8220 tree reference_type
;
8222 /* The `this' parameter is a pointer to a class type. Make the
8223 implicit conversion talk about a reference to that same class
8225 reference_type
= TREE_TYPE (t
->type
);
8226 reference_type
= build_reference_type (reference_type
);
8228 if (t
->kind
== ck_qual
)
8229 t
= next_conversion (t
);
8230 if (t
->kind
== ck_ptr
)
8231 t
= next_conversion (t
);
8232 t
= build_identity_conv (TREE_TYPE (t
->type
), NULL_TREE
);
8233 t
= direct_reference_binding (reference_type
, t
);
8235 t
->rvaluedness_matches_p
= 0;
8240 /* If *ICS is a REF_BIND set *ICS to the remainder of the conversion,
8241 and return the initial reference binding conversion. Otherwise,
8242 leave *ICS unchanged and return NULL. */
8245 maybe_handle_ref_bind (conversion
**ics
)
8247 if ((*ics
)->kind
== ck_ref_bind
)
8249 conversion
*old_ics
= *ics
;
8250 *ics
= next_conversion (old_ics
);
8251 (*ics
)->user_conv_p
= old_ics
->user_conv_p
;
8258 /* Compare two implicit conversion sequences according to the rules set out in
8259 [over.ics.rank]. Return values:
8261 1: ics1 is better than ics2
8262 -1: ics2 is better than ics1
8263 0: ics1 and ics2 are indistinguishable */
8266 compare_ics (conversion
*ics1
, conversion
*ics2
)
8272 tree deref_from_type1
= NULL_TREE
;
8273 tree deref_from_type2
= NULL_TREE
;
8274 tree deref_to_type1
= NULL_TREE
;
8275 tree deref_to_type2
= NULL_TREE
;
8276 conversion_rank rank1
, rank2
;
8278 /* REF_BINDING is nonzero if the result of the conversion sequence
8279 is a reference type. In that case REF_CONV is the reference
8280 binding conversion. */
8281 conversion
*ref_conv1
;
8282 conversion
*ref_conv2
;
8284 /* Compare badness before stripping the reference conversion. */
8285 if (ics1
->bad_p
> ics2
->bad_p
)
8287 else if (ics1
->bad_p
< ics2
->bad_p
)
8290 /* Handle implicit object parameters. */
8291 maybe_handle_implicit_object (&ics1
);
8292 maybe_handle_implicit_object (&ics2
);
8294 /* Handle reference parameters. */
8295 ref_conv1
= maybe_handle_ref_bind (&ics1
);
8296 ref_conv2
= maybe_handle_ref_bind (&ics2
);
8298 /* List-initialization sequence L1 is a better conversion sequence than
8299 list-initialization sequence L2 if L1 converts to
8300 std::initializer_list<X> for some X and L2 does not. */
8301 if (ics1
->kind
== ck_list
&& ics2
->kind
!= ck_list
)
8303 if (ics2
->kind
== ck_list
&& ics1
->kind
!= ck_list
)
8308 When comparing the basic forms of implicit conversion sequences (as
8309 defined in _over.best.ics_)
8311 --a standard conversion sequence (_over.ics.scs_) is a better
8312 conversion sequence than a user-defined conversion sequence
8313 or an ellipsis conversion sequence, and
8315 --a user-defined conversion sequence (_over.ics.user_) is a
8316 better conversion sequence than an ellipsis conversion sequence
8317 (_over.ics.ellipsis_). */
8318 /* Use BAD_CONVERSION_RANK because we already checked for a badness
8319 mismatch. If both ICS are bad, we try to make a decision based on
8320 what would have happened if they'd been good. This is not an
8321 extension, we'll still give an error when we build up the call; this
8322 just helps us give a more helpful error message. */
8323 rank1
= BAD_CONVERSION_RANK (ics1
);
8324 rank2
= BAD_CONVERSION_RANK (ics2
);
8328 else if (rank1
< rank2
)
8331 if (ics1
->ellipsis_p
)
8332 /* Both conversions are ellipsis conversions. */
8335 /* User-defined conversion sequence U1 is a better conversion sequence
8336 than another user-defined conversion sequence U2 if they contain the
8337 same user-defined conversion operator or constructor and if the sec-
8338 ond standard conversion sequence of U1 is better than the second
8339 standard conversion sequence of U2. */
8341 /* Handle list-conversion with the same code even though it isn't always
8342 ranked as a user-defined conversion and it doesn't have a second
8343 standard conversion sequence; it will still have the desired effect.
8344 Specifically, we need to do the reference binding comparison at the
8345 end of this function. */
8347 if (ics1
->user_conv_p
|| ics1
->kind
== ck_list
|| ics1
->kind
== ck_aggr
)
8352 for (t1
= ics1
; t1
->kind
!= ck_user
; t1
= next_conversion (t1
))
8353 if (t1
->kind
== ck_ambig
|| t1
->kind
== ck_aggr
8354 || t1
->kind
== ck_list
)
8356 for (t2
= ics2
; t2
->kind
!= ck_user
; t2
= next_conversion (t2
))
8357 if (t2
->kind
== ck_ambig
|| t2
->kind
== ck_aggr
8358 || t2
->kind
== ck_list
)
8361 if (t1
->kind
!= t2
->kind
)
8363 else if (t1
->kind
== ck_user
)
8365 if (t1
->cand
->fn
!= t2
->cand
->fn
)
8370 /* For ambiguous or aggregate conversions, use the target type as
8371 a proxy for the conversion function. */
8372 if (!same_type_ignoring_top_level_qualifiers_p (t1
->type
, t2
->type
))
8376 /* We can just fall through here, after setting up
8377 FROM_TYPE1 and FROM_TYPE2. */
8378 from_type1
= t1
->type
;
8379 from_type2
= t2
->type
;
8386 /* We're dealing with two standard conversion sequences.
8390 Standard conversion sequence S1 is a better conversion
8391 sequence than standard conversion sequence S2 if
8393 --S1 is a proper subsequence of S2 (comparing the conversion
8394 sequences in the canonical form defined by _over.ics.scs_,
8395 excluding any Lvalue Transformation; the identity
8396 conversion sequence is considered to be a subsequence of
8397 any non-identity conversion sequence */
8400 while (t1
->kind
!= ck_identity
)
8401 t1
= next_conversion (t1
);
8402 from_type1
= t1
->type
;
8405 while (t2
->kind
!= ck_identity
)
8406 t2
= next_conversion (t2
);
8407 from_type2
= t2
->type
;
8410 /* One sequence can only be a subsequence of the other if they start with
8411 the same type. They can start with different types when comparing the
8412 second standard conversion sequence in two user-defined conversion
8414 if (same_type_p (from_type1
, from_type2
))
8416 if (is_subseq (ics1
, ics2
))
8418 if (is_subseq (ics2
, ics1
))
8426 --the rank of S1 is better than the rank of S2 (by the rules
8429 Standard conversion sequences are ordered by their ranks: an Exact
8430 Match is a better conversion than a Promotion, which is a better
8431 conversion than a Conversion.
8433 Two conversion sequences with the same rank are indistinguishable
8434 unless one of the following rules applies:
8436 --A conversion that does not a convert a pointer, pointer to member,
8437 or std::nullptr_t to bool is better than one that does.
8439 The ICS_STD_RANK automatically handles the pointer-to-bool rule,
8440 so that we do not have to check it explicitly. */
8441 if (ics1
->rank
< ics2
->rank
)
8443 else if (ics2
->rank
< ics1
->rank
)
8446 to_type1
= ics1
->type
;
8447 to_type2
= ics2
->type
;
8449 /* A conversion from scalar arithmetic type to complex is worse than a
8450 conversion between scalar arithmetic types. */
8451 if (same_type_p (from_type1
, from_type2
)
8452 && ARITHMETIC_TYPE_P (from_type1
)
8453 && ARITHMETIC_TYPE_P (to_type1
)
8454 && ARITHMETIC_TYPE_P (to_type2
)
8455 && ((TREE_CODE (to_type1
) == COMPLEX_TYPE
)
8456 != (TREE_CODE (to_type2
) == COMPLEX_TYPE
)))
8458 if (TREE_CODE (to_type1
) == COMPLEX_TYPE
)
8464 if (TYPE_PTR_P (from_type1
)
8465 && TYPE_PTR_P (from_type2
)
8466 && TYPE_PTR_P (to_type1
)
8467 && TYPE_PTR_P (to_type2
))
8469 deref_from_type1
= TREE_TYPE (from_type1
);
8470 deref_from_type2
= TREE_TYPE (from_type2
);
8471 deref_to_type1
= TREE_TYPE (to_type1
);
8472 deref_to_type2
= TREE_TYPE (to_type2
);
8474 /* The rules for pointers to members A::* are just like the rules
8475 for pointers A*, except opposite: if B is derived from A then
8476 A::* converts to B::*, not vice versa. For that reason, we
8477 switch the from_ and to_ variables here. */
8478 else if ((TYPE_PTRDATAMEM_P (from_type1
) && TYPE_PTRDATAMEM_P (from_type2
)
8479 && TYPE_PTRDATAMEM_P (to_type1
) && TYPE_PTRDATAMEM_P (to_type2
))
8480 || (TYPE_PTRMEMFUNC_P (from_type1
)
8481 && TYPE_PTRMEMFUNC_P (from_type2
)
8482 && TYPE_PTRMEMFUNC_P (to_type1
)
8483 && TYPE_PTRMEMFUNC_P (to_type2
)))
8485 deref_to_type1
= TYPE_PTRMEM_CLASS_TYPE (from_type1
);
8486 deref_to_type2
= TYPE_PTRMEM_CLASS_TYPE (from_type2
);
8487 deref_from_type1
= TYPE_PTRMEM_CLASS_TYPE (to_type1
);
8488 deref_from_type2
= TYPE_PTRMEM_CLASS_TYPE (to_type2
);
8491 if (deref_from_type1
!= NULL_TREE
8492 && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_from_type1
))
8493 && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_from_type2
)))
8495 /* This was one of the pointer or pointer-like conversions.
8499 --If class B is derived directly or indirectly from class A,
8500 conversion of B* to A* is better than conversion of B* to
8501 void*, and conversion of A* to void* is better than
8502 conversion of B* to void*. */
8503 if (VOID_TYPE_P (deref_to_type1
)
8504 && VOID_TYPE_P (deref_to_type2
))
8506 if (is_properly_derived_from (deref_from_type1
,
8509 else if (is_properly_derived_from (deref_from_type2
,
8513 else if (VOID_TYPE_P (deref_to_type1
)
8514 || VOID_TYPE_P (deref_to_type2
))
8516 if (same_type_p (deref_from_type1
, deref_from_type2
))
8518 if (VOID_TYPE_P (deref_to_type2
))
8520 if (is_properly_derived_from (deref_from_type1
,
8524 /* We know that DEREF_TO_TYPE1 is `void' here. */
8525 else if (is_properly_derived_from (deref_from_type1
,
8530 else if (RECORD_OR_UNION_CODE_P (TREE_CODE (deref_to_type1
))
8531 && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_to_type2
)))
8535 --If class B is derived directly or indirectly from class A
8536 and class C is derived directly or indirectly from B,
8538 --conversion of C* to B* is better than conversion of C* to
8541 --conversion of B* to A* is better than conversion of C* to
8543 if (same_type_p (deref_from_type1
, deref_from_type2
))
8545 if (is_properly_derived_from (deref_to_type1
,
8548 else if (is_properly_derived_from (deref_to_type2
,
8552 else if (same_type_p (deref_to_type1
, deref_to_type2
))
8554 if (is_properly_derived_from (deref_from_type2
,
8557 else if (is_properly_derived_from (deref_from_type1
,
8563 else if (CLASS_TYPE_P (non_reference (from_type1
))
8564 && same_type_p (from_type1
, from_type2
))
8566 tree from
= non_reference (from_type1
);
8570 --binding of an expression of type C to a reference of type
8571 B& is better than binding an expression of type C to a
8572 reference of type A&
8574 --conversion of C to B is better than conversion of C to A, */
8575 if (is_properly_derived_from (from
, to_type1
)
8576 && is_properly_derived_from (from
, to_type2
))
8578 if (is_properly_derived_from (to_type1
, to_type2
))
8580 else if (is_properly_derived_from (to_type2
, to_type1
))
8584 else if (CLASS_TYPE_P (non_reference (to_type1
))
8585 && same_type_p (to_type1
, to_type2
))
8587 tree to
= non_reference (to_type1
);
8591 --binding of an expression of type B to a reference of type
8592 A& is better than binding an expression of type C to a
8593 reference of type A&,
8595 --conversion of B to A is better than conversion of C to A */
8596 if (is_properly_derived_from (from_type1
, to
)
8597 && is_properly_derived_from (from_type2
, to
))
8599 if (is_properly_derived_from (from_type2
, from_type1
))
8601 else if (is_properly_derived_from (from_type1
, from_type2
))
8608 --S1 and S2 differ only in their qualification conversion and yield
8609 similar types T1 and T2 (_conv.qual_), respectively, and the cv-
8610 qualification signature of type T1 is a proper subset of the cv-
8611 qualification signature of type T2 */
8612 if (ics1
->kind
== ck_qual
8613 && ics2
->kind
== ck_qual
8614 && same_type_p (from_type1
, from_type2
))
8616 int result
= comp_cv_qual_signature (to_type1
, to_type2
);
8623 --S1 and S2 are reference bindings (_dcl.init.ref_) and neither refers
8624 to an implicit object parameter of a non-static member function
8625 declared without a ref-qualifier, and either S1 binds an lvalue
8626 reference to an lvalue and S2 binds an rvalue reference or S1 binds an
8627 rvalue reference to an rvalue and S2 binds an lvalue reference (C++0x
8628 draft standard, 13.3.3.2)
8630 --S1 and S2 are reference bindings (_dcl.init.ref_), and the
8631 types to which the references refer are the same type except for
8632 top-level cv-qualifiers, and the type to which the reference
8633 initialized by S2 refers is more cv-qualified than the type to
8634 which the reference initialized by S1 refers.
8636 DR 1328 [over.match.best]: the context is an initialization by
8637 conversion function for direct reference binding (13.3.1.6) of a
8638 reference to function type, the return type of F1 is the same kind of
8639 reference (i.e. lvalue or rvalue) as the reference being initialized,
8640 and the return type of F2 is not. */
8642 if (ref_conv1
&& ref_conv2
)
8644 if (!ref_conv1
->this_p
&& !ref_conv2
->this_p
8645 && (ref_conv1
->rvaluedness_matches_p
8646 != ref_conv2
->rvaluedness_matches_p
)
8647 && (same_type_p (ref_conv1
->type
, ref_conv2
->type
)
8648 || (TYPE_REF_IS_RVALUE (ref_conv1
->type
)
8649 != TYPE_REF_IS_RVALUE (ref_conv2
->type
))))
8651 if (ref_conv1
->bad_p
8652 && !same_type_p (TREE_TYPE (ref_conv1
->type
),
8653 TREE_TYPE (ref_conv2
->type
)))
8654 /* Don't prefer a bad conversion that drops cv-quals to a bad
8655 conversion with the wrong rvalueness. */
8657 return (ref_conv1
->rvaluedness_matches_p
8658 - ref_conv2
->rvaluedness_matches_p
);
8661 if (same_type_ignoring_top_level_qualifiers_p (to_type1
, to_type2
))
8663 int q1
= cp_type_quals (TREE_TYPE (ref_conv1
->type
));
8664 int q2
= cp_type_quals (TREE_TYPE (ref_conv2
->type
));
8665 if (ref_conv1
->bad_p
)
8667 /* Prefer the one that drops fewer cv-quals. */
8668 tree ftype
= next_conversion (ref_conv1
)->type
;
8669 int fquals
= cp_type_quals (ftype
);
8673 return comp_cv_qualification (q2
, q1
);
8677 /* Neither conversion sequence is better than the other. */
8681 /* The source type for this standard conversion sequence. */
8684 source_type (conversion
*t
)
8686 for (;; t
= next_conversion (t
))
8688 if (t
->kind
== ck_user
8689 || t
->kind
== ck_ambig
8690 || t
->kind
== ck_identity
)
8696 /* Note a warning about preferring WINNER to LOSER. We do this by storing
8697 a pointer to LOSER and re-running joust to produce the warning if WINNER
8698 is actually used. */
8701 add_warning (struct z_candidate
*winner
, struct z_candidate
*loser
)
8703 candidate_warning
*cw
= (candidate_warning
*)
8704 conversion_obstack_alloc (sizeof (candidate_warning
));
8706 cw
->next
= winner
->warnings
;
8707 winner
->warnings
= cw
;
8710 /* Compare two candidates for overloading as described in
8711 [over.match.best]. Return values:
8713 1: cand1 is better than cand2
8714 -1: cand2 is better than cand1
8715 0: cand1 and cand2 are indistinguishable */
8718 joust (struct z_candidate
*cand1
, struct z_candidate
*cand2
, bool warn
,
8719 tsubst_flags_t complain
)
8722 int off1
= 0, off2
= 0;
8726 /* Candidates that involve bad conversions are always worse than those
8728 if (cand1
->viable
> cand2
->viable
)
8730 if (cand1
->viable
< cand2
->viable
)
8733 /* If we have two pseudo-candidates for conversions to the same type,
8734 or two candidates for the same function, arbitrarily pick one. */
8735 if (cand1
->fn
== cand2
->fn
8736 && (IS_TYPE_OR_DECL_P (cand1
->fn
)))
8739 /* Prefer a non-deleted function over an implicitly deleted move
8740 constructor or assignment operator. This differs slightly from the
8741 wording for issue 1402 (which says the move op is ignored by overload
8742 resolution), but this way produces better error messages. */
8743 if (TREE_CODE (cand1
->fn
) == FUNCTION_DECL
8744 && TREE_CODE (cand2
->fn
) == FUNCTION_DECL
8745 && DECL_DELETED_FN (cand1
->fn
) != DECL_DELETED_FN (cand2
->fn
))
8747 if (DECL_DELETED_FN (cand1
->fn
) && DECL_DEFAULTED_FN (cand1
->fn
)
8748 && move_fn_p (cand1
->fn
))
8750 if (DECL_DELETED_FN (cand2
->fn
) && DECL_DEFAULTED_FN (cand2
->fn
)
8751 && move_fn_p (cand2
->fn
))
8755 /* a viable function F1
8756 is defined to be a better function than another viable function F2 if
8757 for all arguments i, ICSi(F1) is not a worse conversion sequence than
8758 ICSi(F2), and then */
8760 /* for some argument j, ICSj(F1) is a better conversion sequence than
8763 /* For comparing static and non-static member functions, we ignore
8764 the implicit object parameter of the non-static function. The
8765 standard says to pretend that the static function has an object
8766 parm, but that won't work with operator overloading. */
8767 len
= cand1
->num_convs
;
8768 if (len
!= cand2
->num_convs
)
8770 int static_1
= DECL_STATIC_FUNCTION_P (cand1
->fn
);
8771 int static_2
= DECL_STATIC_FUNCTION_P (cand2
->fn
);
8773 if (DECL_CONSTRUCTOR_P (cand1
->fn
)
8774 && is_list_ctor (cand1
->fn
) != is_list_ctor (cand2
->fn
))
8775 /* We're comparing a near-match list constructor and a near-match
8776 non-list constructor. Just treat them as unordered. */
8779 gcc_assert (static_1
!= static_2
);
8790 for (i
= 0; i
< len
; ++i
)
8792 conversion
*t1
= cand1
->convs
[i
+ off1
];
8793 conversion
*t2
= cand2
->convs
[i
+ off2
];
8794 int comp
= compare_ics (t1
, t2
);
8798 if ((complain
& tf_warning
)
8800 && (CONVERSION_RANK (t1
) + CONVERSION_RANK (t2
)
8801 == cr_std
+ cr_promotion
)
8802 && t1
->kind
== ck_std
8803 && t2
->kind
== ck_std
8804 && TREE_CODE (t1
->type
) == INTEGER_TYPE
8805 && TREE_CODE (t2
->type
) == INTEGER_TYPE
8806 && (TYPE_PRECISION (t1
->type
)
8807 == TYPE_PRECISION (t2
->type
))
8808 && (TYPE_UNSIGNED (next_conversion (t1
)->type
)
8809 || (TREE_CODE (next_conversion (t1
)->type
)
8812 tree type
= next_conversion (t1
)->type
;
8814 struct z_candidate
*w
, *l
;
8816 type1
= t1
->type
, type2
= t2
->type
,
8817 w
= cand1
, l
= cand2
;
8819 type1
= t2
->type
, type2
= t1
->type
,
8820 w
= cand2
, l
= cand1
;
8824 warning (OPT_Wsign_promo
, "passing %qT chooses %qT over %qT",
8825 type
, type1
, type2
);
8826 warning (OPT_Wsign_promo
, " in call to %qD", w
->fn
);
8832 if (winner
&& comp
!= winner
)
8841 /* warn about confusing overload resolution for user-defined conversions,
8842 either between a constructor and a conversion op, or between two
8844 if ((complain
& tf_warning
)
8845 && winner
&& warn_conversion
&& cand1
->second_conv
8846 && (!DECL_CONSTRUCTOR_P (cand1
->fn
) || !DECL_CONSTRUCTOR_P (cand2
->fn
))
8847 && winner
!= compare_ics (cand1
->second_conv
, cand2
->second_conv
))
8849 struct z_candidate
*w
, *l
;
8850 bool give_warning
= false;
8853 w
= cand1
, l
= cand2
;
8855 w
= cand2
, l
= cand1
;
8857 /* We don't want to complain about `X::operator T1 ()'
8858 beating `X::operator T2 () const', when T2 is a no less
8859 cv-qualified version of T1. */
8860 if (DECL_CONTEXT (w
->fn
) == DECL_CONTEXT (l
->fn
)
8861 && !DECL_CONSTRUCTOR_P (w
->fn
) && !DECL_CONSTRUCTOR_P (l
->fn
))
8863 tree t
= TREE_TYPE (TREE_TYPE (l
->fn
));
8864 tree f
= TREE_TYPE (TREE_TYPE (w
->fn
));
8866 if (TREE_CODE (t
) == TREE_CODE (f
) && POINTER_TYPE_P (t
))
8871 if (!comp_ptr_ttypes (t
, f
))
8872 give_warning
= true;
8875 give_warning
= true;
8881 tree source
= source_type (w
->convs
[0]);
8882 if (! DECL_CONSTRUCTOR_P (w
->fn
))
8883 source
= TREE_TYPE (source
);
8884 if (warning (OPT_Wconversion
, "choosing %qD over %qD", w
->fn
, l
->fn
)
8885 && warning (OPT_Wconversion
, " for conversion from %qT to %qT",
8886 source
, w
->second_conv
->type
))
8888 inform (input_location
, " because conversion sequence for the argument is better");
8898 /* DR 495 moved this tiebreaker above the template ones. */
8900 the context is an initialization by user-defined conversion (see
8901 _dcl.init_ and _over.match.user_) and the standard conversion
8902 sequence from the return type of F1 to the destination type (i.e.,
8903 the type of the entity being initialized) is a better conversion
8904 sequence than the standard conversion sequence from the return type
8905 of F2 to the destination type. */
8907 if (cand1
->second_conv
)
8909 winner
= compare_ics (cand1
->second_conv
, cand2
->second_conv
);
8915 F1 is a non-template function and F2 is a template function
8918 if (!cand1
->template_decl
&& cand2
->template_decl
)
8920 else if (cand1
->template_decl
&& !cand2
->template_decl
)
8924 F1 and F2 are template functions and the function template for F1 is
8925 more specialized than the template for F2 according to the partial
8928 if (cand1
->template_decl
&& cand2
->template_decl
)
8930 winner
= more_specialized_fn
8931 (TI_TEMPLATE (cand1
->template_decl
),
8932 TI_TEMPLATE (cand2
->template_decl
),
8933 /* [temp.func.order]: The presence of unused ellipsis and default
8934 arguments has no effect on the partial ordering of function
8935 templates. add_function_candidate() will not have
8936 counted the "this" argument for constructors. */
8937 cand1
->num_convs
+ DECL_CONSTRUCTOR_P (cand1
->fn
));
8942 /* Check whether we can discard a builtin candidate, either because we
8943 have two identical ones or matching builtin and non-builtin candidates.
8945 (Pedantically in the latter case the builtin which matched the user
8946 function should not be added to the overload set, but we spot it here.
8949 ... the builtin candidates include ...
8950 - do not have the same parameter type list as any non-template
8951 non-member candidate. */
8953 if (identifier_p (cand1
->fn
) || identifier_p (cand2
->fn
))
8955 for (i
= 0; i
< len
; ++i
)
8956 if (!same_type_p (cand1
->convs
[i
]->type
,
8957 cand2
->convs
[i
]->type
))
8959 if (i
== cand1
->num_convs
)
8961 if (cand1
->fn
== cand2
->fn
)
8962 /* Two built-in candidates; arbitrarily pick one. */
8964 else if (identifier_p (cand1
->fn
))
8965 /* cand1 is built-in; prefer cand2. */
8968 /* cand2 is built-in; prefer cand1. */
8973 /* For candidates of a multi-versioned function, make the version with
8974 the highest priority win. This version will be checked for dispatching
8975 first. If this version can be inlined into the caller, the front-end
8976 will simply make a direct call to this function. */
8978 if (TREE_CODE (cand1
->fn
) == FUNCTION_DECL
8979 && DECL_FUNCTION_VERSIONED (cand1
->fn
)
8980 && TREE_CODE (cand2
->fn
) == FUNCTION_DECL
8981 && DECL_FUNCTION_VERSIONED (cand2
->fn
))
8983 tree f1
= TREE_TYPE (cand1
->fn
);
8984 tree f2
= TREE_TYPE (cand2
->fn
);
8985 tree p1
= TYPE_ARG_TYPES (f1
);
8986 tree p2
= TYPE_ARG_TYPES (f2
);
8988 /* Check if cand1->fn and cand2->fn are versions of the same function. It
8989 is possible that cand1->fn and cand2->fn are function versions but of
8990 different functions. Check types to see if they are versions of the same
8992 if (compparms (p1
, p2
)
8993 && same_type_p (TREE_TYPE (f1
), TREE_TYPE (f2
)))
8995 /* Always make the version with the higher priority, more
8996 specialized, win. */
8997 gcc_assert (targetm
.compare_version_priority
);
8998 if (targetm
.compare_version_priority (cand1
->fn
, cand2
->fn
) >= 0)
9005 /* If the two function declarations represent the same function (this can
9006 happen with declarations in multiple scopes and arg-dependent lookup),
9007 arbitrarily choose one. But first make sure the default args we're
9009 if (DECL_P (cand1
->fn
) && DECL_P (cand2
->fn
)
9010 && equal_functions (cand1
->fn
, cand2
->fn
))
9012 tree parms1
= TYPE_ARG_TYPES (TREE_TYPE (cand1
->fn
));
9013 tree parms2
= TYPE_ARG_TYPES (TREE_TYPE (cand2
->fn
));
9015 gcc_assert (!DECL_CONSTRUCTOR_P (cand1
->fn
));
9017 for (i
= 0; i
< len
; ++i
)
9019 /* Don't crash if the fn is variadic. */
9022 parms1
= TREE_CHAIN (parms1
);
9023 parms2
= TREE_CHAIN (parms2
);
9027 parms1
= TREE_CHAIN (parms1
);
9029 parms2
= TREE_CHAIN (parms2
);
9033 if (!cp_tree_equal (TREE_PURPOSE (parms1
),
9034 TREE_PURPOSE (parms2
)))
9038 if (complain
& tf_error
)
9040 if (permerror (input_location
,
9041 "default argument mismatch in "
9042 "overload resolution"))
9044 inform (input_location
,
9045 " candidate 1: %q+#F", cand1
->fn
);
9046 inform (input_location
,
9047 " candidate 2: %q+#F", cand2
->fn
);
9054 add_warning (cand1
, cand2
);
9057 parms1
= TREE_CHAIN (parms1
);
9058 parms2
= TREE_CHAIN (parms2
);
9066 /* Extension: If the worst conversion for one candidate is worse than the
9067 worst conversion for the other, take the first. */
9068 if (!pedantic
&& (complain
& tf_warning_or_error
))
9070 conversion_rank rank1
= cr_identity
, rank2
= cr_identity
;
9071 struct z_candidate
*w
= 0, *l
= 0;
9073 for (i
= 0; i
< len
; ++i
)
9075 if (CONVERSION_RANK (cand1
->convs
[i
+off1
]) > rank1
)
9076 rank1
= CONVERSION_RANK (cand1
->convs
[i
+off1
]);
9077 if (CONVERSION_RANK (cand2
->convs
[i
+ off2
]) > rank2
)
9078 rank2
= CONVERSION_RANK (cand2
->convs
[i
+ off2
]);
9081 winner
= 1, w
= cand1
, l
= cand2
;
9083 winner
= -1, w
= cand2
, l
= cand1
;
9086 /* Don't choose a deleted function over ambiguity. */
9087 if (DECL_P (w
->fn
) && DECL_DELETED_FN (w
->fn
))
9091 pedwarn (input_location
, 0,
9092 "ISO C++ says that these are ambiguous, even "
9093 "though the worst conversion for the first is better than "
9094 "the worst conversion for the second:");
9095 print_z_candidate (input_location
, _("candidate 1:"), w
);
9096 print_z_candidate (input_location
, _("candidate 2:"), l
);
9104 gcc_assert (!winner
);
9108 /* Given a list of candidates for overloading, find the best one, if any.
9109 This algorithm has a worst case of O(2n) (winner is last), and a best
9110 case of O(n/2) (totally ambiguous); much better than a sorting
9113 static struct z_candidate
*
9114 tourney (struct z_candidate
*candidates
, tsubst_flags_t complain
)
9116 struct z_candidate
*champ
= candidates
, *challenger
;
9118 int champ_compared_to_predecessor
= 0;
9120 /* Walk through the list once, comparing each current champ to the next
9121 candidate, knocking out a candidate or two with each comparison. */
9123 for (challenger
= champ
->next
; challenger
; )
9125 fate
= joust (champ
, challenger
, 0, complain
);
9127 challenger
= challenger
->next
;
9132 champ
= challenger
->next
;
9135 champ_compared_to_predecessor
= 0;
9140 champ_compared_to_predecessor
= 1;
9143 challenger
= champ
->next
;
9147 /* Make sure the champ is better than all the candidates it hasn't yet
9148 been compared to. */
9150 for (challenger
= candidates
;
9152 && !(champ_compared_to_predecessor
&& challenger
->next
== champ
);
9153 challenger
= challenger
->next
)
9155 fate
= joust (champ
, challenger
, 0, complain
);
9163 /* Returns nonzero if things of type FROM can be converted to TO. */
9166 can_convert (tree to
, tree from
, tsubst_flags_t complain
)
9168 tree arg
= NULL_TREE
;
9169 /* implicit_conversion only considers user-defined conversions
9170 if it has an expression for the call argument list. */
9171 if (CLASS_TYPE_P (from
) || CLASS_TYPE_P (to
))
9172 arg
= build1 (CAST_EXPR
, from
, NULL_TREE
);
9173 return can_convert_arg (to
, from
, arg
, LOOKUP_IMPLICIT
, complain
);
9176 /* Returns nonzero if things of type FROM can be converted to TO with a
9177 standard conversion. */
9180 can_convert_standard (tree to
, tree from
, tsubst_flags_t complain
)
9182 return can_convert_arg (to
, from
, NULL_TREE
, LOOKUP_IMPLICIT
, complain
);
9185 /* Returns nonzero if ARG (of type FROM) can be converted to TO. */
9188 can_convert_arg (tree to
, tree from
, tree arg
, int flags
,
9189 tsubst_flags_t complain
)
9195 /* Get the high-water mark for the CONVERSION_OBSTACK. */
9196 p
= conversion_obstack_alloc (0);
9197 /* We want to discard any access checks done for this test,
9198 as we might not be in the appropriate access context and
9199 we'll do the check again when we actually perform the
9201 push_deferring_access_checks (dk_deferred
);
9203 t
= implicit_conversion (to
, from
, arg
, /*c_cast_p=*/false,
9205 ok_p
= (t
&& !t
->bad_p
);
9207 /* Discard the access checks now. */
9208 pop_deferring_access_checks ();
9209 /* Free all the conversions we allocated. */
9210 obstack_free (&conversion_obstack
, p
);
9215 /* Like can_convert_arg, but allows dubious conversions as well. */
9218 can_convert_arg_bad (tree to
, tree from
, tree arg
, int flags
,
9219 tsubst_flags_t complain
)
9224 /* Get the high-water mark for the CONVERSION_OBSTACK. */
9225 p
= conversion_obstack_alloc (0);
9226 /* Try to perform the conversion. */
9227 t
= implicit_conversion (to
, from
, arg
, /*c_cast_p=*/false,
9229 /* Free all the conversions we allocated. */
9230 obstack_free (&conversion_obstack
, p
);
9235 /* Convert EXPR to TYPE. Return the converted expression.
9237 Note that we allow bad conversions here because by the time we get to
9238 this point we are committed to doing the conversion. If we end up
9239 doing a bad conversion, convert_like will complain. */
9242 perform_implicit_conversion_flags (tree type
, tree expr
,
9243 tsubst_flags_t complain
, int flags
)
9247 location_t loc
= EXPR_LOC_OR_LOC (expr
, input_location
);
9249 if (error_operand_p (expr
))
9250 return error_mark_node
;
9252 /* Get the high-water mark for the CONVERSION_OBSTACK. */
9253 p
= conversion_obstack_alloc (0);
9255 conv
= implicit_conversion (type
, TREE_TYPE (expr
), expr
,
9261 if (complain
& tf_error
)
9263 /* If expr has unknown type, then it is an overloaded function.
9264 Call instantiate_type to get good error messages. */
9265 if (TREE_TYPE (expr
) == unknown_type_node
)
9266 instantiate_type (type
, expr
, complain
);
9267 else if (invalid_nonstatic_memfn_p (expr
, complain
))
9268 /* We gave an error. */;
9270 error_at (loc
, "could not convert %qE from %qT to %qT", expr
,
9271 TREE_TYPE (expr
), type
);
9273 expr
= error_mark_node
;
9275 else if (processing_template_decl
&& conv
->kind
!= ck_identity
)
9277 /* In a template, we are only concerned about determining the
9278 type of non-dependent expressions, so we do not have to
9279 perform the actual conversion. But for initializers, we
9280 need to be able to perform it at instantiation
9281 (or fold_non_dependent_expr) time. */
9282 expr
= build1 (IMPLICIT_CONV_EXPR
, type
, expr
);
9283 if (!(flags
& LOOKUP_ONLYCONVERTING
))
9284 IMPLICIT_CONV_EXPR_DIRECT_INIT (expr
) = true;
9287 expr
= convert_like (conv
, expr
, complain
);
9289 /* Free all the conversions we allocated. */
9290 obstack_free (&conversion_obstack
, p
);
9296 perform_implicit_conversion (tree type
, tree expr
, tsubst_flags_t complain
)
9298 return perform_implicit_conversion_flags (type
, expr
, complain
,
9302 /* Convert EXPR to TYPE (as a direct-initialization) if that is
9303 permitted. If the conversion is valid, the converted expression is
9304 returned. Otherwise, NULL_TREE is returned, except in the case
9305 that TYPE is a class type; in that case, an error is issued. If
9306 C_CAST_P is true, then this direct-initialization is taking
9307 place as part of a static_cast being attempted as part of a C-style
9311 perform_direct_initialization_if_possible (tree type
,
9314 tsubst_flags_t complain
)
9319 if (type
== error_mark_node
|| error_operand_p (expr
))
9320 return error_mark_node
;
9323 If the destination type is a (possibly cv-qualified) class type:
9325 -- If the initialization is direct-initialization ...,
9326 constructors are considered. ... If no constructor applies, or
9327 the overload resolution is ambiguous, the initialization is
9329 if (CLASS_TYPE_P (type
))
9331 vec
<tree
, va_gc
> *args
= make_tree_vector_single (expr
);
9332 expr
= build_special_member_call (NULL_TREE
, complete_ctor_identifier
,
9333 &args
, type
, LOOKUP_NORMAL
, complain
);
9334 release_tree_vector (args
);
9335 return build_cplus_new (type
, expr
, complain
);
9338 /* Get the high-water mark for the CONVERSION_OBSTACK. */
9339 p
= conversion_obstack_alloc (0);
9341 conv
= implicit_conversion (type
, TREE_TYPE (expr
), expr
,
9343 LOOKUP_NORMAL
, complain
);
9344 if (!conv
|| conv
->bad_p
)
9347 expr
= convert_like_real (conv
, expr
, NULL_TREE
, 0, 0,
9348 /*issue_conversion_warnings=*/false,
9352 /* Free all the conversions we allocated. */
9353 obstack_free (&conversion_obstack
, p
);
9358 /* When initializing a reference that lasts longer than a full-expression,
9359 this special rule applies:
9363 The temporary to which the reference is bound or the temporary
9364 that is the complete object to which the reference is bound
9365 persists for the lifetime of the reference.
9367 The temporaries created during the evaluation of the expression
9368 initializing the reference, except the temporary to which the
9369 reference is bound, are destroyed at the end of the
9370 full-expression in which they are created.
9372 In that case, we store the converted expression into a new
9373 VAR_DECL in a new scope.
9375 However, we want to be careful not to create temporaries when
9376 they are not required. For example, given:
9379 struct D : public B {};
9383 there is no need to copy the return value from "f"; we can just
9384 extend its lifetime. Similarly, given:
9387 struct T { operator S(); };
9391 we can extend the lifetime of the return value of the conversion
9394 The next several functions are involved in this lifetime extension. */
9396 /* DECL is a VAR_DECL or FIELD_DECL whose type is a REFERENCE_TYPE. The
9397 reference is being bound to a temporary. Create and return a new
9398 VAR_DECL with the indicated TYPE; this variable will store the value to
9399 which the reference is bound. */
9402 make_temporary_var_for_ref_to_temp (tree decl
, tree type
)
9406 /* Create the variable. */
9407 var
= create_temporary_var (type
);
9409 /* Register the variable. */
9411 && (TREE_STATIC (decl
) || DECL_THREAD_LOCAL_P (decl
)))
9413 /* Namespace-scope or local static; give it a mangled name. */
9414 /* FIXME share comdat with decl? */
9417 TREE_STATIC (var
) = TREE_STATIC (decl
);
9418 set_decl_tls_model (var
, DECL_TLS_MODEL (decl
));
9419 name
= mangle_ref_init_variable (decl
);
9420 DECL_NAME (var
) = name
;
9421 SET_DECL_ASSEMBLER_NAME (var
, name
);
9422 var
= pushdecl_top_level (var
);
9425 /* Create a new cleanup level if necessary. */
9426 maybe_push_cleanup_level (type
);
9431 /* EXPR is the initializer for a variable DECL of reference or
9432 std::initializer_list type. Create, push and return a new VAR_DECL
9433 for the initializer so that it will live as long as DECL. Any
9434 cleanup for the new variable is returned through CLEANUP, and the
9435 code to initialize the new variable is returned through INITP. */
9438 set_up_extended_ref_temp (tree decl
, tree expr
, vec
<tree
, va_gc
> **cleanups
,
9445 /* Create the temporary variable. */
9446 type
= TREE_TYPE (expr
);
9447 var
= make_temporary_var_for_ref_to_temp (decl
, type
);
9448 layout_decl (var
, 0);
9449 /* If the rvalue is the result of a function call it will be
9450 a TARGET_EXPR. If it is some other construct (such as a
9451 member access expression where the underlying object is
9452 itself the result of a function call), turn it into a
9453 TARGET_EXPR here. It is important that EXPR be a
9454 TARGET_EXPR below since otherwise the INIT_EXPR will
9455 attempt to make a bitwise copy of EXPR to initialize
9457 if (TREE_CODE (expr
) != TARGET_EXPR
)
9458 expr
= get_target_expr (expr
);
9460 if (TREE_CODE (decl
) == FIELD_DECL
9461 && extra_warnings
&& !TREE_NO_WARNING (decl
))
9463 warning (OPT_Wextra
, "a temporary bound to %qD only persists "
9464 "until the constructor exits", decl
);
9465 TREE_NO_WARNING (decl
) = true;
9468 /* Recursively extend temps in this initializer. */
9469 TARGET_EXPR_INITIAL (expr
)
9470 = extend_ref_init_temps (decl
, TARGET_EXPR_INITIAL (expr
), cleanups
);
9472 /* Any reference temp has a non-trivial initializer. */
9473 DECL_NONTRIVIALLY_INITIALIZED_P (var
) = true;
9475 /* If the initializer is constant, put it in DECL_INITIAL so we get
9476 static initialization and use in constant expressions. */
9477 init
= maybe_constant_init (expr
);
9478 if (TREE_CONSTANT (init
))
9480 if (literal_type_p (type
) && CP_TYPE_CONST_NON_VOLATILE_P (type
))
9482 /* 5.19 says that a constant expression can include an
9483 lvalue-rvalue conversion applied to "a glvalue of literal type
9484 that refers to a non-volatile temporary object initialized
9485 with a constant expression". Rather than try to communicate
9486 that this VAR_DECL is a temporary, just mark it constexpr.
9488 Currently this is only useful for initializer_list temporaries,
9489 since reference vars can't appear in constant expressions. */
9490 DECL_DECLARED_CONSTEXPR_P (var
) = true;
9491 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (var
) = true;
9492 TREE_CONSTANT (var
) = true;
9494 DECL_INITIAL (var
) = init
;
9498 /* Create the INIT_EXPR that will initialize the temporary
9500 init
= build2 (INIT_EXPR
, type
, var
, expr
);
9501 if (at_function_scope_p ())
9503 add_decl_expr (var
);
9505 if (TREE_STATIC (var
))
9506 init
= add_stmt_to_compound (init
, register_dtor_fn (var
));
9509 tree cleanup
= cxx_maybe_build_cleanup (var
, tf_warning_or_error
);
9511 vec_safe_push (*cleanups
, cleanup
);
9514 /* We must be careful to destroy the temporary only
9515 after its initialization has taken place. If the
9516 initialization throws an exception, then the
9517 destructor should not be run. We cannot simply
9518 transform INIT into something like:
9520 (INIT, ({ CLEANUP_STMT; }))
9522 because emit_local_var always treats the
9523 initializer as a full-expression. Thus, the
9524 destructor would run too early; it would run at the
9525 end of initializing the reference variable, rather
9526 than at the end of the block enclosing the
9529 The solution is to pass back a cleanup expression
9530 which the caller is responsible for attaching to
9531 the statement tree. */
9535 rest_of_decl_compilation (var
, /*toplev=*/1, at_eof
);
9536 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type
))
9538 if (DECL_THREAD_LOCAL_P (var
))
9539 tls_aggregates
= tree_cons (NULL_TREE
, var
,
9542 static_aggregates
= tree_cons (NULL_TREE
, var
,
9546 /* Check whether the dtor is callable. */
9547 cxx_maybe_build_cleanup (var
, tf_warning_or_error
);
9554 /* Convert EXPR to the indicated reference TYPE, in a way suitable for
9555 initializing a variable of that TYPE. */
9558 initialize_reference (tree type
, tree expr
,
9559 int flags
, tsubst_flags_t complain
)
9563 location_t loc
= EXPR_LOC_OR_LOC (expr
, input_location
);
9565 if (type
== error_mark_node
|| error_operand_p (expr
))
9566 return error_mark_node
;
9568 /* Get the high-water mark for the CONVERSION_OBSTACK. */
9569 p
= conversion_obstack_alloc (0);
9571 conv
= reference_binding (type
, TREE_TYPE (expr
), expr
, /*c_cast_p=*/false,
9573 if (!conv
|| conv
->bad_p
)
9575 if (complain
& tf_error
)
9578 convert_like (conv
, expr
, complain
);
9579 else if (!CP_TYPE_CONST_P (TREE_TYPE (type
))
9580 && !TYPE_REF_IS_RVALUE (type
)
9581 && !real_lvalue_p (expr
))
9582 error_at (loc
, "invalid initialization of non-const reference of "
9583 "type %qT from an rvalue of type %qT",
9584 type
, TREE_TYPE (expr
));
9586 error_at (loc
, "invalid initialization of reference of type "
9587 "%qT from expression of type %qT", type
,
9590 return error_mark_node
;
9593 if (conv
->kind
== ck_ref_bind
)
9594 /* Perform the conversion. */
9595 expr
= convert_like (conv
, expr
, complain
);
9596 else if (conv
->kind
== ck_ambig
)
9597 /* We gave an error in build_user_type_conversion_1. */
9598 expr
= error_mark_node
;
9602 /* Free all the conversions we allocated. */
9603 obstack_free (&conversion_obstack
, p
);
9608 /* Subroutine of extend_ref_init_temps. Possibly extend one initializer,
9609 which is bound either to a reference or a std::initializer_list. */
9612 extend_ref_init_temps_1 (tree decl
, tree init
, vec
<tree
, va_gc
> **cleanups
)
9617 if (TREE_CODE (sub
) == COMPOUND_EXPR
)
9619 TREE_OPERAND (sub
, 1)
9620 = extend_ref_init_temps_1 (decl
, TREE_OPERAND (sub
, 1), cleanups
);
9623 if (TREE_CODE (sub
) != ADDR_EXPR
)
9625 /* Deal with binding to a subobject. */
9626 for (p
= &TREE_OPERAND (sub
, 0); TREE_CODE (*p
) == COMPONENT_REF
; )
9627 p
= &TREE_OPERAND (*p
, 0);
9628 if (TREE_CODE (*p
) == TARGET_EXPR
)
9630 tree subinit
= NULL_TREE
;
9631 *p
= set_up_extended_ref_temp (decl
, *p
, cleanups
, &subinit
);
9633 init
= build2 (COMPOUND_EXPR
, TREE_TYPE (init
), subinit
, init
);
9634 recompute_tree_invariant_for_addr_expr (sub
);
9639 /* INIT is part of the initializer for DECL. If there are any
9640 reference or initializer lists being initialized, extend their
9641 lifetime to match that of DECL. */
9644 extend_ref_init_temps (tree decl
, tree init
, vec
<tree
, va_gc
> **cleanups
)
9646 tree type
= TREE_TYPE (init
);
9647 if (processing_template_decl
)
9649 if (TREE_CODE (type
) == REFERENCE_TYPE
)
9650 init
= extend_ref_init_temps_1 (decl
, init
, cleanups
);
9651 else if (is_std_init_list (type
))
9653 /* The temporary array underlying a std::initializer_list
9654 is handled like a reference temporary. */
9656 if (TREE_CODE (ctor
) == TARGET_EXPR
)
9657 ctor
= TARGET_EXPR_INITIAL (ctor
);
9658 if (TREE_CODE (ctor
) == CONSTRUCTOR
)
9660 tree array
= CONSTRUCTOR_ELT (ctor
, 0)->value
;
9661 array
= extend_ref_init_temps_1 (decl
, array
, cleanups
);
9662 CONSTRUCTOR_ELT (ctor
, 0)->value
= array
;
9665 else if (TREE_CODE (init
) == CONSTRUCTOR
)
9669 vec
<constructor_elt
, va_gc
> *elts
= CONSTRUCTOR_ELTS (init
);
9670 FOR_EACH_VEC_SAFE_ELT (elts
, i
, p
)
9671 p
->value
= extend_ref_init_temps (decl
, p
->value
, cleanups
);
9677 /* Returns true iff an initializer for TYPE could contain temporaries that
9678 need to be extended because they are bound to references or
9679 std::initializer_list. */
9682 type_has_extended_temps (tree type
)
9684 type
= strip_array_types (type
);
9685 if (TREE_CODE (type
) == REFERENCE_TYPE
)
9687 if (CLASS_TYPE_P (type
))
9689 if (is_std_init_list (type
))
9691 for (tree f
= next_initializable_field (TYPE_FIELDS (type
));
9692 f
; f
= next_initializable_field (DECL_CHAIN (f
)))
9693 if (type_has_extended_temps (TREE_TYPE (f
)))
9699 /* Returns true iff TYPE is some variant of std::initializer_list. */
9702 is_std_init_list (tree type
)
9704 /* Look through typedefs. */
9707 if (cxx_dialect
== cxx98
)
9709 type
= TYPE_MAIN_VARIANT (type
);
9710 return (CLASS_TYPE_P (type
)
9711 && CP_TYPE_CONTEXT (type
) == std_node
9712 && strcmp (TYPE_NAME_STRING (type
), "initializer_list") == 0);
9715 /* Returns true iff DECL is a list constructor: i.e. a constructor which
9716 will accept an argument list of a single std::initializer_list<T>. */
9719 is_list_ctor (tree decl
)
9721 tree args
= FUNCTION_FIRST_USER_PARMTYPE (decl
);
9724 if (!args
|| args
== void_list_node
)
9727 arg
= non_reference (TREE_VALUE (args
));
9728 if (!is_std_init_list (arg
))
9731 args
= TREE_CHAIN (args
);
9733 if (args
&& args
!= void_list_node
&& !TREE_PURPOSE (args
))
9734 /* There are more non-defaulted parms. */
9740 #include "gt-cp-call.h"