1 /* Functions related to invoking methods and overloaded functions.
2 Copyright (C) 1987, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
5 Free Software Foundation, Inc.
6 Contributed by Michael Tiemann (tiemann@cygnus.com) and
7 modified by Brendan Kehoe (brendan@cygnus.com).
9 This file is part of GCC.
11 GCC is free software; you can redistribute it and/or modify
12 it under the terms of the GNU General Public License as published by
13 the Free Software Foundation; either version 3, or (at your option)
16 GCC is distributed in the hope that it will be useful,
17 but WITHOUT ANY WARRANTY; without even the implied warranty of
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 GNU General Public License for more details.
21 You should have received a copy of the GNU General Public License
22 along with GCC; see the file COPYING3. If not see
23 <http://www.gnu.org/licenses/>. */
26 /* High-level class interface. */
30 #include "coretypes.h"
36 #include "diagnostic-core.h"
40 #include "langhooks.h"
41 #include "c-family/c-objc.h"
44 /* The various kinds of conversion. */
46 typedef enum conversion_kind
{
62 /* The rank of the conversion. Order of the enumerals matters; better
63 conversions should come earlier in the list. */
65 typedef enum conversion_rank
{
76 /* An implicit conversion sequence, in the sense of [over.best.ics].
77 The first conversion to be performed is at the end of the chain.
78 That conversion is always a cr_identity conversion. */
80 typedef struct conversion conversion
;
82 /* The kind of conversion represented by this step. */
84 /* The rank of this conversion. */
86 BOOL_BITFIELD user_conv_p
: 1;
87 BOOL_BITFIELD ellipsis_p
: 1;
88 BOOL_BITFIELD this_p
: 1;
89 /* True if this conversion would be permitted with a bending of
90 language standards, e.g. disregarding pointer qualifiers or
91 converting integers to pointers. */
92 BOOL_BITFIELD bad_p
: 1;
93 /* If KIND is ck_ref_bind ck_base_conv, true to indicate that a
94 temporary should be created to hold the result of the
96 BOOL_BITFIELD need_temporary_p
: 1;
97 /* If KIND is ck_ptr or ck_pmem, true to indicate that a conversion
98 from a pointer-to-derived to pointer-to-base is being performed. */
99 BOOL_BITFIELD base_p
: 1;
100 /* If KIND is ck_ref_bind, true when either an lvalue reference is
101 being bound to an lvalue expression or an rvalue reference is
102 being bound to an rvalue expression. If KIND is ck_rvalue,
103 true when we should treat an lvalue as an rvalue (12.8p33). If
104 KIND is ck_base, always false. */
105 BOOL_BITFIELD rvaluedness_matches_p
: 1;
106 BOOL_BITFIELD check_narrowing
: 1;
107 /* The type of the expression resulting from the conversion. */
110 /* The next conversion in the chain. Since the conversions are
111 arranged from outermost to innermost, the NEXT conversion will
112 actually be performed before this conversion. This variant is
113 used only when KIND is neither ck_identity, ck_ambig nor
114 ck_list. Please use the next_conversion function instead
115 of using this field directly. */
117 /* The expression at the beginning of the conversion chain. This
118 variant is used only if KIND is ck_identity or ck_ambig. */
120 /* The array of conversions for an initializer_list, so this
121 variant is used only when KIN D is ck_list. */
124 /* The function candidate corresponding to this conversion
125 sequence. This field is only used if KIND is ck_user. */
126 struct z_candidate
*cand
;
129 #define CONVERSION_RANK(NODE) \
130 ((NODE)->bad_p ? cr_bad \
131 : (NODE)->ellipsis_p ? cr_ellipsis \
132 : (NODE)->user_conv_p ? cr_user \
135 #define BAD_CONVERSION_RANK(NODE) \
136 ((NODE)->ellipsis_p ? cr_ellipsis \
137 : (NODE)->user_conv_p ? cr_user \
140 static struct obstack conversion_obstack
;
141 static bool conversion_obstack_initialized
;
142 struct rejection_reason
;
144 static struct z_candidate
* tourney (struct z_candidate
*, tsubst_flags_t
);
145 static int equal_functions (tree
, tree
);
146 static int joust (struct z_candidate
*, struct z_candidate
*, bool,
148 static int compare_ics (conversion
*, conversion
*);
149 static tree
build_over_call (struct z_candidate
*, int, tsubst_flags_t
);
150 static tree
build_java_interface_fn_ref (tree
, tree
);
151 #define convert_like(CONV, EXPR, COMPLAIN) \
152 convert_like_real ((CONV), (EXPR), NULL_TREE, 0, 0, \
153 /*issue_conversion_warnings=*/true, \
154 /*c_cast_p=*/false, (COMPLAIN))
155 #define convert_like_with_context(CONV, EXPR, FN, ARGNO, COMPLAIN ) \
156 convert_like_real ((CONV), (EXPR), (FN), (ARGNO), 0, \
157 /*issue_conversion_warnings=*/true, \
158 /*c_cast_p=*/false, (COMPLAIN))
159 static tree
convert_like_real (conversion
*, tree
, tree
, int, int, bool,
160 bool, tsubst_flags_t
);
161 static void op_error (location_t
, enum tree_code
, enum tree_code
, tree
,
163 static struct z_candidate
*build_user_type_conversion_1 (tree
, tree
, int,
165 static void print_z_candidate (location_t
, const char *, struct z_candidate
*);
166 static void print_z_candidates (location_t
, struct z_candidate
*);
167 static tree
build_this (tree
);
168 static struct z_candidate
*splice_viable (struct z_candidate
*, bool, bool *);
169 static bool any_strictly_viable (struct z_candidate
*);
170 static struct z_candidate
*add_template_candidate
171 (struct z_candidate
**, tree
, tree
, tree
, tree
, const VEC(tree
,gc
) *,
172 tree
, tree
, tree
, int, unification_kind_t
, tsubst_flags_t
);
173 static struct z_candidate
*add_template_candidate_real
174 (struct z_candidate
**, tree
, tree
, tree
, tree
, const VEC(tree
,gc
) *,
175 tree
, tree
, tree
, int, tree
, unification_kind_t
, tsubst_flags_t
);
176 static struct z_candidate
*add_template_conv_candidate
177 (struct z_candidate
**, tree
, tree
, tree
, const VEC(tree
,gc
) *, tree
,
178 tree
, tree
, tsubst_flags_t
);
179 static void add_builtin_candidates
180 (struct z_candidate
**, enum tree_code
, enum tree_code
,
181 tree
, tree
*, int, tsubst_flags_t
);
182 static void add_builtin_candidate
183 (struct z_candidate
**, enum tree_code
, enum tree_code
,
184 tree
, tree
, tree
, tree
*, tree
*, int, tsubst_flags_t
);
185 static bool is_complete (tree
);
186 static void build_builtin_candidate
187 (struct z_candidate
**, tree
, tree
, tree
, tree
*, tree
*,
188 int, tsubst_flags_t
);
189 static struct z_candidate
*add_conv_candidate
190 (struct z_candidate
**, tree
, tree
, tree
, const VEC(tree
,gc
) *, tree
,
191 tree
, tsubst_flags_t
);
192 static struct z_candidate
*add_function_candidate
193 (struct z_candidate
**, tree
, tree
, tree
, const VEC(tree
,gc
) *, tree
,
194 tree
, int, tsubst_flags_t
);
195 static conversion
*implicit_conversion (tree
, tree
, tree
, bool, int,
197 static conversion
*standard_conversion (tree
, tree
, tree
, bool, int);
198 static conversion
*reference_binding (tree
, tree
, tree
, bool, int,
200 static conversion
*build_conv (conversion_kind
, tree
, conversion
*);
201 static conversion
*build_list_conv (tree
, tree
, int, tsubst_flags_t
);
202 static conversion
*next_conversion (conversion
*);
203 static bool is_subseq (conversion
*, conversion
*);
204 static conversion
*maybe_handle_ref_bind (conversion
**);
205 static void maybe_handle_implicit_object (conversion
**);
206 static struct z_candidate
*add_candidate
207 (struct z_candidate
**, tree
, tree
, const VEC(tree
,gc
) *, size_t,
208 conversion
**, tree
, tree
, int, struct rejection_reason
*);
209 static tree
source_type (conversion
*);
210 static void add_warning (struct z_candidate
*, struct z_candidate
*);
211 static bool reference_compatible_p (tree
, tree
);
212 static conversion
*direct_reference_binding (tree
, conversion
*);
213 static bool promoted_arithmetic_type_p (tree
);
214 static conversion
*conditional_conversion (tree
, tree
, tsubst_flags_t
);
215 static char *name_as_c_string (tree
, tree
, bool *);
216 static tree
prep_operand (tree
);
217 static void add_candidates (tree
, tree
, const VEC(tree
,gc
) *, tree
, tree
, bool,
218 tree
, tree
, int, struct z_candidate
**,
220 static conversion
*merge_conversion_sequences (conversion
*, conversion
*);
221 static bool magic_varargs_p (tree
);
222 static tree
build_temp (tree
, tree
, int, diagnostic_t
*, tsubst_flags_t
);
224 /* Returns nonzero iff the destructor name specified in NAME matches BASETYPE.
225 NAME can take many forms... */
228 check_dtor_name (tree basetype
, tree name
)
230 /* Just accept something we've already complained about. */
231 if (name
== error_mark_node
)
234 if (TREE_CODE (name
) == TYPE_DECL
)
235 name
= TREE_TYPE (name
);
236 else if (TYPE_P (name
))
238 else if (TREE_CODE (name
) == IDENTIFIER_NODE
)
240 if ((MAYBE_CLASS_TYPE_P (basetype
)
241 && name
== constructor_name (basetype
))
242 || (TREE_CODE (basetype
) == ENUMERAL_TYPE
243 && name
== TYPE_IDENTIFIER (basetype
)))
246 name
= get_type_value (name
);
252 template <class T> struct S { ~S(); };
256 NAME will be a class template. */
257 gcc_assert (DECL_CLASS_TEMPLATE_P (name
));
261 if (!name
|| name
== error_mark_node
)
263 return same_type_p (TYPE_MAIN_VARIANT (basetype
), TYPE_MAIN_VARIANT (name
));
266 /* We want the address of a function or method. We avoid creating a
267 pointer-to-member function. */
270 build_addr_func (tree function
, tsubst_flags_t complain
)
272 tree type
= TREE_TYPE (function
);
274 /* We have to do these by hand to avoid real pointer to member
276 if (TREE_CODE (type
) == METHOD_TYPE
)
278 if (TREE_CODE (function
) == OFFSET_REF
)
280 tree object
= build_address (TREE_OPERAND (function
, 0));
281 return get_member_function_from_ptrfunc (&object
,
282 TREE_OPERAND (function
, 1),
285 function
= build_address (function
);
288 function
= decay_conversion (function
, complain
);
293 /* Build a CALL_EXPR, we can handle FUNCTION_TYPEs, METHOD_TYPEs, or
294 POINTER_TYPE to those. Note, pointer to member function types
295 (TYPE_PTRMEMFUNC_P) must be handled by our callers. There are
296 two variants. build_call_a is the primitive taking an array of
297 arguments, while build_call_n is a wrapper that handles varargs. */
300 build_call_n (tree function
, int n
, ...)
303 return build_call_a (function
, 0, NULL
);
306 tree
*argarray
= XALLOCAVEC (tree
, n
);
311 for (i
= 0; i
< n
; i
++)
312 argarray
[i
] = va_arg (ap
, tree
);
314 return build_call_a (function
, n
, argarray
);
318 /* Update various flags in cfun and the call itself based on what is being
319 called. Split out of build_call_a so that bot_manip can use it too. */
322 set_flags_from_callee (tree call
)
325 tree decl
= get_callee_fndecl (call
);
327 /* We check both the decl and the type; a function may be known not to
328 throw without being declared throw(). */
329 nothrow
= ((decl
&& TREE_NOTHROW (decl
))
330 || TYPE_NOTHROW_P (TREE_TYPE (TREE_TYPE (CALL_EXPR_FN (call
)))));
332 if (!nothrow
&& at_function_scope_p () && cfun
&& cp_function_chain
)
333 cp_function_chain
->can_throw
= 1;
335 if (decl
&& TREE_THIS_VOLATILE (decl
) && cfun
&& cp_function_chain
)
336 current_function_returns_abnormally
= 1;
338 TREE_NOTHROW (call
) = nothrow
;
342 build_call_a (tree function
, int n
, tree
*argarray
)
349 function
= build_addr_func (function
, tf_warning_or_error
);
351 gcc_assert (TYPE_PTR_P (TREE_TYPE (function
)));
352 fntype
= TREE_TYPE (TREE_TYPE (function
));
353 gcc_assert (TREE_CODE (fntype
) == FUNCTION_TYPE
354 || TREE_CODE (fntype
) == METHOD_TYPE
);
355 result_type
= TREE_TYPE (fntype
);
356 /* An rvalue has no cv-qualifiers. */
357 if (SCALAR_TYPE_P (result_type
) || VOID_TYPE_P (result_type
))
358 result_type
= cv_unqualified (result_type
);
360 function
= build_call_array_loc (input_location
,
361 result_type
, function
, n
, argarray
);
362 set_flags_from_callee (function
);
364 decl
= get_callee_fndecl (function
);
366 if (decl
&& !TREE_USED (decl
))
368 /* We invoke build_call directly for several library
369 functions. These may have been declared normally if
370 we're building libgcc, so we can't just check
372 gcc_assert (DECL_ARTIFICIAL (decl
)
373 || !strncmp (IDENTIFIER_POINTER (DECL_NAME (decl
)),
378 if (decl
&& TREE_DEPRECATED (decl
))
379 warn_deprecated_use (decl
, NULL_TREE
);
380 require_complete_eh_spec_types (fntype
, decl
);
382 TREE_HAS_CONSTRUCTOR (function
) = (decl
&& DECL_CONSTRUCTOR_P (decl
));
384 /* Don't pass empty class objects by value. This is useful
385 for tags in STL, which are used to control overload resolution.
386 We don't need to handle other cases of copying empty classes. */
387 if (! decl
|| ! DECL_BUILT_IN (decl
))
388 for (i
= 0; i
< n
; i
++)
390 tree arg
= CALL_EXPR_ARG (function
, i
);
391 if (is_empty_class (TREE_TYPE (arg
))
392 && ! TREE_ADDRESSABLE (TREE_TYPE (arg
)))
394 tree t
= build0 (EMPTY_CLASS_EXPR
, TREE_TYPE (arg
));
395 arg
= build2 (COMPOUND_EXPR
, TREE_TYPE (t
), arg
, t
);
396 CALL_EXPR_ARG (function
, i
) = arg
;
403 /* Build something of the form ptr->method (args)
404 or object.method (args). This can also build
405 calls to constructors, and find friends.
407 Member functions always take their class variable
410 INSTANCE is a class instance.
412 NAME is the name of the method desired, usually an IDENTIFIER_NODE.
414 PARMS help to figure out what that NAME really refers to.
416 BASETYPE_PATH, if non-NULL, contains a chain from the type of INSTANCE
417 down to the real instance type to use for access checking. We need this
418 information to get protected accesses correct.
420 FLAGS is the logical disjunction of zero or more LOOKUP_
421 flags. See cp-tree.h for more info.
423 If this is all OK, calls build_function_call with the resolved
426 This function must also handle being called to perform
427 initialization, promotion/coercion of arguments, and
428 instantiation of default parameters.
430 Note that NAME may refer to an instance variable name. If
431 `operator()()' is defined for the type of that field, then we return
434 /* New overloading code. */
436 typedef struct z_candidate z_candidate
;
438 typedef struct candidate_warning candidate_warning
;
439 struct candidate_warning
{
441 candidate_warning
*next
;
444 /* Information for providing diagnostics about why overloading failed. */
446 enum rejection_reason_code
{
449 rr_explicit_conversion
,
450 rr_template_conversion
,
452 rr_bad_arg_conversion
,
453 rr_template_unification
,
457 struct conversion_info
{
458 /* The index of the argument, 0-based. */
460 /* The type of the actual argument. */
462 /* The type of the formal argument. */
466 struct rejection_reason
{
467 enum rejection_reason_code code
;
469 /* Information about an arity mismatch. */
471 /* The expected number of arguments. */
473 /* The actual number of arguments in the call. */
475 /* Whether the call was a varargs call. */
478 /* Information about an argument conversion mismatch. */
479 struct conversion_info conversion
;
480 /* Same, but for bad argument conversions. */
481 struct conversion_info bad_conversion
;
482 /* Information about template unification failures. These are the
483 parameters passed to fn_type_unification. */
491 unification_kind_t strict
;
493 } template_unification
;
494 /* Information about template instantiation failures. These are the
495 parameters passed to instantiate_template. */
499 } template_instantiation
;
504 /* The FUNCTION_DECL that will be called if this candidate is
505 selected by overload resolution. */
507 /* If not NULL_TREE, the first argument to use when calling this
510 /* The rest of the arguments to use when calling this function. If
511 there are no further arguments this may be NULL or it may be an
513 const VEC(tree
,gc
) *args
;
514 /* The implicit conversion sequences for each of the arguments to
517 /* The number of implicit conversion sequences. */
519 /* If FN is a user-defined conversion, the standard conversion
520 sequence from the type returned by FN to the desired destination
522 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 /* Returns true iff T is a null pointer constant in the sense of
547 null_ptr_cst_p (tree t
)
551 A null pointer constant is an integral constant expression
552 (_expr.const_) rvalue of integer type that evaluates to zero or
553 an rvalue of type std::nullptr_t. */
554 if (NULLPTR_TYPE_P (TREE_TYPE (t
)))
556 if (CP_INTEGRAL_TYPE_P (TREE_TYPE (t
)))
558 /* Core issue 903 says only literal 0 is a null pointer constant. */
559 if (cxx_dialect
< cxx0x
)
560 t
= integral_constant_value (t
);
562 if (integer_zerop (t
) && !TREE_OVERFLOW (t
))
568 /* Returns true iff T is a null member pointer value (4.11). */
571 null_member_pointer_value_p (tree t
)
573 tree type
= TREE_TYPE (t
);
576 else if (TYPE_PTRMEMFUNC_P (type
))
577 return (TREE_CODE (t
) == CONSTRUCTOR
578 && integer_zerop (CONSTRUCTOR_ELT (t
, 0)->value
));
579 else if (TYPE_PTRDATAMEM_P (type
))
580 return integer_all_onesp (t
);
585 /* Returns nonzero if PARMLIST consists of only default parms,
586 ellipsis, and/or undeduced parameter packs. */
589 sufficient_parms_p (const_tree parmlist
)
591 for (; parmlist
&& parmlist
!= void_list_node
;
592 parmlist
= TREE_CHAIN (parmlist
))
593 if (!TREE_PURPOSE (parmlist
)
594 && !PACK_EXPANSION_P (TREE_VALUE (parmlist
)))
599 /* Allocate N bytes of memory from the conversion obstack. The memory
600 is zeroed before being returned. */
603 conversion_obstack_alloc (size_t n
)
606 if (!conversion_obstack_initialized
)
608 gcc_obstack_init (&conversion_obstack
);
609 conversion_obstack_initialized
= true;
611 p
= obstack_alloc (&conversion_obstack
, n
);
616 /* Allocate rejection reasons. */
618 static struct rejection_reason
*
619 alloc_rejection (enum rejection_reason_code code
)
621 struct rejection_reason
*p
;
622 p
= (struct rejection_reason
*) conversion_obstack_alloc (sizeof *p
);
627 static struct rejection_reason
*
628 arity_rejection (tree first_arg
, int expected
, int actual
)
630 struct rejection_reason
*r
= alloc_rejection (rr_arity
);
631 int adjust
= first_arg
!= NULL_TREE
;
632 r
->u
.arity
.expected
= expected
- adjust
;
633 r
->u
.arity
.actual
= actual
- adjust
;
637 static struct rejection_reason
*
638 arg_conversion_rejection (tree first_arg
, int n_arg
, tree from
, tree to
)
640 struct rejection_reason
*r
= alloc_rejection (rr_arg_conversion
);
641 int adjust
= first_arg
!= NULL_TREE
;
642 r
->u
.conversion
.n_arg
= n_arg
- adjust
;
643 r
->u
.conversion
.from_type
= from
;
644 r
->u
.conversion
.to_type
= to
;
648 static struct rejection_reason
*
649 bad_arg_conversion_rejection (tree first_arg
, int n_arg
, tree from
, tree to
)
651 struct rejection_reason
*r
= alloc_rejection (rr_bad_arg_conversion
);
652 int adjust
= first_arg
!= NULL_TREE
;
653 r
->u
.bad_conversion
.n_arg
= n_arg
- adjust
;
654 r
->u
.bad_conversion
.from_type
= from
;
655 r
->u
.bad_conversion
.to_type
= to
;
659 static struct rejection_reason
*
660 explicit_conversion_rejection (tree from
, tree to
)
662 struct rejection_reason
*r
= alloc_rejection (rr_explicit_conversion
);
663 r
->u
.conversion
.n_arg
= 0;
664 r
->u
.conversion
.from_type
= from
;
665 r
->u
.conversion
.to_type
= to
;
669 static struct rejection_reason
*
670 template_conversion_rejection (tree from
, tree to
)
672 struct rejection_reason
*r
= alloc_rejection (rr_template_conversion
);
673 r
->u
.conversion
.n_arg
= 0;
674 r
->u
.conversion
.from_type
= from
;
675 r
->u
.conversion
.to_type
= to
;
679 static struct rejection_reason
*
680 template_unification_rejection (tree tmpl
, tree explicit_targs
, tree targs
,
681 const tree
*args
, unsigned int nargs
,
682 tree return_type
, unification_kind_t strict
,
685 size_t args_n_bytes
= sizeof (*args
) * nargs
;
686 tree
*args1
= (tree
*) conversion_obstack_alloc (args_n_bytes
);
687 struct rejection_reason
*r
= alloc_rejection (rr_template_unification
);
688 r
->u
.template_unification
.tmpl
= tmpl
;
689 r
->u
.template_unification
.explicit_targs
= explicit_targs
;
690 r
->u
.template_unification
.num_targs
= TREE_VEC_LENGTH (targs
);
691 /* Copy args to our own storage. */
692 memcpy (args1
, args
, args_n_bytes
);
693 r
->u
.template_unification
.args
= args1
;
694 r
->u
.template_unification
.nargs
= nargs
;
695 r
->u
.template_unification
.return_type
= return_type
;
696 r
->u
.template_unification
.strict
= strict
;
697 r
->u
.template_unification
.flags
= flags
;
701 static struct rejection_reason
*
702 template_unification_error_rejection (void)
704 return alloc_rejection (rr_template_unification
);
707 static struct rejection_reason
*
708 invalid_copy_with_fn_template_rejection (void)
710 struct rejection_reason
*r
= alloc_rejection (rr_invalid_copy
);
714 /* Dynamically allocate a conversion. */
717 alloc_conversion (conversion_kind kind
)
720 c
= (conversion
*) conversion_obstack_alloc (sizeof (conversion
));
725 #ifdef ENABLE_CHECKING
727 /* Make sure that all memory on the conversion obstack has been
731 validate_conversion_obstack (void)
733 if (conversion_obstack_initialized
)
734 gcc_assert ((obstack_next_free (&conversion_obstack
)
735 == obstack_base (&conversion_obstack
)));
738 #endif /* ENABLE_CHECKING */
740 /* Dynamically allocate an array of N conversions. */
743 alloc_conversions (size_t n
)
745 return (conversion
**) conversion_obstack_alloc (n
* sizeof (conversion
*));
749 build_conv (conversion_kind code
, tree type
, conversion
*from
)
752 conversion_rank rank
= CONVERSION_RANK (from
);
754 /* Note that the caller is responsible for filling in t->cand for
755 user-defined conversions. */
756 t
= alloc_conversion (code
);
779 t
->user_conv_p
= (code
== ck_user
|| from
->user_conv_p
);
780 t
->bad_p
= from
->bad_p
;
785 /* Represent a conversion from CTOR, a braced-init-list, to TYPE, a
786 specialization of std::initializer_list<T>, if such a conversion is
790 build_list_conv (tree type
, tree ctor
, int flags
, tsubst_flags_t complain
)
792 tree elttype
= TREE_VEC_ELT (CLASSTYPE_TI_ARGS (type
), 0);
793 unsigned len
= CONSTRUCTOR_NELTS (ctor
);
794 conversion
**subconvs
= alloc_conversions (len
);
799 /* Within a list-initialization we can have more user-defined
801 flags
&= ~LOOKUP_NO_CONVERSION
;
802 /* But no narrowing conversions. */
803 flags
|= LOOKUP_NO_NARROWING
;
805 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor
), i
, val
)
808 = implicit_conversion (elttype
, TREE_TYPE (val
), val
,
809 false, flags
, complain
);
816 t
= alloc_conversion (ck_list
);
818 t
->u
.list
= subconvs
;
821 for (i
= 0; i
< len
; ++i
)
823 conversion
*sub
= subconvs
[i
];
824 if (sub
->rank
> t
->rank
)
826 if (sub
->user_conv_p
)
827 t
->user_conv_p
= true;
835 /* Return the next conversion of the conversion chain (if applicable),
836 or NULL otherwise. Please use this function instead of directly
837 accessing fields of struct conversion. */
840 next_conversion (conversion
*conv
)
843 || conv
->kind
== ck_identity
844 || conv
->kind
== ck_ambig
845 || conv
->kind
== ck_list
)
850 /* Subroutine of build_aggr_conv: check whether CTOR, a braced-init-list,
851 is a valid aggregate initializer for array type ATYPE. */
854 can_convert_array (tree atype
, tree ctor
, int flags
, tsubst_flags_t complain
)
857 tree elttype
= TREE_TYPE (atype
);
858 for (i
= 0; i
< CONSTRUCTOR_NELTS (ctor
); ++i
)
860 tree val
= CONSTRUCTOR_ELT (ctor
, i
)->value
;
862 if (TREE_CODE (elttype
) == ARRAY_TYPE
863 && TREE_CODE (val
) == CONSTRUCTOR
)
864 ok
= can_convert_array (elttype
, val
, flags
, complain
);
866 ok
= can_convert_arg (elttype
, TREE_TYPE (val
), val
, flags
,
874 /* Represent a conversion from CTOR, a braced-init-list, to TYPE, an
875 aggregate class, if such a conversion is possible. */
878 build_aggr_conv (tree type
, tree ctor
, int flags
, tsubst_flags_t complain
)
880 unsigned HOST_WIDE_INT i
= 0;
882 tree field
= next_initializable_field (TYPE_FIELDS (type
));
883 tree empty_ctor
= NULL_TREE
;
885 ctor
= reshape_init (type
, ctor
, tf_none
);
886 if (ctor
== error_mark_node
)
889 for (; field
; field
= next_initializable_field (DECL_CHAIN (field
)))
891 tree ftype
= TREE_TYPE (field
);
895 if (i
< CONSTRUCTOR_NELTS (ctor
))
896 val
= CONSTRUCTOR_ELT (ctor
, i
)->value
;
899 if (empty_ctor
== NULL_TREE
)
900 empty_ctor
= build_constructor (init_list_type_node
, NULL
);
905 if (TREE_CODE (ftype
) == ARRAY_TYPE
906 && TREE_CODE (val
) == CONSTRUCTOR
)
907 ok
= can_convert_array (ftype
, val
, flags
, complain
);
909 ok
= can_convert_arg (ftype
, TREE_TYPE (val
), val
, flags
,
915 if (TREE_CODE (type
) == UNION_TYPE
)
919 if (i
< CONSTRUCTOR_NELTS (ctor
))
922 c
= alloc_conversion (ck_aggr
);
925 c
->user_conv_p
= true;
930 /* Represent a conversion from CTOR, a braced-init-list, to TYPE, an
931 array type, if such a conversion is possible. */
934 build_array_conv (tree type
, tree ctor
, int flags
, tsubst_flags_t complain
)
937 unsigned HOST_WIDE_INT len
= CONSTRUCTOR_NELTS (ctor
);
938 tree elttype
= TREE_TYPE (type
);
943 enum conversion_rank rank
= cr_exact
;
945 if (TYPE_DOMAIN (type
))
947 unsigned HOST_WIDE_INT alen
= tree_low_cst (array_type_nelts_top (type
), 1);
952 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor
), i
, val
)
955 = implicit_conversion (elttype
, TREE_TYPE (val
), val
,
956 false, flags
, complain
);
960 if (sub
->rank
> rank
)
962 if (sub
->user_conv_p
)
968 c
= alloc_conversion (ck_aggr
);
971 c
->user_conv_p
= user
;
977 /* Represent a conversion from CTOR, a braced-init-list, to TYPE, a
978 complex type, if such a conversion is possible. */
981 build_complex_conv (tree type
, tree ctor
, int flags
,
982 tsubst_flags_t complain
)
985 unsigned HOST_WIDE_INT len
= CONSTRUCTOR_NELTS (ctor
);
986 tree elttype
= TREE_TYPE (type
);
991 enum conversion_rank rank
= cr_exact
;
996 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor
), i
, val
)
999 = implicit_conversion (elttype
, TREE_TYPE (val
), val
,
1000 false, flags
, complain
);
1004 if (sub
->rank
> rank
)
1006 if (sub
->user_conv_p
)
1012 c
= alloc_conversion (ck_aggr
);
1015 c
->user_conv_p
= user
;
1021 /* Build a representation of the identity conversion from EXPR to
1022 itself. The TYPE should match the type of EXPR, if EXPR is non-NULL. */
1025 build_identity_conv (tree type
, tree expr
)
1029 c
= alloc_conversion (ck_identity
);
1036 /* Converting from EXPR to TYPE was ambiguous in the sense that there
1037 were multiple user-defined conversions to accomplish the job.
1038 Build a conversion that indicates that ambiguity. */
1041 build_ambiguous_conv (tree type
, tree expr
)
1045 c
= alloc_conversion (ck_ambig
);
1053 strip_top_quals (tree t
)
1055 if (TREE_CODE (t
) == ARRAY_TYPE
)
1057 return cp_build_qualified_type (t
, 0);
1060 /* Returns the standard conversion path (see [conv]) from type FROM to type
1061 TO, if any. For proper handling of null pointer constants, you must
1062 also pass the expression EXPR to convert from. If C_CAST_P is true,
1063 this conversion is coming from a C-style cast. */
1066 standard_conversion (tree to
, tree from
, tree expr
, bool c_cast_p
,
1069 enum tree_code fcode
, tcode
;
1071 bool fromref
= false;
1074 to
= non_reference (to
);
1075 if (TREE_CODE (from
) == REFERENCE_TYPE
)
1078 from
= TREE_TYPE (from
);
1081 to
= strip_top_quals (to
);
1082 from
= strip_top_quals (from
);
1084 if ((TYPE_PTRFN_P (to
) || TYPE_PTRMEMFUNC_P (to
))
1085 && expr
&& type_unknown_p (expr
))
1087 tsubst_flags_t tflags
= tf_conv
;
1088 expr
= instantiate_type (to
, expr
, tflags
);
1089 if (expr
== error_mark_node
)
1091 from
= TREE_TYPE (expr
);
1094 fcode
= TREE_CODE (from
);
1095 tcode
= TREE_CODE (to
);
1097 conv
= build_identity_conv (from
, expr
);
1098 if (fcode
== FUNCTION_TYPE
|| fcode
== ARRAY_TYPE
)
1100 from
= type_decays_to (from
);
1101 fcode
= TREE_CODE (from
);
1102 conv
= build_conv (ck_lvalue
, from
, conv
);
1104 else if (fromref
|| (expr
&& lvalue_p (expr
)))
1109 bitfield_type
= is_bitfield_expr_with_lowered_type (expr
);
1112 from
= strip_top_quals (bitfield_type
);
1113 fcode
= TREE_CODE (from
);
1116 conv
= build_conv (ck_rvalue
, from
, conv
);
1117 if (flags
& LOOKUP_PREFER_RVALUE
)
1118 conv
->rvaluedness_matches_p
= true;
1121 /* Allow conversion between `__complex__' data types. */
1122 if (tcode
== COMPLEX_TYPE
&& fcode
== COMPLEX_TYPE
)
1124 /* The standard conversion sequence to convert FROM to TO is
1125 the standard conversion sequence to perform componentwise
1127 conversion
*part_conv
= standard_conversion
1128 (TREE_TYPE (to
), TREE_TYPE (from
), NULL_TREE
, c_cast_p
, flags
);
1132 conv
= build_conv (part_conv
->kind
, to
, conv
);
1133 conv
->rank
= part_conv
->rank
;
1141 if (same_type_p (from
, to
))
1143 if (CLASS_TYPE_P (to
) && conv
->kind
== ck_rvalue
)
1144 conv
->type
= qualified_to
;
1149 A null pointer constant can be converted to a pointer type; ... A
1150 null pointer constant of integral type can be converted to an
1151 rvalue of type std::nullptr_t. */
1152 if ((tcode
== POINTER_TYPE
|| TYPE_PTRMEM_P (to
)
1153 || NULLPTR_TYPE_P (to
))
1154 && expr
&& null_ptr_cst_p (expr
))
1155 conv
= build_conv (ck_std
, to
, conv
);
1156 else if ((tcode
== INTEGER_TYPE
&& fcode
== POINTER_TYPE
)
1157 || (tcode
== POINTER_TYPE
&& fcode
== INTEGER_TYPE
))
1159 /* For backwards brain damage compatibility, allow interconversion of
1160 pointers and integers with a pedwarn. */
1161 conv
= build_conv (ck_std
, to
, conv
);
1164 else if (UNSCOPED_ENUM_P (to
) && fcode
== INTEGER_TYPE
)
1166 /* For backwards brain damage compatibility, allow interconversion of
1167 enums and integers with a pedwarn. */
1168 conv
= build_conv (ck_std
, to
, conv
);
1171 else if ((tcode
== POINTER_TYPE
&& fcode
== POINTER_TYPE
)
1172 || (TYPE_PTRDATAMEM_P (to
) && TYPE_PTRDATAMEM_P (from
)))
1177 if (tcode
== POINTER_TYPE
1178 && same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (from
),
1181 else if (VOID_TYPE_P (TREE_TYPE (to
))
1182 && !TYPE_PTRDATAMEM_P (from
)
1183 && TREE_CODE (TREE_TYPE (from
)) != FUNCTION_TYPE
)
1185 tree nfrom
= TREE_TYPE (from
);
1186 from
= build_pointer_type
1187 (cp_build_qualified_type (void_type_node
,
1188 cp_type_quals (nfrom
)));
1189 conv
= build_conv (ck_ptr
, from
, conv
);
1191 else if (TYPE_PTRDATAMEM_P (from
))
1193 tree fbase
= TYPE_PTRMEM_CLASS_TYPE (from
);
1194 tree tbase
= TYPE_PTRMEM_CLASS_TYPE (to
);
1196 if (DERIVED_FROM_P (fbase
, tbase
)
1197 && (same_type_ignoring_top_level_qualifiers_p
1198 (TYPE_PTRMEM_POINTED_TO_TYPE (from
),
1199 TYPE_PTRMEM_POINTED_TO_TYPE (to
))))
1201 from
= build_ptrmem_type (tbase
,
1202 TYPE_PTRMEM_POINTED_TO_TYPE (from
));
1203 conv
= build_conv (ck_pmem
, from
, conv
);
1205 else if (!same_type_p (fbase
, tbase
))
1208 else if (CLASS_TYPE_P (TREE_TYPE (from
))
1209 && CLASS_TYPE_P (TREE_TYPE (to
))
1212 An rvalue of type "pointer to cv D," where D is a
1213 class type, can be converted to an rvalue of type
1214 "pointer to cv B," where B is a base class (clause
1215 _class.derived_) of D. If B is an inaccessible
1216 (clause _class.access_) or ambiguous
1217 (_class.member.lookup_) base class of D, a program
1218 that necessitates this conversion is ill-formed.
1219 Therefore, we use DERIVED_FROM_P, and do not check
1220 access or uniqueness. */
1221 && DERIVED_FROM_P (TREE_TYPE (to
), TREE_TYPE (from
)))
1224 cp_build_qualified_type (TREE_TYPE (to
),
1225 cp_type_quals (TREE_TYPE (from
)));
1226 from
= build_pointer_type (from
);
1227 conv
= build_conv (ck_ptr
, from
, conv
);
1228 conv
->base_p
= true;
1231 if (tcode
== POINTER_TYPE
)
1233 to_pointee
= TREE_TYPE (to
);
1234 from_pointee
= TREE_TYPE (from
);
1238 to_pointee
= TYPE_PTRMEM_POINTED_TO_TYPE (to
);
1239 from_pointee
= TYPE_PTRMEM_POINTED_TO_TYPE (from
);
1242 if (same_type_p (from
, to
))
1244 else if (c_cast_p
&& comp_ptr_ttypes_const (to
, from
))
1245 /* In a C-style cast, we ignore CV-qualification because we
1246 are allowed to perform a static_cast followed by a
1248 conv
= build_conv (ck_qual
, to
, conv
);
1249 else if (!c_cast_p
&& comp_ptr_ttypes (to_pointee
, from_pointee
))
1250 conv
= build_conv (ck_qual
, to
, conv
);
1251 else if (expr
&& string_conv_p (to
, expr
, 0))
1252 /* converting from string constant to char *. */
1253 conv
= build_conv (ck_qual
, to
, conv
);
1254 /* Allow conversions among compatible ObjC pointer types (base
1255 conversions have been already handled above). */
1256 else if (c_dialect_objc ()
1257 && objc_compare_types (to
, from
, -4, NULL_TREE
))
1258 conv
= build_conv (ck_ptr
, to
, conv
);
1259 else if (ptr_reasonably_similar (to_pointee
, from_pointee
))
1261 conv
= build_conv (ck_ptr
, to
, conv
);
1269 else if (TYPE_PTRMEMFUNC_P (to
) && TYPE_PTRMEMFUNC_P (from
))
1271 tree fromfn
= TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (from
));
1272 tree tofn
= TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (to
));
1273 tree fbase
= class_of_this_parm (fromfn
);
1274 tree tbase
= class_of_this_parm (tofn
);
1276 if (!DERIVED_FROM_P (fbase
, tbase
)
1277 || !same_type_p (static_fn_type (fromfn
),
1278 static_fn_type (tofn
)))
1281 from
= build_memfn_type (fromfn
, tbase
, cp_type_quals (tbase
));
1282 from
= build_ptrmemfunc_type (build_pointer_type (from
));
1283 conv
= build_conv (ck_pmem
, from
, conv
);
1284 conv
->base_p
= true;
1286 else if (tcode
== BOOLEAN_TYPE
)
1290 An rvalue of arithmetic, unscoped enumeration, pointer, or
1291 pointer to member type can be converted to an rvalue of type
1292 bool. ... An rvalue of type std::nullptr_t can be converted
1293 to an rvalue of type bool; */
1294 if (ARITHMETIC_TYPE_P (from
)
1295 || UNSCOPED_ENUM_P (from
)
1296 || fcode
== POINTER_TYPE
1297 || TYPE_PTRMEM_P (from
)
1298 || NULLPTR_TYPE_P (from
))
1300 conv
= build_conv (ck_std
, to
, conv
);
1301 if (fcode
== POINTER_TYPE
1302 || TYPE_PTRDATAMEM_P (from
)
1303 || (TYPE_PTRMEMFUNC_P (from
)
1304 && conv
->rank
< cr_pbool
)
1305 || NULLPTR_TYPE_P (from
))
1306 conv
->rank
= cr_pbool
;
1312 /* We don't check for ENUMERAL_TYPE here because there are no standard
1313 conversions to enum type. */
1314 /* As an extension, allow conversion to complex type. */
1315 else if (ARITHMETIC_TYPE_P (to
))
1317 if (! (INTEGRAL_CODE_P (fcode
) || fcode
== REAL_TYPE
)
1318 || SCOPED_ENUM_P (from
))
1320 conv
= build_conv (ck_std
, to
, conv
);
1322 /* Give this a better rank if it's a promotion. */
1323 if (same_type_p (to
, type_promotes_to (from
))
1324 && next_conversion (conv
)->rank
<= cr_promotion
)
1325 conv
->rank
= cr_promotion
;
1327 else if (fcode
== VECTOR_TYPE
&& tcode
== VECTOR_TYPE
1328 && vector_types_convertible_p (from
, to
, false))
1329 return build_conv (ck_std
, to
, conv
);
1330 else if (MAYBE_CLASS_TYPE_P (to
) && MAYBE_CLASS_TYPE_P (from
)
1331 && is_properly_derived_from (from
, to
))
1333 if (conv
->kind
== ck_rvalue
)
1334 conv
= next_conversion (conv
);
1335 conv
= build_conv (ck_base
, to
, conv
);
1336 /* The derived-to-base conversion indicates the initialization
1337 of a parameter with base type from an object of a derived
1338 type. A temporary object is created to hold the result of
1339 the conversion unless we're binding directly to a reference. */
1340 conv
->need_temporary_p
= !(flags
& LOOKUP_NO_TEMP_BIND
);
1345 if (flags
& LOOKUP_NO_NARROWING
)
1346 conv
->check_narrowing
= true;
1351 /* Returns nonzero if T1 is reference-related to T2. */
1354 reference_related_p (tree t1
, tree t2
)
1356 if (t1
== error_mark_node
|| t2
== error_mark_node
)
1359 t1
= TYPE_MAIN_VARIANT (t1
);
1360 t2
= TYPE_MAIN_VARIANT (t2
);
1364 Given types "cv1 T1" and "cv2 T2," "cv1 T1" is reference-related
1365 to "cv2 T2" if T1 is the same type as T2, or T1 is a base class
1367 return (same_type_p (t1
, t2
)
1368 || (CLASS_TYPE_P (t1
) && CLASS_TYPE_P (t2
)
1369 && DERIVED_FROM_P (t1
, t2
)));
1372 /* Returns nonzero if T1 is reference-compatible with T2. */
1375 reference_compatible_p (tree t1
, tree t2
)
1379 "cv1 T1" is reference compatible with "cv2 T2" if T1 is
1380 reference-related to T2 and cv1 is the same cv-qualification as,
1381 or greater cv-qualification than, cv2. */
1382 return (reference_related_p (t1
, t2
)
1383 && at_least_as_qualified_p (t1
, t2
));
1386 /* A reference of the indicated TYPE is being bound directly to the
1387 expression represented by the implicit conversion sequence CONV.
1388 Return a conversion sequence for this binding. */
1391 direct_reference_binding (tree type
, conversion
*conv
)
1395 gcc_assert (TREE_CODE (type
) == REFERENCE_TYPE
);
1396 gcc_assert (TREE_CODE (conv
->type
) != REFERENCE_TYPE
);
1398 t
= TREE_TYPE (type
);
1402 When a parameter of reference type binds directly
1403 (_dcl.init.ref_) to an argument expression, the implicit
1404 conversion sequence is the identity conversion, unless the
1405 argument expression has a type that is a derived class of the
1406 parameter type, in which case the implicit conversion sequence is
1407 a derived-to-base Conversion.
1409 If the parameter binds directly to the result of applying a
1410 conversion function to the argument expression, the implicit
1411 conversion sequence is a user-defined conversion sequence
1412 (_over.ics.user_), with the second standard conversion sequence
1413 either an identity conversion or, if the conversion function
1414 returns an entity of a type that is a derived class of the
1415 parameter type, a derived-to-base conversion. */
1416 if (!same_type_ignoring_top_level_qualifiers_p (t
, conv
->type
))
1418 /* Represent the derived-to-base conversion. */
1419 conv
= build_conv (ck_base
, t
, conv
);
1420 /* We will actually be binding to the base-class subobject in
1421 the derived class, so we mark this conversion appropriately.
1422 That way, convert_like knows not to generate a temporary. */
1423 conv
->need_temporary_p
= false;
1425 return build_conv (ck_ref_bind
, type
, conv
);
1428 /* Returns the conversion path from type FROM to reference type TO for
1429 purposes of reference binding. For lvalue binding, either pass a
1430 reference type to FROM or an lvalue expression to EXPR. If the
1431 reference will be bound to a temporary, NEED_TEMPORARY_P is set for
1432 the conversion returned. If C_CAST_P is true, this
1433 conversion is coming from a C-style cast. */
1436 reference_binding (tree rto
, tree rfrom
, tree expr
, bool c_cast_p
, int flags
,
1437 tsubst_flags_t complain
)
1439 conversion
*conv
= NULL
;
1440 tree to
= TREE_TYPE (rto
);
1445 cp_lvalue_kind gl_kind
;
1448 if (TREE_CODE (to
) == FUNCTION_TYPE
&& expr
&& type_unknown_p (expr
))
1450 expr
= instantiate_type (to
, expr
, tf_none
);
1451 if (expr
== error_mark_node
)
1453 from
= TREE_TYPE (expr
);
1456 if (expr
&& BRACE_ENCLOSED_INITIALIZER_P (expr
))
1458 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS
);
1459 conv
= implicit_conversion (to
, from
, expr
, c_cast_p
,
1461 if (!CLASS_TYPE_P (to
)
1462 && CONSTRUCTOR_NELTS (expr
) == 1)
1464 expr
= CONSTRUCTOR_ELT (expr
, 0)->value
;
1465 if (error_operand_p (expr
))
1467 from
= TREE_TYPE (expr
);
1471 if (TREE_CODE (from
) == REFERENCE_TYPE
)
1473 from
= TREE_TYPE (from
);
1474 if (!TYPE_REF_IS_RVALUE (rfrom
)
1475 || TREE_CODE (from
) == FUNCTION_TYPE
)
1476 gl_kind
= clk_ordinary
;
1478 gl_kind
= clk_rvalueref
;
1482 gl_kind
= lvalue_kind (expr
);
1483 if (gl_kind
& clk_class
)
1484 /* A class prvalue is not a glvalue. */
1489 is_lvalue
= gl_kind
&& !(gl_kind
& clk_rvalueref
);
1492 if ((gl_kind
& clk_bitfield
) != 0)
1493 tfrom
= unlowered_expr_type (expr
);
1495 /* Figure out whether or not the types are reference-related and
1496 reference compatible. We have do do this after stripping
1497 references from FROM. */
1498 related_p
= reference_related_p (to
, tfrom
);
1499 /* If this is a C cast, first convert to an appropriately qualified
1500 type, so that we can later do a const_cast to the desired type. */
1501 if (related_p
&& c_cast_p
1502 && !at_least_as_qualified_p (to
, tfrom
))
1503 to
= cp_build_qualified_type (to
, cp_type_quals (tfrom
));
1504 compatible_p
= reference_compatible_p (to
, tfrom
);
1506 /* Directly bind reference when target expression's type is compatible with
1507 the reference and expression is an lvalue. In DR391, the wording in
1508 [8.5.3/5 dcl.init.ref] is changed to also require direct bindings for
1509 const and rvalue references to rvalues of compatible class type.
1510 We should also do direct bindings for non-class xvalues. */
1513 || (((CP_TYPE_CONST_NON_VOLATILE_P (to
)
1514 && !(flags
& LOOKUP_NO_RVAL_BIND
))
1515 || TYPE_REF_IS_RVALUE (rto
))
1517 || (!(flags
& LOOKUP_NO_TEMP_BIND
)
1518 && (CLASS_TYPE_P (from
)
1519 || TREE_CODE (from
) == ARRAY_TYPE
))))))
1523 If the initializer expression
1525 -- is an lvalue (but not an lvalue for a bit-field), and "cv1 T1"
1526 is reference-compatible with "cv2 T2,"
1528 the reference is bound directly to the initializer expression
1532 If the initializer expression is an rvalue, with T2 a class type,
1533 and "cv1 T1" is reference-compatible with "cv2 T2", the reference
1534 is bound to the object represented by the rvalue or to a sub-object
1535 within that object. */
1537 conv
= build_identity_conv (tfrom
, expr
);
1538 conv
= direct_reference_binding (rto
, conv
);
1540 if (flags
& LOOKUP_PREFER_RVALUE
)
1541 /* The top-level caller requested that we pretend that the lvalue
1542 be treated as an rvalue. */
1543 conv
->rvaluedness_matches_p
= TYPE_REF_IS_RVALUE (rto
);
1544 else if (TREE_CODE (rfrom
) == REFERENCE_TYPE
)
1545 /* Handle rvalue reference to function properly. */
1546 conv
->rvaluedness_matches_p
1547 = (TYPE_REF_IS_RVALUE (rto
) == TYPE_REF_IS_RVALUE (rfrom
));
1549 conv
->rvaluedness_matches_p
1550 = (TYPE_REF_IS_RVALUE (rto
) == !is_lvalue
);
1552 if ((gl_kind
& clk_bitfield
) != 0
1553 || ((gl_kind
& clk_packed
) != 0 && !TYPE_PACKED (to
)))
1554 /* For the purposes of overload resolution, we ignore the fact
1555 this expression is a bitfield or packed field. (In particular,
1556 [over.ics.ref] says specifically that a function with a
1557 non-const reference parameter is viable even if the
1558 argument is a bitfield.)
1560 However, when we actually call the function we must create
1561 a temporary to which to bind the reference. If the
1562 reference is volatile, or isn't const, then we cannot make
1563 a temporary, so we just issue an error when the conversion
1565 conv
->need_temporary_p
= true;
1567 /* Don't allow binding of lvalues (other than function lvalues) to
1568 rvalue references. */
1569 if (is_lvalue
&& TYPE_REF_IS_RVALUE (rto
)
1570 && TREE_CODE (to
) != FUNCTION_TYPE
1571 && !(flags
& LOOKUP_PREFER_RVALUE
))
1576 /* [class.conv.fct] A conversion function is never used to convert a
1577 (possibly cv-qualified) object to the (possibly cv-qualified) same
1578 object type (or a reference to it), to a (possibly cv-qualified) base
1579 class of that type (or a reference to it).... */
1580 else if (CLASS_TYPE_P (from
) && !related_p
1581 && !(flags
& LOOKUP_NO_CONVERSION
))
1585 If the initializer expression
1587 -- has a class type (i.e., T2 is a class type) can be
1588 implicitly converted to an lvalue of type "cv3 T3," where
1589 "cv1 T1" is reference-compatible with "cv3 T3". (this
1590 conversion is selected by enumerating the applicable
1591 conversion functions (_over.match.ref_) and choosing the
1592 best one through overload resolution. (_over.match_).
1594 the reference is bound to the lvalue result of the conversion
1595 in the second case. */
1596 z_candidate
*cand
= build_user_type_conversion_1 (rto
, expr
, flags
,
1599 return cand
->second_conv
;
1602 /* From this point on, we conceptually need temporaries, even if we
1603 elide them. Only the cases above are "direct bindings". */
1604 if (flags
& LOOKUP_NO_TEMP_BIND
)
1609 When a parameter of reference type is not bound directly to an
1610 argument expression, the conversion sequence is the one required
1611 to convert the argument expression to the underlying type of the
1612 reference according to _over.best.ics_. Conceptually, this
1613 conversion sequence corresponds to copy-initializing a temporary
1614 of the underlying type with the argument expression. Any
1615 difference in top-level cv-qualification is subsumed by the
1616 initialization itself and does not constitute a conversion. */
1620 Otherwise, the reference shall be to a non-volatile const type.
1622 Under C++0x, [8.5.3/5 dcl.init.ref] it may also be an rvalue reference */
1623 if (!CP_TYPE_CONST_NON_VOLATILE_P (to
) && !TYPE_REF_IS_RVALUE (rto
))
1628 Otherwise, a temporary of type "cv1 T1" is created and
1629 initialized from the initializer expression using the rules for a
1630 non-reference copy initialization. If T1 is reference-related to
1631 T2, cv1 must be the same cv-qualification as, or greater
1632 cv-qualification than, cv2; otherwise, the program is ill-formed. */
1633 if (related_p
&& !at_least_as_qualified_p (to
, from
))
1636 /* We're generating a temporary now, but don't bind any more in the
1637 conversion (specifically, don't slice the temporary returned by a
1638 conversion operator). */
1639 flags
|= LOOKUP_NO_TEMP_BIND
;
1641 /* Core issue 899: When [copy-]initializing a temporary to be bound
1642 to the first parameter of a copy constructor (12.8) called with
1643 a single argument in the context of direct-initialization,
1644 explicit conversion functions are also considered.
1646 So don't set LOOKUP_ONLYCONVERTING in that case. */
1647 if (!(flags
& LOOKUP_COPY_PARM
))
1648 flags
|= LOOKUP_ONLYCONVERTING
;
1651 conv
= implicit_conversion (to
, from
, expr
, c_cast_p
,
1656 conv
= build_conv (ck_ref_bind
, rto
, conv
);
1657 /* This reference binding, unlike those above, requires the
1658 creation of a temporary. */
1659 conv
->need_temporary_p
= true;
1660 conv
->rvaluedness_matches_p
= TYPE_REF_IS_RVALUE (rto
);
1665 /* Returns the implicit conversion sequence (see [over.ics]) from type
1666 FROM to type TO. The optional expression EXPR may affect the
1667 conversion. FLAGS are the usual overloading flags. If C_CAST_P is
1668 true, this conversion is coming from a C-style cast. */
1671 implicit_conversion (tree to
, tree from
, tree expr
, bool c_cast_p
,
1672 int flags
, tsubst_flags_t complain
)
1676 if (from
== error_mark_node
|| to
== error_mark_node
1677 || expr
== error_mark_node
)
1680 /* Other flags only apply to the primary function in overload
1681 resolution, or after we've chosen one. */
1682 flags
&= (LOOKUP_ONLYCONVERTING
|LOOKUP_NO_CONVERSION
|LOOKUP_COPY_PARM
1683 |LOOKUP_NO_TEMP_BIND
|LOOKUP_NO_RVAL_BIND
|LOOKUP_PREFER_RVALUE
1684 |LOOKUP_NO_NARROWING
|LOOKUP_PROTECT
);
1686 /* FIXME: actually we don't want warnings either, but we can't just
1687 have 'complain &= ~(tf_warning|tf_error)' because it would cause
1688 the regression of, eg, g++.old-deja/g++.benjamin/16077.C.
1689 We really ought not to issue that warning until we've committed
1690 to that conversion. */
1691 complain
&= ~tf_error
;
1693 if (TREE_CODE (to
) == REFERENCE_TYPE
)
1694 conv
= reference_binding (to
, from
, expr
, c_cast_p
, flags
, complain
);
1696 conv
= standard_conversion (to
, from
, expr
, c_cast_p
, flags
);
1701 if (expr
&& BRACE_ENCLOSED_INITIALIZER_P (expr
))
1703 if (is_std_init_list (to
))
1704 return build_list_conv (to
, expr
, flags
, complain
);
1706 /* As an extension, allow list-initialization of _Complex. */
1707 if (TREE_CODE (to
) == COMPLEX_TYPE
)
1709 conv
= build_complex_conv (to
, expr
, flags
, complain
);
1714 /* Allow conversion from an initializer-list with one element to a
1716 if (SCALAR_TYPE_P (to
))
1718 int nelts
= CONSTRUCTOR_NELTS (expr
);
1722 elt
= build_value_init (to
, tf_none
);
1723 else if (nelts
== 1)
1724 elt
= CONSTRUCTOR_ELT (expr
, 0)->value
;
1726 elt
= error_mark_node
;
1728 conv
= implicit_conversion (to
, TREE_TYPE (elt
), elt
,
1729 c_cast_p
, flags
, complain
);
1732 conv
->check_narrowing
= true;
1733 if (BRACE_ENCLOSED_INITIALIZER_P (elt
))
1734 /* Too many levels of braces, i.e. '{{1}}'. */
1739 else if (TREE_CODE (to
) == ARRAY_TYPE
)
1740 return build_array_conv (to
, expr
, flags
, complain
);
1743 if (expr
!= NULL_TREE
1744 && (MAYBE_CLASS_TYPE_P (from
)
1745 || MAYBE_CLASS_TYPE_P (to
))
1746 && (flags
& LOOKUP_NO_CONVERSION
) == 0)
1748 struct z_candidate
*cand
;
1750 if (CLASS_TYPE_P (to
)
1751 && BRACE_ENCLOSED_INITIALIZER_P (expr
)
1752 && !CLASSTYPE_NON_AGGREGATE (complete_type (to
)))
1753 return build_aggr_conv (to
, expr
, flags
, complain
);
1755 cand
= build_user_type_conversion_1 (to
, expr
, flags
, complain
);
1757 conv
= cand
->second_conv
;
1759 /* We used to try to bind a reference to a temporary here, but that
1760 is now handled after the recursive call to this function at the end
1761 of reference_binding. */
1768 /* Add a new entry to the list of candidates. Used by the add_*_candidate
1769 functions. ARGS will not be changed until a single candidate is
1772 static struct z_candidate
*
1773 add_candidate (struct z_candidate
**candidates
,
1774 tree fn
, tree first_arg
, const VEC(tree
,gc
) *args
,
1775 size_t num_convs
, conversion
**convs
,
1776 tree access_path
, tree conversion_path
,
1777 int viable
, struct rejection_reason
*reason
)
1779 struct z_candidate
*cand
= (struct z_candidate
*)
1780 conversion_obstack_alloc (sizeof (struct z_candidate
));
1783 cand
->first_arg
= first_arg
;
1785 cand
->convs
= convs
;
1786 cand
->num_convs
= num_convs
;
1787 cand
->access_path
= access_path
;
1788 cand
->conversion_path
= conversion_path
;
1789 cand
->viable
= viable
;
1790 cand
->reason
= reason
;
1791 cand
->next
= *candidates
;
1797 /* Return the number of remaining arguments in the parameter list
1798 beginning with ARG. */
1801 remaining_arguments (tree arg
)
1805 for (n
= 0; arg
!= NULL_TREE
&& arg
!= void_list_node
;
1806 arg
= TREE_CHAIN (arg
))
1812 /* Create an overload candidate for the function or method FN called
1813 with the argument list FIRST_ARG/ARGS and add it to CANDIDATES.
1814 FLAGS is passed on to implicit_conversion.
1816 This does not change ARGS.
1818 CTYPE, if non-NULL, is the type we want to pretend this function
1819 comes from for purposes of overload resolution. */
1821 static struct z_candidate
*
1822 add_function_candidate (struct z_candidate
**candidates
,
1823 tree fn
, tree ctype
, tree first_arg
,
1824 const VEC(tree
,gc
) *args
, tree access_path
,
1825 tree conversion_path
, int flags
,
1826 tsubst_flags_t complain
)
1828 tree parmlist
= TYPE_ARG_TYPES (TREE_TYPE (fn
));
1832 tree orig_first_arg
= first_arg
;
1835 struct rejection_reason
*reason
= NULL
;
1837 /* At this point we should not see any functions which haven't been
1838 explicitly declared, except for friend functions which will have
1839 been found using argument dependent lookup. */
1840 gcc_assert (!DECL_ANTICIPATED (fn
) || DECL_HIDDEN_FRIEND_P (fn
));
1842 /* The `this', `in_chrg' and VTT arguments to constructors are not
1843 considered in overload resolution. */
1844 if (DECL_CONSTRUCTOR_P (fn
))
1846 parmlist
= skip_artificial_parms_for (fn
, parmlist
);
1847 skip
= num_artificial_parms_for (fn
);
1848 if (skip
> 0 && first_arg
!= NULL_TREE
)
1851 first_arg
= NULL_TREE
;
1857 len
= VEC_length (tree
, args
) - skip
+ (first_arg
!= NULL_TREE
? 1 : 0);
1858 convs
= alloc_conversions (len
);
1860 /* 13.3.2 - Viable functions [over.match.viable]
1861 First, to be a viable function, a candidate function shall have enough
1862 parameters to agree in number with the arguments in the list.
1864 We need to check this first; otherwise, checking the ICSes might cause
1865 us to produce an ill-formed template instantiation. */
1867 parmnode
= parmlist
;
1868 for (i
= 0; i
< len
; ++i
)
1870 if (parmnode
== NULL_TREE
|| parmnode
== void_list_node
)
1872 parmnode
= TREE_CHAIN (parmnode
);
1875 if ((i
< len
&& parmnode
)
1876 || !sufficient_parms_p (parmnode
))
1878 int remaining
= remaining_arguments (parmnode
);
1880 reason
= arity_rejection (first_arg
, i
+ remaining
, len
);
1882 /* When looking for a function from a subobject from an implicit
1883 copy/move constructor/operator=, don't consider anything that takes (a
1884 reference to) an unrelated type. See c++/44909 and core 1092. */
1885 else if (parmlist
&& (flags
& LOOKUP_DEFAULTED
))
1887 if (DECL_CONSTRUCTOR_P (fn
))
1889 else if (DECL_ASSIGNMENT_OPERATOR_P (fn
)
1890 && DECL_OVERLOADED_OPERATOR_P (fn
) == NOP_EXPR
)
1896 parmnode
= chain_index (i
-1, parmlist
);
1897 if (!reference_related_p (non_reference (TREE_VALUE (parmnode
)),
1902 /* This only applies at the top level. */
1903 flags
&= ~LOOKUP_DEFAULTED
;
1909 /* Second, for F to be a viable function, there shall exist for each
1910 argument an implicit conversion sequence that converts that argument
1911 to the corresponding parameter of F. */
1913 parmnode
= parmlist
;
1915 for (i
= 0; i
< len
; ++i
)
1917 tree argtype
, to_type
;
1922 if (parmnode
== void_list_node
)
1925 if (i
== 0 && first_arg
!= NULL_TREE
)
1928 arg
= CONST_CAST_TREE (
1929 VEC_index (tree
, args
,
1930 i
+ skip
- (first_arg
!= NULL_TREE
? 1 : 0)));
1931 argtype
= lvalue_type (arg
);
1933 is_this
= (i
== 0 && DECL_NONSTATIC_MEMBER_FUNCTION_P (fn
)
1934 && ! DECL_CONSTRUCTOR_P (fn
));
1938 tree parmtype
= TREE_VALUE (parmnode
);
1941 parmnode
= TREE_CHAIN (parmnode
);
1943 /* The type of the implicit object parameter ('this') for
1944 overload resolution is not always the same as for the
1945 function itself; conversion functions are considered to
1946 be members of the class being converted, and functions
1947 introduced by a using-declaration are considered to be
1948 members of the class that uses them.
1950 Since build_over_call ignores the ICS for the `this'
1951 parameter, we can just change the parm type. */
1952 if (ctype
&& is_this
)
1954 parmtype
= cp_build_qualified_type
1955 (ctype
, cp_type_quals (TREE_TYPE (parmtype
)));
1956 parmtype
= build_pointer_type (parmtype
);
1959 /* Core issue 899: When [copy-]initializing a temporary to be bound
1960 to the first parameter of a copy constructor (12.8) called with
1961 a single argument in the context of direct-initialization,
1962 explicit conversion functions are also considered.
1964 So set LOOKUP_COPY_PARM to let reference_binding know that
1965 it's being called in that context. We generalize the above
1966 to handle move constructors and template constructors as well;
1967 the standardese should soon be updated similarly. */
1968 if (ctype
&& i
== 0 && (len
-skip
== 1)
1969 && DECL_CONSTRUCTOR_P (fn
)
1970 && parmtype
!= error_mark_node
1971 && (same_type_ignoring_top_level_qualifiers_p
1972 (non_reference (parmtype
), ctype
)))
1974 if (!(flags
& LOOKUP_ONLYCONVERTING
))
1975 lflags
|= LOOKUP_COPY_PARM
;
1976 /* We allow user-defined conversions within init-lists, but
1977 don't list-initialize the copy parm, as that would mean
1978 using two levels of braces for the same type. */
1979 if ((flags
& LOOKUP_LIST_INIT_CTOR
)
1980 && BRACE_ENCLOSED_INITIALIZER_P (arg
))
1981 lflags
|= LOOKUP_NO_CONVERSION
;
1984 lflags
|= LOOKUP_ONLYCONVERTING
;
1986 t
= implicit_conversion (parmtype
, argtype
, arg
,
1987 /*c_cast_p=*/false, lflags
, complain
);
1992 t
= build_identity_conv (argtype
, arg
);
1993 t
->ellipsis_p
= true;
2004 reason
= arg_conversion_rejection (first_arg
, i
, argtype
, to_type
);
2011 reason
= bad_arg_conversion_rejection (first_arg
, i
, argtype
, to_type
);
2016 return add_candidate (candidates
, fn
, orig_first_arg
, args
, len
, convs
,
2017 access_path
, conversion_path
, viable
, reason
);
2020 /* Create an overload candidate for the conversion function FN which will
2021 be invoked for expression OBJ, producing a pointer-to-function which
2022 will in turn be called with the argument list FIRST_ARG/ARGLIST,
2023 and add it to CANDIDATES. This does not change ARGLIST. FLAGS is
2024 passed on to implicit_conversion.
2026 Actually, we don't really care about FN; we care about the type it
2027 converts to. There may be multiple conversion functions that will
2028 convert to that type, and we rely on build_user_type_conversion_1 to
2029 choose the best one; so when we create our candidate, we record the type
2030 instead of the function. */
2032 static struct z_candidate
*
2033 add_conv_candidate (struct z_candidate
**candidates
, tree fn
, tree obj
,
2034 tree first_arg
, const VEC(tree
,gc
) *arglist
,
2035 tree access_path
, tree conversion_path
,
2036 tsubst_flags_t complain
)
2038 tree totype
= TREE_TYPE (TREE_TYPE (fn
));
2039 int i
, len
, viable
, flags
;
2040 tree parmlist
, parmnode
;
2042 struct rejection_reason
*reason
;
2044 for (parmlist
= totype
; TREE_CODE (parmlist
) != FUNCTION_TYPE
; )
2045 parmlist
= TREE_TYPE (parmlist
);
2046 parmlist
= TYPE_ARG_TYPES (parmlist
);
2048 len
= VEC_length (tree
, arglist
) + (first_arg
!= NULL_TREE
? 1 : 0) + 1;
2049 convs
= alloc_conversions (len
);
2050 parmnode
= parmlist
;
2052 flags
= LOOKUP_IMPLICIT
;
2055 /* Don't bother looking up the same type twice. */
2056 if (*candidates
&& (*candidates
)->fn
== totype
)
2059 for (i
= 0; i
< len
; ++i
)
2061 tree arg
, argtype
, convert_type
= NULL_TREE
;
2066 else if (i
== 1 && first_arg
!= NULL_TREE
)
2069 arg
= VEC_index (tree
, arglist
,
2070 i
- (first_arg
!= NULL_TREE
? 1 : 0) - 1);
2071 argtype
= lvalue_type (arg
);
2075 t
= implicit_conversion (totype
, argtype
, arg
, /*c_cast_p=*/false,
2077 convert_type
= totype
;
2079 else if (parmnode
== void_list_node
)
2083 t
= implicit_conversion (TREE_VALUE (parmnode
), argtype
, arg
,
2084 /*c_cast_p=*/false, flags
, complain
);
2085 convert_type
= TREE_VALUE (parmnode
);
2089 t
= build_identity_conv (argtype
, arg
);
2090 t
->ellipsis_p
= true;
2091 convert_type
= argtype
;
2101 reason
= bad_arg_conversion_rejection (NULL_TREE
, i
, argtype
, convert_type
);
2108 parmnode
= TREE_CHAIN (parmnode
);
2112 || ! sufficient_parms_p (parmnode
))
2114 int remaining
= remaining_arguments (parmnode
);
2116 reason
= arity_rejection (NULL_TREE
, i
+ remaining
, len
);
2119 return add_candidate (candidates
, totype
, first_arg
, arglist
, len
, convs
,
2120 access_path
, conversion_path
, viable
, reason
);
2124 build_builtin_candidate (struct z_candidate
**candidates
, tree fnname
,
2125 tree type1
, tree type2
, tree
*args
, tree
*argtypes
,
2126 int flags
, tsubst_flags_t complain
)
2133 struct rejection_reason
*reason
= NULL
;
2138 num_convs
= args
[2] ? 3 : (args
[1] ? 2 : 1);
2139 convs
= alloc_conversions (num_convs
);
2141 /* TRUTH_*_EXPR do "contextual conversion to bool", which means explicit
2142 conversion ops are allowed. We handle that here by just checking for
2143 boolean_type_node because other operators don't ask for it. COND_EXPR
2144 also does contextual conversion to bool for the first operand, but we
2145 handle that in build_conditional_expr, and type1 here is operand 2. */
2146 if (type1
!= boolean_type_node
)
2147 flags
|= LOOKUP_ONLYCONVERTING
;
2149 for (i
= 0; i
< 2; ++i
)
2154 t
= implicit_conversion (types
[i
], argtypes
[i
], args
[i
],
2155 /*c_cast_p=*/false, flags
, complain
);
2159 /* We need something for printing the candidate. */
2160 t
= build_identity_conv (types
[i
], NULL_TREE
);
2161 reason
= arg_conversion_rejection (NULL_TREE
, i
, argtypes
[i
],
2167 reason
= bad_arg_conversion_rejection (NULL_TREE
, i
, argtypes
[i
],
2173 /* For COND_EXPR we rearranged the arguments; undo that now. */
2176 convs
[2] = convs
[1];
2177 convs
[1] = convs
[0];
2178 t
= implicit_conversion (boolean_type_node
, argtypes
[2], args
[2],
2179 /*c_cast_p=*/false, flags
,
2186 reason
= arg_conversion_rejection (NULL_TREE
, 0, argtypes
[2],
2191 add_candidate (candidates
, fnname
, /*first_arg=*/NULL_TREE
, /*args=*/NULL
,
2193 /*access_path=*/NULL_TREE
,
2194 /*conversion_path=*/NULL_TREE
,
2199 is_complete (tree t
)
2201 return COMPLETE_TYPE_P (complete_type (t
));
2204 /* Returns nonzero if TYPE is a promoted arithmetic type. */
2207 promoted_arithmetic_type_p (tree type
)
2211 In this section, the term promoted integral type is used to refer
2212 to those integral types which are preserved by integral promotion
2213 (including e.g. int and long but excluding e.g. char).
2214 Similarly, the term promoted arithmetic type refers to promoted
2215 integral types plus floating types. */
2216 return ((CP_INTEGRAL_TYPE_P (type
)
2217 && same_type_p (type_promotes_to (type
), type
))
2218 || TREE_CODE (type
) == REAL_TYPE
);
2221 /* Create any builtin operator overload candidates for the operator in
2222 question given the converted operand types TYPE1 and TYPE2. The other
2223 args are passed through from add_builtin_candidates to
2224 build_builtin_candidate.
2226 TYPE1 and TYPE2 may not be permissible, and we must filter them.
2227 If CODE is requires candidates operands of the same type of the kind
2228 of which TYPE1 and TYPE2 are, we add both candidates
2229 CODE (TYPE1, TYPE1) and CODE (TYPE2, TYPE2). */
2232 add_builtin_candidate (struct z_candidate
**candidates
, enum tree_code code
,
2233 enum tree_code code2
, tree fnname
, tree type1
,
2234 tree type2
, tree
*args
, tree
*argtypes
, int flags
,
2235 tsubst_flags_t complain
)
2239 case POSTINCREMENT_EXPR
:
2240 case POSTDECREMENT_EXPR
:
2241 args
[1] = integer_zero_node
;
2242 type2
= integer_type_node
;
2251 /* 4 For every pair T, VQ), where T is an arithmetic or enumeration type,
2252 and VQ is either volatile or empty, there exist candidate operator
2253 functions of the form
2254 VQ T& operator++(VQ T&);
2255 T operator++(VQ T&, int);
2256 5 For every pair T, VQ), where T is an enumeration type or an arithmetic
2257 type other than bool, and VQ is either volatile or empty, there exist
2258 candidate operator functions of the form
2259 VQ T& operator--(VQ T&);
2260 T operator--(VQ T&, int);
2261 6 For every pair T, VQ), where T is a cv-qualified or cv-unqualified
2262 complete object type, and VQ is either volatile or empty, there exist
2263 candidate operator functions of the form
2264 T*VQ& operator++(T*VQ&);
2265 T*VQ& operator--(T*VQ&);
2266 T* operator++(T*VQ&, int);
2267 T* operator--(T*VQ&, int); */
2269 case POSTDECREMENT_EXPR
:
2270 case PREDECREMENT_EXPR
:
2271 if (TREE_CODE (type1
) == BOOLEAN_TYPE
)
2273 case POSTINCREMENT_EXPR
:
2274 case PREINCREMENT_EXPR
:
2275 if (ARITHMETIC_TYPE_P (type1
) || TYPE_PTROB_P (type1
))
2277 type1
= build_reference_type (type1
);
2282 /* 7 For every cv-qualified or cv-unqualified object type T, there
2283 exist candidate operator functions of the form
2287 8 For every function type T, there exist candidate operator functions of
2289 T& operator*(T*); */
2292 if (TREE_CODE (type1
) == POINTER_TYPE
2293 && !uses_template_parms (TREE_TYPE (type1
))
2294 && (TYPE_PTROB_P (type1
)
2295 || TREE_CODE (TREE_TYPE (type1
)) == FUNCTION_TYPE
))
2299 /* 9 For every type T, there exist candidate operator functions of the form
2302 10For every promoted arithmetic type T, there exist candidate operator
2303 functions of the form
2307 case UNARY_PLUS_EXPR
: /* unary + */
2308 if (TREE_CODE (type1
) == POINTER_TYPE
)
2311 if (ARITHMETIC_TYPE_P (type1
))
2315 /* 11For every promoted integral type T, there exist candidate operator
2316 functions of the form
2320 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1
))
2324 /* 12For every quintuple C1, C2, T, CV1, CV2), where C2 is a class type, C1
2325 is the same type as C2 or is a derived class of C2, T is a complete
2326 object type or a function type, and CV1 and CV2 are cv-qualifier-seqs,
2327 there exist candidate operator functions of the form
2328 CV12 T& operator->*(CV1 C1*, CV2 T C2::*);
2329 where CV12 is the union of CV1 and CV2. */
2332 if (TREE_CODE (type1
) == POINTER_TYPE
2333 && TYPE_PTRMEM_P (type2
))
2335 tree c1
= TREE_TYPE (type1
);
2336 tree c2
= TYPE_PTRMEM_CLASS_TYPE (type2
);
2338 if (MAYBE_CLASS_TYPE_P (c1
) && DERIVED_FROM_P (c2
, c1
)
2339 && (TYPE_PTRMEMFUNC_P (type2
)
2340 || is_complete (TYPE_PTRMEM_POINTED_TO_TYPE (type2
))))
2345 /* 13For every pair of promoted arithmetic types L and R, there exist can-
2346 didate operator functions of the form
2351 bool operator<(L, R);
2352 bool operator>(L, R);
2353 bool operator<=(L, R);
2354 bool operator>=(L, R);
2355 bool operator==(L, R);
2356 bool operator!=(L, R);
2357 where LR is the result of the usual arithmetic conversions between
2360 14For every pair of types T and I, where T is a cv-qualified or cv-
2361 unqualified complete object type and I is a promoted integral type,
2362 there exist candidate operator functions of the form
2363 T* operator+(T*, I);
2364 T& operator[](T*, I);
2365 T* operator-(T*, I);
2366 T* operator+(I, T*);
2367 T& operator[](I, T*);
2369 15For every T, where T is a pointer to complete object type, there exist
2370 candidate operator functions of the form112)
2371 ptrdiff_t operator-(T, T);
2373 16For every pointer or enumeration type T, there exist candidate operator
2374 functions of the form
2375 bool operator<(T, T);
2376 bool operator>(T, T);
2377 bool operator<=(T, T);
2378 bool operator>=(T, T);
2379 bool operator==(T, T);
2380 bool operator!=(T, T);
2382 17For every pointer to member type T, there exist candidate operator
2383 functions of the form
2384 bool operator==(T, T);
2385 bool operator!=(T, T); */
2388 if (TYPE_PTROB_P (type1
) && TYPE_PTROB_P (type2
))
2390 if (TYPE_PTROB_P (type1
)
2391 && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2
))
2393 type2
= ptrdiff_type_node
;
2397 case TRUNC_DIV_EXPR
:
2398 if (ARITHMETIC_TYPE_P (type1
) && ARITHMETIC_TYPE_P (type2
))
2404 if ((TYPE_PTRMEMFUNC_P (type1
) && TYPE_PTRMEMFUNC_P (type2
))
2405 || (TYPE_PTRDATAMEM_P (type1
) && TYPE_PTRDATAMEM_P (type2
)))
2407 if (TYPE_PTRMEM_P (type1
) && null_ptr_cst_p (args
[1]))
2412 if (TYPE_PTRMEM_P (type2
) && null_ptr_cst_p (args
[0]))
2424 if (ARITHMETIC_TYPE_P (type1
) && ARITHMETIC_TYPE_P (type2
))
2426 if (TYPE_PTR_P (type1
) && TYPE_PTR_P (type2
))
2428 if (TREE_CODE (type1
) == ENUMERAL_TYPE
2429 && TREE_CODE (type2
) == ENUMERAL_TYPE
)
2431 if (TYPE_PTR_P (type1
)
2432 && null_ptr_cst_p (args
[1])
2433 && !uses_template_parms (type1
))
2438 if (null_ptr_cst_p (args
[0])
2439 && TYPE_PTR_P (type2
)
2440 && !uses_template_parms (type2
))
2448 if (ARITHMETIC_TYPE_P (type1
) && ARITHMETIC_TYPE_P (type2
))
2451 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1
) && TYPE_PTROB_P (type2
))
2453 type1
= ptrdiff_type_node
;
2456 if (TYPE_PTROB_P (type1
) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2
))
2458 type2
= ptrdiff_type_node
;
2463 /* 18For every pair of promoted integral types L and R, there exist candi-
2464 date operator functions of the form
2471 where LR is the result of the usual arithmetic conversions between
2474 case TRUNC_MOD_EXPR
:
2480 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1
) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2
))
2484 /* 19For every triple L, VQ, R), where L is an arithmetic or enumeration
2485 type, VQ is either volatile or empty, and R is a promoted arithmetic
2486 type, there exist candidate operator functions of the form
2487 VQ L& operator=(VQ L&, R);
2488 VQ L& operator*=(VQ L&, R);
2489 VQ L& operator/=(VQ L&, R);
2490 VQ L& operator+=(VQ L&, R);
2491 VQ L& operator-=(VQ L&, R);
2493 20For every pair T, VQ), where T is any type and VQ is either volatile
2494 or empty, there exist candidate operator functions of the form
2495 T*VQ& operator=(T*VQ&, T*);
2497 21For every pair T, VQ), where T is a pointer to member type and VQ is
2498 either volatile or empty, there exist candidate operator functions of
2500 VQ T& operator=(VQ T&, T);
2502 22For every triple T, VQ, I), where T is a cv-qualified or cv-
2503 unqualified complete object type, VQ is either volatile or empty, and
2504 I is a promoted integral type, there exist candidate operator func-
2506 T*VQ& operator+=(T*VQ&, I);
2507 T*VQ& operator-=(T*VQ&, I);
2509 23For every triple L, VQ, R), where L is an integral or enumeration
2510 type, VQ is either volatile or empty, and R is a promoted integral
2511 type, there exist candidate operator functions of the form
2513 VQ L& operator%=(VQ L&, R);
2514 VQ L& operator<<=(VQ L&, R);
2515 VQ L& operator>>=(VQ L&, R);
2516 VQ L& operator&=(VQ L&, R);
2517 VQ L& operator^=(VQ L&, R);
2518 VQ L& operator|=(VQ L&, R); */
2525 if (TYPE_PTROB_P (type1
) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2
))
2527 type2
= ptrdiff_type_node
;
2531 case TRUNC_DIV_EXPR
:
2532 if (ARITHMETIC_TYPE_P (type1
) && ARITHMETIC_TYPE_P (type2
))
2536 case TRUNC_MOD_EXPR
:
2542 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1
) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2
))
2547 if (ARITHMETIC_TYPE_P (type1
) && ARITHMETIC_TYPE_P (type2
))
2549 if ((TYPE_PTRMEMFUNC_P (type1
) && TYPE_PTRMEMFUNC_P (type2
))
2550 || (TYPE_PTR_P (type1
) && TYPE_PTR_P (type2
))
2551 || (TYPE_PTRDATAMEM_P (type1
) && TYPE_PTRDATAMEM_P (type2
))
2552 || ((TYPE_PTRMEMFUNC_P (type1
)
2553 || TREE_CODE (type1
) == POINTER_TYPE
)
2554 && null_ptr_cst_p (args
[1])))
2564 type1
= build_reference_type (type1
);
2570 For every pair of promoted arithmetic types L and R, there
2571 exist candidate operator functions of the form
2573 LR operator?(bool, L, R);
2575 where LR is the result of the usual arithmetic conversions
2576 between types L and R.
2578 For every type T, where T is a pointer or pointer-to-member
2579 type, there exist candidate operator functions of the form T
2580 operator?(bool, T, T); */
2582 if (promoted_arithmetic_type_p (type1
)
2583 && promoted_arithmetic_type_p (type2
))
2587 /* Otherwise, the types should be pointers. */
2588 if (!TYPE_PTR_OR_PTRMEM_P (type1
) || !TYPE_PTR_OR_PTRMEM_P (type2
))
2591 /* We don't check that the two types are the same; the logic
2592 below will actually create two candidates; one in which both
2593 parameter types are TYPE1, and one in which both parameter
2599 if (ARITHMETIC_TYPE_P (type1
))
2607 /* If we're dealing with two pointer types or two enumeral types,
2608 we need candidates for both of them. */
2609 if (type2
&& !same_type_p (type1
, type2
)
2610 && TREE_CODE (type1
) == TREE_CODE (type2
)
2611 && (TREE_CODE (type1
) == REFERENCE_TYPE
2612 || (TYPE_PTR_P (type1
) && TYPE_PTR_P (type2
))
2613 || (TYPE_PTRDATAMEM_P (type1
) && TYPE_PTRDATAMEM_P (type2
))
2614 || TYPE_PTRMEMFUNC_P (type1
)
2615 || MAYBE_CLASS_TYPE_P (type1
)
2616 || TREE_CODE (type1
) == ENUMERAL_TYPE
))
2618 if (TYPE_PTR_OR_PTRMEM_P (type1
))
2620 tree cptype
= composite_pointer_type (type1
, type2
,
2625 if (cptype
!= error_mark_node
)
2627 build_builtin_candidate
2628 (candidates
, fnname
, cptype
, cptype
, args
, argtypes
,
2634 build_builtin_candidate
2635 (candidates
, fnname
, type1
, type1
, args
, argtypes
, flags
, complain
);
2636 build_builtin_candidate
2637 (candidates
, fnname
, type2
, type2
, args
, argtypes
, flags
, complain
);
2641 build_builtin_candidate
2642 (candidates
, fnname
, type1
, type2
, args
, argtypes
, flags
, complain
);
2646 type_decays_to (tree type
)
2648 if (TREE_CODE (type
) == ARRAY_TYPE
)
2649 return build_pointer_type (TREE_TYPE (type
));
2650 if (TREE_CODE (type
) == FUNCTION_TYPE
)
2651 return build_pointer_type (type
);
2655 /* There are three conditions of builtin candidates:
2657 1) bool-taking candidates. These are the same regardless of the input.
2658 2) pointer-pair taking candidates. These are generated for each type
2659 one of the input types converts to.
2660 3) arithmetic candidates. According to the standard, we should generate
2661 all of these, but I'm trying not to...
2663 Here we generate a superset of the possible candidates for this particular
2664 case. That is a subset of the full set the standard defines, plus some
2665 other cases which the standard disallows. add_builtin_candidate will
2666 filter out the invalid set. */
2669 add_builtin_candidates (struct z_candidate
**candidates
, enum tree_code code
,
2670 enum tree_code code2
, tree fnname
, tree
*args
,
2671 int flags
, tsubst_flags_t complain
)
2675 tree type
, argtypes
[3], t
;
2676 /* TYPES[i] is the set of possible builtin-operator parameter types
2677 we will consider for the Ith argument. */
2678 VEC(tree
,gc
) *types
[2];
2681 for (i
= 0; i
< 3; ++i
)
2684 argtypes
[i
] = unlowered_expr_type (args
[i
]);
2686 argtypes
[i
] = NULL_TREE
;
2691 /* 4 For every pair T, VQ), where T is an arithmetic or enumeration type,
2692 and VQ is either volatile or empty, there exist candidate operator
2693 functions of the form
2694 VQ T& operator++(VQ T&); */
2696 case POSTINCREMENT_EXPR
:
2697 case PREINCREMENT_EXPR
:
2698 case POSTDECREMENT_EXPR
:
2699 case PREDECREMENT_EXPR
:
2704 /* 24There also exist candidate operator functions of the form
2705 bool operator!(bool);
2706 bool operator&&(bool, bool);
2707 bool operator||(bool, bool); */
2709 case TRUTH_NOT_EXPR
:
2710 build_builtin_candidate
2711 (candidates
, fnname
, boolean_type_node
,
2712 NULL_TREE
, args
, argtypes
, flags
, complain
);
2715 case TRUTH_ORIF_EXPR
:
2716 case TRUTH_ANDIF_EXPR
:
2717 build_builtin_candidate
2718 (candidates
, fnname
, boolean_type_node
,
2719 boolean_type_node
, args
, argtypes
, flags
, complain
);
2741 types
[0] = make_tree_vector ();
2742 types
[1] = make_tree_vector ();
2744 for (i
= 0; i
< 2; ++i
)
2748 else if (MAYBE_CLASS_TYPE_P (argtypes
[i
]))
2752 if (i
== 0 && code
== MODIFY_EXPR
&& code2
== NOP_EXPR
)
2755 convs
= lookup_conversions (argtypes
[i
]);
2757 if (code
== COND_EXPR
)
2759 if (real_lvalue_p (args
[i
]))
2760 VEC_safe_push (tree
, gc
, types
[i
],
2761 build_reference_type (argtypes
[i
]));
2763 VEC_safe_push (tree
, gc
, types
[i
],
2764 TYPE_MAIN_VARIANT (argtypes
[i
]));
2770 for (; convs
; convs
= TREE_CHAIN (convs
))
2772 type
= TREE_TYPE (convs
);
2775 && (TREE_CODE (type
) != REFERENCE_TYPE
2776 || CP_TYPE_CONST_P (TREE_TYPE (type
))))
2779 if (code
== COND_EXPR
&& TREE_CODE (type
) == REFERENCE_TYPE
)
2780 VEC_safe_push (tree
, gc
, types
[i
], type
);
2782 type
= non_reference (type
);
2783 if (i
!= 0 || ! ref1
)
2785 type
= cv_unqualified (type_decays_to (type
));
2786 if (enum_p
&& TREE_CODE (type
) == ENUMERAL_TYPE
)
2787 VEC_safe_push (tree
, gc
, types
[i
], type
);
2788 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type
))
2789 type
= type_promotes_to (type
);
2792 if (! vec_member (type
, types
[i
]))
2793 VEC_safe_push (tree
, gc
, types
[i
], type
);
2798 if (code
== COND_EXPR
&& real_lvalue_p (args
[i
]))
2799 VEC_safe_push (tree
, gc
, types
[i
],
2800 build_reference_type (argtypes
[i
]));
2801 type
= non_reference (argtypes
[i
]);
2802 if (i
!= 0 || ! ref1
)
2804 type
= cv_unqualified (type_decays_to (type
));
2805 if (enum_p
&& UNSCOPED_ENUM_P (type
))
2806 VEC_safe_push (tree
, gc
, types
[i
], type
);
2807 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type
))
2808 type
= type_promotes_to (type
);
2810 VEC_safe_push (tree
, gc
, types
[i
], type
);
2814 /* Run through the possible parameter types of both arguments,
2815 creating candidates with those parameter types. */
2816 FOR_EACH_VEC_ELT_REVERSE (tree
, types
[0], ix
, t
)
2821 if (!VEC_empty (tree
, types
[1]))
2822 FOR_EACH_VEC_ELT_REVERSE (tree
, types
[1], jx
, u
)
2823 add_builtin_candidate
2824 (candidates
, code
, code2
, fnname
, t
,
2825 u
, args
, argtypes
, flags
, complain
);
2827 add_builtin_candidate
2828 (candidates
, code
, code2
, fnname
, t
,
2829 NULL_TREE
, args
, argtypes
, flags
, complain
);
2832 release_tree_vector (types
[0]);
2833 release_tree_vector (types
[1]);
2837 /* If TMPL can be successfully instantiated as indicated by
2838 EXPLICIT_TARGS and ARGLIST, adds the instantiation to CANDIDATES.
2840 TMPL is the template. EXPLICIT_TARGS are any explicit template
2841 arguments. ARGLIST is the arguments provided at the call-site.
2842 This does not change ARGLIST. The RETURN_TYPE is the desired type
2843 for conversion operators. If OBJ is NULL_TREE, FLAGS and CTYPE are
2844 as for add_function_candidate. If an OBJ is supplied, FLAGS and
2845 CTYPE are ignored, and OBJ is as for add_conv_candidate. */
2847 static struct z_candidate
*
2848 add_template_candidate_real (struct z_candidate
**candidates
, tree tmpl
,
2849 tree ctype
, tree explicit_targs
, tree first_arg
,
2850 const VEC(tree
,gc
) *arglist
, tree return_type
,
2851 tree access_path
, tree conversion_path
,
2852 int flags
, tree obj
, unification_kind_t strict
,
2853 tsubst_flags_t complain
)
2855 int ntparms
= DECL_NTPARMS (tmpl
);
2856 tree targs
= make_tree_vec (ntparms
);
2857 unsigned int len
= VEC_length (tree
, arglist
);
2858 unsigned int nargs
= (first_arg
== NULL_TREE
? 0 : 1) + len
;
2859 unsigned int skip_without_in_chrg
= 0;
2860 tree first_arg_without_in_chrg
= first_arg
;
2861 tree
*args_without_in_chrg
;
2862 unsigned int nargs_without_in_chrg
;
2863 unsigned int ia
, ix
;
2865 struct z_candidate
*cand
;
2867 struct rejection_reason
*reason
= NULL
;
2870 /* We don't do deduction on the in-charge parameter, the VTT
2871 parameter or 'this'. */
2872 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (tmpl
))
2874 if (first_arg_without_in_chrg
!= NULL_TREE
)
2875 first_arg_without_in_chrg
= NULL_TREE
;
2877 ++skip_without_in_chrg
;
2880 if ((DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (tmpl
)
2881 || DECL_BASE_CONSTRUCTOR_P (tmpl
))
2882 && CLASSTYPE_VBASECLASSES (DECL_CONTEXT (tmpl
)))
2884 if (first_arg_without_in_chrg
!= NULL_TREE
)
2885 first_arg_without_in_chrg
= NULL_TREE
;
2887 ++skip_without_in_chrg
;
2890 if (len
< skip_without_in_chrg
)
2893 nargs_without_in_chrg
= ((first_arg_without_in_chrg
!= NULL_TREE
? 1 : 0)
2894 + (len
- skip_without_in_chrg
));
2895 args_without_in_chrg
= XALLOCAVEC (tree
, nargs_without_in_chrg
);
2897 if (first_arg_without_in_chrg
!= NULL_TREE
)
2899 args_without_in_chrg
[ia
] = first_arg_without_in_chrg
;
2902 for (ix
= skip_without_in_chrg
;
2903 VEC_iterate (tree
, arglist
, ix
, arg
);
2906 args_without_in_chrg
[ia
] = arg
;
2909 gcc_assert (ia
== nargs_without_in_chrg
);
2911 errs
= errorcount
+sorrycount
;
2912 fn
= fn_type_unification (tmpl
, explicit_targs
, targs
,
2913 args_without_in_chrg
,
2914 nargs_without_in_chrg
,
2915 return_type
, strict
, flags
, false);
2917 if (fn
== error_mark_node
)
2919 /* Don't repeat unification later if it already resulted in errors. */
2920 if (errorcount
+sorrycount
== errs
)
2921 reason
= template_unification_rejection (tmpl
, explicit_targs
,
2922 targs
, args_without_in_chrg
,
2923 nargs_without_in_chrg
,
2924 return_type
, strict
, flags
);
2926 reason
= template_unification_error_rejection ();
2932 A member function template is never instantiated to perform the
2933 copy of a class object to an object of its class type.
2935 It's a little unclear what this means; the standard explicitly
2936 does allow a template to be used to copy a class. For example,
2941 template <class T> A(const T&);
2944 void g () { A a (f ()); }
2946 the member template will be used to make the copy. The section
2947 quoted above appears in the paragraph that forbids constructors
2948 whose only parameter is (a possibly cv-qualified variant of) the
2949 class type, and a logical interpretation is that the intent was
2950 to forbid the instantiation of member templates which would then
2952 if (DECL_CONSTRUCTOR_P (fn
) && nargs
== 2)
2954 tree arg_types
= FUNCTION_FIRST_USER_PARMTYPE (fn
);
2955 if (arg_types
&& same_type_p (TYPE_MAIN_VARIANT (TREE_VALUE (arg_types
)),
2958 reason
= invalid_copy_with_fn_template_rejection ();
2963 if (obj
!= NULL_TREE
)
2964 /* Aha, this is a conversion function. */
2965 cand
= add_conv_candidate (candidates
, fn
, obj
, first_arg
, arglist
,
2966 access_path
, conversion_path
, complain
);
2968 cand
= add_function_candidate (candidates
, fn
, ctype
,
2969 first_arg
, arglist
, access_path
,
2970 conversion_path
, flags
, complain
);
2971 if (DECL_TI_TEMPLATE (fn
) != tmpl
)
2972 /* This situation can occur if a member template of a template
2973 class is specialized. Then, instantiate_template might return
2974 an instantiation of the specialization, in which case the
2975 DECL_TI_TEMPLATE field will point at the original
2976 specialization. For example:
2978 template <class T> struct S { template <class U> void f(U);
2979 template <> void f(int) {}; };
2983 Here, TMPL will be template <class U> S<double>::f(U).
2984 And, instantiate template will give us the specialization
2985 template <> S<double>::f(int). But, the DECL_TI_TEMPLATE field
2986 for this will point at template <class T> template <> S<T>::f(int),
2987 so that we can find the definition. For the purposes of
2988 overload resolution, however, we want the original TMPL. */
2989 cand
->template_decl
= build_template_info (tmpl
, targs
);
2991 cand
->template_decl
= DECL_TEMPLATE_INFO (fn
);
2992 cand
->explicit_targs
= explicit_targs
;
2996 return add_candidate (candidates
, tmpl
, first_arg
, arglist
, nargs
, NULL
,
2997 access_path
, conversion_path
, 0, reason
);
3001 static struct z_candidate
*
3002 add_template_candidate (struct z_candidate
**candidates
, tree tmpl
, tree ctype
,
3003 tree explicit_targs
, tree first_arg
,
3004 const VEC(tree
,gc
) *arglist
, tree return_type
,
3005 tree access_path
, tree conversion_path
, int flags
,
3006 unification_kind_t strict
, tsubst_flags_t complain
)
3009 add_template_candidate_real (candidates
, tmpl
, ctype
,
3010 explicit_targs
, first_arg
, arglist
,
3011 return_type
, access_path
, conversion_path
,
3012 flags
, NULL_TREE
, strict
, complain
);
3016 static struct z_candidate
*
3017 add_template_conv_candidate (struct z_candidate
**candidates
, tree tmpl
,
3018 tree obj
, tree first_arg
,
3019 const VEC(tree
,gc
) *arglist
,
3020 tree return_type
, tree access_path
,
3021 tree conversion_path
, tsubst_flags_t complain
)
3024 add_template_candidate_real (candidates
, tmpl
, NULL_TREE
, NULL_TREE
,
3025 first_arg
, arglist
, return_type
, access_path
,
3026 conversion_path
, 0, obj
, DEDUCE_CONV
,
3030 /* The CANDS are the set of candidates that were considered for
3031 overload resolution. Return the set of viable candidates, or CANDS
3032 if none are viable. If any of the candidates were viable, set
3033 *ANY_VIABLE_P to true. STRICT_P is true if a candidate should be
3034 considered viable only if it is strictly viable. */
3036 static struct z_candidate
*
3037 splice_viable (struct z_candidate
*cands
,
3041 struct z_candidate
*viable
;
3042 struct z_candidate
**last_viable
;
3043 struct z_candidate
**cand
;
3045 /* Be strict inside templates, since build_over_call won't actually
3046 do the conversions to get pedwarns. */
3047 if (processing_template_decl
)
3051 last_viable
= &viable
;
3052 *any_viable_p
= false;
3057 struct z_candidate
*c
= *cand
;
3058 if (strict_p
? c
->viable
== 1 : c
->viable
)
3063 last_viable
= &c
->next
;
3064 *any_viable_p
= true;
3070 return viable
? viable
: cands
;
3074 any_strictly_viable (struct z_candidate
*cands
)
3076 for (; cands
; cands
= cands
->next
)
3077 if (cands
->viable
== 1)
3082 /* OBJ is being used in an expression like "OBJ.f (...)". In other
3083 words, it is about to become the "this" pointer for a member
3084 function call. Take the address of the object. */
3087 build_this (tree obj
)
3089 /* In a template, we are only concerned about the type of the
3090 expression, so we can take a shortcut. */
3091 if (processing_template_decl
)
3092 return build_address (obj
);
3094 return cp_build_addr_expr (obj
, tf_warning_or_error
);
3097 /* Returns true iff functions are equivalent. Equivalent functions are
3098 not '==' only if one is a function-local extern function or if
3099 both are extern "C". */
3102 equal_functions (tree fn1
, tree fn2
)
3104 if (TREE_CODE (fn1
) != TREE_CODE (fn2
))
3106 if (TREE_CODE (fn1
) == TEMPLATE_DECL
)
3108 if (DECL_LOCAL_FUNCTION_P (fn1
) || DECL_LOCAL_FUNCTION_P (fn2
)
3109 || DECL_EXTERN_C_FUNCTION_P (fn1
))
3110 return decls_match (fn1
, fn2
);
3114 /* Print information about a candidate being rejected due to INFO. */
3117 print_conversion_rejection (location_t loc
, struct conversion_info
*info
)
3119 if (info
->n_arg
== -1)
3120 /* Conversion of implicit `this' argument failed. */
3121 inform (loc
, " no known conversion for implicit "
3122 "%<this%> parameter from %qT to %qT",
3123 info
->from_type
, info
->to_type
);
3125 inform (loc
, " no known conversion for argument %d from %qT to %qT",
3126 info
->n_arg
+1, info
->from_type
, info
->to_type
);
3129 /* Print information about a candidate with WANT parameters and we found
3133 print_arity_information (location_t loc
, unsigned int have
, unsigned int want
)
3135 inform_n (loc
, want
,
3136 " candidate expects %d argument, %d provided",
3137 " candidate expects %d arguments, %d provided",
3141 /* Print information about one overload candidate CANDIDATE. MSGSTR
3142 is the text to print before the candidate itself.
3144 NOTE: Unlike most diagnostic functions in GCC, MSGSTR is expected
3145 to have been run through gettext by the caller. This wart makes
3146 life simpler in print_z_candidates and for the translators. */
3149 print_z_candidate (location_t loc
, const char *msgstr
,
3150 struct z_candidate
*candidate
)
3152 const char *msg
= (msgstr
== NULL
3154 : ACONCAT ((msgstr
, " ", NULL
)));
3155 location_t cloc
= location_of (candidate
->fn
);
3157 if (TREE_CODE (candidate
->fn
) == IDENTIFIER_NODE
)
3160 if (candidate
->num_convs
== 3)
3161 inform (cloc
, "%s%D(%T, %T, %T) <built-in>", msg
, candidate
->fn
,
3162 candidate
->convs
[0]->type
,
3163 candidate
->convs
[1]->type
,
3164 candidate
->convs
[2]->type
);
3165 else if (candidate
->num_convs
== 2)
3166 inform (cloc
, "%s%D(%T, %T) <built-in>", msg
, candidate
->fn
,
3167 candidate
->convs
[0]->type
,
3168 candidate
->convs
[1]->type
);
3170 inform (cloc
, "%s%D(%T) <built-in>", msg
, candidate
->fn
,
3171 candidate
->convs
[0]->type
);
3173 else if (TYPE_P (candidate
->fn
))
3174 inform (cloc
, "%s%T <conversion>", msg
, candidate
->fn
);
3175 else if (candidate
->viable
== -1)
3176 inform (cloc
, "%s%#D <near match>", msg
, candidate
->fn
);
3177 else if (DECL_DELETED_FN (STRIP_TEMPLATE (candidate
->fn
)))
3178 inform (cloc
, "%s%#D <deleted>", msg
, candidate
->fn
);
3180 inform (cloc
, "%s%#D", msg
, candidate
->fn
);
3181 /* Give the user some information about why this candidate failed. */
3182 if (candidate
->reason
!= NULL
)
3184 struct rejection_reason
*r
= candidate
->reason
;
3189 print_arity_information (cloc
, r
->u
.arity
.actual
,
3190 r
->u
.arity
.expected
);
3192 case rr_arg_conversion
:
3193 print_conversion_rejection (cloc
, &r
->u
.conversion
);
3195 case rr_bad_arg_conversion
:
3196 print_conversion_rejection (cloc
, &r
->u
.bad_conversion
);
3198 case rr_explicit_conversion
:
3199 inform (cloc
, " return type %qT of explicit conversion function "
3200 "cannot be converted to %qT with a qualification "
3201 "conversion", r
->u
.conversion
.from_type
,
3202 r
->u
.conversion
.to_type
);
3204 case rr_template_conversion
:
3205 inform (cloc
, " conversion from return type %qT of template "
3206 "conversion function specialization to %qT is not an "
3207 "exact match", r
->u
.conversion
.from_type
,
3208 r
->u
.conversion
.to_type
);
3210 case rr_template_unification
:
3211 /* We use template_unification_error_rejection if unification caused
3212 actual non-SFINAE errors, in which case we don't need to repeat
3214 if (r
->u
.template_unification
.tmpl
== NULL_TREE
)
3216 inform (cloc
, " substitution of deduced template arguments "
3217 "resulted in errors seen above");
3220 /* Re-run template unification with diagnostics. */
3221 inform (cloc
, " template argument deduction/substitution failed:");
3222 fn_type_unification (r
->u
.template_unification
.tmpl
,
3223 r
->u
.template_unification
.explicit_targs
,
3225 (r
->u
.template_unification
.num_targs
)),
3226 r
->u
.template_unification
.args
,
3227 r
->u
.template_unification
.nargs
,
3228 r
->u
.template_unification
.return_type
,
3229 r
->u
.template_unification
.strict
,
3230 r
->u
.template_unification
.flags
,
3233 case rr_invalid_copy
:
3235 " a constructor taking a single argument of its own "
3236 "class type is invalid");
3240 /* This candidate didn't have any issues or we failed to
3241 handle a particular code. Either way... */
3248 print_z_candidates (location_t loc
, struct z_candidate
*candidates
)
3250 struct z_candidate
*cand1
;
3251 struct z_candidate
**cand2
;
3257 /* Remove non-viable deleted candidates. */
3259 for (cand2
= &cand1
; *cand2
; )
3261 if (TREE_CODE ((*cand2
)->fn
) == FUNCTION_DECL
3262 && !(*cand2
)->viable
3263 && DECL_DELETED_FN ((*cand2
)->fn
))
3264 *cand2
= (*cand2
)->next
;
3266 cand2
= &(*cand2
)->next
;
3268 /* ...if there are any non-deleted ones. */
3272 /* There may be duplicates in the set of candidates. We put off
3273 checking this condition as long as possible, since we have no way
3274 to eliminate duplicates from a set of functions in less than n^2
3275 time. Now we are about to emit an error message, so it is more
3276 permissible to go slowly. */
3277 for (cand1
= candidates
; cand1
; cand1
= cand1
->next
)
3279 tree fn
= cand1
->fn
;
3280 /* Skip builtin candidates and conversion functions. */
3283 cand2
= &cand1
->next
;
3286 if (DECL_P ((*cand2
)->fn
)
3287 && equal_functions (fn
, (*cand2
)->fn
))
3288 *cand2
= (*cand2
)->next
;
3290 cand2
= &(*cand2
)->next
;
3294 for (n_candidates
= 0, cand1
= candidates
; cand1
; cand1
= cand1
->next
)
3297 inform_n (loc
, n_candidates
, "candidate is:", "candidates are:");
3298 for (; candidates
; candidates
= candidates
->next
)
3299 print_z_candidate (loc
, NULL
, candidates
);
3302 /* USER_SEQ is a user-defined conversion sequence, beginning with a
3303 USER_CONV. STD_SEQ is the standard conversion sequence applied to
3304 the result of the conversion function to convert it to the final
3305 desired type. Merge the two sequences into a single sequence,
3306 and return the merged sequence. */
3309 merge_conversion_sequences (conversion
*user_seq
, conversion
*std_seq
)
3312 bool bad
= user_seq
->bad_p
;
3314 gcc_assert (user_seq
->kind
== ck_user
);
3316 /* Find the end of the second conversion sequence. */
3317 for (t
= &std_seq
; (*t
)->kind
!= ck_identity
; t
= &((*t
)->u
.next
))
3319 /* The entire sequence is a user-conversion sequence. */
3320 (*t
)->user_conv_p
= true;
3325 /* Replace the identity conversion with the user conversion
3332 /* Handle overload resolution for initializing an object of class type from
3333 an initializer list. First we look for a suitable constructor that
3334 takes a std::initializer_list; if we don't find one, we then look for a
3335 non-list constructor.
3337 Parameters are as for add_candidates, except that the arguments are in
3338 the form of a CONSTRUCTOR (the initializer list) rather than a VEC, and
3339 the RETURN_TYPE parameter is replaced by TOTYPE, the desired type. */
3342 add_list_candidates (tree fns
, tree first_arg
,
3343 tree init_list
, tree totype
,
3344 tree explicit_targs
, bool template_only
,
3345 tree conversion_path
, tree access_path
,
3347 struct z_candidate
**candidates
,
3348 tsubst_flags_t complain
)
3352 gcc_assert (*candidates
== NULL
);
3354 /* We're looking for a ctor for list-initialization. */
3355 flags
|= LOOKUP_LIST_INIT_CTOR
;
3356 /* And we don't allow narrowing conversions. We also use this flag to
3357 avoid the copy constructor call for copy-list-initialization. */
3358 flags
|= LOOKUP_NO_NARROWING
;
3360 /* Always use the default constructor if the list is empty (DR 990). */
3361 if (CONSTRUCTOR_NELTS (init_list
) == 0
3362 && TYPE_HAS_DEFAULT_CONSTRUCTOR (totype
))
3364 /* If the class has a list ctor, try passing the list as a single
3365 argument first, but only consider list ctors. */
3366 else if (TYPE_HAS_LIST_CTOR (totype
))
3368 flags
|= LOOKUP_LIST_ONLY
;
3369 args
= make_tree_vector_single (init_list
);
3370 add_candidates (fns
, first_arg
, args
, NULL_TREE
,
3371 explicit_targs
, template_only
, conversion_path
,
3372 access_path
, flags
, candidates
, complain
);
3373 if (any_strictly_viable (*candidates
))
3377 args
= ctor_to_vec (init_list
);
3379 /* We aren't looking for list-ctors anymore. */
3380 flags
&= ~LOOKUP_LIST_ONLY
;
3381 /* We allow more user-defined conversions within an init-list. */
3382 flags
&= ~LOOKUP_NO_CONVERSION
;
3384 add_candidates (fns
, first_arg
, args
, NULL_TREE
,
3385 explicit_targs
, template_only
, conversion_path
,
3386 access_path
, flags
, candidates
, complain
);
3389 /* Returns the best overload candidate to perform the requested
3390 conversion. This function is used for three the overloading situations
3391 described in [over.match.copy], [over.match.conv], and [over.match.ref].
3392 If TOTYPE is a REFERENCE_TYPE, we're trying to find a direct binding as
3393 per [dcl.init.ref], so we ignore temporary bindings. */
3395 static struct z_candidate
*
3396 build_user_type_conversion_1 (tree totype
, tree expr
, int flags
,
3397 tsubst_flags_t complain
)
3399 struct z_candidate
*candidates
, *cand
;
3401 tree ctors
= NULL_TREE
;
3402 tree conv_fns
= NULL_TREE
;
3403 conversion
*conv
= NULL
;
3404 tree first_arg
= NULL_TREE
;
3405 VEC(tree
,gc
) *args
= NULL
;
3412 fromtype
= TREE_TYPE (expr
);
3414 /* We represent conversion within a hierarchy using RVALUE_CONV and
3415 BASE_CONV, as specified by [over.best.ics]; these become plain
3416 constructor calls, as specified in [dcl.init]. */
3417 gcc_assert (!MAYBE_CLASS_TYPE_P (fromtype
) || !MAYBE_CLASS_TYPE_P (totype
)
3418 || !DERIVED_FROM_P (totype
, fromtype
));
3420 if (MAYBE_CLASS_TYPE_P (totype
))
3421 /* Use lookup_fnfields_slot instead of lookup_fnfields to avoid
3422 creating a garbage BASELINK; constructors can't be inherited. */
3423 ctors
= lookup_fnfields_slot (totype
, complete_ctor_identifier
);
3425 if (MAYBE_CLASS_TYPE_P (fromtype
))
3427 tree to_nonref
= non_reference (totype
);
3428 if (same_type_ignoring_top_level_qualifiers_p (to_nonref
, fromtype
) ||
3429 (CLASS_TYPE_P (to_nonref
) && CLASS_TYPE_P (fromtype
)
3430 && DERIVED_FROM_P (to_nonref
, fromtype
)))
3432 /* [class.conv.fct] A conversion function is never used to
3433 convert a (possibly cv-qualified) object to the (possibly
3434 cv-qualified) same object type (or a reference to it), to a
3435 (possibly cv-qualified) base class of that type (or a
3436 reference to it)... */
3439 conv_fns
= lookup_conversions (fromtype
);
3443 flags
|= LOOKUP_NO_CONVERSION
;
3444 if (BRACE_ENCLOSED_INITIALIZER_P (expr
))
3445 flags
|= LOOKUP_NO_NARROWING
;
3447 /* It's OK to bind a temporary for converting constructor arguments, but
3448 not in converting the return value of a conversion operator. */
3449 convflags
= ((flags
& LOOKUP_NO_TEMP_BIND
) | LOOKUP_NO_CONVERSION
);
3450 flags
&= ~LOOKUP_NO_TEMP_BIND
;
3454 int ctorflags
= flags
;
3456 first_arg
= build_int_cst (build_pointer_type (totype
), 0);
3458 /* We should never try to call the abstract or base constructor
3460 gcc_assert (!DECL_HAS_IN_CHARGE_PARM_P (OVL_CURRENT (ctors
))
3461 && !DECL_HAS_VTT_PARM_P (OVL_CURRENT (ctors
)));
3463 if (BRACE_ENCLOSED_INITIALIZER_P (expr
))
3465 /* List-initialization. */
3466 add_list_candidates (ctors
, first_arg
, expr
, totype
, NULL_TREE
,
3467 false, TYPE_BINFO (totype
), TYPE_BINFO (totype
),
3468 ctorflags
, &candidates
, complain
);
3472 args
= make_tree_vector_single (expr
);
3473 add_candidates (ctors
, first_arg
, args
, NULL_TREE
, NULL_TREE
, false,
3474 TYPE_BINFO (totype
), TYPE_BINFO (totype
),
3475 ctorflags
, &candidates
, complain
);
3478 for (cand
= candidates
; cand
; cand
= cand
->next
)
3480 cand
->second_conv
= build_identity_conv (totype
, NULL_TREE
);
3482 /* If totype isn't a reference, and LOOKUP_NO_TEMP_BIND isn't
3483 set, then this is copy-initialization. In that case, "The
3484 result of the call is then used to direct-initialize the
3485 object that is the destination of the copy-initialization."
3488 We represent this in the conversion sequence with an
3489 rvalue conversion, which means a constructor call. */
3490 if (TREE_CODE (totype
) != REFERENCE_TYPE
3491 && !(convflags
& LOOKUP_NO_TEMP_BIND
))
3493 = build_conv (ck_rvalue
, totype
, cand
->second_conv
);
3498 first_arg
= build_this (expr
);
3500 for (; conv_fns
; conv_fns
= TREE_CHAIN (conv_fns
))
3502 tree conversion_path
= TREE_PURPOSE (conv_fns
);
3503 struct z_candidate
*old_candidates
;
3505 /* If we are called to convert to a reference type, we are trying to
3506 find a direct binding, so don't even consider temporaries. If
3507 we don't find a direct binding, the caller will try again to
3508 look for a temporary binding. */
3509 if (TREE_CODE (totype
) == REFERENCE_TYPE
)
3510 convflags
|= LOOKUP_NO_TEMP_BIND
;
3512 old_candidates
= candidates
;
3513 add_candidates (TREE_VALUE (conv_fns
), first_arg
, NULL
, totype
,
3515 conversion_path
, TYPE_BINFO (fromtype
),
3516 flags
, &candidates
, complain
);
3518 for (cand
= candidates
; cand
!= old_candidates
; cand
= cand
->next
)
3520 tree rettype
= TREE_TYPE (TREE_TYPE (cand
->fn
));
3522 = implicit_conversion (totype
,
3525 /*c_cast_p=*/false, convflags
,
3528 /* If LOOKUP_NO_TEMP_BIND isn't set, then this is
3529 copy-initialization. In that case, "The result of the
3530 call is then used to direct-initialize the object that is
3531 the destination of the copy-initialization." [dcl.init]
3533 We represent this in the conversion sequence with an
3534 rvalue conversion, which means a constructor call. But
3535 don't add a second rvalue conversion if there's already
3536 one there. Which there really shouldn't be, but it's
3537 harmless since we'd add it here anyway. */
3538 if (ics
&& MAYBE_CLASS_TYPE_P (totype
) && ics
->kind
!= ck_rvalue
3539 && !(convflags
& LOOKUP_NO_TEMP_BIND
))
3540 ics
= build_conv (ck_rvalue
, totype
, ics
);
3542 cand
->second_conv
= ics
;
3547 cand
->reason
= arg_conversion_rejection (NULL_TREE
, -1,
3550 else if (DECL_NONCONVERTING_P (cand
->fn
)
3551 && ics
->rank
> cr_exact
)
3553 /* 13.3.1.5: For direct-initialization, those explicit
3554 conversion functions that are not hidden within S and
3555 yield type T or a type that can be converted to type T
3556 with a qualification conversion (4.4) are also candidate
3558 /* 13.3.1.6 doesn't have a parallel restriction, but it should;
3559 I've raised this issue with the committee. --jason 9/2011 */
3561 cand
->reason
= explicit_conversion_rejection (rettype
, totype
);
3563 else if (cand
->viable
== 1 && ics
->bad_p
)
3567 = bad_arg_conversion_rejection (NULL_TREE
, -1,
3570 else if (primary_template_instantiation_p (cand
->fn
)
3571 && ics
->rank
> cr_exact
)
3573 /* 13.3.3.1.2: If the user-defined conversion is specified by
3574 a specialization of a conversion function template, the
3575 second standard conversion sequence shall have exact match
3578 cand
->reason
= template_conversion_rejection (rettype
, totype
);
3583 candidates
= splice_viable (candidates
, pedantic
, &any_viable_p
);
3587 release_tree_vector (args
);
3591 cand
= tourney (candidates
, complain
);
3594 if (complain
& tf_error
)
3596 error ("conversion from %qT to %qT is ambiguous",
3598 print_z_candidates (location_of (expr
), candidates
);
3601 cand
= candidates
; /* any one will do */
3602 cand
->second_conv
= build_ambiguous_conv (totype
, expr
);
3603 cand
->second_conv
->user_conv_p
= true;
3604 if (!any_strictly_viable (candidates
))
3605 cand
->second_conv
->bad_p
= true;
3606 /* If there are viable candidates, don't set ICS_BAD_FLAG; an
3607 ambiguous conversion is no worse than another user-defined
3613 /* Build the user conversion sequence. */
3616 (DECL_CONSTRUCTOR_P (cand
->fn
)
3617 ? totype
: non_reference (TREE_TYPE (TREE_TYPE (cand
->fn
)))),
3618 build_identity_conv (TREE_TYPE (expr
), expr
));
3620 if (cand
->viable
== -1)
3623 /* Remember that this was a list-initialization. */
3624 if (flags
& LOOKUP_NO_NARROWING
)
3625 conv
->check_narrowing
= true;
3627 /* Combine it with the second conversion sequence. */
3628 cand
->second_conv
= merge_conversion_sequences (conv
,
3634 /* Wrapper for above. */
3637 build_user_type_conversion (tree totype
, tree expr
, int flags
,
3638 tsubst_flags_t complain
)
3640 struct z_candidate
*cand
;
3643 bool subtime
= timevar_cond_start (TV_OVERLOAD
);
3644 cand
= build_user_type_conversion_1 (totype
, expr
, flags
, complain
);
3648 if (cand
->second_conv
->kind
== ck_ambig
)
3649 ret
= error_mark_node
;
3652 expr
= convert_like (cand
->second_conv
, expr
, complain
);
3653 ret
= convert_from_reference (expr
);
3659 timevar_cond_stop (TV_OVERLOAD
, subtime
);
3663 /* Subroutine of convert_nontype_argument.
3665 EXPR is an argument for a template non-type parameter of integral or
3666 enumeration type. Do any necessary conversions (that are permitted for
3667 non-type arguments) to convert it to the parameter type.
3669 If conversion is successful, returns the converted expression;
3670 otherwise, returns error_mark_node. */
3673 build_integral_nontype_arg_conv (tree type
, tree expr
, tsubst_flags_t complain
)
3678 location_t loc
= EXPR_LOC_OR_HERE (expr
);
3680 if (error_operand_p (expr
))
3681 return error_mark_node
;
3683 gcc_assert (INTEGRAL_OR_ENUMERATION_TYPE_P (type
));
3685 /* Get the high-water mark for the CONVERSION_OBSTACK. */
3686 p
= conversion_obstack_alloc (0);
3688 conv
= implicit_conversion (type
, TREE_TYPE (expr
), expr
,
3690 LOOKUP_IMPLICIT
, complain
);
3692 /* for a non-type template-parameter of integral or
3693 enumeration type, integral promotions (4.5) and integral
3694 conversions (4.7) are applied. */
3695 /* It should be sufficient to check the outermost conversion step, since
3696 there are no qualification conversions to integer type. */
3700 /* A conversion function is OK. If it isn't constexpr, we'll
3701 complain later that the argument isn't constant. */
3703 /* The lvalue-to-rvalue conversion is OK. */
3709 t
= next_conversion (conv
)->type
;
3710 if (INTEGRAL_OR_ENUMERATION_TYPE_P (t
))
3713 if (complain
& tf_error
)
3714 error_at (loc
, "conversion from %qT to %qT not considered for "
3715 "non-type template argument", t
, type
);
3716 /* and fall through. */
3724 expr
= convert_like (conv
, expr
, complain
);
3726 expr
= error_mark_node
;
3728 /* Free all the conversions we allocated. */
3729 obstack_free (&conversion_obstack
, p
);
3734 /* Do any initial processing on the arguments to a function call. */
3736 static VEC(tree
,gc
) *
3737 resolve_args (VEC(tree
,gc
) *args
, tsubst_flags_t complain
)
3742 FOR_EACH_VEC_ELT (tree
, args
, ix
, arg
)
3744 if (error_operand_p (arg
))
3746 else if (VOID_TYPE_P (TREE_TYPE (arg
)))
3748 if (complain
& tf_error
)
3749 error ("invalid use of void expression");
3752 else if (invalid_nonstatic_memfn_p (arg
, complain
))
3758 /* Perform overload resolution on FN, which is called with the ARGS.
3760 Return the candidate function selected by overload resolution, or
3761 NULL if the event that overload resolution failed. In the case
3762 that overload resolution fails, *CANDIDATES will be the set of
3763 candidates considered, and ANY_VIABLE_P will be set to true or
3764 false to indicate whether or not any of the candidates were
3767 The ARGS should already have gone through RESOLVE_ARGS before this
3768 function is called. */
3770 static struct z_candidate
*
3771 perform_overload_resolution (tree fn
,
3772 const VEC(tree
,gc
) *args
,
3773 struct z_candidate
**candidates
,
3774 bool *any_viable_p
, tsubst_flags_t complain
)
3776 struct z_candidate
*cand
;
3777 tree explicit_targs
;
3780 bool subtime
= timevar_cond_start (TV_OVERLOAD
);
3782 explicit_targs
= NULL_TREE
;
3786 *any_viable_p
= true;
3789 gcc_assert (TREE_CODE (fn
) == FUNCTION_DECL
3790 || TREE_CODE (fn
) == TEMPLATE_DECL
3791 || TREE_CODE (fn
) == OVERLOAD
3792 || TREE_CODE (fn
) == TEMPLATE_ID_EXPR
);
3794 if (TREE_CODE (fn
) == TEMPLATE_ID_EXPR
)
3796 explicit_targs
= TREE_OPERAND (fn
, 1);
3797 fn
= TREE_OPERAND (fn
, 0);
3801 /* Add the various candidate functions. */
3802 add_candidates (fn
, NULL_TREE
, args
, NULL_TREE
,
3803 explicit_targs
, template_only
,
3804 /*conversion_path=*/NULL_TREE
,
3805 /*access_path=*/NULL_TREE
,
3807 candidates
, complain
);
3809 *candidates
= splice_viable (*candidates
, pedantic
, any_viable_p
);
3811 cand
= tourney (*candidates
, complain
);
3815 timevar_cond_stop (TV_OVERLOAD
, subtime
);
3819 /* Print an error message about being unable to build a call to FN with
3820 ARGS. ANY_VIABLE_P indicates whether any candidate functions could
3821 be located; CANDIDATES is a possibly empty list of such
3825 print_error_for_call_failure (tree fn
, VEC(tree
,gc
) *args
, bool any_viable_p
,
3826 struct z_candidate
*candidates
)
3828 tree name
= DECL_NAME (OVL_CURRENT (fn
));
3829 location_t loc
= location_of (name
);
3832 error_at (loc
, "no matching function for call to %<%D(%A)%>",
3833 name
, build_tree_list_vec (args
));
3835 error_at (loc
, "call of overloaded %<%D(%A)%> is ambiguous",
3836 name
, build_tree_list_vec (args
));
3838 print_z_candidates (loc
, candidates
);
3841 /* Return an expression for a call to FN (a namespace-scope function,
3842 or a static member function) with the ARGS. This may change
3846 build_new_function_call (tree fn
, VEC(tree
,gc
) **args
, bool koenig_p
,
3847 tsubst_flags_t complain
)
3849 struct z_candidate
*candidates
, *cand
;
3854 if (args
!= NULL
&& *args
!= NULL
)
3856 *args
= resolve_args (*args
, complain
);
3858 return error_mark_node
;
3862 tm_malloc_replacement (fn
);
3864 /* If this function was found without using argument dependent
3865 lookup, then we want to ignore any undeclared friend
3871 fn
= remove_hidden_names (fn
);
3874 if (complain
& tf_error
)
3875 print_error_for_call_failure (orig_fn
, *args
, false, NULL
);
3876 return error_mark_node
;
3880 /* Get the high-water mark for the CONVERSION_OBSTACK. */
3881 p
= conversion_obstack_alloc (0);
3883 cand
= perform_overload_resolution (fn
, *args
, &candidates
, &any_viable_p
,
3888 if (complain
& tf_error
)
3890 if (!any_viable_p
&& candidates
&& ! candidates
->next
3891 && (TREE_CODE (candidates
->fn
) == FUNCTION_DECL
))
3892 return cp_build_function_call_vec (candidates
->fn
, args
, complain
);
3893 if (TREE_CODE (fn
) == TEMPLATE_ID_EXPR
)
3894 fn
= TREE_OPERAND (fn
, 0);
3895 print_error_for_call_failure (fn
, *args
, any_viable_p
, candidates
);
3897 result
= error_mark_node
;
3901 int flags
= LOOKUP_NORMAL
;
3902 /* If fn is template_id_expr, the call has explicit template arguments
3903 (e.g. func<int>(5)), communicate this info to build_over_call
3904 through flags so that later we can use it to decide whether to warn
3905 about peculiar null pointer conversion. */
3906 if (TREE_CODE (fn
) == TEMPLATE_ID_EXPR
)
3907 flags
|= LOOKUP_EXPLICIT_TMPL_ARGS
;
3908 result
= build_over_call (cand
, flags
, complain
);
3911 /* Free all the conversions we allocated. */
3912 obstack_free (&conversion_obstack
, p
);
3917 /* Build a call to a global operator new. FNNAME is the name of the
3918 operator (either "operator new" or "operator new[]") and ARGS are
3919 the arguments provided. This may change ARGS. *SIZE points to the
3920 total number of bytes required by the allocation, and is updated if
3921 that is changed here. *COOKIE_SIZE is non-NULL if a cookie should
3922 be used. If this function determines that no cookie should be
3923 used, after all, *COOKIE_SIZE is set to NULL_TREE. If SIZE_CHECK
3924 is not NULL_TREE, it is evaluated before calculating the final
3925 array size, and if it fails, the array size is replaced with
3926 (size_t)-1 (usually triggering a std::bad_alloc exception). If FN
3927 is non-NULL, it will be set, upon return, to the allocation
3931 build_operator_new_call (tree fnname
, VEC(tree
,gc
) **args
,
3932 tree
*size
, tree
*cookie_size
, tree size_check
,
3933 tree
*fn
, tsubst_flags_t complain
)
3935 tree original_size
= *size
;
3937 struct z_candidate
*candidates
;
3938 struct z_candidate
*cand
;
3943 /* Set to (size_t)-1 if the size check fails. */
3944 if (size_check
!= NULL_TREE
)
3945 *size
= fold_build3 (COND_EXPR
, sizetype
, size_check
,
3946 original_size
, TYPE_MAX_VALUE (sizetype
));
3947 VEC_safe_insert (tree
, gc
, *args
, 0, *size
);
3948 *args
= resolve_args (*args
, complain
);
3950 return error_mark_node
;
3956 If this lookup fails to find the name, or if the allocated type
3957 is not a class type, the allocation function's name is looked
3958 up in the global scope.
3960 we disregard block-scope declarations of "operator new". */
3961 fns
= lookup_function_nonclass (fnname
, *args
, /*block_p=*/false);
3963 /* Figure out what function is being called. */
3964 cand
= perform_overload_resolution (fns
, *args
, &candidates
, &any_viable_p
,
3967 /* If no suitable function could be found, issue an error message
3971 if (complain
& tf_error
)
3972 print_error_for_call_failure (fns
, *args
, any_viable_p
, candidates
);
3973 return error_mark_node
;
3976 /* If a cookie is required, add some extra space. Whether
3977 or not a cookie is required cannot be determined until
3978 after we know which function was called. */
3981 bool use_cookie
= true;
3982 if (!abi_version_at_least (2))
3984 /* In G++ 3.2, the check was implemented incorrectly; it
3985 looked at the placement expression, rather than the
3986 type of the function. */
3987 if (VEC_length (tree
, *args
) == 2
3988 && same_type_p (TREE_TYPE (VEC_index (tree
, *args
, 1)),
3996 arg_types
= TYPE_ARG_TYPES (TREE_TYPE (cand
->fn
));
3997 /* Skip the size_t parameter. */
3998 arg_types
= TREE_CHAIN (arg_types
);
3999 /* Check the remaining parameters (if any). */
4001 && TREE_CHAIN (arg_types
) == void_list_node
4002 && same_type_p (TREE_VALUE (arg_types
),
4006 /* If we need a cookie, adjust the number of bytes allocated. */
4009 /* Update the total size. */
4010 *size
= size_binop (PLUS_EXPR
, original_size
, *cookie_size
);
4011 /* Set to (size_t)-1 if the size check fails. */
4012 gcc_assert (size_check
!= NULL_TREE
);
4013 *size
= fold_build3 (COND_EXPR
, sizetype
, size_check
,
4014 *size
, TYPE_MAX_VALUE (sizetype
));
4015 /* Update the argument list to reflect the adjusted size. */
4016 VEC_replace (tree
, *args
, 0, *size
);
4019 *cookie_size
= NULL_TREE
;
4022 /* Tell our caller which function we decided to call. */
4026 /* Build the CALL_EXPR. */
4027 return build_over_call (cand
, LOOKUP_NORMAL
, complain
);
4030 /* Build a new call to operator(). This may change ARGS. */
4033 build_op_call_1 (tree obj
, VEC(tree
,gc
) **args
, tsubst_flags_t complain
)
4035 struct z_candidate
*candidates
= 0, *cand
;
4036 tree fns
, convs
, first_mem_arg
= NULL_TREE
;
4037 tree type
= TREE_TYPE (obj
);
4039 tree result
= NULL_TREE
;
4042 if (error_operand_p (obj
))
4043 return error_mark_node
;
4045 obj
= prep_operand (obj
);
4047 if (TYPE_PTRMEMFUNC_P (type
))
4049 if (complain
& tf_error
)
4050 /* It's no good looking for an overloaded operator() on a
4051 pointer-to-member-function. */
4052 error ("pointer-to-member function %E cannot be called without an object; consider using .* or ->*", obj
);
4053 return error_mark_node
;
4056 if (TYPE_BINFO (type
))
4058 fns
= lookup_fnfields (TYPE_BINFO (type
), ansi_opname (CALL_EXPR
), 1);
4059 if (fns
== error_mark_node
)
4060 return error_mark_node
;
4065 if (args
!= NULL
&& *args
!= NULL
)
4067 *args
= resolve_args (*args
, complain
);
4069 return error_mark_node
;
4072 /* Get the high-water mark for the CONVERSION_OBSTACK. */
4073 p
= conversion_obstack_alloc (0);
4077 first_mem_arg
= build_this (obj
);
4079 add_candidates (BASELINK_FUNCTIONS (fns
),
4080 first_mem_arg
, *args
, NULL_TREE
,
4082 BASELINK_BINFO (fns
), BASELINK_ACCESS_BINFO (fns
),
4083 LOOKUP_NORMAL
, &candidates
, complain
);
4086 convs
= lookup_conversions (type
);
4088 for (; convs
; convs
= TREE_CHAIN (convs
))
4090 tree fns
= TREE_VALUE (convs
);
4091 tree totype
= TREE_TYPE (convs
);
4093 if ((TREE_CODE (totype
) == POINTER_TYPE
4094 && TREE_CODE (TREE_TYPE (totype
)) == FUNCTION_TYPE
)
4095 || (TREE_CODE (totype
) == REFERENCE_TYPE
4096 && TREE_CODE (TREE_TYPE (totype
)) == FUNCTION_TYPE
)
4097 || (TREE_CODE (totype
) == REFERENCE_TYPE
4098 && TREE_CODE (TREE_TYPE (totype
)) == POINTER_TYPE
4099 && TREE_CODE (TREE_TYPE (TREE_TYPE (totype
))) == FUNCTION_TYPE
))
4100 for (; fns
; fns
= OVL_NEXT (fns
))
4102 tree fn
= OVL_CURRENT (fns
);
4104 if (DECL_NONCONVERTING_P (fn
))
4107 if (TREE_CODE (fn
) == TEMPLATE_DECL
)
4108 add_template_conv_candidate
4109 (&candidates
, fn
, obj
, NULL_TREE
, *args
, totype
,
4110 /*access_path=*/NULL_TREE
,
4111 /*conversion_path=*/NULL_TREE
, complain
);
4113 add_conv_candidate (&candidates
, fn
, obj
, NULL_TREE
,
4114 *args
, /*conversion_path=*/NULL_TREE
,
4115 /*access_path=*/NULL_TREE
, complain
);
4119 candidates
= splice_viable (candidates
, pedantic
, &any_viable_p
);
4122 if (complain
& tf_error
)
4124 error ("no match for call to %<(%T) (%A)%>", TREE_TYPE (obj
),
4125 build_tree_list_vec (*args
));
4126 print_z_candidates (location_of (TREE_TYPE (obj
)), candidates
);
4128 result
= error_mark_node
;
4132 cand
= tourney (candidates
, complain
);
4135 if (complain
& tf_error
)
4137 error ("call of %<(%T) (%A)%> is ambiguous",
4138 TREE_TYPE (obj
), build_tree_list_vec (*args
));
4139 print_z_candidates (location_of (TREE_TYPE (obj
)), candidates
);
4141 result
= error_mark_node
;
4143 /* Since cand->fn will be a type, not a function, for a conversion
4144 function, we must be careful not to unconditionally look at
4146 else if (TREE_CODE (cand
->fn
) == FUNCTION_DECL
4147 && DECL_OVERLOADED_OPERATOR_P (cand
->fn
) == CALL_EXPR
)
4148 result
= build_over_call (cand
, LOOKUP_NORMAL
, complain
);
4151 obj
= convert_like_with_context (cand
->convs
[0], obj
, cand
->fn
, -1,
4153 obj
= convert_from_reference (obj
);
4154 result
= cp_build_function_call_vec (obj
, args
, complain
);
4158 /* Free all the conversions we allocated. */
4159 obstack_free (&conversion_obstack
, p
);
4164 /* Wrapper for above. */
4167 build_op_call (tree obj
, VEC(tree
,gc
) **args
, tsubst_flags_t complain
)
4170 bool subtime
= timevar_cond_start (TV_OVERLOAD
);
4171 ret
= build_op_call_1 (obj
, args
, complain
);
4172 timevar_cond_stop (TV_OVERLOAD
, subtime
);
4176 /* Called by op_error to prepare format strings suitable for the error
4177 function. It concatenates a prefix (controlled by MATCH), ERRMSG,
4178 and a suffix (controlled by NTYPES). */
4181 op_error_string (const char *errmsg
, int ntypes
, bool match
)
4185 const char *msgp
= concat (match
? G_("ambiguous overload for ")
4186 : G_("no match for "), errmsg
, NULL
);
4189 msg
= concat (msgp
, G_(" (operand types are %qT, %qT, and %qT)"), NULL
);
4190 else if (ntypes
== 2)
4191 msg
= concat (msgp
, G_(" (operand types are %qT and %qT)"), NULL
);
4193 msg
= concat (msgp
, G_(" (operand type is %qT)"), NULL
);
4199 op_error (location_t loc
, enum tree_code code
, enum tree_code code2
,
4200 tree arg1
, tree arg2
, tree arg3
, bool match
)
4204 if (code
== MODIFY_EXPR
)
4205 opname
= assignment_operator_name_info
[code2
].name
;
4207 opname
= operator_name_info
[code
].name
;
4212 if (flag_diagnostics_show_caret
)
4213 error_at (loc
, op_error_string (G_("ternary %<operator?:%>"),
4215 TREE_TYPE (arg1
), TREE_TYPE (arg2
), TREE_TYPE (arg3
));
4217 error_at (loc
, op_error_string (G_("ternary %<operator?:%> "
4218 "in %<%E ? %E : %E%>"), 3, match
),
4220 TREE_TYPE (arg1
), TREE_TYPE (arg2
), TREE_TYPE (arg3
));
4223 case POSTINCREMENT_EXPR
:
4224 case POSTDECREMENT_EXPR
:
4225 if (flag_diagnostics_show_caret
)
4226 error_at (loc
, op_error_string (G_("%<operator%s%>"), 1, match
),
4227 opname
, TREE_TYPE (arg1
));
4229 error_at (loc
, op_error_string (G_("%<operator%s%> in %<%E%s%>"),
4231 opname
, arg1
, opname
, TREE_TYPE (arg1
));
4235 if (flag_diagnostics_show_caret
)
4236 error_at (loc
, op_error_string (G_("%<operator[]%>"), 2, match
),
4237 TREE_TYPE (arg1
), TREE_TYPE (arg2
));
4239 error_at (loc
, op_error_string (G_("%<operator[]%> in %<%E[%E]%>"),
4241 arg1
, arg2
, TREE_TYPE (arg1
), TREE_TYPE (arg2
));
4246 if (flag_diagnostics_show_caret
)
4247 error_at (loc
, op_error_string (G_("%qs"), 1, match
),
4248 opname
, TREE_TYPE (arg1
));
4250 error_at (loc
, op_error_string (G_("%qs in %<%s %E%>"), 1, match
),
4251 opname
, opname
, arg1
, TREE_TYPE (arg1
));
4256 if (flag_diagnostics_show_caret
)
4257 error_at (loc
, op_error_string (G_("%<operator%s%>"), 2, match
),
4258 opname
, TREE_TYPE (arg1
), TREE_TYPE (arg2
));
4260 error_at (loc
, op_error_string (G_("%<operator%s%> in %<%E %s %E%>"),
4262 opname
, arg1
, opname
, arg2
,
4263 TREE_TYPE (arg1
), TREE_TYPE (arg2
));
4265 if (flag_diagnostics_show_caret
)
4266 error_at (loc
, op_error_string (G_("%<operator%s%>"), 1, match
),
4267 opname
, TREE_TYPE (arg1
));
4269 error_at (loc
, op_error_string (G_("%<operator%s%> in %<%s%E%>"),
4271 opname
, opname
, arg1
, TREE_TYPE (arg1
));
4276 /* Return the implicit conversion sequence that could be used to
4277 convert E1 to E2 in [expr.cond]. */
4280 conditional_conversion (tree e1
, tree e2
, tsubst_flags_t complain
)
4282 tree t1
= non_reference (TREE_TYPE (e1
));
4283 tree t2
= non_reference (TREE_TYPE (e2
));
4289 If E2 is an lvalue: E1 can be converted to match E2 if E1 can be
4290 implicitly converted (clause _conv_) to the type "lvalue reference to
4291 T2", subject to the constraint that in the conversion the
4292 reference must bind directly (_dcl.init.ref_) to an lvalue. */
4293 if (real_lvalue_p (e2
))
4295 conv
= implicit_conversion (build_reference_type (t2
),
4299 LOOKUP_NO_TEMP_BIND
|LOOKUP_NO_RVAL_BIND
4300 |LOOKUP_ONLYCONVERTING
,
4308 If E1 and E2 have class type, and the underlying class types are
4309 the same or one is a base class of the other: E1 can be converted
4310 to match E2 if the class of T2 is the same type as, or a base
4311 class of, the class of T1, and the cv-qualification of T2 is the
4312 same cv-qualification as, or a greater cv-qualification than, the
4313 cv-qualification of T1. If the conversion is applied, E1 is
4314 changed to an rvalue of type T2 that still refers to the original
4315 source class object (or the appropriate subobject thereof). */
4316 if (CLASS_TYPE_P (t1
) && CLASS_TYPE_P (t2
)
4317 && ((good_base
= DERIVED_FROM_P (t2
, t1
)) || DERIVED_FROM_P (t1
, t2
)))
4319 if (good_base
&& at_least_as_qualified_p (t2
, t1
))
4321 conv
= build_identity_conv (t1
, e1
);
4322 if (!same_type_p (TYPE_MAIN_VARIANT (t1
),
4323 TYPE_MAIN_VARIANT (t2
)))
4324 conv
= build_conv (ck_base
, t2
, conv
);
4326 conv
= build_conv (ck_rvalue
, t2
, conv
);
4335 Otherwise: E1 can be converted to match E2 if E1 can be implicitly
4336 converted to the type that expression E2 would have if E2 were
4337 converted to an rvalue (or the type it has, if E2 is an rvalue). */
4338 return implicit_conversion (t2
, t1
, e1
, /*c_cast_p=*/false,
4339 LOOKUP_IMPLICIT
, complain
);
4342 /* Implement [expr.cond]. ARG1, ARG2, and ARG3 are the three
4343 arguments to the conditional expression. */
4346 build_conditional_expr_1 (tree arg1
, tree arg2
, tree arg3
,
4347 tsubst_flags_t complain
)
4351 tree result
= NULL_TREE
;
4352 tree result_type
= NULL_TREE
;
4353 bool lvalue_p
= true;
4354 struct z_candidate
*candidates
= 0;
4355 struct z_candidate
*cand
;
4357 tree orig_arg2
, orig_arg3
;
4359 /* As a G++ extension, the second argument to the conditional can be
4360 omitted. (So that `a ? : c' is roughly equivalent to `a ? a :
4361 c'.) If the second operand is omitted, make sure it is
4362 calculated only once. */
4365 if (complain
& tf_error
)
4366 pedwarn (input_location
, OPT_Wpedantic
,
4367 "ISO C++ forbids omitting the middle term of a ?: expression");
4369 /* Make sure that lvalues remain lvalues. See g++.oliva/ext1.C. */
4370 if (real_lvalue_p (arg1
))
4371 arg2
= arg1
= stabilize_reference (arg1
);
4373 arg2
= arg1
= save_expr (arg1
);
4378 The first expression is implicitly converted to bool (clause
4380 arg1
= perform_implicit_conversion_flags (boolean_type_node
, arg1
, complain
,
4383 /* If something has already gone wrong, just pass that fact up the
4385 if (error_operand_p (arg1
)
4386 || error_operand_p (arg2
)
4387 || error_operand_p (arg3
))
4388 return error_mark_node
;
4392 If either the second or the third operand has type (possibly
4393 cv-qualified) void, then the lvalue-to-rvalue (_conv.lval_),
4394 array-to-pointer (_conv.array_), and function-to-pointer
4395 (_conv.func_) standard conversions are performed on the second
4396 and third operands. */
4399 arg2_type
= unlowered_expr_type (arg2
);
4400 arg3_type
= unlowered_expr_type (arg3
);
4401 if (VOID_TYPE_P (arg2_type
) || VOID_TYPE_P (arg3_type
))
4403 /* Do the conversions. We don't these for `void' type arguments
4404 since it can't have any effect and since decay_conversion
4405 does not handle that case gracefully. */
4406 if (!VOID_TYPE_P (arg2_type
))
4407 arg2
= decay_conversion (arg2
, complain
);
4408 if (!VOID_TYPE_P (arg3_type
))
4409 arg3
= decay_conversion (arg3
, complain
);
4410 arg2_type
= TREE_TYPE (arg2
);
4411 arg3_type
= TREE_TYPE (arg3
);
4415 One of the following shall hold:
4417 --The second or the third operand (but not both) is a
4418 throw-expression (_except.throw_); the result is of the
4419 type of the other and is an rvalue.
4421 --Both the second and the third operands have type void; the
4422 result is of type void and is an rvalue.
4424 We must avoid calling force_rvalue for expressions of type
4425 "void" because it will complain that their value is being
4427 if (TREE_CODE (arg2
) == THROW_EXPR
4428 && TREE_CODE (arg3
) != THROW_EXPR
)
4430 if (!VOID_TYPE_P (arg3_type
))
4432 arg3
= force_rvalue (arg3
, complain
);
4433 if (arg3
== error_mark_node
)
4434 return error_mark_node
;
4436 arg3_type
= TREE_TYPE (arg3
);
4437 result_type
= arg3_type
;
4439 else if (TREE_CODE (arg2
) != THROW_EXPR
4440 && TREE_CODE (arg3
) == THROW_EXPR
)
4442 if (!VOID_TYPE_P (arg2_type
))
4444 arg2
= force_rvalue (arg2
, complain
);
4445 if (arg2
== error_mark_node
)
4446 return error_mark_node
;
4448 arg2_type
= TREE_TYPE (arg2
);
4449 result_type
= arg2_type
;
4451 else if (VOID_TYPE_P (arg2_type
) && VOID_TYPE_P (arg3_type
))
4452 result_type
= void_type_node
;
4455 if (complain
& tf_error
)
4457 if (VOID_TYPE_P (arg2_type
))
4458 error ("second operand to the conditional operator "
4459 "is of type %<void%>, "
4460 "but the third operand is neither a throw-expression "
4461 "nor of type %<void%>");
4463 error ("third operand to the conditional operator "
4464 "is of type %<void%>, "
4465 "but the second operand is neither a throw-expression "
4466 "nor of type %<void%>");
4468 return error_mark_node
;
4472 goto valid_operands
;
4476 Otherwise, if the second and third operand have different types,
4477 and either has (possibly cv-qualified) class type, an attempt is
4478 made to convert each of those operands to the type of the other. */
4479 else if (!same_type_p (arg2_type
, arg3_type
)
4480 && (CLASS_TYPE_P (arg2_type
) || CLASS_TYPE_P (arg3_type
)))
4485 /* Get the high-water mark for the CONVERSION_OBSTACK. */
4486 p
= conversion_obstack_alloc (0);
4488 conv2
= conditional_conversion (arg2
, arg3
, complain
);
4489 conv3
= conditional_conversion (arg3
, arg2
, complain
);
4493 If both can be converted, or one can be converted but the
4494 conversion is ambiguous, the program is ill-formed. If
4495 neither can be converted, the operands are left unchanged and
4496 further checking is performed as described below. If exactly
4497 one conversion is possible, that conversion is applied to the
4498 chosen operand and the converted operand is used in place of
4499 the original operand for the remainder of this section. */
4500 if ((conv2
&& !conv2
->bad_p
4501 && conv3
&& !conv3
->bad_p
)
4502 || (conv2
&& conv2
->kind
== ck_ambig
)
4503 || (conv3
&& conv3
->kind
== ck_ambig
))
4505 error ("operands to ?: have different types %qT and %qT",
4506 arg2_type
, arg3_type
);
4507 result
= error_mark_node
;
4509 else if (conv2
&& (!conv2
->bad_p
|| !conv3
))
4511 arg2
= convert_like (conv2
, arg2
, complain
);
4512 arg2
= convert_from_reference (arg2
);
4513 arg2_type
= TREE_TYPE (arg2
);
4514 /* Even if CONV2 is a valid conversion, the result of the
4515 conversion may be invalid. For example, if ARG3 has type
4516 "volatile X", and X does not have a copy constructor
4517 accepting a "volatile X&", then even if ARG2 can be
4518 converted to X, the conversion will fail. */
4519 if (error_operand_p (arg2
))
4520 result
= error_mark_node
;
4522 else if (conv3
&& (!conv3
->bad_p
|| !conv2
))
4524 arg3
= convert_like (conv3
, arg3
, complain
);
4525 arg3
= convert_from_reference (arg3
);
4526 arg3_type
= TREE_TYPE (arg3
);
4527 if (error_operand_p (arg3
))
4528 result
= error_mark_node
;
4531 /* Free all the conversions we allocated. */
4532 obstack_free (&conversion_obstack
, p
);
4537 /* If, after the conversion, both operands have class type,
4538 treat the cv-qualification of both operands as if it were the
4539 union of the cv-qualification of the operands.
4541 The standard is not clear about what to do in this
4542 circumstance. For example, if the first operand has type
4543 "const X" and the second operand has a user-defined
4544 conversion to "volatile X", what is the type of the second
4545 operand after this step? Making it be "const X" (matching
4546 the first operand) seems wrong, as that discards the
4547 qualification without actually performing a copy. Leaving it
4548 as "volatile X" seems wrong as that will result in the
4549 conditional expression failing altogether, even though,
4550 according to this step, the one operand could be converted to
4551 the type of the other. */
4552 if ((conv2
|| conv3
)
4553 && CLASS_TYPE_P (arg2_type
)
4554 && cp_type_quals (arg2_type
) != cp_type_quals (arg3_type
))
4555 arg2_type
= arg3_type
=
4556 cp_build_qualified_type (arg2_type
,
4557 cp_type_quals (arg2_type
)
4558 | cp_type_quals (arg3_type
));
4563 If the second and third operands are lvalues and have the same
4564 type, the result is of that type and is an lvalue. */
4565 if (real_lvalue_p (arg2
)
4566 && real_lvalue_p (arg3
)
4567 && same_type_p (arg2_type
, arg3_type
))
4569 result_type
= arg2_type
;
4570 arg2
= mark_lvalue_use (arg2
);
4571 arg3
= mark_lvalue_use (arg3
);
4572 goto valid_operands
;
4577 Otherwise, the result is an rvalue. If the second and third
4578 operand do not have the same type, and either has (possibly
4579 cv-qualified) class type, overload resolution is used to
4580 determine the conversions (if any) to be applied to the operands
4581 (_over.match.oper_, _over.built_). */
4583 if (!same_type_p (arg2_type
, arg3_type
)
4584 && (CLASS_TYPE_P (arg2_type
) || CLASS_TYPE_P (arg3_type
)))
4590 /* Rearrange the arguments so that add_builtin_candidate only has
4591 to know about two args. In build_builtin_candidate, the
4592 arguments are unscrambled. */
4596 add_builtin_candidates (&candidates
,
4599 ansi_opname (COND_EXPR
),
4601 LOOKUP_NORMAL
, complain
);
4605 If the overload resolution fails, the program is
4607 candidates
= splice_viable (candidates
, pedantic
, &any_viable_p
);
4610 if (complain
& tf_error
)
4612 op_error (input_location
, COND_EXPR
, NOP_EXPR
,
4613 arg1
, arg2
, arg3
, FALSE
);
4614 print_z_candidates (location_of (arg1
), candidates
);
4616 return error_mark_node
;
4618 cand
= tourney (candidates
, complain
);
4621 if (complain
& tf_error
)
4623 op_error (input_location
, COND_EXPR
, NOP_EXPR
,
4624 arg1
, arg2
, arg3
, FALSE
);
4625 print_z_candidates (location_of (arg1
), candidates
);
4627 return error_mark_node
;
4632 Otherwise, the conversions thus determined are applied, and
4633 the converted operands are used in place of the original
4634 operands for the remainder of this section. */
4635 conv
= cand
->convs
[0];
4636 arg1
= convert_like (conv
, arg1
, complain
);
4637 conv
= cand
->convs
[1];
4638 arg2
= convert_like (conv
, arg2
, complain
);
4639 arg2_type
= TREE_TYPE (arg2
);
4640 conv
= cand
->convs
[2];
4641 arg3
= convert_like (conv
, arg3
, complain
);
4642 arg3_type
= TREE_TYPE (arg3
);
4647 Lvalue-to-rvalue (_conv.lval_), array-to-pointer (_conv.array_),
4648 and function-to-pointer (_conv.func_) standard conversions are
4649 performed on the second and third operands.
4651 We need to force the lvalue-to-rvalue conversion here for class types,
4652 so we get TARGET_EXPRs; trying to deal with a COND_EXPR of class rvalues
4653 that isn't wrapped with a TARGET_EXPR plays havoc with exception
4656 arg2
= force_rvalue (arg2
, complain
);
4657 if (!CLASS_TYPE_P (arg2_type
))
4658 arg2_type
= TREE_TYPE (arg2
);
4660 arg3
= force_rvalue (arg3
, complain
);
4661 if (!CLASS_TYPE_P (arg3_type
))
4662 arg3_type
= TREE_TYPE (arg3
);
4664 if (arg2
== error_mark_node
|| arg3
== error_mark_node
)
4665 return error_mark_node
;
4669 After those conversions, one of the following shall hold:
4671 --The second and third operands have the same type; the result is of
4673 if (same_type_p (arg2_type
, arg3_type
))
4674 result_type
= arg2_type
;
4677 --The second and third operands have arithmetic or enumeration
4678 type; the usual arithmetic conversions are performed to bring
4679 them to a common type, and the result is of that type. */
4680 else if ((ARITHMETIC_TYPE_P (arg2_type
)
4681 || UNSCOPED_ENUM_P (arg2_type
))
4682 && (ARITHMETIC_TYPE_P (arg3_type
)
4683 || UNSCOPED_ENUM_P (arg3_type
)))
4685 /* In this case, there is always a common type. */
4686 result_type
= type_after_usual_arithmetic_conversions (arg2_type
,
4688 do_warn_double_promotion (result_type
, arg2_type
, arg3_type
,
4689 "implicit conversion from %qT to %qT to "
4690 "match other result of conditional",
4693 if (TREE_CODE (arg2_type
) == ENUMERAL_TYPE
4694 && TREE_CODE (arg3_type
) == ENUMERAL_TYPE
)
4696 if (TREE_CODE (orig_arg2
) == CONST_DECL
4697 && TREE_CODE (orig_arg3
) == CONST_DECL
4698 && DECL_CONTEXT (orig_arg2
) == DECL_CONTEXT (orig_arg3
))
4699 /* Two enumerators from the same enumeration can have different
4700 types when the enumeration is still being defined. */;
4701 else if (complain
& tf_warning
)
4702 warning (OPT_Wenum_compare
,
4703 "enumeral mismatch in conditional expression: %qT vs %qT",
4704 arg2_type
, arg3_type
);
4706 else if (extra_warnings
4707 && ((TREE_CODE (arg2_type
) == ENUMERAL_TYPE
4708 && !same_type_p (arg3_type
, type_promotes_to (arg2_type
)))
4709 || (TREE_CODE (arg3_type
) == ENUMERAL_TYPE
4710 && !same_type_p (arg2_type
, type_promotes_to (arg3_type
)))))
4712 if (complain
& tf_warning
)
4714 "enumeral and non-enumeral type in conditional expression");
4717 arg2
= perform_implicit_conversion (result_type
, arg2
, complain
);
4718 arg3
= perform_implicit_conversion (result_type
, arg3
, complain
);
4722 --The second and third operands have pointer type, or one has
4723 pointer type and the other is a null pointer constant; pointer
4724 conversions (_conv.ptr_) and qualification conversions
4725 (_conv.qual_) are performed to bring them to their composite
4726 pointer type (_expr.rel_). The result is of the composite
4729 --The second and third operands have pointer to member type, or
4730 one has pointer to member type and the other is a null pointer
4731 constant; pointer to member conversions (_conv.mem_) and
4732 qualification conversions (_conv.qual_) are performed to bring
4733 them to a common type, whose cv-qualification shall match the
4734 cv-qualification of either the second or the third operand.
4735 The result is of the common type. */
4736 else if ((null_ptr_cst_p (arg2
)
4737 && TYPE_PTR_OR_PTRMEM_P (arg3_type
))
4738 || (null_ptr_cst_p (arg3
)
4739 && TYPE_PTR_OR_PTRMEM_P (arg2_type
))
4740 || (TYPE_PTR_P (arg2_type
) && TYPE_PTR_P (arg3_type
))
4741 || (TYPE_PTRDATAMEM_P (arg2_type
) && TYPE_PTRDATAMEM_P (arg3_type
))
4742 || (TYPE_PTRMEMFUNC_P (arg2_type
) && TYPE_PTRMEMFUNC_P (arg3_type
)))
4744 result_type
= composite_pointer_type (arg2_type
, arg3_type
, arg2
,
4745 arg3
, CPO_CONDITIONAL_EXPR
,
4747 if (result_type
== error_mark_node
)
4748 return error_mark_node
;
4749 arg2
= perform_implicit_conversion (result_type
, arg2
, complain
);
4750 arg3
= perform_implicit_conversion (result_type
, arg3
, complain
);
4755 if (complain
& tf_error
)
4756 error ("operands to ?: have different types %qT and %qT",
4757 arg2_type
, arg3_type
);
4758 return error_mark_node
;
4761 if (arg2
== error_mark_node
|| arg3
== error_mark_node
)
4762 return error_mark_node
;
4765 result
= build3 (COND_EXPR
, result_type
, arg1
, arg2
, arg3
);
4766 if (!cp_unevaluated_operand
)
4767 /* Avoid folding within decltype (c++/42013) and noexcept. */
4768 result
= fold_if_not_in_template (result
);
4770 /* We can't use result_type below, as fold might have returned a
4775 /* Expand both sides into the same slot, hopefully the target of
4776 the ?: expression. We used to check for TARGET_EXPRs here,
4777 but now we sometimes wrap them in NOP_EXPRs so the test would
4779 if (CLASS_TYPE_P (TREE_TYPE (result
)))
4780 result
= get_target_expr (result
);
4781 /* If this expression is an rvalue, but might be mistaken for an
4782 lvalue, we must add a NON_LVALUE_EXPR. */
4783 result
= rvalue (result
);
4789 /* Wrapper for above. */
4792 build_conditional_expr (tree arg1
, tree arg2
, tree arg3
,
4793 tsubst_flags_t complain
)
4796 bool subtime
= timevar_cond_start (TV_OVERLOAD
);
4797 ret
= build_conditional_expr_1 (arg1
, arg2
, arg3
, complain
);
4798 timevar_cond_stop (TV_OVERLOAD
, subtime
);
4802 /* OPERAND is an operand to an expression. Perform necessary steps
4803 required before using it. If OPERAND is NULL_TREE, NULL_TREE is
4807 prep_operand (tree operand
)
4811 if (CLASS_TYPE_P (TREE_TYPE (operand
))
4812 && CLASSTYPE_TEMPLATE_INSTANTIATION (TREE_TYPE (operand
)))
4813 /* Make sure the template type is instantiated now. */
4814 instantiate_class_template (TYPE_MAIN_VARIANT (TREE_TYPE (operand
)));
4820 /* Add each of the viable functions in FNS (a FUNCTION_DECL or
4821 OVERLOAD) to the CANDIDATES, returning an updated list of
4822 CANDIDATES. The ARGS are the arguments provided to the call;
4823 if FIRST_ARG is non-null it is the implicit object argument,
4824 otherwise the first element of ARGS is used if needed. The
4825 EXPLICIT_TARGS are explicit template arguments provided.
4826 TEMPLATE_ONLY is true if only template functions should be
4827 considered. CONVERSION_PATH, ACCESS_PATH, and FLAGS are as for
4828 add_function_candidate. */
4831 add_candidates (tree fns
, tree first_arg
, const VEC(tree
,gc
) *args
,
4833 tree explicit_targs
, bool template_only
,
4834 tree conversion_path
, tree access_path
,
4836 struct z_candidate
**candidates
,
4837 tsubst_flags_t complain
)
4840 const VEC(tree
,gc
) *non_static_args
;
4841 bool check_list_ctor
;
4842 bool check_converting
;
4843 unification_kind_t strict
;
4849 /* Precalculate special handling of constructors and conversion ops. */
4850 fn
= OVL_CURRENT (fns
);
4851 if (DECL_CONV_FN_P (fn
))
4853 check_list_ctor
= false;
4854 check_converting
= !!(flags
& LOOKUP_ONLYCONVERTING
);
4855 if (flags
& LOOKUP_NO_CONVERSION
)
4856 /* We're doing return_type(x). */
4857 strict
= DEDUCE_CONV
;
4859 /* We're doing x.operator return_type(). */
4860 strict
= DEDUCE_EXACT
;
4861 /* [over.match.funcs] For conversion functions, the function
4862 is considered to be a member of the class of the implicit
4863 object argument for the purpose of defining the type of
4864 the implicit object parameter. */
4865 ctype
= TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (first_arg
)));
4869 if (DECL_CONSTRUCTOR_P (fn
))
4871 check_list_ctor
= !!(flags
& LOOKUP_LIST_ONLY
);
4872 /* For list-initialization we consider explicit constructors
4873 and complain if one is chosen. */
4875 = ((flags
& (LOOKUP_ONLYCONVERTING
|LOOKUP_LIST_INIT_CTOR
))
4876 == LOOKUP_ONLYCONVERTING
);
4880 check_list_ctor
= false;
4881 check_converting
= false;
4883 strict
= DEDUCE_CALL
;
4884 ctype
= conversion_path
? BINFO_TYPE (conversion_path
) : NULL_TREE
;
4888 non_static_args
= args
;
4890 /* Delay creating the implicit this parameter until it is needed. */
4891 non_static_args
= NULL
;
4893 for (; fns
; fns
= OVL_NEXT (fns
))
4896 const VEC(tree
,gc
) *fn_args
;
4898 fn
= OVL_CURRENT (fns
);
4900 if (check_converting
&& DECL_NONCONVERTING_P (fn
))
4902 if (check_list_ctor
&& !is_list_ctor (fn
))
4905 /* Figure out which set of arguments to use. */
4906 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn
))
4908 /* If this function is a non-static member and we didn't get an
4909 implicit object argument, move it out of args. */
4910 if (first_arg
== NULL_TREE
)
4914 VEC(tree
,gc
) *tempvec
4915 = VEC_alloc (tree
, gc
, VEC_length (tree
, args
) - 1);
4916 for (ix
= 1; VEC_iterate (tree
, args
, ix
, arg
); ++ix
)
4917 VEC_quick_push (tree
, tempvec
, arg
);
4918 non_static_args
= tempvec
;
4919 first_arg
= build_this (VEC_index (tree
, args
, 0));
4922 fn_first_arg
= first_arg
;
4923 fn_args
= non_static_args
;
4927 /* Otherwise, just use the list of arguments provided. */
4928 fn_first_arg
= NULL_TREE
;
4932 if (TREE_CODE (fn
) == TEMPLATE_DECL
)
4933 add_template_candidate (candidates
,
4945 else if (!template_only
)
4946 add_function_candidate (candidates
,
4959 build_new_op_1 (location_t loc
, enum tree_code code
, int flags
, tree arg1
,
4960 tree arg2
, tree arg3
, tree
*overload
, tsubst_flags_t complain
)
4962 struct z_candidate
*candidates
= 0, *cand
;
4963 VEC(tree
,gc
) *arglist
;
4966 tree result
= NULL_TREE
;
4967 bool result_valid_p
= false;
4968 enum tree_code code2
= NOP_EXPR
;
4969 enum tree_code code_orig_arg1
= ERROR_MARK
;
4970 enum tree_code code_orig_arg2
= ERROR_MARK
;
4976 if (error_operand_p (arg1
)
4977 || error_operand_p (arg2
)
4978 || error_operand_p (arg3
))
4979 return error_mark_node
;
4981 if (code
== MODIFY_EXPR
)
4983 code2
= TREE_CODE (arg3
);
4985 fnname
= ansi_assopname (code2
);
4988 fnname
= ansi_opname (code
);
4990 arg1
= prep_operand (arg1
);
4996 case VEC_DELETE_EXPR
:
4998 /* Use build_op_new_call and build_op_delete_call instead. */
5002 /* Use build_op_call instead. */
5005 case TRUTH_ORIF_EXPR
:
5006 case TRUTH_ANDIF_EXPR
:
5007 case TRUTH_AND_EXPR
:
5009 /* These are saved for the sake of warn_logical_operator. */
5010 code_orig_arg1
= TREE_CODE (arg1
);
5011 code_orig_arg2
= TREE_CODE (arg2
);
5017 arg2
= prep_operand (arg2
);
5018 arg3
= prep_operand (arg3
);
5020 if (code
== COND_EXPR
)
5021 /* Use build_conditional_expr instead. */
5023 else if (! IS_OVERLOAD_TYPE (TREE_TYPE (arg1
))
5024 && (! arg2
|| ! IS_OVERLOAD_TYPE (TREE_TYPE (arg2
))))
5027 if (code
== POSTINCREMENT_EXPR
|| code
== POSTDECREMENT_EXPR
)
5028 arg2
= integer_zero_node
;
5030 arglist
= VEC_alloc (tree
, gc
, 3);
5031 VEC_quick_push (tree
, arglist
, arg1
);
5032 if (arg2
!= NULL_TREE
)
5033 VEC_quick_push (tree
, arglist
, arg2
);
5034 if (arg3
!= NULL_TREE
)
5035 VEC_quick_push (tree
, arglist
, arg3
);
5037 /* Get the high-water mark for the CONVERSION_OBSTACK. */
5038 p
= conversion_obstack_alloc (0);
5040 /* Add namespace-scope operators to the list of functions to
5042 add_candidates (lookup_function_nonclass (fnname
, arglist
, /*block_p=*/true),
5043 NULL_TREE
, arglist
, NULL_TREE
,
5044 NULL_TREE
, false, NULL_TREE
, NULL_TREE
,
5045 flags
, &candidates
, complain
);
5046 /* Add class-member operators to the candidate set. */
5047 if (CLASS_TYPE_P (TREE_TYPE (arg1
)))
5051 fns
= lookup_fnfields (TREE_TYPE (arg1
), fnname
, 1);
5052 if (fns
== error_mark_node
)
5054 result
= error_mark_node
;
5055 goto user_defined_result_ready
;
5058 add_candidates (BASELINK_FUNCTIONS (fns
),
5059 NULL_TREE
, arglist
, NULL_TREE
,
5061 BASELINK_BINFO (fns
),
5062 BASELINK_ACCESS_BINFO (fns
),
5063 flags
, &candidates
, complain
);
5068 args
[2] = NULL_TREE
;
5070 add_builtin_candidates (&candidates
, code
, code2
, fnname
, args
,
5077 /* For these, the built-in candidates set is empty
5078 [over.match.oper]/3. We don't want non-strict matches
5079 because exact matches are always possible with built-in
5080 operators. The built-in candidate set for COMPONENT_REF
5081 would be empty too, but since there are no such built-in
5082 operators, we accept non-strict matches for them. */
5087 strict_p
= pedantic
;
5091 candidates
= splice_viable (candidates
, strict_p
, &any_viable_p
);
5096 case POSTINCREMENT_EXPR
:
5097 case POSTDECREMENT_EXPR
:
5098 /* Don't try anything fancy if we're not allowed to produce
5100 if (!(complain
& tf_error
))
5101 return error_mark_node
;
5103 /* Look for an `operator++ (int)'. Pre-1985 C++ didn't
5104 distinguish between prefix and postfix ++ and
5105 operator++() was used for both, so we allow this with
5109 const char *msg
= (flag_permissive
)
5110 ? G_("no %<%D(int)%> declared for postfix %qs,"
5111 " trying prefix operator instead")
5112 : G_("no %<%D(int)%> declared for postfix %qs");
5113 permerror (loc
, msg
, fnname
, operator_name_info
[code
].name
);
5116 if (!flag_permissive
)
5117 return error_mark_node
;
5119 if (code
== POSTINCREMENT_EXPR
)
5120 code
= PREINCREMENT_EXPR
;
5122 code
= PREDECREMENT_EXPR
;
5123 result
= build_new_op_1 (loc
, code
, flags
, arg1
, NULL_TREE
,
5124 NULL_TREE
, overload
, complain
);
5127 /* The caller will deal with these. */
5132 result_valid_p
= true;
5136 if (complain
& tf_error
)
5138 /* If one of the arguments of the operator represents
5139 an invalid use of member function pointer, try to report
5140 a meaningful error ... */
5141 if (invalid_nonstatic_memfn_p (arg1
, tf_error
)
5142 || invalid_nonstatic_memfn_p (arg2
, tf_error
)
5143 || invalid_nonstatic_memfn_p (arg3
, tf_error
))
5144 /* We displayed the error message. */;
5147 /* ... Otherwise, report the more generic
5148 "no matching operator found" error */
5149 op_error (loc
, code
, code2
, arg1
, arg2
, arg3
, FALSE
);
5150 print_z_candidates (loc
, candidates
);
5153 result
= error_mark_node
;
5159 cand
= tourney (candidates
, complain
);
5162 if (complain
& tf_error
)
5164 op_error (loc
, code
, code2
, arg1
, arg2
, arg3
, TRUE
);
5165 print_z_candidates (loc
, candidates
);
5167 result
= error_mark_node
;
5169 else if (TREE_CODE (cand
->fn
) == FUNCTION_DECL
)
5172 *overload
= cand
->fn
;
5174 if (resolve_args (arglist
, complain
) == NULL
)
5175 result
= error_mark_node
;
5177 result
= build_over_call (cand
, LOOKUP_NORMAL
, complain
);
5181 /* Give any warnings we noticed during overload resolution. */
5182 if (cand
->warnings
&& (complain
& tf_warning
))
5184 struct candidate_warning
*w
;
5185 for (w
= cand
->warnings
; w
; w
= w
->next
)
5186 joust (cand
, w
->loser
, 1, complain
);
5189 /* Check for comparison of different enum types. */
5198 if (TREE_CODE (TREE_TYPE (arg1
)) == ENUMERAL_TYPE
5199 && TREE_CODE (TREE_TYPE (arg2
)) == ENUMERAL_TYPE
5200 && (TYPE_MAIN_VARIANT (TREE_TYPE (arg1
))
5201 != TYPE_MAIN_VARIANT (TREE_TYPE (arg2
)))
5202 && (complain
& tf_warning
))
5204 warning (OPT_Wenum_compare
,
5205 "comparison between %q#T and %q#T",
5206 TREE_TYPE (arg1
), TREE_TYPE (arg2
));
5213 /* We need to strip any leading REF_BIND so that bitfields
5214 don't cause errors. This should not remove any important
5215 conversions, because builtins don't apply to class
5216 objects directly. */
5217 conv
= cand
->convs
[0];
5218 if (conv
->kind
== ck_ref_bind
)
5219 conv
= next_conversion (conv
);
5220 arg1
= convert_like (conv
, arg1
, complain
);
5224 conv
= cand
->convs
[1];
5225 if (conv
->kind
== ck_ref_bind
)
5226 conv
= next_conversion (conv
);
5228 arg2
= decay_conversion (arg2
, complain
);
5230 /* We need to call warn_logical_operator before
5231 converting arg2 to a boolean_type, but after
5232 decaying an enumerator to its value. */
5233 if (complain
& tf_warning
)
5234 warn_logical_operator (loc
, code
, boolean_type_node
,
5235 code_orig_arg1
, arg1
,
5236 code_orig_arg2
, arg2
);
5238 arg2
= convert_like (conv
, arg2
, complain
);
5242 conv
= cand
->convs
[2];
5243 if (conv
->kind
== ck_ref_bind
)
5244 conv
= next_conversion (conv
);
5245 arg3
= convert_like (conv
, arg3
, complain
);
5251 user_defined_result_ready
:
5253 /* Free all the conversions we allocated. */
5254 obstack_free (&conversion_obstack
, p
);
5256 if (result
|| result_valid_p
)
5263 return cp_build_modify_expr (arg1
, code2
, arg2
, complain
);
5266 return cp_build_indirect_ref (arg1
, RO_UNARY_STAR
, complain
);
5268 case TRUTH_ANDIF_EXPR
:
5269 case TRUTH_ORIF_EXPR
:
5270 case TRUTH_AND_EXPR
:
5272 warn_logical_operator (loc
, code
, boolean_type_node
,
5273 code_orig_arg1
, arg1
, code_orig_arg2
, arg2
);
5278 case TRUNC_DIV_EXPR
:
5289 case TRUNC_MOD_EXPR
:
5293 return cp_build_binary_op (input_location
, code
, arg1
, arg2
, complain
);
5295 case UNARY_PLUS_EXPR
:
5298 case TRUTH_NOT_EXPR
:
5299 case PREINCREMENT_EXPR
:
5300 case POSTINCREMENT_EXPR
:
5301 case PREDECREMENT_EXPR
:
5302 case POSTDECREMENT_EXPR
:
5306 return cp_build_unary_op (code
, arg1
, candidates
!= 0, complain
);
5309 return cp_build_array_ref (input_location
, arg1
, arg2
, complain
);
5312 return build_m_component_ref (cp_build_indirect_ref (arg1
, RO_NULL
,
5316 /* The caller will deal with these. */
5328 /* Wrapper for above. */
5331 build_new_op (location_t loc
, enum tree_code code
, int flags
,
5332 tree arg1
, tree arg2
, tree arg3
,
5333 tree
*overload
, tsubst_flags_t complain
)
5336 bool subtime
= timevar_cond_start (TV_OVERLOAD
);
5337 ret
= build_new_op_1 (loc
, code
, flags
, arg1
, arg2
, arg3
,
5338 overload
, complain
);
5339 timevar_cond_stop (TV_OVERLOAD
, subtime
);
5343 /* Returns true iff T, an element of an OVERLOAD chain, is a usual
5344 deallocation function (3.7.4.2 [basic.stc.dynamic.deallocation]). */
5347 non_placement_deallocation_fn_p (tree t
)
5349 /* A template instance is never a usual deallocation function,
5350 regardless of its signature. */
5351 if (TREE_CODE (t
) == TEMPLATE_DECL
5352 || primary_template_instantiation_p (t
))
5355 /* If a class T has a member deallocation function named operator delete
5356 with exactly one parameter, then that function is a usual
5357 (non-placement) deallocation function. If class T does not declare
5358 such an operator delete but does declare a member deallocation
5359 function named operator delete with exactly two parameters, the second
5360 of which has type std::size_t (18.2), then this function is a usual
5361 deallocation function. */
5362 t
= FUNCTION_ARG_CHAIN (t
);
5363 if (t
== void_list_node
5364 || (t
&& same_type_p (TREE_VALUE (t
), size_type_node
)
5365 && TREE_CHAIN (t
) == void_list_node
))
5370 /* Build a call to operator delete. This has to be handled very specially,
5371 because the restrictions on what signatures match are different from all
5372 other call instances. For a normal delete, only a delete taking (void *)
5373 or (void *, size_t) is accepted. For a placement delete, only an exact
5374 match with the placement new is accepted.
5376 CODE is either DELETE_EXPR or VEC_DELETE_EXPR.
5377 ADDR is the pointer to be deleted.
5378 SIZE is the size of the memory block to be deleted.
5379 GLOBAL_P is true if the delete-expression should not consider
5380 class-specific delete operators.
5381 PLACEMENT is the corresponding placement new call, or NULL_TREE.
5383 If this call to "operator delete" is being generated as part to
5384 deallocate memory allocated via a new-expression (as per [expr.new]
5385 which requires that if the initialization throws an exception then
5386 we call a deallocation function), then ALLOC_FN is the allocation
5390 build_op_delete_call (enum tree_code code
, tree addr
, tree size
,
5391 bool global_p
, tree placement
,
5392 tree alloc_fn
, tsubst_flags_t complain
)
5394 tree fn
= NULL_TREE
;
5395 tree fns
, fnname
, type
, t
;
5397 if (addr
== error_mark_node
)
5398 return error_mark_node
;
5400 type
= strip_array_types (TREE_TYPE (TREE_TYPE (addr
)));
5402 fnname
= ansi_opname (code
);
5404 if (CLASS_TYPE_P (type
)
5405 && COMPLETE_TYPE_P (complete_type (type
))
5409 If the result of the lookup is ambiguous or inaccessible, or if
5410 the lookup selects a placement deallocation function, the
5411 program is ill-formed.
5413 Therefore, we ask lookup_fnfields to complain about ambiguity. */
5415 fns
= lookup_fnfields (TYPE_BINFO (type
), fnname
, 1);
5416 if (fns
== error_mark_node
)
5417 return error_mark_node
;
5422 if (fns
== NULL_TREE
)
5423 fns
= lookup_name_nonclass (fnname
);
5425 /* Strip const and volatile from addr. */
5426 addr
= cp_convert (ptr_type_node
, addr
, complain
);
5430 /* "A declaration of a placement deallocation function matches the
5431 declaration of a placement allocation function if it has the same
5432 number of parameters and, after parameter transformations (8.3.5),
5433 all parameter types except the first are identical."
5435 So we build up the function type we want and ask instantiate_type
5436 to get it for us. */
5437 t
= FUNCTION_ARG_CHAIN (alloc_fn
);
5438 t
= tree_cons (NULL_TREE
, ptr_type_node
, t
);
5439 t
= build_function_type (void_type_node
, t
);
5441 fn
= instantiate_type (t
, fns
, tf_none
);
5442 if (fn
== error_mark_node
)
5445 if (BASELINK_P (fn
))
5446 fn
= BASELINK_FUNCTIONS (fn
);
5448 /* "If the lookup finds the two-parameter form of a usual deallocation
5449 function (3.7.4.2) and that function, considered as a placement
5450 deallocation function, would have been selected as a match for the
5451 allocation function, the program is ill-formed." */
5452 if (non_placement_deallocation_fn_p (fn
))
5454 /* But if the class has an operator delete (void *), then that is
5455 the usual deallocation function, so we shouldn't complain
5456 about using the operator delete (void *, size_t). */
5457 for (t
= BASELINK_P (fns
) ? BASELINK_FUNCTIONS (fns
) : fns
;
5458 t
; t
= OVL_NEXT (t
))
5460 tree elt
= OVL_CURRENT (t
);
5461 if (non_placement_deallocation_fn_p (elt
)
5462 && FUNCTION_ARG_CHAIN (elt
) == void_list_node
)
5465 if (complain
& tf_error
)
5467 permerror (0, "non-placement deallocation function %q+D", fn
);
5468 permerror (input_location
, "selected for placement delete");
5471 return error_mark_node
;
5476 /* "Any non-placement deallocation function matches a non-placement
5477 allocation function. If the lookup finds a single matching
5478 deallocation function, that function will be called; otherwise, no
5479 deallocation function will be called." */
5480 for (t
= BASELINK_P (fns
) ? BASELINK_FUNCTIONS (fns
) : fns
;
5481 t
; t
= OVL_NEXT (t
))
5483 tree elt
= OVL_CURRENT (t
);
5484 if (non_placement_deallocation_fn_p (elt
))
5487 /* "If a class T has a member deallocation function named
5488 operator delete with exactly one parameter, then that
5489 function is a usual (non-placement) deallocation
5490 function. If class T does not declare such an operator
5491 delete but does declare a member deallocation function named
5492 operator delete with exactly two parameters, the second of
5493 which has type std::size_t (18.2), then this function is a
5494 usual deallocation function."
5496 So (void*) beats (void*, size_t). */
5497 if (FUNCTION_ARG_CHAIN (fn
) == void_list_node
)
5502 /* If we have a matching function, call it. */
5505 gcc_assert (TREE_CODE (fn
) == FUNCTION_DECL
);
5507 /* If the FN is a member function, make sure that it is
5509 if (BASELINK_P (fns
))
5510 perform_or_defer_access_check (BASELINK_BINFO (fns
), fn
, fn
,
5513 /* Core issue 901: It's ok to new a type with deleted delete. */
5514 if (DECL_DELETED_FN (fn
) && alloc_fn
)
5519 /* The placement args might not be suitable for overload
5520 resolution at this point, so build the call directly. */
5521 int nargs
= call_expr_nargs (placement
);
5522 tree
*argarray
= XALLOCAVEC (tree
, nargs
);
5525 for (i
= 1; i
< nargs
; i
++)
5526 argarray
[i
] = CALL_EXPR_ARG (placement
, i
);
5528 return build_cxx_call (fn
, nargs
, argarray
, complain
);
5533 VEC(tree
,gc
) *args
= VEC_alloc (tree
, gc
, 2);
5534 VEC_quick_push (tree
, args
, addr
);
5535 if (FUNCTION_ARG_CHAIN (fn
) != void_list_node
)
5536 VEC_quick_push (tree
, args
, size
);
5537 ret
= cp_build_function_call_vec (fn
, &args
, complain
);
5538 VEC_free (tree
, gc
, args
);
5545 If no unambiguous matching deallocation function can be found,
5546 propagating the exception does not cause the object's memory to
5550 if ((complain
& tf_warning
)
5552 warning (0, "no corresponding deallocation function for %qD",
5557 if (complain
& tf_error
)
5558 error ("no suitable %<operator %s%> for %qT",
5559 operator_name_info
[(int)code
].name
, type
);
5560 return error_mark_node
;
5563 /* If the current scope isn't allowed to access DECL along
5564 BASETYPE_PATH, give an error. The most derived class in
5565 BASETYPE_PATH is the one used to qualify DECL. DIAG_DECL is
5566 the declaration to use in the error diagnostic. */
5569 enforce_access (tree basetype_path
, tree decl
, tree diag_decl
,
5570 tsubst_flags_t complain
)
5572 gcc_assert (TREE_CODE (basetype_path
) == TREE_BINFO
);
5574 if (!accessible_p (basetype_path
, decl
, true))
5576 if (complain
& tf_error
)
5578 if (TREE_PRIVATE (decl
))
5579 error ("%q+#D is private", diag_decl
);
5580 else if (TREE_PROTECTED (decl
))
5581 error ("%q+#D is protected", diag_decl
);
5583 error ("%q+#D is inaccessible", diag_decl
);
5584 error ("within this context");
5592 /* Initialize a temporary of type TYPE with EXPR. The FLAGS are a
5593 bitwise or of LOOKUP_* values. If any errors are warnings are
5594 generated, set *DIAGNOSTIC_FN to "error" or "warning",
5595 respectively. If no diagnostics are generated, set *DIAGNOSTIC_FN
5599 build_temp (tree expr
, tree type
, int flags
,
5600 diagnostic_t
*diagnostic_kind
, tsubst_flags_t complain
)
5605 savew
= warningcount
, savee
= errorcount
;
5606 args
= make_tree_vector_single (expr
);
5607 expr
= build_special_member_call (NULL_TREE
, complete_ctor_identifier
,
5608 &args
, type
, flags
, complain
);
5609 release_tree_vector (args
);
5610 if (warningcount
> savew
)
5611 *diagnostic_kind
= DK_WARNING
;
5612 else if (errorcount
> savee
)
5613 *diagnostic_kind
= DK_ERROR
;
5615 *diagnostic_kind
= DK_UNSPECIFIED
;
5619 /* Perform warnings about peculiar, but valid, conversions from/to NULL.
5620 EXPR is implicitly converted to type TOTYPE.
5621 FN and ARGNUM are used for diagnostics. */
5624 conversion_null_warnings (tree totype
, tree expr
, tree fn
, int argnum
)
5626 /* Issue warnings about peculiar, but valid, uses of NULL. */
5627 if (expr
== null_node
&& TREE_CODE (totype
) != BOOLEAN_TYPE
5628 && ARITHMETIC_TYPE_P (totype
))
5630 source_location loc
=
5631 expansion_point_location_if_in_system_header (input_location
);
5634 warning_at (loc
, OPT_Wconversion_null
,
5635 "passing NULL to non-pointer argument %P of %qD",
5638 warning_at (loc
, OPT_Wconversion_null
,
5639 "converting to non-pointer type %qT from NULL", totype
);
5642 /* Issue warnings if "false" is converted to a NULL pointer */
5643 else if (TREE_CODE (TREE_TYPE (expr
)) == BOOLEAN_TYPE
5644 && TYPE_PTR_P (totype
))
5647 warning_at (input_location
, OPT_Wconversion_null
,
5648 "converting %<false%> to pointer type for argument %P "
5649 "of %qD", argnum
, fn
);
5651 warning_at (input_location
, OPT_Wconversion_null
,
5652 "converting %<false%> to pointer type %qT", totype
);
5656 /* Perform the conversions in CONVS on the expression EXPR. FN and
5657 ARGNUM are used for diagnostics. ARGNUM is zero based, -1
5658 indicates the `this' argument of a method. INNER is nonzero when
5659 being called to continue a conversion chain. It is negative when a
5660 reference binding will be applied, positive otherwise. If
5661 ISSUE_CONVERSION_WARNINGS is true, warnings about suspicious
5662 conversions will be emitted if appropriate. If C_CAST_P is true,
5663 this conversion is coming from a C-style cast; in that case,
5664 conversions to inaccessible bases are permitted. */
5667 convert_like_real (conversion
*convs
, tree expr
, tree fn
, int argnum
,
5668 int inner
, bool issue_conversion_warnings
,
5669 bool c_cast_p
, tsubst_flags_t complain
)
5671 tree totype
= convs
->type
;
5672 diagnostic_t diag_kind
;
5674 location_t loc
= EXPR_LOC_OR_HERE (expr
);
5676 if (convs
->bad_p
&& !(complain
& tf_error
))
5677 return error_mark_node
;
5680 && convs
->kind
!= ck_user
5681 && convs
->kind
!= ck_list
5682 && convs
->kind
!= ck_ambig
5683 && (convs
->kind
!= ck_ref_bind
5684 || convs
->user_conv_p
)
5685 && convs
->kind
!= ck_rvalue
5686 && convs
->kind
!= ck_base
)
5688 conversion
*t
= convs
;
5690 /* Give a helpful error if this is bad because of excess braces. */
5691 if (BRACE_ENCLOSED_INITIALIZER_P (expr
)
5692 && SCALAR_TYPE_P (totype
)
5693 && CONSTRUCTOR_NELTS (expr
) > 0
5694 && BRACE_ENCLOSED_INITIALIZER_P (CONSTRUCTOR_ELT (expr
, 0)->value
))
5695 permerror (loc
, "too many braces around initializer for %qT", totype
);
5697 for (; t
; t
= next_conversion (t
))
5699 if (t
->kind
== ck_user
&& t
->cand
->reason
)
5701 permerror (loc
, "invalid user-defined conversion "
5702 "from %qT to %qT", TREE_TYPE (expr
), totype
);
5703 print_z_candidate (loc
, "candidate is:", t
->cand
);
5704 expr
= convert_like_real (t
, expr
, fn
, argnum
, 1,
5705 /*issue_conversion_warnings=*/false,
5708 if (convs
->kind
== ck_ref_bind
)
5709 return convert_to_reference (totype
, expr
, CONV_IMPLICIT
,
5710 LOOKUP_NORMAL
, NULL_TREE
,
5713 return cp_convert (totype
, expr
, complain
);
5715 else if (t
->kind
== ck_user
|| !t
->bad_p
)
5717 expr
= convert_like_real (t
, expr
, fn
, argnum
, 1,
5718 /*issue_conversion_warnings=*/false,
5723 else if (t
->kind
== ck_ambig
)
5724 return convert_like_real (t
, expr
, fn
, argnum
, 1,
5725 /*issue_conversion_warnings=*/false,
5728 else if (t
->kind
== ck_identity
)
5732 permerror (loc
, "invalid conversion from %qT to %qT",
5733 TREE_TYPE (expr
), totype
);
5735 permerror (DECL_SOURCE_LOCATION (fn
),
5736 " initializing argument %P of %qD", argnum
, fn
);
5738 return cp_convert (totype
, expr
, complain
);
5741 if (issue_conversion_warnings
&& (complain
& tf_warning
))
5742 conversion_null_warnings (totype
, expr
, fn
, argnum
);
5744 switch (convs
->kind
)
5748 struct z_candidate
*cand
= convs
->cand
;
5749 tree convfn
= cand
->fn
;
5752 /* If we're initializing from {}, it's value-initialization. */
5753 if (BRACE_ENCLOSED_INITIALIZER_P (expr
)
5754 && CONSTRUCTOR_NELTS (expr
) == 0
5755 && TYPE_HAS_DEFAULT_CONSTRUCTOR (totype
))
5757 bool direct
= CONSTRUCTOR_IS_DIRECT_INIT (expr
);
5758 expr
= build_value_init (totype
, complain
);
5759 expr
= get_target_expr_sfinae (expr
, complain
);
5760 if (expr
!= error_mark_node
)
5762 TARGET_EXPR_LIST_INIT_P (expr
) = true;
5763 TARGET_EXPR_DIRECT_INIT_P (expr
) = direct
;
5768 expr
= mark_rvalue_use (expr
);
5770 /* When converting from an init list we consider explicit
5771 constructors, but actually trying to call one is an error. */
5772 if (DECL_NONCONVERTING_P (convfn
) && DECL_CONSTRUCTOR_P (convfn
)
5773 /* Unless this is for direct-list-initialization. */
5774 && !(BRACE_ENCLOSED_INITIALIZER_P (expr
)
5775 && CONSTRUCTOR_IS_DIRECT_INIT (expr
))
5776 /* Unless we're calling it for value-initialization from an
5777 empty list, since that is handled separately in 8.5.4. */
5778 && cand
->num_convs
> 0)
5780 error ("converting to %qT from initializer list would use "
5781 "explicit constructor %qD", totype
, convfn
);
5784 /* Set user_conv_p on the argument conversions, so rvalue/base
5785 handling knows not to allow any more UDCs. */
5786 for (i
= 0; i
< cand
->num_convs
; ++i
)
5787 cand
->convs
[i
]->user_conv_p
= true;
5789 expr
= build_over_call (cand
, LOOKUP_NORMAL
, complain
);
5791 /* If this is a constructor or a function returning an aggr type,
5792 we need to build up a TARGET_EXPR. */
5793 if (DECL_CONSTRUCTOR_P (convfn
))
5795 expr
= build_cplus_new (totype
, expr
, complain
);
5797 /* Remember that this was list-initialization. */
5798 if (convs
->check_narrowing
&& expr
!= error_mark_node
)
5799 TARGET_EXPR_LIST_INIT_P (expr
) = true;
5805 expr
= mark_rvalue_use (expr
);
5806 if (BRACE_ENCLOSED_INITIALIZER_P (expr
))
5808 int nelts
= CONSTRUCTOR_NELTS (expr
);
5810 expr
= build_value_init (totype
, complain
);
5811 else if (nelts
== 1)
5812 expr
= CONSTRUCTOR_ELT (expr
, 0)->value
;
5817 if (type_unknown_p (expr
))
5818 expr
= instantiate_type (totype
, expr
, complain
);
5819 /* Convert a constant to its underlying value, unless we are
5820 about to bind it to a reference, in which case we need to
5821 leave it as an lvalue. */
5824 expr
= decl_constant_value_safe (expr
);
5825 if (expr
== null_node
&& INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (totype
))
5826 /* If __null has been converted to an integer type, we do not
5827 want to warn about uses of EXPR as an integer, rather than
5829 expr
= build_int_cst (totype
, 0);
5833 /* We leave bad_p off ck_ambig because overload resolution considers
5834 it valid, it just fails when we try to perform it. So we need to
5835 check complain here, too. */
5836 if (complain
& tf_error
)
5838 /* Call build_user_type_conversion again for the error. */
5839 build_user_type_conversion (totype
, convs
->u
.expr
, LOOKUP_NORMAL
,
5842 error (" initializing argument %P of %q+D", argnum
, fn
);
5844 return error_mark_node
;
5848 /* Conversion to std::initializer_list<T>. */
5849 tree elttype
= TREE_VEC_ELT (CLASSTYPE_TI_ARGS (totype
), 0);
5850 tree new_ctor
= build_constructor (init_list_type_node
, NULL
);
5851 unsigned len
= CONSTRUCTOR_NELTS (expr
);
5852 tree array
, val
, field
;
5853 VEC(constructor_elt
,gc
) *vec
= NULL
;
5856 /* Convert all the elements. */
5857 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expr
), ix
, val
)
5859 tree sub
= convert_like_real (convs
->u
.list
[ix
], val
, fn
, argnum
,
5860 1, false, false, complain
);
5861 if (sub
== error_mark_node
)
5863 if (!BRACE_ENCLOSED_INITIALIZER_P (val
))
5864 check_narrowing (TREE_TYPE (sub
), val
);
5865 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_ctor
), NULL_TREE
, sub
);
5866 if (!TREE_CONSTANT (sub
))
5867 TREE_CONSTANT (new_ctor
) = false;
5869 /* Build up the array. */
5870 elttype
= cp_build_qualified_type
5871 (elttype
, cp_type_quals (elttype
) | TYPE_QUAL_CONST
);
5872 array
= build_array_of_n_type (elttype
, len
);
5873 array
= finish_compound_literal (array
, new_ctor
, complain
);
5874 /* Take the address explicitly rather than via decay_conversion
5875 to avoid the error about taking the address of a temporary. */
5876 array
= cp_build_addr_expr (array
, complain
);
5877 array
= cp_convert (build_pointer_type (elttype
), array
, complain
);
5879 /* Build up the initializer_list object. */
5880 totype
= complete_type (totype
);
5881 field
= next_initializable_field (TYPE_FIELDS (totype
));
5882 CONSTRUCTOR_APPEND_ELT (vec
, field
, array
);
5883 field
= next_initializable_field (DECL_CHAIN (field
));
5884 CONSTRUCTOR_APPEND_ELT (vec
, field
, size_int (len
));
5885 new_ctor
= build_constructor (totype
, vec
);
5886 return get_target_expr (new_ctor
);
5890 if (TREE_CODE (totype
) == COMPLEX_TYPE
)
5892 tree real
= CONSTRUCTOR_ELT (expr
, 0)->value
;
5893 tree imag
= CONSTRUCTOR_ELT (expr
, 1)->value
;
5894 real
= perform_implicit_conversion (TREE_TYPE (totype
),
5896 imag
= perform_implicit_conversion (TREE_TYPE (totype
),
5898 expr
= build2 (COMPLEX_EXPR
, totype
, real
, imag
);
5899 return fold_if_not_in_template (expr
);
5901 expr
= reshape_init (totype
, expr
, complain
);
5902 return get_target_expr (digest_init (totype
, expr
, complain
));
5908 expr
= convert_like_real (next_conversion (convs
), expr
, fn
, argnum
,
5909 convs
->kind
== ck_ref_bind
? -1 : 1,
5910 convs
->kind
== ck_ref_bind
? issue_conversion_warnings
: false,
5913 if (expr
== error_mark_node
)
5914 return error_mark_node
;
5916 switch (convs
->kind
)
5919 expr
= decay_conversion (expr
, complain
);
5920 if (expr
== error_mark_node
)
5921 return error_mark_node
;
5923 if (! MAYBE_CLASS_TYPE_P (totype
))
5925 /* Else fall through. */
5927 if (convs
->kind
== ck_base
&& !convs
->need_temporary_p
)
5929 /* We are going to bind a reference directly to a base-class
5930 subobject of EXPR. */
5931 /* Build an expression for `*((base*) &expr)'. */
5932 expr
= cp_build_addr_expr (expr
, complain
);
5933 expr
= convert_to_base (expr
, build_pointer_type (totype
),
5934 !c_cast_p
, /*nonnull=*/true, complain
);
5935 expr
= cp_build_indirect_ref (expr
, RO_IMPLICIT_CONVERSION
, complain
);
5939 /* Copy-initialization where the cv-unqualified version of the source
5940 type is the same class as, or a derived class of, the class of the
5941 destination [is treated as direct-initialization]. [dcl.init] */
5942 flags
= LOOKUP_NORMAL
|LOOKUP_ONLYCONVERTING
;
5943 if (convs
->user_conv_p
)
5944 /* This conversion is being done in the context of a user-defined
5945 conversion (i.e. the second step of copy-initialization), so
5946 don't allow any more. */
5947 flags
|= LOOKUP_NO_CONVERSION
;
5948 if (convs
->rvaluedness_matches_p
)
5949 flags
|= LOOKUP_PREFER_RVALUE
;
5950 if (TREE_CODE (expr
) == TARGET_EXPR
5951 && TARGET_EXPR_LIST_INIT_P (expr
))
5952 /* Copy-list-initialization doesn't actually involve a copy. */
5954 expr
= build_temp (expr
, totype
, flags
, &diag_kind
, complain
);
5955 if (diag_kind
&& fn
&& complain
)
5956 emit_diagnostic (diag_kind
, DECL_SOURCE_LOCATION (fn
), 0,
5957 " initializing argument %P of %qD", argnum
, fn
);
5958 return build_cplus_new (totype
, expr
, complain
);
5962 tree ref_type
= totype
;
5964 if (convs
->bad_p
&& !next_conversion (convs
)->bad_p
)
5966 gcc_assert (TYPE_REF_IS_RVALUE (ref_type
)
5967 && real_lvalue_p (expr
));
5969 error_at (loc
, "cannot bind %qT lvalue to %qT",
5970 TREE_TYPE (expr
), totype
);
5972 error (" initializing argument %P of %q+D", argnum
, fn
);
5973 return error_mark_node
;
5976 /* If necessary, create a temporary.
5978 VA_ARG_EXPR and CONSTRUCTOR expressions are special cases
5979 that need temporaries, even when their types are reference
5980 compatible with the type of reference being bound, so the
5981 upcoming call to cp_build_addr_expr doesn't fail. */
5982 if (convs
->need_temporary_p
5983 || TREE_CODE (expr
) == CONSTRUCTOR
5984 || TREE_CODE (expr
) == VA_ARG_EXPR
)
5986 /* Otherwise, a temporary of type "cv1 T1" is created and
5987 initialized from the initializer expression using the rules
5988 for a non-reference copy-initialization (8.5). */
5990 tree type
= TREE_TYPE (ref_type
);
5991 cp_lvalue_kind lvalue
= real_lvalue_p (expr
);
5993 gcc_assert (same_type_ignoring_top_level_qualifiers_p
5994 (type
, next_conversion (convs
)->type
));
5995 if (!CP_TYPE_CONST_NON_VOLATILE_P (type
)
5996 && !TYPE_REF_IS_RVALUE (ref_type
))
5998 /* If the reference is volatile or non-const, we
5999 cannot create a temporary. */
6000 if (lvalue
& clk_bitfield
)
6001 error_at (loc
, "cannot bind bitfield %qE to %qT",
6003 else if (lvalue
& clk_packed
)
6004 error_at (loc
, "cannot bind packed field %qE to %qT",
6007 error_at (loc
, "cannot bind rvalue %qE to %qT",
6009 return error_mark_node
;
6011 /* If the source is a packed field, and we must use a copy
6012 constructor, then building the target expr will require
6013 binding the field to the reference parameter to the
6014 copy constructor, and we'll end up with an infinite
6015 loop. If we can use a bitwise copy, then we'll be
6017 if ((lvalue
& clk_packed
)
6018 && CLASS_TYPE_P (type
)
6019 && type_has_nontrivial_copy_init (type
))
6021 error_at (loc
, "cannot bind packed field %qE to %qT",
6023 return error_mark_node
;
6025 if (lvalue
& clk_bitfield
)
6027 expr
= convert_bitfield_to_declared_type (expr
);
6028 expr
= fold_convert (type
, expr
);
6030 expr
= build_target_expr_with_type (expr
, type
, complain
);
6033 /* Take the address of the thing to which we will bind the
6035 expr
= cp_build_addr_expr (expr
, complain
);
6036 if (expr
== error_mark_node
)
6037 return error_mark_node
;
6039 /* Convert it to a pointer to the type referred to by the
6040 reference. This will adjust the pointer if a derived to
6041 base conversion is being performed. */
6042 expr
= cp_convert (build_pointer_type (TREE_TYPE (ref_type
)),
6044 /* Convert the pointer to the desired reference type. */
6045 return build_nop (ref_type
, expr
);
6049 return decay_conversion (expr
, complain
);
6052 /* Warn about deprecated conversion if appropriate. */
6053 string_conv_p (totype
, expr
, 1);
6058 expr
= convert_to_base (expr
, totype
, !c_cast_p
,
6059 /*nonnull=*/false, complain
);
6060 return build_nop (totype
, expr
);
6063 return convert_ptrmem (totype
, expr
, /*allow_inverse_p=*/false,
6064 c_cast_p
, complain
);
6070 if (convs
->check_narrowing
)
6071 check_narrowing (totype
, expr
);
6073 if (issue_conversion_warnings
&& (complain
& tf_warning
))
6074 expr
= convert_and_check (totype
, expr
);
6076 expr
= convert (totype
, expr
);
6081 /* ARG is being passed to a varargs function. Perform any conversions
6082 required. Return the converted value. */
6085 convert_arg_to_ellipsis (tree arg
, tsubst_flags_t complain
)
6088 location_t loc
= EXPR_LOC_OR_HERE (arg
);
6092 The lvalue-to-rvalue, array-to-pointer, and function-to-pointer
6093 standard conversions are performed. */
6094 arg
= decay_conversion (arg
, complain
);
6095 arg_type
= TREE_TYPE (arg
);
6098 If the argument has integral or enumeration type that is subject
6099 to the integral promotions (_conv.prom_), or a floating point
6100 type that is subject to the floating point promotion
6101 (_conv.fpprom_), the value of the argument is converted to the
6102 promoted type before the call. */
6103 if (TREE_CODE (arg_type
) == REAL_TYPE
6104 && (TYPE_PRECISION (arg_type
)
6105 < TYPE_PRECISION (double_type_node
))
6106 && !DECIMAL_FLOAT_MODE_P (TYPE_MODE (arg_type
)))
6108 if ((complain
& tf_warning
)
6109 && warn_double_promotion
&& !c_inhibit_evaluation_warnings
)
6110 warning_at (loc
, OPT_Wdouble_promotion
,
6111 "implicit conversion from %qT to %qT when passing "
6112 "argument to function",
6113 arg_type
, double_type_node
);
6114 arg
= convert_to_real (double_type_node
, arg
);
6116 else if (NULLPTR_TYPE_P (arg_type
))
6117 arg
= null_pointer_node
;
6118 else if (INTEGRAL_OR_ENUMERATION_TYPE_P (arg_type
))
6120 if (SCOPED_ENUM_P (arg_type
) && !abi_version_at_least (6))
6122 if (complain
& tf_warning
)
6123 warning_at (loc
, OPT_Wabi
, "scoped enum %qT will not promote to an "
6124 "integral type in a future version of GCC", arg_type
);
6125 arg
= cp_convert (ENUM_UNDERLYING_TYPE (arg_type
), arg
, complain
);
6127 arg
= cp_perform_integral_promotions (arg
, complain
);
6130 arg
= require_complete_type_sfinae (arg
, complain
);
6131 arg_type
= TREE_TYPE (arg
);
6133 if (arg
!= error_mark_node
6134 /* In a template (or ill-formed code), we can have an incomplete type
6135 even after require_complete_type_sfinae, in which case we don't know
6136 whether it has trivial copy or not. */
6137 && COMPLETE_TYPE_P (arg_type
))
6139 /* Build up a real lvalue-to-rvalue conversion in case the
6140 copy constructor is trivial but not callable. */
6141 if (!cp_unevaluated_operand
&& CLASS_TYPE_P (arg_type
))
6142 force_rvalue (arg
, complain
);
6144 /* [expr.call] 5.2.2/7:
6145 Passing a potentially-evaluated argument of class type (Clause 9)
6146 with a non-trivial copy constructor or a non-trivial destructor
6147 with no corresponding parameter is conditionally-supported, with
6148 implementation-defined semantics.
6150 We used to just warn here and do a bitwise copy, but now
6151 cp_expr_size will abort if we try to do that.
6153 If the call appears in the context of a sizeof expression,
6154 it is not potentially-evaluated. */
6155 if (cp_unevaluated_operand
== 0
6156 && (type_has_nontrivial_copy_init (arg_type
)
6157 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (arg_type
)))
6159 if (complain
& tf_error
)
6160 error_at (loc
, "cannot pass objects of non-trivially-copyable "
6161 "type %q#T through %<...%>", arg_type
);
6163 return error_mark_node
;
6170 /* va_arg (EXPR, TYPE) is a builtin. Make sure it is not abused. */
6173 build_x_va_arg (source_location loc
, tree expr
, tree type
)
6175 if (processing_template_decl
)
6176 return build_min (VA_ARG_EXPR
, type
, expr
);
6178 type
= complete_type_or_else (type
, NULL_TREE
);
6180 if (expr
== error_mark_node
|| !type
)
6181 return error_mark_node
;
6183 expr
= mark_lvalue_use (expr
);
6185 if (type_has_nontrivial_copy_init (type
)
6186 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type
)
6187 || TREE_CODE (type
) == REFERENCE_TYPE
)
6189 /* Remove reference types so we don't ICE later on. */
6190 tree type1
= non_reference (type
);
6191 /* conditionally-supported behavior [expr.call] 5.2.2/7. */
6192 error ("cannot receive objects of non-trivially-copyable type %q#T "
6193 "through %<...%>; ", type
);
6194 expr
= convert (build_pointer_type (type1
), null_node
);
6195 expr
= cp_build_indirect_ref (expr
, RO_NULL
, tf_warning_or_error
);
6199 return build_va_arg (loc
, expr
, type
);
6202 /* TYPE has been given to va_arg. Apply the default conversions which
6203 would have happened when passed via ellipsis. Return the promoted
6204 type, or the passed type if there is no change. */
6207 cxx_type_promotes_to (tree type
)
6211 /* Perform the array-to-pointer and function-to-pointer
6213 type
= type_decays_to (type
);
6215 promote
= type_promotes_to (type
);
6216 if (same_type_p (type
, promote
))
6222 /* ARG is a default argument expression being passed to a parameter of
6223 the indicated TYPE, which is a parameter to FN. PARMNUM is the
6224 zero-based argument number. Do any required conversions. Return
6225 the converted value. */
6227 static GTY(()) VEC(tree
,gc
) *default_arg_context
;
6229 push_defarg_context (tree fn
)
6230 { VEC_safe_push (tree
, gc
, default_arg_context
, fn
); }
6232 pop_defarg_context (void)
6233 { VEC_pop (tree
, default_arg_context
); }
6236 convert_default_arg (tree type
, tree arg
, tree fn
, int parmnum
,
6237 tsubst_flags_t complain
)
6242 /* See through clones. */
6243 fn
= DECL_ORIGIN (fn
);
6245 /* Detect recursion. */
6246 FOR_EACH_VEC_ELT (tree
, default_arg_context
, i
, t
)
6249 if (complain
& tf_error
)
6250 error ("recursive evaluation of default argument for %q#D", fn
);
6251 return error_mark_node
;
6254 /* If the ARG is an unparsed default argument expression, the
6255 conversion cannot be performed. */
6256 if (TREE_CODE (arg
) == DEFAULT_ARG
)
6258 if (complain
& tf_error
)
6259 error ("call to %qD uses the default argument for parameter %P, which "
6260 "is not yet defined", fn
, parmnum
);
6261 return error_mark_node
;
6264 push_defarg_context (fn
);
6266 if (fn
&& DECL_TEMPLATE_INFO (fn
))
6267 arg
= tsubst_default_argument (fn
, type
, arg
);
6273 The names in the expression are bound, and the semantic
6274 constraints are checked, at the point where the default
6275 expressions appears.
6277 we must not perform access checks here. */
6278 push_deferring_access_checks (dk_no_check
);
6279 /* We must make a copy of ARG, in case subsequent processing
6280 alters any part of it. */
6281 arg
= break_out_target_exprs (arg
);
6282 if (TREE_CODE (arg
) == CONSTRUCTOR
)
6284 arg
= digest_init (type
, arg
, complain
);
6285 arg
= convert_for_initialization (0, type
, arg
, LOOKUP_IMPLICIT
,
6286 ICR_DEFAULT_ARGUMENT
, fn
, parmnum
,
6291 arg
= convert_for_initialization (0, type
, arg
, LOOKUP_IMPLICIT
,
6292 ICR_DEFAULT_ARGUMENT
, fn
, parmnum
,
6294 arg
= convert_for_arg_passing (type
, arg
, complain
);
6296 pop_deferring_access_checks();
6298 pop_defarg_context ();
6303 /* Returns the type which will really be used for passing an argument of
6307 type_passed_as (tree type
)
6309 /* Pass classes with copy ctors by invisible reference. */
6310 if (TREE_ADDRESSABLE (type
))
6312 type
= build_reference_type (type
);
6313 /* There are no other pointers to this temporary. */
6314 type
= cp_build_qualified_type (type
, TYPE_QUAL_RESTRICT
);
6316 else if (targetm
.calls
.promote_prototypes (type
)
6317 && INTEGRAL_TYPE_P (type
)
6318 && COMPLETE_TYPE_P (type
)
6319 && INT_CST_LT_UNSIGNED (TYPE_SIZE (type
),
6320 TYPE_SIZE (integer_type_node
)))
6321 type
= integer_type_node
;
6326 /* Actually perform the appropriate conversion. */
6329 convert_for_arg_passing (tree type
, tree val
, tsubst_flags_t complain
)
6333 /* If VAL is a bitfield, then -- since it has already been converted
6334 to TYPE -- it cannot have a precision greater than TYPE.
6336 If it has a smaller precision, we must widen it here. For
6337 example, passing "int f:3;" to a function expecting an "int" will
6338 not result in any conversion before this point.
6340 If the precision is the same we must not risk widening. For
6341 example, the COMPONENT_REF for a 32-bit "long long" bitfield will
6342 often have type "int", even though the C++ type for the field is
6343 "long long". If the value is being passed to a function
6344 expecting an "int", then no conversions will be required. But,
6345 if we call convert_bitfield_to_declared_type, the bitfield will
6346 be converted to "long long". */
6347 bitfield_type
= is_bitfield_expr_with_lowered_type (val
);
6349 && TYPE_PRECISION (TREE_TYPE (val
)) < TYPE_PRECISION (type
))
6350 val
= convert_to_integer (TYPE_MAIN_VARIANT (bitfield_type
), val
);
6352 if (val
== error_mark_node
)
6354 /* Pass classes with copy ctors by invisible reference. */
6355 else if (TREE_ADDRESSABLE (type
))
6356 val
= build1 (ADDR_EXPR
, build_reference_type (type
), val
);
6357 else if (targetm
.calls
.promote_prototypes (type
)
6358 && INTEGRAL_TYPE_P (type
)
6359 && COMPLETE_TYPE_P (type
)
6360 && INT_CST_LT_UNSIGNED (TYPE_SIZE (type
),
6361 TYPE_SIZE (integer_type_node
)))
6362 val
= cp_perform_integral_promotions (val
, complain
);
6363 if ((complain
& tf_warning
)
6364 && warn_suggest_attribute_format
)
6366 tree rhstype
= TREE_TYPE (val
);
6367 const enum tree_code coder
= TREE_CODE (rhstype
);
6368 const enum tree_code codel
= TREE_CODE (type
);
6369 if ((codel
== POINTER_TYPE
|| codel
== REFERENCE_TYPE
)
6371 && check_missing_format_attribute (type
, rhstype
))
6372 warning (OPT_Wsuggest_attribute_format
,
6373 "argument of function call might be a candidate for a format attribute");
6378 /* Returns true iff FN is a function with magic varargs, i.e. ones for
6379 which no conversions at all should be done. This is true for some
6380 builtins which don't act like normal functions. */
6383 magic_varargs_p (tree fn
)
6385 if (DECL_BUILT_IN (fn
))
6386 switch (DECL_FUNCTION_CODE (fn
))
6388 case BUILT_IN_CLASSIFY_TYPE
:
6389 case BUILT_IN_CONSTANT_P
:
6390 case BUILT_IN_NEXT_ARG
:
6391 case BUILT_IN_VA_START
:
6395 return lookup_attribute ("type generic",
6396 TYPE_ATTRIBUTES (TREE_TYPE (fn
))) != 0;
6402 /* Subroutine of the various build_*_call functions. Overload resolution
6403 has chosen a winning candidate CAND; build up a CALL_EXPR accordingly.
6404 ARGS is a TREE_LIST of the unconverted arguments to the call. FLAGS is a
6405 bitmask of various LOOKUP_* flags which apply to the call itself. */
6408 build_over_call (struct z_candidate
*cand
, int flags
, tsubst_flags_t complain
)
6411 const VEC(tree
,gc
) *args
= cand
->args
;
6412 tree first_arg
= cand
->first_arg
;
6413 conversion
**convs
= cand
->convs
;
6415 tree parm
= TYPE_ARG_TYPES (TREE_TYPE (fn
));
6420 unsigned int arg_index
= 0;
6424 bool already_used
= false;
6426 /* In a template, there is no need to perform all of the work that
6427 is normally done. We are only interested in the type of the call
6428 expression, i.e., the return type of the function. Any semantic
6429 errors will be deferred until the template is instantiated. */
6430 if (processing_template_decl
)
6434 const tree
*argarray
;
6437 return_type
= TREE_TYPE (TREE_TYPE (fn
));
6438 nargs
= VEC_length (tree
, args
);
6439 if (first_arg
== NULL_TREE
)
6440 argarray
= VEC_address (tree
, CONST_CAST (VEC(tree
,gc
) *, args
));
6448 alcarray
= XALLOCAVEC (tree
, nargs
);
6449 alcarray
[0] = first_arg
;
6450 FOR_EACH_VEC_ELT (tree
, args
, ix
, arg
)
6451 alcarray
[ix
+ 1] = arg
;
6452 argarray
= alcarray
;
6455 addr
= build_addr_func (fn
, complain
);
6456 if (addr
== error_mark_node
)
6457 return error_mark_node
;
6458 expr
= build_call_array_loc (input_location
, return_type
,
6459 addr
, nargs
, argarray
);
6460 if (TREE_THIS_VOLATILE (fn
) && cfun
)
6461 current_function_returns_abnormally
= 1;
6462 return convert_from_reference (expr
);
6465 /* Give any warnings we noticed during overload resolution. */
6466 if (cand
->warnings
&& (complain
& tf_warning
))
6468 struct candidate_warning
*w
;
6469 for (w
= cand
->warnings
; w
; w
= w
->next
)
6470 joust (cand
, w
->loser
, 1, complain
);
6473 /* Make =delete work with SFINAE. */
6474 if (DECL_DELETED_FN (fn
) && !(complain
& tf_error
))
6475 return error_mark_node
;
6477 if (DECL_FUNCTION_MEMBER_P (fn
))
6480 /* If FN is a template function, two cases must be considered.
6485 template <class T> void f();
6487 template <class T> struct B {
6491 struct C : A, B<int> {
6493 using B<int>::g; // #2
6496 In case #1 where `A::f' is a member template, DECL_ACCESS is
6497 recorded in the primary template but not in its specialization.
6498 We check access of FN using its primary template.
6500 In case #2, where `B<int>::g' has a DECL_TEMPLATE_INFO simply
6501 because it is a member of class template B, DECL_ACCESS is
6502 recorded in the specialization `B<int>::g'. We cannot use its
6503 primary template because `B<T>::g' and `B<int>::g' may have
6504 different access. */
6505 if (DECL_TEMPLATE_INFO (fn
)
6506 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (fn
)))
6507 access_fn
= DECL_TI_TEMPLATE (fn
);
6510 if (!perform_or_defer_access_check (cand
->access_path
, access_fn
,
6512 return error_mark_node
;
6515 /* If we're checking for implicit delete, don't bother with argument
6517 if (flags
& LOOKUP_SPECULATIVE
)
6519 if (DECL_DELETED_FN (fn
))
6521 if (complain
& tf_error
)
6523 return error_mark_node
;
6525 if (cand
->viable
== 1)
6527 else if (!(complain
& tf_error
))
6528 /* Reject bad conversions now. */
6529 return error_mark_node
;
6530 /* else continue to get conversion error. */
6533 /* Find maximum size of vector to hold converted arguments. */
6534 parmlen
= list_length (parm
);
6535 nargs
= VEC_length (tree
, args
) + (first_arg
!= NULL_TREE
? 1 : 0);
6536 if (parmlen
> nargs
)
6538 argarray
= XALLOCAVEC (tree
, nargs
);
6540 /* The implicit parameters to a constructor are not considered by overload
6541 resolution, and must be of the proper type. */
6542 if (DECL_CONSTRUCTOR_P (fn
))
6544 if (first_arg
!= NULL_TREE
)
6546 argarray
[j
++] = first_arg
;
6547 first_arg
= NULL_TREE
;
6551 argarray
[j
++] = VEC_index (tree
, args
, arg_index
);
6554 parm
= TREE_CHAIN (parm
);
6555 /* We should never try to call the abstract constructor. */
6556 gcc_assert (!DECL_HAS_IN_CHARGE_PARM_P (fn
));
6558 if (DECL_HAS_VTT_PARM_P (fn
))
6560 argarray
[j
++] = VEC_index (tree
, args
, arg_index
);
6562 parm
= TREE_CHAIN (parm
);
6565 /* Bypass access control for 'this' parameter. */
6566 else if (TREE_CODE (TREE_TYPE (fn
)) == METHOD_TYPE
)
6568 tree parmtype
= TREE_VALUE (parm
);
6569 tree arg
= (first_arg
!= NULL_TREE
6571 : VEC_index (tree
, args
, arg_index
));
6572 tree argtype
= TREE_TYPE (arg
);
6576 if (convs
[i
]->bad_p
)
6578 if (complain
& tf_error
)
6579 permerror (input_location
, "passing %qT as %<this%> argument of %q#D discards qualifiers",
6580 TREE_TYPE (argtype
), fn
);
6582 return error_mark_node
;
6585 /* See if the function member or the whole class type is declared
6586 final and the call can be devirtualized. */
6587 if (DECL_FINAL_P (fn
)
6588 || CLASSTYPE_FINAL (TYPE_METHOD_BASETYPE (TREE_TYPE (fn
))))
6589 flags
|= LOOKUP_NONVIRTUAL
;
6591 /* [class.mfct.nonstatic]: If a nonstatic member function of a class
6592 X is called for an object that is not of type X, or of a type
6593 derived from X, the behavior is undefined.
6595 So we can assume that anything passed as 'this' is non-null, and
6596 optimize accordingly. */
6597 gcc_assert (TREE_CODE (parmtype
) == POINTER_TYPE
);
6598 /* Convert to the base in which the function was declared. */
6599 gcc_assert (cand
->conversion_path
!= NULL_TREE
);
6600 converted_arg
= build_base_path (PLUS_EXPR
,
6602 cand
->conversion_path
,
6604 /* Check that the base class is accessible. */
6605 if (!accessible_base_p (TREE_TYPE (argtype
),
6606 BINFO_TYPE (cand
->conversion_path
), true))
6607 error ("%qT is not an accessible base of %qT",
6608 BINFO_TYPE (cand
->conversion_path
),
6609 TREE_TYPE (argtype
));
6610 /* If fn was found by a using declaration, the conversion path
6611 will be to the derived class, not the base declaring fn. We
6612 must convert from derived to base. */
6613 base_binfo
= lookup_base (TREE_TYPE (TREE_TYPE (converted_arg
)),
6614 TREE_TYPE (parmtype
), ba_unique
,
6616 converted_arg
= build_base_path (PLUS_EXPR
, converted_arg
,
6617 base_binfo
, 1, complain
);
6619 argarray
[j
++] = converted_arg
;
6620 parm
= TREE_CHAIN (parm
);
6621 if (first_arg
!= NULL_TREE
)
6622 first_arg
= NULL_TREE
;
6629 gcc_assert (first_arg
== NULL_TREE
);
6630 for (; arg_index
< VEC_length (tree
, args
) && parm
;
6631 parm
= TREE_CHAIN (parm
), ++arg_index
, ++i
)
6633 tree type
= TREE_VALUE (parm
);
6634 tree arg
= VEC_index (tree
, args
, arg_index
);
6635 bool conversion_warning
= true;
6639 /* If the argument is NULL and used to (implicitly) instantiate a
6640 template function (and bind one of the template arguments to
6641 the type of 'long int'), we don't want to warn about passing NULL
6642 to non-pointer argument.
6643 For example, if we have this template function:
6645 template<typename T> void func(T x) {}
6647 we want to warn (when -Wconversion is enabled) in this case:
6653 but not in this case:
6659 if (arg
== null_node
6660 && DECL_TEMPLATE_INFO (fn
)
6661 && cand
->template_decl
6662 && !(flags
& LOOKUP_EXPLICIT_TMPL_ARGS
))
6663 conversion_warning
= false;
6665 /* Warn about initializer_list deduction that isn't currently in the
6667 if (cxx_dialect
> cxx98
6668 && flag_deduce_init_list
6669 && cand
->template_decl
6670 && is_std_init_list (non_reference (type
))
6671 && BRACE_ENCLOSED_INITIALIZER_P (arg
))
6673 tree tmpl
= TI_TEMPLATE (cand
->template_decl
);
6674 tree realparm
= chain_index (j
, DECL_ARGUMENTS (cand
->fn
));
6675 tree patparm
= get_pattern_parm (realparm
, tmpl
);
6676 tree pattype
= TREE_TYPE (patparm
);
6677 if (PACK_EXPANSION_P (pattype
))
6678 pattype
= PACK_EXPANSION_PATTERN (pattype
);
6679 pattype
= non_reference (pattype
);
6681 if (TREE_CODE (pattype
) == TEMPLATE_TYPE_PARM
6682 && (cand
->explicit_targs
== NULL_TREE
6683 || (TREE_VEC_LENGTH (cand
->explicit_targs
)
6684 <= TEMPLATE_TYPE_IDX (pattype
))))
6686 pedwarn (input_location
, 0, "deducing %qT as %qT",
6687 non_reference (TREE_TYPE (patparm
)),
6688 non_reference (type
));
6689 pedwarn (input_location
, 0, " in call to %q+D", cand
->fn
);
6690 pedwarn (input_location
, 0,
6691 " (you can disable this with -fno-deduce-init-list)");
6695 val
= convert_like_with_context (conv
, arg
, fn
, i
-is_method
,
6698 : complain
& (~tf_warning
));
6700 val
= convert_for_arg_passing (type
, val
, complain
);
6701 if (val
== error_mark_node
)
6702 return error_mark_node
;
6704 argarray
[j
++] = val
;
6707 /* Default arguments */
6708 for (; parm
&& parm
!= void_list_node
; parm
= TREE_CHAIN (parm
), i
++)
6710 if (TREE_VALUE (parm
) == error_mark_node
)
6711 return error_mark_node
;
6712 argarray
[j
++] = convert_default_arg (TREE_VALUE (parm
),
6713 TREE_PURPOSE (parm
),
6719 for (; arg_index
< VEC_length (tree
, args
); ++arg_index
)
6721 tree a
= VEC_index (tree
, args
, arg_index
);
6722 if (magic_varargs_p (fn
))
6723 /* Do no conversions for magic varargs. */
6724 a
= mark_type_use (a
);
6726 a
= convert_arg_to_ellipsis (a
, complain
);
6730 gcc_assert (j
<= nargs
);
6733 check_function_arguments (TREE_TYPE (fn
), nargs
, argarray
);
6735 /* Avoid actually calling copy constructors and copy assignment operators,
6738 if (! flag_elide_constructors
)
6739 /* Do things the hard way. */;
6740 else if (cand
->num_convs
== 1
6741 && (DECL_COPY_CONSTRUCTOR_P (fn
)
6742 || DECL_MOVE_CONSTRUCTOR_P (fn
)))
6745 tree arg
= argarray
[num_artificial_parms_for (fn
)];
6747 bool trivial
= trivial_fn_p (fn
);
6749 /* Pull out the real argument, disregarding const-correctness. */
6751 while (CONVERT_EXPR_P (targ
)
6752 || TREE_CODE (targ
) == NON_LVALUE_EXPR
)
6753 targ
= TREE_OPERAND (targ
, 0);
6754 if (TREE_CODE (targ
) == ADDR_EXPR
)
6756 targ
= TREE_OPERAND (targ
, 0);
6757 if (!same_type_ignoring_top_level_qualifiers_p
6758 (TREE_TYPE (TREE_TYPE (arg
)), TREE_TYPE (targ
)))
6767 arg
= cp_build_indirect_ref (arg
, RO_NULL
, complain
);
6769 /* [class.copy]: the copy constructor is implicitly defined even if
6770 the implementation elided its use. */
6771 if (!trivial
|| DECL_DELETED_FN (fn
))
6774 already_used
= true;
6777 /* If we're creating a temp and we already have one, don't create a
6778 new one. If we're not creating a temp but we get one, use
6779 INIT_EXPR to collapse the temp into our target. Otherwise, if the
6780 ctor is trivial, do a bitwise copy with a simple TARGET_EXPR for a
6781 temp or an INIT_EXPR otherwise. */
6783 if (integer_zerop (fa
))
6785 if (TREE_CODE (arg
) == TARGET_EXPR
)
6788 return force_target_expr (DECL_CONTEXT (fn
), arg
, complain
);
6790 else if (TREE_CODE (arg
) == TARGET_EXPR
|| trivial
)
6792 tree to
= stabilize_reference (cp_build_indirect_ref (fa
, RO_NULL
,
6795 val
= build2 (INIT_EXPR
, DECL_CONTEXT (fn
), to
, arg
);
6799 else if (DECL_OVERLOADED_OPERATOR_P (fn
) == NOP_EXPR
6800 && trivial_fn_p (fn
)
6801 && !DECL_DELETED_FN (fn
))
6803 tree to
= stabilize_reference
6804 (cp_build_indirect_ref (argarray
[0], RO_NULL
, complain
));
6805 tree type
= TREE_TYPE (to
);
6806 tree as_base
= CLASSTYPE_AS_BASE (type
);
6807 tree arg
= argarray
[1];
6809 if (is_really_empty_class (type
))
6811 /* Avoid copying empty classes. */
6812 val
= build2 (COMPOUND_EXPR
, void_type_node
, to
, arg
);
6813 TREE_NO_WARNING (val
) = 1;
6814 val
= build2 (COMPOUND_EXPR
, type
, val
, to
);
6815 TREE_NO_WARNING (val
) = 1;
6817 else if (tree_int_cst_equal (TYPE_SIZE (type
), TYPE_SIZE (as_base
)))
6819 arg
= cp_build_indirect_ref (arg
, RO_NULL
, complain
);
6820 val
= build2 (MODIFY_EXPR
, TREE_TYPE (to
), to
, arg
);
6824 /* We must only copy the non-tail padding parts. */
6826 tree array_type
, alias_set
;
6828 arg2
= TYPE_SIZE_UNIT (as_base
);
6829 arg0
= cp_build_addr_expr (to
, complain
);
6831 array_type
= build_array_type (char_type_node
,
6833 (size_binop (MINUS_EXPR
,
6834 arg2
, size_int (1))));
6835 alias_set
= build_int_cst (build_pointer_type (type
), 0);
6836 t
= build2 (MODIFY_EXPR
, void_type_node
,
6837 build2 (MEM_REF
, array_type
, arg0
, alias_set
),
6838 build2 (MEM_REF
, array_type
, arg
, alias_set
));
6839 val
= build2 (COMPOUND_EXPR
, TREE_TYPE (to
), t
, to
);
6840 TREE_NO_WARNING (val
) = 1;
6845 else if (DECL_DESTRUCTOR_P (fn
)
6846 && trivial_fn_p (fn
)
6847 && !DECL_DELETED_FN (fn
))
6848 return fold_convert (void_type_node
, argarray
[0]);
6849 /* FIXME handle trivial default constructor, too. */
6854 if (DECL_VINDEX (fn
) && (flags
& LOOKUP_NONVIRTUAL
) == 0)
6857 tree binfo
= lookup_base (TREE_TYPE (TREE_TYPE (argarray
[0])),
6859 ba_any
, NULL
, complain
);
6860 gcc_assert (binfo
&& binfo
!= error_mark_node
);
6862 /* Warn about deprecated virtual functions now, since we're about
6863 to throw away the decl. */
6864 if (TREE_DEPRECATED (fn
))
6865 warn_deprecated_use (fn
, NULL_TREE
);
6867 argarray
[0] = build_base_path (PLUS_EXPR
, argarray
[0], binfo
, 1,
6869 if (TREE_SIDE_EFFECTS (argarray
[0]))
6870 argarray
[0] = save_expr (argarray
[0]);
6871 t
= build_pointer_type (TREE_TYPE (fn
));
6872 if (DECL_CONTEXT (fn
) && TYPE_JAVA_INTERFACE (DECL_CONTEXT (fn
)))
6873 fn
= build_java_interface_fn_ref (fn
, argarray
[0]);
6875 fn
= build_vfn_ref (argarray
[0], DECL_VINDEX (fn
));
6880 fn
= build_addr_func (fn
, complain
);
6881 if (fn
== error_mark_node
)
6882 return error_mark_node
;
6885 return build_cxx_call (fn
, nargs
, argarray
, complain
);
6888 /* Build and return a call to FN, using NARGS arguments in ARGARRAY.
6889 This function performs no overload resolution, conversion, or other
6890 high-level operations. */
6893 build_cxx_call (tree fn
, int nargs
, tree
*argarray
,
6894 tsubst_flags_t complain
)
6899 /* Remember roughly where this call is. */
6900 location_t loc
= EXPR_LOC_OR_HERE (fn
);
6901 fn
= build_call_a (fn
, nargs
, argarray
);
6902 SET_EXPR_LOCATION (fn
, loc
);
6904 fndecl
= get_callee_fndecl (fn
);
6906 /* Check that arguments to builtin functions match the expectations. */
6908 && DECL_BUILT_IN (fndecl
)
6909 && DECL_BUILT_IN_CLASS (fndecl
) == BUILT_IN_NORMAL
6910 && !check_builtin_function_arguments (fndecl
, nargs
, argarray
))
6911 return error_mark_node
;
6913 /* Some built-in function calls will be evaluated at compile-time in
6914 fold (). Set optimize to 1 when folding __builtin_constant_p inside
6915 a constexpr function so that fold_builtin_1 doesn't fold it to 0. */
6916 optimize_sav
= optimize
;
6917 if (!optimize
&& fndecl
&& DECL_IS_BUILTIN_CONSTANT_P (fndecl
)
6918 && current_function_decl
6919 && DECL_DECLARED_CONSTEXPR_P (current_function_decl
))
6921 fn
= fold_if_not_in_template (fn
);
6922 optimize
= optimize_sav
;
6924 if (VOID_TYPE_P (TREE_TYPE (fn
)))
6927 fn
= require_complete_type_sfinae (fn
, complain
);
6928 if (fn
== error_mark_node
)
6929 return error_mark_node
;
6931 if (MAYBE_CLASS_TYPE_P (TREE_TYPE (fn
)))
6932 fn
= build_cplus_new (TREE_TYPE (fn
), fn
, complain
);
6933 return convert_from_reference (fn
);
6936 static GTY(()) tree java_iface_lookup_fn
;
6938 /* Make an expression which yields the address of the Java interface
6939 method FN. This is achieved by generating a call to libjava's
6940 _Jv_LookupInterfaceMethodIdx(). */
6943 build_java_interface_fn_ref (tree fn
, tree instance
)
6945 tree lookup_fn
, method
, idx
;
6946 tree klass_ref
, iface
, iface_ref
;
6949 if (!java_iface_lookup_fn
)
6951 tree ftype
= build_function_type_list (ptr_type_node
,
6952 ptr_type_node
, ptr_type_node
,
6953 java_int_type_node
, NULL_TREE
);
6954 java_iface_lookup_fn
6955 = add_builtin_function ("_Jv_LookupInterfaceMethodIdx", ftype
,
6956 0, NOT_BUILT_IN
, NULL
, NULL_TREE
);
6959 /* Look up the pointer to the runtime java.lang.Class object for `instance'.
6960 This is the first entry in the vtable. */
6961 klass_ref
= build_vtbl_ref (cp_build_indirect_ref (instance
, RO_NULL
,
6962 tf_warning_or_error
),
6965 /* Get the java.lang.Class pointer for the interface being called. */
6966 iface
= DECL_CONTEXT (fn
);
6967 iface_ref
= lookup_field (iface
, get_identifier ("class$"), 0, false);
6968 if (!iface_ref
|| TREE_CODE (iface_ref
) != VAR_DECL
6969 || DECL_CONTEXT (iface_ref
) != iface
)
6971 error ("could not find class$ field in java interface type %qT",
6973 return error_mark_node
;
6975 iface_ref
= build_address (iface_ref
);
6976 iface_ref
= convert (build_pointer_type (iface
), iface_ref
);
6978 /* Determine the itable index of FN. */
6980 for (method
= TYPE_METHODS (iface
); method
; method
= DECL_CHAIN (method
))
6982 if (!DECL_VIRTUAL_P (method
))
6988 idx
= build_int_cst (NULL_TREE
, i
);
6990 lookup_fn
= build1 (ADDR_EXPR
,
6991 build_pointer_type (TREE_TYPE (java_iface_lookup_fn
)),
6992 java_iface_lookup_fn
);
6993 return build_call_nary (ptr_type_node
, lookup_fn
,
6994 3, klass_ref
, iface_ref
, idx
);
6997 /* Returns the value to use for the in-charge parameter when making a
6998 call to a function with the indicated NAME.
7000 FIXME:Can't we find a neater way to do this mapping? */
7003 in_charge_arg_for_name (tree name
)
7005 if (name
== base_ctor_identifier
7006 || name
== base_dtor_identifier
)
7007 return integer_zero_node
;
7008 else if (name
== complete_ctor_identifier
)
7009 return integer_one_node
;
7010 else if (name
== complete_dtor_identifier
)
7011 return integer_two_node
;
7012 else if (name
== deleting_dtor_identifier
)
7013 return integer_three_node
;
7015 /* This function should only be called with one of the names listed
7021 /* Build a call to a constructor, destructor, or an assignment
7022 operator for INSTANCE, an expression with class type. NAME
7023 indicates the special member function to call; *ARGS are the
7024 arguments. ARGS may be NULL. This may change ARGS. BINFO
7025 indicates the base of INSTANCE that is to be passed as the `this'
7026 parameter to the member function called.
7028 FLAGS are the LOOKUP_* flags to use when processing the call.
7030 If NAME indicates a complete object constructor, INSTANCE may be
7031 NULL_TREE. In this case, the caller will call build_cplus_new to
7032 store the newly constructed object into a VAR_DECL. */
7035 build_special_member_call (tree instance
, tree name
, VEC(tree
,gc
) **args
,
7036 tree binfo
, int flags
, tsubst_flags_t complain
)
7039 /* The type of the subobject to be constructed or destroyed. */
7041 VEC(tree
,gc
) *allocated
= NULL
;
7044 gcc_assert (name
== complete_ctor_identifier
7045 || name
== base_ctor_identifier
7046 || name
== complete_dtor_identifier
7047 || name
== base_dtor_identifier
7048 || name
== deleting_dtor_identifier
7049 || name
== ansi_assopname (NOP_EXPR
));
7052 /* Resolve the name. */
7053 if (!complete_type_or_maybe_complain (binfo
, NULL_TREE
, complain
))
7054 return error_mark_node
;
7056 binfo
= TYPE_BINFO (binfo
);
7059 gcc_assert (binfo
!= NULL_TREE
);
7061 class_type
= BINFO_TYPE (binfo
);
7063 /* Handle the special case where INSTANCE is NULL_TREE. */
7064 if (name
== complete_ctor_identifier
&& !instance
)
7066 instance
= build_int_cst (build_pointer_type (class_type
), 0);
7067 instance
= build1 (INDIRECT_REF
, class_type
, instance
);
7071 if (name
== complete_dtor_identifier
7072 || name
== base_dtor_identifier
7073 || name
== deleting_dtor_identifier
)
7074 gcc_assert (args
== NULL
|| VEC_empty (tree
, *args
));
7076 /* Convert to the base class, if necessary. */
7077 if (!same_type_ignoring_top_level_qualifiers_p
7078 (TREE_TYPE (instance
), BINFO_TYPE (binfo
)))
7080 if (name
!= ansi_assopname (NOP_EXPR
))
7081 /* For constructors and destructors, either the base is
7082 non-virtual, or it is virtual but we are doing the
7083 conversion from a constructor or destructor for the
7084 complete object. In either case, we can convert
7086 instance
= convert_to_base_statically (instance
, binfo
);
7088 /* However, for assignment operators, we must convert
7089 dynamically if the base is virtual. */
7090 instance
= build_base_path (PLUS_EXPR
, instance
,
7091 binfo
, /*nonnull=*/1, complain
);
7095 gcc_assert (instance
!= NULL_TREE
);
7097 fns
= lookup_fnfields (binfo
, name
, 1);
7099 /* When making a call to a constructor or destructor for a subobject
7100 that uses virtual base classes, pass down a pointer to a VTT for
7102 if ((name
== base_ctor_identifier
7103 || name
== base_dtor_identifier
)
7104 && CLASSTYPE_VBASECLASSES (class_type
))
7109 /* If the current function is a complete object constructor
7110 or destructor, then we fetch the VTT directly.
7111 Otherwise, we look it up using the VTT we were given. */
7112 vtt
= DECL_CHAIN (CLASSTYPE_VTABLES (current_class_type
));
7113 vtt
= decay_conversion (vtt
, complain
);
7114 if (vtt
== error_mark_node
)
7115 return error_mark_node
;
7116 vtt
= build3 (COND_EXPR
, TREE_TYPE (vtt
),
7117 build2 (EQ_EXPR
, boolean_type_node
,
7118 current_in_charge_parm
, integer_zero_node
),
7121 if (BINFO_SUBVTT_INDEX (binfo
))
7122 sub_vtt
= fold_build_pointer_plus (vtt
, BINFO_SUBVTT_INDEX (binfo
));
7128 allocated
= make_tree_vector ();
7132 VEC_safe_insert (tree
, gc
, *args
, 0, sub_vtt
);
7135 ret
= build_new_method_call (instance
, fns
, args
,
7136 TYPE_BINFO (BINFO_TYPE (binfo
)),
7140 if (allocated
!= NULL
)
7141 release_tree_vector (allocated
);
7146 /* Return the NAME, as a C string. The NAME indicates a function that
7147 is a member of TYPE. *FREE_P is set to true if the caller must
7148 free the memory returned.
7150 Rather than go through all of this, we should simply set the names
7151 of constructors and destructors appropriately, and dispense with
7152 ctor_identifier, dtor_identifier, etc. */
7155 name_as_c_string (tree name
, tree type
, bool *free_p
)
7159 /* Assume that we will not allocate memory. */
7161 /* Constructors and destructors are special. */
7162 if (IDENTIFIER_CTOR_OR_DTOR_P (name
))
7165 = CONST_CAST (char *, identifier_to_locale (IDENTIFIER_POINTER (constructor_name (type
))));
7166 /* For a destructor, add the '~'. */
7167 if (name
== complete_dtor_identifier
7168 || name
== base_dtor_identifier
7169 || name
== deleting_dtor_identifier
)
7171 pretty_name
= concat ("~", pretty_name
, NULL
);
7172 /* Remember that we need to free the memory allocated. */
7176 else if (IDENTIFIER_TYPENAME_P (name
))
7178 pretty_name
= concat ("operator ",
7179 type_as_string_translate (TREE_TYPE (name
),
7180 TFF_PLAIN_IDENTIFIER
),
7182 /* Remember that we need to free the memory allocated. */
7186 pretty_name
= CONST_CAST (char *, identifier_to_locale (IDENTIFIER_POINTER (name
)));
7191 /* Build a call to "INSTANCE.FN (ARGS)". If FN_P is non-NULL, it will
7192 be set, upon return, to the function called. ARGS may be NULL.
7193 This may change ARGS. */
7196 build_new_method_call_1 (tree instance
, tree fns
, VEC(tree
,gc
) **args
,
7197 tree conversion_path
, int flags
,
7198 tree
*fn_p
, tsubst_flags_t complain
)
7200 struct z_candidate
*candidates
= 0, *cand
;
7201 tree explicit_targs
= NULL_TREE
;
7202 tree basetype
= NULL_TREE
;
7205 tree first_mem_arg
= NULL_TREE
;
7208 bool skip_first_for_error
;
7209 VEC(tree
,gc
) *user_args
;
7212 int template_only
= 0;
7216 VEC(tree
,gc
) *orig_args
= NULL
;
7219 gcc_assert (instance
!= NULL_TREE
);
7221 /* We don't know what function we're going to call, yet. */
7225 if (error_operand_p (instance
)
7226 || !fns
|| error_operand_p (fns
))
7227 return error_mark_node
;
7229 if (!BASELINK_P (fns
))
7231 if (complain
& tf_error
)
7232 error ("call to non-function %qD", fns
);
7233 return error_mark_node
;
7236 orig_instance
= instance
;
7239 /* Dismantle the baselink to collect all the information we need. */
7240 if (!conversion_path
)
7241 conversion_path
= BASELINK_BINFO (fns
);
7242 access_binfo
= BASELINK_ACCESS_BINFO (fns
);
7243 optype
= BASELINK_OPTYPE (fns
);
7244 fns
= BASELINK_FUNCTIONS (fns
);
7245 if (TREE_CODE (fns
) == TEMPLATE_ID_EXPR
)
7247 explicit_targs
= TREE_OPERAND (fns
, 1);
7248 fns
= TREE_OPERAND (fns
, 0);
7251 gcc_assert (TREE_CODE (fns
) == FUNCTION_DECL
7252 || TREE_CODE (fns
) == TEMPLATE_DECL
7253 || TREE_CODE (fns
) == OVERLOAD
);
7254 fn
= get_first_fn (fns
);
7255 name
= DECL_NAME (fn
);
7257 basetype
= TYPE_MAIN_VARIANT (TREE_TYPE (instance
));
7258 gcc_assert (CLASS_TYPE_P (basetype
));
7260 if (processing_template_decl
)
7262 orig_args
= args
== NULL
? NULL
: make_tree_vector_copy (*args
);
7263 instance
= build_non_dependent_expr (instance
);
7265 make_args_non_dependent (*args
);
7268 user_args
= args
== NULL
? NULL
: *args
;
7269 /* Under DR 147 A::A() is an invalid constructor call,
7270 not a functional cast. */
7271 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (fn
))
7273 if (! (complain
& tf_error
))
7274 return error_mark_node
;
7276 permerror (input_location
,
7277 "cannot call constructor %<%T::%D%> directly",
7279 permerror (input_location
, " for a function-style cast, remove the "
7280 "redundant %<::%D%>", name
);
7281 call
= build_functional_cast (basetype
, build_tree_list_vec (user_args
),
7286 /* Figure out whether to skip the first argument for the error
7287 message we will display to users if an error occurs. We don't
7288 want to display any compiler-generated arguments. The "this"
7289 pointer hasn't been added yet. However, we must remove the VTT
7290 pointer if this is a call to a base-class constructor or
7292 skip_first_for_error
= false;
7293 if (IDENTIFIER_CTOR_OR_DTOR_P (name
))
7295 /* Callers should explicitly indicate whether they want to construct
7296 the complete object or just the part without virtual bases. */
7297 gcc_assert (name
!= ctor_identifier
);
7298 /* Similarly for destructors. */
7299 gcc_assert (name
!= dtor_identifier
);
7300 /* Remove the VTT pointer, if present. */
7301 if ((name
== base_ctor_identifier
|| name
== base_dtor_identifier
)
7302 && CLASSTYPE_VBASECLASSES (basetype
))
7303 skip_first_for_error
= true;
7306 /* Process the argument list. */
7307 if (args
!= NULL
&& *args
!= NULL
)
7309 *args
= resolve_args (*args
, complain
);
7311 return error_mark_node
;
7314 instance_ptr
= build_this (instance
);
7316 /* It's OK to call destructors and constructors on cv-qualified objects.
7317 Therefore, convert the INSTANCE_PTR to the unqualified type, if
7319 if (DECL_DESTRUCTOR_P (fn
)
7320 || DECL_CONSTRUCTOR_P (fn
))
7322 tree type
= build_pointer_type (basetype
);
7323 if (!same_type_p (type
, TREE_TYPE (instance_ptr
)))
7324 instance_ptr
= build_nop (type
, instance_ptr
);
7326 if (DECL_DESTRUCTOR_P (fn
))
7327 name
= complete_dtor_identifier
;
7329 first_mem_arg
= instance_ptr
;
7331 /* Get the high-water mark for the CONVERSION_OBSTACK. */
7332 p
= conversion_obstack_alloc (0);
7334 /* If CONSTRUCTOR_IS_DIRECT_INIT is set, this was a T{ } form
7335 initializer, not T({ }). */
7336 if (DECL_CONSTRUCTOR_P (fn
) && args
!= NULL
&& !VEC_empty (tree
, *args
)
7337 && BRACE_ENCLOSED_INITIALIZER_P (VEC_index (tree
, *args
, 0))
7338 && CONSTRUCTOR_IS_DIRECT_INIT (VEC_index (tree
, *args
, 0)))
7340 tree init_list
= VEC_index (tree
, *args
, 0);
7341 tree init
= NULL_TREE
;
7343 gcc_assert (VEC_length (tree
, *args
) == 1
7344 && !(flags
& LOOKUP_ONLYCONVERTING
));
7346 /* If the initializer list has no elements and T is a class type with
7347 a default constructor, the object is value-initialized. Handle
7348 this here so we don't need to handle it wherever we use
7349 build_special_member_call. */
7350 if (CONSTRUCTOR_NELTS (init_list
) == 0
7351 && TYPE_HAS_DEFAULT_CONSTRUCTOR (basetype
)
7352 && !processing_template_decl
)
7353 init
= build_value_init (basetype
, complain
);
7355 /* If BASETYPE is an aggregate, we need to do aggregate
7357 else if (CP_AGGREGATE_TYPE_P (basetype
))
7358 init
= digest_init (basetype
, init_list
, complain
);
7363 if (integer_zerop (instance_ptr
))
7364 return get_target_expr_sfinae (init
, complain
);
7365 ob
= build_fold_indirect_ref (instance_ptr
);
7366 init
= build2 (INIT_EXPR
, TREE_TYPE (ob
), ob
, init
);
7367 TREE_SIDE_EFFECTS (init
) = true;
7371 /* Otherwise go ahead with overload resolution. */
7372 add_list_candidates (fns
, first_mem_arg
, init_list
,
7373 basetype
, explicit_targs
, template_only
,
7374 conversion_path
, access_binfo
, flags
,
7375 &candidates
, complain
);
7379 add_candidates (fns
, first_mem_arg
, user_args
, optype
,
7380 explicit_targs
, template_only
, conversion_path
,
7381 access_binfo
, flags
, &candidates
, complain
);
7383 any_viable_p
= false;
7384 candidates
= splice_viable (candidates
, pedantic
, &any_viable_p
);
7388 if (complain
& tf_error
)
7390 if (!COMPLETE_OR_OPEN_TYPE_P (basetype
))
7391 cxx_incomplete_type_error (instance_ptr
, basetype
);
7393 error ("no matching function for call to %<%T::operator %T(%A)%#V%>",
7394 basetype
, optype
, build_tree_list_vec (user_args
),
7395 TREE_TYPE (TREE_TYPE (instance_ptr
)));
7402 pretty_name
= name_as_c_string (name
, basetype
, &free_p
);
7403 arglist
= build_tree_list_vec (user_args
);
7404 if (skip_first_for_error
)
7405 arglist
= TREE_CHAIN (arglist
);
7406 error ("no matching function for call to %<%T::%s(%A)%#V%>",
7407 basetype
, pretty_name
, arglist
,
7408 TREE_TYPE (TREE_TYPE (instance_ptr
)));
7412 print_z_candidates (location_of (name
), candidates
);
7414 call
= error_mark_node
;
7418 cand
= tourney (candidates
, complain
);
7425 if (complain
& tf_error
)
7427 pretty_name
= name_as_c_string (name
, basetype
, &free_p
);
7428 arglist
= build_tree_list_vec (user_args
);
7429 if (skip_first_for_error
)
7430 arglist
= TREE_CHAIN (arglist
);
7431 error ("call of overloaded %<%s(%A)%> is ambiguous", pretty_name
,
7433 print_z_candidates (location_of (name
), candidates
);
7437 call
= error_mark_node
;
7443 if (!(flags
& LOOKUP_NONVIRTUAL
)
7444 && DECL_PURE_VIRTUAL_P (fn
)
7445 && instance
== current_class_ref
7446 && (DECL_CONSTRUCTOR_P (current_function_decl
)
7447 || DECL_DESTRUCTOR_P (current_function_decl
))
7448 && (complain
& tf_warning
))
7449 /* This is not an error, it is runtime undefined
7451 warning (0, (DECL_CONSTRUCTOR_P (current_function_decl
) ?
7452 "pure virtual %q#D called from constructor"
7453 : "pure virtual %q#D called from destructor"),
7456 if (TREE_CODE (TREE_TYPE (fn
)) == METHOD_TYPE
7457 && is_dummy_object (instance_ptr
))
7459 if (complain
& tf_error
)
7460 error ("cannot call member function %qD without object",
7462 call
= error_mark_node
;
7466 /* Optimize away vtable lookup if we know that this function
7467 can't be overridden. */
7468 if (DECL_VINDEX (fn
) && ! (flags
& LOOKUP_NONVIRTUAL
)
7469 && resolves_to_fixed_type_p (instance
, 0))
7470 flags
|= LOOKUP_NONVIRTUAL
;
7472 flags
|= LOOKUP_EXPLICIT_TMPL_ARGS
;
7473 /* Now we know what function is being called. */
7476 /* Build the actual CALL_EXPR. */
7477 call
= build_over_call (cand
, flags
, complain
);
7478 /* In an expression of the form `a->f()' where `f' turns
7479 out to be a static member function, `a' is
7480 none-the-less evaluated. */
7481 if (TREE_CODE (TREE_TYPE (fn
)) != METHOD_TYPE
7482 && !is_dummy_object (instance_ptr
)
7483 && TREE_SIDE_EFFECTS (instance_ptr
))
7484 call
= build2 (COMPOUND_EXPR
, TREE_TYPE (call
),
7485 instance_ptr
, call
);
7486 else if (call
!= error_mark_node
7487 && DECL_DESTRUCTOR_P (cand
->fn
)
7488 && !VOID_TYPE_P (TREE_TYPE (call
)))
7489 /* An explicit call of the form "x->~X()" has type
7490 "void". However, on platforms where destructors
7491 return "this" (i.e., those where
7492 targetm.cxx.cdtor_returns_this is true), such calls
7493 will appear to have a return value of pointer type
7494 to the low-level call machinery. We do not want to
7495 change the low-level machinery, since we want to be
7496 able to optimize "delete f()" on such platforms as
7497 "operator delete(~X(f()))" (rather than generating
7498 "t = f(), ~X(t), operator delete (t)"). */
7499 call
= build_nop (void_type_node
, call
);
7504 if (processing_template_decl
&& call
!= error_mark_node
)
7506 bool cast_to_void
= false;
7508 if (TREE_CODE (call
) == COMPOUND_EXPR
)
7509 call
= TREE_OPERAND (call
, 1);
7510 else if (TREE_CODE (call
) == NOP_EXPR
)
7512 cast_to_void
= true;
7513 call
= TREE_OPERAND (call
, 0);
7515 if (TREE_CODE (call
) == INDIRECT_REF
)
7516 call
= TREE_OPERAND (call
, 0);
7517 call
= (build_min_non_dep_call_vec
7519 build_min (COMPONENT_REF
, TREE_TYPE (CALL_EXPR_FN (call
)),
7520 orig_instance
, orig_fns
, NULL_TREE
),
7522 SET_EXPR_LOCATION (call
, input_location
);
7523 call
= convert_from_reference (call
);
7525 call
= build_nop (void_type_node
, call
);
7528 /* Free all the conversions we allocated. */
7529 obstack_free (&conversion_obstack
, p
);
7531 if (orig_args
!= NULL
)
7532 release_tree_vector (orig_args
);
7537 /* Wrapper for above. */
7540 build_new_method_call (tree instance
, tree fns
, VEC(tree
,gc
) **args
,
7541 tree conversion_path
, int flags
,
7542 tree
*fn_p
, tsubst_flags_t complain
)
7545 bool subtime
= timevar_cond_start (TV_OVERLOAD
);
7546 ret
= build_new_method_call_1 (instance
, fns
, args
, conversion_path
, flags
,
7548 timevar_cond_stop (TV_OVERLOAD
, subtime
);
7552 /* Returns true iff standard conversion sequence ICS1 is a proper
7553 subsequence of ICS2. */
7556 is_subseq (conversion
*ics1
, conversion
*ics2
)
7558 /* We can assume that a conversion of the same code
7559 between the same types indicates a subsequence since we only get
7560 here if the types we are converting from are the same. */
7562 while (ics1
->kind
== ck_rvalue
7563 || ics1
->kind
== ck_lvalue
)
7564 ics1
= next_conversion (ics1
);
7568 while (ics2
->kind
== ck_rvalue
7569 || ics2
->kind
== ck_lvalue
)
7570 ics2
= next_conversion (ics2
);
7572 if (ics2
->kind
== ck_user
7573 || ics2
->kind
== ck_ambig
7574 || ics2
->kind
== ck_aggr
7575 || ics2
->kind
== ck_list
7576 || ics2
->kind
== ck_identity
)
7577 /* At this point, ICS1 cannot be a proper subsequence of
7578 ICS2. We can get a USER_CONV when we are comparing the
7579 second standard conversion sequence of two user conversion
7583 ics2
= next_conversion (ics2
);
7585 if (ics2
->kind
== ics1
->kind
7586 && same_type_p (ics2
->type
, ics1
->type
)
7587 && same_type_p (next_conversion (ics2
)->type
,
7588 next_conversion (ics1
)->type
))
7593 /* Returns nonzero iff DERIVED is derived from BASE. The inputs may
7594 be any _TYPE nodes. */
7597 is_properly_derived_from (tree derived
, tree base
)
7599 if (!CLASS_TYPE_P (derived
) || !CLASS_TYPE_P (base
))
7602 /* We only allow proper derivation here. The DERIVED_FROM_P macro
7603 considers every class derived from itself. */
7604 return (!same_type_ignoring_top_level_qualifiers_p (derived
, base
)
7605 && DERIVED_FROM_P (base
, derived
));
7608 /* We build the ICS for an implicit object parameter as a pointer
7609 conversion sequence. However, such a sequence should be compared
7610 as if it were a reference conversion sequence. If ICS is the
7611 implicit conversion sequence for an implicit object parameter,
7612 modify it accordingly. */
7615 maybe_handle_implicit_object (conversion
**ics
)
7619 /* [over.match.funcs]
7621 For non-static member functions, the type of the
7622 implicit object parameter is "reference to cv X"
7623 where X is the class of which the function is a
7624 member and cv is the cv-qualification on the member
7625 function declaration. */
7626 conversion
*t
= *ics
;
7627 tree reference_type
;
7629 /* The `this' parameter is a pointer to a class type. Make the
7630 implicit conversion talk about a reference to that same class
7632 reference_type
= TREE_TYPE (t
->type
);
7633 reference_type
= build_reference_type (reference_type
);
7635 if (t
->kind
== ck_qual
)
7636 t
= next_conversion (t
);
7637 if (t
->kind
== ck_ptr
)
7638 t
= next_conversion (t
);
7639 t
= build_identity_conv (TREE_TYPE (t
->type
), NULL_TREE
);
7640 t
= direct_reference_binding (reference_type
, t
);
7642 t
->rvaluedness_matches_p
= 0;
7647 /* If *ICS is a REF_BIND set *ICS to the remainder of the conversion,
7648 and return the initial reference binding conversion. Otherwise,
7649 leave *ICS unchanged and return NULL. */
7652 maybe_handle_ref_bind (conversion
**ics
)
7654 if ((*ics
)->kind
== ck_ref_bind
)
7656 conversion
*old_ics
= *ics
;
7657 *ics
= next_conversion (old_ics
);
7658 (*ics
)->user_conv_p
= old_ics
->user_conv_p
;
7665 /* Compare two implicit conversion sequences according to the rules set out in
7666 [over.ics.rank]. Return values:
7668 1: ics1 is better than ics2
7669 -1: ics2 is better than ics1
7670 0: ics1 and ics2 are indistinguishable */
7673 compare_ics (conversion
*ics1
, conversion
*ics2
)
7679 tree deref_from_type1
= NULL_TREE
;
7680 tree deref_from_type2
= NULL_TREE
;
7681 tree deref_to_type1
= NULL_TREE
;
7682 tree deref_to_type2
= NULL_TREE
;
7683 conversion_rank rank1
, rank2
;
7685 /* REF_BINDING is nonzero if the result of the conversion sequence
7686 is a reference type. In that case REF_CONV is the reference
7687 binding conversion. */
7688 conversion
*ref_conv1
;
7689 conversion
*ref_conv2
;
7691 /* Handle implicit object parameters. */
7692 maybe_handle_implicit_object (&ics1
);
7693 maybe_handle_implicit_object (&ics2
);
7695 /* Handle reference parameters. */
7696 ref_conv1
= maybe_handle_ref_bind (&ics1
);
7697 ref_conv2
= maybe_handle_ref_bind (&ics2
);
7699 /* List-initialization sequence L1 is a better conversion sequence than
7700 list-initialization sequence L2 if L1 converts to
7701 std::initializer_list<X> for some X and L2 does not. */
7702 if (ics1
->kind
== ck_list
&& ics2
->kind
!= ck_list
)
7704 if (ics2
->kind
== ck_list
&& ics1
->kind
!= ck_list
)
7709 When comparing the basic forms of implicit conversion sequences (as
7710 defined in _over.best.ics_)
7712 --a standard conversion sequence (_over.ics.scs_) is a better
7713 conversion sequence than a user-defined conversion sequence
7714 or an ellipsis conversion sequence, and
7716 --a user-defined conversion sequence (_over.ics.user_) is a
7717 better conversion sequence than an ellipsis conversion sequence
7718 (_over.ics.ellipsis_). */
7719 rank1
= CONVERSION_RANK (ics1
);
7720 rank2
= CONVERSION_RANK (ics2
);
7724 else if (rank1
< rank2
)
7727 if (rank1
== cr_bad
)
7729 /* Both ICS are bad. We try to make a decision based on what would
7730 have happened if they'd been good. This is not an extension,
7731 we'll still give an error when we build up the call; this just
7732 helps us give a more helpful error message. */
7733 rank1
= BAD_CONVERSION_RANK (ics1
);
7734 rank2
= BAD_CONVERSION_RANK (ics2
);
7738 else if (rank1
< rank2
)
7741 /* We couldn't make up our minds; try to figure it out below. */
7744 if (ics1
->ellipsis_p
)
7745 /* Both conversions are ellipsis conversions. */
7748 /* User-defined conversion sequence U1 is a better conversion sequence
7749 than another user-defined conversion sequence U2 if they contain the
7750 same user-defined conversion operator or constructor and if the sec-
7751 ond standard conversion sequence of U1 is better than the second
7752 standard conversion sequence of U2. */
7754 /* Handle list-conversion with the same code even though it isn't always
7755 ranked as a user-defined conversion and it doesn't have a second
7756 standard conversion sequence; it will still have the desired effect.
7757 Specifically, we need to do the reference binding comparison at the
7758 end of this function. */
7760 if (ics1
->user_conv_p
|| ics1
->kind
== ck_list
|| ics1
->kind
== ck_aggr
)
7765 for (t1
= ics1
; t1
->kind
!= ck_user
; t1
= next_conversion (t1
))
7766 if (t1
->kind
== ck_ambig
|| t1
->kind
== ck_aggr
7767 || t1
->kind
== ck_list
)
7769 for (t2
= ics2
; t2
->kind
!= ck_user
; t2
= next_conversion (t2
))
7770 if (t2
->kind
== ck_ambig
|| t2
->kind
== ck_aggr
7771 || t2
->kind
== ck_list
)
7774 if (t1
->kind
!= t2
->kind
)
7776 else if (t1
->kind
== ck_user
)
7778 if (t1
->cand
->fn
!= t2
->cand
->fn
)
7783 /* For ambiguous or aggregate conversions, use the target type as
7784 a proxy for the conversion function. */
7785 if (!same_type_ignoring_top_level_qualifiers_p (t1
->type
, t2
->type
))
7789 /* We can just fall through here, after setting up
7790 FROM_TYPE1 and FROM_TYPE2. */
7791 from_type1
= t1
->type
;
7792 from_type2
= t2
->type
;
7799 /* We're dealing with two standard conversion sequences.
7803 Standard conversion sequence S1 is a better conversion
7804 sequence than standard conversion sequence S2 if
7806 --S1 is a proper subsequence of S2 (comparing the conversion
7807 sequences in the canonical form defined by _over.ics.scs_,
7808 excluding any Lvalue Transformation; the identity
7809 conversion sequence is considered to be a subsequence of
7810 any non-identity conversion sequence */
7813 while (t1
->kind
!= ck_identity
)
7814 t1
= next_conversion (t1
);
7815 from_type1
= t1
->type
;
7818 while (t2
->kind
!= ck_identity
)
7819 t2
= next_conversion (t2
);
7820 from_type2
= t2
->type
;
7823 /* One sequence can only be a subsequence of the other if they start with
7824 the same type. They can start with different types when comparing the
7825 second standard conversion sequence in two user-defined conversion
7827 if (same_type_p (from_type1
, from_type2
))
7829 if (is_subseq (ics1
, ics2
))
7831 if (is_subseq (ics2
, ics1
))
7839 --the rank of S1 is better than the rank of S2 (by the rules
7842 Standard conversion sequences are ordered by their ranks: an Exact
7843 Match is a better conversion than a Promotion, which is a better
7844 conversion than a Conversion.
7846 Two conversion sequences with the same rank are indistinguishable
7847 unless one of the following rules applies:
7849 --A conversion that does not a convert a pointer, pointer to member,
7850 or std::nullptr_t to bool is better than one that does.
7852 The ICS_STD_RANK automatically handles the pointer-to-bool rule,
7853 so that we do not have to check it explicitly. */
7854 if (ics1
->rank
< ics2
->rank
)
7856 else if (ics2
->rank
< ics1
->rank
)
7859 to_type1
= ics1
->type
;
7860 to_type2
= ics2
->type
;
7862 /* A conversion from scalar arithmetic type to complex is worse than a
7863 conversion between scalar arithmetic types. */
7864 if (same_type_p (from_type1
, from_type2
)
7865 && ARITHMETIC_TYPE_P (from_type1
)
7866 && ARITHMETIC_TYPE_P (to_type1
)
7867 && ARITHMETIC_TYPE_P (to_type2
)
7868 && ((TREE_CODE (to_type1
) == COMPLEX_TYPE
)
7869 != (TREE_CODE (to_type2
) == COMPLEX_TYPE
)))
7871 if (TREE_CODE (to_type1
) == COMPLEX_TYPE
)
7877 if (TYPE_PTR_P (from_type1
)
7878 && TYPE_PTR_P (from_type2
)
7879 && TYPE_PTR_P (to_type1
)
7880 && TYPE_PTR_P (to_type2
))
7882 deref_from_type1
= TREE_TYPE (from_type1
);
7883 deref_from_type2
= TREE_TYPE (from_type2
);
7884 deref_to_type1
= TREE_TYPE (to_type1
);
7885 deref_to_type2
= TREE_TYPE (to_type2
);
7887 /* The rules for pointers to members A::* are just like the rules
7888 for pointers A*, except opposite: if B is derived from A then
7889 A::* converts to B::*, not vice versa. For that reason, we
7890 switch the from_ and to_ variables here. */
7891 else if ((TYPE_PTRDATAMEM_P (from_type1
) && TYPE_PTRDATAMEM_P (from_type2
)
7892 && TYPE_PTRDATAMEM_P (to_type1
) && TYPE_PTRDATAMEM_P (to_type2
))
7893 || (TYPE_PTRMEMFUNC_P (from_type1
)
7894 && TYPE_PTRMEMFUNC_P (from_type2
)
7895 && TYPE_PTRMEMFUNC_P (to_type1
)
7896 && TYPE_PTRMEMFUNC_P (to_type2
)))
7898 deref_to_type1
= TYPE_PTRMEM_CLASS_TYPE (from_type1
);
7899 deref_to_type2
= TYPE_PTRMEM_CLASS_TYPE (from_type2
);
7900 deref_from_type1
= TYPE_PTRMEM_CLASS_TYPE (to_type1
);
7901 deref_from_type2
= TYPE_PTRMEM_CLASS_TYPE (to_type2
);
7904 if (deref_from_type1
!= NULL_TREE
7905 && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_from_type1
))
7906 && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_from_type2
)))
7908 /* This was one of the pointer or pointer-like conversions.
7912 --If class B is derived directly or indirectly from class A,
7913 conversion of B* to A* is better than conversion of B* to
7914 void*, and conversion of A* to void* is better than
7915 conversion of B* to void*. */
7916 if (TREE_CODE (deref_to_type1
) == VOID_TYPE
7917 && TREE_CODE (deref_to_type2
) == VOID_TYPE
)
7919 if (is_properly_derived_from (deref_from_type1
,
7922 else if (is_properly_derived_from (deref_from_type2
,
7926 else if (TREE_CODE (deref_to_type1
) == VOID_TYPE
7927 || TREE_CODE (deref_to_type2
) == VOID_TYPE
)
7929 if (same_type_p (deref_from_type1
, deref_from_type2
))
7931 if (TREE_CODE (deref_to_type2
) == VOID_TYPE
)
7933 if (is_properly_derived_from (deref_from_type1
,
7937 /* We know that DEREF_TO_TYPE1 is `void' here. */
7938 else if (is_properly_derived_from (deref_from_type1
,
7943 else if (RECORD_OR_UNION_CODE_P (TREE_CODE (deref_to_type1
))
7944 && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_to_type2
)))
7948 --If class B is derived directly or indirectly from class A
7949 and class C is derived directly or indirectly from B,
7951 --conversion of C* to B* is better than conversion of C* to
7954 --conversion of B* to A* is better than conversion of C* to
7956 if (same_type_p (deref_from_type1
, deref_from_type2
))
7958 if (is_properly_derived_from (deref_to_type1
,
7961 else if (is_properly_derived_from (deref_to_type2
,
7965 else if (same_type_p (deref_to_type1
, deref_to_type2
))
7967 if (is_properly_derived_from (deref_from_type2
,
7970 else if (is_properly_derived_from (deref_from_type1
,
7976 else if (CLASS_TYPE_P (non_reference (from_type1
))
7977 && same_type_p (from_type1
, from_type2
))
7979 tree from
= non_reference (from_type1
);
7983 --binding of an expression of type C to a reference of type
7984 B& is better than binding an expression of type C to a
7985 reference of type A&
7987 --conversion of C to B is better than conversion of C to A, */
7988 if (is_properly_derived_from (from
, to_type1
)
7989 && is_properly_derived_from (from
, to_type2
))
7991 if (is_properly_derived_from (to_type1
, to_type2
))
7993 else if (is_properly_derived_from (to_type2
, to_type1
))
7997 else if (CLASS_TYPE_P (non_reference (to_type1
))
7998 && same_type_p (to_type1
, to_type2
))
8000 tree to
= non_reference (to_type1
);
8004 --binding of an expression of type B to a reference of type
8005 A& is better than binding an expression of type C to a
8006 reference of type A&,
8008 --conversion of B to A is better than conversion of C to A */
8009 if (is_properly_derived_from (from_type1
, to
)
8010 && is_properly_derived_from (from_type2
, to
))
8012 if (is_properly_derived_from (from_type2
, from_type1
))
8014 else if (is_properly_derived_from (from_type1
, from_type2
))
8021 --S1 and S2 differ only in their qualification conversion and yield
8022 similar types T1 and T2 (_conv.qual_), respectively, and the cv-
8023 qualification signature of type T1 is a proper subset of the cv-
8024 qualification signature of type T2 */
8025 if (ics1
->kind
== ck_qual
8026 && ics2
->kind
== ck_qual
8027 && same_type_p (from_type1
, from_type2
))
8029 int result
= comp_cv_qual_signature (to_type1
, to_type2
);
8036 --S1 and S2 are reference bindings (_dcl.init.ref_) and neither refers
8037 to an implicit object parameter, and either S1 binds an lvalue reference
8038 to an lvalue and S2 binds an rvalue reference or S1 binds an rvalue
8039 reference to an rvalue and S2 binds an lvalue reference
8040 (C++0x draft standard, 13.3.3.2)
8042 --S1 and S2 are reference bindings (_dcl.init.ref_), and the
8043 types to which the references refer are the same type except for
8044 top-level cv-qualifiers, and the type to which the reference
8045 initialized by S2 refers is more cv-qualified than the type to
8046 which the reference initialized by S1 refers.
8048 DR 1328 [over.match.best]: the context is an initialization by
8049 conversion function for direct reference binding (13.3.1.6) of a
8050 reference to function type, the return type of F1 is the same kind of
8051 reference (i.e. lvalue or rvalue) as the reference being initialized,
8052 and the return type of F2 is not. */
8054 if (ref_conv1
&& ref_conv2
)
8056 if (!ref_conv1
->this_p
&& !ref_conv2
->this_p
8057 && (ref_conv1
->rvaluedness_matches_p
8058 != ref_conv2
->rvaluedness_matches_p
)
8059 && (same_type_p (ref_conv1
->type
, ref_conv2
->type
)
8060 || (TYPE_REF_IS_RVALUE (ref_conv1
->type
)
8061 != TYPE_REF_IS_RVALUE (ref_conv2
->type
))))
8063 return (ref_conv1
->rvaluedness_matches_p
8064 - ref_conv2
->rvaluedness_matches_p
);
8067 if (same_type_ignoring_top_level_qualifiers_p (to_type1
, to_type2
))
8068 return comp_cv_qualification (TREE_TYPE (ref_conv2
->type
),
8069 TREE_TYPE (ref_conv1
->type
));
8072 /* Neither conversion sequence is better than the other. */
8076 /* The source type for this standard conversion sequence. */
8079 source_type (conversion
*t
)
8081 for (;; t
= next_conversion (t
))
8083 if (t
->kind
== ck_user
8084 || t
->kind
== ck_ambig
8085 || t
->kind
== ck_identity
)
8091 /* Note a warning about preferring WINNER to LOSER. We do this by storing
8092 a pointer to LOSER and re-running joust to produce the warning if WINNER
8093 is actually used. */
8096 add_warning (struct z_candidate
*winner
, struct z_candidate
*loser
)
8098 candidate_warning
*cw
= (candidate_warning
*)
8099 conversion_obstack_alloc (sizeof (candidate_warning
));
8101 cw
->next
= winner
->warnings
;
8102 winner
->warnings
= cw
;
8105 /* Compare two candidates for overloading as described in
8106 [over.match.best]. Return values:
8108 1: cand1 is better than cand2
8109 -1: cand2 is better than cand1
8110 0: cand1 and cand2 are indistinguishable */
8113 joust (struct z_candidate
*cand1
, struct z_candidate
*cand2
, bool warn
,
8114 tsubst_flags_t complain
)
8117 int off1
= 0, off2
= 0;
8121 /* Candidates that involve bad conversions are always worse than those
8123 if (cand1
->viable
> cand2
->viable
)
8125 if (cand1
->viable
< cand2
->viable
)
8128 /* If we have two pseudo-candidates for conversions to the same type,
8129 or two candidates for the same function, arbitrarily pick one. */
8130 if (cand1
->fn
== cand2
->fn
8131 && (IS_TYPE_OR_DECL_P (cand1
->fn
)))
8134 /* a viable function F1
8135 is defined to be a better function than another viable function F2 if
8136 for all arguments i, ICSi(F1) is not a worse conversion sequence than
8137 ICSi(F2), and then */
8139 /* for some argument j, ICSj(F1) is a better conversion sequence than
8142 /* For comparing static and non-static member functions, we ignore
8143 the implicit object parameter of the non-static function. The
8144 standard says to pretend that the static function has an object
8145 parm, but that won't work with operator overloading. */
8146 len
= cand1
->num_convs
;
8147 if (len
!= cand2
->num_convs
)
8149 int static_1
= DECL_STATIC_FUNCTION_P (cand1
->fn
);
8150 int static_2
= DECL_STATIC_FUNCTION_P (cand2
->fn
);
8152 if (DECL_CONSTRUCTOR_P (cand1
->fn
)
8153 && is_list_ctor (cand1
->fn
) != is_list_ctor (cand2
->fn
))
8154 /* We're comparing a near-match list constructor and a near-match
8155 non-list constructor. Just treat them as unordered. */
8158 gcc_assert (static_1
!= static_2
);
8169 for (i
= 0; i
< len
; ++i
)
8171 conversion
*t1
= cand1
->convs
[i
+ off1
];
8172 conversion
*t2
= cand2
->convs
[i
+ off2
];
8173 int comp
= compare_ics (t1
, t2
);
8177 if ((complain
& tf_warning
)
8179 && (CONVERSION_RANK (t1
) + CONVERSION_RANK (t2
)
8180 == cr_std
+ cr_promotion
)
8181 && t1
->kind
== ck_std
8182 && t2
->kind
== ck_std
8183 && TREE_CODE (t1
->type
) == INTEGER_TYPE
8184 && TREE_CODE (t2
->type
) == INTEGER_TYPE
8185 && (TYPE_PRECISION (t1
->type
)
8186 == TYPE_PRECISION (t2
->type
))
8187 && (TYPE_UNSIGNED (next_conversion (t1
)->type
)
8188 || (TREE_CODE (next_conversion (t1
)->type
)
8191 tree type
= next_conversion (t1
)->type
;
8193 struct z_candidate
*w
, *l
;
8195 type1
= t1
->type
, type2
= t2
->type
,
8196 w
= cand1
, l
= cand2
;
8198 type1
= t2
->type
, type2
= t1
->type
,
8199 w
= cand2
, l
= cand1
;
8203 warning (OPT_Wsign_promo
, "passing %qT chooses %qT over %qT",
8204 type
, type1
, type2
);
8205 warning (OPT_Wsign_promo
, " in call to %qD", w
->fn
);
8211 if (winner
&& comp
!= winner
)
8220 /* warn about confusing overload resolution for user-defined conversions,
8221 either between a constructor and a conversion op, or between two
8223 if ((complain
& tf_warning
)
8224 && winner
&& warn_conversion
&& cand1
->second_conv
8225 && (!DECL_CONSTRUCTOR_P (cand1
->fn
) || !DECL_CONSTRUCTOR_P (cand2
->fn
))
8226 && winner
!= compare_ics (cand1
->second_conv
, cand2
->second_conv
))
8228 struct z_candidate
*w
, *l
;
8229 bool give_warning
= false;
8232 w
= cand1
, l
= cand2
;
8234 w
= cand2
, l
= cand1
;
8236 /* We don't want to complain about `X::operator T1 ()'
8237 beating `X::operator T2 () const', when T2 is a no less
8238 cv-qualified version of T1. */
8239 if (DECL_CONTEXT (w
->fn
) == DECL_CONTEXT (l
->fn
)
8240 && !DECL_CONSTRUCTOR_P (w
->fn
) && !DECL_CONSTRUCTOR_P (l
->fn
))
8242 tree t
= TREE_TYPE (TREE_TYPE (l
->fn
));
8243 tree f
= TREE_TYPE (TREE_TYPE (w
->fn
));
8245 if (TREE_CODE (t
) == TREE_CODE (f
) && POINTER_TYPE_P (t
))
8250 if (!comp_ptr_ttypes (t
, f
))
8251 give_warning
= true;
8254 give_warning
= true;
8260 tree source
= source_type (w
->convs
[0]);
8261 if (! DECL_CONSTRUCTOR_P (w
->fn
))
8262 source
= TREE_TYPE (source
);
8263 if (warning (OPT_Wconversion
, "choosing %qD over %qD", w
->fn
, l
->fn
)
8264 && warning (OPT_Wconversion
, " for conversion from %qT to %qT",
8265 source
, w
->second_conv
->type
))
8267 inform (input_location
, " because conversion sequence for the argument is better");
8277 /* DR 495 moved this tiebreaker above the template ones. */
8279 the context is an initialization by user-defined conversion (see
8280 _dcl.init_ and _over.match.user_) and the standard conversion
8281 sequence from the return type of F1 to the destination type (i.e.,
8282 the type of the entity being initialized) is a better conversion
8283 sequence than the standard conversion sequence from the return type
8284 of F2 to the destination type. */
8286 if (cand1
->second_conv
)
8288 winner
= compare_ics (cand1
->second_conv
, cand2
->second_conv
);
8294 F1 is a non-template function and F2 is a template function
8297 if (!cand1
->template_decl
&& cand2
->template_decl
)
8299 else if (cand1
->template_decl
&& !cand2
->template_decl
)
8303 F1 and F2 are template functions and the function template for F1 is
8304 more specialized than the template for F2 according to the partial
8307 if (cand1
->template_decl
&& cand2
->template_decl
)
8309 winner
= more_specialized_fn
8310 (TI_TEMPLATE (cand1
->template_decl
),
8311 TI_TEMPLATE (cand2
->template_decl
),
8312 /* [temp.func.order]: The presence of unused ellipsis and default
8313 arguments has no effect on the partial ordering of function
8314 templates. add_function_candidate() will not have
8315 counted the "this" argument for constructors. */
8316 cand1
->num_convs
+ DECL_CONSTRUCTOR_P (cand1
->fn
));
8321 /* Check whether we can discard a builtin candidate, either because we
8322 have two identical ones or matching builtin and non-builtin candidates.
8324 (Pedantically in the latter case the builtin which matched the user
8325 function should not be added to the overload set, but we spot it here.
8328 ... the builtin candidates include ...
8329 - do not have the same parameter type list as any non-template
8330 non-member candidate. */
8332 if (TREE_CODE (cand1
->fn
) == IDENTIFIER_NODE
8333 || TREE_CODE (cand2
->fn
) == IDENTIFIER_NODE
)
8335 for (i
= 0; i
< len
; ++i
)
8336 if (!same_type_p (cand1
->convs
[i
]->type
,
8337 cand2
->convs
[i
]->type
))
8339 if (i
== cand1
->num_convs
)
8341 if (cand1
->fn
== cand2
->fn
)
8342 /* Two built-in candidates; arbitrarily pick one. */
8344 else if (TREE_CODE (cand1
->fn
) == IDENTIFIER_NODE
)
8345 /* cand1 is built-in; prefer cand2. */
8348 /* cand2 is built-in; prefer cand1. */
8353 /* If the two function declarations represent the same function (this can
8354 happen with declarations in multiple scopes and arg-dependent lookup),
8355 arbitrarily choose one. But first make sure the default args we're
8357 if (DECL_P (cand1
->fn
) && DECL_P (cand2
->fn
)
8358 && equal_functions (cand1
->fn
, cand2
->fn
))
8360 tree parms1
= TYPE_ARG_TYPES (TREE_TYPE (cand1
->fn
));
8361 tree parms2
= TYPE_ARG_TYPES (TREE_TYPE (cand2
->fn
));
8363 gcc_assert (!DECL_CONSTRUCTOR_P (cand1
->fn
));
8365 for (i
= 0; i
< len
; ++i
)
8367 /* Don't crash if the fn is variadic. */
8370 parms1
= TREE_CHAIN (parms1
);
8371 parms2
= TREE_CHAIN (parms2
);
8375 parms1
= TREE_CHAIN (parms1
);
8377 parms2
= TREE_CHAIN (parms2
);
8381 if (!cp_tree_equal (TREE_PURPOSE (parms1
),
8382 TREE_PURPOSE (parms2
)))
8386 if (complain
& tf_error
)
8388 permerror (input_location
,
8389 "default argument mismatch in "
8390 "overload resolution");
8391 inform (input_location
,
8392 " candidate 1: %q+#F", cand1
->fn
);
8393 inform (input_location
,
8394 " candidate 2: %q+#F", cand2
->fn
);
8400 add_warning (cand1
, cand2
);
8403 parms1
= TREE_CHAIN (parms1
);
8404 parms2
= TREE_CHAIN (parms2
);
8412 /* Extension: If the worst conversion for one candidate is worse than the
8413 worst conversion for the other, take the first. */
8414 if (!pedantic
&& (complain
& tf_warning_or_error
))
8416 conversion_rank rank1
= cr_identity
, rank2
= cr_identity
;
8417 struct z_candidate
*w
= 0, *l
= 0;
8419 for (i
= 0; i
< len
; ++i
)
8421 if (CONVERSION_RANK (cand1
->convs
[i
+off1
]) > rank1
)
8422 rank1
= CONVERSION_RANK (cand1
->convs
[i
+off1
]);
8423 if (CONVERSION_RANK (cand2
->convs
[i
+ off2
]) > rank2
)
8424 rank2
= CONVERSION_RANK (cand2
->convs
[i
+ off2
]);
8427 winner
= 1, w
= cand1
, l
= cand2
;
8429 winner
= -1, w
= cand2
, l
= cand1
;
8432 /* Don't choose a deleted function over ambiguity. */
8433 if (DECL_P (w
->fn
) && DECL_DELETED_FN (w
->fn
))
8437 pedwarn (input_location
, 0,
8438 "ISO C++ says that these are ambiguous, even "
8439 "though the worst conversion for the first is better than "
8440 "the worst conversion for the second:");
8441 print_z_candidate (input_location
, _("candidate 1:"), w
);
8442 print_z_candidate (input_location
, _("candidate 2:"), l
);
8450 gcc_assert (!winner
);
8454 /* Given a list of candidates for overloading, find the best one, if any.
8455 This algorithm has a worst case of O(2n) (winner is last), and a best
8456 case of O(n/2) (totally ambiguous); much better than a sorting
8459 static struct z_candidate
*
8460 tourney (struct z_candidate
*candidates
, tsubst_flags_t complain
)
8462 struct z_candidate
*champ
= candidates
, *challenger
;
8464 int champ_compared_to_predecessor
= 0;
8466 /* Walk through the list once, comparing each current champ to the next
8467 candidate, knocking out a candidate or two with each comparison. */
8469 for (challenger
= champ
->next
; challenger
; )
8471 fate
= joust (champ
, challenger
, 0, complain
);
8473 challenger
= challenger
->next
;
8478 champ
= challenger
->next
;
8481 champ_compared_to_predecessor
= 0;
8486 champ_compared_to_predecessor
= 1;
8489 challenger
= champ
->next
;
8493 /* Make sure the champ is better than all the candidates it hasn't yet
8494 been compared to. */
8496 for (challenger
= candidates
;
8498 && !(champ_compared_to_predecessor
&& challenger
->next
== champ
);
8499 challenger
= challenger
->next
)
8501 fate
= joust (champ
, challenger
, 0, complain
);
8509 /* Returns nonzero if things of type FROM can be converted to TO. */
8512 can_convert (tree to
, tree from
, tsubst_flags_t complain
)
8514 return can_convert_arg (to
, from
, NULL_TREE
, LOOKUP_IMPLICIT
, complain
);
8517 /* Returns nonzero if ARG (of type FROM) can be converted to TO. */
8520 can_convert_arg (tree to
, tree from
, tree arg
, int flags
,
8521 tsubst_flags_t complain
)
8527 /* Get the high-water mark for the CONVERSION_OBSTACK. */
8528 p
= conversion_obstack_alloc (0);
8530 t
= implicit_conversion (to
, from
, arg
, /*c_cast_p=*/false,
8532 ok_p
= (t
&& !t
->bad_p
);
8534 /* Free all the conversions we allocated. */
8535 obstack_free (&conversion_obstack
, p
);
8540 /* Like can_convert_arg, but allows dubious conversions as well. */
8543 can_convert_arg_bad (tree to
, tree from
, tree arg
, int flags
,
8544 tsubst_flags_t complain
)
8549 /* Get the high-water mark for the CONVERSION_OBSTACK. */
8550 p
= conversion_obstack_alloc (0);
8551 /* Try to perform the conversion. */
8552 t
= implicit_conversion (to
, from
, arg
, /*c_cast_p=*/false,
8554 /* Free all the conversions we allocated. */
8555 obstack_free (&conversion_obstack
, p
);
8560 /* Convert EXPR to TYPE. Return the converted expression.
8562 Note that we allow bad conversions here because by the time we get to
8563 this point we are committed to doing the conversion. If we end up
8564 doing a bad conversion, convert_like will complain. */
8567 perform_implicit_conversion_flags (tree type
, tree expr
,
8568 tsubst_flags_t complain
, int flags
)
8572 location_t loc
= EXPR_LOC_OR_HERE (expr
);
8574 if (error_operand_p (expr
))
8575 return error_mark_node
;
8577 /* Get the high-water mark for the CONVERSION_OBSTACK. */
8578 p
= conversion_obstack_alloc (0);
8580 conv
= implicit_conversion (type
, TREE_TYPE (expr
), expr
,
8586 if (complain
& tf_error
)
8588 /* If expr has unknown type, then it is an overloaded function.
8589 Call instantiate_type to get good error messages. */
8590 if (TREE_TYPE (expr
) == unknown_type_node
)
8591 instantiate_type (type
, expr
, complain
);
8592 else if (invalid_nonstatic_memfn_p (expr
, complain
))
8593 /* We gave an error. */;
8595 error_at (loc
, "could not convert %qE from %qT to %qT", expr
,
8596 TREE_TYPE (expr
), type
);
8598 expr
= error_mark_node
;
8600 else if (processing_template_decl
&& conv
->kind
!= ck_identity
)
8602 /* In a template, we are only concerned about determining the
8603 type of non-dependent expressions, so we do not have to
8604 perform the actual conversion. But for initializers, we
8605 need to be able to perform it at instantiation
8606 (or fold_non_dependent_expr) time. */
8607 expr
= build1 (IMPLICIT_CONV_EXPR
, type
, expr
);
8608 if (!(flags
& LOOKUP_ONLYCONVERTING
))
8609 IMPLICIT_CONV_EXPR_DIRECT_INIT (expr
) = true;
8612 expr
= convert_like (conv
, expr
, complain
);
8614 /* Free all the conversions we allocated. */
8615 obstack_free (&conversion_obstack
, p
);
8621 perform_implicit_conversion (tree type
, tree expr
, tsubst_flags_t complain
)
8623 return perform_implicit_conversion_flags (type
, expr
, complain
,
8627 /* Convert EXPR to TYPE (as a direct-initialization) if that is
8628 permitted. If the conversion is valid, the converted expression is
8629 returned. Otherwise, NULL_TREE is returned, except in the case
8630 that TYPE is a class type; in that case, an error is issued. If
8631 C_CAST_P is true, then this direct-initialization is taking
8632 place as part of a static_cast being attempted as part of a C-style
8636 perform_direct_initialization_if_possible (tree type
,
8639 tsubst_flags_t complain
)
8644 if (type
== error_mark_node
|| error_operand_p (expr
))
8645 return error_mark_node
;
8648 If the destination type is a (possibly cv-qualified) class type:
8650 -- If the initialization is direct-initialization ...,
8651 constructors are considered. ... If no constructor applies, or
8652 the overload resolution is ambiguous, the initialization is
8654 if (CLASS_TYPE_P (type
))
8656 VEC(tree
,gc
) *args
= make_tree_vector_single (expr
);
8657 expr
= build_special_member_call (NULL_TREE
, complete_ctor_identifier
,
8658 &args
, type
, LOOKUP_NORMAL
, complain
);
8659 release_tree_vector (args
);
8660 return build_cplus_new (type
, expr
, complain
);
8663 /* Get the high-water mark for the CONVERSION_OBSTACK. */
8664 p
= conversion_obstack_alloc (0);
8666 conv
= implicit_conversion (type
, TREE_TYPE (expr
), expr
,
8668 LOOKUP_NORMAL
, complain
);
8669 if (!conv
|| conv
->bad_p
)
8672 expr
= convert_like_real (conv
, expr
, NULL_TREE
, 0, 0,
8673 /*issue_conversion_warnings=*/false,
8677 /* Free all the conversions we allocated. */
8678 obstack_free (&conversion_obstack
, p
);
8683 /* When initializing a reference that lasts longer than a full-expression,
8684 this special rule applies:
8688 The temporary to which the reference is bound or the temporary
8689 that is the complete object to which the reference is bound
8690 persists for the lifetime of the reference.
8692 The temporaries created during the evaluation of the expression
8693 initializing the reference, except the temporary to which the
8694 reference is bound, are destroyed at the end of the
8695 full-expression in which they are created.
8697 In that case, we store the converted expression into a new
8698 VAR_DECL in a new scope.
8700 However, we want to be careful not to create temporaries when
8701 they are not required. For example, given:
8704 struct D : public B {};
8708 there is no need to copy the return value from "f"; we can just
8709 extend its lifetime. Similarly, given:
8712 struct T { operator S(); };
8716 we can extend the lifetime of the return value of the conversion
8719 The next several functions are involved in this lifetime extension. */
8721 /* DECL is a VAR_DECL whose type is a REFERENCE_TYPE. The reference
8722 is being bound to a temporary. Create and return a new VAR_DECL
8723 with the indicated TYPE; this variable will store the value to
8724 which the reference is bound. */
8727 make_temporary_var_for_ref_to_temp (tree decl
, tree type
)
8731 /* Create the variable. */
8732 var
= create_temporary_var (type
);
8734 /* Register the variable. */
8735 if (TREE_STATIC (decl
))
8737 /* Namespace-scope or local static; give it a mangled name. */
8738 /* FIXME share comdat with decl? */
8741 TREE_STATIC (var
) = 1;
8742 name
= mangle_ref_init_variable (decl
);
8743 DECL_NAME (var
) = name
;
8744 SET_DECL_ASSEMBLER_NAME (var
, name
);
8745 var
= pushdecl_top_level (var
);
8748 /* Create a new cleanup level if necessary. */
8749 maybe_push_cleanup_level (type
);
8754 /* EXPR is the initializer for a variable DECL of reference or
8755 std::initializer_list type. Create, push and return a new VAR_DECL
8756 for the initializer so that it will live as long as DECL. Any
8757 cleanup for the new variable is returned through CLEANUP, and the
8758 code to initialize the new variable is returned through INITP. */
8761 set_up_extended_ref_temp (tree decl
, tree expr
, VEC(tree
,gc
) **cleanups
,
8768 /* Create the temporary variable. */
8769 type
= TREE_TYPE (expr
);
8770 var
= make_temporary_var_for_ref_to_temp (decl
, type
);
8771 layout_decl (var
, 0);
8772 /* If the rvalue is the result of a function call it will be
8773 a TARGET_EXPR. If it is some other construct (such as a
8774 member access expression where the underlying object is
8775 itself the result of a function call), turn it into a
8776 TARGET_EXPR here. It is important that EXPR be a
8777 TARGET_EXPR below since otherwise the INIT_EXPR will
8778 attempt to make a bitwise copy of EXPR to initialize
8780 if (TREE_CODE (expr
) != TARGET_EXPR
)
8781 expr
= get_target_expr (expr
);
8783 if (TREE_CODE (decl
) == FIELD_DECL
8784 && extra_warnings
&& !TREE_NO_WARNING (decl
))
8786 warning (OPT_Wextra
, "a temporary bound to %qD only persists "
8787 "until the constructor exits", decl
);
8788 TREE_NO_WARNING (decl
) = true;
8791 /* Recursively extend temps in this initializer. */
8792 TARGET_EXPR_INITIAL (expr
)
8793 = extend_ref_init_temps (decl
, TARGET_EXPR_INITIAL (expr
), cleanups
);
8795 /* Any reference temp has a non-trivial initializer. */
8796 DECL_NONTRIVIALLY_INITIALIZED_P (var
) = true;
8798 /* If the initializer is constant, put it in DECL_INITIAL so we get
8799 static initialization and use in constant expressions. */
8800 init
= maybe_constant_init (expr
);
8801 if (TREE_CONSTANT (init
))
8803 if (literal_type_p (type
) && CP_TYPE_CONST_NON_VOLATILE_P (type
))
8805 /* 5.19 says that a constant expression can include an
8806 lvalue-rvalue conversion applied to "a glvalue of literal type
8807 that refers to a non-volatile temporary object initialized
8808 with a constant expression". Rather than try to communicate
8809 that this VAR_DECL is a temporary, just mark it constexpr.
8811 Currently this is only useful for initializer_list temporaries,
8812 since reference vars can't appear in constant expressions. */
8813 DECL_DECLARED_CONSTEXPR_P (var
) = true;
8814 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (var
) = true;
8815 TREE_CONSTANT (var
) = true;
8817 DECL_INITIAL (var
) = init
;
8821 /* Create the INIT_EXPR that will initialize the temporary
8823 init
= build2 (INIT_EXPR
, type
, var
, expr
);
8824 if (at_function_scope_p ())
8826 add_decl_expr (var
);
8828 if (TREE_STATIC (var
))
8829 init
= add_stmt_to_compound (init
, register_dtor_fn (var
));
8832 tree cleanup
= cxx_maybe_build_cleanup (var
, tf_warning_or_error
);
8834 VEC_safe_push (tree
, gc
, *cleanups
, cleanup
);
8837 /* We must be careful to destroy the temporary only
8838 after its initialization has taken place. If the
8839 initialization throws an exception, then the
8840 destructor should not be run. We cannot simply
8841 transform INIT into something like:
8843 (INIT, ({ CLEANUP_STMT; }))
8845 because emit_local_var always treats the
8846 initializer as a full-expression. Thus, the
8847 destructor would run too early; it would run at the
8848 end of initializing the reference variable, rather
8849 than at the end of the block enclosing the
8852 The solution is to pass back a cleanup expression
8853 which the caller is responsible for attaching to
8854 the statement tree. */
8858 rest_of_decl_compilation (var
, /*toplev=*/1, at_eof
);
8859 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type
))
8860 static_aggregates
= tree_cons (NULL_TREE
, var
,
8868 /* Convert EXPR to the indicated reference TYPE, in a way suitable for
8869 initializing a variable of that TYPE. */
8872 initialize_reference (tree type
, tree expr
,
8873 int flags
, tsubst_flags_t complain
)
8877 location_t loc
= EXPR_LOC_OR_HERE (expr
);
8879 if (type
== error_mark_node
|| error_operand_p (expr
))
8880 return error_mark_node
;
8882 /* Get the high-water mark for the CONVERSION_OBSTACK. */
8883 p
= conversion_obstack_alloc (0);
8885 conv
= reference_binding (type
, TREE_TYPE (expr
), expr
, /*c_cast_p=*/false,
8887 if (!conv
|| conv
->bad_p
)
8889 if (complain
& tf_error
)
8892 convert_like (conv
, expr
, complain
);
8893 else if (!CP_TYPE_CONST_P (TREE_TYPE (type
))
8894 && !TYPE_REF_IS_RVALUE (type
)
8895 && !real_lvalue_p (expr
))
8896 error_at (loc
, "invalid initialization of non-const reference of "
8897 "type %qT from an rvalue of type %qT",
8898 type
, TREE_TYPE (expr
));
8900 error_at (loc
, "invalid initialization of reference of type "
8901 "%qT from expression of type %qT", type
,
8904 return error_mark_node
;
8907 gcc_assert (conv
->kind
== ck_ref_bind
);
8909 /* Perform the conversion. */
8910 expr
= convert_like (conv
, expr
, complain
);
8912 /* Free all the conversions we allocated. */
8913 obstack_free (&conversion_obstack
, p
);
8918 /* Subroutine of extend_ref_init_temps. Possibly extend one initializer,
8919 which is bound either to a reference or a std::initializer_list. */
8922 extend_ref_init_temps_1 (tree decl
, tree init
, VEC(tree
,gc
) **cleanups
)
8927 if (TREE_CODE (sub
) == COMPOUND_EXPR
)
8929 TREE_OPERAND (sub
, 1)
8930 = extend_ref_init_temps_1 (decl
, TREE_OPERAND (sub
, 1), cleanups
);
8933 if (TREE_CODE (sub
) != ADDR_EXPR
)
8935 /* Deal with binding to a subobject. */
8936 for (p
= &TREE_OPERAND (sub
, 0); TREE_CODE (*p
) == COMPONENT_REF
; )
8937 p
= &TREE_OPERAND (*p
, 0);
8938 if (TREE_CODE (*p
) == TARGET_EXPR
)
8940 tree subinit
= NULL_TREE
;
8941 *p
= set_up_extended_ref_temp (decl
, *p
, cleanups
, &subinit
);
8943 init
= build2 (COMPOUND_EXPR
, TREE_TYPE (init
), subinit
, init
);
8948 /* INIT is part of the initializer for DECL. If there are any
8949 reference or initializer lists being initialized, extend their
8950 lifetime to match that of DECL. */
8953 extend_ref_init_temps (tree decl
, tree init
, VEC(tree
,gc
) **cleanups
)
8955 tree type
= TREE_TYPE (init
);
8956 if (processing_template_decl
)
8958 if (TREE_CODE (type
) == REFERENCE_TYPE
)
8959 init
= extend_ref_init_temps_1 (decl
, init
, cleanups
);
8960 else if (is_std_init_list (type
))
8962 /* The temporary array underlying a std::initializer_list
8963 is handled like a reference temporary. */
8965 if (TREE_CODE (ctor
) == TARGET_EXPR
)
8966 ctor
= TARGET_EXPR_INITIAL (ctor
);
8967 if (TREE_CODE (ctor
) == CONSTRUCTOR
)
8969 tree array
= CONSTRUCTOR_ELT (ctor
, 0)->value
;
8970 array
= extend_ref_init_temps_1 (decl
, array
, cleanups
);
8971 CONSTRUCTOR_ELT (ctor
, 0)->value
= array
;
8974 else if (TREE_CODE (init
) == CONSTRUCTOR
)
8978 VEC(constructor_elt
,gc
) *elts
= CONSTRUCTOR_ELTS (init
);
8979 FOR_EACH_VEC_ELT (constructor_elt
, elts
, i
, p
)
8980 p
->value
= extend_ref_init_temps (decl
, p
->value
, cleanups
);
8986 /* Returns true iff TYPE is some variant of std::initializer_list. */
8989 is_std_init_list (tree type
)
8991 /* Look through typedefs. */
8994 type
= TYPE_MAIN_VARIANT (type
);
8995 return (CLASS_TYPE_P (type
)
8996 && CP_TYPE_CONTEXT (type
) == std_node
8997 && strcmp (TYPE_NAME_STRING (type
), "initializer_list") == 0);
9000 /* Returns true iff DECL is a list constructor: i.e. a constructor which
9001 will accept an argument list of a single std::initializer_list<T>. */
9004 is_list_ctor (tree decl
)
9006 tree args
= FUNCTION_FIRST_USER_PARMTYPE (decl
);
9009 if (!args
|| args
== void_list_node
)
9012 arg
= non_reference (TREE_VALUE (args
));
9013 if (!is_std_init_list (arg
))
9016 args
= TREE_CHAIN (args
);
9018 if (args
&& args
!= void_list_node
&& !TREE_PURPOSE (args
))
9019 /* There are more non-defaulted parms. */
9025 #include "gt-cp-call.h"