2002-03-31 Segher Boessenkool <segher@koffie.nl>
[official-gcc.git] / gcc / cp / call.c
blobb2f9291139fdf103a2266a83423b0f3597a236a3
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)
12 any later version.
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. */
27 #include "config.h"
28 #include "system.h"
29 #include "coretypes.h"
30 #include "tm.h"
31 #include "tree.h"
32 #include "cp-tree.h"
33 #include "output.h"
34 #include "flags.h"
35 #include "rtl.h"
36 #include "toplev.h"
37 #include "expr.h"
38 #include "diagnostic.h"
40 extern int inhibit_warnings;
42 static tree build_field_call (tree, tree, tree);
43 static struct z_candidate * tourney (struct z_candidate *);
44 static int equal_functions (tree, tree);
45 static int joust (struct z_candidate *, struct z_candidate *, bool);
46 static int compare_ics (tree, tree);
47 static tree build_over_call (struct z_candidate *, int);
48 static tree build_java_interface_fn_ref (tree, tree);
49 #define convert_like(CONV, EXPR) \
50 convert_like_real ((CONV), (EXPR), NULL_TREE, 0, 0)
51 #define convert_like_with_context(CONV, EXPR, FN, ARGNO) \
52 convert_like_real ((CONV), (EXPR), (FN), (ARGNO), 0)
53 static tree convert_like_real (tree, tree, tree, int, int);
54 static void op_error (enum tree_code, enum tree_code, tree, tree,
55 tree, const char *);
56 static tree build_object_call (tree, tree);
57 static tree resolve_args (tree);
58 static struct z_candidate *build_user_type_conversion_1 (tree, tree, int);
59 static void print_z_candidate (const char *msgid, struct z_candidate *,
60 void (*)(const char *, ...));
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,
75 tree, tree *, int);
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 *,
82 int);
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);
112 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. */
132 static tree
133 build_field_call (tree instance_ptr, tree decl, tree parms)
135 tree instance;
137 if (decl == error_mark_node || decl == NULL_TREE)
138 return decl;
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)))
158 == FUNCTION_TYPE)))
159 return build_function_call (instance, parms);
162 return NULL_TREE;
165 /* Returns nonzero iff the destructor name specified in NAME
166 (a BIT_NOT_EXPR) matches BASETYPE. The operand of NAME can take many
167 forms... */
169 bool
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)
176 return true;
178 if (TREE_CODE (name) == TYPE_DECL)
179 name = TREE_TYPE (name);
180 else if (TYPE_P (name))
181 /* OK */;
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)))
187 name = basetype;
188 else
189 name = get_type_value (name);
191 /* In the case of:
193 template <class T> struct S { ~S(); };
194 int i;
195 i.~S();
197 NAME will be a class template. */
198 else if (DECL_CLASS_TEMPLATE_P (name))
199 return false;
200 else
201 abort ();
203 if (name && TYPE_MAIN_VARIANT (basetype) == TYPE_MAIN_VARIANT (name))
204 return true;
205 return false;
208 /* Build a method call of the form `EXP->SCOPES::NAME (PARMS)'.
209 This is how virtual function calls are avoided. */
211 tree
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
217 that happens here.
219 @@ But we do have to check access privileges later. */
220 tree binfo, decl;
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)
238 binfo = basetype;
239 basetype = BINFO_TYPE (binfo);
241 else
242 binfo = NULL_TREE;
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
249 it off. */
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'",
281 exp, type);
282 return error_mark_node;
285 decl = build_scoped_ref (exp, basetype, &binfo);
287 if (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. */
311 tree
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
317 functions. */
318 if (TREE_CODE (type) == METHOD_TYPE)
320 tree addr;
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
330 as a constant */
331 if (staticp (function))
332 TREE_CONSTANT (addr) = 1;
334 function = addr;
336 else
337 function = default_conversion (function);
339 return 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. */
346 tree
347 build_call (tree function, tree parms)
349 int is_constructor = 0;
350 int nothrow;
351 tree tmp;
352 tree decl;
353 tree result_type;
354 tree fntype;
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);
370 else
371 decl = NULL_TREE;
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))
386 is_constructor = 1;
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))
395 mark_used (decl);
396 else
397 abort ();
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;
419 return function;
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
427 as a pointer.
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
444 member function.
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
452 that result. */
454 #ifdef GATHER_STATISTICS
455 extern int n_build_method_call;
456 #endif
458 tree
459 build_method_call (tree instance, tree name, tree parms,
460 tree basetype_path, int flags)
462 tree fn;
463 tree object_type;
464 tree template_args = NULL_TREE;
465 bool has_template_args = false;
467 #ifdef GATHER_STATISTICS
468 n_build_method_call++;
469 #endif
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)
488 tree instance_ptr;
490 if (parms)
491 error ("destructors take no parameters");
493 if (! check_dtor_name (object_type, name))
494 error
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);
528 else
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. */
539 if (!fn)
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),
549 template_args);
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. */
562 tree fn;
563 /* The arguments to use when calling this function. */
564 tree args;
565 /* The implicit conversion sequences for each of the arguments to
566 FN. */
567 tree convs;
568 /* If FN is a user-defined conversion, the standard conversion
569 sequence from the type returned by FN to the desired destination
570 type. */
571 tree second_conv;
572 int viable;
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. */
578 tree access_path;
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;
585 tree template;
586 tree warnings;
587 struct z_candidate *next;
590 #define IDENTITY_RANK 0
591 #define EXACT_RANK 1
592 #define PROMO_RANK 2
593 #define STD_RANK 3
594 #define PBOOL_RANK 4
595 #define USER_RANK 5
596 #define ELLIPSIS_RANK 6
597 #define BAD_RANK 7
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)
619 bool
620 null_ptr_cst_p (tree t)
622 /* [conv.ptr]
624 A null pointer constant is an integral constant expression
625 (_expr.const_) rvalue of integer type that evaluates to zero. */
626 if (t == null_node
627 || (CP_INTEGRAL_TYPE_P (TREE_TYPE (t)) && integer_zerop (t)))
628 return true;
629 return false;
633 /* Returns nonzero if PARMLIST consists of only default parms and/or
634 ellipsis. */
636 bool
637 sufficient_parms_p (tree parmlist)
639 for (; parmlist && parmlist != void_list_node;
640 parmlist = TREE_CHAIN (parmlist))
641 if (!TREE_PURPOSE (parmlist))
642 return false;
643 return true;
646 static tree
647 build_conv (enum tree_code code, tree type, tree from)
649 tree t;
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;
659 switch (code)
661 case PTR_CONV:
662 case PMEM_CONV:
663 case BASE_CONV:
664 case STD_CONV:
665 if (rank < STD_RANK)
666 rank = STD_RANK;
667 break;
669 case QUAL_CONV:
670 if (rank < EXACT_RANK)
671 rank = EXACT_RANK;
673 default:
674 break;
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);
679 return t;
682 /* If T is a REFERENCE_TYPE return the type to which T refers.
683 Otherwise, return T itself. */
685 static tree
686 non_reference (tree t)
688 if (TREE_CODE (t) == REFERENCE_TYPE)
689 t = TREE_TYPE (t);
690 return t;
693 tree
694 strip_top_quals (tree t)
696 if (TREE_CODE (t) == ARRAY_TYPE)
697 return t;
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. */
705 static tree
706 standard_conversion (tree to, tree from, tree expr)
708 enum tree_code fcode, tcode;
709 tree conv;
710 bool fromref = false;
712 if (TREE_CODE (to) == REFERENCE_TYPE)
713 to = TREE_TYPE (to);
714 if (TREE_CODE (from) == REFERENCE_TYPE)
716 fromref = true;
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)
727 return NULL_TREE;
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
756 conversion. */
757 tree part_conv = standard_conversion
758 (TREE_TYPE (to), TREE_TYPE (from), NULL_TREE);
760 if (part_conv)
762 conv = build_conv (TREE_CODE (part_conv), to, conv);
763 ICS_STD_RANK (conv) = ICS_STD_RANK (part_conv);
765 else
766 conv = NULL_TREE;
768 return conv;
771 if (same_type_p (from, to))
772 return conv;
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),
801 TREE_TYPE (to)))
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)))
830 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))
839 /* OK */;
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;
850 else
851 return 0;
853 from = to;
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))
867 return 0;
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)))
879 return 0;
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))
892 return 0;
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
909 the conversion. */
910 NEED_TEMPORARY_P (conv) = 1;
912 else
913 return 0;
915 return conv;
918 /* Returns nonzero if T1 is reference-related to T2. */
920 static bool
921 reference_related_p (tree t1, tree t2)
923 t1 = TYPE_MAIN_VARIANT (t1);
924 t2 = TYPE_MAIN_VARIANT (t2);
926 /* [dcl.init.ref]
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
930 of T2. */
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. */
938 static bool
939 reference_compatible_p (tree t1, tree t2)
941 /* [dcl.init.ref]
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]. */
953 static tree
954 convert_class_to_reference (tree t, tree s, tree expr)
956 tree conversions;
957 tree arglist;
958 tree conv;
959 tree reference_type;
960 struct z_candidate *candidates;
961 struct z_candidate *cand;
962 bool any_viable_p;
964 conversions = lookup_conversions (s);
965 if (!conversions)
966 return NULL_TREE;
968 /* [over.match.ref]
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
973 selected as follows:
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
981 expression. */
983 candidates = 0;
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);
996 while (conversions)
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));
1005 cand = NULL;
1007 /* If this is a template function, try to get an exact
1008 match. */
1009 if (TREE_CODE (f) == TEMPLATE_DECL)
1011 cand = add_template_candidate (&candidates,
1012 f, s,
1013 NULL_TREE,
1014 arglist,
1015 reference_type,
1016 TYPE_BINFO (s),
1017 TREE_PURPOSE (conversions),
1018 LOOKUP_NORMAL,
1019 DEDUCE_CONV);
1021 if (cand)
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. */
1027 f = cand->fn;
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;
1033 cand = NULL;
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,
1040 TYPE_BINFO (s),
1041 TREE_PURPOSE (conversions),
1042 LOOKUP_NORMAL);
1044 if (cand)
1045 /* Build a standard conversion sequence indicating the
1046 binding from the reference type returned by the
1047 function to the desired REFERENCE_TYPE. */
1048 cand->second_conv
1049 = (direct_reference_binding
1050 (reference_type,
1051 build1 (IDENTITY_CONV,
1052 TREE_TYPE (TREE_TYPE (TREE_TYPE (cand->fn))),
1053 NULL_TREE)));
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
1060 know. */
1061 if (!any_viable_p)
1062 return NULL_TREE;
1064 cand = tourney (candidates);
1065 if (!cand)
1066 return NULL_TREE;
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,
1071 build_this (expr),
1072 TREE_CHAIN (cand->args));
1074 /* Build a user-defined conversion sequence representing the
1075 conversion. */
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. */
1095 static tree
1096 direct_reference_binding (tree type, tree conv)
1098 tree t;
1100 my_friendly_assert (TREE_CODE (type) == REFERENCE_TYPE, 20030306);
1101 my_friendly_assert (TREE_CODE (TREE_TYPE (conv)) != REFERENCE_TYPE,
1102 20030306);
1104 t = TREE_TYPE (type);
1106 /* [over.ics.rank]
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. */
1140 static tree
1141 reference_binding (tree rto, tree rfrom, tree expr, int flags)
1143 tree conv = NULL_TREE;
1144 tree to = TREE_TYPE (rto);
1145 tree from = rfrom;
1146 bool related_p;
1147 bool compatible_p;
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)
1154 return NULL_TREE;
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);
1164 else if (expr)
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)
1175 /* [dcl.init.ref]
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
1183 lvalue. */
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
1198 actually occurs. */
1199 NEED_TEMPORARY_P (conv) = 1;
1200 return conv;
1202 else if (CLASS_TYPE_P (from) && !(flags & LOOKUP_NO_CONVERSION))
1204 /* [dcl.init.ref]
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);
1218 if (conv)
1219 return conv;
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)
1225 return NULL_TREE;
1227 /* [over.ics.rank]
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. */
1238 /* [dcl.init.ref]
1240 Otherwise, the reference shall be to a non-volatile const type. */
1241 if (!CP_TYPE_CONST_NON_VOLATILE_P (to))
1242 return NULL_TREE;
1244 /* [dcl.init.ref]
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.
1253 -- ...
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);
1266 /* [dcl.init.ref]
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))
1274 return NULL_TREE;
1276 conv = implicit_conversion (to, from, expr, flags);
1277 if (!conv)
1278 return NULL_TREE;
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;
1285 return conv;
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
1291 significant. */
1293 static tree
1294 implicit_conversion (tree to, tree from, tree expr, int flags)
1296 tree conv;
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)
1308 return NULL_TREE;
1310 if (TREE_CODE (to) == REFERENCE_TYPE)
1311 conv = reference_binding (to, from, expr, flags);
1312 else
1313 conv = standard_conversion (to, from, expr);
1315 if (conv)
1316 return conv;
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);
1327 if (cand)
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. */
1333 return conv;
1336 return NULL_TREE;
1339 /* Add a new entry to the list of candidates. Used by the add_*_candidate
1340 functions. */
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));
1350 cand->fn = fn;
1351 cand->args = args;
1352 cand->convs = convs;
1353 cand->access_path = access_path;
1354 cand->conversion_path = conversion_path;
1355 cand->viable = viable;
1356 cand->next = *candidates;
1357 *candidates = cand;
1359 return cand;
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,
1373 int flags)
1375 tree parmlist = TYPE_ARG_TYPES (TREE_TYPE (fn));
1376 int i, len;
1377 tree convs;
1378 tree parmnode, argnode;
1379 tree orig_arglist;
1380 int viable = 1;
1382 /* Built-in functions that haven't been declared don't really
1383 exist. */
1384 if (DECL_ANTICIPATED (fn))
1385 return NULL;
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);
1395 else
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)
1412 break;
1413 parmnode = TREE_CHAIN (parmnode);
1416 if (i < len && parmnode)
1417 viable = 0;
1419 /* Make sure there are default args for the rest of the parms. */
1420 else if (!sufficient_parms_p (parmnode))
1421 viable = 0;
1423 if (! viable)
1424 goto out;
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;
1431 argnode = arglist;
1433 for (i = 0; i < len; ++i)
1435 tree arg = TREE_VALUE (argnode);
1436 tree argtype = lvalue_type (arg);
1437 tree t;
1438 int is_this;
1440 if (parmnode == void_list_node)
1441 break;
1443 is_this = (i == 0 && DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
1444 && ! DECL_CONSTRUCTOR_P (fn));
1446 if (parmnode)
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)
1461 parmtype
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);
1469 else
1471 t = build1 (IDENTITY_CONV, argtype, arg);
1472 ICS_ELLIPSIS_FLAG (t) = 1;
1475 if (t && is_this)
1476 ICS_THIS_FLAG (t) = 1;
1478 TREE_VEC_ELT (convs, i) = t;
1479 if (! t)
1481 viable = 0;
1482 break;
1485 if (ICS_BAD_FLAG (t))
1486 viable = -1;
1488 if (parmnode)
1489 parmnode = TREE_CHAIN (parmnode);
1490 argnode = TREE_CHAIN (argnode);
1493 out:
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;
1524 argnode = arglist;
1525 viable = 1;
1526 flags = LOOKUP_NORMAL;
1528 /* Don't bother looking up the same type twice. */
1529 if (*candidates && (*candidates)->fn == totype)
1530 return NULL;
1532 for (i = 0; i < len; ++i)
1534 tree arg = i == 0 ? obj : TREE_VALUE (argnode);
1535 tree argtype = lvalue_type (arg);
1536 tree t;
1538 if (i == 0)
1539 t = implicit_conversion (totype, argtype, arg, flags);
1540 else if (parmnode == void_list_node)
1541 break;
1542 else if (parmnode)
1543 t = implicit_conversion (TREE_VALUE (parmnode), argtype, arg, flags);
1544 else
1546 t = build1 (IDENTITY_CONV, argtype, arg);
1547 ICS_ELLIPSIS_FLAG (t) = 1;
1550 TREE_VEC_ELT (convs, i) = t;
1551 if (! t)
1552 break;
1554 if (ICS_BAD_FLAG (t))
1555 viable = -1;
1557 if (i == 0)
1558 continue;
1560 if (parmnode)
1561 parmnode = TREE_CHAIN (parmnode);
1562 argnode = TREE_CHAIN (argnode);
1565 if (i < len)
1566 viable = 0;
1568 if (!sufficient_parms_p (parmnode))
1569 viable = 0;
1571 return add_candidate (candidates, totype, arglist, convs, access_path,
1572 conversion_path, viable);
1575 static void
1576 build_builtin_candidate (struct z_candidate **candidates, tree fnname,
1577 tree type1, tree type2, tree *args, tree *argtypes,
1578 int flags)
1580 tree t, convs;
1581 int viable = 1, i;
1582 tree types[2];
1584 types[0] = type1;
1585 types[1] = type2;
1587 convs = make_tree_vec (args[2] ? 3 : (args[1] ? 2 : 1));
1589 for (i = 0; i < 2; ++i)
1591 if (! args[i])
1592 break;
1594 t = implicit_conversion (types[i], argtypes[i], args[i], flags);
1595 if (! t)
1597 viable = 0;
1598 /* We need something for printing the candidate. */
1599 t = build1 (IDENTITY_CONV, types[i], NULL_TREE);
1601 else if (ICS_BAD_FLAG (t))
1602 viable = 0;
1603 TREE_VEC_ELT (convs, i) = t;
1606 /* For COND_EXPR we rearranged the arguments; undo that now. */
1607 if (args[2])
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);
1612 if (t)
1613 TREE_VEC_ELT (convs, 0) = t;
1614 else
1615 viable = 0;
1618 add_candidate (candidates, fnname, /*args=*/NULL_TREE, convs,
1619 /*access_path=*/NULL_TREE,
1620 /*conversion_path=*/NULL_TREE,
1621 viable);
1624 static bool
1625 is_complete (tree t)
1627 return COMPLETE_TYPE_P (complete_type (t));
1630 /* Returns nonzero if TYPE is a promoted arithmetic type. */
1632 static bool
1633 promoted_arithmetic_type_p (tree type)
1635 /* [over.built]
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). */
1657 static void
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)
1662 switch (code)
1664 case POSTINCREMENT_EXPR:
1665 case POSTDECREMENT_EXPR:
1666 args[1] = integer_zero_node;
1667 type2 = integer_type_node;
1668 break;
1669 default:
1670 break;
1673 switch (code)
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)
1697 return;
1698 case POSTINCREMENT_EXPR:
1699 case PREINCREMENT_EXPR:
1700 if (ARITHMETIC_TYPE_P (type1) || TYPE_PTROB_P (type1))
1702 type1 = build_reference_type (type1);
1703 break;
1705 return;
1707 /* 7 For every cv-qualified or cv-unqualified complete object type T, there
1708 exist candidate operator functions of the form
1710 T& operator*(T*);
1712 8 For every function type T, there exist candidate operator functions of
1713 the form
1714 T& operator*(T*); */
1716 case INDIRECT_REF:
1717 if (TREE_CODE (type1) == POINTER_TYPE
1718 && (TYPE_PTROB_P (type1)
1719 || TREE_CODE (TREE_TYPE (type1)) == FUNCTION_TYPE))
1720 break;
1721 return;
1723 /* 9 For every type T, there exist candidate operator functions of the form
1724 T* operator+(T*);
1726 10For every promoted arithmetic type T, there exist candidate operator
1727 functions of the form
1728 T operator+(T);
1729 T operator-(T); */
1731 case CONVERT_EXPR: /* unary + */
1732 if (TREE_CODE (type1) == POINTER_TYPE
1733 && TREE_CODE (TREE_TYPE (type1)) != OFFSET_TYPE)
1734 break;
1735 case NEGATE_EXPR:
1736 if (ARITHMETIC_TYPE_P (type1))
1737 break;
1738 return;
1740 /* 11For every promoted integral type T, there exist candidate operator
1741 functions of the form
1742 T operator~(T); */
1744 case BIT_NOT_EXPR:
1745 if (INTEGRAL_TYPE_P (type1))
1746 break;
1747 return;
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. */
1756 case MEMBER_REF:
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)))))
1768 break;
1770 return;
1772 /* 13For every pair of promoted arithmetic types L and R, there exist can-
1773 didate operator functions of the form
1774 LR operator*(L, R);
1775 LR operator/(L, R);
1776 LR operator+(L, R);
1777 LR operator-(L, R);
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
1785 types L and R.
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); */
1814 case MINUS_EXPR:
1815 if (TYPE_PTROB_P (type1) && TYPE_PTROB_P (type2))
1816 break;
1817 if (TYPE_PTROB_P (type1) && INTEGRAL_TYPE_P (type2))
1819 type2 = ptrdiff_type_node;
1820 break;
1822 case MULT_EXPR:
1823 case TRUNC_DIV_EXPR:
1824 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
1825 break;
1826 return;
1828 case EQ_EXPR:
1829 case NE_EXPR:
1830 if ((TYPE_PTRMEMFUNC_P (type1) && TYPE_PTRMEMFUNC_P (type2))
1831 || (TYPE_PTRMEM_P (type1) && TYPE_PTRMEM_P (type2)))
1832 break;
1833 if ((TYPE_PTRMEMFUNC_P (type1) || TYPE_PTRMEM_P (type1))
1834 && null_ptr_cst_p (args[1]))
1836 type2 = type1;
1837 break;
1839 if ((TYPE_PTRMEMFUNC_P (type2) || TYPE_PTRMEM_P (type2))
1840 && null_ptr_cst_p (args[0]))
1842 type1 = type2;
1843 break;
1845 /* FALLTHROUGH */
1846 case LT_EXPR:
1847 case GT_EXPR:
1848 case LE_EXPR:
1849 case GE_EXPR:
1850 case MAX_EXPR:
1851 case MIN_EXPR:
1852 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
1853 break;
1854 if (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
1855 break;
1856 if (TREE_CODE (type1) == ENUMERAL_TYPE && TREE_CODE (type2) == ENUMERAL_TYPE)
1857 break;
1858 if (TYPE_PTR_P (type1) && null_ptr_cst_p (args[1]))
1860 type2 = type1;
1861 break;
1863 if (null_ptr_cst_p (args[0]) && TYPE_PTR_P (type2))
1865 type1 = type2;
1866 break;
1868 return;
1870 case PLUS_EXPR:
1871 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
1872 break;
1873 case ARRAY_REF:
1874 if (INTEGRAL_TYPE_P (type1) && TYPE_PTROB_P (type2))
1876 type1 = ptrdiff_type_node;
1877 break;
1879 if (TYPE_PTROB_P (type1) && INTEGRAL_TYPE_P (type2))
1881 type2 = ptrdiff_type_node;
1882 break;
1884 return;
1886 /* 18For every pair of promoted integral types L and R, there exist candi-
1887 date operator functions of the form
1888 LR operator%(L, R);
1889 LR operator&(L, R);
1890 LR operator^(L, R);
1891 LR operator|(L, R);
1892 L operator<<(L, R);
1893 L operator>>(L, R);
1894 where LR is the result of the usual arithmetic conversions between
1895 types L and R. */
1897 case TRUNC_MOD_EXPR:
1898 case BIT_AND_EXPR:
1899 case BIT_IOR_EXPR:
1900 case BIT_XOR_EXPR:
1901 case LSHIFT_EXPR:
1902 case RSHIFT_EXPR:
1903 if (INTEGRAL_TYPE_P (type1) && INTEGRAL_TYPE_P (type2))
1904 break;
1905 return;
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
1922 the form
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-
1928 tions of the form
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); */
1943 case MODIFY_EXPR:
1944 switch (code2)
1946 case PLUS_EXPR:
1947 case MINUS_EXPR:
1948 if (TYPE_PTROB_P (type1) && INTEGRAL_TYPE_P (type2))
1950 type2 = ptrdiff_type_node;
1951 break;
1953 case MULT_EXPR:
1954 case TRUNC_DIV_EXPR:
1955 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
1956 break;
1957 return;
1959 case TRUNC_MOD_EXPR:
1960 case BIT_AND_EXPR:
1961 case BIT_IOR_EXPR:
1962 case BIT_XOR_EXPR:
1963 case LSHIFT_EXPR:
1964 case RSHIFT_EXPR:
1965 if (INTEGRAL_TYPE_P (type1) && INTEGRAL_TYPE_P (type2))
1966 break;
1967 return;
1969 case NOP_EXPR:
1970 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
1971 break;
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])))
1979 type2 = type1;
1980 break;
1982 return;
1984 default:
1985 abort ();
1987 type1 = build_reference_type (type1);
1988 break;
1990 case COND_EXPR:
1991 /* [over.built]
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))
2007 /* That's OK. */
2008 break;
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)))
2017 return;
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
2022 types are TYPE2. */
2023 break;
2025 default:
2026 abort ();
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);
2044 return;
2047 build_builtin_candidate
2048 (candidates, fnname, type1, type2, args, argtypes, flags);
2051 tree
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);
2058 return 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. */
2074 static void
2075 add_builtin_candidates (struct z_candidate **candidates, enum tree_code code,
2076 enum tree_code code2, tree fnname, tree *args,
2077 int flags)
2079 int ref1, i;
2080 int enum_p = 0;
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
2085 parameter type. */
2086 tree types[2];
2088 for (i = 0; i < 3; ++i)
2090 if (args[i])
2091 argtypes[i] = lvalue_type (args[i]);
2092 else
2093 argtypes[i] = NULL_TREE;
2096 switch (code)
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:
2107 case MODIFY_EXPR:
2108 ref1 = 1;
2109 break;
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);
2120 return;
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);
2127 return;
2129 case ADDR_EXPR:
2130 case COMPOUND_EXPR:
2131 case COMPONENT_REF:
2132 return;
2134 case COND_EXPR:
2135 case EQ_EXPR:
2136 case NE_EXPR:
2137 case LT_EXPR:
2138 case LE_EXPR:
2139 case GT_EXPR:
2140 case GE_EXPR:
2141 enum_p = 1;
2142 /* FALLTHROUGH */
2144 default:
2145 ref1 = 0;
2148 types[0] = types[1] = NULL_TREE;
2150 for (i = 0; i < 2; ++i)
2152 if (! args[i])
2154 else if (IS_AGGR_TYPE (argtypes[i]))
2156 tree convs;
2158 if (i == 0 && code == MODIFY_EXPR && code2 == NOP_EXPR)
2159 return;
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]);
2173 else if (! convs)
2174 return;
2176 for (; convs; convs = TREE_CHAIN (convs))
2178 type = TREE_TYPE (TREE_TYPE (OVL_CURRENT (TREE_VALUE (convs))));
2180 if (i == 0 && ref1
2181 && (TREE_CODE (type) != REFERENCE_TYPE
2182 || CP_TYPE_CONST_P (TREE_TYPE (type))))
2183 continue;
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]);
2202 else
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]))
2224 if (types[1])
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);
2229 else
2230 add_builtin_candidate
2231 (candidates, code, code2, fnname, TREE_VALUE (types[0]),
2232 NULL_TREE, args, argtypes, flags);
2235 return;
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;
2260 int i;
2261 tree fn;
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);
2277 if (i != 0)
2278 return NULL;
2280 fn = instantiate_template (tmpl, targs, tf_none);
2281 if (fn == error_mark_node)
2282 return NULL;
2284 /* In [class.copy]:
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,
2293 struct A {
2294 A(A&);
2295 template <class T> A(const T&);
2297 const A f ();
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
2305 have that form. */
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)),
2310 ctype))
2311 return NULL;
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);
2318 else
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) {}; };
2331 S<double> sd;
2332 sd.f(3);
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);
2341 else
2342 cand->template = DECL_TEMPLATE_INFO (fn);
2344 return cand;
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)
2354 return
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)
2367 return
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
2377 strictly viable. */
2379 static struct z_candidate*
2380 splice_viable (struct z_candidate *cands,
2381 bool strict_p,
2382 bool *any_viable_p)
2384 struct z_candidate *viable;
2385 struct z_candidate **last_viable;
2386 struct z_candidate **cand;
2388 viable = NULL;
2389 last_viable = &viable;
2390 *any_viable_p = false;
2392 cand = &cands;
2393 while (*cand)
2395 struct z_candidate *c = *cand;
2396 if (strict_p ? c->viable == 1 : c->viable)
2398 *last_viable = c;
2399 *cand = c->next;
2400 c->next = NULL;
2401 last_viable = &c->next;
2402 *any_viable_p = true;
2404 else
2405 cand = &c->next;
2408 return viable ? viable : cands;
2411 static bool
2412 any_strictly_viable (struct z_candidate *cands)
2414 for (; cands; cands = cands->next)
2415 if (cands->viable == 1)
2416 return true;
2417 return false;
2420 static tree
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". */
2431 static inline int
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);
2437 return fn1 == fn2;
2440 /* Print information about one overload candidate CANDIDATE. STR is the
2441 text to print before the candidate itself and ERRFN is the routine
2442 (i.e. error, warning or pedwarn) used to do the printing. */
2444 static void
2445 print_z_candidate (const char *msgid, struct z_candidate *candidate,
2446 void (*errfn)(const char *, ...))
2448 if (TREE_CODE (candidate->fn) == IDENTIFIER_NODE)
2450 if (TREE_VEC_LENGTH (candidate->convs) == 3)
2451 errfn ("%s %D(%T, %T, %T) <built-in>", msgid, candidate->fn,
2452 TREE_TYPE (TREE_VEC_ELT (candidate->convs, 0)),
2453 TREE_TYPE (TREE_VEC_ELT (candidate->convs, 1)),
2454 TREE_TYPE (TREE_VEC_ELT (candidate->convs, 2)));
2455 else if (TREE_VEC_LENGTH (candidate->convs) == 2)
2456 errfn ("%s %D(%T, %T) <built-in>", msgid, candidate->fn,
2457 TREE_TYPE (TREE_VEC_ELT (candidate->convs, 0)),
2458 TREE_TYPE (TREE_VEC_ELT (candidate->convs, 1)));
2459 else
2460 errfn ("%s %D(%T) <built-in>", msgid, candidate->fn,
2461 TREE_TYPE (TREE_VEC_ELT (candidate->convs, 0)));
2463 else if (TYPE_P (candidate->fn))
2464 errfn ("%s %T <conversion>", msgid, candidate->fn);
2465 else
2466 errfn ("%H%s %+#D%s", &DECL_SOURCE_LOCATION (candidate->fn), msgid,
2467 candidate->fn, candidate->viable == -1 ? " <near match>" : "");
2470 static void
2471 print_z_candidates (struct z_candidate *candidates)
2473 const char *str;
2474 struct z_candidate *cand1;
2475 struct z_candidate **cand2;
2477 /* There may be duplicates in the set of candidates. We put off
2478 checking this condition as long as possible, since we have no way
2479 to eliminate duplicates from a set of functions in less than n^2
2480 time. Now we are about to emit an error message, so it is more
2481 permissible to go slowly. */
2482 for (cand1 = candidates; cand1; cand1 = cand1->next)
2484 tree fn = cand1->fn;
2485 /* Skip builtin candidates and conversion functions. */
2486 if (TREE_CODE (fn) != FUNCTION_DECL)
2487 continue;
2488 cand2 = &cand1->next;
2489 while (*cand2)
2491 if (TREE_CODE ((*cand2)->fn) == FUNCTION_DECL
2492 && equal_functions (fn, (*cand2)->fn))
2493 *cand2 = (*cand2)->next;
2494 else
2495 cand2 = &(*cand2)->next;
2499 str = "candidates are:";
2500 for (; candidates; candidates = candidates->next)
2502 print_z_candidate (str, candidates, error);
2503 str = " ";
2507 /* USER_SEQ is a user-defined conversion sequence, beginning with a
2508 USER_CONV. STD_SEQ is the standard conversion sequence applied to
2509 the result of the conversion function to convert it to the final
2510 desired type. Merge the the two sequences into a single sequence,
2511 and return the merged sequence. */
2513 static tree
2514 merge_conversion_sequences (tree user_seq, tree std_seq)
2516 tree *t;
2518 my_friendly_assert (TREE_CODE (user_seq) == USER_CONV,
2519 20030306);
2521 /* Find the end of the second conversion sequence. */
2522 t = &(std_seq);
2523 while (TREE_CODE (*t) != IDENTITY_CONV)
2524 t = &TREE_OPERAND (*t, 0);
2526 /* Replace the identity conversion with the user conversion
2527 sequence. */
2528 *t = user_seq;
2530 /* The entire sequence is a user-conversion sequence. */
2531 ICS_USER_FLAG (std_seq) = 1;
2533 return std_seq;
2536 /* Returns the best overload candidate to perform the requested
2537 conversion. This function is used for three the overloading situations
2538 described in [over.match.copy], [over.match.conv], and [over.match.ref].
2539 If TOTYPE is a REFERENCE_TYPE, we're trying to find an lvalue binding as
2540 per [dcl.init.ref], so we ignore temporary bindings. */
2542 static struct z_candidate *
2543 build_user_type_conversion_1 (tree totype, tree expr, int flags)
2545 struct z_candidate *candidates, *cand;
2546 tree fromtype = TREE_TYPE (expr);
2547 tree ctors = NULL_TREE, convs = NULL_TREE;
2548 tree args = NULL_TREE;
2549 bool any_viable_p;
2551 /* We represent conversion within a hierarchy using RVALUE_CONV and
2552 BASE_CONV, as specified by [over.best.ics]; these become plain
2553 constructor calls, as specified in [dcl.init]. */
2554 my_friendly_assert (!IS_AGGR_TYPE (fromtype) || !IS_AGGR_TYPE (totype)
2555 || !DERIVED_FROM_P (totype, fromtype), 20011226);
2557 if (IS_AGGR_TYPE (totype))
2558 ctors = lookup_fnfields (TYPE_BINFO (totype),
2559 complete_ctor_identifier,
2562 if (IS_AGGR_TYPE (fromtype))
2563 convs = lookup_conversions (fromtype);
2565 candidates = 0;
2566 flags |= LOOKUP_NO_CONVERSION;
2568 if (ctors)
2570 tree t;
2572 ctors = BASELINK_FUNCTIONS (ctors);
2574 t = build_int_2 (0, 0);
2575 TREE_TYPE (t) = build_pointer_type (totype);
2576 args = build_tree_list (NULL_TREE, expr);
2577 /* We should never try to call the abstract or base constructor
2578 from here. */
2579 my_friendly_assert (!DECL_HAS_IN_CHARGE_PARM_P (OVL_CURRENT (ctors))
2580 && !DECL_HAS_VTT_PARM_P (OVL_CURRENT (ctors)),
2581 20011226);
2582 args = tree_cons (NULL_TREE, t, args);
2584 for (; ctors; ctors = OVL_NEXT (ctors))
2586 tree ctor = OVL_CURRENT (ctors);
2587 if (DECL_NONCONVERTING_P (ctor))
2588 continue;
2590 if (TREE_CODE (ctor) == TEMPLATE_DECL)
2591 cand = add_template_candidate (&candidates, ctor, totype,
2592 NULL_TREE, args, NULL_TREE,
2593 TYPE_BINFO (totype),
2594 TYPE_BINFO (totype),
2595 flags,
2596 DEDUCE_CALL);
2597 else
2598 cand = add_function_candidate (&candidates, ctor, totype,
2599 args, TYPE_BINFO (totype),
2600 TYPE_BINFO (totype),
2601 flags);
2603 if (cand)
2604 cand->second_conv = build1 (IDENTITY_CONV, totype, NULL_TREE);
2607 if (convs)
2608 args = build_tree_list (NULL_TREE, build_this (expr));
2610 for (; convs; convs = TREE_CHAIN (convs))
2612 tree fns;
2613 tree conversion_path = TREE_PURPOSE (convs);
2614 int convflags = LOOKUP_NO_CONVERSION;
2616 /* If we are called to convert to a reference type, we are trying to
2617 find an lvalue binding, so don't even consider temporaries. If
2618 we don't find an lvalue binding, the caller will try again to
2619 look for a temporary binding. */
2620 if (TREE_CODE (totype) == REFERENCE_TYPE)
2621 convflags |= LOOKUP_NO_TEMP_BIND;
2623 for (fns = TREE_VALUE (convs); fns; fns = OVL_NEXT (fns))
2625 tree fn = OVL_CURRENT (fns);
2627 /* [over.match.funcs] For conversion functions, the function
2628 is considered to be a member of the class of the implicit
2629 object argument for the purpose of defining the type of
2630 the implicit object parameter.
2632 So we pass fromtype as CTYPE to add_*_candidate. */
2634 if (TREE_CODE (fn) == TEMPLATE_DECL)
2635 cand = add_template_candidate (&candidates, fn, fromtype,
2636 NULL_TREE,
2637 args, totype,
2638 TYPE_BINFO (fromtype),
2639 conversion_path,
2640 flags,
2641 DEDUCE_CONV);
2642 else
2643 cand = add_function_candidate (&candidates, fn, fromtype,
2644 args,
2645 TYPE_BINFO (fromtype),
2646 conversion_path,
2647 flags);
2649 if (cand)
2651 tree ics = implicit_conversion (totype,
2652 TREE_TYPE (TREE_TYPE (cand->fn)),
2653 0, convflags);
2655 cand->second_conv = ics;
2657 if (ics == NULL_TREE)
2658 cand->viable = 0;
2659 else if (candidates->viable == 1 && ICS_BAD_FLAG (ics))
2660 cand->viable = -1;
2665 candidates = splice_viable (candidates, pedantic, &any_viable_p);
2666 if (!any_viable_p)
2667 return 0;
2669 cand = tourney (candidates);
2670 if (cand == 0)
2672 if (flags & LOOKUP_COMPLAIN)
2674 error ("conversion from `%T' to `%T' is ambiguous",
2675 fromtype, totype);
2676 print_z_candidates (candidates);
2679 cand = candidates; /* any one will do */
2680 cand->second_conv = build1 (AMBIG_CONV, totype, expr);
2681 ICS_USER_FLAG (cand->second_conv) = 1;
2682 if (!any_strictly_viable (candidates))
2683 ICS_BAD_FLAG (cand->second_conv) = 1;
2684 /* If there are viable candidates, don't set ICS_BAD_FLAG; an
2685 ambiguous conversion is no worse than another user-defined
2686 conversion. */
2688 return cand;
2691 /* Build the user conversion sequence. */
2692 convs = build_conv
2693 (USER_CONV,
2694 (DECL_CONSTRUCTOR_P (cand->fn)
2695 ? totype : non_reference (TREE_TYPE (TREE_TYPE (cand->fn)))),
2696 build1 (IDENTITY_CONV, TREE_TYPE (expr), expr));
2697 TREE_OPERAND (convs, 1) = build_zc_wrapper (cand);
2699 /* Combine it with the second conversion sequence. */
2700 cand->second_conv = merge_conversion_sequences (convs,
2701 cand->second_conv);
2703 if (cand->viable == -1)
2704 ICS_BAD_FLAG (cand->second_conv) = 1;
2706 return cand;
2709 tree
2710 build_user_type_conversion (tree totype, tree expr, int flags)
2712 struct z_candidate *cand
2713 = build_user_type_conversion_1 (totype, expr, flags);
2715 if (cand)
2717 if (TREE_CODE (cand->second_conv) == AMBIG_CONV)
2718 return error_mark_node;
2719 return convert_from_reference (convert_like (cand->second_conv, expr));
2721 return NULL_TREE;
2724 /* Find the possibly overloaded set of functions corresponding to a
2725 call of the form SCOPE::NAME (...). NAME might be a
2726 TEMPLATE_ID_EXPR, OVERLOAD, _DECL, IDENTIFIER_NODE or LOOKUP_EXPR. */
2728 tree
2729 resolve_scoped_fn_name (tree scope, tree name)
2731 tree fn;
2732 tree template_args = NULL_TREE;
2733 bool is_template_id = TREE_CODE (name) == TEMPLATE_ID_EXPR;
2735 if (is_template_id)
2737 template_args = TREE_OPERAND (name, 1);
2738 name = TREE_OPERAND (name, 0);
2740 if (TREE_CODE (name) == OVERLOAD)
2741 name = DECL_NAME (get_first_fn (name));
2742 else if (TREE_CODE (name) == LOOKUP_EXPR)
2743 name = TREE_OPERAND (name, 0);
2745 if (TREE_CODE (scope) == NAMESPACE_DECL)
2746 fn = lookup_namespace_name (scope, name);
2747 else
2749 if (!TYPE_BEING_DEFINED (scope)
2750 && !COMPLETE_TYPE_P (complete_type (scope)))
2752 error ("incomplete type '%T' cannot be used to name a scope",
2753 scope);
2754 return error_mark_node;
2757 if (BASELINK_P (name))
2758 fn = name;
2759 else
2760 fn = lookup_member (scope, name, /*protect=*/1, /*want_type=*/false);
2761 if (fn && current_class_type)
2762 fn = (adjust_result_of_qualified_name_lookup
2763 (fn, scope, current_class_type));
2765 /* It might be the name of a function pointer member. */
2766 if (fn && TREE_CODE (fn) == FIELD_DECL)
2767 fn = resolve_offset_ref (build_offset_ref (scope, fn));
2770 if (!fn)
2772 error ("'%D' has no member named '%E'", scope, name);
2773 return error_mark_node;
2775 if (is_template_id)
2777 tree fns = fn;
2779 if (BASELINK_P (fn))
2780 fns = BASELINK_FUNCTIONS (fns);
2781 fns = build_nt (TEMPLATE_ID_EXPR, fns, template_args);
2782 if (BASELINK_P (fn))
2783 BASELINK_FUNCTIONS (fn) = fns;
2784 else
2785 fn = fns;
2788 return fn;
2791 /* Do any initial processing on the arguments to a function call. */
2793 static tree
2794 resolve_args (tree args)
2796 tree t;
2797 for (t = args; t; t = TREE_CHAIN (t))
2799 tree arg = TREE_VALUE (t);
2801 if (arg == error_mark_node)
2802 return error_mark_node;
2803 else if (VOID_TYPE_P (TREE_TYPE (arg)))
2805 error ("invalid use of void expression");
2806 return error_mark_node;
2808 else if (TREE_CODE (arg) == OFFSET_REF)
2809 arg = resolve_offset_ref (arg);
2810 arg = convert_from_reference (arg);
2811 TREE_VALUE (t) = arg;
2813 return args;
2816 /* Perform overload resolution on FN, which is called with the ARGS.
2818 Return the candidate function selected by overload resolution, or
2819 NULL if the event that overload resolution failed. In the case
2820 that overload resolution fails, *CANDIDATES will be the set of
2821 candidates considered, and ANY_VIABLE_P will be set to true or
2822 false to indicate whether or not any of the candidates were
2823 viable.
2825 The ARGS should already have gone through RESOLVE_ARGS before this
2826 function is called. */
2828 static struct z_candidate *
2829 perform_overload_resolution (tree fn,
2830 tree args,
2831 struct z_candidate **candidates,
2832 bool *any_viable_p)
2834 struct z_candidate *cand;
2835 tree explicit_targs = NULL_TREE;
2836 int template_only = 0;
2838 *candidates = NULL;
2839 *any_viable_p = true;
2841 /* Check FN and ARGS. */
2842 my_friendly_assert (TREE_CODE (fn) == FUNCTION_DECL
2843 || TREE_CODE (fn) == TEMPLATE_DECL
2844 || TREE_CODE (fn) == OVERLOAD
2845 || TREE_CODE (fn) == TEMPLATE_ID_EXPR,
2846 20020712);
2847 my_friendly_assert (!args || TREE_CODE (args) == TREE_LIST,
2848 20020712);
2850 if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
2852 explicit_targs = TREE_OPERAND (fn, 1);
2853 fn = TREE_OPERAND (fn, 0);
2854 template_only = 1;
2857 /* Add the various candidate functions. */
2858 add_candidates (fn, args, explicit_targs, template_only,
2859 /*conversion_path=*/NULL_TREE,
2860 /*access_path=*/NULL_TREE,
2861 LOOKUP_NORMAL,
2862 candidates);
2864 *candidates = splice_viable (*candidates, pedantic, any_viable_p);
2865 if (!*any_viable_p)
2866 return NULL;
2868 cand = tourney (*candidates);
2869 return cand;
2872 /* Return an expression for a call to FN (a namespace-scope function,
2873 or a static member function) with the ARGS. */
2875 tree
2876 build_new_function_call (tree fn, tree args)
2878 struct z_candidate *candidates, *cand;
2879 bool any_viable_p;
2881 args = resolve_args (args);
2882 if (args == error_mark_node)
2883 return error_mark_node;
2885 cand = perform_overload_resolution (fn, args, &candidates, &any_viable_p);
2887 if (!cand)
2889 if (!any_viable_p && candidates && ! candidates->next)
2890 return build_function_call (candidates->fn, args);
2891 if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
2892 fn = TREE_OPERAND (fn, 0);
2893 if (!any_viable_p)
2894 error ("no matching function for call to `%D(%A)'",
2895 DECL_NAME (OVL_CURRENT (fn)), args);
2896 else
2897 error ("call of overloaded `%D(%A)' is ambiguous",
2898 DECL_NAME (OVL_CURRENT (fn)), args);
2899 if (candidates)
2900 print_z_candidates (candidates);
2901 return error_mark_node;
2904 return build_over_call (cand, LOOKUP_NORMAL);
2907 /* Build a call to a global operator new. FNNAME is the name of the
2908 operator (either "operator new" or "operator new[]") and ARGS are
2909 the arguments provided. *SIZE points to the total number of bytes
2910 required by the allocation, and is updated if that is changed here.
2911 *COOKIE_SIZE is non-NULL if a cookie should be used. If this
2912 function determins that no cookie should be used, after all,
2913 *COOKIE_SIZE is set to NULL_TREE. */
2915 tree
2916 build_operator_new_call (tree fnname, tree args, tree *size, tree *cookie_size)
2918 tree fns;
2919 struct z_candidate *candidates;
2920 struct z_candidate *cand;
2921 bool any_viable_p;
2923 args = tree_cons (NULL_TREE, *size, args);
2924 args = resolve_args (args);
2925 if (args == error_mark_node)
2926 return args;
2928 fns = lookup_function_nonclass (fnname, args);
2930 /* Figure out what function is being called. */
2931 cand = perform_overload_resolution (fns, args, &candidates, &any_viable_p);
2933 /* If no suitable function could be found, issue an error message
2934 and give up. */
2935 if (!cand)
2937 if (!any_viable_p)
2938 error ("no matching function for call to `%D(%A)'",
2939 DECL_NAME (OVL_CURRENT (fns)), args);
2940 else
2941 error ("call of overlopaded `%D(%A)' is ambiguous",
2942 DECL_NAME (OVL_CURRENT (fns)), args);
2943 if (candidates)
2944 print_z_candidates (candidates);
2945 return error_mark_node;
2948 /* If a cookie is required, add some extra space. Whether
2949 or not a cookie is required cannot be determined until
2950 after we know which function was called. */
2951 if (*cookie_size)
2953 bool use_cookie = true;
2954 if (!abi_version_at_least (2))
2956 tree placement = TREE_CHAIN (args);
2957 /* In G++ 3.2, the check was implemented incorrectly; it
2958 looked at the placement expression, rather than the
2959 type of the function. */
2960 if (placement && !TREE_CHAIN (placement)
2961 && same_type_p (TREE_TYPE (TREE_VALUE (placement)),
2962 ptr_type_node))
2963 use_cookie = false;
2965 else
2967 tree arg_types;
2969 arg_types = TYPE_ARG_TYPES (TREE_TYPE (cand->fn));
2970 /* Skip the size_t parameter. */
2971 arg_types = TREE_CHAIN (arg_types);
2972 /* Check the remaining parameters (if any). */
2973 if (arg_types
2974 && TREE_CHAIN (arg_types) == void_list_node
2975 && same_type_p (TREE_VALUE (arg_types),
2976 ptr_type_node))
2977 use_cookie = false;
2979 /* If we need a cookie, adjust the number of bytes allocated. */
2980 if (use_cookie)
2982 /* Update the total size. */
2983 *size = size_binop (PLUS_EXPR, *size, *cookie_size);
2984 /* Update the argument list to reflect the adjusted size. */
2985 TREE_VALUE (args) = *size;
2987 else
2988 *cookie_size = NULL_TREE;
2991 /* Build the CALL_EXPR. */
2992 return build_over_call (cand, LOOKUP_NORMAL);
2995 static tree
2996 build_object_call (tree obj, tree args)
2998 struct z_candidate *candidates = 0, *cand;
2999 tree fns, convs, mem_args = NULL_TREE;
3000 tree type = TREE_TYPE (obj);
3001 bool any_viable_p;
3003 if (TYPE_PTRMEMFUNC_P (type))
3005 /* It's no good looking for an overloaded operator() on a
3006 pointer-to-member-function. */
3007 error ("pointer-to-member function %E cannot be called without an object; consider using .* or ->*", obj);
3008 return error_mark_node;
3011 fns = lookup_fnfields (TYPE_BINFO (type), ansi_opname (CALL_EXPR), 1);
3012 if (fns == error_mark_node)
3013 return error_mark_node;
3015 args = resolve_args (args);
3017 if (args == error_mark_node)
3018 return error_mark_node;
3020 if (fns)
3022 tree base = BINFO_TYPE (BASELINK_BINFO (fns));
3023 mem_args = tree_cons (NULL_TREE, build_this (obj), args);
3025 for (fns = BASELINK_FUNCTIONS (fns); fns; fns = OVL_NEXT (fns))
3027 tree fn = OVL_CURRENT (fns);
3028 if (TREE_CODE (fn) == TEMPLATE_DECL)
3029 add_template_candidate (&candidates, fn, base, NULL_TREE,
3030 mem_args, NULL_TREE,
3031 TYPE_BINFO (type),
3032 TYPE_BINFO (type),
3033 LOOKUP_NORMAL, DEDUCE_CALL);
3034 else
3035 add_function_candidate
3036 (&candidates, fn, base, mem_args, TYPE_BINFO (type),
3037 TYPE_BINFO (type), LOOKUP_NORMAL);
3041 convs = lookup_conversions (type);
3043 for (; convs; convs = TREE_CHAIN (convs))
3045 tree fns = TREE_VALUE (convs);
3046 tree totype = TREE_TYPE (TREE_TYPE (OVL_CURRENT (fns)));
3048 if ((TREE_CODE (totype) == POINTER_TYPE
3049 && TREE_CODE (TREE_TYPE (totype)) == FUNCTION_TYPE)
3050 || (TREE_CODE (totype) == REFERENCE_TYPE
3051 && TREE_CODE (TREE_TYPE (totype)) == FUNCTION_TYPE)
3052 || (TREE_CODE (totype) == REFERENCE_TYPE
3053 && TREE_CODE (TREE_TYPE (totype)) == POINTER_TYPE
3054 && TREE_CODE (TREE_TYPE (TREE_TYPE (totype))) == FUNCTION_TYPE))
3055 for (; fns; fns = OVL_NEXT (fns))
3057 tree fn = OVL_CURRENT (fns);
3058 if (TREE_CODE (fn) == TEMPLATE_DECL)
3059 add_template_conv_candidate
3060 (&candidates, fn, obj, args, totype,
3061 /*access_path=*/NULL_TREE,
3062 /*conversion_path=*/NULL_TREE);
3063 else
3064 add_conv_candidate (&candidates, fn, obj, args,
3065 /*conversion_path=*/NULL_TREE,
3066 /*access_path=*/NULL_TREE);
3070 candidates = splice_viable (candidates, pedantic, &any_viable_p);
3071 if (!any_viable_p)
3073 error ("no match for call to `(%T) (%A)'", TREE_TYPE (obj), args);
3074 print_z_candidates (candidates);
3075 return error_mark_node;
3078 cand = tourney (candidates);
3079 if (cand == 0)
3081 error ("call of `(%T) (%A)' is ambiguous", TREE_TYPE (obj), args);
3082 print_z_candidates (candidates);
3083 return error_mark_node;
3086 /* Since cand->fn will be a type, not a function, for a conversion
3087 function, we must be careful not to unconditionally look at
3088 DECL_NAME here. */
3089 if (TREE_CODE (cand->fn) == FUNCTION_DECL
3090 && DECL_OVERLOADED_OPERATOR_P (cand->fn) == CALL_EXPR)
3091 return build_over_call (cand, LOOKUP_NORMAL);
3093 obj = convert_like_with_context
3094 (TREE_VEC_ELT (cand->convs, 0), obj, cand->fn, -1);
3096 /* FIXME */
3097 return build_function_call (obj, args);
3100 static void
3101 op_error (enum tree_code code, enum tree_code code2,
3102 tree arg1, tree arg2, tree arg3, const char *problem)
3104 const char *opname;
3106 if (code == MODIFY_EXPR)
3107 opname = assignment_operator_name_info[code2].name;
3108 else
3109 opname = operator_name_info[code].name;
3111 switch (code)
3113 case COND_EXPR:
3114 error ("%s for `%T ? %T : %T' operator", problem,
3115 error_type (arg1), error_type (arg2), error_type (arg3));
3116 break;
3117 case POSTINCREMENT_EXPR:
3118 case POSTDECREMENT_EXPR:
3119 error ("%s for `%T %s' operator", problem, error_type (arg1), opname);
3120 break;
3121 case ARRAY_REF:
3122 error ("%s for `%T [%T]' operator", problem,
3123 error_type (arg1), error_type (arg2));
3124 break;
3125 default:
3126 if (arg2)
3127 error ("%s for `%T %s %T' operator", problem,
3128 error_type (arg1), opname, error_type (arg2));
3129 else
3130 error ("%s for `%s %T' operator", problem, opname, error_type (arg1));
3134 /* Return the implicit conversion sequence that could be used to
3135 convert E1 to E2 in [expr.cond]. */
3137 static tree
3138 conditional_conversion (tree e1, tree e2)
3140 tree t1 = non_reference (TREE_TYPE (e1));
3141 tree t2 = non_reference (TREE_TYPE (e2));
3142 tree conv;
3144 /* [expr.cond]
3146 If E2 is an lvalue: E1 can be converted to match E2 if E1 can be
3147 implicitly converted (clause _conv_) to the type "reference to
3148 T2", subject to the constraint that in the conversion the
3149 reference must bind directly (_dcl.init.ref_) to E1. */
3150 if (real_lvalue_p (e2))
3152 conv = implicit_conversion (build_reference_type (t2),
3155 LOOKUP_NO_TEMP_BIND);
3156 if (conv)
3157 return conv;
3160 /* [expr.cond]
3162 If E1 and E2 have class type, and the underlying class types are
3163 the same or one is a base class of the other: E1 can be converted
3164 to match E2 if the class of T2 is the same type as, or a base
3165 class of, the class of T1, and the cv-qualification of T2 is the
3166 same cv-qualification as, or a greater cv-qualification than, the
3167 cv-qualification of T1. If the conversion is applied, E1 is
3168 changed to an rvalue of type T2 that still refers to the original
3169 source class object (or the appropriate subobject thereof). */
3170 if (CLASS_TYPE_P (t1) && CLASS_TYPE_P (t2)
3171 && same_or_base_type_p (TYPE_MAIN_VARIANT (t2),
3172 TYPE_MAIN_VARIANT (t1)))
3174 if (at_least_as_qualified_p (t2, t1))
3176 conv = build1 (IDENTITY_CONV, t1, e1);
3177 if (!same_type_p (TYPE_MAIN_VARIANT (t1),
3178 TYPE_MAIN_VARIANT (t2)))
3179 conv = build_conv (BASE_CONV, t2, conv);
3180 return conv;
3182 else
3183 return NULL_TREE;
3186 /* [expr.cond]
3188 E1 can be converted to match E2 if E1 can be implicitly converted
3189 to the type that expression E2 would have if E2 were converted to
3190 an rvalue (or the type it has, if E2 is an rvalue). */
3191 return implicit_conversion (t2, t1, e1, LOOKUP_NORMAL);
3194 /* Implement [expr.cond]. ARG1, ARG2, and ARG3 are the three
3195 arguments to the conditional expression. */
3197 tree
3198 build_conditional_expr (tree arg1, tree arg2, tree arg3)
3200 tree arg2_type;
3201 tree arg3_type;
3202 tree result;
3203 tree result_type = NULL_TREE;
3204 bool lvalue_p = true;
3205 struct z_candidate *candidates = 0;
3206 struct z_candidate *cand;
3208 /* As a G++ extension, the second argument to the conditional can be
3209 omitted. (So that `a ? : c' is roughly equivalent to `a ? a :
3210 c'.) If the second operand is omitted, make sure it is
3211 calculated only once. */
3212 if (!arg2)
3214 if (pedantic)
3215 pedwarn ("ISO C++ forbids omitting the middle term of a ?: expression");
3217 /* Make sure that lvalues remain lvalues. See g++.oliva/ext1.C. */
3218 if (real_lvalue_p (arg1))
3219 arg2 = arg1 = stabilize_reference (arg1);
3220 else
3221 arg2 = arg1 = save_expr (arg1);
3224 /* [expr.cond]
3226 The first expr ession is implicitly converted to bool (clause
3227 _conv_). */
3228 arg1 = cp_convert (boolean_type_node, arg1);
3230 /* If something has already gone wrong, just pass that fact up the
3231 tree. */
3232 if (arg1 == error_mark_node
3233 || arg2 == error_mark_node
3234 || arg3 == error_mark_node
3235 || TREE_TYPE (arg1) == error_mark_node
3236 || TREE_TYPE (arg2) == error_mark_node
3237 || TREE_TYPE (arg3) == error_mark_node)
3238 return error_mark_node;
3240 /* [expr.cond]
3242 If either the second or the third operand has type (possibly
3243 cv-qualified) void, then the lvalue-to-rvalue (_conv.lval_),
3244 array-to-pointer (_conv.array_), and function-to-pointer
3245 (_conv.func_) standard conversions are performed on the second
3246 and third operands. */
3247 arg2_type = TREE_TYPE (arg2);
3248 arg3_type = TREE_TYPE (arg3);
3249 if (VOID_TYPE_P (arg2_type) || VOID_TYPE_P (arg3_type))
3251 /* Do the conversions. We don't these for `void' type arguments
3252 since it can't have any effect and since decay_conversion
3253 does not handle that case gracefully. */
3254 if (!VOID_TYPE_P (arg2_type))
3255 arg2 = decay_conversion (arg2);
3256 if (!VOID_TYPE_P (arg3_type))
3257 arg3 = decay_conversion (arg3);
3258 arg2_type = TREE_TYPE (arg2);
3259 arg3_type = TREE_TYPE (arg3);
3261 /* [expr.cond]
3263 One of the following shall hold:
3265 --The second or the third operand (but not both) is a
3266 throw-expression (_except.throw_); the result is of the
3267 type of the other and is an rvalue.
3269 --Both the second and the third operands have type void; the
3270 result is of type void and is an rvalue. */
3271 if ((TREE_CODE (arg2) == THROW_EXPR)
3272 ^ (TREE_CODE (arg3) == THROW_EXPR))
3273 result_type = ((TREE_CODE (arg2) == THROW_EXPR)
3274 ? arg3_type : arg2_type);
3275 else if (VOID_TYPE_P (arg2_type) && VOID_TYPE_P (arg3_type))
3276 result_type = void_type_node;
3277 else
3279 error ("`%E' has type `void' and is not a throw-expression",
3280 VOID_TYPE_P (arg2_type) ? arg2 : arg3);
3281 return error_mark_node;
3284 lvalue_p = false;
3285 goto valid_operands;
3287 /* [expr.cond]
3289 Otherwise, if the second and third operand have different types,
3290 and either has (possibly cv-qualified) class type, an attempt is
3291 made to convert each of those operands to the type of the other. */
3292 else if (!same_type_p (arg2_type, arg3_type)
3293 && (CLASS_TYPE_P (arg2_type) || CLASS_TYPE_P (arg3_type)))
3295 tree conv2 = conditional_conversion (arg2, arg3);
3296 tree conv3 = conditional_conversion (arg3, arg2);
3298 /* [expr.cond]
3300 If both can be converted, or one can be converted but the
3301 conversion is ambiguous, the program is ill-formed. If
3302 neither can be converted, the operands are left unchanged and
3303 further checking is performed as described below. If exactly
3304 one conversion is possible, that conversion is applied to the
3305 chosen operand and the converted operand is used in place of
3306 the original operand for the remainder of this section. */
3307 if ((conv2 && !ICS_BAD_FLAG (conv2)
3308 && conv3 && !ICS_BAD_FLAG (conv3))
3309 || (conv2 && TREE_CODE (conv2) == AMBIG_CONV)
3310 || (conv3 && TREE_CODE (conv3) == AMBIG_CONV))
3312 error ("operands to ?: have different types");
3313 return error_mark_node;
3315 else if (conv2 && !ICS_BAD_FLAG (conv2))
3317 arg2 = convert_like (conv2, arg2);
3318 arg2 = convert_from_reference (arg2);
3319 /* That may not quite have done the trick. If the two types
3320 are cv-qualified variants of one another, we will have
3321 just used an IDENTITY_CONV. */
3322 if (!same_type_p (TREE_TYPE (arg2), arg3_type))
3323 arg2 = convert (arg3_type, arg2);
3324 arg2_type = TREE_TYPE (arg2);
3326 else if (conv3 && !ICS_BAD_FLAG (conv3))
3328 arg3 = convert_like (conv3, arg3);
3329 arg3 = convert_from_reference (arg3);
3330 if (!same_type_p (TREE_TYPE (arg3), arg2_type))
3331 arg3 = convert (arg2_type, arg3);
3332 arg3_type = TREE_TYPE (arg3);
3336 /* [expr.cond]
3338 If the second and third operands are lvalues and have the same
3339 type, the result is of that type and is an lvalue. */
3340 if (real_lvalue_p (arg2) && real_lvalue_p (arg3) &&
3341 same_type_p (arg2_type, arg3_type))
3343 result_type = arg2_type;
3344 goto valid_operands;
3347 /* [expr.cond]
3349 Otherwise, the result is an rvalue. If the second and third
3350 operand do not have the same type, and either has (possibly
3351 cv-qualified) class type, overload resolution is used to
3352 determine the conversions (if any) to be applied to the operands
3353 (_over.match.oper_, _over.built_). */
3354 lvalue_p = false;
3355 if (!same_type_p (arg2_type, arg3_type)
3356 && (CLASS_TYPE_P (arg2_type) || CLASS_TYPE_P (arg3_type)))
3358 tree args[3];
3359 tree conv;
3360 bool any_viable_p;
3362 /* Rearrange the arguments so that add_builtin_candidate only has
3363 to know about two args. In build_builtin_candidates, the
3364 arguments are unscrambled. */
3365 args[0] = arg2;
3366 args[1] = arg3;
3367 args[2] = arg1;
3368 add_builtin_candidates (&candidates,
3369 COND_EXPR,
3370 NOP_EXPR,
3371 ansi_opname (COND_EXPR),
3372 args,
3373 LOOKUP_NORMAL);
3375 /* [expr.cond]
3377 If the overload resolution fails, the program is
3378 ill-formed. */
3379 candidates = splice_viable (candidates, pedantic, &any_viable_p);
3380 if (!any_viable_p)
3382 op_error (COND_EXPR, NOP_EXPR, arg1, arg2, arg3, "no match");
3383 print_z_candidates (candidates);
3384 return error_mark_node;
3386 cand = tourney (candidates);
3387 if (!cand)
3389 op_error (COND_EXPR, NOP_EXPR, arg1, arg2, arg3, "no match");
3390 print_z_candidates (candidates);
3391 return error_mark_node;
3394 /* [expr.cond]
3396 Otherwise, the conversions thus determined are applied, and
3397 the converted operands are used in place of the original
3398 operands for the remainder of this section. */
3399 conv = TREE_VEC_ELT (cand->convs, 0);
3400 arg1 = convert_like (conv, arg1);
3401 conv = TREE_VEC_ELT (cand->convs, 1);
3402 arg2 = convert_like (conv, arg2);
3403 conv = TREE_VEC_ELT (cand->convs, 2);
3404 arg3 = convert_like (conv, arg3);
3407 /* [expr.cond]
3409 Lvalue-to-rvalue (_conv.lval_), array-to-pointer (_conv.array_),
3410 and function-to-pointer (_conv.func_) standard conversions are
3411 performed on the second and third operands.
3413 We need to force the lvalue-to-rvalue conversion here for class types,
3414 so we get TARGET_EXPRs; trying to deal with a COND_EXPR of class rvalues
3415 that isn't wrapped with a TARGET_EXPR plays havoc with exception
3416 regions.
3418 We use ocp_convert rather than build_user_type_conversion because the
3419 latter returns NULL_TREE on failure, while the former gives an error. */
3421 arg2 = force_rvalue (arg2);
3422 arg2_type = TREE_TYPE (arg2);
3424 arg3 = force_rvalue (arg3);
3425 arg3_type = TREE_TYPE (arg3);
3427 if (arg2 == error_mark_node || arg3 == error_mark_node)
3428 return error_mark_node;
3430 /* [expr.cond]
3432 After those conversions, one of the following shall hold:
3434 --The second and third operands have the same type; the result is of
3435 that type. */
3436 if (same_type_p (arg2_type, arg3_type))
3437 result_type = arg2_type;
3438 /* [expr.cond]
3440 --The second and third operands have arithmetic or enumeration
3441 type; the usual arithmetic conversions are performed to bring
3442 them to a common type, and the result is of that type. */
3443 else if ((ARITHMETIC_TYPE_P (arg2_type)
3444 || TREE_CODE (arg2_type) == ENUMERAL_TYPE)
3445 && (ARITHMETIC_TYPE_P (arg3_type)
3446 || TREE_CODE (arg3_type) == ENUMERAL_TYPE))
3448 /* In this case, there is always a common type. */
3449 result_type = type_after_usual_arithmetic_conversions (arg2_type,
3450 arg3_type);
3452 if (TREE_CODE (arg2_type) == ENUMERAL_TYPE
3453 && TREE_CODE (arg3_type) == ENUMERAL_TYPE)
3454 warning ("enumeral mismatch in conditional expression: `%T' vs `%T'",
3455 arg2_type, arg3_type);
3456 else if (extra_warnings
3457 && ((TREE_CODE (arg2_type) == ENUMERAL_TYPE
3458 && !same_type_p (arg3_type, type_promotes_to (arg2_type)))
3459 || (TREE_CODE (arg3_type) == ENUMERAL_TYPE
3460 && !same_type_p (arg2_type, type_promotes_to (arg3_type)))))
3461 warning ("enumeral and non-enumeral type in conditional expression");
3463 arg2 = perform_implicit_conversion (result_type, arg2);
3464 arg3 = perform_implicit_conversion (result_type, arg3);
3466 /* [expr.cond]
3468 --The second and third operands have pointer type, or one has
3469 pointer type and the other is a null pointer constant; pointer
3470 conversions (_conv.ptr_) and qualification conversions
3471 (_conv.qual_) are performed to bring them to their composite
3472 pointer type (_expr.rel_). The result is of the composite
3473 pointer type.
3475 --The second and third operands have pointer to member type, or
3476 one has pointer to member type and the other is a null pointer
3477 constant; pointer to member conversions (_conv.mem_) and
3478 qualification conversions (_conv.qual_) are performed to bring
3479 them to a common type, whose cv-qualification shall match the
3480 cv-qualification of either the second or the third operand.
3481 The result is of the common type. */
3482 else if ((null_ptr_cst_p (arg2)
3483 && (TYPE_PTR_P (arg3_type) || TYPE_PTRMEM_P (arg3_type)
3484 || TYPE_PTRMEMFUNC_P (arg3_type)))
3485 || (null_ptr_cst_p (arg3)
3486 && (TYPE_PTR_P (arg2_type) || TYPE_PTRMEM_P (arg2_type)
3487 || TYPE_PTRMEMFUNC_P (arg2_type)))
3488 || (TYPE_PTR_P (arg2_type) && TYPE_PTR_P (arg3_type))
3489 || (TYPE_PTRMEM_P (arg2_type) && TYPE_PTRMEM_P (arg3_type))
3490 || (TYPE_PTRMEMFUNC_P (arg2_type)
3491 && TYPE_PTRMEMFUNC_P (arg3_type)))
3493 result_type = composite_pointer_type (arg2_type, arg3_type, arg2,
3494 arg3, "conditional expression");
3495 arg2 = perform_implicit_conversion (result_type, arg2);
3496 arg3 = perform_implicit_conversion (result_type, arg3);
3499 if (!result_type)
3501 error ("operands to ?: have different types");
3502 return error_mark_node;
3505 valid_operands:
3506 result = fold (build (COND_EXPR, result_type, arg1, arg2, arg3));
3507 /* Expand both sides into the same slot, hopefully the target of the
3508 ?: expression. We used to check for TARGET_EXPRs here, but now we
3509 sometimes wrap them in NOP_EXPRs so the test would fail. */
3510 if (!lvalue_p && IS_AGGR_TYPE (result_type))
3511 result = build_target_expr_with_type (result, result_type);
3513 /* If this expression is an rvalue, but might be mistaken for an
3514 lvalue, we must add a NON_LVALUE_EXPR. */
3515 if (!lvalue_p && real_lvalue_p (result))
3516 result = build1 (NON_LVALUE_EXPR, result_type, result);
3518 return result;
3521 /* OPERAND is an operand to an expression. Perform necessary steps
3522 required before using it. If OPERAND is NULL_TREE, NULL_TREE is
3523 returned. */
3525 static tree
3526 prep_operand (tree operand)
3528 if (operand)
3530 if (TREE_CODE (operand) == OFFSET_REF)
3531 operand = resolve_offset_ref (operand);
3532 operand = convert_from_reference (operand);
3533 if (CLASS_TYPE_P (TREE_TYPE (operand))
3534 && CLASSTYPE_TEMPLATE_INSTANTIATION (TREE_TYPE (operand)))
3535 /* Make sure the template type is instantiated now. */
3536 instantiate_class_template (TYPE_MAIN_VARIANT (TREE_TYPE (operand)));
3539 return operand;
3542 /* Add each of the viable functions in FNS (a FUNCTION_DECL or
3543 OVERLOAD) to the CANDIDATES, returning an updated list of
3544 CANDIDATES. The ARGS are the arguments provided to the call,
3545 without any implicit object parameter. The EXPLICIT_TARGS are
3546 explicit template arguments provided. TEMPLATE_ONLY is true if
3547 only template fucntions should be considered. CONVERSION_PATH,
3548 ACCESS_PATH, and FLAGS are as for add_function_candidate. */
3550 static void
3551 add_candidates (tree fns, tree args,
3552 tree explicit_targs, bool template_only,
3553 tree conversion_path, tree access_path,
3554 int flags,
3555 struct z_candidate **candidates)
3557 tree ctype;
3558 tree non_static_args;
3560 ctype = conversion_path ? BINFO_TYPE (conversion_path) : NULL_TREE;
3561 /* Delay creating the implicit this parameter until it is needed. */
3562 non_static_args = NULL_TREE;
3564 while (fns)
3566 tree fn;
3567 tree fn_args;
3569 fn = OVL_CURRENT (fns);
3570 /* Figure out which set of arguments to use. */
3571 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
3573 /* If this function is a non-static member, prepend the implicit
3574 object parameter. */
3575 if (!non_static_args)
3576 non_static_args = tree_cons (NULL_TREE,
3577 build_this (TREE_VALUE (args)),
3578 TREE_CHAIN (args));
3579 fn_args = non_static_args;
3581 else
3582 /* Otherwise, just use the list of arguments provided. */
3583 fn_args = args;
3585 if (TREE_CODE (fn) == TEMPLATE_DECL)
3586 add_template_candidate (candidates,
3587 fn,
3588 ctype,
3589 explicit_targs,
3590 fn_args,
3591 NULL_TREE,
3592 access_path,
3593 conversion_path,
3594 flags,
3595 DEDUCE_CALL);
3596 else if (!template_only)
3597 add_function_candidate (candidates,
3599 ctype,
3600 fn_args,
3601 access_path,
3602 conversion_path,
3603 flags);
3604 fns = OVL_NEXT (fns);
3608 tree
3609 build_new_op (enum tree_code code, int flags, tree arg1, tree arg2, tree arg3)
3611 struct z_candidate *candidates = 0, *cand;
3612 tree arglist, fnname;
3613 tree args[3];
3614 enum tree_code code2 = NOP_EXPR;
3615 tree conv;
3616 bool strict_p;
3617 bool any_viable_p;
3619 if (error_operand_p (arg1)
3620 || error_operand_p (arg2)
3621 || error_operand_p (arg3))
3622 return error_mark_node;
3624 if (code == MODIFY_EXPR)
3626 code2 = TREE_CODE (arg3);
3627 arg3 = NULL_TREE;
3628 fnname = ansi_assopname (code2);
3630 else
3631 fnname = ansi_opname (code);
3633 arg1 = prep_operand (arg1);
3635 switch (code)
3637 case NEW_EXPR:
3638 case VEC_NEW_EXPR:
3639 case VEC_DELETE_EXPR:
3640 case DELETE_EXPR:
3641 /* Use build_op_new_call and build_op_delete_call instead. */
3642 abort ();
3644 case CALL_EXPR:
3645 return build_object_call (arg1, arg2);
3647 default:
3648 break;
3651 arg2 = prep_operand (arg2);
3652 arg3 = prep_operand (arg3);
3654 if (code == COND_EXPR)
3656 if (arg2 == NULL_TREE
3657 || TREE_CODE (TREE_TYPE (arg2)) == VOID_TYPE
3658 || TREE_CODE (TREE_TYPE (arg3)) == VOID_TYPE
3659 || (! IS_OVERLOAD_TYPE (TREE_TYPE (arg2))
3660 && ! IS_OVERLOAD_TYPE (TREE_TYPE (arg3))))
3661 goto builtin;
3663 else if (! IS_OVERLOAD_TYPE (TREE_TYPE (arg1))
3664 && (! arg2 || ! IS_OVERLOAD_TYPE (TREE_TYPE (arg2))))
3665 goto builtin;
3667 if (code == POSTINCREMENT_EXPR || code == POSTDECREMENT_EXPR)
3668 arg2 = integer_zero_node;
3670 arglist = NULL_TREE;
3671 if (arg3)
3672 arglist = tree_cons (NULL_TREE, arg3, arglist);
3673 if (arg2)
3674 arglist = tree_cons (NULL_TREE, arg2, arglist);
3675 arglist = tree_cons (NULL_TREE, arg1, arglist);
3677 /* Add namespace-scope operators to the list of functions to
3678 consider. */
3679 add_candidates (lookup_function_nonclass (fnname, arglist),
3680 arglist, NULL_TREE, false, NULL_TREE, NULL_TREE,
3681 flags, &candidates);
3682 /* Add class-member operators to the candidate set. */
3683 if (CLASS_TYPE_P (TREE_TYPE (arg1)))
3685 tree fns;
3687 fns = lookup_fnfields (TYPE_BINFO (TREE_TYPE (arg1)), fnname, 1);
3688 if (fns == error_mark_node)
3689 return fns;
3690 if (fns)
3691 add_candidates (BASELINK_FUNCTIONS (fns), arglist,
3692 NULL_TREE, false,
3693 BASELINK_BINFO (fns),
3694 TYPE_BINFO (TREE_TYPE (arg1)),
3695 flags, &candidates);
3698 /* Rearrange the arguments for ?: so that add_builtin_candidate only has
3699 to know about two args; a builtin candidate will always have a first
3700 parameter of type bool. We'll handle that in
3701 build_builtin_candidate. */
3702 if (code == COND_EXPR)
3704 args[0] = arg2;
3705 args[1] = arg3;
3706 args[2] = arg1;
3708 else
3710 args[0] = arg1;
3711 args[1] = arg2;
3712 args[2] = NULL_TREE;
3715 add_builtin_candidates (&candidates, code, code2, fnname, args, flags);
3717 switch (code)
3719 case COMPOUND_EXPR:
3720 case ADDR_EXPR:
3721 /* For these, the built-in candidates set is empty
3722 [over.match.oper]/3. We don't want non-strict matches
3723 because exact matches are always possible with built-in
3724 operators. The built-in candidate set for COMPONENT_REF
3725 would be empty too, but since there are no such built-in
3726 operators, we accept non-strict matches for them. */
3727 strict_p = true;
3728 break;
3730 default:
3731 strict_p = pedantic;
3732 break;
3735 candidates = splice_viable (candidates, strict_p, &any_viable_p);
3736 if (!any_viable_p)
3738 switch (code)
3740 case POSTINCREMENT_EXPR:
3741 case POSTDECREMENT_EXPR:
3742 /* Look for an `operator++ (int)'. If they didn't have
3743 one, then we fall back to the old way of doing things. */
3744 if (flags & LOOKUP_COMPLAIN)
3745 pedwarn ("no `%D(int)' declared for postfix `%s', trying prefix operator instead",
3746 fnname,
3747 operator_name_info[code].name);
3748 if (code == POSTINCREMENT_EXPR)
3749 code = PREINCREMENT_EXPR;
3750 else
3751 code = PREDECREMENT_EXPR;
3752 return build_new_op (code, flags, arg1, NULL_TREE, NULL_TREE);
3754 /* The caller will deal with these. */
3755 case ADDR_EXPR:
3756 case COMPOUND_EXPR:
3757 case COMPONENT_REF:
3758 return NULL_TREE;
3760 default:
3761 break;
3763 if (flags & LOOKUP_COMPLAIN)
3765 op_error (code, code2, arg1, arg2, arg3, "no match");
3766 print_z_candidates (candidates);
3768 return error_mark_node;
3771 cand = tourney (candidates);
3772 if (cand == 0)
3774 if (flags & LOOKUP_COMPLAIN)
3776 op_error (code, code2, arg1, arg2, arg3, "ambiguous overload");
3777 print_z_candidates (candidates);
3779 return error_mark_node;
3782 if (TREE_CODE (cand->fn) == FUNCTION_DECL)
3784 if (warn_synth
3785 && fnname == ansi_assopname (NOP_EXPR)
3786 && DECL_ARTIFICIAL (cand->fn)
3787 && candidates->next
3788 && ! candidates->next->next)
3790 warning ("using synthesized `%#D' for copy assignment",
3791 cand->fn);
3792 cp_warning_at (" where cfront would use `%#D'",
3793 cand == candidates
3794 ? candidates->next->fn
3795 : candidates->fn);
3798 return build_over_call (cand, LOOKUP_NORMAL);
3801 /* Check for comparison of different enum types. */
3802 switch (code)
3804 case GT_EXPR:
3805 case LT_EXPR:
3806 case GE_EXPR:
3807 case LE_EXPR:
3808 case EQ_EXPR:
3809 case NE_EXPR:
3810 if (TREE_CODE (TREE_TYPE (arg1)) == ENUMERAL_TYPE
3811 && TREE_CODE (TREE_TYPE (arg2)) == ENUMERAL_TYPE
3812 && (TYPE_MAIN_VARIANT (TREE_TYPE (arg1))
3813 != TYPE_MAIN_VARIANT (TREE_TYPE (arg2))))
3815 warning ("comparison between `%#T' and `%#T'",
3816 TREE_TYPE (arg1), TREE_TYPE (arg2));
3818 break;
3819 default:
3820 break;
3823 /* We need to strip any leading REF_BIND so that bitfields don't cause
3824 errors. This should not remove any important conversions, because
3825 builtins don't apply to class objects directly. */
3826 conv = TREE_VEC_ELT (cand->convs, 0);
3827 if (TREE_CODE (conv) == REF_BIND)
3828 conv = TREE_OPERAND (conv, 0);
3829 arg1 = convert_like (conv, arg1);
3830 if (arg2)
3832 conv = TREE_VEC_ELT (cand->convs, 1);
3833 if (TREE_CODE (conv) == REF_BIND)
3834 conv = TREE_OPERAND (conv, 0);
3835 arg2 = convert_like (conv, arg2);
3837 if (arg3)
3839 conv = TREE_VEC_ELT (cand->convs, 2);
3840 if (TREE_CODE (conv) == REF_BIND)
3841 conv = TREE_OPERAND (conv, 0);
3842 arg3 = convert_like (conv, arg3);
3845 builtin:
3846 switch (code)
3848 case MODIFY_EXPR:
3849 return build_modify_expr (arg1, code2, arg2);
3851 case INDIRECT_REF:
3852 return build_indirect_ref (arg1, "unary *");
3854 case PLUS_EXPR:
3855 case MINUS_EXPR:
3856 case MULT_EXPR:
3857 case TRUNC_DIV_EXPR:
3858 case GT_EXPR:
3859 case LT_EXPR:
3860 case GE_EXPR:
3861 case LE_EXPR:
3862 case EQ_EXPR:
3863 case NE_EXPR:
3864 case MAX_EXPR:
3865 case MIN_EXPR:
3866 case LSHIFT_EXPR:
3867 case RSHIFT_EXPR:
3868 case TRUNC_MOD_EXPR:
3869 case BIT_AND_EXPR:
3870 case BIT_IOR_EXPR:
3871 case BIT_XOR_EXPR:
3872 case TRUTH_ANDIF_EXPR:
3873 case TRUTH_ORIF_EXPR:
3874 return cp_build_binary_op (code, arg1, arg2);
3876 case CONVERT_EXPR:
3877 case NEGATE_EXPR:
3878 case BIT_NOT_EXPR:
3879 case TRUTH_NOT_EXPR:
3880 case PREINCREMENT_EXPR:
3881 case POSTINCREMENT_EXPR:
3882 case PREDECREMENT_EXPR:
3883 case POSTDECREMENT_EXPR:
3884 case REALPART_EXPR:
3885 case IMAGPART_EXPR:
3886 return build_unary_op (code, arg1, candidates != 0);
3888 case ARRAY_REF:
3889 return build_array_ref (arg1, arg2);
3891 case COND_EXPR:
3892 return build_conditional_expr (arg1, arg2, arg3);
3894 case MEMBER_REF:
3895 return build_m_component_ref
3896 (build_indirect_ref (arg1, NULL), arg2);
3898 /* The caller will deal with these. */
3899 case ADDR_EXPR:
3900 case COMPONENT_REF:
3901 case COMPOUND_EXPR:
3902 return NULL_TREE;
3904 default:
3905 abort ();
3906 return NULL_TREE;
3910 /* Build a call to operator delete. This has to be handled very specially,
3911 because the restrictions on what signatures match are different from all
3912 other call instances. For a normal delete, only a delete taking (void *)
3913 or (void *, size_t) is accepted. For a placement delete, only an exact
3914 match with the placement new is accepted.
3916 CODE is either DELETE_EXPR or VEC_DELETE_EXPR.
3917 ADDR is the pointer to be deleted.
3918 SIZE is the size of the memory block to be deleted.
3919 FLAGS are the usual overloading flags.
3920 PLACEMENT is the corresponding placement new call, or NULL_TREE. */
3922 tree
3923 build_op_delete_call (enum tree_code code, tree addr, tree size,
3924 int flags, tree placement)
3926 tree fn = NULL_TREE;
3927 tree fns, fnname, fntype, argtypes, args, type;
3928 int pass;
3930 if (addr == error_mark_node)
3931 return error_mark_node;
3933 type = TREE_TYPE (TREE_TYPE (addr));
3934 while (TREE_CODE (type) == ARRAY_TYPE)
3935 type = TREE_TYPE (type);
3937 fnname = ansi_opname (code);
3939 if (IS_AGGR_TYPE (type) && ! (flags & LOOKUP_GLOBAL))
3940 /* In [class.free]
3942 If the result of the lookup is ambiguous or inaccessible, or if
3943 the lookup selects a placement deallocation function, the
3944 program is ill-formed.
3946 Therefore, we ask lookup_fnfields to complain ambout ambiguity. */
3948 fns = lookup_fnfields (TYPE_BINFO (type), fnname, 1);
3949 if (fns == error_mark_node)
3950 return error_mark_node;
3952 else
3953 fns = NULL_TREE;
3955 if (fns == NULL_TREE)
3956 fns = lookup_name_nonclass (fnname);
3958 if (placement)
3960 tree alloc_fn;
3961 tree call_expr;
3963 /* Find the allocation function that is being called. */
3964 call_expr = placement;
3965 /* Sometimes we have a COMPOUND_EXPR, rather than a simple
3966 CALL_EXPR. */
3967 while (TREE_CODE (call_expr) == COMPOUND_EXPR)
3968 call_expr = TREE_OPERAND (call_expr, 1);
3969 /* Extract the function. */
3970 alloc_fn = get_callee_fndecl (call_expr);
3971 my_friendly_assert (alloc_fn != NULL_TREE, 20020327);
3972 /* Then the second parm type. */
3973 argtypes = TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (alloc_fn)));
3974 /* Also the second argument. */
3975 args = TREE_CHAIN (TREE_OPERAND (call_expr, 1));
3977 else
3979 /* First try it without the size argument. */
3980 argtypes = void_list_node;
3981 args = NULL_TREE;
3984 /* Strip const and volatile from addr. */
3985 addr = cp_convert (ptr_type_node, addr);
3987 /* We make two tries at finding a matching `operator delete'. On
3988 the first pass, we look for an one-operator (or placement)
3989 operator delete. If we're not doing placement delete, then on
3990 the second pass we look for a two-argument delete. */
3991 for (pass = 0; pass < (placement ? 1 : 2); ++pass)
3993 if (pass == 0)
3994 argtypes = tree_cons (NULL_TREE, ptr_type_node, argtypes);
3995 else
3996 /* Normal delete; now try to find a match including the size
3997 argument. */
3998 argtypes = tree_cons (NULL_TREE, ptr_type_node,
3999 tree_cons (NULL_TREE, sizetype,
4000 void_list_node));
4001 fntype = build_function_type (void_type_node, argtypes);
4003 /* Go through the `operator delete' functions looking for one
4004 with a matching type. */
4005 for (fn = BASELINK_P (fns) ? BASELINK_FUNCTIONS (fns) : fns;
4006 fn;
4007 fn = OVL_NEXT (fn))
4009 tree t;
4011 /* Exception specifications on the `delete' operator do not
4012 matter. */
4013 t = build_exception_variant (TREE_TYPE (OVL_CURRENT (fn)),
4014 NULL_TREE);
4015 /* We also don't compare attributes. We're really just
4016 trying to check the types of the first two parameters. */
4017 if (comptypes (t, fntype, COMPARE_NO_ATTRIBUTES))
4018 break;
4021 /* If we found a match, we're done. */
4022 if (fn)
4023 break;
4026 /* If we have a matching function, call it. */
4027 if (fn)
4029 /* Make sure we have the actual function, and not an
4030 OVERLOAD. */
4031 fn = OVL_CURRENT (fn);
4033 /* If the FN is a member function, make sure that it is
4034 accessible. */
4035 if (DECL_CLASS_SCOPE_P (fn))
4036 enforce_access (type, fn);
4038 if (pass == 0)
4039 args = tree_cons (NULL_TREE, addr, args);
4040 else
4041 args = tree_cons (NULL_TREE, addr,
4042 build_tree_list (NULL_TREE, size));
4044 return build_function_call (fn, args);
4047 /* If we are doing placement delete we do nothing if we don't find a
4048 matching op delete. */
4049 if (placement)
4050 return NULL_TREE;
4052 error ("no suitable `operator delete' for `%T'", type);
4053 return error_mark_node;
4056 /* If the current scope isn't allowed to access DECL along
4057 BASETYPE_PATH, give an error. The most derived class in
4058 BASETYPE_PATH is the one used to qualify DECL. */
4060 bool
4061 enforce_access (tree basetype_path, tree decl)
4063 if (!accessible_p (basetype_path, decl))
4065 if (TREE_PRIVATE (decl))
4066 cp_error_at ("`%+#D' is private", decl);
4067 else if (TREE_PROTECTED (decl))
4068 cp_error_at ("`%+#D' is protected", decl);
4069 else
4070 cp_error_at ("`%+#D' is inaccessible", decl);
4071 error ("within this context");
4072 return false;
4075 return true;
4078 /* Perform the conversions in CONVS on the expression EXPR.
4079 FN and ARGNUM are used for diagnostics. ARGNUM is zero based, -1
4080 indicates the `this' argument of a method. INNER is nonzero when
4081 being called to continue a conversion chain. It is negative when a
4082 reference binding will be applied, positive otherwise. */
4084 static tree
4085 convert_like_real (tree convs, tree expr, tree fn, int argnum, int inner)
4087 int savew, savee;
4089 tree totype = TREE_TYPE (convs);
4091 if (ICS_BAD_FLAG (convs)
4092 && TREE_CODE (convs) != USER_CONV
4093 && TREE_CODE (convs) != AMBIG_CONV
4094 && TREE_CODE (convs) != REF_BIND)
4096 tree t = convs;
4097 for (; t; t = TREE_OPERAND (t, 0))
4099 if (TREE_CODE (t) == USER_CONV || !ICS_BAD_FLAG (t))
4101 expr = convert_like_real (t, expr, fn, argnum, 1);
4102 break;
4104 else if (TREE_CODE (t) == AMBIG_CONV)
4105 return convert_like_real (t, expr, fn, argnum, 1);
4106 else if (TREE_CODE (t) == IDENTITY_CONV)
4107 break;
4109 pedwarn ("invalid conversion from `%T' to `%T'", TREE_TYPE (expr), totype);
4110 if (fn)
4111 pedwarn (" initializing argument %P of `%D'", argnum, fn);
4112 return cp_convert (totype, expr);
4115 if (!inner)
4116 expr = dubious_conversion_warnings
4117 (totype, expr, "argument", fn, argnum);
4118 switch (TREE_CODE (convs))
4120 case USER_CONV:
4122 struct z_candidate *cand = USER_CONV_CAND (convs);
4123 tree convfn = cand->fn;
4124 tree args;
4126 if (DECL_CONSTRUCTOR_P (convfn))
4128 tree t = build_int_2 (0, 0);
4129 TREE_TYPE (t) = build_pointer_type (DECL_CONTEXT (convfn));
4131 args = build_tree_list (NULL_TREE, expr);
4132 if (DECL_HAS_IN_CHARGE_PARM_P (convfn)
4133 || DECL_HAS_VTT_PARM_P (convfn))
4134 /* We should never try to call the abstract or base constructor
4135 from here. */
4136 abort ();
4137 args = tree_cons (NULL_TREE, t, args);
4139 else
4140 args = build_this (expr);
4141 expr = build_over_call (cand, LOOKUP_NORMAL);
4143 /* If this is a constructor or a function returning an aggr type,
4144 we need to build up a TARGET_EXPR. */
4145 if (DECL_CONSTRUCTOR_P (convfn))
4146 expr = build_cplus_new (totype, expr);
4148 /* The result of the call is then used to direct-initialize the object
4149 that is the destination of the copy-initialization. [dcl.init]
4151 Note that this step is not reflected in the conversion sequence;
4152 it affects the semantics when we actually perform the
4153 conversion, but is not considered during overload resolution.
4155 If the target is a class, that means call a ctor. */
4156 if (IS_AGGR_TYPE (totype)
4157 && (inner >= 0 || !lvalue_p (expr)))
4159 savew = warningcount, savee = errorcount;
4160 expr = build_special_member_call
4161 (NULL_TREE, complete_ctor_identifier,
4162 build_tree_list (NULL_TREE, expr), TYPE_BINFO (totype),
4163 /* Core issue 84, now a DR, says that we don't allow UDCs
4164 for these args (which deliberately breaks copy-init of an
4165 auto_ptr<Base> from an auto_ptr<Derived>). */
4166 LOOKUP_NORMAL|LOOKUP_ONLYCONVERTING|LOOKUP_NO_CONVERSION);
4168 /* Tell the user where this failing constructor call came from. */
4169 if (fn)
4171 if (warningcount > savew)
4172 warning
4173 (" initializing argument %P of `%D' from result of `%D'",
4174 argnum, fn, convfn);
4175 else if (errorcount > savee)
4176 error
4177 (" initializing argument %P of `%D' from result of `%D'",
4178 argnum, fn, convfn);
4180 else
4182 if (warningcount > savew)
4183 warning (" initializing temporary from result of `%D'",
4184 convfn);
4185 else if (errorcount > savee)
4186 error (" initializing temporary from result of `%D'",
4187 convfn);
4189 expr = build_cplus_new (totype, expr);
4191 return expr;
4193 case IDENTITY_CONV:
4194 if (type_unknown_p (expr))
4195 expr = instantiate_type (totype, expr, tf_error | tf_warning);
4196 /* Convert a non-array constant variable to its underlying value, unless we
4197 are about to bind it to a reference, in which case we need to
4198 leave it as an lvalue. */
4199 if (inner >= 0
4200 && TREE_CODE (TREE_TYPE (expr)) != ARRAY_TYPE)
4201 expr = decl_constant_value (expr);
4202 return expr;
4203 case AMBIG_CONV:
4204 /* Call build_user_type_conversion again for the error. */
4205 return build_user_type_conversion
4206 (totype, TREE_OPERAND (convs, 0), LOOKUP_NORMAL);
4208 default:
4209 break;
4212 expr = convert_like_real (TREE_OPERAND (convs, 0), expr, fn, argnum,
4213 TREE_CODE (convs) == REF_BIND ? -1 : 1);
4214 if (expr == error_mark_node)
4215 return error_mark_node;
4217 switch (TREE_CODE (convs))
4219 case RVALUE_CONV:
4220 if (! IS_AGGR_TYPE (totype))
4221 return expr;
4222 /* else fall through */
4223 case BASE_CONV:
4224 if (TREE_CODE (convs) == BASE_CONV && !NEED_TEMPORARY_P (convs))
4226 /* We are going to bind a reference directly to a base-class
4227 subobject of EXPR. */
4228 tree base_ptr = build_pointer_type (totype);
4230 /* Build an expression for `*((base*) &expr)'. */
4231 expr = build_unary_op (ADDR_EXPR, expr, 0);
4232 expr = perform_implicit_conversion (base_ptr, expr);
4233 expr = build_indirect_ref (expr, "implicit conversion");
4234 return expr;
4237 /* Copy-initialization where the cv-unqualified version of the source
4238 type is the same class as, or a derived class of, the class of the
4239 destination [is treated as direct-initialization]. [dcl.init] */
4240 savew = warningcount, savee = errorcount;
4241 expr = build_special_member_call (NULL_TREE, complete_ctor_identifier,
4242 build_tree_list (NULL_TREE, expr),
4243 TYPE_BINFO (totype),
4244 LOOKUP_NORMAL|LOOKUP_ONLYCONVERTING);
4245 if (fn)
4247 if (warningcount > savew)
4248 warning (" initializing argument %P of `%D'", argnum, fn);
4249 else if (errorcount > savee)
4250 error (" initializing argument %P of `%D'", argnum, fn);
4252 return build_cplus_new (totype, expr);
4254 case REF_BIND:
4256 tree ref_type = totype;
4258 /* If necessary, create a temporary. */
4259 if (NEED_TEMPORARY_P (convs) || !non_cast_lvalue_p (expr))
4261 tree type = TREE_TYPE (TREE_OPERAND (convs, 0));
4262 expr = build_target_expr_with_type (expr, type);
4265 /* Take the address of the thing to which we will bind the
4266 reference. */
4267 expr = build_unary_op (ADDR_EXPR, expr, 1);
4268 if (expr == error_mark_node)
4269 return error_mark_node;
4271 /* Convert it to a pointer to the type referred to by the
4272 reference. This will adjust the pointer if a derived to
4273 base conversion is being performed. */
4274 expr = cp_convert (build_pointer_type (TREE_TYPE (ref_type)),
4275 expr);
4276 /* Convert the pointer to the desired reference type. */
4277 return build_nop (ref_type, expr);
4280 case LVALUE_CONV:
4281 return decay_conversion (expr);
4283 case QUAL_CONV:
4284 /* Warn about deprecated conversion if appropriate. */
4285 string_conv_p (totype, expr, 1);
4286 break;
4288 default:
4289 break;
4291 return ocp_convert (totype, expr, CONV_IMPLICIT,
4292 LOOKUP_NORMAL|LOOKUP_NO_CONVERSION);
4295 /* Build a call to __builtin_trap which can be used in an expression. */
4297 static tree
4298 call_builtin_trap (void)
4300 tree fn = get_identifier ("__builtin_trap");
4301 if (IDENTIFIER_GLOBAL_VALUE (fn))
4302 fn = IDENTIFIER_GLOBAL_VALUE (fn);
4303 else
4304 abort ();
4306 fn = build_call (fn, NULL_TREE);
4307 fn = build (COMPOUND_EXPR, integer_type_node, fn, integer_zero_node);
4308 return fn;
4311 /* ARG is being passed to a varargs function. Perform any conversions
4312 required. Array/function to pointer decay must have already happened.
4313 Return the converted value. */
4315 tree
4316 convert_arg_to_ellipsis (tree arg)
4318 if (TREE_CODE (TREE_TYPE (arg)) == REAL_TYPE
4319 && (TYPE_PRECISION (TREE_TYPE (arg))
4320 < TYPE_PRECISION (double_type_node)))
4321 /* Convert `float' to `double'. */
4322 arg = cp_convert (double_type_node, arg);
4323 else
4324 /* Convert `short' and `char' to full-size `int'. */
4325 arg = default_conversion (arg);
4327 arg = require_complete_type (arg);
4329 if (arg != error_mark_node && ! pod_type_p (TREE_TYPE (arg)))
4331 /* Undefined behavior [expr.call] 5.2.2/7. We used to just warn
4332 here and do a bitwise copy, but now cp_expr_size will abort if we
4333 try to do that. */
4334 warning ("cannot pass objects of non-POD type `%#T' through `...'; \
4335 call will abort at runtime",
4336 TREE_TYPE (arg));
4337 arg = call_builtin_trap ();
4340 return arg;
4343 /* va_arg (EXPR, TYPE) is a builtin. Make sure it is not abused. */
4345 tree
4346 build_x_va_arg (tree expr, tree type)
4348 if (processing_template_decl)
4349 return build_min (VA_ARG_EXPR, type, expr);
4351 type = complete_type_or_else (type, NULL_TREE);
4353 if (expr == error_mark_node || !type)
4354 return error_mark_node;
4356 if (! pod_type_p (type))
4358 /* Undefined behavior [expr.call] 5.2.2/7. */
4359 warning ("cannot receive objects of non-POD type `%#T' through `...'",
4360 type);
4363 return build_va_arg (expr, type);
4366 /* TYPE has been given to va_arg. Apply the default conversions which
4367 would have happened when passed via ellipsis. Return the promoted
4368 type, or the passed type if there is no change. */
4370 tree
4371 cxx_type_promotes_to (tree type)
4373 tree promote;
4375 if (TREE_CODE (type) == ARRAY_TYPE)
4376 return build_pointer_type (TREE_TYPE (type));
4378 if (TREE_CODE (type) == FUNCTION_TYPE)
4379 return build_pointer_type (type);
4381 promote = type_promotes_to (type);
4382 if (same_type_p (type, promote))
4383 promote = type;
4385 return promote;
4388 /* ARG is a default argument expression being passed to a parameter of
4389 the indicated TYPE, which is a parameter to FN. Do any required
4390 conversions. Return the converted value. */
4392 tree
4393 convert_default_arg (tree type, tree arg, tree fn, int parmnum)
4395 /* If the ARG is an unparsed default argument expression, the
4396 conversion cannot be performed. */
4397 if (TREE_CODE (arg) == DEFAULT_ARG)
4399 error ("the default argument for parameter %d of `%D' has "
4400 "not yet been parsed",
4401 parmnum, fn);
4402 return error_mark_node;
4405 if (fn && DECL_TEMPLATE_INFO (fn))
4406 arg = tsubst_default_argument (fn, type, arg);
4408 arg = break_out_target_exprs (arg);
4410 if (TREE_CODE (arg) == CONSTRUCTOR)
4412 arg = digest_init (type, arg, 0);
4413 arg = convert_for_initialization (0, type, arg, LOOKUP_NORMAL,
4414 "default argument", fn, parmnum);
4416 else
4418 /* This could get clobbered by the following call. */
4419 if (TREE_HAS_CONSTRUCTOR (arg))
4420 arg = copy_node (arg);
4422 arg = convert_for_initialization (0, type, arg, LOOKUP_NORMAL,
4423 "default argument", fn, parmnum);
4424 arg = convert_for_arg_passing (type, arg);
4427 return arg;
4430 /* Returns the type which will really be used for passing an argument of
4431 type TYPE. */
4433 tree
4434 type_passed_as (tree type)
4436 /* Pass classes with copy ctors by invisible reference. */
4437 if (TREE_ADDRESSABLE (type))
4438 type = build_reference_type (type);
4439 else if (PROMOTE_PROTOTYPES
4440 && INTEGRAL_TYPE_P (type)
4441 && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
4442 type = integer_type_node;
4444 return type;
4447 /* Actually perform the appropriate conversion. */
4449 tree
4450 convert_for_arg_passing (tree type, tree val)
4452 if (val == error_mark_node)
4454 /* Pass classes with copy ctors by invisible reference. */
4455 else if (TREE_ADDRESSABLE (type))
4456 val = build1 (ADDR_EXPR, build_reference_type (type), val);
4457 else if (PROMOTE_PROTOTYPES
4458 && INTEGRAL_TYPE_P (type)
4459 && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
4460 val = default_conversion (val);
4461 return val;
4464 /* Subroutine of the various build_*_call functions. Overload resolution
4465 has chosen a winning candidate CAND; build up a CALL_EXPR accordingly.
4466 ARGS is a TREE_LIST of the unconverted arguments to the call. FLAGS is a
4467 bitmask of various LOOKUP_* flags which apply to the call itself. */
4469 static tree
4470 build_over_call (struct z_candidate *cand, int flags)
4472 tree fn = cand->fn;
4473 tree args = cand->args;
4474 tree convs = cand->convs;
4475 tree converted_args = NULL_TREE;
4476 tree parm = TYPE_ARG_TYPES (TREE_TYPE (fn));
4477 tree conv, arg, val;
4478 int i = 0;
4479 int is_method = 0;
4481 /* Give any warnings we noticed during overload resolution. */
4482 if (cand->warnings)
4483 for (val = cand->warnings; val; val = TREE_CHAIN (val))
4484 joust (cand, WRAPPER_ZC (TREE_VALUE (val)), 1);
4486 if (DECL_FUNCTION_MEMBER_P (fn))
4487 enforce_access (cand->access_path, fn);
4489 if (args && TREE_CODE (args) != TREE_LIST)
4490 args = build_tree_list (NULL_TREE, args);
4491 arg = args;
4493 /* The implicit parameters to a constructor are not considered by overload
4494 resolution, and must be of the proper type. */
4495 if (DECL_CONSTRUCTOR_P (fn))
4497 converted_args = tree_cons (NULL_TREE, TREE_VALUE (arg), converted_args);
4498 arg = TREE_CHAIN (arg);
4499 parm = TREE_CHAIN (parm);
4500 if (DECL_HAS_IN_CHARGE_PARM_P (fn))
4501 /* We should never try to call the abstract constructor. */
4502 abort ();
4503 if (DECL_HAS_VTT_PARM_P (fn))
4505 converted_args = tree_cons
4506 (NULL_TREE, TREE_VALUE (arg), converted_args);
4507 arg = TREE_CHAIN (arg);
4508 parm = TREE_CHAIN (parm);
4511 /* Bypass access control for 'this' parameter. */
4512 else if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
4514 tree parmtype = TREE_VALUE (parm);
4515 tree argtype = TREE_TYPE (TREE_VALUE (arg));
4516 tree converted_arg;
4517 tree base_binfo;
4519 if (ICS_BAD_FLAG (TREE_VEC_ELT (convs, i)))
4520 pedwarn ("passing `%T' as `this' argument of `%#D' discards qualifiers",
4521 TREE_TYPE (argtype), fn);
4523 /* [class.mfct.nonstatic]: If a nonstatic member function of a class
4524 X is called for an object that is not of type X, or of a type
4525 derived from X, the behavior is undefined.
4527 So we can assume that anything passed as 'this' is non-null, and
4528 optimize accordingly. */
4529 my_friendly_assert (TREE_CODE (parmtype) == POINTER_TYPE, 19990811);
4530 /* Convert to the base in which the function was declared. */
4531 my_friendly_assert (cand->conversion_path != NULL_TREE, 20020730);
4532 converted_arg = build_base_path (PLUS_EXPR,
4533 TREE_VALUE (arg),
4534 cand->conversion_path,
4536 /* If fn was found by a using declaration, the conversion path
4537 will be to the derived class, not the base declaring fn. We
4538 must convert from derived to base. */
4539 base_binfo = lookup_base (TREE_TYPE (TREE_TYPE (converted_arg)),
4540 TREE_TYPE (parmtype), ba_ignore, NULL);
4542 converted_arg = build_base_path (PLUS_EXPR, converted_arg,
4543 base_binfo, 1);
4545 converted_args = tree_cons (NULL_TREE, converted_arg, converted_args);
4546 parm = TREE_CHAIN (parm);
4547 arg = TREE_CHAIN (arg);
4548 ++i;
4549 is_method = 1;
4552 for (; arg && parm;
4553 parm = TREE_CHAIN (parm), arg = TREE_CHAIN (arg), ++i)
4555 tree type = TREE_VALUE (parm);
4557 conv = TREE_VEC_ELT (convs, i);
4558 val = convert_like_with_context
4559 (conv, TREE_VALUE (arg), fn, i - is_method);
4561 val = convert_for_arg_passing (type, val);
4562 converted_args = tree_cons (NULL_TREE, val, converted_args);
4565 /* Default arguments */
4566 for (; parm && parm != void_list_node; parm = TREE_CHAIN (parm), i++)
4567 converted_args
4568 = tree_cons (NULL_TREE,
4569 convert_default_arg (TREE_VALUE (parm),
4570 TREE_PURPOSE (parm),
4571 fn, i - is_method),
4572 converted_args);
4574 /* Ellipsis */
4575 for (; arg; arg = TREE_CHAIN (arg))
4576 converted_args
4577 = tree_cons (NULL_TREE,
4578 convert_arg_to_ellipsis (TREE_VALUE (arg)),
4579 converted_args);
4581 converted_args = nreverse (converted_args);
4583 if (warn_format)
4584 check_function_format (NULL, TYPE_ATTRIBUTES (TREE_TYPE (fn)),
4585 converted_args);
4587 /* Avoid actually calling copy constructors and copy assignment operators,
4588 if possible. */
4590 if (! flag_elide_constructors)
4591 /* Do things the hard way. */;
4592 else if (TREE_VEC_LENGTH (convs) == 1
4593 && DECL_COPY_CONSTRUCTOR_P (fn))
4595 tree targ;
4596 arg = skip_artificial_parms_for (fn, converted_args);
4597 arg = TREE_VALUE (arg);
4599 /* Pull out the real argument, disregarding const-correctness. */
4600 targ = arg;
4601 while (TREE_CODE (targ) == NOP_EXPR
4602 || TREE_CODE (targ) == NON_LVALUE_EXPR
4603 || TREE_CODE (targ) == CONVERT_EXPR)
4604 targ = TREE_OPERAND (targ, 0);
4605 if (TREE_CODE (targ) == ADDR_EXPR)
4607 targ = TREE_OPERAND (targ, 0);
4608 if (!same_type_ignoring_top_level_qualifiers_p
4609 (TREE_TYPE (TREE_TYPE (arg)), TREE_TYPE (targ)))
4610 targ = NULL_TREE;
4612 else
4613 targ = NULL_TREE;
4615 if (targ)
4616 arg = targ;
4617 else
4618 arg = build_indirect_ref (arg, 0);
4620 /* [class.copy]: the copy constructor is implicitly defined even if
4621 the implementation elided its use. */
4622 if (TYPE_HAS_COMPLEX_INIT_REF (DECL_CONTEXT (fn)))
4623 mark_used (fn);
4625 /* If we're creating a temp and we already have one, don't create a
4626 new one. If we're not creating a temp but we get one, use
4627 INIT_EXPR to collapse the temp into our target. Otherwise, if the
4628 ctor is trivial, do a bitwise copy with a simple TARGET_EXPR for a
4629 temp or an INIT_EXPR otherwise. */
4630 if (integer_zerop (TREE_VALUE (args)))
4632 if (TREE_CODE (arg) == TARGET_EXPR)
4633 return arg;
4634 else if (TYPE_HAS_TRIVIAL_INIT_REF (DECL_CONTEXT (fn)))
4635 return build_target_expr_with_type (arg, DECL_CONTEXT (fn));
4637 else if (TREE_CODE (arg) == TARGET_EXPR
4638 || TYPE_HAS_TRIVIAL_INIT_REF (DECL_CONTEXT (fn)))
4640 tree address;
4641 tree to = stabilize_reference
4642 (build_indirect_ref (TREE_VALUE (args), 0));
4644 val = build (INIT_EXPR, DECL_CONTEXT (fn), to, arg);
4645 address = build_unary_op (ADDR_EXPR, val, 0);
4646 /* Avoid a warning about this expression, if the address is
4647 never used. */
4648 TREE_USED (address) = 1;
4649 return address;
4652 else if (DECL_OVERLOADED_OPERATOR_P (fn) == NOP_EXPR
4653 && copy_fn_p (fn)
4654 && TYPE_HAS_TRIVIAL_ASSIGN_REF (DECL_CONTEXT (fn)))
4656 tree to = stabilize_reference
4657 (build_indirect_ref (TREE_VALUE (converted_args), 0));
4659 arg = build_indirect_ref (TREE_VALUE (TREE_CHAIN (converted_args)), 0);
4660 val = build (MODIFY_EXPR, TREE_TYPE (to), to, arg);
4661 return val;
4664 mark_used (fn);
4666 if (DECL_VINDEX (fn) && (flags & LOOKUP_NONVIRTUAL) == 0)
4668 tree t, *p = &TREE_VALUE (converted_args);
4669 tree binfo = lookup_base (TREE_TYPE (TREE_TYPE (*p)),
4670 DECL_CONTEXT (fn),
4671 ba_any, NULL);
4672 my_friendly_assert (binfo && binfo != error_mark_node, 20010730);
4674 *p = build_base_path (PLUS_EXPR, *p, binfo, 1);
4675 if (TREE_SIDE_EFFECTS (*p))
4676 *p = save_expr (*p);
4677 t = build_pointer_type (TREE_TYPE (fn));
4678 if (DECL_CONTEXT (fn) && TYPE_JAVA_INTERFACE (DECL_CONTEXT (fn)))
4679 fn = build_java_interface_fn_ref (fn, *p);
4680 else
4681 fn = build_vfn_ref (build_indirect_ref (*p, 0), DECL_VINDEX (fn));
4682 TREE_TYPE (fn) = t;
4684 else if (DECL_INLINE (fn))
4685 fn = inline_conversion (fn);
4686 else
4687 fn = build_addr_func (fn);
4689 /* Recognize certain built-in functions so we can make tree-codes
4690 other than CALL_EXPR. We do this when it enables fold-const.c
4691 to do something useful. */
4693 if (TREE_CODE (fn) == ADDR_EXPR
4694 && TREE_CODE (TREE_OPERAND (fn, 0)) == FUNCTION_DECL
4695 && DECL_BUILT_IN (TREE_OPERAND (fn, 0)))
4697 tree exp;
4698 exp = expand_tree_builtin (TREE_OPERAND (fn, 0), args, converted_args);
4699 if (exp)
4700 return exp;
4703 /* Some built-in function calls will be evaluated at
4704 compile-time in fold (). */
4705 fn = fold (build_call (fn, converted_args));
4706 if (VOID_TYPE_P (TREE_TYPE (fn)))
4707 return fn;
4708 fn = require_complete_type (fn);
4709 if (fn == error_mark_node)
4710 return error_mark_node;
4711 if (IS_AGGR_TYPE (TREE_TYPE (fn)))
4712 fn = build_cplus_new (TREE_TYPE (fn), fn);
4713 return convert_from_reference (fn);
4716 static GTY(()) tree java_iface_lookup_fn;
4718 /* Make an expression which yields the address of the Java interface
4719 method FN. This is achieved by generating a call to libjava's
4720 _Jv_LookupInterfaceMethodIdx(). */
4722 static tree
4723 build_java_interface_fn_ref (tree fn, tree instance)
4725 tree lookup_args, lookup_fn, method, idx;
4726 tree klass_ref, iface, iface_ref;
4727 int i;
4729 if (!java_iface_lookup_fn)
4731 tree endlink = build_void_list_node ();
4732 tree t = tree_cons (NULL_TREE, ptr_type_node,
4733 tree_cons (NULL_TREE, ptr_type_node,
4734 tree_cons (NULL_TREE, java_int_type_node,
4735 endlink)));
4736 java_iface_lookup_fn
4737 = builtin_function ("_Jv_LookupInterfaceMethodIdx",
4738 build_function_type (ptr_type_node, t),
4739 0, NOT_BUILT_IN, NULL, NULL_TREE);
4742 /* Look up the pointer to the runtime java.lang.Class object for `instance'.
4743 This is the first entry in the vtable. */
4744 klass_ref = build_vtbl_ref (build_indirect_ref (instance, 0),
4745 integer_zero_node);
4747 /* Get the java.lang.Class pointer for the interface being called. */
4748 iface = DECL_CONTEXT (fn);
4749 iface_ref = lookup_field (iface, get_identifier ("class$"), 0, false);
4750 if (!iface_ref || TREE_CODE (iface_ref) != VAR_DECL
4751 || DECL_CONTEXT (iface_ref) != iface)
4753 error ("could not find class$ field in java interface type `%T'",
4754 iface);
4755 return error_mark_node;
4757 iface_ref = build1 (ADDR_EXPR, build_pointer_type (iface), iface_ref);
4759 /* Determine the itable index of FN. */
4760 i = 1;
4761 for (method = TYPE_METHODS (iface); method; method = TREE_CHAIN (method))
4763 if (!DECL_VIRTUAL_P (method))
4764 continue;
4765 if (fn == method)
4766 break;
4767 i++;
4769 idx = build_int_2 (i, 0);
4771 lookup_args = tree_cons (NULL_TREE, klass_ref,
4772 tree_cons (NULL_TREE, iface_ref,
4773 build_tree_list (NULL_TREE, idx)));
4774 lookup_fn = build1 (ADDR_EXPR,
4775 build_pointer_type (TREE_TYPE (java_iface_lookup_fn)),
4776 java_iface_lookup_fn);
4777 return build (CALL_EXPR, ptr_type_node, lookup_fn, lookup_args, NULL_TREE);
4780 /* Returns the value to use for the in-charge parameter when making a
4781 call to a function with the indicated NAME. */
4783 tree
4784 in_charge_arg_for_name (tree name)
4786 if (name == base_ctor_identifier
4787 || name == base_dtor_identifier)
4788 return integer_zero_node;
4789 else if (name == complete_ctor_identifier)
4790 return integer_one_node;
4791 else if (name == complete_dtor_identifier)
4792 return integer_two_node;
4793 else if (name == deleting_dtor_identifier)
4794 return integer_three_node;
4796 /* This function should only be called with one of the names listed
4797 above. */
4798 abort ();
4799 return NULL_TREE;
4802 /* Build a call to a constructor, destructor, or an assignment
4803 operator for INSTANCE, an expression with class type. NAME
4804 indicates the special member function to call; ARGS are the
4805 arguments. BINFO indicates the base of INSTANCE that is to be
4806 passed as the `this' parameter to the member function called.
4808 FLAGS are the LOOKUP_* flags to use when processing the call.
4810 If NAME indicates a complete object constructor, INSTANCE may be
4811 NULL_TREE. In this case, the caller will call build_cplus_new to
4812 store the newly constructed object into a VAR_DECL. */
4814 tree
4815 build_special_member_call (tree instance, tree name, tree args,
4816 tree binfo, int flags)
4818 tree fns;
4819 /* The type of the subobject to be constructed or destroyed. */
4820 tree class_type;
4822 my_friendly_assert (name == complete_ctor_identifier
4823 || name == base_ctor_identifier
4824 || name == complete_dtor_identifier
4825 || name == base_dtor_identifier
4826 || name == deleting_dtor_identifier
4827 || name == ansi_assopname (NOP_EXPR),
4828 20020712);
4829 my_friendly_assert (binfo != NULL_TREE, 20020712);
4831 class_type = BINFO_TYPE (binfo);
4833 /* Handle the special case where INSTANCE is NULL_TREE. */
4834 if (name == complete_ctor_identifier && !instance)
4836 instance = build_int_2 (0, 0);
4837 TREE_TYPE (instance) = build_pointer_type (class_type);
4838 instance = build1 (INDIRECT_REF, class_type, instance);
4840 else if (name == complete_dtor_identifier
4841 || name == base_dtor_identifier
4842 || name == deleting_dtor_identifier)
4843 my_friendly_assert (args == NULL_TREE, 20020712);
4845 my_friendly_assert (instance != NULL_TREE, 20020712);
4847 /* Resolve the name. */
4848 if (!complete_type_or_else (BINFO_TYPE (binfo), NULL_TREE))
4849 return error_mark_node;
4851 fns = lookup_fnfields (binfo, name, 1);
4853 /* When making a call to a constructor or destructor for a subobject
4854 that uses virtual base classes, pass down a pointer to a VTT for
4855 the subobject. */
4856 if ((name == base_ctor_identifier
4857 || name == base_dtor_identifier)
4858 && TYPE_USES_VIRTUAL_BASECLASSES (class_type))
4860 tree vtt;
4861 tree sub_vtt;
4863 /* If the current function is a complete object constructor
4864 or destructor, then we fetch the VTT directly.
4865 Otherwise, we look it up using the VTT we were given. */
4866 vtt = TREE_CHAIN (CLASSTYPE_VTABLES (current_class_type));
4867 vtt = decay_conversion (vtt);
4868 vtt = build (COND_EXPR, TREE_TYPE (vtt),
4869 build (EQ_EXPR, boolean_type_node,
4870 current_in_charge_parm, integer_zero_node),
4871 current_vtt_parm,
4872 vtt);
4873 my_friendly_assert (BINFO_SUBVTT_INDEX (binfo), 20010110);
4874 sub_vtt = build (PLUS_EXPR, TREE_TYPE (vtt), vtt,
4875 BINFO_SUBVTT_INDEX (binfo));
4877 args = tree_cons (NULL_TREE, sub_vtt, args);
4880 return build_new_method_call (instance, fns, args, binfo, flags);
4883 /* Return the NAME, as a C string. The NAME indicates a function that
4884 is a member of TYPE. *FREE_P is set to true if the caller must
4885 free the memory returned.
4887 Rather than go through all of this, we should simply set the names
4888 of constructors and destructors appropriately, and dispense with
4889 ctor_identifier, dtor_identifier, etc. */
4891 static char *
4892 name_as_c_string (tree name, tree type, bool *free_p)
4894 char *pretty_name;
4896 /* Assume that we will not allocate memory. */
4897 *free_p = false;
4898 /* Constructors and destructors are special. */
4899 if (IDENTIFIER_CTOR_OR_DTOR_P (name))
4901 pretty_name
4902 = (char *) IDENTIFIER_POINTER (constructor_name (type));
4903 /* For a destructor, add the '~'. */
4904 if (name == complete_dtor_identifier
4905 || name == base_dtor_identifier
4906 || name == deleting_dtor_identifier)
4908 pretty_name = concat ("~", pretty_name, NULL);
4909 /* Remember that we need to free the memory allocated. */
4910 *free_p = true;
4913 else
4914 pretty_name = (char *) IDENTIFIER_POINTER (name);
4916 return pretty_name;
4919 /* Build a call to "INSTANCE.FN (ARGS)". */
4921 tree
4922 build_new_method_call (tree instance, tree fns, tree args,
4923 tree conversion_path, int flags)
4925 struct z_candidate *candidates = 0, *cand;
4926 tree explicit_targs = NULL_TREE;
4927 tree basetype = NULL_TREE;
4928 tree access_binfo;
4929 tree optype;
4930 tree mem_args = NULL_TREE, instance_ptr;
4931 tree name;
4932 tree user_args;
4933 tree call;
4934 tree fn;
4935 tree class_type;
4936 int template_only = 0;
4937 bool any_viable_p;
4939 my_friendly_assert (instance != NULL_TREE, 20020729);
4941 if (error_operand_p (instance)
4942 || error_operand_p (fns)
4943 || args == error_mark_node)
4944 return error_mark_node;
4946 /* Process the argument list. */
4947 user_args = args;
4948 args = resolve_args (args);
4949 if (args == error_mark_node)
4950 return error_mark_node;
4952 if (TREE_CODE (instance) == OFFSET_REF)
4953 instance = resolve_offset_ref (instance);
4954 if (TREE_CODE (TREE_TYPE (instance)) == REFERENCE_TYPE)
4955 instance = convert_from_reference (instance);
4956 basetype = TYPE_MAIN_VARIANT (TREE_TYPE (instance));
4957 instance_ptr = build_this (instance);
4959 if (!BASELINK_P (fns))
4961 call = build_field_call (instance_ptr, fns, args);
4962 if (call)
4963 return call;
4964 error ("call to non-function `%D'", fns);
4965 return error_mark_node;
4968 if (!conversion_path)
4969 conversion_path = BASELINK_BINFO (fns);
4970 access_binfo = BASELINK_ACCESS_BINFO (fns);
4971 optype = BASELINK_OPTYPE (fns);
4972 fns = BASELINK_FUNCTIONS (fns);
4974 if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
4976 explicit_targs = TREE_OPERAND (fns, 1);
4977 fns = TREE_OPERAND (fns, 0);
4978 template_only = 1;
4981 my_friendly_assert (TREE_CODE (fns) == FUNCTION_DECL
4982 || TREE_CODE (fns) == TEMPLATE_DECL
4983 || TREE_CODE (fns) == OVERLOAD,
4984 20020712);
4986 /* XXX this should be handled before we get here. */
4987 if (! IS_AGGR_TYPE (basetype))
4989 if ((flags & LOOKUP_COMPLAIN) && basetype != error_mark_node)
4990 error ("request for member `%D' in `%E', which is of non-aggregate type `%T'",
4991 fns, instance, basetype);
4993 return error_mark_node;
4996 fn = get_first_fn (fns);
4997 name = DECL_NAME (fn);
4999 if (IDENTIFIER_CTOR_OR_DTOR_P (name))
5001 /* Callers should explicitly indicate whether they want to construct
5002 the complete object or just the part without virtual bases. */
5003 my_friendly_assert (name != ctor_identifier, 20000408);
5004 /* Similarly for destructors. */
5005 my_friendly_assert (name != dtor_identifier, 20000408);
5008 /* It's OK to call destructors on cv-qualified objects. Therefore,
5009 convert the INSTANCE_PTR to the unqualified type, if necessary. */
5010 if (DECL_DESTRUCTOR_P (fn))
5012 tree type = build_pointer_type (basetype);
5013 if (!same_type_p (type, TREE_TYPE (instance_ptr)))
5014 instance_ptr = build_nop (type, instance_ptr);
5017 class_type = (conversion_path ? BINFO_TYPE (conversion_path) : NULL_TREE);
5018 mem_args = tree_cons (NULL_TREE, instance_ptr, args);
5020 for (fn = fns; fn; fn = OVL_NEXT (fn))
5022 tree t = OVL_CURRENT (fn);
5023 tree this_arglist;
5025 /* We can end up here for copy-init of same or base class. */
5026 if ((flags & LOOKUP_ONLYCONVERTING)
5027 && DECL_NONCONVERTING_P (t))
5028 continue;
5030 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (t))
5031 this_arglist = mem_args;
5032 else
5033 this_arglist = args;
5035 if (TREE_CODE (t) == TEMPLATE_DECL)
5036 /* A member template. */
5037 add_template_candidate (&candidates, t,
5038 class_type,
5039 explicit_targs,
5040 this_arglist, optype,
5041 access_binfo,
5042 conversion_path,
5043 flags,
5044 DEDUCE_CALL);
5045 else if (! template_only)
5046 add_function_candidate (&candidates, t,
5047 class_type,
5048 this_arglist,
5049 access_binfo,
5050 conversion_path,
5051 flags);
5054 candidates = splice_viable (candidates, pedantic, &any_viable_p);
5055 if (!any_viable_p)
5057 /* XXX will LOOKUP_SPECULATIVELY be needed when this is done? */
5058 if (flags & LOOKUP_SPECULATIVELY)
5059 return NULL_TREE;
5060 if (!COMPLETE_TYPE_P (basetype))
5061 cxx_incomplete_type_error (instance_ptr, basetype);
5062 else
5064 char *pretty_name;
5065 bool free_p;
5067 pretty_name = name_as_c_string (name, basetype, &free_p);
5068 error ("no matching function for call to `%T::%s(%A)%#V'",
5069 basetype, pretty_name, user_args,
5070 TREE_TYPE (TREE_TYPE (instance_ptr)));
5071 if (free_p)
5072 free (pretty_name);
5074 print_z_candidates (candidates);
5075 return error_mark_node;
5078 cand = tourney (candidates);
5079 if (cand == 0)
5081 char *pretty_name;
5082 bool free_p;
5084 pretty_name = name_as_c_string (name, basetype, &free_p);
5085 error ("call of overloaded `%s(%A)' is ambiguous", pretty_name,
5086 user_args);
5087 print_z_candidates (candidates);
5088 if (free_p)
5089 free (pretty_name);
5090 return error_mark_node;
5093 if (DECL_PURE_VIRTUAL_P (cand->fn)
5094 && instance == current_class_ref
5095 && (DECL_CONSTRUCTOR_P (current_function_decl)
5096 || DECL_DESTRUCTOR_P (current_function_decl))
5097 && ! (flags & LOOKUP_NONVIRTUAL)
5098 && value_member (cand->fn, CLASSTYPE_PURE_VIRTUALS (basetype)))
5099 error ((DECL_CONSTRUCTOR_P (current_function_decl) ?
5100 "abstract virtual `%#D' called from constructor"
5101 : "abstract virtual `%#D' called from destructor"),
5102 cand->fn);
5103 if (TREE_CODE (TREE_TYPE (cand->fn)) == METHOD_TYPE
5104 && is_dummy_object (instance_ptr))
5106 error ("cannot call member function `%D' without object", cand->fn);
5107 return error_mark_node;
5110 if (DECL_VINDEX (cand->fn) && ! (flags & LOOKUP_NONVIRTUAL)
5111 && resolves_to_fixed_type_p (instance, 0))
5112 flags |= LOOKUP_NONVIRTUAL;
5114 if (TREE_CODE (TREE_TYPE (cand->fn)) == METHOD_TYPE)
5115 call = build_over_call (cand, flags);
5116 else
5118 call = build_over_call (cand, flags);
5119 /* In an expression of the form `a->f()' where `f' turns out to
5120 be a static member function, `a' is none-the-less evaluated. */
5121 if (!is_dummy_object (instance_ptr) && TREE_SIDE_EFFECTS (instance))
5122 call = build (COMPOUND_EXPR, TREE_TYPE (call), instance, call);
5125 return call;
5128 /* Returns true iff standard conversion sequence ICS1 is a proper
5129 subsequence of ICS2. */
5131 static bool
5132 is_subseq (tree ics1, tree ics2)
5134 /* We can assume that a conversion of the same code
5135 between the same types indicates a subsequence since we only get
5136 here if the types we are converting from are the same. */
5138 while (TREE_CODE (ics1) == RVALUE_CONV
5139 || TREE_CODE (ics1) == LVALUE_CONV)
5140 ics1 = TREE_OPERAND (ics1, 0);
5142 while (1)
5144 while (TREE_CODE (ics2) == RVALUE_CONV
5145 || TREE_CODE (ics2) == LVALUE_CONV)
5146 ics2 = TREE_OPERAND (ics2, 0);
5148 if (TREE_CODE (ics2) == USER_CONV
5149 || TREE_CODE (ics2) == AMBIG_CONV
5150 || TREE_CODE (ics2) == IDENTITY_CONV)
5151 /* At this point, ICS1 cannot be a proper subsequence of
5152 ICS2. We can get a USER_CONV when we are comparing the
5153 second standard conversion sequence of two user conversion
5154 sequences. */
5155 return false;
5157 ics2 = TREE_OPERAND (ics2, 0);
5159 if (TREE_CODE (ics2) == TREE_CODE (ics1)
5160 && same_type_p (TREE_TYPE (ics2), TREE_TYPE (ics1))
5161 && same_type_p (TREE_TYPE (TREE_OPERAND (ics2, 0)),
5162 TREE_TYPE (TREE_OPERAND (ics1, 0))))
5163 return true;
5167 /* Returns nonzero iff DERIVED is derived from BASE. The inputs may
5168 be any _TYPE nodes. */
5170 bool
5171 is_properly_derived_from (tree derived, tree base)
5173 if (!IS_AGGR_TYPE_CODE (TREE_CODE (derived))
5174 || !IS_AGGR_TYPE_CODE (TREE_CODE (base)))
5175 return false;
5177 /* We only allow proper derivation here. The DERIVED_FROM_P macro
5178 considers every class derived from itself. */
5179 return (!same_type_ignoring_top_level_qualifiers_p (derived, base)
5180 && DERIVED_FROM_P (base, derived));
5183 /* We build the ICS for an implicit object parameter as a pointer
5184 conversion sequence. However, such a sequence should be compared
5185 as if it were a reference conversion sequence. If ICS is the
5186 implicit conversion sequence for an implicit object parameter,
5187 modify it accordingly. */
5189 static void
5190 maybe_handle_implicit_object (tree *ics)
5192 if (ICS_THIS_FLAG (*ics))
5194 /* [over.match.funcs]
5196 For non-static member functions, the type of the
5197 implicit object parameter is "reference to cv X"
5198 where X is the class of which the function is a
5199 member and cv is the cv-qualification on the member
5200 function declaration. */
5201 tree t = *ics;
5202 tree reference_type;
5204 /* The `this' parameter is a pointer to a class type. Make the
5205 implict conversion talk about a reference to that same class
5206 type. */
5207 reference_type = TREE_TYPE (TREE_TYPE (*ics));
5208 reference_type = build_reference_type (reference_type);
5210 if (TREE_CODE (t) == QUAL_CONV)
5211 t = TREE_OPERAND (t, 0);
5212 if (TREE_CODE (t) == PTR_CONV)
5213 t = TREE_OPERAND (t, 0);
5214 t = build1 (IDENTITY_CONV, TREE_TYPE (TREE_TYPE (t)), NULL_TREE);
5215 t = direct_reference_binding (reference_type, t);
5216 *ics = t;
5220 /* If *ICS is a REF_BIND set *ICS to the remainder of the conversion,
5221 and return the type to which the reference refers. Otherwise,
5222 leave *ICS unchanged and return NULL_TREE. */
5224 static tree
5225 maybe_handle_ref_bind (tree *ics)
5227 if (TREE_CODE (*ics) == REF_BIND)
5229 tree old_ics = *ics;
5230 tree type = TREE_TYPE (TREE_TYPE (old_ics));
5231 *ics = TREE_OPERAND (old_ics, 0);
5232 ICS_USER_FLAG (*ics) = ICS_USER_FLAG (old_ics);
5233 ICS_BAD_FLAG (*ics) = ICS_BAD_FLAG (old_ics);
5234 return type;
5237 return NULL_TREE;
5240 /* Compare two implicit conversion sequences according to the rules set out in
5241 [over.ics.rank]. Return values:
5243 1: ics1 is better than ics2
5244 -1: ics2 is better than ics1
5245 0: ics1 and ics2 are indistinguishable */
5247 static int
5248 compare_ics (tree ics1, tree ics2)
5250 tree from_type1;
5251 tree from_type2;
5252 tree to_type1;
5253 tree to_type2;
5254 tree deref_from_type1 = NULL_TREE;
5255 tree deref_from_type2 = NULL_TREE;
5256 tree deref_to_type1 = NULL_TREE;
5257 tree deref_to_type2 = NULL_TREE;
5258 int rank1, rank2;
5260 /* REF_BINDING is nonzero if the result of the conversion sequence
5261 is a reference type. In that case TARGET_TYPE is the
5262 type referred to by the reference. */
5263 tree target_type1;
5264 tree target_type2;
5266 /* Handle implicit object parameters. */
5267 maybe_handle_implicit_object (&ics1);
5268 maybe_handle_implicit_object (&ics2);
5270 /* Handle reference parameters. */
5271 target_type1 = maybe_handle_ref_bind (&ics1);
5272 target_type2 = maybe_handle_ref_bind (&ics2);
5274 /* [over.ics.rank]
5276 When comparing the basic forms of implicit conversion sequences (as
5277 defined in _over.best.ics_)
5279 --a standard conversion sequence (_over.ics.scs_) is a better
5280 conversion sequence than a user-defined conversion sequence
5281 or an ellipsis conversion sequence, and
5283 --a user-defined conversion sequence (_over.ics.user_) is a
5284 better conversion sequence than an ellipsis conversion sequence
5285 (_over.ics.ellipsis_). */
5286 rank1 = ICS_RANK (ics1);
5287 rank2 = ICS_RANK (ics2);
5289 if (rank1 > rank2)
5290 return -1;
5291 else if (rank1 < rank2)
5292 return 1;
5294 if (rank1 == BAD_RANK)
5296 /* XXX Isn't this an extension? */
5297 /* Both ICS are bad. We try to make a decision based on what
5298 would have happenned if they'd been good. */
5299 if (ICS_USER_FLAG (ics1) > ICS_USER_FLAG (ics2)
5300 || ICS_STD_RANK (ics1) > ICS_STD_RANK (ics2))
5301 return -1;
5302 else if (ICS_USER_FLAG (ics1) < ICS_USER_FLAG (ics2)
5303 || ICS_STD_RANK (ics1) < ICS_STD_RANK (ics2))
5304 return 1;
5306 /* We couldn't make up our minds; try to figure it out below. */
5309 if (ICS_ELLIPSIS_FLAG (ics1))
5310 /* Both conversions are ellipsis conversions. */
5311 return 0;
5313 /* User-defined conversion sequence U1 is a better conversion sequence
5314 than another user-defined conversion sequence U2 if they contain the
5315 same user-defined conversion operator or constructor and if the sec-
5316 ond standard conversion sequence of U1 is better than the second
5317 standard conversion sequence of U2. */
5319 if (ICS_USER_FLAG (ics1))
5321 tree t1, t2;
5323 for (t1 = ics1; TREE_CODE (t1) != USER_CONV; t1 = TREE_OPERAND (t1, 0))
5324 if (TREE_CODE (t1) == AMBIG_CONV)
5325 return 0;
5326 for (t2 = ics2; TREE_CODE (t2) != USER_CONV; t2 = TREE_OPERAND (t2, 0))
5327 if (TREE_CODE (t2) == AMBIG_CONV)
5328 return 0;
5330 if (USER_CONV_FN (t1) != USER_CONV_FN (t2))
5331 return 0;
5333 /* We can just fall through here, after setting up
5334 FROM_TYPE1 and FROM_TYPE2. */
5335 from_type1 = TREE_TYPE (t1);
5336 from_type2 = TREE_TYPE (t2);
5338 else
5340 /* We're dealing with two standard conversion sequences.
5342 [over.ics.rank]
5344 Standard conversion sequence S1 is a better conversion
5345 sequence than standard conversion sequence S2 if
5347 --S1 is a proper subsequence of S2 (comparing the conversion
5348 sequences in the canonical form defined by _over.ics.scs_,
5349 excluding any Lvalue Transformation; the identity
5350 conversion sequence is considered to be a subsequence of
5351 any non-identity conversion sequence */
5353 from_type1 = ics1;
5354 while (TREE_CODE (from_type1) != IDENTITY_CONV)
5355 from_type1 = TREE_OPERAND (from_type1, 0);
5356 from_type1 = TREE_TYPE (from_type1);
5358 from_type2 = ics2;
5359 while (TREE_CODE (from_type2) != IDENTITY_CONV)
5360 from_type2 = TREE_OPERAND (from_type2, 0);
5361 from_type2 = TREE_TYPE (from_type2);
5364 if (same_type_p (from_type1, from_type2))
5366 if (is_subseq (ics1, ics2))
5367 return 1;
5368 if (is_subseq (ics2, ics1))
5369 return -1;
5371 /* Otherwise, one sequence cannot be a subsequence of the other; they
5372 don't start with the same type. This can happen when comparing the
5373 second standard conversion sequence in two user-defined conversion
5374 sequences. */
5376 /* [over.ics.rank]
5378 Or, if not that,
5380 --the rank of S1 is better than the rank of S2 (by the rules
5381 defined below):
5383 Standard conversion sequences are ordered by their ranks: an Exact
5384 Match is a better conversion than a Promotion, which is a better
5385 conversion than a Conversion.
5387 Two conversion sequences with the same rank are indistinguishable
5388 unless one of the following rules applies:
5390 --A conversion that is not a conversion of a pointer, or pointer
5391 to member, to bool is better than another conversion that is such
5392 a conversion.
5394 The ICS_STD_RANK automatically handles the pointer-to-bool rule,
5395 so that we do not have to check it explicitly. */
5396 if (ICS_STD_RANK (ics1) < ICS_STD_RANK (ics2))
5397 return 1;
5398 else if (ICS_STD_RANK (ics2) < ICS_STD_RANK (ics1))
5399 return -1;
5401 to_type1 = TREE_TYPE (ics1);
5402 to_type2 = TREE_TYPE (ics2);
5404 if (TYPE_PTR_P (from_type1)
5405 && TYPE_PTR_P (from_type2)
5406 && TYPE_PTR_P (to_type1)
5407 && TYPE_PTR_P (to_type2))
5409 deref_from_type1 = TREE_TYPE (from_type1);
5410 deref_from_type2 = TREE_TYPE (from_type2);
5411 deref_to_type1 = TREE_TYPE (to_type1);
5412 deref_to_type2 = TREE_TYPE (to_type2);
5414 /* The rules for pointers to members A::* are just like the rules
5415 for pointers A*, except opposite: if B is derived from A then
5416 A::* converts to B::*, not vice versa. For that reason, we
5417 switch the from_ and to_ variables here. */
5418 else if (TYPE_PTRMEM_P (from_type1)
5419 && TYPE_PTRMEM_P (from_type2)
5420 && TYPE_PTRMEM_P (to_type1)
5421 && TYPE_PTRMEM_P (to_type2))
5423 deref_to_type1 = TYPE_OFFSET_BASETYPE (TREE_TYPE (from_type1));
5424 deref_to_type2 = TYPE_OFFSET_BASETYPE (TREE_TYPE (from_type2));
5425 deref_from_type1 = TYPE_OFFSET_BASETYPE (TREE_TYPE (to_type1));
5426 deref_from_type2 = TYPE_OFFSET_BASETYPE (TREE_TYPE (to_type2));
5428 else if (TYPE_PTRMEMFUNC_P (from_type1)
5429 && TYPE_PTRMEMFUNC_P (from_type2)
5430 && TYPE_PTRMEMFUNC_P (to_type1)
5431 && TYPE_PTRMEMFUNC_P (to_type2))
5433 deref_to_type1 = TYPE_PTRMEMFUNC_OBJECT_TYPE (from_type1);
5434 deref_to_type2 = TYPE_PTRMEMFUNC_OBJECT_TYPE (from_type2);
5435 deref_from_type1 = TYPE_PTRMEMFUNC_OBJECT_TYPE (to_type1);
5436 deref_from_type2 = TYPE_PTRMEMFUNC_OBJECT_TYPE (to_type2);
5439 if (deref_from_type1 != NULL_TREE
5440 && IS_AGGR_TYPE_CODE (TREE_CODE (deref_from_type1))
5441 && IS_AGGR_TYPE_CODE (TREE_CODE (deref_from_type2)))
5443 /* This was one of the pointer or pointer-like conversions.
5445 [over.ics.rank]
5447 --If class B is derived directly or indirectly from class A,
5448 conversion of B* to A* is better than conversion of B* to
5449 void*, and conversion of A* to void* is better than
5450 conversion of B* to void*. */
5451 if (TREE_CODE (deref_to_type1) == VOID_TYPE
5452 && TREE_CODE (deref_to_type2) == VOID_TYPE)
5454 if (is_properly_derived_from (deref_from_type1,
5455 deref_from_type2))
5456 return -1;
5457 else if (is_properly_derived_from (deref_from_type2,
5458 deref_from_type1))
5459 return 1;
5461 else if (TREE_CODE (deref_to_type1) == VOID_TYPE
5462 || TREE_CODE (deref_to_type2) == VOID_TYPE)
5464 if (same_type_p (deref_from_type1, deref_from_type2))
5466 if (TREE_CODE (deref_to_type2) == VOID_TYPE)
5468 if (is_properly_derived_from (deref_from_type1,
5469 deref_to_type1))
5470 return 1;
5472 /* We know that DEREF_TO_TYPE1 is `void' here. */
5473 else if (is_properly_derived_from (deref_from_type1,
5474 deref_to_type2))
5475 return -1;
5478 else if (IS_AGGR_TYPE_CODE (TREE_CODE (deref_to_type1))
5479 && IS_AGGR_TYPE_CODE (TREE_CODE (deref_to_type2)))
5481 /* [over.ics.rank]
5483 --If class B is derived directly or indirectly from class A
5484 and class C is derived directly or indirectly from B,
5486 --conversion of C* to B* is better than conversion of C* to
5487 A*,
5489 --conversion of B* to A* is better than conversion of C* to
5490 A* */
5491 if (same_type_p (deref_from_type1, deref_from_type2))
5493 if (is_properly_derived_from (deref_to_type1,
5494 deref_to_type2))
5495 return 1;
5496 else if (is_properly_derived_from (deref_to_type2,
5497 deref_to_type1))
5498 return -1;
5500 else if (same_type_p (deref_to_type1, deref_to_type2))
5502 if (is_properly_derived_from (deref_from_type2,
5503 deref_from_type1))
5504 return 1;
5505 else if (is_properly_derived_from (deref_from_type1,
5506 deref_from_type2))
5507 return -1;
5511 else if (CLASS_TYPE_P (non_reference (from_type1))
5512 && same_type_p (from_type1, from_type2))
5514 tree from = non_reference (from_type1);
5516 /* [over.ics.rank]
5518 --binding of an expression of type C to a reference of type
5519 B& is better than binding an expression of type C to a
5520 reference of type A&
5522 --conversion of C to B is better than conversion of C to A, */
5523 if (is_properly_derived_from (from, to_type1)
5524 && is_properly_derived_from (from, to_type2))
5526 if (is_properly_derived_from (to_type1, to_type2))
5527 return 1;
5528 else if (is_properly_derived_from (to_type2, to_type1))
5529 return -1;
5532 else if (CLASS_TYPE_P (non_reference (to_type1))
5533 && same_type_p (to_type1, to_type2))
5535 tree to = non_reference (to_type1);
5537 /* [over.ics.rank]
5539 --binding of an expression of type B to a reference of type
5540 A& is better than binding an expression of type C to a
5541 reference of type A&,
5543 --onversion of B to A is better than conversion of C to A */
5544 if (is_properly_derived_from (from_type1, to)
5545 && is_properly_derived_from (from_type2, to))
5547 if (is_properly_derived_from (from_type2, from_type1))
5548 return 1;
5549 else if (is_properly_derived_from (from_type1, from_type2))
5550 return -1;
5554 /* [over.ics.rank]
5556 --S1 and S2 differ only in their qualification conversion and yield
5557 similar types T1 and T2 (_conv.qual_), respectively, and the cv-
5558 qualification signature of type T1 is a proper subset of the cv-
5559 qualification signature of type T2 */
5560 if (TREE_CODE (ics1) == QUAL_CONV
5561 && TREE_CODE (ics2) == QUAL_CONV
5562 && same_type_p (from_type1, from_type2))
5563 return comp_cv_qual_signature (to_type1, to_type2);
5565 /* [over.ics.rank]
5567 --S1 and S2 are reference bindings (_dcl.init.ref_), and the
5568 types to which the references refer are the same type except for
5569 top-level cv-qualifiers, and the type to which the reference
5570 initialized by S2 refers is more cv-qualified than the type to
5571 which the reference initialized by S1 refers */
5573 if (target_type1 && target_type2
5574 && same_type_ignoring_top_level_qualifiers_p (to_type1, to_type2))
5575 return comp_cv_qualification (target_type2, target_type1);
5577 /* Neither conversion sequence is better than the other. */
5578 return 0;
5581 /* The source type for this standard conversion sequence. */
5583 static tree
5584 source_type (tree t)
5586 for (;; t = TREE_OPERAND (t, 0))
5588 if (TREE_CODE (t) == USER_CONV
5589 || TREE_CODE (t) == AMBIG_CONV
5590 || TREE_CODE (t) == IDENTITY_CONV)
5591 return TREE_TYPE (t);
5593 abort ();
5596 /* Note a warning about preferring WINNER to LOSER. We do this by storing
5597 a pointer to LOSER and re-running joust to produce the warning if WINNER
5598 is actually used. */
5600 static void
5601 add_warning (struct z_candidate *winner, struct z_candidate *loser)
5603 winner->warnings = tree_cons (NULL_TREE,
5604 build_zc_wrapper (loser),
5605 winner->warnings);
5608 /* Compare two candidates for overloading as described in
5609 [over.match.best]. Return values:
5611 1: cand1 is better than cand2
5612 -1: cand2 is better than cand1
5613 0: cand1 and cand2 are indistinguishable */
5615 static int
5616 joust (struct z_candidate *cand1, struct z_candidate *cand2, bool warn)
5618 int winner = 0;
5619 int i, off1 = 0, off2 = 0, len;
5621 /* Candidates that involve bad conversions are always worse than those
5622 that don't. */
5623 if (cand1->viable > cand2->viable)
5624 return 1;
5625 if (cand1->viable < cand2->viable)
5626 return -1;
5628 /* If we have two pseudo-candidates for conversions to the same type,
5629 or two candidates for the same function, arbitrarily pick one. */
5630 if (cand1->fn == cand2->fn
5631 && (TYPE_P (cand1->fn) || DECL_P (cand1->fn)))
5632 return 1;
5634 /* a viable function F1
5635 is defined to be a better function than another viable function F2 if
5636 for all arguments i, ICSi(F1) is not a worse conversion sequence than
5637 ICSi(F2), and then */
5639 /* for some argument j, ICSj(F1) is a better conversion sequence than
5640 ICSj(F2) */
5642 /* For comparing static and non-static member functions, we ignore
5643 the implicit object parameter of the non-static function. The
5644 standard says to pretend that the static function has an object
5645 parm, but that won't work with operator overloading. */
5646 len = TREE_VEC_LENGTH (cand1->convs);
5647 if (len != TREE_VEC_LENGTH (cand2->convs))
5649 if (DECL_STATIC_FUNCTION_P (cand1->fn)
5650 && ! DECL_STATIC_FUNCTION_P (cand2->fn))
5651 off2 = 1;
5652 else if (! DECL_STATIC_FUNCTION_P (cand1->fn)
5653 && DECL_STATIC_FUNCTION_P (cand2->fn))
5655 off1 = 1;
5656 --len;
5658 else
5659 abort ();
5662 for (i = 0; i < len; ++i)
5664 tree t1 = TREE_VEC_ELT (cand1->convs, i+off1);
5665 tree t2 = TREE_VEC_ELT (cand2->convs, i+off2);
5666 int comp = compare_ics (t1, t2);
5668 if (comp != 0)
5670 if (warn_sign_promo
5671 && ICS_RANK (t1) + ICS_RANK (t2) == STD_RANK + PROMO_RANK
5672 && TREE_CODE (t1) == STD_CONV
5673 && TREE_CODE (t2) == STD_CONV
5674 && TREE_CODE (TREE_TYPE (t1)) == INTEGER_TYPE
5675 && TREE_CODE (TREE_TYPE (t2)) == INTEGER_TYPE
5676 && (TYPE_PRECISION (TREE_TYPE (t1))
5677 == TYPE_PRECISION (TREE_TYPE (t2)))
5678 && (TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (t1, 0)))
5679 || (TREE_CODE (TREE_TYPE (TREE_OPERAND (t1, 0)))
5680 == ENUMERAL_TYPE)))
5682 tree type = TREE_TYPE (TREE_OPERAND (t1, 0));
5683 tree type1, type2;
5684 struct z_candidate *w, *l;
5685 if (comp > 0)
5686 type1 = TREE_TYPE (t1), type2 = TREE_TYPE (t2),
5687 w = cand1, l = cand2;
5688 else
5689 type1 = TREE_TYPE (t2), type2 = TREE_TYPE (t1),
5690 w = cand2, l = cand1;
5692 if (warn)
5694 warning ("passing `%T' chooses `%T' over `%T'",
5695 type, type1, type2);
5696 warning (" in call to `%D'", w->fn);
5698 else
5699 add_warning (w, l);
5702 if (winner && comp != winner)
5704 winner = 0;
5705 goto tweak;
5707 winner = comp;
5711 /* warn about confusing overload resolution for user-defined conversions,
5712 either between a constructor and a conversion op, or between two
5713 conversion ops. */
5714 if (winner && cand1->second_conv
5715 && ((DECL_CONSTRUCTOR_P (cand1->fn)
5716 != DECL_CONSTRUCTOR_P (cand2->fn))
5717 /* Don't warn if the two conv ops convert to the same type... */
5718 || (! DECL_CONSTRUCTOR_P (cand1->fn)
5719 && ! same_type_p (TREE_TYPE (TREE_TYPE (cand1->fn)),
5720 TREE_TYPE (TREE_TYPE (cand2->fn))))))
5722 int comp = compare_ics (cand1->second_conv, cand2->second_conv);
5723 if (comp != winner)
5725 struct z_candidate *w, *l;
5726 tree convn;
5727 if (winner == 1)
5728 w = cand1, l = cand2;
5729 else
5730 w = cand2, l = cand1;
5731 if (DECL_CONTEXT (cand1->fn) == DECL_CONTEXT (cand2->fn)
5732 && ! DECL_CONSTRUCTOR_P (cand1->fn)
5733 && ! DECL_CONSTRUCTOR_P (cand2->fn)
5734 && (convn = standard_conversion
5735 (TREE_TYPE (TREE_TYPE (l->fn)),
5736 TREE_TYPE (TREE_TYPE (w->fn)), NULL_TREE))
5737 && TREE_CODE (convn) == QUAL_CONV)
5738 /* Don't complain about `operator char *()' beating
5739 `operator const char *() const'. */;
5740 else if (warn)
5742 tree source = source_type (TREE_VEC_ELT (w->convs, 0));
5743 if (! DECL_CONSTRUCTOR_P (w->fn))
5744 source = TREE_TYPE (source);
5745 warning ("choosing `%D' over `%D'", w->fn, l->fn);
5746 warning (" for conversion from `%T' to `%T'",
5747 source, TREE_TYPE (w->second_conv));
5748 warning (" because conversion sequence for the argument is better");
5750 else
5751 add_warning (w, l);
5755 if (winner)
5756 return winner;
5758 /* or, if not that,
5759 F1 is a non-template function and F2 is a template function
5760 specialization. */
5762 if (! cand1->template && cand2->template)
5763 return 1;
5764 else if (cand1->template && ! cand2->template)
5765 return -1;
5767 /* or, if not that,
5768 F1 and F2 are template functions and the function template for F1 is
5769 more specialized than the template for F2 according to the partial
5770 ordering rules. */
5772 if (cand1->template && cand2->template)
5774 winner = more_specialized
5775 (TI_TEMPLATE (cand1->template), TI_TEMPLATE (cand2->template),
5776 DEDUCE_ORDER,
5777 /* Tell the deduction code how many real function arguments
5778 we saw, not counting the implicit 'this' argument. But,
5779 add_function_candidate() suppresses the "this" argument
5780 for constructors.
5782 [temp.func.order]: The presence of unused ellipsis and default
5783 arguments has no effect on the partial ordering of function
5784 templates. */
5785 TREE_VEC_LENGTH (cand1->convs)
5786 - (DECL_NONSTATIC_MEMBER_FUNCTION_P (cand1->fn)
5787 - DECL_CONSTRUCTOR_P (cand1->fn)));
5788 if (winner)
5789 return winner;
5792 /* or, if not that,
5793 the context is an initialization by user-defined conversion (see
5794 _dcl.init_ and _over.match.user_) and the standard conversion
5795 sequence from the return type of F1 to the destination type (i.e.,
5796 the type of the entity being initialized) is a better conversion
5797 sequence than the standard conversion sequence from the return type
5798 of F2 to the destination type. */
5800 if (cand1->second_conv)
5802 winner = compare_ics (cand1->second_conv, cand2->second_conv);
5803 if (winner)
5804 return winner;
5807 /* Check whether we can discard a builtin candidate, either because we
5808 have two identical ones or matching builtin and non-builtin candidates.
5810 (Pedantically in the latter case the builtin which matched the user
5811 function should not be added to the overload set, but we spot it here.
5813 [over.match.oper]
5814 ... the builtin candidates include ...
5815 - do not have the same parameter type list as any non-template
5816 non-member candidate. */
5818 if (TREE_CODE (cand1->fn) == IDENTIFIER_NODE
5819 || TREE_CODE (cand2->fn) == IDENTIFIER_NODE)
5821 for (i = 0; i < len; ++i)
5822 if (!same_type_p (TREE_TYPE (TREE_VEC_ELT (cand1->convs, i)),
5823 TREE_TYPE (TREE_VEC_ELT (cand2->convs, i))))
5824 break;
5825 if (i == TREE_VEC_LENGTH (cand1->convs))
5827 if (cand1->fn == cand2->fn)
5828 /* Two built-in candidates; arbitrarily pick one. */
5829 return 1;
5830 else if (TREE_CODE (cand1->fn) == IDENTIFIER_NODE)
5831 /* cand1 is built-in; prefer cand2. */
5832 return -1;
5833 else
5834 /* cand2 is built-in; prefer cand1. */
5835 return 1;
5839 /* If the two functions are the same (this can happen with declarations
5840 in multiple scopes and arg-dependent lookup), arbitrarily choose one. */
5841 if (DECL_P (cand1->fn) && DECL_P (cand2->fn)
5842 && equal_functions (cand1->fn, cand2->fn))
5843 return 1;
5845 tweak:
5847 /* Extension: If the worst conversion for one candidate is worse than the
5848 worst conversion for the other, take the first. */
5849 if (!pedantic)
5851 int rank1 = IDENTITY_RANK, rank2 = IDENTITY_RANK;
5852 struct z_candidate *w = 0, *l = 0;
5854 for (i = 0; i < len; ++i)
5856 if (ICS_RANK (TREE_VEC_ELT (cand1->convs, i+off1)) > rank1)
5857 rank1 = ICS_RANK (TREE_VEC_ELT (cand1->convs, i+off1));
5858 if (ICS_RANK (TREE_VEC_ELT (cand2->convs, i+off2)) > rank2)
5859 rank2 = ICS_RANK (TREE_VEC_ELT (cand2->convs, i+off2));
5861 if (rank1 < rank2)
5862 winner = 1, w = cand1, l = cand2;
5863 if (rank1 > rank2)
5864 winner = -1, w = cand2, l = cand1;
5865 if (winner)
5867 if (warn)
5869 print_z_candidate ("ISO C++ says that ", w, pedwarn);
5870 /* Translators note: This message is a continuation of the
5871 previous one, aligned on the right. */
5872 print_z_candidate (" and ", l, pedwarn);
5873 pedwarn ("are ambiguous even though the worst conversion \
5874 for the former is better than the worst conversion for the latter");
5876 else
5877 add_warning (w, l);
5878 return winner;
5882 my_friendly_assert (!winner, 20010121);
5883 return 0;
5886 /* Given a list of candidates for overloading, find the best one, if any.
5887 This algorithm has a worst case of O(2n) (winner is last), and a best
5888 case of O(n/2) (totally ambiguous); much better than a sorting
5889 algorithm. */
5891 static struct z_candidate *
5892 tourney (struct z_candidate *candidates)
5894 struct z_candidate *champ = candidates, *challenger;
5895 int fate;
5896 int champ_compared_to_predecessor = 0;
5898 /* Walk through the list once, comparing each current champ to the next
5899 candidate, knocking out a candidate or two with each comparison. */
5901 for (challenger = champ->next; challenger; )
5903 fate = joust (champ, challenger, 0);
5904 if (fate == 1)
5905 challenger = challenger->next;
5906 else
5908 if (fate == 0)
5910 champ = challenger->next;
5911 if (champ == 0)
5912 return 0;
5913 champ_compared_to_predecessor = 0;
5915 else
5917 champ = challenger;
5918 champ_compared_to_predecessor = 1;
5921 challenger = champ->next;
5925 /* Make sure the champ is better than all the candidates it hasn't yet
5926 been compared to. */
5928 for (challenger = candidates;
5929 challenger != champ
5930 && !(champ_compared_to_predecessor && challenger->next == champ);
5931 challenger = challenger->next)
5933 fate = joust (champ, challenger, 0);
5934 if (fate != 1)
5935 return 0;
5938 return champ;
5941 /* Returns nonzero if things of type FROM can be converted to TO. */
5943 bool
5944 can_convert (tree to, tree from)
5946 return can_convert_arg (to, from, NULL_TREE);
5949 /* Returns nonzero if ARG (of type FROM) can be converted to TO. */
5951 bool
5952 can_convert_arg (tree to, tree from, tree arg)
5954 tree t = implicit_conversion (to, from, arg, LOOKUP_NORMAL);
5955 return (t && ! ICS_BAD_FLAG (t));
5958 /* Like can_convert_arg, but allows dubious conversions as well. */
5960 bool
5961 can_convert_arg_bad (tree to, tree from, tree arg)
5963 return implicit_conversion (to, from, arg, LOOKUP_NORMAL) != 0;
5966 /* Convert EXPR to TYPE. Return the converted expression.
5968 Note that we allow bad conversions here because by the time we get to
5969 this point we are committed to doing the conversion. If we end up
5970 doing a bad conversion, convert_like will complain. */
5972 tree
5973 perform_implicit_conversion (tree type, tree expr)
5975 tree conv;
5977 if (error_operand_p (expr))
5978 return error_mark_node;
5979 conv = implicit_conversion (type, TREE_TYPE (expr), expr,
5980 LOOKUP_NORMAL);
5981 if (!conv)
5983 error ("could not convert `%E' to `%T'", expr, type);
5984 return error_mark_node;
5987 return convert_like (conv, expr);
5990 /* DECL is a VAR_DECL whose type is a REFERENCE_TYPE. The reference
5991 is being bound to a temporary. Create and return a new VAR_DECL
5992 with the indicated TYPE; this variable will store the value to
5993 which the reference is bound. */
5995 tree
5996 make_temporary_var_for_ref_to_temp (tree decl, tree type)
5998 tree var;
6000 /* Create the variable. */
6001 var = build_decl (VAR_DECL, NULL_TREE, type);
6002 DECL_ARTIFICIAL (var) = 1;
6003 TREE_USED (var) = 1;
6005 /* Register the variable. */
6006 if (TREE_STATIC (decl))
6008 /* Namespace-scope or local static; give it a mangled name. */
6009 tree name;
6011 TREE_STATIC (var) = 1;
6012 name = mangle_ref_init_variable (decl);
6013 DECL_NAME (var) = name;
6014 SET_DECL_ASSEMBLER_NAME (var, name);
6015 var = pushdecl_top_level (var);
6017 else
6019 /* Create a new cleanup level if necessary. */
6020 maybe_push_cleanup_level (type);
6021 /* Don't push unnamed temps. Do set DECL_CONTEXT, though. */
6022 DECL_CONTEXT (var) = current_function_decl;
6025 return var;
6028 /* Convert EXPR to the indicated reference TYPE, in a way suitable for
6029 initializing a variable of that TYPE. If DECL is non-NULL, it is
6030 the VAR_DECL being initialized with the EXPR. (In that case, the
6031 type of DECL will be TYPE.)
6033 Return the converted expression. */
6035 tree
6036 initialize_reference (tree type, tree expr, tree decl)
6038 tree conv;
6040 if (type == error_mark_node || error_operand_p (expr))
6041 return error_mark_node;
6043 conv = reference_binding (type, TREE_TYPE (expr), expr, LOOKUP_NORMAL);
6044 if (!conv || ICS_BAD_FLAG (conv))
6046 error ("could not convert `%E' to `%T'", expr, type);
6047 return error_mark_node;
6050 /* If DECL is non-NULL, then this special rule applies:
6052 [class.temporary]
6054 The temporary to which the reference is bound or the temporary
6055 that is the complete object to which the reference is bound
6056 persists for the lifetime of the reference.
6058 The temporaries created during the evaluation of the expression
6059 initializing the reference, except the temporary to which the
6060 reference is bound, are destroyed at the end of the
6061 full-expression in which they are created.
6063 In that case, we store the converted expression into a new
6064 VAR_DECL in a new scope.
6066 However, we want to be careful not to create temporaries when
6067 they are not required. For example, given:
6069 struct B {};
6070 struct D : public B {};
6071 D f();
6072 const B& b = f();
6074 there is no need to copy the return value from "f"; we can just
6075 extend its lifetime. Similarly, given:
6077 struct S {};
6078 struct T { operator S(); };
6079 T t;
6080 const S& s = t;
6082 we can extend the lifetime of the returnn value of the conversion
6083 operator. */
6084 my_friendly_assert (TREE_CODE (conv) == REF_BIND, 20030302);
6085 if (decl)
6087 tree var;
6088 tree base_conv_type;
6090 /* Skip over the REF_BIND. */
6091 conv = TREE_OPERAND (conv, 0);
6092 /* If the next conversion is a BASE_CONV, skip that too -- but
6093 remember that the conversion was required. */
6094 if (TREE_CODE (conv) == BASE_CONV && !NEED_TEMPORARY_P (conv))
6096 base_conv_type = TREE_TYPE (conv);
6097 conv = TREE_OPERAND (conv, 0);
6099 else
6100 base_conv_type = NULL_TREE;
6101 /* Perform the remainder of the conversion. */
6102 expr = convert_like (conv, expr);
6103 if (!real_non_cast_lvalue_p (expr))
6105 /* Create the temporary variable. */
6106 var = make_temporary_var_for_ref_to_temp (decl, TREE_TYPE (expr));
6107 DECL_INITIAL (var) = expr;
6108 cp_finish_decl (var, expr, NULL_TREE,
6109 LOOKUP_ONLYCONVERTING|DIRECT_BIND);
6110 /* Use its address to initialize the reference variable. */
6111 expr = build_address (var);
6113 else
6114 /* Take the address of EXPR. */
6115 expr = build_unary_op (ADDR_EXPR, expr, 0);
6116 /* If a BASE_CONV was required, perform it now. */
6117 if (base_conv_type)
6118 expr = (perform_implicit_conversion
6119 (build_pointer_type (base_conv_type), expr));
6120 return build_nop (type, expr);
6123 /* Perform the conversion. */
6124 return convert_like (conv, expr);
6127 #include "gt-cp-call.h"