Sync usage with man page.
[netbsd-mini2440.git] / gnu / dist / gcc4 / gcc / cp / call.c
blob508982d3e4cc2ea35c52d752d25bf760eace9666
1 /* Functions related to invoking methods and overloaded functions.
2 Copyright (C) 1987, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
4 Contributed by Michael Tiemann (tiemann@cygnus.com) and
5 modified by Brendan Kehoe (brendan@cygnus.com).
7 This file is part of GCC.
9 GCC is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2, or (at your option)
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, 51 Franklin Street, Fifth Floor,
22 Boston, MA 02110-1301, 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"
39 #include "intl.h"
40 #include "target.h"
41 #include "convert.h"
43 /* The various kinds of conversion. */
45 typedef enum conversion_kind {
46 ck_identity,
47 ck_lvalue,
48 ck_qual,
49 ck_std,
50 ck_ptr,
51 ck_pmem,
52 ck_base,
53 ck_ref_bind,
54 ck_user,
55 ck_ambig,
56 ck_rvalue
57 } conversion_kind;
59 /* The rank of the conversion. Order of the enumerals matters; better
60 conversions should come earlier in the list. */
62 typedef enum conversion_rank {
63 cr_identity,
64 cr_exact,
65 cr_promotion,
66 cr_std,
67 cr_pbool,
68 cr_user,
69 cr_ellipsis,
70 cr_bad
71 } conversion_rank;
73 /* An implicit conversion sequence, in the sense of [over.best.ics].
74 The first conversion to be performed is at the end of the chain.
75 That conversion is always a cr_identity conversion. */
77 typedef struct conversion conversion;
78 struct conversion {
79 /* The kind of conversion represented by this step. */
80 conversion_kind kind;
81 /* The rank of this conversion. */
82 conversion_rank rank;
83 BOOL_BITFIELD user_conv_p : 1;
84 BOOL_BITFIELD ellipsis_p : 1;
85 BOOL_BITFIELD this_p : 1;
86 BOOL_BITFIELD bad_p : 1;
87 /* If KIND is ck_ref_bind ck_base_conv, true to indicate that a
88 temporary should be created to hold the result of the
89 conversion. */
90 BOOL_BITFIELD need_temporary_p : 1;
91 /* If KIND is ck_identity or ck_base_conv, true to indicate that the
92 copy constructor must be accessible, even though it is not being
93 used. */
94 BOOL_BITFIELD check_copy_constructor_p : 1;
95 /* If KIND is ck_ptr or ck_pmem, true to indicate that a conversion
96 from a pointer-to-derived to pointer-to-base is being performed. */
97 BOOL_BITFIELD base_p : 1;
98 /* The type of the expression resulting from the conversion. */
99 tree type;
100 union {
101 /* The next conversion in the chain. Since the conversions are
102 arranged from outermost to innermost, the NEXT conversion will
103 actually be performed before this conversion. This variant is
104 used only when KIND is neither ck_identity nor ck_ambig. */
105 conversion *next;
106 /* The expression at the beginning of the conversion chain. This
107 variant is used only if KIND is ck_identity or ck_ambig. */
108 tree expr;
109 } u;
110 /* The function candidate corresponding to this conversion
111 sequence. This field is only used if KIND is ck_user. */
112 struct z_candidate *cand;
115 #define CONVERSION_RANK(NODE) \
116 ((NODE)->bad_p ? cr_bad \
117 : (NODE)->ellipsis_p ? cr_ellipsis \
118 : (NODE)->user_conv_p ? cr_user \
119 : (NODE)->rank)
121 static struct obstack conversion_obstack;
122 static bool conversion_obstack_initialized;
124 static struct z_candidate * tourney (struct z_candidate *);
125 static int equal_functions (tree, tree);
126 static int joust (struct z_candidate *, struct z_candidate *, bool);
127 static int compare_ics (conversion *, conversion *);
128 static tree build_over_call (struct z_candidate *, int);
129 static tree build_java_interface_fn_ref (tree, tree);
130 #define convert_like(CONV, EXPR) \
131 convert_like_real ((CONV), (EXPR), NULL_TREE, 0, 0, \
132 /*issue_conversion_warnings=*/true, \
133 /*c_cast_p=*/false)
134 #define convert_like_with_context(CONV, EXPR, FN, ARGNO) \
135 convert_like_real ((CONV), (EXPR), (FN), (ARGNO), 0, \
136 /*issue_conversion_warnings=*/true, \
137 /*c_cast_p=*/false)
138 static tree convert_like_real (conversion *, tree, tree, int, int, bool,
139 bool);
140 static void op_error (enum tree_code, enum tree_code, tree, tree,
141 tree, const char *);
142 static tree build_object_call (tree, tree);
143 static tree resolve_args (tree);
144 static struct z_candidate *build_user_type_conversion_1 (tree, tree, int);
145 static void print_z_candidate (const char *, struct z_candidate *);
146 static void print_z_candidates (struct z_candidate *);
147 static tree build_this (tree);
148 static struct z_candidate *splice_viable (struct z_candidate *, bool, bool *);
149 static bool any_strictly_viable (struct z_candidate *);
150 static struct z_candidate *add_template_candidate
151 (struct z_candidate **, tree, tree, tree, tree, tree,
152 tree, tree, int, unification_kind_t);
153 static struct z_candidate *add_template_candidate_real
154 (struct z_candidate **, tree, tree, tree, tree, tree,
155 tree, tree, int, tree, unification_kind_t);
156 static struct z_candidate *add_template_conv_candidate
157 (struct z_candidate **, tree, tree, tree, tree, tree, tree);
158 static void add_builtin_candidates
159 (struct z_candidate **, enum tree_code, enum tree_code,
160 tree, tree *, int);
161 static void add_builtin_candidate
162 (struct z_candidate **, enum tree_code, enum tree_code,
163 tree, tree, tree, tree *, tree *, int);
164 static bool is_complete (tree);
165 static void build_builtin_candidate
166 (struct z_candidate **, tree, tree, tree, tree *, tree *,
167 int);
168 static struct z_candidate *add_conv_candidate
169 (struct z_candidate **, tree, tree, tree, tree, tree);
170 static struct z_candidate *add_function_candidate
171 (struct z_candidate **, tree, tree, tree, tree, tree, int);
172 static conversion *implicit_conversion (tree, tree, tree, bool, int);
173 static conversion *standard_conversion (tree, tree, tree, bool, int);
174 static conversion *reference_binding (tree, tree, tree, bool, int);
175 static conversion *build_conv (conversion_kind, tree, conversion *);
176 static bool is_subseq (conversion *, conversion *);
177 static tree maybe_handle_ref_bind (conversion **);
178 static void maybe_handle_implicit_object (conversion **);
179 static struct z_candidate *add_candidate
180 (struct z_candidate **, tree, tree, size_t,
181 conversion **, tree, tree, int);
182 static tree source_type (conversion *);
183 static void add_warning (struct z_candidate *, struct z_candidate *);
184 static bool reference_related_p (tree, tree);
185 static bool reference_compatible_p (tree, tree);
186 static conversion *convert_class_to_reference (tree, tree, tree);
187 static conversion *direct_reference_binding (tree, conversion *);
188 static bool promoted_arithmetic_type_p (tree);
189 static conversion *conditional_conversion (tree, tree);
190 static char *name_as_c_string (tree, tree, bool *);
191 static tree call_builtin_trap (void);
192 static tree prep_operand (tree);
193 static void add_candidates (tree, tree, tree, bool, tree, tree,
194 int, struct z_candidate **);
195 static conversion *merge_conversion_sequences (conversion *, conversion *);
196 static bool magic_varargs_p (tree);
197 typedef void (*diagnostic_fn_t) (const char *, ...) ATTRIBUTE_GCC_CXXDIAG(1,2);
198 static tree build_temp (tree, tree, int, diagnostic_fn_t *);
199 static void check_constructor_callable (tree, tree);
201 /* Returns nonzero iff the destructor name specified in NAME matches BASETYPE.
202 NAME can take many forms... */
204 bool
205 check_dtor_name (tree basetype, tree name)
207 /* Just accept something we've already complained about. */
208 if (name == error_mark_node)
209 return true;
211 if (TREE_CODE (name) == TYPE_DECL)
212 name = TREE_TYPE (name);
213 else if (TYPE_P (name))
214 /* OK */;
215 else if (TREE_CODE (name) == IDENTIFIER_NODE)
217 if ((IS_AGGR_TYPE (basetype) && name == constructor_name (basetype))
218 || (TREE_CODE (basetype) == ENUMERAL_TYPE
219 && name == TYPE_IDENTIFIER (basetype)))
220 name = basetype;
221 else
222 name = get_type_value (name);
224 else
226 /* In the case of:
228 template <class T> struct S { ~S(); };
229 int i;
230 i.~S();
232 NAME will be a class template. */
233 gcc_assert (DECL_CLASS_TEMPLATE_P (name));
234 return false;
237 if (!name)
238 return false;
239 return same_type_p (TYPE_MAIN_VARIANT (basetype), TYPE_MAIN_VARIANT (name));
242 /* We want the address of a function or method. We avoid creating a
243 pointer-to-member function. */
245 tree
246 build_addr_func (tree function)
248 tree type = TREE_TYPE (function);
250 /* We have to do these by hand to avoid real pointer to member
251 functions. */
252 if (TREE_CODE (type) == METHOD_TYPE)
254 if (TREE_CODE (function) == OFFSET_REF)
256 tree object = build_address (TREE_OPERAND (function, 0));
257 return get_member_function_from_ptrfunc (&object,
258 TREE_OPERAND (function, 1));
260 function = build_address (function);
262 else
263 function = decay_conversion (function);
265 return function;
268 /* Build a CALL_EXPR, we can handle FUNCTION_TYPEs, METHOD_TYPEs, or
269 POINTER_TYPE to those. Note, pointer to member function types
270 (TYPE_PTRMEMFUNC_P) must be handled by our callers. */
272 tree
273 build_call (tree function, tree parms)
275 int is_constructor = 0;
276 int nothrow;
277 tree tmp;
278 tree decl;
279 tree result_type;
280 tree fntype;
282 function = build_addr_func (function);
284 if (TYPE_PTRMEMFUNC_P (TREE_TYPE (function)))
286 sorry ("unable to call pointer to member function here");
287 return error_mark_node;
290 fntype = TREE_TYPE (TREE_TYPE (function));
291 result_type = TREE_TYPE (fntype);
293 if (TREE_CODE (function) == ADDR_EXPR
294 && TREE_CODE (TREE_OPERAND (function, 0)) == FUNCTION_DECL)
295 decl = TREE_OPERAND (function, 0);
296 else
297 decl = NULL_TREE;
299 /* We check both the decl and the type; a function may be known not to
300 throw without being declared throw(). */
301 nothrow = ((decl && TREE_NOTHROW (decl))
302 || TYPE_NOTHROW_P (TREE_TYPE (TREE_TYPE (function))));
304 if (decl && TREE_THIS_VOLATILE (decl) && cfun)
305 current_function_returns_abnormally = 1;
307 if (decl && TREE_DEPRECATED (decl))
308 warn_deprecated_use (decl);
309 require_complete_eh_spec_types (fntype, decl);
311 if (decl && DECL_CONSTRUCTOR_P (decl))
312 is_constructor = 1;
314 if (decl && ! TREE_USED (decl))
316 /* We invoke build_call directly for several library functions.
317 These may have been declared normally if we're building libgcc,
318 so we can't just check DECL_ARTIFICIAL. */
319 gcc_assert (DECL_ARTIFICIAL (decl)
320 || !strncmp (IDENTIFIER_POINTER (DECL_NAME (decl)),
321 "__", 2));
322 mark_used (decl);
325 /* Don't pass empty class objects by value. This is useful
326 for tags in STL, which are used to control overload resolution.
327 We don't need to handle other cases of copying empty classes. */
328 if (! decl || ! DECL_BUILT_IN (decl))
329 for (tmp = parms; tmp; tmp = TREE_CHAIN (tmp))
330 if (is_empty_class (TREE_TYPE (TREE_VALUE (tmp)))
331 && ! TREE_ADDRESSABLE (TREE_TYPE (TREE_VALUE (tmp))))
333 tree t = build0 (EMPTY_CLASS_EXPR, TREE_TYPE (TREE_VALUE (tmp)));
334 TREE_VALUE (tmp) = build2 (COMPOUND_EXPR, TREE_TYPE (t),
335 TREE_VALUE (tmp), t);
338 function = build3 (CALL_EXPR, result_type, function, parms, NULL_TREE);
339 TREE_HAS_CONSTRUCTOR (function) = is_constructor;
340 TREE_NOTHROW (function) = nothrow;
342 return function;
345 /* Build something of the form ptr->method (args)
346 or object.method (args). This can also build
347 calls to constructors, and find friends.
349 Member functions always take their class variable
350 as a pointer.
352 INSTANCE is a class instance.
354 NAME is the name of the method desired, usually an IDENTIFIER_NODE.
356 PARMS help to figure out what that NAME really refers to.
358 BASETYPE_PATH, if non-NULL, contains a chain from the type of INSTANCE
359 down to the real instance type to use for access checking. We need this
360 information to get protected accesses correct.
362 FLAGS is the logical disjunction of zero or more LOOKUP_
363 flags. See cp-tree.h for more info.
365 If this is all OK, calls build_function_call with the resolved
366 member function.
368 This function must also handle being called to perform
369 initialization, promotion/coercion of arguments, and
370 instantiation of default parameters.
372 Note that NAME may refer to an instance variable name. If
373 `operator()()' is defined for the type of that field, then we return
374 that result. */
376 /* New overloading code. */
378 typedef struct z_candidate z_candidate;
380 typedef struct candidate_warning candidate_warning;
381 struct candidate_warning {
382 z_candidate *loser;
383 candidate_warning *next;
386 struct z_candidate {
387 /* The FUNCTION_DECL that will be called if this candidate is
388 selected by overload resolution. */
389 tree fn;
390 /* The arguments to use when calling this function. */
391 tree args;
392 /* The implicit conversion sequences for each of the arguments to
393 FN. */
394 conversion **convs;
395 /* The number of implicit conversion sequences. */
396 size_t num_convs;
397 /* If FN is a user-defined conversion, the standard conversion
398 sequence from the type returned by FN to the desired destination
399 type. */
400 conversion *second_conv;
401 int viable;
402 /* If FN is a member function, the binfo indicating the path used to
403 qualify the name of FN at the call site. This path is used to
404 determine whether or not FN is accessible if it is selected by
405 overload resolution. The DECL_CONTEXT of FN will always be a
406 (possibly improper) base of this binfo. */
407 tree access_path;
408 /* If FN is a non-static member function, the binfo indicating the
409 subobject to which the `this' pointer should be converted if FN
410 is selected by overload resolution. The type pointed to the by
411 the `this' pointer must correspond to the most derived class
412 indicated by the CONVERSION_PATH. */
413 tree conversion_path;
414 tree template_decl;
415 candidate_warning *warnings;
416 z_candidate *next;
419 /* Returns true iff T is a null pointer constant in the sense of
420 [conv.ptr]. */
422 bool
423 null_ptr_cst_p (tree t)
425 /* [conv.ptr]
427 A null pointer constant is an integral constant expression
428 (_expr.const_) rvalue of integer type that evaluates to zero. */
429 t = integral_constant_value (t);
430 if (t == null_node
431 || (CP_INTEGRAL_TYPE_P (TREE_TYPE (t)) && integer_zerop (t)))
432 return true;
433 return false;
436 /* Returns nonzero if PARMLIST consists of only default parms and/or
437 ellipsis. */
439 bool
440 sufficient_parms_p (tree parmlist)
442 for (; parmlist && parmlist != void_list_node;
443 parmlist = TREE_CHAIN (parmlist))
444 if (!TREE_PURPOSE (parmlist))
445 return false;
446 return true;
449 /* Allocate N bytes of memory from the conversion obstack. The memory
450 is zeroed before being returned. */
452 static void *
453 conversion_obstack_alloc (size_t n)
455 void *p;
456 if (!conversion_obstack_initialized)
458 gcc_obstack_init (&conversion_obstack);
459 conversion_obstack_initialized = true;
461 p = obstack_alloc (&conversion_obstack, n);
462 memset (p, 0, n);
463 return p;
466 /* Dynamically allocate a conversion. */
468 static conversion *
469 alloc_conversion (conversion_kind kind)
471 conversion *c;
472 c = conversion_obstack_alloc (sizeof (conversion));
473 c->kind = kind;
474 return c;
477 #ifdef ENABLE_CHECKING
479 /* Make sure that all memory on the conversion obstack has been
480 freed. */
482 void
483 validate_conversion_obstack (void)
485 if (conversion_obstack_initialized)
486 gcc_assert ((obstack_next_free (&conversion_obstack)
487 == obstack_base (&conversion_obstack)));
490 #endif /* ENABLE_CHECKING */
492 /* Dynamically allocate an array of N conversions. */
494 static conversion **
495 alloc_conversions (size_t n)
497 return conversion_obstack_alloc (n * sizeof (conversion *));
500 static conversion *
501 build_conv (conversion_kind code, tree type, conversion *from)
503 conversion *t;
504 conversion_rank rank = CONVERSION_RANK (from);
506 /* We can't use buildl1 here because CODE could be USER_CONV, which
507 takes two arguments. In that case, the caller is responsible for
508 filling in the second argument. */
509 t = alloc_conversion (code);
510 t->type = type;
511 t->u.next = from;
513 switch (code)
515 case ck_ptr:
516 case ck_pmem:
517 case ck_base:
518 case ck_std:
519 if (rank < cr_std)
520 rank = cr_std;
521 break;
523 case ck_qual:
524 if (rank < cr_exact)
525 rank = cr_exact;
526 break;
528 default:
529 break;
531 t->rank = rank;
532 t->user_conv_p = (code == ck_user || from->user_conv_p);
533 t->bad_p = from->bad_p;
534 t->base_p = false;
535 return t;
538 /* Build a representation of the identity conversion from EXPR to
539 itself. The TYPE should match the type of EXPR, if EXPR is non-NULL. */
541 static conversion *
542 build_identity_conv (tree type, tree expr)
544 conversion *c;
546 c = alloc_conversion (ck_identity);
547 c->type = type;
548 c->u.expr = expr;
550 return c;
553 /* Converting from EXPR to TYPE was ambiguous in the sense that there
554 were multiple user-defined conversions to accomplish the job.
555 Build a conversion that indicates that ambiguity. */
557 static conversion *
558 build_ambiguous_conv (tree type, tree expr)
560 conversion *c;
562 c = alloc_conversion (ck_ambig);
563 c->type = type;
564 c->u.expr = expr;
566 return c;
569 tree
570 strip_top_quals (tree t)
572 if (TREE_CODE (t) == ARRAY_TYPE)
573 return t;
574 return cp_build_qualified_type (t, 0);
577 /* Returns the standard conversion path (see [conv]) from type FROM to type
578 TO, if any. For proper handling of null pointer constants, you must
579 also pass the expression EXPR to convert from. If C_CAST_P is true,
580 this conversion is coming from a C-style cast. */
582 static conversion *
583 standard_conversion (tree to, tree from, tree expr, bool c_cast_p,
584 int flags)
586 enum tree_code fcode, tcode;
587 conversion *conv;
588 bool fromref = false;
590 to = non_reference (to);
591 if (TREE_CODE (from) == REFERENCE_TYPE)
593 fromref = true;
594 from = TREE_TYPE (from);
596 to = strip_top_quals (to);
597 from = strip_top_quals (from);
599 if ((TYPE_PTRFN_P (to) || TYPE_PTRMEMFUNC_P (to))
600 && expr && type_unknown_p (expr))
602 expr = instantiate_type (to, expr, tf_conv);
603 if (expr == error_mark_node)
604 return NULL;
605 from = TREE_TYPE (expr);
608 fcode = TREE_CODE (from);
609 tcode = TREE_CODE (to);
611 conv = build_identity_conv (from, expr);
612 if (fcode == FUNCTION_TYPE)
614 from = build_pointer_type (from);
615 fcode = TREE_CODE (from);
616 conv = build_conv (ck_lvalue, from, conv);
618 else if (fcode == ARRAY_TYPE)
620 from = build_pointer_type (TREE_TYPE (from));
621 fcode = TREE_CODE (from);
622 conv = build_conv (ck_lvalue, from, conv);
624 else if (fromref || (expr && lvalue_p (expr)))
625 conv = build_conv (ck_rvalue, from, conv);
627 /* Allow conversion between `__complex__' data types. */
628 if (tcode == COMPLEX_TYPE && fcode == COMPLEX_TYPE)
630 /* The standard conversion sequence to convert FROM to TO is
631 the standard conversion sequence to perform componentwise
632 conversion. */
633 conversion *part_conv = standard_conversion
634 (TREE_TYPE (to), TREE_TYPE (from), NULL_TREE, c_cast_p, flags);
636 if (part_conv)
638 conv = build_conv (part_conv->kind, to, conv);
639 conv->rank = part_conv->rank;
641 else
642 conv = NULL;
644 return conv;
647 if (same_type_p (from, to))
648 return conv;
650 if ((tcode == POINTER_TYPE || TYPE_PTR_TO_MEMBER_P (to))
651 && expr && null_ptr_cst_p (expr))
652 conv = build_conv (ck_std, to, conv);
653 else if ((tcode == INTEGER_TYPE && fcode == POINTER_TYPE)
654 || (tcode == POINTER_TYPE && fcode == INTEGER_TYPE))
656 /* For backwards brain damage compatibility, allow interconversion of
657 pointers and integers with a pedwarn. */
658 conv = build_conv (ck_std, to, conv);
659 conv->bad_p = true;
661 else if (tcode == ENUMERAL_TYPE && fcode == INTEGER_TYPE)
663 /* For backwards brain damage compatibility, allow interconversion of
664 enums and integers with a pedwarn. */
665 conv = build_conv (ck_std, to, conv);
666 conv->bad_p = true;
668 else if ((tcode == POINTER_TYPE && fcode == POINTER_TYPE)
669 || (TYPE_PTRMEM_P (to) && TYPE_PTRMEM_P (from)))
671 tree to_pointee;
672 tree from_pointee;
674 if (tcode == POINTER_TYPE
675 && same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (from),
676 TREE_TYPE (to)))
678 else if (VOID_TYPE_P (TREE_TYPE (to))
679 && !TYPE_PTRMEM_P (from)
680 && TREE_CODE (TREE_TYPE (from)) != FUNCTION_TYPE)
682 from = build_pointer_type
683 (cp_build_qualified_type (void_type_node,
684 cp_type_quals (TREE_TYPE (from))));
685 conv = build_conv (ck_ptr, from, conv);
687 else if (TYPE_PTRMEM_P (from))
689 tree fbase = TYPE_PTRMEM_CLASS_TYPE (from);
690 tree tbase = TYPE_PTRMEM_CLASS_TYPE (to);
692 if (DERIVED_FROM_P (fbase, tbase)
693 && (same_type_ignoring_top_level_qualifiers_p
694 (TYPE_PTRMEM_POINTED_TO_TYPE (from),
695 TYPE_PTRMEM_POINTED_TO_TYPE (to))))
697 from = build_ptrmem_type (tbase,
698 TYPE_PTRMEM_POINTED_TO_TYPE (from));
699 conv = build_conv (ck_pmem, from, conv);
701 else if (!same_type_p (fbase, tbase))
702 return NULL;
704 else if (IS_AGGR_TYPE (TREE_TYPE (from))
705 && IS_AGGR_TYPE (TREE_TYPE (to))
706 /* [conv.ptr]
708 An rvalue of type "pointer to cv D," where D is a
709 class type, can be converted to an rvalue of type
710 "pointer to cv B," where B is a base class (clause
711 _class.derived_) of D. If B is an inaccessible
712 (clause _class.access_) or ambiguous
713 (_class.member.lookup_) base class of D, a program
714 that necessitates this conversion is ill-formed.
715 Therefore, we use DERIVED_FROM_P, and do not check
716 access or uniqueness. */
717 && DERIVED_FROM_P (TREE_TYPE (to), TREE_TYPE (from)))
719 from =
720 cp_build_qualified_type (TREE_TYPE (to),
721 cp_type_quals (TREE_TYPE (from)));
722 from = build_pointer_type (from);
723 conv = build_conv (ck_ptr, from, conv);
724 conv->base_p = true;
727 if (tcode == POINTER_TYPE)
729 to_pointee = TREE_TYPE (to);
730 from_pointee = TREE_TYPE (from);
732 else
734 to_pointee = TYPE_PTRMEM_POINTED_TO_TYPE (to);
735 from_pointee = TYPE_PTRMEM_POINTED_TO_TYPE (from);
738 if (same_type_p (from, to))
739 /* OK */;
740 else if (c_cast_p && comp_ptr_ttypes_const (to, from))
741 /* In a C-style cast, we ignore CV-qualification because we
742 are allowed to perform a static_cast followed by a
743 const_cast. */
744 conv = build_conv (ck_qual, to, conv);
745 else if (!c_cast_p && comp_ptr_ttypes (to_pointee, from_pointee))
746 conv = build_conv (ck_qual, to, conv);
747 else if (expr && string_conv_p (to, expr, 0))
748 /* converting from string constant to char *. */
749 conv = build_conv (ck_qual, to, conv);
750 else if (ptr_reasonably_similar (to_pointee, from_pointee))
752 conv = build_conv (ck_ptr, to, conv);
753 conv->bad_p = true;
755 else
756 return NULL;
758 from = to;
760 else if (TYPE_PTRMEMFUNC_P (to) && TYPE_PTRMEMFUNC_P (from))
762 tree fromfn = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (from));
763 tree tofn = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (to));
764 tree fbase = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (fromfn)));
765 tree tbase = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (tofn)));
767 if (!DERIVED_FROM_P (fbase, tbase)
768 || !same_type_p (TREE_TYPE (fromfn), TREE_TYPE (tofn))
769 || !compparms (TREE_CHAIN (TYPE_ARG_TYPES (fromfn)),
770 TREE_CHAIN (TYPE_ARG_TYPES (tofn)))
771 || cp_type_quals (fbase) != cp_type_quals (tbase))
772 return 0;
774 from = cp_build_qualified_type (tbase, cp_type_quals (fbase));
775 from = build_method_type_directly (from,
776 TREE_TYPE (fromfn),
777 TREE_CHAIN (TYPE_ARG_TYPES (fromfn)));
778 from = build_ptrmemfunc_type (build_pointer_type (from));
779 conv = build_conv (ck_pmem, from, conv);
780 conv->base_p = true;
782 else if (tcode == BOOLEAN_TYPE)
784 /* [conv.bool]
786 An rvalue of arithmetic, enumeration, pointer, or pointer to
787 member type can be converted to an rvalue of type bool. */
788 if (ARITHMETIC_TYPE_P (from)
789 || fcode == ENUMERAL_TYPE
790 || fcode == POINTER_TYPE
791 || TYPE_PTR_TO_MEMBER_P (from))
793 conv = build_conv (ck_std, to, conv);
794 if (fcode == POINTER_TYPE
795 || TYPE_PTRMEM_P (from)
796 || (TYPE_PTRMEMFUNC_P (from)
797 && conv->rank < cr_pbool))
798 conv->rank = cr_pbool;
799 return conv;
802 return NULL;
804 /* We don't check for ENUMERAL_TYPE here because there are no standard
805 conversions to enum type. */
806 else if (tcode == INTEGER_TYPE || tcode == BOOLEAN_TYPE
807 || tcode == REAL_TYPE)
809 if (! (INTEGRAL_CODE_P (fcode) || fcode == REAL_TYPE))
810 return 0;
811 conv = build_conv (ck_std, to, conv);
813 /* Give this a better rank if it's a promotion. */
814 if (same_type_p (to, type_promotes_to (from))
815 && conv->u.next->rank <= cr_promotion)
816 conv->rank = cr_promotion;
818 else if (fcode == VECTOR_TYPE && tcode == VECTOR_TYPE
819 && vector_types_convertible_p (from, to))
820 return build_conv (ck_std, to, conv);
821 else if (!(flags & LOOKUP_CONSTRUCTOR_CALLABLE)
822 && IS_AGGR_TYPE (to) && IS_AGGR_TYPE (from)
823 && is_properly_derived_from (from, to))
825 if (conv->kind == ck_rvalue)
826 conv = conv->u.next;
827 conv = build_conv (ck_base, to, conv);
828 /* The derived-to-base conversion indicates the initialization
829 of a parameter with base type from an object of a derived
830 type. A temporary object is created to hold the result of
831 the conversion. */
832 conv->need_temporary_p = true;
834 else
835 return NULL;
837 return conv;
840 /* Returns nonzero if T1 is reference-related to T2. */
842 static bool
843 reference_related_p (tree t1, tree t2)
845 t1 = TYPE_MAIN_VARIANT (t1);
846 t2 = TYPE_MAIN_VARIANT (t2);
848 /* [dcl.init.ref]
850 Given types "cv1 T1" and "cv2 T2," "cv1 T1" is reference-related
851 to "cv2 T2" if T1 is the same type as T2, or T1 is a base class
852 of T2. */
853 return (same_type_p (t1, t2)
854 || (CLASS_TYPE_P (t1) && CLASS_TYPE_P (t2)
855 && DERIVED_FROM_P (t1, t2)));
858 /* Returns nonzero if T1 is reference-compatible with T2. */
860 static bool
861 reference_compatible_p (tree t1, tree t2)
863 /* [dcl.init.ref]
865 "cv1 T1" is reference compatible with "cv2 T2" if T1 is
866 reference-related to T2 and cv1 is the same cv-qualification as,
867 or greater cv-qualification than, cv2. */
868 return (reference_related_p (t1, t2)
869 && at_least_as_qualified_p (t1, t2));
872 /* Determine whether or not the EXPR (of class type S) can be
873 converted to T as in [over.match.ref]. */
875 static conversion *
876 convert_class_to_reference (tree t, tree s, tree expr)
878 tree conversions;
879 tree arglist;
880 conversion *conv;
881 tree reference_type;
882 struct z_candidate *candidates;
883 struct z_candidate *cand;
884 bool any_viable_p;
886 conversions = lookup_conversions (s);
887 if (!conversions)
888 return NULL;
890 /* [over.match.ref]
892 Assuming that "cv1 T" is the underlying type of the reference
893 being initialized, and "cv S" is the type of the initializer
894 expression, with S a class type, the candidate functions are
895 selected as follows:
897 --The conversion functions of S and its base classes are
898 considered. Those that are not hidden within S and yield type
899 "reference to cv2 T2", where "cv1 T" is reference-compatible
900 (_dcl.init.ref_) with "cv2 T2", are candidate functions.
902 The argument list has one argument, which is the initializer
903 expression. */
905 candidates = 0;
907 /* Conceptually, we should take the address of EXPR and put it in
908 the argument list. Unfortunately, however, that can result in
909 error messages, which we should not issue now because we are just
910 trying to find a conversion operator. Therefore, we use NULL,
911 cast to the appropriate type. */
912 arglist = build_int_cst (build_pointer_type (s), 0);
913 arglist = build_tree_list (NULL_TREE, arglist);
915 reference_type = build_reference_type (t);
917 while (conversions)
919 tree fns = TREE_VALUE (conversions);
921 for (; fns; fns = OVL_NEXT (fns))
923 tree f = OVL_CURRENT (fns);
924 tree t2 = TREE_TYPE (TREE_TYPE (f));
926 cand = NULL;
928 /* If this is a template function, try to get an exact
929 match. */
930 if (TREE_CODE (f) == TEMPLATE_DECL)
932 cand = add_template_candidate (&candidates,
933 f, s,
934 NULL_TREE,
935 arglist,
936 reference_type,
937 TYPE_BINFO (s),
938 TREE_PURPOSE (conversions),
939 LOOKUP_NORMAL,
940 DEDUCE_CONV);
942 if (cand)
944 /* Now, see if the conversion function really returns
945 an lvalue of the appropriate type. From the
946 point of view of unification, simply returning an
947 rvalue of the right type is good enough. */
948 f = cand->fn;
949 t2 = TREE_TYPE (TREE_TYPE (f));
950 if (TREE_CODE (t2) != REFERENCE_TYPE
951 || !reference_compatible_p (t, TREE_TYPE (t2)))
953 candidates = candidates->next;
954 cand = NULL;
958 else if (TREE_CODE (t2) == REFERENCE_TYPE
959 && reference_compatible_p (t, TREE_TYPE (t2)))
960 cand = add_function_candidate (&candidates, f, s, arglist,
961 TYPE_BINFO (s),
962 TREE_PURPOSE (conversions),
963 LOOKUP_NORMAL);
965 if (cand)
967 conversion *identity_conv;
968 /* Build a standard conversion sequence indicating the
969 binding from the reference type returned by the
970 function to the desired REFERENCE_TYPE. */
971 identity_conv
972 = build_identity_conv (TREE_TYPE (TREE_TYPE
973 (TREE_TYPE (cand->fn))),
974 NULL_TREE);
975 cand->second_conv
976 = (direct_reference_binding
977 (reference_type, identity_conv));
978 cand->second_conv->bad_p |= cand->convs[0]->bad_p;
981 conversions = TREE_CHAIN (conversions);
984 candidates = splice_viable (candidates, pedantic, &any_viable_p);
985 /* If none of the conversion functions worked out, let our caller
986 know. */
987 if (!any_viable_p)
988 return NULL;
990 cand = tourney (candidates);
991 if (!cand)
992 return NULL;
994 /* Now that we know that this is the function we're going to use fix
995 the dummy first argument. */
996 cand->args = tree_cons (NULL_TREE,
997 build_this (expr),
998 TREE_CHAIN (cand->args));
1000 /* Build a user-defined conversion sequence representing the
1001 conversion. */
1002 conv = build_conv (ck_user,
1003 TREE_TYPE (TREE_TYPE (cand->fn)),
1004 build_identity_conv (TREE_TYPE (expr), expr));
1005 conv->cand = cand;
1007 /* Merge it with the standard conversion sequence from the
1008 conversion function's return type to the desired type. */
1009 cand->second_conv = merge_conversion_sequences (conv, cand->second_conv);
1011 if (cand->viable == -1)
1012 conv->bad_p = true;
1014 return cand->second_conv;
1017 /* A reference of the indicated TYPE is being bound directly to the
1018 expression represented by the implicit conversion sequence CONV.
1019 Return a conversion sequence for this binding. */
1021 static conversion *
1022 direct_reference_binding (tree type, conversion *conv)
1024 tree t;
1026 gcc_assert (TREE_CODE (type) == REFERENCE_TYPE);
1027 gcc_assert (TREE_CODE (conv->type) != REFERENCE_TYPE);
1029 t = TREE_TYPE (type);
1031 /* [over.ics.rank]
1033 When a parameter of reference type binds directly
1034 (_dcl.init.ref_) to an argument expression, the implicit
1035 conversion sequence is the identity conversion, unless the
1036 argument expression has a type that is a derived class of the
1037 parameter type, in which case the implicit conversion sequence is
1038 a derived-to-base Conversion.
1040 If the parameter binds directly to the result of applying a
1041 conversion function to the argument expression, the implicit
1042 conversion sequence is a user-defined conversion sequence
1043 (_over.ics.user_), with the second standard conversion sequence
1044 either an identity conversion or, if the conversion function
1045 returns an entity of a type that is a derived class of the
1046 parameter type, a derived-to-base conversion. */
1047 if (!same_type_ignoring_top_level_qualifiers_p (t, conv->type))
1049 /* Represent the derived-to-base conversion. */
1050 conv = build_conv (ck_base, t, conv);
1051 /* We will actually be binding to the base-class subobject in
1052 the derived class, so we mark this conversion appropriately.
1053 That way, convert_like knows not to generate a temporary. */
1054 conv->need_temporary_p = false;
1056 return build_conv (ck_ref_bind, type, conv);
1059 /* Returns the conversion path from type FROM to reference type TO for
1060 purposes of reference binding. For lvalue binding, either pass a
1061 reference type to FROM or an lvalue expression to EXPR. If the
1062 reference will be bound to a temporary, NEED_TEMPORARY_P is set for
1063 the conversion returned. If C_CAST_P is true, this
1064 conversion is coming from a C-style cast. */
1066 static conversion *
1067 reference_binding (tree rto, tree rfrom, tree expr, bool c_cast_p, int flags)
1069 conversion *conv = NULL;
1070 tree to = TREE_TYPE (rto);
1071 tree from = rfrom;
1072 bool related_p;
1073 bool compatible_p;
1074 cp_lvalue_kind lvalue_p = clk_none;
1076 if (TREE_CODE (to) == FUNCTION_TYPE && expr && type_unknown_p (expr))
1078 expr = instantiate_type (to, expr, tf_none);
1079 if (expr == error_mark_node)
1080 return NULL;
1081 from = TREE_TYPE (expr);
1084 if (TREE_CODE (from) == REFERENCE_TYPE)
1086 /* Anything with reference type is an lvalue. */
1087 lvalue_p = clk_ordinary;
1088 from = TREE_TYPE (from);
1090 else if (expr)
1091 lvalue_p = real_lvalue_p (expr);
1093 /* Figure out whether or not the types are reference-related and
1094 reference compatible. We have do do this after stripping
1095 references from FROM. */
1096 related_p = reference_related_p (to, from);
1097 /* If this is a C cast, first convert to an appropriately qualified
1098 type, so that we can later do a const_cast to the desired type. */
1099 if (related_p && c_cast_p
1100 && !at_least_as_qualified_p (to, from))
1101 to = build_qualified_type (to, cp_type_quals (from));
1102 compatible_p = reference_compatible_p (to, from);
1104 if (lvalue_p && compatible_p)
1106 /* [dcl.init.ref]
1108 If the initializer expression
1110 -- is an lvalue (but not an lvalue for a bit-field), and "cv1 T1"
1111 is reference-compatible with "cv2 T2,"
1113 the reference is bound directly to the initializer expression
1114 lvalue. */
1115 conv = build_identity_conv (from, expr);
1116 conv = direct_reference_binding (rto, conv);
1117 if ((lvalue_p & clk_bitfield) != 0
1118 || ((lvalue_p & clk_packed) != 0 && !TYPE_PACKED (to)))
1119 /* For the purposes of overload resolution, we ignore the fact
1120 this expression is a bitfield or packed field. (In particular,
1121 [over.ics.ref] says specifically that a function with a
1122 non-const reference parameter is viable even if the
1123 argument is a bitfield.)
1125 However, when we actually call the function we must create
1126 a temporary to which to bind the reference. If the
1127 reference is volatile, or isn't const, then we cannot make
1128 a temporary, so we just issue an error when the conversion
1129 actually occurs. */
1130 conv->need_temporary_p = true;
1132 return conv;
1134 else if (CLASS_TYPE_P (from) && !(flags & LOOKUP_NO_CONVERSION))
1136 /* [dcl.init.ref]
1138 If the initializer expression
1140 -- has a class type (i.e., T2 is a class type) can be
1141 implicitly converted to an lvalue of type "cv3 T3," where
1142 "cv1 T1" is reference-compatible with "cv3 T3". (this
1143 conversion is selected by enumerating the applicable
1144 conversion functions (_over.match.ref_) and choosing the
1145 best one through overload resolution. (_over.match_).
1147 the reference is bound to the lvalue result of the conversion
1148 in the second case. */
1149 conv = convert_class_to_reference (to, from, expr);
1150 if (conv)
1151 return conv;
1154 /* From this point on, we conceptually need temporaries, even if we
1155 elide them. Only the cases above are "direct bindings". */
1156 if (flags & LOOKUP_NO_TEMP_BIND)
1157 return NULL;
1159 /* [over.ics.rank]
1161 When a parameter of reference type is not bound directly to an
1162 argument expression, the conversion sequence is the one required
1163 to convert the argument expression to the underlying type of the
1164 reference according to _over.best.ics_. Conceptually, this
1165 conversion sequence corresponds to copy-initializing a temporary
1166 of the underlying type with the argument expression. Any
1167 difference in top-level cv-qualification is subsumed by the
1168 initialization itself and does not constitute a conversion. */
1170 /* [dcl.init.ref]
1172 Otherwise, the reference shall be to a non-volatile const type. */
1173 if (!CP_TYPE_CONST_NON_VOLATILE_P (to))
1174 return NULL;
1176 /* [dcl.init.ref]
1178 If the initializer expression is an rvalue, with T2 a class type,
1179 and "cv1 T1" is reference-compatible with "cv2 T2", the reference
1180 is bound in one of the following ways:
1182 -- The reference is bound to the object represented by the rvalue
1183 or to a sub-object within that object.
1185 -- ...
1187 We use the first alternative. The implicit conversion sequence
1188 is supposed to be same as we would obtain by generating a
1189 temporary. Fortunately, if the types are reference compatible,
1190 then this is either an identity conversion or the derived-to-base
1191 conversion, just as for direct binding. */
1192 if (CLASS_TYPE_P (from) && compatible_p)
1194 conv = build_identity_conv (from, expr);
1195 conv = direct_reference_binding (rto, conv);
1196 if (!(flags & LOOKUP_CONSTRUCTOR_CALLABLE))
1197 conv->u.next->check_copy_constructor_p = true;
1198 return conv;
1201 /* [dcl.init.ref]
1203 Otherwise, a temporary of type "cv1 T1" is created and
1204 initialized from the initializer expression using the rules for a
1205 non-reference copy initialization. If T1 is reference-related to
1206 T2, cv1 must be the same cv-qualification as, or greater
1207 cv-qualification than, cv2; otherwise, the program is ill-formed. */
1208 if (related_p && !at_least_as_qualified_p (to, from))
1209 return NULL;
1211 conv = implicit_conversion (to, from, expr, c_cast_p,
1212 flags);
1213 if (!conv)
1214 return NULL;
1216 conv = build_conv (ck_ref_bind, rto, conv);
1217 /* This reference binding, unlike those above, requires the
1218 creation of a temporary. */
1219 conv->need_temporary_p = true;
1221 return conv;
1224 /* Returns the implicit conversion sequence (see [over.ics]) from type
1225 FROM to type TO. The optional expression EXPR may affect the
1226 conversion. FLAGS are the usual overloading flags. Only
1227 LOOKUP_NO_CONVERSION is significant. If C_CAST_P is true, this
1228 conversion is coming from a C-style cast. */
1230 static conversion *
1231 implicit_conversion (tree to, tree from, tree expr, bool c_cast_p,
1232 int flags)
1234 conversion *conv;
1236 if (from == error_mark_node || to == error_mark_node
1237 || expr == error_mark_node)
1238 return NULL;
1240 if (TREE_CODE (to) == REFERENCE_TYPE)
1241 conv = reference_binding (to, from, expr, c_cast_p, flags);
1242 else
1243 conv = standard_conversion (to, from, expr, c_cast_p, flags);
1245 if (conv)
1246 return conv;
1248 if (expr != NULL_TREE
1249 && (IS_AGGR_TYPE (from)
1250 || IS_AGGR_TYPE (to))
1251 && (flags & LOOKUP_NO_CONVERSION) == 0)
1253 struct z_candidate *cand;
1255 cand = build_user_type_conversion_1
1256 (to, expr, LOOKUP_ONLYCONVERTING);
1257 if (cand)
1258 conv = cand->second_conv;
1260 /* We used to try to bind a reference to a temporary here, but that
1261 is now handled by the recursive call to this function at the end
1262 of reference_binding. */
1263 return conv;
1266 return NULL;
1269 /* Add a new entry to the list of candidates. Used by the add_*_candidate
1270 functions. */
1272 static struct z_candidate *
1273 add_candidate (struct z_candidate **candidates,
1274 tree fn, tree args,
1275 size_t num_convs, conversion **convs,
1276 tree access_path, tree conversion_path,
1277 int viable)
1279 struct z_candidate *cand
1280 = conversion_obstack_alloc (sizeof (struct z_candidate));
1282 cand->fn = fn;
1283 cand->args = args;
1284 cand->convs = convs;
1285 cand->num_convs = num_convs;
1286 cand->access_path = access_path;
1287 cand->conversion_path = conversion_path;
1288 cand->viable = viable;
1289 cand->next = *candidates;
1290 *candidates = cand;
1292 return cand;
1295 /* Create an overload candidate for the function or method FN called with
1296 the argument list ARGLIST and add it to CANDIDATES. FLAGS is passed on
1297 to implicit_conversion.
1299 CTYPE, if non-NULL, is the type we want to pretend this function
1300 comes from for purposes of overload resolution. */
1302 static struct z_candidate *
1303 add_function_candidate (struct z_candidate **candidates,
1304 tree fn, tree ctype, tree arglist,
1305 tree access_path, tree conversion_path,
1306 int flags)
1308 tree parmlist = TYPE_ARG_TYPES (TREE_TYPE (fn));
1309 int i, len;
1310 conversion **convs;
1311 tree parmnode, argnode;
1312 tree orig_arglist;
1313 int viable = 1;
1315 /* At this point we should not see any functions which haven't been
1316 explicitly declared, except for friend functions which will have
1317 been found using argument dependent lookup. */
1318 gcc_assert (!DECL_ANTICIPATED (fn) || DECL_HIDDEN_FRIEND_P (fn));
1320 /* The `this', `in_chrg' and VTT arguments to constructors are not
1321 considered in overload resolution. */
1322 if (DECL_CONSTRUCTOR_P (fn))
1324 parmlist = skip_artificial_parms_for (fn, parmlist);
1325 orig_arglist = arglist;
1326 arglist = skip_artificial_parms_for (fn, arglist);
1328 else
1329 orig_arglist = arglist;
1331 len = list_length (arglist);
1332 convs = alloc_conversions (len);
1334 /* 13.3.2 - Viable functions [over.match.viable]
1335 First, to be a viable function, a candidate function shall have enough
1336 parameters to agree in number with the arguments in the list.
1338 We need to check this first; otherwise, checking the ICSes might cause
1339 us to produce an ill-formed template instantiation. */
1341 parmnode = parmlist;
1342 for (i = 0; i < len; ++i)
1344 if (parmnode == NULL_TREE || parmnode == void_list_node)
1345 break;
1346 parmnode = TREE_CHAIN (parmnode);
1349 if (i < len && parmnode)
1350 viable = 0;
1352 /* Make sure there are default args for the rest of the parms. */
1353 else if (!sufficient_parms_p (parmnode))
1354 viable = 0;
1356 if (! viable)
1357 goto out;
1359 /* Second, for F to be a viable function, there shall exist for each
1360 argument an implicit conversion sequence that converts that argument
1361 to the corresponding parameter of F. */
1363 parmnode = parmlist;
1364 argnode = arglist;
1366 for (i = 0; i < len; ++i)
1368 tree arg = TREE_VALUE (argnode);
1369 tree argtype = lvalue_type (arg);
1370 conversion *t;
1371 int is_this;
1373 if (parmnode == void_list_node)
1374 break;
1376 is_this = (i == 0 && DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
1377 && ! DECL_CONSTRUCTOR_P (fn));
1379 if (parmnode)
1381 tree parmtype = TREE_VALUE (parmnode);
1383 /* The type of the implicit object parameter ('this') for
1384 overload resolution is not always the same as for the
1385 function itself; conversion functions are considered to
1386 be members of the class being converted, and functions
1387 introduced by a using-declaration are considered to be
1388 members of the class that uses them.
1390 Since build_over_call ignores the ICS for the `this'
1391 parameter, we can just change the parm type. */
1392 if (ctype && is_this)
1394 parmtype
1395 = build_qualified_type (ctype,
1396 TYPE_QUALS (TREE_TYPE (parmtype)));
1397 parmtype = build_pointer_type (parmtype);
1400 t = implicit_conversion (parmtype, argtype, arg,
1401 /*c_cast_p=*/false, flags);
1403 else
1405 t = build_identity_conv (argtype, arg);
1406 t->ellipsis_p = true;
1409 if (t && is_this)
1410 t->this_p = true;
1412 convs[i] = t;
1413 if (! t)
1415 viable = 0;
1416 break;
1419 if (t->bad_p)
1420 viable = -1;
1422 if (parmnode)
1423 parmnode = TREE_CHAIN (parmnode);
1424 argnode = TREE_CHAIN (argnode);
1427 out:
1428 return add_candidate (candidates, fn, orig_arglist, len, convs,
1429 access_path, conversion_path, viable);
1432 /* Create an overload candidate for the conversion function FN which will
1433 be invoked for expression OBJ, producing a pointer-to-function which
1434 will in turn be called with the argument list ARGLIST, and add it to
1435 CANDIDATES. FLAGS is passed on to implicit_conversion.
1437 Actually, we don't really care about FN; we care about the type it
1438 converts to. There may be multiple conversion functions that will
1439 convert to that type, and we rely on build_user_type_conversion_1 to
1440 choose the best one; so when we create our candidate, we record the type
1441 instead of the function. */
1443 static struct z_candidate *
1444 add_conv_candidate (struct z_candidate **candidates, tree fn, tree obj,
1445 tree arglist, tree access_path, tree conversion_path)
1447 tree totype = TREE_TYPE (TREE_TYPE (fn));
1448 int i, len, viable, flags;
1449 tree parmlist, parmnode, argnode;
1450 conversion **convs;
1452 for (parmlist = totype; TREE_CODE (parmlist) != FUNCTION_TYPE; )
1453 parmlist = TREE_TYPE (parmlist);
1454 parmlist = TYPE_ARG_TYPES (parmlist);
1456 len = list_length (arglist) + 1;
1457 convs = alloc_conversions (len);
1458 parmnode = parmlist;
1459 argnode = arglist;
1460 viable = 1;
1461 flags = LOOKUP_NORMAL;
1463 /* Don't bother looking up the same type twice. */
1464 if (*candidates && (*candidates)->fn == totype)
1465 return NULL;
1467 for (i = 0; i < len; ++i)
1469 tree arg = i == 0 ? obj : TREE_VALUE (argnode);
1470 tree argtype = lvalue_type (arg);
1471 conversion *t;
1473 if (i == 0)
1474 t = implicit_conversion (totype, argtype, arg, /*c_cast_p=*/false,
1475 flags);
1476 else if (parmnode == void_list_node)
1477 break;
1478 else if (parmnode)
1479 t = implicit_conversion (TREE_VALUE (parmnode), argtype, arg,
1480 /*c_cast_p=*/false, flags);
1481 else
1483 t = build_identity_conv (argtype, arg);
1484 t->ellipsis_p = true;
1487 convs[i] = t;
1488 if (! t)
1489 break;
1491 if (t->bad_p)
1492 viable = -1;
1494 if (i == 0)
1495 continue;
1497 if (parmnode)
1498 parmnode = TREE_CHAIN (parmnode);
1499 argnode = TREE_CHAIN (argnode);
1502 if (i < len)
1503 viable = 0;
1505 if (!sufficient_parms_p (parmnode))
1506 viable = 0;
1508 return add_candidate (candidates, totype, arglist, len, convs,
1509 access_path, conversion_path, viable);
1512 static void
1513 build_builtin_candidate (struct z_candidate **candidates, tree fnname,
1514 tree type1, tree type2, tree *args, tree *argtypes,
1515 int flags)
1517 conversion *t;
1518 conversion **convs;
1519 size_t num_convs;
1520 int viable = 1, i;
1521 tree types[2];
1523 types[0] = type1;
1524 types[1] = type2;
1526 num_convs = args[2] ? 3 : (args[1] ? 2 : 1);
1527 convs = alloc_conversions (num_convs);
1529 for (i = 0; i < 2; ++i)
1531 if (! args[i])
1532 break;
1534 t = implicit_conversion (types[i], argtypes[i], args[i],
1535 /*c_cast_p=*/false, flags);
1536 if (! t)
1538 viable = 0;
1539 /* We need something for printing the candidate. */
1540 t = build_identity_conv (types[i], NULL_TREE);
1542 else if (t->bad_p)
1543 viable = 0;
1544 convs[i] = t;
1547 /* For COND_EXPR we rearranged the arguments; undo that now. */
1548 if (args[2])
1550 convs[2] = convs[1];
1551 convs[1] = convs[0];
1552 t = implicit_conversion (boolean_type_node, argtypes[2], args[2],
1553 /*c_cast_p=*/false, flags);
1554 if (t)
1555 convs[0] = t;
1556 else
1557 viable = 0;
1560 add_candidate (candidates, fnname, /*args=*/NULL_TREE,
1561 num_convs, convs,
1562 /*access_path=*/NULL_TREE,
1563 /*conversion_path=*/NULL_TREE,
1564 viable);
1567 static bool
1568 is_complete (tree t)
1570 return COMPLETE_TYPE_P (complete_type (t));
1573 /* Returns nonzero if TYPE is a promoted arithmetic type. */
1575 static bool
1576 promoted_arithmetic_type_p (tree type)
1578 /* [over.built]
1580 In this section, the term promoted integral type is used to refer
1581 to those integral types which are preserved by integral promotion
1582 (including e.g. int and long but excluding e.g. char).
1583 Similarly, the term promoted arithmetic type refers to promoted
1584 integral types plus floating types. */
1585 return ((INTEGRAL_TYPE_P (type)
1586 && same_type_p (type_promotes_to (type), type))
1587 || TREE_CODE (type) == REAL_TYPE);
1590 /* Create any builtin operator overload candidates for the operator in
1591 question given the converted operand types TYPE1 and TYPE2. The other
1592 args are passed through from add_builtin_candidates to
1593 build_builtin_candidate.
1595 TYPE1 and TYPE2 may not be permissible, and we must filter them.
1596 If CODE is requires candidates operands of the same type of the kind
1597 of which TYPE1 and TYPE2 are, we add both candidates
1598 CODE (TYPE1, TYPE1) and CODE (TYPE2, TYPE2). */
1600 static void
1601 add_builtin_candidate (struct z_candidate **candidates, enum tree_code code,
1602 enum tree_code code2, tree fnname, tree type1,
1603 tree type2, tree *args, tree *argtypes, int flags)
1605 switch (code)
1607 case POSTINCREMENT_EXPR:
1608 case POSTDECREMENT_EXPR:
1609 args[1] = integer_zero_node;
1610 type2 = integer_type_node;
1611 break;
1612 default:
1613 break;
1616 switch (code)
1619 /* 4 For every pair T, VQ), where T is an arithmetic or enumeration type,
1620 and VQ is either volatile or empty, there exist candidate operator
1621 functions of the form
1622 VQ T& operator++(VQ T&);
1623 T operator++(VQ T&, int);
1624 5 For every pair T, VQ), where T is an enumeration type or an arithmetic
1625 type other than bool, and VQ is either volatile or empty, there exist
1626 candidate operator functions of the form
1627 VQ T& operator--(VQ T&);
1628 T operator--(VQ T&, int);
1629 6 For every pair T, VQ), where T is a cv-qualified or cv-unqualified
1630 complete object type, and VQ is either volatile or empty, there exist
1631 candidate operator functions of the form
1632 T*VQ& operator++(T*VQ&);
1633 T*VQ& operator--(T*VQ&);
1634 T* operator++(T*VQ&, int);
1635 T* operator--(T*VQ&, int); */
1637 case POSTDECREMENT_EXPR:
1638 case PREDECREMENT_EXPR:
1639 if (TREE_CODE (type1) == BOOLEAN_TYPE)
1640 return;
1641 case POSTINCREMENT_EXPR:
1642 case PREINCREMENT_EXPR:
1643 if (ARITHMETIC_TYPE_P (type1) || TYPE_PTROB_P (type1))
1645 type1 = build_reference_type (type1);
1646 break;
1648 return;
1650 /* 7 For every cv-qualified or cv-unqualified complete object type T, there
1651 exist candidate operator functions of the form
1653 T& operator*(T*);
1655 8 For every function type T, there exist candidate operator functions of
1656 the form
1657 T& operator*(T*); */
1659 case INDIRECT_REF:
1660 if (TREE_CODE (type1) == POINTER_TYPE
1661 && (TYPE_PTROB_P (type1)
1662 || TREE_CODE (TREE_TYPE (type1)) == FUNCTION_TYPE))
1663 break;
1664 return;
1666 /* 9 For every type T, there exist candidate operator functions of the form
1667 T* operator+(T*);
1669 10For every promoted arithmetic type T, there exist candidate operator
1670 functions of the form
1671 T operator+(T);
1672 T operator-(T); */
1674 case UNARY_PLUS_EXPR: /* unary + */
1675 if (TREE_CODE (type1) == POINTER_TYPE)
1676 break;
1677 case NEGATE_EXPR:
1678 if (ARITHMETIC_TYPE_P (type1))
1679 break;
1680 return;
1682 /* 11For every promoted integral type T, there exist candidate operator
1683 functions of the form
1684 T operator~(T); */
1686 case BIT_NOT_EXPR:
1687 if (INTEGRAL_TYPE_P (type1))
1688 break;
1689 return;
1691 /* 12For every quintuple C1, C2, T, CV1, CV2), where C2 is a class type, C1
1692 is the same type as C2 or is a derived class of C2, T is a complete
1693 object type or a function type, and CV1 and CV2 are cv-qualifier-seqs,
1694 there exist candidate operator functions of the form
1695 CV12 T& operator->*(CV1 C1*, CV2 T C2::*);
1696 where CV12 is the union of CV1 and CV2. */
1698 case MEMBER_REF:
1699 if (TREE_CODE (type1) == POINTER_TYPE
1700 && TYPE_PTR_TO_MEMBER_P (type2))
1702 tree c1 = TREE_TYPE (type1);
1703 tree c2 = TYPE_PTRMEM_CLASS_TYPE (type2);
1705 if (IS_AGGR_TYPE (c1) && DERIVED_FROM_P (c2, c1)
1706 && (TYPE_PTRMEMFUNC_P (type2)
1707 || is_complete (TYPE_PTRMEM_POINTED_TO_TYPE (type2))))
1708 break;
1710 return;
1712 /* 13For every pair of promoted arithmetic types L and R, there exist can-
1713 didate operator functions of the form
1714 LR operator*(L, R);
1715 LR operator/(L, R);
1716 LR operator+(L, R);
1717 LR operator-(L, R);
1718 bool operator<(L, R);
1719 bool operator>(L, R);
1720 bool operator<=(L, R);
1721 bool operator>=(L, R);
1722 bool operator==(L, R);
1723 bool operator!=(L, R);
1724 where LR is the result of the usual arithmetic conversions between
1725 types L and R.
1727 14For every pair of types T and I, where T is a cv-qualified or cv-
1728 unqualified complete object type and I is a promoted integral type,
1729 there exist candidate operator functions of the form
1730 T* operator+(T*, I);
1731 T& operator[](T*, I);
1732 T* operator-(T*, I);
1733 T* operator+(I, T*);
1734 T& operator[](I, T*);
1736 15For every T, where T is a pointer to complete object type, there exist
1737 candidate operator functions of the form112)
1738 ptrdiff_t operator-(T, T);
1740 16For every pointer or enumeration type T, there exist candidate operator
1741 functions of the form
1742 bool operator<(T, T);
1743 bool operator>(T, T);
1744 bool operator<=(T, T);
1745 bool operator>=(T, T);
1746 bool operator==(T, T);
1747 bool operator!=(T, T);
1749 17For every pointer to member type T, there exist candidate operator
1750 functions of the form
1751 bool operator==(T, T);
1752 bool operator!=(T, T); */
1754 case MINUS_EXPR:
1755 if (TYPE_PTROB_P (type1) && TYPE_PTROB_P (type2))
1756 break;
1757 if (TYPE_PTROB_P (type1) && INTEGRAL_TYPE_P (type2))
1759 type2 = ptrdiff_type_node;
1760 break;
1762 case MULT_EXPR:
1763 case TRUNC_DIV_EXPR:
1764 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
1765 break;
1766 return;
1768 case EQ_EXPR:
1769 case NE_EXPR:
1770 if ((TYPE_PTRMEMFUNC_P (type1) && TYPE_PTRMEMFUNC_P (type2))
1771 || (TYPE_PTRMEM_P (type1) && TYPE_PTRMEM_P (type2)))
1772 break;
1773 if (TYPE_PTR_TO_MEMBER_P (type1) && null_ptr_cst_p (args[1]))
1775 type2 = type1;
1776 break;
1778 if (TYPE_PTR_TO_MEMBER_P (type2) && null_ptr_cst_p (args[0]))
1780 type1 = type2;
1781 break;
1783 /* Fall through. */
1784 case LT_EXPR:
1785 case GT_EXPR:
1786 case LE_EXPR:
1787 case GE_EXPR:
1788 case MAX_EXPR:
1789 case MIN_EXPR:
1790 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
1791 break;
1792 if (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
1793 break;
1794 if (TREE_CODE (type1) == ENUMERAL_TYPE
1795 && TREE_CODE (type2) == ENUMERAL_TYPE)
1796 break;
1797 if (TYPE_PTR_P (type1)
1798 && null_ptr_cst_p (args[1])
1799 && !uses_template_parms (type1))
1801 type2 = type1;
1802 break;
1804 if (null_ptr_cst_p (args[0])
1805 && TYPE_PTR_P (type2)
1806 && !uses_template_parms (type2))
1808 type1 = type2;
1809 break;
1811 return;
1813 case PLUS_EXPR:
1814 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
1815 break;
1816 case ARRAY_REF:
1817 if (INTEGRAL_TYPE_P (type1) && TYPE_PTROB_P (type2))
1819 type1 = ptrdiff_type_node;
1820 break;
1822 if (TYPE_PTROB_P (type1) && INTEGRAL_TYPE_P (type2))
1824 type2 = ptrdiff_type_node;
1825 break;
1827 return;
1829 /* 18For every pair of promoted integral types L and R, there exist candi-
1830 date operator functions of the form
1831 LR operator%(L, R);
1832 LR operator&(L, R);
1833 LR operator^(L, R);
1834 LR operator|(L, R);
1835 L operator<<(L, R);
1836 L operator>>(L, R);
1837 where LR is the result of the usual arithmetic conversions between
1838 types L and R. */
1840 case TRUNC_MOD_EXPR:
1841 case BIT_AND_EXPR:
1842 case BIT_IOR_EXPR:
1843 case BIT_XOR_EXPR:
1844 case LSHIFT_EXPR:
1845 case RSHIFT_EXPR:
1846 if (INTEGRAL_TYPE_P (type1) && INTEGRAL_TYPE_P (type2))
1847 break;
1848 return;
1850 /* 19For every triple L, VQ, R), where L is an arithmetic or enumeration
1851 type, VQ is either volatile or empty, and R is a promoted arithmetic
1852 type, there exist candidate operator functions of the form
1853 VQ L& operator=(VQ L&, R);
1854 VQ L& operator*=(VQ L&, R);
1855 VQ L& operator/=(VQ L&, R);
1856 VQ L& operator+=(VQ L&, R);
1857 VQ L& operator-=(VQ L&, R);
1859 20For every pair T, VQ), where T is any type and VQ is either volatile
1860 or empty, there exist candidate operator functions of the form
1861 T*VQ& operator=(T*VQ&, T*);
1863 21For every pair T, VQ), where T is a pointer to member type and VQ is
1864 either volatile or empty, there exist candidate operator functions of
1865 the form
1866 VQ T& operator=(VQ T&, T);
1868 22For every triple T, VQ, I), where T is a cv-qualified or cv-
1869 unqualified complete object type, VQ is either volatile or empty, and
1870 I is a promoted integral type, there exist candidate operator func-
1871 tions of the form
1872 T*VQ& operator+=(T*VQ&, I);
1873 T*VQ& operator-=(T*VQ&, I);
1875 23For every triple L, VQ, R), where L is an integral or enumeration
1876 type, VQ is either volatile or empty, and R is a promoted integral
1877 type, there exist candidate operator functions of the form
1879 VQ L& operator%=(VQ L&, R);
1880 VQ L& operator<<=(VQ L&, R);
1881 VQ L& operator>>=(VQ L&, R);
1882 VQ L& operator&=(VQ L&, R);
1883 VQ L& operator^=(VQ L&, R);
1884 VQ L& operator|=(VQ L&, R); */
1886 case MODIFY_EXPR:
1887 switch (code2)
1889 case PLUS_EXPR:
1890 case MINUS_EXPR:
1891 if (TYPE_PTROB_P (type1) && INTEGRAL_TYPE_P (type2))
1893 type2 = ptrdiff_type_node;
1894 break;
1896 case MULT_EXPR:
1897 case TRUNC_DIV_EXPR:
1898 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
1899 break;
1900 return;
1902 case TRUNC_MOD_EXPR:
1903 case BIT_AND_EXPR:
1904 case BIT_IOR_EXPR:
1905 case BIT_XOR_EXPR:
1906 case LSHIFT_EXPR:
1907 case RSHIFT_EXPR:
1908 if (INTEGRAL_TYPE_P (type1) && INTEGRAL_TYPE_P (type2))
1909 break;
1910 return;
1912 case NOP_EXPR:
1913 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
1914 break;
1915 if ((TYPE_PTRMEMFUNC_P (type1) && TYPE_PTRMEMFUNC_P (type2))
1916 || (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
1917 || (TYPE_PTRMEM_P (type1) && TYPE_PTRMEM_P (type2))
1918 || ((TYPE_PTRMEMFUNC_P (type1)
1919 || TREE_CODE (type1) == POINTER_TYPE)
1920 && null_ptr_cst_p (args[1])))
1922 type2 = type1;
1923 break;
1925 return;
1927 default:
1928 gcc_unreachable ();
1930 type1 = build_reference_type (type1);
1931 break;
1933 case COND_EXPR:
1934 /* [over.built]
1936 For every pair of promoted arithmetic types L and R, there
1937 exist candidate operator functions of the form
1939 LR operator?(bool, L, R);
1941 where LR is the result of the usual arithmetic conversions
1942 between types L and R.
1944 For every type T, where T is a pointer or pointer-to-member
1945 type, there exist candidate operator functions of the form T
1946 operator?(bool, T, T); */
1948 if (promoted_arithmetic_type_p (type1)
1949 && promoted_arithmetic_type_p (type2))
1950 /* That's OK. */
1951 break;
1953 /* Otherwise, the types should be pointers. */
1954 if (!(TYPE_PTR_P (type1) || TYPE_PTR_TO_MEMBER_P (type1))
1955 || !(TYPE_PTR_P (type2) || TYPE_PTR_TO_MEMBER_P (type2)))
1956 return;
1958 /* We don't check that the two types are the same; the logic
1959 below will actually create two candidates; one in which both
1960 parameter types are TYPE1, and one in which both parameter
1961 types are TYPE2. */
1962 break;
1964 default:
1965 gcc_unreachable ();
1968 /* If we're dealing with two pointer types or two enumeral types,
1969 we need candidates for both of them. */
1970 if (type2 && !same_type_p (type1, type2)
1971 && TREE_CODE (type1) == TREE_CODE (type2)
1972 && (TREE_CODE (type1) == REFERENCE_TYPE
1973 || (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
1974 || (TYPE_PTRMEM_P (type1) && TYPE_PTRMEM_P (type2))
1975 || TYPE_PTRMEMFUNC_P (type1)
1976 || IS_AGGR_TYPE (type1)
1977 || TREE_CODE (type1) == ENUMERAL_TYPE))
1979 build_builtin_candidate
1980 (candidates, fnname, type1, type1, args, argtypes, flags);
1981 build_builtin_candidate
1982 (candidates, fnname, type2, type2, args, argtypes, flags);
1983 return;
1986 build_builtin_candidate
1987 (candidates, fnname, type1, type2, args, argtypes, flags);
1990 tree
1991 type_decays_to (tree type)
1993 if (TREE_CODE (type) == ARRAY_TYPE)
1994 return build_pointer_type (TREE_TYPE (type));
1995 if (TREE_CODE (type) == FUNCTION_TYPE)
1996 return build_pointer_type (type);
1997 return type;
2000 /* There are three conditions of builtin candidates:
2002 1) bool-taking candidates. These are the same regardless of the input.
2003 2) pointer-pair taking candidates. These are generated for each type
2004 one of the input types converts to.
2005 3) arithmetic candidates. According to the standard, we should generate
2006 all of these, but I'm trying not to...
2008 Here we generate a superset of the possible candidates for this particular
2009 case. That is a subset of the full set the standard defines, plus some
2010 other cases which the standard disallows. add_builtin_candidate will
2011 filter out the invalid set. */
2013 static void
2014 add_builtin_candidates (struct z_candidate **candidates, enum tree_code code,
2015 enum tree_code code2, tree fnname, tree *args,
2016 int flags)
2018 int ref1, i;
2019 int enum_p = 0;
2020 tree type, argtypes[3];
2021 /* TYPES[i] is the set of possible builtin-operator parameter types
2022 we will consider for the Ith argument. These are represented as
2023 a TREE_LIST; the TREE_VALUE of each node is the potential
2024 parameter type. */
2025 tree types[2];
2027 for (i = 0; i < 3; ++i)
2029 if (args[i])
2030 argtypes[i] = lvalue_type (args[i]);
2031 else
2032 argtypes[i] = NULL_TREE;
2035 switch (code)
2037 /* 4 For every pair T, VQ), where T is an arithmetic or enumeration type,
2038 and VQ is either volatile or empty, there exist candidate operator
2039 functions of the form
2040 VQ T& operator++(VQ T&); */
2042 case POSTINCREMENT_EXPR:
2043 case PREINCREMENT_EXPR:
2044 case POSTDECREMENT_EXPR:
2045 case PREDECREMENT_EXPR:
2046 case MODIFY_EXPR:
2047 ref1 = 1;
2048 break;
2050 /* 24There also exist candidate operator functions of the form
2051 bool operator!(bool);
2052 bool operator&&(bool, bool);
2053 bool operator||(bool, bool); */
2055 case TRUTH_NOT_EXPR:
2056 build_builtin_candidate
2057 (candidates, fnname, boolean_type_node,
2058 NULL_TREE, args, argtypes, flags);
2059 return;
2061 case TRUTH_ORIF_EXPR:
2062 case TRUTH_ANDIF_EXPR:
2063 build_builtin_candidate
2064 (candidates, fnname, boolean_type_node,
2065 boolean_type_node, args, argtypes, flags);
2066 return;
2068 case ADDR_EXPR:
2069 case COMPOUND_EXPR:
2070 case COMPONENT_REF:
2071 return;
2073 case COND_EXPR:
2074 case EQ_EXPR:
2075 case NE_EXPR:
2076 case LT_EXPR:
2077 case LE_EXPR:
2078 case GT_EXPR:
2079 case GE_EXPR:
2080 enum_p = 1;
2081 /* Fall through. */
2083 default:
2084 ref1 = 0;
2087 types[0] = types[1] = NULL_TREE;
2089 for (i = 0; i < 2; ++i)
2091 if (! args[i])
2093 else if (IS_AGGR_TYPE (argtypes[i]))
2095 tree convs;
2097 if (i == 0 && code == MODIFY_EXPR && code2 == NOP_EXPR)
2098 return;
2100 convs = lookup_conversions (argtypes[i]);
2102 if (code == COND_EXPR)
2104 if (real_lvalue_p (args[i]))
2105 types[i] = tree_cons
2106 (NULL_TREE, build_reference_type (argtypes[i]), types[i]);
2108 types[i] = tree_cons
2109 (NULL_TREE, TYPE_MAIN_VARIANT (argtypes[i]), types[i]);
2112 else if (! convs)
2113 return;
2115 for (; convs; convs = TREE_CHAIN (convs))
2117 type = TREE_TYPE (TREE_TYPE (OVL_CURRENT (TREE_VALUE (convs))));
2119 if (i == 0 && ref1
2120 && (TREE_CODE (type) != REFERENCE_TYPE
2121 || CP_TYPE_CONST_P (TREE_TYPE (type))))
2122 continue;
2124 if (code == COND_EXPR && TREE_CODE (type) == REFERENCE_TYPE)
2125 types[i] = tree_cons (NULL_TREE, type, types[i]);
2127 type = non_reference (type);
2128 if (i != 0 || ! ref1)
2130 type = TYPE_MAIN_VARIANT (type_decays_to (type));
2131 if (enum_p && TREE_CODE (type) == ENUMERAL_TYPE)
2132 types[i] = tree_cons (NULL_TREE, type, types[i]);
2133 if (INTEGRAL_TYPE_P (type))
2134 type = type_promotes_to (type);
2137 if (! value_member (type, types[i]))
2138 types[i] = tree_cons (NULL_TREE, type, types[i]);
2141 else
2143 if (code == COND_EXPR && real_lvalue_p (args[i]))
2144 types[i] = tree_cons
2145 (NULL_TREE, build_reference_type (argtypes[i]), types[i]);
2146 type = non_reference (argtypes[i]);
2147 if (i != 0 || ! ref1)
2149 type = TYPE_MAIN_VARIANT (type_decays_to (type));
2150 if (enum_p && TREE_CODE (type) == ENUMERAL_TYPE)
2151 types[i] = tree_cons (NULL_TREE, type, types[i]);
2152 if (INTEGRAL_TYPE_P (type))
2153 type = type_promotes_to (type);
2155 types[i] = tree_cons (NULL_TREE, type, types[i]);
2159 /* Run through the possible parameter types of both arguments,
2160 creating candidates with those parameter types. */
2161 for (; types[0]; types[0] = TREE_CHAIN (types[0]))
2163 if (types[1])
2164 for (type = types[1]; type; type = TREE_CHAIN (type))
2165 add_builtin_candidate
2166 (candidates, code, code2, fnname, TREE_VALUE (types[0]),
2167 TREE_VALUE (type), args, argtypes, flags);
2168 else
2169 add_builtin_candidate
2170 (candidates, code, code2, fnname, TREE_VALUE (types[0]),
2171 NULL_TREE, args, argtypes, flags);
2174 return;
2178 /* If TMPL can be successfully instantiated as indicated by
2179 EXPLICIT_TARGS and ARGLIST, adds the instantiation to CANDIDATES.
2181 TMPL is the template. EXPLICIT_TARGS are any explicit template
2182 arguments. ARGLIST is the arguments provided at the call-site.
2183 The RETURN_TYPE is the desired type for conversion operators. If
2184 OBJ is NULL_TREE, FLAGS and CTYPE are as for add_function_candidate.
2185 If an OBJ is supplied, FLAGS and CTYPE are ignored, and OBJ is as for
2186 add_conv_candidate. */
2188 static struct z_candidate*
2189 add_template_candidate_real (struct z_candidate **candidates, tree tmpl,
2190 tree ctype, tree explicit_targs, tree arglist,
2191 tree return_type, tree access_path,
2192 tree conversion_path, int flags, tree obj,
2193 unification_kind_t strict)
2195 int ntparms = DECL_NTPARMS (tmpl);
2196 tree targs = make_tree_vec (ntparms);
2197 tree args_without_in_chrg = arglist;
2198 struct z_candidate *cand;
2199 int i;
2200 tree fn;
2202 /* We don't do deduction on the in-charge parameter, the VTT
2203 parameter or 'this'. */
2204 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (tmpl))
2205 args_without_in_chrg = TREE_CHAIN (args_without_in_chrg);
2207 if ((DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (tmpl)
2208 || DECL_BASE_CONSTRUCTOR_P (tmpl))
2209 && CLASSTYPE_VBASECLASSES (DECL_CONTEXT (tmpl)))
2210 args_without_in_chrg = TREE_CHAIN (args_without_in_chrg);
2212 i = fn_type_unification (tmpl, explicit_targs, targs,
2213 args_without_in_chrg,
2214 return_type, strict, flags);
2216 if (i != 0)
2217 return NULL;
2219 fn = instantiate_template (tmpl, targs, tf_none);
2220 if (fn == error_mark_node)
2221 return NULL;
2223 /* In [class.copy]:
2225 A member function template is never instantiated to perform the
2226 copy of a class object to an object of its class type.
2228 It's a little unclear what this means; the standard explicitly
2229 does allow a template to be used to copy a class. For example,
2232 struct A {
2233 A(A&);
2234 template <class T> A(const T&);
2236 const A f ();
2237 void g () { A a (f ()); }
2239 the member template will be used to make the copy. The section
2240 quoted above appears in the paragraph that forbids constructors
2241 whose only parameter is (a possibly cv-qualified variant of) the
2242 class type, and a logical interpretation is that the intent was
2243 to forbid the instantiation of member templates which would then
2244 have that form. */
2245 if (DECL_CONSTRUCTOR_P (fn) && list_length (arglist) == 2)
2247 tree arg_types = FUNCTION_FIRST_USER_PARMTYPE (fn);
2248 if (arg_types && same_type_p (TYPE_MAIN_VARIANT (TREE_VALUE (arg_types)),
2249 ctype))
2250 return NULL;
2253 if (obj != NULL_TREE)
2254 /* Aha, this is a conversion function. */
2255 cand = add_conv_candidate (candidates, fn, obj, access_path,
2256 conversion_path, arglist);
2257 else
2258 cand = add_function_candidate (candidates, fn, ctype,
2259 arglist, access_path,
2260 conversion_path, flags);
2261 if (DECL_TI_TEMPLATE (fn) != tmpl)
2262 /* This situation can occur if a member template of a template
2263 class is specialized. Then, instantiate_template might return
2264 an instantiation of the specialization, in which case the
2265 DECL_TI_TEMPLATE field will point at the original
2266 specialization. For example:
2268 template <class T> struct S { template <class U> void f(U);
2269 template <> void f(int) {}; };
2270 S<double> sd;
2271 sd.f(3);
2273 Here, TMPL will be template <class U> S<double>::f(U).
2274 And, instantiate template will give us the specialization
2275 template <> S<double>::f(int). But, the DECL_TI_TEMPLATE field
2276 for this will point at template <class T> template <> S<T>::f(int),
2277 so that we can find the definition. For the purposes of
2278 overload resolution, however, we want the original TMPL. */
2279 cand->template_decl = tree_cons (tmpl, targs, NULL_TREE);
2280 else
2281 cand->template_decl = DECL_TEMPLATE_INFO (fn);
2283 return cand;
2287 static struct z_candidate *
2288 add_template_candidate (struct z_candidate **candidates, tree tmpl, tree ctype,
2289 tree explicit_targs, tree arglist, tree return_type,
2290 tree access_path, tree conversion_path, int flags,
2291 unification_kind_t strict)
2293 return
2294 add_template_candidate_real (candidates, tmpl, ctype,
2295 explicit_targs, arglist, return_type,
2296 access_path, conversion_path,
2297 flags, NULL_TREE, strict);
2301 static struct z_candidate *
2302 add_template_conv_candidate (struct z_candidate **candidates, tree tmpl,
2303 tree obj, tree arglist, tree return_type,
2304 tree access_path, tree conversion_path)
2306 return
2307 add_template_candidate_real (candidates, tmpl, NULL_TREE, NULL_TREE,
2308 arglist, return_type, access_path,
2309 conversion_path, 0, obj, DEDUCE_CONV);
2312 /* The CANDS are the set of candidates that were considered for
2313 overload resolution. Return the set of viable candidates. If none
2314 of the candidates were viable, set *ANY_VIABLE_P to true. STRICT_P
2315 is true if a candidate should be considered viable only if it is
2316 strictly viable. */
2318 static struct z_candidate*
2319 splice_viable (struct z_candidate *cands,
2320 bool strict_p,
2321 bool *any_viable_p)
2323 struct z_candidate *viable;
2324 struct z_candidate **last_viable;
2325 struct z_candidate **cand;
2327 viable = NULL;
2328 last_viable = &viable;
2329 *any_viable_p = false;
2331 cand = &cands;
2332 while (*cand)
2334 struct z_candidate *c = *cand;
2335 if (strict_p ? c->viable == 1 : c->viable)
2337 *last_viable = c;
2338 *cand = c->next;
2339 c->next = NULL;
2340 last_viable = &c->next;
2341 *any_viable_p = true;
2343 else
2344 cand = &c->next;
2347 return viable ? viable : cands;
2350 static bool
2351 any_strictly_viable (struct z_candidate *cands)
2353 for (; cands; cands = cands->next)
2354 if (cands->viable == 1)
2355 return true;
2356 return false;
2359 /* OBJ is being used in an expression like "OBJ.f (...)". In other
2360 words, it is about to become the "this" pointer for a member
2361 function call. Take the address of the object. */
2363 static tree
2364 build_this (tree obj)
2366 /* In a template, we are only concerned about the type of the
2367 expression, so we can take a shortcut. */
2368 if (processing_template_decl)
2369 return build_address (obj);
2371 return build_unary_op (ADDR_EXPR, obj, 0);
2374 /* Returns true iff functions are equivalent. Equivalent functions are
2375 not '==' only if one is a function-local extern function or if
2376 both are extern "C". */
2378 static inline int
2379 equal_functions (tree fn1, tree fn2)
2381 if (DECL_LOCAL_FUNCTION_P (fn1) || DECL_LOCAL_FUNCTION_P (fn2)
2382 || DECL_EXTERN_C_FUNCTION_P (fn1))
2383 return decls_match (fn1, fn2);
2384 return fn1 == fn2;
2387 /* Print information about one overload candidate CANDIDATE. MSGSTR
2388 is the text to print before the candidate itself.
2390 NOTE: Unlike most diagnostic functions in GCC, MSGSTR is expected
2391 to have been run through gettext by the caller. This wart makes
2392 life simpler in print_z_candidates and for the translators. */
2394 static void
2395 print_z_candidate (const char *msgstr, struct z_candidate *candidate)
2397 if (TREE_CODE (candidate->fn) == IDENTIFIER_NODE)
2399 if (candidate->num_convs == 3)
2400 inform ("%s %D(%T, %T, %T) <built-in>", msgstr, candidate->fn,
2401 candidate->convs[0]->type,
2402 candidate->convs[1]->type,
2403 candidate->convs[2]->type);
2404 else if (candidate->num_convs == 2)
2405 inform ("%s %D(%T, %T) <built-in>", msgstr, candidate->fn,
2406 candidate->convs[0]->type,
2407 candidate->convs[1]->type);
2408 else
2409 inform ("%s %D(%T) <built-in>", msgstr, candidate->fn,
2410 candidate->convs[0]->type);
2412 else if (TYPE_P (candidate->fn))
2413 inform ("%s %T <conversion>", msgstr, candidate->fn);
2414 else if (candidate->viable == -1)
2415 inform ("%s %+#D <near match>", msgstr, candidate->fn);
2416 else
2417 inform ("%s %+#D", msgstr, candidate->fn);
2420 static void
2421 print_z_candidates (struct z_candidate *candidates)
2423 const char *str;
2424 struct z_candidate *cand1;
2425 struct z_candidate **cand2;
2427 /* There may be duplicates in the set of candidates. We put off
2428 checking this condition as long as possible, since we have no way
2429 to eliminate duplicates from a set of functions in less than n^2
2430 time. Now we are about to emit an error message, so it is more
2431 permissible to go slowly. */
2432 for (cand1 = candidates; cand1; cand1 = cand1->next)
2434 tree fn = cand1->fn;
2435 /* Skip builtin candidates and conversion functions. */
2436 if (TREE_CODE (fn) != FUNCTION_DECL)
2437 continue;
2438 cand2 = &cand1->next;
2439 while (*cand2)
2441 if (TREE_CODE ((*cand2)->fn) == FUNCTION_DECL
2442 && equal_functions (fn, (*cand2)->fn))
2443 *cand2 = (*cand2)->next;
2444 else
2445 cand2 = &(*cand2)->next;
2449 if (!candidates)
2450 return;
2452 str = _("candidates are:");
2453 print_z_candidate (str, candidates);
2454 if (candidates->next)
2456 /* Indent successive candidates by the width of the translation
2457 of the above string. */
2458 size_t len = gcc_gettext_width (str) + 1;
2459 char *spaces = alloca (len);
2460 memset (spaces, ' ', len-1);
2461 spaces[len - 1] = '\0';
2463 candidates = candidates->next;
2466 print_z_candidate (spaces, candidates);
2467 candidates = candidates->next;
2469 while (candidates);
2473 /* USER_SEQ is a user-defined conversion sequence, beginning with a
2474 USER_CONV. STD_SEQ is the standard conversion sequence applied to
2475 the result of the conversion function to convert it to the final
2476 desired type. Merge the two sequences into a single sequence,
2477 and return the merged sequence. */
2479 static conversion *
2480 merge_conversion_sequences (conversion *user_seq, conversion *std_seq)
2482 conversion **t;
2484 gcc_assert (user_seq->kind == ck_user);
2486 /* Find the end of the second conversion sequence. */
2487 t = &(std_seq);
2488 while ((*t)->kind != ck_identity)
2489 t = &((*t)->u.next);
2491 /* Replace the identity conversion with the user conversion
2492 sequence. */
2493 *t = user_seq;
2495 /* The entire sequence is a user-conversion sequence. */
2496 std_seq->user_conv_p = true;
2498 return std_seq;
2501 /* Returns the best overload candidate to perform the requested
2502 conversion. This function is used for three the overloading situations
2503 described in [over.match.copy], [over.match.conv], and [over.match.ref].
2504 If TOTYPE is a REFERENCE_TYPE, we're trying to find an lvalue binding as
2505 per [dcl.init.ref], so we ignore temporary bindings. */
2507 static struct z_candidate *
2508 build_user_type_conversion_1 (tree totype, tree expr, int flags)
2510 struct z_candidate *candidates, *cand;
2511 tree fromtype = TREE_TYPE (expr);
2512 tree ctors = NULL_TREE;
2513 tree conv_fns = NULL_TREE;
2514 conversion *conv = NULL;
2515 tree args = NULL_TREE;
2516 bool any_viable_p;
2518 /* We represent conversion within a hierarchy using RVALUE_CONV and
2519 BASE_CONV, as specified by [over.best.ics]; these become plain
2520 constructor calls, as specified in [dcl.init]. */
2521 gcc_assert (!IS_AGGR_TYPE (fromtype) || !IS_AGGR_TYPE (totype)
2522 || !DERIVED_FROM_P (totype, fromtype));
2524 if (IS_AGGR_TYPE (totype))
2525 ctors = lookup_fnfields (totype, complete_ctor_identifier, 0);
2527 if (IS_AGGR_TYPE (fromtype))
2528 conv_fns = lookup_conversions (fromtype);
2530 candidates = 0;
2531 flags |= LOOKUP_NO_CONVERSION;
2533 if (ctors)
2535 tree t;
2537 ctors = BASELINK_FUNCTIONS (ctors);
2539 t = build_int_cst (build_pointer_type (totype), 0);
2540 args = build_tree_list (NULL_TREE, expr);
2541 /* We should never try to call the abstract or base constructor
2542 from here. */
2543 gcc_assert (!DECL_HAS_IN_CHARGE_PARM_P (OVL_CURRENT (ctors))
2544 && !DECL_HAS_VTT_PARM_P (OVL_CURRENT (ctors)));
2545 args = tree_cons (NULL_TREE, t, args);
2547 for (; ctors; ctors = OVL_NEXT (ctors))
2549 tree ctor = OVL_CURRENT (ctors);
2550 if (DECL_NONCONVERTING_P (ctor))
2551 continue;
2553 if (TREE_CODE (ctor) == TEMPLATE_DECL)
2554 cand = add_template_candidate (&candidates, ctor, totype,
2555 NULL_TREE, args, NULL_TREE,
2556 TYPE_BINFO (totype),
2557 TYPE_BINFO (totype),
2558 flags,
2559 DEDUCE_CALL);
2560 else
2561 cand = add_function_candidate (&candidates, ctor, totype,
2562 args, TYPE_BINFO (totype),
2563 TYPE_BINFO (totype),
2564 flags);
2566 if (cand)
2567 cand->second_conv = build_identity_conv (totype, NULL_TREE);
2570 if (conv_fns)
2571 args = build_tree_list (NULL_TREE, build_this (expr));
2573 for (; conv_fns; conv_fns = TREE_CHAIN (conv_fns))
2575 tree fns;
2576 tree conversion_path = TREE_PURPOSE (conv_fns);
2577 int convflags = LOOKUP_NO_CONVERSION;
2579 /* If we are called to convert to a reference type, we are trying to
2580 find an lvalue binding, so don't even consider temporaries. If
2581 we don't find an lvalue binding, the caller will try again to
2582 look for a temporary binding. */
2583 if (TREE_CODE (totype) == REFERENCE_TYPE)
2584 convflags |= LOOKUP_NO_TEMP_BIND;
2586 for (fns = TREE_VALUE (conv_fns); fns; fns = OVL_NEXT (fns))
2588 tree fn = OVL_CURRENT (fns);
2590 /* [over.match.funcs] For conversion functions, the function
2591 is considered to be a member of the class of the implicit
2592 object argument for the purpose of defining the type of
2593 the implicit object parameter.
2595 So we pass fromtype as CTYPE to add_*_candidate. */
2597 if (TREE_CODE (fn) == TEMPLATE_DECL)
2598 cand = add_template_candidate (&candidates, fn, fromtype,
2599 NULL_TREE,
2600 args, totype,
2601 TYPE_BINFO (fromtype),
2602 conversion_path,
2603 flags,
2604 DEDUCE_CONV);
2605 else
2606 cand = add_function_candidate (&candidates, fn, fromtype,
2607 args,
2608 TYPE_BINFO (fromtype),
2609 conversion_path,
2610 flags);
2612 if (cand)
2614 conversion *ics
2615 = implicit_conversion (totype,
2616 TREE_TYPE (TREE_TYPE (cand->fn)),
2618 /*c_cast_p=*/false, convflags);
2620 cand->second_conv = ics;
2622 if (!ics)
2623 cand->viable = 0;
2624 else if (candidates->viable == 1 && ics->bad_p)
2625 cand->viable = -1;
2630 candidates = splice_viable (candidates, pedantic, &any_viable_p);
2631 if (!any_viable_p)
2632 return 0;
2634 cand = tourney (candidates);
2635 if (cand == 0)
2637 if (flags & LOOKUP_COMPLAIN)
2639 error ("conversion from %qT to %qT is ambiguous",
2640 fromtype, totype);
2641 print_z_candidates (candidates);
2644 cand = candidates; /* any one will do */
2645 cand->second_conv = build_ambiguous_conv (totype, expr);
2646 cand->second_conv->user_conv_p = true;
2647 if (!any_strictly_viable (candidates))
2648 cand->second_conv->bad_p = true;
2649 /* If there are viable candidates, don't set ICS_BAD_FLAG; an
2650 ambiguous conversion is no worse than another user-defined
2651 conversion. */
2653 return cand;
2656 /* Build the user conversion sequence. */
2657 conv = build_conv
2658 (ck_user,
2659 (DECL_CONSTRUCTOR_P (cand->fn)
2660 ? totype : non_reference (TREE_TYPE (TREE_TYPE (cand->fn)))),
2661 build_identity_conv (TREE_TYPE (expr), expr));
2662 conv->cand = cand;
2664 /* Combine it with the second conversion sequence. */
2665 cand->second_conv = merge_conversion_sequences (conv,
2666 cand->second_conv);
2668 if (cand->viable == -1)
2669 cand->second_conv->bad_p = true;
2671 return cand;
2674 tree
2675 build_user_type_conversion (tree totype, tree expr, int flags)
2677 struct z_candidate *cand
2678 = build_user_type_conversion_1 (totype, expr, flags);
2680 if (cand)
2682 if (cand->second_conv->kind == ck_ambig)
2683 return error_mark_node;
2684 expr = convert_like (cand->second_conv, expr);
2685 return convert_from_reference (expr);
2687 return NULL_TREE;
2690 /* Do any initial processing on the arguments to a function call. */
2692 static tree
2693 resolve_args (tree args)
2695 tree t;
2696 for (t = args; t; t = TREE_CHAIN (t))
2698 tree arg = TREE_VALUE (t);
2700 if (error_operand_p (arg))
2701 return error_mark_node;
2702 else if (VOID_TYPE_P (TREE_TYPE (arg)))
2704 error ("invalid use of void expression");
2705 return error_mark_node;
2707 else if (invalid_nonstatic_memfn_p (arg))
2708 return error_mark_node;
2710 return args;
2713 /* Perform overload resolution on FN, which is called with the ARGS.
2715 Return the candidate function selected by overload resolution, or
2716 NULL if the event that overload resolution failed. In the case
2717 that overload resolution fails, *CANDIDATES will be the set of
2718 candidates considered, and ANY_VIABLE_P will be set to true or
2719 false to indicate whether or not any of the candidates were
2720 viable.
2722 The ARGS should already have gone through RESOLVE_ARGS before this
2723 function is called. */
2725 static struct z_candidate *
2726 perform_overload_resolution (tree fn,
2727 tree args,
2728 struct z_candidate **candidates,
2729 bool *any_viable_p)
2731 struct z_candidate *cand;
2732 tree explicit_targs = NULL_TREE;
2733 int template_only = 0;
2735 *candidates = NULL;
2736 *any_viable_p = true;
2738 /* Check FN and ARGS. */
2739 gcc_assert (TREE_CODE (fn) == FUNCTION_DECL
2740 || TREE_CODE (fn) == TEMPLATE_DECL
2741 || TREE_CODE (fn) == OVERLOAD
2742 || TREE_CODE (fn) == TEMPLATE_ID_EXPR);
2743 gcc_assert (!args || TREE_CODE (args) == TREE_LIST);
2745 if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
2747 explicit_targs = TREE_OPERAND (fn, 1);
2748 fn = TREE_OPERAND (fn, 0);
2749 template_only = 1;
2752 /* Add the various candidate functions. */
2753 add_candidates (fn, args, explicit_targs, template_only,
2754 /*conversion_path=*/NULL_TREE,
2755 /*access_path=*/NULL_TREE,
2756 LOOKUP_NORMAL,
2757 candidates);
2759 *candidates = splice_viable (*candidates, pedantic, any_viable_p);
2760 if (!*any_viable_p)
2761 return NULL;
2763 cand = tourney (*candidates);
2764 return cand;
2767 /* Return an expression for a call to FN (a namespace-scope function,
2768 or a static member function) with the ARGS. */
2770 tree
2771 build_new_function_call (tree fn, tree args, bool koenig_p)
2773 struct z_candidate *candidates, *cand;
2774 bool any_viable_p;
2775 void *p;
2776 tree result;
2778 args = resolve_args (args);
2779 if (args == error_mark_node)
2780 return error_mark_node;
2782 /* If this function was found without using argument dependent
2783 lookup, then we want to ignore any undeclared friend
2784 functions. */
2785 if (!koenig_p)
2787 tree orig_fn = fn;
2789 fn = remove_hidden_names (fn);
2790 if (!fn)
2792 error ("no matching function for call to %<%D(%A)%>",
2793 DECL_NAME (OVL_CURRENT (orig_fn)), args);
2794 return error_mark_node;
2798 /* Get the high-water mark for the CONVERSION_OBSTACK. */
2799 p = conversion_obstack_alloc (0);
2801 cand = perform_overload_resolution (fn, args, &candidates, &any_viable_p);
2803 if (!cand)
2805 if (!any_viable_p && candidates && ! candidates->next)
2806 return build_function_call (candidates->fn, args);
2807 if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
2808 fn = TREE_OPERAND (fn, 0);
2809 if (!any_viable_p)
2810 error ("no matching function for call to %<%D(%A)%>",
2811 DECL_NAME (OVL_CURRENT (fn)), args);
2812 else
2813 error ("call of overloaded %<%D(%A)%> is ambiguous",
2814 DECL_NAME (OVL_CURRENT (fn)), args);
2815 if (candidates)
2816 print_z_candidates (candidates);
2817 result = error_mark_node;
2819 else
2820 result = build_over_call (cand, LOOKUP_NORMAL);
2822 /* Free all the conversions we allocated. */
2823 obstack_free (&conversion_obstack, p);
2825 return result;
2828 /* Build a call to a global operator new. FNNAME is the name of the
2829 operator (either "operator new" or "operator new[]") and ARGS are
2830 the arguments provided. *SIZE points to the total number of bytes
2831 required by the allocation, and is updated if that is changed here.
2832 *COOKIE_SIZE is non-NULL if a cookie should be used. If this
2833 function determines that no cookie should be used, after all,
2834 *COOKIE_SIZE is set to NULL_TREE. */
2836 tree
2837 build_operator_new_call (tree fnname, tree args, tree *size, tree *cookie_size)
2839 tree fns;
2840 struct z_candidate *candidates;
2841 struct z_candidate *cand;
2842 bool any_viable_p;
2844 args = tree_cons (NULL_TREE, *size, args);
2845 args = resolve_args (args);
2846 if (args == error_mark_node)
2847 return args;
2849 /* Based on:
2851 [expr.new]
2853 If this lookup fails to find the name, or if the allocated type
2854 is not a class type, the allocation function's name is looked
2855 up in the global scope.
2857 we disregard block-scope declarations of "operator new". */
2858 fns = lookup_function_nonclass (fnname, args, /*block_p=*/false);
2860 /* Figure out what function is being called. */
2861 cand = perform_overload_resolution (fns, args, &candidates, &any_viable_p);
2863 /* If no suitable function could be found, issue an error message
2864 and give up. */
2865 if (!cand)
2867 if (!any_viable_p)
2868 error ("no matching function for call to %<%D(%A)%>",
2869 DECL_NAME (OVL_CURRENT (fns)), args);
2870 else
2871 error ("call of overloaded %<%D(%A)%> is ambiguous",
2872 DECL_NAME (OVL_CURRENT (fns)), args);
2873 if (candidates)
2874 print_z_candidates (candidates);
2875 return error_mark_node;
2878 /* If a cookie is required, add some extra space. Whether
2879 or not a cookie is required cannot be determined until
2880 after we know which function was called. */
2881 if (*cookie_size)
2883 bool use_cookie = true;
2884 if (!abi_version_at_least (2))
2886 tree placement = TREE_CHAIN (args);
2887 /* In G++ 3.2, the check was implemented incorrectly; it
2888 looked at the placement expression, rather than the
2889 type of the function. */
2890 if (placement && !TREE_CHAIN (placement)
2891 && same_type_p (TREE_TYPE (TREE_VALUE (placement)),
2892 ptr_type_node))
2893 use_cookie = false;
2895 else
2897 tree arg_types;
2899 arg_types = TYPE_ARG_TYPES (TREE_TYPE (cand->fn));
2900 /* Skip the size_t parameter. */
2901 arg_types = TREE_CHAIN (arg_types);
2902 /* Check the remaining parameters (if any). */
2903 if (arg_types
2904 && TREE_CHAIN (arg_types) == void_list_node
2905 && same_type_p (TREE_VALUE (arg_types),
2906 ptr_type_node))
2907 use_cookie = false;
2909 /* If we need a cookie, adjust the number of bytes allocated. */
2910 if (use_cookie)
2912 /* Update the total size. */
2913 *size = size_binop (PLUS_EXPR, *size, *cookie_size);
2914 /* Update the argument list to reflect the adjusted size. */
2915 TREE_VALUE (args) = *size;
2917 else
2918 *cookie_size = NULL_TREE;
2921 /* Build the CALL_EXPR. */
2922 return build_over_call (cand, LOOKUP_NORMAL);
2925 static tree
2926 build_object_call (tree obj, tree args)
2928 struct z_candidate *candidates = 0, *cand;
2929 tree fns, convs, mem_args = NULL_TREE;
2930 tree type = TREE_TYPE (obj);
2931 bool any_viable_p;
2932 tree result = NULL_TREE;
2933 void *p;
2935 if (TYPE_PTRMEMFUNC_P (type))
2937 /* It's no good looking for an overloaded operator() on a
2938 pointer-to-member-function. */
2939 error ("pointer-to-member function %E cannot be called without an object; consider using .* or ->*", obj);
2940 return error_mark_node;
2943 if (TYPE_BINFO (type))
2945 fns = lookup_fnfields (TYPE_BINFO (type), ansi_opname (CALL_EXPR), 1);
2946 if (fns == error_mark_node)
2947 return error_mark_node;
2949 else
2950 fns = NULL_TREE;
2952 args = resolve_args (args);
2954 if (args == error_mark_node)
2955 return error_mark_node;
2957 /* Get the high-water mark for the CONVERSION_OBSTACK. */
2958 p = conversion_obstack_alloc (0);
2960 if (fns)
2962 tree base = BINFO_TYPE (BASELINK_BINFO (fns));
2963 mem_args = tree_cons (NULL_TREE, build_this (obj), args);
2965 for (fns = BASELINK_FUNCTIONS (fns); fns; fns = OVL_NEXT (fns))
2967 tree fn = OVL_CURRENT (fns);
2968 if (TREE_CODE (fn) == TEMPLATE_DECL)
2969 add_template_candidate (&candidates, fn, base, NULL_TREE,
2970 mem_args, NULL_TREE,
2971 TYPE_BINFO (type),
2972 TYPE_BINFO (type),
2973 LOOKUP_NORMAL, DEDUCE_CALL);
2974 else
2975 add_function_candidate
2976 (&candidates, fn, base, mem_args, TYPE_BINFO (type),
2977 TYPE_BINFO (type), LOOKUP_NORMAL);
2981 convs = lookup_conversions (type);
2983 for (; convs; convs = TREE_CHAIN (convs))
2985 tree fns = TREE_VALUE (convs);
2986 tree totype = TREE_TYPE (TREE_TYPE (OVL_CURRENT (fns)));
2988 if ((TREE_CODE (totype) == POINTER_TYPE
2989 && TREE_CODE (TREE_TYPE (totype)) == FUNCTION_TYPE)
2990 || (TREE_CODE (totype) == REFERENCE_TYPE
2991 && TREE_CODE (TREE_TYPE (totype)) == FUNCTION_TYPE)
2992 || (TREE_CODE (totype) == REFERENCE_TYPE
2993 && TREE_CODE (TREE_TYPE (totype)) == POINTER_TYPE
2994 && TREE_CODE (TREE_TYPE (TREE_TYPE (totype))) == FUNCTION_TYPE))
2995 for (; fns; fns = OVL_NEXT (fns))
2997 tree fn = OVL_CURRENT (fns);
2998 if (TREE_CODE (fn) == TEMPLATE_DECL)
2999 add_template_conv_candidate
3000 (&candidates, fn, obj, args, totype,
3001 /*access_path=*/NULL_TREE,
3002 /*conversion_path=*/NULL_TREE);
3003 else
3004 add_conv_candidate (&candidates, fn, obj, args,
3005 /*conversion_path=*/NULL_TREE,
3006 /*access_path=*/NULL_TREE);
3010 candidates = splice_viable (candidates, pedantic, &any_viable_p);
3011 if (!any_viable_p)
3013 error ("no match for call to %<(%T) (%A)%>", TREE_TYPE (obj), args);
3014 print_z_candidates (candidates);
3015 result = error_mark_node;
3017 else
3019 cand = tourney (candidates);
3020 if (cand == 0)
3022 error ("call of %<(%T) (%A)%> is ambiguous", TREE_TYPE (obj), args);
3023 print_z_candidates (candidates);
3024 result = error_mark_node;
3026 /* Since cand->fn will be a type, not a function, for a conversion
3027 function, we must be careful not to unconditionally look at
3028 DECL_NAME here. */
3029 else if (TREE_CODE (cand->fn) == FUNCTION_DECL
3030 && DECL_OVERLOADED_OPERATOR_P (cand->fn) == CALL_EXPR)
3031 result = build_over_call (cand, LOOKUP_NORMAL);
3032 else
3034 obj = convert_like_with_context (cand->convs[0], obj, cand->fn, -1);
3035 obj = convert_from_reference (obj);
3036 result = build_function_call (obj, args);
3040 /* Free all the conversions we allocated. */
3041 obstack_free (&conversion_obstack, p);
3043 return result;
3046 static void
3047 op_error (enum tree_code code, enum tree_code code2,
3048 tree arg1, tree arg2, tree arg3, const char *problem)
3050 const char *opname;
3052 if (code == MODIFY_EXPR)
3053 opname = assignment_operator_name_info[code2].name;
3054 else
3055 opname = operator_name_info[code].name;
3057 switch (code)
3059 case COND_EXPR:
3060 error ("%s for ternary %<operator?:%> in %<%E ? %E : %E%>",
3061 problem, arg1, arg2, arg3);
3062 break;
3064 case POSTINCREMENT_EXPR:
3065 case POSTDECREMENT_EXPR:
3066 error ("%s for %<operator%s%> in %<%E%s%>", problem, opname, arg1, opname);
3067 break;
3069 case ARRAY_REF:
3070 error ("%s for %<operator[]%> in %<%E[%E]%>", problem, arg1, arg2);
3071 break;
3073 case REALPART_EXPR:
3074 case IMAGPART_EXPR:
3075 error ("%s for %qs in %<%s %E%>", problem, opname, opname, arg1);
3076 break;
3078 default:
3079 if (arg2)
3080 error ("%s for %<operator%s%> in %<%E %s %E%>",
3081 problem, opname, arg1, opname, arg2);
3082 else
3083 error ("%s for %<operator%s%> in %<%s%E%>",
3084 problem, opname, opname, arg1);
3085 break;
3089 /* Return the implicit conversion sequence that could be used to
3090 convert E1 to E2 in [expr.cond]. */
3092 static conversion *
3093 conditional_conversion (tree e1, tree e2)
3095 tree t1 = non_reference (TREE_TYPE (e1));
3096 tree t2 = non_reference (TREE_TYPE (e2));
3097 conversion *conv;
3098 bool good_base;
3100 /* [expr.cond]
3102 If E2 is an lvalue: E1 can be converted to match E2 if E1 can be
3103 implicitly converted (clause _conv_) to the type "reference to
3104 T2", subject to the constraint that in the conversion the
3105 reference must bind directly (_dcl.init.ref_) to E1. */
3106 if (real_lvalue_p (e2))
3108 conv = implicit_conversion (build_reference_type (t2),
3111 /*c_cast_p=*/false,
3112 LOOKUP_NO_TEMP_BIND);
3113 if (conv)
3114 return conv;
3117 /* [expr.cond]
3119 If E1 and E2 have class type, and the underlying class types are
3120 the same or one is a base class of the other: E1 can be converted
3121 to match E2 if the class of T2 is the same type as, or a base
3122 class of, the class of T1, and the cv-qualification of T2 is the
3123 same cv-qualification as, or a greater cv-qualification than, the
3124 cv-qualification of T1. If the conversion is applied, E1 is
3125 changed to an rvalue of type T2 that still refers to the original
3126 source class object (or the appropriate subobject thereof). */
3127 if (CLASS_TYPE_P (t1) && CLASS_TYPE_P (t2)
3128 && ((good_base = DERIVED_FROM_P (t2, t1)) || DERIVED_FROM_P (t1, t2)))
3130 if (good_base && at_least_as_qualified_p (t2, t1))
3132 conv = build_identity_conv (t1, e1);
3133 if (!same_type_p (TYPE_MAIN_VARIANT (t1),
3134 TYPE_MAIN_VARIANT (t2)))
3135 conv = build_conv (ck_base, t2, conv);
3136 else
3137 conv = build_conv (ck_rvalue, t2, conv);
3138 return conv;
3140 else
3141 return NULL;
3143 else
3144 /* [expr.cond]
3146 Otherwise: E1 can be converted to match E2 if E1 can be implicitly
3147 converted to the type that expression E2 would have if E2 were
3148 converted to an rvalue (or the type it has, if E2 is an rvalue). */
3149 return implicit_conversion (t2, t1, e1, /*c_cast_p=*/false,
3150 LOOKUP_NORMAL);
3153 /* Implement [expr.cond]. ARG1, ARG2, and ARG3 are the three
3154 arguments to the conditional expression. */
3156 tree
3157 build_conditional_expr (tree arg1, tree arg2, tree arg3)
3159 tree arg2_type;
3160 tree arg3_type;
3161 tree result = NULL_TREE;
3162 tree result_type = NULL_TREE;
3163 bool lvalue_p = true;
3164 struct z_candidate *candidates = 0;
3165 struct z_candidate *cand;
3166 void *p;
3168 /* As a G++ extension, the second argument to the conditional can be
3169 omitted. (So that `a ? : c' is roughly equivalent to `a ? a :
3170 c'.) If the second operand is omitted, make sure it is
3171 calculated only once. */
3172 if (!arg2)
3174 if (pedantic)
3175 pedwarn ("ISO C++ forbids omitting the middle term of a ?: expression");
3177 /* Make sure that lvalues remain lvalues. See g++.oliva/ext1.C. */
3178 if (real_lvalue_p (arg1))
3179 arg2 = arg1 = stabilize_reference (arg1);
3180 else
3181 arg2 = arg1 = save_expr (arg1);
3184 /* [expr.cond]
3186 The first expr ession is implicitly converted to bool (clause
3187 _conv_). */
3188 arg1 = perform_implicit_conversion (boolean_type_node, arg1);
3190 /* If something has already gone wrong, just pass that fact up the
3191 tree. */
3192 if (error_operand_p (arg1)
3193 || error_operand_p (arg2)
3194 || error_operand_p (arg3))
3195 return error_mark_node;
3197 /* [expr.cond]
3199 If either the second or the third operand has type (possibly
3200 cv-qualified) void, then the lvalue-to-rvalue (_conv.lval_),
3201 array-to-pointer (_conv.array_), and function-to-pointer
3202 (_conv.func_) standard conversions are performed on the second
3203 and third operands. */
3204 arg2_type = TREE_TYPE (arg2);
3205 arg3_type = TREE_TYPE (arg3);
3206 if (VOID_TYPE_P (arg2_type) || VOID_TYPE_P (arg3_type))
3208 /* Do the conversions. We don't these for `void' type arguments
3209 since it can't have any effect and since decay_conversion
3210 does not handle that case gracefully. */
3211 if (!VOID_TYPE_P (arg2_type))
3212 arg2 = decay_conversion (arg2);
3213 if (!VOID_TYPE_P (arg3_type))
3214 arg3 = decay_conversion (arg3);
3215 arg2_type = TREE_TYPE (arg2);
3216 arg3_type = TREE_TYPE (arg3);
3218 /* [expr.cond]
3220 One of the following shall hold:
3222 --The second or the third operand (but not both) is a
3223 throw-expression (_except.throw_); the result is of the
3224 type of the other and is an rvalue.
3226 --Both the second and the third operands have type void; the
3227 result is of type void and is an rvalue.
3229 We must avoid calling force_rvalue for expressions of type
3230 "void" because it will complain that their value is being
3231 used. */
3232 if (TREE_CODE (arg2) == THROW_EXPR
3233 && TREE_CODE (arg3) != THROW_EXPR)
3235 if (!VOID_TYPE_P (arg3_type))
3236 arg3 = force_rvalue (arg3);
3237 arg3_type = TREE_TYPE (arg3);
3238 result_type = arg3_type;
3240 else if (TREE_CODE (arg2) != THROW_EXPR
3241 && TREE_CODE (arg3) == THROW_EXPR)
3243 if (!VOID_TYPE_P (arg2_type))
3244 arg2 = force_rvalue (arg2);
3245 arg2_type = TREE_TYPE (arg2);
3246 result_type = arg2_type;
3248 else if (VOID_TYPE_P (arg2_type) && VOID_TYPE_P (arg3_type))
3249 result_type = void_type_node;
3250 else
3252 error ("%qE has type %<void%> and is not a throw-expression",
3253 VOID_TYPE_P (arg2_type) ? arg2 : arg3);
3254 return error_mark_node;
3257 lvalue_p = false;
3258 goto valid_operands;
3260 /* [expr.cond]
3262 Otherwise, if the second and third operand have different types,
3263 and either has (possibly cv-qualified) class type, an attempt is
3264 made to convert each of those operands to the type of the other. */
3265 else if (!same_type_p (arg2_type, arg3_type)
3266 && (CLASS_TYPE_P (arg2_type) || CLASS_TYPE_P (arg3_type)))
3268 conversion *conv2;
3269 conversion *conv3;
3271 /* Get the high-water mark for the CONVERSION_OBSTACK. */
3272 p = conversion_obstack_alloc (0);
3274 conv2 = conditional_conversion (arg2, arg3);
3275 conv3 = conditional_conversion (arg3, arg2);
3277 /* [expr.cond]
3279 If both can be converted, or one can be converted but the
3280 conversion is ambiguous, the program is ill-formed. If
3281 neither can be converted, the operands are left unchanged and
3282 further checking is performed as described below. If exactly
3283 one conversion is possible, that conversion is applied to the
3284 chosen operand and the converted operand is used in place of
3285 the original operand for the remainder of this section. */
3286 if ((conv2 && !conv2->bad_p
3287 && conv3 && !conv3->bad_p)
3288 || (conv2 && conv2->kind == ck_ambig)
3289 || (conv3 && conv3->kind == ck_ambig))
3291 error ("operands to ?: have different types");
3292 result = error_mark_node;
3294 else if (conv2 && (!conv2->bad_p || !conv3))
3296 arg2 = convert_like (conv2, arg2);
3297 arg2 = convert_from_reference (arg2);
3298 arg2_type = TREE_TYPE (arg2);
3299 /* Even if CONV2 is a valid conversion, the result of the
3300 conversion may be invalid. For example, if ARG3 has type
3301 "volatile X", and X does not have a copy constructor
3302 accepting a "volatile X&", then even if ARG2 can be
3303 converted to X, the conversion will fail. */
3304 if (error_operand_p (arg2))
3305 result = error_mark_node;
3307 else if (conv3 && (!conv3->bad_p || !conv2))
3309 arg3 = convert_like (conv3, arg3);
3310 arg3 = convert_from_reference (arg3);
3311 arg3_type = TREE_TYPE (arg3);
3312 if (error_operand_p (arg3))
3313 result = error_mark_node;
3316 /* Free all the conversions we allocated. */
3317 obstack_free (&conversion_obstack, p);
3319 if (result)
3320 return result;
3322 /* If, after the conversion, both operands have class type,
3323 treat the cv-qualification of both operands as if it were the
3324 union of the cv-qualification of the operands.
3326 The standard is not clear about what to do in this
3327 circumstance. For example, if the first operand has type
3328 "const X" and the second operand has a user-defined
3329 conversion to "volatile X", what is the type of the second
3330 operand after this step? Making it be "const X" (matching
3331 the first operand) seems wrong, as that discards the
3332 qualification without actually performing a copy. Leaving it
3333 as "volatile X" seems wrong as that will result in the
3334 conditional expression failing altogether, even though,
3335 according to this step, the one operand could be converted to
3336 the type of the other. */
3337 if ((conv2 || conv3)
3338 && CLASS_TYPE_P (arg2_type)
3339 && TYPE_QUALS (arg2_type) != TYPE_QUALS (arg3_type))
3340 arg2_type = arg3_type =
3341 cp_build_qualified_type (arg2_type,
3342 TYPE_QUALS (arg2_type)
3343 | TYPE_QUALS (arg3_type));
3346 /* [expr.cond]
3348 If the second and third operands are lvalues and have the same
3349 type, the result is of that type and is an lvalue. */
3350 if (real_lvalue_p (arg2)
3351 && real_lvalue_p (arg3)
3352 && same_type_p (arg2_type, arg3_type))
3354 result_type = arg2_type;
3355 goto valid_operands;
3358 /* [expr.cond]
3360 Otherwise, the result is an rvalue. If the second and third
3361 operand do not have the same type, and either has (possibly
3362 cv-qualified) class type, overload resolution is used to
3363 determine the conversions (if any) to be applied to the operands
3364 (_over.match.oper_, _over.built_). */
3365 lvalue_p = false;
3366 if (!same_type_p (arg2_type, arg3_type)
3367 && (CLASS_TYPE_P (arg2_type) || CLASS_TYPE_P (arg3_type)))
3369 tree args[3];
3370 conversion *conv;
3371 bool any_viable_p;
3373 /* Rearrange the arguments so that add_builtin_candidate only has
3374 to know about two args. In build_builtin_candidates, the
3375 arguments are unscrambled. */
3376 args[0] = arg2;
3377 args[1] = arg3;
3378 args[2] = arg1;
3379 add_builtin_candidates (&candidates,
3380 COND_EXPR,
3381 NOP_EXPR,
3382 ansi_opname (COND_EXPR),
3383 args,
3384 LOOKUP_NORMAL);
3386 /* [expr.cond]
3388 If the overload resolution fails, the program is
3389 ill-formed. */
3390 candidates = splice_viable (candidates, pedantic, &any_viable_p);
3391 if (!any_viable_p)
3393 op_error (COND_EXPR, NOP_EXPR, arg1, arg2, arg3, "no match");
3394 print_z_candidates (candidates);
3395 return error_mark_node;
3397 cand = tourney (candidates);
3398 if (!cand)
3400 op_error (COND_EXPR, NOP_EXPR, arg1, arg2, arg3, "no match");
3401 print_z_candidates (candidates);
3402 return error_mark_node;
3405 /* [expr.cond]
3407 Otherwise, the conversions thus determined are applied, and
3408 the converted operands are used in place of the original
3409 operands for the remainder of this section. */
3410 conv = cand->convs[0];
3411 arg1 = convert_like (conv, arg1);
3412 conv = cand->convs[1];
3413 arg2 = convert_like (conv, arg2);
3414 conv = cand->convs[2];
3415 arg3 = convert_like (conv, arg3);
3418 /* [expr.cond]
3420 Lvalue-to-rvalue (_conv.lval_), array-to-pointer (_conv.array_),
3421 and function-to-pointer (_conv.func_) standard conversions are
3422 performed on the second and third operands.
3424 We need to force the lvalue-to-rvalue conversion here for class types,
3425 so we get TARGET_EXPRs; trying to deal with a COND_EXPR of class rvalues
3426 that isn't wrapped with a TARGET_EXPR plays havoc with exception
3427 regions. */
3429 arg2 = force_rvalue (arg2);
3430 if (!CLASS_TYPE_P (arg2_type))
3431 arg2_type = TREE_TYPE (arg2);
3433 arg3 = force_rvalue (arg3);
3434 if (!CLASS_TYPE_P (arg2_type))
3435 arg3_type = TREE_TYPE (arg3);
3437 if (arg2 == error_mark_node || arg3 == error_mark_node)
3438 return error_mark_node;
3440 /* [expr.cond]
3442 After those conversions, one of the following shall hold:
3444 --The second and third operands have the same type; the result is of
3445 that type. */
3446 if (same_type_p (arg2_type, arg3_type))
3447 result_type = arg2_type;
3448 /* [expr.cond]
3450 --The second and third operands have arithmetic or enumeration
3451 type; the usual arithmetic conversions are performed to bring
3452 them to a common type, and the result is of that type. */
3453 else if ((ARITHMETIC_TYPE_P (arg2_type)
3454 || TREE_CODE (arg2_type) == ENUMERAL_TYPE)
3455 && (ARITHMETIC_TYPE_P (arg3_type)
3456 || TREE_CODE (arg3_type) == ENUMERAL_TYPE))
3458 /* In this case, there is always a common type. */
3459 result_type = type_after_usual_arithmetic_conversions (arg2_type,
3460 arg3_type);
3462 if (TREE_CODE (arg2_type) == ENUMERAL_TYPE
3463 && TREE_CODE (arg3_type) == ENUMERAL_TYPE)
3464 warning (0, "enumeral mismatch in conditional expression: %qT vs %qT",
3465 arg2_type, arg3_type);
3466 else if (extra_warnings
3467 && ((TREE_CODE (arg2_type) == ENUMERAL_TYPE
3468 && !same_type_p (arg3_type, type_promotes_to (arg2_type)))
3469 || (TREE_CODE (arg3_type) == ENUMERAL_TYPE
3470 && !same_type_p (arg2_type, type_promotes_to (arg3_type)))))
3471 warning (0, "enumeral and non-enumeral type in conditional expression");
3473 arg2 = perform_implicit_conversion (result_type, arg2);
3474 arg3 = perform_implicit_conversion (result_type, arg3);
3476 /* [expr.cond]
3478 --The second and third operands have pointer type, or one has
3479 pointer type and the other is a null pointer constant; pointer
3480 conversions (_conv.ptr_) and qualification conversions
3481 (_conv.qual_) are performed to bring them to their composite
3482 pointer type (_expr.rel_). The result is of the composite
3483 pointer type.
3485 --The second and third operands have pointer to member type, or
3486 one has pointer to member type and the other is a null pointer
3487 constant; pointer to member conversions (_conv.mem_) and
3488 qualification conversions (_conv.qual_) are performed to bring
3489 them to a common type, whose cv-qualification shall match the
3490 cv-qualification of either the second or the third operand.
3491 The result is of the common type. */
3492 else if ((null_ptr_cst_p (arg2)
3493 && (TYPE_PTR_P (arg3_type) || TYPE_PTR_TO_MEMBER_P (arg3_type)))
3494 || (null_ptr_cst_p (arg3)
3495 && (TYPE_PTR_P (arg2_type) || TYPE_PTR_TO_MEMBER_P (arg2_type)))
3496 || (TYPE_PTR_P (arg2_type) && TYPE_PTR_P (arg3_type))
3497 || (TYPE_PTRMEM_P (arg2_type) && TYPE_PTRMEM_P (arg3_type))
3498 || (TYPE_PTRMEMFUNC_P (arg2_type) && TYPE_PTRMEMFUNC_P (arg3_type)))
3500 result_type = composite_pointer_type (arg2_type, arg3_type, arg2,
3501 arg3, "conditional expression");
3502 if (result_type == error_mark_node)
3503 return error_mark_node;
3504 arg2 = perform_implicit_conversion (result_type, arg2);
3505 arg3 = perform_implicit_conversion (result_type, arg3);
3508 if (!result_type)
3510 error ("operands to ?: have different types");
3511 return error_mark_node;
3514 valid_operands:
3515 result = fold_if_not_in_template (build3 (COND_EXPR, result_type, arg1,
3516 arg2, arg3));
3517 /* We can't use result_type below, as fold might have returned a
3518 throw_expr. */
3520 /* Expand both sides into the same slot, hopefully the target of the
3521 ?: expression. We used to check for TARGET_EXPRs here, but now we
3522 sometimes wrap them in NOP_EXPRs so the test would fail. */
3523 if (!lvalue_p && CLASS_TYPE_P (TREE_TYPE (result)))
3524 result = get_target_expr (result);
3526 /* If this expression is an rvalue, but might be mistaken for an
3527 lvalue, we must add a NON_LVALUE_EXPR. */
3528 if (!lvalue_p && real_lvalue_p (result))
3529 result = rvalue (result);
3531 return result;
3534 /* OPERAND is an operand to an expression. Perform necessary steps
3535 required before using it. If OPERAND is NULL_TREE, NULL_TREE is
3536 returned. */
3538 static tree
3539 prep_operand (tree operand)
3541 if (operand)
3543 if (CLASS_TYPE_P (TREE_TYPE (operand))
3544 && CLASSTYPE_TEMPLATE_INSTANTIATION (TREE_TYPE (operand)))
3545 /* Make sure the template type is instantiated now. */
3546 instantiate_class_template (TYPE_MAIN_VARIANT (TREE_TYPE (operand)));
3549 return operand;
3552 /* Add each of the viable functions in FNS (a FUNCTION_DECL or
3553 OVERLOAD) to the CANDIDATES, returning an updated list of
3554 CANDIDATES. The ARGS are the arguments provided to the call,
3555 without any implicit object parameter. The EXPLICIT_TARGS are
3556 explicit template arguments provided. TEMPLATE_ONLY is true if
3557 only template functions should be considered. CONVERSION_PATH,
3558 ACCESS_PATH, and FLAGS are as for add_function_candidate. */
3560 static void
3561 add_candidates (tree fns, tree args,
3562 tree explicit_targs, bool template_only,
3563 tree conversion_path, tree access_path,
3564 int flags,
3565 struct z_candidate **candidates)
3567 tree ctype;
3568 tree non_static_args;
3570 ctype = conversion_path ? BINFO_TYPE (conversion_path) : NULL_TREE;
3571 /* Delay creating the implicit this parameter until it is needed. */
3572 non_static_args = NULL_TREE;
3574 while (fns)
3576 tree fn;
3577 tree fn_args;
3579 fn = OVL_CURRENT (fns);
3580 /* Figure out which set of arguments to use. */
3581 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
3583 /* If this function is a non-static member, prepend the implicit
3584 object parameter. */
3585 if (!non_static_args)
3586 non_static_args = tree_cons (NULL_TREE,
3587 build_this (TREE_VALUE (args)),
3588 TREE_CHAIN (args));
3589 fn_args = non_static_args;
3591 else
3592 /* Otherwise, just use the list of arguments provided. */
3593 fn_args = args;
3595 if (TREE_CODE (fn) == TEMPLATE_DECL)
3596 add_template_candidate (candidates,
3598 ctype,
3599 explicit_targs,
3600 fn_args,
3601 NULL_TREE,
3602 access_path,
3603 conversion_path,
3604 flags,
3605 DEDUCE_CALL);
3606 else if (!template_only)
3607 add_function_candidate (candidates,
3609 ctype,
3610 fn_args,
3611 access_path,
3612 conversion_path,
3613 flags);
3614 fns = OVL_NEXT (fns);
3618 tree
3619 build_new_op (enum tree_code code, int flags, tree arg1, tree arg2, tree arg3,
3620 bool *overloaded_p)
3622 struct z_candidate *candidates = 0, *cand;
3623 tree arglist, fnname;
3624 tree args[3];
3625 tree result = NULL_TREE;
3626 bool result_valid_p = false;
3627 enum tree_code code2 = NOP_EXPR;
3628 conversion *conv;
3629 void *p;
3630 bool strict_p;
3631 bool any_viable_p;
3633 if (error_operand_p (arg1)
3634 || error_operand_p (arg2)
3635 || error_operand_p (arg3))
3636 return error_mark_node;
3638 if (code == MODIFY_EXPR)
3640 code2 = TREE_CODE (arg3);
3641 arg3 = NULL_TREE;
3642 fnname = ansi_assopname (code2);
3644 else
3645 fnname = ansi_opname (code);
3647 arg1 = prep_operand (arg1);
3649 switch (code)
3651 case NEW_EXPR:
3652 case VEC_NEW_EXPR:
3653 case VEC_DELETE_EXPR:
3654 case DELETE_EXPR:
3655 /* Use build_op_new_call and build_op_delete_call instead. */
3656 gcc_unreachable ();
3658 case CALL_EXPR:
3659 return build_object_call (arg1, arg2);
3661 default:
3662 break;
3665 arg2 = prep_operand (arg2);
3666 arg3 = prep_operand (arg3);
3668 if (code == COND_EXPR)
3670 if (arg2 == NULL_TREE
3671 || TREE_CODE (TREE_TYPE (arg2)) == VOID_TYPE
3672 || TREE_CODE (TREE_TYPE (arg3)) == VOID_TYPE
3673 || (! IS_OVERLOAD_TYPE (TREE_TYPE (arg2))
3674 && ! IS_OVERLOAD_TYPE (TREE_TYPE (arg3))))
3675 goto builtin;
3677 else if (! IS_OVERLOAD_TYPE (TREE_TYPE (arg1))
3678 && (! arg2 || ! IS_OVERLOAD_TYPE (TREE_TYPE (arg2))))
3679 goto builtin;
3681 if (code == POSTINCREMENT_EXPR || code == POSTDECREMENT_EXPR)
3682 arg2 = integer_zero_node;
3684 arglist = NULL_TREE;
3685 if (arg3)
3686 arglist = tree_cons (NULL_TREE, arg3, arglist);
3687 if (arg2)
3688 arglist = tree_cons (NULL_TREE, arg2, arglist);
3689 arglist = tree_cons (NULL_TREE, arg1, arglist);
3691 /* Get the high-water mark for the CONVERSION_OBSTACK. */
3692 p = conversion_obstack_alloc (0);
3694 /* Add namespace-scope operators to the list of functions to
3695 consider. */
3696 add_candidates (lookup_function_nonclass (fnname, arglist, /*block_p=*/true),
3697 arglist, NULL_TREE, false, NULL_TREE, NULL_TREE,
3698 flags, &candidates);
3699 /* Add class-member operators to the candidate set. */
3700 if (CLASS_TYPE_P (TREE_TYPE (arg1)))
3702 tree fns;
3704 fns = lookup_fnfields (TREE_TYPE (arg1), fnname, 1);
3705 if (fns == error_mark_node)
3707 result = error_mark_node;
3708 goto user_defined_result_ready;
3710 if (fns)
3711 add_candidates (BASELINK_FUNCTIONS (fns), arglist,
3712 NULL_TREE, false,
3713 BASELINK_BINFO (fns),
3714 TYPE_BINFO (TREE_TYPE (arg1)),
3715 flags, &candidates);
3718 /* Rearrange the arguments for ?: so that add_builtin_candidate only has
3719 to know about two args; a builtin candidate will always have a first
3720 parameter of type bool. We'll handle that in
3721 build_builtin_candidate. */
3722 if (code == COND_EXPR)
3724 args[0] = arg2;
3725 args[1] = arg3;
3726 args[2] = arg1;
3728 else
3730 args[0] = arg1;
3731 args[1] = arg2;
3732 args[2] = NULL_TREE;
3735 add_builtin_candidates (&candidates, code, code2, fnname, args, flags);
3737 switch (code)
3739 case COMPOUND_EXPR:
3740 case ADDR_EXPR:
3741 /* For these, the built-in candidates set is empty
3742 [over.match.oper]/3. We don't want non-strict matches
3743 because exact matches are always possible with built-in
3744 operators. The built-in candidate set for COMPONENT_REF
3745 would be empty too, but since there are no such built-in
3746 operators, we accept non-strict matches for them. */
3747 strict_p = true;
3748 break;
3750 default:
3751 strict_p = pedantic;
3752 break;
3755 candidates = splice_viable (candidates, strict_p, &any_viable_p);
3756 if (!any_viable_p)
3758 switch (code)
3760 case POSTINCREMENT_EXPR:
3761 case POSTDECREMENT_EXPR:
3762 /* Look for an `operator++ (int)'. If they didn't have
3763 one, then we fall back to the old way of doing things. */
3764 if (flags & LOOKUP_COMPLAIN)
3765 pedwarn ("no %<%D(int)%> declared for postfix %qs, "
3766 "trying prefix operator instead",
3767 fnname,
3768 operator_name_info[code].name);
3769 if (code == POSTINCREMENT_EXPR)
3770 code = PREINCREMENT_EXPR;
3771 else
3772 code = PREDECREMENT_EXPR;
3773 result = build_new_op (code, flags, arg1, NULL_TREE, NULL_TREE,
3774 overloaded_p);
3775 break;
3777 /* The caller will deal with these. */
3778 case ADDR_EXPR:
3779 case COMPOUND_EXPR:
3780 case COMPONENT_REF:
3781 result = NULL_TREE;
3782 result_valid_p = true;
3783 break;
3785 default:
3786 if (flags & LOOKUP_COMPLAIN)
3788 op_error (code, code2, arg1, arg2, arg3, "no match");
3789 print_z_candidates (candidates);
3791 result = error_mark_node;
3792 break;
3795 else
3797 cand = tourney (candidates);
3798 if (cand == 0)
3800 if (flags & LOOKUP_COMPLAIN)
3802 op_error (code, code2, arg1, arg2, arg3, "ambiguous overload");
3803 print_z_candidates (candidates);
3805 result = error_mark_node;
3807 else if (TREE_CODE (cand->fn) == FUNCTION_DECL)
3809 if (overloaded_p)
3810 *overloaded_p = true;
3812 result = build_over_call (cand, LOOKUP_NORMAL);
3814 else
3816 /* Give any warnings we noticed during overload resolution. */
3817 if (cand->warnings)
3819 struct candidate_warning *w;
3820 for (w = cand->warnings; w; w = w->next)
3821 joust (cand, w->loser, 1);
3824 /* Check for comparison of different enum types. */
3825 switch (code)
3827 case GT_EXPR:
3828 case LT_EXPR:
3829 case GE_EXPR:
3830 case LE_EXPR:
3831 case EQ_EXPR:
3832 case NE_EXPR:
3833 if (TREE_CODE (TREE_TYPE (arg1)) == ENUMERAL_TYPE
3834 && TREE_CODE (TREE_TYPE (arg2)) == ENUMERAL_TYPE
3835 && (TYPE_MAIN_VARIANT (TREE_TYPE (arg1))
3836 != TYPE_MAIN_VARIANT (TREE_TYPE (arg2))))
3838 warning (0, "comparison between %q#T and %q#T",
3839 TREE_TYPE (arg1), TREE_TYPE (arg2));
3841 break;
3842 default:
3843 break;
3846 /* We need to strip any leading REF_BIND so that bitfields
3847 don't cause errors. This should not remove any important
3848 conversions, because builtins don't apply to class
3849 objects directly. */
3850 conv = cand->convs[0];
3851 if (conv->kind == ck_ref_bind)
3852 conv = conv->u.next;
3853 arg1 = convert_like (conv, arg1);
3854 if (arg2)
3856 conv = cand->convs[1];
3857 if (conv->kind == ck_ref_bind)
3858 conv = conv->u.next;
3859 arg2 = convert_like (conv, arg2);
3861 if (arg3)
3863 conv = cand->convs[2];
3864 if (conv->kind == ck_ref_bind)
3865 conv = conv->u.next;
3866 arg3 = convert_like (conv, arg3);
3871 user_defined_result_ready:
3873 /* Free all the conversions we allocated. */
3874 obstack_free (&conversion_obstack, p);
3876 if (result || result_valid_p)
3877 return result;
3879 builtin:
3880 switch (code)
3882 case MODIFY_EXPR:
3883 return build_modify_expr (arg1, code2, arg2);
3885 case INDIRECT_REF:
3886 return build_indirect_ref (arg1, "unary *");
3888 case PLUS_EXPR:
3889 case MINUS_EXPR:
3890 case MULT_EXPR:
3891 case TRUNC_DIV_EXPR:
3892 case GT_EXPR:
3893 case LT_EXPR:
3894 case GE_EXPR:
3895 case LE_EXPR:
3896 case EQ_EXPR:
3897 case NE_EXPR:
3898 case MAX_EXPR:
3899 case MIN_EXPR:
3900 case LSHIFT_EXPR:
3901 case RSHIFT_EXPR:
3902 case TRUNC_MOD_EXPR:
3903 case BIT_AND_EXPR:
3904 case BIT_IOR_EXPR:
3905 case BIT_XOR_EXPR:
3906 case TRUTH_ANDIF_EXPR:
3907 case TRUTH_ORIF_EXPR:
3908 return cp_build_binary_op (code, arg1, arg2);
3910 case UNARY_PLUS_EXPR:
3911 case NEGATE_EXPR:
3912 case BIT_NOT_EXPR:
3913 case TRUTH_NOT_EXPR:
3914 case PREINCREMENT_EXPR:
3915 case POSTINCREMENT_EXPR:
3916 case PREDECREMENT_EXPR:
3917 case POSTDECREMENT_EXPR:
3918 case REALPART_EXPR:
3919 case IMAGPART_EXPR:
3920 return build_unary_op (code, arg1, candidates != 0);
3922 case ARRAY_REF:
3923 return build_array_ref (arg1, arg2);
3925 case COND_EXPR:
3926 return build_conditional_expr (arg1, arg2, arg3);
3928 case MEMBER_REF:
3929 return build_m_component_ref (build_indirect_ref (arg1, NULL), arg2);
3931 /* The caller will deal with these. */
3932 case ADDR_EXPR:
3933 case COMPONENT_REF:
3934 case COMPOUND_EXPR:
3935 return NULL_TREE;
3937 default:
3938 gcc_unreachable ();
3940 return NULL_TREE;
3943 /* Build a call to operator delete. This has to be handled very specially,
3944 because the restrictions on what signatures match are different from all
3945 other call instances. For a normal delete, only a delete taking (void *)
3946 or (void *, size_t) is accepted. For a placement delete, only an exact
3947 match with the placement new is accepted.
3949 CODE is either DELETE_EXPR or VEC_DELETE_EXPR.
3950 ADDR is the pointer to be deleted.
3951 SIZE is the size of the memory block to be deleted.
3952 GLOBAL_P is true if the delete-expression should not consider
3953 class-specific delete operators.
3954 PLACEMENT is the corresponding placement new call, or NULL_TREE. */
3956 tree
3957 build_op_delete_call (enum tree_code code, tree addr, tree size,
3958 bool global_p, tree placement)
3960 tree fn = NULL_TREE;
3961 tree fns, fnname, argtypes, args, type;
3962 int pass;
3964 if (addr == error_mark_node)
3965 return error_mark_node;
3967 type = strip_array_types (TREE_TYPE (TREE_TYPE (addr)));
3969 fnname = ansi_opname (code);
3971 if (CLASS_TYPE_P (type)
3972 && COMPLETE_TYPE_P (complete_type (type))
3973 && !global_p)
3974 /* In [class.free]
3976 If the result of the lookup is ambiguous or inaccessible, or if
3977 the lookup selects a placement deallocation function, the
3978 program is ill-formed.
3980 Therefore, we ask lookup_fnfields to complain about ambiguity. */
3982 fns = lookup_fnfields (TYPE_BINFO (type), fnname, 1);
3983 if (fns == error_mark_node)
3984 return error_mark_node;
3986 else
3987 fns = NULL_TREE;
3989 if (fns == NULL_TREE)
3990 fns = lookup_name_nonclass (fnname);
3992 if (placement)
3994 tree alloc_fn;
3995 tree call_expr;
3997 /* Find the allocation function that is being called. */
3998 call_expr = placement;
3999 /* Extract the function. */
4000 alloc_fn = get_callee_fndecl (call_expr);
4001 gcc_assert (alloc_fn != NULL_TREE);
4002 /* Then the second parm type. */
4003 argtypes = TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (alloc_fn)));
4004 /* Also the second argument. */
4005 args = TREE_CHAIN (TREE_OPERAND (call_expr, 1));
4007 else
4009 /* First try it without the size argument. */
4010 argtypes = void_list_node;
4011 args = NULL_TREE;
4014 /* Strip const and volatile from addr. */
4015 addr = cp_convert (ptr_type_node, addr);
4017 /* We make two tries at finding a matching `operator delete'. On
4018 the first pass, we look for a one-operator (or placement)
4019 operator delete. If we're not doing placement delete, then on
4020 the second pass we look for a two-argument delete. */
4021 for (pass = 0; pass < (placement ? 1 : 2); ++pass)
4023 /* Go through the `operator delete' functions looking for one
4024 with a matching type. */
4025 for (fn = BASELINK_P (fns) ? BASELINK_FUNCTIONS (fns) : fns;
4027 fn = OVL_NEXT (fn))
4029 tree t;
4031 /* The first argument must be "void *". */
4032 t = TYPE_ARG_TYPES (TREE_TYPE (OVL_CURRENT (fn)));
4033 if (!same_type_p (TREE_VALUE (t), ptr_type_node))
4034 continue;
4035 t = TREE_CHAIN (t);
4036 /* On the first pass, check the rest of the arguments. */
4037 if (pass == 0)
4039 tree a = argtypes;
4040 while (a && t)
4042 if (!same_type_p (TREE_VALUE (a), TREE_VALUE (t)))
4043 break;
4044 a = TREE_CHAIN (a);
4045 t = TREE_CHAIN (t);
4047 if (!a && !t)
4048 break;
4050 /* On the second pass, the second argument must be
4051 "size_t". */
4052 else if (pass == 1
4053 && same_type_p (TREE_VALUE (t), sizetype)
4054 && TREE_CHAIN (t) == void_list_node)
4055 break;
4058 /* If we found a match, we're done. */
4059 if (fn)
4060 break;
4063 /* If we have a matching function, call it. */
4064 if (fn)
4066 /* Make sure we have the actual function, and not an
4067 OVERLOAD. */
4068 fn = OVL_CURRENT (fn);
4070 /* If the FN is a member function, make sure that it is
4071 accessible. */
4072 if (DECL_CLASS_SCOPE_P (fn))
4073 perform_or_defer_access_check (TYPE_BINFO (type), fn);
4075 if (pass == 0)
4076 args = tree_cons (NULL_TREE, addr, args);
4077 else
4078 args = tree_cons (NULL_TREE, addr,
4079 build_tree_list (NULL_TREE, size));
4081 if (placement)
4083 /* The placement args might not be suitable for overload
4084 resolution at this point, so build the call directly. */
4085 mark_used (fn);
4086 return build_cxx_call (fn, args);
4088 else
4089 return build_function_call (fn, args);
4092 /* If we are doing placement delete we do nothing if we don't find a
4093 matching op delete. */
4094 if (placement)
4095 return NULL_TREE;
4097 error ("no suitable %<operator %s%> for %qT",
4098 operator_name_info[(int)code].name, type);
4099 return error_mark_node;
4102 /* If the current scope isn't allowed to access DECL along
4103 BASETYPE_PATH, give an error. The most derived class in
4104 BASETYPE_PATH is the one used to qualify DECL. */
4106 bool
4107 enforce_access (tree basetype_path, tree decl)
4109 gcc_assert (TREE_CODE (basetype_path) == TREE_BINFO);
4111 if (!accessible_p (basetype_path, decl, true))
4113 if (TREE_PRIVATE (decl))
4114 error ("%q+#D is private", decl);
4115 else if (TREE_PROTECTED (decl))
4116 error ("%q+#D is protected", decl);
4117 else
4118 error ("%q+#D is inaccessible", decl);
4119 error ("within this context");
4120 return false;
4123 return true;
4126 /* Check that a callable constructor to initialize a temporary of
4127 TYPE from an EXPR exists. */
4129 static void
4130 check_constructor_callable (tree type, tree expr)
4132 build_special_member_call (NULL_TREE,
4133 complete_ctor_identifier,
4134 build_tree_list (NULL_TREE, expr),
4135 type,
4136 LOOKUP_NORMAL | LOOKUP_ONLYCONVERTING
4137 | LOOKUP_NO_CONVERSION
4138 | LOOKUP_CONSTRUCTOR_CALLABLE);
4141 /* Initialize a temporary of type TYPE with EXPR. The FLAGS are a
4142 bitwise or of LOOKUP_* values. If any errors are warnings are
4143 generated, set *DIAGNOSTIC_FN to "error" or "warning",
4144 respectively. If no diagnostics are generated, set *DIAGNOSTIC_FN
4145 to NULL. */
4147 static tree
4148 build_temp (tree expr, tree type, int flags,
4149 diagnostic_fn_t *diagnostic_fn)
4151 int savew, savee;
4153 savew = warningcount, savee = errorcount;
4154 expr = build_special_member_call (NULL_TREE,
4155 complete_ctor_identifier,
4156 build_tree_list (NULL_TREE, expr),
4157 type, flags);
4158 if (warningcount > savew)
4159 *diagnostic_fn = warning0;
4160 else if (errorcount > savee)
4161 *diagnostic_fn = error;
4162 else
4163 *diagnostic_fn = NULL;
4164 return expr;
4168 /* Perform the conversions in CONVS on the expression EXPR. FN and
4169 ARGNUM are used for diagnostics. ARGNUM is zero based, -1
4170 indicates the `this' argument of a method. INNER is nonzero when
4171 being called to continue a conversion chain. It is negative when a
4172 reference binding will be applied, positive otherwise. If
4173 ISSUE_CONVERSION_WARNINGS is true, warnings about suspicious
4174 conversions will be emitted if appropriate. If C_CAST_P is true,
4175 this conversion is coming from a C-style cast; in that case,
4176 conversions to inaccessible bases are permitted. */
4178 static tree
4179 convert_like_real (conversion *convs, tree expr, tree fn, int argnum,
4180 int inner, bool issue_conversion_warnings,
4181 bool c_cast_p)
4183 tree totype = convs->type;
4184 diagnostic_fn_t diagnostic_fn;
4186 if (convs->bad_p
4187 && convs->kind != ck_user
4188 && convs->kind != ck_ambig
4189 && convs->kind != ck_ref_bind)
4191 conversion *t = convs;
4192 for (; t; t = convs->u.next)
4194 if (t->kind == ck_user || !t->bad_p)
4196 expr = convert_like_real (t, expr, fn, argnum, 1,
4197 /*issue_conversion_warnings=*/false,
4198 /*c_cast_p=*/false);
4199 break;
4201 else if (t->kind == ck_ambig)
4202 return convert_like_real (t, expr, fn, argnum, 1,
4203 /*issue_conversion_warnings=*/false,
4204 /*c_cast_p=*/false);
4205 else if (t->kind == ck_identity)
4206 break;
4208 pedwarn ("invalid conversion from %qT to %qT", TREE_TYPE (expr), totype);
4209 if (fn)
4210 pedwarn (" initializing argument %P of %qD", argnum, fn);
4211 return cp_convert (totype, expr);
4214 if (issue_conversion_warnings)
4216 tree t = non_reference (totype);
4218 /* Issue warnings about peculiar, but valid, uses of NULL. */
4219 if (ARITHMETIC_TYPE_P (t) && expr == null_node)
4221 if (fn)
4222 warning (0, "passing NULL to non-pointer argument %P of %qD",
4223 argnum, fn);
4224 else
4225 warning (0, "converting to non-pointer type %qT from NULL", t);
4228 /* Warn about assigning a floating-point type to an integer type. */
4229 if (TREE_CODE (TREE_TYPE (expr)) == REAL_TYPE
4230 && TREE_CODE (t) == INTEGER_TYPE)
4232 if (fn)
4233 warning (0, "passing %qT for argument %P to %qD",
4234 TREE_TYPE (expr), argnum, fn);
4235 else
4236 warning (0, "converting to %qT from %qT", t, TREE_TYPE (expr));
4240 switch (convs->kind)
4242 case ck_user:
4244 struct z_candidate *cand = convs->cand;
4245 tree convfn = cand->fn;
4246 tree args;
4248 if (DECL_CONSTRUCTOR_P (convfn))
4250 tree t = build_int_cst (build_pointer_type (DECL_CONTEXT (convfn)),
4253 args = build_tree_list (NULL_TREE, expr);
4254 /* We should never try to call the abstract or base constructor
4255 from here. */
4256 gcc_assert (!DECL_HAS_IN_CHARGE_PARM_P (convfn)
4257 && !DECL_HAS_VTT_PARM_P (convfn));
4258 args = tree_cons (NULL_TREE, t, args);
4260 else
4261 args = build_this (expr);
4262 expr = build_over_call (cand, LOOKUP_NORMAL);
4264 /* If this is a constructor or a function returning an aggr type,
4265 we need to build up a TARGET_EXPR. */
4266 if (DECL_CONSTRUCTOR_P (convfn))
4267 expr = build_cplus_new (totype, expr);
4269 /* The result of the call is then used to direct-initialize the object
4270 that is the destination of the copy-initialization. [dcl.init]
4272 Note that this step is not reflected in the conversion sequence;
4273 it affects the semantics when we actually perform the
4274 conversion, but is not considered during overload resolution.
4276 If the target is a class, that means call a ctor. */
4277 if (IS_AGGR_TYPE (totype)
4278 && (inner >= 0 || !lvalue_p (expr)))
4280 expr = (build_temp
4281 (expr, totype,
4282 /* Core issue 84, now a DR, says that we don't
4283 allow UDCs for these args (which deliberately
4284 breaks copy-init of an auto_ptr<Base> from an
4285 auto_ptr<Derived>). */
4286 LOOKUP_NORMAL|LOOKUP_ONLYCONVERTING|LOOKUP_NO_CONVERSION,
4287 &diagnostic_fn));
4289 if (diagnostic_fn)
4291 if (fn)
4292 diagnostic_fn
4293 (" initializing argument %P of %qD from result of %qD",
4294 argnum, fn, convfn);
4295 else
4296 diagnostic_fn
4297 (" initializing temporary from result of %qD", convfn);
4299 expr = build_cplus_new (totype, expr);
4301 return expr;
4303 case ck_identity:
4304 if (type_unknown_p (expr))
4305 expr = instantiate_type (totype, expr, tf_error | tf_warning);
4306 /* Convert a constant to its underlying value, unless we are
4307 about to bind it to a reference, in which case we need to
4308 leave it as an lvalue. */
4309 if (inner >= 0)
4310 expr = decl_constant_value (expr);
4311 if (convs->check_copy_constructor_p)
4312 check_constructor_callable (totype, expr);
4313 return expr;
4314 case ck_ambig:
4315 /* Call build_user_type_conversion again for the error. */
4316 return build_user_type_conversion
4317 (totype, convs->u.expr, LOOKUP_NORMAL);
4319 default:
4320 break;
4323 expr = convert_like_real (convs->u.next, expr, fn, argnum,
4324 convs->kind == ck_ref_bind ? -1 : 1,
4325 /*issue_conversion_warnings=*/false,
4326 c_cast_p);
4327 if (expr == error_mark_node)
4328 return error_mark_node;
4330 switch (convs->kind)
4332 case ck_rvalue:
4333 if (! IS_AGGR_TYPE (totype))
4334 return expr;
4335 /* Else fall through. */
4336 case ck_base:
4337 if (convs->kind == ck_base && !convs->need_temporary_p)
4339 /* We are going to bind a reference directly to a base-class
4340 subobject of EXPR. */
4341 if (convs->check_copy_constructor_p)
4342 check_constructor_callable (TREE_TYPE (expr), expr);
4343 /* Build an expression for `*((base*) &expr)'. */
4344 expr = build_unary_op (ADDR_EXPR, expr, 0);
4345 expr = convert_to_base (expr, build_pointer_type (totype),
4346 !c_cast_p, /*nonnull=*/true);
4347 expr = build_indirect_ref (expr, "implicit conversion");
4348 return expr;
4351 /* Copy-initialization where the cv-unqualified version of the source
4352 type is the same class as, or a derived class of, the class of the
4353 destination [is treated as direct-initialization]. [dcl.init] */
4354 expr = build_temp (expr, totype, LOOKUP_NORMAL|LOOKUP_ONLYCONVERTING,
4355 &diagnostic_fn);
4356 if (diagnostic_fn && fn)
4357 diagnostic_fn (" initializing argument %P of %qD", argnum, fn);
4358 return build_cplus_new (totype, expr);
4360 case ck_ref_bind:
4362 tree ref_type = totype;
4364 /* If necessary, create a temporary. */
4365 if (convs->need_temporary_p || !lvalue_p (expr))
4367 tree type = convs->u.next->type;
4368 cp_lvalue_kind lvalue = real_lvalue_p (expr);
4370 if (!CP_TYPE_CONST_NON_VOLATILE_P (TREE_TYPE (ref_type)))
4372 /* If the reference is volatile or non-const, we
4373 cannot create a temporary. */
4374 if (lvalue & clk_bitfield)
4375 error ("cannot bind bitfield %qE to %qT",
4376 expr, ref_type);
4377 else if (lvalue & clk_packed)
4378 error ("cannot bind packed field %qE to %qT",
4379 expr, ref_type);
4380 else
4381 error ("cannot bind rvalue %qE to %qT", expr, ref_type);
4382 return error_mark_node;
4384 /* If the source is a packed field, and we must use a copy
4385 constructor, then building the target expr will require
4386 binding the field to the reference parameter to the
4387 copy constructor, and we'll end up with an infinite
4388 loop. If we can use a bitwise copy, then we'll be
4389 OK. */
4390 if ((lvalue & clk_packed)
4391 && CLASS_TYPE_P (type)
4392 && !TYPE_HAS_TRIVIAL_INIT_REF (type))
4394 error ("cannot bind packed field %qE to %qT",
4395 expr, ref_type);
4396 return error_mark_node;
4398 expr = build_target_expr_with_type (expr, type);
4401 /* Take the address of the thing to which we will bind the
4402 reference. */
4403 expr = build_unary_op (ADDR_EXPR, expr, 1);
4404 if (expr == error_mark_node)
4405 return error_mark_node;
4407 /* Convert it to a pointer to the type referred to by the
4408 reference. This will adjust the pointer if a derived to
4409 base conversion is being performed. */
4410 expr = cp_convert (build_pointer_type (TREE_TYPE (ref_type)),
4411 expr);
4412 /* Convert the pointer to the desired reference type. */
4413 return build_nop (ref_type, expr);
4416 case ck_lvalue:
4417 return decay_conversion (expr);
4419 case ck_qual:
4420 /* Warn about deprecated conversion if appropriate. */
4421 string_conv_p (totype, expr, 1);
4422 break;
4424 case ck_ptr:
4425 if (convs->base_p)
4426 expr = convert_to_base (expr, totype, !c_cast_p,
4427 /*nonnull=*/false);
4428 return build_nop (totype, expr);
4430 case ck_pmem:
4431 return convert_ptrmem (totype, expr, /*allow_inverse_p=*/false,
4432 c_cast_p);
4434 default:
4435 break;
4438 if (issue_conversion_warnings)
4439 expr = convert_and_check (totype, expr);
4440 else
4441 expr = convert (totype, expr);
4443 return expr;
4446 /* Build a call to __builtin_trap. */
4448 static tree
4449 call_builtin_trap (void)
4451 tree fn = implicit_built_in_decls[BUILT_IN_TRAP];
4453 gcc_assert (fn != NULL);
4454 fn = build_call (fn, NULL_TREE);
4455 return fn;
4458 /* ARG is being passed to a varargs function. Perform any conversions
4459 required. Return the converted value. */
4461 tree
4462 convert_arg_to_ellipsis (tree arg)
4464 /* [expr.call]
4466 The lvalue-to-rvalue, array-to-pointer, and function-to-pointer
4467 standard conversions are performed. */
4468 arg = decay_conversion (arg);
4469 /* [expr.call]
4471 If the argument has integral or enumeration type that is subject
4472 to the integral promotions (_conv.prom_), or a floating point
4473 type that is subject to the floating point promotion
4474 (_conv.fpprom_), the value of the argument is converted to the
4475 promoted type before the call. */
4476 if (TREE_CODE (TREE_TYPE (arg)) == REAL_TYPE
4477 && (TYPE_PRECISION (TREE_TYPE (arg))
4478 < TYPE_PRECISION (double_type_node)))
4479 arg = convert_to_real (double_type_node, arg);
4480 else if (INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (arg)))
4481 arg = perform_integral_promotions (arg);
4483 arg = require_complete_type (arg);
4485 if (arg != error_mark_node
4486 && !pod_type_p (TREE_TYPE (arg)))
4488 /* Undefined behavior [expr.call] 5.2.2/7. We used to just warn
4489 here and do a bitwise copy, but now cp_expr_size will abort if we
4490 try to do that.
4491 If the call appears in the context of a sizeof expression,
4492 there is no need to emit a warning, since the expression won't be
4493 evaluated. We keep the builtin_trap just as a safety check. */
4494 if (!skip_evaluation)
4495 warning (0, "cannot pass objects of non-POD type %q#T through %<...%>; "
4496 "call will abort at runtime", TREE_TYPE (arg));
4497 arg = call_builtin_trap ();
4498 arg = build2 (COMPOUND_EXPR, integer_type_node, arg,
4499 integer_zero_node);
4502 return arg;
4505 /* va_arg (EXPR, TYPE) is a builtin. Make sure it is not abused. */
4507 tree
4508 build_x_va_arg (tree expr, tree type)
4510 if (processing_template_decl)
4511 return build_min (VA_ARG_EXPR, type, expr);
4513 type = complete_type_or_else (type, NULL_TREE);
4515 if (expr == error_mark_node || !type)
4516 return error_mark_node;
4518 if (! pod_type_p (type))
4520 /* Remove reference types so we don't ICE later on. */
4521 tree type1 = non_reference (type);
4522 /* Undefined behavior [expr.call] 5.2.2/7. */
4523 warning (0, "cannot receive objects of non-POD type %q#T through %<...%>; "
4524 "call will abort at runtime", type);
4525 expr = convert (build_pointer_type (type1), null_node);
4526 expr = build2 (COMPOUND_EXPR, TREE_TYPE (expr),
4527 call_builtin_trap (), expr);
4528 expr = build_indirect_ref (expr, NULL);
4529 return expr;
4532 return build_va_arg (expr, type);
4535 /* TYPE has been given to va_arg. Apply the default conversions which
4536 would have happened when passed via ellipsis. Return the promoted
4537 type, or the passed type if there is no change. */
4539 tree
4540 cxx_type_promotes_to (tree type)
4542 tree promote;
4544 /* Perform the array-to-pointer and function-to-pointer
4545 conversions. */
4546 type = type_decays_to (type);
4548 promote = type_promotes_to (type);
4549 if (same_type_p (type, promote))
4550 promote = type;
4552 return promote;
4555 /* ARG is a default argument expression being passed to a parameter of
4556 the indicated TYPE, which is a parameter to FN. Do any required
4557 conversions. Return the converted value. */
4559 tree
4560 convert_default_arg (tree type, tree arg, tree fn, int parmnum)
4562 /* If the ARG is an unparsed default argument expression, the
4563 conversion cannot be performed. */
4564 if (TREE_CODE (arg) == DEFAULT_ARG)
4566 error ("the default argument for parameter %d of %qD has "
4567 "not yet been parsed",
4568 parmnum, fn);
4569 return error_mark_node;
4572 if (fn && DECL_TEMPLATE_INFO (fn))
4573 arg = tsubst_default_argument (fn, type, arg);
4575 arg = break_out_target_exprs (arg);
4577 if (TREE_CODE (arg) == CONSTRUCTOR)
4579 arg = digest_init (type, arg);
4580 arg = convert_for_initialization (0, type, arg, LOOKUP_NORMAL,
4581 "default argument", fn, parmnum);
4583 else
4585 /* This could get clobbered by the following call. */
4586 if (TREE_HAS_CONSTRUCTOR (arg))
4587 arg = copy_node (arg);
4589 arg = convert_for_initialization (0, type, arg, LOOKUP_NORMAL,
4590 "default argument", fn, parmnum);
4591 arg = convert_for_arg_passing (type, arg);
4594 return arg;
4597 /* Returns the type which will really be used for passing an argument of
4598 type TYPE. */
4600 tree
4601 type_passed_as (tree type)
4603 /* Pass classes with copy ctors by invisible reference. */
4604 if (TREE_ADDRESSABLE (type))
4606 type = build_reference_type (type);
4607 /* There are no other pointers to this temporary. */
4608 type = build_qualified_type (type, TYPE_QUAL_RESTRICT);
4610 else if (targetm.calls.promote_prototypes (type)
4611 && INTEGRAL_TYPE_P (type)
4612 && COMPLETE_TYPE_P (type)
4613 && INT_CST_LT_UNSIGNED (TYPE_SIZE (type),
4614 TYPE_SIZE (integer_type_node)))
4615 type = integer_type_node;
4617 return type;
4620 /* Actually perform the appropriate conversion. */
4622 tree
4623 convert_for_arg_passing (tree type, tree val)
4625 if (val == error_mark_node)
4627 /* Pass classes with copy ctors by invisible reference. */
4628 else if (TREE_ADDRESSABLE (type))
4629 val = build1 (ADDR_EXPR, build_reference_type (type), val);
4630 else if (targetm.calls.promote_prototypes (type)
4631 && INTEGRAL_TYPE_P (type)
4632 && COMPLETE_TYPE_P (type)
4633 && INT_CST_LT_UNSIGNED (TYPE_SIZE (type),
4634 TYPE_SIZE (integer_type_node)))
4635 val = perform_integral_promotions (val);
4636 if (warn_missing_format_attribute)
4638 tree rhstype = TREE_TYPE (val);
4639 const enum tree_code coder = TREE_CODE (rhstype);
4640 const enum tree_code codel = TREE_CODE (type);
4641 if ((codel == POINTER_TYPE || codel == REFERENCE_TYPE)
4642 && coder == codel
4643 && check_missing_format_attribute (type, rhstype))
4644 warning (OPT_Wmissing_format_attribute,
4645 "argument of function call might be a candidate for a format attribute");
4647 return val;
4650 /* Returns true iff FN is a function with magic varargs, i.e. ones for
4651 which no conversions at all should be done. This is true for some
4652 builtins which don't act like normal functions. */
4654 static bool
4655 magic_varargs_p (tree fn)
4657 if (DECL_BUILT_IN (fn))
4658 switch (DECL_FUNCTION_CODE (fn))
4660 case BUILT_IN_CLASSIFY_TYPE:
4661 case BUILT_IN_CONSTANT_P:
4662 case BUILT_IN_NEXT_ARG:
4663 case BUILT_IN_STDARG_START:
4664 case BUILT_IN_VA_START:
4665 return true;
4667 default:;
4670 return false;
4673 /* Subroutine of the various build_*_call functions. Overload resolution
4674 has chosen a winning candidate CAND; build up a CALL_EXPR accordingly.
4675 ARGS is a TREE_LIST of the unconverted arguments to the call. FLAGS is a
4676 bitmask of various LOOKUP_* flags which apply to the call itself. */
4678 static tree
4679 build_over_call (struct z_candidate *cand, int flags)
4681 tree fn = cand->fn;
4682 tree args = cand->args;
4683 conversion **convs = cand->convs;
4684 conversion *conv;
4685 tree converted_args = NULL_TREE;
4686 tree parm = TYPE_ARG_TYPES (TREE_TYPE (fn));
4687 tree arg, val;
4688 int i = 0;
4689 int is_method = 0;
4691 /* In a template, there is no need to perform all of the work that
4692 is normally done. We are only interested in the type of the call
4693 expression, i.e., the return type of the function. Any semantic
4694 errors will be deferred until the template is instantiated. */
4695 if (processing_template_decl)
4697 tree expr;
4698 tree return_type;
4699 return_type = TREE_TYPE (TREE_TYPE (fn));
4700 expr = build3 (CALL_EXPR, return_type, fn, args, NULL_TREE);
4701 if (TREE_THIS_VOLATILE (fn) && cfun)
4702 current_function_returns_abnormally = 1;
4703 if (!VOID_TYPE_P (return_type))
4704 require_complete_type (return_type);
4705 return convert_from_reference (expr);
4708 /* Give any warnings we noticed during overload resolution. */
4709 if (cand->warnings)
4711 struct candidate_warning *w;
4712 for (w = cand->warnings; w; w = w->next)
4713 joust (cand, w->loser, 1);
4716 if (DECL_FUNCTION_MEMBER_P (fn))
4718 /* If FN is a template function, two cases must be considered.
4719 For example:
4721 struct A {
4722 protected:
4723 template <class T> void f();
4725 template <class T> struct B {
4726 protected:
4727 void g();
4729 struct C : A, B<int> {
4730 using A::f; // #1
4731 using B<int>::g; // #2
4734 In case #1 where `A::f' is a member template, DECL_ACCESS is
4735 recorded in the primary template but not in its specialization.
4736 We check access of FN using its primary template.
4738 In case #2, where `B<int>::g' has a DECL_TEMPLATE_INFO simply
4739 because it is a member of class template B, DECL_ACCESS is
4740 recorded in the specialization `B<int>::g'. We cannot use its
4741 primary template because `B<T>::g' and `B<int>::g' may have
4742 different access. */
4743 if (DECL_TEMPLATE_INFO (fn)
4744 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (fn)))
4745 perform_or_defer_access_check (cand->access_path,
4746 DECL_TI_TEMPLATE (fn));
4747 else
4748 perform_or_defer_access_check (cand->access_path, fn);
4751 if (args && TREE_CODE (args) != TREE_LIST)
4752 args = build_tree_list (NULL_TREE, args);
4753 arg = args;
4755 /* The implicit parameters to a constructor are not considered by overload
4756 resolution, and must be of the proper type. */
4757 if (DECL_CONSTRUCTOR_P (fn))
4759 converted_args = tree_cons (NULL_TREE, TREE_VALUE (arg), converted_args);
4760 arg = TREE_CHAIN (arg);
4761 parm = TREE_CHAIN (parm);
4762 /* We should never try to call the abstract constructor. */
4763 gcc_assert (!DECL_HAS_IN_CHARGE_PARM_P (fn));
4765 if (DECL_HAS_VTT_PARM_P (fn))
4767 converted_args = tree_cons
4768 (NULL_TREE, TREE_VALUE (arg), converted_args);
4769 arg = TREE_CHAIN (arg);
4770 parm = TREE_CHAIN (parm);
4773 /* Bypass access control for 'this' parameter. */
4774 else if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
4776 tree parmtype = TREE_VALUE (parm);
4777 tree argtype = TREE_TYPE (TREE_VALUE (arg));
4778 tree converted_arg;
4779 tree base_binfo;
4781 if (convs[i]->bad_p)
4782 pedwarn ("passing %qT as %<this%> argument of %q#D discards qualifiers",
4783 TREE_TYPE (argtype), fn);
4785 /* [class.mfct.nonstatic]: If a nonstatic member function of a class
4786 X is called for an object that is not of type X, or of a type
4787 derived from X, the behavior is undefined.
4789 So we can assume that anything passed as 'this' is non-null, and
4790 optimize accordingly. */
4791 gcc_assert (TREE_CODE (parmtype) == POINTER_TYPE);
4792 /* Convert to the base in which the function was declared. */
4793 gcc_assert (cand->conversion_path != NULL_TREE);
4794 converted_arg = build_base_path (PLUS_EXPR,
4795 TREE_VALUE (arg),
4796 cand->conversion_path,
4798 /* Check that the base class is accessible. */
4799 if (!accessible_base_p (TREE_TYPE (argtype),
4800 BINFO_TYPE (cand->conversion_path), true))
4801 error ("%qT is not an accessible base of %qT",
4802 BINFO_TYPE (cand->conversion_path),
4803 TREE_TYPE (argtype));
4804 /* If fn was found by a using declaration, the conversion path
4805 will be to the derived class, not the base declaring fn. We
4806 must convert from derived to base. */
4807 base_binfo = lookup_base (TREE_TYPE (TREE_TYPE (converted_arg)),
4808 TREE_TYPE (parmtype), ba_unique, NULL);
4809 converted_arg = build_base_path (PLUS_EXPR, converted_arg,
4810 base_binfo, 1);
4812 converted_args = tree_cons (NULL_TREE, converted_arg, converted_args);
4813 parm = TREE_CHAIN (parm);
4814 arg = TREE_CHAIN (arg);
4815 ++i;
4816 is_method = 1;
4819 for (; arg && parm;
4820 parm = TREE_CHAIN (parm), arg = TREE_CHAIN (arg), ++i)
4822 tree type = TREE_VALUE (parm);
4824 conv = convs[i];
4826 /* Don't make a copy here if build_call is going to. */
4827 if (conv->kind == ck_rvalue
4828 && !TREE_ADDRESSABLE (complete_type (type)))
4829 conv = conv->u.next;
4831 val = convert_like_with_context
4832 (conv, TREE_VALUE (arg), fn, i - is_method);
4834 val = convert_for_arg_passing (type, val);
4835 converted_args = tree_cons (NULL_TREE, val, converted_args);
4838 /* Default arguments */
4839 for (; parm && parm != void_list_node; parm = TREE_CHAIN (parm), i++)
4840 converted_args
4841 = tree_cons (NULL_TREE,
4842 convert_default_arg (TREE_VALUE (parm),
4843 TREE_PURPOSE (parm),
4844 fn, i - is_method),
4845 converted_args);
4847 /* Ellipsis */
4848 for (; arg; arg = TREE_CHAIN (arg))
4850 tree a = TREE_VALUE (arg);
4851 if (magic_varargs_p (fn))
4852 /* Do no conversions for magic varargs. */;
4853 else
4854 a = convert_arg_to_ellipsis (a);
4855 converted_args = tree_cons (NULL_TREE, a, converted_args);
4858 converted_args = nreverse (converted_args);
4860 check_function_arguments (TYPE_ATTRIBUTES (TREE_TYPE (fn)),
4861 converted_args, TYPE_ARG_TYPES (TREE_TYPE (fn)));
4863 /* Avoid actually calling copy constructors and copy assignment operators,
4864 if possible. */
4866 if (! flag_elide_constructors)
4867 /* Do things the hard way. */;
4868 else if (cand->num_convs == 1 && DECL_COPY_CONSTRUCTOR_P (fn))
4870 tree targ;
4871 arg = skip_artificial_parms_for (fn, converted_args);
4872 arg = TREE_VALUE (arg);
4874 /* Pull out the real argument, disregarding const-correctness. */
4875 targ = arg;
4876 while (TREE_CODE (targ) == NOP_EXPR
4877 || TREE_CODE (targ) == NON_LVALUE_EXPR
4878 || TREE_CODE (targ) == CONVERT_EXPR)
4879 targ = TREE_OPERAND (targ, 0);
4880 if (TREE_CODE (targ) == ADDR_EXPR)
4882 targ = TREE_OPERAND (targ, 0);
4883 if (!same_type_ignoring_top_level_qualifiers_p
4884 (TREE_TYPE (TREE_TYPE (arg)), TREE_TYPE (targ)))
4885 targ = NULL_TREE;
4887 else
4888 targ = NULL_TREE;
4890 if (targ)
4891 arg = targ;
4892 else
4893 arg = build_indirect_ref (arg, 0);
4895 /* [class.copy]: the copy constructor is implicitly defined even if
4896 the implementation elided its use. */
4897 if (TYPE_HAS_COMPLEX_INIT_REF (DECL_CONTEXT (fn)))
4898 mark_used (fn);
4900 /* If we're creating a temp and we already have one, don't create a
4901 new one. If we're not creating a temp but we get one, use
4902 INIT_EXPR to collapse the temp into our target. Otherwise, if the
4903 ctor is trivial, do a bitwise copy with a simple TARGET_EXPR for a
4904 temp or an INIT_EXPR otherwise. */
4905 if (integer_zerop (TREE_VALUE (args)))
4907 if (TREE_CODE (arg) == TARGET_EXPR)
4908 return arg;
4909 else if (TYPE_HAS_TRIVIAL_INIT_REF (DECL_CONTEXT (fn)))
4910 return build_target_expr_with_type (arg, DECL_CONTEXT (fn));
4912 else if (TREE_CODE (arg) == TARGET_EXPR
4913 || TYPE_HAS_TRIVIAL_INIT_REF (DECL_CONTEXT (fn)))
4915 tree to = stabilize_reference
4916 (build_indirect_ref (TREE_VALUE (args), 0));
4918 val = build2 (INIT_EXPR, DECL_CONTEXT (fn), to, arg);
4919 return val;
4922 else if (DECL_OVERLOADED_OPERATOR_P (fn) == NOP_EXPR
4923 && copy_fn_p (fn)
4924 && TYPE_HAS_TRIVIAL_ASSIGN_REF (DECL_CONTEXT (fn)))
4926 tree to = stabilize_reference
4927 (build_indirect_ref (TREE_VALUE (converted_args), 0));
4928 tree type = TREE_TYPE (to);
4929 tree as_base = CLASSTYPE_AS_BASE (type);
4931 arg = TREE_VALUE (TREE_CHAIN (converted_args));
4932 if (tree_int_cst_equal (TYPE_SIZE (type), TYPE_SIZE (as_base)))
4934 arg = build_indirect_ref (arg, 0);
4935 val = build2 (MODIFY_EXPR, TREE_TYPE (to), to, arg);
4937 else
4939 /* We must only copy the non-tail padding parts.
4940 Use __builtin_memcpy for the bitwise copy. */
4942 tree args, t;
4944 args = tree_cons (NULL, TYPE_SIZE_UNIT (as_base), NULL);
4945 args = tree_cons (NULL, arg, args);
4946 t = build_unary_op (ADDR_EXPR, to, 0);
4947 args = tree_cons (NULL, t, args);
4948 t = implicit_built_in_decls[BUILT_IN_MEMCPY];
4949 t = build_call (t, args);
4951 t = convert (TREE_TYPE (TREE_VALUE (args)), t);
4952 val = build_indirect_ref (t, 0);
4955 return val;
4958 mark_used (fn);
4960 if (DECL_VINDEX (fn) && (flags & LOOKUP_NONVIRTUAL) == 0)
4962 tree t, *p = &TREE_VALUE (converted_args);
4963 tree binfo = lookup_base (TREE_TYPE (TREE_TYPE (*p)),
4964 DECL_CONTEXT (fn),
4965 ba_any, NULL);
4966 gcc_assert (binfo && binfo != error_mark_node);
4968 *p = build_base_path (PLUS_EXPR, *p, binfo, 1);
4969 if (TREE_SIDE_EFFECTS (*p))
4970 *p = save_expr (*p);
4971 t = build_pointer_type (TREE_TYPE (fn));
4972 if (DECL_CONTEXT (fn) && TYPE_JAVA_INTERFACE (DECL_CONTEXT (fn)))
4973 fn = build_java_interface_fn_ref (fn, *p);
4974 else
4975 fn = build_vfn_ref (*p, DECL_VINDEX (fn));
4976 TREE_TYPE (fn) = t;
4978 else if (DECL_INLINE (fn))
4979 fn = inline_conversion (fn);
4980 else
4981 fn = build_addr_func (fn);
4983 return build_cxx_call (fn, converted_args);
4986 /* Build and return a call to FN, using ARGS. This function performs
4987 no overload resolution, conversion, or other high-level
4988 operations. */
4990 tree
4991 build_cxx_call (tree fn, tree args)
4993 tree fndecl;
4995 fn = build_call (fn, args);
4997 /* If this call might throw an exception, note that fact. */
4998 fndecl = get_callee_fndecl (fn);
4999 if ((!fndecl || !TREE_NOTHROW (fndecl))
5000 && at_function_scope_p ()
5001 && cfun)
5002 cp_function_chain->can_throw = 1;
5004 /* Some built-in function calls will be evaluated at compile-time in
5005 fold (). */
5006 fn = fold_if_not_in_template (fn);
5008 if (VOID_TYPE_P (TREE_TYPE (fn)))
5009 return fn;
5011 fn = require_complete_type (fn);
5012 if (fn == error_mark_node)
5013 return error_mark_node;
5015 if (IS_AGGR_TYPE (TREE_TYPE (fn)))
5016 fn = build_cplus_new (TREE_TYPE (fn), fn);
5017 return convert_from_reference (fn);
5020 static GTY(()) tree java_iface_lookup_fn;
5022 /* Make an expression which yields the address of the Java interface
5023 method FN. This is achieved by generating a call to libjava's
5024 _Jv_LookupInterfaceMethodIdx(). */
5026 static tree
5027 build_java_interface_fn_ref (tree fn, tree instance)
5029 tree lookup_args, lookup_fn, method, idx;
5030 tree klass_ref, iface, iface_ref;
5031 int i;
5033 if (!java_iface_lookup_fn)
5035 tree endlink = build_void_list_node ();
5036 tree t = tree_cons (NULL_TREE, ptr_type_node,
5037 tree_cons (NULL_TREE, ptr_type_node,
5038 tree_cons (NULL_TREE, java_int_type_node,
5039 endlink)));
5040 java_iface_lookup_fn
5041 = builtin_function ("_Jv_LookupInterfaceMethodIdx",
5042 build_function_type (ptr_type_node, t),
5043 0, NOT_BUILT_IN, NULL, NULL_TREE);
5046 /* Look up the pointer to the runtime java.lang.Class object for `instance'.
5047 This is the first entry in the vtable. */
5048 klass_ref = build_vtbl_ref (build_indirect_ref (instance, 0),
5049 integer_zero_node);
5051 /* Get the java.lang.Class pointer for the interface being called. */
5052 iface = DECL_CONTEXT (fn);
5053 iface_ref = lookup_field (iface, get_identifier ("class$"), 0, false);
5054 if (!iface_ref || TREE_CODE (iface_ref) != VAR_DECL
5055 || DECL_CONTEXT (iface_ref) != iface)
5057 error ("could not find class$ field in java interface type %qT",
5058 iface);
5059 return error_mark_node;
5061 iface_ref = build_address (iface_ref);
5062 iface_ref = convert (build_pointer_type (iface), iface_ref);
5064 /* Determine the itable index of FN. */
5065 i = 1;
5066 for (method = TYPE_METHODS (iface); method; method = TREE_CHAIN (method))
5068 if (!DECL_VIRTUAL_P (method))
5069 continue;
5070 if (fn == method)
5071 break;
5072 i++;
5074 idx = build_int_cst (NULL_TREE, i);
5076 lookup_args = tree_cons (NULL_TREE, klass_ref,
5077 tree_cons (NULL_TREE, iface_ref,
5078 build_tree_list (NULL_TREE, idx)));
5079 lookup_fn = build1 (ADDR_EXPR,
5080 build_pointer_type (TREE_TYPE (java_iface_lookup_fn)),
5081 java_iface_lookup_fn);
5082 return build3 (CALL_EXPR, ptr_type_node, lookup_fn, lookup_args, NULL_TREE);
5085 /* Returns the value to use for the in-charge parameter when making a
5086 call to a function with the indicated NAME.
5088 FIXME:Can't we find a neater way to do this mapping? */
5090 tree
5091 in_charge_arg_for_name (tree name)
5093 if (name == base_ctor_identifier
5094 || name == base_dtor_identifier)
5095 return integer_zero_node;
5096 else if (name == complete_ctor_identifier)
5097 return integer_one_node;
5098 else if (name == complete_dtor_identifier)
5099 return integer_two_node;
5100 else if (name == deleting_dtor_identifier)
5101 return integer_three_node;
5103 /* This function should only be called with one of the names listed
5104 above. */
5105 gcc_unreachable ();
5106 return NULL_TREE;
5109 /* Build a call to a constructor, destructor, or an assignment
5110 operator for INSTANCE, an expression with class type. NAME
5111 indicates the special member function to call; ARGS are the
5112 arguments. BINFO indicates the base of INSTANCE that is to be
5113 passed as the `this' parameter to the member function called.
5115 FLAGS are the LOOKUP_* flags to use when processing the call.
5117 If NAME indicates a complete object constructor, INSTANCE may be
5118 NULL_TREE. In this case, the caller will call build_cplus_new to
5119 store the newly constructed object into a VAR_DECL. */
5121 tree
5122 build_special_member_call (tree instance, tree name, tree args,
5123 tree binfo, int flags)
5125 tree fns;
5126 /* The type of the subobject to be constructed or destroyed. */
5127 tree class_type;
5129 gcc_assert (name == complete_ctor_identifier
5130 || name == base_ctor_identifier
5131 || name == complete_dtor_identifier
5132 || name == base_dtor_identifier
5133 || name == deleting_dtor_identifier
5134 || name == ansi_assopname (NOP_EXPR));
5135 if (TYPE_P (binfo))
5137 /* Resolve the name. */
5138 if (!complete_type_or_else (binfo, NULL_TREE))
5139 return error_mark_node;
5141 binfo = TYPE_BINFO (binfo);
5144 gcc_assert (binfo != NULL_TREE);
5146 class_type = BINFO_TYPE (binfo);
5148 /* Handle the special case where INSTANCE is NULL_TREE. */
5149 if (name == complete_ctor_identifier && !instance)
5151 instance = build_int_cst (build_pointer_type (class_type), 0);
5152 instance = build1 (INDIRECT_REF, class_type, instance);
5154 else
5156 if (name == complete_dtor_identifier
5157 || name == base_dtor_identifier
5158 || name == deleting_dtor_identifier)
5159 gcc_assert (args == NULL_TREE);
5161 /* Convert to the base class, if necessary. */
5162 if (!same_type_ignoring_top_level_qualifiers_p
5163 (TREE_TYPE (instance), BINFO_TYPE (binfo)))
5165 if (name != ansi_assopname (NOP_EXPR))
5166 /* For constructors and destructors, either the base is
5167 non-virtual, or it is virtual but we are doing the
5168 conversion from a constructor or destructor for the
5169 complete object. In either case, we can convert
5170 statically. */
5171 instance = convert_to_base_statically (instance, binfo);
5172 else
5173 /* However, for assignment operators, we must convert
5174 dynamically if the base is virtual. */
5175 instance = build_base_path (PLUS_EXPR, instance,
5176 binfo, /*nonnull=*/1);
5180 gcc_assert (instance != NULL_TREE);
5182 fns = lookup_fnfields (binfo, name, 1);
5184 /* When making a call to a constructor or destructor for a subobject
5185 that uses virtual base classes, pass down a pointer to a VTT for
5186 the subobject. */
5187 if ((name == base_ctor_identifier
5188 || name == base_dtor_identifier)
5189 && CLASSTYPE_VBASECLASSES (class_type))
5191 tree vtt;
5192 tree sub_vtt;
5194 /* If the current function is a complete object constructor
5195 or destructor, then we fetch the VTT directly.
5196 Otherwise, we look it up using the VTT we were given. */
5197 vtt = TREE_CHAIN (CLASSTYPE_VTABLES (current_class_type));
5198 vtt = decay_conversion (vtt);
5199 vtt = build3 (COND_EXPR, TREE_TYPE (vtt),
5200 build2 (EQ_EXPR, boolean_type_node,
5201 current_in_charge_parm, integer_zero_node),
5202 current_vtt_parm,
5203 vtt);
5204 gcc_assert (BINFO_SUBVTT_INDEX (binfo));
5205 sub_vtt = build2 (PLUS_EXPR, TREE_TYPE (vtt), vtt,
5206 BINFO_SUBVTT_INDEX (binfo));
5208 args = tree_cons (NULL_TREE, sub_vtt, args);
5211 return build_new_method_call (instance, fns, args,
5212 TYPE_BINFO (BINFO_TYPE (binfo)),
5213 flags);
5216 /* Return the NAME, as a C string. The NAME indicates a function that
5217 is a member of TYPE. *FREE_P is set to true if the caller must
5218 free the memory returned.
5220 Rather than go through all of this, we should simply set the names
5221 of constructors and destructors appropriately, and dispense with
5222 ctor_identifier, dtor_identifier, etc. */
5224 static char *
5225 name_as_c_string (tree name, tree type, bool *free_p)
5227 char *pretty_name;
5229 /* Assume that we will not allocate memory. */
5230 *free_p = false;
5231 /* Constructors and destructors are special. */
5232 if (IDENTIFIER_CTOR_OR_DTOR_P (name))
5234 pretty_name
5235 = (char *) IDENTIFIER_POINTER (constructor_name (type));
5236 /* For a destructor, add the '~'. */
5237 if (name == complete_dtor_identifier
5238 || name == base_dtor_identifier
5239 || name == deleting_dtor_identifier)
5241 pretty_name = concat ("~", pretty_name, NULL);
5242 /* Remember that we need to free the memory allocated. */
5243 *free_p = true;
5246 else if (IDENTIFIER_TYPENAME_P (name))
5248 pretty_name = concat ("operator ",
5249 type_as_string (TREE_TYPE (name),
5250 TFF_PLAIN_IDENTIFIER),
5251 NULL);
5252 /* Remember that we need to free the memory allocated. */
5253 *free_p = true;
5255 else
5256 pretty_name = (char *) IDENTIFIER_POINTER (name);
5258 return pretty_name;
5261 /* Build a call to "INSTANCE.FN (ARGS)". */
5263 tree
5264 build_new_method_call (tree instance, tree fns, tree args,
5265 tree conversion_path, int flags)
5267 struct z_candidate *candidates = 0, *cand;
5268 tree explicit_targs = NULL_TREE;
5269 tree basetype = NULL_TREE;
5270 tree access_binfo;
5271 tree optype;
5272 tree mem_args = NULL_TREE, instance_ptr;
5273 tree name;
5274 tree user_args;
5275 tree call;
5276 tree fn;
5277 tree class_type;
5278 int template_only = 0;
5279 bool any_viable_p;
5280 tree orig_instance;
5281 tree orig_fns;
5282 tree orig_args;
5283 void *p;
5285 gcc_assert (instance != NULL_TREE);
5287 if (error_operand_p (instance)
5288 || error_operand_p (fns)
5289 || args == error_mark_node)
5290 return error_mark_node;
5292 if (!BASELINK_P (fns))
5294 error ("call to non-function %qD", fns);
5295 return error_mark_node;
5298 orig_instance = instance;
5299 orig_fns = fns;
5300 orig_args = args;
5302 /* Dismantle the baselink to collect all the information we need. */
5303 if (!conversion_path)
5304 conversion_path = BASELINK_BINFO (fns);
5305 access_binfo = BASELINK_ACCESS_BINFO (fns);
5306 optype = BASELINK_OPTYPE (fns);
5307 fns = BASELINK_FUNCTIONS (fns);
5308 if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
5310 explicit_targs = TREE_OPERAND (fns, 1);
5311 fns = TREE_OPERAND (fns, 0);
5312 template_only = 1;
5314 gcc_assert (TREE_CODE (fns) == FUNCTION_DECL
5315 || TREE_CODE (fns) == TEMPLATE_DECL
5316 || TREE_CODE (fns) == OVERLOAD);
5317 fn = get_first_fn (fns);
5318 name = DECL_NAME (fn);
5320 basetype = TYPE_MAIN_VARIANT (TREE_TYPE (instance));
5321 gcc_assert (CLASS_TYPE_P (basetype));
5323 if (processing_template_decl)
5325 instance = build_non_dependent_expr (instance);
5326 args = build_non_dependent_args (orig_args);
5329 /* The USER_ARGS are the arguments we will display to users if an
5330 error occurs. The USER_ARGS should not include any
5331 compiler-generated arguments. The "this" pointer hasn't been
5332 added yet. However, we must remove the VTT pointer if this is a
5333 call to a base-class constructor or destructor. */
5334 user_args = args;
5335 if (IDENTIFIER_CTOR_OR_DTOR_P (name))
5337 /* Callers should explicitly indicate whether they want to construct
5338 the complete object or just the part without virtual bases. */
5339 gcc_assert (name != ctor_identifier);
5340 /* Similarly for destructors. */
5341 gcc_assert (name != dtor_identifier);
5342 /* Remove the VTT pointer, if present. */
5343 if ((name == base_ctor_identifier || name == base_dtor_identifier)
5344 && CLASSTYPE_VBASECLASSES (basetype))
5345 user_args = TREE_CHAIN (user_args);
5348 /* Process the argument list. */
5349 args = resolve_args (args);
5350 if (args == error_mark_node)
5351 return error_mark_node;
5353 instance_ptr = build_this (instance);
5355 /* It's OK to call destructors on cv-qualified objects. Therefore,
5356 convert the INSTANCE_PTR to the unqualified type, if necessary. */
5357 if (DECL_DESTRUCTOR_P (fn))
5359 tree type = build_pointer_type (basetype);
5360 if (!same_type_p (type, TREE_TYPE (instance_ptr)))
5361 instance_ptr = build_nop (type, instance_ptr);
5362 name = complete_dtor_identifier;
5365 class_type = (conversion_path ? BINFO_TYPE (conversion_path) : NULL_TREE);
5366 mem_args = tree_cons (NULL_TREE, instance_ptr, args);
5368 /* Get the high-water mark for the CONVERSION_OBSTACK. */
5369 p = conversion_obstack_alloc (0);
5371 for (fn = fns; fn; fn = OVL_NEXT (fn))
5373 tree t = OVL_CURRENT (fn);
5374 tree this_arglist;
5376 /* We can end up here for copy-init of same or base class. */
5377 if ((flags & LOOKUP_ONLYCONVERTING)
5378 && DECL_NONCONVERTING_P (t))
5379 continue;
5381 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (t))
5382 this_arglist = mem_args;
5383 else
5384 this_arglist = args;
5386 if (TREE_CODE (t) == TEMPLATE_DECL)
5387 /* A member template. */
5388 add_template_candidate (&candidates, t,
5389 class_type,
5390 explicit_targs,
5391 this_arglist, optype,
5392 access_binfo,
5393 conversion_path,
5394 flags,
5395 DEDUCE_CALL);
5396 else if (! template_only)
5397 add_function_candidate (&candidates, t,
5398 class_type,
5399 this_arglist,
5400 access_binfo,
5401 conversion_path,
5402 flags);
5405 candidates = splice_viable (candidates, pedantic, &any_viable_p);
5406 if (!any_viable_p)
5408 if (!COMPLETE_TYPE_P (basetype))
5409 cxx_incomplete_type_error (instance_ptr, basetype);
5410 else
5412 char *pretty_name;
5413 bool free_p;
5415 pretty_name = name_as_c_string (name, basetype, &free_p);
5416 error ("no matching function for call to %<%T::%s(%A)%#V%>",
5417 basetype, pretty_name, user_args,
5418 TREE_TYPE (TREE_TYPE (instance_ptr)));
5419 if (free_p)
5420 free (pretty_name);
5422 print_z_candidates (candidates);
5423 call = error_mark_node;
5425 else
5427 cand = tourney (candidates);
5428 if (cand == 0)
5430 char *pretty_name;
5431 bool free_p;
5433 pretty_name = name_as_c_string (name, basetype, &free_p);
5434 error ("call of overloaded %<%s(%A)%> is ambiguous", pretty_name,
5435 user_args);
5436 print_z_candidates (candidates);
5437 if (free_p)
5438 free (pretty_name);
5439 call = error_mark_node;
5441 else
5443 if (!(flags & LOOKUP_NONVIRTUAL)
5444 && DECL_PURE_VIRTUAL_P (cand->fn)
5445 && instance == current_class_ref
5446 && (DECL_CONSTRUCTOR_P (current_function_decl)
5447 || DECL_DESTRUCTOR_P (current_function_decl)))
5448 /* This is not an error, it is runtime undefined
5449 behavior. */
5450 warning (0, (DECL_CONSTRUCTOR_P (current_function_decl) ?
5451 "abstract virtual %q#D called from constructor"
5452 : "abstract virtual %q#D called from destructor"),
5453 cand->fn);
5455 if (TREE_CODE (TREE_TYPE (cand->fn)) == METHOD_TYPE
5456 && is_dummy_object (instance_ptr))
5458 error ("cannot call member function %qD without object",
5459 cand->fn);
5460 call = error_mark_node;
5462 else
5464 if (DECL_VINDEX (cand->fn) && ! (flags & LOOKUP_NONVIRTUAL)
5465 && resolves_to_fixed_type_p (instance, 0))
5466 flags |= LOOKUP_NONVIRTUAL;
5468 call = build_over_call (cand, flags);
5470 /* In an expression of the form `a->f()' where `f' turns
5471 out to be a static member function, `a' is
5472 none-the-less evaluated. */
5473 if (TREE_CODE (TREE_TYPE (cand->fn)) != METHOD_TYPE
5474 && !is_dummy_object (instance_ptr)
5475 && TREE_SIDE_EFFECTS (instance_ptr))
5476 call = build2 (COMPOUND_EXPR, TREE_TYPE (call),
5477 instance_ptr, call);
5478 else if (call != error_mark_node
5479 && DECL_DESTRUCTOR_P (cand->fn)
5480 && !VOID_TYPE_P (TREE_TYPE (call)))
5481 /* An explicit call of the form "x->~X()" has type
5482 "void". However, on platforms where destructors
5483 return "this" (i.e., those where
5484 targetm.cxx.cdtor_returns_this is true), such calls
5485 will appear to have a return value of pointer type
5486 to the low-level call machinery. We do not want to
5487 change the low-level machinery, since we want to be
5488 able to optimize "delete f()" on such platforms as
5489 "operator delete(~X(f()))" (rather than generating
5490 "t = f(), ~X(t), operator delete (t)"). */
5491 call = build_nop (void_type_node, call);
5496 if (processing_template_decl && call != error_mark_node)
5497 call = (build_min_non_dep
5498 (CALL_EXPR, call,
5499 build_min_nt (COMPONENT_REF, orig_instance, orig_fns, NULL_TREE),
5500 orig_args, NULL_TREE));
5502 /* Free all the conversions we allocated. */
5503 obstack_free (&conversion_obstack, p);
5505 return call;
5508 /* Returns true iff standard conversion sequence ICS1 is a proper
5509 subsequence of ICS2. */
5511 static bool
5512 is_subseq (conversion *ics1, conversion *ics2)
5514 /* We can assume that a conversion of the same code
5515 between the same types indicates a subsequence since we only get
5516 here if the types we are converting from are the same. */
5518 while (ics1->kind == ck_rvalue
5519 || ics1->kind == ck_lvalue)
5520 ics1 = ics1->u.next;
5522 while (1)
5524 while (ics2->kind == ck_rvalue
5525 || ics2->kind == ck_lvalue)
5526 ics2 = ics2->u.next;
5528 if (ics2->kind == ck_user
5529 || ics2->kind == ck_ambig
5530 || ics2->kind == ck_identity)
5531 /* At this point, ICS1 cannot be a proper subsequence of
5532 ICS2. We can get a USER_CONV when we are comparing the
5533 second standard conversion sequence of two user conversion
5534 sequences. */
5535 return false;
5537 ics2 = ics2->u.next;
5539 if (ics2->kind == ics1->kind
5540 && same_type_p (ics2->type, ics1->type)
5541 && same_type_p (ics2->u.next->type,
5542 ics1->u.next->type))
5543 return true;
5547 /* Returns nonzero iff DERIVED is derived from BASE. The inputs may
5548 be any _TYPE nodes. */
5550 bool
5551 is_properly_derived_from (tree derived, tree base)
5553 if (!IS_AGGR_TYPE_CODE (TREE_CODE (derived))
5554 || !IS_AGGR_TYPE_CODE (TREE_CODE (base)))
5555 return false;
5557 /* We only allow proper derivation here. The DERIVED_FROM_P macro
5558 considers every class derived from itself. */
5559 return (!same_type_ignoring_top_level_qualifiers_p (derived, base)
5560 && DERIVED_FROM_P (base, derived));
5563 /* We build the ICS for an implicit object parameter as a pointer
5564 conversion sequence. However, such a sequence should be compared
5565 as if it were a reference conversion sequence. If ICS is the
5566 implicit conversion sequence for an implicit object parameter,
5567 modify it accordingly. */
5569 static void
5570 maybe_handle_implicit_object (conversion **ics)
5572 if ((*ics)->this_p)
5574 /* [over.match.funcs]
5576 For non-static member functions, the type of the
5577 implicit object parameter is "reference to cv X"
5578 where X is the class of which the function is a
5579 member and cv is the cv-qualification on the member
5580 function declaration. */
5581 conversion *t = *ics;
5582 tree reference_type;
5584 /* The `this' parameter is a pointer to a class type. Make the
5585 implicit conversion talk about a reference to that same class
5586 type. */
5587 reference_type = TREE_TYPE (t->type);
5588 reference_type = build_reference_type (reference_type);
5590 if (t->kind == ck_qual)
5591 t = t->u.next;
5592 if (t->kind == ck_ptr)
5593 t = t->u.next;
5594 t = build_identity_conv (TREE_TYPE (t->type), NULL_TREE);
5595 t = direct_reference_binding (reference_type, t);
5596 *ics = t;
5600 /* If *ICS is a REF_BIND set *ICS to the remainder of the conversion,
5601 and return the type to which the reference refers. Otherwise,
5602 leave *ICS unchanged and return NULL_TREE. */
5604 static tree
5605 maybe_handle_ref_bind (conversion **ics)
5607 if ((*ics)->kind == ck_ref_bind)
5609 conversion *old_ics = *ics;
5610 tree type = TREE_TYPE (old_ics->type);
5611 *ics = old_ics->u.next;
5612 (*ics)->user_conv_p = old_ics->user_conv_p;
5613 (*ics)->bad_p = old_ics->bad_p;
5614 return type;
5617 return NULL_TREE;
5620 /* Compare two implicit conversion sequences according to the rules set out in
5621 [over.ics.rank]. Return values:
5623 1: ics1 is better than ics2
5624 -1: ics2 is better than ics1
5625 0: ics1 and ics2 are indistinguishable */
5627 static int
5628 compare_ics (conversion *ics1, conversion *ics2)
5630 tree from_type1;
5631 tree from_type2;
5632 tree to_type1;
5633 tree to_type2;
5634 tree deref_from_type1 = NULL_TREE;
5635 tree deref_from_type2 = NULL_TREE;
5636 tree deref_to_type1 = NULL_TREE;
5637 tree deref_to_type2 = NULL_TREE;
5638 conversion_rank rank1, rank2;
5640 /* REF_BINDING is nonzero if the result of the conversion sequence
5641 is a reference type. In that case TARGET_TYPE is the
5642 type referred to by the reference. */
5643 tree target_type1;
5644 tree target_type2;
5646 /* Handle implicit object parameters. */
5647 maybe_handle_implicit_object (&ics1);
5648 maybe_handle_implicit_object (&ics2);
5650 /* Handle reference parameters. */
5651 target_type1 = maybe_handle_ref_bind (&ics1);
5652 target_type2 = maybe_handle_ref_bind (&ics2);
5654 /* [over.ics.rank]
5656 When comparing the basic forms of implicit conversion sequences (as
5657 defined in _over.best.ics_)
5659 --a standard conversion sequence (_over.ics.scs_) is a better
5660 conversion sequence than a user-defined conversion sequence
5661 or an ellipsis conversion sequence, and
5663 --a user-defined conversion sequence (_over.ics.user_) is a
5664 better conversion sequence than an ellipsis conversion sequence
5665 (_over.ics.ellipsis_). */
5666 rank1 = CONVERSION_RANK (ics1);
5667 rank2 = CONVERSION_RANK (ics2);
5669 if (rank1 > rank2)
5670 return -1;
5671 else if (rank1 < rank2)
5672 return 1;
5674 if (rank1 == cr_bad)
5676 /* XXX Isn't this an extension? */
5677 /* Both ICS are bad. We try to make a decision based on what
5678 would have happened if they'd been good. */
5679 if (ics1->user_conv_p > ics2->user_conv_p
5680 || ics1->rank > ics2->rank)
5681 return -1;
5682 else if (ics1->user_conv_p < ics2->user_conv_p
5683 || ics1->rank < ics2->rank)
5684 return 1;
5686 /* We couldn't make up our minds; try to figure it out below. */
5689 if (ics1->ellipsis_p)
5690 /* Both conversions are ellipsis conversions. */
5691 return 0;
5693 /* User-defined conversion sequence U1 is a better conversion sequence
5694 than another user-defined conversion sequence U2 if they contain the
5695 same user-defined conversion operator or constructor and if the sec-
5696 ond standard conversion sequence of U1 is better than the second
5697 standard conversion sequence of U2. */
5699 if (ics1->user_conv_p)
5701 conversion *t1;
5702 conversion *t2;
5704 for (t1 = ics1; t1->kind != ck_user; t1 = t1->u.next)
5705 if (t1->kind == ck_ambig)
5706 return 0;
5707 for (t2 = ics2; t2->kind != ck_user; t2 = t2->u.next)
5708 if (t2->kind == ck_ambig)
5709 return 0;
5711 if (t1->cand->fn != t2->cand->fn)
5712 return 0;
5714 /* We can just fall through here, after setting up
5715 FROM_TYPE1 and FROM_TYPE2. */
5716 from_type1 = t1->type;
5717 from_type2 = t2->type;
5719 else
5721 conversion *t1;
5722 conversion *t2;
5724 /* We're dealing with two standard conversion sequences.
5726 [over.ics.rank]
5728 Standard conversion sequence S1 is a better conversion
5729 sequence than standard conversion sequence S2 if
5731 --S1 is a proper subsequence of S2 (comparing the conversion
5732 sequences in the canonical form defined by _over.ics.scs_,
5733 excluding any Lvalue Transformation; the identity
5734 conversion sequence is considered to be a subsequence of
5735 any non-identity conversion sequence */
5737 t1 = ics1;
5738 while (t1->kind != ck_identity)
5739 t1 = t1->u.next;
5740 from_type1 = t1->type;
5742 t2 = ics2;
5743 while (t2->kind != ck_identity)
5744 t2 = t2->u.next;
5745 from_type2 = t2->type;
5748 if (same_type_p (from_type1, from_type2))
5750 if (is_subseq (ics1, ics2))
5751 return 1;
5752 if (is_subseq (ics2, ics1))
5753 return -1;
5755 /* Otherwise, one sequence cannot be a subsequence of the other; they
5756 don't start with the same type. This can happen when comparing the
5757 second standard conversion sequence in two user-defined conversion
5758 sequences. */
5760 /* [over.ics.rank]
5762 Or, if not that,
5764 --the rank of S1 is better than the rank of S2 (by the rules
5765 defined below):
5767 Standard conversion sequences are ordered by their ranks: an Exact
5768 Match is a better conversion than a Promotion, which is a better
5769 conversion than a Conversion.
5771 Two conversion sequences with the same rank are indistinguishable
5772 unless one of the following rules applies:
5774 --A conversion that is not a conversion of a pointer, or pointer
5775 to member, to bool is better than another conversion that is such
5776 a conversion.
5778 The ICS_STD_RANK automatically handles the pointer-to-bool rule,
5779 so that we do not have to check it explicitly. */
5780 if (ics1->rank < ics2->rank)
5781 return 1;
5782 else if (ics2->rank < ics1->rank)
5783 return -1;
5785 to_type1 = ics1->type;
5786 to_type2 = ics2->type;
5788 if (TYPE_PTR_P (from_type1)
5789 && TYPE_PTR_P (from_type2)
5790 && TYPE_PTR_P (to_type1)
5791 && TYPE_PTR_P (to_type2))
5793 deref_from_type1 = TREE_TYPE (from_type1);
5794 deref_from_type2 = TREE_TYPE (from_type2);
5795 deref_to_type1 = TREE_TYPE (to_type1);
5796 deref_to_type2 = TREE_TYPE (to_type2);
5798 /* The rules for pointers to members A::* are just like the rules
5799 for pointers A*, except opposite: if B is derived from A then
5800 A::* converts to B::*, not vice versa. For that reason, we
5801 switch the from_ and to_ variables here. */
5802 else if ((TYPE_PTRMEM_P (from_type1) && TYPE_PTRMEM_P (from_type2)
5803 && TYPE_PTRMEM_P (to_type1) && TYPE_PTRMEM_P (to_type2))
5804 || (TYPE_PTRMEMFUNC_P (from_type1)
5805 && TYPE_PTRMEMFUNC_P (from_type2)
5806 && TYPE_PTRMEMFUNC_P (to_type1)
5807 && TYPE_PTRMEMFUNC_P (to_type2)))
5809 deref_to_type1 = TYPE_PTRMEM_CLASS_TYPE (from_type1);
5810 deref_to_type2 = TYPE_PTRMEM_CLASS_TYPE (from_type2);
5811 deref_from_type1 = TYPE_PTRMEM_CLASS_TYPE (to_type1);
5812 deref_from_type2 = TYPE_PTRMEM_CLASS_TYPE (to_type2);
5815 if (deref_from_type1 != NULL_TREE
5816 && IS_AGGR_TYPE_CODE (TREE_CODE (deref_from_type1))
5817 && IS_AGGR_TYPE_CODE (TREE_CODE (deref_from_type2)))
5819 /* This was one of the pointer or pointer-like conversions.
5821 [over.ics.rank]
5823 --If class B is derived directly or indirectly from class A,
5824 conversion of B* to A* is better than conversion of B* to
5825 void*, and conversion of A* to void* is better than
5826 conversion of B* to void*. */
5827 if (TREE_CODE (deref_to_type1) == VOID_TYPE
5828 && TREE_CODE (deref_to_type2) == VOID_TYPE)
5830 if (is_properly_derived_from (deref_from_type1,
5831 deref_from_type2))
5832 return -1;
5833 else if (is_properly_derived_from (deref_from_type2,
5834 deref_from_type1))
5835 return 1;
5837 else if (TREE_CODE (deref_to_type1) == VOID_TYPE
5838 || TREE_CODE (deref_to_type2) == VOID_TYPE)
5840 if (same_type_p (deref_from_type1, deref_from_type2))
5842 if (TREE_CODE (deref_to_type2) == VOID_TYPE)
5844 if (is_properly_derived_from (deref_from_type1,
5845 deref_to_type1))
5846 return 1;
5848 /* We know that DEREF_TO_TYPE1 is `void' here. */
5849 else if (is_properly_derived_from (deref_from_type1,
5850 deref_to_type2))
5851 return -1;
5854 else if (IS_AGGR_TYPE_CODE (TREE_CODE (deref_to_type1))
5855 && IS_AGGR_TYPE_CODE (TREE_CODE (deref_to_type2)))
5857 /* [over.ics.rank]
5859 --If class B is derived directly or indirectly from class A
5860 and class C is derived directly or indirectly from B,
5862 --conversion of C* to B* is better than conversion of C* to
5865 --conversion of B* to A* is better than conversion of C* to
5866 A* */
5867 if (same_type_p (deref_from_type1, deref_from_type2))
5869 if (is_properly_derived_from (deref_to_type1,
5870 deref_to_type2))
5871 return 1;
5872 else if (is_properly_derived_from (deref_to_type2,
5873 deref_to_type1))
5874 return -1;
5876 else if (same_type_p (deref_to_type1, deref_to_type2))
5878 if (is_properly_derived_from (deref_from_type2,
5879 deref_from_type1))
5880 return 1;
5881 else if (is_properly_derived_from (deref_from_type1,
5882 deref_from_type2))
5883 return -1;
5887 else if (CLASS_TYPE_P (non_reference (from_type1))
5888 && same_type_p (from_type1, from_type2))
5890 tree from = non_reference (from_type1);
5892 /* [over.ics.rank]
5894 --binding of an expression of type C to a reference of type
5895 B& is better than binding an expression of type C to a
5896 reference of type A&
5898 --conversion of C to B is better than conversion of C to A, */
5899 if (is_properly_derived_from (from, to_type1)
5900 && is_properly_derived_from (from, to_type2))
5902 if (is_properly_derived_from (to_type1, to_type2))
5903 return 1;
5904 else if (is_properly_derived_from (to_type2, to_type1))
5905 return -1;
5908 else if (CLASS_TYPE_P (non_reference (to_type1))
5909 && same_type_p (to_type1, to_type2))
5911 tree to = non_reference (to_type1);
5913 /* [over.ics.rank]
5915 --binding of an expression of type B to a reference of type
5916 A& is better than binding an expression of type C to a
5917 reference of type A&,
5919 --conversion of B to A is better than conversion of C to A */
5920 if (is_properly_derived_from (from_type1, to)
5921 && is_properly_derived_from (from_type2, to))
5923 if (is_properly_derived_from (from_type2, from_type1))
5924 return 1;
5925 else if (is_properly_derived_from (from_type1, from_type2))
5926 return -1;
5930 /* [over.ics.rank]
5932 --S1 and S2 differ only in their qualification conversion and yield
5933 similar types T1 and T2 (_conv.qual_), respectively, and the cv-
5934 qualification signature of type T1 is a proper subset of the cv-
5935 qualification signature of type T2 */
5936 if (ics1->kind == ck_qual
5937 && ics2->kind == ck_qual
5938 && same_type_p (from_type1, from_type2))
5939 return comp_cv_qual_signature (to_type1, to_type2);
5941 /* [over.ics.rank]
5943 --S1 and S2 are reference bindings (_dcl.init.ref_), and the
5944 types to which the references refer are the same type except for
5945 top-level cv-qualifiers, and the type to which the reference
5946 initialized by S2 refers is more cv-qualified than the type to
5947 which the reference initialized by S1 refers */
5949 if (target_type1 && target_type2
5950 && same_type_ignoring_top_level_qualifiers_p (to_type1, to_type2))
5951 return comp_cv_qualification (target_type2, target_type1);
5953 /* Neither conversion sequence is better than the other. */
5954 return 0;
5957 /* The source type for this standard conversion sequence. */
5959 static tree
5960 source_type (conversion *t)
5962 for (;; t = t->u.next)
5964 if (t->kind == ck_user
5965 || t->kind == ck_ambig
5966 || t->kind == ck_identity)
5967 return t->type;
5969 gcc_unreachable ();
5972 /* Note a warning about preferring WINNER to LOSER. We do this by storing
5973 a pointer to LOSER and re-running joust to produce the warning if WINNER
5974 is actually used. */
5976 static void
5977 add_warning (struct z_candidate *winner, struct z_candidate *loser)
5979 candidate_warning *cw;
5981 cw = conversion_obstack_alloc (sizeof (candidate_warning));
5982 cw->loser = loser;
5983 cw->next = winner->warnings;
5984 winner->warnings = cw;
5987 /* Compare two candidates for overloading as described in
5988 [over.match.best]. Return values:
5990 1: cand1 is better than cand2
5991 -1: cand2 is better than cand1
5992 0: cand1 and cand2 are indistinguishable */
5994 static int
5995 joust (struct z_candidate *cand1, struct z_candidate *cand2, bool warn)
5997 int winner = 0;
5998 int off1 = 0, off2 = 0;
5999 size_t i;
6000 size_t len;
6002 /* Candidates that involve bad conversions are always worse than those
6003 that don't. */
6004 if (cand1->viable > cand2->viable)
6005 return 1;
6006 if (cand1->viable < cand2->viable)
6007 return -1;
6009 /* If we have two pseudo-candidates for conversions to the same type,
6010 or two candidates for the same function, arbitrarily pick one. */
6011 if (cand1->fn == cand2->fn
6012 && (IS_TYPE_OR_DECL_P (cand1->fn)))
6013 return 1;
6015 /* a viable function F1
6016 is defined to be a better function than another viable function F2 if
6017 for all arguments i, ICSi(F1) is not a worse conversion sequence than
6018 ICSi(F2), and then */
6020 /* for some argument j, ICSj(F1) is a better conversion sequence than
6021 ICSj(F2) */
6023 /* For comparing static and non-static member functions, we ignore
6024 the implicit object parameter of the non-static function. The
6025 standard says to pretend that the static function has an object
6026 parm, but that won't work with operator overloading. */
6027 len = cand1->num_convs;
6028 if (len != cand2->num_convs)
6030 int static_1 = DECL_STATIC_FUNCTION_P (cand1->fn);
6031 int static_2 = DECL_STATIC_FUNCTION_P (cand2->fn);
6033 gcc_assert (static_1 != static_2);
6035 if (static_1)
6036 off2 = 1;
6037 else
6039 off1 = 1;
6040 --len;
6044 for (i = 0; i < len; ++i)
6046 conversion *t1 = cand1->convs[i + off1];
6047 conversion *t2 = cand2->convs[i + off2];
6048 int comp = compare_ics (t1, t2);
6050 if (comp != 0)
6052 if (warn_sign_promo
6053 && (CONVERSION_RANK (t1) + CONVERSION_RANK (t2)
6054 == cr_std + cr_promotion)
6055 && t1->kind == ck_std
6056 && t2->kind == ck_std
6057 && TREE_CODE (t1->type) == INTEGER_TYPE
6058 && TREE_CODE (t2->type) == INTEGER_TYPE
6059 && (TYPE_PRECISION (t1->type)
6060 == TYPE_PRECISION (t2->type))
6061 && (TYPE_UNSIGNED (t1->u.next->type)
6062 || (TREE_CODE (t1->u.next->type)
6063 == ENUMERAL_TYPE)))
6065 tree type = t1->u.next->type;
6066 tree type1, type2;
6067 struct z_candidate *w, *l;
6068 if (comp > 0)
6069 type1 = t1->type, type2 = t2->type,
6070 w = cand1, l = cand2;
6071 else
6072 type1 = t2->type, type2 = t1->type,
6073 w = cand2, l = cand1;
6075 if (warn)
6077 warning (0, "passing %qT chooses %qT over %qT",
6078 type, type1, type2);
6079 warning (0, " in call to %qD", w->fn);
6081 else
6082 add_warning (w, l);
6085 if (winner && comp != winner)
6087 winner = 0;
6088 goto tweak;
6090 winner = comp;
6094 /* warn about confusing overload resolution for user-defined conversions,
6095 either between a constructor and a conversion op, or between two
6096 conversion ops. */
6097 if (winner && warn_conversion && cand1->second_conv
6098 && (!DECL_CONSTRUCTOR_P (cand1->fn) || !DECL_CONSTRUCTOR_P (cand2->fn))
6099 && winner != compare_ics (cand1->second_conv, cand2->second_conv))
6101 struct z_candidate *w, *l;
6102 bool give_warning = false;
6104 if (winner == 1)
6105 w = cand1, l = cand2;
6106 else
6107 w = cand2, l = cand1;
6109 /* We don't want to complain about `X::operator T1 ()'
6110 beating `X::operator T2 () const', when T2 is a no less
6111 cv-qualified version of T1. */
6112 if (DECL_CONTEXT (w->fn) == DECL_CONTEXT (l->fn)
6113 && !DECL_CONSTRUCTOR_P (w->fn) && !DECL_CONSTRUCTOR_P (l->fn))
6115 tree t = TREE_TYPE (TREE_TYPE (l->fn));
6116 tree f = TREE_TYPE (TREE_TYPE (w->fn));
6118 if (TREE_CODE (t) == TREE_CODE (f) && POINTER_TYPE_P (t))
6120 t = TREE_TYPE (t);
6121 f = TREE_TYPE (f);
6123 if (!comp_ptr_ttypes (t, f))
6124 give_warning = true;
6126 else
6127 give_warning = true;
6129 if (!give_warning)
6130 /*NOP*/;
6131 else if (warn)
6133 tree source = source_type (w->convs[0]);
6134 if (! DECL_CONSTRUCTOR_P (w->fn))
6135 source = TREE_TYPE (source);
6136 warning (0, "choosing %qD over %qD", w->fn, l->fn);
6137 warning (0, " for conversion from %qT to %qT",
6138 source, w->second_conv->type);
6139 warning (0, " because conversion sequence for the argument is better");
6141 else
6142 add_warning (w, l);
6145 if (winner)
6146 return winner;
6148 /* or, if not that,
6149 F1 is a non-template function and F2 is a template function
6150 specialization. */
6152 if (!cand1->template_decl && cand2->template_decl)
6153 return 1;
6154 else if (cand1->template_decl && !cand2->template_decl)
6155 return -1;
6157 /* or, if not that,
6158 F1 and F2 are template functions and the function template for F1 is
6159 more specialized than the template for F2 according to the partial
6160 ordering rules. */
6162 if (cand1->template_decl && cand2->template_decl)
6164 winner = more_specialized_fn
6165 (TI_TEMPLATE (cand1->template_decl),
6166 TI_TEMPLATE (cand2->template_decl),
6167 /* [temp.func.order]: The presence of unused ellipsis and default
6168 arguments has no effect on the partial ordering of function
6169 templates. add_function_candidate() will not have
6170 counted the "this" argument for constructors. */
6171 cand1->num_convs + DECL_CONSTRUCTOR_P (cand1->fn));
6172 if (winner)
6173 return winner;
6176 /* or, if not that,
6177 the context is an initialization by user-defined conversion (see
6178 _dcl.init_ and _over.match.user_) and the standard conversion
6179 sequence from the return type of F1 to the destination type (i.e.,
6180 the type of the entity being initialized) is a better conversion
6181 sequence than the standard conversion sequence from the return type
6182 of F2 to the destination type. */
6184 if (cand1->second_conv)
6186 winner = compare_ics (cand1->second_conv, cand2->second_conv);
6187 if (winner)
6188 return winner;
6191 /* Check whether we can discard a builtin candidate, either because we
6192 have two identical ones or matching builtin and non-builtin candidates.
6194 (Pedantically in the latter case the builtin which matched the user
6195 function should not be added to the overload set, but we spot it here.
6197 [over.match.oper]
6198 ... the builtin candidates include ...
6199 - do not have the same parameter type list as any non-template
6200 non-member candidate. */
6202 if (TREE_CODE (cand1->fn) == IDENTIFIER_NODE
6203 || TREE_CODE (cand2->fn) == IDENTIFIER_NODE)
6205 for (i = 0; i < len; ++i)
6206 if (!same_type_p (cand1->convs[i]->type,
6207 cand2->convs[i]->type))
6208 break;
6209 if (i == cand1->num_convs)
6211 if (cand1->fn == cand2->fn)
6212 /* Two built-in candidates; arbitrarily pick one. */
6213 return 1;
6214 else if (TREE_CODE (cand1->fn) == IDENTIFIER_NODE)
6215 /* cand1 is built-in; prefer cand2. */
6216 return -1;
6217 else
6218 /* cand2 is built-in; prefer cand1. */
6219 return 1;
6223 /* If the two functions are the same (this can happen with declarations
6224 in multiple scopes and arg-dependent lookup), arbitrarily choose one. */
6225 if (DECL_P (cand1->fn) && DECL_P (cand2->fn)
6226 && equal_functions (cand1->fn, cand2->fn))
6227 return 1;
6229 tweak:
6231 /* Extension: If the worst conversion for one candidate is worse than the
6232 worst conversion for the other, take the first. */
6233 if (!pedantic)
6235 conversion_rank rank1 = cr_identity, rank2 = cr_identity;
6236 struct z_candidate *w = 0, *l = 0;
6238 for (i = 0; i < len; ++i)
6240 if (CONVERSION_RANK (cand1->convs[i+off1]) > rank1)
6241 rank1 = CONVERSION_RANK (cand1->convs[i+off1]);
6242 if (CONVERSION_RANK (cand2->convs[i + off2]) > rank2)
6243 rank2 = CONVERSION_RANK (cand2->convs[i + off2]);
6245 if (rank1 < rank2)
6246 winner = 1, w = cand1, l = cand2;
6247 if (rank1 > rank2)
6248 winner = -1, w = cand2, l = cand1;
6249 if (winner)
6251 if (warn)
6253 pedwarn ("\
6254 ISO C++ says that these are ambiguous, even \
6255 though the worst conversion for the first is better than \
6256 the worst conversion for the second:");
6257 print_z_candidate (_("candidate 1:"), w);
6258 print_z_candidate (_("candidate 2:"), l);
6260 else
6261 add_warning (w, l);
6262 return winner;
6266 gcc_assert (!winner);
6267 return 0;
6270 /* Given a list of candidates for overloading, find the best one, if any.
6271 This algorithm has a worst case of O(2n) (winner is last), and a best
6272 case of O(n/2) (totally ambiguous); much better than a sorting
6273 algorithm. */
6275 static struct z_candidate *
6276 tourney (struct z_candidate *candidates)
6278 struct z_candidate *champ = candidates, *challenger;
6279 int fate;
6280 int champ_compared_to_predecessor = 0;
6282 /* Walk through the list once, comparing each current champ to the next
6283 candidate, knocking out a candidate or two with each comparison. */
6285 for (challenger = champ->next; challenger; )
6287 fate = joust (champ, challenger, 0);
6288 if (fate == 1)
6289 challenger = challenger->next;
6290 else
6292 if (fate == 0)
6294 champ = challenger->next;
6295 if (champ == 0)
6296 return 0;
6297 champ_compared_to_predecessor = 0;
6299 else
6301 champ = challenger;
6302 champ_compared_to_predecessor = 1;
6305 challenger = champ->next;
6309 /* Make sure the champ is better than all the candidates it hasn't yet
6310 been compared to. */
6312 for (challenger = candidates;
6313 challenger != champ
6314 && !(champ_compared_to_predecessor && challenger->next == champ);
6315 challenger = challenger->next)
6317 fate = joust (champ, challenger, 0);
6318 if (fate != 1)
6319 return 0;
6322 return champ;
6325 /* Returns nonzero if things of type FROM can be converted to TO. */
6327 bool
6328 can_convert (tree to, tree from)
6330 return can_convert_arg (to, from, NULL_TREE, LOOKUP_NORMAL);
6333 /* Returns nonzero if ARG (of type FROM) can be converted to TO. */
6335 bool
6336 can_convert_arg (tree to, tree from, tree arg, int flags)
6338 conversion *t;
6339 void *p;
6340 bool ok_p;
6342 /* Get the high-water mark for the CONVERSION_OBSTACK. */
6343 p = conversion_obstack_alloc (0);
6345 t = implicit_conversion (to, from, arg, /*c_cast_p=*/false,
6346 flags);
6347 ok_p = (t && !t->bad_p);
6349 /* Free all the conversions we allocated. */
6350 obstack_free (&conversion_obstack, p);
6352 return ok_p;
6355 /* Like can_convert_arg, but allows dubious conversions as well. */
6357 bool
6358 can_convert_arg_bad (tree to, tree from, tree arg)
6360 conversion *t;
6361 void *p;
6363 /* Get the high-water mark for the CONVERSION_OBSTACK. */
6364 p = conversion_obstack_alloc (0);
6365 /* Try to perform the conversion. */
6366 t = implicit_conversion (to, from, arg, /*c_cast_p=*/false,
6367 LOOKUP_NORMAL);
6368 /* Free all the conversions we allocated. */
6369 obstack_free (&conversion_obstack, p);
6371 return t != NULL;
6374 /* Convert EXPR to TYPE. Return the converted expression.
6376 Note that we allow bad conversions here because by the time we get to
6377 this point we are committed to doing the conversion. If we end up
6378 doing a bad conversion, convert_like will complain. */
6380 tree
6381 perform_implicit_conversion (tree type, tree expr)
6383 conversion *conv;
6384 void *p;
6386 if (error_operand_p (expr))
6387 return error_mark_node;
6389 /* Get the high-water mark for the CONVERSION_OBSTACK. */
6390 p = conversion_obstack_alloc (0);
6392 conv = implicit_conversion (type, TREE_TYPE (expr), expr,
6393 /*c_cast_p=*/false,
6394 LOOKUP_NORMAL);
6395 if (!conv)
6397 error ("could not convert %qE to %qT", expr, type);
6398 expr = error_mark_node;
6400 else if (processing_template_decl)
6402 /* In a template, we are only concerned about determining the
6403 type of non-dependent expressions, so we do not have to
6404 perform the actual conversion. */
6405 if (TREE_TYPE (expr) != type)
6406 expr = build_nop (type, expr);
6408 else
6409 expr = convert_like (conv, expr);
6411 /* Free all the conversions we allocated. */
6412 obstack_free (&conversion_obstack, p);
6414 return expr;
6417 /* Convert EXPR to TYPE (as a direct-initialization) if that is
6418 permitted. If the conversion is valid, the converted expression is
6419 returned. Otherwise, NULL_TREE is returned, except in the case
6420 that TYPE is a class type; in that case, an error is issued. If
6421 C_CAST_P is true, then this direction initialization is taking
6422 place as part of a static_cast being attempted as part of a C-style
6423 cast. */
6425 tree
6426 perform_direct_initialization_if_possible (tree type,
6427 tree expr,
6428 bool c_cast_p)
6430 conversion *conv;
6431 void *p;
6433 if (type == error_mark_node || error_operand_p (expr))
6434 return error_mark_node;
6435 /* [dcl.init]
6437 If the destination type is a (possibly cv-qualified) class type:
6439 -- If the initialization is direct-initialization ...,
6440 constructors are considered. ... If no constructor applies, or
6441 the overload resolution is ambiguous, the initialization is
6442 ill-formed. */
6443 if (CLASS_TYPE_P (type))
6445 expr = build_special_member_call (NULL_TREE, complete_ctor_identifier,
6446 build_tree_list (NULL_TREE, expr),
6447 type, LOOKUP_NORMAL);
6448 return build_cplus_new (type, expr);
6451 /* Get the high-water mark for the CONVERSION_OBSTACK. */
6452 p = conversion_obstack_alloc (0);
6454 conv = implicit_conversion (type, TREE_TYPE (expr), expr,
6455 c_cast_p,
6456 LOOKUP_NORMAL);
6457 if (!conv || conv->bad_p)
6458 expr = NULL_TREE;
6459 else
6460 expr = convert_like_real (conv, expr, NULL_TREE, 0, 0,
6461 /*issue_conversion_warnings=*/false,
6462 c_cast_p);
6464 /* Free all the conversions we allocated. */
6465 obstack_free (&conversion_obstack, p);
6467 return expr;
6470 /* DECL is a VAR_DECL whose type is a REFERENCE_TYPE. The reference
6471 is being bound to a temporary. Create and return a new VAR_DECL
6472 with the indicated TYPE; this variable will store the value to
6473 which the reference is bound. */
6475 tree
6476 make_temporary_var_for_ref_to_temp (tree decl, tree type)
6478 tree var;
6480 /* Create the variable. */
6481 var = create_temporary_var (type);
6483 /* Register the variable. */
6484 if (TREE_STATIC (decl))
6486 /* Namespace-scope or local static; give it a mangled name. */
6487 tree name;
6489 TREE_STATIC (var) = 1;
6490 name = mangle_ref_init_variable (decl);
6491 DECL_NAME (var) = name;
6492 SET_DECL_ASSEMBLER_NAME (var, name);
6493 var = pushdecl_top_level (var);
6495 else
6496 /* Create a new cleanup level if necessary. */
6497 maybe_push_cleanup_level (type);
6499 return var;
6502 /* Convert EXPR to the indicated reference TYPE, in a way suitable for
6503 initializing a variable of that TYPE. If DECL is non-NULL, it is
6504 the VAR_DECL being initialized with the EXPR. (In that case, the
6505 type of DECL will be TYPE.) If DECL is non-NULL, then CLEANUP must
6506 also be non-NULL, and with *CLEANUP initialized to NULL. Upon
6507 return, if *CLEANUP is no longer NULL, it will be an expression
6508 that should be pushed as a cleanup after the returned expression
6509 is used to initialize DECL.
6511 Return the converted expression. */
6513 tree
6514 initialize_reference (tree type, tree expr, tree decl, tree *cleanup)
6516 conversion *conv;
6517 void *p;
6519 if (type == error_mark_node || error_operand_p (expr))
6520 return error_mark_node;
6522 /* Get the high-water mark for the CONVERSION_OBSTACK. */
6523 p = conversion_obstack_alloc (0);
6525 conv = reference_binding (type, TREE_TYPE (expr), expr, /*c_cast_p=*/false,
6526 LOOKUP_NORMAL);
6527 if (!conv || conv->bad_p)
6529 if (!(TYPE_QUALS (TREE_TYPE (type)) & TYPE_QUAL_CONST)
6530 && !real_lvalue_p (expr))
6531 error ("invalid initialization of non-const reference of "
6532 "type %qT from a temporary of type %qT",
6533 type, TREE_TYPE (expr));
6534 else
6535 error ("invalid initialization of reference of type "
6536 "%qT from expression of type %qT", type,
6537 TREE_TYPE (expr));
6538 return error_mark_node;
6541 /* If DECL is non-NULL, then this special rule applies:
6543 [class.temporary]
6545 The temporary to which the reference is bound or the temporary
6546 that is the complete object to which the reference is bound
6547 persists for the lifetime of the reference.
6549 The temporaries created during the evaluation of the expression
6550 initializing the reference, except the temporary to which the
6551 reference is bound, are destroyed at the end of the
6552 full-expression in which they are created.
6554 In that case, we store the converted expression into a new
6555 VAR_DECL in a new scope.
6557 However, we want to be careful not to create temporaries when
6558 they are not required. For example, given:
6560 struct B {};
6561 struct D : public B {};
6562 D f();
6563 const B& b = f();
6565 there is no need to copy the return value from "f"; we can just
6566 extend its lifetime. Similarly, given:
6568 struct S {};
6569 struct T { operator S(); };
6570 T t;
6571 const S& s = t;
6573 we can extend the lifetime of the return value of the conversion
6574 operator. */
6575 gcc_assert (conv->kind == ck_ref_bind);
6576 if (decl)
6578 tree var;
6579 tree base_conv_type;
6581 /* Skip over the REF_BIND. */
6582 conv = conv->u.next;
6583 /* If the next conversion is a BASE_CONV, skip that too -- but
6584 remember that the conversion was required. */
6585 if (conv->kind == ck_base)
6587 if (conv->check_copy_constructor_p)
6588 check_constructor_callable (TREE_TYPE (expr), expr);
6589 base_conv_type = conv->type;
6590 conv = conv->u.next;
6592 else
6593 base_conv_type = NULL_TREE;
6594 /* Perform the remainder of the conversion. */
6595 expr = convert_like_real (conv, expr,
6596 /*fn=*/NULL_TREE, /*argnum=*/0,
6597 /*inner=*/-1,
6598 /*issue_conversion_warnings=*/true,
6599 /*c_cast_p=*/false);
6600 if (error_operand_p (expr))
6601 expr = error_mark_node;
6602 else
6604 if (!real_lvalue_p (expr))
6606 tree init;
6607 tree type;
6609 /* Create the temporary variable. */
6610 type = TREE_TYPE (expr);
6611 var = make_temporary_var_for_ref_to_temp (decl, type);
6612 layout_decl (var, 0);
6613 /* If the rvalue is the result of a function call it will be
6614 a TARGET_EXPR. If it is some other construct (such as a
6615 member access expression where the underlying object is
6616 itself the result of a function call), turn it into a
6617 TARGET_EXPR here. It is important that EXPR be a
6618 TARGET_EXPR below since otherwise the INIT_EXPR will
6619 attempt to make a bitwise copy of EXPR to initialize
6620 VAR. */
6621 if (TREE_CODE (expr) != TARGET_EXPR)
6622 expr = get_target_expr (expr);
6623 /* Create the INIT_EXPR that will initialize the temporary
6624 variable. */
6625 init = build2 (INIT_EXPR, type, var, expr);
6626 if (at_function_scope_p ())
6628 add_decl_expr (var);
6629 *cleanup = cxx_maybe_build_cleanup (var);
6631 /* We must be careful to destroy the temporary only
6632 after its initialization has taken place. If the
6633 initialization throws an exception, then the
6634 destructor should not be run. We cannot simply
6635 transform INIT into something like:
6637 (INIT, ({ CLEANUP_STMT; }))
6639 because emit_local_var always treats the
6640 initializer as a full-expression. Thus, the
6641 destructor would run too early; it would run at the
6642 end of initializing the reference variable, rather
6643 than at the end of the block enclosing the
6644 reference variable.
6646 The solution is to pass back a cleanup expression
6647 which the caller is responsible for attaching to
6648 the statement tree. */
6650 else
6652 rest_of_decl_compilation (var, /*toplev=*/1, at_eof);
6653 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
6654 static_aggregates = tree_cons (NULL_TREE, var,
6655 static_aggregates);
6657 /* Use its address to initialize the reference variable. */
6658 expr = build_address (var);
6659 if (base_conv_type)
6660 expr = convert_to_base (expr,
6661 build_pointer_type (base_conv_type),
6662 /*check_access=*/true,
6663 /*nonnull=*/true);
6664 expr = build2 (COMPOUND_EXPR, TREE_TYPE (expr), init, expr);
6666 else
6667 /* Take the address of EXPR. */
6668 expr = build_unary_op (ADDR_EXPR, expr, 0);
6669 /* If a BASE_CONV was required, perform it now. */
6670 if (base_conv_type)
6671 expr = (perform_implicit_conversion
6672 (build_pointer_type (base_conv_type), expr));
6673 expr = build_nop (type, expr);
6676 else
6677 /* Perform the conversion. */
6678 expr = convert_like (conv, expr);
6680 /* Free all the conversions we allocated. */
6681 obstack_free (&conversion_obstack, p);
6683 return expr;
6686 #include "gt-cp-call.h"