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"
41 static tree build_field_call (tree, tree, tree);
42 static struct z_candidate * tourney (struct z_candidate *);
43 static int equal_functions (tree, tree);
44 static int joust (struct z_candidate *, struct z_candidate *, bool);
45 static int compare_ics (tree, tree);
46 static tree build_over_call (struct z_candidate *, int);
47 static tree build_java_interface_fn_ref (tree, tree);
48 #define convert_like(CONV, EXPR) \
49 convert_like_real ((CONV), (EXPR), NULL_TREE, 0, 0, \
50 /*issue_conversion_warnings=*/true)
51 #define convert_like_with_context(CONV, EXPR, FN, ARGNO) \
52 convert_like_real ((CONV), (EXPR), (FN), (ARGNO), 0, \
53 /*issue_conversion_warnings=*/true)
54 static tree convert_like_real (tree, tree, tree, int, int, bool);
55 static void op_error (enum tree_code, enum tree_code, tree, tree,
57 static tree build_object_call (tree, tree);
58 static tree resolve_args (tree);
59 static struct z_candidate *build_user_type_conversion_1 (tree, tree, int);
60 static void print_z_candidate (const char *, struct z_candidate *);
61 static void print_z_candidates (struct z_candidate *);
62 static tree build_this (tree);
63 static struct z_candidate *splice_viable (struct z_candidate *, bool, bool *);
64 static bool any_strictly_viable (struct z_candidate *);
65 static struct z_candidate *add_template_candidate
66 (struct z_candidate **, tree, tree, tree, tree, tree,
67 tree, tree, int, unification_kind_t);
68 static struct z_candidate *add_template_candidate_real
69 (struct z_candidate **, tree, tree, tree, tree, tree,
70 tree, tree, int, tree, unification_kind_t);
71 static struct z_candidate *add_template_conv_candidate
72 (struct z_candidate **, tree, tree, tree, tree, tree, tree);
73 static void add_builtin_candidates
74 (struct z_candidate **, enum tree_code, enum tree_code,
76 static void add_builtin_candidate
77 (struct z_candidate **, enum tree_code, enum tree_code,
78 tree, tree, tree, tree *, tree *, int);
79 static bool is_complete (tree);
80 static void build_builtin_candidate
81 (struct z_candidate **, tree, tree, tree, tree *, tree *,
83 static struct z_candidate *add_conv_candidate
84 (struct z_candidate **, tree, tree, tree, tree, tree);
85 static struct z_candidate *add_function_candidate
86 (struct z_candidate **, tree, tree, tree, tree, tree, int);
87 static tree implicit_conversion (tree, tree, tree, int);
88 static tree standard_conversion (tree, tree, tree);
89 static tree reference_binding (tree, tree, tree, int);
90 static tree non_reference (tree);
91 static tree build_conv (enum tree_code, tree, tree);
92 static bool is_subseq (tree, tree);
93 static tree maybe_handle_ref_bind (tree *);
94 static void maybe_handle_implicit_object (tree *);
95 static struct z_candidate *add_candidate
96 (struct z_candidate **, tree, tree, tree, tree, tree, int);
97 static tree source_type (tree);
98 static void add_warning (struct z_candidate *, struct z_candidate *);
99 static bool reference_related_p (tree, tree);
100 static bool reference_compatible_p (tree, tree);
101 static tree convert_class_to_reference (tree, tree, tree);
102 static tree direct_reference_binding (tree, tree);
103 static bool promoted_arithmetic_type_p (tree);
104 static tree conditional_conversion (tree, tree);
105 static char *name_as_c_string (tree, tree, bool *);
106 static tree call_builtin_trap (void);
107 static tree prep_operand (tree);
108 static void add_candidates (tree, tree, tree, bool, tree, tree,
109 int, struct z_candidate **);
110 static tree merge_conversion_sequences (tree, tree);
113 build_vfield_ref (tree datum, tree type)
115 if (datum == error_mark_node)
116 return error_mark_node;
118 if (TREE_CODE (TREE_TYPE (datum)) == REFERENCE_TYPE)
119 datum = convert_from_reference (datum);
121 if (TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (type)
122 && !same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (datum), type))
123 datum = convert_to_base (datum, type, /*check_access=*/false);
125 return build (COMPONENT_REF, TREE_TYPE (TYPE_VFIELD (type)),
126 datum, TYPE_VFIELD (type));
129 /* Build a call to a member of an object. I.e., one that overloads
130 operator ()(), or is a pointer-to-function or pointer-to-method. */
133 build_field_call (tree instance_ptr, tree decl, tree parms)
137 if (decl == error_mark_node || decl == NULL_TREE)
140 if (TREE_CODE (decl) == FIELD_DECL || TREE_CODE (decl) == VAR_DECL)
142 /* If it's a field, try overloading operator (),
143 or calling if the field is a pointer-to-function. */
144 instance = build_indirect_ref (instance_ptr, NULL);
145 instance = build_class_member_access_expr (instance, decl,
146 /*access_path=*/NULL_TREE,
147 /*preserve_reference=*/false);
149 if (instance == error_mark_node)
150 return error_mark_node;
152 if (IS_AGGR_TYPE (TREE_TYPE (instance)))
153 return build_new_op (CALL_EXPR, LOOKUP_NORMAL,
154 instance, parms, NULL_TREE);
155 else if (TREE_CODE (TREE_TYPE (instance)) == FUNCTION_TYPE
156 || (TREE_CODE (TREE_TYPE (instance)) == POINTER_TYPE
157 && (TREE_CODE (TREE_TYPE (TREE_TYPE (instance)))
159 return build_function_call (instance, parms);
165 /* Returns nonzero iff the destructor name specified in NAME
166 (a BIT_NOT_EXPR) matches BASETYPE. The operand of NAME can take many
170 check_dtor_name (tree basetype, tree name)
172 name = TREE_OPERAND (name, 0);
174 /* Just accept something we've already complained about. */
175 if (name == error_mark_node)
178 if (TREE_CODE (name) == TYPE_DECL)
179 name = TREE_TYPE (name);
180 else if (TYPE_P (name))
182 else if (TREE_CODE (name) == IDENTIFIER_NODE)
184 if ((IS_AGGR_TYPE (basetype) && name == constructor_name (basetype))
185 || (TREE_CODE (basetype) == ENUMERAL_TYPE
186 && name == TYPE_IDENTIFIER (basetype)))
189 name = get_type_value (name);
193 template <class T> struct S { ~S(); };
197 NAME will be a class template. */
198 else if (DECL_CLASS_TEMPLATE_P (name))
203 if (name && TYPE_MAIN_VARIANT (basetype) == TYPE_MAIN_VARIANT (name))
208 /* Build a method call of the form `EXP->SCOPES::NAME (PARMS)'.
209 This is how virtual function calls are avoided. */
212 build_scoped_method_call (tree exp, tree basetype, tree name, tree parms)
214 /* Because this syntactic form does not allow
215 a pointer to a base class to be `stolen',
216 we need not protect the derived->base conversion
219 @@ But we do have to check access privileges later. */
221 tree type = TREE_TYPE (exp);
223 if (type == error_mark_node
224 || basetype == error_mark_node)
225 return error_mark_node;
227 if (processing_template_decl)
229 name = build_min_nt (SCOPE_REF, basetype, name);
230 return build_min_nt (METHOD_CALL_EXPR, name, exp, parms, NULL_TREE);
233 if (TREE_CODE (type) == REFERENCE_TYPE)
234 type = TREE_TYPE (type);
236 if (TREE_CODE (basetype) == TREE_VEC)
239 basetype = BINFO_TYPE (binfo);
244 /* Check the destructor call syntax. */
245 if (TREE_CODE (name) == BIT_NOT_EXPR)
247 /* We can get here if someone writes their destructor call like
248 `obj.NS::~T()'; this isn't really a scoped method call, so hand
250 if (TREE_CODE (basetype) == NAMESPACE_DECL)
251 return build_method_call (exp, name, parms, NULL_TREE, LOOKUP_NORMAL);
253 if (! check_dtor_name (basetype, name))
254 error ("qualified type `%T' does not match destructor name `~%T'",
255 basetype, TREE_OPERAND (name, 0));
257 /* Destructors can be "called" for simple types; see 5.2.4 and 12.4 Note
258 that explicit ~int is caught in the parser; this deals with typedefs
259 and template parms. */
260 if (! IS_AGGR_TYPE (basetype))
262 if (TYPE_MAIN_VARIANT (type) != TYPE_MAIN_VARIANT (basetype))
263 error ("type of `%E' does not match destructor type `%T' (type was `%T')",
264 exp, basetype, type);
266 return cp_convert (void_type_node, exp);
270 if (TREE_CODE (basetype) == NAMESPACE_DECL)
272 error ("`%D' is a namespace", basetype);
273 return error_mark_node;
275 if (! is_aggr_type (basetype, 1))
276 return error_mark_node;
278 if (! IS_AGGR_TYPE (type))
280 error ("base object `%E' of scoped method call is of non-aggregate type `%T'",
282 return error_mark_node;
285 decl = build_scoped_ref (exp, basetype, &binfo);
289 /* Call to a destructor. */
290 if (TREE_CODE (name) == BIT_NOT_EXPR)
292 if (! TYPE_HAS_DESTRUCTOR (TREE_TYPE (decl)))
293 return cp_convert (void_type_node, exp);
295 return build_delete (TREE_TYPE (decl), decl,
296 sfk_complete_destructor,
297 LOOKUP_NORMAL|LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR,
301 /* Call to a method. */
302 return build_method_call (decl, name, parms, binfo,
303 LOOKUP_NORMAL|LOOKUP_NONVIRTUAL);
305 return error_mark_node;
308 /* We want the address of a function or method. We avoid creating a
309 pointer-to-member function. */
312 build_addr_func (tree function)
314 tree type = TREE_TYPE (function);
316 /* We have to do these by hand to avoid real pointer to member
318 if (TREE_CODE (type) == METHOD_TYPE)
322 type = build_pointer_type (type);
324 if (!cxx_mark_addressable (function))
325 return error_mark_node;
327 addr = build1 (ADDR_EXPR, type, function);
329 /* Address of a static or external variable or function counts
331 if (staticp (function))
332 TREE_CONSTANT (addr) = 1;
337 function = default_conversion (function);
342 /* Build a CALL_EXPR, we can handle FUNCTION_TYPEs, METHOD_TYPEs, or
343 POINTER_TYPE to those. Note, pointer to member function types
344 (TYPE_PTRMEMFUNC_P) must be handled by our callers. */
347 build_call (tree function, tree parms)
349 int is_constructor = 0;
356 function = build_addr_func (function);
358 if (TYPE_PTRMEMFUNC_P (TREE_TYPE (function)))
360 sorry ("unable to call pointer to member function here");
361 return error_mark_node;
364 fntype = TREE_TYPE (TREE_TYPE (function));
365 result_type = TREE_TYPE (fntype);
367 if (TREE_CODE (function) == ADDR_EXPR
368 && TREE_CODE (TREE_OPERAND (function, 0)) == FUNCTION_DECL)
369 decl = TREE_OPERAND (function, 0);
373 /* We check both the decl and the type; a function may be known not to
374 throw without being declared throw(). */
375 nothrow = ((decl && TREE_NOTHROW (decl))
376 || TYPE_NOTHROW_P (TREE_TYPE (TREE_TYPE (function))));
378 if (decl && TREE_THIS_VOLATILE (decl) && cfun)
379 current_function_returns_abnormally = 1;
381 if (decl && TREE_DEPRECATED (decl))
382 warn_deprecated_use (decl);
383 require_complete_eh_spec_types (fntype, decl);
385 if (decl && DECL_CONSTRUCTOR_P (decl))
388 if (decl && ! TREE_USED (decl))
390 /* We invoke build_call directly for several library functions.
391 These may have been declared normally if we're building libgcc,
392 so we can't just check DECL_ARTIFICIAL. */
393 if (DECL_ARTIFICIAL (decl)
394 || !strncmp (IDENTIFIER_POINTER (DECL_NAME (decl)), "__", 2))
400 /* Don't pass empty class objects by value. This is useful
401 for tags in STL, which are used to control overload resolution.
402 We don't need to handle other cases of copying empty classes. */
403 if (! decl || ! DECL_BUILT_IN (decl))
404 for (tmp = parms; tmp; tmp = TREE_CHAIN (tmp))
405 if (is_empty_class (TREE_TYPE (TREE_VALUE (tmp)))
406 && ! TREE_ADDRESSABLE (TREE_TYPE (TREE_VALUE (tmp))))
408 tree t = build (EMPTY_CLASS_EXPR, TREE_TYPE (TREE_VALUE (tmp)));
409 TREE_VALUE (tmp) = build (COMPOUND_EXPR, TREE_TYPE (t),
410 TREE_VALUE (tmp), t);
413 function = build_nt (CALL_EXPR, function, parms, NULL_TREE);
414 TREE_HAS_CONSTRUCTOR (function) = is_constructor;
415 TREE_TYPE (function) = result_type;
416 TREE_SIDE_EFFECTS (function) = 1;
417 TREE_NOTHROW (function) = nothrow;
422 /* Build something of the form ptr->method (args)
423 or object.method (args). This can also build
424 calls to constructors, and find friends.
426 Member functions always take their class variable
429 INSTANCE is a class instance.
431 NAME is the name of the method desired, usually an IDENTIFIER_NODE.
433 PARMS help to figure out what that NAME really refers to.
435 BASETYPE_PATH, if non-NULL, contains a chain from the type of INSTANCE
436 down to the real instance type to use for access checking. We need this
437 information to get protected accesses correct. This parameter is used
438 by build_member_call.
440 FLAGS is the logical disjunction of zero or more LOOKUP_
441 flags. See cp-tree.h for more info.
443 If this is all OK, calls build_function_call with the resolved
446 This function must also handle being called to perform
447 initialization, promotion/coercion of arguments, and
448 instantiation of default parameters.
450 Note that NAME may refer to an instance variable name. If
451 `operator()()' is defined for the type of that field, then we return
454 #ifdef GATHER_STATISTICS
455 extern int n_build_method_call;
459 build_method_call (tree instance, tree name, tree parms,
460 tree basetype_path, int flags)
464 tree template_args = NULL_TREE;
465 bool has_template_args = false;
467 #ifdef GATHER_STATISTICS
468 n_build_method_call++;
471 if (instance == error_mark_node
472 || name == error_mark_node
473 || parms == error_mark_node
474 || (instance && TREE_TYPE (instance) == error_mark_node))
475 return error_mark_node;
477 if (processing_template_decl)
478 return build_min_nt (METHOD_CALL_EXPR, name, instance, parms, NULL_TREE);
480 if (TREE_CODE (instance) == OFFSET_REF)
481 instance = resolve_offset_ref (instance);
482 if (TREE_CODE (TREE_TYPE (instance)) == REFERENCE_TYPE)
483 instance = convert_from_reference (instance);
484 object_type = TREE_TYPE (instance);
486 if (TREE_CODE (name) == BIT_NOT_EXPR)
491 error ("destructors take no parameters");
493 if (! check_dtor_name (object_type, name))
495 ("destructor name `~%T' does not match type `%T' of expression",
496 TREE_OPERAND (name, 0), object_type);
498 if (! TYPE_HAS_DESTRUCTOR (complete_type (object_type)))
499 return cp_convert (void_type_node, instance);
500 instance = default_conversion (instance);
501 instance_ptr = build_unary_op (ADDR_EXPR, instance, 0);
502 return build_delete (build_pointer_type (object_type),
503 instance_ptr, sfk_complete_destructor,
504 LOOKUP_NORMAL|LOOKUP_DESTRUCTOR, 0);
507 if (!CLASS_TYPE_P (object_type))
509 if ((flags & LOOKUP_COMPLAIN)
510 && TREE_TYPE (instance) != error_mark_node)
511 error ("request for member `%D' in `%E', which is of non-aggregate type `%T'",
512 name, instance, object_type);
513 return error_mark_node;
516 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
518 template_args = TREE_OPERAND (name, 1);
519 has_template_args = true;
520 name = TREE_OPERAND (name, 0);
522 if (TREE_CODE (name) == OVERLOAD)
523 name = DECL_NAME (get_first_fn (name));
524 else if (DECL_P (name))
525 name = DECL_NAME (name);
526 if (has_template_args)
527 fn = lookup_fnfields (object_type, name, /*protect=*/2);
529 fn = lookup_member (object_type, name, /*protect=*/2, /*want_type=*/false);
531 if (fn && TREE_CODE (fn) == TREE_LIST && !BASELINK_P (fn))
533 error ("request for member `%D' is ambiguous", name);
534 print_candidates (fn);
535 return error_mark_node;
538 /* If the name could not be found, issue an error. */
541 unqualified_name_lookup_error (name);
542 return error_mark_node;
545 if (BASELINK_P (fn) && has_template_args)
546 BASELINK_FUNCTIONS (fn)
547 = build_nt (TEMPLATE_ID_EXPR,
548 BASELINK_FUNCTIONS (fn),
550 if (BASELINK_P (fn) && basetype_path)
551 BASELINK_ACCESS_BINFO (fn) = basetype_path;
553 return build_new_method_call (instance, fn, parms,
554 /*conversion_path=*/NULL_TREE, flags);
557 /* New overloading code. */
559 struct z_candidate GTY(()) {
560 /* The FUNCTION_DECL that will be called if this candidate is
561 selected by overload resolution. */
563 /* The arguments to use when calling this function. */
565 /* The implicit conversion sequences for each of the arguments to
568 /* If FN is a user-defined conversion, the standard conversion
569 sequence from the type returned by FN to the desired destination
573 /* If FN is a member function, the binfo indicating the path used to
574 qualify the name of FN at the call site. This path is used to
575 determine whether or not FN is accessible if it is selected by
576 overload resolution. The DECL_CONTEXT of FN will always be a
577 (possibly improper) base of this binfo. */
579 /* If FN is a non-static member function, the binfo indicating the
580 subobject to which the `this' pointer should be converted if FN
581 is selected by overload resolution. The type pointed to the by
582 the `this' pointer must correspond to the most derived class
583 indicated by the CONVERSION_PATH. */
584 tree conversion_path;
587 struct z_candidate *next;
590 #define IDENTITY_RANK 0
596 #define ELLIPSIS_RANK 6
599 #define ICS_RANK(NODE) \
600 (ICS_BAD_FLAG (NODE) ? BAD_RANK \
601 : ICS_ELLIPSIS_FLAG (NODE) ? ELLIPSIS_RANK \
602 : ICS_USER_FLAG (NODE) ? USER_RANK \
603 : ICS_STD_RANK (NODE))
605 #define ICS_STD_RANK(NODE) TREE_COMPLEXITY (NODE)
607 #define ICS_USER_FLAG(NODE) TREE_LANG_FLAG_0 (NODE)
608 #define ICS_ELLIPSIS_FLAG(NODE) TREE_LANG_FLAG_1 (NODE)
609 #define ICS_THIS_FLAG(NODE) TREE_LANG_FLAG_2 (NODE)
610 #define ICS_BAD_FLAG(NODE) TREE_LANG_FLAG_3 (NODE)
612 /* In a REF_BIND or a BASE_CONV, this indicates that a temporary
613 should be created to hold the result of the conversion. */
614 #define NEED_TEMPORARY_P(NODE) TREE_LANG_FLAG_4 (NODE)
616 #define USER_CONV_CAND(NODE) WRAPPER_ZC (TREE_OPERAND (NODE, 1))
617 #define USER_CONV_FN(NODE) (USER_CONV_CAND (NODE)->fn)
620 null_ptr_cst_p (tree t)
624 A null pointer constant is an integral constant expression
625 (_expr.const_) rvalue of integer type that evaluates to zero. */
627 || (CP_INTEGRAL_TYPE_P (TREE_TYPE (t)) && integer_zerop (t)))
633 /* Returns nonzero if PARMLIST consists of only default parms and/or
637 sufficient_parms_p (tree parmlist)
639 for (; parmlist && parmlist != void_list_node;
640 parmlist = TREE_CHAIN (parmlist))
641 if (!TREE_PURPOSE (parmlist))
647 build_conv (enum tree_code code, tree type, tree from)
650 int rank = ICS_STD_RANK (from);
652 /* We can't use buildl1 here because CODE could be USER_CONV, which
653 takes two arguments. In that case, the caller is responsible for
654 filling in the second argument. */
655 t = make_node (code);
656 TREE_TYPE (t) = type;
657 TREE_OPERAND (t, 0) = from;
670 if (rank < EXACT_RANK)
676 ICS_STD_RANK (t) = rank;
677 ICS_USER_FLAG (t) = (code == USER_CONV || ICS_USER_FLAG (from));
678 ICS_BAD_FLAG (t) = ICS_BAD_FLAG (from);
682 /* If T is a REFERENCE_TYPE return the type to which T refers.
683 Otherwise, return T itself. */
686 non_reference (tree t)
688 if (TREE_CODE (t) == REFERENCE_TYPE)
694 strip_top_quals (tree t)
696 if (TREE_CODE (t) == ARRAY_TYPE)
698 return TYPE_MAIN_VARIANT (t);
701 /* Returns the standard conversion path (see [conv]) from type FROM to type
702 TO, if any. For proper handling of null pointer constants, you must
703 also pass the expression EXPR to convert from. */
706 standard_conversion (tree to, tree from, tree expr)
708 enum tree_code fcode, tcode;
710 bool fromref = false;
712 if (TREE_CODE (to) == REFERENCE_TYPE)
714 if (TREE_CODE (from) == REFERENCE_TYPE)
717 from = TREE_TYPE (from);
719 to = strip_top_quals (to);
720 from = strip_top_quals (from);
722 if ((TYPE_PTRFN_P (to) || TYPE_PTRMEMFUNC_P (to))
723 && expr && type_unknown_p (expr))
725 expr = instantiate_type (to, expr, tf_none);
726 if (expr == error_mark_node)
728 from = TREE_TYPE (expr);
731 fcode = TREE_CODE (from);
732 tcode = TREE_CODE (to);
734 conv = build1 (IDENTITY_CONV, from, expr);
736 if (fcode == FUNCTION_TYPE)
738 from = build_pointer_type (from);
739 fcode = TREE_CODE (from);
740 conv = build_conv (LVALUE_CONV, from, conv);
742 else if (fcode == ARRAY_TYPE)
744 from = build_pointer_type (TREE_TYPE (from));
745 fcode = TREE_CODE (from);
746 conv = build_conv (LVALUE_CONV, from, conv);
748 else if (fromref || (expr && lvalue_p (expr)))
749 conv = build_conv (RVALUE_CONV, from, conv);
751 /* Allow conversion between `__complex__' data types */
752 if (tcode == COMPLEX_TYPE && fcode == COMPLEX_TYPE)
754 /* The standard conversion sequence to convert FROM to TO is
755 the standard conversion sequence to perform componentwise
757 tree part_conv = standard_conversion
758 (TREE_TYPE (to), TREE_TYPE (from), NULL_TREE);
762 conv = build_conv (TREE_CODE (part_conv), to, conv);
763 ICS_STD_RANK (conv) = ICS_STD_RANK (part_conv);
771 if (same_type_p (from, to))
774 if ((tcode == POINTER_TYPE || TYPE_PTRMEMFUNC_P (to))
775 && expr && null_ptr_cst_p (expr))
777 conv = build_conv (STD_CONV, to, conv);
779 else if ((tcode == INTEGER_TYPE && fcode == POINTER_TYPE)
780 || (tcode == POINTER_TYPE && fcode == INTEGER_TYPE))
782 /* For backwards brain damage compatibility, allow interconversion of
783 pointers and integers with a pedwarn. */
784 conv = build_conv (STD_CONV, to, conv);
785 ICS_BAD_FLAG (conv) = 1;
787 else if (tcode == ENUMERAL_TYPE && fcode == INTEGER_TYPE
788 && TYPE_PRECISION (to) == TYPE_PRECISION (from))
790 /* For backwards brain damage compatibility, allow interconversion of
791 enums and integers with a pedwarn. */
792 conv = build_conv (STD_CONV, to, conv);
793 ICS_BAD_FLAG (conv) = 1;
795 else if (tcode == POINTER_TYPE && fcode == POINTER_TYPE)
797 enum tree_code ufcode = TREE_CODE (TREE_TYPE (from));
798 enum tree_code utcode = TREE_CODE (TREE_TYPE (to));
800 if (same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (from),
803 else if (utcode == VOID_TYPE && ufcode != OFFSET_TYPE
804 && ufcode != FUNCTION_TYPE)
806 from = build_pointer_type
807 (cp_build_qualified_type (void_type_node,
808 cp_type_quals (TREE_TYPE (from))));
809 conv = build_conv (PTR_CONV, from, conv);
811 else if (ufcode == OFFSET_TYPE && utcode == OFFSET_TYPE)
813 tree fbase = TYPE_OFFSET_BASETYPE (TREE_TYPE (from));
814 tree tbase = TYPE_OFFSET_BASETYPE (TREE_TYPE (to));
816 if (DERIVED_FROM_P (fbase, tbase)
817 && (same_type_ignoring_top_level_qualifiers_p
818 (TREE_TYPE (TREE_TYPE (from)),
819 TREE_TYPE (TREE_TYPE (to)))))
821 from = build_ptrmem_type (tbase, TREE_TYPE (TREE_TYPE (from)));
822 conv = build_conv (PMEM_CONV, from, conv);
825 else if (IS_AGGR_TYPE (TREE_TYPE (from))
826 && IS_AGGR_TYPE (TREE_TYPE (to)))
828 if (DERIVED_FROM_P (TREE_TYPE (to), TREE_TYPE (from)))
831 cp_build_qualified_type (TREE_TYPE (to),
832 cp_type_quals (TREE_TYPE (from)));
833 from = build_pointer_type (from);
834 conv = build_conv (PTR_CONV, from, conv);
838 if (same_type_p (from, to))
840 else if (comp_ptr_ttypes (TREE_TYPE (to), TREE_TYPE (from)))
841 conv = build_conv (QUAL_CONV, to, conv);
842 else if (expr && string_conv_p (to, expr, 0))
843 /* converting from string constant to char *. */
844 conv = build_conv (QUAL_CONV, to, conv);
845 else if (ptr_reasonably_similar (TREE_TYPE (to), TREE_TYPE (from)))
847 conv = build_conv (PTR_CONV, to, conv);
848 ICS_BAD_FLAG (conv) = 1;
855 else if (TYPE_PTRMEMFUNC_P (to) && TYPE_PTRMEMFUNC_P (from))
857 tree fromfn = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (from));
858 tree tofn = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (to));
859 tree fbase = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (fromfn)));
860 tree tbase = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (tofn)));
862 if (!DERIVED_FROM_P (fbase, tbase)
863 || !same_type_p (TREE_TYPE (fromfn), TREE_TYPE (tofn))
864 || !compparms (TREE_CHAIN (TYPE_ARG_TYPES (fromfn)),
865 TREE_CHAIN (TYPE_ARG_TYPES (tofn)))
866 || cp_type_quals (fbase) != cp_type_quals (tbase))
869 from = cp_build_qualified_type (tbase, cp_type_quals (fbase));
870 from = build_cplus_method_type (from, TREE_TYPE (fromfn),
871 TREE_CHAIN (TYPE_ARG_TYPES (fromfn)));
872 from = build_ptrmemfunc_type (build_pointer_type (from));
873 conv = build_conv (PMEM_CONV, from, conv);
875 else if (tcode == BOOLEAN_TYPE)
877 if (! (INTEGRAL_CODE_P (fcode) || fcode == REAL_TYPE
878 || fcode == POINTER_TYPE || TYPE_PTRMEMFUNC_P (from)))
881 conv = build_conv (STD_CONV, to, conv);
882 if (fcode == POINTER_TYPE
883 || (TYPE_PTRMEMFUNC_P (from) && ICS_STD_RANK (conv) < PBOOL_RANK))
884 ICS_STD_RANK (conv) = PBOOL_RANK;
886 /* We don't check for ENUMERAL_TYPE here because there are no standard
887 conversions to enum type. */
888 else if (tcode == INTEGER_TYPE || tcode == BOOLEAN_TYPE
889 || tcode == REAL_TYPE)
891 if (! (INTEGRAL_CODE_P (fcode) || fcode == REAL_TYPE))
893 conv = build_conv (STD_CONV, to, conv);
895 /* Give this a better rank if it's a promotion. */
896 if (to == type_promotes_to (from)
897 && ICS_STD_RANK (TREE_OPERAND (conv, 0)) <= PROMO_RANK)
898 ICS_STD_RANK (conv) = PROMO_RANK;
900 else if (IS_AGGR_TYPE (to) && IS_AGGR_TYPE (from)
901 && is_properly_derived_from (from, to))
903 if (TREE_CODE (conv) == RVALUE_CONV)
904 conv = TREE_OPERAND (conv, 0);
905 conv = build_conv (BASE_CONV, to, conv);
906 /* The derived-to-base conversion indicates the initialization
907 of a parameter with base type from an object of a derived
908 type. A temporary object is created to hold the result of
910 NEED_TEMPORARY_P (conv) = 1;
918 /* Returns nonzero if T1 is reference-related to T2. */
921 reference_related_p (tree t1, tree t2)
923 t1 = TYPE_MAIN_VARIANT (t1);
924 t2 = TYPE_MAIN_VARIANT (t2);
928 Given types "cv1 T1" and "cv2 T2," "cv1 T1" is reference-related
929 to "cv2 T2" if T1 is the same type as T2, or T1 is a base class
931 return (same_type_p (t1, t2)
932 || (CLASS_TYPE_P (t1) && CLASS_TYPE_P (t2)
933 && DERIVED_FROM_P (t1, t2)));
936 /* Returns nonzero if T1 is reference-compatible with T2. */
939 reference_compatible_p (tree t1, tree t2)
943 "cv1 T1" is reference compatible with "cv2 T2" if T1 is
944 reference-related to T2 and cv1 is the same cv-qualification as,
945 or greater cv-qualification than, cv2. */
946 return (reference_related_p (t1, t2)
947 && at_least_as_qualified_p (t1, t2));
950 /* Determine whether or not the EXPR (of class type S) can be
951 converted to T as in [over.match.ref]. */
954 convert_class_to_reference (tree t, tree s, tree expr)
960 struct z_candidate *candidates;
961 struct z_candidate *cand;
964 conversions = lookup_conversions (s);
970 Assuming that "cv1 T" is the underlying type of the reference
971 being initialized, and "cv S" is the type of the initializer
972 expression, with S a class type, the candidate functions are
975 --The conversion functions of S and its base classes are
976 considered. Those that are not hidden within S and yield type
977 "reference to cv2 T2", where "cv1 T" is reference-compatible
978 (_dcl.init.ref_) with "cv2 T2", are candidate functions.
980 The argument list has one argument, which is the initializer
985 /* Conceptually, we should take the address of EXPR and put it in
986 the argument list. Unfortunately, however, that can result in
987 error messages, which we should not issue now because we are just
988 trying to find a conversion operator. Therefore, we use NULL,
989 cast to the appropriate type. */
990 arglist = build_int_2 (0, 0);
991 TREE_TYPE (arglist) = build_pointer_type (s);
992 arglist = build_tree_list (NULL_TREE, arglist);
994 reference_type = build_reference_type (t);
998 tree fns = TREE_VALUE (conversions);
1000 for (; fns; fns = OVL_NEXT (fns))
1002 tree f = OVL_CURRENT (fns);
1003 tree t2 = TREE_TYPE (TREE_TYPE (f));
1007 /* If this is a template function, try to get an exact
1009 if (TREE_CODE (f) == TEMPLATE_DECL)
1011 cand = add_template_candidate (&candidates,
1017 TREE_PURPOSE (conversions),
1023 /* Now, see if the conversion function really returns
1024 an lvalue of the appropriate type. From the
1025 point of view of unification, simply returning an
1026 rvalue of the right type is good enough. */
1028 t2 = TREE_TYPE (TREE_TYPE (f));
1029 if (TREE_CODE (t2) != REFERENCE_TYPE
1030 || !reference_compatible_p (t, TREE_TYPE (t2)))
1032 candidates = candidates->next;
1037 else if (TREE_CODE (t2) == REFERENCE_TYPE
1038 && reference_compatible_p (t, TREE_TYPE (t2)))
1039 cand = add_function_candidate (&candidates, f, s, arglist,
1041 TREE_PURPOSE (conversions),
1045 /* Build a standard conversion sequence indicating the
1046 binding from the reference type returned by the
1047 function to the desired REFERENCE_TYPE. */
1049 = (direct_reference_binding
1051 build1 (IDENTITY_CONV,
1052 TREE_TYPE (TREE_TYPE (TREE_TYPE (cand->fn))),
1055 conversions = TREE_CHAIN (conversions);
1058 candidates = splice_viable (candidates, pedantic, &any_viable_p);
1059 /* If none of the conversion functions worked out, let our caller
1064 cand = tourney (candidates);
1068 /* Now that we know that this is the function we're going to use fix
1069 the dummy first argument. */
1070 cand->args = tree_cons (NULL_TREE,
1072 TREE_CHAIN (cand->args));
1074 /* Build a user-defined conversion sequence representing the
1076 conv = build_conv (USER_CONV,
1077 TREE_TYPE (TREE_TYPE (cand->fn)),
1078 build1 (IDENTITY_CONV, TREE_TYPE (expr), expr));
1079 TREE_OPERAND (conv, 1) = build_zc_wrapper (cand);
1081 /* Merge it with the standard conversion sequence from the
1082 conversion function's return type to the desired type. */
1083 cand->second_conv = merge_conversion_sequences (conv, cand->second_conv);
1085 if (cand->viable == -1)
1086 ICS_BAD_FLAG (conv) = 1;
1088 return cand->second_conv;
1091 /* A reference of the indicated TYPE is being bound directly to the
1092 expression represented by the implicit conversion sequence CONV.
1093 Return a conversion sequence for this binding. */
1096 direct_reference_binding (tree type, tree conv)
1100 my_friendly_assert (TREE_CODE (type) == REFERENCE_TYPE, 20030306);
1101 my_friendly_assert (TREE_CODE (TREE_TYPE (conv)) != REFERENCE_TYPE,
1104 t = TREE_TYPE (type);
1108 When a parameter of reference type binds directly
1109 (_dcl.init.ref_) to an argument expression, the implicit
1110 conversion sequence is the identity conversion, unless the
1111 argument expression has a type that is a derived class of the
1112 parameter type, in which case the implicit conversion sequence is
1113 a derived-to-base Conversion.
1115 If the parameter binds directly to the result of applying a
1116 conversion function to the argument expression, the implicit
1117 conversion sequence is a user-defined conversion sequence
1118 (_over.ics.user_), with the second standard conversion sequence
1119 either an identity conversion or, if the conversion function
1120 returns an entity of a type that is a derived class of the
1121 parameter type, a derived-to-base conversion. */
1122 if (!same_type_ignoring_top_level_qualifiers_p (t, TREE_TYPE (conv)))
1124 /* Represent the derived-to-base conversion. */
1125 conv = build_conv (BASE_CONV, t, conv);
1126 /* We will actually be binding to the base-class subobject in
1127 the derived class, so we mark this conversion appropriately.
1128 That way, convert_like knows not to generate a temporary. */
1129 NEED_TEMPORARY_P (conv) = 0;
1131 return build_conv (REF_BIND, type, conv);
1134 /* Returns the conversion path from type FROM to reference type TO for
1135 purposes of reference binding. For lvalue binding, either pass a
1136 reference type to FROM or an lvalue expression to EXPR. If the
1137 reference will be bound to a temporary, NEED_TEMPORARY_P is set for
1138 the conversion returned. */
1141 reference_binding (tree rto, tree rfrom, tree expr, int flags)
1143 tree conv = NULL_TREE;
1144 tree to = TREE_TYPE (rto);
1148 cp_lvalue_kind lvalue_p = clk_none;
1150 if (TREE_CODE (to) == FUNCTION_TYPE && expr && type_unknown_p (expr))
1152 expr = instantiate_type (to, expr, tf_none);
1153 if (expr == error_mark_node)
1155 from = TREE_TYPE (expr);
1158 if (TREE_CODE (from) == REFERENCE_TYPE)
1160 /* Anything with reference type is an lvalue. */
1161 lvalue_p = clk_ordinary;
1162 from = TREE_TYPE (from);
1165 lvalue_p = real_lvalue_p (expr);
1167 /* Figure out whether or not the types are reference-related and
1168 reference compatible. We have do do this after stripping
1169 references from FROM. */
1170 related_p = reference_related_p (to, from);
1171 compatible_p = reference_compatible_p (to, from);
1173 if (lvalue_p && compatible_p)
1177 If the initializer expression
1179 -- is an lvalue (but not an lvalue for a bit-field), and "cv1 T1"
1180 is reference-compatible with "cv2 T2,"
1182 the reference is bound directly to the initializer exprssion
1184 conv = build1 (IDENTITY_CONV, from, expr);
1185 conv = direct_reference_binding (rto, conv);
1186 if ((lvalue_p & clk_bitfield) != 0
1187 && CP_TYPE_CONST_NON_VOLATILE_P (to))
1188 /* For the purposes of overload resolution, we ignore the fact
1189 this expression is a bitfield. (In particular,
1190 [over.ics.ref] says specifically that a function with a
1191 non-const reference parameter is viable even if the
1192 argument is a bitfield.)
1194 However, when we actually call the function we must create
1195 a temporary to which to bind the reference. If the
1196 reference is volatile, or isn't const, then we cannot make
1197 a temporary, so we just issue an error when the conversion
1199 NEED_TEMPORARY_P (conv) = 1;
1202 else if (CLASS_TYPE_P (from) && !(flags & LOOKUP_NO_CONVERSION))
1206 If the initializer exprsesion
1208 -- has a class type (i.e., T2 is a class type) can be
1209 implicitly converted to an lvalue of type "cv3 T3," where
1210 "cv1 T1" is reference-compatible with "cv3 T3". (this
1211 conversion is selected by enumerating the applicable
1212 conversion functions (_over.match.ref_) and choosing the
1213 best one through overload resolution. (_over.match_).
1215 the reference is bound to the lvalue result of the conversion
1216 in the second case. */
1217 conv = convert_class_to_reference (to, from, expr);
1222 /* From this point on, we conceptually need temporaries, even if we
1223 elide them. Only the cases above are "direct bindings". */
1224 if (flags & LOOKUP_NO_TEMP_BIND)
1229 When a parameter of reference type is not bound directly to an
1230 argument expression, the conversion sequence is the one required
1231 to convert the argument expression to the underlying type of the
1232 reference according to _over.best.ics_. Conceptually, this
1233 conversion sequence corresponds to copy-initializing a temporary
1234 of the underlying type with the argument expression. Any
1235 difference in top-level cv-qualification is subsumed by the
1236 initialization itself and does not constitute a conversion. */
1240 Otherwise, the reference shall be to a non-volatile const type. */
1241 if (!CP_TYPE_CONST_NON_VOLATILE_P (to))
1246 If the initializer expression is an rvalue, with T2 a class type,
1247 and "cv1 T1" is reference-compatible with "cv2 T2", the reference
1248 is bound in one of the following ways:
1250 -- The reference is bound to the object represented by the rvalue
1251 or to a sub-object within that object.
1255 We use the first alternative. The implicit conversion sequence
1256 is supposed to be same as we would obtain by generating a
1257 temporary. Fortunately, if the types are reference compatible,
1258 then this is either an identity conversion or the derived-to-base
1259 conversion, just as for direct binding. */
1260 if (CLASS_TYPE_P (from) && compatible_p)
1262 conv = build1 (IDENTITY_CONV, from, expr);
1263 return direct_reference_binding (rto, conv);
1268 Otherwise, a temporary of type "cv1 T1" is created and
1269 initialized from the initializer expression using the rules for a
1270 non-reference copy initialization. If T1 is reference-related to
1271 T2, cv1 must be the same cv-qualification as, or greater
1272 cv-qualification than, cv2; otherwise, the program is ill-formed. */
1273 if (related_p && !at_least_as_qualified_p (to, from))
1276 conv = implicit_conversion (to, from, expr, flags);
1280 conv = build_conv (REF_BIND, rto, conv);
1281 /* This reference binding, unlike those above, requires the
1282 creation of a temporary. */
1283 NEED_TEMPORARY_P (conv) = 1;
1288 /* Returns the implicit conversion sequence (see [over.ics]) from type FROM
1289 to type TO. The optional expression EXPR may affect the conversion.
1290 FLAGS are the usual overloading flags. Only LOOKUP_NO_CONVERSION is
1294 implicit_conversion (tree to, tree from, tree expr, int flags)
1298 /* Resolve expressions like `A::p' that we thought might become
1299 pointers-to-members. */
1300 if (expr && TREE_CODE (expr) == OFFSET_REF)
1302 expr = resolve_offset_ref (expr);
1303 from = TREE_TYPE (expr);
1306 if (from == error_mark_node || to == error_mark_node
1307 || expr == error_mark_node)
1310 if (TREE_CODE (to) == REFERENCE_TYPE)
1311 conv = reference_binding (to, from, expr, flags);
1313 conv = standard_conversion (to, from, expr);
1318 if (expr != NULL_TREE
1319 && (IS_AGGR_TYPE (from)
1320 || IS_AGGR_TYPE (to))
1321 && (flags & LOOKUP_NO_CONVERSION) == 0)
1323 struct z_candidate *cand;
1325 cand = build_user_type_conversion_1
1326 (to, expr, LOOKUP_ONLYCONVERTING);
1328 conv = cand->second_conv;
1330 /* We used to try to bind a reference to a temporary here, but that
1331 is now handled by the recursive call to this function at the end
1332 of reference_binding. */
1339 /* Add a new entry to the list of candidates. Used by the add_*_candidate
1342 static struct z_candidate *
1343 add_candidate (struct z_candidate **candidates,
1344 tree fn, tree args, tree convs, tree access_path,
1345 tree conversion_path, int viable)
1347 struct z_candidate *cand
1348 = (struct z_candidate *) ggc_alloc_cleared (sizeof (struct z_candidate));
1352 cand->convs = convs;
1353 cand->access_path = access_path;
1354 cand->conversion_path = conversion_path;
1355 cand->viable = viable;
1356 cand->next = *candidates;
1362 /* Create an overload candidate for the function or method FN called with
1363 the argument list ARGLIST and add it to CANDIDATES. FLAGS is passed on
1364 to implicit_conversion.
1366 CTYPE, if non-NULL, is the type we want to pretend this function
1367 comes from for purposes of overload resolution. */
1369 static struct z_candidate *
1370 add_function_candidate (struct z_candidate **candidates,
1371 tree fn, tree ctype, tree arglist,
1372 tree access_path, tree conversion_path,
1375 tree parmlist = TYPE_ARG_TYPES (TREE_TYPE (fn));
1378 tree parmnode, argnode;
1382 /* Built-in functions that haven't been declared don't really
1384 if (DECL_ANTICIPATED (fn))
1387 /* The `this', `in_chrg' and VTT arguments to constructors are not
1388 considered in overload resolution. */
1389 if (DECL_CONSTRUCTOR_P (fn))
1391 parmlist = skip_artificial_parms_for (fn, parmlist);
1392 orig_arglist = arglist;
1393 arglist = skip_artificial_parms_for (fn, arglist);
1396 orig_arglist = arglist;
1398 len = list_length (arglist);
1399 convs = make_tree_vec (len);
1401 /* 13.3.2 - Viable functions [over.match.viable]
1402 First, to be a viable function, a candidate function shall have enough
1403 parameters to agree in number with the arguments in the list.
1405 We need to check this first; otherwise, checking the ICSes might cause
1406 us to produce an ill-formed template instantiation. */
1408 parmnode = parmlist;
1409 for (i = 0; i < len; ++i)
1411 if (parmnode == NULL_TREE || parmnode == void_list_node)
1413 parmnode = TREE_CHAIN (parmnode);
1416 if (i < len && parmnode)
1419 /* Make sure there are default args for the rest of the parms. */
1420 else if (!sufficient_parms_p (parmnode))
1426 /* Second, for F to be a viable function, there shall exist for each
1427 argument an implicit conversion sequence that converts that argument
1428 to the corresponding parameter of F. */
1430 parmnode = parmlist;
1433 for (i = 0; i < len; ++i)
1435 tree arg = TREE_VALUE (argnode);
1436 tree argtype = lvalue_type (arg);
1440 if (parmnode == void_list_node)
1443 is_this = (i == 0 && DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
1444 && ! DECL_CONSTRUCTOR_P (fn));
1448 tree parmtype = TREE_VALUE (parmnode);
1450 /* The type of the implicit object parameter ('this') for
1451 overload resolution is not always the same as for the
1452 function itself; conversion functions are considered to
1453 be members of the class being converted, and functions
1454 introduced by a using-declaration are considered to be
1455 members of the class that uses them.
1457 Since build_over_call ignores the ICS for the `this'
1458 parameter, we can just change the parm type. */
1459 if (ctype && is_this)
1462 = build_qualified_type (ctype,
1463 TYPE_QUALS (TREE_TYPE (parmtype)));
1464 parmtype = build_pointer_type (parmtype);
1467 t = implicit_conversion (parmtype, argtype, arg, flags);
1471 t = build1 (IDENTITY_CONV, argtype, arg);
1472 ICS_ELLIPSIS_FLAG (t) = 1;
1476 ICS_THIS_FLAG (t) = 1;
1478 TREE_VEC_ELT (convs, i) = t;
1485 if (ICS_BAD_FLAG (t))
1489 parmnode = TREE_CHAIN (parmnode);
1490 argnode = TREE_CHAIN (argnode);
1494 return add_candidate (candidates, fn, orig_arglist, convs, access_path,
1495 conversion_path, viable);
1498 /* Create an overload candidate for the conversion function FN which will
1499 be invoked for expression OBJ, producing a pointer-to-function which
1500 will in turn be called with the argument list ARGLIST, and add it to
1501 CANDIDATES. FLAGS is passed on to implicit_conversion.
1503 Actually, we don't really care about FN; we care about the type it
1504 converts to. There may be multiple conversion functions that will
1505 convert to that type, and we rely on build_user_type_conversion_1 to
1506 choose the best one; so when we create our candidate, we record the type
1507 instead of the function. */
1509 static struct z_candidate *
1510 add_conv_candidate (struct z_candidate **candidates, tree fn, tree obj,
1511 tree arglist, tree access_path, tree conversion_path)
1513 tree totype = TREE_TYPE (TREE_TYPE (fn));
1514 int i, len, viable, flags;
1515 tree parmlist, convs, parmnode, argnode;
1517 for (parmlist = totype; TREE_CODE (parmlist) != FUNCTION_TYPE; )
1518 parmlist = TREE_TYPE (parmlist);
1519 parmlist = TYPE_ARG_TYPES (parmlist);
1521 len = list_length (arglist) + 1;
1522 convs = make_tree_vec (len);
1523 parmnode = parmlist;
1526 flags = LOOKUP_NORMAL;
1528 /* Don't bother looking up the same type twice. */
1529 if (*candidates && (*candidates)->fn == totype)
1532 for (i = 0; i < len; ++i)
1534 tree arg = i == 0 ? obj : TREE_VALUE (argnode);
1535 tree argtype = lvalue_type (arg);
1539 t = implicit_conversion (totype, argtype, arg, flags);
1540 else if (parmnode == void_list_node)
1543 t = implicit_conversion (TREE_VALUE (parmnode), argtype, arg, flags);
1546 t = build1 (IDENTITY_CONV, argtype, arg);
1547 ICS_ELLIPSIS_FLAG (t) = 1;
1550 TREE_VEC_ELT (convs, i) = t;
1554 if (ICS_BAD_FLAG (t))
1561 parmnode = TREE_CHAIN (parmnode);
1562 argnode = TREE_CHAIN (argnode);
1568 if (!sufficient_parms_p (parmnode))
1571 return add_candidate (candidates, totype, arglist, convs, access_path,
1572 conversion_path, viable);
1576 build_builtin_candidate (struct z_candidate **candidates, tree fnname,
1577 tree type1, tree type2, tree *args, tree *argtypes,
1587 convs = make_tree_vec (args[2] ? 3 : (args[1] ? 2 : 1));
1589 for (i = 0; i < 2; ++i)
1594 t = implicit_conversion (types[i], argtypes[i], args[i], flags);
1598 /* We need something for printing the candidate. */
1599 t = build1 (IDENTITY_CONV, types[i], NULL_TREE);
1601 else if (ICS_BAD_FLAG (t))
1603 TREE_VEC_ELT (convs, i) = t;
1606 /* For COND_EXPR we rearranged the arguments; undo that now. */
1609 TREE_VEC_ELT (convs, 2) = TREE_VEC_ELT (convs, 1);
1610 TREE_VEC_ELT (convs, 1) = TREE_VEC_ELT (convs, 0);
1611 t = implicit_conversion (boolean_type_node, argtypes[2], args[2], flags);
1613 TREE_VEC_ELT (convs, 0) = t;
1618 add_candidate (candidates, fnname, /*args=*/NULL_TREE, convs,
1619 /*access_path=*/NULL_TREE,
1620 /*conversion_path=*/NULL_TREE,
1625 is_complete (tree t)
1627 return COMPLETE_TYPE_P (complete_type (t));
1630 /* Returns nonzero if TYPE is a promoted arithmetic type. */
1633 promoted_arithmetic_type_p (tree type)
1637 In this section, the term promoted integral type is used to refer
1638 to those integral types which are preserved by integral promotion
1639 (including e.g. int and long but excluding e.g. char).
1640 Similarly, the term promoted arithmetic type refers to promoted
1641 integral types plus floating types. */
1642 return ((INTEGRAL_TYPE_P (type)
1643 && same_type_p (type_promotes_to (type), type))
1644 || TREE_CODE (type) == REAL_TYPE);
1647 /* Create any builtin operator overload candidates for the operator in
1648 question given the converted operand types TYPE1 and TYPE2. The other
1649 args are passed through from add_builtin_candidates to
1650 build_builtin_candidate.
1652 TYPE1 and TYPE2 may not be permissible, and we must filter them.
1653 If CODE is requires candidates operands of the same type of the kind
1654 of which TYPE1 and TYPE2 are, we add both candidates
1655 CODE (TYPE1, TYPE1) and CODE (TYPE2, TYPE2). */
1658 add_builtin_candidate (struct z_candidate **candidates, enum tree_code code,
1659 enum tree_code code2, tree fnname, tree type1,
1660 tree type2, tree *args, tree *argtypes, int flags)
1664 case POSTINCREMENT_EXPR:
1665 case POSTDECREMENT_EXPR:
1666 args[1] = integer_zero_node;
1667 type2 = integer_type_node;
1676 /* 4 For every pair T, VQ), where T is an arithmetic or enumeration type,
1677 and VQ is either volatile or empty, there exist candidate operator
1678 functions of the form
1679 VQ T& operator++(VQ T&);
1680 T operator++(VQ T&, int);
1681 5 For every pair T, VQ), where T is an enumeration type or an arithmetic
1682 type other than bool, and VQ is either volatile or empty, there exist
1683 candidate operator functions of the form
1684 VQ T& operator--(VQ T&);
1685 T operator--(VQ T&, int);
1686 6 For every pair T, VQ), where T is a cv-qualified or cv-unqualified
1687 complete object type, and VQ is either volatile or empty, there exist
1688 candidate operator functions of the form
1689 T*VQ& operator++(T*VQ&);
1690 T*VQ& operator--(T*VQ&);
1691 T* operator++(T*VQ&, int);
1692 T* operator--(T*VQ&, int); */
1694 case POSTDECREMENT_EXPR:
1695 case PREDECREMENT_EXPR:
1696 if (TREE_CODE (type1) == BOOLEAN_TYPE)
1698 case POSTINCREMENT_EXPR:
1699 case PREINCREMENT_EXPR:
1700 if (ARITHMETIC_TYPE_P (type1) || TYPE_PTROB_P (type1))
1702 type1 = build_reference_type (type1);
1707 /* 7 For every cv-qualified or cv-unqualified complete object type T, there
1708 exist candidate operator functions of the form
1712 8 For every function type T, there exist candidate operator functions of
1714 T& operator*(T*); */
1717 if (TREE_CODE (type1) == POINTER_TYPE
1718 && (TYPE_PTROB_P (type1)
1719 || TREE_CODE (TREE_TYPE (type1)) == FUNCTION_TYPE))
1723 /* 9 For every type T, there exist candidate operator functions of the form
1726 10For every promoted arithmetic type T, there exist candidate operator
1727 functions of the form
1731 case CONVERT_EXPR: /* unary + */
1732 if (TREE_CODE (type1) == POINTER_TYPE
1733 && TREE_CODE (TREE_TYPE (type1)) != OFFSET_TYPE)
1736 if (ARITHMETIC_TYPE_P (type1))
1740 /* 11For every promoted integral type T, there exist candidate operator
1741 functions of the form
1745 if (INTEGRAL_TYPE_P (type1))
1749 /* 12For every quintuple C1, C2, T, CV1, CV2), where C2 is a class type, C1
1750 is the same type as C2 or is a derived class of C2, T is a complete
1751 object type or a function type, and CV1 and CV2 are cv-qualifier-seqs,
1752 there exist candidate operator functions of the form
1753 CV12 T& operator->*(CV1 C1*, CV2 T C2::*);
1754 where CV12 is the union of CV1 and CV2. */
1757 if (TREE_CODE (type1) == POINTER_TYPE
1758 && (TYPE_PTRMEMFUNC_P (type2) || TYPE_PTRMEM_P (type2)))
1760 tree c1 = TREE_TYPE (type1);
1761 tree c2 = (TYPE_PTRMEMFUNC_P (type2)
1762 ? TYPE_METHOD_BASETYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type2)))
1763 : TYPE_OFFSET_BASETYPE (TREE_TYPE (type2)));
1765 if (IS_AGGR_TYPE (c1) && DERIVED_FROM_P (c2, c1)
1766 && (TYPE_PTRMEMFUNC_P (type2)
1767 || is_complete (TREE_TYPE (TREE_TYPE (type2)))))
1772 /* 13For every pair of promoted arithmetic types L and R, there exist can-
1773 didate operator functions of the form
1778 bool operator<(L, R);
1779 bool operator>(L, R);
1780 bool operator<=(L, R);
1781 bool operator>=(L, R);
1782 bool operator==(L, R);
1783 bool operator!=(L, R);
1784 where LR is the result of the usual arithmetic conversions between
1787 14For every pair of types T and I, where T is a cv-qualified or cv-
1788 unqualified complete object type and I is a promoted integral type,
1789 there exist candidate operator functions of the form
1790 T* operator+(T*, I);
1791 T& operator[](T*, I);
1792 T* operator-(T*, I);
1793 T* operator+(I, T*);
1794 T& operator[](I, T*);
1796 15For every T, where T is a pointer to complete object type, there exist
1797 candidate operator functions of the form112)
1798 ptrdiff_t operator-(T, T);
1800 16For every pointer or enumeration type T, there exist candidate operator
1801 functions of the form
1802 bool operator<(T, T);
1803 bool operator>(T, T);
1804 bool operator<=(T, T);
1805 bool operator>=(T, T);
1806 bool operator==(T, T);
1807 bool operator!=(T, T);
1809 17For every pointer to member type T, there exist candidate operator
1810 functions of the form
1811 bool operator==(T, T);
1812 bool operator!=(T, T); */
1815 if (TYPE_PTROB_P (type1) && TYPE_PTROB_P (type2))
1817 if (TYPE_PTROB_P (type1) && INTEGRAL_TYPE_P (type2))
1819 type2 = ptrdiff_type_node;
1823 case TRUNC_DIV_EXPR:
1824 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
1830 if ((TYPE_PTRMEMFUNC_P (type1) && TYPE_PTRMEMFUNC_P (type2))
1831 || (TYPE_PTRMEM_P (type1) && TYPE_PTRMEM_P (type2)))
1833 if ((TYPE_PTRMEMFUNC_P (type1) || TYPE_PTRMEM_P (type1))
1834 && null_ptr_cst_p (args[1]))
1839 if ((TYPE_PTRMEMFUNC_P (type2) || TYPE_PTRMEM_P (type2))
1840 && null_ptr_cst_p (args[0]))
1852 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
1854 if (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
1856 if (TREE_CODE (type1) == ENUMERAL_TYPE && TREE_CODE (type2) == ENUMERAL_TYPE)
1858 if (TYPE_PTR_P (type1) && null_ptr_cst_p (args[1]))
1863 if (null_ptr_cst_p (args[0]) && TYPE_PTR_P (type2))
1871 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
1874 if (INTEGRAL_TYPE_P (type1) && TYPE_PTROB_P (type2))
1876 type1 = ptrdiff_type_node;
1879 if (TYPE_PTROB_P (type1) && INTEGRAL_TYPE_P (type2))
1881 type2 = ptrdiff_type_node;
1886 /* 18For every pair of promoted integral types L and R, there exist candi-
1887 date operator functions of the form
1894 where LR is the result of the usual arithmetic conversions between
1897 case TRUNC_MOD_EXPR:
1903 if (INTEGRAL_TYPE_P (type1) && INTEGRAL_TYPE_P (type2))
1907 /* 19For every triple L, VQ, R), where L is an arithmetic or enumeration
1908 type, VQ is either volatile or empty, and R is a promoted arithmetic
1909 type, there exist candidate operator functions of the form
1910 VQ L& operator=(VQ L&, R);
1911 VQ L& operator*=(VQ L&, R);
1912 VQ L& operator/=(VQ L&, R);
1913 VQ L& operator+=(VQ L&, R);
1914 VQ L& operator-=(VQ L&, R);
1916 20For every pair T, VQ), where T is any type and VQ is either volatile
1917 or empty, there exist candidate operator functions of the form
1918 T*VQ& operator=(T*VQ&, T*);
1920 21For every pair T, VQ), where T is a pointer to member type and VQ is
1921 either volatile or empty, there exist candidate operator functions of
1923 VQ T& operator=(VQ T&, T);
1925 22For every triple T, VQ, I), where T is a cv-qualified or cv-
1926 unqualified complete object type, VQ is either volatile or empty, and
1927 I is a promoted integral type, there exist candidate operator func-
1929 T*VQ& operator+=(T*VQ&, I);
1930 T*VQ& operator-=(T*VQ&, I);
1932 23For every triple L, VQ, R), where L is an integral or enumeration
1933 type, VQ is either volatile or empty, and R is a promoted integral
1934 type, there exist candidate operator functions of the form
1936 VQ L& operator%=(VQ L&, R);
1937 VQ L& operator<<=(VQ L&, R);
1938 VQ L& operator>>=(VQ L&, R);
1939 VQ L& operator&=(VQ L&, R);
1940 VQ L& operator^=(VQ L&, R);
1941 VQ L& operator|=(VQ L&, R); */
1948 if (TYPE_PTROB_P (type1) && INTEGRAL_TYPE_P (type2))
1950 type2 = ptrdiff_type_node;
1954 case TRUNC_DIV_EXPR:
1955 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
1959 case TRUNC_MOD_EXPR:
1965 if (INTEGRAL_TYPE_P (type1) && INTEGRAL_TYPE_P (type2))
1970 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
1972 if ((TYPE_PTRMEMFUNC_P (type1) && TYPE_PTRMEMFUNC_P (type2))
1973 || (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
1974 || (TYPE_PTRMEM_P (type1) && TYPE_PTRMEM_P (type2))
1975 || ((TYPE_PTRMEMFUNC_P (type1)
1976 || TREE_CODE (type1) == POINTER_TYPE)
1977 && null_ptr_cst_p (args[1])))
1987 type1 = build_reference_type (type1);
1993 For every pair of promoted arithmetic types L and R, there
1994 exist candidate operator functions of the form
1996 LR operator?(bool, L, R);
1998 where LR is the result of the usual arithmetic conversions
1999 between types L and R.
2001 For every type T, where T is a pointer or pointer-to-member
2002 type, there exist candidate operator functions of the form T
2003 operator?(bool, T, T); */
2005 if (promoted_arithmetic_type_p (type1)
2006 && promoted_arithmetic_type_p (type2))
2010 /* Otherwise, the types should be pointers. */
2011 if (!(TREE_CODE (type1) == POINTER_TYPE
2012 || TYPE_PTRMEM_P (type1)
2013 || TYPE_PTRMEMFUNC_P (type1))
2014 || !(TREE_CODE (type2) == POINTER_TYPE
2015 || TYPE_PTRMEM_P (type2)
2016 || TYPE_PTRMEMFUNC_P (type2)))
2019 /* We don't check that the two types are the same; the logic
2020 below will actually create two candidates; one in which both
2021 parameter types are TYPE1, and one in which both parameter
2029 /* If we're dealing with two pointer types or two enumeral types,
2030 we need candidates for both of them. */
2031 if (type2 && !same_type_p (type1, type2)
2032 && TREE_CODE (type1) == TREE_CODE (type2)
2033 && (TREE_CODE (type1) == REFERENCE_TYPE
2034 || (TREE_CODE (type1) == POINTER_TYPE
2035 && TYPE_PTRMEM_P (type1) == TYPE_PTRMEM_P (type2))
2036 || TYPE_PTRMEMFUNC_P (type1)
2037 || IS_AGGR_TYPE (type1)
2038 || TREE_CODE (type1) == ENUMERAL_TYPE))
2040 build_builtin_candidate
2041 (candidates, fnname, type1, type1, args, argtypes, flags);
2042 build_builtin_candidate
2043 (candidates, fnname, type2, type2, args, argtypes, flags);
2047 build_builtin_candidate
2048 (candidates, fnname, type1, type2, args, argtypes, flags);
2052 type_decays_to (tree type)
2054 if (TREE_CODE (type) == ARRAY_TYPE)
2055 return build_pointer_type (TREE_TYPE (type));
2056 if (TREE_CODE (type) == FUNCTION_TYPE)
2057 return build_pointer_type (type);
2061 /* There are three conditions of builtin candidates:
2063 1) bool-taking candidates. These are the same regardless of the input.
2064 2) pointer-pair taking candidates. These are generated for each type
2065 one of the input types converts to.
2066 3) arithmetic candidates. According to the standard, we should generate
2067 all of these, but I'm trying not to...
2069 Here we generate a superset of the possible candidates for this particular
2070 case. That is a subset of the full set the standard defines, plus some
2071 other cases which the standard disallows. add_builtin_candidate will
2072 filter out the invalid set. */
2075 add_builtin_candidates (struct z_candidate **candidates, enum tree_code code,
2076 enum tree_code code2, tree fnname, tree *args,
2081 tree type, argtypes[3];
2082 /* TYPES[i] is the set of possible builtin-operator parameter types
2083 we will consider for the Ith argument. These are represented as
2084 a TREE_LIST; the TREE_VALUE of each node is the potential
2088 for (i = 0; i < 3; ++i)
2091 argtypes[i] = lvalue_type (args[i]);
2093 argtypes[i] = NULL_TREE;
2098 /* 4 For every pair T, VQ), where T is an arithmetic or enumeration type,
2099 and VQ is either volatile or empty, there exist candidate operator
2100 functions of the form
2101 VQ T& operator++(VQ T&); */
2103 case POSTINCREMENT_EXPR:
2104 case PREINCREMENT_EXPR:
2105 case POSTDECREMENT_EXPR:
2106 case PREDECREMENT_EXPR:
2111 /* 24There also exist candidate operator functions of the form
2112 bool operator!(bool);
2113 bool operator&&(bool, bool);
2114 bool operator||(bool, bool); */
2116 case TRUTH_NOT_EXPR:
2117 build_builtin_candidate
2118 (candidates, fnname, boolean_type_node,
2119 NULL_TREE, args, argtypes, flags);
2122 case TRUTH_ORIF_EXPR:
2123 case TRUTH_ANDIF_EXPR:
2124 build_builtin_candidate
2125 (candidates, fnname, boolean_type_node,
2126 boolean_type_node, args, argtypes, flags);
2148 types[0] = types[1] = NULL_TREE;
2150 for (i = 0; i < 2; ++i)
2154 else if (IS_AGGR_TYPE (argtypes[i]))
2158 if (i == 0 && code == MODIFY_EXPR && code2 == NOP_EXPR)
2161 convs = lookup_conversions (argtypes[i]);
2163 if (code == COND_EXPR)
2165 if (real_lvalue_p (args[i]))
2166 types[i] = tree_cons
2167 (NULL_TREE, build_reference_type (argtypes[i]), types[i]);
2169 types[i] = tree_cons
2170 (NULL_TREE, TYPE_MAIN_VARIANT (argtypes[i]), types[i]);
2176 for (; convs; convs = TREE_CHAIN (convs))
2178 type = TREE_TYPE (TREE_TYPE (OVL_CURRENT (TREE_VALUE (convs))));
2181 && (TREE_CODE (type) != REFERENCE_TYPE
2182 || CP_TYPE_CONST_P (TREE_TYPE (type))))
2185 if (code == COND_EXPR && TREE_CODE (type) == REFERENCE_TYPE)
2186 types[i] = tree_cons (NULL_TREE, type, types[i]);
2188 type = non_reference (type);
2189 if (i != 0 || ! ref1)
2191 type = TYPE_MAIN_VARIANT (type_decays_to (type));
2192 if (enum_p && TREE_CODE (type) == ENUMERAL_TYPE)
2193 types[i] = tree_cons (NULL_TREE, type, types[i]);
2194 if (INTEGRAL_TYPE_P (type))
2195 type = type_promotes_to (type);
2198 if (! value_member (type, types[i]))
2199 types[i] = tree_cons (NULL_TREE, type, types[i]);
2204 if (code == COND_EXPR && real_lvalue_p (args[i]))
2205 types[i] = tree_cons
2206 (NULL_TREE, build_reference_type (argtypes[i]), types[i]);
2207 type = non_reference (argtypes[i]);
2208 if (i != 0 || ! ref1)
2210 type = TYPE_MAIN_VARIANT (type_decays_to (type));
2211 if (enum_p && TREE_CODE (type) == ENUMERAL_TYPE)
2212 types[i] = tree_cons (NULL_TREE, type, types[i]);
2213 if (INTEGRAL_TYPE_P (type))
2214 type = type_promotes_to (type);
2216 types[i] = tree_cons (NULL_TREE, type, types[i]);
2220 /* Run through the possible parameter types of both arguments,
2221 creating candidates with those parameter types. */
2222 for (; types[0]; types[0] = TREE_CHAIN (types[0]))
2225 for (type = types[1]; type; type = TREE_CHAIN (type))
2226 add_builtin_candidate
2227 (candidates, code, code2, fnname, TREE_VALUE (types[0]),
2228 TREE_VALUE (type), args, argtypes, flags);
2230 add_builtin_candidate
2231 (candidates, code, code2, fnname, TREE_VALUE (types[0]),
2232 NULL_TREE, args, argtypes, flags);
2239 /* If TMPL can be successfully instantiated as indicated by
2240 EXPLICIT_TARGS and ARGLIST, adds the instantiation to CANDIDATES.
2242 TMPL is the template. EXPLICIT_TARGS are any explicit template
2243 arguments. ARGLIST is the arguments provided at the call-site.
2244 The RETURN_TYPE is the desired type for conversion operators. If
2245 OBJ is NULL_TREE, FLAGS and CTYPE are as for add_function_candidate.
2246 If an OBJ is supplied, FLAGS and CTYPE are ignored, and OBJ is as for
2247 add_conv_candidate. */
2249 static struct z_candidate*
2250 add_template_candidate_real (struct z_candidate **candidates, tree tmpl,
2251 tree ctype, tree explicit_targs, tree arglist,
2252 tree return_type, tree access_path,
2253 tree conversion_path, int flags, tree obj,
2254 unification_kind_t strict)
2256 int ntparms = DECL_NTPARMS (tmpl);
2257 tree targs = make_tree_vec (ntparms);
2258 tree args_without_in_chrg = arglist;
2259 struct z_candidate *cand;
2263 /* We don't do deduction on the in-charge parameter, the VTT
2264 parameter or 'this'. */
2265 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (tmpl))
2266 args_without_in_chrg = TREE_CHAIN (args_without_in_chrg);
2268 if ((DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (tmpl)
2269 || DECL_BASE_CONSTRUCTOR_P (tmpl))
2270 && TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (tmpl)))
2271 args_without_in_chrg = TREE_CHAIN (args_without_in_chrg);
2273 i = fn_type_unification (tmpl, explicit_targs, targs,
2274 args_without_in_chrg,
2275 return_type, strict, -1);
2280 fn = instantiate_template (tmpl, targs, tf_none);
2281 if (fn == error_mark_node)
2286 A member function template is never instantiated to perform the
2287 copy of a class object to an object of its class type.
2289 It's a little unclear what this means; the standard explicitly
2290 does allow a template to be used to copy a class. For example,
2295 template <class T> A(const T&);
2298 void g () { A a (f ()); }
2300 the member template will be used to make the copy. The section
2301 quoted above appears in the paragraph that forbids constructors
2302 whose only parameter is (a possibly cv-qualified variant of) the
2303 class type, and a logical interpretation is that the intent was
2304 to forbid the instantiation of member templates which would then
2306 if (DECL_CONSTRUCTOR_P (fn) && list_length (arglist) == 2)
2308 tree arg_types = FUNCTION_FIRST_USER_PARMTYPE (fn);
2309 if (arg_types && same_type_p (TYPE_MAIN_VARIANT (TREE_VALUE (arg_types)),
2314 if (obj != NULL_TREE)
2315 /* Aha, this is a conversion function. */
2316 cand = add_conv_candidate (candidates, fn, obj, access_path,
2317 conversion_path, arglist);
2319 cand = add_function_candidate (candidates, fn, ctype,
2320 arglist, access_path,
2321 conversion_path, flags);
2322 if (DECL_TI_TEMPLATE (fn) != tmpl)
2323 /* This situation can occur if a member template of a template
2324 class is specialized. Then, instantiate_template might return
2325 an instantiation of the specialization, in which case the
2326 DECL_TI_TEMPLATE field will point at the original
2327 specialization. For example:
2329 template <class T> struct S { template <class U> void f(U);
2330 template <> void f(int) {}; };
2334 Here, TMPL will be template <class U> S<double>::f(U).
2335 And, instantiate template will give us the specialization
2336 template <> S<double>::f(int). But, the DECL_TI_TEMPLATE field
2337 for this will point at template <class T> template <> S<T>::f(int),
2338 so that we can find the definition. For the purposes of
2339 overload resolution, however, we want the original TMPL. */
2340 cand->template = tree_cons (tmpl, targs, NULL_TREE);
2342 cand->template = DECL_TEMPLATE_INFO (fn);
2348 static struct z_candidate *
2349 add_template_candidate (struct z_candidate **candidates, tree tmpl, tree ctype,
2350 tree explicit_targs, tree arglist, tree return_type,
2351 tree access_path, tree conversion_path, int flags,
2352 unification_kind_t strict)
2355 add_template_candidate_real (candidates, tmpl, ctype,
2356 explicit_targs, arglist, return_type,
2357 access_path, conversion_path,
2358 flags, NULL_TREE, strict);
2362 static struct z_candidate *
2363 add_template_conv_candidate (struct z_candidate **candidates, tree tmpl,
2364 tree obj, tree arglist, tree return_type,
2365 tree access_path, tree conversion_path)
2368 add_template_candidate_real (candidates, tmpl, NULL_TREE, NULL_TREE,
2369 arglist, return_type, access_path,
2370 conversion_path, 0, obj, DEDUCE_CONV);
2373 /* The CANDS are the set of candidates that were considered for
2374 overload resolution. Return the set of viable candidates. If none
2375 of the candidates were viable, set *ANY_VIABLE_P to true. STRICT_P
2376 is true if a candidate should be considered viable only if it is
2379 static struct z_candidate*
2380 splice_viable (struct z_candidate *cands,
2384 struct z_candidate *viable;
2385 struct z_candidate **last_viable;
2386 struct z_candidate **cand;
2389 last_viable = &viable;
2390 *any_viable_p = false;
2395 struct z_candidate *c = *cand;
2396 if (strict_p ? c->viable == 1 : c->viable)
2401 last_viable = &c->next;
2402 *any_viable_p = true;
2408 return viable ? viable : cands;
2412 any_strictly_viable (struct z_candidate *cands)
2414 for (; cands; cands = cands->next)
2415 if (cands->viable == 1)
2421 build_this (tree obj)
2423 /* Fix this to work on non-lvalues. */
2424 return build_unary_op (ADDR_EXPR, obj, 0);
2427 /* Returns true iff functions are equivalent. Equivalent functions are
2428 not '==' only if one is a function-local extern function or if
2429 both are extern "C". */
2432 equal_functions (tree fn1, tree fn2)
2434 if (DECL_LOCAL_FUNCTION_P (fn1) || DECL_LOCAL_FUNCTION_P (fn2)
2435 || DECL_EXTERN_C_FUNCTION_P (fn1))
2436 return decls_match (fn1, fn2);
2440 /* Print information about one overload candidate CANDIDATE. MSGSTR
2441 is the text to print before the candidate itself.
2443 NOTE: Unlike most diagnostic functions in GCC, MSGSTR is expected
2444 to have been run through gettext by the caller. This wart makes
2445 life simpler in print_z_candidates and for the translators. */
2448 print_z_candidate (const char *msgstr, struct z_candidate *candidate)
2450 if (TREE_CODE (candidate->fn) == IDENTIFIER_NODE)
2452 if (TREE_VEC_LENGTH (candidate->convs) == 3)
2453 inform ("%s %D(%T, %T, %T) <built-in>", msgstr, candidate->fn,
2454 TREE_TYPE (TREE_VEC_ELT (candidate->convs, 0)),
2455 TREE_TYPE (TREE_VEC_ELT (candidate->convs, 1)),
2456 TREE_TYPE (TREE_VEC_ELT (candidate->convs, 2)));
2457 else if (TREE_VEC_LENGTH (candidate->convs) == 2)
2458 inform ("%s %D(%T, %T) <built-in>", msgstr, candidate->fn,
2459 TREE_TYPE (TREE_VEC_ELT (candidate->convs, 0)),
2460 TREE_TYPE (TREE_VEC_ELT (candidate->convs, 1)));
2462 inform ("%s %D(%T) <built-in>", msgstr, candidate->fn,
2463 TREE_TYPE (TREE_VEC_ELT (candidate->convs, 0)));
2465 else if (TYPE_P (candidate->fn))
2466 inform ("%s %T <conversion>", msgstr, candidate->fn);
2467 else if (candidate->viable == -1)
2468 inform ("%H%s %+#D <near match>",
2469 &DECL_SOURCE_LOCATION (candidate->fn), msgstr, candidate->fn);
2471 inform ("%H%s %+#D",
2472 &DECL_SOURCE_LOCATION (candidate->fn), msgstr, candidate->fn);
2476 print_z_candidates (struct z_candidate *candidates)
2479 struct z_candidate *cand1;
2480 struct z_candidate **cand2;
2482 /* There may be duplicates in the set of candidates. We put off
2483 checking this condition as long as possible, since we have no way
2484 to eliminate duplicates from a set of functions in less than n^2
2485 time. Now we are about to emit an error message, so it is more
2486 permissible to go slowly. */
2487 for (cand1 = candidates; cand1; cand1 = cand1->next)
2489 tree fn = cand1->fn;
2490 /* Skip builtin candidates and conversion functions. */
2491 if (TREE_CODE (fn) != FUNCTION_DECL)
2493 cand2 = &cand1->next;
2496 if (TREE_CODE ((*cand2)->fn) == FUNCTION_DECL
2497 && equal_functions (fn, (*cand2)->fn))
2498 *cand2 = (*cand2)->next;
2500 cand2 = &(*cand2)->next;
2507 str = _("candidates are:");
2508 print_z_candidate (str, candidates);
2509 if (candidates->next)
2511 /* Indent successive candidates by the width of the translation
2512 of the above string. */
2513 size_t len = gcc_gettext_width (str) + 1;
2514 char *spaces = alloca (len);
2515 memset (spaces, ' ', len-1);
2516 spaces[len - 1] = '\0';
2518 candidates = candidates->next;
2521 print_z_candidate (spaces, candidates);
2522 candidates = candidates->next;
2528 /* USER_SEQ is a user-defined conversion sequence, beginning with a
2529 USER_CONV. STD_SEQ is the standard conversion sequence applied to
2530 the result of the conversion function to convert it to the final
2531 desired type. Merge the the two sequences into a single sequence,
2532 and return the merged sequence. */
2535 merge_conversion_sequences (tree user_seq, tree std_seq)
2539 my_friendly_assert (TREE_CODE (user_seq) == USER_CONV,
2542 /* Find the end of the second conversion sequence. */
2544 while (TREE_CODE (*t) != IDENTITY_CONV)
2545 t = &TREE_OPERAND (*t, 0);
2547 /* Replace the identity conversion with the user conversion
2551 /* The entire sequence is a user-conversion sequence. */
2552 ICS_USER_FLAG (std_seq) = 1;
2557 /* Returns the best overload candidate to perform the requested
2558 conversion. This function is used for three the overloading situations
2559 described in [over.match.copy], [over.match.conv], and [over.match.ref].
2560 If TOTYPE is a REFERENCE_TYPE, we're trying to find an lvalue binding as
2561 per [dcl.init.ref], so we ignore temporary bindings. */
2563 static struct z_candidate *
2564 build_user_type_conversion_1 (tree totype, tree expr, int flags)
2566 struct z_candidate *candidates, *cand;
2567 tree fromtype = TREE_TYPE (expr);
2568 tree ctors = NULL_TREE, convs = NULL_TREE;
2569 tree args = NULL_TREE;
2572 /* We represent conversion within a hierarchy using RVALUE_CONV and
2573 BASE_CONV, as specified by [over.best.ics]; these become plain
2574 constructor calls, as specified in [dcl.init]. */
2575 my_friendly_assert (!IS_AGGR_TYPE (fromtype) || !IS_AGGR_TYPE (totype)
2576 || !DERIVED_FROM_P (totype, fromtype), 20011226);
2578 if (IS_AGGR_TYPE (totype))
2579 ctors = lookup_fnfields (TYPE_BINFO (totype),
2580 complete_ctor_identifier,
2583 if (IS_AGGR_TYPE (fromtype))
2584 convs = lookup_conversions (fromtype);
2587 flags |= LOOKUP_NO_CONVERSION;
2593 ctors = BASELINK_FUNCTIONS (ctors);
2595 t = build_int_2 (0, 0);
2596 TREE_TYPE (t) = build_pointer_type (totype);
2597 args = build_tree_list (NULL_TREE, expr);
2598 /* We should never try to call the abstract or base constructor
2600 my_friendly_assert (!DECL_HAS_IN_CHARGE_PARM_P (OVL_CURRENT (ctors))
2601 && !DECL_HAS_VTT_PARM_P (OVL_CURRENT (ctors)),
2603 args = tree_cons (NULL_TREE, t, args);
2605 for (; ctors; ctors = OVL_NEXT (ctors))
2607 tree ctor = OVL_CURRENT (ctors);
2608 if (DECL_NONCONVERTING_P (ctor))
2611 if (TREE_CODE (ctor) == TEMPLATE_DECL)
2612 cand = add_template_candidate (&candidates, ctor, totype,
2613 NULL_TREE, args, NULL_TREE,
2614 TYPE_BINFO (totype),
2615 TYPE_BINFO (totype),
2619 cand = add_function_candidate (&candidates, ctor, totype,
2620 args, TYPE_BINFO (totype),
2621 TYPE_BINFO (totype),
2625 cand->second_conv = build1 (IDENTITY_CONV, totype, NULL_TREE);
2629 args = build_tree_list (NULL_TREE, build_this (expr));
2631 for (; convs; convs = TREE_CHAIN (convs))
2634 tree conversion_path = TREE_PURPOSE (convs);
2635 int convflags = LOOKUP_NO_CONVERSION;
2637 /* If we are called to convert to a reference type, we are trying to
2638 find an lvalue binding, so don't even consider temporaries. If
2639 we don't find an lvalue binding, the caller will try again to
2640 look for a temporary binding. */
2641 if (TREE_CODE (totype) == REFERENCE_TYPE)
2642 convflags |= LOOKUP_NO_TEMP_BIND;
2644 for (fns = TREE_VALUE (convs); fns; fns = OVL_NEXT (fns))
2646 tree fn = OVL_CURRENT (fns);
2648 /* [over.match.funcs] For conversion functions, the function
2649 is considered to be a member of the class of the implicit
2650 object argument for the purpose of defining the type of
2651 the implicit object parameter.
2653 So we pass fromtype as CTYPE to add_*_candidate. */
2655 if (TREE_CODE (fn) == TEMPLATE_DECL)
2656 cand = add_template_candidate (&candidates, fn, fromtype,
2659 TYPE_BINFO (fromtype),
2664 cand = add_function_candidate (&candidates, fn, fromtype,
2666 TYPE_BINFO (fromtype),
2672 tree ics = implicit_conversion (totype,
2673 TREE_TYPE (TREE_TYPE (cand->fn)),
2676 cand->second_conv = ics;
2678 if (ics == NULL_TREE)
2680 else if (candidates->viable == 1 && ICS_BAD_FLAG (ics))
2686 candidates = splice_viable (candidates, pedantic, &any_viable_p);
2690 cand = tourney (candidates);
2693 if (flags & LOOKUP_COMPLAIN)
2695 error ("conversion from `%T' to `%T' is ambiguous",
2697 print_z_candidates (candidates);
2700 cand = candidates; /* any one will do */
2701 cand->second_conv = build1 (AMBIG_CONV, totype, expr);
2702 ICS_USER_FLAG (cand->second_conv) = 1;
2703 if (!any_strictly_viable (candidates))
2704 ICS_BAD_FLAG (cand->second_conv) = 1;
2705 /* If there are viable candidates, don't set ICS_BAD_FLAG; an
2706 ambiguous conversion is no worse than another user-defined
2712 /* Build the user conversion sequence. */
2715 (DECL_CONSTRUCTOR_P (cand->fn)
2716 ? totype : non_reference (TREE_TYPE (TREE_TYPE (cand->fn)))),
2717 build1 (IDENTITY_CONV, TREE_TYPE (expr), expr));
2718 TREE_OPERAND (convs, 1) = build_zc_wrapper (cand);
2720 /* Combine it with the second conversion sequence. */
2721 cand->second_conv = merge_conversion_sequences (convs,
2724 if (cand->viable == -1)
2725 ICS_BAD_FLAG (cand->second_conv) = 1;
2731 build_user_type_conversion (tree totype, tree expr, int flags)
2733 struct z_candidate *cand
2734 = build_user_type_conversion_1 (totype, expr, flags);
2738 if (TREE_CODE (cand->second_conv) == AMBIG_CONV)
2739 return error_mark_node;
2740 return convert_from_reference (convert_like (cand->second_conv, expr));
2745 /* Find the possibly overloaded set of functions corresponding to a
2746 call of the form SCOPE::NAME (...). NAME might be a
2747 TEMPLATE_ID_EXPR, OVERLOAD, _DECL, IDENTIFIER_NODE or LOOKUP_EXPR. */
2750 resolve_scoped_fn_name (tree scope, tree name)
2752 tree fn = NULL_TREE;
2753 tree template_args = NULL_TREE;
2754 bool is_template_id = TREE_CODE (name) == TEMPLATE_ID_EXPR;
2758 template_args = TREE_OPERAND (name, 1);
2759 name = TREE_OPERAND (name, 0);
2761 if (TREE_CODE (name) == OVERLOAD)
2762 name = DECL_NAME (get_first_fn (name));
2763 else if (TREE_CODE (name) == LOOKUP_EXPR)
2764 name = TREE_OPERAND (name, 0);
2766 if (TREE_CODE (scope) == NAMESPACE_DECL)
2767 fn = lookup_namespace_name (scope, name);
2768 else if (!CLASS_TYPE_P (scope))
2770 error ("`%T' is not a class type", scope);
2771 return error_mark_node;
2775 if (!TYPE_BEING_DEFINED (scope)
2776 && !COMPLETE_TYPE_P (complete_type (scope)))
2778 error ("incomplete type '%T' cannot be used to name a scope",
2780 return error_mark_node;
2783 if (BASELINK_P (name))
2786 fn = lookup_member (scope, name, /*protect=*/1, /*want_type=*/false);
2787 if (fn && current_class_type)
2788 fn = (adjust_result_of_qualified_name_lookup
2789 (fn, scope, current_class_type));
2791 /* It might be the name of a function pointer member. */
2792 if (fn && TREE_CODE (fn) == FIELD_DECL)
2793 fn = resolve_offset_ref (build_offset_ref (scope, fn));
2798 error ("'%D' has no member named '%E'", scope, name);
2799 return error_mark_node;
2805 if (BASELINK_P (fn))
2806 fns = BASELINK_FUNCTIONS (fns);
2807 fns = build_nt (TEMPLATE_ID_EXPR, fns, template_args);
2808 if (BASELINK_P (fn))
2809 BASELINK_FUNCTIONS (fn) = fns;
2817 /* Do any initial processing on the arguments to a function call. */
2820 resolve_args (tree args)
2823 for (t = args; t; t = TREE_CHAIN (t))
2825 tree arg = TREE_VALUE (t);
2827 if (arg == error_mark_node)
2828 return error_mark_node;
2829 else if (VOID_TYPE_P (TREE_TYPE (arg)))
2831 error ("invalid use of void expression");
2832 return error_mark_node;
2834 else if (TREE_CODE (arg) == OFFSET_REF)
2835 arg = resolve_offset_ref (arg);
2836 arg = convert_from_reference (arg);
2837 TREE_VALUE (t) = arg;
2842 /* Perform overload resolution on FN, which is called with the ARGS.
2844 Return the candidate function selected by overload resolution, or
2845 NULL if the event that overload resolution failed. In the case
2846 that overload resolution fails, *CANDIDATES will be the set of
2847 candidates considered, and ANY_VIABLE_P will be set to true or
2848 false to indicate whether or not any of the candidates were
2851 The ARGS should already have gone through RESOLVE_ARGS before this
2852 function is called. */
2854 static struct z_candidate *
2855 perform_overload_resolution (tree fn,
2857 struct z_candidate **candidates,
2860 struct z_candidate *cand;
2861 tree explicit_targs = NULL_TREE;
2862 int template_only = 0;
2865 *any_viable_p = true;
2867 /* Check FN and ARGS. */
2868 my_friendly_assert (TREE_CODE (fn) == FUNCTION_DECL
2869 || TREE_CODE (fn) == TEMPLATE_DECL
2870 || TREE_CODE (fn) == OVERLOAD
2871 || TREE_CODE (fn) == TEMPLATE_ID_EXPR,
2873 my_friendly_assert (!args || TREE_CODE (args) == TREE_LIST,
2876 if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
2878 explicit_targs = TREE_OPERAND (fn, 1);
2879 fn = TREE_OPERAND (fn, 0);
2883 /* Add the various candidate functions. */
2884 add_candidates (fn, args, explicit_targs, template_only,
2885 /*conversion_path=*/NULL_TREE,
2886 /*access_path=*/NULL_TREE,
2890 *candidates = splice_viable (*candidates, pedantic, any_viable_p);
2894 cand = tourney (*candidates);
2898 /* Return an expression for a call to FN (a namespace-scope function,
2899 or a static member function) with the ARGS. */
2902 build_new_function_call (tree fn, tree args)
2904 struct z_candidate *candidates, *cand;
2907 args = resolve_args (args);
2908 if (args == error_mark_node)
2909 return error_mark_node;
2911 cand = perform_overload_resolution (fn, args, &candidates, &any_viable_p);
2915 if (!any_viable_p && candidates && ! candidates->next)
2916 return build_function_call (candidates->fn, args);
2917 if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
2918 fn = TREE_OPERAND (fn, 0);
2920 error ("no matching function for call to `%D(%A)'",
2921 DECL_NAME (OVL_CURRENT (fn)), args);
2923 error ("call of overloaded `%D(%A)' is ambiguous",
2924 DECL_NAME (OVL_CURRENT (fn)), args);
2926 print_z_candidates (candidates);
2927 return error_mark_node;
2930 return build_over_call (cand, LOOKUP_NORMAL);
2933 /* Build a call to a global operator new. FNNAME is the name of the
2934 operator (either "operator new" or "operator new[]") and ARGS are
2935 the arguments provided. *SIZE points to the total number of bytes
2936 required by the allocation, and is updated if that is changed here.
2937 *COOKIE_SIZE is non-NULL if a cookie should be used. If this
2938 function determins that no cookie should be used, after all,
2939 *COOKIE_SIZE is set to NULL_TREE. */
2942 build_operator_new_call (tree fnname, tree args, tree *size, tree *cookie_size)
2945 struct z_candidate *candidates;
2946 struct z_candidate *cand;
2949 args = tree_cons (NULL_TREE, *size, args);
2950 args = resolve_args (args);
2951 if (args == error_mark_node)
2954 fns = lookup_function_nonclass (fnname, args);
2956 /* Figure out what function is being called. */
2957 cand = perform_overload_resolution (fns, args, &candidates, &any_viable_p);
2959 /* If no suitable function could be found, issue an error message
2964 error ("no matching function for call to `%D(%A)'",
2965 DECL_NAME (OVL_CURRENT (fns)), args);
2967 error ("call of overloaded `%D(%A)' is ambiguous",
2968 DECL_NAME (OVL_CURRENT (fns)), args);
2970 print_z_candidates (candidates);
2971 return error_mark_node;
2974 /* If a cookie is required, add some extra space. Whether
2975 or not a cookie is required cannot be determined until
2976 after we know which function was called. */
2979 bool use_cookie = true;
2980 if (!abi_version_at_least (2))
2982 tree placement = TREE_CHAIN (args);
2983 /* In G++ 3.2, the check was implemented incorrectly; it
2984 looked at the placement expression, rather than the
2985 type of the function. */
2986 if (placement && !TREE_CHAIN (placement)
2987 && same_type_p (TREE_TYPE (TREE_VALUE (placement)),
2995 arg_types = TYPE_ARG_TYPES (TREE_TYPE (cand->fn));
2996 /* Skip the size_t parameter. */
2997 arg_types = TREE_CHAIN (arg_types);
2998 /* Check the remaining parameters (if any). */
3000 && TREE_CHAIN (arg_types) == void_list_node
3001 && same_type_p (TREE_VALUE (arg_types),
3005 /* If we need a cookie, adjust the number of bytes allocated. */
3008 /* Update the total size. */
3009 *size = size_binop (PLUS_EXPR, *size, *cookie_size);
3010 /* Update the argument list to reflect the adjusted size. */
3011 TREE_VALUE (args) = *size;
3014 *cookie_size = NULL_TREE;
3017 /* Build the CALL_EXPR. */
3018 return build_over_call (cand, LOOKUP_NORMAL);
3022 build_object_call (tree obj, tree args)
3024 struct z_candidate *candidates = 0, *cand;
3025 tree fns, convs, mem_args = NULL_TREE;
3026 tree type = TREE_TYPE (obj);
3029 if (TYPE_PTRMEMFUNC_P (type))
3031 /* It's no good looking for an overloaded operator() on a
3032 pointer-to-member-function. */
3033 error ("pointer-to-member function %E cannot be called without an object; consider using .* or ->*", obj);
3034 return error_mark_node;
3037 fns = lookup_fnfields (TYPE_BINFO (type), ansi_opname (CALL_EXPR), 1);
3038 if (fns == error_mark_node)
3039 return error_mark_node;
3041 args = resolve_args (args);
3043 if (args == error_mark_node)
3044 return error_mark_node;
3048 tree base = BINFO_TYPE (BASELINK_BINFO (fns));
3049 mem_args = tree_cons (NULL_TREE, build_this (obj), args);
3051 for (fns = BASELINK_FUNCTIONS (fns); fns; fns = OVL_NEXT (fns))
3053 tree fn = OVL_CURRENT (fns);
3054 if (TREE_CODE (fn) == TEMPLATE_DECL)
3055 add_template_candidate (&candidates, fn, base, NULL_TREE,
3056 mem_args, NULL_TREE,
3059 LOOKUP_NORMAL, DEDUCE_CALL);
3061 add_function_candidate
3062 (&candidates, fn, base, mem_args, TYPE_BINFO (type),
3063 TYPE_BINFO (type), LOOKUP_NORMAL);
3067 convs = lookup_conversions (type);
3069 for (; convs; convs = TREE_CHAIN (convs))
3071 tree fns = TREE_VALUE (convs);
3072 tree totype = TREE_TYPE (TREE_TYPE (OVL_CURRENT (fns)));
3074 if ((TREE_CODE (totype) == POINTER_TYPE
3075 && TREE_CODE (TREE_TYPE (totype)) == FUNCTION_TYPE)
3076 || (TREE_CODE (totype) == REFERENCE_TYPE
3077 && TREE_CODE (TREE_TYPE (totype)) == FUNCTION_TYPE)
3078 || (TREE_CODE (totype) == REFERENCE_TYPE
3079 && TREE_CODE (TREE_TYPE (totype)) == POINTER_TYPE
3080 && TREE_CODE (TREE_TYPE (TREE_TYPE (totype))) == FUNCTION_TYPE))
3081 for (; fns; fns = OVL_NEXT (fns))
3083 tree fn = OVL_CURRENT (fns);
3084 if (TREE_CODE (fn) == TEMPLATE_DECL)
3085 add_template_conv_candidate
3086 (&candidates, fn, obj, args, totype,
3087 /*access_path=*/NULL_TREE,
3088 /*conversion_path=*/NULL_TREE);
3090 add_conv_candidate (&candidates, fn, obj, args,
3091 /*conversion_path=*/NULL_TREE,
3092 /*access_path=*/NULL_TREE);
3096 candidates = splice_viable (candidates, pedantic, &any_viable_p);
3099 error ("no match for call to `(%T) (%A)'", TREE_TYPE (obj), args);
3100 print_z_candidates (candidates);
3101 return error_mark_node;
3104 cand = tourney (candidates);
3107 error ("call of `(%T) (%A)' is ambiguous", TREE_TYPE (obj), args);
3108 print_z_candidates (candidates);
3109 return error_mark_node;
3112 /* Since cand->fn will be a type, not a function, for a conversion
3113 function, we must be careful not to unconditionally look at
3115 if (TREE_CODE (cand->fn) == FUNCTION_DECL
3116 && DECL_OVERLOADED_OPERATOR_P (cand->fn) == CALL_EXPR)
3117 return build_over_call (cand, LOOKUP_NORMAL);
3119 obj = convert_like_with_context
3120 (TREE_VEC_ELT (cand->convs, 0), obj, cand->fn, -1);
3123 return build_function_call (obj, args);
3127 op_error (enum tree_code code, enum tree_code code2,
3128 tree arg1, tree arg2, tree arg3, const char *problem)
3132 if (code == MODIFY_EXPR)
3133 opname = assignment_operator_name_info[code2].name;
3135 opname = operator_name_info[code].name;
3140 error ("%s for ternary 'operator?:' in '%E ? %E : %E'",
3141 problem, arg1, arg2, arg3);
3144 case POSTINCREMENT_EXPR:
3145 case POSTDECREMENT_EXPR:
3146 error ("%s for 'operator%s' in '%E%s'", problem, opname, arg1, opname);
3150 error ("%s for 'operator[]' in '%E[%E]'", problem, arg1, arg2);
3155 error ("%s for 'operator%s' in '%E %s %E'",
3156 problem, opname, arg1, opname, arg2);
3158 error ("%s for 'operator%s' in '%s%E'",
3159 problem, opname, opname, arg1);
3164 /* Return the implicit conversion sequence that could be used to
3165 convert E1 to E2 in [expr.cond]. */
3168 conditional_conversion (tree e1, tree e2)
3170 tree t1 = non_reference (TREE_TYPE (e1));
3171 tree t2 = non_reference (TREE_TYPE (e2));
3177 If E2 is an lvalue: E1 can be converted to match E2 if E1 can be
3178 implicitly converted (clause _conv_) to the type "reference to
3179 T2", subject to the constraint that in the conversion the
3180 reference must bind directly (_dcl.init.ref_) to E1. */
3181 if (real_lvalue_p (e2))
3183 conv = implicit_conversion (build_reference_type (t2),
3186 LOOKUP_NO_TEMP_BIND);
3193 If E1 and E2 have class type, and the underlying class types are
3194 the same or one is a base class of the other: E1 can be converted
3195 to match E2 if the class of T2 is the same type as, or a base
3196 class of, the class of T1, and the cv-qualification of T2 is the
3197 same cv-qualification as, or a greater cv-qualification than, the
3198 cv-qualification of T1. If the conversion is applied, E1 is
3199 changed to an rvalue of type T2 that still refers to the original
3200 source class object (or the appropriate subobject thereof).
3202 FIXME we can't express an rvalue that refers to the original object;
3203 we have to create a new one. */
3204 if (CLASS_TYPE_P (t1) && CLASS_TYPE_P (t2)
3205 && ((good_base = DERIVED_FROM_P (t2, t1)) || DERIVED_FROM_P (t1, t2)))
3207 if (good_base && at_least_as_qualified_p (t2, t1))
3209 conv = build1 (IDENTITY_CONV, t1, e1);
3210 if (!same_type_p (TYPE_MAIN_VARIANT (t1),
3211 TYPE_MAIN_VARIANT (t2)))
3213 conv = build_conv (BASE_CONV, t2, conv);
3214 NEED_TEMPORARY_P (conv) = 1;
3217 conv = build_conv (RVALUE_CONV, t2, conv);
3226 Otherwise: E1 can be converted to match E2 if E1 can be implicitly
3227 converted to the type that expression E2 would have if E2 were
3228 converted to an rvalue (or the type it has, if E2 is an rvalue). */
3229 return implicit_conversion (t2, t1, e1, LOOKUP_NORMAL);
3232 /* Implement [expr.cond]. ARG1, ARG2, and ARG3 are the three
3233 arguments to the conditional expression. */
3236 build_conditional_expr (tree arg1, tree arg2, tree arg3)
3241 tree result_type = NULL_TREE;
3242 bool lvalue_p = true;
3243 struct z_candidate *candidates = 0;
3244 struct z_candidate *cand;
3246 /* As a G++ extension, the second argument to the conditional can be
3247 omitted. (So that `a ? : c' is roughly equivalent to `a ? a :
3248 c'.) If the second operand is omitted, make sure it is
3249 calculated only once. */
3253 pedwarn ("ISO C++ forbids omitting the middle term of a ?: expression");
3255 /* Make sure that lvalues remain lvalues. See g++.oliva/ext1.C. */
3256 if (real_lvalue_p (arg1))
3257 arg2 = arg1 = stabilize_reference (arg1);
3259 arg2 = arg1 = save_expr (arg1);
3264 The first expr ession is implicitly converted to bool (clause
3266 arg1 = cp_convert (boolean_type_node, arg1);
3268 /* If something has already gone wrong, just pass that fact up the
3270 if (arg1 == error_mark_node
3271 || arg2 == error_mark_node
3272 || arg3 == error_mark_node
3273 || TREE_TYPE (arg1) == error_mark_node
3274 || TREE_TYPE (arg2) == error_mark_node
3275 || TREE_TYPE (arg3) == error_mark_node)
3276 return error_mark_node;
3280 If either the second or the third operand has type (possibly
3281 cv-qualified) void, then the lvalue-to-rvalue (_conv.lval_),
3282 array-to-pointer (_conv.array_), and function-to-pointer
3283 (_conv.func_) standard conversions are performed on the second
3284 and third operands. */
3285 arg2_type = TREE_TYPE (arg2);
3286 arg3_type = TREE_TYPE (arg3);
3287 if (VOID_TYPE_P (arg2_type) || VOID_TYPE_P (arg3_type))
3289 /* Do the conversions. We don't these for `void' type arguments
3290 since it can't have any effect and since decay_conversion
3291 does not handle that case gracefully. */
3292 if (!VOID_TYPE_P (arg2_type))
3293 arg2 = decay_conversion (arg2);
3294 if (!VOID_TYPE_P (arg3_type))
3295 arg3 = decay_conversion (arg3);
3296 arg2_type = TREE_TYPE (arg2);
3297 arg3_type = TREE_TYPE (arg3);
3301 One of the following shall hold:
3303 --The second or the third operand (but not both) is a
3304 throw-expression (_except.throw_); the result is of the
3305 type of the other and is an rvalue.
3307 --Both the second and the third operands have type void; the
3308 result is of type void and is an rvalue. */
3309 if ((TREE_CODE (arg2) == THROW_EXPR)
3310 ^ (TREE_CODE (arg3) == THROW_EXPR))
3311 result_type = ((TREE_CODE (arg2) == THROW_EXPR)
3312 ? arg3_type : arg2_type);
3313 else if (VOID_TYPE_P (arg2_type) && VOID_TYPE_P (arg3_type))
3314 result_type = void_type_node;
3317 error ("`%E' has type `void' and is not a throw-expression",
3318 VOID_TYPE_P (arg2_type) ? arg2 : arg3);
3319 return error_mark_node;
3323 goto valid_operands;
3327 Otherwise, if the second and third operand have different types,
3328 and either has (possibly cv-qualified) class type, an attempt is
3329 made to convert each of those operands to the type of the other. */
3330 else if (!same_type_p (arg2_type, arg3_type)
3331 && (CLASS_TYPE_P (arg2_type) || CLASS_TYPE_P (arg3_type)))
3333 tree conv2 = conditional_conversion (arg2, arg3);
3334 tree conv3 = conditional_conversion (arg3, arg2);
3338 If both can be converted, or one can be converted but the
3339 conversion is ambiguous, the program is ill-formed. If
3340 neither can be converted, the operands are left unchanged and
3341 further checking is performed as described below. If exactly
3342 one conversion is possible, that conversion is applied to the
3343 chosen operand and the converted operand is used in place of
3344 the original operand for the remainder of this section. */
3345 if ((conv2 && !ICS_BAD_FLAG (conv2)
3346 && conv3 && !ICS_BAD_FLAG (conv3))
3347 || (conv2 && TREE_CODE (conv2) == AMBIG_CONV)
3348 || (conv3 && TREE_CODE (conv3) == AMBIG_CONV))
3350 error ("operands to ?: have different types");
3351 return error_mark_node;
3353 else if (conv2 && !ICS_BAD_FLAG (conv2))
3355 arg2 = convert_like (conv2, arg2);
3356 arg2 = convert_from_reference (arg2);
3357 if (!same_type_p (TREE_TYPE (arg2), arg3_type))
3359 arg2_type = TREE_TYPE (arg2);
3361 else if (conv3 && !ICS_BAD_FLAG (conv3))
3363 arg3 = convert_like (conv3, arg3);
3364 arg3 = convert_from_reference (arg3);
3365 if (!same_type_p (TREE_TYPE (arg3), arg2_type))
3367 arg3_type = TREE_TYPE (arg3);
3373 If the second and third operands are lvalues and have the same
3374 type, the result is of that type and is an lvalue. */
3375 if (real_lvalue_p (arg2) && real_lvalue_p (arg3) &&
3376 same_type_p (arg2_type, arg3_type))
3378 result_type = arg2_type;
3379 goto valid_operands;
3384 Otherwise, the result is an rvalue. If the second and third
3385 operand do not have the same type, and either has (possibly
3386 cv-qualified) class type, overload resolution is used to
3387 determine the conversions (if any) to be applied to the operands
3388 (_over.match.oper_, _over.built_). */
3390 if (!same_type_p (arg2_type, arg3_type)
3391 && (CLASS_TYPE_P (arg2_type) || CLASS_TYPE_P (arg3_type)))
3397 /* Rearrange the arguments so that add_builtin_candidate only has
3398 to know about two args. In build_builtin_candidates, the
3399 arguments are unscrambled. */
3403 add_builtin_candidates (&candidates,
3406 ansi_opname (COND_EXPR),
3412 If the overload resolution fails, the program is
3414 candidates = splice_viable (candidates, pedantic, &any_viable_p);
3417 op_error (COND_EXPR, NOP_EXPR, arg1, arg2, arg3, "no match");
3418 print_z_candidates (candidates);
3419 return error_mark_node;
3421 cand = tourney (candidates);
3424 op_error (COND_EXPR, NOP_EXPR, arg1, arg2, arg3, "no match");
3425 print_z_candidates (candidates);
3426 return error_mark_node;
3431 Otherwise, the conversions thus determined are applied, and
3432 the converted operands are used in place of the original
3433 operands for the remainder of this section. */
3434 conv = TREE_VEC_ELT (cand->convs, 0);
3435 arg1 = convert_like (conv, arg1);
3436 conv = TREE_VEC_ELT (cand->convs, 1);
3437 arg2 = convert_like (conv, arg2);
3438 conv = TREE_VEC_ELT (cand->convs, 2);
3439 arg3 = convert_like (conv, arg3);
3444 Lvalue-to-rvalue (_conv.lval_), array-to-pointer (_conv.array_),
3445 and function-to-pointer (_conv.func_) standard conversions are
3446 performed on the second and third operands.
3448 We need to force the lvalue-to-rvalue conversion here for class types,
3449 so we get TARGET_EXPRs; trying to deal with a COND_EXPR of class rvalues
3450 that isn't wrapped with a TARGET_EXPR plays havoc with exception
3453 We use ocp_convert rather than build_user_type_conversion because the
3454 latter returns NULL_TREE on failure, while the former gives an error. */
3456 arg2 = force_rvalue (arg2);
3457 arg2_type = TREE_TYPE (arg2);
3459 arg3 = force_rvalue (arg3);
3460 arg3_type = TREE_TYPE (arg3);
3462 if (arg2 == error_mark_node || arg3 == error_mark_node)
3463 return error_mark_node;
3467 After those conversions, one of the following shall hold:
3469 --The second and third operands have the same type; the result is of
3471 if (same_type_p (arg2_type, arg3_type))
3472 result_type = arg2_type;
3475 --The second and third operands have arithmetic or enumeration
3476 type; the usual arithmetic conversions are performed to bring
3477 them to a common type, and the result is of that type. */
3478 else if ((ARITHMETIC_TYPE_P (arg2_type)
3479 || TREE_CODE (arg2_type) == ENUMERAL_TYPE)
3480 && (ARITHMETIC_TYPE_P (arg3_type)
3481 || TREE_CODE (arg3_type) == ENUMERAL_TYPE))
3483 /* In this case, there is always a common type. */
3484 result_type = type_after_usual_arithmetic_conversions (arg2_type,
3487 if (TREE_CODE (arg2_type) == ENUMERAL_TYPE
3488 && TREE_CODE (arg3_type) == ENUMERAL_TYPE)
3489 warning ("enumeral mismatch in conditional expression: `%T' vs `%T'",
3490 arg2_type, arg3_type);
3491 else if (extra_warnings
3492 && ((TREE_CODE (arg2_type) == ENUMERAL_TYPE
3493 && !same_type_p (arg3_type, type_promotes_to (arg2_type)))
3494 || (TREE_CODE (arg3_type) == ENUMERAL_TYPE
3495 && !same_type_p (arg2_type, type_promotes_to (arg3_type)))))
3496 warning ("enumeral and non-enumeral type in conditional expression");
3498 arg2 = perform_implicit_conversion (result_type, arg2);
3499 arg3 = perform_implicit_conversion (result_type, arg3);
3503 --The second and third operands have pointer type, or one has
3504 pointer type and the other is a null pointer constant; pointer
3505 conversions (_conv.ptr_) and qualification conversions
3506 (_conv.qual_) are performed to bring them to their composite
3507 pointer type (_expr.rel_). The result is of the composite
3510 --The second and third operands have pointer to member type, or
3511 one has pointer to member type and the other is a null pointer
3512 constant; pointer to member conversions (_conv.mem_) and
3513 qualification conversions (_conv.qual_) are performed to bring
3514 them to a common type, whose cv-qualification shall match the
3515 cv-qualification of either the second or the third operand.
3516 The result is of the common type. */
3517 else if ((null_ptr_cst_p (arg2)
3518 && (TYPE_PTR_P (arg3_type) || TYPE_PTRMEM_P (arg3_type)
3519 || TYPE_PTRMEMFUNC_P (arg3_type)))
3520 || (null_ptr_cst_p (arg3)
3521 && (TYPE_PTR_P (arg2_type) || TYPE_PTRMEM_P (arg2_type)
3522 || TYPE_PTRMEMFUNC_P (arg2_type)))
3523 || (TYPE_PTR_P (arg2_type) && TYPE_PTR_P (arg3_type))
3524 || (TYPE_PTRMEM_P (arg2_type) && TYPE_PTRMEM_P (arg3_type))
3525 || (TYPE_PTRMEMFUNC_P (arg2_type)
3526 && TYPE_PTRMEMFUNC_P (arg3_type)))
3528 result_type = composite_pointer_type (arg2_type, arg3_type, arg2,
3529 arg3, "conditional expression");
3530 arg2 = perform_implicit_conversion (result_type, arg2);
3531 arg3 = perform_implicit_conversion (result_type, arg3);
3536 error ("operands to ?: have different types");
3537 return error_mark_node;
3541 result = fold (build (COND_EXPR, result_type, arg1, arg2, arg3));
3542 /* We can't use result_type below, as fold might have returned a
3545 /* Expand both sides into the same slot, hopefully the target of the
3546 ?: expression. We used to check for TARGET_EXPRs here, but now we
3547 sometimes wrap them in NOP_EXPRs so the test would fail. */
3548 if (!lvalue_p && IS_AGGR_TYPE (TREE_TYPE (result)))
3549 result = get_target_expr (result);
3551 /* If this expression is an rvalue, but might be mistaken for an
3552 lvalue, we must add a NON_LVALUE_EXPR. */
3553 if (!lvalue_p && real_lvalue_p (result))
3554 result = build1 (NON_LVALUE_EXPR, TREE_TYPE (result), result);
3559 /* OPERAND is an operand to an expression. Perform necessary steps
3560 required before using it. If OPERAND is NULL_TREE, NULL_TREE is
3564 prep_operand (tree operand)
3568 if (TREE_CODE (operand) == OFFSET_REF)
3569 operand = resolve_offset_ref (operand);
3570 operand = convert_from_reference (operand);
3571 if (CLASS_TYPE_P (TREE_TYPE (operand))
3572 && CLASSTYPE_TEMPLATE_INSTANTIATION (TREE_TYPE (operand)))
3573 /* Make sure the template type is instantiated now. */
3574 instantiate_class_template (TYPE_MAIN_VARIANT (TREE_TYPE (operand)));
3580 /* Add each of the viable functions in FNS (a FUNCTION_DECL or
3581 OVERLOAD) to the CANDIDATES, returning an updated list of
3582 CANDIDATES. The ARGS are the arguments provided to the call,
3583 without any implicit object parameter. The EXPLICIT_TARGS are
3584 explicit template arguments provided. TEMPLATE_ONLY is true if
3585 only template fucntions should be considered. CONVERSION_PATH,
3586 ACCESS_PATH, and FLAGS are as for add_function_candidate. */
3589 add_candidates (tree fns, tree args,
3590 tree explicit_targs, bool template_only,
3591 tree conversion_path, tree access_path,
3593 struct z_candidate **candidates)
3596 tree non_static_args;
3598 ctype = conversion_path ? BINFO_TYPE (conversion_path) : NULL_TREE;
3599 /* Delay creating the implicit this parameter until it is needed. */
3600 non_static_args = NULL_TREE;
3607 fn = OVL_CURRENT (fns);
3608 /* Figure out which set of arguments to use. */
3609 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
3611 /* If this function is a non-static member, prepend the implicit
3612 object parameter. */
3613 if (!non_static_args)
3614 non_static_args = tree_cons (NULL_TREE,
3615 build_this (TREE_VALUE (args)),
3617 fn_args = non_static_args;
3620 /* Otherwise, just use the list of arguments provided. */
3623 if (TREE_CODE (fn) == TEMPLATE_DECL)
3624 add_template_candidate (candidates,
3634 else if (!template_only)
3635 add_function_candidate (candidates,
3642 fns = OVL_NEXT (fns);
3647 build_new_op (enum tree_code code, int flags, tree arg1, tree arg2, tree arg3)
3649 struct z_candidate *candidates = 0, *cand;
3650 tree arglist, fnname;
3652 enum tree_code code2 = NOP_EXPR;
3657 if (error_operand_p (arg1)
3658 || error_operand_p (arg2)
3659 || error_operand_p (arg3))
3660 return error_mark_node;
3662 if (code == MODIFY_EXPR)
3664 code2 = TREE_CODE (arg3);
3666 fnname = ansi_assopname (code2);
3669 fnname = ansi_opname (code);
3671 arg1 = prep_operand (arg1);
3677 case VEC_DELETE_EXPR:
3679 /* Use build_op_new_call and build_op_delete_call instead. */
3683 return build_object_call (arg1, arg2);
3689 arg2 = prep_operand (arg2);
3690 arg3 = prep_operand (arg3);
3692 if (code == COND_EXPR)
3694 if (arg2 == NULL_TREE
3695 || TREE_CODE (TREE_TYPE (arg2)) == VOID_TYPE
3696 || TREE_CODE (TREE_TYPE (arg3)) == VOID_TYPE
3697 || (! IS_OVERLOAD_TYPE (TREE_TYPE (arg2))
3698 && ! IS_OVERLOAD_TYPE (TREE_TYPE (arg3))))
3701 else if (! IS_OVERLOAD_TYPE (TREE_TYPE (arg1))
3702 && (! arg2 || ! IS_OVERLOAD_TYPE (TREE_TYPE (arg2))))
3705 if (code == POSTINCREMENT_EXPR || code == POSTDECREMENT_EXPR)
3706 arg2 = integer_zero_node;
3708 arglist = NULL_TREE;
3710 arglist = tree_cons (NULL_TREE, arg3, arglist);
3712 arglist = tree_cons (NULL_TREE, arg2, arglist);
3713 arglist = tree_cons (NULL_TREE, arg1, arglist);
3715 /* Add namespace-scope operators to the list of functions to
3717 add_candidates (lookup_function_nonclass (fnname, arglist),
3718 arglist, NULL_TREE, false, NULL_TREE, NULL_TREE,
3719 flags, &candidates);
3720 /* Add class-member operators to the candidate set. */
3721 if (CLASS_TYPE_P (TREE_TYPE (arg1)))
3725 fns = lookup_fnfields (TYPE_BINFO (TREE_TYPE (arg1)), fnname, 1);
3726 if (fns == error_mark_node)
3729 add_candidates (BASELINK_FUNCTIONS (fns), arglist,
3731 BASELINK_BINFO (fns),
3732 TYPE_BINFO (TREE_TYPE (arg1)),
3733 flags, &candidates);
3736 /* Rearrange the arguments for ?: so that add_builtin_candidate only has
3737 to know about two args; a builtin candidate will always have a first
3738 parameter of type bool. We'll handle that in
3739 build_builtin_candidate. */
3740 if (code == COND_EXPR)
3750 args[2] = NULL_TREE;
3753 add_builtin_candidates (&candidates, code, code2, fnname, args, flags);
3759 /* For these, the built-in candidates set is empty
3760 [over.match.oper]/3. We don't want non-strict matches
3761 because exact matches are always possible with built-in
3762 operators. The built-in candidate set for COMPONENT_REF
3763 would be empty too, but since there are no such built-in
3764 operators, we accept non-strict matches for them. */
3769 strict_p = pedantic;
3773 candidates = splice_viable (candidates, strict_p, &any_viable_p);
3778 case POSTINCREMENT_EXPR:
3779 case POSTDECREMENT_EXPR:
3780 /* Look for an `operator++ (int)'. If they didn't have
3781 one, then we fall back to the old way of doing things. */
3782 if (flags & LOOKUP_COMPLAIN)
3783 pedwarn ("no `%D(int)' declared for postfix `%s', trying prefix operator instead",
3785 operator_name_info[code].name);
3786 if (code == POSTINCREMENT_EXPR)
3787 code = PREINCREMENT_EXPR;
3789 code = PREDECREMENT_EXPR;
3790 return build_new_op (code, flags, arg1, NULL_TREE, NULL_TREE);
3792 /* The caller will deal with these. */
3801 if (flags & LOOKUP_COMPLAIN)
3803 op_error (code, code2, arg1, arg2, arg3, "no match");
3804 print_z_candidates (candidates);
3806 return error_mark_node;
3809 cand = tourney (candidates);
3812 if (flags & LOOKUP_COMPLAIN)
3814 op_error (code, code2, arg1, arg2, arg3, "ambiguous overload");
3815 print_z_candidates (candidates);
3817 return error_mark_node;
3820 if (TREE_CODE (cand->fn) == FUNCTION_DECL)
3823 && fnname == ansi_assopname (NOP_EXPR)
3824 && DECL_ARTIFICIAL (cand->fn)
3826 && ! candidates->next->next)
3828 warning ("using synthesized `%#D' for copy assignment",
3830 cp_warning_at (" where cfront would use `%#D'",
3832 ? candidates->next->fn
3836 return build_over_call (cand, LOOKUP_NORMAL);
3839 /* Check for comparison of different enum types. */
3848 if (TREE_CODE (TREE_TYPE (arg1)) == ENUMERAL_TYPE
3849 && TREE_CODE (TREE_TYPE (arg2)) == ENUMERAL_TYPE
3850 && (TYPE_MAIN_VARIANT (TREE_TYPE (arg1))
3851 != TYPE_MAIN_VARIANT (TREE_TYPE (arg2))))
3853 warning ("comparison between `%#T' and `%#T'",
3854 TREE_TYPE (arg1), TREE_TYPE (arg2));
3861 /* We need to strip any leading REF_BIND so that bitfields don't cause
3862 errors. This should not remove any important conversions, because
3863 builtins don't apply to class objects directly. */
3864 conv = TREE_VEC_ELT (cand->convs, 0);
3865 if (TREE_CODE (conv) == REF_BIND)
3866 conv = TREE_OPERAND (conv, 0);
3867 arg1 = convert_like (conv, arg1);
3870 conv = TREE_VEC_ELT (cand->convs, 1);
3871 if (TREE_CODE (conv) == REF_BIND)
3872 conv = TREE_OPERAND (conv, 0);
3873 arg2 = convert_like (conv, arg2);
3877 conv = TREE_VEC_ELT (cand->convs, 2);
3878 if (TREE_CODE (conv) == REF_BIND)
3879 conv = TREE_OPERAND (conv, 0);
3880 arg3 = convert_like (conv, arg3);
3887 return build_modify_expr (arg1, code2, arg2);
3890 return build_indirect_ref (arg1, "unary *");
3895 case TRUNC_DIV_EXPR:
3906 case TRUNC_MOD_EXPR:
3910 case TRUTH_ANDIF_EXPR:
3911 case TRUTH_ORIF_EXPR:
3912 return cp_build_binary_op (code, arg1, arg2);
3917 case TRUTH_NOT_EXPR:
3918 case PREINCREMENT_EXPR:
3919 case POSTINCREMENT_EXPR:
3920 case PREDECREMENT_EXPR:
3921 case POSTDECREMENT_EXPR:
3924 return build_unary_op (code, arg1, candidates != 0);
3927 return build_array_ref (arg1, arg2);
3930 return build_conditional_expr (arg1, arg2, arg3);
3933 return build_m_component_ref
3934 (build_indirect_ref (arg1, NULL), arg2);
3936 /* The caller will deal with these. */
3948 /* Build a call to operator delete. This has to be handled very specially,
3949 because the restrictions on what signatures match are different from all
3950 other call instances. For a normal delete, only a delete taking (void *)
3951 or (void *, size_t) is accepted. For a placement delete, only an exact
3952 match with the placement new is accepted.
3954 CODE is either DELETE_EXPR or VEC_DELETE_EXPR.
3955 ADDR is the pointer to be deleted.
3956 SIZE is the size of the memory block to be deleted.
3957 FLAGS are the usual overloading flags.
3958 PLACEMENT is the corresponding placement new call, or NULL_TREE. */
3961 build_op_delete_call (enum tree_code code, tree addr, tree size,
3962 int flags, tree placement)
3964 tree fn = NULL_TREE;
3965 tree fns, fnname, argtypes, args, type;
3968 if (addr == error_mark_node)
3969 return error_mark_node;
3971 type = strip_array_types (TREE_TYPE (TREE_TYPE (addr)));
3973 fnname = ansi_opname (code);
3975 if (IS_AGGR_TYPE (type) && ! (flags & LOOKUP_GLOBAL))
3978 If the result of the lookup is ambiguous or inaccessible, or if
3979 the lookup selects a placement deallocation function, the
3980 program is ill-formed.
3982 Therefore, we ask lookup_fnfields to complain ambout ambiguity. */
3984 fns = lookup_fnfields (TYPE_BINFO (type), fnname, 1);
3985 if (fns == error_mark_node)
3986 return error_mark_node;
3991 if (fns == NULL_TREE)
3992 fns = lookup_name_nonclass (fnname);
3999 /* Find the allocation function that is being called. */
4000 call_expr = placement;
4001 /* Sometimes we have a COMPOUND_EXPR, rather than a simple
4003 while (TREE_CODE (call_expr) == COMPOUND_EXPR)
4004 call_expr = TREE_OPERAND (call_expr, 1);
4005 /* Extract the function. */
4006 alloc_fn = get_callee_fndecl (call_expr);
4007 my_friendly_assert (alloc_fn != NULL_TREE, 20020327);
4008 /* Then the second parm type. */
4009 argtypes = TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (alloc_fn)));
4010 /* Also the second argument. */
4011 args = TREE_CHAIN (TREE_OPERAND (call_expr, 1));
4015 /* First try it without the size argument. */
4016 argtypes = void_list_node;
4020 /* Strip const and volatile from addr. */
4021 addr = cp_convert (ptr_type_node, addr);
4023 /* We make two tries at finding a matching `operator delete'. On
4024 the first pass, we look for a one-operator (or placement)
4025 operator delete. If we're not doing placement delete, then on
4026 the second pass we look for a two-argument delete. */
4027 for (pass = 0; pass < (placement ? 1 : 2); ++pass)
4029 /* Go through the `operator delete' functions looking for one
4030 with a matching type. */
4031 for (fn = BASELINK_P (fns) ? BASELINK_FUNCTIONS (fns) : fns;
4037 /* The first argument must be "void *". */
4038 t = TYPE_ARG_TYPES (TREE_TYPE (OVL_CURRENT (fn)));
4039 if (!same_type_p (TREE_VALUE (t), ptr_type_node))
4042 /* On the first pass, check the rest of the arguments. */
4045 while (argtypes && t)
4047 if (!same_type_p (TREE_VALUE (argtypes),
4050 argtypes = TREE_CHAIN (argtypes);
4053 if (!argtypes && !t)
4056 /* On the second pass, the second argument must be
4059 && same_type_p (TREE_VALUE (t), sizetype)
4060 && TREE_CHAIN (t) == void_list_node)
4064 /* If we found a match, we're done. */
4069 /* If we have a matching function, call it. */
4072 /* Make sure we have the actual function, and not an
4074 fn = OVL_CURRENT (fn);
4076 /* If the FN is a member function, make sure that it is
4078 if (DECL_CLASS_SCOPE_P (fn))
4079 perform_or_defer_access_check (TYPE_BINFO (type), fn);
4082 args = tree_cons (NULL_TREE, addr, args);
4084 args = tree_cons (NULL_TREE, addr,
4085 build_tree_list (NULL_TREE, size));
4087 return build_function_call (fn, args);
4090 /* If we are doing placement delete we do nothing if we don't find a
4091 matching op delete. */
4095 error ("no suitable `operator %s' for `%T'",
4096 operator_name_info[(int)code].name, type);
4097 return error_mark_node;
4100 /* If the current scope isn't allowed to access DECL along
4101 BASETYPE_PATH, give an error. The most derived class in
4102 BASETYPE_PATH is the one used to qualify DECL. */
4105 enforce_access (tree basetype_path, tree decl)
4107 my_friendly_assert (TREE_CODE (basetype_path) == TREE_VEC, 20030624);
4109 if (!accessible_p (basetype_path, decl))
4111 if (TREE_PRIVATE (decl))
4112 cp_error_at ("`%+#D' is private", decl);
4113 else if (TREE_PROTECTED (decl))
4114 cp_error_at ("`%+#D' is protected", decl);
4116 cp_error_at ("`%+#D' is inaccessible", decl);
4117 error ("within this context");
4124 /* Perform the conversions in CONVS on the expression EXPR. FN and
4125 ARGNUM are used for diagnostics. ARGNUM is zero based, -1
4126 indicates the `this' argument of a method. INNER is nonzero when
4127 being called to continue a conversion chain. It is negative when a
4128 reference binding will be applied, positive otherwise. If
4129 ISSUE_CONVERSION_WARNINGS is true, warnings about suspicious
4130 conversions will be emitted if appropriate. */
4133 convert_like_real (tree convs, tree expr, tree fn, int argnum, int inner,
4134 bool issue_conversion_warnings)
4138 tree totype = TREE_TYPE (convs);
4140 if (ICS_BAD_FLAG (convs)
4141 && TREE_CODE (convs) != USER_CONV
4142 && TREE_CODE (convs) != AMBIG_CONV
4143 && TREE_CODE (convs) != REF_BIND)
4146 for (; t; t = TREE_OPERAND (t, 0))
4148 if (TREE_CODE (t) == USER_CONV || !ICS_BAD_FLAG (t))
4150 expr = convert_like_real (t, expr, fn, argnum, 1,
4151 /*issue_conversion_warnings=*/false);
4154 else if (TREE_CODE (t) == AMBIG_CONV)
4155 return convert_like_real (t, expr, fn, argnum, 1,
4156 /*issue_conversion_warnings=*/false);
4157 else if (TREE_CODE (t) == IDENTITY_CONV)
4160 pedwarn ("invalid conversion from `%T' to `%T'", TREE_TYPE (expr), totype);
4162 pedwarn (" initializing argument %P of `%D'", argnum, fn);
4163 return cp_convert (totype, expr);
4166 if (issue_conversion_warnings)
4167 expr = dubious_conversion_warnings
4168 (totype, expr, "argument", fn, argnum);
4169 switch (TREE_CODE (convs))
4173 struct z_candidate *cand = USER_CONV_CAND (convs);
4174 tree convfn = cand->fn;
4177 if (DECL_CONSTRUCTOR_P (convfn))
4179 tree t = build_int_2 (0, 0);
4180 TREE_TYPE (t) = build_pointer_type (DECL_CONTEXT (convfn));
4182 args = build_tree_list (NULL_TREE, expr);
4183 if (DECL_HAS_IN_CHARGE_PARM_P (convfn)
4184 || DECL_HAS_VTT_PARM_P (convfn))
4185 /* We should never try to call the abstract or base constructor
4188 args = tree_cons (NULL_TREE, t, args);
4191 args = build_this (expr);
4192 expr = build_over_call (cand, LOOKUP_NORMAL);
4194 /* If this is a constructor or a function returning an aggr type,
4195 we need to build up a TARGET_EXPR. */
4196 if (DECL_CONSTRUCTOR_P (convfn))
4197 expr = build_cplus_new (totype, expr);
4199 /* The result of the call is then used to direct-initialize the object
4200 that is the destination of the copy-initialization. [dcl.init]
4202 Note that this step is not reflected in the conversion sequence;
4203 it affects the semantics when we actually perform the
4204 conversion, but is not considered during overload resolution.
4206 If the target is a class, that means call a ctor. */
4207 if (IS_AGGR_TYPE (totype)
4208 && (inner >= 0 || !lvalue_p (expr)))
4210 savew = warningcount, savee = errorcount;
4211 expr = build_special_member_call
4212 (NULL_TREE, complete_ctor_identifier,
4213 build_tree_list (NULL_TREE, expr), TYPE_BINFO (totype),
4214 /* Core issue 84, now a DR, says that we don't allow UDCs
4215 for these args (which deliberately breaks copy-init of an
4216 auto_ptr<Base> from an auto_ptr<Derived>). */
4217 LOOKUP_NORMAL|LOOKUP_ONLYCONVERTING|LOOKUP_NO_CONVERSION);
4219 /* Tell the user where this failing constructor call came from. */
4222 if (warningcount > savew)
4224 (" initializing argument %P of `%D' from result of `%D'",
4225 argnum, fn, convfn);
4226 else if (errorcount > savee)
4228 (" initializing argument %P of `%D' from result of `%D'",
4229 argnum, fn, convfn);
4233 if (warningcount > savew)
4234 warning (" initializing temporary from result of `%D'",
4236 else if (errorcount > savee)
4237 error (" initializing temporary from result of `%D'",
4240 expr = build_cplus_new (totype, expr);
4245 if (type_unknown_p (expr))
4246 expr = instantiate_type (totype, expr, tf_error | tf_warning);
4247 /* Convert a non-array constant variable to its underlying value, unless we
4248 are about to bind it to a reference, in which case we need to
4249 leave it as an lvalue. */
4251 && TREE_CODE (TREE_TYPE (expr)) != ARRAY_TYPE)
4252 expr = decl_constant_value (expr);
4255 /* Call build_user_type_conversion again for the error. */
4256 return build_user_type_conversion
4257 (totype, TREE_OPERAND (convs, 0), LOOKUP_NORMAL);
4263 expr = convert_like_real (TREE_OPERAND (convs, 0), expr, fn, argnum,
4264 TREE_CODE (convs) == REF_BIND ? -1 : 1,
4265 /*issue_conversion_warnings=*/false);
4266 if (expr == error_mark_node)
4267 return error_mark_node;
4269 switch (TREE_CODE (convs))
4272 if (! IS_AGGR_TYPE (totype))
4274 /* else fall through */
4276 if (TREE_CODE (convs) == BASE_CONV && !NEED_TEMPORARY_P (convs))
4278 /* We are going to bind a reference directly to a base-class
4279 subobject of EXPR. */
4280 tree base_ptr = build_pointer_type (totype);
4282 /* Build an expression for `*((base*) &expr)'. */
4283 expr = build_unary_op (ADDR_EXPR, expr, 0);
4284 expr = perform_implicit_conversion (base_ptr, expr);
4285 expr = build_indirect_ref (expr, "implicit conversion");
4289 /* Copy-initialization where the cv-unqualified version of the source
4290 type is the same class as, or a derived class of, the class of the
4291 destination [is treated as direct-initialization]. [dcl.init] */
4292 savew = warningcount, savee = errorcount;
4293 expr = build_special_member_call (NULL_TREE, complete_ctor_identifier,
4294 build_tree_list (NULL_TREE, expr),
4295 TYPE_BINFO (totype),
4296 LOOKUP_NORMAL|LOOKUP_ONLYCONVERTING);
4299 if (warningcount > savew)
4300 warning (" initializing argument %P of `%D'", argnum, fn);
4301 else if (errorcount > savee)
4302 error (" initializing argument %P of `%D'", argnum, fn);
4304 return build_cplus_new (totype, expr);
4308 tree ref_type = totype;
4310 /* If necessary, create a temporary. */
4311 if (NEED_TEMPORARY_P (convs) || !non_cast_lvalue_p (expr))
4313 tree type = TREE_TYPE (TREE_OPERAND (convs, 0));
4314 expr = build_target_expr_with_type (expr, type);
4317 /* Take the address of the thing to which we will bind the
4319 expr = build_unary_op (ADDR_EXPR, expr, 1);
4320 if (expr == error_mark_node)
4321 return error_mark_node;
4323 /* Convert it to a pointer to the type referred to by the
4324 reference. This will adjust the pointer if a derived to
4325 base conversion is being performed. */
4326 expr = cp_convert (build_pointer_type (TREE_TYPE (ref_type)),
4328 /* Convert the pointer to the desired reference type. */
4329 return build_nop (ref_type, expr);
4333 return decay_conversion (expr);
4336 /* Warn about deprecated conversion if appropriate. */
4337 string_conv_p (totype, expr, 1);
4343 return ocp_convert (totype, expr, CONV_IMPLICIT,
4344 LOOKUP_NORMAL|LOOKUP_NO_CONVERSION);
4347 /* Build a call to __builtin_trap which can be used in an expression. */
4350 call_builtin_trap (void)
4352 tree fn = get_identifier ("__builtin_trap");
4353 if (IDENTIFIER_GLOBAL_VALUE (fn))
4354 fn = IDENTIFIER_GLOBAL_VALUE (fn);
4358 fn = build_call (fn, NULL_TREE);
4359 fn = build (COMPOUND_EXPR, integer_type_node, fn, integer_zero_node);
4363 /* ARG is being passed to a varargs function. Perform any conversions
4364 required. Array/function to pointer decay must have already happened.
4365 Return the converted value. */
4368 convert_arg_to_ellipsis (tree arg)
4370 if (TREE_CODE (TREE_TYPE (arg)) == REAL_TYPE
4371 && (TYPE_PRECISION (TREE_TYPE (arg))
4372 < TYPE_PRECISION (double_type_node)))
4373 /* Convert `float' to `double'. */
4374 arg = cp_convert (double_type_node, arg);
4376 /* Convert `short' and `char' to full-size `int'. */
4377 arg = default_conversion (arg);
4379 arg = require_complete_type (arg);
4381 if (arg != error_mark_node && ! pod_type_p (TREE_TYPE (arg)))
4383 /* Undefined behavior [expr.call] 5.2.2/7. We used to just warn
4384 here and do a bitwise copy, but now cp_expr_size will abort if we
4386 warning ("cannot pass objects of non-POD type `%#T' through `...'; \
4387 call will abort at runtime",
4389 arg = call_builtin_trap ();
4395 /* va_arg (EXPR, TYPE) is a builtin. Make sure it is not abused. */
4398 build_x_va_arg (tree expr, tree type)
4400 if (processing_template_decl)
4401 return build_min (VA_ARG_EXPR, type, expr);
4403 type = complete_type_or_else (type, NULL_TREE);
4405 if (expr == error_mark_node || !type)
4406 return error_mark_node;
4408 if (! pod_type_p (type))
4410 /* Undefined behavior [expr.call] 5.2.2/7. */
4411 warning ("cannot receive objects of non-POD type `%#T' through `...'",
4415 return build_va_arg (expr, type);
4418 /* TYPE has been given to va_arg. Apply the default conversions which
4419 would have happened when passed via ellipsis. Return the promoted
4420 type, or the passed type if there is no change. */
4423 cxx_type_promotes_to (tree type)
4427 if (TREE_CODE (type) == ARRAY_TYPE)
4428 return build_pointer_type (TREE_TYPE (type));
4430 if (TREE_CODE (type) == FUNCTION_TYPE)
4431 return build_pointer_type (type);
4433 promote = type_promotes_to (type);
4434 if (same_type_p (type, promote))
4440 /* ARG is a default argument expression being passed to a parameter of
4441 the indicated TYPE, which is a parameter to FN. Do any required
4442 conversions. Return the converted value. */
4445 convert_default_arg (tree type, tree arg, tree fn, int parmnum)
4447 /* If the ARG is an unparsed default argument expression, the
4448 conversion cannot be performed. */
4449 if (TREE_CODE (arg) == DEFAULT_ARG)
4451 error ("the default argument for parameter %d of `%D' has "
4452 "not yet been parsed",
4454 return error_mark_node;
4457 if (fn && DECL_TEMPLATE_INFO (fn))
4458 arg = tsubst_default_argument (fn, type, arg);
4460 arg = break_out_target_exprs (arg);
4462 if (TREE_CODE (arg) == CONSTRUCTOR)
4464 arg = digest_init (type, arg, 0);
4465 arg = convert_for_initialization (0, type, arg, LOOKUP_NORMAL,
4466 "default argument", fn, parmnum);
4470 /* This could get clobbered by the following call. */
4471 if (TREE_HAS_CONSTRUCTOR (arg))
4472 arg = copy_node (arg);
4474 arg = convert_for_initialization (0, type, arg, LOOKUP_NORMAL,
4475 "default argument", fn, parmnum);
4476 arg = convert_for_arg_passing (type, arg);
4482 /* Returns the type which will really be used for passing an argument of
4486 type_passed_as (tree type)
4488 /* Pass classes with copy ctors by invisible reference. */
4489 if (TREE_ADDRESSABLE (type))
4490 type = build_reference_type (type);
4491 else if (PROMOTE_PROTOTYPES
4492 && INTEGRAL_TYPE_P (type)
4493 && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
4494 type = integer_type_node;
4499 /* Actually perform the appropriate conversion. */
4502 convert_for_arg_passing (tree type, tree val)
4504 if (val == error_mark_node)
4506 /* Pass classes with copy ctors by invisible reference. */
4507 else if (TREE_ADDRESSABLE (type))
4508 val = build1 (ADDR_EXPR, build_reference_type (type), val);
4509 else if (PROMOTE_PROTOTYPES
4510 && INTEGRAL_TYPE_P (type)
4511 && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
4512 val = default_conversion (val);
4516 /* Subroutine of the various build_*_call functions. Overload resolution
4517 has chosen a winning candidate CAND; build up a CALL_EXPR accordingly.
4518 ARGS is a TREE_LIST of the unconverted arguments to the call. FLAGS is a
4519 bitmask of various LOOKUP_* flags which apply to the call itself. */
4522 build_over_call (struct z_candidate *cand, int flags)
4525 tree args = cand->args;
4526 tree convs = cand->convs;
4527 tree converted_args = NULL_TREE;
4528 tree parm = TYPE_ARG_TYPES (TREE_TYPE (fn));
4529 tree conv, arg, val;
4533 /* Give any warnings we noticed during overload resolution. */
4535 for (val = cand->warnings; val; val = TREE_CHAIN (val))
4536 joust (cand, WRAPPER_ZC (TREE_VALUE (val)), 1);
4538 if (DECL_FUNCTION_MEMBER_P (fn))
4539 perform_or_defer_access_check (cand->access_path, fn);
4541 if (args && TREE_CODE (args) != TREE_LIST)
4542 args = build_tree_list (NULL_TREE, args);
4545 /* The implicit parameters to a constructor are not considered by overload
4546 resolution, and must be of the proper type. */
4547 if (DECL_CONSTRUCTOR_P (fn))
4549 converted_args = tree_cons (NULL_TREE, TREE_VALUE (arg), converted_args);
4550 arg = TREE_CHAIN (arg);
4551 parm = TREE_CHAIN (parm);
4552 if (DECL_HAS_IN_CHARGE_PARM_P (fn))
4553 /* We should never try to call the abstract constructor. */
4555 if (DECL_HAS_VTT_PARM_P (fn))
4557 converted_args = tree_cons
4558 (NULL_TREE, TREE_VALUE (arg), converted_args);
4559 arg = TREE_CHAIN (arg);
4560 parm = TREE_CHAIN (parm);
4563 /* Bypass access control for 'this' parameter. */
4564 else if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
4566 tree parmtype = TREE_VALUE (parm);
4567 tree argtype = TREE_TYPE (TREE_VALUE (arg));
4571 if (ICS_BAD_FLAG (TREE_VEC_ELT (convs, i)))
4572 pedwarn ("passing `%T' as `this' argument of `%#D' discards qualifiers",
4573 TREE_TYPE (argtype), fn);
4575 /* [class.mfct.nonstatic]: If a nonstatic member function of a class
4576 X is called for an object that is not of type X, or of a type
4577 derived from X, the behavior is undefined.
4579 So we can assume that anything passed as 'this' is non-null, and
4580 optimize accordingly. */
4581 my_friendly_assert (TREE_CODE (parmtype) == POINTER_TYPE, 19990811);
4582 /* Convert to the base in which the function was declared. */
4583 my_friendly_assert (cand->conversion_path != NULL_TREE, 20020730);
4584 converted_arg = build_base_path (PLUS_EXPR,
4586 cand->conversion_path,
4588 /* If fn was found by a using declaration, the conversion path
4589 will be to the derived class, not the base declaring fn. We
4590 must convert from derived to base. */
4591 base_binfo = lookup_base (TREE_TYPE (TREE_TYPE (converted_arg)),
4592 TREE_TYPE (parmtype), ba_ignore, NULL);
4594 converted_arg = build_base_path (PLUS_EXPR, converted_arg,
4597 converted_args = tree_cons (NULL_TREE, converted_arg, converted_args);
4598 parm = TREE_CHAIN (parm);
4599 arg = TREE_CHAIN (arg);
4605 parm = TREE_CHAIN (parm), arg = TREE_CHAIN (arg), ++i)
4607 tree type = TREE_VALUE (parm);
4609 conv = TREE_VEC_ELT (convs, i);
4610 val = convert_like_with_context
4611 (conv, TREE_VALUE (arg), fn, i - is_method);
4613 val = convert_for_arg_passing (type, val);
4614 converted_args = tree_cons (NULL_TREE, val, converted_args);
4617 /* Default arguments */
4618 for (; parm && parm != void_list_node; parm = TREE_CHAIN (parm), i++)
4620 = tree_cons (NULL_TREE,
4621 convert_default_arg (TREE_VALUE (parm),
4622 TREE_PURPOSE (parm),
4627 for (; arg; arg = TREE_CHAIN (arg))
4629 = tree_cons (NULL_TREE,
4630 convert_arg_to_ellipsis (TREE_VALUE (arg)),
4633 converted_args = nreverse (converted_args);
4636 check_function_format (NULL, TYPE_ATTRIBUTES (TREE_TYPE (fn)),
4639 /* Avoid actually calling copy constructors and copy assignment operators,
4642 if (! flag_elide_constructors)
4643 /* Do things the hard way. */;
4644 else if (TREE_VEC_LENGTH (convs) == 1
4645 && DECL_COPY_CONSTRUCTOR_P (fn))
4648 arg = skip_artificial_parms_for (fn, converted_args);
4649 arg = TREE_VALUE (arg);
4651 /* Pull out the real argument, disregarding const-correctness. */
4653 while (TREE_CODE (targ) == NOP_EXPR
4654 || TREE_CODE (targ) == NON_LVALUE_EXPR
4655 || TREE_CODE (targ) == CONVERT_EXPR)
4656 targ = TREE_OPERAND (targ, 0);
4657 if (TREE_CODE (targ) == ADDR_EXPR)
4659 targ = TREE_OPERAND (targ, 0);
4660 if (!same_type_ignoring_top_level_qualifiers_p
4661 (TREE_TYPE (TREE_TYPE (arg)), TREE_TYPE (targ)))
4670 arg = build_indirect_ref (arg, 0);
4672 /* [class.copy]: the copy constructor is implicitly defined even if
4673 the implementation elided its use. */
4674 if (TYPE_HAS_COMPLEX_INIT_REF (DECL_CONTEXT (fn)))
4677 /* If we're creating a temp and we already have one, don't create a
4678 new one. If we're not creating a temp but we get one, use
4679 INIT_EXPR to collapse the temp into our target. Otherwise, if the
4680 ctor is trivial, do a bitwise copy with a simple TARGET_EXPR for a
4681 temp or an INIT_EXPR otherwise. */
4682 if (integer_zerop (TREE_VALUE (args)))
4684 if (TREE_CODE (arg) == TARGET_EXPR)
4686 else if (TYPE_HAS_TRIVIAL_INIT_REF (DECL_CONTEXT (fn)))
4687 return build_target_expr_with_type (arg, DECL_CONTEXT (fn));
4689 else if (TREE_CODE (arg) == TARGET_EXPR
4690 || TYPE_HAS_TRIVIAL_INIT_REF (DECL_CONTEXT (fn)))
4693 tree to = stabilize_reference
4694 (build_indirect_ref (TREE_VALUE (args), 0));
4696 val = build (INIT_EXPR, DECL_CONTEXT (fn), to, arg);
4697 address = build_unary_op (ADDR_EXPR, val, 0);
4698 /* Avoid a warning about this expression, if the address is
4700 TREE_USED (address) = 1;
4704 else if (DECL_OVERLOADED_OPERATOR_P (fn) == NOP_EXPR
4706 && TYPE_HAS_TRIVIAL_ASSIGN_REF (DECL_CONTEXT (fn)))
4708 tree to = stabilize_reference
4709 (build_indirect_ref (TREE_VALUE (converted_args), 0));
4711 arg = build_indirect_ref (TREE_VALUE (TREE_CHAIN (converted_args)), 0);
4712 val = build (MODIFY_EXPR, TREE_TYPE (to), to, arg);
4718 if (DECL_VINDEX (fn) && (flags & LOOKUP_NONVIRTUAL) == 0)
4720 tree t, *p = &TREE_VALUE (converted_args);
4721 tree binfo = lookup_base (TREE_TYPE (TREE_TYPE (*p)),
4724 my_friendly_assert (binfo && binfo != error_mark_node, 20010730);
4726 *p = build_base_path (PLUS_EXPR, *p, binfo, 1);
4727 if (TREE_SIDE_EFFECTS (*p))
4728 *p = save_expr (*p);
4729 t = build_pointer_type (TREE_TYPE (fn));
4730 if (DECL_CONTEXT (fn) && TYPE_JAVA_INTERFACE (DECL_CONTEXT (fn)))
4731 fn = build_java_interface_fn_ref (fn, *p);
4733 fn = build_vfn_ref (build_indirect_ref (*p, 0), DECL_VINDEX (fn));
4736 else if (DECL_INLINE (fn))
4737 fn = inline_conversion (fn);
4739 fn = build_addr_func (fn);
4741 return build_cxx_call (fn, args, converted_args);
4744 /* Build and return a call to FN, using the the CONVERTED_ARGS. ARGS
4745 gives the original form of the arguments. This function performs
4746 no overload resolution, conversion, or other high-level
4750 build_cxx_call(tree fn, tree args, tree converted_args)
4754 /* Recognize certain built-in functions so we can make tree-codes
4755 other than CALL_EXPR. We do this when it enables fold-const.c
4756 to do something useful. */
4757 if (TREE_CODE (fn) == ADDR_EXPR
4758 && TREE_CODE (TREE_OPERAND (fn, 0)) == FUNCTION_DECL
4759 && DECL_BUILT_IN (TREE_OPERAND (fn, 0)))
4762 exp = expand_tree_builtin (TREE_OPERAND (fn, 0), args, converted_args);
4767 fn = build_call (fn, converted_args);
4769 /* If this call might throw an exception, note that fact. */
4770 fndecl = get_callee_fndecl (fn);
4771 if ((!fndecl || !TREE_NOTHROW (fndecl))
4772 && at_function_scope_p ()
4774 cp_function_chain->can_throw = 1;
4776 /* Some built-in function calls will be evaluated at compile-time in
4780 if (VOID_TYPE_P (TREE_TYPE (fn)))
4783 fn = require_complete_type (fn);
4784 if (fn == error_mark_node)
4785 return error_mark_node;
4787 if (IS_AGGR_TYPE (TREE_TYPE (fn)))
4788 fn = build_cplus_new (TREE_TYPE (fn), fn);
4789 return convert_from_reference (fn);
4792 static GTY(()) tree java_iface_lookup_fn;
4794 /* Make an expression which yields the address of the Java interface
4795 method FN. This is achieved by generating a call to libjava's
4796 _Jv_LookupInterfaceMethodIdx(). */
4799 build_java_interface_fn_ref (tree fn, tree instance)
4801 tree lookup_args, lookup_fn, method, idx;
4802 tree klass_ref, iface, iface_ref;
4805 if (!java_iface_lookup_fn)
4807 tree endlink = build_void_list_node ();
4808 tree t = tree_cons (NULL_TREE, ptr_type_node,
4809 tree_cons (NULL_TREE, ptr_type_node,
4810 tree_cons (NULL_TREE, java_int_type_node,
4812 java_iface_lookup_fn
4813 = builtin_function ("_Jv_LookupInterfaceMethodIdx",
4814 build_function_type (ptr_type_node, t),
4815 0, NOT_BUILT_IN, NULL, NULL_TREE);
4818 /* Look up the pointer to the runtime java.lang.Class object for `instance'.
4819 This is the first entry in the vtable. */
4820 klass_ref = build_vtbl_ref (build_indirect_ref (instance, 0),
4823 /* Get the java.lang.Class pointer for the interface being called. */
4824 iface = DECL_CONTEXT (fn);
4825 iface_ref = lookup_field (iface, get_identifier ("class$"), 0, false);
4826 if (!iface_ref || TREE_CODE (iface_ref) != VAR_DECL
4827 || DECL_CONTEXT (iface_ref) != iface)
4829 error ("could not find class$ field in java interface type `%T'",
4831 return error_mark_node;
4833 iface_ref = build1 (ADDR_EXPR, build_pointer_type (iface), iface_ref);
4835 /* Determine the itable index of FN. */
4837 for (method = TYPE_METHODS (iface); method; method = TREE_CHAIN (method))
4839 if (!DECL_VIRTUAL_P (method))
4845 idx = build_int_2 (i, 0);
4847 lookup_args = tree_cons (NULL_TREE, klass_ref,
4848 tree_cons (NULL_TREE, iface_ref,
4849 build_tree_list (NULL_TREE, idx)));
4850 lookup_fn = build1 (ADDR_EXPR,
4851 build_pointer_type (TREE_TYPE (java_iface_lookup_fn)),
4852 java_iface_lookup_fn);
4853 return build (CALL_EXPR, ptr_type_node, lookup_fn, lookup_args, NULL_TREE);
4856 /* Returns the value to use for the in-charge parameter when making a
4857 call to a function with the indicated NAME. */
4860 in_charge_arg_for_name (tree name)
4862 if (name == base_ctor_identifier
4863 || name == base_dtor_identifier)
4864 return integer_zero_node;
4865 else if (name == complete_ctor_identifier)
4866 return integer_one_node;
4867 else if (name == complete_dtor_identifier)
4868 return integer_two_node;
4869 else if (name == deleting_dtor_identifier)
4870 return integer_three_node;
4872 /* This function should only be called with one of the names listed
4878 /* Build a call to a constructor, destructor, or an assignment
4879 operator for INSTANCE, an expression with class type. NAME
4880 indicates the special member function to call; ARGS are the
4881 arguments. BINFO indicates the base of INSTANCE that is to be
4882 passed as the `this' parameter to the member function called.
4884 FLAGS are the LOOKUP_* flags to use when processing the call.
4886 If NAME indicates a complete object constructor, INSTANCE may be
4887 NULL_TREE. In this case, the caller will call build_cplus_new to
4888 store the newly constructed object into a VAR_DECL. */
4891 build_special_member_call (tree instance, tree name, tree args,
4892 tree binfo, int flags)
4895 /* The type of the subobject to be constructed or destroyed. */
4898 my_friendly_assert (name == complete_ctor_identifier
4899 || name == base_ctor_identifier
4900 || name == complete_dtor_identifier
4901 || name == base_dtor_identifier
4902 || name == deleting_dtor_identifier
4903 || name == ansi_assopname (NOP_EXPR),
4905 my_friendly_assert (binfo != NULL_TREE, 20020712);
4907 class_type = BINFO_TYPE (binfo);
4909 /* Handle the special case where INSTANCE is NULL_TREE. */
4910 if (name == complete_ctor_identifier && !instance)
4912 instance = build_int_2 (0, 0);
4913 TREE_TYPE (instance) = build_pointer_type (class_type);
4914 instance = build1 (INDIRECT_REF, class_type, instance);
4916 else if (name == complete_dtor_identifier
4917 || name == base_dtor_identifier
4918 || name == deleting_dtor_identifier)
4919 my_friendly_assert (args == NULL_TREE, 20020712);
4921 my_friendly_assert (instance != NULL_TREE, 20020712);
4923 /* Resolve the name. */
4924 if (!complete_type_or_else (BINFO_TYPE (binfo), NULL_TREE))
4925 return error_mark_node;
4927 fns = lookup_fnfields (binfo, name, 1);
4929 /* When making a call to a constructor or destructor for a subobject
4930 that uses virtual base classes, pass down a pointer to a VTT for
4932 if ((name == base_ctor_identifier
4933 || name == base_dtor_identifier)
4934 && TYPE_USES_VIRTUAL_BASECLASSES (class_type))
4939 /* If the current function is a complete object constructor
4940 or destructor, then we fetch the VTT directly.
4941 Otherwise, we look it up using the VTT we were given. */
4942 vtt = TREE_CHAIN (CLASSTYPE_VTABLES (current_class_type));
4943 vtt = decay_conversion (vtt);
4944 vtt = build (COND_EXPR, TREE_TYPE (vtt),
4945 build (EQ_EXPR, boolean_type_node,
4946 current_in_charge_parm, integer_zero_node),
4949 my_friendly_assert (BINFO_SUBVTT_INDEX (binfo), 20010110);
4950 sub_vtt = build (PLUS_EXPR, TREE_TYPE (vtt), vtt,
4951 BINFO_SUBVTT_INDEX (binfo));
4953 args = tree_cons (NULL_TREE, sub_vtt, args);
4956 return build_new_method_call (instance, fns, args, binfo, flags);
4959 /* Return the NAME, as a C string. The NAME indicates a function that
4960 is a member of TYPE. *FREE_P is set to true if the caller must
4961 free the memory returned.
4963 Rather than go through all of this, we should simply set the names
4964 of constructors and destructors appropriately, and dispense with
4965 ctor_identifier, dtor_identifier, etc. */
4968 name_as_c_string (tree name, tree type, bool *free_p)
4972 /* Assume that we will not allocate memory. */
4974 /* Constructors and destructors are special. */
4975 if (IDENTIFIER_CTOR_OR_DTOR_P (name))
4978 = (char *) IDENTIFIER_POINTER (constructor_name (type));
4979 /* For a destructor, add the '~'. */
4980 if (name == complete_dtor_identifier
4981 || name == base_dtor_identifier
4982 || name == deleting_dtor_identifier)
4984 pretty_name = concat ("~", pretty_name, NULL);
4985 /* Remember that we need to free the memory allocated. */
4990 pretty_name = (char *) IDENTIFIER_POINTER (name);
4995 /* Build a call to "INSTANCE.FN (ARGS)". */
4998 build_new_method_call (tree instance, tree fns, tree args,
4999 tree conversion_path, int flags)
5001 struct z_candidate *candidates = 0, *cand;
5002 tree explicit_targs = NULL_TREE;
5003 tree basetype = NULL_TREE;
5006 tree mem_args = NULL_TREE, instance_ptr;
5012 int template_only = 0;
5015 my_friendly_assert (instance != NULL_TREE, 20020729);
5017 if (error_operand_p (instance)
5018 || error_operand_p (fns)
5019 || args == error_mark_node)
5020 return error_mark_node;
5022 /* Process the argument list. */
5024 args = resolve_args (args);
5025 if (args == error_mark_node)
5026 return error_mark_node;
5028 if (TREE_CODE (instance) == OFFSET_REF)
5029 instance = resolve_offset_ref (instance);
5030 if (TREE_CODE (TREE_TYPE (instance)) == REFERENCE_TYPE)
5031 instance = convert_from_reference (instance);
5032 basetype = TYPE_MAIN_VARIANT (TREE_TYPE (instance));
5033 instance_ptr = build_this (instance);
5035 if (!BASELINK_P (fns))
5037 call = build_field_call (instance_ptr, fns, args);
5040 error ("call to non-function `%D'", fns);
5041 return error_mark_node;
5044 if (!conversion_path)
5045 conversion_path = BASELINK_BINFO (fns);
5046 access_binfo = BASELINK_ACCESS_BINFO (fns);
5047 optype = BASELINK_OPTYPE (fns);
5048 fns = BASELINK_FUNCTIONS (fns);
5050 if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
5052 explicit_targs = TREE_OPERAND (fns, 1);
5053 fns = TREE_OPERAND (fns, 0);
5057 my_friendly_assert (TREE_CODE (fns) == FUNCTION_DECL
5058 || TREE_CODE (fns) == TEMPLATE_DECL
5059 || TREE_CODE (fns) == OVERLOAD,
5062 /* XXX this should be handled before we get here. */
5063 if (! IS_AGGR_TYPE (basetype))
5065 if ((flags & LOOKUP_COMPLAIN) && basetype != error_mark_node)
5066 error ("request for member `%D' in `%E', which is of non-aggregate type `%T'",
5067 fns, instance, basetype);
5069 return error_mark_node;
5072 fn = get_first_fn (fns);
5073 name = DECL_NAME (fn);
5075 if (IDENTIFIER_CTOR_OR_DTOR_P (name))
5077 /* Callers should explicitly indicate whether they want to construct
5078 the complete object or just the part without virtual bases. */
5079 my_friendly_assert (name != ctor_identifier, 20000408);
5080 /* Similarly for destructors. */
5081 my_friendly_assert (name != dtor_identifier, 20000408);
5084 /* It's OK to call destructors on cv-qualified objects. Therefore,
5085 convert the INSTANCE_PTR to the unqualified type, if necessary. */
5086 if (DECL_DESTRUCTOR_P (fn))
5088 tree type = build_pointer_type (basetype);
5089 if (!same_type_p (type, TREE_TYPE (instance_ptr)))
5090 instance_ptr = build_nop (type, instance_ptr);
5093 class_type = (conversion_path ? BINFO_TYPE (conversion_path) : NULL_TREE);
5094 mem_args = tree_cons (NULL_TREE, instance_ptr, args);
5096 for (fn = fns; fn; fn = OVL_NEXT (fn))
5098 tree t = OVL_CURRENT (fn);
5101 /* We can end up here for copy-init of same or base class. */
5102 if ((flags & LOOKUP_ONLYCONVERTING)
5103 && DECL_NONCONVERTING_P (t))
5106 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (t))
5107 this_arglist = mem_args;
5109 this_arglist = args;
5111 if (TREE_CODE (t) == TEMPLATE_DECL)
5112 /* A member template. */
5113 add_template_candidate (&candidates, t,
5116 this_arglist, optype,
5121 else if (! template_only)
5122 add_function_candidate (&candidates, t,
5130 candidates = splice_viable (candidates, pedantic, &any_viable_p);
5133 /* XXX will LOOKUP_SPECULATIVELY be needed when this is done? */
5134 if (flags & LOOKUP_SPECULATIVELY)
5136 if (!COMPLETE_TYPE_P (basetype))
5137 cxx_incomplete_type_error (instance_ptr, basetype);
5143 pretty_name = name_as_c_string (name, basetype, &free_p);
5144 error ("no matching function for call to `%T::%s(%A)%#V'",
5145 basetype, pretty_name, user_args,
5146 TREE_TYPE (TREE_TYPE (instance_ptr)));
5150 print_z_candidates (candidates);
5151 return error_mark_node;
5154 cand = tourney (candidates);
5160 pretty_name = name_as_c_string (name, basetype, &free_p);
5161 error ("call of overloaded `%s(%A)' is ambiguous", pretty_name,
5163 print_z_candidates (candidates);
5166 return error_mark_node;
5169 if (DECL_PURE_VIRTUAL_P (cand->fn)
5170 && instance == current_class_ref
5171 && (DECL_CONSTRUCTOR_P (current_function_decl)
5172 || DECL_DESTRUCTOR_P (current_function_decl))
5173 && ! (flags & LOOKUP_NONVIRTUAL)
5174 && value_member (cand->fn, CLASSTYPE_PURE_VIRTUALS (basetype)))
5175 error ((DECL_CONSTRUCTOR_P (current_function_decl) ?
5176 "abstract virtual `%#D' called from constructor"
5177 : "abstract virtual `%#D' called from destructor"),
5179 if (TREE_CODE (TREE_TYPE (cand->fn)) == METHOD_TYPE
5180 && is_dummy_object (instance_ptr))
5182 error ("cannot call member function `%D' without object", cand->fn);
5183 return error_mark_node;
5186 if (DECL_VINDEX (cand->fn) && ! (flags & LOOKUP_NONVIRTUAL)
5187 && resolves_to_fixed_type_p (instance, 0))
5188 flags |= LOOKUP_NONVIRTUAL;
5190 if (TREE_CODE (TREE_TYPE (cand->fn)) == METHOD_TYPE)
5191 call = build_over_call (cand, flags);
5194 call = build_over_call (cand, flags);
5195 /* In an expression of the form `a->f()' where `f' turns out to
5196 be a static member function, `a' is none-the-less evaluated. */
5197 if (!is_dummy_object (instance_ptr) && TREE_SIDE_EFFECTS (instance))
5198 call = build (COMPOUND_EXPR, TREE_TYPE (call), instance, call);
5204 /* Returns true iff standard conversion sequence ICS1 is a proper
5205 subsequence of ICS2. */
5208 is_subseq (tree ics1, tree ics2)
5210 /* We can assume that a conversion of the same code
5211 between the same types indicates a subsequence since we only get
5212 here if the types we are converting from are the same. */
5214 while (TREE_CODE (ics1) == RVALUE_CONV
5215 || TREE_CODE (ics1) == LVALUE_CONV)
5216 ics1 = TREE_OPERAND (ics1, 0);
5220 while (TREE_CODE (ics2) == RVALUE_CONV
5221 || TREE_CODE (ics2) == LVALUE_CONV)
5222 ics2 = TREE_OPERAND (ics2, 0);
5224 if (TREE_CODE (ics2) == USER_CONV
5225 || TREE_CODE (ics2) == AMBIG_CONV
5226 || TREE_CODE (ics2) == IDENTITY_CONV)
5227 /* At this point, ICS1 cannot be a proper subsequence of
5228 ICS2. We can get a USER_CONV when we are comparing the
5229 second standard conversion sequence of two user conversion
5233 ics2 = TREE_OPERAND (ics2, 0);
5235 if (TREE_CODE (ics2) == TREE_CODE (ics1)
5236 && same_type_p (TREE_TYPE (ics2), TREE_TYPE (ics1))
5237 && same_type_p (TREE_TYPE (TREE_OPERAND (ics2, 0)),
5238 TREE_TYPE (TREE_OPERAND (ics1, 0))))
5243 /* Returns nonzero iff DERIVED is derived from BASE. The inputs may
5244 be any _TYPE nodes. */
5247 is_properly_derived_from (tree derived, tree base)
5249 if (!IS_AGGR_TYPE_CODE (TREE_CODE (derived))
5250 || !IS_AGGR_TYPE_CODE (TREE_CODE (base)))
5253 /* We only allow proper derivation here. The DERIVED_FROM_P macro
5254 considers every class derived from itself. */
5255 return (!same_type_ignoring_top_level_qualifiers_p (derived, base)
5256 && DERIVED_FROM_P (base, derived));
5259 /* We build the ICS for an implicit object parameter as a pointer
5260 conversion sequence. However, such a sequence should be compared
5261 as if it were a reference conversion sequence. If ICS is the
5262 implicit conversion sequence for an implicit object parameter,
5263 modify it accordingly. */
5266 maybe_handle_implicit_object (tree *ics)
5268 if (ICS_THIS_FLAG (*ics))
5270 /* [over.match.funcs]
5272 For non-static member functions, the type of the
5273 implicit object parameter is "reference to cv X"
5274 where X is the class of which the function is a
5275 member and cv is the cv-qualification on the member
5276 function declaration. */
5278 tree reference_type;
5280 /* The `this' parameter is a pointer to a class type. Make the
5281 implict conversion talk about a reference to that same class
5283 reference_type = TREE_TYPE (TREE_TYPE (*ics));
5284 reference_type = build_reference_type (reference_type);
5286 if (TREE_CODE (t) == QUAL_CONV)
5287 t = TREE_OPERAND (t, 0);
5288 if (TREE_CODE (t) == PTR_CONV)
5289 t = TREE_OPERAND (t, 0);
5290 t = build1 (IDENTITY_CONV, TREE_TYPE (TREE_TYPE (t)), NULL_TREE);
5291 t = direct_reference_binding (reference_type, t);
5296 /* If *ICS is a REF_BIND set *ICS to the remainder of the conversion,
5297 and return the type to which the reference refers. Otherwise,
5298 leave *ICS unchanged and return NULL_TREE. */
5301 maybe_handle_ref_bind (tree *ics)
5303 if (TREE_CODE (*ics) == REF_BIND)
5305 tree old_ics = *ics;
5306 tree type = TREE_TYPE (TREE_TYPE (old_ics));
5307 *ics = TREE_OPERAND (old_ics, 0);
5308 ICS_USER_FLAG (*ics) = ICS_USER_FLAG (old_ics);
5309 ICS_BAD_FLAG (*ics) = ICS_BAD_FLAG (old_ics);
5316 /* Compare two implicit conversion sequences according to the rules set out in
5317 [over.ics.rank]. Return values:
5319 1: ics1 is better than ics2
5320 -1: ics2 is better than ics1
5321 0: ics1 and ics2 are indistinguishable */
5324 compare_ics (tree ics1, tree ics2)
5330 tree deref_from_type1 = NULL_TREE;
5331 tree deref_from_type2 = NULL_TREE;
5332 tree deref_to_type1 = NULL_TREE;
5333 tree deref_to_type2 = NULL_TREE;
5336 /* REF_BINDING is nonzero if the result of the conversion sequence
5337 is a reference type. In that case TARGET_TYPE is the
5338 type referred to by the reference. */
5342 /* Handle implicit object parameters. */
5343 maybe_handle_implicit_object (&ics1);
5344 maybe_handle_implicit_object (&ics2);
5346 /* Handle reference parameters. */
5347 target_type1 = maybe_handle_ref_bind (&ics1);
5348 target_type2 = maybe_handle_ref_bind (&ics2);
5352 When comparing the basic forms of implicit conversion sequences (as
5353 defined in _over.best.ics_)
5355 --a standard conversion sequence (_over.ics.scs_) is a better
5356 conversion sequence than a user-defined conversion sequence
5357 or an ellipsis conversion sequence, and
5359 --a user-defined conversion sequence (_over.ics.user_) is a
5360 better conversion sequence than an ellipsis conversion sequence
5361 (_over.ics.ellipsis_). */
5362 rank1 = ICS_RANK (ics1);
5363 rank2 = ICS_RANK (ics2);
5367 else if (rank1 < rank2)
5370 if (rank1 == BAD_RANK)
5372 /* XXX Isn't this an extension? */
5373 /* Both ICS are bad. We try to make a decision based on what
5374 would have happenned if they'd been good. */
5375 if (ICS_USER_FLAG (ics1) > ICS_USER_FLAG (ics2)
5376 || ICS_STD_RANK (ics1) > ICS_STD_RANK (ics2))
5378 else if (ICS_USER_FLAG (ics1) < ICS_USER_FLAG (ics2)
5379 || ICS_STD_RANK (ics1) < ICS_STD_RANK (ics2))
5382 /* We couldn't make up our minds; try to figure it out below. */
5385 if (ICS_ELLIPSIS_FLAG (ics1))
5386 /* Both conversions are ellipsis conversions. */
5389 /* User-defined conversion sequence U1 is a better conversion sequence
5390 than another user-defined conversion sequence U2 if they contain the
5391 same user-defined conversion operator or constructor and if the sec-
5392 ond standard conversion sequence of U1 is better than the second
5393 standard conversion sequence of U2. */
5395 if (ICS_USER_FLAG (ics1))
5399 for (t1 = ics1; TREE_CODE (t1) != USER_CONV; t1 = TREE_OPERAND (t1, 0))
5400 if (TREE_CODE (t1) == AMBIG_CONV)
5402 for (t2 = ics2; TREE_CODE (t2) != USER_CONV; t2 = TREE_OPERAND (t2, 0))
5403 if (TREE_CODE (t2) == AMBIG_CONV)
5406 if (USER_CONV_FN (t1) != USER_CONV_FN (t2))
5409 /* We can just fall through here, after setting up
5410 FROM_TYPE1 and FROM_TYPE2. */
5411 from_type1 = TREE_TYPE (t1);
5412 from_type2 = TREE_TYPE (t2);
5416 /* We're dealing with two standard conversion sequences.
5420 Standard conversion sequence S1 is a better conversion
5421 sequence than standard conversion sequence S2 if
5423 --S1 is a proper subsequence of S2 (comparing the conversion
5424 sequences in the canonical form defined by _over.ics.scs_,
5425 excluding any Lvalue Transformation; the identity
5426 conversion sequence is considered to be a subsequence of
5427 any non-identity conversion sequence */
5430 while (TREE_CODE (from_type1) != IDENTITY_CONV)
5431 from_type1 = TREE_OPERAND (from_type1, 0);
5432 from_type1 = TREE_TYPE (from_type1);
5435 while (TREE_CODE (from_type2) != IDENTITY_CONV)
5436 from_type2 = TREE_OPERAND (from_type2, 0);
5437 from_type2 = TREE_TYPE (from_type2);
5440 if (same_type_p (from_type1, from_type2))
5442 if (is_subseq (ics1, ics2))
5444 if (is_subseq (ics2, ics1))
5447 /* Otherwise, one sequence cannot be a subsequence of the other; they
5448 don't start with the same type. This can happen when comparing the
5449 second standard conversion sequence in two user-defined conversion
5456 --the rank of S1 is better than the rank of S2 (by the rules
5459 Standard conversion sequences are ordered by their ranks: an Exact
5460 Match is a better conversion than a Promotion, which is a better
5461 conversion than a Conversion.
5463 Two conversion sequences with the same rank are indistinguishable
5464 unless one of the following rules applies:
5466 --A conversion that is not a conversion of a pointer, or pointer
5467 to member, to bool is better than another conversion that is such
5470 The ICS_STD_RANK automatically handles the pointer-to-bool rule,
5471 so that we do not have to check it explicitly. */
5472 if (ICS_STD_RANK (ics1) < ICS_STD_RANK (ics2))
5474 else if (ICS_STD_RANK (ics2) < ICS_STD_RANK (ics1))
5477 to_type1 = TREE_TYPE (ics1);
5478 to_type2 = TREE_TYPE (ics2);
5480 if (TYPE_PTR_P (from_type1)
5481 && TYPE_PTR_P (from_type2)
5482 && TYPE_PTR_P (to_type1)
5483 && TYPE_PTR_P (to_type2))
5485 deref_from_type1 = TREE_TYPE (from_type1);
5486 deref_from_type2 = TREE_TYPE (from_type2);
5487 deref_to_type1 = TREE_TYPE (to_type1);
5488 deref_to_type2 = TREE_TYPE (to_type2);
5490 /* The rules for pointers to members A::* are just like the rules
5491 for pointers A*, except opposite: if B is derived from A then
5492 A::* converts to B::*, not vice versa. For that reason, we
5493 switch the from_ and to_ variables here. */
5494 else if (TYPE_PTRMEM_P (from_type1)
5495 && TYPE_PTRMEM_P (from_type2)
5496 && TYPE_PTRMEM_P (to_type1)
5497 && TYPE_PTRMEM_P (to_type2))
5499 deref_to_type1 = TYPE_OFFSET_BASETYPE (TREE_TYPE (from_type1));
5500 deref_to_type2 = TYPE_OFFSET_BASETYPE (TREE_TYPE (from_type2));
5501 deref_from_type1 = TYPE_OFFSET_BASETYPE (TREE_TYPE (to_type1));
5502 deref_from_type2 = TYPE_OFFSET_BASETYPE (TREE_TYPE (to_type2));
5504 else if (TYPE_PTRMEMFUNC_P (from_type1)
5505 && TYPE_PTRMEMFUNC_P (from_type2)
5506 && TYPE_PTRMEMFUNC_P (to_type1)
5507 && TYPE_PTRMEMFUNC_P (to_type2))
5509 deref_to_type1 = TYPE_PTRMEMFUNC_OBJECT_TYPE (from_type1);
5510 deref_to_type2 = TYPE_PTRMEMFUNC_OBJECT_TYPE (from_type2);
5511 deref_from_type1 = TYPE_PTRMEMFUNC_OBJECT_TYPE (to_type1);
5512 deref_from_type2 = TYPE_PTRMEMFUNC_OBJECT_TYPE (to_type2);
5515 if (deref_from_type1 != NULL_TREE
5516 && IS_AGGR_TYPE_CODE (TREE_CODE (deref_from_type1))
5517 && IS_AGGR_TYPE_CODE (TREE_CODE (deref_from_type2)))
5519 /* This was one of the pointer or pointer-like conversions.
5523 --If class B is derived directly or indirectly from class A,
5524 conversion of B* to A* is better than conversion of B* to
5525 void*, and conversion of A* to void* is better than
5526 conversion of B* to void*. */
5527 if (TREE_CODE (deref_to_type1) == VOID_TYPE
5528 && TREE_CODE (deref_to_type2) == VOID_TYPE)
5530 if (is_properly_derived_from (deref_from_type1,
5533 else if (is_properly_derived_from (deref_from_type2,
5537 else if (TREE_CODE (deref_to_type1) == VOID_TYPE
5538 || TREE_CODE (deref_to_type2) == VOID_TYPE)
5540 if (same_type_p (deref_from_type1, deref_from_type2))
5542 if (TREE_CODE (deref_to_type2) == VOID_TYPE)
5544 if (is_properly_derived_from (deref_from_type1,
5548 /* We know that DEREF_TO_TYPE1 is `void' here. */
5549 else if (is_properly_derived_from (deref_from_type1,
5554 else if (IS_AGGR_TYPE_CODE (TREE_CODE (deref_to_type1))
5555 && IS_AGGR_TYPE_CODE (TREE_CODE (deref_to_type2)))
5559 --If class B is derived directly or indirectly from class A
5560 and class C is derived directly or indirectly from B,
5562 --conversion of C* to B* is better than conversion of C* to
5565 --conversion of B* to A* is better than conversion of C* to
5567 if (same_type_p (deref_from_type1, deref_from_type2))
5569 if (is_properly_derived_from (deref_to_type1,
5572 else if (is_properly_derived_from (deref_to_type2,
5576 else if (same_type_p (deref_to_type1, deref_to_type2))
5578 if (is_properly_derived_from (deref_from_type2,
5581 else if (is_properly_derived_from (deref_from_type1,
5587 else if (CLASS_TYPE_P (non_reference (from_type1))
5588 && same_type_p (from_type1, from_type2))
5590 tree from = non_reference (from_type1);
5594 --binding of an expression of type C to a reference of type
5595 B& is better than binding an expression of type C to a
5596 reference of type A&
5598 --conversion of C to B is better than conversion of C to A, */
5599 if (is_properly_derived_from (from, to_type1)
5600 && is_properly_derived_from (from, to_type2))
5602 if (is_properly_derived_from (to_type1, to_type2))
5604 else if (is_properly_derived_from (to_type2, to_type1))
5608 else if (CLASS_TYPE_P (non_reference (to_type1))
5609 && same_type_p (to_type1, to_type2))
5611 tree to = non_reference (to_type1);
5615 --binding of an expression of type B to a reference of type
5616 A& is better than binding an expression of type C to a
5617 reference of type A&,
5619 --onversion of B to A is better than conversion of C to A */
5620 if (is_properly_derived_from (from_type1, to)
5621 && is_properly_derived_from (from_type2, to))
5623 if (is_properly_derived_from (from_type2, from_type1))
5625 else if (is_properly_derived_from (from_type1, from_type2))
5632 --S1 and S2 differ only in their qualification conversion and yield
5633 similar types T1 and T2 (_conv.qual_), respectively, and the cv-
5634 qualification signature of type T1 is a proper subset of the cv-
5635 qualification signature of type T2 */
5636 if (TREE_CODE (ics1) == QUAL_CONV
5637 && TREE_CODE (ics2) == QUAL_CONV
5638 && same_type_p (from_type1, from_type2))
5639 return comp_cv_qual_signature (to_type1, to_type2);
5643 --S1 and S2 are reference bindings (_dcl.init.ref_), and the
5644 types to which the references refer are the same type except for
5645 top-level cv-qualifiers, and the type to which the reference
5646 initialized by S2 refers is more cv-qualified than the type to
5647 which the reference initialized by S1 refers */
5649 if (target_type1 && target_type2
5650 && same_type_ignoring_top_level_qualifiers_p (to_type1, to_type2))
5651 return comp_cv_qualification (target_type2, target_type1);
5653 /* Neither conversion sequence is better than the other. */
5657 /* The source type for this standard conversion sequence. */
5660 source_type (tree t)
5662 for (;; t = TREE_OPERAND (t, 0))
5664 if (TREE_CODE (t) == USER_CONV
5665 || TREE_CODE (t) == AMBIG_CONV
5666 || TREE_CODE (t) == IDENTITY_CONV)
5667 return TREE_TYPE (t);
5672 /* Note a warning about preferring WINNER to LOSER. We do this by storing
5673 a pointer to LOSER and re-running joust to produce the warning if WINNER
5674 is actually used. */
5677 add_warning (struct z_candidate *winner, struct z_candidate *loser)
5679 winner->warnings = tree_cons (NULL_TREE,
5680 build_zc_wrapper (loser),
5684 /* Compare two candidates for overloading as described in
5685 [over.match.best]. Return values:
5687 1: cand1 is better than cand2
5688 -1: cand2 is better than cand1
5689 0: cand1 and cand2 are indistinguishable */
5692 joust (struct z_candidate *cand1, struct z_candidate *cand2, bool warn)
5695 int i, off1 = 0, off2 = 0, len;
5697 /* Candidates that involve bad conversions are always worse than those
5699 if (cand1->viable > cand2->viable)
5701 if (cand1->viable < cand2->viable)
5704 /* If we have two pseudo-candidates for conversions to the same type,
5705 or two candidates for the same function, arbitrarily pick one. */
5706 if (cand1->fn == cand2->fn
5707 && (TYPE_P (cand1->fn) || DECL_P (cand1->fn)))
5710 /* a viable function F1
5711 is defined to be a better function than another viable function F2 if
5712 for all arguments i, ICSi(F1) is not a worse conversion sequence than
5713 ICSi(F2), and then */
5715 /* for some argument j, ICSj(F1) is a better conversion sequence than
5718 /* For comparing static and non-static member functions, we ignore
5719 the implicit object parameter of the non-static function. The
5720 standard says to pretend that the static function has an object
5721 parm, but that won't work with operator overloading. */
5722 len = TREE_VEC_LENGTH (cand1->convs);
5723 if (len != TREE_VEC_LENGTH (cand2->convs))
5725 if (DECL_STATIC_FUNCTION_P (cand1->fn)
5726 && ! DECL_STATIC_FUNCTION_P (cand2->fn))
5728 else if (! DECL_STATIC_FUNCTION_P (cand1->fn)
5729 && DECL_STATIC_FUNCTION_P (cand2->fn))
5738 for (i = 0; i < len; ++i)
5740 tree t1 = TREE_VEC_ELT (cand1->convs, i+off1);
5741 tree t2 = TREE_VEC_ELT (cand2->convs, i+off2);
5742 int comp = compare_ics (t1, t2);
5747 && ICS_RANK (t1) + ICS_RANK (t2) == STD_RANK + PROMO_RANK
5748 && TREE_CODE (t1) == STD_CONV
5749 && TREE_CODE (t2) == STD_CONV
5750 && TREE_CODE (TREE_TYPE (t1)) == INTEGER_TYPE
5751 && TREE_CODE (TREE_TYPE (t2)) == INTEGER_TYPE
5752 && (TYPE_PRECISION (TREE_TYPE (t1))
5753 == TYPE_PRECISION (TREE_TYPE (t2)))
5754 && (TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (t1, 0)))
5755 || (TREE_CODE (TREE_TYPE (TREE_OPERAND (t1, 0)))
5758 tree type = TREE_TYPE (TREE_OPERAND (t1, 0));
5760 struct z_candidate *w, *l;
5762 type1 = TREE_TYPE (t1), type2 = TREE_TYPE (t2),
5763 w = cand1, l = cand2;
5765 type1 = TREE_TYPE (t2), type2 = TREE_TYPE (t1),
5766 w = cand2, l = cand1;
5770 warning ("passing `%T' chooses `%T' over `%T'",
5771 type, type1, type2);
5772 warning (" in call to `%D'", w->fn);
5778 if (winner && comp != winner)
5787 /* warn about confusing overload resolution for user-defined conversions,
5788 either between a constructor and a conversion op, or between two
5790 if (winner && warn_conversion && cand1->second_conv
5791 && (!DECL_CONSTRUCTOR_P (cand1->fn) || !DECL_CONSTRUCTOR_P (cand2->fn))
5792 && winner != compare_ics (cand1->second_conv, cand2->second_conv))
5794 struct z_candidate *w, *l;
5795 bool give_warning = false;
5798 w = cand1, l = cand2;
5800 w = cand2, l = cand1;
5802 /* We don't want to complain about `X::operator T1 ()'
5803 beating `X::operator T2 () const', when T2 is a no less
5804 cv-qualified version of T1. */
5805 if (DECL_CONTEXT (w->fn) == DECL_CONTEXT (l->fn)
5806 && !DECL_CONSTRUCTOR_P (w->fn) && !DECL_CONSTRUCTOR_P (l->fn))
5808 tree t = TREE_TYPE (TREE_TYPE (l->fn));
5809 tree f = TREE_TYPE (TREE_TYPE (w->fn));
5811 if (TREE_CODE (t) == TREE_CODE (f) && POINTER_TYPE_P (t))
5816 if (!comp_ptr_ttypes (t, f))
5817 give_warning = true;
5820 give_warning = true;
5826 tree source = source_type (TREE_VEC_ELT (w->convs, 0));
5827 if (! DECL_CONSTRUCTOR_P (w->fn))
5828 source = TREE_TYPE (source);
5829 warning ("choosing `%D' over `%D'", w->fn, l->fn);
5830 warning (" for conversion from `%T' to `%T'",
5831 source, TREE_TYPE (w->second_conv));
5832 warning (" because conversion sequence for the argument is better");
5842 F1 is a non-template function and F2 is a template function
5845 if (! cand1->template && cand2->template)
5847 else if (cand1->template && ! cand2->template)
5851 F1 and F2 are template functions and the function template for F1 is
5852 more specialized than the template for F2 according to the partial
5855 if (cand1->template && cand2->template)
5857 winner = more_specialized
5858 (TI_TEMPLATE (cand1->template), TI_TEMPLATE (cand2->template),
5860 /* Tell the deduction code how many real function arguments
5861 we saw, not counting the implicit 'this' argument. But,
5862 add_function_candidate() suppresses the "this" argument
5865 [temp.func.order]: The presence of unused ellipsis and default
5866 arguments has no effect on the partial ordering of function
5868 TREE_VEC_LENGTH (cand1->convs)
5869 - (DECL_NONSTATIC_MEMBER_FUNCTION_P (cand1->fn)
5870 - DECL_CONSTRUCTOR_P (cand1->fn)));
5876 the context is an initialization by user-defined conversion (see
5877 _dcl.init_ and _over.match.user_) and the standard conversion
5878 sequence from the return type of F1 to the destination type (i.e.,
5879 the type of the entity being initialized) is a better conversion
5880 sequence than the standard conversion sequence from the return type
5881 of F2 to the destination type. */
5883 if (cand1->second_conv)
5885 winner = compare_ics (cand1->second_conv, cand2->second_conv);
5890 /* Check whether we can discard a builtin candidate, either because we
5891 have two identical ones or matching builtin and non-builtin candidates.
5893 (Pedantically in the latter case the builtin which matched the user
5894 function should not be added to the overload set, but we spot it here.
5897 ... the builtin candidates include ...
5898 - do not have the same parameter type list as any non-template
5899 non-member candidate. */
5901 if (TREE_CODE (cand1->fn) == IDENTIFIER_NODE
5902 || TREE_CODE (cand2->fn) == IDENTIFIER_NODE)
5904 for (i = 0; i < len; ++i)
5905 if (!same_type_p (TREE_TYPE (TREE_VEC_ELT (cand1->convs, i)),
5906 TREE_TYPE (TREE_VEC_ELT (cand2->convs, i))))
5908 if (i == TREE_VEC_LENGTH (cand1->convs))
5910 if (cand1->fn == cand2->fn)
5911 /* Two built-in candidates; arbitrarily pick one. */
5913 else if (TREE_CODE (cand1->fn) == IDENTIFIER_NODE)
5914 /* cand1 is built-in; prefer cand2. */
5917 /* cand2 is built-in; prefer cand1. */
5922 /* If the two functions are the same (this can happen with declarations
5923 in multiple scopes and arg-dependent lookup), arbitrarily choose one. */
5924 if (DECL_P (cand1->fn) && DECL_P (cand2->fn)
5925 && equal_functions (cand1->fn, cand2->fn))
5930 /* Extension: If the worst conversion for one candidate is worse than the
5931 worst conversion for the other, take the first. */
5934 int rank1 = IDENTITY_RANK, rank2 = IDENTITY_RANK;
5935 struct z_candidate *w = 0, *l = 0;
5937 for (i = 0; i < len; ++i)
5939 if (ICS_RANK (TREE_VEC_ELT (cand1->convs, i+off1)) > rank1)
5940 rank1 = ICS_RANK (TREE_VEC_ELT (cand1->convs, i+off1));
5941 if (ICS_RANK (TREE_VEC_ELT (cand2->convs, i+off2)) > rank2)
5942 rank2 = ICS_RANK (TREE_VEC_ELT (cand2->convs, i+off2));
5945 winner = 1, w = cand1, l = cand2;
5947 winner = -1, w = cand2, l = cand1;
5953 ISO C++ says that these are ambiguous, even \
5954 though the worst conversion for the first is better than \
5955 the worst conversion for the second:");
5956 print_z_candidate (_("candidate 1:"), w);
5957 print_z_candidate (_("candidate 2:"), l);
5965 my_friendly_assert (!winner, 20010121);
5969 /* Given a list of candidates for overloading, find the best one, if any.
5970 This algorithm has a worst case of O(2n) (winner is last), and a best
5971 case of O(n/2) (totally ambiguous); much better than a sorting
5974 static struct z_candidate *
5975 tourney (struct z_candidate *candidates)
5977 struct z_candidate *champ = candidates, *challenger;
5979 int champ_compared_to_predecessor = 0;
5981 /* Walk through the list once, comparing each current champ to the next
5982 candidate, knocking out a candidate or two with each comparison. */
5984 for (challenger = champ->next; challenger; )
5986 fate = joust (champ, challenger, 0);
5988 challenger = challenger->next;
5993 champ = challenger->next;
5996 champ_compared_to_predecessor = 0;
6001 champ_compared_to_predecessor = 1;
6004 challenger = champ->next;
6008 /* Make sure the champ is better than all the candidates it hasn't yet
6009 been compared to. */
6011 for (challenger = candidates;
6013 && !(champ_compared_to_predecessor && challenger->next == champ);
6014 challenger = challenger->next)
6016 fate = joust (champ, challenger, 0);
6024 /* Returns nonzero if things of type FROM can be converted to TO. */
6027 can_convert (tree to, tree from)
6029 return can_convert_arg (to, from, NULL_TREE);
6032 /* Returns nonzero if ARG (of type FROM) can be converted to TO. */
6035 can_convert_arg (tree to, tree from, tree arg)
6037 tree t = implicit_conversion (to, from, arg, LOOKUP_NORMAL);
6038 return (t && ! ICS_BAD_FLAG (t));
6041 /* Like can_convert_arg, but allows dubious conversions as well. */
6044 can_convert_arg_bad (tree to, tree from, tree arg)
6046 return implicit_conversion (to, from, arg, LOOKUP_NORMAL) != 0;
6049 /* Convert EXPR to TYPE. Return the converted expression.
6051 Note that we allow bad conversions here because by the time we get to
6052 this point we are committed to doing the conversion. If we end up
6053 doing a bad conversion, convert_like will complain. */
6056 perform_implicit_conversion (tree type, tree expr)
6060 if (error_operand_p (expr))
6061 return error_mark_node;
6062 conv = implicit_conversion (type, TREE_TYPE (expr), expr,
6066 error ("could not convert `%E' to `%T'", expr, type);
6067 return error_mark_node;
6070 return convert_like (conv, expr);
6073 /* Convert EXPR to TYPE (as a direct-initialization) if that is
6074 permitted. If the conversion is valid, the converted expression is
6075 returned. Otherwise, NULL_TREE is returned. */
6078 perform_direct_initialization_if_possible (tree type, tree expr)
6082 if (type == error_mark_node || error_operand_p (expr))
6083 return error_mark_node;
6084 conv = implicit_conversion (type, TREE_TYPE (expr), expr,
6086 if (!conv || ICS_BAD_FLAG (conv))
6088 return convert_like_real (conv, expr, NULL_TREE, 0, 0,
6089 /*issue_conversion_warnings=*/false);
6092 /* DECL is a VAR_DECL whose type is a REFERENCE_TYPE. The reference
6093 is being bound to a temporary. Create and return a new VAR_DECL
6094 with the indicated TYPE; this variable will store the value to
6095 which the reference is bound. */
6098 make_temporary_var_for_ref_to_temp (tree decl, tree type)
6102 /* Create the variable. */
6103 var = build_decl (VAR_DECL, NULL_TREE, type);
6104 DECL_ARTIFICIAL (var) = 1;
6105 TREE_USED (var) = 1;
6107 /* Register the variable. */
6108 if (TREE_STATIC (decl))
6110 /* Namespace-scope or local static; give it a mangled name. */
6113 TREE_STATIC (var) = 1;
6114 name = mangle_ref_init_variable (decl);
6115 DECL_NAME (var) = name;
6116 SET_DECL_ASSEMBLER_NAME (var, name);
6117 var = pushdecl_top_level (var);
6121 /* Create a new cleanup level if necessary. */
6122 maybe_push_cleanup_level (type);
6123 /* Don't push unnamed temps. Do set DECL_CONTEXT, though. */
6124 DECL_CONTEXT (var) = current_function_decl;
6130 /* Convert EXPR to the indicated reference TYPE, in a way suitable for
6131 initializing a variable of that TYPE. If DECL is non-NULL, it is
6132 the VAR_DECL being initialized with the EXPR. (In that case, the
6133 type of DECL will be TYPE.)
6135 Return the converted expression. */
6138 initialize_reference (tree type, tree expr, tree decl)
6142 if (type == error_mark_node || error_operand_p (expr))
6143 return error_mark_node;
6145 conv = reference_binding (type, TREE_TYPE (expr), expr, LOOKUP_NORMAL);
6146 if (!conv || ICS_BAD_FLAG (conv))
6148 error ("could not convert `%E' to `%T'", expr, type);
6149 return error_mark_node;
6152 /* If DECL is non-NULL, then this special rule applies:
6156 The temporary to which the reference is bound or the temporary
6157 that is the complete object to which the reference is bound
6158 persists for the lifetime of the reference.
6160 The temporaries created during the evaluation of the expression
6161 initializing the reference, except the temporary to which the
6162 reference is bound, are destroyed at the end of the
6163 full-expression in which they are created.
6165 In that case, we store the converted expression into a new
6166 VAR_DECL in a new scope.
6168 However, we want to be careful not to create temporaries when
6169 they are not required. For example, given:
6172 struct D : public B {};
6176 there is no need to copy the return value from "f"; we can just
6177 extend its lifetime. Similarly, given:
6180 struct T { operator S(); };
6184 we can extend the lifetime of the return value of the conversion
6186 my_friendly_assert (TREE_CODE (conv) == REF_BIND, 20030302);
6190 tree base_conv_type;
6192 /* Skip over the REF_BIND. */
6193 conv = TREE_OPERAND (conv, 0);
6194 /* If the next conversion is a BASE_CONV, skip that too -- but
6195 remember that the conversion was required. */
6196 if (TREE_CODE (conv) == BASE_CONV && !NEED_TEMPORARY_P (conv))
6198 base_conv_type = TREE_TYPE (conv);
6199 conv = TREE_OPERAND (conv, 0);
6202 base_conv_type = NULL_TREE;
6203 /* Perform the remainder of the conversion. */
6204 expr = convert_like (conv, expr);
6205 if (!real_non_cast_lvalue_p (expr))
6210 /* Create the temporary variable. */
6211 type = TREE_TYPE (expr);
6212 var = make_temporary_var_for_ref_to_temp (decl, type);
6213 layout_decl (var, 0);
6214 if (at_function_scope_p ())
6218 add_decl_stmt (var);
6219 cleanup = cxx_maybe_build_cleanup (var);
6221 finish_decl_cleanup (var, cleanup);
6225 rest_of_decl_compilation (var, NULL, /*toplev=*/1, at_eof);
6226 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
6227 static_aggregates = tree_cons (NULL_TREE, var,
6230 init = build (INIT_EXPR, type, var, expr);
6231 /* Use its address to initialize the reference variable. */
6232 expr = build_address (var);
6233 expr = build (COMPOUND_EXPR, TREE_TYPE (expr), init, expr);
6236 /* Take the address of EXPR. */
6237 expr = build_unary_op (ADDR_EXPR, expr, 0);
6238 /* If a BASE_CONV was required, perform it now. */
6240 expr = (perform_implicit_conversion
6241 (build_pointer_type (base_conv_type), expr));
6242 return build_nop (type, expr);
6245 /* Perform the conversion. */
6246 return convert_like (conv, expr);
6249 #include "gt-cp-call.h"