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 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, 59 Temple Place - Suite 330,
22 Boston, MA 02111-1307, USA. */
25 /* High-level class interface. */
29 #include "coretypes.h"
38 #include "diagnostic.h"
40 extern int inhibit_warnings;
42 static tree build_field_call (tree, tree, tree);
43 static struct z_candidate * tourney (struct z_candidate *);
44 static int equal_functions (tree, tree);
45 static int joust (struct z_candidate *, struct z_candidate *, bool);
46 static int compare_ics (tree, tree);
47 static tree build_over_call (struct z_candidate *, int);
48 static tree build_java_interface_fn_ref (tree, tree);
49 #define convert_like(CONV, EXPR) \
50 convert_like_real ((CONV), (EXPR), NULL_TREE, 0, 0)
51 #define convert_like_with_context(CONV, EXPR, FN, ARGNO) \
52 convert_like_real ((CONV), (EXPR), (FN), (ARGNO), 0)
53 static tree convert_like_real (tree, tree, tree, int, int);
54 static void op_error (enum tree_code, enum tree_code, tree, tree,
56 static tree build_object_call (tree, tree);
57 static tree resolve_args (tree);
58 static struct z_candidate *build_user_type_conversion_1 (tree, tree, int);
59 static void print_z_candidates (struct z_candidate *);
60 static tree build_this (tree);
61 static struct z_candidate *splice_viable (struct z_candidate *, bool, bool *);
62 static bool any_strictly_viable (struct z_candidate *);
63 static struct z_candidate *add_template_candidate
64 (struct z_candidate **, tree, tree, tree, tree, tree,
65 tree, tree, int, unification_kind_t);
66 static struct z_candidate *add_template_candidate_real
67 (struct z_candidate **, tree, tree, tree, tree, tree,
68 tree, tree, int, tree, unification_kind_t);
69 static struct z_candidate *add_template_conv_candidate
70 (struct z_candidate **, tree, tree, tree, tree, tree, tree);
71 static void add_builtin_candidates
72 (struct z_candidate **, enum tree_code, enum tree_code,
74 static void add_builtin_candidate
75 (struct z_candidate **, enum tree_code, enum tree_code,
76 tree, tree, tree, tree *, tree *, int);
77 static bool is_complete (tree);
78 static void build_builtin_candidate
79 (struct z_candidate **, tree, tree, tree, tree *, tree *,
81 static struct z_candidate *add_conv_candidate
82 (struct z_candidate **, tree, tree, tree, tree, tree);
83 static struct z_candidate *add_function_candidate
84 (struct z_candidate **, tree, tree, tree, tree, tree, int);
85 static tree implicit_conversion (tree, tree, tree, int);
86 static tree standard_conversion (tree, tree, tree);
87 static tree reference_binding (tree, tree, tree, int);
88 static tree non_reference (tree);
89 static tree build_conv (enum tree_code, tree, tree);
90 static bool is_subseq (tree, tree);
91 static tree maybe_handle_ref_bind (tree *);
92 static void maybe_handle_implicit_object (tree *);
93 static struct z_candidate *add_candidate
94 (struct z_candidate **, tree, tree, tree, tree, tree, int);
95 static tree source_type (tree);
96 static void add_warning (struct z_candidate *, struct z_candidate *);
97 static bool reference_related_p (tree, tree);
98 static bool reference_compatible_p (tree, tree);
99 static tree convert_class_to_reference (tree, tree, tree);
100 static tree direct_reference_binding (tree, tree);
101 static bool promoted_arithmetic_type_p (tree);
102 static tree conditional_conversion (tree, tree);
103 static char *name_as_c_string (tree, tree, bool *);
104 static tree call_builtin_trap (void);
105 static tree prep_operand (tree);
106 static void add_candidates (tree, tree, tree, bool, tree, tree,
107 int, struct z_candidate **);
108 static tree merge_conversion_sequences (tree, tree);
111 build_vfield_ref (tree datum, tree type)
113 if (datum == error_mark_node)
114 return error_mark_node;
116 if (TREE_CODE (TREE_TYPE (datum)) == REFERENCE_TYPE)
117 datum = convert_from_reference (datum);
119 if (TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (type)
120 && !same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (datum), type))
121 datum = convert_to_base (datum, type, /*check_access=*/false);
123 return build (COMPONENT_REF, TREE_TYPE (TYPE_VFIELD (type)),
124 datum, TYPE_VFIELD (type));
127 /* Build a call to a member of an object. I.e., one that overloads
128 operator ()(), or is a pointer-to-function or pointer-to-method. */
131 build_field_call (tree instance_ptr, tree decl, tree parms)
135 if (decl == error_mark_node || decl == NULL_TREE)
138 if (TREE_CODE (decl) == FIELD_DECL || TREE_CODE (decl) == VAR_DECL)
140 /* If it's a field, try overloading operator (),
141 or calling if the field is a pointer-to-function. */
142 instance = build_indirect_ref (instance_ptr, NULL);
143 instance = build_class_member_access_expr (instance, decl,
144 /*access_path=*/NULL_TREE,
145 /*preserve_reference=*/false);
147 if (instance == error_mark_node)
148 return error_mark_node;
150 if (IS_AGGR_TYPE (TREE_TYPE (instance)))
151 return build_new_op (CALL_EXPR, LOOKUP_NORMAL,
152 instance, parms, NULL_TREE);
153 else if (TREE_CODE (TREE_TYPE (instance)) == FUNCTION_TYPE
154 || (TREE_CODE (TREE_TYPE (instance)) == POINTER_TYPE
155 && (TREE_CODE (TREE_TYPE (TREE_TYPE (instance)))
157 return build_function_call (instance, parms);
163 /* Returns nonzero iff the destructor name specified in NAME
164 (a BIT_NOT_EXPR) matches BASETYPE. The operand of NAME can take many
168 check_dtor_name (tree basetype, tree name)
170 name = TREE_OPERAND (name, 0);
172 /* Just accept something we've already complained about. */
173 if (name == error_mark_node)
176 if (TREE_CODE (name) == TYPE_DECL)
177 name = TREE_TYPE (name);
178 else if (TYPE_P (name))
180 else if (TREE_CODE (name) == IDENTIFIER_NODE)
182 if ((IS_AGGR_TYPE (basetype) && name == constructor_name (basetype))
183 || (TREE_CODE (basetype) == ENUMERAL_TYPE
184 && name == TYPE_IDENTIFIER (basetype)))
187 name = get_type_value (name);
191 template <class T> struct S { ~S(); };
195 NAME will be a class template. */
196 else if (DECL_CLASS_TEMPLATE_P (name))
201 if (name && TYPE_MAIN_VARIANT (basetype) == TYPE_MAIN_VARIANT (name))
206 /* Build a method call of the form `EXP->SCOPES::NAME (PARMS)'.
207 This is how virtual function calls are avoided. */
210 build_scoped_method_call (tree exp, tree basetype, tree name, tree parms)
212 /* Because this syntactic form does not allow
213 a pointer to a base class to be `stolen',
214 we need not protect the derived->base conversion
217 @@ But we do have to check access privileges later. */
219 tree type = TREE_TYPE (exp);
221 if (type == error_mark_node
222 || basetype == error_mark_node)
223 return error_mark_node;
225 if (processing_template_decl)
227 name = build_min_nt (SCOPE_REF, basetype, name);
228 return build_min_nt (METHOD_CALL_EXPR, name, exp, parms, NULL_TREE);
231 if (TREE_CODE (type) == REFERENCE_TYPE)
232 type = TREE_TYPE (type);
234 if (TREE_CODE (basetype) == TREE_VEC)
237 basetype = BINFO_TYPE (binfo);
242 /* Check the destructor call syntax. */
243 if (TREE_CODE (name) == BIT_NOT_EXPR)
245 /* We can get here if someone writes their destructor call like
246 `obj.NS::~T()'; this isn't really a scoped method call, so hand
248 if (TREE_CODE (basetype) == NAMESPACE_DECL)
249 return build_method_call (exp, name, parms, NULL_TREE, LOOKUP_NORMAL);
251 if (! check_dtor_name (basetype, name))
252 error ("qualified type `%T' does not match destructor name `~%T'",
253 basetype, TREE_OPERAND (name, 0));
255 /* Destructors can be "called" for simple types; see 5.2.4 and 12.4 Note
256 that explicit ~int is caught in the parser; this deals with typedefs
257 and template parms. */
258 if (! IS_AGGR_TYPE (basetype))
260 if (TYPE_MAIN_VARIANT (type) != TYPE_MAIN_VARIANT (basetype))
261 error ("type of `%E' does not match destructor type `%T' (type was `%T')",
262 exp, basetype, type);
264 return cp_convert (void_type_node, exp);
268 if (TREE_CODE (basetype) == NAMESPACE_DECL)
270 error ("`%D' is a namespace", basetype);
271 return error_mark_node;
273 if (! is_aggr_type (basetype, 1))
274 return error_mark_node;
276 if (! IS_AGGR_TYPE (type))
278 error ("base object `%E' of scoped method call is of non-aggregate type `%T'",
280 return error_mark_node;
283 decl = build_scoped_ref (exp, basetype, &binfo);
287 /* Call to a destructor. */
288 if (TREE_CODE (name) == BIT_NOT_EXPR)
290 if (! TYPE_HAS_DESTRUCTOR (TREE_TYPE (decl)))
291 return cp_convert (void_type_node, exp);
293 return build_delete (TREE_TYPE (decl), decl,
294 sfk_complete_destructor,
295 LOOKUP_NORMAL|LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR,
299 /* Call to a method. */
300 return build_method_call (decl, name, parms, binfo,
301 LOOKUP_NORMAL|LOOKUP_NONVIRTUAL);
303 return error_mark_node;
306 /* We want the address of a function or method. We avoid creating a
307 pointer-to-member function. */
310 build_addr_func (tree function)
312 tree type = TREE_TYPE (function);
314 /* We have to do these by hand to avoid real pointer to member
316 if (TREE_CODE (type) == METHOD_TYPE)
320 type = build_pointer_type (type);
322 if (!cxx_mark_addressable (function))
323 return error_mark_node;
325 addr = build1 (ADDR_EXPR, type, function);
327 /* Address of a static or external variable or function counts
329 if (staticp (function))
330 TREE_CONSTANT (addr) = 1;
335 function = default_conversion (function);
340 /* Build a CALL_EXPR, we can handle FUNCTION_TYPEs, METHOD_TYPEs, or
341 POINTER_TYPE to those. Note, pointer to member function types
342 (TYPE_PTRMEMFUNC_P) must be handled by our callers. */
345 build_call (tree function, tree parms)
347 int is_constructor = 0;
354 function = build_addr_func (function);
356 if (TYPE_PTRMEMFUNC_P (TREE_TYPE (function)))
358 sorry ("unable to call pointer to member function here");
359 return error_mark_node;
362 fntype = TREE_TYPE (TREE_TYPE (function));
363 result_type = TREE_TYPE (fntype);
365 if (TREE_CODE (function) == ADDR_EXPR
366 && TREE_CODE (TREE_OPERAND (function, 0)) == FUNCTION_DECL)
367 decl = TREE_OPERAND (function, 0);
371 /* We check both the decl and the type; a function may be known not to
372 throw without being declared throw(). */
373 nothrow = ((decl && TREE_NOTHROW (decl))
374 || TYPE_NOTHROW_P (TREE_TYPE (TREE_TYPE (function))));
376 if (decl && TREE_THIS_VOLATILE (decl) && cfun)
377 current_function_returns_abnormally = 1;
379 if (decl && TREE_DEPRECATED (decl))
380 warn_deprecated_use (decl);
381 require_complete_eh_spec_types (fntype, decl);
383 if (decl && DECL_CONSTRUCTOR_P (decl))
386 if (decl && ! TREE_USED (decl))
388 /* We invoke build_call directly for several library functions.
389 These may have been declared normally if we're building libgcc,
390 so we can't just check DECL_ARTIFICIAL. */
391 if (DECL_ARTIFICIAL (decl)
392 || !strncmp (IDENTIFIER_POINTER (DECL_NAME (decl)), "__", 2))
398 /* Don't pass empty class objects by value. This is useful
399 for tags in STL, which are used to control overload resolution.
400 We don't need to handle other cases of copying empty classes. */
401 if (! decl || ! DECL_BUILT_IN (decl))
402 for (tmp = parms; tmp; tmp = TREE_CHAIN (tmp))
403 if (is_empty_class (TREE_TYPE (TREE_VALUE (tmp)))
404 && ! TREE_ADDRESSABLE (TREE_TYPE (TREE_VALUE (tmp))))
406 tree t = build (EMPTY_CLASS_EXPR, TREE_TYPE (TREE_VALUE (tmp)));
407 TREE_VALUE (tmp) = build (COMPOUND_EXPR, TREE_TYPE (t),
408 TREE_VALUE (tmp), t);
411 function = build_nt (CALL_EXPR, function, parms, NULL_TREE);
412 TREE_HAS_CONSTRUCTOR (function) = is_constructor;
413 TREE_TYPE (function) = result_type;
414 TREE_SIDE_EFFECTS (function) = 1;
415 TREE_NOTHROW (function) = nothrow;
420 /* Build something of the form ptr->method (args)
421 or object.method (args). This can also build
422 calls to constructors, and find friends.
424 Member functions always take their class variable
427 INSTANCE is a class instance.
429 NAME is the name of the method desired, usually an IDENTIFIER_NODE.
431 PARMS help to figure out what that NAME really refers to.
433 BASETYPE_PATH, if non-NULL, contains a chain from the type of INSTANCE
434 down to the real instance type to use for access checking. We need this
435 information to get protected accesses correct. This parameter is used
436 by build_member_call.
438 FLAGS is the logical disjunction of zero or more LOOKUP_
439 flags. See cp-tree.h for more info.
441 If this is all OK, calls build_function_call with the resolved
444 This function must also handle being called to perform
445 initialization, promotion/coercion of arguments, and
446 instantiation of default parameters.
448 Note that NAME may refer to an instance variable name. If
449 `operator()()' is defined for the type of that field, then we return
452 #ifdef GATHER_STATISTICS
453 extern int n_build_method_call;
457 build_method_call (tree instance, tree name, tree parms,
458 tree basetype_path, int flags)
462 tree template_args = NULL_TREE;
463 bool has_template_args = false;
465 #ifdef GATHER_STATISTICS
466 n_build_method_call++;
469 if (instance == error_mark_node
470 || name == error_mark_node
471 || parms == error_mark_node
472 || (instance && TREE_TYPE (instance) == error_mark_node))
473 return error_mark_node;
475 if (processing_template_decl)
476 return build_min_nt (METHOD_CALL_EXPR, name, instance, parms, NULL_TREE);
478 if (TREE_CODE (instance) == OFFSET_REF)
479 instance = resolve_offset_ref (instance);
480 if (TREE_CODE (TREE_TYPE (instance)) == REFERENCE_TYPE)
481 instance = convert_from_reference (instance);
482 object_type = TREE_TYPE (instance);
484 if (TREE_CODE (name) == BIT_NOT_EXPR)
489 error ("destructors take no parameters");
491 if (! check_dtor_name (object_type, name))
493 ("destructor name `~%T' does not match type `%T' of expression",
494 TREE_OPERAND (name, 0), object_type);
496 if (! TYPE_HAS_DESTRUCTOR (complete_type (object_type)))
497 return cp_convert (void_type_node, instance);
498 instance = default_conversion (instance);
499 instance_ptr = build_unary_op (ADDR_EXPR, instance, 0);
500 return build_delete (build_pointer_type (object_type),
501 instance_ptr, sfk_complete_destructor,
502 LOOKUP_NORMAL|LOOKUP_DESTRUCTOR, 0);
505 if (!CLASS_TYPE_P (object_type))
507 if ((flags & LOOKUP_COMPLAIN)
508 && TREE_TYPE (instance) != error_mark_node)
509 error ("request for member `%D' in `%E', which is of non-aggregate type `%T'",
510 name, instance, object_type);
511 return error_mark_node;
514 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
516 template_args = TREE_OPERAND (name, 1);
517 has_template_args = true;
518 name = TREE_OPERAND (name, 0);
520 if (TREE_CODE (name) == OVERLOAD)
521 name = DECL_NAME (get_first_fn (name));
522 else if (DECL_P (name))
523 name = DECL_NAME (name);
524 if (has_template_args)
525 fn = lookup_fnfields (object_type, name, /*protect=*/2);
527 fn = lookup_member (object_type, name, /*protect=*/2, /*want_type=*/false);
529 if (fn && TREE_CODE (fn) == TREE_LIST && !BASELINK_P (fn))
531 error ("request for member `%D' is ambiguous", name);
532 print_candidates (fn);
533 return error_mark_node;
536 /* If the name could not be found, issue an error. */
539 unqualified_name_lookup_error (name);
540 return error_mark_node;
543 if (BASELINK_P (fn) && has_template_args)
544 BASELINK_FUNCTIONS (fn)
545 = build_nt (TEMPLATE_ID_EXPR,
546 BASELINK_FUNCTIONS (fn),
548 if (BASELINK_P (fn) && basetype_path)
549 BASELINK_ACCESS_BINFO (fn) = basetype_path;
551 return build_new_method_call (instance, fn, parms,
552 /*conversion_path=*/NULL_TREE, flags);
555 /* New overloading code. */
557 struct z_candidate GTY(()) {
558 /* The FUNCTION_DECL that will be called if this candidate is
559 selected by overload resolution. */
561 /* The arguments to use when calling this function. */
563 /* The implicit conversion sequences for each of the arguments to
566 /* If FN is a user-defined conversion, the standard conversion
567 sequence from the type returned by FN to the desired destination
571 /* If FN is a member function, the binfo indicating the path used to
572 qualify the name of FN at the call site. This path is used to
573 determine whether or not FN is accessible if it is selected by
574 overload resolution. The DECL_CONTEXT of FN will always be a
575 (possibly improper) base of this binfo. */
577 /* If FN is a non-static member function, the binfo indicating the
578 subobject to which the `this' pointer should be converted if FN
579 is selected by overload resolution. The type pointed to the by
580 the `this' pointer must correspond to the most derived class
581 indicated by the CONVERSION_PATH. */
582 tree conversion_path;
585 struct z_candidate *next;
588 #define IDENTITY_RANK 0
594 #define ELLIPSIS_RANK 6
597 #define ICS_RANK(NODE) \
598 (ICS_BAD_FLAG (NODE) ? BAD_RANK \
599 : ICS_ELLIPSIS_FLAG (NODE) ? ELLIPSIS_RANK \
600 : ICS_USER_FLAG (NODE) ? USER_RANK \
601 : ICS_STD_RANK (NODE))
603 #define ICS_STD_RANK(NODE) TREE_COMPLEXITY (NODE)
605 #define ICS_USER_FLAG(NODE) TREE_LANG_FLAG_0 (NODE)
606 #define ICS_ELLIPSIS_FLAG(NODE) TREE_LANG_FLAG_1 (NODE)
607 #define ICS_THIS_FLAG(NODE) TREE_LANG_FLAG_2 (NODE)
608 #define ICS_BAD_FLAG(NODE) TREE_LANG_FLAG_3 (NODE)
610 /* In a REF_BIND or a BASE_CONV, this indicates that a temporary
611 should be created to hold the result of the conversion. */
612 #define NEED_TEMPORARY_P(NODE) TREE_LANG_FLAG_4 (NODE)
614 #define USER_CONV_CAND(NODE) WRAPPER_ZC (TREE_OPERAND (NODE, 1))
615 #define USER_CONV_FN(NODE) (USER_CONV_CAND (NODE)->fn)
618 null_ptr_cst_p (tree t)
622 A null pointer constant is an integral constant expression
623 (_expr.const_) rvalue of integer type that evaluates to zero. */
625 || (CP_INTEGRAL_TYPE_P (TREE_TYPE (t)) && integer_zerop (t)))
631 /* Returns nonzero if PARMLIST consists of only default parms and/or
635 sufficient_parms_p (tree parmlist)
637 for (; parmlist && parmlist != void_list_node;
638 parmlist = TREE_CHAIN (parmlist))
639 if (!TREE_PURPOSE (parmlist))
645 build_conv (enum tree_code code, tree type, tree from)
648 int rank = ICS_STD_RANK (from);
650 /* We can't use buildl1 here because CODE could be USER_CONV, which
651 takes two arguments. In that case, the caller is responsible for
652 filling in the second argument. */
653 t = make_node (code);
654 TREE_TYPE (t) = type;
655 TREE_OPERAND (t, 0) = from;
668 if (rank < EXACT_RANK)
674 ICS_STD_RANK (t) = rank;
675 ICS_USER_FLAG (t) = (code == USER_CONV || ICS_USER_FLAG (from));
676 ICS_BAD_FLAG (t) = ICS_BAD_FLAG (from);
680 /* If T is a REFERENCE_TYPE return the type to which T refers.
681 Otherwise, return T itself. */
684 non_reference (tree t)
686 if (TREE_CODE (t) == REFERENCE_TYPE)
692 strip_top_quals (tree t)
694 if (TREE_CODE (t) == ARRAY_TYPE)
696 return TYPE_MAIN_VARIANT (t);
699 /* Returns the standard conversion path (see [conv]) from type FROM to type
700 TO, if any. For proper handling of null pointer constants, you must
701 also pass the expression EXPR to convert from. */
704 standard_conversion (tree to, tree from, tree expr)
706 enum tree_code fcode, tcode;
708 bool fromref = false;
710 if (TREE_CODE (to) == REFERENCE_TYPE)
712 if (TREE_CODE (from) == REFERENCE_TYPE)
715 from = TREE_TYPE (from);
717 to = strip_top_quals (to);
718 from = strip_top_quals (from);
720 if ((TYPE_PTRFN_P (to) || TYPE_PTRMEMFUNC_P (to))
721 && expr && type_unknown_p (expr))
723 expr = instantiate_type (to, expr, tf_none);
724 if (expr == error_mark_node)
726 from = TREE_TYPE (expr);
729 fcode = TREE_CODE (from);
730 tcode = TREE_CODE (to);
732 conv = build1 (IDENTITY_CONV, from, expr);
734 if (fcode == FUNCTION_TYPE)
736 from = build_pointer_type (from);
737 fcode = TREE_CODE (from);
738 conv = build_conv (LVALUE_CONV, from, conv);
740 else if (fcode == ARRAY_TYPE)
742 from = build_pointer_type (TREE_TYPE (from));
743 fcode = TREE_CODE (from);
744 conv = build_conv (LVALUE_CONV, from, conv);
746 else if (fromref || (expr && lvalue_p (expr)))
747 conv = build_conv (RVALUE_CONV, from, conv);
749 /* Allow conversion between `__complex__' data types */
750 if (tcode == COMPLEX_TYPE && fcode == COMPLEX_TYPE)
752 /* The standard conversion sequence to convert FROM to TO is
753 the standard conversion sequence to perform componentwise
755 tree part_conv = standard_conversion
756 (TREE_TYPE (to), TREE_TYPE (from), NULL_TREE);
760 conv = build_conv (TREE_CODE (part_conv), to, conv);
761 ICS_STD_RANK (conv) = ICS_STD_RANK (part_conv);
769 if (same_type_p (from, to))
772 if ((tcode == POINTER_TYPE || TYPE_PTRMEMFUNC_P (to))
773 && expr && null_ptr_cst_p (expr))
775 conv = build_conv (STD_CONV, to, conv);
777 else if ((tcode == INTEGER_TYPE && fcode == POINTER_TYPE)
778 || (tcode == POINTER_TYPE && fcode == INTEGER_TYPE))
780 /* For backwards brain damage compatibility, allow interconversion of
781 pointers and integers with a pedwarn. */
782 conv = build_conv (STD_CONV, to, conv);
783 ICS_BAD_FLAG (conv) = 1;
785 else if (tcode == ENUMERAL_TYPE && fcode == INTEGER_TYPE
786 && TYPE_PRECISION (to) == TYPE_PRECISION (from))
788 /* For backwards brain damage compatibility, allow interconversion of
789 enums and integers with a pedwarn. */
790 conv = build_conv (STD_CONV, to, conv);
791 ICS_BAD_FLAG (conv) = 1;
793 else if (tcode == POINTER_TYPE && fcode == POINTER_TYPE)
795 enum tree_code ufcode = TREE_CODE (TREE_TYPE (from));
796 enum tree_code utcode = TREE_CODE (TREE_TYPE (to));
798 if (same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (from),
801 else if (utcode == VOID_TYPE && ufcode != OFFSET_TYPE
802 && ufcode != FUNCTION_TYPE)
804 from = build_pointer_type
805 (cp_build_qualified_type (void_type_node,
806 cp_type_quals (TREE_TYPE (from))));
807 conv = build_conv (PTR_CONV, from, conv);
809 else if (ufcode == OFFSET_TYPE && utcode == OFFSET_TYPE)
811 tree fbase = TYPE_OFFSET_BASETYPE (TREE_TYPE (from));
812 tree tbase = TYPE_OFFSET_BASETYPE (TREE_TYPE (to));
814 if (DERIVED_FROM_P (fbase, tbase)
815 && (same_type_ignoring_top_level_qualifiers_p
816 (TREE_TYPE (TREE_TYPE (from)),
817 TREE_TYPE (TREE_TYPE (to)))))
819 from = build_ptrmem_type (tbase, TREE_TYPE (TREE_TYPE (from)));
820 conv = build_conv (PMEM_CONV, from, conv);
823 else if (IS_AGGR_TYPE (TREE_TYPE (from))
824 && IS_AGGR_TYPE (TREE_TYPE (to)))
826 if (DERIVED_FROM_P (TREE_TYPE (to), TREE_TYPE (from)))
829 cp_build_qualified_type (TREE_TYPE (to),
830 cp_type_quals (TREE_TYPE (from)));
831 from = build_pointer_type (from);
832 conv = build_conv (PTR_CONV, from, conv);
836 if (same_type_p (from, to))
838 else if (comp_ptr_ttypes (TREE_TYPE (to), TREE_TYPE (from)))
839 conv = build_conv (QUAL_CONV, to, conv);
840 else if (expr && string_conv_p (to, expr, 0))
841 /* converting from string constant to char *. */
842 conv = build_conv (QUAL_CONV, to, conv);
843 else if (ptr_reasonably_similar (TREE_TYPE (to), TREE_TYPE (from)))
845 conv = build_conv (PTR_CONV, to, conv);
846 ICS_BAD_FLAG (conv) = 1;
853 else if (TYPE_PTRMEMFUNC_P (to) && TYPE_PTRMEMFUNC_P (from))
855 tree fromfn = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (from));
856 tree tofn = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (to));
857 tree fbase = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (fromfn)));
858 tree tbase = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (tofn)));
860 if (!DERIVED_FROM_P (fbase, tbase)
861 || !same_type_p (TREE_TYPE (fromfn), TREE_TYPE (tofn))
862 || !compparms (TREE_CHAIN (TYPE_ARG_TYPES (fromfn)),
863 TREE_CHAIN (TYPE_ARG_TYPES (tofn)))
864 || cp_type_quals (fbase) != cp_type_quals (tbase))
867 from = cp_build_qualified_type (tbase, cp_type_quals (fbase));
868 from = build_cplus_method_type (from, TREE_TYPE (fromfn),
869 TREE_CHAIN (TYPE_ARG_TYPES (fromfn)));
870 from = build_ptrmemfunc_type (build_pointer_type (from));
871 conv = build_conv (PMEM_CONV, from, conv);
873 else if (tcode == BOOLEAN_TYPE)
875 if (! (INTEGRAL_CODE_P (fcode) || fcode == REAL_TYPE
876 || fcode == POINTER_TYPE || TYPE_PTRMEMFUNC_P (from)))
879 conv = build_conv (STD_CONV, to, conv);
880 if (fcode == POINTER_TYPE
881 || (TYPE_PTRMEMFUNC_P (from) && ICS_STD_RANK (conv) < PBOOL_RANK))
882 ICS_STD_RANK (conv) = PBOOL_RANK;
884 /* We don't check for ENUMERAL_TYPE here because there are no standard
885 conversions to enum type. */
886 else if (tcode == INTEGER_TYPE || tcode == BOOLEAN_TYPE
887 || tcode == REAL_TYPE)
889 if (! (INTEGRAL_CODE_P (fcode) || fcode == REAL_TYPE))
891 conv = build_conv (STD_CONV, to, conv);
893 /* Give this a better rank if it's a promotion. */
894 if (to == type_promotes_to (from)
895 && ICS_STD_RANK (TREE_OPERAND (conv, 0)) <= PROMO_RANK)
896 ICS_STD_RANK (conv) = PROMO_RANK;
898 else if (IS_AGGR_TYPE (to) && IS_AGGR_TYPE (from)
899 && is_properly_derived_from (from, to))
901 if (TREE_CODE (conv) == RVALUE_CONV)
902 conv = TREE_OPERAND (conv, 0);
903 conv = build_conv (BASE_CONV, to, conv);
904 /* The derived-to-base conversion indicates the initialization
905 of a parameter with base type from an object of a derived
906 type. A temporary object is created to hold the result of
908 NEED_TEMPORARY_P (conv) = 1;
916 /* Returns nonzero if T1 is reference-related to T2. */
919 reference_related_p (tree t1, tree t2)
921 t1 = TYPE_MAIN_VARIANT (t1);
922 t2 = TYPE_MAIN_VARIANT (t2);
926 Given types "cv1 T1" and "cv2 T2," "cv1 T1" is reference-related
927 to "cv2 T2" if T1 is the same type as T2, or T1 is a base class
929 return (same_type_p (t1, t2)
930 || (CLASS_TYPE_P (t1) && CLASS_TYPE_P (t2)
931 && DERIVED_FROM_P (t1, t2)));
934 /* Returns nonzero if T1 is reference-compatible with T2. */
937 reference_compatible_p (tree t1, tree t2)
941 "cv1 T1" is reference compatible with "cv2 T2" if T1 is
942 reference-related to T2 and cv1 is the same cv-qualification as,
943 or greater cv-qualification than, cv2. */
944 return (reference_related_p (t1, t2)
945 && at_least_as_qualified_p (t1, t2));
948 /* Determine whether or not the EXPR (of class type S) can be
949 converted to T as in [over.match.ref]. */
952 convert_class_to_reference (tree t, tree s, tree expr)
958 struct z_candidate *candidates;
959 struct z_candidate *cand;
962 conversions = lookup_conversions (s);
968 Assuming that "cv1 T" is the underlying type of the reference
969 being initialized, and "cv S" is the type of the initializer
970 expression, with S a class type, the candidate functions are
973 --The conversion functions of S and its base classes are
974 considered. Those that are not hidden within S and yield type
975 "reference to cv2 T2", where "cv1 T" is reference-compatible
976 (_dcl.init.ref_) with "cv2 T2", are candidate functions.
978 The argument list has one argument, which is the initializer
983 /* Conceptually, we should take the address of EXPR and put it in
984 the argument list. Unfortunately, however, that can result in
985 error messages, which we should not issue now because we are just
986 trying to find a conversion operator. Therefore, we use NULL,
987 cast to the appropriate type. */
988 arglist = build_int_2 (0, 0);
989 TREE_TYPE (arglist) = build_pointer_type (s);
990 arglist = build_tree_list (NULL_TREE, arglist);
992 reference_type = build_reference_type (t);
996 tree fns = TREE_VALUE (conversions);
998 for (; fns; fns = OVL_NEXT (fns))
1000 tree f = OVL_CURRENT (fns);
1001 tree t2 = TREE_TYPE (TREE_TYPE (f));
1005 /* If this is a template function, try to get an exact
1007 if (TREE_CODE (f) == TEMPLATE_DECL)
1009 cand = add_template_candidate (&candidates,
1015 TREE_PURPOSE (conversions),
1021 /* Now, see if the conversion function really returns
1022 an lvalue of the appropriate type. From the
1023 point of view of unification, simply returning an
1024 rvalue of the right type is good enough. */
1026 t2 = TREE_TYPE (TREE_TYPE (f));
1027 if (TREE_CODE (t2) != REFERENCE_TYPE
1028 || !reference_compatible_p (t, TREE_TYPE (t2)))
1030 candidates = candidates->next;
1035 else if (TREE_CODE (t2) == REFERENCE_TYPE
1036 && reference_compatible_p (t, TREE_TYPE (t2)))
1037 cand = add_function_candidate (&candidates, f, s, arglist,
1039 TREE_PURPOSE (conversions),
1043 /* Build a standard conversion sequence indicating the
1044 binding from the reference type returned by the
1045 function to the desired REFERENCE_TYPE. */
1047 = (direct_reference_binding
1049 build1 (IDENTITY_CONV,
1050 TREE_TYPE (TREE_TYPE (TREE_TYPE (cand->fn))),
1053 conversions = TREE_CHAIN (conversions);
1056 candidates = splice_viable (candidates, pedantic, &any_viable_p);
1057 /* If none of the conversion functions worked out, let our caller
1062 cand = tourney (candidates);
1066 /* Now that we know that this is the function we're going to use fix
1067 the dummy first argument. */
1068 cand->args = tree_cons (NULL_TREE,
1070 TREE_CHAIN (cand->args));
1072 /* Build a user-defined conversion sequence representing the
1074 conv = build_conv (USER_CONV,
1075 TREE_TYPE (TREE_TYPE (cand->fn)),
1076 build1 (IDENTITY_CONV, TREE_TYPE (expr), expr));
1077 TREE_OPERAND (conv, 1) = build_zc_wrapper (cand);
1079 /* Merge it with the standard conversion sequence from the
1080 conversion function's return type to the desired type. */
1081 cand->second_conv = merge_conversion_sequences (conv, cand->second_conv);
1083 if (cand->viable == -1)
1084 ICS_BAD_FLAG (conv) = 1;
1086 return cand->second_conv;
1089 /* A reference of the indicated TYPE is being bound directly to the
1090 expression represented by the implicit conversion sequence CONV.
1091 Return a conversion sequence for this binding. */
1094 direct_reference_binding (tree type, tree conv)
1098 my_friendly_assert (TREE_CODE (type) == REFERENCE_TYPE, 20030306);
1099 my_friendly_assert (TREE_CODE (TREE_TYPE (conv)) != REFERENCE_TYPE,
1102 t = TREE_TYPE (type);
1106 When a parameter of reference type binds directly
1107 (_dcl.init.ref_) to an argument expression, the implicit
1108 conversion sequence is the identity conversion, unless the
1109 argument expression has a type that is a derived class of the
1110 parameter type, in which case the implicit conversion sequence is
1111 a derived-to-base Conversion.
1113 If the parameter binds directly to the result of applying a
1114 conversion function to the argument expression, the implicit
1115 conversion sequence is a user-defined conversion sequence
1116 (_over.ics.user_), with the second standard conversion sequence
1117 either an identity conversion or, if the conversion function
1118 returns an entity of a type that is a derived class of the
1119 parameter type, a derived-to-base conversion. */
1120 if (!same_type_ignoring_top_level_qualifiers_p (t, TREE_TYPE (conv)))
1122 /* Represent the derived-to-base conversion. */
1123 conv = build_conv (BASE_CONV, t, conv);
1124 /* We will actually be binding to the base-class subobject in
1125 the derived class, so we mark this conversion appropriately.
1126 That way, convert_like knows not to generate a temporary. */
1127 NEED_TEMPORARY_P (conv) = 0;
1129 return build_conv (REF_BIND, type, conv);
1132 /* Returns the conversion path from type FROM to reference type TO for
1133 purposes of reference binding. For lvalue binding, either pass a
1134 reference type to FROM or an lvalue expression to EXPR. If the
1135 reference will be bound to a temporary, NEED_TEMPORARY_P is set for
1136 the conversion returned. */
1139 reference_binding (tree rto, tree rfrom, tree expr, int flags)
1141 tree conv = NULL_TREE;
1142 tree to = TREE_TYPE (rto);
1146 cp_lvalue_kind lvalue_p = clk_none;
1148 if (TREE_CODE (to) == FUNCTION_TYPE && expr && type_unknown_p (expr))
1150 expr = instantiate_type (to, expr, tf_none);
1151 if (expr == error_mark_node)
1153 from = TREE_TYPE (expr);
1156 if (TREE_CODE (from) == REFERENCE_TYPE)
1158 /* Anything with reference type is an lvalue. */
1159 lvalue_p = clk_ordinary;
1160 from = TREE_TYPE (from);
1163 lvalue_p = real_lvalue_p (expr);
1165 /* Figure out whether or not the types are reference-related and
1166 reference compatible. We have do do this after stripping
1167 references from FROM. */
1168 related_p = reference_related_p (to, from);
1169 compatible_p = reference_compatible_p (to, from);
1171 if (lvalue_p && compatible_p)
1175 If the initializer expression
1177 -- is an lvalue (but not an lvalue for a bit-field), and "cv1 T1"
1178 is reference-compatible with "cv2 T2,"
1180 the reference is bound directly to the initializer exprssion
1182 conv = build1 (IDENTITY_CONV, from, expr);
1183 conv = direct_reference_binding (rto, conv);
1184 if ((lvalue_p & clk_bitfield) != 0
1185 && CP_TYPE_CONST_NON_VOLATILE_P (to))
1186 /* For the purposes of overload resolution, we ignore the fact
1187 this expression is a bitfield. (In particular,
1188 [over.ics.ref] says specifically that a function with a
1189 non-const reference parameter is viable even if the
1190 argument is a bitfield.)
1192 However, when we actually call the function we must create
1193 a temporary to which to bind the reference. If the
1194 reference is volatile, or isn't const, then we cannot make
1195 a temporary, so we just issue an error when the conversion
1197 NEED_TEMPORARY_P (conv) = 1;
1200 else if (CLASS_TYPE_P (from) && !(flags & LOOKUP_NO_CONVERSION))
1204 If the initializer exprsesion
1206 -- has a class type (i.e., T2 is a class type) can be
1207 implicitly converted to an lvalue of type "cv3 T3," where
1208 "cv1 T1" is reference-compatible with "cv3 T3". (this
1209 conversion is selected by enumerating the applicable
1210 conversion functions (_over.match.ref_) and choosing the
1211 best one through overload resolution. (_over.match_).
1213 the reference is bound to the lvalue result of the conversion
1214 in the second case. */
1215 conv = convert_class_to_reference (to, from, expr);
1220 /* From this point on, we conceptually need temporaries, even if we
1221 elide them. Only the cases above are "direct bindings". */
1222 if (flags & LOOKUP_NO_TEMP_BIND)
1227 When a parameter of reference type is not bound directly to an
1228 argument expression, the conversion sequence is the one required
1229 to convert the argument expression to the underlying type of the
1230 reference according to _over.best.ics_. Conceptually, this
1231 conversion sequence corresponds to copy-initializing a temporary
1232 of the underlying type with the argument expression. Any
1233 difference in top-level cv-qualification is subsumed by the
1234 initialization itself and does not constitute a conversion. */
1238 Otherwise, the reference shall be to a non-volatile const type. */
1239 if (!CP_TYPE_CONST_NON_VOLATILE_P (to))
1244 If the initializer expression is an rvalue, with T2 a class type,
1245 and "cv1 T1" is reference-compatible with "cv2 T2", the reference
1246 is bound in one of the following ways:
1248 -- The reference is bound to the object represented by the rvalue
1249 or to a sub-object within that object.
1253 We use the first alternative. The implicit conversion sequence
1254 is supposed to be same as we would obtain by generating a
1255 temporary. Fortunately, if the types are reference compatible,
1256 then this is either an identity conversion or the derived-to-base
1257 conversion, just as for direct binding. */
1258 if (CLASS_TYPE_P (from) && compatible_p)
1260 conv = build1 (IDENTITY_CONV, from, expr);
1261 return direct_reference_binding (rto, conv);
1266 Otherwise, a temporary of type "cv1 T1" is created and
1267 initialized from the initializer expression using the rules for a
1268 non-reference copy initialization. If T1 is reference-related to
1269 T2, cv1 must be the same cv-qualification as, or greater
1270 cv-qualification than, cv2; otherwise, the program is ill-formed. */
1271 if (related_p && !at_least_as_qualified_p (to, from))
1274 conv = implicit_conversion (to, from, expr, flags);
1278 conv = build_conv (REF_BIND, rto, conv);
1279 /* This reference binding, unlike those above, requires the
1280 creation of a temporary. */
1281 NEED_TEMPORARY_P (conv) = 1;
1286 /* Returns the implicit conversion sequence (see [over.ics]) from type FROM
1287 to type TO. The optional expression EXPR may affect the conversion.
1288 FLAGS are the usual overloading flags. Only LOOKUP_NO_CONVERSION is
1292 implicit_conversion (tree to, tree from, tree expr, int flags)
1296 /* Resolve expressions like `A::p' that we thought might become
1297 pointers-to-members. */
1298 if (expr && TREE_CODE (expr) == OFFSET_REF)
1300 expr = resolve_offset_ref (expr);
1301 from = TREE_TYPE (expr);
1304 if (from == error_mark_node || to == error_mark_node
1305 || expr == error_mark_node)
1308 /* Make sure both the FROM and TO types are complete so that
1309 user-defined conversions are available. */
1310 complete_type (from);
1313 if (TREE_CODE (to) == REFERENCE_TYPE)
1314 conv = reference_binding (to, from, expr, flags);
1316 conv = standard_conversion (to, from, expr);
1321 if (expr != NULL_TREE
1322 && (IS_AGGR_TYPE (from)
1323 || IS_AGGR_TYPE (to))
1324 && (flags & LOOKUP_NO_CONVERSION) == 0)
1326 struct z_candidate *cand;
1328 cand = build_user_type_conversion_1
1329 (to, expr, LOOKUP_ONLYCONVERTING);
1331 conv = cand->second_conv;
1333 /* We used to try to bind a reference to a temporary here, but that
1334 is now handled by the recursive call to this function at the end
1335 of reference_binding. */
1342 /* Add a new entry to the list of candidates. Used by the add_*_candidate
1345 static struct z_candidate *
1346 add_candidate (struct z_candidate **candidates,
1347 tree fn, tree args, tree convs, tree access_path,
1348 tree conversion_path, int viable)
1350 struct z_candidate *cand
1351 = (struct z_candidate *) ggc_alloc_cleared (sizeof (struct z_candidate));
1355 cand->convs = convs;
1356 cand->access_path = access_path;
1357 cand->conversion_path = conversion_path;
1358 cand->viable = viable;
1359 cand->next = *candidates;
1365 /* Create an overload candidate for the function or method FN called with
1366 the argument list ARGLIST and add it to CANDIDATES. FLAGS is passed on
1367 to implicit_conversion.
1369 CTYPE, if non-NULL, is the type we want to pretend this function
1370 comes from for purposes of overload resolution. */
1372 static struct z_candidate *
1373 add_function_candidate (struct z_candidate **candidates,
1374 tree fn, tree ctype, tree arglist,
1375 tree access_path, tree conversion_path,
1378 tree parmlist = TYPE_ARG_TYPES (TREE_TYPE (fn));
1381 tree parmnode, argnode;
1385 /* Built-in functions that haven't been declared don't really
1387 if (DECL_ANTICIPATED (fn))
1390 /* The `this', `in_chrg' and VTT arguments to constructors are not
1391 considered in overload resolution. */
1392 if (DECL_CONSTRUCTOR_P (fn))
1394 parmlist = skip_artificial_parms_for (fn, parmlist);
1395 orig_arglist = arglist;
1396 arglist = skip_artificial_parms_for (fn, arglist);
1399 orig_arglist = arglist;
1401 len = list_length (arglist);
1402 convs = make_tree_vec (len);
1404 /* 13.3.2 - Viable functions [over.match.viable]
1405 First, to be a viable function, a candidate function shall have enough
1406 parameters to agree in number with the arguments in the list.
1408 We need to check this first; otherwise, checking the ICSes might cause
1409 us to produce an ill-formed template instantiation. */
1411 parmnode = parmlist;
1412 for (i = 0; i < len; ++i)
1414 if (parmnode == NULL_TREE || parmnode == void_list_node)
1416 parmnode = TREE_CHAIN (parmnode);
1419 if (i < len && parmnode)
1422 /* Make sure there are default args for the rest of the parms. */
1423 else if (!sufficient_parms_p (parmnode))
1429 /* Second, for F to be a viable function, there shall exist for each
1430 argument an implicit conversion sequence that converts that argument
1431 to the corresponding parameter of F. */
1433 parmnode = parmlist;
1436 for (i = 0; i < len; ++i)
1438 tree arg = TREE_VALUE (argnode);
1439 tree argtype = lvalue_type (arg);
1443 if (parmnode == void_list_node)
1446 is_this = (i == 0 && DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
1447 && ! DECL_CONSTRUCTOR_P (fn));
1451 tree parmtype = TREE_VALUE (parmnode);
1453 /* The type of the implicit object parameter ('this') for
1454 overload resolution is not always the same as for the
1455 function itself; conversion functions are considered to
1456 be members of the class being converted, and functions
1457 introduced by a using-declaration are considered to be
1458 members of the class that uses them.
1460 Since build_over_call ignores the ICS for the `this'
1461 parameter, we can just change the parm type. */
1462 if (ctype && is_this)
1465 = build_qualified_type (ctype,
1466 TYPE_QUALS (TREE_TYPE (parmtype)));
1467 parmtype = build_pointer_type (parmtype);
1470 t = implicit_conversion (parmtype, argtype, arg, flags);
1474 t = build1 (IDENTITY_CONV, argtype, arg);
1475 ICS_ELLIPSIS_FLAG (t) = 1;
1479 ICS_THIS_FLAG (t) = 1;
1481 TREE_VEC_ELT (convs, i) = t;
1488 if (ICS_BAD_FLAG (t))
1492 parmnode = TREE_CHAIN (parmnode);
1493 argnode = TREE_CHAIN (argnode);
1497 return add_candidate (candidates, fn, orig_arglist, convs, access_path,
1498 conversion_path, viable);
1501 /* Create an overload candidate for the conversion function FN which will
1502 be invoked for expression OBJ, producing a pointer-to-function which
1503 will in turn be called with the argument list ARGLIST, and add it to
1504 CANDIDATES. FLAGS is passed on to implicit_conversion.
1506 Actually, we don't really care about FN; we care about the type it
1507 converts to. There may be multiple conversion functions that will
1508 convert to that type, and we rely on build_user_type_conversion_1 to
1509 choose the best one; so when we create our candidate, we record the type
1510 instead of the function. */
1512 static struct z_candidate *
1513 add_conv_candidate (struct z_candidate **candidates, tree fn, tree obj,
1514 tree arglist, tree access_path, tree conversion_path)
1516 tree totype = TREE_TYPE (TREE_TYPE (fn));
1517 int i, len, viable, flags;
1518 tree parmlist, convs, parmnode, argnode;
1520 for (parmlist = totype; TREE_CODE (parmlist) != FUNCTION_TYPE; )
1521 parmlist = TREE_TYPE (parmlist);
1522 parmlist = TYPE_ARG_TYPES (parmlist);
1524 len = list_length (arglist) + 1;
1525 convs = make_tree_vec (len);
1526 parmnode = parmlist;
1529 flags = LOOKUP_NORMAL;
1531 /* Don't bother looking up the same type twice. */
1532 if (*candidates && (*candidates)->fn == totype)
1535 for (i = 0; i < len; ++i)
1537 tree arg = i == 0 ? obj : TREE_VALUE (argnode);
1538 tree argtype = lvalue_type (arg);
1542 t = implicit_conversion (totype, argtype, arg, flags);
1543 else if (parmnode == void_list_node)
1546 t = implicit_conversion (TREE_VALUE (parmnode), argtype, arg, flags);
1549 t = build1 (IDENTITY_CONV, argtype, arg);
1550 ICS_ELLIPSIS_FLAG (t) = 1;
1553 TREE_VEC_ELT (convs, i) = t;
1557 if (ICS_BAD_FLAG (t))
1564 parmnode = TREE_CHAIN (parmnode);
1565 argnode = TREE_CHAIN (argnode);
1571 if (!sufficient_parms_p (parmnode))
1574 return add_candidate (candidates, totype, arglist, convs, access_path,
1575 conversion_path, viable);
1579 build_builtin_candidate (struct z_candidate **candidates, tree fnname,
1580 tree type1, tree type2, tree *args, tree *argtypes,
1590 convs = make_tree_vec (args[2] ? 3 : (args[1] ? 2 : 1));
1592 for (i = 0; i < 2; ++i)
1597 t = implicit_conversion (types[i], argtypes[i], args[i], flags);
1601 /* We need something for printing the candidate. */
1602 t = build1 (IDENTITY_CONV, types[i], NULL_TREE);
1604 else if (ICS_BAD_FLAG (t))
1606 TREE_VEC_ELT (convs, i) = t;
1609 /* For COND_EXPR we rearranged the arguments; undo that now. */
1612 TREE_VEC_ELT (convs, 2) = TREE_VEC_ELT (convs, 1);
1613 TREE_VEC_ELT (convs, 1) = TREE_VEC_ELT (convs, 0);
1614 t = implicit_conversion (boolean_type_node, argtypes[2], args[2], flags);
1616 TREE_VEC_ELT (convs, 0) = t;
1621 add_candidate (candidates, fnname, /*args=*/NULL_TREE, convs,
1622 /*access_path=*/NULL_TREE,
1623 /*conversion_path=*/NULL_TREE,
1628 is_complete (tree t)
1630 return COMPLETE_TYPE_P (complete_type (t));
1633 /* Returns nonzero if TYPE is a promoted arithmetic type. */
1636 promoted_arithmetic_type_p (tree type)
1640 In this section, the term promoted integral type is used to refer
1641 to those integral types which are preserved by integral promotion
1642 (including e.g. int and long but excluding e.g. char).
1643 Similarly, the term promoted arithmetic type refers to promoted
1644 integral types plus floating types. */
1645 return ((INTEGRAL_TYPE_P (type)
1646 && same_type_p (type_promotes_to (type), type))
1647 || TREE_CODE (type) == REAL_TYPE);
1650 /* Create any builtin operator overload candidates for the operator in
1651 question given the converted operand types TYPE1 and TYPE2. The other
1652 args are passed through from add_builtin_candidates to
1653 build_builtin_candidate.
1655 TYPE1 and TYPE2 may not be permissible, and we must filter them.
1656 If CODE is requires candidates operands of the same type of the kind
1657 of which TYPE1 and TYPE2 are, we add both candidates
1658 CODE (TYPE1, TYPE1) and CODE (TYPE2, TYPE2). */
1661 add_builtin_candidate (struct z_candidate **candidates, enum tree_code code,
1662 enum tree_code code2, tree fnname, tree type1,
1663 tree type2, tree *args, tree *argtypes, int flags)
1667 case POSTINCREMENT_EXPR:
1668 case POSTDECREMENT_EXPR:
1669 args[1] = integer_zero_node;
1670 type2 = integer_type_node;
1679 /* 4 For every pair T, VQ), where T is an arithmetic or enumeration type,
1680 and VQ is either volatile or empty, there exist candidate operator
1681 functions of the form
1682 VQ T& operator++(VQ T&);
1683 T operator++(VQ T&, int);
1684 5 For every pair T, VQ), where T is an enumeration type or an arithmetic
1685 type other than bool, and VQ is either volatile or empty, there exist
1686 candidate operator functions of the form
1687 VQ T& operator--(VQ T&);
1688 T operator--(VQ T&, int);
1689 6 For every pair T, VQ), where T is a cv-qualified or cv-unqualified
1690 complete object type, and VQ is either volatile or empty, there exist
1691 candidate operator functions of the form
1692 T*VQ& operator++(T*VQ&);
1693 T*VQ& operator--(T*VQ&);
1694 T* operator++(T*VQ&, int);
1695 T* operator--(T*VQ&, int); */
1697 case POSTDECREMENT_EXPR:
1698 case PREDECREMENT_EXPR:
1699 if (TREE_CODE (type1) == BOOLEAN_TYPE)
1701 case POSTINCREMENT_EXPR:
1702 case PREINCREMENT_EXPR:
1703 if (ARITHMETIC_TYPE_P (type1) || TYPE_PTROB_P (type1))
1705 type1 = build_reference_type (type1);
1710 /* 7 For every cv-qualified or cv-unqualified complete object type T, there
1711 exist candidate operator functions of the form
1715 8 For every function type T, there exist candidate operator functions of
1717 T& operator*(T*); */
1720 if (TREE_CODE (type1) == POINTER_TYPE
1721 && (TYPE_PTROB_P (type1)
1722 || TREE_CODE (TREE_TYPE (type1)) == FUNCTION_TYPE))
1726 /* 9 For every type T, there exist candidate operator functions of the form
1729 10For every promoted arithmetic type T, there exist candidate operator
1730 functions of the form
1734 case CONVERT_EXPR: /* unary + */
1735 if (TREE_CODE (type1) == POINTER_TYPE
1736 && TREE_CODE (TREE_TYPE (type1)) != OFFSET_TYPE)
1739 if (ARITHMETIC_TYPE_P (type1))
1743 /* 11For every promoted integral type T, there exist candidate operator
1744 functions of the form
1748 if (INTEGRAL_TYPE_P (type1))
1752 /* 12For every quintuple C1, C2, T, CV1, CV2), where C2 is a class type, C1
1753 is the same type as C2 or is a derived class of C2, T is a complete
1754 object type or a function type, and CV1 and CV2 are cv-qualifier-seqs,
1755 there exist candidate operator functions of the form
1756 CV12 T& operator->*(CV1 C1*, CV2 T C2::*);
1757 where CV12 is the union of CV1 and CV2. */
1760 if (TREE_CODE (type1) == POINTER_TYPE
1761 && (TYPE_PTRMEMFUNC_P (type2) || TYPE_PTRMEM_P (type2)))
1763 tree c1 = TREE_TYPE (type1);
1764 tree c2 = (TYPE_PTRMEMFUNC_P (type2)
1765 ? TYPE_METHOD_BASETYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type2)))
1766 : TYPE_OFFSET_BASETYPE (TREE_TYPE (type2)));
1768 if (IS_AGGR_TYPE (c1) && DERIVED_FROM_P (c2, c1)
1769 && (TYPE_PTRMEMFUNC_P (type2)
1770 || is_complete (TREE_TYPE (TREE_TYPE (type2)))))
1775 /* 13For every pair of promoted arithmetic types L and R, there exist can-
1776 didate operator functions of the form
1781 bool operator<(L, R);
1782 bool operator>(L, R);
1783 bool operator<=(L, R);
1784 bool operator>=(L, R);
1785 bool operator==(L, R);
1786 bool operator!=(L, R);
1787 where LR is the result of the usual arithmetic conversions between
1790 14For every pair of types T and I, where T is a cv-qualified or cv-
1791 unqualified complete object type and I is a promoted integral type,
1792 there exist candidate operator functions of the form
1793 T* operator+(T*, I);
1794 T& operator[](T*, I);
1795 T* operator-(T*, I);
1796 T* operator+(I, T*);
1797 T& operator[](I, T*);
1799 15For every T, where T is a pointer to complete object type, there exist
1800 candidate operator functions of the form112)
1801 ptrdiff_t operator-(T, T);
1803 16For every pointer or enumeration type T, there exist candidate operator
1804 functions of the form
1805 bool operator<(T, T);
1806 bool operator>(T, T);
1807 bool operator<=(T, T);
1808 bool operator>=(T, T);
1809 bool operator==(T, T);
1810 bool operator!=(T, T);
1812 17For every pointer to member type T, there exist candidate operator
1813 functions of the form
1814 bool operator==(T, T);
1815 bool operator!=(T, T); */
1818 if (TYPE_PTROB_P (type1) && TYPE_PTROB_P (type2))
1820 if (TYPE_PTROB_P (type1) && INTEGRAL_TYPE_P (type2))
1822 type2 = ptrdiff_type_node;
1826 case TRUNC_DIV_EXPR:
1827 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
1833 if ((TYPE_PTRMEMFUNC_P (type1) && TYPE_PTRMEMFUNC_P (type2))
1834 || (TYPE_PTRMEM_P (type1) && TYPE_PTRMEM_P (type2)))
1836 if ((TYPE_PTRMEMFUNC_P (type1) || TYPE_PTRMEM_P (type1))
1837 && null_ptr_cst_p (args[1]))
1842 if ((TYPE_PTRMEMFUNC_P (type2) || TYPE_PTRMEM_P (type2))
1843 && null_ptr_cst_p (args[0]))
1855 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
1857 if (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
1859 if (TREE_CODE (type1) == ENUMERAL_TYPE && TREE_CODE (type2) == ENUMERAL_TYPE)
1861 if (TYPE_PTR_P (type1) && null_ptr_cst_p (args[1]))
1866 if (null_ptr_cst_p (args[0]) && TYPE_PTR_P (type2))
1874 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
1877 if (INTEGRAL_TYPE_P (type1) && TYPE_PTROB_P (type2))
1879 type1 = ptrdiff_type_node;
1882 if (TYPE_PTROB_P (type1) && INTEGRAL_TYPE_P (type2))
1884 type2 = ptrdiff_type_node;
1889 /* 18For every pair of promoted integral types L and R, there exist candi-
1890 date operator functions of the form
1897 where LR is the result of the usual arithmetic conversions between
1900 case TRUNC_MOD_EXPR:
1906 if (INTEGRAL_TYPE_P (type1) && INTEGRAL_TYPE_P (type2))
1910 /* 19For every triple L, VQ, R), where L is an arithmetic or enumeration
1911 type, VQ is either volatile or empty, and R is a promoted arithmetic
1912 type, there exist candidate operator functions of the form
1913 VQ L& operator=(VQ L&, R);
1914 VQ L& operator*=(VQ L&, R);
1915 VQ L& operator/=(VQ L&, R);
1916 VQ L& operator+=(VQ L&, R);
1917 VQ L& operator-=(VQ L&, R);
1919 20For every pair T, VQ), where T is any type and VQ is either volatile
1920 or empty, there exist candidate operator functions of the form
1921 T*VQ& operator=(T*VQ&, T*);
1923 21For every pair T, VQ), where T is a pointer to member type and VQ is
1924 either volatile or empty, there exist candidate operator functions of
1926 VQ T& operator=(VQ T&, T);
1928 22For every triple T, VQ, I), where T is a cv-qualified or cv-
1929 unqualified complete object type, VQ is either volatile or empty, and
1930 I is a promoted integral type, there exist candidate operator func-
1932 T*VQ& operator+=(T*VQ&, I);
1933 T*VQ& operator-=(T*VQ&, I);
1935 23For every triple L, VQ, R), where L is an integral or enumeration
1936 type, VQ is either volatile or empty, and R is a promoted integral
1937 type, there exist candidate operator functions of the form
1939 VQ L& operator%=(VQ L&, R);
1940 VQ L& operator<<=(VQ L&, R);
1941 VQ L& operator>>=(VQ L&, R);
1942 VQ L& operator&=(VQ L&, R);
1943 VQ L& operator^=(VQ L&, R);
1944 VQ L& operator|=(VQ L&, R); */
1951 if (TYPE_PTROB_P (type1) && INTEGRAL_TYPE_P (type2))
1953 type2 = ptrdiff_type_node;
1957 case TRUNC_DIV_EXPR:
1958 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
1962 case TRUNC_MOD_EXPR:
1968 if (INTEGRAL_TYPE_P (type1) && INTEGRAL_TYPE_P (type2))
1973 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
1975 if ((TYPE_PTRMEMFUNC_P (type1) && TYPE_PTRMEMFUNC_P (type2))
1976 || (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
1977 || (TYPE_PTRMEM_P (type1) && TYPE_PTRMEM_P (type2))
1978 || ((TYPE_PTRMEMFUNC_P (type1)
1979 || TREE_CODE (type1) == POINTER_TYPE)
1980 && null_ptr_cst_p (args[1])))
1990 type1 = build_reference_type (type1);
1996 For every pair of promoted arithmetic types L and R, there
1997 exist candidate operator functions of the form
1999 LR operator?(bool, L, R);
2001 where LR is the result of the usual arithmetic conversions
2002 between types L and R.
2004 For every type T, where T is a pointer or pointer-to-member
2005 type, there exist candidate operator functions of the form T
2006 operator?(bool, T, T); */
2008 if (promoted_arithmetic_type_p (type1)
2009 && promoted_arithmetic_type_p (type2))
2013 /* Otherwise, the types should be pointers. */
2014 if (!(TREE_CODE (type1) == POINTER_TYPE
2015 || TYPE_PTRMEM_P (type1)
2016 || TYPE_PTRMEMFUNC_P (type1))
2017 || !(TREE_CODE (type2) == POINTER_TYPE
2018 || TYPE_PTRMEM_P (type2)
2019 || TYPE_PTRMEMFUNC_P (type2)))
2022 /* We don't check that the two types are the same; the logic
2023 below will actually create two candidates; one in which both
2024 parameter types are TYPE1, and one in which both parameter
2032 /* If we're dealing with two pointer types or two enumeral types,
2033 we need candidates for both of them. */
2034 if (type2 && !same_type_p (type1, type2)
2035 && TREE_CODE (type1) == TREE_CODE (type2)
2036 && (TREE_CODE (type1) == REFERENCE_TYPE
2037 || (TREE_CODE (type1) == POINTER_TYPE
2038 && TYPE_PTRMEM_P (type1) == TYPE_PTRMEM_P (type2))
2039 || TYPE_PTRMEMFUNC_P (type1)
2040 || IS_AGGR_TYPE (type1)
2041 || TREE_CODE (type1) == ENUMERAL_TYPE))
2043 build_builtin_candidate
2044 (candidates, fnname, type1, type1, args, argtypes, flags);
2045 build_builtin_candidate
2046 (candidates, fnname, type2, type2, args, argtypes, flags);
2050 build_builtin_candidate
2051 (candidates, fnname, type1, type2, args, argtypes, flags);
2055 type_decays_to (tree type)
2057 if (TREE_CODE (type) == ARRAY_TYPE)
2058 return build_pointer_type (TREE_TYPE (type));
2059 if (TREE_CODE (type) == FUNCTION_TYPE)
2060 return build_pointer_type (type);
2064 /* There are three conditions of builtin candidates:
2066 1) bool-taking candidates. These are the same regardless of the input.
2067 2) pointer-pair taking candidates. These are generated for each type
2068 one of the input types converts to.
2069 3) arithmetic candidates. According to the standard, we should generate
2070 all of these, but I'm trying not to...
2072 Here we generate a superset of the possible candidates for this particular
2073 case. That is a subset of the full set the standard defines, plus some
2074 other cases which the standard disallows. add_builtin_candidate will
2075 filter out the invalid set. */
2078 add_builtin_candidates (struct z_candidate **candidates, enum tree_code code,
2079 enum tree_code code2, tree fnname, tree *args,
2084 tree type, argtypes[3];
2085 /* TYPES[i] is the set of possible builtin-operator parameter types
2086 we will consider for the Ith argument. These are represented as
2087 a TREE_LIST; the TREE_VALUE of each node is the potential
2091 for (i = 0; i < 3; ++i)
2094 argtypes[i] = lvalue_type (args[i]);
2096 argtypes[i] = NULL_TREE;
2101 /* 4 For every pair T, VQ), where T is an arithmetic or enumeration type,
2102 and VQ is either volatile or empty, there exist candidate operator
2103 functions of the form
2104 VQ T& operator++(VQ T&); */
2106 case POSTINCREMENT_EXPR:
2107 case PREINCREMENT_EXPR:
2108 case POSTDECREMENT_EXPR:
2109 case PREDECREMENT_EXPR:
2114 /* 24There also exist candidate operator functions of the form
2115 bool operator!(bool);
2116 bool operator&&(bool, bool);
2117 bool operator||(bool, bool); */
2119 case TRUTH_NOT_EXPR:
2120 build_builtin_candidate
2121 (candidates, fnname, boolean_type_node,
2122 NULL_TREE, args, argtypes, flags);
2125 case TRUTH_ORIF_EXPR:
2126 case TRUTH_ANDIF_EXPR:
2127 build_builtin_candidate
2128 (candidates, fnname, boolean_type_node,
2129 boolean_type_node, args, argtypes, flags);
2151 types[0] = types[1] = NULL_TREE;
2153 for (i = 0; i < 2; ++i)
2157 else if (IS_AGGR_TYPE (argtypes[i]))
2161 if (i == 0 && code == MODIFY_EXPR && code2 == NOP_EXPR)
2164 convs = lookup_conversions (argtypes[i]);
2166 if (code == COND_EXPR)
2168 if (real_lvalue_p (args[i]))
2169 types[i] = tree_cons
2170 (NULL_TREE, build_reference_type (argtypes[i]), types[i]);
2172 types[i] = tree_cons
2173 (NULL_TREE, TYPE_MAIN_VARIANT (argtypes[i]), types[i]);
2179 for (; convs; convs = TREE_CHAIN (convs))
2181 type = TREE_TYPE (TREE_TYPE (OVL_CURRENT (TREE_VALUE (convs))));
2184 && (TREE_CODE (type) != REFERENCE_TYPE
2185 || CP_TYPE_CONST_P (TREE_TYPE (type))))
2188 if (code == COND_EXPR && TREE_CODE (type) == REFERENCE_TYPE)
2189 types[i] = tree_cons (NULL_TREE, type, types[i]);
2191 type = non_reference (type);
2192 if (i != 0 || ! ref1)
2194 type = TYPE_MAIN_VARIANT (type_decays_to (type));
2195 if (enum_p && TREE_CODE (type) == ENUMERAL_TYPE)
2196 types[i] = tree_cons (NULL_TREE, type, types[i]);
2197 if (INTEGRAL_TYPE_P (type))
2198 type = type_promotes_to (type);
2201 if (! value_member (type, types[i]))
2202 types[i] = tree_cons (NULL_TREE, type, types[i]);
2207 if (code == COND_EXPR && real_lvalue_p (args[i]))
2208 types[i] = tree_cons
2209 (NULL_TREE, build_reference_type (argtypes[i]), types[i]);
2210 type = non_reference (argtypes[i]);
2211 if (i != 0 || ! ref1)
2213 type = TYPE_MAIN_VARIANT (type_decays_to (type));
2214 if (enum_p && TREE_CODE (type) == ENUMERAL_TYPE)
2215 types[i] = tree_cons (NULL_TREE, type, types[i]);
2216 if (INTEGRAL_TYPE_P (type))
2217 type = type_promotes_to (type);
2219 types[i] = tree_cons (NULL_TREE, type, types[i]);
2223 /* Run through the possible parameter types of both arguments,
2224 creating candidates with those parameter types. */
2225 for (; types[0]; types[0] = TREE_CHAIN (types[0]))
2228 for (type = types[1]; type; type = TREE_CHAIN (type))
2229 add_builtin_candidate
2230 (candidates, code, code2, fnname, TREE_VALUE (types[0]),
2231 TREE_VALUE (type), args, argtypes, flags);
2233 add_builtin_candidate
2234 (candidates, code, code2, fnname, TREE_VALUE (types[0]),
2235 NULL_TREE, args, argtypes, flags);
2242 /* If TMPL can be successfully instantiated as indicated by
2243 EXPLICIT_TARGS and ARGLIST, adds the instantiation to CANDIDATES.
2245 TMPL is the template. EXPLICIT_TARGS are any explicit template
2246 arguments. ARGLIST is the arguments provided at the call-site.
2247 The RETURN_TYPE is the desired type for conversion operators. If
2248 OBJ is NULL_TREE, FLAGS and CTYPE are as for add_function_candidate.
2249 If an OBJ is supplied, FLAGS and CTYPE are ignored, and OBJ is as for
2250 add_conv_candidate. */
2252 static struct z_candidate*
2253 add_template_candidate_real (struct z_candidate **candidates, tree tmpl,
2254 tree ctype, tree explicit_targs, tree arglist,
2255 tree return_type, tree access_path,
2256 tree conversion_path, int flags, tree obj,
2257 unification_kind_t strict)
2259 int ntparms = DECL_NTPARMS (tmpl);
2260 tree targs = make_tree_vec (ntparms);
2261 tree args_without_in_chrg = arglist;
2262 struct z_candidate *cand;
2266 /* We don't do deduction on the in-charge parameter, the VTT
2267 parameter or 'this'. */
2268 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (tmpl))
2269 args_without_in_chrg = TREE_CHAIN (args_without_in_chrg);
2271 if ((DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (tmpl)
2272 || DECL_BASE_CONSTRUCTOR_P (tmpl))
2273 && TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (tmpl)))
2274 args_without_in_chrg = TREE_CHAIN (args_without_in_chrg);
2276 i = fn_type_unification (tmpl, explicit_targs, targs,
2277 args_without_in_chrg,
2278 return_type, strict, -1);
2283 fn = instantiate_template (tmpl, targs);
2284 if (fn == error_mark_node)
2289 A member function template is never instantiated to perform the
2290 copy of a class object to an object of its class type.
2292 It's a little unclear what this means; the standard explicitly
2293 does allow a template to be used to copy a class. For example,
2298 template <class T> A(const T&);
2301 void g () { A a (f ()); }
2303 the member template will be used to make the copy. The section
2304 quoted above appears in the paragraph that forbids constructors
2305 whose only parameter is (a possibly cv-qualified variant of) the
2306 class type, and a logical interpretation is that the intent was
2307 to forbid the instantiation of member templates which would then
2309 if (DECL_CONSTRUCTOR_P (fn) && list_length (arglist) == 2)
2311 tree arg_types = FUNCTION_FIRST_USER_PARMTYPE (fn);
2312 if (arg_types && same_type_p (TYPE_MAIN_VARIANT (TREE_VALUE (arg_types)),
2317 if (obj != NULL_TREE)
2318 /* Aha, this is a conversion function. */
2319 cand = add_conv_candidate (candidates, fn, obj, access_path,
2320 conversion_path, arglist);
2322 cand = add_function_candidate (candidates, fn, ctype,
2323 arglist, access_path,
2324 conversion_path, flags);
2325 if (DECL_TI_TEMPLATE (fn) != tmpl)
2326 /* This situation can occur if a member template of a template
2327 class is specialized. Then, instantiate_template might return
2328 an instantiation of the specialization, in which case the
2329 DECL_TI_TEMPLATE field will point at the original
2330 specialization. For example:
2332 template <class T> struct S { template <class U> void f(U);
2333 template <> void f(int) {}; };
2337 Here, TMPL will be template <class U> S<double>::f(U).
2338 And, instantiate template will give us the specialization
2339 template <> S<double>::f(int). But, the DECL_TI_TEMPLATE field
2340 for this will point at template <class T> template <> S<T>::f(int),
2341 so that we can find the definition. For the purposes of
2342 overload resolution, however, we want the original TMPL. */
2343 cand->template = tree_cons (tmpl, targs, NULL_TREE);
2345 cand->template = DECL_TEMPLATE_INFO (fn);
2351 static struct z_candidate *
2352 add_template_candidate (struct z_candidate **candidates, tree tmpl, tree ctype,
2353 tree explicit_targs, tree arglist, tree return_type,
2354 tree access_path, tree conversion_path, int flags,
2355 unification_kind_t strict)
2358 add_template_candidate_real (candidates, tmpl, ctype,
2359 explicit_targs, arglist, return_type,
2360 access_path, conversion_path,
2361 flags, NULL_TREE, strict);
2365 static struct z_candidate *
2366 add_template_conv_candidate (struct z_candidate **candidates, tree tmpl,
2367 tree obj, tree arglist, tree return_type,
2368 tree access_path, tree conversion_path)
2371 add_template_candidate_real (candidates, tmpl, NULL_TREE, NULL_TREE,
2372 arglist, return_type, access_path,
2373 conversion_path, 0, obj, DEDUCE_CONV);
2376 /* The CANDS are the set of candidates that were considered for
2377 overload resolution. Return the set of viable candidates. If none
2378 of the candidates were viable, set *ANY_VIABLE_P to true. STRICT_P
2379 is true if a candidate should be considered viable only if it is
2382 static struct z_candidate*
2383 splice_viable (struct z_candidate *cands,
2387 struct z_candidate *viable;
2388 struct z_candidate **last_viable;
2389 struct z_candidate **cand;
2392 last_viable = &viable;
2393 *any_viable_p = false;
2398 struct z_candidate *c = *cand;
2399 if (strict_p ? c->viable == 1 : c->viable)
2404 last_viable = &c->next;
2405 *any_viable_p = true;
2411 return viable ? viable : cands;
2415 any_strictly_viable (struct z_candidate *cands)
2417 for (; cands; cands = cands->next)
2418 if (cands->viable == 1)
2424 build_this (tree obj)
2426 /* Fix this to work on non-lvalues. */
2427 return build_unary_op (ADDR_EXPR, obj, 0);
2430 /* Returns true iff functions are equivalent. Equivalent functions are
2431 not '==' only if one is a function-local extern function or if
2432 both are extern "C". */
2435 equal_functions (tree fn1, tree fn2)
2437 if (DECL_LOCAL_FUNCTION_P (fn1) || DECL_LOCAL_FUNCTION_P (fn2)
2438 || DECL_EXTERN_C_FUNCTION_P (fn1))
2439 return decls_match (fn1, fn2);
2444 print_z_candidates (struct z_candidate *candidates)
2447 struct z_candidate *cand1;
2448 struct z_candidate **cand2;
2450 /* There may be duplicates in the set of candidates. We put off
2451 checking this condition as long as possible, since we have no way
2452 to eliminate duplicates from a set of functions in less than n^2
2453 time. Now we are about to emit an error message, so it is more
2454 permissible to go slowly. */
2455 for (cand1 = candidates; cand1; cand1 = cand1->next)
2457 tree fn = cand1->fn;
2458 /* Skip builtin candidates and conversion functions. */
2459 if (TREE_CODE (fn) != FUNCTION_DECL)
2461 cand2 = &cand1->next;
2464 if (TREE_CODE ((*cand2)->fn) == FUNCTION_DECL
2465 && equal_functions (fn, (*cand2)->fn))
2466 *cand2 = (*cand2)->next;
2468 cand2 = &(*cand2)->next;
2472 str = "candidates are:";
2473 for (; candidates; candidates = candidates->next)
2475 if (TREE_CODE (candidates->fn) == IDENTIFIER_NODE)
2477 if (TREE_VEC_LENGTH (candidates->convs) == 3)
2478 error ("%s %D(%T, %T, %T) <built-in>", str, candidates->fn,
2479 TREE_TYPE (TREE_VEC_ELT (candidates->convs, 0)),
2480 TREE_TYPE (TREE_VEC_ELT (candidates->convs, 1)),
2481 TREE_TYPE (TREE_VEC_ELT (candidates->convs, 2)));
2482 else if (TREE_VEC_LENGTH (candidates->convs) == 2)
2483 error ("%s %D(%T, %T) <built-in>", str, candidates->fn,
2484 TREE_TYPE (TREE_VEC_ELT (candidates->convs, 0)),
2485 TREE_TYPE (TREE_VEC_ELT (candidates->convs, 1)));
2487 error ("%s %D(%T) <built-in>", str, candidates->fn,
2488 TREE_TYPE (TREE_VEC_ELT (candidates->convs, 0)));
2490 else if (TYPE_P (candidates->fn))
2491 error ("%s %T <conversion>", str, candidates->fn);
2493 cp_error_at ("%s %+#D%s", str, candidates->fn,
2494 candidates->viable == -1 ? " <near match>" : "");
2499 /* USER_SEQ is a user-defined conversion sequence, beginning with a
2500 USER_CONV. STD_SEQ is the standard conversion sequence applied to
2501 the result of the conversion function to convert it to the final
2502 desired type. Merge the the two sequences into a single sequence,
2503 and return the merged sequence. */
2506 merge_conversion_sequences (tree user_seq, tree std_seq)
2510 my_friendly_assert (TREE_CODE (user_seq) == USER_CONV,
2513 /* Find the end of the second conversion sequence. */
2515 while (TREE_CODE (*t) != IDENTITY_CONV)
2516 t = &TREE_OPERAND (*t, 0);
2518 /* Replace the identity conversion with the user conversion
2522 /* The entire sequence is a user-conversion sequence. */
2523 ICS_USER_FLAG (std_seq) = 1;
2528 /* Returns the best overload candidate to perform the requested
2529 conversion. This function is used for three the overloading situations
2530 described in [over.match.copy], [over.match.conv], and [over.match.ref].
2531 If TOTYPE is a REFERENCE_TYPE, we're trying to find an lvalue binding as
2532 per [dcl.init.ref], so we ignore temporary bindings. */
2534 static struct z_candidate *
2535 build_user_type_conversion_1 (tree totype, tree expr, int flags)
2537 struct z_candidate *candidates, *cand;
2538 tree fromtype = TREE_TYPE (expr);
2539 tree ctors = NULL_TREE, convs = NULL_TREE;
2540 tree args = NULL_TREE;
2543 /* We represent conversion within a hierarchy using RVALUE_CONV and
2544 BASE_CONV, as specified by [over.best.ics]; these become plain
2545 constructor calls, as specified in [dcl.init]. */
2546 my_friendly_assert (!IS_AGGR_TYPE (fromtype) || !IS_AGGR_TYPE (totype)
2547 || !DERIVED_FROM_P (totype, fromtype), 20011226);
2549 if (IS_AGGR_TYPE (totype))
2550 ctors = lookup_fnfields (TYPE_BINFO (totype),
2551 complete_ctor_identifier,
2554 if (IS_AGGR_TYPE (fromtype))
2555 convs = lookup_conversions (fromtype);
2558 flags |= LOOKUP_NO_CONVERSION;
2564 ctors = BASELINK_FUNCTIONS (ctors);
2566 t = build_int_2 (0, 0);
2567 TREE_TYPE (t) = build_pointer_type (totype);
2568 args = build_tree_list (NULL_TREE, expr);
2569 /* We should never try to call the abstract or base constructor
2571 my_friendly_assert (!DECL_HAS_IN_CHARGE_PARM_P (OVL_CURRENT (ctors))
2572 && !DECL_HAS_VTT_PARM_P (OVL_CURRENT (ctors)),
2574 args = tree_cons (NULL_TREE, t, args);
2576 for (; ctors; ctors = OVL_NEXT (ctors))
2578 tree ctor = OVL_CURRENT (ctors);
2579 if (DECL_NONCONVERTING_P (ctor))
2582 if (TREE_CODE (ctor) == TEMPLATE_DECL)
2583 cand = add_template_candidate (&candidates, ctor, totype,
2584 NULL_TREE, args, NULL_TREE,
2585 TYPE_BINFO (totype),
2586 TYPE_BINFO (totype),
2590 cand = add_function_candidate (&candidates, ctor, totype,
2591 args, TYPE_BINFO (totype),
2592 TYPE_BINFO (totype),
2596 cand->second_conv = build1 (IDENTITY_CONV, totype, NULL_TREE);
2600 args = build_tree_list (NULL_TREE, build_this (expr));
2602 for (; convs; convs = TREE_CHAIN (convs))
2605 tree conversion_path = TREE_PURPOSE (convs);
2606 int convflags = LOOKUP_NO_CONVERSION;
2608 /* If we are called to convert to a reference type, we are trying to
2609 find an lvalue binding, so don't even consider temporaries. If
2610 we don't find an lvalue binding, the caller will try again to
2611 look for a temporary binding. */
2612 if (TREE_CODE (totype) == REFERENCE_TYPE)
2613 convflags |= LOOKUP_NO_TEMP_BIND;
2615 for (fns = TREE_VALUE (convs); fns; fns = OVL_NEXT (fns))
2617 tree fn = OVL_CURRENT (fns);
2619 /* [over.match.funcs] For conversion functions, the function
2620 is considered to be a member of the class of the implicit
2621 object argument for the purpose of defining the type of
2622 the implicit object parameter.
2624 So we pass fromtype as CTYPE to add_*_candidate. */
2626 if (TREE_CODE (fn) == TEMPLATE_DECL)
2627 cand = add_template_candidate (&candidates, fn, fromtype,
2630 TYPE_BINFO (fromtype),
2635 cand = add_function_candidate (&candidates, fn, fromtype,
2637 TYPE_BINFO (fromtype),
2643 tree ics = implicit_conversion (totype,
2644 TREE_TYPE (TREE_TYPE (cand->fn)),
2647 cand->second_conv = ics;
2649 if (ics == NULL_TREE)
2651 else if (candidates->viable == 1 && ICS_BAD_FLAG (ics))
2657 candidates = splice_viable (candidates, pedantic, &any_viable_p);
2661 cand = tourney (candidates);
2664 if (flags & LOOKUP_COMPLAIN)
2666 error ("conversion from `%T' to `%T' is ambiguous",
2668 print_z_candidates (candidates);
2671 cand = candidates; /* any one will do */
2672 cand->second_conv = build1 (AMBIG_CONV, totype, expr);
2673 ICS_USER_FLAG (cand->second_conv) = 1;
2674 if (!any_strictly_viable (candidates))
2675 ICS_BAD_FLAG (cand->second_conv) = 1;
2676 /* If there are viable candidates, don't set ICS_BAD_FLAG; an
2677 ambiguous conversion is no worse than another user-defined
2683 /* Build the user conversion sequence. */
2686 (DECL_CONSTRUCTOR_P (cand->fn)
2687 ? totype : non_reference (TREE_TYPE (TREE_TYPE (cand->fn)))),
2688 build1 (IDENTITY_CONV, TREE_TYPE (expr), expr));
2689 TREE_OPERAND (convs, 1) = build_zc_wrapper (cand);
2691 /* Combine it with the second conversion sequence. */
2692 cand->second_conv = merge_conversion_sequences (convs,
2695 if (cand->viable == -1)
2696 ICS_BAD_FLAG (cand->second_conv) = 1;
2702 build_user_type_conversion (tree totype, tree expr, int flags)
2704 struct z_candidate *cand
2705 = build_user_type_conversion_1 (totype, expr, flags);
2709 if (TREE_CODE (cand->second_conv) == AMBIG_CONV)
2710 return error_mark_node;
2711 return convert_from_reference (convert_like (cand->second_conv, expr));
2716 /* Find the possibly overloaded set of functions corresponding to a
2717 call of the form SCOPE::NAME (...). NAME might be a
2718 TEMPLATE_ID_EXPR, OVERLOAD, _DECL, IDENTIFIER_NODE or LOOKUP_EXPR. */
2721 resolve_scoped_fn_name (tree scope, tree name)
2724 tree template_args = NULL_TREE;
2725 bool is_template_id = TREE_CODE (name) == TEMPLATE_ID_EXPR;
2729 template_args = TREE_OPERAND (name, 1);
2730 name = TREE_OPERAND (name, 0);
2732 if (TREE_CODE (name) == OVERLOAD)
2733 name = DECL_NAME (get_first_fn (name));
2734 else if (TREE_CODE (name) == LOOKUP_EXPR)
2735 name = TREE_OPERAND (name, 0);
2737 if (TREE_CODE (scope) == NAMESPACE_DECL)
2738 fn = lookup_namespace_name (scope, name);
2741 if (!TYPE_BEING_DEFINED (scope)
2742 && !COMPLETE_TYPE_P (complete_type (scope)))
2744 error ("incomplete type '%T' cannot be used to name a scope",
2746 return error_mark_node;
2749 if (BASELINK_P (name))
2752 fn = lookup_member (scope, name, /*protect=*/1, /*want_type=*/false);
2753 if (fn && current_class_type)
2754 fn = (adjust_result_of_qualified_name_lookup
2755 (fn, scope, current_class_type));
2757 /* It might be the name of a function pointer member. */
2758 if (fn && TREE_CODE (fn) == FIELD_DECL)
2759 fn = resolve_offset_ref (build_offset_ref (scope, fn));
2764 error ("'%D' has no member named '%E'", scope, name);
2765 return error_mark_node;
2771 if (BASELINK_P (fn))
2772 fns = BASELINK_FUNCTIONS (fns);
2773 fns = build_nt (TEMPLATE_ID_EXPR, fns, template_args);
2774 if (BASELINK_P (fn))
2775 BASELINK_FUNCTIONS (fn) = fns;
2783 /* Do any initial processing on the arguments to a function call. */
2786 resolve_args (tree args)
2789 for (t = args; t; t = TREE_CHAIN (t))
2791 tree arg = TREE_VALUE (t);
2793 if (arg == error_mark_node)
2794 return error_mark_node;
2795 else if (VOID_TYPE_P (TREE_TYPE (arg)))
2797 error ("invalid use of void expression");
2798 return error_mark_node;
2800 else if (TREE_CODE (arg) == OFFSET_REF)
2801 arg = resolve_offset_ref (arg);
2802 arg = convert_from_reference (arg);
2803 TREE_VALUE (t) = arg;
2808 /* Perform overload resolution on FN, which is called with the ARGS.
2810 Return the candidate function selected by overload resolution, or
2811 NULL if the event that overload resolution failed. In the case
2812 that overload resolution fails, *CANDIDATES will be the set of
2813 candidates considered, and ANY_VIABLE_P will be set to true or
2814 false to indicate whether or not any of the candidates were
2817 The ARGS should already have gone through RESOLVE_ARGS before this
2818 function is called. */
2820 static struct z_candidate *
2821 perform_overload_resolution (tree fn,
2823 struct z_candidate **candidates,
2826 struct z_candidate *cand;
2827 tree explicit_targs = NULL_TREE;
2828 int template_only = 0;
2831 *any_viable_p = true;
2833 /* Check FN and ARGS. */
2834 my_friendly_assert (TREE_CODE (fn) == FUNCTION_DECL
2835 || TREE_CODE (fn) == TEMPLATE_DECL
2836 || TREE_CODE (fn) == OVERLOAD
2837 || TREE_CODE (fn) == TEMPLATE_ID_EXPR,
2839 my_friendly_assert (!args || TREE_CODE (args) == TREE_LIST,
2842 if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
2844 explicit_targs = TREE_OPERAND (fn, 1);
2845 fn = TREE_OPERAND (fn, 0);
2849 /* Add the various candidate functions. */
2850 add_candidates (fn, args, explicit_targs, template_only,
2851 /*conversion_path=*/NULL_TREE,
2852 /*access_path=*/NULL_TREE,
2856 *candidates = splice_viable (*candidates, pedantic, any_viable_p);
2860 cand = tourney (*candidates);
2864 /* Return an expression for a call to FN (a namespace-scope function,
2865 or a static member function) with the ARGS. */
2868 build_new_function_call (tree fn, tree args)
2870 struct z_candidate *candidates, *cand;
2873 args = resolve_args (args);
2874 if (args == error_mark_node)
2875 return error_mark_node;
2877 cand = perform_overload_resolution (fn, args, &candidates, &any_viable_p);
2881 if (!any_viable_p && candidates && ! candidates->next)
2882 return build_function_call (candidates->fn, args);
2883 if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
2884 fn = TREE_OPERAND (fn, 0);
2886 error ("no matching function for call to `%D(%A)'",
2887 DECL_NAME (OVL_CURRENT (fn)), args);
2889 error ("call of overloaded `%D(%A)' is ambiguous",
2890 DECL_NAME (OVL_CURRENT (fn)), args);
2892 print_z_candidates (candidates);
2893 return error_mark_node;
2896 return build_over_call (cand, LOOKUP_NORMAL);
2899 /* Build a call to a global operator new. FNNAME is the name of the
2900 operator (either "operator new" or "operator new[]") and ARGS are
2901 the arguments provided. *SIZE points to the total number of bytes
2902 required by the allocation, and is updated if that is changed here.
2903 *COOKIE_SIZE is non-NULL if a cookie should be used. If this
2904 function determins that no cookie should be used, after all,
2905 *COOKIE_SIZE is set to NULL_TREE. */
2908 build_operator_new_call (tree fnname, tree args, tree *size, tree *cookie_size)
2911 struct z_candidate *candidates;
2912 struct z_candidate *cand;
2915 args = tree_cons (NULL_TREE, *size, args);
2916 args = resolve_args (args);
2917 if (args == error_mark_node)
2920 fns = lookup_function_nonclass (fnname, args);
2922 /* Figure out what function is being called. */
2923 cand = perform_overload_resolution (fns, args, &candidates, &any_viable_p);
2925 /* If no suitable function could be found, issue an error message
2930 error ("no matching function for call to `%D(%A)'",
2931 DECL_NAME (OVL_CURRENT (fns)), args);
2933 error ("call of overlopaded `%D(%A)' is ambiguous",
2934 DECL_NAME (OVL_CURRENT (fns)), args);
2936 print_z_candidates (candidates);
2937 return error_mark_node;
2940 /* If a cookie is required, add some extra space. Whether
2941 or not a cookie is required cannot be determined until
2942 after we know which function was called. */
2945 bool use_cookie = true;
2946 if (!abi_version_at_least (2))
2948 tree placement = TREE_CHAIN (args);
2949 /* In G++ 3.2, the check was implemented incorrectly; it
2950 looked at the placement expression, rather than the
2951 type of the function. */
2952 if (placement && !TREE_CHAIN (placement)
2953 && same_type_p (TREE_TYPE (TREE_VALUE (placement)),
2961 arg_types = TYPE_ARG_TYPES (TREE_TYPE (cand->fn));
2962 /* Skip the size_t parameter. */
2963 arg_types = TREE_CHAIN (arg_types);
2964 /* Check the remaining parameters (if any). */
2966 && TREE_CHAIN (arg_types) == void_list_node
2967 && same_type_p (TREE_VALUE (arg_types),
2971 /* If we need a cookie, adjust the number of bytes allocated. */
2974 /* Update the total size. */
2975 *size = size_binop (PLUS_EXPR, *size, *cookie_size);
2976 /* Update the argument list to reflect the adjusted size. */
2977 TREE_VALUE (args) = *size;
2980 *cookie_size = NULL_TREE;
2983 /* Build the CALL_EXPR. */
2984 return build_over_call (cand, LOOKUP_NORMAL);
2988 build_object_call (tree obj, tree args)
2990 struct z_candidate *candidates = 0, *cand;
2991 tree fns, convs, mem_args = NULL_TREE;
2992 tree type = TREE_TYPE (obj);
2995 if (TYPE_PTRMEMFUNC_P (type))
2997 /* It's no good looking for an overloaded operator() on a
2998 pointer-to-member-function. */
2999 error ("pointer-to-member function %E cannot be called without an object; consider using .* or ->*", obj);
3000 return error_mark_node;
3003 fns = lookup_fnfields (TYPE_BINFO (type), ansi_opname (CALL_EXPR), 1);
3004 if (fns == error_mark_node)
3005 return error_mark_node;
3007 args = resolve_args (args);
3009 if (args == error_mark_node)
3010 return error_mark_node;
3014 tree base = BINFO_TYPE (BASELINK_BINFO (fns));
3015 mem_args = tree_cons (NULL_TREE, build_this (obj), args);
3017 for (fns = BASELINK_FUNCTIONS (fns); fns; fns = OVL_NEXT (fns))
3019 tree fn = OVL_CURRENT (fns);
3020 if (TREE_CODE (fn) == TEMPLATE_DECL)
3021 add_template_candidate (&candidates, fn, base, NULL_TREE,
3022 mem_args, NULL_TREE,
3025 LOOKUP_NORMAL, DEDUCE_CALL);
3027 add_function_candidate
3028 (&candidates, fn, base, mem_args, TYPE_BINFO (type),
3029 TYPE_BINFO (type), LOOKUP_NORMAL);
3033 convs = lookup_conversions (type);
3035 for (; convs; convs = TREE_CHAIN (convs))
3037 tree fns = TREE_VALUE (convs);
3038 tree totype = TREE_TYPE (TREE_TYPE (OVL_CURRENT (fns)));
3040 if ((TREE_CODE (totype) == POINTER_TYPE
3041 && TREE_CODE (TREE_TYPE (totype)) == FUNCTION_TYPE)
3042 || (TREE_CODE (totype) == REFERENCE_TYPE
3043 && TREE_CODE (TREE_TYPE (totype)) == FUNCTION_TYPE)
3044 || (TREE_CODE (totype) == REFERENCE_TYPE
3045 && TREE_CODE (TREE_TYPE (totype)) == POINTER_TYPE
3046 && TREE_CODE (TREE_TYPE (TREE_TYPE (totype))) == FUNCTION_TYPE))
3047 for (; fns; fns = OVL_NEXT (fns))
3049 tree fn = OVL_CURRENT (fns);
3050 if (TREE_CODE (fn) == TEMPLATE_DECL)
3051 add_template_conv_candidate
3052 (&candidates, fn, obj, args, totype,
3053 /*access_path=*/NULL_TREE,
3054 /*conversion_path=*/NULL_TREE);
3056 add_conv_candidate (&candidates, fn, obj, args,
3057 /*conversion_path=*/NULL_TREE,
3058 /*access_path=*/NULL_TREE);
3062 candidates = splice_viable (candidates, pedantic, &any_viable_p);
3065 error ("no match for call to `(%T) (%A)'", TREE_TYPE (obj), args);
3066 print_z_candidates (candidates);
3067 return error_mark_node;
3070 cand = tourney (candidates);
3073 error ("call of `(%T) (%A)' is ambiguous", TREE_TYPE (obj), args);
3074 print_z_candidates (candidates);
3075 return error_mark_node;
3078 /* Since cand->fn will be a type, not a function, for a conversion
3079 function, we must be careful not to unconditionally look at
3081 if (TREE_CODE (cand->fn) == FUNCTION_DECL
3082 && DECL_OVERLOADED_OPERATOR_P (cand->fn) == CALL_EXPR)
3083 return build_over_call (cand, LOOKUP_NORMAL);
3085 obj = convert_like_with_context
3086 (TREE_VEC_ELT (cand->convs, 0), obj, cand->fn, -1);
3089 return build_function_call (obj, args);
3093 op_error (enum tree_code code, enum tree_code code2,
3094 tree arg1, tree arg2, tree arg3, const char *problem)
3098 if (code == MODIFY_EXPR)
3099 opname = assignment_operator_name_info[code2].name;
3101 opname = operator_name_info[code].name;
3106 error ("%s for `%T ? %T : %T' operator", problem,
3107 error_type (arg1), error_type (arg2), error_type (arg3));
3109 case POSTINCREMENT_EXPR:
3110 case POSTDECREMENT_EXPR:
3111 error ("%s for `%T %s' operator", problem, error_type (arg1), opname);
3114 error ("%s for `%T [%T]' operator", problem,
3115 error_type (arg1), error_type (arg2));
3119 error ("%s for `%T %s %T' operator", problem,
3120 error_type (arg1), opname, error_type (arg2));
3122 error ("%s for `%s %T' operator", problem, opname, error_type (arg1));
3126 /* Return the implicit conversion sequence that could be used to
3127 convert E1 to E2 in [expr.cond]. */
3130 conditional_conversion (tree e1, tree e2)
3132 tree t1 = non_reference (TREE_TYPE (e1));
3133 tree t2 = non_reference (TREE_TYPE (e2));
3138 If E2 is an lvalue: E1 can be converted to match E2 if E1 can be
3139 implicitly converted (clause _conv_) to the type "reference to
3140 T2", subject to the constraint that in the conversion the
3141 reference must bind directly (_dcl.init.ref_) to E1. */
3142 if (real_lvalue_p (e2))
3144 conv = implicit_conversion (build_reference_type (t2),
3147 LOOKUP_NO_TEMP_BIND);
3154 If E1 and E2 have class type, and the underlying class types are
3155 the same or one is a base class of the other: E1 can be converted
3156 to match E2 if the class of T2 is the same type as, or a base
3157 class of, the class of T1, and the cv-qualification of T2 is the
3158 same cv-qualification as, or a greater cv-qualification than, the
3159 cv-qualification of T1. If the conversion is applied, E1 is
3160 changed to an rvalue of type T2 that still refers to the original
3161 source class object (or the appropriate subobject thereof). */
3162 if (CLASS_TYPE_P (t1) && CLASS_TYPE_P (t2)
3163 && same_or_base_type_p (TYPE_MAIN_VARIANT (t2),
3164 TYPE_MAIN_VARIANT (t1)))
3166 if (at_least_as_qualified_p (t2, t1))
3168 conv = build1 (IDENTITY_CONV, t1, e1);
3169 if (!same_type_p (TYPE_MAIN_VARIANT (t1),
3170 TYPE_MAIN_VARIANT (t2)))
3171 conv = build_conv (BASE_CONV, t2, conv);
3180 E1 can be converted to match E2 if E1 can be implicitly converted
3181 to the type that expression E2 would have if E2 were converted to
3182 an rvalue (or the type it has, if E2 is an rvalue). */
3183 return implicit_conversion (t2, t1, e1, LOOKUP_NORMAL);
3186 /* Implement [expr.cond]. ARG1, ARG2, and ARG3 are the three
3187 arguments to the conditional expression. */
3190 build_conditional_expr (tree arg1, tree arg2, tree arg3)
3195 tree result_type = NULL_TREE;
3196 bool lvalue_p = true;
3197 struct z_candidate *candidates = 0;
3198 struct z_candidate *cand;
3200 /* As a G++ extension, the second argument to the conditional can be
3201 omitted. (So that `a ? : c' is roughly equivalent to `a ? a :
3202 c'.) If the second operand is omitted, make sure it is
3203 calculated only once. */
3207 pedwarn ("ISO C++ forbids omitting the middle term of a ?: expression");
3209 /* Make sure that lvalues remain lvalues. See g++.oliva/ext1.C. */
3210 if (real_lvalue_p (arg1))
3211 arg2 = arg1 = stabilize_reference (arg1);
3213 arg2 = arg1 = save_expr (arg1);
3218 The first expr ession is implicitly converted to bool (clause
3220 arg1 = cp_convert (boolean_type_node, arg1);
3222 /* If something has already gone wrong, just pass that fact up the
3224 if (arg1 == error_mark_node
3225 || arg2 == error_mark_node
3226 || arg3 == error_mark_node
3227 || TREE_TYPE (arg1) == error_mark_node
3228 || TREE_TYPE (arg2) == error_mark_node
3229 || TREE_TYPE (arg3) == error_mark_node)
3230 return error_mark_node;
3234 If either the second or the third operand has type (possibly
3235 cv-qualified) void, then the lvalue-to-rvalue (_conv.lval_),
3236 array-to-pointer (_conv.array_), and function-to-pointer
3237 (_conv.func_) standard conversions are performed on the second
3238 and third operands. */
3239 arg2_type = TREE_TYPE (arg2);
3240 arg3_type = TREE_TYPE (arg3);
3241 if (VOID_TYPE_P (arg2_type) || VOID_TYPE_P (arg3_type))
3243 /* Do the conversions. We don't these for `void' type arguments
3244 since it can't have any effect and since decay_conversion
3245 does not handle that case gracefully. */
3246 if (!VOID_TYPE_P (arg2_type))
3247 arg2 = decay_conversion (arg2);
3248 if (!VOID_TYPE_P (arg3_type))
3249 arg3 = decay_conversion (arg3);
3250 arg2_type = TREE_TYPE (arg2);
3251 arg3_type = TREE_TYPE (arg3);
3255 One of the following shall hold:
3257 --The second or the third operand (but not both) is a
3258 throw-expression (_except.throw_); the result is of the
3259 type of the other and is an rvalue.
3261 --Both the second and the third operands have type void; the
3262 result is of type void and is an rvalue. */
3263 if ((TREE_CODE (arg2) == THROW_EXPR)
3264 ^ (TREE_CODE (arg3) == THROW_EXPR))
3265 result_type = ((TREE_CODE (arg2) == THROW_EXPR)
3266 ? arg3_type : arg2_type);
3267 else if (VOID_TYPE_P (arg2_type) && VOID_TYPE_P (arg3_type))
3268 result_type = void_type_node;
3271 error ("`%E' has type `void' and is not a throw-expression",
3272 VOID_TYPE_P (arg2_type) ? arg2 : arg3);
3273 return error_mark_node;
3277 goto valid_operands;
3281 Otherwise, if the second and third operand have different types,
3282 and either has (possibly cv-qualified) class type, an attempt is
3283 made to convert each of those operands to the type of the other. */
3284 else if (!same_type_p (arg2_type, arg3_type)
3285 && (CLASS_TYPE_P (arg2_type) || CLASS_TYPE_P (arg3_type)))
3287 tree conv2 = conditional_conversion (arg2, arg3);
3288 tree conv3 = conditional_conversion (arg3, arg2);
3292 If both can be converted, or one can be converted but the
3293 conversion is ambiguous, the program is ill-formed. If
3294 neither can be converted, the operands are left unchanged and
3295 further checking is performed as described below. If exactly
3296 one conversion is possible, that conversion is applied to the
3297 chosen operand and the converted operand is used in place of
3298 the original operand for the remainder of this section. */
3299 if ((conv2 && !ICS_BAD_FLAG (conv2)
3300 && conv3 && !ICS_BAD_FLAG (conv3))
3301 || (conv2 && TREE_CODE (conv2) == AMBIG_CONV)
3302 || (conv3 && TREE_CODE (conv3) == AMBIG_CONV))
3304 error ("operands to ?: have different types");
3305 return error_mark_node;
3307 else if (conv2 && !ICS_BAD_FLAG (conv2))
3309 arg2 = convert_like (conv2, arg2);
3310 arg2 = convert_from_reference (arg2);
3311 /* That may not quite have done the trick. If the two types
3312 are cv-qualified variants of one another, we will have
3313 just used an IDENTITY_CONV. */
3314 if (!same_type_p (TREE_TYPE (arg2), arg3_type))
3315 arg2 = convert (arg3_type, arg2);
3316 arg2_type = TREE_TYPE (arg2);
3318 else if (conv3 && !ICS_BAD_FLAG (conv3))
3320 arg3 = convert_like (conv3, arg3);
3321 arg3 = convert_from_reference (arg3);
3322 if (!same_type_p (TREE_TYPE (arg3), arg2_type))
3323 arg3 = convert (arg2_type, arg3);
3324 arg3_type = TREE_TYPE (arg3);
3330 If the second and third operands are lvalues and have the same
3331 type, the result is of that type and is an lvalue. */
3332 if (real_lvalue_p (arg2) && real_lvalue_p (arg3) &&
3333 same_type_p (arg2_type, arg3_type))
3335 result_type = arg2_type;
3336 goto valid_operands;
3341 Otherwise, the result is an rvalue. If the second and third
3342 operand do not have the same type, and either has (possibly
3343 cv-qualified) class type, overload resolution is used to
3344 determine the conversions (if any) to be applied to the operands
3345 (_over.match.oper_, _over.built_). */
3347 if (!same_type_p (arg2_type, arg3_type)
3348 && (CLASS_TYPE_P (arg2_type) || CLASS_TYPE_P (arg3_type)))
3354 /* Rearrange the arguments so that add_builtin_candidate only has
3355 to know about two args. In build_builtin_candidates, the
3356 arguments are unscrambled. */
3360 add_builtin_candidates (&candidates,
3363 ansi_opname (COND_EXPR),
3369 If the overload resolution fails, the program is
3371 candidates = splice_viable (candidates, pedantic, &any_viable_p);
3374 op_error (COND_EXPR, NOP_EXPR, arg1, arg2, arg3, "no match");
3375 print_z_candidates (candidates);
3376 return error_mark_node;
3378 cand = tourney (candidates);
3381 op_error (COND_EXPR, NOP_EXPR, arg1, arg2, arg3, "no match");
3382 print_z_candidates (candidates);
3383 return error_mark_node;
3388 Otherwise, the conversions thus determined are applied, and
3389 the converted operands are used in place of the original
3390 operands for the remainder of this section. */
3391 conv = TREE_VEC_ELT (cand->convs, 0);
3392 arg1 = convert_like (conv, arg1);
3393 conv = TREE_VEC_ELT (cand->convs, 1);
3394 arg2 = convert_like (conv, arg2);
3395 conv = TREE_VEC_ELT (cand->convs, 2);
3396 arg3 = convert_like (conv, arg3);
3401 Lvalue-to-rvalue (_conv.lval_), array-to-pointer (_conv.array_),
3402 and function-to-pointer (_conv.func_) standard conversions are
3403 performed on the second and third operands.
3405 We need to force the lvalue-to-rvalue conversion here for class types,
3406 so we get TARGET_EXPRs; trying to deal with a COND_EXPR of class rvalues
3407 that isn't wrapped with a TARGET_EXPR plays havoc with exception
3410 We use ocp_convert rather than build_user_type_conversion because the
3411 latter returns NULL_TREE on failure, while the former gives an error. */
3413 if (IS_AGGR_TYPE (TREE_TYPE (arg2)))
3414 arg2 = ocp_convert (TREE_TYPE (arg2), arg2,
3415 CONV_IMPLICIT|CONV_FORCE_TEMP, LOOKUP_NORMAL);
3417 arg2 = decay_conversion (arg2);
3418 arg2_type = TREE_TYPE (arg2);
3420 if (IS_AGGR_TYPE (TREE_TYPE (arg3)))
3421 arg3 = ocp_convert (TREE_TYPE (arg3), arg3,
3422 CONV_IMPLICIT|CONV_FORCE_TEMP, LOOKUP_NORMAL);
3424 arg3 = decay_conversion (arg3);
3425 arg3_type = TREE_TYPE (arg3);
3427 if (arg2 == error_mark_node || arg3 == error_mark_node)
3428 return error_mark_node;
3432 After those conversions, one of the following shall hold:
3434 --The second and third operands have the same type; the result is of
3436 if (same_type_p (arg2_type, arg3_type))
3437 result_type = arg2_type;
3440 --The second and third operands have arithmetic or enumeration
3441 type; the usual arithmetic conversions are performed to bring
3442 them to a common type, and the result is of that type. */
3443 else if ((ARITHMETIC_TYPE_P (arg2_type)
3444 || TREE_CODE (arg2_type) == ENUMERAL_TYPE)
3445 && (ARITHMETIC_TYPE_P (arg3_type)
3446 || TREE_CODE (arg3_type) == ENUMERAL_TYPE))
3448 /* In this case, there is always a common type. */
3449 result_type = type_after_usual_arithmetic_conversions (arg2_type,
3452 if (TREE_CODE (arg2_type) == ENUMERAL_TYPE
3453 && TREE_CODE (arg3_type) == ENUMERAL_TYPE)
3454 warning ("enumeral mismatch in conditional expression: `%T' vs `%T'",
3455 arg2_type, arg3_type);
3456 else if (extra_warnings
3457 && ((TREE_CODE (arg2_type) == ENUMERAL_TYPE
3458 && !same_type_p (arg3_type, type_promotes_to (arg2_type)))
3459 || (TREE_CODE (arg3_type) == ENUMERAL_TYPE
3460 && !same_type_p (arg2_type, type_promotes_to (arg3_type)))))
3461 warning ("enumeral and non-enumeral type in conditional expression");
3463 arg2 = perform_implicit_conversion (result_type, arg2);
3464 arg3 = perform_implicit_conversion (result_type, arg3);
3468 --The second and third operands have pointer type, or one has
3469 pointer type and the other is a null pointer constant; pointer
3470 conversions (_conv.ptr_) and qualification conversions
3471 (_conv.qual_) are performed to bring them to their composite
3472 pointer type (_expr.rel_). The result is of the composite
3475 --The second and third operands have pointer to member type, or
3476 one has pointer to member type and the other is a null pointer
3477 constant; pointer to member conversions (_conv.mem_) and
3478 qualification conversions (_conv.qual_) are performed to bring
3479 them to a common type, whose cv-qualification shall match the
3480 cv-qualification of either the second or the third operand.
3481 The result is of the common type. */
3482 else if ((null_ptr_cst_p (arg2)
3483 && (TYPE_PTR_P (arg3_type) || TYPE_PTRMEM_P (arg3_type)
3484 || TYPE_PTRMEMFUNC_P (arg3_type)))
3485 || (null_ptr_cst_p (arg3)
3486 && (TYPE_PTR_P (arg2_type) || TYPE_PTRMEM_P (arg2_type)
3487 || TYPE_PTRMEMFUNC_P (arg2_type)))
3488 || (TYPE_PTR_P (arg2_type) && TYPE_PTR_P (arg3_type))
3489 || (TYPE_PTRMEM_P (arg2_type) && TYPE_PTRMEM_P (arg3_type))
3490 || (TYPE_PTRMEMFUNC_P (arg2_type)
3491 && TYPE_PTRMEMFUNC_P (arg3_type)))
3493 result_type = composite_pointer_type (arg2_type, arg3_type, arg2,
3494 arg3, "conditional expression");
3495 arg2 = perform_implicit_conversion (result_type, arg2);
3496 arg3 = perform_implicit_conversion (result_type, arg3);
3501 error ("operands to ?: have different types");
3502 return error_mark_node;
3506 result = fold (build (COND_EXPR, result_type, arg1, arg2, arg3));
3507 /* Expand both sides into the same slot, hopefully the target of the
3508 ?: expression. We used to check for TARGET_EXPRs here, but now we
3509 sometimes wrap them in NOP_EXPRs so the test would fail. */
3510 if (!lvalue_p && IS_AGGR_TYPE (result_type))
3511 result = build_target_expr_with_type (result, result_type);
3513 /* If this expression is an rvalue, but might be mistaken for an
3514 lvalue, we must add a NON_LVALUE_EXPR. */
3515 if (!lvalue_p && real_lvalue_p (result))
3516 result = build1 (NON_LVALUE_EXPR, result_type, result);
3521 /* OPERAND is an operand to an expression. Perform necessary steps
3522 required before using it. If OPERAND is NULL_TREE, NULL_TREE is
3526 prep_operand (tree operand)
3530 if (TREE_CODE (operand) == OFFSET_REF)
3531 operand = resolve_offset_ref (operand);
3532 operand = convert_from_reference (operand);
3533 if (CLASS_TYPE_P (TREE_TYPE (operand))
3534 && CLASSTYPE_TEMPLATE_INSTANTIATION (TREE_TYPE (operand)))
3535 /* Make sure the template type is instantiated now. */
3536 instantiate_class_template (TYPE_MAIN_VARIANT (TREE_TYPE (operand)));
3542 /* Add each of the viable functions in FNS (a FUNCTION_DECL or
3543 OVERLOAD) to the CANDIDATES, returning an updated list of
3544 CANDIDATES. The ARGS are the arguments provided to the call,
3545 without any implicit object parameter. The EXPLICIT_TARGS are
3546 explicit template arguments provided. TEMPLATE_ONLY is true if
3547 only template fucntions should be considered. CONVERSION_PATH,
3548 ACCESS_PATH, and FLAGS are as for add_function_candidate. */
3551 add_candidates (tree fns, tree args,
3552 tree explicit_targs, bool template_only,
3553 tree conversion_path, tree access_path,
3555 struct z_candidate **candidates)
3558 tree non_static_args;
3560 ctype = conversion_path ? BINFO_TYPE (conversion_path) : NULL_TREE;
3561 /* Delay creating the implicit this parameter until it is needed. */
3562 non_static_args = NULL_TREE;
3569 fn = OVL_CURRENT (fns);
3570 /* Figure out which set of arguments to use. */
3571 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
3573 /* If this function is a non-static member, prepend the implicit
3574 object parameter. */
3575 if (!non_static_args)
3576 non_static_args = tree_cons (NULL_TREE,
3577 build_this (TREE_VALUE (args)),
3579 fn_args = non_static_args;
3582 /* Otherwise, just use the list of arguments provided. */
3585 if (TREE_CODE (fn) == TEMPLATE_DECL)
3586 add_template_candidate (candidates,
3596 else if (!template_only)
3597 add_function_candidate (candidates,
3604 fns = OVL_NEXT (fns);
3609 build_new_op (enum tree_code code, int flags, tree arg1, tree arg2, tree arg3)
3611 struct z_candidate *candidates = 0, *cand;
3612 tree arglist, fnname;
3614 enum tree_code code2 = NOP_EXPR;
3619 if (error_operand_p (arg1)
3620 || error_operand_p (arg2)
3621 || error_operand_p (arg3))
3622 return error_mark_node;
3624 if (code == MODIFY_EXPR)
3626 code2 = TREE_CODE (arg3);
3628 fnname = ansi_assopname (code2);
3631 fnname = ansi_opname (code);
3633 arg1 = prep_operand (arg1);
3639 case VEC_DELETE_EXPR:
3641 /* Use build_op_new_call and build_op_delete_call instead. */
3645 return build_object_call (arg1, arg2);
3651 arg2 = prep_operand (arg2);
3652 arg3 = prep_operand (arg3);
3654 if (code == COND_EXPR)
3656 if (arg2 == NULL_TREE
3657 || TREE_CODE (TREE_TYPE (arg2)) == VOID_TYPE
3658 || TREE_CODE (TREE_TYPE (arg3)) == VOID_TYPE
3659 || (! IS_OVERLOAD_TYPE (TREE_TYPE (arg2))
3660 && ! IS_OVERLOAD_TYPE (TREE_TYPE (arg3))))
3663 else if (! IS_OVERLOAD_TYPE (TREE_TYPE (arg1))
3664 && (! arg2 || ! IS_OVERLOAD_TYPE (TREE_TYPE (arg2))))
3667 if (code == POSTINCREMENT_EXPR || code == POSTDECREMENT_EXPR)
3668 arg2 = integer_zero_node;
3670 arglist = NULL_TREE;
3672 arglist = tree_cons (NULL_TREE, arg3, arglist);
3674 arglist = tree_cons (NULL_TREE, arg2, arglist);
3675 arglist = tree_cons (NULL_TREE, arg1, arglist);
3677 /* Add namespace-scope operators to the list of functions to
3679 add_candidates (lookup_function_nonclass (fnname, arglist),
3680 arglist, NULL_TREE, false, NULL_TREE, NULL_TREE,
3681 flags, &candidates);
3682 /* Add class-member operators to the candidate set. */
3683 if (CLASS_TYPE_P (TREE_TYPE (arg1)))
3687 fns = lookup_fnfields (TYPE_BINFO (TREE_TYPE (arg1)), fnname, 1);
3688 if (fns == error_mark_node)
3691 add_candidates (BASELINK_FUNCTIONS (fns), arglist,
3693 BASELINK_BINFO (fns),
3694 TYPE_BINFO (TREE_TYPE (arg1)),
3695 flags, &candidates);
3698 /* Rearrange the arguments for ?: so that add_builtin_candidate only has
3699 to know about two args; a builtin candidate will always have a first
3700 parameter of type bool. We'll handle that in
3701 build_builtin_candidate. */
3702 if (code == COND_EXPR)
3712 args[2] = NULL_TREE;
3715 add_builtin_candidates (&candidates, code, code2, fnname, args, flags);
3721 /* For these, the built-in candidates set is empty
3722 [over.match.oper]/3. We don't want non-strict matches
3723 because exact matches are always possible with built-in
3724 operators. The built-in candidate set for COMPONENT_REF
3725 would be empty too, but since there are no such built-in
3726 operators, we accept non-strict matches for them. */
3731 strict_p = pedantic;
3735 candidates = splice_viable (candidates, strict_p, &any_viable_p);
3740 case POSTINCREMENT_EXPR:
3741 case POSTDECREMENT_EXPR:
3742 /* Look for an `operator++ (int)'. If they didn't have
3743 one, then we fall back to the old way of doing things. */
3744 if (flags & LOOKUP_COMPLAIN)
3745 pedwarn ("no `%D(int)' declared for postfix `%s', trying prefix operator instead",
3747 operator_name_info[code].name);
3748 if (code == POSTINCREMENT_EXPR)
3749 code = PREINCREMENT_EXPR;
3751 code = PREDECREMENT_EXPR;
3752 return build_new_op (code, flags, arg1, NULL_TREE, NULL_TREE);
3754 /* The caller will deal with these. */
3763 if (flags & LOOKUP_COMPLAIN)
3765 op_error (code, code2, arg1, arg2, arg3, "no match");
3766 print_z_candidates (candidates);
3768 return error_mark_node;
3771 cand = tourney (candidates);
3774 if (flags & LOOKUP_COMPLAIN)
3776 op_error (code, code2, arg1, arg2, arg3, "ambiguous overload");
3777 print_z_candidates (candidates);
3779 return error_mark_node;
3782 if (TREE_CODE (cand->fn) == FUNCTION_DECL)
3785 && fnname == ansi_assopname (NOP_EXPR)
3786 && DECL_ARTIFICIAL (cand->fn)
3788 && ! candidates->next->next)
3790 warning ("using synthesized `%#D' for copy assignment",
3792 cp_warning_at (" where cfront would use `%#D'",
3794 ? candidates->next->fn
3798 return build_over_call (cand, LOOKUP_NORMAL);
3801 /* Check for comparison of different enum types. */
3810 if (TREE_CODE (TREE_TYPE (arg1)) == ENUMERAL_TYPE
3811 && TREE_CODE (TREE_TYPE (arg2)) == ENUMERAL_TYPE
3812 && (TYPE_MAIN_VARIANT (TREE_TYPE (arg1))
3813 != TYPE_MAIN_VARIANT (TREE_TYPE (arg2))))
3815 warning ("comparison between `%#T' and `%#T'",
3816 TREE_TYPE (arg1), TREE_TYPE (arg2));
3823 /* We need to strip any leading REF_BIND so that bitfields don't cause
3824 errors. This should not remove any important conversions, because
3825 builtins don't apply to class objects directly. */
3826 conv = TREE_VEC_ELT (cand->convs, 0);
3827 if (TREE_CODE (conv) == REF_BIND)
3828 conv = TREE_OPERAND (conv, 0);
3829 arg1 = convert_like (conv, arg1);
3832 conv = TREE_VEC_ELT (cand->convs, 1);
3833 if (TREE_CODE (conv) == REF_BIND)
3834 conv = TREE_OPERAND (conv, 0);
3835 arg2 = convert_like (conv, arg2);
3839 conv = TREE_VEC_ELT (cand->convs, 2);
3840 if (TREE_CODE (conv) == REF_BIND)
3841 conv = TREE_OPERAND (conv, 0);
3842 arg3 = convert_like (conv, arg3);
3849 return build_modify_expr (arg1, code2, arg2);
3852 return build_indirect_ref (arg1, "unary *");
3857 case TRUNC_DIV_EXPR:
3868 case TRUNC_MOD_EXPR:
3872 case TRUTH_ANDIF_EXPR:
3873 case TRUTH_ORIF_EXPR:
3874 return cp_build_binary_op (code, arg1, arg2);
3879 case TRUTH_NOT_EXPR:
3880 case PREINCREMENT_EXPR:
3881 case POSTINCREMENT_EXPR:
3882 case PREDECREMENT_EXPR:
3883 case POSTDECREMENT_EXPR:
3886 return build_unary_op (code, arg1, candidates != 0);
3889 return build_array_ref (arg1, arg2);
3892 return build_conditional_expr (arg1, arg2, arg3);
3895 return build_m_component_ref
3896 (build_indirect_ref (arg1, NULL), arg2);
3898 /* The caller will deal with these. */
3910 /* Build a call to operator delete. This has to be handled very specially,
3911 because the restrictions on what signatures match are different from all
3912 other call instances. For a normal delete, only a delete taking (void *)
3913 or (void *, size_t) is accepted. For a placement delete, only an exact
3914 match with the placement new is accepted.
3916 CODE is either DELETE_EXPR or VEC_DELETE_EXPR.
3917 ADDR is the pointer to be deleted.
3918 SIZE is the size of the memory block to be deleted.
3919 FLAGS are the usual overloading flags.
3920 PLACEMENT is the corresponding placement new call, or NULL_TREE. */
3923 build_op_delete_call (enum tree_code code, tree addr, tree size,
3924 int flags, tree placement)
3926 tree fn = NULL_TREE;
3927 tree fns, fnname, fntype, argtypes, args, type;
3930 if (addr == error_mark_node)
3931 return error_mark_node;
3933 type = TREE_TYPE (TREE_TYPE (addr));
3934 while (TREE_CODE (type) == ARRAY_TYPE)
3935 type = TREE_TYPE (type);
3937 fnname = ansi_opname (code);
3939 if (IS_AGGR_TYPE (type) && ! (flags & LOOKUP_GLOBAL))
3942 If the result of the lookup is ambiguous or inaccessible, or if
3943 the lookup selects a placement deallocation function, the
3944 program is ill-formed.
3946 Therefore, we ask lookup_fnfields to complain ambout ambiguity. */
3948 fns = lookup_fnfields (TYPE_BINFO (type), fnname, 1);
3949 if (fns == error_mark_node)
3950 return error_mark_node;
3955 if (fns == NULL_TREE)
3956 fns = lookup_name_nonclass (fnname);
3963 /* Find the allocation function that is being called. */
3964 call_expr = placement;
3965 /* Sometimes we have a COMPOUND_EXPR, rather than a simple
3967 while (TREE_CODE (call_expr) == COMPOUND_EXPR)
3968 call_expr = TREE_OPERAND (call_expr, 1);
3969 /* Extract the function. */
3970 alloc_fn = get_callee_fndecl (call_expr);
3971 my_friendly_assert (alloc_fn != NULL_TREE, 20020327);
3972 /* Then the second parm type. */
3973 argtypes = TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (alloc_fn)));
3974 /* Also the second argument. */
3975 args = TREE_CHAIN (TREE_OPERAND (call_expr, 1));
3979 /* First try it without the size argument. */
3980 argtypes = void_list_node;
3984 /* Strip const and volatile from addr. */
3985 addr = cp_convert (ptr_type_node, addr);
3987 /* We make two tries at finding a matching `operator delete'. On
3988 the first pass, we look for an one-operator (or placement)
3989 operator delete. If we're not doing placement delete, then on
3990 the second pass we look for a two-argument delete. */
3991 for (pass = 0; pass < (placement ? 1 : 2); ++pass)
3994 argtypes = tree_cons (NULL_TREE, ptr_type_node, argtypes);
3996 /* Normal delete; now try to find a match including the size
3998 argtypes = tree_cons (NULL_TREE, ptr_type_node,
3999 tree_cons (NULL_TREE, sizetype,
4001 fntype = build_function_type (void_type_node, argtypes);
4003 /* Go through the `operator delete' functions looking for one
4004 with a matching type. */
4005 for (fn = BASELINK_P (fns) ? BASELINK_FUNCTIONS (fns) : fns;
4011 /* Exception specifications on the `delete' operator do not
4013 t = build_exception_variant (TREE_TYPE (OVL_CURRENT (fn)),
4015 /* We also don't compare attributes. We're really just
4016 trying to check the types of the first two parameters. */
4017 if (comptypes (t, fntype, COMPARE_NO_ATTRIBUTES))
4021 /* If we found a match, we're done. */
4026 /* If we have a matching function, call it. */
4029 /* Make sure we have the actual function, and not an
4031 fn = OVL_CURRENT (fn);
4033 /* If the FN is a member function, make sure that it is
4035 if (DECL_CLASS_SCOPE_P (fn))
4036 enforce_access (type, fn);
4039 args = tree_cons (NULL_TREE, addr, args);
4041 args = tree_cons (NULL_TREE, addr,
4042 build_tree_list (NULL_TREE, size));
4044 return build_function_call (fn, args);
4047 /* If we are doing placement delete we do nothing if we don't find a
4048 matching op delete. */
4052 error ("no suitable `operator delete' for `%T'", type);
4053 return error_mark_node;
4056 /* If the current scope isn't allowed to access DECL along
4057 BASETYPE_PATH, give an error. The most derived class in
4058 BASETYPE_PATH is the one used to qualify DECL. */
4061 enforce_access (tree basetype_path, tree decl)
4063 if (!accessible_p (basetype_path, decl))
4065 if (TREE_PRIVATE (decl))
4066 cp_error_at ("`%+#D' is private", decl);
4067 else if (TREE_PROTECTED (decl))
4068 cp_error_at ("`%+#D' is protected", decl);
4070 cp_error_at ("`%+#D' is inaccessible", decl);
4071 error ("within this context");
4078 /* Perform the conversions in CONVS on the expression EXPR.
4079 FN and ARGNUM are used for diagnostics. ARGNUM is zero based, -1
4080 indicates the `this' argument of a method. INNER is nonzero when
4081 being called to continue a conversion chain. It is negative when a
4082 reference binding will be applied, positive otherwise. */
4085 convert_like_real (tree convs, tree expr, tree fn, int argnum, int inner)
4089 tree totype = TREE_TYPE (convs);
4091 if (ICS_BAD_FLAG (convs)
4092 && TREE_CODE (convs) != USER_CONV
4093 && TREE_CODE (convs) != AMBIG_CONV
4094 && TREE_CODE (convs) != REF_BIND)
4097 for (; t; t = TREE_OPERAND (t, 0))
4099 if (TREE_CODE (t) == USER_CONV || !ICS_BAD_FLAG (t))
4101 expr = convert_like_real (t, expr, fn, argnum, 1);
4104 else if (TREE_CODE (t) == AMBIG_CONV)
4105 return convert_like_real (t, expr, fn, argnum, 1);
4106 else if (TREE_CODE (t) == IDENTITY_CONV)
4109 pedwarn ("invalid conversion from `%T' to `%T'", TREE_TYPE (expr), totype);
4111 pedwarn (" initializing argument %P of `%D'", argnum, fn);
4112 return cp_convert (totype, expr);
4116 expr = dubious_conversion_warnings
4117 (totype, expr, "argument", fn, argnum);
4118 switch (TREE_CODE (convs))
4122 struct z_candidate *cand = USER_CONV_CAND (convs);
4123 tree convfn = cand->fn;
4126 if (DECL_CONSTRUCTOR_P (convfn))
4128 tree t = build_int_2 (0, 0);
4129 TREE_TYPE (t) = build_pointer_type (DECL_CONTEXT (convfn));
4131 args = build_tree_list (NULL_TREE, expr);
4132 if (DECL_HAS_IN_CHARGE_PARM_P (convfn)
4133 || DECL_HAS_VTT_PARM_P (convfn))
4134 /* We should never try to call the abstract or base constructor
4137 args = tree_cons (NULL_TREE, t, args);
4140 args = build_this (expr);
4141 expr = build_over_call (cand, LOOKUP_NORMAL);
4143 /* If this is a constructor or a function returning an aggr type,
4144 we need to build up a TARGET_EXPR. */
4145 if (DECL_CONSTRUCTOR_P (convfn))
4146 expr = build_cplus_new (totype, expr);
4148 /* The result of the call is then used to direct-initialize the object
4149 that is the destination of the copy-initialization. [dcl.init]
4151 Note that this step is not reflected in the conversion sequence;
4152 it affects the semantics when we actually perform the
4153 conversion, but is not considered during overload resolution.
4155 If the target is a class, that means call a ctor. */
4156 if (IS_AGGR_TYPE (totype)
4157 && (inner >= 0 || !lvalue_p (expr)))
4159 savew = warningcount, savee = errorcount;
4160 expr = build_special_member_call
4161 (NULL_TREE, complete_ctor_identifier,
4162 build_tree_list (NULL_TREE, expr), TYPE_BINFO (totype),
4163 /* Core issue 84, now a DR, says that we don't allow UDCs
4164 for these args (which deliberately breaks copy-init of an
4165 auto_ptr<Base> from an auto_ptr<Derived>). */
4166 LOOKUP_NORMAL|LOOKUP_ONLYCONVERTING|LOOKUP_NO_CONVERSION);
4168 /* Tell the user where this failing constructor call came from. */
4171 if (warningcount > savew)
4173 (" initializing argument %P of `%D' from result of `%D'",
4174 argnum, fn, convfn);
4175 else if (errorcount > savee)
4177 (" initializing argument %P of `%D' from result of `%D'",
4178 argnum, fn, convfn);
4182 if (warningcount > savew)
4183 warning (" initializing temporary from result of `%D'",
4185 else if (errorcount > savee)
4186 error (" initializing temporary from result of `%D'",
4189 expr = build_cplus_new (totype, expr);
4194 if (type_unknown_p (expr))
4195 expr = instantiate_type (totype, expr, tf_error | tf_warning);
4196 /* Convert a non-array constant variable to its underlying value, unless we
4197 are about to bind it to a reference, in which case we need to
4198 leave it as an lvalue. */
4200 && TREE_CODE (TREE_TYPE (expr)) != ARRAY_TYPE)
4201 expr = decl_constant_value (expr);
4204 /* Call build_user_type_conversion again for the error. */
4205 return build_user_type_conversion
4206 (totype, TREE_OPERAND (convs, 0), LOOKUP_NORMAL);
4212 expr = convert_like_real (TREE_OPERAND (convs, 0), expr, fn, argnum,
4213 TREE_CODE (convs) == REF_BIND ? -1 : 1);
4214 if (expr == error_mark_node)
4215 return error_mark_node;
4217 switch (TREE_CODE (convs))
4220 if (! IS_AGGR_TYPE (totype))
4222 /* else fall through */
4224 if (TREE_CODE (convs) == BASE_CONV && !NEED_TEMPORARY_P (convs))
4226 /* We are going to bind a reference directly to a base-class
4227 subobject of EXPR. */
4228 tree base_ptr = build_pointer_type (totype);
4230 /* Build an expression for `*((base*) &expr)'. */
4231 expr = build_unary_op (ADDR_EXPR, expr, 0);
4232 expr = perform_implicit_conversion (base_ptr, expr);
4233 expr = build_indirect_ref (expr, "implicit conversion");
4237 /* Copy-initialization where the cv-unqualified version of the source
4238 type is the same class as, or a derived class of, the class of the
4239 destination [is treated as direct-initialization]. [dcl.init] */
4240 savew = warningcount, savee = errorcount;
4241 expr = build_special_member_call (NULL_TREE, complete_ctor_identifier,
4242 build_tree_list (NULL_TREE, expr),
4243 TYPE_BINFO (totype),
4244 LOOKUP_NORMAL|LOOKUP_ONLYCONVERTING);
4247 if (warningcount > savew)
4248 warning (" initializing argument %P of `%D'", argnum, fn);
4249 else if (errorcount > savee)
4250 error (" initializing argument %P of `%D'", argnum, fn);
4252 return build_cplus_new (totype, expr);
4256 tree ref_type = totype;
4258 /* If necessary, create a temporary. */
4259 if (NEED_TEMPORARY_P (convs) || !non_cast_lvalue_p (expr))
4261 tree type = TREE_TYPE (TREE_OPERAND (convs, 0));
4262 expr = build_target_expr_with_type (expr, type);
4265 /* Take the address of the thing to which we will bind the
4267 expr = build_unary_op (ADDR_EXPR, expr, 1);
4268 if (expr == error_mark_node)
4269 return error_mark_node;
4271 /* Convert it to a pointer to the type referred to by the
4272 reference. This will adjust the pointer if a derived to
4273 base conversion is being performed. */
4274 expr = cp_convert (build_pointer_type (TREE_TYPE (ref_type)),
4276 /* Convert the pointer to the desired reference type. */
4277 return build_nop (ref_type, expr);
4281 return decay_conversion (expr);
4284 /* Warn about deprecated conversion if appropriate. */
4285 string_conv_p (totype, expr, 1);
4291 return ocp_convert (totype, expr, CONV_IMPLICIT,
4292 LOOKUP_NORMAL|LOOKUP_NO_CONVERSION);
4295 /* Build a call to __builtin_trap which can be used in an expression. */
4298 call_builtin_trap (void)
4300 tree fn = get_identifier ("__builtin_trap");
4301 if (IDENTIFIER_GLOBAL_VALUE (fn))
4302 fn = IDENTIFIER_GLOBAL_VALUE (fn);
4306 fn = build_call (fn, NULL_TREE);
4307 fn = build (COMPOUND_EXPR, integer_type_node, fn, integer_zero_node);
4311 /* ARG is being passed to a varargs function. Perform any conversions
4312 required. Array/function to pointer decay must have already happened.
4313 Return the converted value. */
4316 convert_arg_to_ellipsis (tree arg)
4318 if (TREE_CODE (TREE_TYPE (arg)) == REAL_TYPE
4319 && (TYPE_PRECISION (TREE_TYPE (arg))
4320 < TYPE_PRECISION (double_type_node)))
4321 /* Convert `float' to `double'. */
4322 arg = cp_convert (double_type_node, arg);
4324 /* Convert `short' and `char' to full-size `int'. */
4325 arg = default_conversion (arg);
4327 arg = require_complete_type (arg);
4329 if (arg != error_mark_node && ! pod_type_p (TREE_TYPE (arg)))
4331 /* Undefined behavior [expr.call] 5.2.2/7. We used to just warn
4332 here and do a bitwise copy, but now cp_expr_size will abort if we
4334 warning ("cannot pass objects of non-POD type `%#T' through `...'; \
4335 call will abort at runtime",
4337 arg = call_builtin_trap ();
4343 /* va_arg (EXPR, TYPE) is a builtin. Make sure it is not abused. */
4346 build_x_va_arg (tree expr, tree type)
4348 if (processing_template_decl)
4349 return build_min (VA_ARG_EXPR, type, expr);
4351 type = complete_type_or_else (type, NULL_TREE);
4353 if (expr == error_mark_node || !type)
4354 return error_mark_node;
4356 if (! pod_type_p (type))
4358 /* Undefined behavior [expr.call] 5.2.2/7. */
4359 warning ("cannot receive objects of non-POD type `%#T' through `...'",
4363 return build_va_arg (expr, type);
4366 /* TYPE has been given to va_arg. Apply the default conversions which
4367 would have happened when passed via ellipsis. Return the promoted
4368 type, or the passed type if there is no change. */
4371 cxx_type_promotes_to (tree type)
4375 if (TREE_CODE (type) == ARRAY_TYPE)
4376 return build_pointer_type (TREE_TYPE (type));
4378 if (TREE_CODE (type) == FUNCTION_TYPE)
4379 return build_pointer_type (type);
4381 promote = type_promotes_to (type);
4382 if (same_type_p (type, promote))
4388 /* ARG is a default argument expression being passed to a parameter of
4389 the indicated TYPE, which is a parameter to FN. Do any required
4390 conversions. Return the converted value. */
4393 convert_default_arg (tree type, tree arg, tree fn, int parmnum)
4395 /* If the ARG is an unparsed default argument expression, the
4396 conversion cannot be performed. */
4397 if (TREE_CODE (arg) == DEFAULT_ARG)
4399 error ("the default argument for parameter %d of `%D' has "
4400 "not yet been parsed",
4402 return error_mark_node;
4405 if (fn && DECL_TEMPLATE_INFO (fn))
4406 arg = tsubst_default_argument (fn, type, arg);
4408 arg = break_out_target_exprs (arg);
4410 if (TREE_CODE (arg) == CONSTRUCTOR)
4412 arg = digest_init (type, arg, 0);
4413 arg = convert_for_initialization (0, type, arg, LOOKUP_NORMAL,
4414 "default argument", fn, parmnum);
4418 /* This could get clobbered by the following call. */
4419 if (TREE_HAS_CONSTRUCTOR (arg))
4420 arg = copy_node (arg);
4422 arg = convert_for_initialization (0, type, arg, LOOKUP_NORMAL,
4423 "default argument", fn, parmnum);
4424 arg = convert_for_arg_passing (type, arg);
4430 /* Returns the type which will really be used for passing an argument of
4434 type_passed_as (tree type)
4436 /* Pass classes with copy ctors by invisible reference. */
4437 if (TREE_ADDRESSABLE (type))
4438 type = build_reference_type (type);
4439 else if (PROMOTE_PROTOTYPES
4440 && INTEGRAL_TYPE_P (type)
4441 && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
4442 type = integer_type_node;
4447 /* Actually perform the appropriate conversion. */
4450 convert_for_arg_passing (tree type, tree val)
4452 if (val == error_mark_node)
4454 /* Pass classes with copy ctors by invisible reference. */
4455 else if (TREE_ADDRESSABLE (type))
4456 val = build1 (ADDR_EXPR, build_reference_type (type), val);
4457 else if (PROMOTE_PROTOTYPES
4458 && INTEGRAL_TYPE_P (type)
4459 && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
4460 val = default_conversion (val);
4464 /* Subroutine of the various build_*_call functions. Overload resolution
4465 has chosen a winning candidate CAND; build up a CALL_EXPR accordingly.
4466 ARGS is a TREE_LIST of the unconverted arguments to the call. FLAGS is a
4467 bitmask of various LOOKUP_* flags which apply to the call itself. */
4470 build_over_call (struct z_candidate *cand, int flags)
4473 tree args = cand->args;
4474 tree convs = cand->convs;
4475 tree converted_args = NULL_TREE;
4476 tree parm = TYPE_ARG_TYPES (TREE_TYPE (fn));
4477 tree conv, arg, val;
4481 /* Give any warnings we noticed during overload resolution. */
4483 for (val = cand->warnings; val; val = TREE_CHAIN (val))
4484 joust (cand, WRAPPER_ZC (TREE_VALUE (val)), 1);
4486 if (DECL_FUNCTION_MEMBER_P (fn))
4487 enforce_access (cand->access_path, fn);
4489 if (args && TREE_CODE (args) != TREE_LIST)
4490 args = build_tree_list (NULL_TREE, args);
4493 /* The implicit parameters to a constructor are not considered by overload
4494 resolution, and must be of the proper type. */
4495 if (DECL_CONSTRUCTOR_P (fn))
4497 converted_args = tree_cons (NULL_TREE, TREE_VALUE (arg), converted_args);
4498 arg = TREE_CHAIN (arg);
4499 parm = TREE_CHAIN (parm);
4500 if (DECL_HAS_IN_CHARGE_PARM_P (fn))
4501 /* We should never try to call the abstract constructor. */
4503 if (DECL_HAS_VTT_PARM_P (fn))
4505 converted_args = tree_cons
4506 (NULL_TREE, TREE_VALUE (arg), converted_args);
4507 arg = TREE_CHAIN (arg);
4508 parm = TREE_CHAIN (parm);
4511 /* Bypass access control for 'this' parameter. */
4512 else if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
4514 tree parmtype = TREE_VALUE (parm);
4515 tree argtype = TREE_TYPE (TREE_VALUE (arg));
4519 if (ICS_BAD_FLAG (TREE_VEC_ELT (convs, i)))
4520 pedwarn ("passing `%T' as `this' argument of `%#D' discards qualifiers",
4521 TREE_TYPE (argtype), fn);
4523 /* [class.mfct.nonstatic]: If a nonstatic member function of a class
4524 X is called for an object that is not of type X, or of a type
4525 derived from X, the behavior is undefined.
4527 So we can assume that anything passed as 'this' is non-null, and
4528 optimize accordingly. */
4529 my_friendly_assert (TREE_CODE (parmtype) == POINTER_TYPE, 19990811);
4530 /* Convert to the base in which the function was declared. */
4531 my_friendly_assert (cand->conversion_path != NULL_TREE, 20020730);
4532 converted_arg = build_base_path (PLUS_EXPR,
4534 cand->conversion_path,
4536 /* If fn was found by a using declaration, the conversion path
4537 will be to the derived class, not the base declaring fn. We
4538 must convert from derived to base. */
4539 base_binfo = lookup_base (TREE_TYPE (TREE_TYPE (converted_arg)),
4540 TREE_TYPE (parmtype), ba_ignore, NULL);
4542 converted_arg = build_base_path (PLUS_EXPR, converted_arg,
4545 converted_args = tree_cons (NULL_TREE, converted_arg, converted_args);
4546 parm = TREE_CHAIN (parm);
4547 arg = TREE_CHAIN (arg);
4553 parm = TREE_CHAIN (parm), arg = TREE_CHAIN (arg), ++i)
4555 tree type = TREE_VALUE (parm);
4557 conv = TREE_VEC_ELT (convs, i);
4558 val = convert_like_with_context
4559 (conv, TREE_VALUE (arg), fn, i - is_method);
4561 val = convert_for_arg_passing (type, val);
4562 converted_args = tree_cons (NULL_TREE, val, converted_args);
4565 /* Default arguments */
4566 for (; parm && parm != void_list_node; parm = TREE_CHAIN (parm), i++)
4568 = tree_cons (NULL_TREE,
4569 convert_default_arg (TREE_VALUE (parm),
4570 TREE_PURPOSE (parm),
4575 for (; arg; arg = TREE_CHAIN (arg))
4577 = tree_cons (NULL_TREE,
4578 convert_arg_to_ellipsis (TREE_VALUE (arg)),
4581 converted_args = nreverse (converted_args);
4584 check_function_format (NULL, TYPE_ATTRIBUTES (TREE_TYPE (fn)),
4587 /* Avoid actually calling copy constructors and copy assignment operators,
4590 if (! flag_elide_constructors)
4591 /* Do things the hard way. */;
4592 else if (TREE_VEC_LENGTH (convs) == 1
4593 && DECL_COPY_CONSTRUCTOR_P (fn))
4596 arg = skip_artificial_parms_for (fn, converted_args);
4597 arg = TREE_VALUE (arg);
4599 /* Pull out the real argument, disregarding const-correctness. */
4601 while (TREE_CODE (targ) == NOP_EXPR
4602 || TREE_CODE (targ) == NON_LVALUE_EXPR
4603 || TREE_CODE (targ) == CONVERT_EXPR)
4604 targ = TREE_OPERAND (targ, 0);
4605 if (TREE_CODE (targ) == ADDR_EXPR)
4607 targ = TREE_OPERAND (targ, 0);
4608 if (!same_type_ignoring_top_level_qualifiers_p
4609 (TREE_TYPE (TREE_TYPE (arg)), TREE_TYPE (targ)))
4618 arg = build_indirect_ref (arg, 0);
4620 /* [class.copy]: the copy constructor is implicitly defined even if
4621 the implementation elided its use. */
4622 if (TYPE_HAS_COMPLEX_INIT_REF (DECL_CONTEXT (fn)))
4625 /* If we're creating a temp and we already have one, don't create a
4626 new one. If we're not creating a temp but we get one, use
4627 INIT_EXPR to collapse the temp into our target. Otherwise, if the
4628 ctor is trivial, do a bitwise copy with a simple TARGET_EXPR for a
4629 temp or an INIT_EXPR otherwise. */
4630 if (integer_zerop (TREE_VALUE (args)))
4632 if (TREE_CODE (arg) == TARGET_EXPR)
4634 else if (TYPE_HAS_TRIVIAL_INIT_REF (DECL_CONTEXT (fn)))
4635 return build_target_expr_with_type (arg, DECL_CONTEXT (fn));
4637 else if (TREE_CODE (arg) == TARGET_EXPR
4638 || TYPE_HAS_TRIVIAL_INIT_REF (DECL_CONTEXT (fn)))
4641 tree to = stabilize_reference
4642 (build_indirect_ref (TREE_VALUE (args), 0));
4644 val = build (INIT_EXPR, DECL_CONTEXT (fn), to, arg);
4645 address = build_unary_op (ADDR_EXPR, val, 0);
4646 /* Avoid a warning about this expression, if the address is
4648 TREE_USED (address) = 1;
4652 else if (DECL_OVERLOADED_OPERATOR_P (fn) == NOP_EXPR
4654 && TYPE_HAS_TRIVIAL_ASSIGN_REF (DECL_CONTEXT (fn)))
4656 tree to = stabilize_reference
4657 (build_indirect_ref (TREE_VALUE (converted_args), 0));
4659 arg = build_indirect_ref (TREE_VALUE (TREE_CHAIN (converted_args)), 0);
4660 val = build (MODIFY_EXPR, TREE_TYPE (to), to, arg);
4666 if (DECL_VINDEX (fn) && (flags & LOOKUP_NONVIRTUAL) == 0)
4668 tree t, *p = &TREE_VALUE (converted_args);
4669 tree binfo = lookup_base (TREE_TYPE (TREE_TYPE (*p)),
4672 my_friendly_assert (binfo && binfo != error_mark_node, 20010730);
4674 *p = build_base_path (PLUS_EXPR, *p, binfo, 1);
4675 if (TREE_SIDE_EFFECTS (*p))
4676 *p = save_expr (*p);
4677 t = build_pointer_type (TREE_TYPE (fn));
4678 if (DECL_CONTEXT (fn) && TYPE_JAVA_INTERFACE (DECL_CONTEXT (fn)))
4679 fn = build_java_interface_fn_ref (fn, *p);
4681 fn = build_vfn_ref (build_indirect_ref (*p, 0), DECL_VINDEX (fn));
4684 else if (DECL_INLINE (fn))
4685 fn = inline_conversion (fn);
4687 fn = build_addr_func (fn);
4689 /* Recognize certain built-in functions so we can make tree-codes
4690 other than CALL_EXPR. We do this when it enables fold-const.c
4691 to do something useful. */
4693 if (TREE_CODE (fn) == ADDR_EXPR
4694 && TREE_CODE (TREE_OPERAND (fn, 0)) == FUNCTION_DECL
4695 && DECL_BUILT_IN (TREE_OPERAND (fn, 0)))
4698 exp = expand_tree_builtin (TREE_OPERAND (fn, 0), args, converted_args);
4703 /* Some built-in function calls will be evaluated at
4704 compile-time in fold (). */
4705 fn = fold (build_call (fn, converted_args));
4706 if (VOID_TYPE_P (TREE_TYPE (fn)))
4708 fn = require_complete_type (fn);
4709 if (fn == error_mark_node)
4710 return error_mark_node;
4711 if (IS_AGGR_TYPE (TREE_TYPE (fn)))
4712 fn = build_cplus_new (TREE_TYPE (fn), fn);
4713 return convert_from_reference (fn);
4716 static GTY(()) tree java_iface_lookup_fn;
4718 /* Make an expression which yields the address of the Java interface
4719 method FN. This is achieved by generating a call to libjava's
4720 _Jv_LookupInterfaceMethodIdx(). */
4723 build_java_interface_fn_ref (tree fn, tree instance)
4725 tree lookup_args, lookup_fn, method, idx;
4726 tree klass_ref, iface, iface_ref;
4729 if (!java_iface_lookup_fn)
4731 tree endlink = build_void_list_node ();
4732 tree t = tree_cons (NULL_TREE, ptr_type_node,
4733 tree_cons (NULL_TREE, ptr_type_node,
4734 tree_cons (NULL_TREE, java_int_type_node,
4736 java_iface_lookup_fn
4737 = builtin_function ("_Jv_LookupInterfaceMethodIdx",
4738 build_function_type (ptr_type_node, t),
4739 0, NOT_BUILT_IN, NULL, NULL_TREE);
4742 /* Look up the pointer to the runtime java.lang.Class object for `instance'.
4743 This is the first entry in the vtable. */
4744 klass_ref = build_vtbl_ref (build_indirect_ref (instance, 0),
4747 /* Get the java.lang.Class pointer for the interface being called. */
4748 iface = DECL_CONTEXT (fn);
4749 iface_ref = lookup_field (iface, get_identifier ("class$"), 0, false);
4750 if (!iface_ref || TREE_CODE (iface_ref) != VAR_DECL
4751 || DECL_CONTEXT (iface_ref) != iface)
4753 error ("could not find class$ field in java interface type `%T'",
4755 return error_mark_node;
4757 iface_ref = build1 (ADDR_EXPR, build_pointer_type (iface), iface_ref);
4759 /* Determine the itable index of FN. */
4761 for (method = TYPE_METHODS (iface); method; method = TREE_CHAIN (method))
4763 if (!DECL_VIRTUAL_P (method))
4769 idx = build_int_2 (i, 0);
4771 lookup_args = tree_cons (NULL_TREE, klass_ref,
4772 tree_cons (NULL_TREE, iface_ref,
4773 build_tree_list (NULL_TREE, idx)));
4774 lookup_fn = build1 (ADDR_EXPR,
4775 build_pointer_type (TREE_TYPE (java_iface_lookup_fn)),
4776 java_iface_lookup_fn);
4777 return build (CALL_EXPR, ptr_type_node, lookup_fn, lookup_args, NULL_TREE);
4780 /* Returns the value to use for the in-charge parameter when making a
4781 call to a function with the indicated NAME. */
4784 in_charge_arg_for_name (tree name)
4786 if (name == base_ctor_identifier
4787 || name == base_dtor_identifier)
4788 return integer_zero_node;
4789 else if (name == complete_ctor_identifier)
4790 return integer_one_node;
4791 else if (name == complete_dtor_identifier)
4792 return integer_two_node;
4793 else if (name == deleting_dtor_identifier)
4794 return integer_three_node;
4796 /* This function should only be called with one of the names listed
4802 /* Build a call to a constructor, destructor, or an assignment
4803 operator for INSTANCE, an expression with class type. NAME
4804 indicates the special member function to call; ARGS are the
4805 arguments. BINFO indicates the base of INSTANCE that is to be
4806 passed as the `this' parameter to the member function called.
4808 FLAGS are the LOOKUP_* flags to use when processing the call.
4810 If NAME indicates a complete object constructor, INSTANCE may be
4811 NULL_TREE. In this case, the caller will call build_cplus_new to
4812 store the newly constructed object into a VAR_DECL. */
4815 build_special_member_call (tree instance, tree name, tree args,
4816 tree binfo, int flags)
4819 /* The type of the subobject to be constructed or destroyed. */
4822 my_friendly_assert (name == complete_ctor_identifier
4823 || name == base_ctor_identifier
4824 || name == complete_dtor_identifier
4825 || name == base_dtor_identifier
4826 || name == deleting_dtor_identifier
4827 || name == ansi_assopname (NOP_EXPR),
4829 my_friendly_assert (binfo != NULL_TREE, 20020712);
4831 class_type = BINFO_TYPE (binfo);
4833 /* Handle the special case where INSTANCE is NULL_TREE. */
4834 if (name == complete_ctor_identifier && !instance)
4836 instance = build_int_2 (0, 0);
4837 TREE_TYPE (instance) = build_pointer_type (class_type);
4838 instance = build1 (INDIRECT_REF, class_type, instance);
4840 else if (name == complete_dtor_identifier
4841 || name == base_dtor_identifier
4842 || name == deleting_dtor_identifier)
4843 my_friendly_assert (args == NULL_TREE, 20020712);
4845 my_friendly_assert (instance != NULL_TREE, 20020712);
4847 /* Resolve the name. */
4848 if (!complete_type_or_else (BINFO_TYPE (binfo), NULL_TREE))
4849 return error_mark_node;
4851 fns = lookup_fnfields (binfo, name, 1);
4853 /* When making a call to a constructor or destructor for a subobject
4854 that uses virtual base classes, pass down a pointer to a VTT for
4856 if ((name == base_ctor_identifier
4857 || name == base_dtor_identifier)
4858 && TYPE_USES_VIRTUAL_BASECLASSES (class_type))
4863 /* If the current function is a complete object constructor
4864 or destructor, then we fetch the VTT directly.
4865 Otherwise, we look it up using the VTT we were given. */
4866 vtt = TREE_CHAIN (CLASSTYPE_VTABLES (current_class_type));
4867 vtt = decay_conversion (vtt);
4868 vtt = build (COND_EXPR, TREE_TYPE (vtt),
4869 build (EQ_EXPR, boolean_type_node,
4870 current_in_charge_parm, integer_zero_node),
4873 my_friendly_assert (BINFO_SUBVTT_INDEX (binfo), 20010110);
4874 sub_vtt = build (PLUS_EXPR, TREE_TYPE (vtt), vtt,
4875 BINFO_SUBVTT_INDEX (binfo));
4877 args = tree_cons (NULL_TREE, sub_vtt, args);
4880 return build_new_method_call (instance, fns, args, binfo, flags);
4883 /* Return the NAME, as a C string. The NAME indicates a function that
4884 is a member of TYPE. *FREE_P is set to true if the caller must
4885 free the memory returned.
4887 Rather than go through all of this, we should simply set the names
4888 of constructors and destructors appropriately, and dispense with
4889 ctor_identifier, dtor_identifier, etc. */
4892 name_as_c_string (tree name, tree type, bool *free_p)
4896 /* Assume that we will not allocate memory. */
4898 /* Constructors and destructors are special. */
4899 if (IDENTIFIER_CTOR_OR_DTOR_P (name))
4902 = (char *) IDENTIFIER_POINTER (constructor_name (type));
4903 /* For a destructor, add the '~'. */
4904 if (name == complete_dtor_identifier
4905 || name == base_dtor_identifier
4906 || name == deleting_dtor_identifier)
4908 pretty_name = concat ("~", pretty_name, NULL);
4909 /* Remember that we need to free the memory allocated. */
4914 pretty_name = (char *) IDENTIFIER_POINTER (name);
4919 /* Build a call to "INSTANCE.FN (ARGS)". */
4922 build_new_method_call (tree instance, tree fns, tree args,
4923 tree conversion_path, int flags)
4925 struct z_candidate *candidates = 0, *cand;
4926 tree explicit_targs = NULL_TREE;
4927 tree basetype = NULL_TREE;
4930 tree mem_args = NULL_TREE, instance_ptr;
4936 int template_only = 0;
4939 my_friendly_assert (instance != NULL_TREE, 20020729);
4941 if (error_operand_p (instance)
4942 || error_operand_p (fns)
4943 || args == error_mark_node)
4944 return error_mark_node;
4946 /* Process the argument list. */
4948 args = resolve_args (args);
4949 if (args == error_mark_node)
4950 return error_mark_node;
4952 if (TREE_CODE (instance) == OFFSET_REF)
4953 instance = resolve_offset_ref (instance);
4954 if (TREE_CODE (TREE_TYPE (instance)) == REFERENCE_TYPE)
4955 instance = convert_from_reference (instance);
4956 basetype = TYPE_MAIN_VARIANT (TREE_TYPE (instance));
4957 instance_ptr = build_this (instance);
4959 if (!BASELINK_P (fns))
4961 call = build_field_call (instance_ptr, fns, args);
4964 error ("call to non-function `%D'", fns);
4965 return error_mark_node;
4968 if (!conversion_path)
4969 conversion_path = BASELINK_BINFO (fns);
4970 access_binfo = BASELINK_ACCESS_BINFO (fns);
4971 optype = BASELINK_OPTYPE (fns);
4972 fns = BASELINK_FUNCTIONS (fns);
4974 if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
4976 explicit_targs = TREE_OPERAND (fns, 1);
4977 fns = TREE_OPERAND (fns, 0);
4981 my_friendly_assert (TREE_CODE (fns) == FUNCTION_DECL
4982 || TREE_CODE (fns) == TEMPLATE_DECL
4983 || TREE_CODE (fns) == OVERLOAD,
4986 /* XXX this should be handled before we get here. */
4987 if (! IS_AGGR_TYPE (basetype))
4989 if ((flags & LOOKUP_COMPLAIN) && basetype != error_mark_node)
4990 error ("request for member `%D' in `%E', which is of non-aggregate type `%T'",
4991 fns, instance, basetype);
4993 return error_mark_node;
4996 fn = get_first_fn (fns);
4997 name = DECL_NAME (fn);
4999 if (IDENTIFIER_CTOR_OR_DTOR_P (name))
5001 /* Callers should explicitly indicate whether they want to construct
5002 the complete object or just the part without virtual bases. */
5003 my_friendly_assert (name != ctor_identifier, 20000408);
5004 /* Similarly for destructors. */
5005 my_friendly_assert (name != dtor_identifier, 20000408);
5008 /* It's OK to call destructors on cv-qualified objects. Therefore,
5009 convert the INSTANCE_PTR to the unqualified type, if necessary. */
5010 if (DECL_DESTRUCTOR_P (fn))
5012 tree type = build_pointer_type (basetype);
5013 if (!same_type_p (type, TREE_TYPE (instance_ptr)))
5014 instance_ptr = build_nop (type, instance_ptr);
5017 class_type = (conversion_path ? BINFO_TYPE (conversion_path) : NULL_TREE);
5018 mem_args = tree_cons (NULL_TREE, instance_ptr, args);
5020 for (fn = fns; fn; fn = OVL_NEXT (fn))
5022 tree t = OVL_CURRENT (fn);
5025 /* We can end up here for copy-init of same or base class. */
5026 if ((flags & LOOKUP_ONLYCONVERTING)
5027 && DECL_NONCONVERTING_P (t))
5030 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (t))
5031 this_arglist = mem_args;
5033 this_arglist = args;
5035 if (TREE_CODE (t) == TEMPLATE_DECL)
5036 /* A member template. */
5037 add_template_candidate (&candidates, t,
5040 this_arglist, optype,
5045 else if (! template_only)
5046 add_function_candidate (&candidates, t,
5054 candidates = splice_viable (candidates, pedantic, &any_viable_p);
5057 /* XXX will LOOKUP_SPECULATIVELY be needed when this is done? */
5058 if (flags & LOOKUP_SPECULATIVELY)
5060 if (!COMPLETE_TYPE_P (basetype))
5061 cxx_incomplete_type_error (instance_ptr, basetype);
5067 pretty_name = name_as_c_string (name, basetype, &free_p);
5068 error ("no matching function for call to `%T::%s(%A)%#V'",
5069 basetype, pretty_name, user_args,
5070 TREE_TYPE (TREE_TYPE (instance_ptr)));
5074 print_z_candidates (candidates);
5075 return error_mark_node;
5078 cand = tourney (candidates);
5084 pretty_name = name_as_c_string (name, basetype, &free_p);
5085 error ("call of overloaded `%s(%A)' is ambiguous", pretty_name,
5087 print_z_candidates (candidates);
5090 return error_mark_node;
5093 if (DECL_PURE_VIRTUAL_P (cand->fn)
5094 && instance == current_class_ref
5095 && (DECL_CONSTRUCTOR_P (current_function_decl)
5096 || DECL_DESTRUCTOR_P (current_function_decl))
5097 && ! (flags & LOOKUP_NONVIRTUAL)
5098 && value_member (cand->fn, CLASSTYPE_PURE_VIRTUALS (basetype)))
5099 error ((DECL_CONSTRUCTOR_P (current_function_decl) ?
5100 "abstract virtual `%#D' called from constructor"
5101 : "abstract virtual `%#D' called from destructor"),
5103 if (TREE_CODE (TREE_TYPE (cand->fn)) == METHOD_TYPE
5104 && is_dummy_object (instance_ptr))
5106 error ("cannot call member function `%D' without object", cand->fn);
5107 return error_mark_node;
5110 if (DECL_VINDEX (cand->fn) && ! (flags & LOOKUP_NONVIRTUAL)
5111 && resolves_to_fixed_type_p (instance, 0))
5112 flags |= LOOKUP_NONVIRTUAL;
5114 if (TREE_CODE (TREE_TYPE (cand->fn)) == METHOD_TYPE)
5115 call = build_over_call (cand, flags);
5118 call = build_over_call (cand, flags);
5119 /* In an expression of the form `a->f()' where `f' turns out to
5120 be a static member function, `a' is none-the-less evaluated. */
5121 if (!is_dummy_object (instance_ptr) && TREE_SIDE_EFFECTS (instance))
5122 call = build (COMPOUND_EXPR, TREE_TYPE (call), instance, call);
5128 /* Returns true iff standard conversion sequence ICS1 is a proper
5129 subsequence of ICS2. */
5132 is_subseq (tree ics1, tree ics2)
5134 /* We can assume that a conversion of the same code
5135 between the same types indicates a subsequence since we only get
5136 here if the types we are converting from are the same. */
5138 while (TREE_CODE (ics1) == RVALUE_CONV
5139 || TREE_CODE (ics1) == LVALUE_CONV)
5140 ics1 = TREE_OPERAND (ics1, 0);
5144 while (TREE_CODE (ics2) == RVALUE_CONV
5145 || TREE_CODE (ics2) == LVALUE_CONV)
5146 ics2 = TREE_OPERAND (ics2, 0);
5148 if (TREE_CODE (ics2) == USER_CONV
5149 || TREE_CODE (ics2) == AMBIG_CONV
5150 || TREE_CODE (ics2) == IDENTITY_CONV)
5151 /* At this point, ICS1 cannot be a proper subsequence of
5152 ICS2. We can get a USER_CONV when we are comparing the
5153 second standard conversion sequence of two user conversion
5157 ics2 = TREE_OPERAND (ics2, 0);
5159 if (TREE_CODE (ics2) == TREE_CODE (ics1)
5160 && same_type_p (TREE_TYPE (ics2), TREE_TYPE (ics1))
5161 && same_type_p (TREE_TYPE (TREE_OPERAND (ics2, 0)),
5162 TREE_TYPE (TREE_OPERAND (ics1, 0))))
5167 /* Returns nonzero iff DERIVED is derived from BASE. The inputs may
5168 be any _TYPE nodes. */
5171 is_properly_derived_from (tree derived, tree base)
5173 if (!IS_AGGR_TYPE_CODE (TREE_CODE (derived))
5174 || !IS_AGGR_TYPE_CODE (TREE_CODE (base)))
5177 /* We only allow proper derivation here. The DERIVED_FROM_P macro
5178 considers every class derived from itself. */
5179 return (!same_type_ignoring_top_level_qualifiers_p (derived, base)
5180 && DERIVED_FROM_P (base, derived));
5183 /* We build the ICS for an implicit object parameter as a pointer
5184 conversion sequence. However, such a sequence should be compared
5185 as if it were a reference conversion sequence. If ICS is the
5186 implicit conversion sequence for an implicit object parameter,
5187 modify it accordingly. */
5190 maybe_handle_implicit_object (tree *ics)
5192 if (ICS_THIS_FLAG (*ics))
5194 /* [over.match.funcs]
5196 For non-static member functions, the type of the
5197 implicit object parameter is "reference to cv X"
5198 where X is the class of which the function is a
5199 member and cv is the cv-qualification on the member
5200 function declaration. */
5202 tree reference_type;
5204 /* The `this' parameter is a pointer to a class type. Make the
5205 implict conversion talk about a reference to that same class
5207 reference_type = TREE_TYPE (TREE_TYPE (*ics));
5208 reference_type = build_reference_type (reference_type);
5210 if (TREE_CODE (t) == QUAL_CONV)
5211 t = TREE_OPERAND (t, 0);
5212 if (TREE_CODE (t) == PTR_CONV)
5213 t = TREE_OPERAND (t, 0);
5214 t = build1 (IDENTITY_CONV, TREE_TYPE (TREE_TYPE (t)), NULL_TREE);
5215 t = direct_reference_binding (reference_type, t);
5220 /* If *ICS is a REF_BIND set *ICS to the remainder of the conversion,
5221 and return the type to which the reference refers. Otherwise,
5222 leave *ICS unchanged and return NULL_TREE. */
5225 maybe_handle_ref_bind (tree *ics)
5227 if (TREE_CODE (*ics) == REF_BIND)
5229 tree old_ics = *ics;
5230 tree type = TREE_TYPE (TREE_TYPE (old_ics));
5231 *ics = TREE_OPERAND (old_ics, 0);
5232 ICS_USER_FLAG (*ics) = ICS_USER_FLAG (old_ics);
5233 ICS_BAD_FLAG (*ics) = ICS_BAD_FLAG (old_ics);
5240 /* Compare two implicit conversion sequences according to the rules set out in
5241 [over.ics.rank]. Return values:
5243 1: ics1 is better than ics2
5244 -1: ics2 is better than ics1
5245 0: ics1 and ics2 are indistinguishable */
5248 compare_ics (tree ics1, tree ics2)
5254 tree deref_from_type1 = NULL_TREE;
5255 tree deref_from_type2 = NULL_TREE;
5256 tree deref_to_type1 = NULL_TREE;
5257 tree deref_to_type2 = NULL_TREE;
5260 /* REF_BINDING is nonzero if the result of the conversion sequence
5261 is a reference type. In that case TARGET_TYPE is the
5262 type referred to by the reference. */
5266 /* Handle implicit object parameters. */
5267 maybe_handle_implicit_object (&ics1);
5268 maybe_handle_implicit_object (&ics2);
5270 /* Handle reference parameters. */
5271 target_type1 = maybe_handle_ref_bind (&ics1);
5272 target_type2 = maybe_handle_ref_bind (&ics2);
5276 When comparing the basic forms of implicit conversion sequences (as
5277 defined in _over.best.ics_)
5279 --a standard conversion sequence (_over.ics.scs_) is a better
5280 conversion sequence than a user-defined conversion sequence
5281 or an ellipsis conversion sequence, and
5283 --a user-defined conversion sequence (_over.ics.user_) is a
5284 better conversion sequence than an ellipsis conversion sequence
5285 (_over.ics.ellipsis_). */
5286 rank1 = ICS_RANK (ics1);
5287 rank2 = ICS_RANK (ics2);
5291 else if (rank1 < rank2)
5294 if (rank1 == BAD_RANK)
5296 /* XXX Isn't this an extension? */
5297 /* Both ICS are bad. We try to make a decision based on what
5298 would have happenned if they'd been good. */
5299 if (ICS_USER_FLAG (ics1) > ICS_USER_FLAG (ics2)
5300 || ICS_STD_RANK (ics1) > ICS_STD_RANK (ics2))
5302 else if (ICS_USER_FLAG (ics1) < ICS_USER_FLAG (ics2)
5303 || ICS_STD_RANK (ics1) < ICS_STD_RANK (ics2))
5306 /* We couldn't make up our minds; try to figure it out below. */
5309 if (ICS_ELLIPSIS_FLAG (ics1))
5310 /* Both conversions are ellipsis conversions. */
5313 /* User-defined conversion sequence U1 is a better conversion sequence
5314 than another user-defined conversion sequence U2 if they contain the
5315 same user-defined conversion operator or constructor and if the sec-
5316 ond standard conversion sequence of U1 is better than the second
5317 standard conversion sequence of U2. */
5319 if (ICS_USER_FLAG (ics1))
5323 for (t1 = ics1; TREE_CODE (t1) != USER_CONV; t1 = TREE_OPERAND (t1, 0))
5324 if (TREE_CODE (t1) == AMBIG_CONV)
5326 for (t2 = ics2; TREE_CODE (t2) != USER_CONV; t2 = TREE_OPERAND (t2, 0))
5327 if (TREE_CODE (t2) == AMBIG_CONV)
5330 if (USER_CONV_FN (t1) != USER_CONV_FN (t2))
5333 /* We can just fall through here, after setting up
5334 FROM_TYPE1 and FROM_TYPE2. */
5335 from_type1 = TREE_TYPE (t1);
5336 from_type2 = TREE_TYPE (t2);
5340 /* We're dealing with two standard conversion sequences.
5344 Standard conversion sequence S1 is a better conversion
5345 sequence than standard conversion sequence S2 if
5347 --S1 is a proper subsequence of S2 (comparing the conversion
5348 sequences in the canonical form defined by _over.ics.scs_,
5349 excluding any Lvalue Transformation; the identity
5350 conversion sequence is considered to be a subsequence of
5351 any non-identity conversion sequence */
5354 while (TREE_CODE (from_type1) != IDENTITY_CONV)
5355 from_type1 = TREE_OPERAND (from_type1, 0);
5356 from_type1 = TREE_TYPE (from_type1);
5359 while (TREE_CODE (from_type2) != IDENTITY_CONV)
5360 from_type2 = TREE_OPERAND (from_type2, 0);
5361 from_type2 = TREE_TYPE (from_type2);
5364 if (same_type_p (from_type1, from_type2))
5366 if (is_subseq (ics1, ics2))
5368 if (is_subseq (ics2, ics1))
5371 /* Otherwise, one sequence cannot be a subsequence of the other; they
5372 don't start with the same type. This can happen when comparing the
5373 second standard conversion sequence in two user-defined conversion
5380 --the rank of S1 is better than the rank of S2 (by the rules
5383 Standard conversion sequences are ordered by their ranks: an Exact
5384 Match is a better conversion than a Promotion, which is a better
5385 conversion than a Conversion.
5387 Two conversion sequences with the same rank are indistinguishable
5388 unless one of the following rules applies:
5390 --A conversion that is not a conversion of a pointer, or pointer
5391 to member, to bool is better than another conversion that is such
5394 The ICS_STD_RANK automatically handles the pointer-to-bool rule,
5395 so that we do not have to check it explicitly. */
5396 if (ICS_STD_RANK (ics1) < ICS_STD_RANK (ics2))
5398 else if (ICS_STD_RANK (ics2) < ICS_STD_RANK (ics1))
5401 to_type1 = TREE_TYPE (ics1);
5402 to_type2 = TREE_TYPE (ics2);
5404 if (TYPE_PTR_P (from_type1)
5405 && TYPE_PTR_P (from_type2)
5406 && TYPE_PTR_P (to_type1)
5407 && TYPE_PTR_P (to_type2))
5409 deref_from_type1 = TREE_TYPE (from_type1);
5410 deref_from_type2 = TREE_TYPE (from_type2);
5411 deref_to_type1 = TREE_TYPE (to_type1);
5412 deref_to_type2 = TREE_TYPE (to_type2);
5414 /* The rules for pointers to members A::* are just like the rules
5415 for pointers A*, except opposite: if B is derived from A then
5416 A::* converts to B::*, not vice versa. For that reason, we
5417 switch the from_ and to_ variables here. */
5418 else if (TYPE_PTRMEM_P (from_type1)
5419 && TYPE_PTRMEM_P (from_type2)
5420 && TYPE_PTRMEM_P (to_type1)
5421 && TYPE_PTRMEM_P (to_type2))
5423 deref_to_type1 = TYPE_OFFSET_BASETYPE (TREE_TYPE (from_type1));
5424 deref_to_type2 = TYPE_OFFSET_BASETYPE (TREE_TYPE (from_type2));
5425 deref_from_type1 = TYPE_OFFSET_BASETYPE (TREE_TYPE (to_type1));
5426 deref_from_type2 = TYPE_OFFSET_BASETYPE (TREE_TYPE (to_type2));
5428 else if (TYPE_PTRMEMFUNC_P (from_type1)
5429 && TYPE_PTRMEMFUNC_P (from_type2)
5430 && TYPE_PTRMEMFUNC_P (to_type1)
5431 && TYPE_PTRMEMFUNC_P (to_type2))
5433 deref_to_type1 = TYPE_PTRMEMFUNC_OBJECT_TYPE (from_type1);
5434 deref_to_type2 = TYPE_PTRMEMFUNC_OBJECT_TYPE (from_type2);
5435 deref_from_type1 = TYPE_PTRMEMFUNC_OBJECT_TYPE (to_type1);
5436 deref_from_type2 = TYPE_PTRMEMFUNC_OBJECT_TYPE (to_type2);
5439 if (deref_from_type1 != NULL_TREE
5440 && IS_AGGR_TYPE_CODE (TREE_CODE (deref_from_type1))
5441 && IS_AGGR_TYPE_CODE (TREE_CODE (deref_from_type2)))
5443 /* This was one of the pointer or pointer-like conversions.
5447 --If class B is derived directly or indirectly from class A,
5448 conversion of B* to A* is better than conversion of B* to
5449 void*, and conversion of A* to void* is better than
5450 conversion of B* to void*. */
5451 if (TREE_CODE (deref_to_type1) == VOID_TYPE
5452 && TREE_CODE (deref_to_type2) == VOID_TYPE)
5454 if (is_properly_derived_from (deref_from_type1,
5457 else if (is_properly_derived_from (deref_from_type2,
5461 else if (TREE_CODE (deref_to_type1) == VOID_TYPE
5462 || TREE_CODE (deref_to_type2) == VOID_TYPE)
5464 if (same_type_p (deref_from_type1, deref_from_type2))
5466 if (TREE_CODE (deref_to_type2) == VOID_TYPE)
5468 if (is_properly_derived_from (deref_from_type1,
5472 /* We know that DEREF_TO_TYPE1 is `void' here. */
5473 else if (is_properly_derived_from (deref_from_type1,
5478 else if (IS_AGGR_TYPE_CODE (TREE_CODE (deref_to_type1))
5479 && IS_AGGR_TYPE_CODE (TREE_CODE (deref_to_type2)))
5483 --If class B is derived directly or indirectly from class A
5484 and class C is derived directly or indirectly from B,
5486 --conversion of C* to B* is better than conversion of C* to
5489 --conversion of B* to A* is better than conversion of C* to
5491 if (same_type_p (deref_from_type1, deref_from_type2))
5493 if (is_properly_derived_from (deref_to_type1,
5496 else if (is_properly_derived_from (deref_to_type2,
5500 else if (same_type_p (deref_to_type1, deref_to_type2))
5502 if (is_properly_derived_from (deref_from_type2,
5505 else if (is_properly_derived_from (deref_from_type1,
5511 else if (CLASS_TYPE_P (non_reference (from_type1))
5512 && same_type_p (from_type1, from_type2))
5514 tree from = non_reference (from_type1);
5518 --binding of an expression of type C to a reference of type
5519 B& is better than binding an expression of type C to a
5520 reference of type A&
5522 --conversion of C to B is better than conversion of C to A, */
5523 if (is_properly_derived_from (from, to_type1)
5524 && is_properly_derived_from (from, to_type2))
5526 if (is_properly_derived_from (to_type1, to_type2))
5528 else if (is_properly_derived_from (to_type2, to_type1))
5532 else if (CLASS_TYPE_P (non_reference (to_type1))
5533 && same_type_p (to_type1, to_type2))
5535 tree to = non_reference (to_type1);
5539 --binding of an expression of type B to a reference of type
5540 A& is better than binding an expression of type C to a
5541 reference of type A&,
5543 --onversion of B to A is better than conversion of C to A */
5544 if (is_properly_derived_from (from_type1, to)
5545 && is_properly_derived_from (from_type2, to))
5547 if (is_properly_derived_from (from_type2, from_type1))
5549 else if (is_properly_derived_from (from_type1, from_type2))
5556 --S1 and S2 differ only in their qualification conversion and yield
5557 similar types T1 and T2 (_conv.qual_), respectively, and the cv-
5558 qualification signature of type T1 is a proper subset of the cv-
5559 qualification signature of type T2 */
5560 if (TREE_CODE (ics1) == QUAL_CONV
5561 && TREE_CODE (ics2) == QUAL_CONV
5562 && same_type_p (from_type1, from_type2))
5563 return comp_cv_qual_signature (to_type1, to_type2);
5567 --S1 and S2 are reference bindings (_dcl.init.ref_), and the
5568 types to which the references refer are the same type except for
5569 top-level cv-qualifiers, and the type to which the reference
5570 initialized by S2 refers is more cv-qualified than the type to
5571 which the reference initialized by S1 refers */
5573 if (target_type1 && target_type2
5574 && same_type_ignoring_top_level_qualifiers_p (to_type1, to_type2))
5575 return comp_cv_qualification (target_type2, target_type1);
5577 /* Neither conversion sequence is better than the other. */
5581 /* The source type for this standard conversion sequence. */
5584 source_type (tree t)
5586 for (;; t = TREE_OPERAND (t, 0))
5588 if (TREE_CODE (t) == USER_CONV
5589 || TREE_CODE (t) == AMBIG_CONV
5590 || TREE_CODE (t) == IDENTITY_CONV)
5591 return TREE_TYPE (t);
5596 /* Note a warning about preferring WINNER to LOSER. We do this by storing
5597 a pointer to LOSER and re-running joust to produce the warning if WINNER
5598 is actually used. */
5601 add_warning (struct z_candidate *winner, struct z_candidate *loser)
5603 winner->warnings = tree_cons (NULL_TREE,
5604 build_zc_wrapper (loser),
5608 /* Compare two candidates for overloading as described in
5609 [over.match.best]. Return values:
5611 1: cand1 is better than cand2
5612 -1: cand2 is better than cand1
5613 0: cand1 and cand2 are indistinguishable */
5616 joust (struct z_candidate *cand1, struct z_candidate *cand2, bool warn)
5619 int i, off1 = 0, off2 = 0, len;
5621 /* Candidates that involve bad conversions are always worse than those
5623 if (cand1->viable > cand2->viable)
5625 if (cand1->viable < cand2->viable)
5628 /* If we have two pseudo-candidates for conversions to the same type,
5629 or two candidates for the same function, arbitrarily pick one. */
5630 if (cand1->fn == cand2->fn
5631 && (TYPE_P (cand1->fn) || DECL_P (cand1->fn)))
5634 /* a viable function F1
5635 is defined to be a better function than another viable function F2 if
5636 for all arguments i, ICSi(F1) is not a worse conversion sequence than
5637 ICSi(F2), and then */
5639 /* for some argument j, ICSj(F1) is a better conversion sequence than
5642 /* For comparing static and non-static member functions, we ignore
5643 the implicit object parameter of the non-static function. The
5644 standard says to pretend that the static function has an object
5645 parm, but that won't work with operator overloading. */
5646 len = TREE_VEC_LENGTH (cand1->convs);
5647 if (len != TREE_VEC_LENGTH (cand2->convs))
5649 if (DECL_STATIC_FUNCTION_P (cand1->fn)
5650 && ! DECL_STATIC_FUNCTION_P (cand2->fn))
5652 else if (! DECL_STATIC_FUNCTION_P (cand1->fn)
5653 && DECL_STATIC_FUNCTION_P (cand2->fn))
5662 for (i = 0; i < len; ++i)
5664 tree t1 = TREE_VEC_ELT (cand1->convs, i+off1);
5665 tree t2 = TREE_VEC_ELT (cand2->convs, i+off2);
5666 int comp = compare_ics (t1, t2);
5671 && ICS_RANK (t1) + ICS_RANK (t2) == STD_RANK + PROMO_RANK
5672 && TREE_CODE (t1) == STD_CONV
5673 && TREE_CODE (t2) == STD_CONV
5674 && TREE_CODE (TREE_TYPE (t1)) == INTEGER_TYPE
5675 && TREE_CODE (TREE_TYPE (t2)) == INTEGER_TYPE
5676 && (TYPE_PRECISION (TREE_TYPE (t1))
5677 == TYPE_PRECISION (TREE_TYPE (t2)))
5678 && (TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (t1, 0)))
5679 || (TREE_CODE (TREE_TYPE (TREE_OPERAND (t1, 0)))
5682 tree type = TREE_TYPE (TREE_OPERAND (t1, 0));
5684 struct z_candidate *w, *l;
5686 type1 = TREE_TYPE (t1), type2 = TREE_TYPE (t2),
5687 w = cand1, l = cand2;
5689 type1 = TREE_TYPE (t2), type2 = TREE_TYPE (t1),
5690 w = cand2, l = cand1;
5694 warning ("passing `%T' chooses `%T' over `%T'",
5695 type, type1, type2);
5696 warning (" in call to `%D'", w->fn);
5702 if (winner && comp != winner)
5711 /* warn about confusing overload resolution for user-defined conversions,
5712 either between a constructor and a conversion op, or between two
5714 if (winner && cand1->second_conv
5715 && ((DECL_CONSTRUCTOR_P (cand1->fn)
5716 != DECL_CONSTRUCTOR_P (cand2->fn))
5717 /* Don't warn if the two conv ops convert to the same type... */
5718 || (! DECL_CONSTRUCTOR_P (cand1->fn)
5719 && ! same_type_p (TREE_TYPE (TREE_TYPE (cand1->fn)),
5720 TREE_TYPE (TREE_TYPE (cand2->fn))))))
5722 int comp = compare_ics (cand1->second_conv, cand2->second_conv);
5725 struct z_candidate *w, *l;
5728 w = cand1, l = cand2;
5730 w = cand2, l = cand1;
5731 if (DECL_CONTEXT (cand1->fn) == DECL_CONTEXT (cand2->fn)
5732 && ! DECL_CONSTRUCTOR_P (cand1->fn)
5733 && ! DECL_CONSTRUCTOR_P (cand2->fn)
5734 && (convn = standard_conversion
5735 (TREE_TYPE (TREE_TYPE (l->fn)),
5736 TREE_TYPE (TREE_TYPE (w->fn)), NULL_TREE))
5737 && TREE_CODE (convn) == QUAL_CONV)
5738 /* Don't complain about `operator char *()' beating
5739 `operator const char *() const'. */;
5742 tree source = source_type (TREE_VEC_ELT (w->convs, 0));
5743 if (! DECL_CONSTRUCTOR_P (w->fn))
5744 source = TREE_TYPE (source);
5745 warning ("choosing `%D' over `%D'", w->fn, l->fn);
5746 warning (" for conversion from `%T' to `%T'",
5747 source, TREE_TYPE (w->second_conv));
5748 warning (" because conversion sequence for the argument is better");
5759 F1 is a non-template function and F2 is a template function
5762 if (! cand1->template && cand2->template)
5764 else if (cand1->template && ! cand2->template)
5768 F1 and F2 are template functions and the function template for F1 is
5769 more specialized than the template for F2 according to the partial
5772 if (cand1->template && cand2->template)
5774 winner = more_specialized
5775 (TI_TEMPLATE (cand1->template), TI_TEMPLATE (cand2->template),
5777 /* Tell the deduction code how many real function arguments
5778 we saw, not counting the implicit 'this' argument. But,
5779 add_function_candidate() suppresses the "this" argument
5782 [temp.func.order]: The presence of unused ellipsis and default
5783 arguments has no effect on the partial ordering of function
5785 TREE_VEC_LENGTH (cand1->convs)
5786 - (DECL_NONSTATIC_MEMBER_FUNCTION_P (cand1->fn)
5787 - DECL_CONSTRUCTOR_P (cand1->fn)));
5793 the context is an initialization by user-defined conversion (see
5794 _dcl.init_ and _over.match.user_) and the standard conversion
5795 sequence from the return type of F1 to the destination type (i.e.,
5796 the type of the entity being initialized) is a better conversion
5797 sequence than the standard conversion sequence from the return type
5798 of F2 to the destination type. */
5800 if (cand1->second_conv)
5802 winner = compare_ics (cand1->second_conv, cand2->second_conv);
5807 /* Check whether we can discard a builtin candidate, either because we
5808 have two identical ones or matching builtin and non-builtin candidates.
5810 (Pedantically in the latter case the builtin which matched the user
5811 function should not be added to the overload set, but we spot it here.
5814 ... the builtin candidates include ...
5815 - do not have the same parameter type list as any non-template
5816 non-member candidate. */
5818 if (TREE_CODE (cand1->fn) == IDENTIFIER_NODE
5819 || TREE_CODE (cand2->fn) == IDENTIFIER_NODE)
5821 for (i = 0; i < len; ++i)
5822 if (!same_type_p (TREE_TYPE (TREE_VEC_ELT (cand1->convs, i)),
5823 TREE_TYPE (TREE_VEC_ELT (cand2->convs, i))))
5825 if (i == TREE_VEC_LENGTH (cand1->convs))
5827 if (cand1->fn == cand2->fn)
5828 /* Two built-in candidates; arbitrarily pick one. */
5830 else if (TREE_CODE (cand1->fn) == IDENTIFIER_NODE)
5831 /* cand1 is built-in; prefer cand2. */
5834 /* cand2 is built-in; prefer cand1. */
5839 /* If the two functions are the same (this can happen with declarations
5840 in multiple scopes and arg-dependent lookup), arbitrarily choose one. */
5841 if (DECL_P (cand1->fn) && DECL_P (cand2->fn)
5842 && equal_functions (cand1->fn, cand2->fn))
5847 /* Extension: If the worst conversion for one candidate is worse than the
5848 worst conversion for the other, take the first. */
5851 int rank1 = IDENTITY_RANK, rank2 = IDENTITY_RANK;
5852 struct z_candidate *w = 0, *l = 0;
5854 for (i = 0; i < len; ++i)
5856 if (ICS_RANK (TREE_VEC_ELT (cand1->convs, i+off1)) > rank1)
5857 rank1 = ICS_RANK (TREE_VEC_ELT (cand1->convs, i+off1));
5858 if (ICS_RANK (TREE_VEC_ELT (cand2->convs, i+off2)) > rank2)
5859 rank2 = ICS_RANK (TREE_VEC_ELT (cand2->convs, i+off2));
5862 winner = 1, w = cand1, l = cand2;
5864 winner = -1, w = cand2, l = cand1;
5869 pedwarn ("choosing `%D' over `%D'", w->fn, l->fn);
5871 " because worst conversion for the former is better than worst conversion for the latter");
5879 my_friendly_assert (!winner, 20010121);
5883 /* Given a list of candidates for overloading, find the best one, if any.
5884 This algorithm has a worst case of O(2n) (winner is last), and a best
5885 case of O(n/2) (totally ambiguous); much better than a sorting
5888 static struct z_candidate *
5889 tourney (struct z_candidate *candidates)
5891 struct z_candidate *champ = candidates, *challenger;
5893 int champ_compared_to_predecessor = 0;
5895 /* Walk through the list once, comparing each current champ to the next
5896 candidate, knocking out a candidate or two with each comparison. */
5898 for (challenger = champ->next; challenger; )
5900 fate = joust (champ, challenger, 0);
5902 challenger = challenger->next;
5907 champ = challenger->next;
5910 champ_compared_to_predecessor = 0;
5915 champ_compared_to_predecessor = 1;
5918 challenger = champ->next;
5922 /* Make sure the champ is better than all the candidates it hasn't yet
5923 been compared to. */
5925 for (challenger = candidates;
5927 && !(champ_compared_to_predecessor && challenger->next == champ);
5928 challenger = challenger->next)
5930 fate = joust (champ, challenger, 0);
5938 /* Returns nonzero if things of type FROM can be converted to TO. */
5941 can_convert (tree to, tree from)
5943 return can_convert_arg (to, from, NULL_TREE);
5946 /* Returns nonzero if ARG (of type FROM) can be converted to TO. */
5949 can_convert_arg (tree to, tree from, tree arg)
5951 tree t = implicit_conversion (to, from, arg, LOOKUP_NORMAL);
5952 return (t && ! ICS_BAD_FLAG (t));
5955 /* Like can_convert_arg, but allows dubious conversions as well. */
5958 can_convert_arg_bad (tree to, tree from, tree arg)
5960 return implicit_conversion (to, from, arg, LOOKUP_NORMAL) != 0;
5963 /* Convert EXPR to TYPE. Return the converted expression.
5965 Note that we allow bad conversions here because by the time we get to
5966 this point we are committed to doing the conversion. If we end up
5967 doing a bad conversion, convert_like will complain. */
5970 perform_implicit_conversion (tree type, tree expr)
5974 if (error_operand_p (expr))
5975 return error_mark_node;
5976 conv = implicit_conversion (type, TREE_TYPE (expr), expr,
5980 error ("could not convert `%E' to `%T'", expr, type);
5981 return error_mark_node;
5984 return convert_like (conv, expr);
5987 /* DECL is a VAR_DECL whose type is a REFERENCE_TYPE. The reference
5988 is being bound to a temporary. Create and return a new VAR_DECL
5989 with the indicated TYPE; this variable will store the value to
5990 which the reference is bound. */
5993 make_temporary_var_for_ref_to_temp (tree decl, tree type)
5997 /* Create the variable. */
5998 var = build_decl (VAR_DECL, NULL_TREE, type);
5999 DECL_ARTIFICIAL (var) = 1;
6000 TREE_USED (var) = 1;
6002 /* Register the variable. */
6003 if (TREE_STATIC (decl))
6005 /* Namespace-scope or local static; give it a mangled name. */
6008 TREE_STATIC (var) = 1;
6009 name = mangle_ref_init_variable (decl);
6010 DECL_NAME (var) = name;
6011 SET_DECL_ASSEMBLER_NAME (var, name);
6012 var = pushdecl_top_level (var);
6016 /* Create a new cleanup level if necessary. */
6017 maybe_push_cleanup_level (type);
6018 /* Don't push unnamed temps. Do set DECL_CONTEXT, though. */
6019 DECL_CONTEXT (var) = current_function_decl;
6025 /* Convert EXPR to the indicated reference TYPE, in a way suitable for
6026 initializing a variable of that TYPE. If DECL is non-NULL, it is
6027 the VAR_DECL being initialized with the EXPR. (In that case, the
6028 type of DECL will be TYPE.)
6030 Return the converted expression. */
6033 initialize_reference (tree type, tree expr, tree decl)
6037 if (type == error_mark_node || error_operand_p (expr))
6038 return error_mark_node;
6040 conv = reference_binding (type, TREE_TYPE (expr), expr, LOOKUP_NORMAL);
6041 if (!conv || ICS_BAD_FLAG (conv))
6043 error ("could not convert `%E' to `%T'", expr, type);
6044 return error_mark_node;
6047 /* If DECL is non-NULL, then this special rule applies:
6051 The temporary to which the reference is bound or the temporary
6052 that is the complete object to which the reference is bound
6053 persists for the lifetime of the reference.
6055 The temporaries created during the evaluation of the expression
6056 initializing the reference, except the temporary to which the
6057 reference is bound, are destroyed at the end of the
6058 full-expression in which they are created.
6060 In that case, we store the converted expression into a new
6061 VAR_DECL in a new scope.
6063 However, we want to be careful not to create temporaries when
6064 they are not required. For example, given:
6067 struct D : public B {};
6071 there is no need to copy the return value from "f"; we can just
6072 extend its lifetime. Similarly, given:
6075 struct T { operator S(); };
6079 we can extend the lifetime of the returnn value of the conversion
6081 my_friendly_assert (TREE_CODE (conv) == REF_BIND, 20030302);
6085 tree base_conv_type;
6087 /* Skip over the REF_BIND. */
6088 conv = TREE_OPERAND (conv, 0);
6089 /* If the next conversion is a BASE_CONV, skip that too -- but
6090 remember that the conversion was required. */
6091 if (TREE_CODE (conv) == BASE_CONV && !NEED_TEMPORARY_P (conv))
6093 base_conv_type = TREE_TYPE (conv);
6094 conv = TREE_OPERAND (conv, 0);
6097 base_conv_type = NULL_TREE;
6098 /* Perform the remainder of the conversion. */
6099 expr = convert_like (conv, expr);
6100 if (!real_non_cast_lvalue_p (expr))
6102 /* Create the temporary variable. */
6103 var = make_temporary_var_for_ref_to_temp (decl, TREE_TYPE (expr));
6104 DECL_INITIAL (var) = expr;
6105 cp_finish_decl (var, expr, NULL_TREE,
6106 LOOKUP_ONLYCONVERTING|DIRECT_BIND);
6107 /* Use its address to initialize the reference variable. */
6108 expr = build_address (var);
6111 /* Take the address of EXPR. */
6112 expr = build_unary_op (ADDR_EXPR, expr, 0);
6113 /* If a BASE_CONV was required, perform it now. */
6115 expr = (perform_implicit_conversion
6116 (build_pointer_type (base_conv_type), expr));
6117 return build_nop (type, expr);
6120 /* Perform the conversion. */
6121 return convert_like (conv, expr);
6124 #include "gt-cp-call.h"