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 Free Software Foundation, Inc.
4 Contributed by Michael Tiemann (tiemann@cygnus.com) and
5 modified by Brendan Kehoe (brendan@cygnus.com).
7 This file is part of GCC.
9 GCC is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2, or (at your option)
14 GCC is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with GCC; see the file COPYING. If not, write to
21 the Free Software Foundation, 51 Franklin Street, Fifth Floor,
22 Boston, MA 02110-1301, USA. */
25 /* High-level class interface. */
29 #include "coretypes.h"
38 #include "diagnostic.h"
43 /* The various kinds of conversion. */
45 typedef enum conversion_kind
{
59 /* The rank of the conversion. Order of the enumerals matters; better
60 conversions should come earlier in the list. */
62 typedef enum conversion_rank
{
73 /* An implicit conversion sequence, in the sense of [over.best.ics].
74 The first conversion to be performed is at the end of the chain.
75 That conversion is always a cr_identity conversion. */
77 typedef struct conversion conversion
;
79 /* The kind of conversion represented by this step. */
81 /* The rank of this conversion. */
83 BOOL_BITFIELD user_conv_p
: 1;
84 BOOL_BITFIELD ellipsis_p
: 1;
85 BOOL_BITFIELD this_p
: 1;
86 BOOL_BITFIELD bad_p
: 1;
87 /* If KIND is ck_ref_bind ck_base_conv, true to indicate that a
88 temporary should be created to hold the result of the
90 BOOL_BITFIELD need_temporary_p
: 1;
91 /* If KIND is ck_identity or ck_base_conv, true to indicate that the
92 copy constructor must be accessible, even though it is not being
94 BOOL_BITFIELD check_copy_constructor_p
: 1;
95 /* If KIND is ck_ptr or ck_pmem, true to indicate that a conversion
96 from a pointer-to-derived to pointer-to-base is being performed. */
97 BOOL_BITFIELD base_p
: 1;
98 /* The type of the expression resulting from the conversion. */
101 /* The next conversion in the chain. Since the conversions are
102 arranged from outermost to innermost, the NEXT conversion will
103 actually be performed before this conversion. This variant is
104 used only when KIND is neither ck_identity nor ck_ambig. */
106 /* The expression at the beginning of the conversion chain. This
107 variant is used only if KIND is ck_identity or ck_ambig. */
110 /* The function candidate corresponding to this conversion
111 sequence. This field is only used if KIND is ck_user. */
112 struct z_candidate
*cand
;
115 #define CONVERSION_RANK(NODE) \
116 ((NODE)->bad_p ? cr_bad \
117 : (NODE)->ellipsis_p ? cr_ellipsis \
118 : (NODE)->user_conv_p ? cr_user \
121 static struct obstack conversion_obstack
;
122 static bool conversion_obstack_initialized
;
124 static struct z_candidate
* tourney (struct z_candidate
*);
125 static int equal_functions (tree
, tree
);
126 static int joust (struct z_candidate
*, struct z_candidate
*, bool);
127 static int compare_ics (conversion
*, conversion
*);
128 static tree
build_over_call (struct z_candidate
*, int);
129 static tree
build_java_interface_fn_ref (tree
, tree
);
130 #define convert_like(CONV, EXPR) \
131 convert_like_real ((CONV), (EXPR), NULL_TREE, 0, 0, \
132 /*issue_conversion_warnings=*/true, \
134 #define convert_like_with_context(CONV, EXPR, FN, ARGNO) \
135 convert_like_real ((CONV), (EXPR), (FN), (ARGNO), 0, \
136 /*issue_conversion_warnings=*/true, \
138 static tree
convert_like_real (conversion
*, tree
, tree
, int, int, bool,
140 static void op_error (enum tree_code
, enum tree_code
, tree
, tree
,
142 static tree
build_object_call (tree
, tree
);
143 static tree
resolve_args (tree
);
144 static struct z_candidate
*build_user_type_conversion_1 (tree
, tree
, int);
145 static void print_z_candidate (const char *, struct z_candidate
*);
146 static void print_z_candidates (struct z_candidate
*);
147 static tree
build_this (tree
);
148 static struct z_candidate
*splice_viable (struct z_candidate
*, bool, bool *);
149 static bool any_strictly_viable (struct z_candidate
*);
150 static struct z_candidate
*add_template_candidate
151 (struct z_candidate
**, tree
, tree
, tree
, tree
, tree
,
152 tree
, tree
, int, unification_kind_t
);
153 static struct z_candidate
*add_template_candidate_real
154 (struct z_candidate
**, tree
, tree
, tree
, tree
, tree
,
155 tree
, tree
, int, tree
, unification_kind_t
);
156 static struct z_candidate
*add_template_conv_candidate
157 (struct z_candidate
**, tree
, tree
, tree
, tree
, tree
, tree
);
158 static void add_builtin_candidates
159 (struct z_candidate
**, enum tree_code
, enum tree_code
,
161 static void add_builtin_candidate
162 (struct z_candidate
**, enum tree_code
, enum tree_code
,
163 tree
, tree
, tree
, tree
*, tree
*, int);
164 static bool is_complete (tree
);
165 static void build_builtin_candidate
166 (struct z_candidate
**, tree
, tree
, tree
, tree
*, tree
*,
168 static struct z_candidate
*add_conv_candidate
169 (struct z_candidate
**, tree
, tree
, tree
, tree
, tree
);
170 static struct z_candidate
*add_function_candidate
171 (struct z_candidate
**, tree
, tree
, tree
, tree
, tree
, int);
172 static conversion
*implicit_conversion (tree
, tree
, tree
, bool, int);
173 static conversion
*standard_conversion (tree
, tree
, tree
, bool, int);
174 static conversion
*reference_binding (tree
, tree
, tree
, bool, int);
175 static conversion
*build_conv (conversion_kind
, tree
, conversion
*);
176 static bool is_subseq (conversion
*, conversion
*);
177 static tree
maybe_handle_ref_bind (conversion
**);
178 static void maybe_handle_implicit_object (conversion
**);
179 static struct z_candidate
*add_candidate
180 (struct z_candidate
**, tree
, tree
, size_t,
181 conversion
**, tree
, tree
, int);
182 static tree
source_type (conversion
*);
183 static void add_warning (struct z_candidate
*, struct z_candidate
*);
184 static bool reference_related_p (tree
, tree
);
185 static bool reference_compatible_p (tree
, tree
);
186 static conversion
*convert_class_to_reference (tree
, tree
, tree
);
187 static conversion
*direct_reference_binding (tree
, conversion
*);
188 static bool promoted_arithmetic_type_p (tree
);
189 static conversion
*conditional_conversion (tree
, tree
);
190 static char *name_as_c_string (tree
, tree
, bool *);
191 static tree
call_builtin_trap (void);
192 static tree
prep_operand (tree
);
193 static void add_candidates (tree
, tree
, tree
, bool, tree
, tree
,
194 int, struct z_candidate
**);
195 static conversion
*merge_conversion_sequences (conversion
*, conversion
*);
196 static bool magic_varargs_p (tree
);
197 typedef void (*diagnostic_fn_t
) (const char *, ...) ATTRIBUTE_GCC_CXXDIAG(1,2);
198 static tree
build_temp (tree
, tree
, int, diagnostic_fn_t
*);
199 static void check_constructor_callable (tree
, tree
);
201 /* Returns nonzero iff the destructor name specified in NAME matches BASETYPE.
202 NAME can take many forms... */
205 check_dtor_name (tree basetype
, tree name
)
207 /* Just accept something we've already complained about. */
208 if (name
== error_mark_node
)
211 if (TREE_CODE (name
) == TYPE_DECL
)
212 name
= TREE_TYPE (name
);
213 else if (TYPE_P (name
))
215 else if (TREE_CODE (name
) == IDENTIFIER_NODE
)
217 if ((IS_AGGR_TYPE (basetype
) && name
== constructor_name (basetype
))
218 || (TREE_CODE (basetype
) == ENUMERAL_TYPE
219 && name
== TYPE_IDENTIFIER (basetype
)))
222 name
= get_type_value (name
);
228 template <class T> struct S { ~S(); };
232 NAME will be a class template. */
233 gcc_assert (DECL_CLASS_TEMPLATE_P (name
));
239 return same_type_p (TYPE_MAIN_VARIANT (basetype
), TYPE_MAIN_VARIANT (name
));
242 /* We want the address of a function or method. We avoid creating a
243 pointer-to-member function. */
246 build_addr_func (tree function
)
248 tree type
= TREE_TYPE (function
);
250 /* We have to do these by hand to avoid real pointer to member
252 if (TREE_CODE (type
) == METHOD_TYPE
)
254 if (TREE_CODE (function
) == OFFSET_REF
)
256 tree object
= build_address (TREE_OPERAND (function
, 0));
257 return get_member_function_from_ptrfunc (&object
,
258 TREE_OPERAND (function
, 1));
260 function
= build_address (function
);
263 function
= decay_conversion (function
);
268 /* Build a CALL_EXPR, we can handle FUNCTION_TYPEs, METHOD_TYPEs, or
269 POINTER_TYPE to those. Note, pointer to member function types
270 (TYPE_PTRMEMFUNC_P) must be handled by our callers. */
273 build_call (tree function
, tree parms
)
275 int is_constructor
= 0;
282 function
= build_addr_func (function
);
284 if (TYPE_PTRMEMFUNC_P (TREE_TYPE (function
)))
286 sorry ("unable to call pointer to member function here");
287 return error_mark_node
;
290 fntype
= TREE_TYPE (TREE_TYPE (function
));
291 result_type
= TREE_TYPE (fntype
);
293 if (TREE_CODE (function
) == ADDR_EXPR
294 && TREE_CODE (TREE_OPERAND (function
, 0)) == FUNCTION_DECL
)
295 decl
= TREE_OPERAND (function
, 0);
299 /* We check both the decl and the type; a function may be known not to
300 throw without being declared throw(). */
301 nothrow
= ((decl
&& TREE_NOTHROW (decl
))
302 || TYPE_NOTHROW_P (TREE_TYPE (TREE_TYPE (function
))));
304 if (decl
&& TREE_THIS_VOLATILE (decl
) && cfun
)
305 current_function_returns_abnormally
= 1;
307 if (decl
&& TREE_DEPRECATED (decl
))
308 warn_deprecated_use (decl
);
309 require_complete_eh_spec_types (fntype
, decl
);
311 if (decl
&& DECL_CONSTRUCTOR_P (decl
))
314 if (decl
&& ! TREE_USED (decl
))
316 /* We invoke build_call directly for several library functions.
317 These may have been declared normally if we're building libgcc,
318 so we can't just check DECL_ARTIFICIAL. */
319 gcc_assert (DECL_ARTIFICIAL (decl
)
320 || !strncmp (IDENTIFIER_POINTER (DECL_NAME (decl
)),
325 /* Don't pass empty class objects by value. This is useful
326 for tags in STL, which are used to control overload resolution.
327 We don't need to handle other cases of copying empty classes. */
328 if (! decl
|| ! DECL_BUILT_IN (decl
))
329 for (tmp
= parms
; tmp
; tmp
= TREE_CHAIN (tmp
))
330 if (is_empty_class (TREE_TYPE (TREE_VALUE (tmp
)))
331 && ! TREE_ADDRESSABLE (TREE_TYPE (TREE_VALUE (tmp
))))
333 tree t
= build0 (EMPTY_CLASS_EXPR
, TREE_TYPE (TREE_VALUE (tmp
)));
334 TREE_VALUE (tmp
) = build2 (COMPOUND_EXPR
, TREE_TYPE (t
),
335 TREE_VALUE (tmp
), t
);
338 function
= build3 (CALL_EXPR
, result_type
, function
, parms
, NULL_TREE
);
339 TREE_HAS_CONSTRUCTOR (function
) = is_constructor
;
340 TREE_NOTHROW (function
) = nothrow
;
345 /* Build something of the form ptr->method (args)
346 or object.method (args). This can also build
347 calls to constructors, and find friends.
349 Member functions always take their class variable
352 INSTANCE is a class instance.
354 NAME is the name of the method desired, usually an IDENTIFIER_NODE.
356 PARMS help to figure out what that NAME really refers to.
358 BASETYPE_PATH, if non-NULL, contains a chain from the type of INSTANCE
359 down to the real instance type to use for access checking. We need this
360 information to get protected accesses correct.
362 FLAGS is the logical disjunction of zero or more LOOKUP_
363 flags. See cp-tree.h for more info.
365 If this is all OK, calls build_function_call with the resolved
368 This function must also handle being called to perform
369 initialization, promotion/coercion of arguments, and
370 instantiation of default parameters.
372 Note that NAME may refer to an instance variable name. If
373 `operator()()' is defined for the type of that field, then we return
376 /* New overloading code. */
378 typedef struct z_candidate z_candidate
;
380 typedef struct candidate_warning candidate_warning
;
381 struct candidate_warning
{
383 candidate_warning
*next
;
387 /* The FUNCTION_DECL that will be called if this candidate is
388 selected by overload resolution. */
390 /* The arguments to use when calling this function. */
392 /* The implicit conversion sequences for each of the arguments to
395 /* The number of implicit conversion sequences. */
397 /* If FN is a user-defined conversion, the standard conversion
398 sequence from the type returned by FN to the desired destination
400 conversion
*second_conv
;
402 /* If FN is a member function, the binfo indicating the path used to
403 qualify the name of FN at the call site. This path is used to
404 determine whether or not FN is accessible if it is selected by
405 overload resolution. The DECL_CONTEXT of FN will always be a
406 (possibly improper) base of this binfo. */
408 /* If FN is a non-static member function, the binfo indicating the
409 subobject to which the `this' pointer should be converted if FN
410 is selected by overload resolution. The type pointed to the by
411 the `this' pointer must correspond to the most derived class
412 indicated by the CONVERSION_PATH. */
413 tree conversion_path
;
415 candidate_warning
*warnings
;
419 /* Returns true iff T is a null pointer constant in the sense of
423 null_ptr_cst_p (tree t
)
427 A null pointer constant is an integral constant expression
428 (_expr.const_) rvalue of integer type that evaluates to zero. */
429 t
= integral_constant_value (t
);
431 || (CP_INTEGRAL_TYPE_P (TREE_TYPE (t
)) && integer_zerop (t
)))
436 /* Returns nonzero if PARMLIST consists of only default parms and/or
440 sufficient_parms_p (tree parmlist
)
442 for (; parmlist
&& parmlist
!= void_list_node
;
443 parmlist
= TREE_CHAIN (parmlist
))
444 if (!TREE_PURPOSE (parmlist
))
449 /* Allocate N bytes of memory from the conversion obstack. The memory
450 is zeroed before being returned. */
453 conversion_obstack_alloc (size_t n
)
456 if (!conversion_obstack_initialized
)
458 gcc_obstack_init (&conversion_obstack
);
459 conversion_obstack_initialized
= true;
461 p
= obstack_alloc (&conversion_obstack
, n
);
466 /* Dynamically allocate a conversion. */
469 alloc_conversion (conversion_kind kind
)
472 c
= conversion_obstack_alloc (sizeof (conversion
));
477 #ifdef ENABLE_CHECKING
479 /* Make sure that all memory on the conversion obstack has been
483 validate_conversion_obstack (void)
485 if (conversion_obstack_initialized
)
486 gcc_assert ((obstack_next_free (&conversion_obstack
)
487 == obstack_base (&conversion_obstack
)));
490 #endif /* ENABLE_CHECKING */
492 /* Dynamically allocate an array of N conversions. */
495 alloc_conversions (size_t n
)
497 return conversion_obstack_alloc (n
* sizeof (conversion
*));
501 build_conv (conversion_kind code
, tree type
, conversion
*from
)
504 conversion_rank rank
= CONVERSION_RANK (from
);
506 /* We can't use buildl1 here because CODE could be USER_CONV, which
507 takes two arguments. In that case, the caller is responsible for
508 filling in the second argument. */
509 t
= alloc_conversion (code
);
532 t
->user_conv_p
= (code
== ck_user
|| from
->user_conv_p
);
533 t
->bad_p
= from
->bad_p
;
538 /* Build a representation of the identity conversion from EXPR to
539 itself. The TYPE should match the type of EXPR, if EXPR is non-NULL. */
542 build_identity_conv (tree type
, tree expr
)
546 c
= alloc_conversion (ck_identity
);
553 /* Converting from EXPR to TYPE was ambiguous in the sense that there
554 were multiple user-defined conversions to accomplish the job.
555 Build a conversion that indicates that ambiguity. */
558 build_ambiguous_conv (tree type
, tree expr
)
562 c
= alloc_conversion (ck_ambig
);
570 strip_top_quals (tree t
)
572 if (TREE_CODE (t
) == ARRAY_TYPE
)
574 return cp_build_qualified_type (t
, 0);
577 /* Returns the standard conversion path (see [conv]) from type FROM to type
578 TO, if any. For proper handling of null pointer constants, you must
579 also pass the expression EXPR to convert from. If C_CAST_P is true,
580 this conversion is coming from a C-style cast. */
583 standard_conversion (tree to
, tree from
, tree expr
, bool c_cast_p
,
586 enum tree_code fcode
, tcode
;
588 bool fromref
= false;
590 to
= non_reference (to
);
591 if (TREE_CODE (from
) == REFERENCE_TYPE
)
594 from
= TREE_TYPE (from
);
596 to
= strip_top_quals (to
);
597 from
= strip_top_quals (from
);
599 if ((TYPE_PTRFN_P (to
) || TYPE_PTRMEMFUNC_P (to
))
600 && expr
&& type_unknown_p (expr
))
602 expr
= instantiate_type (to
, expr
, tf_conv
);
603 if (expr
== error_mark_node
)
605 from
= TREE_TYPE (expr
);
608 fcode
= TREE_CODE (from
);
609 tcode
= TREE_CODE (to
);
611 conv
= build_identity_conv (from
, expr
);
612 if (fcode
== FUNCTION_TYPE
)
614 from
= build_pointer_type (from
);
615 fcode
= TREE_CODE (from
);
616 conv
= build_conv (ck_lvalue
, from
, conv
);
618 else if (fcode
== ARRAY_TYPE
)
620 from
= build_pointer_type (TREE_TYPE (from
));
621 fcode
= TREE_CODE (from
);
622 conv
= build_conv (ck_lvalue
, from
, conv
);
624 else if (fromref
|| (expr
&& lvalue_p (expr
)))
625 conv
= build_conv (ck_rvalue
, from
, conv
);
627 /* Allow conversion between `__complex__' data types. */
628 if (tcode
== COMPLEX_TYPE
&& fcode
== COMPLEX_TYPE
)
630 /* The standard conversion sequence to convert FROM to TO is
631 the standard conversion sequence to perform componentwise
633 conversion
*part_conv
= standard_conversion
634 (TREE_TYPE (to
), TREE_TYPE (from
), NULL_TREE
, c_cast_p
, flags
);
638 conv
= build_conv (part_conv
->kind
, to
, conv
);
639 conv
->rank
= part_conv
->rank
;
647 if (same_type_p (from
, to
))
650 if ((tcode
== POINTER_TYPE
|| TYPE_PTR_TO_MEMBER_P (to
))
651 && expr
&& null_ptr_cst_p (expr
))
652 conv
= build_conv (ck_std
, to
, conv
);
653 else if ((tcode
== INTEGER_TYPE
&& fcode
== POINTER_TYPE
)
654 || (tcode
== POINTER_TYPE
&& fcode
== INTEGER_TYPE
))
656 /* For backwards brain damage compatibility, allow interconversion of
657 pointers and integers with a pedwarn. */
658 conv
= build_conv (ck_std
, to
, conv
);
661 else if (tcode
== ENUMERAL_TYPE
&& fcode
== INTEGER_TYPE
)
663 /* For backwards brain damage compatibility, allow interconversion of
664 enums and integers with a pedwarn. */
665 conv
= build_conv (ck_std
, to
, conv
);
668 else if ((tcode
== POINTER_TYPE
&& fcode
== POINTER_TYPE
)
669 || (TYPE_PTRMEM_P (to
) && TYPE_PTRMEM_P (from
)))
674 if (tcode
== POINTER_TYPE
675 && same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (from
),
678 else if (VOID_TYPE_P (TREE_TYPE (to
))
679 && !TYPE_PTRMEM_P (from
)
680 && TREE_CODE (TREE_TYPE (from
)) != FUNCTION_TYPE
)
682 from
= build_pointer_type
683 (cp_build_qualified_type (void_type_node
,
684 cp_type_quals (TREE_TYPE (from
))));
685 conv
= build_conv (ck_ptr
, from
, conv
);
687 else if (TYPE_PTRMEM_P (from
))
689 tree fbase
= TYPE_PTRMEM_CLASS_TYPE (from
);
690 tree tbase
= TYPE_PTRMEM_CLASS_TYPE (to
);
692 if (DERIVED_FROM_P (fbase
, tbase
)
693 && (same_type_ignoring_top_level_qualifiers_p
694 (TYPE_PTRMEM_POINTED_TO_TYPE (from
),
695 TYPE_PTRMEM_POINTED_TO_TYPE (to
))))
697 from
= build_ptrmem_type (tbase
,
698 TYPE_PTRMEM_POINTED_TO_TYPE (from
));
699 conv
= build_conv (ck_pmem
, from
, conv
);
701 else if (!same_type_p (fbase
, tbase
))
704 else if (IS_AGGR_TYPE (TREE_TYPE (from
))
705 && IS_AGGR_TYPE (TREE_TYPE (to
))
708 An rvalue of type "pointer to cv D," where D is a
709 class type, can be converted to an rvalue of type
710 "pointer to cv B," where B is a base class (clause
711 _class.derived_) of D. If B is an inaccessible
712 (clause _class.access_) or ambiguous
713 (_class.member.lookup_) base class of D, a program
714 that necessitates this conversion is ill-formed.
715 Therefore, we use DERIVED_FROM_P, and do not check
716 access or uniqueness. */
717 && DERIVED_FROM_P (TREE_TYPE (to
), TREE_TYPE (from
)))
720 cp_build_qualified_type (TREE_TYPE (to
),
721 cp_type_quals (TREE_TYPE (from
)));
722 from
= build_pointer_type (from
);
723 conv
= build_conv (ck_ptr
, from
, conv
);
727 if (tcode
== POINTER_TYPE
)
729 to_pointee
= TREE_TYPE (to
);
730 from_pointee
= TREE_TYPE (from
);
734 to_pointee
= TYPE_PTRMEM_POINTED_TO_TYPE (to
);
735 from_pointee
= TYPE_PTRMEM_POINTED_TO_TYPE (from
);
738 if (same_type_p (from
, to
))
740 else if (c_cast_p
&& comp_ptr_ttypes_const (to
, from
))
741 /* In a C-style cast, we ignore CV-qualification because we
742 are allowed to perform a static_cast followed by a
744 conv
= build_conv (ck_qual
, to
, conv
);
745 else if (!c_cast_p
&& comp_ptr_ttypes (to_pointee
, from_pointee
))
746 conv
= build_conv (ck_qual
, to
, conv
);
747 else if (expr
&& string_conv_p (to
, expr
, 0))
748 /* converting from string constant to char *. */
749 conv
= build_conv (ck_qual
, to
, conv
);
750 else if (ptr_reasonably_similar (to_pointee
, from_pointee
))
752 conv
= build_conv (ck_ptr
, to
, conv
);
760 else if (TYPE_PTRMEMFUNC_P (to
) && TYPE_PTRMEMFUNC_P (from
))
762 tree fromfn
= TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (from
));
763 tree tofn
= TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (to
));
764 tree fbase
= TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (fromfn
)));
765 tree tbase
= TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (tofn
)));
767 if (!DERIVED_FROM_P (fbase
, tbase
)
768 || !same_type_p (TREE_TYPE (fromfn
), TREE_TYPE (tofn
))
769 || !compparms (TREE_CHAIN (TYPE_ARG_TYPES (fromfn
)),
770 TREE_CHAIN (TYPE_ARG_TYPES (tofn
)))
771 || cp_type_quals (fbase
) != cp_type_quals (tbase
))
774 from
= cp_build_qualified_type (tbase
, cp_type_quals (fbase
));
775 from
= build_method_type_directly (from
,
777 TREE_CHAIN (TYPE_ARG_TYPES (fromfn
)));
778 from
= build_ptrmemfunc_type (build_pointer_type (from
));
779 conv
= build_conv (ck_pmem
, from
, conv
);
782 else if (tcode
== BOOLEAN_TYPE
)
786 An rvalue of arithmetic, enumeration, pointer, or pointer to
787 member type can be converted to an rvalue of type bool. */
788 if (ARITHMETIC_TYPE_P (from
)
789 || fcode
== ENUMERAL_TYPE
790 || fcode
== POINTER_TYPE
791 || TYPE_PTR_TO_MEMBER_P (from
))
793 conv
= build_conv (ck_std
, to
, conv
);
794 if (fcode
== POINTER_TYPE
795 || TYPE_PTRMEM_P (from
)
796 || (TYPE_PTRMEMFUNC_P (from
)
797 && conv
->rank
< cr_pbool
))
798 conv
->rank
= cr_pbool
;
804 /* We don't check for ENUMERAL_TYPE here because there are no standard
805 conversions to enum type. */
806 else if (tcode
== INTEGER_TYPE
|| tcode
== BOOLEAN_TYPE
807 || tcode
== REAL_TYPE
)
809 if (! (INTEGRAL_CODE_P (fcode
) || fcode
== REAL_TYPE
))
811 conv
= build_conv (ck_std
, to
, conv
);
813 /* Give this a better rank if it's a promotion. */
814 if (same_type_p (to
, type_promotes_to (from
))
815 && conv
->u
.next
->rank
<= cr_promotion
)
816 conv
->rank
= cr_promotion
;
818 else if (fcode
== VECTOR_TYPE
&& tcode
== VECTOR_TYPE
819 && vector_types_convertible_p (from
, to
))
820 return build_conv (ck_std
, to
, conv
);
821 else if (!(flags
& LOOKUP_CONSTRUCTOR_CALLABLE
)
822 && IS_AGGR_TYPE (to
) && IS_AGGR_TYPE (from
)
823 && is_properly_derived_from (from
, to
))
825 if (conv
->kind
== ck_rvalue
)
827 conv
= build_conv (ck_base
, to
, conv
);
828 /* The derived-to-base conversion indicates the initialization
829 of a parameter with base type from an object of a derived
830 type. A temporary object is created to hold the result of
832 conv
->need_temporary_p
= true;
840 /* Returns nonzero if T1 is reference-related to T2. */
843 reference_related_p (tree t1
, tree t2
)
845 t1
= TYPE_MAIN_VARIANT (t1
);
846 t2
= TYPE_MAIN_VARIANT (t2
);
850 Given types "cv1 T1" and "cv2 T2," "cv1 T1" is reference-related
851 to "cv2 T2" if T1 is the same type as T2, or T1 is a base class
853 return (same_type_p (t1
, t2
)
854 || (CLASS_TYPE_P (t1
) && CLASS_TYPE_P (t2
)
855 && DERIVED_FROM_P (t1
, t2
)));
858 /* Returns nonzero if T1 is reference-compatible with T2. */
861 reference_compatible_p (tree t1
, tree t2
)
865 "cv1 T1" is reference compatible with "cv2 T2" if T1 is
866 reference-related to T2 and cv1 is the same cv-qualification as,
867 or greater cv-qualification than, cv2. */
868 return (reference_related_p (t1
, t2
)
869 && at_least_as_qualified_p (t1
, t2
));
872 /* Determine whether or not the EXPR (of class type S) can be
873 converted to T as in [over.match.ref]. */
876 convert_class_to_reference (tree t
, tree s
, tree expr
)
882 struct z_candidate
*candidates
;
883 struct z_candidate
*cand
;
886 conversions
= lookup_conversions (s
);
892 Assuming that "cv1 T" is the underlying type of the reference
893 being initialized, and "cv S" is the type of the initializer
894 expression, with S a class type, the candidate functions are
897 --The conversion functions of S and its base classes are
898 considered. Those that are not hidden within S and yield type
899 "reference to cv2 T2", where "cv1 T" is reference-compatible
900 (_dcl.init.ref_) with "cv2 T2", are candidate functions.
902 The argument list has one argument, which is the initializer
907 /* Conceptually, we should take the address of EXPR and put it in
908 the argument list. Unfortunately, however, that can result in
909 error messages, which we should not issue now because we are just
910 trying to find a conversion operator. Therefore, we use NULL,
911 cast to the appropriate type. */
912 arglist
= build_int_cst (build_pointer_type (s
), 0);
913 arglist
= build_tree_list (NULL_TREE
, arglist
);
915 reference_type
= build_reference_type (t
);
919 tree fns
= TREE_VALUE (conversions
);
921 for (; fns
; fns
= OVL_NEXT (fns
))
923 tree f
= OVL_CURRENT (fns
);
924 tree t2
= TREE_TYPE (TREE_TYPE (f
));
928 /* If this is a template function, try to get an exact
930 if (TREE_CODE (f
) == TEMPLATE_DECL
)
932 cand
= add_template_candidate (&candidates
,
938 TREE_PURPOSE (conversions
),
944 /* Now, see if the conversion function really returns
945 an lvalue of the appropriate type. From the
946 point of view of unification, simply returning an
947 rvalue of the right type is good enough. */
949 t2
= TREE_TYPE (TREE_TYPE (f
));
950 if (TREE_CODE (t2
) != REFERENCE_TYPE
951 || !reference_compatible_p (t
, TREE_TYPE (t2
)))
953 candidates
= candidates
->next
;
958 else if (TREE_CODE (t2
) == REFERENCE_TYPE
959 && reference_compatible_p (t
, TREE_TYPE (t2
)))
960 cand
= add_function_candidate (&candidates
, f
, s
, arglist
,
962 TREE_PURPOSE (conversions
),
967 conversion
*identity_conv
;
968 /* Build a standard conversion sequence indicating the
969 binding from the reference type returned by the
970 function to the desired REFERENCE_TYPE. */
972 = build_identity_conv (TREE_TYPE (TREE_TYPE
973 (TREE_TYPE (cand
->fn
))),
976 = (direct_reference_binding
977 (reference_type
, identity_conv
));
978 cand
->second_conv
->bad_p
|= cand
->convs
[0]->bad_p
;
981 conversions
= TREE_CHAIN (conversions
);
984 candidates
= splice_viable (candidates
, pedantic
, &any_viable_p
);
985 /* If none of the conversion functions worked out, let our caller
990 cand
= tourney (candidates
);
994 /* Now that we know that this is the function we're going to use fix
995 the dummy first argument. */
996 cand
->args
= tree_cons (NULL_TREE
,
998 TREE_CHAIN (cand
->args
));
1000 /* Build a user-defined conversion sequence representing the
1002 conv
= build_conv (ck_user
,
1003 TREE_TYPE (TREE_TYPE (cand
->fn
)),
1004 build_identity_conv (TREE_TYPE (expr
), expr
));
1007 /* Merge it with the standard conversion sequence from the
1008 conversion function's return type to the desired type. */
1009 cand
->second_conv
= merge_conversion_sequences (conv
, cand
->second_conv
);
1011 if (cand
->viable
== -1)
1014 return cand
->second_conv
;
1017 /* A reference of the indicated TYPE is being bound directly to the
1018 expression represented by the implicit conversion sequence CONV.
1019 Return a conversion sequence for this binding. */
1022 direct_reference_binding (tree type
, conversion
*conv
)
1026 gcc_assert (TREE_CODE (type
) == REFERENCE_TYPE
);
1027 gcc_assert (TREE_CODE (conv
->type
) != REFERENCE_TYPE
);
1029 t
= TREE_TYPE (type
);
1033 When a parameter of reference type binds directly
1034 (_dcl.init.ref_) to an argument expression, the implicit
1035 conversion sequence is the identity conversion, unless the
1036 argument expression has a type that is a derived class of the
1037 parameter type, in which case the implicit conversion sequence is
1038 a derived-to-base Conversion.
1040 If the parameter binds directly to the result of applying a
1041 conversion function to the argument expression, the implicit
1042 conversion sequence is a user-defined conversion sequence
1043 (_over.ics.user_), with the second standard conversion sequence
1044 either an identity conversion or, if the conversion function
1045 returns an entity of a type that is a derived class of the
1046 parameter type, a derived-to-base conversion. */
1047 if (!same_type_ignoring_top_level_qualifiers_p (t
, conv
->type
))
1049 /* Represent the derived-to-base conversion. */
1050 conv
= build_conv (ck_base
, t
, conv
);
1051 /* We will actually be binding to the base-class subobject in
1052 the derived class, so we mark this conversion appropriately.
1053 That way, convert_like knows not to generate a temporary. */
1054 conv
->need_temporary_p
= false;
1056 return build_conv (ck_ref_bind
, type
, conv
);
1059 /* Returns the conversion path from type FROM to reference type TO for
1060 purposes of reference binding. For lvalue binding, either pass a
1061 reference type to FROM or an lvalue expression to EXPR. If the
1062 reference will be bound to a temporary, NEED_TEMPORARY_P is set for
1063 the conversion returned. If C_CAST_P is true, this
1064 conversion is coming from a C-style cast. */
1067 reference_binding (tree rto
, tree rfrom
, tree expr
, bool c_cast_p
, int flags
)
1069 conversion
*conv
= NULL
;
1070 tree to
= TREE_TYPE (rto
);
1074 cp_lvalue_kind lvalue_p
= clk_none
;
1076 if (TREE_CODE (to
) == FUNCTION_TYPE
&& expr
&& type_unknown_p (expr
))
1078 expr
= instantiate_type (to
, expr
, tf_none
);
1079 if (expr
== error_mark_node
)
1081 from
= TREE_TYPE (expr
);
1084 if (TREE_CODE (from
) == REFERENCE_TYPE
)
1086 /* Anything with reference type is an lvalue. */
1087 lvalue_p
= clk_ordinary
;
1088 from
= TREE_TYPE (from
);
1091 lvalue_p
= real_lvalue_p (expr
);
1093 /* Figure out whether or not the types are reference-related and
1094 reference compatible. We have do do this after stripping
1095 references from FROM. */
1096 related_p
= reference_related_p (to
, from
);
1097 /* If this is a C cast, first convert to an appropriately qualified
1098 type, so that we can later do a const_cast to the desired type. */
1099 if (related_p
&& c_cast_p
1100 && !at_least_as_qualified_p (to
, from
))
1101 to
= build_qualified_type (to
, cp_type_quals (from
));
1102 compatible_p
= reference_compatible_p (to
, from
);
1104 if (lvalue_p
&& compatible_p
)
1108 If the initializer expression
1110 -- is an lvalue (but not an lvalue for a bit-field), and "cv1 T1"
1111 is reference-compatible with "cv2 T2,"
1113 the reference is bound directly to the initializer expression
1115 conv
= build_identity_conv (from
, expr
);
1116 conv
= direct_reference_binding (rto
, conv
);
1117 if ((lvalue_p
& clk_bitfield
) != 0
1118 || ((lvalue_p
& clk_packed
) != 0 && !TYPE_PACKED (to
)))
1119 /* For the purposes of overload resolution, we ignore the fact
1120 this expression is a bitfield or packed field. (In particular,
1121 [over.ics.ref] says specifically that a function with a
1122 non-const reference parameter is viable even if the
1123 argument is a bitfield.)
1125 However, when we actually call the function we must create
1126 a temporary to which to bind the reference. If the
1127 reference is volatile, or isn't const, then we cannot make
1128 a temporary, so we just issue an error when the conversion
1130 conv
->need_temporary_p
= true;
1134 else if (CLASS_TYPE_P (from
) && !(flags
& LOOKUP_NO_CONVERSION
))
1138 If the initializer expression
1140 -- has a class type (i.e., T2 is a class type) can be
1141 implicitly converted to an lvalue of type "cv3 T3," where
1142 "cv1 T1" is reference-compatible with "cv3 T3". (this
1143 conversion is selected by enumerating the applicable
1144 conversion functions (_over.match.ref_) and choosing the
1145 best one through overload resolution. (_over.match_).
1147 the reference is bound to the lvalue result of the conversion
1148 in the second case. */
1149 conv
= convert_class_to_reference (to
, from
, expr
);
1154 /* From this point on, we conceptually need temporaries, even if we
1155 elide them. Only the cases above are "direct bindings". */
1156 if (flags
& LOOKUP_NO_TEMP_BIND
)
1161 When a parameter of reference type is not bound directly to an
1162 argument expression, the conversion sequence is the one required
1163 to convert the argument expression to the underlying type of the
1164 reference according to _over.best.ics_. Conceptually, this
1165 conversion sequence corresponds to copy-initializing a temporary
1166 of the underlying type with the argument expression. Any
1167 difference in top-level cv-qualification is subsumed by the
1168 initialization itself and does not constitute a conversion. */
1172 Otherwise, the reference shall be to a non-volatile const type. */
1173 if (!CP_TYPE_CONST_NON_VOLATILE_P (to
))
1178 If the initializer expression is an rvalue, with T2 a class type,
1179 and "cv1 T1" is reference-compatible with "cv2 T2", the reference
1180 is bound in one of the following ways:
1182 -- The reference is bound to the object represented by the rvalue
1183 or to a sub-object within that object.
1187 We use the first alternative. The implicit conversion sequence
1188 is supposed to be same as we would obtain by generating a
1189 temporary. Fortunately, if the types are reference compatible,
1190 then this is either an identity conversion or the derived-to-base
1191 conversion, just as for direct binding. */
1192 if (CLASS_TYPE_P (from
) && compatible_p
)
1194 conv
= build_identity_conv (from
, expr
);
1195 conv
= direct_reference_binding (rto
, conv
);
1196 if (!(flags
& LOOKUP_CONSTRUCTOR_CALLABLE
))
1197 conv
->u
.next
->check_copy_constructor_p
= true;
1203 Otherwise, a temporary of type "cv1 T1" is created and
1204 initialized from the initializer expression using the rules for a
1205 non-reference copy initialization. If T1 is reference-related to
1206 T2, cv1 must be the same cv-qualification as, or greater
1207 cv-qualification than, cv2; otherwise, the program is ill-formed. */
1208 if (related_p
&& !at_least_as_qualified_p (to
, from
))
1211 conv
= implicit_conversion (to
, from
, expr
, c_cast_p
,
1216 conv
= build_conv (ck_ref_bind
, rto
, conv
);
1217 /* This reference binding, unlike those above, requires the
1218 creation of a temporary. */
1219 conv
->need_temporary_p
= true;
1224 /* Returns the implicit conversion sequence (see [over.ics]) from type
1225 FROM to type TO. The optional expression EXPR may affect the
1226 conversion. FLAGS are the usual overloading flags. Only
1227 LOOKUP_NO_CONVERSION is significant. If C_CAST_P is true, this
1228 conversion is coming from a C-style cast. */
1231 implicit_conversion (tree to
, tree from
, tree expr
, bool c_cast_p
,
1236 if (from
== error_mark_node
|| to
== error_mark_node
1237 || expr
== error_mark_node
)
1240 if (TREE_CODE (to
) == REFERENCE_TYPE
)
1241 conv
= reference_binding (to
, from
, expr
, c_cast_p
, flags
);
1243 conv
= standard_conversion (to
, from
, expr
, c_cast_p
, flags
);
1248 if (expr
!= NULL_TREE
1249 && (IS_AGGR_TYPE (from
)
1250 || IS_AGGR_TYPE (to
))
1251 && (flags
& LOOKUP_NO_CONVERSION
) == 0)
1253 struct z_candidate
*cand
;
1255 cand
= build_user_type_conversion_1
1256 (to
, expr
, LOOKUP_ONLYCONVERTING
);
1258 conv
= cand
->second_conv
;
1260 /* We used to try to bind a reference to a temporary here, but that
1261 is now handled by the recursive call to this function at the end
1262 of reference_binding. */
1269 /* Add a new entry to the list of candidates. Used by the add_*_candidate
1272 static struct z_candidate
*
1273 add_candidate (struct z_candidate
**candidates
,
1275 size_t num_convs
, conversion
**convs
,
1276 tree access_path
, tree conversion_path
,
1279 struct z_candidate
*cand
1280 = conversion_obstack_alloc (sizeof (struct z_candidate
));
1284 cand
->convs
= convs
;
1285 cand
->num_convs
= num_convs
;
1286 cand
->access_path
= access_path
;
1287 cand
->conversion_path
= conversion_path
;
1288 cand
->viable
= viable
;
1289 cand
->next
= *candidates
;
1295 /* Create an overload candidate for the function or method FN called with
1296 the argument list ARGLIST and add it to CANDIDATES. FLAGS is passed on
1297 to implicit_conversion.
1299 CTYPE, if non-NULL, is the type we want to pretend this function
1300 comes from for purposes of overload resolution. */
1302 static struct z_candidate
*
1303 add_function_candidate (struct z_candidate
**candidates
,
1304 tree fn
, tree ctype
, tree arglist
,
1305 tree access_path
, tree conversion_path
,
1308 tree parmlist
= TYPE_ARG_TYPES (TREE_TYPE (fn
));
1311 tree parmnode
, argnode
;
1315 /* At this point we should not see any functions which haven't been
1316 explicitly declared, except for friend functions which will have
1317 been found using argument dependent lookup. */
1318 gcc_assert (!DECL_ANTICIPATED (fn
) || DECL_HIDDEN_FRIEND_P (fn
));
1320 /* The `this', `in_chrg' and VTT arguments to constructors are not
1321 considered in overload resolution. */
1322 if (DECL_CONSTRUCTOR_P (fn
))
1324 parmlist
= skip_artificial_parms_for (fn
, parmlist
);
1325 orig_arglist
= arglist
;
1326 arglist
= skip_artificial_parms_for (fn
, arglist
);
1329 orig_arglist
= arglist
;
1331 len
= list_length (arglist
);
1332 convs
= alloc_conversions (len
);
1334 /* 13.3.2 - Viable functions [over.match.viable]
1335 First, to be a viable function, a candidate function shall have enough
1336 parameters to agree in number with the arguments in the list.
1338 We need to check this first; otherwise, checking the ICSes might cause
1339 us to produce an ill-formed template instantiation. */
1341 parmnode
= parmlist
;
1342 for (i
= 0; i
< len
; ++i
)
1344 if (parmnode
== NULL_TREE
|| parmnode
== void_list_node
)
1346 parmnode
= TREE_CHAIN (parmnode
);
1349 if (i
< len
&& parmnode
)
1352 /* Make sure there are default args for the rest of the parms. */
1353 else if (!sufficient_parms_p (parmnode
))
1359 /* Second, for F to be a viable function, there shall exist for each
1360 argument an implicit conversion sequence that converts that argument
1361 to the corresponding parameter of F. */
1363 parmnode
= parmlist
;
1366 for (i
= 0; i
< len
; ++i
)
1368 tree arg
= TREE_VALUE (argnode
);
1369 tree argtype
= lvalue_type (arg
);
1373 if (parmnode
== void_list_node
)
1376 is_this
= (i
== 0 && DECL_NONSTATIC_MEMBER_FUNCTION_P (fn
)
1377 && ! DECL_CONSTRUCTOR_P (fn
));
1381 tree parmtype
= TREE_VALUE (parmnode
);
1383 /* The type of the implicit object parameter ('this') for
1384 overload resolution is not always the same as for the
1385 function itself; conversion functions are considered to
1386 be members of the class being converted, and functions
1387 introduced by a using-declaration are considered to be
1388 members of the class that uses them.
1390 Since build_over_call ignores the ICS for the `this'
1391 parameter, we can just change the parm type. */
1392 if (ctype
&& is_this
)
1395 = build_qualified_type (ctype
,
1396 TYPE_QUALS (TREE_TYPE (parmtype
)));
1397 parmtype
= build_pointer_type (parmtype
);
1400 t
= implicit_conversion (parmtype
, argtype
, arg
,
1401 /*c_cast_p=*/false, flags
);
1405 t
= build_identity_conv (argtype
, arg
);
1406 t
->ellipsis_p
= true;
1423 parmnode
= TREE_CHAIN (parmnode
);
1424 argnode
= TREE_CHAIN (argnode
);
1428 return add_candidate (candidates
, fn
, orig_arglist
, len
, convs
,
1429 access_path
, conversion_path
, viable
);
1432 /* Create an overload candidate for the conversion function FN which will
1433 be invoked for expression OBJ, producing a pointer-to-function which
1434 will in turn be called with the argument list ARGLIST, and add it to
1435 CANDIDATES. FLAGS is passed on to implicit_conversion.
1437 Actually, we don't really care about FN; we care about the type it
1438 converts to. There may be multiple conversion functions that will
1439 convert to that type, and we rely on build_user_type_conversion_1 to
1440 choose the best one; so when we create our candidate, we record the type
1441 instead of the function. */
1443 static struct z_candidate
*
1444 add_conv_candidate (struct z_candidate
**candidates
, tree fn
, tree obj
,
1445 tree arglist
, tree access_path
, tree conversion_path
)
1447 tree totype
= TREE_TYPE (TREE_TYPE (fn
));
1448 int i
, len
, viable
, flags
;
1449 tree parmlist
, parmnode
, argnode
;
1452 for (parmlist
= totype
; TREE_CODE (parmlist
) != FUNCTION_TYPE
; )
1453 parmlist
= TREE_TYPE (parmlist
);
1454 parmlist
= TYPE_ARG_TYPES (parmlist
);
1456 len
= list_length (arglist
) + 1;
1457 convs
= alloc_conversions (len
);
1458 parmnode
= parmlist
;
1461 flags
= LOOKUP_NORMAL
;
1463 /* Don't bother looking up the same type twice. */
1464 if (*candidates
&& (*candidates
)->fn
== totype
)
1467 for (i
= 0; i
< len
; ++i
)
1469 tree arg
= i
== 0 ? obj
: TREE_VALUE (argnode
);
1470 tree argtype
= lvalue_type (arg
);
1474 t
= implicit_conversion (totype
, argtype
, arg
, /*c_cast_p=*/false,
1476 else if (parmnode
== void_list_node
)
1479 t
= implicit_conversion (TREE_VALUE (parmnode
), argtype
, arg
,
1480 /*c_cast_p=*/false, flags
);
1483 t
= build_identity_conv (argtype
, arg
);
1484 t
->ellipsis_p
= true;
1498 parmnode
= TREE_CHAIN (parmnode
);
1499 argnode
= TREE_CHAIN (argnode
);
1505 if (!sufficient_parms_p (parmnode
))
1508 return add_candidate (candidates
, totype
, arglist
, len
, convs
,
1509 access_path
, conversion_path
, viable
);
1513 build_builtin_candidate (struct z_candidate
**candidates
, tree fnname
,
1514 tree type1
, tree type2
, tree
*args
, tree
*argtypes
,
1526 num_convs
= args
[2] ? 3 : (args
[1] ? 2 : 1);
1527 convs
= alloc_conversions (num_convs
);
1529 for (i
= 0; i
< 2; ++i
)
1534 t
= implicit_conversion (types
[i
], argtypes
[i
], args
[i
],
1535 /*c_cast_p=*/false, flags
);
1539 /* We need something for printing the candidate. */
1540 t
= build_identity_conv (types
[i
], NULL_TREE
);
1547 /* For COND_EXPR we rearranged the arguments; undo that now. */
1550 convs
[2] = convs
[1];
1551 convs
[1] = convs
[0];
1552 t
= implicit_conversion (boolean_type_node
, argtypes
[2], args
[2],
1553 /*c_cast_p=*/false, flags
);
1560 add_candidate (candidates
, fnname
, /*args=*/NULL_TREE
,
1562 /*access_path=*/NULL_TREE
,
1563 /*conversion_path=*/NULL_TREE
,
1568 is_complete (tree t
)
1570 return COMPLETE_TYPE_P (complete_type (t
));
1573 /* Returns nonzero if TYPE is a promoted arithmetic type. */
1576 promoted_arithmetic_type_p (tree type
)
1580 In this section, the term promoted integral type is used to refer
1581 to those integral types which are preserved by integral promotion
1582 (including e.g. int and long but excluding e.g. char).
1583 Similarly, the term promoted arithmetic type refers to promoted
1584 integral types plus floating types. */
1585 return ((INTEGRAL_TYPE_P (type
)
1586 && same_type_p (type_promotes_to (type
), type
))
1587 || TREE_CODE (type
) == REAL_TYPE
);
1590 /* Create any builtin operator overload candidates for the operator in
1591 question given the converted operand types TYPE1 and TYPE2. The other
1592 args are passed through from add_builtin_candidates to
1593 build_builtin_candidate.
1595 TYPE1 and TYPE2 may not be permissible, and we must filter them.
1596 If CODE is requires candidates operands of the same type of the kind
1597 of which TYPE1 and TYPE2 are, we add both candidates
1598 CODE (TYPE1, TYPE1) and CODE (TYPE2, TYPE2). */
1601 add_builtin_candidate (struct z_candidate
**candidates
, enum tree_code code
,
1602 enum tree_code code2
, tree fnname
, tree type1
,
1603 tree type2
, tree
*args
, tree
*argtypes
, int flags
)
1607 case POSTINCREMENT_EXPR
:
1608 case POSTDECREMENT_EXPR
:
1609 args
[1] = integer_zero_node
;
1610 type2
= integer_type_node
;
1619 /* 4 For every pair T, VQ), where T is an arithmetic or enumeration type,
1620 and VQ is either volatile or empty, there exist candidate operator
1621 functions of the form
1622 VQ T& operator++(VQ T&);
1623 T operator++(VQ T&, int);
1624 5 For every pair T, VQ), where T is an enumeration type or an arithmetic
1625 type other than bool, and VQ is either volatile or empty, there exist
1626 candidate operator functions of the form
1627 VQ T& operator--(VQ T&);
1628 T operator--(VQ T&, int);
1629 6 For every pair T, VQ), where T is a cv-qualified or cv-unqualified
1630 complete object type, and VQ is either volatile or empty, there exist
1631 candidate operator functions of the form
1632 T*VQ& operator++(T*VQ&);
1633 T*VQ& operator--(T*VQ&);
1634 T* operator++(T*VQ&, int);
1635 T* operator--(T*VQ&, int); */
1637 case POSTDECREMENT_EXPR
:
1638 case PREDECREMENT_EXPR
:
1639 if (TREE_CODE (type1
) == BOOLEAN_TYPE
)
1641 case POSTINCREMENT_EXPR
:
1642 case PREINCREMENT_EXPR
:
1643 if (ARITHMETIC_TYPE_P (type1
) || TYPE_PTROB_P (type1
))
1645 type1
= build_reference_type (type1
);
1650 /* 7 For every cv-qualified or cv-unqualified complete object type T, there
1651 exist candidate operator functions of the form
1655 8 For every function type T, there exist candidate operator functions of
1657 T& operator*(T*); */
1660 if (TREE_CODE (type1
) == POINTER_TYPE
1661 && (TYPE_PTROB_P (type1
)
1662 || TREE_CODE (TREE_TYPE (type1
)) == FUNCTION_TYPE
))
1666 /* 9 For every type T, there exist candidate operator functions of the form
1669 10For every promoted arithmetic type T, there exist candidate operator
1670 functions of the form
1674 case UNARY_PLUS_EXPR
: /* unary + */
1675 if (TREE_CODE (type1
) == POINTER_TYPE
)
1678 if (ARITHMETIC_TYPE_P (type1
))
1682 /* 11For every promoted integral type T, there exist candidate operator
1683 functions of the form
1687 if (INTEGRAL_TYPE_P (type1
))
1691 /* 12For every quintuple C1, C2, T, CV1, CV2), where C2 is a class type, C1
1692 is the same type as C2 or is a derived class of C2, T is a complete
1693 object type or a function type, and CV1 and CV2 are cv-qualifier-seqs,
1694 there exist candidate operator functions of the form
1695 CV12 T& operator->*(CV1 C1*, CV2 T C2::*);
1696 where CV12 is the union of CV1 and CV2. */
1699 if (TREE_CODE (type1
) == POINTER_TYPE
1700 && TYPE_PTR_TO_MEMBER_P (type2
))
1702 tree c1
= TREE_TYPE (type1
);
1703 tree c2
= TYPE_PTRMEM_CLASS_TYPE (type2
);
1705 if (IS_AGGR_TYPE (c1
) && DERIVED_FROM_P (c2
, c1
)
1706 && (TYPE_PTRMEMFUNC_P (type2
)
1707 || is_complete (TYPE_PTRMEM_POINTED_TO_TYPE (type2
))))
1712 /* 13For every pair of promoted arithmetic types L and R, there exist can-
1713 didate operator functions of the form
1718 bool operator<(L, R);
1719 bool operator>(L, R);
1720 bool operator<=(L, R);
1721 bool operator>=(L, R);
1722 bool operator==(L, R);
1723 bool operator!=(L, R);
1724 where LR is the result of the usual arithmetic conversions between
1727 14For every pair of types T and I, where T is a cv-qualified or cv-
1728 unqualified complete object type and I is a promoted integral type,
1729 there exist candidate operator functions of the form
1730 T* operator+(T*, I);
1731 T& operator[](T*, I);
1732 T* operator-(T*, I);
1733 T* operator+(I, T*);
1734 T& operator[](I, T*);
1736 15For every T, where T is a pointer to complete object type, there exist
1737 candidate operator functions of the form112)
1738 ptrdiff_t operator-(T, T);
1740 16For every pointer or enumeration type T, there exist candidate operator
1741 functions of the form
1742 bool operator<(T, T);
1743 bool operator>(T, T);
1744 bool operator<=(T, T);
1745 bool operator>=(T, T);
1746 bool operator==(T, T);
1747 bool operator!=(T, T);
1749 17For every pointer to member type T, there exist candidate operator
1750 functions of the form
1751 bool operator==(T, T);
1752 bool operator!=(T, T); */
1755 if (TYPE_PTROB_P (type1
) && TYPE_PTROB_P (type2
))
1757 if (TYPE_PTROB_P (type1
) && INTEGRAL_TYPE_P (type2
))
1759 type2
= ptrdiff_type_node
;
1763 case TRUNC_DIV_EXPR
:
1764 if (ARITHMETIC_TYPE_P (type1
) && ARITHMETIC_TYPE_P (type2
))
1770 if ((TYPE_PTRMEMFUNC_P (type1
) && TYPE_PTRMEMFUNC_P (type2
))
1771 || (TYPE_PTRMEM_P (type1
) && TYPE_PTRMEM_P (type2
)))
1773 if (TYPE_PTR_TO_MEMBER_P (type1
) && null_ptr_cst_p (args
[1]))
1778 if (TYPE_PTR_TO_MEMBER_P (type2
) && null_ptr_cst_p (args
[0]))
1790 if (ARITHMETIC_TYPE_P (type1
) && ARITHMETIC_TYPE_P (type2
))
1792 if (TYPE_PTR_P (type1
) && TYPE_PTR_P (type2
))
1794 if (TREE_CODE (type1
) == ENUMERAL_TYPE
1795 && TREE_CODE (type2
) == ENUMERAL_TYPE
)
1797 if (TYPE_PTR_P (type1
)
1798 && null_ptr_cst_p (args
[1])
1799 && !uses_template_parms (type1
))
1804 if (null_ptr_cst_p (args
[0])
1805 && TYPE_PTR_P (type2
)
1806 && !uses_template_parms (type2
))
1814 if (ARITHMETIC_TYPE_P (type1
) && ARITHMETIC_TYPE_P (type2
))
1817 if (INTEGRAL_TYPE_P (type1
) && TYPE_PTROB_P (type2
))
1819 type1
= ptrdiff_type_node
;
1822 if (TYPE_PTROB_P (type1
) && INTEGRAL_TYPE_P (type2
))
1824 type2
= ptrdiff_type_node
;
1829 /* 18For every pair of promoted integral types L and R, there exist candi-
1830 date operator functions of the form
1837 where LR is the result of the usual arithmetic conversions between
1840 case TRUNC_MOD_EXPR
:
1846 if (INTEGRAL_TYPE_P (type1
) && INTEGRAL_TYPE_P (type2
))
1850 /* 19For every triple L, VQ, R), where L is an arithmetic or enumeration
1851 type, VQ is either volatile or empty, and R is a promoted arithmetic
1852 type, there exist candidate operator functions of the form
1853 VQ L& operator=(VQ L&, R);
1854 VQ L& operator*=(VQ L&, R);
1855 VQ L& operator/=(VQ L&, R);
1856 VQ L& operator+=(VQ L&, R);
1857 VQ L& operator-=(VQ L&, R);
1859 20For every pair T, VQ), where T is any type and VQ is either volatile
1860 or empty, there exist candidate operator functions of the form
1861 T*VQ& operator=(T*VQ&, T*);
1863 21For every pair T, VQ), where T is a pointer to member type and VQ is
1864 either volatile or empty, there exist candidate operator functions of
1866 VQ T& operator=(VQ T&, T);
1868 22For every triple T, VQ, I), where T is a cv-qualified or cv-
1869 unqualified complete object type, VQ is either volatile or empty, and
1870 I is a promoted integral type, there exist candidate operator func-
1872 T*VQ& operator+=(T*VQ&, I);
1873 T*VQ& operator-=(T*VQ&, I);
1875 23For every triple L, VQ, R), where L is an integral or enumeration
1876 type, VQ is either volatile or empty, and R is a promoted integral
1877 type, there exist candidate operator functions of the form
1879 VQ L& operator%=(VQ L&, R);
1880 VQ L& operator<<=(VQ L&, R);
1881 VQ L& operator>>=(VQ L&, R);
1882 VQ L& operator&=(VQ L&, R);
1883 VQ L& operator^=(VQ L&, R);
1884 VQ L& operator|=(VQ L&, R); */
1891 if (TYPE_PTROB_P (type1
) && INTEGRAL_TYPE_P (type2
))
1893 type2
= ptrdiff_type_node
;
1897 case TRUNC_DIV_EXPR
:
1898 if (ARITHMETIC_TYPE_P (type1
) && ARITHMETIC_TYPE_P (type2
))
1902 case TRUNC_MOD_EXPR
:
1908 if (INTEGRAL_TYPE_P (type1
) && INTEGRAL_TYPE_P (type2
))
1913 if (ARITHMETIC_TYPE_P (type1
) && ARITHMETIC_TYPE_P (type2
))
1915 if ((TYPE_PTRMEMFUNC_P (type1
) && TYPE_PTRMEMFUNC_P (type2
))
1916 || (TYPE_PTR_P (type1
) && TYPE_PTR_P (type2
))
1917 || (TYPE_PTRMEM_P (type1
) && TYPE_PTRMEM_P (type2
))
1918 || ((TYPE_PTRMEMFUNC_P (type1
)
1919 || TREE_CODE (type1
) == POINTER_TYPE
)
1920 && null_ptr_cst_p (args
[1])))
1930 type1
= build_reference_type (type1
);
1936 For every pair of promoted arithmetic types L and R, there
1937 exist candidate operator functions of the form
1939 LR operator?(bool, L, R);
1941 where LR is the result of the usual arithmetic conversions
1942 between types L and R.
1944 For every type T, where T is a pointer or pointer-to-member
1945 type, there exist candidate operator functions of the form T
1946 operator?(bool, T, T); */
1948 if (promoted_arithmetic_type_p (type1
)
1949 && promoted_arithmetic_type_p (type2
))
1953 /* Otherwise, the types should be pointers. */
1954 if (!(TYPE_PTR_P (type1
) || TYPE_PTR_TO_MEMBER_P (type1
))
1955 || !(TYPE_PTR_P (type2
) || TYPE_PTR_TO_MEMBER_P (type2
)))
1958 /* We don't check that the two types are the same; the logic
1959 below will actually create two candidates; one in which both
1960 parameter types are TYPE1, and one in which both parameter
1968 /* If we're dealing with two pointer types or two enumeral types,
1969 we need candidates for both of them. */
1970 if (type2
&& !same_type_p (type1
, type2
)
1971 && TREE_CODE (type1
) == TREE_CODE (type2
)
1972 && (TREE_CODE (type1
) == REFERENCE_TYPE
1973 || (TYPE_PTR_P (type1
) && TYPE_PTR_P (type2
))
1974 || (TYPE_PTRMEM_P (type1
) && TYPE_PTRMEM_P (type2
))
1975 || TYPE_PTRMEMFUNC_P (type1
)
1976 || IS_AGGR_TYPE (type1
)
1977 || TREE_CODE (type1
) == ENUMERAL_TYPE
))
1979 build_builtin_candidate
1980 (candidates
, fnname
, type1
, type1
, args
, argtypes
, flags
);
1981 build_builtin_candidate
1982 (candidates
, fnname
, type2
, type2
, args
, argtypes
, flags
);
1986 build_builtin_candidate
1987 (candidates
, fnname
, type1
, type2
, args
, argtypes
, flags
);
1991 type_decays_to (tree type
)
1993 if (TREE_CODE (type
) == ARRAY_TYPE
)
1994 return build_pointer_type (TREE_TYPE (type
));
1995 if (TREE_CODE (type
) == FUNCTION_TYPE
)
1996 return build_pointer_type (type
);
2000 /* There are three conditions of builtin candidates:
2002 1) bool-taking candidates. These are the same regardless of the input.
2003 2) pointer-pair taking candidates. These are generated for each type
2004 one of the input types converts to.
2005 3) arithmetic candidates. According to the standard, we should generate
2006 all of these, but I'm trying not to...
2008 Here we generate a superset of the possible candidates for this particular
2009 case. That is a subset of the full set the standard defines, plus some
2010 other cases which the standard disallows. add_builtin_candidate will
2011 filter out the invalid set. */
2014 add_builtin_candidates (struct z_candidate
**candidates
, enum tree_code code
,
2015 enum tree_code code2
, tree fnname
, tree
*args
,
2020 tree type
, argtypes
[3];
2021 /* TYPES[i] is the set of possible builtin-operator parameter types
2022 we will consider for the Ith argument. These are represented as
2023 a TREE_LIST; the TREE_VALUE of each node is the potential
2027 for (i
= 0; i
< 3; ++i
)
2030 argtypes
[i
] = lvalue_type (args
[i
]);
2032 argtypes
[i
] = NULL_TREE
;
2037 /* 4 For every pair T, VQ), where T is an arithmetic or enumeration type,
2038 and VQ is either volatile or empty, there exist candidate operator
2039 functions of the form
2040 VQ T& operator++(VQ T&); */
2042 case POSTINCREMENT_EXPR
:
2043 case PREINCREMENT_EXPR
:
2044 case POSTDECREMENT_EXPR
:
2045 case PREDECREMENT_EXPR
:
2050 /* 24There also exist candidate operator functions of the form
2051 bool operator!(bool);
2052 bool operator&&(bool, bool);
2053 bool operator||(bool, bool); */
2055 case TRUTH_NOT_EXPR
:
2056 build_builtin_candidate
2057 (candidates
, fnname
, boolean_type_node
,
2058 NULL_TREE
, args
, argtypes
, flags
);
2061 case TRUTH_ORIF_EXPR
:
2062 case TRUTH_ANDIF_EXPR
:
2063 build_builtin_candidate
2064 (candidates
, fnname
, boolean_type_node
,
2065 boolean_type_node
, args
, argtypes
, flags
);
2087 types
[0] = types
[1] = NULL_TREE
;
2089 for (i
= 0; i
< 2; ++i
)
2093 else if (IS_AGGR_TYPE (argtypes
[i
]))
2097 if (i
== 0 && code
== MODIFY_EXPR
&& code2
== NOP_EXPR
)
2100 convs
= lookup_conversions (argtypes
[i
]);
2102 if (code
== COND_EXPR
)
2104 if (real_lvalue_p (args
[i
]))
2105 types
[i
] = tree_cons
2106 (NULL_TREE
, build_reference_type (argtypes
[i
]), types
[i
]);
2108 types
[i
] = tree_cons
2109 (NULL_TREE
, TYPE_MAIN_VARIANT (argtypes
[i
]), types
[i
]);
2115 for (; convs
; convs
= TREE_CHAIN (convs
))
2117 type
= TREE_TYPE (TREE_TYPE (OVL_CURRENT (TREE_VALUE (convs
))));
2120 && (TREE_CODE (type
) != REFERENCE_TYPE
2121 || CP_TYPE_CONST_P (TREE_TYPE (type
))))
2124 if (code
== COND_EXPR
&& TREE_CODE (type
) == REFERENCE_TYPE
)
2125 types
[i
] = tree_cons (NULL_TREE
, type
, types
[i
]);
2127 type
= non_reference (type
);
2128 if (i
!= 0 || ! ref1
)
2130 type
= TYPE_MAIN_VARIANT (type_decays_to (type
));
2131 if (enum_p
&& TREE_CODE (type
) == ENUMERAL_TYPE
)
2132 types
[i
] = tree_cons (NULL_TREE
, type
, types
[i
]);
2133 if (INTEGRAL_TYPE_P (type
))
2134 type
= type_promotes_to (type
);
2137 if (! value_member (type
, types
[i
]))
2138 types
[i
] = tree_cons (NULL_TREE
, type
, types
[i
]);
2143 if (code
== COND_EXPR
&& real_lvalue_p (args
[i
]))
2144 types
[i
] = tree_cons
2145 (NULL_TREE
, build_reference_type (argtypes
[i
]), types
[i
]);
2146 type
= non_reference (argtypes
[i
]);
2147 if (i
!= 0 || ! ref1
)
2149 type
= TYPE_MAIN_VARIANT (type_decays_to (type
));
2150 if (enum_p
&& TREE_CODE (type
) == ENUMERAL_TYPE
)
2151 types
[i
] = tree_cons (NULL_TREE
, type
, types
[i
]);
2152 if (INTEGRAL_TYPE_P (type
))
2153 type
= type_promotes_to (type
);
2155 types
[i
] = tree_cons (NULL_TREE
, type
, types
[i
]);
2159 /* Run through the possible parameter types of both arguments,
2160 creating candidates with those parameter types. */
2161 for (; types
[0]; types
[0] = TREE_CHAIN (types
[0]))
2164 for (type
= types
[1]; type
; type
= TREE_CHAIN (type
))
2165 add_builtin_candidate
2166 (candidates
, code
, code2
, fnname
, TREE_VALUE (types
[0]),
2167 TREE_VALUE (type
), args
, argtypes
, flags
);
2169 add_builtin_candidate
2170 (candidates
, code
, code2
, fnname
, TREE_VALUE (types
[0]),
2171 NULL_TREE
, args
, argtypes
, flags
);
2178 /* If TMPL can be successfully instantiated as indicated by
2179 EXPLICIT_TARGS and ARGLIST, adds the instantiation to CANDIDATES.
2181 TMPL is the template. EXPLICIT_TARGS are any explicit template
2182 arguments. ARGLIST is the arguments provided at the call-site.
2183 The RETURN_TYPE is the desired type for conversion operators. If
2184 OBJ is NULL_TREE, FLAGS and CTYPE are as for add_function_candidate.
2185 If an OBJ is supplied, FLAGS and CTYPE are ignored, and OBJ is as for
2186 add_conv_candidate. */
2188 static struct z_candidate
*
2189 add_template_candidate_real (struct z_candidate
**candidates
, tree tmpl
,
2190 tree ctype
, tree explicit_targs
, tree arglist
,
2191 tree return_type
, tree access_path
,
2192 tree conversion_path
, int flags
, tree obj
,
2193 unification_kind_t strict
)
2195 int ntparms
= DECL_NTPARMS (tmpl
);
2196 tree targs
= make_tree_vec (ntparms
);
2197 tree args_without_in_chrg
= arglist
;
2198 struct z_candidate
*cand
;
2202 /* We don't do deduction on the in-charge parameter, the VTT
2203 parameter or 'this'. */
2204 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (tmpl
))
2205 args_without_in_chrg
= TREE_CHAIN (args_without_in_chrg
);
2207 if ((DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (tmpl
)
2208 || DECL_BASE_CONSTRUCTOR_P (tmpl
))
2209 && CLASSTYPE_VBASECLASSES (DECL_CONTEXT (tmpl
)))
2210 args_without_in_chrg
= TREE_CHAIN (args_without_in_chrg
);
2212 i
= fn_type_unification (tmpl
, explicit_targs
, targs
,
2213 args_without_in_chrg
,
2214 return_type
, strict
, flags
);
2219 fn
= instantiate_template (tmpl
, targs
, tf_none
);
2220 if (fn
== error_mark_node
)
2225 A member function template is never instantiated to perform the
2226 copy of a class object to an object of its class type.
2228 It's a little unclear what this means; the standard explicitly
2229 does allow a template to be used to copy a class. For example,
2234 template <class T> A(const T&);
2237 void g () { A a (f ()); }
2239 the member template will be used to make the copy. The section
2240 quoted above appears in the paragraph that forbids constructors
2241 whose only parameter is (a possibly cv-qualified variant of) the
2242 class type, and a logical interpretation is that the intent was
2243 to forbid the instantiation of member templates which would then
2245 if (DECL_CONSTRUCTOR_P (fn
) && list_length (arglist
) == 2)
2247 tree arg_types
= FUNCTION_FIRST_USER_PARMTYPE (fn
);
2248 if (arg_types
&& same_type_p (TYPE_MAIN_VARIANT (TREE_VALUE (arg_types
)),
2253 if (obj
!= NULL_TREE
)
2254 /* Aha, this is a conversion function. */
2255 cand
= add_conv_candidate (candidates
, fn
, obj
, access_path
,
2256 conversion_path
, arglist
);
2258 cand
= add_function_candidate (candidates
, fn
, ctype
,
2259 arglist
, access_path
,
2260 conversion_path
, flags
);
2261 if (DECL_TI_TEMPLATE (fn
) != tmpl
)
2262 /* This situation can occur if a member template of a template
2263 class is specialized. Then, instantiate_template might return
2264 an instantiation of the specialization, in which case the
2265 DECL_TI_TEMPLATE field will point at the original
2266 specialization. For example:
2268 template <class T> struct S { template <class U> void f(U);
2269 template <> void f(int) {}; };
2273 Here, TMPL will be template <class U> S<double>::f(U).
2274 And, instantiate template will give us the specialization
2275 template <> S<double>::f(int). But, the DECL_TI_TEMPLATE field
2276 for this will point at template <class T> template <> S<T>::f(int),
2277 so that we can find the definition. For the purposes of
2278 overload resolution, however, we want the original TMPL. */
2279 cand
->template_decl
= tree_cons (tmpl
, targs
, NULL_TREE
);
2281 cand
->template_decl
= DECL_TEMPLATE_INFO (fn
);
2287 static struct z_candidate
*
2288 add_template_candidate (struct z_candidate
**candidates
, tree tmpl
, tree ctype
,
2289 tree explicit_targs
, tree arglist
, tree return_type
,
2290 tree access_path
, tree conversion_path
, int flags
,
2291 unification_kind_t strict
)
2294 add_template_candidate_real (candidates
, tmpl
, ctype
,
2295 explicit_targs
, arglist
, return_type
,
2296 access_path
, conversion_path
,
2297 flags
, NULL_TREE
, strict
);
2301 static struct z_candidate
*
2302 add_template_conv_candidate (struct z_candidate
**candidates
, tree tmpl
,
2303 tree obj
, tree arglist
, tree return_type
,
2304 tree access_path
, tree conversion_path
)
2307 add_template_candidate_real (candidates
, tmpl
, NULL_TREE
, NULL_TREE
,
2308 arglist
, return_type
, access_path
,
2309 conversion_path
, 0, obj
, DEDUCE_CONV
);
2312 /* The CANDS are the set of candidates that were considered for
2313 overload resolution. Return the set of viable candidates. If none
2314 of the candidates were viable, set *ANY_VIABLE_P to true. STRICT_P
2315 is true if a candidate should be considered viable only if it is
2318 static struct z_candidate
*
2319 splice_viable (struct z_candidate
*cands
,
2323 struct z_candidate
*viable
;
2324 struct z_candidate
**last_viable
;
2325 struct z_candidate
**cand
;
2328 last_viable
= &viable
;
2329 *any_viable_p
= false;
2334 struct z_candidate
*c
= *cand
;
2335 if (strict_p
? c
->viable
== 1 : c
->viable
)
2340 last_viable
= &c
->next
;
2341 *any_viable_p
= true;
2347 return viable
? viable
: cands
;
2351 any_strictly_viable (struct z_candidate
*cands
)
2353 for (; cands
; cands
= cands
->next
)
2354 if (cands
->viable
== 1)
2359 /* OBJ is being used in an expression like "OBJ.f (...)". In other
2360 words, it is about to become the "this" pointer for a member
2361 function call. Take the address of the object. */
2364 build_this (tree obj
)
2366 /* In a template, we are only concerned about the type of the
2367 expression, so we can take a shortcut. */
2368 if (processing_template_decl
)
2369 return build_address (obj
);
2371 return build_unary_op (ADDR_EXPR
, obj
, 0);
2374 /* Returns true iff functions are equivalent. Equivalent functions are
2375 not '==' only if one is a function-local extern function or if
2376 both are extern "C". */
2379 equal_functions (tree fn1
, tree fn2
)
2381 if (DECL_LOCAL_FUNCTION_P (fn1
) || DECL_LOCAL_FUNCTION_P (fn2
)
2382 || DECL_EXTERN_C_FUNCTION_P (fn1
))
2383 return decls_match (fn1
, fn2
);
2387 /* Print information about one overload candidate CANDIDATE. MSGSTR
2388 is the text to print before the candidate itself.
2390 NOTE: Unlike most diagnostic functions in GCC, MSGSTR is expected
2391 to have been run through gettext by the caller. This wart makes
2392 life simpler in print_z_candidates and for the translators. */
2395 print_z_candidate (const char *msgstr
, struct z_candidate
*candidate
)
2397 if (TREE_CODE (candidate
->fn
) == IDENTIFIER_NODE
)
2399 if (candidate
->num_convs
== 3)
2400 inform ("%s %D(%T, %T, %T) <built-in>", msgstr
, candidate
->fn
,
2401 candidate
->convs
[0]->type
,
2402 candidate
->convs
[1]->type
,
2403 candidate
->convs
[2]->type
);
2404 else if (candidate
->num_convs
== 2)
2405 inform ("%s %D(%T, %T) <built-in>", msgstr
, candidate
->fn
,
2406 candidate
->convs
[0]->type
,
2407 candidate
->convs
[1]->type
);
2409 inform ("%s %D(%T) <built-in>", msgstr
, candidate
->fn
,
2410 candidate
->convs
[0]->type
);
2412 else if (TYPE_P (candidate
->fn
))
2413 inform ("%s %T <conversion>", msgstr
, candidate
->fn
);
2414 else if (candidate
->viable
== -1)
2415 inform ("%s %+#D <near match>", msgstr
, candidate
->fn
);
2417 inform ("%s %+#D", msgstr
, candidate
->fn
);
2421 print_z_candidates (struct z_candidate
*candidates
)
2424 struct z_candidate
*cand1
;
2425 struct z_candidate
**cand2
;
2427 /* There may be duplicates in the set of candidates. We put off
2428 checking this condition as long as possible, since we have no way
2429 to eliminate duplicates from a set of functions in less than n^2
2430 time. Now we are about to emit an error message, so it is more
2431 permissible to go slowly. */
2432 for (cand1
= candidates
; cand1
; cand1
= cand1
->next
)
2434 tree fn
= cand1
->fn
;
2435 /* Skip builtin candidates and conversion functions. */
2436 if (TREE_CODE (fn
) != FUNCTION_DECL
)
2438 cand2
= &cand1
->next
;
2441 if (TREE_CODE ((*cand2
)->fn
) == FUNCTION_DECL
2442 && equal_functions (fn
, (*cand2
)->fn
))
2443 *cand2
= (*cand2
)->next
;
2445 cand2
= &(*cand2
)->next
;
2452 str
= _("candidates are:");
2453 print_z_candidate (str
, candidates
);
2454 if (candidates
->next
)
2456 /* Indent successive candidates by the width of the translation
2457 of the above string. */
2458 size_t len
= gcc_gettext_width (str
) + 1;
2459 char *spaces
= alloca (len
);
2460 memset (spaces
, ' ', len
-1);
2461 spaces
[len
- 1] = '\0';
2463 candidates
= candidates
->next
;
2466 print_z_candidate (spaces
, candidates
);
2467 candidates
= candidates
->next
;
2473 /* USER_SEQ is a user-defined conversion sequence, beginning with a
2474 USER_CONV. STD_SEQ is the standard conversion sequence applied to
2475 the result of the conversion function to convert it to the final
2476 desired type. Merge the two sequences into a single sequence,
2477 and return the merged sequence. */
2480 merge_conversion_sequences (conversion
*user_seq
, conversion
*std_seq
)
2484 gcc_assert (user_seq
->kind
== ck_user
);
2486 /* Find the end of the second conversion sequence. */
2488 while ((*t
)->kind
!= ck_identity
)
2489 t
= &((*t
)->u
.next
);
2491 /* Replace the identity conversion with the user conversion
2495 /* The entire sequence is a user-conversion sequence. */
2496 std_seq
->user_conv_p
= true;
2501 /* Returns the best overload candidate to perform the requested
2502 conversion. This function is used for three the overloading situations
2503 described in [over.match.copy], [over.match.conv], and [over.match.ref].
2504 If TOTYPE is a REFERENCE_TYPE, we're trying to find an lvalue binding as
2505 per [dcl.init.ref], so we ignore temporary bindings. */
2507 static struct z_candidate
*
2508 build_user_type_conversion_1 (tree totype
, tree expr
, int flags
)
2510 struct z_candidate
*candidates
, *cand
;
2511 tree fromtype
= TREE_TYPE (expr
);
2512 tree ctors
= NULL_TREE
;
2513 tree conv_fns
= NULL_TREE
;
2514 conversion
*conv
= NULL
;
2515 tree args
= NULL_TREE
;
2518 /* We represent conversion within a hierarchy using RVALUE_CONV and
2519 BASE_CONV, as specified by [over.best.ics]; these become plain
2520 constructor calls, as specified in [dcl.init]. */
2521 gcc_assert (!IS_AGGR_TYPE (fromtype
) || !IS_AGGR_TYPE (totype
)
2522 || !DERIVED_FROM_P (totype
, fromtype
));
2524 if (IS_AGGR_TYPE (totype
))
2525 ctors
= lookup_fnfields (totype
, complete_ctor_identifier
, 0);
2527 if (IS_AGGR_TYPE (fromtype
))
2528 conv_fns
= lookup_conversions (fromtype
);
2531 flags
|= LOOKUP_NO_CONVERSION
;
2537 ctors
= BASELINK_FUNCTIONS (ctors
);
2539 t
= build_int_cst (build_pointer_type (totype
), 0);
2540 args
= build_tree_list (NULL_TREE
, expr
);
2541 /* We should never try to call the abstract or base constructor
2543 gcc_assert (!DECL_HAS_IN_CHARGE_PARM_P (OVL_CURRENT (ctors
))
2544 && !DECL_HAS_VTT_PARM_P (OVL_CURRENT (ctors
)));
2545 args
= tree_cons (NULL_TREE
, t
, args
);
2547 for (; ctors
; ctors
= OVL_NEXT (ctors
))
2549 tree ctor
= OVL_CURRENT (ctors
);
2550 if (DECL_NONCONVERTING_P (ctor
))
2553 if (TREE_CODE (ctor
) == TEMPLATE_DECL
)
2554 cand
= add_template_candidate (&candidates
, ctor
, totype
,
2555 NULL_TREE
, args
, NULL_TREE
,
2556 TYPE_BINFO (totype
),
2557 TYPE_BINFO (totype
),
2561 cand
= add_function_candidate (&candidates
, ctor
, totype
,
2562 args
, TYPE_BINFO (totype
),
2563 TYPE_BINFO (totype
),
2567 cand
->second_conv
= build_identity_conv (totype
, NULL_TREE
);
2571 args
= build_tree_list (NULL_TREE
, build_this (expr
));
2573 for (; conv_fns
; conv_fns
= TREE_CHAIN (conv_fns
))
2576 tree conversion_path
= TREE_PURPOSE (conv_fns
);
2577 int convflags
= LOOKUP_NO_CONVERSION
;
2579 /* If we are called to convert to a reference type, we are trying to
2580 find an lvalue binding, so don't even consider temporaries. If
2581 we don't find an lvalue binding, the caller will try again to
2582 look for a temporary binding. */
2583 if (TREE_CODE (totype
) == REFERENCE_TYPE
)
2584 convflags
|= LOOKUP_NO_TEMP_BIND
;
2586 for (fns
= TREE_VALUE (conv_fns
); fns
; fns
= OVL_NEXT (fns
))
2588 tree fn
= OVL_CURRENT (fns
);
2590 /* [over.match.funcs] For conversion functions, the function
2591 is considered to be a member of the class of the implicit
2592 object argument for the purpose of defining the type of
2593 the implicit object parameter.
2595 So we pass fromtype as CTYPE to add_*_candidate. */
2597 if (TREE_CODE (fn
) == TEMPLATE_DECL
)
2598 cand
= add_template_candidate (&candidates
, fn
, fromtype
,
2601 TYPE_BINFO (fromtype
),
2606 cand
= add_function_candidate (&candidates
, fn
, fromtype
,
2608 TYPE_BINFO (fromtype
),
2615 = implicit_conversion (totype
,
2616 TREE_TYPE (TREE_TYPE (cand
->fn
)),
2618 /*c_cast_p=*/false, convflags
);
2620 cand
->second_conv
= ics
;
2624 else if (candidates
->viable
== 1 && ics
->bad_p
)
2630 candidates
= splice_viable (candidates
, pedantic
, &any_viable_p
);
2634 cand
= tourney (candidates
);
2637 if (flags
& LOOKUP_COMPLAIN
)
2639 error ("conversion from %qT to %qT is ambiguous",
2641 print_z_candidates (candidates
);
2644 cand
= candidates
; /* any one will do */
2645 cand
->second_conv
= build_ambiguous_conv (totype
, expr
);
2646 cand
->second_conv
->user_conv_p
= true;
2647 if (!any_strictly_viable (candidates
))
2648 cand
->second_conv
->bad_p
= true;
2649 /* If there are viable candidates, don't set ICS_BAD_FLAG; an
2650 ambiguous conversion is no worse than another user-defined
2656 /* Build the user conversion sequence. */
2659 (DECL_CONSTRUCTOR_P (cand
->fn
)
2660 ? totype
: non_reference (TREE_TYPE (TREE_TYPE (cand
->fn
)))),
2661 build_identity_conv (TREE_TYPE (expr
), expr
));
2664 /* Combine it with the second conversion sequence. */
2665 cand
->second_conv
= merge_conversion_sequences (conv
,
2668 if (cand
->viable
== -1)
2669 cand
->second_conv
->bad_p
= true;
2675 build_user_type_conversion (tree totype
, tree expr
, int flags
)
2677 struct z_candidate
*cand
2678 = build_user_type_conversion_1 (totype
, expr
, flags
);
2682 if (cand
->second_conv
->kind
== ck_ambig
)
2683 return error_mark_node
;
2684 expr
= convert_like (cand
->second_conv
, expr
);
2685 return convert_from_reference (expr
);
2690 /* Do any initial processing on the arguments to a function call. */
2693 resolve_args (tree args
)
2696 for (t
= args
; t
; t
= TREE_CHAIN (t
))
2698 tree arg
= TREE_VALUE (t
);
2700 if (error_operand_p (arg
))
2701 return error_mark_node
;
2702 else if (VOID_TYPE_P (TREE_TYPE (arg
)))
2704 error ("invalid use of void expression");
2705 return error_mark_node
;
2707 else if (invalid_nonstatic_memfn_p (arg
))
2708 return error_mark_node
;
2713 /* Perform overload resolution on FN, which is called with the ARGS.
2715 Return the candidate function selected by overload resolution, or
2716 NULL if the event that overload resolution failed. In the case
2717 that overload resolution fails, *CANDIDATES will be the set of
2718 candidates considered, and ANY_VIABLE_P will be set to true or
2719 false to indicate whether or not any of the candidates were
2722 The ARGS should already have gone through RESOLVE_ARGS before this
2723 function is called. */
2725 static struct z_candidate
*
2726 perform_overload_resolution (tree fn
,
2728 struct z_candidate
**candidates
,
2731 struct z_candidate
*cand
;
2732 tree explicit_targs
= NULL_TREE
;
2733 int template_only
= 0;
2736 *any_viable_p
= true;
2738 /* Check FN and ARGS. */
2739 gcc_assert (TREE_CODE (fn
) == FUNCTION_DECL
2740 || TREE_CODE (fn
) == TEMPLATE_DECL
2741 || TREE_CODE (fn
) == OVERLOAD
2742 || TREE_CODE (fn
) == TEMPLATE_ID_EXPR
);
2743 gcc_assert (!args
|| TREE_CODE (args
) == TREE_LIST
);
2745 if (TREE_CODE (fn
) == TEMPLATE_ID_EXPR
)
2747 explicit_targs
= TREE_OPERAND (fn
, 1);
2748 fn
= TREE_OPERAND (fn
, 0);
2752 /* Add the various candidate functions. */
2753 add_candidates (fn
, args
, explicit_targs
, template_only
,
2754 /*conversion_path=*/NULL_TREE
,
2755 /*access_path=*/NULL_TREE
,
2759 *candidates
= splice_viable (*candidates
, pedantic
, any_viable_p
);
2763 cand
= tourney (*candidates
);
2767 /* Return an expression for a call to FN (a namespace-scope function,
2768 or a static member function) with the ARGS. */
2771 build_new_function_call (tree fn
, tree args
, bool koenig_p
)
2773 struct z_candidate
*candidates
, *cand
;
2778 args
= resolve_args (args
);
2779 if (args
== error_mark_node
)
2780 return error_mark_node
;
2782 /* If this function was found without using argument dependent
2783 lookup, then we want to ignore any undeclared friend
2789 fn
= remove_hidden_names (fn
);
2792 error ("no matching function for call to %<%D(%A)%>",
2793 DECL_NAME (OVL_CURRENT (orig_fn
)), args
);
2794 return error_mark_node
;
2798 /* Get the high-water mark for the CONVERSION_OBSTACK. */
2799 p
= conversion_obstack_alloc (0);
2801 cand
= perform_overload_resolution (fn
, args
, &candidates
, &any_viable_p
);
2805 if (!any_viable_p
&& candidates
&& ! candidates
->next
)
2806 return build_function_call (candidates
->fn
, args
);
2807 if (TREE_CODE (fn
) == TEMPLATE_ID_EXPR
)
2808 fn
= TREE_OPERAND (fn
, 0);
2810 error ("no matching function for call to %<%D(%A)%>",
2811 DECL_NAME (OVL_CURRENT (fn
)), args
);
2813 error ("call of overloaded %<%D(%A)%> is ambiguous",
2814 DECL_NAME (OVL_CURRENT (fn
)), args
);
2816 print_z_candidates (candidates
);
2817 result
= error_mark_node
;
2820 result
= build_over_call (cand
, LOOKUP_NORMAL
);
2822 /* Free all the conversions we allocated. */
2823 obstack_free (&conversion_obstack
, p
);
2828 /* Build a call to a global operator new. FNNAME is the name of the
2829 operator (either "operator new" or "operator new[]") and ARGS are
2830 the arguments provided. *SIZE points to the total number of bytes
2831 required by the allocation, and is updated if that is changed here.
2832 *COOKIE_SIZE is non-NULL if a cookie should be used. If this
2833 function determines that no cookie should be used, after all,
2834 *COOKIE_SIZE is set to NULL_TREE. */
2837 build_operator_new_call (tree fnname
, tree args
, tree
*size
, tree
*cookie_size
)
2840 struct z_candidate
*candidates
;
2841 struct z_candidate
*cand
;
2844 args
= tree_cons (NULL_TREE
, *size
, args
);
2845 args
= resolve_args (args
);
2846 if (args
== error_mark_node
)
2853 If this lookup fails to find the name, or if the allocated type
2854 is not a class type, the allocation function's name is looked
2855 up in the global scope.
2857 we disregard block-scope declarations of "operator new". */
2858 fns
= lookup_function_nonclass (fnname
, args
, /*block_p=*/false);
2860 /* Figure out what function is being called. */
2861 cand
= perform_overload_resolution (fns
, args
, &candidates
, &any_viable_p
);
2863 /* If no suitable function could be found, issue an error message
2868 error ("no matching function for call to %<%D(%A)%>",
2869 DECL_NAME (OVL_CURRENT (fns
)), args
);
2871 error ("call of overloaded %<%D(%A)%> is ambiguous",
2872 DECL_NAME (OVL_CURRENT (fns
)), args
);
2874 print_z_candidates (candidates
);
2875 return error_mark_node
;
2878 /* If a cookie is required, add some extra space. Whether
2879 or not a cookie is required cannot be determined until
2880 after we know which function was called. */
2883 bool use_cookie
= true;
2884 if (!abi_version_at_least (2))
2886 tree placement
= TREE_CHAIN (args
);
2887 /* In G++ 3.2, the check was implemented incorrectly; it
2888 looked at the placement expression, rather than the
2889 type of the function. */
2890 if (placement
&& !TREE_CHAIN (placement
)
2891 && same_type_p (TREE_TYPE (TREE_VALUE (placement
)),
2899 arg_types
= TYPE_ARG_TYPES (TREE_TYPE (cand
->fn
));
2900 /* Skip the size_t parameter. */
2901 arg_types
= TREE_CHAIN (arg_types
);
2902 /* Check the remaining parameters (if any). */
2904 && TREE_CHAIN (arg_types
) == void_list_node
2905 && same_type_p (TREE_VALUE (arg_types
),
2909 /* If we need a cookie, adjust the number of bytes allocated. */
2912 /* Update the total size. */
2913 *size
= size_binop (PLUS_EXPR
, *size
, *cookie_size
);
2914 /* Update the argument list to reflect the adjusted size. */
2915 TREE_VALUE (args
) = *size
;
2918 *cookie_size
= NULL_TREE
;
2921 /* Build the CALL_EXPR. */
2922 return build_over_call (cand
, LOOKUP_NORMAL
);
2926 build_object_call (tree obj
, tree args
)
2928 struct z_candidate
*candidates
= 0, *cand
;
2929 tree fns
, convs
, mem_args
= NULL_TREE
;
2930 tree type
= TREE_TYPE (obj
);
2932 tree result
= NULL_TREE
;
2935 if (TYPE_PTRMEMFUNC_P (type
))
2937 /* It's no good looking for an overloaded operator() on a
2938 pointer-to-member-function. */
2939 error ("pointer-to-member function %E cannot be called without an object; consider using .* or ->*", obj
);
2940 return error_mark_node
;
2943 if (TYPE_BINFO (type
))
2945 fns
= lookup_fnfields (TYPE_BINFO (type
), ansi_opname (CALL_EXPR
), 1);
2946 if (fns
== error_mark_node
)
2947 return error_mark_node
;
2952 args
= resolve_args (args
);
2954 if (args
== error_mark_node
)
2955 return error_mark_node
;
2957 /* Get the high-water mark for the CONVERSION_OBSTACK. */
2958 p
= conversion_obstack_alloc (0);
2962 tree base
= BINFO_TYPE (BASELINK_BINFO (fns
));
2963 mem_args
= tree_cons (NULL_TREE
, build_this (obj
), args
);
2965 for (fns
= BASELINK_FUNCTIONS (fns
); fns
; fns
= OVL_NEXT (fns
))
2967 tree fn
= OVL_CURRENT (fns
);
2968 if (TREE_CODE (fn
) == TEMPLATE_DECL
)
2969 add_template_candidate (&candidates
, fn
, base
, NULL_TREE
,
2970 mem_args
, NULL_TREE
,
2973 LOOKUP_NORMAL
, DEDUCE_CALL
);
2975 add_function_candidate
2976 (&candidates
, fn
, base
, mem_args
, TYPE_BINFO (type
),
2977 TYPE_BINFO (type
), LOOKUP_NORMAL
);
2981 convs
= lookup_conversions (type
);
2983 for (; convs
; convs
= TREE_CHAIN (convs
))
2985 tree fns
= TREE_VALUE (convs
);
2986 tree totype
= TREE_TYPE (TREE_TYPE (OVL_CURRENT (fns
)));
2988 if ((TREE_CODE (totype
) == POINTER_TYPE
2989 && TREE_CODE (TREE_TYPE (totype
)) == FUNCTION_TYPE
)
2990 || (TREE_CODE (totype
) == REFERENCE_TYPE
2991 && TREE_CODE (TREE_TYPE (totype
)) == FUNCTION_TYPE
)
2992 || (TREE_CODE (totype
) == REFERENCE_TYPE
2993 && TREE_CODE (TREE_TYPE (totype
)) == POINTER_TYPE
2994 && TREE_CODE (TREE_TYPE (TREE_TYPE (totype
))) == FUNCTION_TYPE
))
2995 for (; fns
; fns
= OVL_NEXT (fns
))
2997 tree fn
= OVL_CURRENT (fns
);
2998 if (TREE_CODE (fn
) == TEMPLATE_DECL
)
2999 add_template_conv_candidate
3000 (&candidates
, fn
, obj
, args
, totype
,
3001 /*access_path=*/NULL_TREE
,
3002 /*conversion_path=*/NULL_TREE
);
3004 add_conv_candidate (&candidates
, fn
, obj
, args
,
3005 /*conversion_path=*/NULL_TREE
,
3006 /*access_path=*/NULL_TREE
);
3010 candidates
= splice_viable (candidates
, pedantic
, &any_viable_p
);
3013 error ("no match for call to %<(%T) (%A)%>", TREE_TYPE (obj
), args
);
3014 print_z_candidates (candidates
);
3015 result
= error_mark_node
;
3019 cand
= tourney (candidates
);
3022 error ("call of %<(%T) (%A)%> is ambiguous", TREE_TYPE (obj
), args
);
3023 print_z_candidates (candidates
);
3024 result
= error_mark_node
;
3026 /* Since cand->fn will be a type, not a function, for a conversion
3027 function, we must be careful not to unconditionally look at
3029 else if (TREE_CODE (cand
->fn
) == FUNCTION_DECL
3030 && DECL_OVERLOADED_OPERATOR_P (cand
->fn
) == CALL_EXPR
)
3031 result
= build_over_call (cand
, LOOKUP_NORMAL
);
3034 obj
= convert_like_with_context (cand
->convs
[0], obj
, cand
->fn
, -1);
3035 obj
= convert_from_reference (obj
);
3036 result
= build_function_call (obj
, args
);
3040 /* Free all the conversions we allocated. */
3041 obstack_free (&conversion_obstack
, p
);
3047 op_error (enum tree_code code
, enum tree_code code2
,
3048 tree arg1
, tree arg2
, tree arg3
, const char *problem
)
3052 if (code
== MODIFY_EXPR
)
3053 opname
= assignment_operator_name_info
[code2
].name
;
3055 opname
= operator_name_info
[code
].name
;
3060 error ("%s for ternary %<operator?:%> in %<%E ? %E : %E%>",
3061 problem
, arg1
, arg2
, arg3
);
3064 case POSTINCREMENT_EXPR
:
3065 case POSTDECREMENT_EXPR
:
3066 error ("%s for %<operator%s%> in %<%E%s%>", problem
, opname
, arg1
, opname
);
3070 error ("%s for %<operator[]%> in %<%E[%E]%>", problem
, arg1
, arg2
);
3075 error ("%s for %qs in %<%s %E%>", problem
, opname
, opname
, arg1
);
3080 error ("%s for %<operator%s%> in %<%E %s %E%>",
3081 problem
, opname
, arg1
, opname
, arg2
);
3083 error ("%s for %<operator%s%> in %<%s%E%>",
3084 problem
, opname
, opname
, arg1
);
3089 /* Return the implicit conversion sequence that could be used to
3090 convert E1 to E2 in [expr.cond]. */
3093 conditional_conversion (tree e1
, tree e2
)
3095 tree t1
= non_reference (TREE_TYPE (e1
));
3096 tree t2
= non_reference (TREE_TYPE (e2
));
3102 If E2 is an lvalue: E1 can be converted to match E2 if E1 can be
3103 implicitly converted (clause _conv_) to the type "reference to
3104 T2", subject to the constraint that in the conversion the
3105 reference must bind directly (_dcl.init.ref_) to E1. */
3106 if (real_lvalue_p (e2
))
3108 conv
= implicit_conversion (build_reference_type (t2
),
3112 LOOKUP_NO_TEMP_BIND
);
3119 If E1 and E2 have class type, and the underlying class types are
3120 the same or one is a base class of the other: E1 can be converted
3121 to match E2 if the class of T2 is the same type as, or a base
3122 class of, the class of T1, and the cv-qualification of T2 is the
3123 same cv-qualification as, or a greater cv-qualification than, the
3124 cv-qualification of T1. If the conversion is applied, E1 is
3125 changed to an rvalue of type T2 that still refers to the original
3126 source class object (or the appropriate subobject thereof). */
3127 if (CLASS_TYPE_P (t1
) && CLASS_TYPE_P (t2
)
3128 && ((good_base
= DERIVED_FROM_P (t2
, t1
)) || DERIVED_FROM_P (t1
, t2
)))
3130 if (good_base
&& at_least_as_qualified_p (t2
, t1
))
3132 conv
= build_identity_conv (t1
, e1
);
3133 if (!same_type_p (TYPE_MAIN_VARIANT (t1
),
3134 TYPE_MAIN_VARIANT (t2
)))
3135 conv
= build_conv (ck_base
, t2
, conv
);
3137 conv
= build_conv (ck_rvalue
, t2
, conv
);
3146 Otherwise: E1 can be converted to match E2 if E1 can be implicitly
3147 converted to the type that expression E2 would have if E2 were
3148 converted to an rvalue (or the type it has, if E2 is an rvalue). */
3149 return implicit_conversion (t2
, t1
, e1
, /*c_cast_p=*/false,
3153 /* Implement [expr.cond]. ARG1, ARG2, and ARG3 are the three
3154 arguments to the conditional expression. */
3157 build_conditional_expr (tree arg1
, tree arg2
, tree arg3
)
3161 tree result
= NULL_TREE
;
3162 tree result_type
= NULL_TREE
;
3163 bool lvalue_p
= true;
3164 struct z_candidate
*candidates
= 0;
3165 struct z_candidate
*cand
;
3168 /* As a G++ extension, the second argument to the conditional can be
3169 omitted. (So that `a ? : c' is roughly equivalent to `a ? a :
3170 c'.) If the second operand is omitted, make sure it is
3171 calculated only once. */
3175 pedwarn ("ISO C++ forbids omitting the middle term of a ?: expression");
3177 /* Make sure that lvalues remain lvalues. See g++.oliva/ext1.C. */
3178 if (real_lvalue_p (arg1
))
3179 arg2
= arg1
= stabilize_reference (arg1
);
3181 arg2
= arg1
= save_expr (arg1
);
3186 The first expr ession is implicitly converted to bool (clause
3188 arg1
= perform_implicit_conversion (boolean_type_node
, arg1
);
3190 /* If something has already gone wrong, just pass that fact up the
3192 if (error_operand_p (arg1
)
3193 || error_operand_p (arg2
)
3194 || error_operand_p (arg3
))
3195 return error_mark_node
;
3199 If either the second or the third operand has type (possibly
3200 cv-qualified) void, then the lvalue-to-rvalue (_conv.lval_),
3201 array-to-pointer (_conv.array_), and function-to-pointer
3202 (_conv.func_) standard conversions are performed on the second
3203 and third operands. */
3204 arg2_type
= TREE_TYPE (arg2
);
3205 arg3_type
= TREE_TYPE (arg3
);
3206 if (VOID_TYPE_P (arg2_type
) || VOID_TYPE_P (arg3_type
))
3208 /* Do the conversions. We don't these for `void' type arguments
3209 since it can't have any effect and since decay_conversion
3210 does not handle that case gracefully. */
3211 if (!VOID_TYPE_P (arg2_type
))
3212 arg2
= decay_conversion (arg2
);
3213 if (!VOID_TYPE_P (arg3_type
))
3214 arg3
= decay_conversion (arg3
);
3215 arg2_type
= TREE_TYPE (arg2
);
3216 arg3_type
= TREE_TYPE (arg3
);
3220 One of the following shall hold:
3222 --The second or the third operand (but not both) is a
3223 throw-expression (_except.throw_); the result is of the
3224 type of the other and is an rvalue.
3226 --Both the second and the third operands have type void; the
3227 result is of type void and is an rvalue.
3229 We must avoid calling force_rvalue for expressions of type
3230 "void" because it will complain that their value is being
3232 if (TREE_CODE (arg2
) == THROW_EXPR
3233 && TREE_CODE (arg3
) != THROW_EXPR
)
3235 if (!VOID_TYPE_P (arg3_type
))
3236 arg3
= force_rvalue (arg3
);
3237 arg3_type
= TREE_TYPE (arg3
);
3238 result_type
= arg3_type
;
3240 else if (TREE_CODE (arg2
) != THROW_EXPR
3241 && TREE_CODE (arg3
) == THROW_EXPR
)
3243 if (!VOID_TYPE_P (arg2_type
))
3244 arg2
= force_rvalue (arg2
);
3245 arg2_type
= TREE_TYPE (arg2
);
3246 result_type
= arg2_type
;
3248 else if (VOID_TYPE_P (arg2_type
) && VOID_TYPE_P (arg3_type
))
3249 result_type
= void_type_node
;
3252 error ("%qE has type %<void%> and is not a throw-expression",
3253 VOID_TYPE_P (arg2_type
) ? arg2
: arg3
);
3254 return error_mark_node
;
3258 goto valid_operands
;
3262 Otherwise, if the second and third operand have different types,
3263 and either has (possibly cv-qualified) class type, an attempt is
3264 made to convert each of those operands to the type of the other. */
3265 else if (!same_type_p (arg2_type
, arg3_type
)
3266 && (CLASS_TYPE_P (arg2_type
) || CLASS_TYPE_P (arg3_type
)))
3271 /* Get the high-water mark for the CONVERSION_OBSTACK. */
3272 p
= conversion_obstack_alloc (0);
3274 conv2
= conditional_conversion (arg2
, arg3
);
3275 conv3
= conditional_conversion (arg3
, arg2
);
3279 If both can be converted, or one can be converted but the
3280 conversion is ambiguous, the program is ill-formed. If
3281 neither can be converted, the operands are left unchanged and
3282 further checking is performed as described below. If exactly
3283 one conversion is possible, that conversion is applied to the
3284 chosen operand and the converted operand is used in place of
3285 the original operand for the remainder of this section. */
3286 if ((conv2
&& !conv2
->bad_p
3287 && conv3
&& !conv3
->bad_p
)
3288 || (conv2
&& conv2
->kind
== ck_ambig
)
3289 || (conv3
&& conv3
->kind
== ck_ambig
))
3291 error ("operands to ?: have different types");
3292 result
= error_mark_node
;
3294 else if (conv2
&& (!conv2
->bad_p
|| !conv3
))
3296 arg2
= convert_like (conv2
, arg2
);
3297 arg2
= convert_from_reference (arg2
);
3298 arg2_type
= TREE_TYPE (arg2
);
3299 /* Even if CONV2 is a valid conversion, the result of the
3300 conversion may be invalid. For example, if ARG3 has type
3301 "volatile X", and X does not have a copy constructor
3302 accepting a "volatile X&", then even if ARG2 can be
3303 converted to X, the conversion will fail. */
3304 if (error_operand_p (arg2
))
3305 result
= error_mark_node
;
3307 else if (conv3
&& (!conv3
->bad_p
|| !conv2
))
3309 arg3
= convert_like (conv3
, arg3
);
3310 arg3
= convert_from_reference (arg3
);
3311 arg3_type
= TREE_TYPE (arg3
);
3312 if (error_operand_p (arg3
))
3313 result
= error_mark_node
;
3316 /* Free all the conversions we allocated. */
3317 obstack_free (&conversion_obstack
, p
);
3322 /* If, after the conversion, both operands have class type,
3323 treat the cv-qualification of both operands as if it were the
3324 union of the cv-qualification of the operands.
3326 The standard is not clear about what to do in this
3327 circumstance. For example, if the first operand has type
3328 "const X" and the second operand has a user-defined
3329 conversion to "volatile X", what is the type of the second
3330 operand after this step? Making it be "const X" (matching
3331 the first operand) seems wrong, as that discards the
3332 qualification without actually performing a copy. Leaving it
3333 as "volatile X" seems wrong as that will result in the
3334 conditional expression failing altogether, even though,
3335 according to this step, the one operand could be converted to
3336 the type of the other. */
3337 if ((conv2
|| conv3
)
3338 && CLASS_TYPE_P (arg2_type
)
3339 && TYPE_QUALS (arg2_type
) != TYPE_QUALS (arg3_type
))
3340 arg2_type
= arg3_type
=
3341 cp_build_qualified_type (arg2_type
,
3342 TYPE_QUALS (arg2_type
)
3343 | TYPE_QUALS (arg3_type
));
3348 If the second and third operands are lvalues and have the same
3349 type, the result is of that type and is an lvalue. */
3350 if (real_lvalue_p (arg2
)
3351 && real_lvalue_p (arg3
)
3352 && same_type_p (arg2_type
, arg3_type
))
3354 result_type
= arg2_type
;
3355 goto valid_operands
;
3360 Otherwise, the result is an rvalue. If the second and third
3361 operand do not have the same type, and either has (possibly
3362 cv-qualified) class type, overload resolution is used to
3363 determine the conversions (if any) to be applied to the operands
3364 (_over.match.oper_, _over.built_). */
3366 if (!same_type_p (arg2_type
, arg3_type
)
3367 && (CLASS_TYPE_P (arg2_type
) || CLASS_TYPE_P (arg3_type
)))
3373 /* Rearrange the arguments so that add_builtin_candidate only has
3374 to know about two args. In build_builtin_candidates, the
3375 arguments are unscrambled. */
3379 add_builtin_candidates (&candidates
,
3382 ansi_opname (COND_EXPR
),
3388 If the overload resolution fails, the program is
3390 candidates
= splice_viable (candidates
, pedantic
, &any_viable_p
);
3393 op_error (COND_EXPR
, NOP_EXPR
, arg1
, arg2
, arg3
, "no match");
3394 print_z_candidates (candidates
);
3395 return error_mark_node
;
3397 cand
= tourney (candidates
);
3400 op_error (COND_EXPR
, NOP_EXPR
, arg1
, arg2
, arg3
, "no match");
3401 print_z_candidates (candidates
);
3402 return error_mark_node
;
3407 Otherwise, the conversions thus determined are applied, and
3408 the converted operands are used in place of the original
3409 operands for the remainder of this section. */
3410 conv
= cand
->convs
[0];
3411 arg1
= convert_like (conv
, arg1
);
3412 conv
= cand
->convs
[1];
3413 arg2
= convert_like (conv
, arg2
);
3414 conv
= cand
->convs
[2];
3415 arg3
= convert_like (conv
, arg3
);
3420 Lvalue-to-rvalue (_conv.lval_), array-to-pointer (_conv.array_),
3421 and function-to-pointer (_conv.func_) standard conversions are
3422 performed on the second and third operands.
3424 We need to force the lvalue-to-rvalue conversion here for class types,
3425 so we get TARGET_EXPRs; trying to deal with a COND_EXPR of class rvalues
3426 that isn't wrapped with a TARGET_EXPR plays havoc with exception
3429 arg2
= force_rvalue (arg2
);
3430 if (!CLASS_TYPE_P (arg2_type
))
3431 arg2_type
= TREE_TYPE (arg2
);
3433 arg3
= force_rvalue (arg3
);
3434 if (!CLASS_TYPE_P (arg2_type
))
3435 arg3_type
= TREE_TYPE (arg3
);
3437 if (arg2
== error_mark_node
|| arg3
== error_mark_node
)
3438 return error_mark_node
;
3442 After those conversions, one of the following shall hold:
3444 --The second and third operands have the same type; the result is of
3446 if (same_type_p (arg2_type
, arg3_type
))
3447 result_type
= arg2_type
;
3450 --The second and third operands have arithmetic or enumeration
3451 type; the usual arithmetic conversions are performed to bring
3452 them to a common type, and the result is of that type. */
3453 else if ((ARITHMETIC_TYPE_P (arg2_type
)
3454 || TREE_CODE (arg2_type
) == ENUMERAL_TYPE
)
3455 && (ARITHMETIC_TYPE_P (arg3_type
)
3456 || TREE_CODE (arg3_type
) == ENUMERAL_TYPE
))
3458 /* In this case, there is always a common type. */
3459 result_type
= type_after_usual_arithmetic_conversions (arg2_type
,
3462 if (TREE_CODE (arg2_type
) == ENUMERAL_TYPE
3463 && TREE_CODE (arg3_type
) == ENUMERAL_TYPE
)
3464 warning (0, "enumeral mismatch in conditional expression: %qT vs %qT",
3465 arg2_type
, arg3_type
);
3466 else if (extra_warnings
3467 && ((TREE_CODE (arg2_type
) == ENUMERAL_TYPE
3468 && !same_type_p (arg3_type
, type_promotes_to (arg2_type
)))
3469 || (TREE_CODE (arg3_type
) == ENUMERAL_TYPE
3470 && !same_type_p (arg2_type
, type_promotes_to (arg3_type
)))))
3471 warning (0, "enumeral and non-enumeral type in conditional expression");
3473 arg2
= perform_implicit_conversion (result_type
, arg2
);
3474 arg3
= perform_implicit_conversion (result_type
, arg3
);
3478 --The second and third operands have pointer type, or one has
3479 pointer type and the other is a null pointer constant; pointer
3480 conversions (_conv.ptr_) and qualification conversions
3481 (_conv.qual_) are performed to bring them to their composite
3482 pointer type (_expr.rel_). The result is of the composite
3485 --The second and third operands have pointer to member type, or
3486 one has pointer to member type and the other is a null pointer
3487 constant; pointer to member conversions (_conv.mem_) and
3488 qualification conversions (_conv.qual_) are performed to bring
3489 them to a common type, whose cv-qualification shall match the
3490 cv-qualification of either the second or the third operand.
3491 The result is of the common type. */
3492 else if ((null_ptr_cst_p (arg2
)
3493 && (TYPE_PTR_P (arg3_type
) || TYPE_PTR_TO_MEMBER_P (arg3_type
)))
3494 || (null_ptr_cst_p (arg3
)
3495 && (TYPE_PTR_P (arg2_type
) || TYPE_PTR_TO_MEMBER_P (arg2_type
)))
3496 || (TYPE_PTR_P (arg2_type
) && TYPE_PTR_P (arg3_type
))
3497 || (TYPE_PTRMEM_P (arg2_type
) && TYPE_PTRMEM_P (arg3_type
))
3498 || (TYPE_PTRMEMFUNC_P (arg2_type
) && TYPE_PTRMEMFUNC_P (arg3_type
)))
3500 result_type
= composite_pointer_type (arg2_type
, arg3_type
, arg2
,
3501 arg3
, "conditional expression");
3502 if (result_type
== error_mark_node
)
3503 return error_mark_node
;
3504 arg2
= perform_implicit_conversion (result_type
, arg2
);
3505 arg3
= perform_implicit_conversion (result_type
, arg3
);
3510 error ("operands to ?: have different types");
3511 return error_mark_node
;
3515 result
= fold_if_not_in_template (build3 (COND_EXPR
, result_type
, arg1
,
3517 /* We can't use result_type below, as fold might have returned a
3520 /* Expand both sides into the same slot, hopefully the target of the
3521 ?: expression. We used to check for TARGET_EXPRs here, but now we
3522 sometimes wrap them in NOP_EXPRs so the test would fail. */
3523 if (!lvalue_p
&& CLASS_TYPE_P (TREE_TYPE (result
)))
3524 result
= get_target_expr (result
);
3526 /* If this expression is an rvalue, but might be mistaken for an
3527 lvalue, we must add a NON_LVALUE_EXPR. */
3528 if (!lvalue_p
&& real_lvalue_p (result
))
3529 result
= rvalue (result
);
3534 /* OPERAND is an operand to an expression. Perform necessary steps
3535 required before using it. If OPERAND is NULL_TREE, NULL_TREE is
3539 prep_operand (tree operand
)
3543 if (CLASS_TYPE_P (TREE_TYPE (operand
))
3544 && CLASSTYPE_TEMPLATE_INSTANTIATION (TREE_TYPE (operand
)))
3545 /* Make sure the template type is instantiated now. */
3546 instantiate_class_template (TYPE_MAIN_VARIANT (TREE_TYPE (operand
)));
3552 /* Add each of the viable functions in FNS (a FUNCTION_DECL or
3553 OVERLOAD) to the CANDIDATES, returning an updated list of
3554 CANDIDATES. The ARGS are the arguments provided to the call,
3555 without any implicit object parameter. The EXPLICIT_TARGS are
3556 explicit template arguments provided. TEMPLATE_ONLY is true if
3557 only template functions should be considered. CONVERSION_PATH,
3558 ACCESS_PATH, and FLAGS are as for add_function_candidate. */
3561 add_candidates (tree fns
, tree args
,
3562 tree explicit_targs
, bool template_only
,
3563 tree conversion_path
, tree access_path
,
3565 struct z_candidate
**candidates
)
3568 tree non_static_args
;
3570 ctype
= conversion_path
? BINFO_TYPE (conversion_path
) : NULL_TREE
;
3571 /* Delay creating the implicit this parameter until it is needed. */
3572 non_static_args
= NULL_TREE
;
3579 fn
= OVL_CURRENT (fns
);
3580 /* Figure out which set of arguments to use. */
3581 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn
))
3583 /* If this function is a non-static member, prepend the implicit
3584 object parameter. */
3585 if (!non_static_args
)
3586 non_static_args
= tree_cons (NULL_TREE
,
3587 build_this (TREE_VALUE (args
)),
3589 fn_args
= non_static_args
;
3592 /* Otherwise, just use the list of arguments provided. */
3595 if (TREE_CODE (fn
) == TEMPLATE_DECL
)
3596 add_template_candidate (candidates
,
3606 else if (!template_only
)
3607 add_function_candidate (candidates
,
3614 fns
= OVL_NEXT (fns
);
3619 build_new_op (enum tree_code code
, int flags
, tree arg1
, tree arg2
, tree arg3
,
3622 struct z_candidate
*candidates
= 0, *cand
;
3623 tree arglist
, fnname
;
3625 tree result
= NULL_TREE
;
3626 bool result_valid_p
= false;
3627 enum tree_code code2
= NOP_EXPR
;
3633 if (error_operand_p (arg1
)
3634 || error_operand_p (arg2
)
3635 || error_operand_p (arg3
))
3636 return error_mark_node
;
3638 if (code
== MODIFY_EXPR
)
3640 code2
= TREE_CODE (arg3
);
3642 fnname
= ansi_assopname (code2
);
3645 fnname
= ansi_opname (code
);
3647 arg1
= prep_operand (arg1
);
3653 case VEC_DELETE_EXPR
:
3655 /* Use build_op_new_call and build_op_delete_call instead. */
3659 return build_object_call (arg1
, arg2
);
3665 arg2
= prep_operand (arg2
);
3666 arg3
= prep_operand (arg3
);
3668 if (code
== COND_EXPR
)
3670 if (arg2
== NULL_TREE
3671 || TREE_CODE (TREE_TYPE (arg2
)) == VOID_TYPE
3672 || TREE_CODE (TREE_TYPE (arg3
)) == VOID_TYPE
3673 || (! IS_OVERLOAD_TYPE (TREE_TYPE (arg2
))
3674 && ! IS_OVERLOAD_TYPE (TREE_TYPE (arg3
))))
3677 else if (! IS_OVERLOAD_TYPE (TREE_TYPE (arg1
))
3678 && (! arg2
|| ! IS_OVERLOAD_TYPE (TREE_TYPE (arg2
))))
3681 if (code
== POSTINCREMENT_EXPR
|| code
== POSTDECREMENT_EXPR
)
3682 arg2
= integer_zero_node
;
3684 arglist
= NULL_TREE
;
3686 arglist
= tree_cons (NULL_TREE
, arg3
, arglist
);
3688 arglist
= tree_cons (NULL_TREE
, arg2
, arglist
);
3689 arglist
= tree_cons (NULL_TREE
, arg1
, arglist
);
3691 /* Get the high-water mark for the CONVERSION_OBSTACK. */
3692 p
= conversion_obstack_alloc (0);
3694 /* Add namespace-scope operators to the list of functions to
3696 add_candidates (lookup_function_nonclass (fnname
, arglist
, /*block_p=*/true),
3697 arglist
, NULL_TREE
, false, NULL_TREE
, NULL_TREE
,
3698 flags
, &candidates
);
3699 /* Add class-member operators to the candidate set. */
3700 if (CLASS_TYPE_P (TREE_TYPE (arg1
)))
3704 fns
= lookup_fnfields (TREE_TYPE (arg1
), fnname
, 1);
3705 if (fns
== error_mark_node
)
3707 result
= error_mark_node
;
3708 goto user_defined_result_ready
;
3711 add_candidates (BASELINK_FUNCTIONS (fns
), arglist
,
3713 BASELINK_BINFO (fns
),
3714 TYPE_BINFO (TREE_TYPE (arg1
)),
3715 flags
, &candidates
);
3718 /* Rearrange the arguments for ?: so that add_builtin_candidate only has
3719 to know about two args; a builtin candidate will always have a first
3720 parameter of type bool. We'll handle that in
3721 build_builtin_candidate. */
3722 if (code
== COND_EXPR
)
3732 args
[2] = NULL_TREE
;
3735 add_builtin_candidates (&candidates
, code
, code2
, fnname
, args
, flags
);
3741 /* For these, the built-in candidates set is empty
3742 [over.match.oper]/3. We don't want non-strict matches
3743 because exact matches are always possible with built-in
3744 operators. The built-in candidate set for COMPONENT_REF
3745 would be empty too, but since there are no such built-in
3746 operators, we accept non-strict matches for them. */
3751 strict_p
= pedantic
;
3755 candidates
= splice_viable (candidates
, strict_p
, &any_viable_p
);
3760 case POSTINCREMENT_EXPR
:
3761 case POSTDECREMENT_EXPR
:
3762 /* Look for an `operator++ (int)'. If they didn't have
3763 one, then we fall back to the old way of doing things. */
3764 if (flags
& LOOKUP_COMPLAIN
)
3765 pedwarn ("no %<%D(int)%> declared for postfix %qs, "
3766 "trying prefix operator instead",
3768 operator_name_info
[code
].name
);
3769 if (code
== POSTINCREMENT_EXPR
)
3770 code
= PREINCREMENT_EXPR
;
3772 code
= PREDECREMENT_EXPR
;
3773 result
= build_new_op (code
, flags
, arg1
, NULL_TREE
, NULL_TREE
,
3777 /* The caller will deal with these. */
3782 result_valid_p
= true;
3786 if (flags
& LOOKUP_COMPLAIN
)
3788 op_error (code
, code2
, arg1
, arg2
, arg3
, "no match");
3789 print_z_candidates (candidates
);
3791 result
= error_mark_node
;
3797 cand
= tourney (candidates
);
3800 if (flags
& LOOKUP_COMPLAIN
)
3802 op_error (code
, code2
, arg1
, arg2
, arg3
, "ambiguous overload");
3803 print_z_candidates (candidates
);
3805 result
= error_mark_node
;
3807 else if (TREE_CODE (cand
->fn
) == FUNCTION_DECL
)
3810 *overloaded_p
= true;
3812 result
= build_over_call (cand
, LOOKUP_NORMAL
);
3816 /* Give any warnings we noticed during overload resolution. */
3819 struct candidate_warning
*w
;
3820 for (w
= cand
->warnings
; w
; w
= w
->next
)
3821 joust (cand
, w
->loser
, 1);
3824 /* Check for comparison of different enum types. */
3833 if (TREE_CODE (TREE_TYPE (arg1
)) == ENUMERAL_TYPE
3834 && TREE_CODE (TREE_TYPE (arg2
)) == ENUMERAL_TYPE
3835 && (TYPE_MAIN_VARIANT (TREE_TYPE (arg1
))
3836 != TYPE_MAIN_VARIANT (TREE_TYPE (arg2
))))
3838 warning (0, "comparison between %q#T and %q#T",
3839 TREE_TYPE (arg1
), TREE_TYPE (arg2
));
3846 /* We need to strip any leading REF_BIND so that bitfields
3847 don't cause errors. This should not remove any important
3848 conversions, because builtins don't apply to class
3849 objects directly. */
3850 conv
= cand
->convs
[0];
3851 if (conv
->kind
== ck_ref_bind
)
3852 conv
= conv
->u
.next
;
3853 arg1
= convert_like (conv
, arg1
);
3856 conv
= cand
->convs
[1];
3857 if (conv
->kind
== ck_ref_bind
)
3858 conv
= conv
->u
.next
;
3859 arg2
= convert_like (conv
, arg2
);
3863 conv
= cand
->convs
[2];
3864 if (conv
->kind
== ck_ref_bind
)
3865 conv
= conv
->u
.next
;
3866 arg3
= convert_like (conv
, arg3
);
3871 user_defined_result_ready
:
3873 /* Free all the conversions we allocated. */
3874 obstack_free (&conversion_obstack
, p
);
3876 if (result
|| result_valid_p
)
3883 return build_modify_expr (arg1
, code2
, arg2
);
3886 return build_indirect_ref (arg1
, "unary *");
3891 case TRUNC_DIV_EXPR
:
3902 case TRUNC_MOD_EXPR
:
3906 case TRUTH_ANDIF_EXPR
:
3907 case TRUTH_ORIF_EXPR
:
3908 return cp_build_binary_op (code
, arg1
, arg2
);
3910 case UNARY_PLUS_EXPR
:
3913 case TRUTH_NOT_EXPR
:
3914 case PREINCREMENT_EXPR
:
3915 case POSTINCREMENT_EXPR
:
3916 case PREDECREMENT_EXPR
:
3917 case POSTDECREMENT_EXPR
:
3920 return build_unary_op (code
, arg1
, candidates
!= 0);
3923 return build_array_ref (arg1
, arg2
);
3926 return build_conditional_expr (arg1
, arg2
, arg3
);
3929 return build_m_component_ref (build_indirect_ref (arg1
, NULL
), arg2
);
3931 /* The caller will deal with these. */
3943 /* Build a call to operator delete. This has to be handled very specially,
3944 because the restrictions on what signatures match are different from all
3945 other call instances. For a normal delete, only a delete taking (void *)
3946 or (void *, size_t) is accepted. For a placement delete, only an exact
3947 match with the placement new is accepted.
3949 CODE is either DELETE_EXPR or VEC_DELETE_EXPR.
3950 ADDR is the pointer to be deleted.
3951 SIZE is the size of the memory block to be deleted.
3952 GLOBAL_P is true if the delete-expression should not consider
3953 class-specific delete operators.
3954 PLACEMENT is the corresponding placement new call, or NULL_TREE. */
3957 build_op_delete_call (enum tree_code code
, tree addr
, tree size
,
3958 bool global_p
, tree placement
)
3960 tree fn
= NULL_TREE
;
3961 tree fns
, fnname
, argtypes
, args
, type
;
3964 if (addr
== error_mark_node
)
3965 return error_mark_node
;
3967 type
= strip_array_types (TREE_TYPE (TREE_TYPE (addr
)));
3969 fnname
= ansi_opname (code
);
3971 if (CLASS_TYPE_P (type
)
3972 && COMPLETE_TYPE_P (complete_type (type
))
3976 If the result of the lookup is ambiguous or inaccessible, or if
3977 the lookup selects a placement deallocation function, the
3978 program is ill-formed.
3980 Therefore, we ask lookup_fnfields to complain about ambiguity. */
3982 fns
= lookup_fnfields (TYPE_BINFO (type
), fnname
, 1);
3983 if (fns
== error_mark_node
)
3984 return error_mark_node
;
3989 if (fns
== NULL_TREE
)
3990 fns
= lookup_name_nonclass (fnname
);
3997 /* Find the allocation function that is being called. */
3998 call_expr
= placement
;
3999 /* Extract the function. */
4000 alloc_fn
= get_callee_fndecl (call_expr
);
4001 gcc_assert (alloc_fn
!= NULL_TREE
);
4002 /* Then the second parm type. */
4003 argtypes
= TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (alloc_fn
)));
4004 /* Also the second argument. */
4005 args
= TREE_CHAIN (TREE_OPERAND (call_expr
, 1));
4009 /* First try it without the size argument. */
4010 argtypes
= void_list_node
;
4014 /* Strip const and volatile from addr. */
4015 addr
= cp_convert (ptr_type_node
, addr
);
4017 /* We make two tries at finding a matching `operator delete'. On
4018 the first pass, we look for a one-operator (or placement)
4019 operator delete. If we're not doing placement delete, then on
4020 the second pass we look for a two-argument delete. */
4021 for (pass
= 0; pass
< (placement
? 1 : 2); ++pass
)
4023 /* Go through the `operator delete' functions looking for one
4024 with a matching type. */
4025 for (fn
= BASELINK_P (fns
) ? BASELINK_FUNCTIONS (fns
) : fns
;
4031 /* The first argument must be "void *". */
4032 t
= TYPE_ARG_TYPES (TREE_TYPE (OVL_CURRENT (fn
)));
4033 if (!same_type_p (TREE_VALUE (t
), ptr_type_node
))
4036 /* On the first pass, check the rest of the arguments. */
4042 if (!same_type_p (TREE_VALUE (a
), TREE_VALUE (t
)))
4050 /* On the second pass, the second argument must be
4053 && same_type_p (TREE_VALUE (t
), sizetype
)
4054 && TREE_CHAIN (t
) == void_list_node
)
4058 /* If we found a match, we're done. */
4063 /* If we have a matching function, call it. */
4066 /* Make sure we have the actual function, and not an
4068 fn
= OVL_CURRENT (fn
);
4070 /* If the FN is a member function, make sure that it is
4072 if (DECL_CLASS_SCOPE_P (fn
))
4073 perform_or_defer_access_check (TYPE_BINFO (type
), fn
);
4076 args
= tree_cons (NULL_TREE
, addr
, args
);
4078 args
= tree_cons (NULL_TREE
, addr
,
4079 build_tree_list (NULL_TREE
, size
));
4083 /* The placement args might not be suitable for overload
4084 resolution at this point, so build the call directly. */
4086 return build_cxx_call (fn
, args
);
4089 return build_function_call (fn
, args
);
4092 /* If we are doing placement delete we do nothing if we don't find a
4093 matching op delete. */
4097 error ("no suitable %<operator %s%> for %qT",
4098 operator_name_info
[(int)code
].name
, type
);
4099 return error_mark_node
;
4102 /* If the current scope isn't allowed to access DECL along
4103 BASETYPE_PATH, give an error. The most derived class in
4104 BASETYPE_PATH is the one used to qualify DECL. */
4107 enforce_access (tree basetype_path
, tree decl
)
4109 gcc_assert (TREE_CODE (basetype_path
) == TREE_BINFO
);
4111 if (!accessible_p (basetype_path
, decl
, true))
4113 if (TREE_PRIVATE (decl
))
4114 error ("%q+#D is private", decl
);
4115 else if (TREE_PROTECTED (decl
))
4116 error ("%q+#D is protected", decl
);
4118 error ("%q+#D is inaccessible", decl
);
4119 error ("within this context");
4126 /* Check that a callable constructor to initialize a temporary of
4127 TYPE from an EXPR exists. */
4130 check_constructor_callable (tree type
, tree expr
)
4132 build_special_member_call (NULL_TREE
,
4133 complete_ctor_identifier
,
4134 build_tree_list (NULL_TREE
, expr
),
4136 LOOKUP_NORMAL
| LOOKUP_ONLYCONVERTING
4137 | LOOKUP_NO_CONVERSION
4138 | LOOKUP_CONSTRUCTOR_CALLABLE
);
4141 /* Initialize a temporary of type TYPE with EXPR. The FLAGS are a
4142 bitwise or of LOOKUP_* values. If any errors are warnings are
4143 generated, set *DIAGNOSTIC_FN to "error" or "warning",
4144 respectively. If no diagnostics are generated, set *DIAGNOSTIC_FN
4148 build_temp (tree expr
, tree type
, int flags
,
4149 diagnostic_fn_t
*diagnostic_fn
)
4153 savew
= warningcount
, savee
= errorcount
;
4154 expr
= build_special_member_call (NULL_TREE
,
4155 complete_ctor_identifier
,
4156 build_tree_list (NULL_TREE
, expr
),
4158 if (warningcount
> savew
)
4159 *diagnostic_fn
= warning0
;
4160 else if (errorcount
> savee
)
4161 *diagnostic_fn
= error
;
4163 *diagnostic_fn
= NULL
;
4168 /* Perform the conversions in CONVS on the expression EXPR. FN and
4169 ARGNUM are used for diagnostics. ARGNUM is zero based, -1
4170 indicates the `this' argument of a method. INNER is nonzero when
4171 being called to continue a conversion chain. It is negative when a
4172 reference binding will be applied, positive otherwise. If
4173 ISSUE_CONVERSION_WARNINGS is true, warnings about suspicious
4174 conversions will be emitted if appropriate. If C_CAST_P is true,
4175 this conversion is coming from a C-style cast; in that case,
4176 conversions to inaccessible bases are permitted. */
4179 convert_like_real (conversion
*convs
, tree expr
, tree fn
, int argnum
,
4180 int inner
, bool issue_conversion_warnings
,
4183 tree totype
= convs
->type
;
4184 diagnostic_fn_t diagnostic_fn
;
4187 && convs
->kind
!= ck_user
4188 && convs
->kind
!= ck_ambig
4189 && convs
->kind
!= ck_ref_bind
)
4191 conversion
*t
= convs
;
4192 for (; t
; t
= convs
->u
.next
)
4194 if (t
->kind
== ck_user
|| !t
->bad_p
)
4196 expr
= convert_like_real (t
, expr
, fn
, argnum
, 1,
4197 /*issue_conversion_warnings=*/false,
4198 /*c_cast_p=*/false);
4201 else if (t
->kind
== ck_ambig
)
4202 return convert_like_real (t
, expr
, fn
, argnum
, 1,
4203 /*issue_conversion_warnings=*/false,
4204 /*c_cast_p=*/false);
4205 else if (t
->kind
== ck_identity
)
4208 pedwarn ("invalid conversion from %qT to %qT", TREE_TYPE (expr
), totype
);
4210 pedwarn (" initializing argument %P of %qD", argnum
, fn
);
4211 return cp_convert (totype
, expr
);
4214 if (issue_conversion_warnings
)
4216 tree t
= non_reference (totype
);
4218 /* Issue warnings about peculiar, but valid, uses of NULL. */
4219 if (ARITHMETIC_TYPE_P (t
) && expr
== null_node
)
4222 warning (0, "passing NULL to non-pointer argument %P of %qD",
4225 warning (0, "converting to non-pointer type %qT from NULL", t
);
4228 /* Warn about assigning a floating-point type to an integer type. */
4229 if (TREE_CODE (TREE_TYPE (expr
)) == REAL_TYPE
4230 && TREE_CODE (t
) == INTEGER_TYPE
)
4233 warning (0, "passing %qT for argument %P to %qD",
4234 TREE_TYPE (expr
), argnum
, fn
);
4236 warning (0, "converting to %qT from %qT", t
, TREE_TYPE (expr
));
4240 switch (convs
->kind
)
4244 struct z_candidate
*cand
= convs
->cand
;
4245 tree convfn
= cand
->fn
;
4248 if (DECL_CONSTRUCTOR_P (convfn
))
4250 tree t
= build_int_cst (build_pointer_type (DECL_CONTEXT (convfn
)),
4253 args
= build_tree_list (NULL_TREE
, expr
);
4254 /* We should never try to call the abstract or base constructor
4256 gcc_assert (!DECL_HAS_IN_CHARGE_PARM_P (convfn
)
4257 && !DECL_HAS_VTT_PARM_P (convfn
));
4258 args
= tree_cons (NULL_TREE
, t
, args
);
4261 args
= build_this (expr
);
4262 expr
= build_over_call (cand
, LOOKUP_NORMAL
);
4264 /* If this is a constructor or a function returning an aggr type,
4265 we need to build up a TARGET_EXPR. */
4266 if (DECL_CONSTRUCTOR_P (convfn
))
4267 expr
= build_cplus_new (totype
, expr
);
4269 /* The result of the call is then used to direct-initialize the object
4270 that is the destination of the copy-initialization. [dcl.init]
4272 Note that this step is not reflected in the conversion sequence;
4273 it affects the semantics when we actually perform the
4274 conversion, but is not considered during overload resolution.
4276 If the target is a class, that means call a ctor. */
4277 if (IS_AGGR_TYPE (totype
)
4278 && (inner
>= 0 || !lvalue_p (expr
)))
4282 /* Core issue 84, now a DR, says that we don't
4283 allow UDCs for these args (which deliberately
4284 breaks copy-init of an auto_ptr<Base> from an
4285 auto_ptr<Derived>). */
4286 LOOKUP_NORMAL
|LOOKUP_ONLYCONVERTING
|LOOKUP_NO_CONVERSION
,
4293 (" initializing argument %P of %qD from result of %qD",
4294 argnum
, fn
, convfn
);
4297 (" initializing temporary from result of %qD", convfn
);
4299 expr
= build_cplus_new (totype
, expr
);
4304 if (type_unknown_p (expr
))
4305 expr
= instantiate_type (totype
, expr
, tf_error
| tf_warning
);
4306 /* Convert a constant to its underlying value, unless we are
4307 about to bind it to a reference, in which case we need to
4308 leave it as an lvalue. */
4310 expr
= decl_constant_value (expr
);
4311 if (convs
->check_copy_constructor_p
)
4312 check_constructor_callable (totype
, expr
);
4315 /* Call build_user_type_conversion again for the error. */
4316 return build_user_type_conversion
4317 (totype
, convs
->u
.expr
, LOOKUP_NORMAL
);
4323 expr
= convert_like_real (convs
->u
.next
, expr
, fn
, argnum
,
4324 convs
->kind
== ck_ref_bind
? -1 : 1,
4325 /*issue_conversion_warnings=*/false,
4327 if (expr
== error_mark_node
)
4328 return error_mark_node
;
4330 switch (convs
->kind
)
4333 if (! IS_AGGR_TYPE (totype
))
4335 /* Else fall through. */
4337 if (convs
->kind
== ck_base
&& !convs
->need_temporary_p
)
4339 /* We are going to bind a reference directly to a base-class
4340 subobject of EXPR. */
4341 if (convs
->check_copy_constructor_p
)
4342 check_constructor_callable (TREE_TYPE (expr
), expr
);
4343 /* Build an expression for `*((base*) &expr)'. */
4344 expr
= build_unary_op (ADDR_EXPR
, expr
, 0);
4345 expr
= convert_to_base (expr
, build_pointer_type (totype
),
4346 !c_cast_p
, /*nonnull=*/true);
4347 expr
= build_indirect_ref (expr
, "implicit conversion");
4351 /* Copy-initialization where the cv-unqualified version of the source
4352 type is the same class as, or a derived class of, the class of the
4353 destination [is treated as direct-initialization]. [dcl.init] */
4354 expr
= build_temp (expr
, totype
, LOOKUP_NORMAL
|LOOKUP_ONLYCONVERTING
,
4356 if (diagnostic_fn
&& fn
)
4357 diagnostic_fn (" initializing argument %P of %qD", argnum
, fn
);
4358 return build_cplus_new (totype
, expr
);
4362 tree ref_type
= totype
;
4364 /* If necessary, create a temporary. */
4365 if (convs
->need_temporary_p
|| !lvalue_p (expr
))
4367 tree type
= convs
->u
.next
->type
;
4368 cp_lvalue_kind lvalue
= real_lvalue_p (expr
);
4370 if (!CP_TYPE_CONST_NON_VOLATILE_P (TREE_TYPE (ref_type
)))
4372 /* If the reference is volatile or non-const, we
4373 cannot create a temporary. */
4374 if (lvalue
& clk_bitfield
)
4375 error ("cannot bind bitfield %qE to %qT",
4377 else if (lvalue
& clk_packed
)
4378 error ("cannot bind packed field %qE to %qT",
4381 error ("cannot bind rvalue %qE to %qT", expr
, ref_type
);
4382 return error_mark_node
;
4384 /* If the source is a packed field, and we must use a copy
4385 constructor, then building the target expr will require
4386 binding the field to the reference parameter to the
4387 copy constructor, and we'll end up with an infinite
4388 loop. If we can use a bitwise copy, then we'll be
4390 if ((lvalue
& clk_packed
)
4391 && CLASS_TYPE_P (type
)
4392 && !TYPE_HAS_TRIVIAL_INIT_REF (type
))
4394 error ("cannot bind packed field %qE to %qT",
4396 return error_mark_node
;
4398 expr
= build_target_expr_with_type (expr
, type
);
4401 /* Take the address of the thing to which we will bind the
4403 expr
= build_unary_op (ADDR_EXPR
, expr
, 1);
4404 if (expr
== error_mark_node
)
4405 return error_mark_node
;
4407 /* Convert it to a pointer to the type referred to by the
4408 reference. This will adjust the pointer if a derived to
4409 base conversion is being performed. */
4410 expr
= cp_convert (build_pointer_type (TREE_TYPE (ref_type
)),
4412 /* Convert the pointer to the desired reference type. */
4413 return build_nop (ref_type
, expr
);
4417 return decay_conversion (expr
);
4420 /* Warn about deprecated conversion if appropriate. */
4421 string_conv_p (totype
, expr
, 1);
4426 expr
= convert_to_base (expr
, totype
, !c_cast_p
,
4428 return build_nop (totype
, expr
);
4431 return convert_ptrmem (totype
, expr
, /*allow_inverse_p=*/false,
4438 if (issue_conversion_warnings
)
4439 expr
= convert_and_check (totype
, expr
);
4441 expr
= convert (totype
, expr
);
4446 /* Build a call to __builtin_trap. */
4449 call_builtin_trap (void)
4451 tree fn
= implicit_built_in_decls
[BUILT_IN_TRAP
];
4453 gcc_assert (fn
!= NULL
);
4454 fn
= build_call (fn
, NULL_TREE
);
4458 /* ARG is being passed to a varargs function. Perform any conversions
4459 required. Return the converted value. */
4462 convert_arg_to_ellipsis (tree arg
)
4466 The lvalue-to-rvalue, array-to-pointer, and function-to-pointer
4467 standard conversions are performed. */
4468 arg
= decay_conversion (arg
);
4471 If the argument has integral or enumeration type that is subject
4472 to the integral promotions (_conv.prom_), or a floating point
4473 type that is subject to the floating point promotion
4474 (_conv.fpprom_), the value of the argument is converted to the
4475 promoted type before the call. */
4476 if (TREE_CODE (TREE_TYPE (arg
)) == REAL_TYPE
4477 && (TYPE_PRECISION (TREE_TYPE (arg
))
4478 < TYPE_PRECISION (double_type_node
)))
4479 arg
= convert_to_real (double_type_node
, arg
);
4480 else if (INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (arg
)))
4481 arg
= perform_integral_promotions (arg
);
4483 arg
= require_complete_type (arg
);
4485 if (arg
!= error_mark_node
4486 && !pod_type_p (TREE_TYPE (arg
)))
4488 /* Undefined behavior [expr.call] 5.2.2/7. We used to just warn
4489 here and do a bitwise copy, but now cp_expr_size will abort if we
4491 If the call appears in the context of a sizeof expression,
4492 there is no need to emit a warning, since the expression won't be
4493 evaluated. We keep the builtin_trap just as a safety check. */
4494 if (!skip_evaluation
)
4495 warning (0, "cannot pass objects of non-POD type %q#T through %<...%>; "
4496 "call will abort at runtime", TREE_TYPE (arg
));
4497 arg
= call_builtin_trap ();
4498 arg
= build2 (COMPOUND_EXPR
, integer_type_node
, arg
,
4505 /* va_arg (EXPR, TYPE) is a builtin. Make sure it is not abused. */
4508 build_x_va_arg (tree expr
, tree type
)
4510 if (processing_template_decl
)
4511 return build_min (VA_ARG_EXPR
, type
, expr
);
4513 type
= complete_type_or_else (type
, NULL_TREE
);
4515 if (expr
== error_mark_node
|| !type
)
4516 return error_mark_node
;
4518 if (! pod_type_p (type
))
4520 /* Remove reference types so we don't ICE later on. */
4521 tree type1
= non_reference (type
);
4522 /* Undefined behavior [expr.call] 5.2.2/7. */
4523 warning (0, "cannot receive objects of non-POD type %q#T through %<...%>; "
4524 "call will abort at runtime", type
);
4525 expr
= convert (build_pointer_type (type1
), null_node
);
4526 expr
= build2 (COMPOUND_EXPR
, TREE_TYPE (expr
),
4527 call_builtin_trap (), expr
);
4528 expr
= build_indirect_ref (expr
, NULL
);
4532 return build_va_arg (expr
, type
);
4535 /* TYPE has been given to va_arg. Apply the default conversions which
4536 would have happened when passed via ellipsis. Return the promoted
4537 type, or the passed type if there is no change. */
4540 cxx_type_promotes_to (tree type
)
4544 /* Perform the array-to-pointer and function-to-pointer
4546 type
= type_decays_to (type
);
4548 promote
= type_promotes_to (type
);
4549 if (same_type_p (type
, promote
))
4555 /* ARG is a default argument expression being passed to a parameter of
4556 the indicated TYPE, which is a parameter to FN. Do any required
4557 conversions. Return the converted value. */
4560 convert_default_arg (tree type
, tree arg
, tree fn
, int parmnum
)
4562 /* If the ARG is an unparsed default argument expression, the
4563 conversion cannot be performed. */
4564 if (TREE_CODE (arg
) == DEFAULT_ARG
)
4566 error ("the default argument for parameter %d of %qD has "
4567 "not yet been parsed",
4569 return error_mark_node
;
4572 if (fn
&& DECL_TEMPLATE_INFO (fn
))
4573 arg
= tsubst_default_argument (fn
, type
, arg
);
4575 arg
= break_out_target_exprs (arg
);
4577 if (TREE_CODE (arg
) == CONSTRUCTOR
)
4579 arg
= digest_init (type
, arg
);
4580 arg
= convert_for_initialization (0, type
, arg
, LOOKUP_NORMAL
,
4581 "default argument", fn
, parmnum
);
4585 /* This could get clobbered by the following call. */
4586 if (TREE_HAS_CONSTRUCTOR (arg
))
4587 arg
= copy_node (arg
);
4589 arg
= convert_for_initialization (0, type
, arg
, LOOKUP_NORMAL
,
4590 "default argument", fn
, parmnum
);
4591 arg
= convert_for_arg_passing (type
, arg
);
4597 /* Returns the type which will really be used for passing an argument of
4601 type_passed_as (tree type
)
4603 /* Pass classes with copy ctors by invisible reference. */
4604 if (TREE_ADDRESSABLE (type
))
4606 type
= build_reference_type (type
);
4607 /* There are no other pointers to this temporary. */
4608 type
= build_qualified_type (type
, TYPE_QUAL_RESTRICT
);
4610 else if (targetm
.calls
.promote_prototypes (type
)
4611 && INTEGRAL_TYPE_P (type
)
4612 && COMPLETE_TYPE_P (type
)
4613 && INT_CST_LT_UNSIGNED (TYPE_SIZE (type
),
4614 TYPE_SIZE (integer_type_node
)))
4615 type
= integer_type_node
;
4620 /* Actually perform the appropriate conversion. */
4623 convert_for_arg_passing (tree type
, tree val
)
4625 if (val
== error_mark_node
)
4627 /* Pass classes with copy ctors by invisible reference. */
4628 else if (TREE_ADDRESSABLE (type
))
4629 val
= build1 (ADDR_EXPR
, build_reference_type (type
), val
);
4630 else if (targetm
.calls
.promote_prototypes (type
)
4631 && INTEGRAL_TYPE_P (type
)
4632 && COMPLETE_TYPE_P (type
)
4633 && INT_CST_LT_UNSIGNED (TYPE_SIZE (type
),
4634 TYPE_SIZE (integer_type_node
)))
4635 val
= perform_integral_promotions (val
);
4636 if (warn_missing_format_attribute
)
4638 tree rhstype
= TREE_TYPE (val
);
4639 const enum tree_code coder
= TREE_CODE (rhstype
);
4640 const enum tree_code codel
= TREE_CODE (type
);
4641 if ((codel
== POINTER_TYPE
|| codel
== REFERENCE_TYPE
)
4643 && check_missing_format_attribute (type
, rhstype
))
4644 warning (OPT_Wmissing_format_attribute
,
4645 "argument of function call might be a candidate for a format attribute");
4650 /* Returns true iff FN is a function with magic varargs, i.e. ones for
4651 which no conversions at all should be done. This is true for some
4652 builtins which don't act like normal functions. */
4655 magic_varargs_p (tree fn
)
4657 if (DECL_BUILT_IN (fn
))
4658 switch (DECL_FUNCTION_CODE (fn
))
4660 case BUILT_IN_CLASSIFY_TYPE
:
4661 case BUILT_IN_CONSTANT_P
:
4662 case BUILT_IN_NEXT_ARG
:
4663 case BUILT_IN_STDARG_START
:
4664 case BUILT_IN_VA_START
:
4673 /* Subroutine of the various build_*_call functions. Overload resolution
4674 has chosen a winning candidate CAND; build up a CALL_EXPR accordingly.
4675 ARGS is a TREE_LIST of the unconverted arguments to the call. FLAGS is a
4676 bitmask of various LOOKUP_* flags which apply to the call itself. */
4679 build_over_call (struct z_candidate
*cand
, int flags
)
4682 tree args
= cand
->args
;
4683 conversion
**convs
= cand
->convs
;
4685 tree converted_args
= NULL_TREE
;
4686 tree parm
= TYPE_ARG_TYPES (TREE_TYPE (fn
));
4691 /* In a template, there is no need to perform all of the work that
4692 is normally done. We are only interested in the type of the call
4693 expression, i.e., the return type of the function. Any semantic
4694 errors will be deferred until the template is instantiated. */
4695 if (processing_template_decl
)
4699 return_type
= TREE_TYPE (TREE_TYPE (fn
));
4700 expr
= build3 (CALL_EXPR
, return_type
, fn
, args
, NULL_TREE
);
4701 if (TREE_THIS_VOLATILE (fn
) && cfun
)
4702 current_function_returns_abnormally
= 1;
4703 if (!VOID_TYPE_P (return_type
))
4704 require_complete_type (return_type
);
4705 return convert_from_reference (expr
);
4708 /* Give any warnings we noticed during overload resolution. */
4711 struct candidate_warning
*w
;
4712 for (w
= cand
->warnings
; w
; w
= w
->next
)
4713 joust (cand
, w
->loser
, 1);
4716 if (DECL_FUNCTION_MEMBER_P (fn
))
4718 /* If FN is a template function, two cases must be considered.
4723 template <class T> void f();
4725 template <class T> struct B {
4729 struct C : A, B<int> {
4731 using B<int>::g; // #2
4734 In case #1 where `A::f' is a member template, DECL_ACCESS is
4735 recorded in the primary template but not in its specialization.
4736 We check access of FN using its primary template.
4738 In case #2, where `B<int>::g' has a DECL_TEMPLATE_INFO simply
4739 because it is a member of class template B, DECL_ACCESS is
4740 recorded in the specialization `B<int>::g'. We cannot use its
4741 primary template because `B<T>::g' and `B<int>::g' may have
4742 different access. */
4743 if (DECL_TEMPLATE_INFO (fn
)
4744 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (fn
)))
4745 perform_or_defer_access_check (cand
->access_path
,
4746 DECL_TI_TEMPLATE (fn
));
4748 perform_or_defer_access_check (cand
->access_path
, fn
);
4751 if (args
&& TREE_CODE (args
) != TREE_LIST
)
4752 args
= build_tree_list (NULL_TREE
, args
);
4755 /* The implicit parameters to a constructor are not considered by overload
4756 resolution, and must be of the proper type. */
4757 if (DECL_CONSTRUCTOR_P (fn
))
4759 converted_args
= tree_cons (NULL_TREE
, TREE_VALUE (arg
), converted_args
);
4760 arg
= TREE_CHAIN (arg
);
4761 parm
= TREE_CHAIN (parm
);
4762 /* We should never try to call the abstract constructor. */
4763 gcc_assert (!DECL_HAS_IN_CHARGE_PARM_P (fn
));
4765 if (DECL_HAS_VTT_PARM_P (fn
))
4767 converted_args
= tree_cons
4768 (NULL_TREE
, TREE_VALUE (arg
), converted_args
);
4769 arg
= TREE_CHAIN (arg
);
4770 parm
= TREE_CHAIN (parm
);
4773 /* Bypass access control for 'this' parameter. */
4774 else if (TREE_CODE (TREE_TYPE (fn
)) == METHOD_TYPE
)
4776 tree parmtype
= TREE_VALUE (parm
);
4777 tree argtype
= TREE_TYPE (TREE_VALUE (arg
));
4781 if (convs
[i
]->bad_p
)
4782 pedwarn ("passing %qT as %<this%> argument of %q#D discards qualifiers",
4783 TREE_TYPE (argtype
), fn
);
4785 /* [class.mfct.nonstatic]: If a nonstatic member function of a class
4786 X is called for an object that is not of type X, or of a type
4787 derived from X, the behavior is undefined.
4789 So we can assume that anything passed as 'this' is non-null, and
4790 optimize accordingly. */
4791 gcc_assert (TREE_CODE (parmtype
) == POINTER_TYPE
);
4792 /* Convert to the base in which the function was declared. */
4793 gcc_assert (cand
->conversion_path
!= NULL_TREE
);
4794 converted_arg
= build_base_path (PLUS_EXPR
,
4796 cand
->conversion_path
,
4798 /* Check that the base class is accessible. */
4799 if (!accessible_base_p (TREE_TYPE (argtype
),
4800 BINFO_TYPE (cand
->conversion_path
), true))
4801 error ("%qT is not an accessible base of %qT",
4802 BINFO_TYPE (cand
->conversion_path
),
4803 TREE_TYPE (argtype
));
4804 /* If fn was found by a using declaration, the conversion path
4805 will be to the derived class, not the base declaring fn. We
4806 must convert from derived to base. */
4807 base_binfo
= lookup_base (TREE_TYPE (TREE_TYPE (converted_arg
)),
4808 TREE_TYPE (parmtype
), ba_unique
, NULL
);
4809 converted_arg
= build_base_path (PLUS_EXPR
, converted_arg
,
4812 converted_args
= tree_cons (NULL_TREE
, converted_arg
, converted_args
);
4813 parm
= TREE_CHAIN (parm
);
4814 arg
= TREE_CHAIN (arg
);
4820 parm
= TREE_CHAIN (parm
), arg
= TREE_CHAIN (arg
), ++i
)
4822 tree type
= TREE_VALUE (parm
);
4826 /* Don't make a copy here if build_call is going to. */
4827 if (conv
->kind
== ck_rvalue
4828 && !TREE_ADDRESSABLE (complete_type (type
)))
4829 conv
= conv
->u
.next
;
4831 val
= convert_like_with_context
4832 (conv
, TREE_VALUE (arg
), fn
, i
- is_method
);
4834 val
= convert_for_arg_passing (type
, val
);
4835 converted_args
= tree_cons (NULL_TREE
, val
, converted_args
);
4838 /* Default arguments */
4839 for (; parm
&& parm
!= void_list_node
; parm
= TREE_CHAIN (parm
), i
++)
4841 = tree_cons (NULL_TREE
,
4842 convert_default_arg (TREE_VALUE (parm
),
4843 TREE_PURPOSE (parm
),
4848 for (; arg
; arg
= TREE_CHAIN (arg
))
4850 tree a
= TREE_VALUE (arg
);
4851 if (magic_varargs_p (fn
))
4852 /* Do no conversions for magic varargs. */;
4854 a
= convert_arg_to_ellipsis (a
);
4855 converted_args
= tree_cons (NULL_TREE
, a
, converted_args
);
4858 converted_args
= nreverse (converted_args
);
4860 check_function_arguments (TYPE_ATTRIBUTES (TREE_TYPE (fn
)),
4861 converted_args
, TYPE_ARG_TYPES (TREE_TYPE (fn
)));
4863 /* Avoid actually calling copy constructors and copy assignment operators,
4866 if (! flag_elide_constructors
)
4867 /* Do things the hard way. */;
4868 else if (cand
->num_convs
== 1 && DECL_COPY_CONSTRUCTOR_P (fn
))
4871 arg
= skip_artificial_parms_for (fn
, converted_args
);
4872 arg
= TREE_VALUE (arg
);
4874 /* Pull out the real argument, disregarding const-correctness. */
4876 while (TREE_CODE (targ
) == NOP_EXPR
4877 || TREE_CODE (targ
) == NON_LVALUE_EXPR
4878 || TREE_CODE (targ
) == CONVERT_EXPR
)
4879 targ
= TREE_OPERAND (targ
, 0);
4880 if (TREE_CODE (targ
) == ADDR_EXPR
)
4882 targ
= TREE_OPERAND (targ
, 0);
4883 if (!same_type_ignoring_top_level_qualifiers_p
4884 (TREE_TYPE (TREE_TYPE (arg
)), TREE_TYPE (targ
)))
4893 arg
= build_indirect_ref (arg
, 0);
4895 /* [class.copy]: the copy constructor is implicitly defined even if
4896 the implementation elided its use. */
4897 if (TYPE_HAS_COMPLEX_INIT_REF (DECL_CONTEXT (fn
)))
4900 /* If we're creating a temp and we already have one, don't create a
4901 new one. If we're not creating a temp but we get one, use
4902 INIT_EXPR to collapse the temp into our target. Otherwise, if the
4903 ctor is trivial, do a bitwise copy with a simple TARGET_EXPR for a
4904 temp or an INIT_EXPR otherwise. */
4905 if (integer_zerop (TREE_VALUE (args
)))
4907 if (TREE_CODE (arg
) == TARGET_EXPR
)
4909 else if (TYPE_HAS_TRIVIAL_INIT_REF (DECL_CONTEXT (fn
)))
4910 return build_target_expr_with_type (arg
, DECL_CONTEXT (fn
));
4912 else if (TREE_CODE (arg
) == TARGET_EXPR
4913 || TYPE_HAS_TRIVIAL_INIT_REF (DECL_CONTEXT (fn
)))
4915 tree to
= stabilize_reference
4916 (build_indirect_ref (TREE_VALUE (args
), 0));
4918 val
= build2 (INIT_EXPR
, DECL_CONTEXT (fn
), to
, arg
);
4922 else if (DECL_OVERLOADED_OPERATOR_P (fn
) == NOP_EXPR
4924 && TYPE_HAS_TRIVIAL_ASSIGN_REF (DECL_CONTEXT (fn
)))
4926 tree to
= stabilize_reference
4927 (build_indirect_ref (TREE_VALUE (converted_args
), 0));
4928 tree type
= TREE_TYPE (to
);
4929 tree as_base
= CLASSTYPE_AS_BASE (type
);
4931 arg
= TREE_VALUE (TREE_CHAIN (converted_args
));
4932 if (tree_int_cst_equal (TYPE_SIZE (type
), TYPE_SIZE (as_base
)))
4934 arg
= build_indirect_ref (arg
, 0);
4935 val
= build2 (MODIFY_EXPR
, TREE_TYPE (to
), to
, arg
);
4939 /* We must only copy the non-tail padding parts.
4940 Use __builtin_memcpy for the bitwise copy. */
4944 args
= tree_cons (NULL
, TYPE_SIZE_UNIT (as_base
), NULL
);
4945 args
= tree_cons (NULL
, arg
, args
);
4946 t
= build_unary_op (ADDR_EXPR
, to
, 0);
4947 args
= tree_cons (NULL
, t
, args
);
4948 t
= implicit_built_in_decls
[BUILT_IN_MEMCPY
];
4949 t
= build_call (t
, args
);
4951 t
= convert (TREE_TYPE (TREE_VALUE (args
)), t
);
4952 val
= build_indirect_ref (t
, 0);
4960 if (DECL_VINDEX (fn
) && (flags
& LOOKUP_NONVIRTUAL
) == 0)
4962 tree t
, *p
= &TREE_VALUE (converted_args
);
4963 tree binfo
= lookup_base (TREE_TYPE (TREE_TYPE (*p
)),
4966 gcc_assert (binfo
&& binfo
!= error_mark_node
);
4968 *p
= build_base_path (PLUS_EXPR
, *p
, binfo
, 1);
4969 if (TREE_SIDE_EFFECTS (*p
))
4970 *p
= save_expr (*p
);
4971 t
= build_pointer_type (TREE_TYPE (fn
));
4972 if (DECL_CONTEXT (fn
) && TYPE_JAVA_INTERFACE (DECL_CONTEXT (fn
)))
4973 fn
= build_java_interface_fn_ref (fn
, *p
);
4975 fn
= build_vfn_ref (*p
, DECL_VINDEX (fn
));
4978 else if (DECL_INLINE (fn
))
4979 fn
= inline_conversion (fn
);
4981 fn
= build_addr_func (fn
);
4983 return build_cxx_call (fn
, converted_args
);
4986 /* Build and return a call to FN, using ARGS. This function performs
4987 no overload resolution, conversion, or other high-level
4991 build_cxx_call (tree fn
, tree args
)
4995 fn
= build_call (fn
, args
);
4997 /* If this call might throw an exception, note that fact. */
4998 fndecl
= get_callee_fndecl (fn
);
4999 if ((!fndecl
|| !TREE_NOTHROW (fndecl
))
5000 && at_function_scope_p ()
5002 cp_function_chain
->can_throw
= 1;
5004 /* Some built-in function calls will be evaluated at compile-time in
5006 fn
= fold_if_not_in_template (fn
);
5008 if (VOID_TYPE_P (TREE_TYPE (fn
)))
5011 fn
= require_complete_type (fn
);
5012 if (fn
== error_mark_node
)
5013 return error_mark_node
;
5015 if (IS_AGGR_TYPE (TREE_TYPE (fn
)))
5016 fn
= build_cplus_new (TREE_TYPE (fn
), fn
);
5017 return convert_from_reference (fn
);
5020 static GTY(()) tree java_iface_lookup_fn
;
5022 /* Make an expression which yields the address of the Java interface
5023 method FN. This is achieved by generating a call to libjava's
5024 _Jv_LookupInterfaceMethodIdx(). */
5027 build_java_interface_fn_ref (tree fn
, tree instance
)
5029 tree lookup_args
, lookup_fn
, method
, idx
;
5030 tree klass_ref
, iface
, iface_ref
;
5033 if (!java_iface_lookup_fn
)
5035 tree endlink
= build_void_list_node ();
5036 tree t
= tree_cons (NULL_TREE
, ptr_type_node
,
5037 tree_cons (NULL_TREE
, ptr_type_node
,
5038 tree_cons (NULL_TREE
, java_int_type_node
,
5040 java_iface_lookup_fn
5041 = builtin_function ("_Jv_LookupInterfaceMethodIdx",
5042 build_function_type (ptr_type_node
, t
),
5043 0, NOT_BUILT_IN
, NULL
, NULL_TREE
);
5046 /* Look up the pointer to the runtime java.lang.Class object for `instance'.
5047 This is the first entry in the vtable. */
5048 klass_ref
= build_vtbl_ref (build_indirect_ref (instance
, 0),
5051 /* Get the java.lang.Class pointer for the interface being called. */
5052 iface
= DECL_CONTEXT (fn
);
5053 iface_ref
= lookup_field (iface
, get_identifier ("class$"), 0, false);
5054 if (!iface_ref
|| TREE_CODE (iface_ref
) != VAR_DECL
5055 || DECL_CONTEXT (iface_ref
) != iface
)
5057 error ("could not find class$ field in java interface type %qT",
5059 return error_mark_node
;
5061 iface_ref
= build_address (iface_ref
);
5062 iface_ref
= convert (build_pointer_type (iface
), iface_ref
);
5064 /* Determine the itable index of FN. */
5066 for (method
= TYPE_METHODS (iface
); method
; method
= TREE_CHAIN (method
))
5068 if (!DECL_VIRTUAL_P (method
))
5074 idx
= build_int_cst (NULL_TREE
, i
);
5076 lookup_args
= tree_cons (NULL_TREE
, klass_ref
,
5077 tree_cons (NULL_TREE
, iface_ref
,
5078 build_tree_list (NULL_TREE
, idx
)));
5079 lookup_fn
= build1 (ADDR_EXPR
,
5080 build_pointer_type (TREE_TYPE (java_iface_lookup_fn
)),
5081 java_iface_lookup_fn
);
5082 return build3 (CALL_EXPR
, ptr_type_node
, lookup_fn
, lookup_args
, NULL_TREE
);
5085 /* Returns the value to use for the in-charge parameter when making a
5086 call to a function with the indicated NAME.
5088 FIXME:Can't we find a neater way to do this mapping? */
5091 in_charge_arg_for_name (tree name
)
5093 if (name
== base_ctor_identifier
5094 || name
== base_dtor_identifier
)
5095 return integer_zero_node
;
5096 else if (name
== complete_ctor_identifier
)
5097 return integer_one_node
;
5098 else if (name
== complete_dtor_identifier
)
5099 return integer_two_node
;
5100 else if (name
== deleting_dtor_identifier
)
5101 return integer_three_node
;
5103 /* This function should only be called with one of the names listed
5109 /* Build a call to a constructor, destructor, or an assignment
5110 operator for INSTANCE, an expression with class type. NAME
5111 indicates the special member function to call; ARGS are the
5112 arguments. BINFO indicates the base of INSTANCE that is to be
5113 passed as the `this' parameter to the member function called.
5115 FLAGS are the LOOKUP_* flags to use when processing the call.
5117 If NAME indicates a complete object constructor, INSTANCE may be
5118 NULL_TREE. In this case, the caller will call build_cplus_new to
5119 store the newly constructed object into a VAR_DECL. */
5122 build_special_member_call (tree instance
, tree name
, tree args
,
5123 tree binfo
, int flags
)
5126 /* The type of the subobject to be constructed or destroyed. */
5129 gcc_assert (name
== complete_ctor_identifier
5130 || name
== base_ctor_identifier
5131 || name
== complete_dtor_identifier
5132 || name
== base_dtor_identifier
5133 || name
== deleting_dtor_identifier
5134 || name
== ansi_assopname (NOP_EXPR
));
5137 /* Resolve the name. */
5138 if (!complete_type_or_else (binfo
, NULL_TREE
))
5139 return error_mark_node
;
5141 binfo
= TYPE_BINFO (binfo
);
5144 gcc_assert (binfo
!= NULL_TREE
);
5146 class_type
= BINFO_TYPE (binfo
);
5148 /* Handle the special case where INSTANCE is NULL_TREE. */
5149 if (name
== complete_ctor_identifier
&& !instance
)
5151 instance
= build_int_cst (build_pointer_type (class_type
), 0);
5152 instance
= build1 (INDIRECT_REF
, class_type
, instance
);
5156 if (name
== complete_dtor_identifier
5157 || name
== base_dtor_identifier
5158 || name
== deleting_dtor_identifier
)
5159 gcc_assert (args
== NULL_TREE
);
5161 /* Convert to the base class, if necessary. */
5162 if (!same_type_ignoring_top_level_qualifiers_p
5163 (TREE_TYPE (instance
), BINFO_TYPE (binfo
)))
5165 if (name
!= ansi_assopname (NOP_EXPR
))
5166 /* For constructors and destructors, either the base is
5167 non-virtual, or it is virtual but we are doing the
5168 conversion from a constructor or destructor for the
5169 complete object. In either case, we can convert
5171 instance
= convert_to_base_statically (instance
, binfo
);
5173 /* However, for assignment operators, we must convert
5174 dynamically if the base is virtual. */
5175 instance
= build_base_path (PLUS_EXPR
, instance
,
5176 binfo
, /*nonnull=*/1);
5180 gcc_assert (instance
!= NULL_TREE
);
5182 fns
= lookup_fnfields (binfo
, name
, 1);
5184 /* When making a call to a constructor or destructor for a subobject
5185 that uses virtual base classes, pass down a pointer to a VTT for
5187 if ((name
== base_ctor_identifier
5188 || name
== base_dtor_identifier
)
5189 && CLASSTYPE_VBASECLASSES (class_type
))
5194 /* If the current function is a complete object constructor
5195 or destructor, then we fetch the VTT directly.
5196 Otherwise, we look it up using the VTT we were given. */
5197 vtt
= TREE_CHAIN (CLASSTYPE_VTABLES (current_class_type
));
5198 vtt
= decay_conversion (vtt
);
5199 vtt
= build3 (COND_EXPR
, TREE_TYPE (vtt
),
5200 build2 (EQ_EXPR
, boolean_type_node
,
5201 current_in_charge_parm
, integer_zero_node
),
5204 gcc_assert (BINFO_SUBVTT_INDEX (binfo
));
5205 sub_vtt
= build2 (PLUS_EXPR
, TREE_TYPE (vtt
), vtt
,
5206 BINFO_SUBVTT_INDEX (binfo
));
5208 args
= tree_cons (NULL_TREE
, sub_vtt
, args
);
5211 return build_new_method_call (instance
, fns
, args
,
5212 TYPE_BINFO (BINFO_TYPE (binfo
)),
5216 /* Return the NAME, as a C string. The NAME indicates a function that
5217 is a member of TYPE. *FREE_P is set to true if the caller must
5218 free the memory returned.
5220 Rather than go through all of this, we should simply set the names
5221 of constructors and destructors appropriately, and dispense with
5222 ctor_identifier, dtor_identifier, etc. */
5225 name_as_c_string (tree name
, tree type
, bool *free_p
)
5229 /* Assume that we will not allocate memory. */
5231 /* Constructors and destructors are special. */
5232 if (IDENTIFIER_CTOR_OR_DTOR_P (name
))
5235 = (char *) IDENTIFIER_POINTER (constructor_name (type
));
5236 /* For a destructor, add the '~'. */
5237 if (name
== complete_dtor_identifier
5238 || name
== base_dtor_identifier
5239 || name
== deleting_dtor_identifier
)
5241 pretty_name
= concat ("~", pretty_name
, NULL
);
5242 /* Remember that we need to free the memory allocated. */
5246 else if (IDENTIFIER_TYPENAME_P (name
))
5248 pretty_name
= concat ("operator ",
5249 type_as_string (TREE_TYPE (name
),
5250 TFF_PLAIN_IDENTIFIER
),
5252 /* Remember that we need to free the memory allocated. */
5256 pretty_name
= (char *) IDENTIFIER_POINTER (name
);
5261 /* Build a call to "INSTANCE.FN (ARGS)". */
5264 build_new_method_call (tree instance
, tree fns
, tree args
,
5265 tree conversion_path
, int flags
)
5267 struct z_candidate
*candidates
= 0, *cand
;
5268 tree explicit_targs
= NULL_TREE
;
5269 tree basetype
= NULL_TREE
;
5272 tree mem_args
= NULL_TREE
, instance_ptr
;
5278 int template_only
= 0;
5285 gcc_assert (instance
!= NULL_TREE
);
5287 if (error_operand_p (instance
)
5288 || error_operand_p (fns
)
5289 || args
== error_mark_node
)
5290 return error_mark_node
;
5292 if (!BASELINK_P (fns
))
5294 error ("call to non-function %qD", fns
);
5295 return error_mark_node
;
5298 orig_instance
= instance
;
5302 /* Dismantle the baselink to collect all the information we need. */
5303 if (!conversion_path
)
5304 conversion_path
= BASELINK_BINFO (fns
);
5305 access_binfo
= BASELINK_ACCESS_BINFO (fns
);
5306 optype
= BASELINK_OPTYPE (fns
);
5307 fns
= BASELINK_FUNCTIONS (fns
);
5308 if (TREE_CODE (fns
) == TEMPLATE_ID_EXPR
)
5310 explicit_targs
= TREE_OPERAND (fns
, 1);
5311 fns
= TREE_OPERAND (fns
, 0);
5314 gcc_assert (TREE_CODE (fns
) == FUNCTION_DECL
5315 || TREE_CODE (fns
) == TEMPLATE_DECL
5316 || TREE_CODE (fns
) == OVERLOAD
);
5317 fn
= get_first_fn (fns
);
5318 name
= DECL_NAME (fn
);
5320 basetype
= TYPE_MAIN_VARIANT (TREE_TYPE (instance
));
5321 gcc_assert (CLASS_TYPE_P (basetype
));
5323 if (processing_template_decl
)
5325 instance
= build_non_dependent_expr (instance
);
5326 args
= build_non_dependent_args (orig_args
);
5329 /* The USER_ARGS are the arguments we will display to users if an
5330 error occurs. The USER_ARGS should not include any
5331 compiler-generated arguments. The "this" pointer hasn't been
5332 added yet. However, we must remove the VTT pointer if this is a
5333 call to a base-class constructor or destructor. */
5335 if (IDENTIFIER_CTOR_OR_DTOR_P (name
))
5337 /* Callers should explicitly indicate whether they want to construct
5338 the complete object or just the part without virtual bases. */
5339 gcc_assert (name
!= ctor_identifier
);
5340 /* Similarly for destructors. */
5341 gcc_assert (name
!= dtor_identifier
);
5342 /* Remove the VTT pointer, if present. */
5343 if ((name
== base_ctor_identifier
|| name
== base_dtor_identifier
)
5344 && CLASSTYPE_VBASECLASSES (basetype
))
5345 user_args
= TREE_CHAIN (user_args
);
5348 /* Process the argument list. */
5349 args
= resolve_args (args
);
5350 if (args
== error_mark_node
)
5351 return error_mark_node
;
5353 instance_ptr
= build_this (instance
);
5355 /* It's OK to call destructors on cv-qualified objects. Therefore,
5356 convert the INSTANCE_PTR to the unqualified type, if necessary. */
5357 if (DECL_DESTRUCTOR_P (fn
))
5359 tree type
= build_pointer_type (basetype
);
5360 if (!same_type_p (type
, TREE_TYPE (instance_ptr
)))
5361 instance_ptr
= build_nop (type
, instance_ptr
);
5362 name
= complete_dtor_identifier
;
5365 class_type
= (conversion_path
? BINFO_TYPE (conversion_path
) : NULL_TREE
);
5366 mem_args
= tree_cons (NULL_TREE
, instance_ptr
, args
);
5368 /* Get the high-water mark for the CONVERSION_OBSTACK. */
5369 p
= conversion_obstack_alloc (0);
5371 for (fn
= fns
; fn
; fn
= OVL_NEXT (fn
))
5373 tree t
= OVL_CURRENT (fn
);
5376 /* We can end up here for copy-init of same or base class. */
5377 if ((flags
& LOOKUP_ONLYCONVERTING
)
5378 && DECL_NONCONVERTING_P (t
))
5381 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (t
))
5382 this_arglist
= mem_args
;
5384 this_arglist
= args
;
5386 if (TREE_CODE (t
) == TEMPLATE_DECL
)
5387 /* A member template. */
5388 add_template_candidate (&candidates
, t
,
5391 this_arglist
, optype
,
5396 else if (! template_only
)
5397 add_function_candidate (&candidates
, t
,
5405 candidates
= splice_viable (candidates
, pedantic
, &any_viable_p
);
5408 if (!COMPLETE_TYPE_P (basetype
))
5409 cxx_incomplete_type_error (instance_ptr
, basetype
);
5415 pretty_name
= name_as_c_string (name
, basetype
, &free_p
);
5416 error ("no matching function for call to %<%T::%s(%A)%#V%>",
5417 basetype
, pretty_name
, user_args
,
5418 TREE_TYPE (TREE_TYPE (instance_ptr
)));
5422 print_z_candidates (candidates
);
5423 call
= error_mark_node
;
5427 cand
= tourney (candidates
);
5433 pretty_name
= name_as_c_string (name
, basetype
, &free_p
);
5434 error ("call of overloaded %<%s(%A)%> is ambiguous", pretty_name
,
5436 print_z_candidates (candidates
);
5439 call
= error_mark_node
;
5443 if (!(flags
& LOOKUP_NONVIRTUAL
)
5444 && DECL_PURE_VIRTUAL_P (cand
->fn
)
5445 && instance
== current_class_ref
5446 && (DECL_CONSTRUCTOR_P (current_function_decl
)
5447 || DECL_DESTRUCTOR_P (current_function_decl
)))
5448 /* This is not an error, it is runtime undefined
5450 warning (0, (DECL_CONSTRUCTOR_P (current_function_decl
) ?
5451 "abstract virtual %q#D called from constructor"
5452 : "abstract virtual %q#D called from destructor"),
5455 if (TREE_CODE (TREE_TYPE (cand
->fn
)) == METHOD_TYPE
5456 && is_dummy_object (instance_ptr
))
5458 error ("cannot call member function %qD without object",
5460 call
= error_mark_node
;
5464 if (DECL_VINDEX (cand
->fn
) && ! (flags
& LOOKUP_NONVIRTUAL
)
5465 && resolves_to_fixed_type_p (instance
, 0))
5466 flags
|= LOOKUP_NONVIRTUAL
;
5468 call
= build_over_call (cand
, flags
);
5470 /* In an expression of the form `a->f()' where `f' turns
5471 out to be a static member function, `a' is
5472 none-the-less evaluated. */
5473 if (TREE_CODE (TREE_TYPE (cand
->fn
)) != METHOD_TYPE
5474 && !is_dummy_object (instance_ptr
)
5475 && TREE_SIDE_EFFECTS (instance_ptr
))
5476 call
= build2 (COMPOUND_EXPR
, TREE_TYPE (call
),
5477 instance_ptr
, call
);
5478 else if (call
!= error_mark_node
5479 && DECL_DESTRUCTOR_P (cand
->fn
)
5480 && !VOID_TYPE_P (TREE_TYPE (call
)))
5481 /* An explicit call of the form "x->~X()" has type
5482 "void". However, on platforms where destructors
5483 return "this" (i.e., those where
5484 targetm.cxx.cdtor_returns_this is true), such calls
5485 will appear to have a return value of pointer type
5486 to the low-level call machinery. We do not want to
5487 change the low-level machinery, since we want to be
5488 able to optimize "delete f()" on such platforms as
5489 "operator delete(~X(f()))" (rather than generating
5490 "t = f(), ~X(t), operator delete (t)"). */
5491 call
= build_nop (void_type_node
, call
);
5496 if (processing_template_decl
&& call
!= error_mark_node
)
5497 call
= (build_min_non_dep
5499 build_min_nt (COMPONENT_REF
, orig_instance
, orig_fns
, NULL_TREE
),
5500 orig_args
, NULL_TREE
));
5502 /* Free all the conversions we allocated. */
5503 obstack_free (&conversion_obstack
, p
);
5508 /* Returns true iff standard conversion sequence ICS1 is a proper
5509 subsequence of ICS2. */
5512 is_subseq (conversion
*ics1
, conversion
*ics2
)
5514 /* We can assume that a conversion of the same code
5515 between the same types indicates a subsequence since we only get
5516 here if the types we are converting from are the same. */
5518 while (ics1
->kind
== ck_rvalue
5519 || ics1
->kind
== ck_lvalue
)
5520 ics1
= ics1
->u
.next
;
5524 while (ics2
->kind
== ck_rvalue
5525 || ics2
->kind
== ck_lvalue
)
5526 ics2
= ics2
->u
.next
;
5528 if (ics2
->kind
== ck_user
5529 || ics2
->kind
== ck_ambig
5530 || ics2
->kind
== ck_identity
)
5531 /* At this point, ICS1 cannot be a proper subsequence of
5532 ICS2. We can get a USER_CONV when we are comparing the
5533 second standard conversion sequence of two user conversion
5537 ics2
= ics2
->u
.next
;
5539 if (ics2
->kind
== ics1
->kind
5540 && same_type_p (ics2
->type
, ics1
->type
)
5541 && same_type_p (ics2
->u
.next
->type
,
5542 ics1
->u
.next
->type
))
5547 /* Returns nonzero iff DERIVED is derived from BASE. The inputs may
5548 be any _TYPE nodes. */
5551 is_properly_derived_from (tree derived
, tree base
)
5553 if (!IS_AGGR_TYPE_CODE (TREE_CODE (derived
))
5554 || !IS_AGGR_TYPE_CODE (TREE_CODE (base
)))
5557 /* We only allow proper derivation here. The DERIVED_FROM_P macro
5558 considers every class derived from itself. */
5559 return (!same_type_ignoring_top_level_qualifiers_p (derived
, base
)
5560 && DERIVED_FROM_P (base
, derived
));
5563 /* We build the ICS for an implicit object parameter as a pointer
5564 conversion sequence. However, such a sequence should be compared
5565 as if it were a reference conversion sequence. If ICS is the
5566 implicit conversion sequence for an implicit object parameter,
5567 modify it accordingly. */
5570 maybe_handle_implicit_object (conversion
**ics
)
5574 /* [over.match.funcs]
5576 For non-static member functions, the type of the
5577 implicit object parameter is "reference to cv X"
5578 where X is the class of which the function is a
5579 member and cv is the cv-qualification on the member
5580 function declaration. */
5581 conversion
*t
= *ics
;
5582 tree reference_type
;
5584 /* The `this' parameter is a pointer to a class type. Make the
5585 implicit conversion talk about a reference to that same class
5587 reference_type
= TREE_TYPE (t
->type
);
5588 reference_type
= build_reference_type (reference_type
);
5590 if (t
->kind
== ck_qual
)
5592 if (t
->kind
== ck_ptr
)
5594 t
= build_identity_conv (TREE_TYPE (t
->type
), NULL_TREE
);
5595 t
= direct_reference_binding (reference_type
, t
);
5600 /* If *ICS is a REF_BIND set *ICS to the remainder of the conversion,
5601 and return the type to which the reference refers. Otherwise,
5602 leave *ICS unchanged and return NULL_TREE. */
5605 maybe_handle_ref_bind (conversion
**ics
)
5607 if ((*ics
)->kind
== ck_ref_bind
)
5609 conversion
*old_ics
= *ics
;
5610 tree type
= TREE_TYPE (old_ics
->type
);
5611 *ics
= old_ics
->u
.next
;
5612 (*ics
)->user_conv_p
= old_ics
->user_conv_p
;
5613 (*ics
)->bad_p
= old_ics
->bad_p
;
5620 /* Compare two implicit conversion sequences according to the rules set out in
5621 [over.ics.rank]. Return values:
5623 1: ics1 is better than ics2
5624 -1: ics2 is better than ics1
5625 0: ics1 and ics2 are indistinguishable */
5628 compare_ics (conversion
*ics1
, conversion
*ics2
)
5634 tree deref_from_type1
= NULL_TREE
;
5635 tree deref_from_type2
= NULL_TREE
;
5636 tree deref_to_type1
= NULL_TREE
;
5637 tree deref_to_type2
= NULL_TREE
;
5638 conversion_rank rank1
, rank2
;
5640 /* REF_BINDING is nonzero if the result of the conversion sequence
5641 is a reference type. In that case TARGET_TYPE is the
5642 type referred to by the reference. */
5646 /* Handle implicit object parameters. */
5647 maybe_handle_implicit_object (&ics1
);
5648 maybe_handle_implicit_object (&ics2
);
5650 /* Handle reference parameters. */
5651 target_type1
= maybe_handle_ref_bind (&ics1
);
5652 target_type2
= maybe_handle_ref_bind (&ics2
);
5656 When comparing the basic forms of implicit conversion sequences (as
5657 defined in _over.best.ics_)
5659 --a standard conversion sequence (_over.ics.scs_) is a better
5660 conversion sequence than a user-defined conversion sequence
5661 or an ellipsis conversion sequence, and
5663 --a user-defined conversion sequence (_over.ics.user_) is a
5664 better conversion sequence than an ellipsis conversion sequence
5665 (_over.ics.ellipsis_). */
5666 rank1
= CONVERSION_RANK (ics1
);
5667 rank2
= CONVERSION_RANK (ics2
);
5671 else if (rank1
< rank2
)
5674 if (rank1
== cr_bad
)
5676 /* XXX Isn't this an extension? */
5677 /* Both ICS are bad. We try to make a decision based on what
5678 would have happened if they'd been good. */
5679 if (ics1
->user_conv_p
> ics2
->user_conv_p
5680 || ics1
->rank
> ics2
->rank
)
5682 else if (ics1
->user_conv_p
< ics2
->user_conv_p
5683 || ics1
->rank
< ics2
->rank
)
5686 /* We couldn't make up our minds; try to figure it out below. */
5689 if (ics1
->ellipsis_p
)
5690 /* Both conversions are ellipsis conversions. */
5693 /* User-defined conversion sequence U1 is a better conversion sequence
5694 than another user-defined conversion sequence U2 if they contain the
5695 same user-defined conversion operator or constructor and if the sec-
5696 ond standard conversion sequence of U1 is better than the second
5697 standard conversion sequence of U2. */
5699 if (ics1
->user_conv_p
)
5704 for (t1
= ics1
; t1
->kind
!= ck_user
; t1
= t1
->u
.next
)
5705 if (t1
->kind
== ck_ambig
)
5707 for (t2
= ics2
; t2
->kind
!= ck_user
; t2
= t2
->u
.next
)
5708 if (t2
->kind
== ck_ambig
)
5711 if (t1
->cand
->fn
!= t2
->cand
->fn
)
5714 /* We can just fall through here, after setting up
5715 FROM_TYPE1 and FROM_TYPE2. */
5716 from_type1
= t1
->type
;
5717 from_type2
= t2
->type
;
5724 /* We're dealing with two standard conversion sequences.
5728 Standard conversion sequence S1 is a better conversion
5729 sequence than standard conversion sequence S2 if
5731 --S1 is a proper subsequence of S2 (comparing the conversion
5732 sequences in the canonical form defined by _over.ics.scs_,
5733 excluding any Lvalue Transformation; the identity
5734 conversion sequence is considered to be a subsequence of
5735 any non-identity conversion sequence */
5738 while (t1
->kind
!= ck_identity
)
5740 from_type1
= t1
->type
;
5743 while (t2
->kind
!= ck_identity
)
5745 from_type2
= t2
->type
;
5748 if (same_type_p (from_type1
, from_type2
))
5750 if (is_subseq (ics1
, ics2
))
5752 if (is_subseq (ics2
, ics1
))
5755 /* Otherwise, one sequence cannot be a subsequence of the other; they
5756 don't start with the same type. This can happen when comparing the
5757 second standard conversion sequence in two user-defined conversion
5764 --the rank of S1 is better than the rank of S2 (by the rules
5767 Standard conversion sequences are ordered by their ranks: an Exact
5768 Match is a better conversion than a Promotion, which is a better
5769 conversion than a Conversion.
5771 Two conversion sequences with the same rank are indistinguishable
5772 unless one of the following rules applies:
5774 --A conversion that is not a conversion of a pointer, or pointer
5775 to member, to bool is better than another conversion that is such
5778 The ICS_STD_RANK automatically handles the pointer-to-bool rule,
5779 so that we do not have to check it explicitly. */
5780 if (ics1
->rank
< ics2
->rank
)
5782 else if (ics2
->rank
< ics1
->rank
)
5785 to_type1
= ics1
->type
;
5786 to_type2
= ics2
->type
;
5788 if (TYPE_PTR_P (from_type1
)
5789 && TYPE_PTR_P (from_type2
)
5790 && TYPE_PTR_P (to_type1
)
5791 && TYPE_PTR_P (to_type2
))
5793 deref_from_type1
= TREE_TYPE (from_type1
);
5794 deref_from_type2
= TREE_TYPE (from_type2
);
5795 deref_to_type1
= TREE_TYPE (to_type1
);
5796 deref_to_type2
= TREE_TYPE (to_type2
);
5798 /* The rules for pointers to members A::* are just like the rules
5799 for pointers A*, except opposite: if B is derived from A then
5800 A::* converts to B::*, not vice versa. For that reason, we
5801 switch the from_ and to_ variables here. */
5802 else if ((TYPE_PTRMEM_P (from_type1
) && TYPE_PTRMEM_P (from_type2
)
5803 && TYPE_PTRMEM_P (to_type1
) && TYPE_PTRMEM_P (to_type2
))
5804 || (TYPE_PTRMEMFUNC_P (from_type1
)
5805 && TYPE_PTRMEMFUNC_P (from_type2
)
5806 && TYPE_PTRMEMFUNC_P (to_type1
)
5807 && TYPE_PTRMEMFUNC_P (to_type2
)))
5809 deref_to_type1
= TYPE_PTRMEM_CLASS_TYPE (from_type1
);
5810 deref_to_type2
= TYPE_PTRMEM_CLASS_TYPE (from_type2
);
5811 deref_from_type1
= TYPE_PTRMEM_CLASS_TYPE (to_type1
);
5812 deref_from_type2
= TYPE_PTRMEM_CLASS_TYPE (to_type2
);
5815 if (deref_from_type1
!= NULL_TREE
5816 && IS_AGGR_TYPE_CODE (TREE_CODE (deref_from_type1
))
5817 && IS_AGGR_TYPE_CODE (TREE_CODE (deref_from_type2
)))
5819 /* This was one of the pointer or pointer-like conversions.
5823 --If class B is derived directly or indirectly from class A,
5824 conversion of B* to A* is better than conversion of B* to
5825 void*, and conversion of A* to void* is better than
5826 conversion of B* to void*. */
5827 if (TREE_CODE (deref_to_type1
) == VOID_TYPE
5828 && TREE_CODE (deref_to_type2
) == VOID_TYPE
)
5830 if (is_properly_derived_from (deref_from_type1
,
5833 else if (is_properly_derived_from (deref_from_type2
,
5837 else if (TREE_CODE (deref_to_type1
) == VOID_TYPE
5838 || TREE_CODE (deref_to_type2
) == VOID_TYPE
)
5840 if (same_type_p (deref_from_type1
, deref_from_type2
))
5842 if (TREE_CODE (deref_to_type2
) == VOID_TYPE
)
5844 if (is_properly_derived_from (deref_from_type1
,
5848 /* We know that DEREF_TO_TYPE1 is `void' here. */
5849 else if (is_properly_derived_from (deref_from_type1
,
5854 else if (IS_AGGR_TYPE_CODE (TREE_CODE (deref_to_type1
))
5855 && IS_AGGR_TYPE_CODE (TREE_CODE (deref_to_type2
)))
5859 --If class B is derived directly or indirectly from class A
5860 and class C is derived directly or indirectly from B,
5862 --conversion of C* to B* is better than conversion of C* to
5865 --conversion of B* to A* is better than conversion of C* to
5867 if (same_type_p (deref_from_type1
, deref_from_type2
))
5869 if (is_properly_derived_from (deref_to_type1
,
5872 else if (is_properly_derived_from (deref_to_type2
,
5876 else if (same_type_p (deref_to_type1
, deref_to_type2
))
5878 if (is_properly_derived_from (deref_from_type2
,
5881 else if (is_properly_derived_from (deref_from_type1
,
5887 else if (CLASS_TYPE_P (non_reference (from_type1
))
5888 && same_type_p (from_type1
, from_type2
))
5890 tree from
= non_reference (from_type1
);
5894 --binding of an expression of type C to a reference of type
5895 B& is better than binding an expression of type C to a
5896 reference of type A&
5898 --conversion of C to B is better than conversion of C to A, */
5899 if (is_properly_derived_from (from
, to_type1
)
5900 && is_properly_derived_from (from
, to_type2
))
5902 if (is_properly_derived_from (to_type1
, to_type2
))
5904 else if (is_properly_derived_from (to_type2
, to_type1
))
5908 else if (CLASS_TYPE_P (non_reference (to_type1
))
5909 && same_type_p (to_type1
, to_type2
))
5911 tree to
= non_reference (to_type1
);
5915 --binding of an expression of type B to a reference of type
5916 A& is better than binding an expression of type C to a
5917 reference of type A&,
5919 --conversion of B to A is better than conversion of C to A */
5920 if (is_properly_derived_from (from_type1
, to
)
5921 && is_properly_derived_from (from_type2
, to
))
5923 if (is_properly_derived_from (from_type2
, from_type1
))
5925 else if (is_properly_derived_from (from_type1
, from_type2
))
5932 --S1 and S2 differ only in their qualification conversion and yield
5933 similar types T1 and T2 (_conv.qual_), respectively, and the cv-
5934 qualification signature of type T1 is a proper subset of the cv-
5935 qualification signature of type T2 */
5936 if (ics1
->kind
== ck_qual
5937 && ics2
->kind
== ck_qual
5938 && same_type_p (from_type1
, from_type2
))
5939 return comp_cv_qual_signature (to_type1
, to_type2
);
5943 --S1 and S2 are reference bindings (_dcl.init.ref_), and the
5944 types to which the references refer are the same type except for
5945 top-level cv-qualifiers, and the type to which the reference
5946 initialized by S2 refers is more cv-qualified than the type to
5947 which the reference initialized by S1 refers */
5949 if (target_type1
&& target_type2
5950 && same_type_ignoring_top_level_qualifiers_p (to_type1
, to_type2
))
5951 return comp_cv_qualification (target_type2
, target_type1
);
5953 /* Neither conversion sequence is better than the other. */
5957 /* The source type for this standard conversion sequence. */
5960 source_type (conversion
*t
)
5962 for (;; t
= t
->u
.next
)
5964 if (t
->kind
== ck_user
5965 || t
->kind
== ck_ambig
5966 || t
->kind
== ck_identity
)
5972 /* Note a warning about preferring WINNER to LOSER. We do this by storing
5973 a pointer to LOSER and re-running joust to produce the warning if WINNER
5974 is actually used. */
5977 add_warning (struct z_candidate
*winner
, struct z_candidate
*loser
)
5979 candidate_warning
*cw
;
5981 cw
= conversion_obstack_alloc (sizeof (candidate_warning
));
5983 cw
->next
= winner
->warnings
;
5984 winner
->warnings
= cw
;
5987 /* Compare two candidates for overloading as described in
5988 [over.match.best]. Return values:
5990 1: cand1 is better than cand2
5991 -1: cand2 is better than cand1
5992 0: cand1 and cand2 are indistinguishable */
5995 joust (struct z_candidate
*cand1
, struct z_candidate
*cand2
, bool warn
)
5998 int off1
= 0, off2
= 0;
6002 /* Candidates that involve bad conversions are always worse than those
6004 if (cand1
->viable
> cand2
->viable
)
6006 if (cand1
->viable
< cand2
->viable
)
6009 /* If we have two pseudo-candidates for conversions to the same type,
6010 or two candidates for the same function, arbitrarily pick one. */
6011 if (cand1
->fn
== cand2
->fn
6012 && (IS_TYPE_OR_DECL_P (cand1
->fn
)))
6015 /* a viable function F1
6016 is defined to be a better function than another viable function F2 if
6017 for all arguments i, ICSi(F1) is not a worse conversion sequence than
6018 ICSi(F2), and then */
6020 /* for some argument j, ICSj(F1) is a better conversion sequence than
6023 /* For comparing static and non-static member functions, we ignore
6024 the implicit object parameter of the non-static function. The
6025 standard says to pretend that the static function has an object
6026 parm, but that won't work with operator overloading. */
6027 len
= cand1
->num_convs
;
6028 if (len
!= cand2
->num_convs
)
6030 int static_1
= DECL_STATIC_FUNCTION_P (cand1
->fn
);
6031 int static_2
= DECL_STATIC_FUNCTION_P (cand2
->fn
);
6033 gcc_assert (static_1
!= static_2
);
6044 for (i
= 0; i
< len
; ++i
)
6046 conversion
*t1
= cand1
->convs
[i
+ off1
];
6047 conversion
*t2
= cand2
->convs
[i
+ off2
];
6048 int comp
= compare_ics (t1
, t2
);
6053 && (CONVERSION_RANK (t1
) + CONVERSION_RANK (t2
)
6054 == cr_std
+ cr_promotion
)
6055 && t1
->kind
== ck_std
6056 && t2
->kind
== ck_std
6057 && TREE_CODE (t1
->type
) == INTEGER_TYPE
6058 && TREE_CODE (t2
->type
) == INTEGER_TYPE
6059 && (TYPE_PRECISION (t1
->type
)
6060 == TYPE_PRECISION (t2
->type
))
6061 && (TYPE_UNSIGNED (t1
->u
.next
->type
)
6062 || (TREE_CODE (t1
->u
.next
->type
)
6065 tree type
= t1
->u
.next
->type
;
6067 struct z_candidate
*w
, *l
;
6069 type1
= t1
->type
, type2
= t2
->type
,
6070 w
= cand1
, l
= cand2
;
6072 type1
= t2
->type
, type2
= t1
->type
,
6073 w
= cand2
, l
= cand1
;
6077 warning (0, "passing %qT chooses %qT over %qT",
6078 type
, type1
, type2
);
6079 warning (0, " in call to %qD", w
->fn
);
6085 if (winner
&& comp
!= winner
)
6094 /* warn about confusing overload resolution for user-defined conversions,
6095 either between a constructor and a conversion op, or between two
6097 if (winner
&& warn_conversion
&& cand1
->second_conv
6098 && (!DECL_CONSTRUCTOR_P (cand1
->fn
) || !DECL_CONSTRUCTOR_P (cand2
->fn
))
6099 && winner
!= compare_ics (cand1
->second_conv
, cand2
->second_conv
))
6101 struct z_candidate
*w
, *l
;
6102 bool give_warning
= false;
6105 w
= cand1
, l
= cand2
;
6107 w
= cand2
, l
= cand1
;
6109 /* We don't want to complain about `X::operator T1 ()'
6110 beating `X::operator T2 () const', when T2 is a no less
6111 cv-qualified version of T1. */
6112 if (DECL_CONTEXT (w
->fn
) == DECL_CONTEXT (l
->fn
)
6113 && !DECL_CONSTRUCTOR_P (w
->fn
) && !DECL_CONSTRUCTOR_P (l
->fn
))
6115 tree t
= TREE_TYPE (TREE_TYPE (l
->fn
));
6116 tree f
= TREE_TYPE (TREE_TYPE (w
->fn
));
6118 if (TREE_CODE (t
) == TREE_CODE (f
) && POINTER_TYPE_P (t
))
6123 if (!comp_ptr_ttypes (t
, f
))
6124 give_warning
= true;
6127 give_warning
= true;
6133 tree source
= source_type (w
->convs
[0]);
6134 if (! DECL_CONSTRUCTOR_P (w
->fn
))
6135 source
= TREE_TYPE (source
);
6136 warning (0, "choosing %qD over %qD", w
->fn
, l
->fn
);
6137 warning (0, " for conversion from %qT to %qT",
6138 source
, w
->second_conv
->type
);
6139 warning (0, " because conversion sequence for the argument is better");
6149 F1 is a non-template function and F2 is a template function
6152 if (!cand1
->template_decl
&& cand2
->template_decl
)
6154 else if (cand1
->template_decl
&& !cand2
->template_decl
)
6158 F1 and F2 are template functions and the function template for F1 is
6159 more specialized than the template for F2 according to the partial
6162 if (cand1
->template_decl
&& cand2
->template_decl
)
6164 winner
= more_specialized_fn
6165 (TI_TEMPLATE (cand1
->template_decl
),
6166 TI_TEMPLATE (cand2
->template_decl
),
6167 /* [temp.func.order]: The presence of unused ellipsis and default
6168 arguments has no effect on the partial ordering of function
6169 templates. add_function_candidate() will not have
6170 counted the "this" argument for constructors. */
6171 cand1
->num_convs
+ DECL_CONSTRUCTOR_P (cand1
->fn
));
6177 the context is an initialization by user-defined conversion (see
6178 _dcl.init_ and _over.match.user_) and the standard conversion
6179 sequence from the return type of F1 to the destination type (i.e.,
6180 the type of the entity being initialized) is a better conversion
6181 sequence than the standard conversion sequence from the return type
6182 of F2 to the destination type. */
6184 if (cand1
->second_conv
)
6186 winner
= compare_ics (cand1
->second_conv
, cand2
->second_conv
);
6191 /* Check whether we can discard a builtin candidate, either because we
6192 have two identical ones or matching builtin and non-builtin candidates.
6194 (Pedantically in the latter case the builtin which matched the user
6195 function should not be added to the overload set, but we spot it here.
6198 ... the builtin candidates include ...
6199 - do not have the same parameter type list as any non-template
6200 non-member candidate. */
6202 if (TREE_CODE (cand1
->fn
) == IDENTIFIER_NODE
6203 || TREE_CODE (cand2
->fn
) == IDENTIFIER_NODE
)
6205 for (i
= 0; i
< len
; ++i
)
6206 if (!same_type_p (cand1
->convs
[i
]->type
,
6207 cand2
->convs
[i
]->type
))
6209 if (i
== cand1
->num_convs
)
6211 if (cand1
->fn
== cand2
->fn
)
6212 /* Two built-in candidates; arbitrarily pick one. */
6214 else if (TREE_CODE (cand1
->fn
) == IDENTIFIER_NODE
)
6215 /* cand1 is built-in; prefer cand2. */
6218 /* cand2 is built-in; prefer cand1. */
6223 /* If the two functions are the same (this can happen with declarations
6224 in multiple scopes and arg-dependent lookup), arbitrarily choose one. */
6225 if (DECL_P (cand1
->fn
) && DECL_P (cand2
->fn
)
6226 && equal_functions (cand1
->fn
, cand2
->fn
))
6231 /* Extension: If the worst conversion for one candidate is worse than the
6232 worst conversion for the other, take the first. */
6235 conversion_rank rank1
= cr_identity
, rank2
= cr_identity
;
6236 struct z_candidate
*w
= 0, *l
= 0;
6238 for (i
= 0; i
< len
; ++i
)
6240 if (CONVERSION_RANK (cand1
->convs
[i
+off1
]) > rank1
)
6241 rank1
= CONVERSION_RANK (cand1
->convs
[i
+off1
]);
6242 if (CONVERSION_RANK (cand2
->convs
[i
+ off2
]) > rank2
)
6243 rank2
= CONVERSION_RANK (cand2
->convs
[i
+ off2
]);
6246 winner
= 1, w
= cand1
, l
= cand2
;
6248 winner
= -1, w
= cand2
, l
= cand1
;
6254 ISO C++ says that these are ambiguous, even \
6255 though the worst conversion for the first is better than \
6256 the worst conversion for the second:");
6257 print_z_candidate (_("candidate 1:"), w
);
6258 print_z_candidate (_("candidate 2:"), l
);
6266 gcc_assert (!winner
);
6270 /* Given a list of candidates for overloading, find the best one, if any.
6271 This algorithm has a worst case of O(2n) (winner is last), and a best
6272 case of O(n/2) (totally ambiguous); much better than a sorting
6275 static struct z_candidate
*
6276 tourney (struct z_candidate
*candidates
)
6278 struct z_candidate
*champ
= candidates
, *challenger
;
6280 int champ_compared_to_predecessor
= 0;
6282 /* Walk through the list once, comparing each current champ to the next
6283 candidate, knocking out a candidate or two with each comparison. */
6285 for (challenger
= champ
->next
; challenger
; )
6287 fate
= joust (champ
, challenger
, 0);
6289 challenger
= challenger
->next
;
6294 champ
= challenger
->next
;
6297 champ_compared_to_predecessor
= 0;
6302 champ_compared_to_predecessor
= 1;
6305 challenger
= champ
->next
;
6309 /* Make sure the champ is better than all the candidates it hasn't yet
6310 been compared to. */
6312 for (challenger
= candidates
;
6314 && !(champ_compared_to_predecessor
&& challenger
->next
== champ
);
6315 challenger
= challenger
->next
)
6317 fate
= joust (champ
, challenger
, 0);
6325 /* Returns nonzero if things of type FROM can be converted to TO. */
6328 can_convert (tree to
, tree from
)
6330 return can_convert_arg (to
, from
, NULL_TREE
, LOOKUP_NORMAL
);
6333 /* Returns nonzero if ARG (of type FROM) can be converted to TO. */
6336 can_convert_arg (tree to
, tree from
, tree arg
, int flags
)
6342 /* Get the high-water mark for the CONVERSION_OBSTACK. */
6343 p
= conversion_obstack_alloc (0);
6345 t
= implicit_conversion (to
, from
, arg
, /*c_cast_p=*/false,
6347 ok_p
= (t
&& !t
->bad_p
);
6349 /* Free all the conversions we allocated. */
6350 obstack_free (&conversion_obstack
, p
);
6355 /* Like can_convert_arg, but allows dubious conversions as well. */
6358 can_convert_arg_bad (tree to
, tree from
, tree arg
)
6363 /* Get the high-water mark for the CONVERSION_OBSTACK. */
6364 p
= conversion_obstack_alloc (0);
6365 /* Try to perform the conversion. */
6366 t
= implicit_conversion (to
, from
, arg
, /*c_cast_p=*/false,
6368 /* Free all the conversions we allocated. */
6369 obstack_free (&conversion_obstack
, p
);
6374 /* Convert EXPR to TYPE. Return the converted expression.
6376 Note that we allow bad conversions here because by the time we get to
6377 this point we are committed to doing the conversion. If we end up
6378 doing a bad conversion, convert_like will complain. */
6381 perform_implicit_conversion (tree type
, tree expr
)
6386 if (error_operand_p (expr
))
6387 return error_mark_node
;
6389 /* Get the high-water mark for the CONVERSION_OBSTACK. */
6390 p
= conversion_obstack_alloc (0);
6392 conv
= implicit_conversion (type
, TREE_TYPE (expr
), expr
,
6397 error ("could not convert %qE to %qT", expr
, type
);
6398 expr
= error_mark_node
;
6400 else if (processing_template_decl
)
6402 /* In a template, we are only concerned about determining the
6403 type of non-dependent expressions, so we do not have to
6404 perform the actual conversion. */
6405 if (TREE_TYPE (expr
) != type
)
6406 expr
= build_nop (type
, expr
);
6409 expr
= convert_like (conv
, expr
);
6411 /* Free all the conversions we allocated. */
6412 obstack_free (&conversion_obstack
, p
);
6417 /* Convert EXPR to TYPE (as a direct-initialization) if that is
6418 permitted. If the conversion is valid, the converted expression is
6419 returned. Otherwise, NULL_TREE is returned, except in the case
6420 that TYPE is a class type; in that case, an error is issued. If
6421 C_CAST_P is true, then this direction initialization is taking
6422 place as part of a static_cast being attempted as part of a C-style
6426 perform_direct_initialization_if_possible (tree type
,
6433 if (type
== error_mark_node
|| error_operand_p (expr
))
6434 return error_mark_node
;
6437 If the destination type is a (possibly cv-qualified) class type:
6439 -- If the initialization is direct-initialization ...,
6440 constructors are considered. ... If no constructor applies, or
6441 the overload resolution is ambiguous, the initialization is
6443 if (CLASS_TYPE_P (type
))
6445 expr
= build_special_member_call (NULL_TREE
, complete_ctor_identifier
,
6446 build_tree_list (NULL_TREE
, expr
),
6447 type
, LOOKUP_NORMAL
);
6448 return build_cplus_new (type
, expr
);
6451 /* Get the high-water mark for the CONVERSION_OBSTACK. */
6452 p
= conversion_obstack_alloc (0);
6454 conv
= implicit_conversion (type
, TREE_TYPE (expr
), expr
,
6457 if (!conv
|| conv
->bad_p
)
6460 expr
= convert_like_real (conv
, expr
, NULL_TREE
, 0, 0,
6461 /*issue_conversion_warnings=*/false,
6464 /* Free all the conversions we allocated. */
6465 obstack_free (&conversion_obstack
, p
);
6470 /* DECL is a VAR_DECL whose type is a REFERENCE_TYPE. The reference
6471 is being bound to a temporary. Create and return a new VAR_DECL
6472 with the indicated TYPE; this variable will store the value to
6473 which the reference is bound. */
6476 make_temporary_var_for_ref_to_temp (tree decl
, tree type
)
6480 /* Create the variable. */
6481 var
= create_temporary_var (type
);
6483 /* Register the variable. */
6484 if (TREE_STATIC (decl
))
6486 /* Namespace-scope or local static; give it a mangled name. */
6489 TREE_STATIC (var
) = 1;
6490 name
= mangle_ref_init_variable (decl
);
6491 DECL_NAME (var
) = name
;
6492 SET_DECL_ASSEMBLER_NAME (var
, name
);
6493 var
= pushdecl_top_level (var
);
6496 /* Create a new cleanup level if necessary. */
6497 maybe_push_cleanup_level (type
);
6502 /* Convert EXPR to the indicated reference TYPE, in a way suitable for
6503 initializing a variable of that TYPE. If DECL is non-NULL, it is
6504 the VAR_DECL being initialized with the EXPR. (In that case, the
6505 type of DECL will be TYPE.) If DECL is non-NULL, then CLEANUP must
6506 also be non-NULL, and with *CLEANUP initialized to NULL. Upon
6507 return, if *CLEANUP is no longer NULL, it will be an expression
6508 that should be pushed as a cleanup after the returned expression
6509 is used to initialize DECL.
6511 Return the converted expression. */
6514 initialize_reference (tree type
, tree expr
, tree decl
, tree
*cleanup
)
6519 if (type
== error_mark_node
|| error_operand_p (expr
))
6520 return error_mark_node
;
6522 /* Get the high-water mark for the CONVERSION_OBSTACK. */
6523 p
= conversion_obstack_alloc (0);
6525 conv
= reference_binding (type
, TREE_TYPE (expr
), expr
, /*c_cast_p=*/false,
6527 if (!conv
|| conv
->bad_p
)
6529 if (!(TYPE_QUALS (TREE_TYPE (type
)) & TYPE_QUAL_CONST
)
6530 && !real_lvalue_p (expr
))
6531 error ("invalid initialization of non-const reference of "
6532 "type %qT from a temporary of type %qT",
6533 type
, TREE_TYPE (expr
));
6535 error ("invalid initialization of reference of type "
6536 "%qT from expression of type %qT", type
,
6538 return error_mark_node
;
6541 /* If DECL is non-NULL, then this special rule applies:
6545 The temporary to which the reference is bound or the temporary
6546 that is the complete object to which the reference is bound
6547 persists for the lifetime of the reference.
6549 The temporaries created during the evaluation of the expression
6550 initializing the reference, except the temporary to which the
6551 reference is bound, are destroyed at the end of the
6552 full-expression in which they are created.
6554 In that case, we store the converted expression into a new
6555 VAR_DECL in a new scope.
6557 However, we want to be careful not to create temporaries when
6558 they are not required. For example, given:
6561 struct D : public B {};
6565 there is no need to copy the return value from "f"; we can just
6566 extend its lifetime. Similarly, given:
6569 struct T { operator S(); };
6573 we can extend the lifetime of the return value of the conversion
6575 gcc_assert (conv
->kind
== ck_ref_bind
);
6579 tree base_conv_type
;
6581 /* Skip over the REF_BIND. */
6582 conv
= conv
->u
.next
;
6583 /* If the next conversion is a BASE_CONV, skip that too -- but
6584 remember that the conversion was required. */
6585 if (conv
->kind
== ck_base
)
6587 if (conv
->check_copy_constructor_p
)
6588 check_constructor_callable (TREE_TYPE (expr
), expr
);
6589 base_conv_type
= conv
->type
;
6590 conv
= conv
->u
.next
;
6593 base_conv_type
= NULL_TREE
;
6594 /* Perform the remainder of the conversion. */
6595 expr
= convert_like_real (conv
, expr
,
6596 /*fn=*/NULL_TREE
, /*argnum=*/0,
6598 /*issue_conversion_warnings=*/true,
6599 /*c_cast_p=*/false);
6600 if (error_operand_p (expr
))
6601 expr
= error_mark_node
;
6604 if (!real_lvalue_p (expr
))
6609 /* Create the temporary variable. */
6610 type
= TREE_TYPE (expr
);
6611 var
= make_temporary_var_for_ref_to_temp (decl
, type
);
6612 layout_decl (var
, 0);
6613 /* If the rvalue is the result of a function call it will be
6614 a TARGET_EXPR. If it is some other construct (such as a
6615 member access expression where the underlying object is
6616 itself the result of a function call), turn it into a
6617 TARGET_EXPR here. It is important that EXPR be a
6618 TARGET_EXPR below since otherwise the INIT_EXPR will
6619 attempt to make a bitwise copy of EXPR to initialize
6621 if (TREE_CODE (expr
) != TARGET_EXPR
)
6622 expr
= get_target_expr (expr
);
6623 /* Create the INIT_EXPR that will initialize the temporary
6625 init
= build2 (INIT_EXPR
, type
, var
, expr
);
6626 if (at_function_scope_p ())
6628 add_decl_expr (var
);
6629 *cleanup
= cxx_maybe_build_cleanup (var
);
6631 /* We must be careful to destroy the temporary only
6632 after its initialization has taken place. If the
6633 initialization throws an exception, then the
6634 destructor should not be run. We cannot simply
6635 transform INIT into something like:
6637 (INIT, ({ CLEANUP_STMT; }))
6639 because emit_local_var always treats the
6640 initializer as a full-expression. Thus, the
6641 destructor would run too early; it would run at the
6642 end of initializing the reference variable, rather
6643 than at the end of the block enclosing the
6646 The solution is to pass back a cleanup expression
6647 which the caller is responsible for attaching to
6648 the statement tree. */
6652 rest_of_decl_compilation (var
, /*toplev=*/1, at_eof
);
6653 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type
))
6654 static_aggregates
= tree_cons (NULL_TREE
, var
,
6657 /* Use its address to initialize the reference variable. */
6658 expr
= build_address (var
);
6660 expr
= convert_to_base (expr
,
6661 build_pointer_type (base_conv_type
),
6662 /*check_access=*/true,
6664 expr
= build2 (COMPOUND_EXPR
, TREE_TYPE (expr
), init
, expr
);
6667 /* Take the address of EXPR. */
6668 expr
= build_unary_op (ADDR_EXPR
, expr
, 0);
6669 /* If a BASE_CONV was required, perform it now. */
6671 expr
= (perform_implicit_conversion
6672 (build_pointer_type (base_conv_type
), expr
));
6673 expr
= build_nop (type
, expr
);
6677 /* Perform the conversion. */
6678 expr
= convert_like (conv
, expr
);
6680 /* Free all the conversions we allocated. */
6681 obstack_free (&conversion_obstack
, p
);
6686 #include "gt-cp-call.h"