* config/rs6000/rs6000.c (rs6000_override_options): Enable
[official-gcc.git] / gcc / cp / call.c
blob6743f924c2dd297865f84d065135b1bd083c3e44
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, 2006 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, 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 return true;
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 gcc_assert (TYPE_PTR_P (TREE_TYPE (function)));
285 fntype = TREE_TYPE (TREE_TYPE (function));
286 gcc_assert (TREE_CODE (fntype) == FUNCTION_TYPE
287 || TREE_CODE (fntype) == METHOD_TYPE);
288 result_type = TREE_TYPE (fntype);
290 if (TREE_CODE (function) == ADDR_EXPR
291 && TREE_CODE (TREE_OPERAND (function, 0)) == FUNCTION_DECL)
293 decl = TREE_OPERAND (function, 0);
294 if (!TREE_USED (decl))
296 /* We invoke build_call directly for several library
297 functions. These may have been declared normally if
298 we're building libgcc, so we can't just check
299 DECL_ARTIFICIAL. */
300 gcc_assert (DECL_ARTIFICIAL (decl)
301 || !strncmp (IDENTIFIER_POINTER (DECL_NAME (decl)),
302 "__", 2));
303 mark_used (decl);
306 else
307 decl = NULL_TREE;
309 /* We check both the decl and the type; a function may be known not to
310 throw without being declared throw(). */
311 nothrow = ((decl && TREE_NOTHROW (decl))
312 || TYPE_NOTHROW_P (TREE_TYPE (TREE_TYPE (function))));
314 if (decl && TREE_THIS_VOLATILE (decl) && cfun)
315 current_function_returns_abnormally = 1;
317 if (decl && TREE_DEPRECATED (decl))
318 warn_deprecated_use (decl);
319 require_complete_eh_spec_types (fntype, decl);
321 if (decl && DECL_CONSTRUCTOR_P (decl))
322 is_constructor = 1;
324 /* Don't pass empty class objects by value. This is useful
325 for tags in STL, which are used to control overload resolution.
326 We don't need to handle other cases of copying empty classes. */
327 if (! decl || ! DECL_BUILT_IN (decl))
328 for (tmp = parms; tmp; tmp = TREE_CHAIN (tmp))
329 if (is_empty_class (TREE_TYPE (TREE_VALUE (tmp)))
330 && ! TREE_ADDRESSABLE (TREE_TYPE (TREE_VALUE (tmp))))
332 tree t = build0 (EMPTY_CLASS_EXPR, TREE_TYPE (TREE_VALUE (tmp)));
333 TREE_VALUE (tmp) = build2 (COMPOUND_EXPR, TREE_TYPE (t),
334 TREE_VALUE (tmp), t);
337 function = build3 (CALL_EXPR, result_type, function, parms, NULL_TREE);
338 TREE_HAS_CONSTRUCTOR (function) = is_constructor;
339 TREE_NOTHROW (function) = nothrow;
341 return function;
344 /* Build something of the form ptr->method (args)
345 or object.method (args). This can also build
346 calls to constructors, and find friends.
348 Member functions always take their class variable
349 as a pointer.
351 INSTANCE is a class instance.
353 NAME is the name of the method desired, usually an IDENTIFIER_NODE.
355 PARMS help to figure out what that NAME really refers to.
357 BASETYPE_PATH, if non-NULL, contains a chain from the type of INSTANCE
358 down to the real instance type to use for access checking. We need this
359 information to get protected accesses correct.
361 FLAGS is the logical disjunction of zero or more LOOKUP_
362 flags. See cp-tree.h for more info.
364 If this is all OK, calls build_function_call with the resolved
365 member function.
367 This function must also handle being called to perform
368 initialization, promotion/coercion of arguments, and
369 instantiation of default parameters.
371 Note that NAME may refer to an instance variable name. If
372 `operator()()' is defined for the type of that field, then we return
373 that result. */
375 /* New overloading code. */
377 typedef struct z_candidate z_candidate;
379 typedef struct candidate_warning candidate_warning;
380 struct candidate_warning {
381 z_candidate *loser;
382 candidate_warning *next;
385 struct z_candidate {
386 /* The FUNCTION_DECL that will be called if this candidate is
387 selected by overload resolution. */
388 tree fn;
389 /* The arguments to use when calling this function. */
390 tree args;
391 /* The implicit conversion sequences for each of the arguments to
392 FN. */
393 conversion **convs;
394 /* The number of implicit conversion sequences. */
395 size_t num_convs;
396 /* If FN is a user-defined conversion, the standard conversion
397 sequence from the type returned by FN to the desired destination
398 type. */
399 conversion *second_conv;
400 int viable;
401 /* If FN is a member function, the binfo indicating the path used to
402 qualify the name of FN at the call site. This path is used to
403 determine whether or not FN is accessible if it is selected by
404 overload resolution. The DECL_CONTEXT of FN will always be a
405 (possibly improper) base of this binfo. */
406 tree access_path;
407 /* If FN is a non-static member function, the binfo indicating the
408 subobject to which the `this' pointer should be converted if FN
409 is selected by overload resolution. The type pointed to the by
410 the `this' pointer must correspond to the most derived class
411 indicated by the CONVERSION_PATH. */
412 tree conversion_path;
413 tree template_decl;
414 candidate_warning *warnings;
415 z_candidate *next;
418 /* Returns true iff T is a null pointer constant in the sense of
419 [conv.ptr]. */
421 bool
422 null_ptr_cst_p (tree t)
424 /* [conv.ptr]
426 A null pointer constant is an integral constant expression
427 (_expr.const_) rvalue of integer type that evaluates to zero. */
428 t = integral_constant_value (t);
429 if (t == null_node
430 || (CP_INTEGRAL_TYPE_P (TREE_TYPE (t))
431 && integer_zerop (t)
432 && !TREE_CONSTANT_OVERFLOW (t)))
433 return true;
434 return false;
437 /* Returns nonzero if PARMLIST consists of only default parms and/or
438 ellipsis. */
440 bool
441 sufficient_parms_p (tree parmlist)
443 for (; parmlist && parmlist != void_list_node;
444 parmlist = TREE_CHAIN (parmlist))
445 if (!TREE_PURPOSE (parmlist))
446 return false;
447 return true;
450 /* Allocate N bytes of memory from the conversion obstack. The memory
451 is zeroed before being returned. */
453 static void *
454 conversion_obstack_alloc (size_t n)
456 void *p;
457 if (!conversion_obstack_initialized)
459 gcc_obstack_init (&conversion_obstack);
460 conversion_obstack_initialized = true;
462 p = obstack_alloc (&conversion_obstack, n);
463 memset (p, 0, n);
464 return p;
467 /* Dynamically allocate a conversion. */
469 static conversion *
470 alloc_conversion (conversion_kind kind)
472 conversion *c;
473 c = (conversion *) conversion_obstack_alloc (sizeof (conversion));
474 c->kind = kind;
475 return c;
478 #ifdef ENABLE_CHECKING
480 /* Make sure that all memory on the conversion obstack has been
481 freed. */
483 void
484 validate_conversion_obstack (void)
486 if (conversion_obstack_initialized)
487 gcc_assert ((obstack_next_free (&conversion_obstack)
488 == obstack_base (&conversion_obstack)));
491 #endif /* ENABLE_CHECKING */
493 /* Dynamically allocate an array of N conversions. */
495 static conversion **
496 alloc_conversions (size_t n)
498 return (conversion **) conversion_obstack_alloc (n * sizeof (conversion *));
501 static conversion *
502 build_conv (conversion_kind code, tree type, conversion *from)
504 conversion *t;
505 conversion_rank rank = CONVERSION_RANK (from);
507 /* We can't use buildl1 here because CODE could be USER_CONV, which
508 takes two arguments. In that case, the caller is responsible for
509 filling in the second argument. */
510 t = alloc_conversion (code);
511 t->type = type;
512 t->u.next = from;
514 switch (code)
516 case ck_ptr:
517 case ck_pmem:
518 case ck_base:
519 case ck_std:
520 if (rank < cr_std)
521 rank = cr_std;
522 break;
524 case ck_qual:
525 if (rank < cr_exact)
526 rank = cr_exact;
527 break;
529 default:
530 break;
532 t->rank = rank;
533 t->user_conv_p = (code == ck_user || from->user_conv_p);
534 t->bad_p = from->bad_p;
535 t->base_p = false;
536 return t;
539 /* Build a representation of the identity conversion from EXPR to
540 itself. The TYPE should match the type of EXPR, if EXPR is non-NULL. */
542 static conversion *
543 build_identity_conv (tree type, tree expr)
545 conversion *c;
547 c = alloc_conversion (ck_identity);
548 c->type = type;
549 c->u.expr = expr;
551 return c;
554 /* Converting from EXPR to TYPE was ambiguous in the sense that there
555 were multiple user-defined conversions to accomplish the job.
556 Build a conversion that indicates that ambiguity. */
558 static conversion *
559 build_ambiguous_conv (tree type, tree expr)
561 conversion *c;
563 c = alloc_conversion (ck_ambig);
564 c->type = type;
565 c->u.expr = expr;
567 return c;
570 tree
571 strip_top_quals (tree t)
573 if (TREE_CODE (t) == ARRAY_TYPE)
574 return t;
575 return cp_build_qualified_type (t, 0);
578 /* Returns the standard conversion path (see [conv]) from type FROM to type
579 TO, if any. For proper handling of null pointer constants, you must
580 also pass the expression EXPR to convert from. If C_CAST_P is true,
581 this conversion is coming from a C-style cast. */
583 static conversion *
584 standard_conversion (tree to, tree from, tree expr, bool c_cast_p,
585 int flags)
587 enum tree_code fcode, tcode;
588 conversion *conv;
589 bool fromref = false;
591 to = non_reference (to);
592 if (TREE_CODE (from) == REFERENCE_TYPE)
594 fromref = true;
595 from = TREE_TYPE (from);
597 to = strip_top_quals (to);
598 from = strip_top_quals (from);
600 if ((TYPE_PTRFN_P (to) || TYPE_PTRMEMFUNC_P (to))
601 && expr && type_unknown_p (expr))
603 expr = instantiate_type (to, expr, tf_conv);
604 if (expr == error_mark_node)
605 return NULL;
606 from = TREE_TYPE (expr);
609 fcode = TREE_CODE (from);
610 tcode = TREE_CODE (to);
612 conv = build_identity_conv (from, expr);
613 if (fcode == FUNCTION_TYPE)
615 from = build_pointer_type (from);
616 fcode = TREE_CODE (from);
617 conv = build_conv (ck_lvalue, from, conv);
619 else if (fcode == ARRAY_TYPE)
621 from = build_pointer_type (TREE_TYPE (from));
622 fcode = TREE_CODE (from);
623 conv = build_conv (ck_lvalue, from, conv);
625 else if (fromref || (expr && lvalue_p (expr)))
627 if (expr)
629 tree bitfield_type;
630 bitfield_type = is_bitfield_expr_with_lowered_type (expr);
631 if (bitfield_type)
632 from = bitfield_type;
634 conv = build_conv (ck_rvalue, from, conv);
637 /* Allow conversion between `__complex__' data types. */
638 if (tcode == COMPLEX_TYPE && fcode == COMPLEX_TYPE)
640 /* The standard conversion sequence to convert FROM to TO is
641 the standard conversion sequence to perform componentwise
642 conversion. */
643 conversion *part_conv = standard_conversion
644 (TREE_TYPE (to), TREE_TYPE (from), NULL_TREE, c_cast_p, flags);
646 if (part_conv)
648 conv = build_conv (part_conv->kind, to, conv);
649 conv->rank = part_conv->rank;
651 else
652 conv = NULL;
654 return conv;
657 if (same_type_p (from, to))
658 return conv;
660 if ((tcode == POINTER_TYPE || TYPE_PTR_TO_MEMBER_P (to))
661 && expr && null_ptr_cst_p (expr))
662 conv = build_conv (ck_std, to, conv);
663 else if ((tcode == INTEGER_TYPE && fcode == POINTER_TYPE)
664 || (tcode == POINTER_TYPE && fcode == INTEGER_TYPE))
666 /* For backwards brain damage compatibility, allow interconversion of
667 pointers and integers with a pedwarn. */
668 conv = build_conv (ck_std, to, conv);
669 conv->bad_p = true;
671 else if (tcode == ENUMERAL_TYPE && fcode == INTEGER_TYPE)
673 /* For backwards brain damage compatibility, allow interconversion of
674 enums and integers with a pedwarn. */
675 conv = build_conv (ck_std, to, conv);
676 conv->bad_p = true;
678 else if ((tcode == POINTER_TYPE && fcode == POINTER_TYPE)
679 || (TYPE_PTRMEM_P (to) && TYPE_PTRMEM_P (from)))
681 tree to_pointee;
682 tree from_pointee;
684 if (tcode == POINTER_TYPE
685 && same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (from),
686 TREE_TYPE (to)))
688 else if (VOID_TYPE_P (TREE_TYPE (to))
689 && !TYPE_PTRMEM_P (from)
690 && TREE_CODE (TREE_TYPE (from)) != FUNCTION_TYPE)
692 from = build_pointer_type
693 (cp_build_qualified_type (void_type_node,
694 cp_type_quals (TREE_TYPE (from))));
695 conv = build_conv (ck_ptr, from, conv);
697 else if (TYPE_PTRMEM_P (from))
699 tree fbase = TYPE_PTRMEM_CLASS_TYPE (from);
700 tree tbase = TYPE_PTRMEM_CLASS_TYPE (to);
702 if (DERIVED_FROM_P (fbase, tbase)
703 && (same_type_ignoring_top_level_qualifiers_p
704 (TYPE_PTRMEM_POINTED_TO_TYPE (from),
705 TYPE_PTRMEM_POINTED_TO_TYPE (to))))
707 from = build_ptrmem_type (tbase,
708 TYPE_PTRMEM_POINTED_TO_TYPE (from));
709 conv = build_conv (ck_pmem, from, conv);
711 else if (!same_type_p (fbase, tbase))
712 return NULL;
714 else if (IS_AGGR_TYPE (TREE_TYPE (from))
715 && IS_AGGR_TYPE (TREE_TYPE (to))
716 /* [conv.ptr]
718 An rvalue of type "pointer to cv D," where D is a
719 class type, can be converted to an rvalue of type
720 "pointer to cv B," where B is a base class (clause
721 _class.derived_) of D. If B is an inaccessible
722 (clause _class.access_) or ambiguous
723 (_class.member.lookup_) base class of D, a program
724 that necessitates this conversion is ill-formed.
725 Therefore, we use DERIVED_FROM_P, and do not check
726 access or uniqueness. */
727 && DERIVED_FROM_P (TREE_TYPE (to), TREE_TYPE (from)))
729 from =
730 cp_build_qualified_type (TREE_TYPE (to),
731 cp_type_quals (TREE_TYPE (from)));
732 from = build_pointer_type (from);
733 conv = build_conv (ck_ptr, from, conv);
734 conv->base_p = true;
737 if (tcode == POINTER_TYPE)
739 to_pointee = TREE_TYPE (to);
740 from_pointee = TREE_TYPE (from);
742 else
744 to_pointee = TYPE_PTRMEM_POINTED_TO_TYPE (to);
745 from_pointee = TYPE_PTRMEM_POINTED_TO_TYPE (from);
748 if (same_type_p (from, to))
749 /* OK */;
750 else if (c_cast_p && comp_ptr_ttypes_const (to, from))
751 /* In a C-style cast, we ignore CV-qualification because we
752 are allowed to perform a static_cast followed by a
753 const_cast. */
754 conv = build_conv (ck_qual, to, conv);
755 else if (!c_cast_p && comp_ptr_ttypes (to_pointee, from_pointee))
756 conv = build_conv (ck_qual, to, conv);
757 else if (expr && string_conv_p (to, expr, 0))
758 /* converting from string constant to char *. */
759 conv = build_conv (ck_qual, to, conv);
760 else if (ptr_reasonably_similar (to_pointee, from_pointee))
762 conv = build_conv (ck_ptr, to, conv);
763 conv->bad_p = true;
765 else
766 return NULL;
768 from = to;
770 else if (TYPE_PTRMEMFUNC_P (to) && TYPE_PTRMEMFUNC_P (from))
772 tree fromfn = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (from));
773 tree tofn = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (to));
774 tree fbase = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (fromfn)));
775 tree tbase = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (tofn)));
777 if (!DERIVED_FROM_P (fbase, tbase)
778 || !same_type_p (TREE_TYPE (fromfn), TREE_TYPE (tofn))
779 || !compparms (TREE_CHAIN (TYPE_ARG_TYPES (fromfn)),
780 TREE_CHAIN (TYPE_ARG_TYPES (tofn)))
781 || cp_type_quals (fbase) != cp_type_quals (tbase))
782 return NULL;
784 from = cp_build_qualified_type (tbase, cp_type_quals (fbase));
785 from = build_method_type_directly (from,
786 TREE_TYPE (fromfn),
787 TREE_CHAIN (TYPE_ARG_TYPES (fromfn)));
788 from = build_ptrmemfunc_type (build_pointer_type (from));
789 conv = build_conv (ck_pmem, from, conv);
790 conv->base_p = true;
792 else if (tcode == BOOLEAN_TYPE)
794 /* [conv.bool]
796 An rvalue of arithmetic, enumeration, pointer, or pointer to
797 member type can be converted to an rvalue of type bool. */
798 if (ARITHMETIC_TYPE_P (from)
799 || fcode == ENUMERAL_TYPE
800 || fcode == POINTER_TYPE
801 || TYPE_PTR_TO_MEMBER_P (from))
803 conv = build_conv (ck_std, to, conv);
804 if (fcode == POINTER_TYPE
805 || TYPE_PTRMEM_P (from)
806 || (TYPE_PTRMEMFUNC_P (from)
807 && conv->rank < cr_pbool))
808 conv->rank = cr_pbool;
809 return conv;
812 return NULL;
814 /* We don't check for ENUMERAL_TYPE here because there are no standard
815 conversions to enum type. */
816 else if (tcode == INTEGER_TYPE || tcode == BOOLEAN_TYPE
817 || tcode == REAL_TYPE)
819 if (! (INTEGRAL_CODE_P (fcode) || fcode == REAL_TYPE))
820 return NULL;
821 conv = build_conv (ck_std, to, conv);
823 /* Give this a better rank if it's a promotion. */
824 if (same_type_p (to, type_promotes_to (from))
825 && conv->u.next->rank <= cr_promotion)
826 conv->rank = cr_promotion;
828 else if (fcode == VECTOR_TYPE && tcode == VECTOR_TYPE
829 && vector_types_convertible_p (from, to))
830 return build_conv (ck_std, to, conv);
831 else if (!(flags & LOOKUP_CONSTRUCTOR_CALLABLE)
832 && IS_AGGR_TYPE (to) && IS_AGGR_TYPE (from)
833 && is_properly_derived_from (from, to))
835 if (conv->kind == ck_rvalue)
836 conv = conv->u.next;
837 conv = build_conv (ck_base, to, conv);
838 /* The derived-to-base conversion indicates the initialization
839 of a parameter with base type from an object of a derived
840 type. A temporary object is created to hold the result of
841 the conversion. */
842 conv->need_temporary_p = true;
844 else
845 return NULL;
847 return conv;
850 /* Returns nonzero if T1 is reference-related to T2. */
852 static bool
853 reference_related_p (tree t1, tree t2)
855 t1 = TYPE_MAIN_VARIANT (t1);
856 t2 = TYPE_MAIN_VARIANT (t2);
858 /* [dcl.init.ref]
860 Given types "cv1 T1" and "cv2 T2," "cv1 T1" is reference-related
861 to "cv2 T2" if T1 is the same type as T2, or T1 is a base class
862 of T2. */
863 return (same_type_p (t1, t2)
864 || (CLASS_TYPE_P (t1) && CLASS_TYPE_P (t2)
865 && DERIVED_FROM_P (t1, t2)));
868 /* Returns nonzero if T1 is reference-compatible with T2. */
870 static bool
871 reference_compatible_p (tree t1, tree t2)
873 /* [dcl.init.ref]
875 "cv1 T1" is reference compatible with "cv2 T2" if T1 is
876 reference-related to T2 and cv1 is the same cv-qualification as,
877 or greater cv-qualification than, cv2. */
878 return (reference_related_p (t1, t2)
879 && at_least_as_qualified_p (t1, t2));
882 /* Determine whether or not the EXPR (of class type S) can be
883 converted to T as in [over.match.ref]. */
885 static conversion *
886 convert_class_to_reference (tree t, tree s, tree expr)
888 tree conversions;
889 tree arglist;
890 conversion *conv;
891 tree reference_type;
892 struct z_candidate *candidates;
893 struct z_candidate *cand;
894 bool any_viable_p;
896 conversions = lookup_conversions (s);
897 if (!conversions)
898 return NULL;
900 /* [over.match.ref]
902 Assuming that "cv1 T" is the underlying type of the reference
903 being initialized, and "cv S" is the type of the initializer
904 expression, with S a class type, the candidate functions are
905 selected as follows:
907 --The conversion functions of S and its base classes are
908 considered. Those that are not hidden within S and yield type
909 "reference to cv2 T2", where "cv1 T" is reference-compatible
910 (_dcl.init.ref_) with "cv2 T2", are candidate functions.
912 The argument list has one argument, which is the initializer
913 expression. */
915 candidates = 0;
917 /* Conceptually, we should take the address of EXPR and put it in
918 the argument list. Unfortunately, however, that can result in
919 error messages, which we should not issue now because we are just
920 trying to find a conversion operator. Therefore, we use NULL,
921 cast to the appropriate type. */
922 arglist = build_int_cst (build_pointer_type (s), 0);
923 arglist = build_tree_list (NULL_TREE, arglist);
925 reference_type = build_reference_type (t);
927 while (conversions)
929 tree fns = TREE_VALUE (conversions);
931 for (; fns; fns = OVL_NEXT (fns))
933 tree f = OVL_CURRENT (fns);
934 tree t2 = TREE_TYPE (TREE_TYPE (f));
936 cand = NULL;
938 /* If this is a template function, try to get an exact
939 match. */
940 if (TREE_CODE (f) == TEMPLATE_DECL)
942 cand = add_template_candidate (&candidates,
943 f, s,
944 NULL_TREE,
945 arglist,
946 reference_type,
947 TYPE_BINFO (s),
948 TREE_PURPOSE (conversions),
949 LOOKUP_NORMAL,
950 DEDUCE_CONV);
952 if (cand)
954 /* Now, see if the conversion function really returns
955 an lvalue of the appropriate type. From the
956 point of view of unification, simply returning an
957 rvalue of the right type is good enough. */
958 f = cand->fn;
959 t2 = TREE_TYPE (TREE_TYPE (f));
960 if (TREE_CODE (t2) != REFERENCE_TYPE
961 || !reference_compatible_p (t, TREE_TYPE (t2)))
963 candidates = candidates->next;
964 cand = NULL;
968 else if (TREE_CODE (t2) == REFERENCE_TYPE
969 && reference_compatible_p (t, TREE_TYPE (t2)))
970 cand = add_function_candidate (&candidates, f, s, arglist,
971 TYPE_BINFO (s),
972 TREE_PURPOSE (conversions),
973 LOOKUP_NORMAL);
975 if (cand)
977 conversion *identity_conv;
978 /* Build a standard conversion sequence indicating the
979 binding from the reference type returned by the
980 function to the desired REFERENCE_TYPE. */
981 identity_conv
982 = build_identity_conv (TREE_TYPE (TREE_TYPE
983 (TREE_TYPE (cand->fn))),
984 NULL_TREE);
985 cand->second_conv
986 = (direct_reference_binding
987 (reference_type, identity_conv));
988 cand->second_conv->bad_p |= cand->convs[0]->bad_p;
991 conversions = TREE_CHAIN (conversions);
994 candidates = splice_viable (candidates, pedantic, &any_viable_p);
995 /* If none of the conversion functions worked out, let our caller
996 know. */
997 if (!any_viable_p)
998 return NULL;
1000 cand = tourney (candidates);
1001 if (!cand)
1002 return NULL;
1004 /* Now that we know that this is the function we're going to use fix
1005 the dummy first argument. */
1006 cand->args = tree_cons (NULL_TREE,
1007 build_this (expr),
1008 TREE_CHAIN (cand->args));
1010 /* Build a user-defined conversion sequence representing the
1011 conversion. */
1012 conv = build_conv (ck_user,
1013 TREE_TYPE (TREE_TYPE (cand->fn)),
1014 build_identity_conv (TREE_TYPE (expr), expr));
1015 conv->cand = cand;
1017 /* Merge it with the standard conversion sequence from the
1018 conversion function's return type to the desired type. */
1019 cand->second_conv = merge_conversion_sequences (conv, cand->second_conv);
1021 if (cand->viable == -1)
1022 conv->bad_p = true;
1024 return cand->second_conv;
1027 /* A reference of the indicated TYPE is being bound directly to the
1028 expression represented by the implicit conversion sequence CONV.
1029 Return a conversion sequence for this binding. */
1031 static conversion *
1032 direct_reference_binding (tree type, conversion *conv)
1034 tree t;
1036 gcc_assert (TREE_CODE (type) == REFERENCE_TYPE);
1037 gcc_assert (TREE_CODE (conv->type) != REFERENCE_TYPE);
1039 t = TREE_TYPE (type);
1041 /* [over.ics.rank]
1043 When a parameter of reference type binds directly
1044 (_dcl.init.ref_) to an argument expression, the implicit
1045 conversion sequence is the identity conversion, unless the
1046 argument expression has a type that is a derived class of the
1047 parameter type, in which case the implicit conversion sequence is
1048 a derived-to-base Conversion.
1050 If the parameter binds directly to the result of applying a
1051 conversion function to the argument expression, the implicit
1052 conversion sequence is a user-defined conversion sequence
1053 (_over.ics.user_), with the second standard conversion sequence
1054 either an identity conversion or, if the conversion function
1055 returns an entity of a type that is a derived class of the
1056 parameter type, a derived-to-base conversion. */
1057 if (!same_type_ignoring_top_level_qualifiers_p (t, conv->type))
1059 /* Represent the derived-to-base conversion. */
1060 conv = build_conv (ck_base, t, conv);
1061 /* We will actually be binding to the base-class subobject in
1062 the derived class, so we mark this conversion appropriately.
1063 That way, convert_like knows not to generate a temporary. */
1064 conv->need_temporary_p = false;
1066 return build_conv (ck_ref_bind, type, conv);
1069 /* Returns the conversion path from type FROM to reference type TO for
1070 purposes of reference binding. For lvalue binding, either pass a
1071 reference type to FROM or an lvalue expression to EXPR. If the
1072 reference will be bound to a temporary, NEED_TEMPORARY_P is set for
1073 the conversion returned. */
1075 static conversion *
1076 reference_binding (tree rto, tree rfrom, tree expr, int flags)
1078 conversion *conv = NULL;
1079 tree to = TREE_TYPE (rto);
1080 tree from = rfrom;
1081 bool related_p;
1082 bool compatible_p;
1083 cp_lvalue_kind lvalue_p = clk_none;
1085 if (TREE_CODE (to) == FUNCTION_TYPE && expr && type_unknown_p (expr))
1087 expr = instantiate_type (to, expr, tf_none);
1088 if (expr == error_mark_node)
1089 return NULL;
1090 from = TREE_TYPE (expr);
1093 if (TREE_CODE (from) == REFERENCE_TYPE)
1095 /* Anything with reference type is an lvalue. */
1096 lvalue_p = clk_ordinary;
1097 from = TREE_TYPE (from);
1099 else if (expr)
1100 lvalue_p = real_lvalue_p (expr);
1102 /* Figure out whether or not the types are reference-related and
1103 reference compatible. We have do do this after stripping
1104 references from FROM. */
1105 related_p = reference_related_p (to, from);
1106 compatible_p = reference_compatible_p (to, from);
1108 if (lvalue_p && compatible_p)
1110 /* [dcl.init.ref]
1112 If the initializer expression
1114 -- is an lvalue (but not an lvalue for a bit-field), and "cv1 T1"
1115 is reference-compatible with "cv2 T2,"
1117 the reference is bound directly to the initializer expression
1118 lvalue. */
1119 conv = build_identity_conv (from, expr);
1120 conv = direct_reference_binding (rto, conv);
1121 if ((lvalue_p & clk_bitfield) != 0
1122 || ((lvalue_p & clk_packed) != 0 && !TYPE_PACKED (to)))
1123 /* For the purposes of overload resolution, we ignore the fact
1124 this expression is a bitfield or packed field. (In particular,
1125 [over.ics.ref] says specifically that a function with a
1126 non-const reference parameter is viable even if the
1127 argument is a bitfield.)
1129 However, when we actually call the function we must create
1130 a temporary to which to bind the reference. If the
1131 reference is volatile, or isn't const, then we cannot make
1132 a temporary, so we just issue an error when the conversion
1133 actually occurs. */
1134 conv->need_temporary_p = true;
1136 return conv;
1138 else if (CLASS_TYPE_P (from) && !(flags & LOOKUP_NO_CONVERSION))
1140 /* [dcl.init.ref]
1142 If the initializer expression
1144 -- has a class type (i.e., T2 is a class type) can be
1145 implicitly converted to an lvalue of type "cv3 T3," where
1146 "cv1 T1" is reference-compatible with "cv3 T3". (this
1147 conversion is selected by enumerating the applicable
1148 conversion functions (_over.match.ref_) and choosing the
1149 best one through overload resolution. (_over.match_).
1151 the reference is bound to the lvalue result of the conversion
1152 in the second case. */
1153 conv = convert_class_to_reference (to, from, expr);
1154 if (conv)
1155 return conv;
1158 /* From this point on, we conceptually need temporaries, even if we
1159 elide them. Only the cases above are "direct bindings". */
1160 if (flags & LOOKUP_NO_TEMP_BIND)
1161 return NULL;
1163 /* [over.ics.rank]
1165 When a parameter of reference type is not bound directly to an
1166 argument expression, the conversion sequence is the one required
1167 to convert the argument expression to the underlying type of the
1168 reference according to _over.best.ics_. Conceptually, this
1169 conversion sequence corresponds to copy-initializing a temporary
1170 of the underlying type with the argument expression. Any
1171 difference in top-level cv-qualification is subsumed by the
1172 initialization itself and does not constitute a conversion. */
1174 /* [dcl.init.ref]
1176 Otherwise, the reference shall be to a non-volatile const type. */
1177 if (!CP_TYPE_CONST_NON_VOLATILE_P (to))
1178 return NULL;
1180 /* [dcl.init.ref]
1182 If the initializer expression is an rvalue, with T2 a class type,
1183 and "cv1 T1" is reference-compatible with "cv2 T2", the reference
1184 is bound in one of the following ways:
1186 -- The reference is bound to the object represented by the rvalue
1187 or to a sub-object within that object.
1189 -- ...
1191 We use the first alternative. The implicit conversion sequence
1192 is supposed to be same as we would obtain by generating a
1193 temporary. Fortunately, if the types are reference compatible,
1194 then this is either an identity conversion or the derived-to-base
1195 conversion, just as for direct binding. */
1196 if (CLASS_TYPE_P (from) && compatible_p)
1198 conv = build_identity_conv (from, expr);
1199 conv = direct_reference_binding (rto, conv);
1200 if (!(flags & LOOKUP_CONSTRUCTOR_CALLABLE))
1201 conv->u.next->check_copy_constructor_p = true;
1202 return conv;
1205 /* [dcl.init.ref]
1207 Otherwise, a temporary of type "cv1 T1" is created and
1208 initialized from the initializer expression using the rules for a
1209 non-reference copy initialization. If T1 is reference-related to
1210 T2, cv1 must be the same cv-qualification as, or greater
1211 cv-qualification than, cv2; otherwise, the program is ill-formed. */
1212 if (related_p && !at_least_as_qualified_p (to, from))
1213 return NULL;
1215 conv = implicit_conversion (to, from, expr, /*c_cast_p=*/false,
1216 flags);
1217 if (!conv)
1218 return NULL;
1220 conv = build_conv (ck_ref_bind, rto, conv);
1221 /* This reference binding, unlike those above, requires the
1222 creation of a temporary. */
1223 conv->need_temporary_p = true;
1225 return conv;
1228 /* Returns the implicit conversion sequence (see [over.ics]) from type
1229 FROM to type TO. The optional expression EXPR may affect the
1230 conversion. FLAGS are the usual overloading flags. Only
1231 LOOKUP_NO_CONVERSION is significant. If C_CAST_P is true, this
1232 conversion is coming from a C-style cast. */
1234 static conversion *
1235 implicit_conversion (tree to, tree from, tree expr, bool c_cast_p,
1236 int flags)
1238 conversion *conv;
1240 if (from == error_mark_node || to == error_mark_node
1241 || expr == error_mark_node)
1242 return NULL;
1244 if (TREE_CODE (to) == REFERENCE_TYPE)
1245 conv = reference_binding (to, from, expr, flags);
1246 else
1247 conv = standard_conversion (to, from, expr, c_cast_p, flags);
1249 if (conv)
1250 return conv;
1252 if (expr != NULL_TREE
1253 && (IS_AGGR_TYPE (from)
1254 || IS_AGGR_TYPE (to))
1255 && (flags & LOOKUP_NO_CONVERSION) == 0)
1257 struct z_candidate *cand;
1259 cand = build_user_type_conversion_1
1260 (to, expr, LOOKUP_ONLYCONVERTING);
1261 if (cand)
1262 conv = cand->second_conv;
1264 /* We used to try to bind a reference to a temporary here, but that
1265 is now handled by the recursive call to this function at the end
1266 of reference_binding. */
1267 return conv;
1270 return NULL;
1273 /* Add a new entry to the list of candidates. Used by the add_*_candidate
1274 functions. */
1276 static struct z_candidate *
1277 add_candidate (struct z_candidate **candidates,
1278 tree fn, tree args,
1279 size_t num_convs, conversion **convs,
1280 tree access_path, tree conversion_path,
1281 int viable)
1283 struct z_candidate *cand = (struct z_candidate *)
1284 conversion_obstack_alloc (sizeof (struct z_candidate));
1286 cand->fn = fn;
1287 cand->args = args;
1288 cand->convs = convs;
1289 cand->num_convs = num_convs;
1290 cand->access_path = access_path;
1291 cand->conversion_path = conversion_path;
1292 cand->viable = viable;
1293 cand->next = *candidates;
1294 *candidates = cand;
1296 return cand;
1299 /* Create an overload candidate for the function or method FN called with
1300 the argument list ARGLIST and add it to CANDIDATES. FLAGS is passed on
1301 to implicit_conversion.
1303 CTYPE, if non-NULL, is the type we want to pretend this function
1304 comes from for purposes of overload resolution. */
1306 static struct z_candidate *
1307 add_function_candidate (struct z_candidate **candidates,
1308 tree fn, tree ctype, tree arglist,
1309 tree access_path, tree conversion_path,
1310 int flags)
1312 tree parmlist = TYPE_ARG_TYPES (TREE_TYPE (fn));
1313 int i, len;
1314 conversion **convs;
1315 tree parmnode, argnode;
1316 tree orig_arglist;
1317 int viable = 1;
1319 /* At this point we should not see any functions which haven't been
1320 explicitly declared, except for friend functions which will have
1321 been found using argument dependent lookup. */
1322 gcc_assert (!DECL_ANTICIPATED (fn) || DECL_HIDDEN_FRIEND_P (fn));
1324 /* The `this', `in_chrg' and VTT arguments to constructors are not
1325 considered in overload resolution. */
1326 if (DECL_CONSTRUCTOR_P (fn))
1328 parmlist = skip_artificial_parms_for (fn, parmlist);
1329 orig_arglist = arglist;
1330 arglist = skip_artificial_parms_for (fn, arglist);
1332 else
1333 orig_arglist = arglist;
1335 len = list_length (arglist);
1336 convs = alloc_conversions (len);
1338 /* 13.3.2 - Viable functions [over.match.viable]
1339 First, to be a viable function, a candidate function shall have enough
1340 parameters to agree in number with the arguments in the list.
1342 We need to check this first; otherwise, checking the ICSes might cause
1343 us to produce an ill-formed template instantiation. */
1345 parmnode = parmlist;
1346 for (i = 0; i < len; ++i)
1348 if (parmnode == NULL_TREE || parmnode == void_list_node)
1349 break;
1350 parmnode = TREE_CHAIN (parmnode);
1353 if (i < len && parmnode)
1354 viable = 0;
1356 /* Make sure there are default args for the rest of the parms. */
1357 else if (!sufficient_parms_p (parmnode))
1358 viable = 0;
1360 if (! viable)
1361 goto out;
1363 /* Second, for F to be a viable function, there shall exist for each
1364 argument an implicit conversion sequence that converts that argument
1365 to the corresponding parameter of F. */
1367 parmnode = parmlist;
1368 argnode = arglist;
1370 for (i = 0; i < len; ++i)
1372 tree arg = TREE_VALUE (argnode);
1373 tree argtype = lvalue_type (arg);
1374 conversion *t;
1375 int is_this;
1377 if (parmnode == void_list_node)
1378 break;
1380 is_this = (i == 0 && DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
1381 && ! DECL_CONSTRUCTOR_P (fn));
1383 if (parmnode)
1385 tree parmtype = TREE_VALUE (parmnode);
1387 /* The type of the implicit object parameter ('this') for
1388 overload resolution is not always the same as for the
1389 function itself; conversion functions are considered to
1390 be members of the class being converted, and functions
1391 introduced by a using-declaration are considered to be
1392 members of the class that uses them.
1394 Since build_over_call ignores the ICS for the `this'
1395 parameter, we can just change the parm type. */
1396 if (ctype && is_this)
1398 parmtype
1399 = build_qualified_type (ctype,
1400 TYPE_QUALS (TREE_TYPE (parmtype)));
1401 parmtype = build_pointer_type (parmtype);
1404 t = implicit_conversion (parmtype, argtype, arg,
1405 /*c_cast_p=*/false, flags);
1407 else
1409 t = build_identity_conv (argtype, arg);
1410 t->ellipsis_p = true;
1413 if (t && is_this)
1414 t->this_p = true;
1416 convs[i] = t;
1417 if (! t)
1419 viable = 0;
1420 break;
1423 if (t->bad_p)
1424 viable = -1;
1426 if (parmnode)
1427 parmnode = TREE_CHAIN (parmnode);
1428 argnode = TREE_CHAIN (argnode);
1431 out:
1432 return add_candidate (candidates, fn, orig_arglist, len, convs,
1433 access_path, conversion_path, viable);
1436 /* Create an overload candidate for the conversion function FN which will
1437 be invoked for expression OBJ, producing a pointer-to-function which
1438 will in turn be called with the argument list ARGLIST, and add it to
1439 CANDIDATES. FLAGS is passed on to implicit_conversion.
1441 Actually, we don't really care about FN; we care about the type it
1442 converts to. There may be multiple conversion functions that will
1443 convert to that type, and we rely on build_user_type_conversion_1 to
1444 choose the best one; so when we create our candidate, we record the type
1445 instead of the function. */
1447 static struct z_candidate *
1448 add_conv_candidate (struct z_candidate **candidates, tree fn, tree obj,
1449 tree arglist, tree access_path, tree conversion_path)
1451 tree totype = TREE_TYPE (TREE_TYPE (fn));
1452 int i, len, viable, flags;
1453 tree parmlist, parmnode, argnode;
1454 conversion **convs;
1456 for (parmlist = totype; TREE_CODE (parmlist) != FUNCTION_TYPE; )
1457 parmlist = TREE_TYPE (parmlist);
1458 parmlist = TYPE_ARG_TYPES (parmlist);
1460 len = list_length (arglist) + 1;
1461 convs = alloc_conversions (len);
1462 parmnode = parmlist;
1463 argnode = arglist;
1464 viable = 1;
1465 flags = LOOKUP_NORMAL;
1467 /* Don't bother looking up the same type twice. */
1468 if (*candidates && (*candidates)->fn == totype)
1469 return NULL;
1471 for (i = 0; i < len; ++i)
1473 tree arg = i == 0 ? obj : TREE_VALUE (argnode);
1474 tree argtype = lvalue_type (arg);
1475 conversion *t;
1477 if (i == 0)
1478 t = implicit_conversion (totype, argtype, arg, /*c_cast_p=*/false,
1479 flags);
1480 else if (parmnode == void_list_node)
1481 break;
1482 else if (parmnode)
1483 t = implicit_conversion (TREE_VALUE (parmnode), argtype, arg,
1484 /*c_cast_p=*/false, flags);
1485 else
1487 t = build_identity_conv (argtype, arg);
1488 t->ellipsis_p = true;
1491 convs[i] = t;
1492 if (! t)
1493 break;
1495 if (t->bad_p)
1496 viable = -1;
1498 if (i == 0)
1499 continue;
1501 if (parmnode)
1502 parmnode = TREE_CHAIN (parmnode);
1503 argnode = TREE_CHAIN (argnode);
1506 if (i < len)
1507 viable = 0;
1509 if (!sufficient_parms_p (parmnode))
1510 viable = 0;
1512 return add_candidate (candidates, totype, arglist, len, convs,
1513 access_path, conversion_path, viable);
1516 static void
1517 build_builtin_candidate (struct z_candidate **candidates, tree fnname,
1518 tree type1, tree type2, tree *args, tree *argtypes,
1519 int flags)
1521 conversion *t;
1522 conversion **convs;
1523 size_t num_convs;
1524 int viable = 1, i;
1525 tree types[2];
1527 types[0] = type1;
1528 types[1] = type2;
1530 num_convs = args[2] ? 3 : (args[1] ? 2 : 1);
1531 convs = alloc_conversions (num_convs);
1533 for (i = 0; i < 2; ++i)
1535 if (! args[i])
1536 break;
1538 t = implicit_conversion (types[i], argtypes[i], args[i],
1539 /*c_cast_p=*/false, flags);
1540 if (! t)
1542 viable = 0;
1543 /* We need something for printing the candidate. */
1544 t = build_identity_conv (types[i], NULL_TREE);
1546 else if (t->bad_p)
1547 viable = 0;
1548 convs[i] = t;
1551 /* For COND_EXPR we rearranged the arguments; undo that now. */
1552 if (args[2])
1554 convs[2] = convs[1];
1555 convs[1] = convs[0];
1556 t = implicit_conversion (boolean_type_node, argtypes[2], args[2],
1557 /*c_cast_p=*/false, flags);
1558 if (t)
1559 convs[0] = t;
1560 else
1561 viable = 0;
1564 add_candidate (candidates, fnname, /*args=*/NULL_TREE,
1565 num_convs, convs,
1566 /*access_path=*/NULL_TREE,
1567 /*conversion_path=*/NULL_TREE,
1568 viable);
1571 static bool
1572 is_complete (tree t)
1574 return COMPLETE_TYPE_P (complete_type (t));
1577 /* Returns nonzero if TYPE is a promoted arithmetic type. */
1579 static bool
1580 promoted_arithmetic_type_p (tree type)
1582 /* [over.built]
1584 In this section, the term promoted integral type is used to refer
1585 to those integral types which are preserved by integral promotion
1586 (including e.g. int and long but excluding e.g. char).
1587 Similarly, the term promoted arithmetic type refers to promoted
1588 integral types plus floating types. */
1589 return ((INTEGRAL_TYPE_P (type)
1590 && same_type_p (type_promotes_to (type), type))
1591 || TREE_CODE (type) == REAL_TYPE);
1594 /* Create any builtin operator overload candidates for the operator in
1595 question given the converted operand types TYPE1 and TYPE2. The other
1596 args are passed through from add_builtin_candidates to
1597 build_builtin_candidate.
1599 TYPE1 and TYPE2 may not be permissible, and we must filter them.
1600 If CODE is requires candidates operands of the same type of the kind
1601 of which TYPE1 and TYPE2 are, we add both candidates
1602 CODE (TYPE1, TYPE1) and CODE (TYPE2, TYPE2). */
1604 static void
1605 add_builtin_candidate (struct z_candidate **candidates, enum tree_code code,
1606 enum tree_code code2, tree fnname, tree type1,
1607 tree type2, tree *args, tree *argtypes, int flags)
1609 switch (code)
1611 case POSTINCREMENT_EXPR:
1612 case POSTDECREMENT_EXPR:
1613 args[1] = integer_zero_node;
1614 type2 = integer_type_node;
1615 break;
1616 default:
1617 break;
1620 switch (code)
1623 /* 4 For every pair T, VQ), where T is an arithmetic or enumeration type,
1624 and VQ is either volatile or empty, there exist candidate operator
1625 functions of the form
1626 VQ T& operator++(VQ T&);
1627 T operator++(VQ T&, int);
1628 5 For every pair T, VQ), where T is an enumeration type or an arithmetic
1629 type other than bool, and VQ is either volatile or empty, there exist
1630 candidate operator functions of the form
1631 VQ T& operator--(VQ T&);
1632 T operator--(VQ T&, int);
1633 6 For every pair T, VQ), where T is a cv-qualified or cv-unqualified
1634 complete object type, and VQ is either volatile or empty, there exist
1635 candidate operator functions of the form
1636 T*VQ& operator++(T*VQ&);
1637 T*VQ& operator--(T*VQ&);
1638 T* operator++(T*VQ&, int);
1639 T* operator--(T*VQ&, int); */
1641 case POSTDECREMENT_EXPR:
1642 case PREDECREMENT_EXPR:
1643 if (TREE_CODE (type1) == BOOLEAN_TYPE)
1644 return;
1645 case POSTINCREMENT_EXPR:
1646 case PREINCREMENT_EXPR:
1647 if (ARITHMETIC_TYPE_P (type1) || TYPE_PTROB_P (type1))
1649 type1 = build_reference_type (type1);
1650 break;
1652 return;
1654 /* 7 For every cv-qualified or cv-unqualified complete object type T, there
1655 exist candidate operator functions of the form
1657 T& operator*(T*);
1659 8 For every function type T, there exist candidate operator functions of
1660 the form
1661 T& operator*(T*); */
1663 case INDIRECT_REF:
1664 if (TREE_CODE (type1) == POINTER_TYPE
1665 && (TYPE_PTROB_P (type1)
1666 || TREE_CODE (TREE_TYPE (type1)) == FUNCTION_TYPE))
1667 break;
1668 return;
1670 /* 9 For every type T, there exist candidate operator functions of the form
1671 T* operator+(T*);
1673 10For every promoted arithmetic type T, there exist candidate operator
1674 functions of the form
1675 T operator+(T);
1676 T operator-(T); */
1678 case UNARY_PLUS_EXPR: /* unary + */
1679 if (TREE_CODE (type1) == POINTER_TYPE)
1680 break;
1681 case NEGATE_EXPR:
1682 if (ARITHMETIC_TYPE_P (type1))
1683 break;
1684 return;
1686 /* 11For every promoted integral type T, there exist candidate operator
1687 functions of the form
1688 T operator~(T); */
1690 case BIT_NOT_EXPR:
1691 if (INTEGRAL_TYPE_P (type1))
1692 break;
1693 return;
1695 /* 12For every quintuple C1, C2, T, CV1, CV2), where C2 is a class type, C1
1696 is the same type as C2 or is a derived class of C2, T is a complete
1697 object type or a function type, and CV1 and CV2 are cv-qualifier-seqs,
1698 there exist candidate operator functions of the form
1699 CV12 T& operator->*(CV1 C1*, CV2 T C2::*);
1700 where CV12 is the union of CV1 and CV2. */
1702 case MEMBER_REF:
1703 if (TREE_CODE (type1) == POINTER_TYPE
1704 && TYPE_PTR_TO_MEMBER_P (type2))
1706 tree c1 = TREE_TYPE (type1);
1707 tree c2 = TYPE_PTRMEM_CLASS_TYPE (type2);
1709 if (IS_AGGR_TYPE (c1) && DERIVED_FROM_P (c2, c1)
1710 && (TYPE_PTRMEMFUNC_P (type2)
1711 || is_complete (TYPE_PTRMEM_POINTED_TO_TYPE (type2))))
1712 break;
1714 return;
1716 /* 13For every pair of promoted arithmetic types L and R, there exist can-
1717 didate operator functions of the form
1718 LR operator*(L, R);
1719 LR operator/(L, R);
1720 LR operator+(L, R);
1721 LR operator-(L, R);
1722 bool operator<(L, R);
1723 bool operator>(L, R);
1724 bool operator<=(L, R);
1725 bool operator>=(L, R);
1726 bool operator==(L, R);
1727 bool operator!=(L, R);
1728 where LR is the result of the usual arithmetic conversions between
1729 types L and R.
1731 14For every pair of types T and I, where T is a cv-qualified or cv-
1732 unqualified complete object type and I is a promoted integral type,
1733 there exist candidate operator functions of the form
1734 T* operator+(T*, I);
1735 T& operator[](T*, I);
1736 T* operator-(T*, I);
1737 T* operator+(I, T*);
1738 T& operator[](I, T*);
1740 15For every T, where T is a pointer to complete object type, there exist
1741 candidate operator functions of the form112)
1742 ptrdiff_t operator-(T, T);
1744 16For every pointer or enumeration type T, there exist candidate operator
1745 functions of the form
1746 bool operator<(T, T);
1747 bool operator>(T, T);
1748 bool operator<=(T, T);
1749 bool operator>=(T, T);
1750 bool operator==(T, T);
1751 bool operator!=(T, T);
1753 17For every pointer to member type T, there exist candidate operator
1754 functions of the form
1755 bool operator==(T, T);
1756 bool operator!=(T, T); */
1758 case MINUS_EXPR:
1759 if (TYPE_PTROB_P (type1) && TYPE_PTROB_P (type2))
1760 break;
1761 if (TYPE_PTROB_P (type1) && INTEGRAL_TYPE_P (type2))
1763 type2 = ptrdiff_type_node;
1764 break;
1766 case MULT_EXPR:
1767 case TRUNC_DIV_EXPR:
1768 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
1769 break;
1770 return;
1772 case EQ_EXPR:
1773 case NE_EXPR:
1774 if ((TYPE_PTRMEMFUNC_P (type1) && TYPE_PTRMEMFUNC_P (type2))
1775 || (TYPE_PTRMEM_P (type1) && TYPE_PTRMEM_P (type2)))
1776 break;
1777 if (TYPE_PTR_TO_MEMBER_P (type1) && null_ptr_cst_p (args[1]))
1779 type2 = type1;
1780 break;
1782 if (TYPE_PTR_TO_MEMBER_P (type2) && null_ptr_cst_p (args[0]))
1784 type1 = type2;
1785 break;
1787 /* Fall through. */
1788 case LT_EXPR:
1789 case GT_EXPR:
1790 case LE_EXPR:
1791 case GE_EXPR:
1792 case MAX_EXPR:
1793 case MIN_EXPR:
1794 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
1795 break;
1796 if (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
1797 break;
1798 if (TREE_CODE (type1) == ENUMERAL_TYPE && TREE_CODE (type2) == ENUMERAL_TYPE)
1799 break;
1800 if (TYPE_PTR_P (type1) && null_ptr_cst_p (args[1]))
1802 type2 = type1;
1803 break;
1805 if (null_ptr_cst_p (args[0]) && TYPE_PTR_P (type2))
1807 type1 = type2;
1808 break;
1810 return;
1812 case PLUS_EXPR:
1813 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
1814 break;
1815 case ARRAY_REF:
1816 if (INTEGRAL_TYPE_P (type1) && TYPE_PTROB_P (type2))
1818 type1 = ptrdiff_type_node;
1819 break;
1821 if (TYPE_PTROB_P (type1) && INTEGRAL_TYPE_P (type2))
1823 type2 = ptrdiff_type_node;
1824 break;
1826 return;
1828 /* 18For every pair of promoted integral types L and R, there exist candi-
1829 date operator functions of the form
1830 LR operator%(L, R);
1831 LR operator&(L, R);
1832 LR operator^(L, R);
1833 LR operator|(L, R);
1834 L operator<<(L, R);
1835 L operator>>(L, R);
1836 where LR is the result of the usual arithmetic conversions between
1837 types L and R. */
1839 case TRUNC_MOD_EXPR:
1840 case BIT_AND_EXPR:
1841 case BIT_IOR_EXPR:
1842 case BIT_XOR_EXPR:
1843 case LSHIFT_EXPR:
1844 case RSHIFT_EXPR:
1845 if (INTEGRAL_TYPE_P (type1) && INTEGRAL_TYPE_P (type2))
1846 break;
1847 return;
1849 /* 19For every triple L, VQ, R), where L is an arithmetic or enumeration
1850 type, VQ is either volatile or empty, and R is a promoted arithmetic
1851 type, there exist candidate operator functions of the form
1852 VQ L& operator=(VQ L&, R);
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);
1858 20For every pair T, VQ), where T is any type and VQ is either volatile
1859 or empty, there exist candidate operator functions of the form
1860 T*VQ& operator=(T*VQ&, T*);
1862 21For every pair T, VQ), where T is a pointer to member type and VQ is
1863 either volatile or empty, there exist candidate operator functions of
1864 the form
1865 VQ T& operator=(VQ T&, T);
1867 22For every triple T, VQ, I), where T is a cv-qualified or cv-
1868 unqualified complete object type, VQ is either volatile or empty, and
1869 I is a promoted integral type, there exist candidate operator func-
1870 tions of the form
1871 T*VQ& operator+=(T*VQ&, I);
1872 T*VQ& operator-=(T*VQ&, I);
1874 23For every triple L, VQ, R), where L is an integral or enumeration
1875 type, VQ is either volatile or empty, and R is a promoted integral
1876 type, there exist candidate operator functions of the form
1878 VQ L& operator%=(VQ L&, R);
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); */
1885 case MODIFY_EXPR:
1886 switch (code2)
1888 case PLUS_EXPR:
1889 case MINUS_EXPR:
1890 if (TYPE_PTROB_P (type1) && INTEGRAL_TYPE_P (type2))
1892 type2 = ptrdiff_type_node;
1893 break;
1895 case MULT_EXPR:
1896 case TRUNC_DIV_EXPR:
1897 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
1898 break;
1899 return;
1901 case TRUNC_MOD_EXPR:
1902 case BIT_AND_EXPR:
1903 case BIT_IOR_EXPR:
1904 case BIT_XOR_EXPR:
1905 case LSHIFT_EXPR:
1906 case RSHIFT_EXPR:
1907 if (INTEGRAL_TYPE_P (type1) && INTEGRAL_TYPE_P (type2))
1908 break;
1909 return;
1911 case NOP_EXPR:
1912 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
1913 break;
1914 if ((TYPE_PTRMEMFUNC_P (type1) && TYPE_PTRMEMFUNC_P (type2))
1915 || (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
1916 || (TYPE_PTRMEM_P (type1) && TYPE_PTRMEM_P (type2))
1917 || ((TYPE_PTRMEMFUNC_P (type1)
1918 || TREE_CODE (type1) == POINTER_TYPE)
1919 && null_ptr_cst_p (args[1])))
1921 type2 = type1;
1922 break;
1924 return;
1926 default:
1927 gcc_unreachable ();
1929 type1 = build_reference_type (type1);
1930 break;
1932 case COND_EXPR:
1933 /* [over.built]
1935 For every pair of promoted arithmetic types L and R, there
1936 exist candidate operator functions of the form
1938 LR operator?(bool, L, R);
1940 where LR is the result of the usual arithmetic conversions
1941 between types L and R.
1943 For every type T, where T is a pointer or pointer-to-member
1944 type, there exist candidate operator functions of the form T
1945 operator?(bool, T, T); */
1947 if (promoted_arithmetic_type_p (type1)
1948 && promoted_arithmetic_type_p (type2))
1949 /* That's OK. */
1950 break;
1952 /* Otherwise, the types should be pointers. */
1953 if (!(TYPE_PTR_P (type1) || TYPE_PTR_TO_MEMBER_P (type1))
1954 || !(TYPE_PTR_P (type2) || TYPE_PTR_TO_MEMBER_P (type2)))
1955 return;
1957 /* We don't check that the two types are the same; the logic
1958 below will actually create two candidates; one in which both
1959 parameter types are TYPE1, and one in which both parameter
1960 types are TYPE2. */
1961 break;
1963 default:
1964 gcc_unreachable ();
1967 /* If we're dealing with two pointer types or two enumeral types,
1968 we need candidates for both of them. */
1969 if (type2 && !same_type_p (type1, type2)
1970 && TREE_CODE (type1) == TREE_CODE (type2)
1971 && (TREE_CODE (type1) == REFERENCE_TYPE
1972 || (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
1973 || (TYPE_PTRMEM_P (type1) && TYPE_PTRMEM_P (type2))
1974 || TYPE_PTRMEMFUNC_P (type1)
1975 || IS_AGGR_TYPE (type1)
1976 || TREE_CODE (type1) == ENUMERAL_TYPE))
1978 build_builtin_candidate
1979 (candidates, fnname, type1, type1, args, argtypes, flags);
1980 build_builtin_candidate
1981 (candidates, fnname, type2, type2, args, argtypes, flags);
1982 return;
1985 build_builtin_candidate
1986 (candidates, fnname, type1, type2, args, argtypes, flags);
1989 tree
1990 type_decays_to (tree type)
1992 if (TREE_CODE (type) == ARRAY_TYPE)
1993 return build_pointer_type (TREE_TYPE (type));
1994 if (TREE_CODE (type) == FUNCTION_TYPE)
1995 return build_pointer_type (type);
1996 return type;
1999 /* There are three conditions of builtin candidates:
2001 1) bool-taking candidates. These are the same regardless of the input.
2002 2) pointer-pair taking candidates. These are generated for each type
2003 one of the input types converts to.
2004 3) arithmetic candidates. According to the standard, we should generate
2005 all of these, but I'm trying not to...
2007 Here we generate a superset of the possible candidates for this particular
2008 case. That is a subset of the full set the standard defines, plus some
2009 other cases which the standard disallows. add_builtin_candidate will
2010 filter out the invalid set. */
2012 static void
2013 add_builtin_candidates (struct z_candidate **candidates, enum tree_code code,
2014 enum tree_code code2, tree fnname, tree *args,
2015 int flags)
2017 int ref1, i;
2018 int enum_p = 0;
2019 tree type, argtypes[3];
2020 /* TYPES[i] is the set of possible builtin-operator parameter types
2021 we will consider for the Ith argument. These are represented as
2022 a TREE_LIST; the TREE_VALUE of each node is the potential
2023 parameter type. */
2024 tree types[2];
2026 for (i = 0; i < 3; ++i)
2028 if (args[i])
2029 argtypes[i] = lvalue_type (args[i]);
2030 else
2031 argtypes[i] = NULL_TREE;
2034 switch (code)
2036 /* 4 For every pair T, VQ), where T is an arithmetic or enumeration type,
2037 and VQ is either volatile or empty, there exist candidate operator
2038 functions of the form
2039 VQ T& operator++(VQ T&); */
2041 case POSTINCREMENT_EXPR:
2042 case PREINCREMENT_EXPR:
2043 case POSTDECREMENT_EXPR:
2044 case PREDECREMENT_EXPR:
2045 case MODIFY_EXPR:
2046 ref1 = 1;
2047 break;
2049 /* 24There also exist candidate operator functions of the form
2050 bool operator!(bool);
2051 bool operator&&(bool, bool);
2052 bool operator||(bool, bool); */
2054 case TRUTH_NOT_EXPR:
2055 build_builtin_candidate
2056 (candidates, fnname, boolean_type_node,
2057 NULL_TREE, args, argtypes, flags);
2058 return;
2060 case TRUTH_ORIF_EXPR:
2061 case TRUTH_ANDIF_EXPR:
2062 build_builtin_candidate
2063 (candidates, fnname, boolean_type_node,
2064 boolean_type_node, args, argtypes, flags);
2065 return;
2067 case ADDR_EXPR:
2068 case COMPOUND_EXPR:
2069 case COMPONENT_REF:
2070 return;
2072 case COND_EXPR:
2073 case EQ_EXPR:
2074 case NE_EXPR:
2075 case LT_EXPR:
2076 case LE_EXPR:
2077 case GT_EXPR:
2078 case GE_EXPR:
2079 enum_p = 1;
2080 /* Fall through. */
2082 default:
2083 ref1 = 0;
2086 types[0] = types[1] = NULL_TREE;
2088 for (i = 0; i < 2; ++i)
2090 if (! args[i])
2092 else if (IS_AGGR_TYPE (argtypes[i]))
2094 tree convs;
2096 if (i == 0 && code == MODIFY_EXPR && code2 == NOP_EXPR)
2097 return;
2099 convs = lookup_conversions (argtypes[i]);
2101 if (code == COND_EXPR)
2103 if (real_lvalue_p (args[i]))
2104 types[i] = tree_cons
2105 (NULL_TREE, build_reference_type (argtypes[i]), types[i]);
2107 types[i] = tree_cons
2108 (NULL_TREE, TYPE_MAIN_VARIANT (argtypes[i]), types[i]);
2111 else if (! convs)
2112 return;
2114 for (; convs; convs = TREE_CHAIN (convs))
2116 type = TREE_TYPE (TREE_TYPE (OVL_CURRENT (TREE_VALUE (convs))));
2118 if (i == 0 && ref1
2119 && (TREE_CODE (type) != REFERENCE_TYPE
2120 || CP_TYPE_CONST_P (TREE_TYPE (type))))
2121 continue;
2123 if (code == COND_EXPR && TREE_CODE (type) == REFERENCE_TYPE)
2124 types[i] = tree_cons (NULL_TREE, type, types[i]);
2126 type = non_reference (type);
2127 if (i != 0 || ! ref1)
2129 type = TYPE_MAIN_VARIANT (type_decays_to (type));
2130 if (enum_p && TREE_CODE (type) == ENUMERAL_TYPE)
2131 types[i] = tree_cons (NULL_TREE, type, types[i]);
2132 if (INTEGRAL_TYPE_P (type))
2133 type = type_promotes_to (type);
2136 if (! value_member (type, types[i]))
2137 types[i] = tree_cons (NULL_TREE, type, types[i]);
2140 else
2142 if (code == COND_EXPR && real_lvalue_p (args[i]))
2143 types[i] = tree_cons
2144 (NULL_TREE, build_reference_type (argtypes[i]), types[i]);
2145 type = non_reference (argtypes[i]);
2146 if (i != 0 || ! ref1)
2148 type = TYPE_MAIN_VARIANT (type_decays_to (type));
2149 if (enum_p && TREE_CODE (type) == ENUMERAL_TYPE)
2150 types[i] = tree_cons (NULL_TREE, type, types[i]);
2151 if (INTEGRAL_TYPE_P (type))
2152 type = type_promotes_to (type);
2154 types[i] = tree_cons (NULL_TREE, type, types[i]);
2158 /* Run through the possible parameter types of both arguments,
2159 creating candidates with those parameter types. */
2160 for (; types[0]; types[0] = TREE_CHAIN (types[0]))
2162 if (types[1])
2163 for (type = types[1]; type; type = TREE_CHAIN (type))
2164 add_builtin_candidate
2165 (candidates, code, code2, fnname, TREE_VALUE (types[0]),
2166 TREE_VALUE (type), args, argtypes, flags);
2167 else
2168 add_builtin_candidate
2169 (candidates, code, code2, fnname, TREE_VALUE (types[0]),
2170 NULL_TREE, args, argtypes, flags);
2175 /* If TMPL can be successfully instantiated as indicated by
2176 EXPLICIT_TARGS and ARGLIST, adds the instantiation to CANDIDATES.
2178 TMPL is the template. EXPLICIT_TARGS are any explicit template
2179 arguments. ARGLIST is the arguments provided at the call-site.
2180 The RETURN_TYPE is the desired type for conversion operators. If
2181 OBJ is NULL_TREE, FLAGS and CTYPE are as for add_function_candidate.
2182 If an OBJ is supplied, FLAGS and CTYPE are ignored, and OBJ is as for
2183 add_conv_candidate. */
2185 static struct z_candidate*
2186 add_template_candidate_real (struct z_candidate **candidates, tree tmpl,
2187 tree ctype, tree explicit_targs, tree arglist,
2188 tree return_type, tree access_path,
2189 tree conversion_path, int flags, tree obj,
2190 unification_kind_t strict)
2192 int ntparms = DECL_NTPARMS (tmpl);
2193 tree targs = make_tree_vec (ntparms);
2194 tree args_without_in_chrg = arglist;
2195 struct z_candidate *cand;
2196 int i;
2197 tree fn;
2199 /* We don't do deduction on the in-charge parameter, the VTT
2200 parameter or 'this'. */
2201 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (tmpl))
2202 args_without_in_chrg = TREE_CHAIN (args_without_in_chrg);
2204 if ((DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (tmpl)
2205 || DECL_BASE_CONSTRUCTOR_P (tmpl))
2206 && CLASSTYPE_VBASECLASSES (DECL_CONTEXT (tmpl)))
2207 args_without_in_chrg = TREE_CHAIN (args_without_in_chrg);
2209 i = fn_type_unification (tmpl, explicit_targs, targs,
2210 args_without_in_chrg,
2211 return_type, strict, flags);
2213 if (i != 0)
2214 return NULL;
2216 fn = instantiate_template (tmpl, targs, tf_none);
2217 if (fn == error_mark_node)
2218 return NULL;
2220 /* In [class.copy]:
2222 A member function template is never instantiated to perform the
2223 copy of a class object to an object of its class type.
2225 It's a little unclear what this means; the standard explicitly
2226 does allow a template to be used to copy a class. For example,
2229 struct A {
2230 A(A&);
2231 template <class T> A(const T&);
2233 const A f ();
2234 void g () { A a (f ()); }
2236 the member template will be used to make the copy. The section
2237 quoted above appears in the paragraph that forbids constructors
2238 whose only parameter is (a possibly cv-qualified variant of) the
2239 class type, and a logical interpretation is that the intent was
2240 to forbid the instantiation of member templates which would then
2241 have that form. */
2242 if (DECL_CONSTRUCTOR_P (fn) && list_length (arglist) == 2)
2244 tree arg_types = FUNCTION_FIRST_USER_PARMTYPE (fn);
2245 if (arg_types && same_type_p (TYPE_MAIN_VARIANT (TREE_VALUE (arg_types)),
2246 ctype))
2247 return NULL;
2250 if (obj != NULL_TREE)
2251 /* Aha, this is a conversion function. */
2252 cand = add_conv_candidate (candidates, fn, obj, access_path,
2253 conversion_path, arglist);
2254 else
2255 cand = add_function_candidate (candidates, fn, ctype,
2256 arglist, access_path,
2257 conversion_path, flags);
2258 if (DECL_TI_TEMPLATE (fn) != tmpl)
2259 /* This situation can occur if a member template of a template
2260 class is specialized. Then, instantiate_template might return
2261 an instantiation of the specialization, in which case the
2262 DECL_TI_TEMPLATE field will point at the original
2263 specialization. For example:
2265 template <class T> struct S { template <class U> void f(U);
2266 template <> void f(int) {}; };
2267 S<double> sd;
2268 sd.f(3);
2270 Here, TMPL will be template <class U> S<double>::f(U).
2271 And, instantiate template will give us the specialization
2272 template <> S<double>::f(int). But, the DECL_TI_TEMPLATE field
2273 for this will point at template <class T> template <> S<T>::f(int),
2274 so that we can find the definition. For the purposes of
2275 overload resolution, however, we want the original TMPL. */
2276 cand->template_decl = tree_cons (tmpl, targs, NULL_TREE);
2277 else
2278 cand->template_decl = DECL_TEMPLATE_INFO (fn);
2280 return cand;
2284 static struct z_candidate *
2285 add_template_candidate (struct z_candidate **candidates, tree tmpl, tree ctype,
2286 tree explicit_targs, tree arglist, tree return_type,
2287 tree access_path, tree conversion_path, int flags,
2288 unification_kind_t strict)
2290 return
2291 add_template_candidate_real (candidates, tmpl, ctype,
2292 explicit_targs, arglist, return_type,
2293 access_path, conversion_path,
2294 flags, NULL_TREE, strict);
2298 static struct z_candidate *
2299 add_template_conv_candidate (struct z_candidate **candidates, tree tmpl,
2300 tree obj, tree arglist, tree return_type,
2301 tree access_path, tree conversion_path)
2303 return
2304 add_template_candidate_real (candidates, tmpl, NULL_TREE, NULL_TREE,
2305 arglist, return_type, access_path,
2306 conversion_path, 0, obj, DEDUCE_CONV);
2309 /* The CANDS are the set of candidates that were considered for
2310 overload resolution. Return the set of viable candidates. If none
2311 of the candidates were viable, set *ANY_VIABLE_P to true. STRICT_P
2312 is true if a candidate should be considered viable only if it is
2313 strictly viable. */
2315 static struct z_candidate*
2316 splice_viable (struct z_candidate *cands,
2317 bool strict_p,
2318 bool *any_viable_p)
2320 struct z_candidate *viable;
2321 struct z_candidate **last_viable;
2322 struct z_candidate **cand;
2324 viable = NULL;
2325 last_viable = &viable;
2326 *any_viable_p = false;
2328 cand = &cands;
2329 while (*cand)
2331 struct z_candidate *c = *cand;
2332 if (strict_p ? c->viable == 1 : c->viable)
2334 *last_viable = c;
2335 *cand = c->next;
2336 c->next = NULL;
2337 last_viable = &c->next;
2338 *any_viable_p = true;
2340 else
2341 cand = &c->next;
2344 return viable ? viable : cands;
2347 static bool
2348 any_strictly_viable (struct z_candidate *cands)
2350 for (; cands; cands = cands->next)
2351 if (cands->viable == 1)
2352 return true;
2353 return false;
2356 /* OBJ is being used in an expression like "OBJ.f (...)". In other
2357 words, it is about to become the "this" pointer for a member
2358 function call. Take the address of the object. */
2360 static tree
2361 build_this (tree obj)
2363 /* In a template, we are only concerned about the type of the
2364 expression, so we can take a shortcut. */
2365 if (processing_template_decl)
2366 return build_address (obj);
2368 return build_unary_op (ADDR_EXPR, obj, 0);
2371 /* Returns true iff functions are equivalent. Equivalent functions are
2372 not '==' only if one is a function-local extern function or if
2373 both are extern "C". */
2375 static inline int
2376 equal_functions (tree fn1, tree fn2)
2378 if (DECL_LOCAL_FUNCTION_P (fn1) || DECL_LOCAL_FUNCTION_P (fn2)
2379 || DECL_EXTERN_C_FUNCTION_P (fn1))
2380 return decls_match (fn1, fn2);
2381 return fn1 == fn2;
2384 /* Print information about one overload candidate CANDIDATE. MSGSTR
2385 is the text to print before the candidate itself.
2387 NOTE: Unlike most diagnostic functions in GCC, MSGSTR is expected
2388 to have been run through gettext by the caller. This wart makes
2389 life simpler in print_z_candidates and for the translators. */
2391 static void
2392 print_z_candidate (const char *msgstr, struct z_candidate *candidate)
2394 if (TREE_CODE (candidate->fn) == IDENTIFIER_NODE)
2396 if (candidate->num_convs == 3)
2397 inform ("%s %D(%T, %T, %T) <built-in>", msgstr, candidate->fn,
2398 candidate->convs[0]->type,
2399 candidate->convs[1]->type,
2400 candidate->convs[2]->type);
2401 else if (candidate->num_convs == 2)
2402 inform ("%s %D(%T, %T) <built-in>", msgstr, candidate->fn,
2403 candidate->convs[0]->type,
2404 candidate->convs[1]->type);
2405 else
2406 inform ("%s %D(%T) <built-in>", msgstr, candidate->fn,
2407 candidate->convs[0]->type);
2409 else if (TYPE_P (candidate->fn))
2410 inform ("%s %T <conversion>", msgstr, candidate->fn);
2411 else if (candidate->viable == -1)
2412 inform ("%s %+#D <near match>", msgstr, candidate->fn);
2413 else
2414 inform ("%s %+#D", msgstr, candidate->fn);
2417 static void
2418 print_z_candidates (struct z_candidate *candidates)
2420 const char *str;
2421 struct z_candidate *cand1;
2422 struct z_candidate **cand2;
2424 /* There may be duplicates in the set of candidates. We put off
2425 checking this condition as long as possible, since we have no way
2426 to eliminate duplicates from a set of functions in less than n^2
2427 time. Now we are about to emit an error message, so it is more
2428 permissible to go slowly. */
2429 for (cand1 = candidates; cand1; cand1 = cand1->next)
2431 tree fn = cand1->fn;
2432 /* Skip builtin candidates and conversion functions. */
2433 if (TREE_CODE (fn) != FUNCTION_DECL)
2434 continue;
2435 cand2 = &cand1->next;
2436 while (*cand2)
2438 if (TREE_CODE ((*cand2)->fn) == FUNCTION_DECL
2439 && equal_functions (fn, (*cand2)->fn))
2440 *cand2 = (*cand2)->next;
2441 else
2442 cand2 = &(*cand2)->next;
2446 if (!candidates)
2447 return;
2449 str = _("candidates are:");
2450 print_z_candidate (str, candidates);
2451 if (candidates->next)
2453 /* Indent successive candidates by the width of the translation
2454 of the above string. */
2455 size_t len = gcc_gettext_width (str) + 1;
2456 char *spaces = (char *) alloca (len);
2457 memset (spaces, ' ', len-1);
2458 spaces[len - 1] = '\0';
2460 candidates = candidates->next;
2463 print_z_candidate (spaces, candidates);
2464 candidates = candidates->next;
2466 while (candidates);
2470 /* USER_SEQ is a user-defined conversion sequence, beginning with a
2471 USER_CONV. STD_SEQ is the standard conversion sequence applied to
2472 the result of the conversion function to convert it to the final
2473 desired type. Merge the two sequences into a single sequence,
2474 and return the merged sequence. */
2476 static conversion *
2477 merge_conversion_sequences (conversion *user_seq, conversion *std_seq)
2479 conversion **t;
2481 gcc_assert (user_seq->kind == ck_user);
2483 /* Find the end of the second conversion sequence. */
2484 t = &(std_seq);
2485 while ((*t)->kind != ck_identity)
2486 t = &((*t)->u.next);
2488 /* Replace the identity conversion with the user conversion
2489 sequence. */
2490 *t = user_seq;
2492 /* The entire sequence is a user-conversion sequence. */
2493 std_seq->user_conv_p = true;
2495 return std_seq;
2498 /* Returns the best overload candidate to perform the requested
2499 conversion. This function is used for three the overloading situations
2500 described in [over.match.copy], [over.match.conv], and [over.match.ref].
2501 If TOTYPE is a REFERENCE_TYPE, we're trying to find an lvalue binding as
2502 per [dcl.init.ref], so we ignore temporary bindings. */
2504 static struct z_candidate *
2505 build_user_type_conversion_1 (tree totype, tree expr, int flags)
2507 struct z_candidate *candidates, *cand;
2508 tree fromtype = TREE_TYPE (expr);
2509 tree ctors = NULL_TREE;
2510 tree conv_fns = NULL_TREE;
2511 conversion *conv = NULL;
2512 tree args = NULL_TREE;
2513 bool any_viable_p;
2515 /* We represent conversion within a hierarchy using RVALUE_CONV and
2516 BASE_CONV, as specified by [over.best.ics]; these become plain
2517 constructor calls, as specified in [dcl.init]. */
2518 gcc_assert (!IS_AGGR_TYPE (fromtype) || !IS_AGGR_TYPE (totype)
2519 || !DERIVED_FROM_P (totype, fromtype));
2521 if (IS_AGGR_TYPE (totype))
2522 ctors = lookup_fnfields (totype, complete_ctor_identifier, 0);
2524 if (IS_AGGR_TYPE (fromtype))
2525 conv_fns = lookup_conversions (fromtype);
2527 candidates = 0;
2528 flags |= LOOKUP_NO_CONVERSION;
2530 if (ctors)
2532 tree t;
2534 ctors = BASELINK_FUNCTIONS (ctors);
2536 t = build_int_cst (build_pointer_type (totype), 0);
2537 args = build_tree_list (NULL_TREE, expr);
2538 /* We should never try to call the abstract or base constructor
2539 from here. */
2540 gcc_assert (!DECL_HAS_IN_CHARGE_PARM_P (OVL_CURRENT (ctors))
2541 && !DECL_HAS_VTT_PARM_P (OVL_CURRENT (ctors)));
2542 args = tree_cons (NULL_TREE, t, args);
2544 for (; ctors; ctors = OVL_NEXT (ctors))
2546 tree ctor = OVL_CURRENT (ctors);
2547 if (DECL_NONCONVERTING_P (ctor))
2548 continue;
2550 if (TREE_CODE (ctor) == TEMPLATE_DECL)
2551 cand = add_template_candidate (&candidates, ctor, totype,
2552 NULL_TREE, args, NULL_TREE,
2553 TYPE_BINFO (totype),
2554 TYPE_BINFO (totype),
2555 flags,
2556 DEDUCE_CALL);
2557 else
2558 cand = add_function_candidate (&candidates, ctor, totype,
2559 args, TYPE_BINFO (totype),
2560 TYPE_BINFO (totype),
2561 flags);
2563 if (cand)
2564 cand->second_conv = build_identity_conv (totype, NULL_TREE);
2567 if (conv_fns)
2568 args = build_tree_list (NULL_TREE, build_this (expr));
2570 for (; conv_fns; conv_fns = TREE_CHAIN (conv_fns))
2572 tree fns;
2573 tree conversion_path = TREE_PURPOSE (conv_fns);
2574 int convflags = LOOKUP_NO_CONVERSION;
2576 /* If we are called to convert to a reference type, we are trying to
2577 find an lvalue binding, so don't even consider temporaries. If
2578 we don't find an lvalue binding, the caller will try again to
2579 look for a temporary binding. */
2580 if (TREE_CODE (totype) == REFERENCE_TYPE)
2581 convflags |= LOOKUP_NO_TEMP_BIND;
2583 for (fns = TREE_VALUE (conv_fns); fns; fns = OVL_NEXT (fns))
2585 tree fn = OVL_CURRENT (fns);
2587 /* [over.match.funcs] For conversion functions, the function
2588 is considered to be a member of the class of the implicit
2589 object argument for the purpose of defining the type of
2590 the implicit object parameter.
2592 So we pass fromtype as CTYPE to add_*_candidate. */
2594 if (TREE_CODE (fn) == TEMPLATE_DECL)
2595 cand = add_template_candidate (&candidates, fn, fromtype,
2596 NULL_TREE,
2597 args, totype,
2598 TYPE_BINFO (fromtype),
2599 conversion_path,
2600 flags,
2601 DEDUCE_CONV);
2602 else
2603 cand = add_function_candidate (&candidates, fn, fromtype,
2604 args,
2605 TYPE_BINFO (fromtype),
2606 conversion_path,
2607 flags);
2609 if (cand)
2611 conversion *ics
2612 = implicit_conversion (totype,
2613 TREE_TYPE (TREE_TYPE (cand->fn)),
2615 /*c_cast_p=*/false, convflags);
2617 cand->second_conv = ics;
2619 if (!ics)
2620 cand->viable = 0;
2621 else if (candidates->viable == 1 && ics->bad_p)
2622 cand->viable = -1;
2627 candidates = splice_viable (candidates, pedantic, &any_viable_p);
2628 if (!any_viable_p)
2629 return NULL;
2631 cand = tourney (candidates);
2632 if (cand == 0)
2634 if (flags & LOOKUP_COMPLAIN)
2636 error ("conversion from %qT to %qT is ambiguous",
2637 fromtype, totype);
2638 print_z_candidates (candidates);
2641 cand = candidates; /* any one will do */
2642 cand->second_conv = build_ambiguous_conv (totype, expr);
2643 cand->second_conv->user_conv_p = true;
2644 if (!any_strictly_viable (candidates))
2645 cand->second_conv->bad_p = true;
2646 /* If there are viable candidates, don't set ICS_BAD_FLAG; an
2647 ambiguous conversion is no worse than another user-defined
2648 conversion. */
2650 return cand;
2653 /* Build the user conversion sequence. */
2654 conv = build_conv
2655 (ck_user,
2656 (DECL_CONSTRUCTOR_P (cand->fn)
2657 ? totype : non_reference (TREE_TYPE (TREE_TYPE (cand->fn)))),
2658 build_identity_conv (TREE_TYPE (expr), expr));
2659 conv->cand = cand;
2661 /* Combine it with the second conversion sequence. */
2662 cand->second_conv = merge_conversion_sequences (conv,
2663 cand->second_conv);
2665 if (cand->viable == -1)
2666 cand->second_conv->bad_p = true;
2668 return cand;
2671 tree
2672 build_user_type_conversion (tree totype, tree expr, int flags)
2674 struct z_candidate *cand
2675 = build_user_type_conversion_1 (totype, expr, flags);
2677 if (cand)
2679 if (cand->second_conv->kind == ck_ambig)
2680 return error_mark_node;
2681 expr = convert_like (cand->second_conv, expr);
2682 return convert_from_reference (expr);
2684 return NULL_TREE;
2687 /* Do any initial processing on the arguments to a function call. */
2689 static tree
2690 resolve_args (tree args)
2692 tree t;
2693 for (t = args; t; t = TREE_CHAIN (t))
2695 tree arg = TREE_VALUE (t);
2697 if (error_operand_p (arg))
2698 return error_mark_node;
2699 else if (VOID_TYPE_P (TREE_TYPE (arg)))
2701 error ("invalid use of void expression");
2702 return error_mark_node;
2705 return args;
2708 /* Perform overload resolution on FN, which is called with the ARGS.
2710 Return the candidate function selected by overload resolution, or
2711 NULL if the event that overload resolution failed. In the case
2712 that overload resolution fails, *CANDIDATES will be the set of
2713 candidates considered, and ANY_VIABLE_P will be set to true or
2714 false to indicate whether or not any of the candidates were
2715 viable.
2717 The ARGS should already have gone through RESOLVE_ARGS before this
2718 function is called. */
2720 static struct z_candidate *
2721 perform_overload_resolution (tree fn,
2722 tree args,
2723 struct z_candidate **candidates,
2724 bool *any_viable_p)
2726 struct z_candidate *cand;
2727 tree explicit_targs = NULL_TREE;
2728 int template_only = 0;
2730 *candidates = NULL;
2731 *any_viable_p = true;
2733 /* Check FN and ARGS. */
2734 gcc_assert (TREE_CODE (fn) == FUNCTION_DECL
2735 || TREE_CODE (fn) == TEMPLATE_DECL
2736 || TREE_CODE (fn) == OVERLOAD
2737 || TREE_CODE (fn) == TEMPLATE_ID_EXPR);
2738 gcc_assert (!args || TREE_CODE (args) == TREE_LIST);
2740 if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
2742 explicit_targs = TREE_OPERAND (fn, 1);
2743 fn = TREE_OPERAND (fn, 0);
2744 template_only = 1;
2747 /* Add the various candidate functions. */
2748 add_candidates (fn, args, explicit_targs, template_only,
2749 /*conversion_path=*/NULL_TREE,
2750 /*access_path=*/NULL_TREE,
2751 LOOKUP_NORMAL,
2752 candidates);
2754 *candidates = splice_viable (*candidates, pedantic, any_viable_p);
2755 if (!*any_viable_p)
2756 return NULL;
2758 cand = tourney (*candidates);
2759 return cand;
2762 /* Return an expression for a call to FN (a namespace-scope function,
2763 or a static member function) with the ARGS. */
2765 tree
2766 build_new_function_call (tree fn, tree args, bool koenig_p)
2768 struct z_candidate *candidates, *cand;
2769 bool any_viable_p;
2770 void *p;
2771 tree result;
2773 args = resolve_args (args);
2774 if (args == error_mark_node)
2775 return error_mark_node;
2777 /* If this function was found without using argument dependent
2778 lookup, then we want to ignore any undeclared friend
2779 functions. */
2780 if (!koenig_p)
2782 tree orig_fn = fn;
2784 fn = remove_hidden_names (fn);
2785 if (!fn)
2787 error ("no matching function for call to %<%D(%A)%>",
2788 DECL_NAME (OVL_CURRENT (orig_fn)), args);
2789 return error_mark_node;
2793 /* Get the high-water mark for the CONVERSION_OBSTACK. */
2794 p = conversion_obstack_alloc (0);
2796 cand = perform_overload_resolution (fn, args, &candidates, &any_viable_p);
2798 if (!cand)
2800 if (!any_viable_p && candidates && ! candidates->next)
2801 return build_function_call (candidates->fn, args);
2802 if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
2803 fn = TREE_OPERAND (fn, 0);
2804 if (!any_viable_p)
2805 error ("no matching function for call to %<%D(%A)%>",
2806 DECL_NAME (OVL_CURRENT (fn)), args);
2807 else
2808 error ("call of overloaded %<%D(%A)%> is ambiguous",
2809 DECL_NAME (OVL_CURRENT (fn)), args);
2810 if (candidates)
2811 print_z_candidates (candidates);
2812 result = error_mark_node;
2814 else
2815 result = build_over_call (cand, LOOKUP_NORMAL);
2817 /* Free all the conversions we allocated. */
2818 obstack_free (&conversion_obstack, p);
2820 return result;
2823 /* Build a call to a global operator new. FNNAME is the name of the
2824 operator (either "operator new" or "operator new[]") and ARGS are
2825 the arguments provided. *SIZE points to the total number of bytes
2826 required by the allocation, and is updated if that is changed here.
2827 *COOKIE_SIZE is non-NULL if a cookie should be used. If this
2828 function determines that no cookie should be used, after all,
2829 *COOKIE_SIZE is set to NULL_TREE. If FN is non-NULL, it will be
2830 set, upon return, to the allocation function called. */
2832 tree
2833 build_operator_new_call (tree fnname, tree args,
2834 tree *size, tree *cookie_size,
2835 tree *fn)
2837 tree fns;
2838 struct z_candidate *candidates;
2839 struct z_candidate *cand;
2840 bool any_viable_p;
2842 if (fn)
2843 *fn = NULL_TREE;
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 /* Tell our caller which function we decided to call. */
2922 if (fn)
2923 *fn = cand->fn;
2925 /* Build the CALL_EXPR. */
2926 return build_over_call (cand, LOOKUP_NORMAL);
2929 static tree
2930 build_object_call (tree obj, tree args)
2932 struct z_candidate *candidates = 0, *cand;
2933 tree fns, convs, mem_args = NULL_TREE;
2934 tree type = TREE_TYPE (obj);
2935 bool any_viable_p;
2936 tree result = NULL_TREE;
2937 void *p;
2939 if (TYPE_PTRMEMFUNC_P (type))
2941 /* It's no good looking for an overloaded operator() on a
2942 pointer-to-member-function. */
2943 error ("pointer-to-member function %E cannot be called without an object; consider using .* or ->*", obj);
2944 return error_mark_node;
2947 if (TYPE_BINFO (type))
2949 fns = lookup_fnfields (TYPE_BINFO (type), ansi_opname (CALL_EXPR), 1);
2950 if (fns == error_mark_node)
2951 return error_mark_node;
2953 else
2954 fns = NULL_TREE;
2956 args = resolve_args (args);
2958 if (args == error_mark_node)
2959 return error_mark_node;
2961 /* Get the high-water mark for the CONVERSION_OBSTACK. */
2962 p = conversion_obstack_alloc (0);
2964 if (fns)
2966 tree base = BINFO_TYPE (BASELINK_BINFO (fns));
2967 mem_args = tree_cons (NULL_TREE, build_this (obj), args);
2969 for (fns = BASELINK_FUNCTIONS (fns); fns; fns = OVL_NEXT (fns))
2971 tree fn = OVL_CURRENT (fns);
2972 if (TREE_CODE (fn) == TEMPLATE_DECL)
2973 add_template_candidate (&candidates, fn, base, NULL_TREE,
2974 mem_args, NULL_TREE,
2975 TYPE_BINFO (type),
2976 TYPE_BINFO (type),
2977 LOOKUP_NORMAL, DEDUCE_CALL);
2978 else
2979 add_function_candidate
2980 (&candidates, fn, base, mem_args, TYPE_BINFO (type),
2981 TYPE_BINFO (type), LOOKUP_NORMAL);
2985 convs = lookup_conversions (type);
2987 for (; convs; convs = TREE_CHAIN (convs))
2989 tree fns = TREE_VALUE (convs);
2990 tree totype = TREE_TYPE (TREE_TYPE (OVL_CURRENT (fns)));
2992 if ((TREE_CODE (totype) == POINTER_TYPE
2993 && TREE_CODE (TREE_TYPE (totype)) == FUNCTION_TYPE)
2994 || (TREE_CODE (totype) == REFERENCE_TYPE
2995 && TREE_CODE (TREE_TYPE (totype)) == FUNCTION_TYPE)
2996 || (TREE_CODE (totype) == REFERENCE_TYPE
2997 && TREE_CODE (TREE_TYPE (totype)) == POINTER_TYPE
2998 && TREE_CODE (TREE_TYPE (TREE_TYPE (totype))) == FUNCTION_TYPE))
2999 for (; fns; fns = OVL_NEXT (fns))
3001 tree fn = OVL_CURRENT (fns);
3002 if (TREE_CODE (fn) == TEMPLATE_DECL)
3003 add_template_conv_candidate
3004 (&candidates, fn, obj, args, totype,
3005 /*access_path=*/NULL_TREE,
3006 /*conversion_path=*/NULL_TREE);
3007 else
3008 add_conv_candidate (&candidates, fn, obj, args,
3009 /*conversion_path=*/NULL_TREE,
3010 /*access_path=*/NULL_TREE);
3014 candidates = splice_viable (candidates, pedantic, &any_viable_p);
3015 if (!any_viable_p)
3017 error ("no match for call to %<(%T) (%A)%>", TREE_TYPE (obj), args);
3018 print_z_candidates (candidates);
3019 result = error_mark_node;
3021 else
3023 cand = tourney (candidates);
3024 if (cand == 0)
3026 error ("call of %<(%T) (%A)%> is ambiguous", TREE_TYPE (obj), args);
3027 print_z_candidates (candidates);
3028 result = error_mark_node;
3030 /* Since cand->fn will be a type, not a function, for a conversion
3031 function, we must be careful not to unconditionally look at
3032 DECL_NAME here. */
3033 else if (TREE_CODE (cand->fn) == FUNCTION_DECL
3034 && DECL_OVERLOADED_OPERATOR_P (cand->fn) == CALL_EXPR)
3035 result = build_over_call (cand, LOOKUP_NORMAL);
3036 else
3038 obj = convert_like_with_context (cand->convs[0], obj, cand->fn, -1);
3039 obj = convert_from_reference (obj);
3040 result = build_function_call (obj, args);
3044 /* Free all the conversions we allocated. */
3045 obstack_free (&conversion_obstack, p);
3047 return result;
3050 static void
3051 op_error (enum tree_code code, enum tree_code code2,
3052 tree arg1, tree arg2, tree arg3, const char *problem)
3054 const char *opname;
3056 if (code == MODIFY_EXPR)
3057 opname = assignment_operator_name_info[code2].name;
3058 else
3059 opname = operator_name_info[code].name;
3061 switch (code)
3063 case COND_EXPR:
3064 error ("%s for ternary %<operator?:%> in %<%E ? %E : %E%>",
3065 problem, arg1, arg2, arg3);
3066 break;
3068 case POSTINCREMENT_EXPR:
3069 case POSTDECREMENT_EXPR:
3070 error ("%s for %<operator%s%> in %<%E%s%>", problem, opname, arg1, opname);
3071 break;
3073 case ARRAY_REF:
3074 error ("%s for %<operator[]%> in %<%E[%E]%>", problem, arg1, arg2);
3075 break;
3077 case REALPART_EXPR:
3078 case IMAGPART_EXPR:
3079 error ("%s for %qs in %<%s %E%>", problem, opname, opname, arg1);
3080 break;
3082 default:
3083 if (arg2)
3084 error ("%s for %<operator%s%> in %<%E %s %E%>",
3085 problem, opname, arg1, opname, arg2);
3086 else
3087 error ("%s for %<operator%s%> in %<%s%E%>",
3088 problem, opname, opname, arg1);
3089 break;
3093 /* Return the implicit conversion sequence that could be used to
3094 convert E1 to E2 in [expr.cond]. */
3096 static conversion *
3097 conditional_conversion (tree e1, tree e2)
3099 tree t1 = non_reference (TREE_TYPE (e1));
3100 tree t2 = non_reference (TREE_TYPE (e2));
3101 conversion *conv;
3102 bool good_base;
3104 /* [expr.cond]
3106 If E2 is an lvalue: E1 can be converted to match E2 if E1 can be
3107 implicitly converted (clause _conv_) to the type "reference to
3108 T2", subject to the constraint that in the conversion the
3109 reference must bind directly (_dcl.init.ref_) to E1. */
3110 if (real_lvalue_p (e2))
3112 conv = implicit_conversion (build_reference_type (t2),
3115 /*c_cast_p=*/false,
3116 LOOKUP_NO_TEMP_BIND);
3117 if (conv)
3118 return conv;
3121 /* [expr.cond]
3123 If E1 and E2 have class type, and the underlying class types are
3124 the same or one is a base class of the other: E1 can be converted
3125 to match E2 if the class of T2 is the same type as, or a base
3126 class of, the class of T1, and the cv-qualification of T2 is the
3127 same cv-qualification as, or a greater cv-qualification than, the
3128 cv-qualification of T1. If the conversion is applied, E1 is
3129 changed to an rvalue of type T2 that still refers to the original
3130 source class object (or the appropriate subobject thereof). */
3131 if (CLASS_TYPE_P (t1) && CLASS_TYPE_P (t2)
3132 && ((good_base = DERIVED_FROM_P (t2, t1)) || DERIVED_FROM_P (t1, t2)))
3134 if (good_base && at_least_as_qualified_p (t2, t1))
3136 conv = build_identity_conv (t1, e1);
3137 if (!same_type_p (TYPE_MAIN_VARIANT (t1),
3138 TYPE_MAIN_VARIANT (t2)))
3139 conv = build_conv (ck_base, t2, conv);
3140 else
3141 conv = build_conv (ck_rvalue, t2, conv);
3142 return conv;
3144 else
3145 return NULL;
3147 else
3148 /* [expr.cond]
3150 Otherwise: E1 can be converted to match E2 if E1 can be implicitly
3151 converted to the type that expression E2 would have if E2 were
3152 converted to an rvalue (or the type it has, if E2 is an rvalue). */
3153 return implicit_conversion (t2, t1, e1, /*c_cast_p=*/false,
3154 LOOKUP_NORMAL);
3157 /* Implement [expr.cond]. ARG1, ARG2, and ARG3 are the three
3158 arguments to the conditional expression. */
3160 tree
3161 build_conditional_expr (tree arg1, tree arg2, tree arg3)
3163 tree arg2_type;
3164 tree arg3_type;
3165 tree result = NULL_TREE;
3166 tree result_type = NULL_TREE;
3167 bool lvalue_p = true;
3168 struct z_candidate *candidates = 0;
3169 struct z_candidate *cand;
3170 void *p;
3172 /* As a G++ extension, the second argument to the conditional can be
3173 omitted. (So that `a ? : c' is roughly equivalent to `a ? a :
3174 c'.) If the second operand is omitted, make sure it is
3175 calculated only once. */
3176 if (!arg2)
3178 if (pedantic)
3179 pedwarn ("ISO C++ forbids omitting the middle term of a ?: expression");
3181 /* Make sure that lvalues remain lvalues. See g++.oliva/ext1.C. */
3182 if (real_lvalue_p (arg1))
3183 arg2 = arg1 = stabilize_reference (arg1);
3184 else
3185 arg2 = arg1 = save_expr (arg1);
3188 /* [expr.cond]
3190 The first expr ession is implicitly converted to bool (clause
3191 _conv_). */
3192 arg1 = perform_implicit_conversion (boolean_type_node, arg1);
3194 /* If something has already gone wrong, just pass that fact up the
3195 tree. */
3196 if (error_operand_p (arg1)
3197 || error_operand_p (arg2)
3198 || error_operand_p (arg3))
3199 return error_mark_node;
3201 /* [expr.cond]
3203 If either the second or the third operand has type (possibly
3204 cv-qualified) void, then the lvalue-to-rvalue (_conv.lval_),
3205 array-to-pointer (_conv.array_), and function-to-pointer
3206 (_conv.func_) standard conversions are performed on the second
3207 and third operands. */
3208 arg2_type = is_bitfield_expr_with_lowered_type (arg2);
3209 if (!arg2_type)
3210 arg2_type = TREE_TYPE (arg2);
3211 arg3_type = is_bitfield_expr_with_lowered_type (arg3);
3212 if (!arg3_type)
3213 arg3_type = TREE_TYPE (arg3);
3214 if (VOID_TYPE_P (arg2_type) || VOID_TYPE_P (arg3_type))
3216 /* Do the conversions. We don't these for `void' type arguments
3217 since it can't have any effect and since decay_conversion
3218 does not handle that case gracefully. */
3219 if (!VOID_TYPE_P (arg2_type))
3220 arg2 = decay_conversion (arg2);
3221 if (!VOID_TYPE_P (arg3_type))
3222 arg3 = decay_conversion (arg3);
3223 arg2_type = TREE_TYPE (arg2);
3224 arg3_type = TREE_TYPE (arg3);
3226 /* [expr.cond]
3228 One of the following shall hold:
3230 --The second or the third operand (but not both) is a
3231 throw-expression (_except.throw_); the result is of the
3232 type of the other and is an rvalue.
3234 --Both the second and the third operands have type void; the
3235 result is of type void and is an rvalue.
3237 We must avoid calling force_rvalue for expressions of type
3238 "void" because it will complain that their value is being
3239 used. */
3240 if (TREE_CODE (arg2) == THROW_EXPR
3241 && TREE_CODE (arg3) != THROW_EXPR)
3243 if (!VOID_TYPE_P (arg3_type))
3244 arg3 = force_rvalue (arg3);
3245 arg3_type = TREE_TYPE (arg3);
3246 result_type = arg3_type;
3248 else if (TREE_CODE (arg2) != THROW_EXPR
3249 && TREE_CODE (arg3) == THROW_EXPR)
3251 if (!VOID_TYPE_P (arg2_type))
3252 arg2 = force_rvalue (arg2);
3253 arg2_type = TREE_TYPE (arg2);
3254 result_type = arg2_type;
3256 else if (VOID_TYPE_P (arg2_type) && VOID_TYPE_P (arg3_type))
3257 result_type = void_type_node;
3258 else
3260 error ("%qE has type %<void%> and is not a throw-expression",
3261 VOID_TYPE_P (arg2_type) ? arg2 : arg3);
3262 return error_mark_node;
3265 lvalue_p = false;
3266 goto valid_operands;
3268 /* [expr.cond]
3270 Otherwise, if the second and third operand have different types,
3271 and either has (possibly cv-qualified) class type, an attempt is
3272 made to convert each of those operands to the type of the other. */
3273 else if (!same_type_p (arg2_type, arg3_type)
3274 && (CLASS_TYPE_P (arg2_type) || CLASS_TYPE_P (arg3_type)))
3276 conversion *conv2;
3277 conversion *conv3;
3279 /* Get the high-water mark for the CONVERSION_OBSTACK. */
3280 p = conversion_obstack_alloc (0);
3282 conv2 = conditional_conversion (arg2, arg3);
3283 conv3 = conditional_conversion (arg3, arg2);
3285 /* [expr.cond]
3287 If both can be converted, or one can be converted but the
3288 conversion is ambiguous, the program is ill-formed. If
3289 neither can be converted, the operands are left unchanged and
3290 further checking is performed as described below. If exactly
3291 one conversion is possible, that conversion is applied to the
3292 chosen operand and the converted operand is used in place of
3293 the original operand for the remainder of this section. */
3294 if ((conv2 && !conv2->bad_p
3295 && conv3 && !conv3->bad_p)
3296 || (conv2 && conv2->kind == ck_ambig)
3297 || (conv3 && conv3->kind == ck_ambig))
3299 error ("operands to ?: have different types %qT and %qT",
3300 arg2_type, arg3_type);
3301 result = error_mark_node;
3303 else if (conv2 && (!conv2->bad_p || !conv3))
3305 arg2 = convert_like (conv2, arg2);
3306 arg2 = convert_from_reference (arg2);
3307 arg2_type = TREE_TYPE (arg2);
3309 else if (conv3 && (!conv3->bad_p || !conv2))
3311 arg3 = convert_like (conv3, arg3);
3312 arg3 = convert_from_reference (arg3);
3313 arg3_type = TREE_TYPE (arg3);
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 %qT and %qT",
3511 arg2_type, arg3_type);
3512 return error_mark_node;
3515 valid_operands:
3516 result = fold_if_not_in_template (build3 (COND_EXPR, result_type, arg1,
3517 arg2, arg3));
3518 /* We can't use result_type below, as fold might have returned a
3519 throw_expr. */
3521 /* Expand both sides into the same slot, hopefully the target of the
3522 ?: expression. We used to check for TARGET_EXPRs here, but now we
3523 sometimes wrap them in NOP_EXPRs so the test would fail. */
3524 if (!lvalue_p && CLASS_TYPE_P (TREE_TYPE (result)))
3525 result = get_target_expr (result);
3527 /* If this expression is an rvalue, but might be mistaken for an
3528 lvalue, we must add a NON_LVALUE_EXPR. */
3529 if (!lvalue_p && real_lvalue_p (result))
3530 result = rvalue (result);
3532 return result;
3535 /* OPERAND is an operand to an expression. Perform necessary steps
3536 required before using it. If OPERAND is NULL_TREE, NULL_TREE is
3537 returned. */
3539 static tree
3540 prep_operand (tree operand)
3542 if (operand)
3544 if (CLASS_TYPE_P (TREE_TYPE (operand))
3545 && CLASSTYPE_TEMPLATE_INSTANTIATION (TREE_TYPE (operand)))
3546 /* Make sure the template type is instantiated now. */
3547 instantiate_class_template (TYPE_MAIN_VARIANT (TREE_TYPE (operand)));
3550 return operand;
3553 /* Add each of the viable functions in FNS (a FUNCTION_DECL or
3554 OVERLOAD) to the CANDIDATES, returning an updated list of
3555 CANDIDATES. The ARGS are the arguments provided to the call,
3556 without any implicit object parameter. The EXPLICIT_TARGS are
3557 explicit template arguments provided. TEMPLATE_ONLY is true if
3558 only template functions should be considered. CONVERSION_PATH,
3559 ACCESS_PATH, and FLAGS are as for add_function_candidate. */
3561 static void
3562 add_candidates (tree fns, tree args,
3563 tree explicit_targs, bool template_only,
3564 tree conversion_path, tree access_path,
3565 int flags,
3566 struct z_candidate **candidates)
3568 tree ctype;
3569 tree non_static_args;
3571 ctype = conversion_path ? BINFO_TYPE (conversion_path) : NULL_TREE;
3572 /* Delay creating the implicit this parameter until it is needed. */
3573 non_static_args = NULL_TREE;
3575 while (fns)
3577 tree fn;
3578 tree fn_args;
3580 fn = OVL_CURRENT (fns);
3581 /* Figure out which set of arguments to use. */
3582 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
3584 /* If this function is a non-static member, prepend the implicit
3585 object parameter. */
3586 if (!non_static_args)
3587 non_static_args = tree_cons (NULL_TREE,
3588 build_this (TREE_VALUE (args)),
3589 TREE_CHAIN (args));
3590 fn_args = non_static_args;
3592 else
3593 /* Otherwise, just use the list of arguments provided. */
3594 fn_args = args;
3596 if (TREE_CODE (fn) == TEMPLATE_DECL)
3597 add_template_candidate (candidates,
3599 ctype,
3600 explicit_targs,
3601 fn_args,
3602 NULL_TREE,
3603 access_path,
3604 conversion_path,
3605 flags,
3606 DEDUCE_CALL);
3607 else if (!template_only)
3608 add_function_candidate (candidates,
3610 ctype,
3611 fn_args,
3612 access_path,
3613 conversion_path,
3614 flags);
3615 fns = OVL_NEXT (fns);
3619 tree
3620 build_new_op (enum tree_code code, int flags, tree arg1, tree arg2, tree arg3,
3621 bool *overloaded_p)
3623 struct z_candidate *candidates = 0, *cand;
3624 tree arglist, fnname;
3625 tree args[3];
3626 tree result = NULL_TREE;
3627 bool result_valid_p = false;
3628 enum tree_code code2 = NOP_EXPR;
3629 conversion *conv;
3630 void *p;
3631 bool strict_p;
3632 bool any_viable_p;
3634 if (error_operand_p (arg1)
3635 || error_operand_p (arg2)
3636 || error_operand_p (arg3))
3637 return error_mark_node;
3639 if (code == MODIFY_EXPR)
3641 code2 = TREE_CODE (arg3);
3642 arg3 = NULL_TREE;
3643 fnname = ansi_assopname (code2);
3645 else
3646 fnname = ansi_opname (code);
3648 arg1 = prep_operand (arg1);
3650 switch (code)
3652 case NEW_EXPR:
3653 case VEC_NEW_EXPR:
3654 case VEC_DELETE_EXPR:
3655 case DELETE_EXPR:
3656 /* Use build_op_new_call and build_op_delete_call instead. */
3657 gcc_unreachable ();
3659 case CALL_EXPR:
3660 return build_object_call (arg1, arg2);
3662 default:
3663 break;
3666 arg2 = prep_operand (arg2);
3667 arg3 = prep_operand (arg3);
3669 if (code == COND_EXPR)
3671 if (arg2 == NULL_TREE
3672 || TREE_CODE (TREE_TYPE (arg2)) == VOID_TYPE
3673 || TREE_CODE (TREE_TYPE (arg3)) == VOID_TYPE
3674 || (! IS_OVERLOAD_TYPE (TREE_TYPE (arg2))
3675 && ! IS_OVERLOAD_TYPE (TREE_TYPE (arg3))))
3676 goto builtin;
3678 else if (! IS_OVERLOAD_TYPE (TREE_TYPE (arg1))
3679 && (! arg2 || ! IS_OVERLOAD_TYPE (TREE_TYPE (arg2))))
3680 goto builtin;
3682 if (code == POSTINCREMENT_EXPR || code == POSTDECREMENT_EXPR)
3683 arg2 = integer_zero_node;
3685 arglist = NULL_TREE;
3686 if (arg3)
3687 arglist = tree_cons (NULL_TREE, arg3, arglist);
3688 if (arg2)
3689 arglist = tree_cons (NULL_TREE, arg2, arglist);
3690 arglist = tree_cons (NULL_TREE, arg1, arglist);
3692 /* Get the high-water mark for the CONVERSION_OBSTACK. */
3693 p = conversion_obstack_alloc (0);
3695 /* Add namespace-scope operators to the list of functions to
3696 consider. */
3697 add_candidates (lookup_function_nonclass (fnname, arglist, /*block_p=*/true),
3698 arglist, NULL_TREE, false, NULL_TREE, NULL_TREE,
3699 flags, &candidates);
3700 /* Add class-member operators to the candidate set. */
3701 if (CLASS_TYPE_P (TREE_TYPE (arg1)))
3703 tree fns;
3705 fns = lookup_fnfields (TREE_TYPE (arg1), fnname, 1);
3706 if (fns == error_mark_node)
3708 result = error_mark_node;
3709 goto user_defined_result_ready;
3711 if (fns)
3712 add_candidates (BASELINK_FUNCTIONS (fns), arglist,
3713 NULL_TREE, false,
3714 BASELINK_BINFO (fns),
3715 TYPE_BINFO (TREE_TYPE (arg1)),
3716 flags, &candidates);
3719 /* Rearrange the arguments for ?: so that add_builtin_candidate only has
3720 to know about two args; a builtin candidate will always have a first
3721 parameter of type bool. We'll handle that in
3722 build_builtin_candidate. */
3723 if (code == COND_EXPR)
3725 args[0] = arg2;
3726 args[1] = arg3;
3727 args[2] = arg1;
3729 else
3731 args[0] = arg1;
3732 args[1] = arg2;
3733 args[2] = NULL_TREE;
3736 add_builtin_candidates (&candidates, code, code2, fnname, args, flags);
3738 switch (code)
3740 case COMPOUND_EXPR:
3741 case ADDR_EXPR:
3742 /* For these, the built-in candidates set is empty
3743 [over.match.oper]/3. We don't want non-strict matches
3744 because exact matches are always possible with built-in
3745 operators. The built-in candidate set for COMPONENT_REF
3746 would be empty too, but since there are no such built-in
3747 operators, we accept non-strict matches for them. */
3748 strict_p = true;
3749 break;
3751 default:
3752 strict_p = pedantic;
3753 break;
3756 candidates = splice_viable (candidates, strict_p, &any_viable_p);
3757 if (!any_viable_p)
3759 switch (code)
3761 case POSTINCREMENT_EXPR:
3762 case POSTDECREMENT_EXPR:
3763 /* Look for an `operator++ (int)'. If they didn't have
3764 one, then we fall back to the old way of doing things. */
3765 if (flags & LOOKUP_COMPLAIN)
3766 pedwarn ("no %<%D(int)%> declared for postfix %qs, "
3767 "trying prefix operator instead",
3768 fnname,
3769 operator_name_info[code].name);
3770 if (code == POSTINCREMENT_EXPR)
3771 code = PREINCREMENT_EXPR;
3772 else
3773 code = PREDECREMENT_EXPR;
3774 result = build_new_op (code, flags, arg1, NULL_TREE, NULL_TREE,
3775 overloaded_p);
3776 break;
3778 /* The caller will deal with these. */
3779 case ADDR_EXPR:
3780 case COMPOUND_EXPR:
3781 case COMPONENT_REF:
3782 result = NULL_TREE;
3783 result_valid_p = true;
3784 break;
3786 default:
3787 if (flags & LOOKUP_COMPLAIN)
3789 op_error (code, code2, arg1, arg2, arg3, "no match");
3790 print_z_candidates (candidates);
3792 result = error_mark_node;
3793 break;
3796 else
3798 cand = tourney (candidates);
3799 if (cand == 0)
3801 if (flags & LOOKUP_COMPLAIN)
3803 op_error (code, code2, arg1, arg2, arg3, "ambiguous overload");
3804 print_z_candidates (candidates);
3806 result = error_mark_node;
3808 else if (TREE_CODE (cand->fn) == FUNCTION_DECL)
3810 if (overloaded_p)
3811 *overloaded_p = true;
3813 result = build_over_call (cand, LOOKUP_NORMAL);
3815 else
3817 /* Give any warnings we noticed during overload resolution. */
3818 if (cand->warnings)
3820 struct candidate_warning *w;
3821 for (w = cand->warnings; w; w = w->next)
3822 joust (cand, w->loser, 1);
3825 /* Check for comparison of different enum types. */
3826 switch (code)
3828 case GT_EXPR:
3829 case LT_EXPR:
3830 case GE_EXPR:
3831 case LE_EXPR:
3832 case EQ_EXPR:
3833 case NE_EXPR:
3834 if (TREE_CODE (TREE_TYPE (arg1)) == ENUMERAL_TYPE
3835 && TREE_CODE (TREE_TYPE (arg2)) == ENUMERAL_TYPE
3836 && (TYPE_MAIN_VARIANT (TREE_TYPE (arg1))
3837 != TYPE_MAIN_VARIANT (TREE_TYPE (arg2))))
3839 warning (0, "comparison between %q#T and %q#T",
3840 TREE_TYPE (arg1), TREE_TYPE (arg2));
3842 break;
3843 default:
3844 break;
3847 /* We need to strip any leading REF_BIND so that bitfields
3848 don't cause errors. This should not remove any important
3849 conversions, because builtins don't apply to class
3850 objects directly. */
3851 conv = cand->convs[0];
3852 if (conv->kind == ck_ref_bind)
3853 conv = conv->u.next;
3854 arg1 = convert_like (conv, arg1);
3855 if (arg2)
3857 conv = cand->convs[1];
3858 if (conv->kind == ck_ref_bind)
3859 conv = conv->u.next;
3860 arg2 = convert_like (conv, arg2);
3862 if (arg3)
3864 conv = cand->convs[2];
3865 if (conv->kind == ck_ref_bind)
3866 conv = conv->u.next;
3867 arg3 = convert_like (conv, arg3);
3872 user_defined_result_ready:
3874 /* Free all the conversions we allocated. */
3875 obstack_free (&conversion_obstack, p);
3877 if (result || result_valid_p)
3878 return result;
3880 builtin:
3881 switch (code)
3883 case MODIFY_EXPR:
3884 return build_modify_expr (arg1, code2, arg2);
3886 case INDIRECT_REF:
3887 return build_indirect_ref (arg1, "unary *");
3889 case PLUS_EXPR:
3890 case MINUS_EXPR:
3891 case MULT_EXPR:
3892 case TRUNC_DIV_EXPR:
3893 case GT_EXPR:
3894 case LT_EXPR:
3895 case GE_EXPR:
3896 case LE_EXPR:
3897 case EQ_EXPR:
3898 case NE_EXPR:
3899 case MAX_EXPR:
3900 case MIN_EXPR:
3901 case LSHIFT_EXPR:
3902 case RSHIFT_EXPR:
3903 case TRUNC_MOD_EXPR:
3904 case BIT_AND_EXPR:
3905 case BIT_IOR_EXPR:
3906 case BIT_XOR_EXPR:
3907 case TRUTH_ANDIF_EXPR:
3908 case TRUTH_ORIF_EXPR:
3909 return cp_build_binary_op (code, arg1, arg2);
3911 case UNARY_PLUS_EXPR:
3912 case NEGATE_EXPR:
3913 case BIT_NOT_EXPR:
3914 case TRUTH_NOT_EXPR:
3915 case PREINCREMENT_EXPR:
3916 case POSTINCREMENT_EXPR:
3917 case PREDECREMENT_EXPR:
3918 case POSTDECREMENT_EXPR:
3919 case REALPART_EXPR:
3920 case IMAGPART_EXPR:
3921 return build_unary_op (code, arg1, candidates != 0);
3923 case ARRAY_REF:
3924 return build_array_ref (arg1, arg2);
3926 case COND_EXPR:
3927 return build_conditional_expr (arg1, arg2, arg3);
3929 case MEMBER_REF:
3930 return build_m_component_ref (build_indirect_ref (arg1, NULL), arg2);
3932 /* The caller will deal with these. */
3933 case ADDR_EXPR:
3934 case COMPONENT_REF:
3935 case COMPOUND_EXPR:
3936 return NULL_TREE;
3938 default:
3939 gcc_unreachable ();
3941 return NULL_TREE;
3944 /* Build a call to operator delete. This has to be handled very specially,
3945 because the restrictions on what signatures match are different from all
3946 other call instances. For a normal delete, only a delete taking (void *)
3947 or (void *, size_t) is accepted. For a placement delete, only an exact
3948 match with the placement new is accepted.
3950 CODE is either DELETE_EXPR or VEC_DELETE_EXPR.
3951 ADDR is the pointer to be deleted.
3952 SIZE is the size of the memory block to be deleted.
3953 GLOBAL_P is true if the delete-expression should not consider
3954 class-specific delete operators.
3955 PLACEMENT is the corresponding placement new call, or NULL_TREE.
3956 If PLACEMENT is non-NULL, then ALLOC_FN is the allocation function
3957 called to perform the placement new. */
3959 tree
3960 build_op_delete_call (enum tree_code code, tree addr, tree size,
3961 bool global_p, tree placement,
3962 tree alloc_fn)
3964 tree fn = NULL_TREE;
3965 tree fns, fnname, argtypes, args, type;
3966 int pass;
3968 if (addr == error_mark_node)
3969 return error_mark_node;
3971 type = strip_array_types (TREE_TYPE (TREE_TYPE (addr)));
3973 fnname = ansi_opname (code);
3975 if (CLASS_TYPE_P (type)
3976 && COMPLETE_TYPE_P (complete_type (type))
3977 && !global_p)
3978 /* In [class.free]
3980 If the result of the lookup is ambiguous or inaccessible, or if
3981 the lookup selects a placement deallocation function, the
3982 program is ill-formed.
3984 Therefore, we ask lookup_fnfields to complain about ambiguity. */
3986 fns = lookup_fnfields (TYPE_BINFO (type), fnname, 1);
3987 if (fns == error_mark_node)
3988 return error_mark_node;
3990 else
3991 fns = NULL_TREE;
3993 if (fns == NULL_TREE)
3994 fns = lookup_name_nonclass (fnname);
3996 if (placement)
3998 /* Get the parameter types for the allocation function that is
3999 being called. */
4000 gcc_assert (alloc_fn != NULL_TREE);
4001 argtypes = TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (alloc_fn)));
4002 /* Also the second argument. */
4003 args = TREE_CHAIN (TREE_OPERAND (placement, 1));
4005 else
4007 /* First try it without the size argument. */
4008 argtypes = void_list_node;
4009 args = NULL_TREE;
4012 /* Strip const and volatile from addr. */
4013 addr = cp_convert (ptr_type_node, addr);
4015 /* We make two tries at finding a matching `operator delete'. On
4016 the first pass, we look for a one-operator (or placement)
4017 operator delete. If we're not doing placement delete, then on
4018 the second pass we look for a two-argument delete. */
4019 for (pass = 0; pass < (placement ? 1 : 2); ++pass)
4021 /* Go through the `operator delete' functions looking for one
4022 with a matching type. */
4023 for (fn = BASELINK_P (fns) ? BASELINK_FUNCTIONS (fns) : fns;
4025 fn = OVL_NEXT (fn))
4027 tree t;
4029 /* The first argument must be "void *". */
4030 t = TYPE_ARG_TYPES (TREE_TYPE (OVL_CURRENT (fn)));
4031 if (!same_type_p (TREE_VALUE (t), ptr_type_node))
4032 continue;
4033 t = TREE_CHAIN (t);
4034 /* On the first pass, check the rest of the arguments. */
4035 if (pass == 0)
4037 tree a = argtypes;
4038 while (a && t)
4040 if (!same_type_p (TREE_VALUE (a), TREE_VALUE (t)))
4041 break;
4042 a = TREE_CHAIN (a);
4043 t = TREE_CHAIN (t);
4045 if (!a && !t)
4046 break;
4048 /* On the second pass, the second argument must be
4049 "size_t". */
4050 else if (pass == 1
4051 && same_type_p (TREE_VALUE (t), sizetype)
4052 && TREE_CHAIN (t) == void_list_node)
4053 break;
4056 /* If we found a match, we're done. */
4057 if (fn)
4058 break;
4061 /* If we have a matching function, call it. */
4062 if (fn)
4064 /* Make sure we have the actual function, and not an
4065 OVERLOAD. */
4066 fn = OVL_CURRENT (fn);
4068 /* If the FN is a member function, make sure that it is
4069 accessible. */
4070 if (DECL_CLASS_SCOPE_P (fn))
4071 perform_or_defer_access_check (TYPE_BINFO (type), fn);
4073 if (pass == 0)
4074 args = tree_cons (NULL_TREE, addr, args);
4075 else
4076 args = tree_cons (NULL_TREE, addr,
4077 build_tree_list (NULL_TREE, size));
4079 if (placement)
4081 /* The placement args might not be suitable for overload
4082 resolution at this point, so build the call directly. */
4083 mark_used (fn);
4084 return build_cxx_call (fn, args);
4086 else
4087 return build_function_call (fn, args);
4090 /* If we are doing placement delete we do nothing if we don't find a
4091 matching op delete. */
4092 if (placement)
4093 return NULL_TREE;
4095 error ("no suitable %<operator %s%> for %qT",
4096 operator_name_info[(int)code].name, type);
4097 return error_mark_node;
4100 /* If the current scope isn't allowed to access DECL along
4101 BASETYPE_PATH, give an error. The most derived class in
4102 BASETYPE_PATH is the one used to qualify DECL. */
4104 bool
4105 enforce_access (tree basetype_path, tree decl)
4107 gcc_assert (TREE_CODE (basetype_path) == TREE_BINFO);
4109 if (!accessible_p (basetype_path, decl, true))
4111 if (TREE_PRIVATE (decl))
4112 error ("%q+#D is private", decl);
4113 else if (TREE_PROTECTED (decl))
4114 error ("%q+#D is protected", decl);
4115 else
4116 error ("%q+#D is inaccessible", decl);
4117 error ("within this context");
4118 return false;
4121 return true;
4124 /* Check that a callable constructor to initialize a temporary of
4125 TYPE from an EXPR exists. */
4127 static void
4128 check_constructor_callable (tree type, tree expr)
4130 build_special_member_call (NULL_TREE,
4131 complete_ctor_identifier,
4132 build_tree_list (NULL_TREE, expr),
4133 type,
4134 LOOKUP_NORMAL | LOOKUP_ONLYCONVERTING
4135 | LOOKUP_NO_CONVERSION
4136 | LOOKUP_CONSTRUCTOR_CALLABLE);
4139 /* Initialize a temporary of type TYPE with EXPR. The FLAGS are a
4140 bitwise or of LOOKUP_* values. If any errors are warnings are
4141 generated, set *DIAGNOSTIC_FN to "error" or "warning",
4142 respectively. If no diagnostics are generated, set *DIAGNOSTIC_FN
4143 to NULL. */
4145 static tree
4146 build_temp (tree expr, tree type, int flags,
4147 diagnostic_fn_t *diagnostic_fn)
4149 int savew, savee;
4151 savew = warningcount, savee = errorcount;
4152 expr = build_special_member_call (NULL_TREE,
4153 complete_ctor_identifier,
4154 build_tree_list (NULL_TREE, expr),
4155 type, flags);
4156 if (warningcount > savew)
4157 *diagnostic_fn = warning0;
4158 else if (errorcount > savee)
4159 *diagnostic_fn = error;
4160 else
4161 *diagnostic_fn = NULL;
4162 return expr;
4166 /* Perform the conversions in CONVS on the expression EXPR. FN and
4167 ARGNUM are used for diagnostics. ARGNUM is zero based, -1
4168 indicates the `this' argument of a method. INNER is nonzero when
4169 being called to continue a conversion chain. It is negative when a
4170 reference binding will be applied, positive otherwise. If
4171 ISSUE_CONVERSION_WARNINGS is true, warnings about suspicious
4172 conversions will be emitted if appropriate. If C_CAST_P is true,
4173 this conversion is coming from a C-style cast; in that case,
4174 conversions to inaccessible bases are permitted. */
4176 static tree
4177 convert_like_real (conversion *convs, tree expr, tree fn, int argnum,
4178 int inner, bool issue_conversion_warnings,
4179 bool c_cast_p)
4181 tree totype = convs->type;
4182 diagnostic_fn_t diagnostic_fn;
4184 if (convs->bad_p
4185 && convs->kind != ck_user
4186 && convs->kind != ck_ambig
4187 && convs->kind != ck_ref_bind)
4189 conversion *t = convs;
4190 for (; t; t = convs->u.next)
4192 if (t->kind == ck_user || !t->bad_p)
4194 expr = convert_like_real (t, expr, fn, argnum, 1,
4195 /*issue_conversion_warnings=*/false,
4196 /*c_cast_p=*/false);
4197 break;
4199 else if (t->kind == ck_ambig)
4200 return convert_like_real (t, expr, fn, argnum, 1,
4201 /*issue_conversion_warnings=*/false,
4202 /*c_cast_p=*/false);
4203 else if (t->kind == ck_identity)
4204 break;
4206 pedwarn ("invalid conversion from %qT to %qT", TREE_TYPE (expr), totype);
4207 if (fn)
4208 pedwarn (" initializing argument %P of %qD", argnum, fn);
4209 return cp_convert (totype, expr);
4212 if (issue_conversion_warnings)
4214 tree t = non_reference (totype);
4216 /* Issue warnings about peculiar, but valid, uses of NULL. */
4217 if (ARITHMETIC_TYPE_P (t) && expr == null_node)
4219 if (fn)
4220 warning (OPT_Wconversion, "passing NULL to non-pointer argument %P of %qD",
4221 argnum, fn);
4222 else
4223 warning (OPT_Wconversion, "converting to non-pointer type %qT from NULL", t);
4226 /* Warn about assigning a floating-point type to an integer type. */
4227 if (TREE_CODE (TREE_TYPE (expr)) == REAL_TYPE
4228 && TREE_CODE (t) == INTEGER_TYPE)
4230 if (fn)
4231 warning (OPT_Wconversion, "passing %qT for argument %P to %qD",
4232 TREE_TYPE (expr), argnum, fn);
4233 else
4234 warning (OPT_Wconversion, "converting to %qT from %qT", t, TREE_TYPE (expr));
4238 switch (convs->kind)
4240 case ck_user:
4242 struct z_candidate *cand = convs->cand;
4243 tree convfn = cand->fn;
4244 tree args;
4246 if (DECL_CONSTRUCTOR_P (convfn))
4248 tree t = build_int_cst (build_pointer_type (DECL_CONTEXT (convfn)),
4251 args = build_tree_list (NULL_TREE, expr);
4252 /* We should never try to call the abstract or base constructor
4253 from here. */
4254 gcc_assert (!DECL_HAS_IN_CHARGE_PARM_P (convfn)
4255 && !DECL_HAS_VTT_PARM_P (convfn));
4256 args = tree_cons (NULL_TREE, t, args);
4258 else
4259 args = build_this (expr);
4260 expr = build_over_call (cand, LOOKUP_NORMAL);
4262 /* If this is a constructor or a function returning an aggr type,
4263 we need to build up a TARGET_EXPR. */
4264 if (DECL_CONSTRUCTOR_P (convfn))
4265 expr = build_cplus_new (totype, expr);
4267 /* The result of the call is then used to direct-initialize the object
4268 that is the destination of the copy-initialization. [dcl.init]
4270 Note that this step is not reflected in the conversion sequence;
4271 it affects the semantics when we actually perform the
4272 conversion, but is not considered during overload resolution.
4274 If the target is a class, that means call a ctor. */
4275 if (IS_AGGR_TYPE (totype)
4276 && (inner >= 0 || !lvalue_p (expr)))
4278 expr = (build_temp
4279 (expr, totype,
4280 /* Core issue 84, now a DR, says that we don't
4281 allow UDCs for these args (which deliberately
4282 breaks copy-init of an auto_ptr<Base> from an
4283 auto_ptr<Derived>). */
4284 LOOKUP_NORMAL|LOOKUP_ONLYCONVERTING|LOOKUP_NO_CONVERSION,
4285 &diagnostic_fn));
4287 if (diagnostic_fn)
4289 if (fn)
4290 diagnostic_fn
4291 (" initializing argument %P of %qD from result of %qD",
4292 argnum, fn, convfn);
4293 else
4294 diagnostic_fn
4295 (" initializing temporary from result of %qD", convfn);
4297 expr = build_cplus_new (totype, expr);
4299 return expr;
4301 case ck_identity:
4302 if (type_unknown_p (expr))
4303 expr = instantiate_type (totype, expr, tf_warning_or_error);
4304 /* Convert a constant to its underlying value, unless we are
4305 about to bind it to a reference, in which case we need to
4306 leave it as an lvalue. */
4307 if (inner >= 0)
4308 expr = decl_constant_value (expr);
4309 if (convs->check_copy_constructor_p)
4310 check_constructor_callable (totype, expr);
4311 return expr;
4312 case ck_ambig:
4313 /* Call build_user_type_conversion again for the error. */
4314 return build_user_type_conversion
4315 (totype, convs->u.expr, LOOKUP_NORMAL);
4317 default:
4318 break;
4321 expr = convert_like_real (convs->u.next, expr, fn, argnum,
4322 convs->kind == ck_ref_bind ? -1 : 1,
4323 /*issue_conversion_warnings=*/false,
4324 c_cast_p);
4325 if (expr == error_mark_node)
4326 return error_mark_node;
4328 switch (convs->kind)
4330 case ck_rvalue:
4331 if (! IS_AGGR_TYPE (totype))
4332 return expr;
4333 /* Else fall through. */
4334 case ck_base:
4335 if (convs->kind == ck_base && !convs->need_temporary_p)
4337 /* We are going to bind a reference directly to a base-class
4338 subobject of EXPR. */
4339 if (convs->check_copy_constructor_p)
4340 check_constructor_callable (TREE_TYPE (expr), expr);
4341 /* Build an expression for `*((base*) &expr)'. */
4342 expr = build_unary_op (ADDR_EXPR, expr, 0);
4343 expr = convert_to_base (expr, build_pointer_type (totype),
4344 !c_cast_p, /*nonnull=*/true);
4345 expr = build_indirect_ref (expr, "implicit conversion");
4346 return expr;
4349 /* Copy-initialization where the cv-unqualified version of the source
4350 type is the same class as, or a derived class of, the class of the
4351 destination [is treated as direct-initialization]. [dcl.init] */
4352 expr = build_temp (expr, totype, LOOKUP_NORMAL|LOOKUP_ONLYCONVERTING,
4353 &diagnostic_fn);
4354 if (diagnostic_fn && fn)
4355 diagnostic_fn (" initializing argument %P of %qD", argnum, fn);
4356 return build_cplus_new (totype, expr);
4358 case ck_ref_bind:
4360 tree ref_type = totype;
4362 /* If necessary, create a temporary. */
4363 if (convs->need_temporary_p || !lvalue_p (expr))
4365 tree type = convs->u.next->type;
4366 cp_lvalue_kind lvalue = real_lvalue_p (expr);
4368 if (!CP_TYPE_CONST_NON_VOLATILE_P (TREE_TYPE (ref_type)))
4370 /* If the reference is volatile or non-const, we
4371 cannot create a temporary. */
4372 if (lvalue & clk_bitfield)
4373 error ("cannot bind bitfield %qE to %qT",
4374 expr, ref_type);
4375 else if (lvalue & clk_packed)
4376 error ("cannot bind packed field %qE to %qT",
4377 expr, ref_type);
4378 else
4379 error ("cannot bind rvalue %qE to %qT", expr, ref_type);
4380 return error_mark_node;
4382 /* If the source is a packed field, and we must use a copy
4383 constructor, then building the target expr will require
4384 binding the field to the reference parameter to the
4385 copy constructor, and we'll end up with an infinite
4386 loop. If we can use a bitwise copy, then we'll be
4387 OK. */
4388 if ((lvalue & clk_packed)
4389 && CLASS_TYPE_P (type)
4390 && !TYPE_HAS_TRIVIAL_INIT_REF (type))
4392 error ("cannot bind packed field %qE to %qT",
4393 expr, ref_type);
4394 return error_mark_node;
4396 expr = build_target_expr_with_type (expr, type);
4399 /* Take the address of the thing to which we will bind the
4400 reference. */
4401 expr = build_unary_op (ADDR_EXPR, expr, 1);
4402 if (expr == error_mark_node)
4403 return error_mark_node;
4405 /* Convert it to a pointer to the type referred to by the
4406 reference. This will adjust the pointer if a derived to
4407 base conversion is being performed. */
4408 expr = cp_convert (build_pointer_type (TREE_TYPE (ref_type)),
4409 expr);
4410 /* Convert the pointer to the desired reference type. */
4411 return build_nop (ref_type, expr);
4414 case ck_lvalue:
4415 return decay_conversion (expr);
4417 case ck_qual:
4418 /* Warn about deprecated conversion if appropriate. */
4419 string_conv_p (totype, expr, 1);
4420 break;
4422 case ck_ptr:
4423 if (convs->base_p)
4424 expr = convert_to_base (expr, totype, !c_cast_p,
4425 /*nonnull=*/false);
4426 return build_nop (totype, expr);
4428 case ck_pmem:
4429 return convert_ptrmem (totype, expr, /*allow_inverse_p=*/false,
4430 c_cast_p);
4432 default:
4433 break;
4436 if (issue_conversion_warnings)
4437 expr = convert_and_check (totype, expr);
4438 else
4439 expr = convert (totype, expr);
4441 return expr;
4444 /* Build a call to __builtin_trap. */
4446 static tree
4447 call_builtin_trap (void)
4449 tree fn = implicit_built_in_decls[BUILT_IN_TRAP];
4451 gcc_assert (fn != NULL);
4452 fn = build_call (fn, NULL_TREE);
4453 return fn;
4456 /* ARG is being passed to a varargs function. Perform any conversions
4457 required. Return the converted value. */
4459 tree
4460 convert_arg_to_ellipsis (tree arg)
4462 /* [expr.call]
4464 The lvalue-to-rvalue, array-to-pointer, and function-to-pointer
4465 standard conversions are performed. */
4466 arg = decay_conversion (arg);
4467 /* [expr.call]
4469 If the argument has integral or enumeration type that is subject
4470 to the integral promotions (_conv.prom_), or a floating point
4471 type that is subject to the floating point promotion
4472 (_conv.fpprom_), the value of the argument is converted to the
4473 promoted type before the call. */
4474 if (TREE_CODE (TREE_TYPE (arg)) == REAL_TYPE
4475 && (TYPE_PRECISION (TREE_TYPE (arg))
4476 < TYPE_PRECISION (double_type_node)))
4477 arg = convert_to_real (double_type_node, arg);
4478 else if (INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (arg)))
4479 arg = perform_integral_promotions (arg);
4481 arg = require_complete_type (arg);
4483 if (arg != error_mark_node
4484 && !pod_type_p (TREE_TYPE (arg)))
4486 /* Undefined behavior [expr.call] 5.2.2/7. We used to just warn
4487 here and do a bitwise copy, but now cp_expr_size will abort if we
4488 try to do that.
4489 If the call appears in the context of a sizeof expression,
4490 there is no need to emit a warning, since the expression won't be
4491 evaluated. We keep the builtin_trap just as a safety check. */
4492 if (!skip_evaluation)
4493 warning (0, "cannot pass objects of non-POD type %q#T through %<...%>; "
4494 "call will abort at runtime", TREE_TYPE (arg));
4495 arg = call_builtin_trap ();
4496 arg = build2 (COMPOUND_EXPR, integer_type_node, arg,
4497 integer_zero_node);
4500 return arg;
4503 /* va_arg (EXPR, TYPE) is a builtin. Make sure it is not abused. */
4505 tree
4506 build_x_va_arg (tree expr, tree type)
4508 if (processing_template_decl)
4509 return build_min (VA_ARG_EXPR, type, expr);
4511 type = complete_type_or_else (type, NULL_TREE);
4513 if (expr == error_mark_node || !type)
4514 return error_mark_node;
4516 if (! pod_type_p (type))
4518 /* Undefined behavior [expr.call] 5.2.2/7. */
4519 warning (0, "cannot receive objects of non-POD type %q#T through %<...%>; "
4520 "call will abort at runtime", type);
4521 expr = convert (build_pointer_type (type), null_node);
4522 expr = build2 (COMPOUND_EXPR, TREE_TYPE (expr),
4523 call_builtin_trap (), expr);
4524 expr = build_indirect_ref (expr, NULL);
4525 return expr;
4528 return build_va_arg (expr, type);
4531 /* TYPE has been given to va_arg. Apply the default conversions which
4532 would have happened when passed via ellipsis. Return the promoted
4533 type, or the passed type if there is no change. */
4535 tree
4536 cxx_type_promotes_to (tree type)
4538 tree promote;
4540 /* Perform the array-to-pointer and function-to-pointer
4541 conversions. */
4542 type = type_decays_to (type);
4544 promote = type_promotes_to (type);
4545 if (same_type_p (type, promote))
4546 promote = type;
4548 return promote;
4551 /* ARG is a default argument expression being passed to a parameter of
4552 the indicated TYPE, which is a parameter to FN. Do any required
4553 conversions. Return the converted value. */
4555 tree
4556 convert_default_arg (tree type, tree arg, tree fn, int parmnum)
4558 /* If the ARG is an unparsed default argument expression, the
4559 conversion cannot be performed. */
4560 if (TREE_CODE (arg) == DEFAULT_ARG)
4562 error ("the default argument for parameter %d of %qD has "
4563 "not yet been parsed",
4564 parmnum, fn);
4565 return error_mark_node;
4568 if (fn && DECL_TEMPLATE_INFO (fn))
4569 arg = tsubst_default_argument (fn, type, arg);
4571 arg = break_out_target_exprs (arg);
4573 if (TREE_CODE (arg) == CONSTRUCTOR)
4575 arg = digest_init (type, arg);
4576 arg = convert_for_initialization (0, type, arg, LOOKUP_NORMAL,
4577 "default argument", fn, parmnum);
4579 else
4581 /* This could get clobbered by the following call. */
4582 if (TREE_HAS_CONSTRUCTOR (arg))
4583 arg = copy_node (arg);
4585 arg = convert_for_initialization (0, type, arg, LOOKUP_NORMAL,
4586 "default argument", fn, parmnum);
4587 arg = convert_for_arg_passing (type, arg);
4590 return arg;
4593 /* Returns the type which will really be used for passing an argument of
4594 type TYPE. */
4596 tree
4597 type_passed_as (tree type)
4599 /* Pass classes with copy ctors by invisible reference. */
4600 if (TREE_ADDRESSABLE (type))
4602 type = build_reference_type (type);
4603 /* There are no other pointers to this temporary. */
4604 type = build_qualified_type (type, TYPE_QUAL_RESTRICT);
4606 else if (targetm.calls.promote_prototypes (type)
4607 && INTEGRAL_TYPE_P (type)
4608 && COMPLETE_TYPE_P (type)
4609 && INT_CST_LT_UNSIGNED (TYPE_SIZE (type),
4610 TYPE_SIZE (integer_type_node)))
4611 type = integer_type_node;
4613 return type;
4616 /* Actually perform the appropriate conversion. */
4618 tree
4619 convert_for_arg_passing (tree type, tree val)
4621 if (val == error_mark_node)
4623 /* Pass classes with copy ctors by invisible reference. */
4624 else if (TREE_ADDRESSABLE (type))
4625 val = build1 (ADDR_EXPR, build_reference_type (type), val);
4626 else if (targetm.calls.promote_prototypes (type)
4627 && INTEGRAL_TYPE_P (type)
4628 && COMPLETE_TYPE_P (type)
4629 && INT_CST_LT_UNSIGNED (TYPE_SIZE (type),
4630 TYPE_SIZE (integer_type_node)))
4631 val = perform_integral_promotions (val);
4632 if (warn_missing_format_attribute)
4634 tree rhstype = TREE_TYPE (val);
4635 const enum tree_code coder = TREE_CODE (rhstype);
4636 const enum tree_code codel = TREE_CODE (type);
4637 if ((codel == POINTER_TYPE || codel == REFERENCE_TYPE)
4638 && coder == codel
4639 && check_missing_format_attribute (type, rhstype))
4640 warning (OPT_Wmissing_format_attribute,
4641 "argument of function call might be a candidate for a format attribute");
4643 return val;
4646 /* Returns true iff FN is a function with magic varargs, i.e. ones for
4647 which no conversions at all should be done. This is true for some
4648 builtins which don't act like normal functions. */
4650 static bool
4651 magic_varargs_p (tree fn)
4653 if (DECL_BUILT_IN (fn))
4654 switch (DECL_FUNCTION_CODE (fn))
4656 case BUILT_IN_CLASSIFY_TYPE:
4657 case BUILT_IN_CONSTANT_P:
4658 case BUILT_IN_NEXT_ARG:
4659 case BUILT_IN_STDARG_START:
4660 case BUILT_IN_VA_START:
4661 return true;
4663 default:;
4666 return false;
4669 /* Subroutine of the various build_*_call functions. Overload resolution
4670 has chosen a winning candidate CAND; build up a CALL_EXPR accordingly.
4671 ARGS is a TREE_LIST of the unconverted arguments to the call. FLAGS is a
4672 bitmask of various LOOKUP_* flags which apply to the call itself. */
4674 static tree
4675 build_over_call (struct z_candidate *cand, int flags)
4677 tree fn = cand->fn;
4678 tree args = cand->args;
4679 conversion **convs = cand->convs;
4680 conversion *conv;
4681 tree converted_args = NULL_TREE;
4682 tree parm = TYPE_ARG_TYPES (TREE_TYPE (fn));
4683 tree arg, val;
4684 int i = 0;
4685 int is_method = 0;
4687 /* In a template, there is no need to perform all of the work that
4688 is normally done. We are only interested in the type of the call
4689 expression, i.e., the return type of the function. Any semantic
4690 errors will be deferred until the template is instantiated. */
4691 if (processing_template_decl)
4693 tree expr;
4694 tree return_type;
4695 return_type = TREE_TYPE (TREE_TYPE (fn));
4696 expr = build3 (CALL_EXPR, return_type, fn, args, NULL_TREE);
4697 if (TREE_THIS_VOLATILE (fn) && cfun)
4698 current_function_returns_abnormally = 1;
4699 if (!VOID_TYPE_P (return_type))
4700 require_complete_type (return_type);
4701 return convert_from_reference (expr);
4704 /* Give any warnings we noticed during overload resolution. */
4705 if (cand->warnings)
4707 struct candidate_warning *w;
4708 for (w = cand->warnings; w; w = w->next)
4709 joust (cand, w->loser, 1);
4712 if (DECL_FUNCTION_MEMBER_P (fn))
4714 /* If FN is a template function, two cases must be considered.
4715 For example:
4717 struct A {
4718 protected:
4719 template <class T> void f();
4721 template <class T> struct B {
4722 protected:
4723 void g();
4725 struct C : A, B<int> {
4726 using A::f; // #1
4727 using B<int>::g; // #2
4730 In case #1 where `A::f' is a member template, DECL_ACCESS is
4731 recorded in the primary template but not in its specialization.
4732 We check access of FN using its primary template.
4734 In case #2, where `B<int>::g' has a DECL_TEMPLATE_INFO simply
4735 because it is a member of class template B, DECL_ACCESS is
4736 recorded in the specialization `B<int>::g'. We cannot use its
4737 primary template because `B<T>::g' and `B<int>::g' may have
4738 different access. */
4739 if (DECL_TEMPLATE_INFO (fn)
4740 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (fn)))
4741 perform_or_defer_access_check (cand->access_path,
4742 DECL_TI_TEMPLATE (fn));
4743 else
4744 perform_or_defer_access_check (cand->access_path, fn);
4747 if (args && TREE_CODE (args) != TREE_LIST)
4748 args = build_tree_list (NULL_TREE, args);
4749 arg = args;
4751 /* The implicit parameters to a constructor are not considered by overload
4752 resolution, and must be of the proper type. */
4753 if (DECL_CONSTRUCTOR_P (fn))
4755 converted_args = tree_cons (NULL_TREE, TREE_VALUE (arg), converted_args);
4756 arg = TREE_CHAIN (arg);
4757 parm = TREE_CHAIN (parm);
4758 /* We should never try to call the abstract constructor. */
4759 gcc_assert (!DECL_HAS_IN_CHARGE_PARM_P (fn));
4761 if (DECL_HAS_VTT_PARM_P (fn))
4763 converted_args = tree_cons
4764 (NULL_TREE, TREE_VALUE (arg), converted_args);
4765 arg = TREE_CHAIN (arg);
4766 parm = TREE_CHAIN (parm);
4769 /* Bypass access control for 'this' parameter. */
4770 else if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
4772 tree parmtype = TREE_VALUE (parm);
4773 tree argtype = TREE_TYPE (TREE_VALUE (arg));
4774 tree converted_arg;
4775 tree base_binfo;
4777 if (convs[i]->bad_p)
4778 pedwarn ("passing %qT as %<this%> argument of %q#D discards qualifiers",
4779 TREE_TYPE (argtype), fn);
4781 /* [class.mfct.nonstatic]: If a nonstatic member function of a class
4782 X is called for an object that is not of type X, or of a type
4783 derived from X, the behavior is undefined.
4785 So we can assume that anything passed as 'this' is non-null, and
4786 optimize accordingly. */
4787 gcc_assert (TREE_CODE (parmtype) == POINTER_TYPE);
4788 /* Convert to the base in which the function was declared. */
4789 gcc_assert (cand->conversion_path != NULL_TREE);
4790 converted_arg = build_base_path (PLUS_EXPR,
4791 TREE_VALUE (arg),
4792 cand->conversion_path,
4794 /* Check that the base class is accessible. */
4795 if (!accessible_base_p (TREE_TYPE (argtype),
4796 BINFO_TYPE (cand->conversion_path), true))
4797 error ("%qT is not an accessible base of %qT",
4798 BINFO_TYPE (cand->conversion_path),
4799 TREE_TYPE (argtype));
4800 /* If fn was found by a using declaration, the conversion path
4801 will be to the derived class, not the base declaring fn. We
4802 must convert from derived to base. */
4803 base_binfo = lookup_base (TREE_TYPE (TREE_TYPE (converted_arg)),
4804 TREE_TYPE (parmtype), ba_unique, NULL);
4805 converted_arg = build_base_path (PLUS_EXPR, converted_arg,
4806 base_binfo, 1);
4808 converted_args = tree_cons (NULL_TREE, converted_arg, converted_args);
4809 parm = TREE_CHAIN (parm);
4810 arg = TREE_CHAIN (arg);
4811 ++i;
4812 is_method = 1;
4815 for (; arg && parm;
4816 parm = TREE_CHAIN (parm), arg = TREE_CHAIN (arg), ++i)
4818 tree type = TREE_VALUE (parm);
4820 conv = convs[i];
4821 val = convert_like_with_context
4822 (conv, TREE_VALUE (arg), fn, i - is_method);
4824 val = convert_for_arg_passing (type, val);
4825 converted_args = tree_cons (NULL_TREE, val, converted_args);
4828 /* Default arguments */
4829 for (; parm && parm != void_list_node; parm = TREE_CHAIN (parm), i++)
4830 converted_args
4831 = tree_cons (NULL_TREE,
4832 convert_default_arg (TREE_VALUE (parm),
4833 TREE_PURPOSE (parm),
4834 fn, i - is_method),
4835 converted_args);
4837 /* Ellipsis */
4838 for (; arg; arg = TREE_CHAIN (arg))
4840 tree a = TREE_VALUE (arg);
4841 if (magic_varargs_p (fn))
4842 /* Do no conversions for magic varargs. */;
4843 else
4844 a = convert_arg_to_ellipsis (a);
4845 converted_args = tree_cons (NULL_TREE, a, converted_args);
4848 converted_args = nreverse (converted_args);
4850 check_function_arguments (TYPE_ATTRIBUTES (TREE_TYPE (fn)),
4851 converted_args, TYPE_ARG_TYPES (TREE_TYPE (fn)));
4853 /* Avoid actually calling copy constructors and copy assignment operators,
4854 if possible. */
4856 if (! flag_elide_constructors)
4857 /* Do things the hard way. */;
4858 else if (cand->num_convs == 1 && DECL_COPY_CONSTRUCTOR_P (fn))
4860 tree targ;
4861 arg = skip_artificial_parms_for (fn, converted_args);
4862 arg = TREE_VALUE (arg);
4864 /* Pull out the real argument, disregarding const-correctness. */
4865 targ = arg;
4866 while (TREE_CODE (targ) == NOP_EXPR
4867 || TREE_CODE (targ) == NON_LVALUE_EXPR
4868 || TREE_CODE (targ) == CONVERT_EXPR)
4869 targ = TREE_OPERAND (targ, 0);
4870 if (TREE_CODE (targ) == ADDR_EXPR)
4872 targ = TREE_OPERAND (targ, 0);
4873 if (!same_type_ignoring_top_level_qualifiers_p
4874 (TREE_TYPE (TREE_TYPE (arg)), TREE_TYPE (targ)))
4875 targ = NULL_TREE;
4877 else
4878 targ = NULL_TREE;
4880 if (targ)
4881 arg = targ;
4882 else
4883 arg = build_indirect_ref (arg, 0);
4885 /* [class.copy]: the copy constructor is implicitly defined even if
4886 the implementation elided its use. */
4887 if (TYPE_HAS_COMPLEX_INIT_REF (DECL_CONTEXT (fn)))
4888 mark_used (fn);
4890 /* If we're creating a temp and we already have one, don't create a
4891 new one. If we're not creating a temp but we get one, use
4892 INIT_EXPR to collapse the temp into our target. Otherwise, if the
4893 ctor is trivial, do a bitwise copy with a simple TARGET_EXPR for a
4894 temp or an INIT_EXPR otherwise. */
4895 if (integer_zerop (TREE_VALUE (args)))
4897 if (TREE_CODE (arg) == TARGET_EXPR)
4898 return arg;
4899 else if (TYPE_HAS_TRIVIAL_INIT_REF (DECL_CONTEXT (fn)))
4900 return build_target_expr_with_type (arg, DECL_CONTEXT (fn));
4902 else if (TREE_CODE (arg) == TARGET_EXPR
4903 || TYPE_HAS_TRIVIAL_INIT_REF (DECL_CONTEXT (fn)))
4905 tree to = stabilize_reference
4906 (build_indirect_ref (TREE_VALUE (args), 0));
4908 val = build2 (INIT_EXPR, DECL_CONTEXT (fn), to, arg);
4909 return val;
4912 else if (DECL_OVERLOADED_OPERATOR_P (fn) == NOP_EXPR
4913 && copy_fn_p (fn)
4914 && TYPE_HAS_TRIVIAL_ASSIGN_REF (DECL_CONTEXT (fn)))
4916 tree to = stabilize_reference
4917 (build_indirect_ref (TREE_VALUE (converted_args), 0));
4918 tree type = TREE_TYPE (to);
4919 tree as_base = CLASSTYPE_AS_BASE (type);
4921 arg = TREE_VALUE (TREE_CHAIN (converted_args));
4922 if (tree_int_cst_equal (TYPE_SIZE (type), TYPE_SIZE (as_base)))
4924 arg = build_indirect_ref (arg, 0);
4925 val = build2 (MODIFY_EXPR, TREE_TYPE (to), to, arg);
4927 else
4929 /* We must only copy the non-tail padding parts.
4930 Use __builtin_memcpy for the bitwise copy. */
4932 tree args, t;
4934 args = tree_cons (NULL, TYPE_SIZE_UNIT (as_base), NULL);
4935 args = tree_cons (NULL, arg, args);
4936 t = build_unary_op (ADDR_EXPR, to, 0);
4937 args = tree_cons (NULL, t, args);
4938 t = implicit_built_in_decls[BUILT_IN_MEMCPY];
4939 t = build_call (t, args);
4941 t = convert (TREE_TYPE (TREE_VALUE (args)), t);
4942 val = build_indirect_ref (t, 0);
4945 return val;
4948 mark_used (fn);
4950 if (DECL_VINDEX (fn) && (flags & LOOKUP_NONVIRTUAL) == 0)
4952 tree t, *p = &TREE_VALUE (converted_args);
4953 tree binfo = lookup_base (TREE_TYPE (TREE_TYPE (*p)),
4954 DECL_CONTEXT (fn),
4955 ba_any, NULL);
4956 gcc_assert (binfo && binfo != error_mark_node);
4958 *p = build_base_path (PLUS_EXPR, *p, binfo, 1);
4959 if (TREE_SIDE_EFFECTS (*p))
4960 *p = save_expr (*p);
4961 t = build_pointer_type (TREE_TYPE (fn));
4962 if (DECL_CONTEXT (fn) && TYPE_JAVA_INTERFACE (DECL_CONTEXT (fn)))
4963 fn = build_java_interface_fn_ref (fn, *p);
4964 else
4965 fn = build_vfn_ref (*p, DECL_VINDEX (fn));
4966 TREE_TYPE (fn) = t;
4968 else if (DECL_INLINE (fn))
4969 fn = inline_conversion (fn);
4970 else
4971 fn = build_addr_func (fn);
4973 return build_cxx_call (fn, converted_args);
4976 /* Build and return a call to FN, using ARGS. This function performs
4977 no overload resolution, conversion, or other high-level
4978 operations. */
4980 tree
4981 build_cxx_call (tree fn, tree args)
4983 tree fndecl;
4985 fn = build_call (fn, args);
4987 /* If this call might throw an exception, note that fact. */
4988 fndecl = get_callee_fndecl (fn);
4989 if ((!fndecl || !TREE_NOTHROW (fndecl))
4990 && at_function_scope_p ()
4991 && cfun)
4992 cp_function_chain->can_throw = 1;
4994 /* Some built-in function calls will be evaluated at compile-time in
4995 fold (). */
4996 fn = fold_if_not_in_template (fn);
4998 if (VOID_TYPE_P (TREE_TYPE (fn)))
4999 return fn;
5001 fn = require_complete_type (fn);
5002 if (fn == error_mark_node)
5003 return error_mark_node;
5005 if (IS_AGGR_TYPE (TREE_TYPE (fn)))
5006 fn = build_cplus_new (TREE_TYPE (fn), fn);
5007 return convert_from_reference (fn);
5010 static GTY(()) tree java_iface_lookup_fn;
5012 /* Make an expression which yields the address of the Java interface
5013 method FN. This is achieved by generating a call to libjava's
5014 _Jv_LookupInterfaceMethodIdx(). */
5016 static tree
5017 build_java_interface_fn_ref (tree fn, tree instance)
5019 tree lookup_args, lookup_fn, method, idx;
5020 tree klass_ref, iface, iface_ref;
5021 int i;
5023 if (!java_iface_lookup_fn)
5025 tree endlink = build_void_list_node ();
5026 tree t = tree_cons (NULL_TREE, ptr_type_node,
5027 tree_cons (NULL_TREE, ptr_type_node,
5028 tree_cons (NULL_TREE, java_int_type_node,
5029 endlink)));
5030 java_iface_lookup_fn
5031 = builtin_function ("_Jv_LookupInterfaceMethodIdx",
5032 build_function_type (ptr_type_node, t),
5033 0, NOT_BUILT_IN, NULL, NULL_TREE);
5036 /* Look up the pointer to the runtime java.lang.Class object for `instance'.
5037 This is the first entry in the vtable. */
5038 klass_ref = build_vtbl_ref (build_indirect_ref (instance, 0),
5039 integer_zero_node);
5041 /* Get the java.lang.Class pointer for the interface being called. */
5042 iface = DECL_CONTEXT (fn);
5043 iface_ref = lookup_field (iface, get_identifier ("class$"), 0, false);
5044 if (!iface_ref || TREE_CODE (iface_ref) != VAR_DECL
5045 || DECL_CONTEXT (iface_ref) != iface)
5047 error ("could not find class$ field in java interface type %qT",
5048 iface);
5049 return error_mark_node;
5051 iface_ref = build_address (iface_ref);
5052 iface_ref = convert (build_pointer_type (iface), iface_ref);
5054 /* Determine the itable index of FN. */
5055 i = 1;
5056 for (method = TYPE_METHODS (iface); method; method = TREE_CHAIN (method))
5058 if (!DECL_VIRTUAL_P (method))
5059 continue;
5060 if (fn == method)
5061 break;
5062 i++;
5064 idx = build_int_cst (NULL_TREE, i);
5066 lookup_args = tree_cons (NULL_TREE, klass_ref,
5067 tree_cons (NULL_TREE, iface_ref,
5068 build_tree_list (NULL_TREE, idx)));
5069 lookup_fn = build1 (ADDR_EXPR,
5070 build_pointer_type (TREE_TYPE (java_iface_lookup_fn)),
5071 java_iface_lookup_fn);
5072 return build3 (CALL_EXPR, ptr_type_node, lookup_fn, lookup_args, NULL_TREE);
5075 /* Returns the value to use for the in-charge parameter when making a
5076 call to a function with the indicated NAME.
5078 FIXME:Can't we find a neater way to do this mapping? */
5080 tree
5081 in_charge_arg_for_name (tree name)
5083 if (name == base_ctor_identifier
5084 || name == base_dtor_identifier)
5085 return integer_zero_node;
5086 else if (name == complete_ctor_identifier)
5087 return integer_one_node;
5088 else if (name == complete_dtor_identifier)
5089 return integer_two_node;
5090 else if (name == deleting_dtor_identifier)
5091 return integer_three_node;
5093 /* This function should only be called with one of the names listed
5094 above. */
5095 gcc_unreachable ();
5096 return NULL_TREE;
5099 /* Build a call to a constructor, destructor, or an assignment
5100 operator for INSTANCE, an expression with class type. NAME
5101 indicates the special member function to call; ARGS are the
5102 arguments. BINFO indicates the base of INSTANCE that is to be
5103 passed as the `this' parameter to the member function called.
5105 FLAGS are the LOOKUP_* flags to use when processing the call.
5107 If NAME indicates a complete object constructor, INSTANCE may be
5108 NULL_TREE. In this case, the caller will call build_cplus_new to
5109 store the newly constructed object into a VAR_DECL. */
5111 tree
5112 build_special_member_call (tree instance, tree name, tree args,
5113 tree binfo, int flags)
5115 tree fns;
5116 /* The type of the subobject to be constructed or destroyed. */
5117 tree class_type;
5119 gcc_assert (name == complete_ctor_identifier
5120 || name == base_ctor_identifier
5121 || name == complete_dtor_identifier
5122 || name == base_dtor_identifier
5123 || name == deleting_dtor_identifier
5124 || name == ansi_assopname (NOP_EXPR));
5125 if (TYPE_P (binfo))
5127 /* Resolve the name. */
5128 if (!complete_type_or_else (binfo, NULL_TREE))
5129 return error_mark_node;
5131 binfo = TYPE_BINFO (binfo);
5134 gcc_assert (binfo != NULL_TREE);
5136 class_type = BINFO_TYPE (binfo);
5138 /* Handle the special case where INSTANCE is NULL_TREE. */
5139 if (name == complete_ctor_identifier && !instance)
5141 instance = build_int_cst (build_pointer_type (class_type), 0);
5142 instance = build1 (INDIRECT_REF, class_type, instance);
5144 else
5146 if (name == complete_dtor_identifier
5147 || name == base_dtor_identifier
5148 || name == deleting_dtor_identifier)
5149 gcc_assert (args == NULL_TREE);
5151 /* Convert to the base class, if necessary. */
5152 if (!same_type_ignoring_top_level_qualifiers_p
5153 (TREE_TYPE (instance), BINFO_TYPE (binfo)))
5155 if (name != ansi_assopname (NOP_EXPR))
5156 /* For constructors and destructors, either the base is
5157 non-virtual, or it is virtual but we are doing the
5158 conversion from a constructor or destructor for the
5159 complete object. In either case, we can convert
5160 statically. */
5161 instance = convert_to_base_statically (instance, binfo);
5162 else
5163 /* However, for assignment operators, we must convert
5164 dynamically if the base is virtual. */
5165 instance = build_base_path (PLUS_EXPR, instance,
5166 binfo, /*nonnull=*/1);
5170 gcc_assert (instance != NULL_TREE);
5172 fns = lookup_fnfields (binfo, name, 1);
5174 /* When making a call to a constructor or destructor for a subobject
5175 that uses virtual base classes, pass down a pointer to a VTT for
5176 the subobject. */
5177 if ((name == base_ctor_identifier
5178 || name == base_dtor_identifier)
5179 && CLASSTYPE_VBASECLASSES (class_type))
5181 tree vtt;
5182 tree sub_vtt;
5184 /* If the current function is a complete object constructor
5185 or destructor, then we fetch the VTT directly.
5186 Otherwise, we look it up using the VTT we were given. */
5187 vtt = TREE_CHAIN (CLASSTYPE_VTABLES (current_class_type));
5188 vtt = decay_conversion (vtt);
5189 vtt = build3 (COND_EXPR, TREE_TYPE (vtt),
5190 build2 (EQ_EXPR, boolean_type_node,
5191 current_in_charge_parm, integer_zero_node),
5192 current_vtt_parm,
5193 vtt);
5194 gcc_assert (BINFO_SUBVTT_INDEX (binfo));
5195 sub_vtt = build2 (PLUS_EXPR, TREE_TYPE (vtt), vtt,
5196 BINFO_SUBVTT_INDEX (binfo));
5198 args = tree_cons (NULL_TREE, sub_vtt, args);
5201 return build_new_method_call (instance, fns, args,
5202 TYPE_BINFO (BINFO_TYPE (binfo)),
5203 flags, /*fn=*/NULL);
5206 /* Return the NAME, as a C string. The NAME indicates a function that
5207 is a member of TYPE. *FREE_P is set to true if the caller must
5208 free the memory returned.
5210 Rather than go through all of this, we should simply set the names
5211 of constructors and destructors appropriately, and dispense with
5212 ctor_identifier, dtor_identifier, etc. */
5214 static char *
5215 name_as_c_string (tree name, tree type, bool *free_p)
5217 char *pretty_name;
5219 /* Assume that we will not allocate memory. */
5220 *free_p = false;
5221 /* Constructors and destructors are special. */
5222 if (IDENTIFIER_CTOR_OR_DTOR_P (name))
5224 pretty_name
5225 = (char *) IDENTIFIER_POINTER (constructor_name (type));
5226 /* For a destructor, add the '~'. */
5227 if (name == complete_dtor_identifier
5228 || name == base_dtor_identifier
5229 || name == deleting_dtor_identifier)
5231 pretty_name = concat ("~", pretty_name, NULL);
5232 /* Remember that we need to free the memory allocated. */
5233 *free_p = true;
5236 else if (IDENTIFIER_TYPENAME_P (name))
5238 pretty_name = concat ("operator ",
5239 type_as_string (TREE_TYPE (name),
5240 TFF_PLAIN_IDENTIFIER),
5241 NULL);
5242 /* Remember that we need to free the memory allocated. */
5243 *free_p = true;
5245 else
5246 pretty_name = (char *) IDENTIFIER_POINTER (name);
5248 return pretty_name;
5251 /* Build a call to "INSTANCE.FN (ARGS)". If FN_P is non-NULL, it will
5252 be set, upon return, to the function called. */
5254 tree
5255 build_new_method_call (tree instance, tree fns, tree args,
5256 tree conversion_path, int flags,
5257 tree *fn_p)
5259 struct z_candidate *candidates = 0, *cand;
5260 tree explicit_targs = NULL_TREE;
5261 tree basetype = NULL_TREE;
5262 tree access_binfo;
5263 tree optype;
5264 tree mem_args = NULL_TREE, instance_ptr;
5265 tree name;
5266 tree user_args;
5267 tree call;
5268 tree fn;
5269 tree class_type;
5270 int template_only = 0;
5271 bool any_viable_p;
5272 tree orig_instance;
5273 tree orig_fns;
5274 tree orig_args;
5275 void *p;
5277 gcc_assert (instance != NULL_TREE);
5279 /* We don't know what function we're going to call, yet. */
5280 if (fn_p)
5281 *fn_p = NULL_TREE;
5283 if (error_operand_p (instance)
5284 || error_operand_p (fns)
5285 || args == error_mark_node)
5286 return error_mark_node;
5288 if (!BASELINK_P (fns))
5290 error ("call to non-function %qD", fns);
5291 return error_mark_node;
5294 orig_instance = instance;
5295 orig_fns = fns;
5296 orig_args = args;
5298 /* Dismantle the baselink to collect all the information we need. */
5299 if (!conversion_path)
5300 conversion_path = BASELINK_BINFO (fns);
5301 access_binfo = BASELINK_ACCESS_BINFO (fns);
5302 optype = BASELINK_OPTYPE (fns);
5303 fns = BASELINK_FUNCTIONS (fns);
5304 if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
5306 explicit_targs = TREE_OPERAND (fns, 1);
5307 fns = TREE_OPERAND (fns, 0);
5308 template_only = 1;
5310 gcc_assert (TREE_CODE (fns) == FUNCTION_DECL
5311 || TREE_CODE (fns) == TEMPLATE_DECL
5312 || TREE_CODE (fns) == OVERLOAD);
5313 fn = get_first_fn (fns);
5314 name = DECL_NAME (fn);
5316 basetype = TYPE_MAIN_VARIANT (TREE_TYPE (instance));
5317 gcc_assert (CLASS_TYPE_P (basetype));
5319 if (processing_template_decl)
5321 instance = build_non_dependent_expr (instance);
5322 args = build_non_dependent_args (orig_args);
5325 /* The USER_ARGS are the arguments we will display to users if an
5326 error occurs. The USER_ARGS should not include any
5327 compiler-generated arguments. The "this" pointer hasn't been
5328 added yet. However, we must remove the VTT pointer if this is a
5329 call to a base-class constructor or destructor. */
5330 user_args = args;
5331 if (IDENTIFIER_CTOR_OR_DTOR_P (name))
5333 /* Callers should explicitly indicate whether they want to construct
5334 the complete object or just the part without virtual bases. */
5335 gcc_assert (name != ctor_identifier);
5336 /* Similarly for destructors. */
5337 gcc_assert (name != dtor_identifier);
5338 /* Remove the VTT pointer, if present. */
5339 if ((name == base_ctor_identifier || name == base_dtor_identifier)
5340 && CLASSTYPE_VBASECLASSES (basetype))
5341 user_args = TREE_CHAIN (user_args);
5344 /* Process the argument list. */
5345 args = resolve_args (args);
5346 if (args == error_mark_node)
5347 return error_mark_node;
5349 instance_ptr = build_this (instance);
5351 /* It's OK to call destructors on cv-qualified objects. Therefore,
5352 convert the INSTANCE_PTR to the unqualified type, if necessary. */
5353 if (DECL_DESTRUCTOR_P (fn))
5355 tree type = build_pointer_type (basetype);
5356 if (!same_type_p (type, TREE_TYPE (instance_ptr)))
5357 instance_ptr = build_nop (type, instance_ptr);
5358 name = complete_dtor_identifier;
5361 class_type = (conversion_path ? BINFO_TYPE (conversion_path) : NULL_TREE);
5362 mem_args = tree_cons (NULL_TREE, instance_ptr, args);
5364 /* Get the high-water mark for the CONVERSION_OBSTACK. */
5365 p = conversion_obstack_alloc (0);
5367 for (fn = fns; fn; fn = OVL_NEXT (fn))
5369 tree t = OVL_CURRENT (fn);
5370 tree this_arglist;
5372 /* We can end up here for copy-init of same or base class. */
5373 if ((flags & LOOKUP_ONLYCONVERTING)
5374 && DECL_NONCONVERTING_P (t))
5375 continue;
5377 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (t))
5378 this_arglist = mem_args;
5379 else
5380 this_arglist = args;
5382 if (TREE_CODE (t) == TEMPLATE_DECL)
5383 /* A member template. */
5384 add_template_candidate (&candidates, t,
5385 class_type,
5386 explicit_targs,
5387 this_arglist, optype,
5388 access_binfo,
5389 conversion_path,
5390 flags,
5391 DEDUCE_CALL);
5392 else if (! template_only)
5393 add_function_candidate (&candidates, t,
5394 class_type,
5395 this_arglist,
5396 access_binfo,
5397 conversion_path,
5398 flags);
5401 candidates = splice_viable (candidates, pedantic, &any_viable_p);
5402 if (!any_viable_p)
5404 if (!COMPLETE_TYPE_P (basetype))
5405 cxx_incomplete_type_error (instance_ptr, basetype);
5406 else
5408 char *pretty_name;
5409 bool free_p;
5411 pretty_name = name_as_c_string (name, basetype, &free_p);
5412 error ("no matching function for call to %<%T::%s(%A)%#V%>",
5413 basetype, pretty_name, user_args,
5414 TREE_TYPE (TREE_TYPE (instance_ptr)));
5415 if (free_p)
5416 free (pretty_name);
5418 print_z_candidates (candidates);
5419 call = error_mark_node;
5421 else
5423 cand = tourney (candidates);
5424 if (cand == 0)
5426 char *pretty_name;
5427 bool free_p;
5429 pretty_name = name_as_c_string (name, basetype, &free_p);
5430 error ("call of overloaded %<%s(%A)%> is ambiguous", pretty_name,
5431 user_args);
5432 print_z_candidates (candidates);
5433 if (free_p)
5434 free (pretty_name);
5435 call = error_mark_node;
5437 else
5439 fn = cand->fn;
5441 if (!(flags & LOOKUP_NONVIRTUAL)
5442 && DECL_PURE_VIRTUAL_P (fn)
5443 && instance == current_class_ref
5444 && (DECL_CONSTRUCTOR_P (current_function_decl)
5445 || DECL_DESTRUCTOR_P (current_function_decl)))
5446 /* This is not an error, it is runtime undefined
5447 behavior. */
5448 warning (0, (DECL_CONSTRUCTOR_P (current_function_decl) ?
5449 "abstract virtual %q#D called from constructor"
5450 : "abstract virtual %q#D called from destructor"),
5451 fn);
5453 if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE
5454 && is_dummy_object (instance_ptr))
5456 error ("cannot call member function %qD without object",
5457 fn);
5458 call = error_mark_node;
5460 else
5462 if (DECL_VINDEX (fn) && ! (flags & LOOKUP_NONVIRTUAL)
5463 && resolves_to_fixed_type_p (instance, 0))
5464 flags |= LOOKUP_NONVIRTUAL;
5465 /* Now we know what function is being called. */
5466 if (fn_p)
5467 *fn_p = fn;
5468 /* Build the actual CALL_EXPR. */
5469 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 (fn)) != METHOD_TYPE
5474 && !is_dummy_object (instance_ptr)
5475 && TREE_SIDE_EFFECTS (instance))
5476 call = build2 (COMPOUND_EXPR, TREE_TYPE (call),
5477 instance, call);
5482 if (processing_template_decl && call != error_mark_node)
5483 call = (build_min_non_dep
5484 (CALL_EXPR, call,
5485 build_min_nt (COMPONENT_REF, orig_instance, orig_fns, NULL_TREE),
5486 orig_args, NULL_TREE));
5488 /* Free all the conversions we allocated. */
5489 obstack_free (&conversion_obstack, p);
5491 return call;
5494 /* Returns true iff standard conversion sequence ICS1 is a proper
5495 subsequence of ICS2. */
5497 static bool
5498 is_subseq (conversion *ics1, conversion *ics2)
5500 /* We can assume that a conversion of the same code
5501 between the same types indicates a subsequence since we only get
5502 here if the types we are converting from are the same. */
5504 while (ics1->kind == ck_rvalue
5505 || ics1->kind == ck_lvalue)
5506 ics1 = ics1->u.next;
5508 while (1)
5510 while (ics2->kind == ck_rvalue
5511 || ics2->kind == ck_lvalue)
5512 ics2 = ics2->u.next;
5514 if (ics2->kind == ck_user
5515 || ics2->kind == ck_ambig
5516 || ics2->kind == ck_identity)
5517 /* At this point, ICS1 cannot be a proper subsequence of
5518 ICS2. We can get a USER_CONV when we are comparing the
5519 second standard conversion sequence of two user conversion
5520 sequences. */
5521 return false;
5523 ics2 = ics2->u.next;
5525 if (ics2->kind == ics1->kind
5526 && same_type_p (ics2->type, ics1->type)
5527 && same_type_p (ics2->u.next->type,
5528 ics1->u.next->type))
5529 return true;
5533 /* Returns nonzero iff DERIVED is derived from BASE. The inputs may
5534 be any _TYPE nodes. */
5536 bool
5537 is_properly_derived_from (tree derived, tree base)
5539 if (!IS_AGGR_TYPE_CODE (TREE_CODE (derived))
5540 || !IS_AGGR_TYPE_CODE (TREE_CODE (base)))
5541 return false;
5543 /* We only allow proper derivation here. The DERIVED_FROM_P macro
5544 considers every class derived from itself. */
5545 return (!same_type_ignoring_top_level_qualifiers_p (derived, base)
5546 && DERIVED_FROM_P (base, derived));
5549 /* We build the ICS for an implicit object parameter as a pointer
5550 conversion sequence. However, such a sequence should be compared
5551 as if it were a reference conversion sequence. If ICS is the
5552 implicit conversion sequence for an implicit object parameter,
5553 modify it accordingly. */
5555 static void
5556 maybe_handle_implicit_object (conversion **ics)
5558 if ((*ics)->this_p)
5560 /* [over.match.funcs]
5562 For non-static member functions, the type of the
5563 implicit object parameter is "reference to cv X"
5564 where X is the class of which the function is a
5565 member and cv is the cv-qualification on the member
5566 function declaration. */
5567 conversion *t = *ics;
5568 tree reference_type;
5570 /* The `this' parameter is a pointer to a class type. Make the
5571 implicit conversion talk about a reference to that same class
5572 type. */
5573 reference_type = TREE_TYPE (t->type);
5574 reference_type = build_reference_type (reference_type);
5576 if (t->kind == ck_qual)
5577 t = t->u.next;
5578 if (t->kind == ck_ptr)
5579 t = t->u.next;
5580 t = build_identity_conv (TREE_TYPE (t->type), NULL_TREE);
5581 t = direct_reference_binding (reference_type, t);
5582 *ics = t;
5586 /* If *ICS is a REF_BIND set *ICS to the remainder of the conversion,
5587 and return the type to which the reference refers. Otherwise,
5588 leave *ICS unchanged and return NULL_TREE. */
5590 static tree
5591 maybe_handle_ref_bind (conversion **ics)
5593 if ((*ics)->kind == ck_ref_bind)
5595 conversion *old_ics = *ics;
5596 tree type = TREE_TYPE (old_ics->type);
5597 *ics = old_ics->u.next;
5598 (*ics)->user_conv_p = old_ics->user_conv_p;
5599 (*ics)->bad_p = old_ics->bad_p;
5600 return type;
5603 return NULL_TREE;
5606 /* Compare two implicit conversion sequences according to the rules set out in
5607 [over.ics.rank]. Return values:
5609 1: ics1 is better than ics2
5610 -1: ics2 is better than ics1
5611 0: ics1 and ics2 are indistinguishable */
5613 static int
5614 compare_ics (conversion *ics1, conversion *ics2)
5616 tree from_type1;
5617 tree from_type2;
5618 tree to_type1;
5619 tree to_type2;
5620 tree deref_from_type1 = NULL_TREE;
5621 tree deref_from_type2 = NULL_TREE;
5622 tree deref_to_type1 = NULL_TREE;
5623 tree deref_to_type2 = NULL_TREE;
5624 conversion_rank rank1, rank2;
5626 /* REF_BINDING is nonzero if the result of the conversion sequence
5627 is a reference type. In that case TARGET_TYPE is the
5628 type referred to by the reference. */
5629 tree target_type1;
5630 tree target_type2;
5632 /* Handle implicit object parameters. */
5633 maybe_handle_implicit_object (&ics1);
5634 maybe_handle_implicit_object (&ics2);
5636 /* Handle reference parameters. */
5637 target_type1 = maybe_handle_ref_bind (&ics1);
5638 target_type2 = maybe_handle_ref_bind (&ics2);
5640 /* [over.ics.rank]
5642 When comparing the basic forms of implicit conversion sequences (as
5643 defined in _over.best.ics_)
5645 --a standard conversion sequence (_over.ics.scs_) is a better
5646 conversion sequence than a user-defined conversion sequence
5647 or an ellipsis conversion sequence, and
5649 --a user-defined conversion sequence (_over.ics.user_) is a
5650 better conversion sequence than an ellipsis conversion sequence
5651 (_over.ics.ellipsis_). */
5652 rank1 = CONVERSION_RANK (ics1);
5653 rank2 = CONVERSION_RANK (ics2);
5655 if (rank1 > rank2)
5656 return -1;
5657 else if (rank1 < rank2)
5658 return 1;
5660 if (rank1 == cr_bad)
5662 /* XXX Isn't this an extension? */
5663 /* Both ICS are bad. We try to make a decision based on what
5664 would have happened if they'd been good. */
5665 if (ics1->user_conv_p > ics2->user_conv_p
5666 || ics1->rank > ics2->rank)
5667 return -1;
5668 else if (ics1->user_conv_p < ics2->user_conv_p
5669 || ics1->rank < ics2->rank)
5670 return 1;
5672 /* We couldn't make up our minds; try to figure it out below. */
5675 if (ics1->ellipsis_p)
5676 /* Both conversions are ellipsis conversions. */
5677 return 0;
5679 /* User-defined conversion sequence U1 is a better conversion sequence
5680 than another user-defined conversion sequence U2 if they contain the
5681 same user-defined conversion operator or constructor and if the sec-
5682 ond standard conversion sequence of U1 is better than the second
5683 standard conversion sequence of U2. */
5685 if (ics1->user_conv_p)
5687 conversion *t1;
5688 conversion *t2;
5690 for (t1 = ics1; t1->kind != ck_user; t1 = t1->u.next)
5691 if (t1->kind == ck_ambig)
5692 return 0;
5693 for (t2 = ics2; t2->kind != ck_user; t2 = t2->u.next)
5694 if (t2->kind == ck_ambig)
5695 return 0;
5697 if (t1->cand->fn != t2->cand->fn)
5698 return 0;
5700 /* We can just fall through here, after setting up
5701 FROM_TYPE1 and FROM_TYPE2. */
5702 from_type1 = t1->type;
5703 from_type2 = t2->type;
5705 else
5707 conversion *t1;
5708 conversion *t2;
5710 /* We're dealing with two standard conversion sequences.
5712 [over.ics.rank]
5714 Standard conversion sequence S1 is a better conversion
5715 sequence than standard conversion sequence S2 if
5717 --S1 is a proper subsequence of S2 (comparing the conversion
5718 sequences in the canonical form defined by _over.ics.scs_,
5719 excluding any Lvalue Transformation; the identity
5720 conversion sequence is considered to be a subsequence of
5721 any non-identity conversion sequence */
5723 t1 = ics1;
5724 while (t1->kind != ck_identity)
5725 t1 = t1->u.next;
5726 from_type1 = t1->type;
5728 t2 = ics2;
5729 while (t2->kind != ck_identity)
5730 t2 = t2->u.next;
5731 from_type2 = t2->type;
5734 if (same_type_p (from_type1, from_type2))
5736 if (is_subseq (ics1, ics2))
5737 return 1;
5738 if (is_subseq (ics2, ics1))
5739 return -1;
5741 /* Otherwise, one sequence cannot be a subsequence of the other; they
5742 don't start with the same type. This can happen when comparing the
5743 second standard conversion sequence in two user-defined conversion
5744 sequences. */
5746 /* [over.ics.rank]
5748 Or, if not that,
5750 --the rank of S1 is better than the rank of S2 (by the rules
5751 defined below):
5753 Standard conversion sequences are ordered by their ranks: an Exact
5754 Match is a better conversion than a Promotion, which is a better
5755 conversion than a Conversion.
5757 Two conversion sequences with the same rank are indistinguishable
5758 unless one of the following rules applies:
5760 --A conversion that is not a conversion of a pointer, or pointer
5761 to member, to bool is better than another conversion that is such
5762 a conversion.
5764 The ICS_STD_RANK automatically handles the pointer-to-bool rule,
5765 so that we do not have to check it explicitly. */
5766 if (ics1->rank < ics2->rank)
5767 return 1;
5768 else if (ics2->rank < ics1->rank)
5769 return -1;
5771 to_type1 = ics1->type;
5772 to_type2 = ics2->type;
5774 if (TYPE_PTR_P (from_type1)
5775 && TYPE_PTR_P (from_type2)
5776 && TYPE_PTR_P (to_type1)
5777 && TYPE_PTR_P (to_type2))
5779 deref_from_type1 = TREE_TYPE (from_type1);
5780 deref_from_type2 = TREE_TYPE (from_type2);
5781 deref_to_type1 = TREE_TYPE (to_type1);
5782 deref_to_type2 = TREE_TYPE (to_type2);
5784 /* The rules for pointers to members A::* are just like the rules
5785 for pointers A*, except opposite: if B is derived from A then
5786 A::* converts to B::*, not vice versa. For that reason, we
5787 switch the from_ and to_ variables here. */
5788 else if ((TYPE_PTRMEM_P (from_type1) && TYPE_PTRMEM_P (from_type2)
5789 && TYPE_PTRMEM_P (to_type1) && TYPE_PTRMEM_P (to_type2))
5790 || (TYPE_PTRMEMFUNC_P (from_type1)
5791 && TYPE_PTRMEMFUNC_P (from_type2)
5792 && TYPE_PTRMEMFUNC_P (to_type1)
5793 && TYPE_PTRMEMFUNC_P (to_type2)))
5795 deref_to_type1 = TYPE_PTRMEM_CLASS_TYPE (from_type1);
5796 deref_to_type2 = TYPE_PTRMEM_CLASS_TYPE (from_type2);
5797 deref_from_type1 = TYPE_PTRMEM_CLASS_TYPE (to_type1);
5798 deref_from_type2 = TYPE_PTRMEM_CLASS_TYPE (to_type2);
5801 if (deref_from_type1 != NULL_TREE
5802 && IS_AGGR_TYPE_CODE (TREE_CODE (deref_from_type1))
5803 && IS_AGGR_TYPE_CODE (TREE_CODE (deref_from_type2)))
5805 /* This was one of the pointer or pointer-like conversions.
5807 [over.ics.rank]
5809 --If class B is derived directly or indirectly from class A,
5810 conversion of B* to A* is better than conversion of B* to
5811 void*, and conversion of A* to void* is better than
5812 conversion of B* to void*. */
5813 if (TREE_CODE (deref_to_type1) == VOID_TYPE
5814 && TREE_CODE (deref_to_type2) == VOID_TYPE)
5816 if (is_properly_derived_from (deref_from_type1,
5817 deref_from_type2))
5818 return -1;
5819 else if (is_properly_derived_from (deref_from_type2,
5820 deref_from_type1))
5821 return 1;
5823 else if (TREE_CODE (deref_to_type1) == VOID_TYPE
5824 || TREE_CODE (deref_to_type2) == VOID_TYPE)
5826 if (same_type_p (deref_from_type1, deref_from_type2))
5828 if (TREE_CODE (deref_to_type2) == VOID_TYPE)
5830 if (is_properly_derived_from (deref_from_type1,
5831 deref_to_type1))
5832 return 1;
5834 /* We know that DEREF_TO_TYPE1 is `void' here. */
5835 else if (is_properly_derived_from (deref_from_type1,
5836 deref_to_type2))
5837 return -1;
5840 else if (IS_AGGR_TYPE_CODE (TREE_CODE (deref_to_type1))
5841 && IS_AGGR_TYPE_CODE (TREE_CODE (deref_to_type2)))
5843 /* [over.ics.rank]
5845 --If class B is derived directly or indirectly from class A
5846 and class C is derived directly or indirectly from B,
5848 --conversion of C* to B* is better than conversion of C* to
5851 --conversion of B* to A* is better than conversion of C* to
5852 A* */
5853 if (same_type_p (deref_from_type1, deref_from_type2))
5855 if (is_properly_derived_from (deref_to_type1,
5856 deref_to_type2))
5857 return 1;
5858 else if (is_properly_derived_from (deref_to_type2,
5859 deref_to_type1))
5860 return -1;
5862 else if (same_type_p (deref_to_type1, deref_to_type2))
5864 if (is_properly_derived_from (deref_from_type2,
5865 deref_from_type1))
5866 return 1;
5867 else if (is_properly_derived_from (deref_from_type1,
5868 deref_from_type2))
5869 return -1;
5873 else if (CLASS_TYPE_P (non_reference (from_type1))
5874 && same_type_p (from_type1, from_type2))
5876 tree from = non_reference (from_type1);
5878 /* [over.ics.rank]
5880 --binding of an expression of type C to a reference of type
5881 B& is better than binding an expression of type C to a
5882 reference of type A&
5884 --conversion of C to B is better than conversion of C to A, */
5885 if (is_properly_derived_from (from, to_type1)
5886 && is_properly_derived_from (from, to_type2))
5888 if (is_properly_derived_from (to_type1, to_type2))
5889 return 1;
5890 else if (is_properly_derived_from (to_type2, to_type1))
5891 return -1;
5894 else if (CLASS_TYPE_P (non_reference (to_type1))
5895 && same_type_p (to_type1, to_type2))
5897 tree to = non_reference (to_type1);
5899 /* [over.ics.rank]
5901 --binding of an expression of type B to a reference of type
5902 A& is better than binding an expression of type C to a
5903 reference of type A&,
5905 --conversion of B to A is better than conversion of C to A */
5906 if (is_properly_derived_from (from_type1, to)
5907 && is_properly_derived_from (from_type2, to))
5909 if (is_properly_derived_from (from_type2, from_type1))
5910 return 1;
5911 else if (is_properly_derived_from (from_type1, from_type2))
5912 return -1;
5916 /* [over.ics.rank]
5918 --S1 and S2 differ only in their qualification conversion and yield
5919 similar types T1 and T2 (_conv.qual_), respectively, and the cv-
5920 qualification signature of type T1 is a proper subset of the cv-
5921 qualification signature of type T2 */
5922 if (ics1->kind == ck_qual
5923 && ics2->kind == ck_qual
5924 && same_type_p (from_type1, from_type2))
5925 return comp_cv_qual_signature (to_type1, to_type2);
5927 /* [over.ics.rank]
5929 --S1 and S2 are reference bindings (_dcl.init.ref_), and the
5930 types to which the references refer are the same type except for
5931 top-level cv-qualifiers, and the type to which the reference
5932 initialized by S2 refers is more cv-qualified than the type to
5933 which the reference initialized by S1 refers */
5935 if (target_type1 && target_type2
5936 && same_type_ignoring_top_level_qualifiers_p (to_type1, to_type2))
5937 return comp_cv_qualification (target_type2, target_type1);
5939 /* Neither conversion sequence is better than the other. */
5940 return 0;
5943 /* The source type for this standard conversion sequence. */
5945 static tree
5946 source_type (conversion *t)
5948 for (;; t = t->u.next)
5950 if (t->kind == ck_user
5951 || t->kind == ck_ambig
5952 || t->kind == ck_identity)
5953 return t->type;
5955 gcc_unreachable ();
5958 /* Note a warning about preferring WINNER to LOSER. We do this by storing
5959 a pointer to LOSER and re-running joust to produce the warning if WINNER
5960 is actually used. */
5962 static void
5963 add_warning (struct z_candidate *winner, struct z_candidate *loser)
5965 candidate_warning *cw = (candidate_warning *)
5966 conversion_obstack_alloc (sizeof (candidate_warning));
5967 cw->loser = loser;
5968 cw->next = winner->warnings;
5969 winner->warnings = cw;
5972 /* Compare two candidates for overloading as described in
5973 [over.match.best]. Return values:
5975 1: cand1 is better than cand2
5976 -1: cand2 is better than cand1
5977 0: cand1 and cand2 are indistinguishable */
5979 static int
5980 joust (struct z_candidate *cand1, struct z_candidate *cand2, bool warn)
5982 int winner = 0;
5983 int off1 = 0, off2 = 0;
5984 size_t i;
5985 size_t len;
5987 /* Candidates that involve bad conversions are always worse than those
5988 that don't. */
5989 if (cand1->viable > cand2->viable)
5990 return 1;
5991 if (cand1->viable < cand2->viable)
5992 return -1;
5994 /* If we have two pseudo-candidates for conversions to the same type,
5995 or two candidates for the same function, arbitrarily pick one. */
5996 if (cand1->fn == cand2->fn
5997 && (IS_TYPE_OR_DECL_P (cand1->fn)))
5998 return 1;
6000 /* a viable function F1
6001 is defined to be a better function than another viable function F2 if
6002 for all arguments i, ICSi(F1) is not a worse conversion sequence than
6003 ICSi(F2), and then */
6005 /* for some argument j, ICSj(F1) is a better conversion sequence than
6006 ICSj(F2) */
6008 /* For comparing static and non-static member functions, we ignore
6009 the implicit object parameter of the non-static function. The
6010 standard says to pretend that the static function has an object
6011 parm, but that won't work with operator overloading. */
6012 len = cand1->num_convs;
6013 if (len != cand2->num_convs)
6015 int static_1 = DECL_STATIC_FUNCTION_P (cand1->fn);
6016 int static_2 = DECL_STATIC_FUNCTION_P (cand2->fn);
6018 gcc_assert (static_1 != static_2);
6020 if (static_1)
6021 off2 = 1;
6022 else
6024 off1 = 1;
6025 --len;
6029 for (i = 0; i < len; ++i)
6031 conversion *t1 = cand1->convs[i + off1];
6032 conversion *t2 = cand2->convs[i + off2];
6033 int comp = compare_ics (t1, t2);
6035 if (comp != 0)
6037 if (warn_sign_promo
6038 && (CONVERSION_RANK (t1) + CONVERSION_RANK (t2)
6039 == cr_std + cr_promotion)
6040 && t1->kind == ck_std
6041 && t2->kind == ck_std
6042 && TREE_CODE (t1->type) == INTEGER_TYPE
6043 && TREE_CODE (t2->type) == INTEGER_TYPE
6044 && (TYPE_PRECISION (t1->type)
6045 == TYPE_PRECISION (t2->type))
6046 && (TYPE_UNSIGNED (t1->u.next->type)
6047 || (TREE_CODE (t1->u.next->type)
6048 == ENUMERAL_TYPE)))
6050 tree type = t1->u.next->type;
6051 tree type1, type2;
6052 struct z_candidate *w, *l;
6053 if (comp > 0)
6054 type1 = t1->type, type2 = t2->type,
6055 w = cand1, l = cand2;
6056 else
6057 type1 = t2->type, type2 = t1->type,
6058 w = cand2, l = cand1;
6060 if (warn)
6062 warning (OPT_Wsign_promo, "passing %qT chooses %qT over %qT",
6063 type, type1, type2);
6064 warning (OPT_Wsign_promo, " in call to %qD", w->fn);
6066 else
6067 add_warning (w, l);
6070 if (winner && comp != winner)
6072 winner = 0;
6073 goto tweak;
6075 winner = comp;
6079 /* warn about confusing overload resolution for user-defined conversions,
6080 either between a constructor and a conversion op, or between two
6081 conversion ops. */
6082 if (winner && warn_conversion && cand1->second_conv
6083 && (!DECL_CONSTRUCTOR_P (cand1->fn) || !DECL_CONSTRUCTOR_P (cand2->fn))
6084 && winner != compare_ics (cand1->second_conv, cand2->second_conv))
6086 struct z_candidate *w, *l;
6087 bool give_warning = false;
6089 if (winner == 1)
6090 w = cand1, l = cand2;
6091 else
6092 w = cand2, l = cand1;
6094 /* We don't want to complain about `X::operator T1 ()'
6095 beating `X::operator T2 () const', when T2 is a no less
6096 cv-qualified version of T1. */
6097 if (DECL_CONTEXT (w->fn) == DECL_CONTEXT (l->fn)
6098 && !DECL_CONSTRUCTOR_P (w->fn) && !DECL_CONSTRUCTOR_P (l->fn))
6100 tree t = TREE_TYPE (TREE_TYPE (l->fn));
6101 tree f = TREE_TYPE (TREE_TYPE (w->fn));
6103 if (TREE_CODE (t) == TREE_CODE (f) && POINTER_TYPE_P (t))
6105 t = TREE_TYPE (t);
6106 f = TREE_TYPE (f);
6108 if (!comp_ptr_ttypes (t, f))
6109 give_warning = true;
6111 else
6112 give_warning = true;
6114 if (!give_warning)
6115 /*NOP*/;
6116 else if (warn)
6118 tree source = source_type (w->convs[0]);
6119 if (! DECL_CONSTRUCTOR_P (w->fn))
6120 source = TREE_TYPE (source);
6121 warning (OPT_Wconversion, "choosing %qD over %qD", w->fn, l->fn);
6122 warning (OPT_Wconversion, " for conversion from %qT to %qT",
6123 source, w->second_conv->type);
6124 inform (" because conversion sequence for the argument is better");
6126 else
6127 add_warning (w, l);
6130 if (winner)
6131 return winner;
6133 /* or, if not that,
6134 F1 is a non-template function and F2 is a template function
6135 specialization. */
6137 if (!cand1->template_decl && cand2->template_decl)
6138 return 1;
6139 else if (cand1->template_decl && !cand2->template_decl)
6140 return -1;
6142 /* or, if not that,
6143 F1 and F2 are template functions and the function template for F1 is
6144 more specialized than the template for F2 according to the partial
6145 ordering rules. */
6147 if (cand1->template_decl && cand2->template_decl)
6149 winner = more_specialized_fn
6150 (TI_TEMPLATE (cand1->template_decl),
6151 TI_TEMPLATE (cand2->template_decl),
6152 /* [temp.func.order]: The presence of unused ellipsis and default
6153 arguments has no effect on the partial ordering of function
6154 templates. add_function_candidate() will not have
6155 counted the "this" argument for constructors. */
6156 cand1->num_convs + DECL_CONSTRUCTOR_P (cand1->fn));
6157 if (winner)
6158 return winner;
6161 /* or, if not that,
6162 the context is an initialization by user-defined conversion (see
6163 _dcl.init_ and _over.match.user_) and the standard conversion
6164 sequence from the return type of F1 to the destination type (i.e.,
6165 the type of the entity being initialized) is a better conversion
6166 sequence than the standard conversion sequence from the return type
6167 of F2 to the destination type. */
6169 if (cand1->second_conv)
6171 winner = compare_ics (cand1->second_conv, cand2->second_conv);
6172 if (winner)
6173 return winner;
6176 /* Check whether we can discard a builtin candidate, either because we
6177 have two identical ones or matching builtin and non-builtin candidates.
6179 (Pedantically in the latter case the builtin which matched the user
6180 function should not be added to the overload set, but we spot it here.
6182 [over.match.oper]
6183 ... the builtin candidates include ...
6184 - do not have the same parameter type list as any non-template
6185 non-member candidate. */
6187 if (TREE_CODE (cand1->fn) == IDENTIFIER_NODE
6188 || TREE_CODE (cand2->fn) == IDENTIFIER_NODE)
6190 for (i = 0; i < len; ++i)
6191 if (!same_type_p (cand1->convs[i]->type,
6192 cand2->convs[i]->type))
6193 break;
6194 if (i == cand1->num_convs)
6196 if (cand1->fn == cand2->fn)
6197 /* Two built-in candidates; arbitrarily pick one. */
6198 return 1;
6199 else if (TREE_CODE (cand1->fn) == IDENTIFIER_NODE)
6200 /* cand1 is built-in; prefer cand2. */
6201 return -1;
6202 else
6203 /* cand2 is built-in; prefer cand1. */
6204 return 1;
6208 /* If the two functions are the same (this can happen with declarations
6209 in multiple scopes and arg-dependent lookup), arbitrarily choose one. */
6210 if (DECL_P (cand1->fn) && DECL_P (cand2->fn)
6211 && equal_functions (cand1->fn, cand2->fn))
6212 return 1;
6214 tweak:
6216 /* Extension: If the worst conversion for one candidate is worse than the
6217 worst conversion for the other, take the first. */
6218 if (!pedantic)
6220 conversion_rank rank1 = cr_identity, rank2 = cr_identity;
6221 struct z_candidate *w = 0, *l = 0;
6223 for (i = 0; i < len; ++i)
6225 if (CONVERSION_RANK (cand1->convs[i+off1]) > rank1)
6226 rank1 = CONVERSION_RANK (cand1->convs[i+off1]);
6227 if (CONVERSION_RANK (cand2->convs[i + off2]) > rank2)
6228 rank2 = CONVERSION_RANK (cand2->convs[i + off2]);
6230 if (rank1 < rank2)
6231 winner = 1, w = cand1, l = cand2;
6232 if (rank1 > rank2)
6233 winner = -1, w = cand2, l = cand1;
6234 if (winner)
6236 if (warn)
6238 pedwarn ("\
6239 ISO C++ says that these are ambiguous, even \
6240 though the worst conversion for the first is better than \
6241 the worst conversion for the second:");
6242 print_z_candidate (_("candidate 1:"), w);
6243 print_z_candidate (_("candidate 2:"), l);
6245 else
6246 add_warning (w, l);
6247 return winner;
6251 gcc_assert (!winner);
6252 return 0;
6255 /* Given a list of candidates for overloading, find the best one, if any.
6256 This algorithm has a worst case of O(2n) (winner is last), and a best
6257 case of O(n/2) (totally ambiguous); much better than a sorting
6258 algorithm. */
6260 static struct z_candidate *
6261 tourney (struct z_candidate *candidates)
6263 struct z_candidate *champ = candidates, *challenger;
6264 int fate;
6265 int champ_compared_to_predecessor = 0;
6267 /* Walk through the list once, comparing each current champ to the next
6268 candidate, knocking out a candidate or two with each comparison. */
6270 for (challenger = champ->next; challenger; )
6272 fate = joust (champ, challenger, 0);
6273 if (fate == 1)
6274 challenger = challenger->next;
6275 else
6277 if (fate == 0)
6279 champ = challenger->next;
6280 if (champ == 0)
6281 return NULL;
6282 champ_compared_to_predecessor = 0;
6284 else
6286 champ = challenger;
6287 champ_compared_to_predecessor = 1;
6290 challenger = champ->next;
6294 /* Make sure the champ is better than all the candidates it hasn't yet
6295 been compared to. */
6297 for (challenger = candidates;
6298 challenger != champ
6299 && !(champ_compared_to_predecessor && challenger->next == champ);
6300 challenger = challenger->next)
6302 fate = joust (champ, challenger, 0);
6303 if (fate != 1)
6304 return NULL;
6307 return champ;
6310 /* Returns nonzero if things of type FROM can be converted to TO. */
6312 bool
6313 can_convert (tree to, tree from)
6315 return can_convert_arg (to, from, NULL_TREE, LOOKUP_NORMAL);
6318 /* Returns nonzero if ARG (of type FROM) can be converted to TO. */
6320 bool
6321 can_convert_arg (tree to, tree from, tree arg, int flags)
6323 conversion *t;
6324 void *p;
6325 bool ok_p;
6327 /* Get the high-water mark for the CONVERSION_OBSTACK. */
6328 p = conversion_obstack_alloc (0);
6330 t = implicit_conversion (to, from, arg, /*c_cast_p=*/false,
6331 flags);
6332 ok_p = (t && !t->bad_p);
6334 /* Free all the conversions we allocated. */
6335 obstack_free (&conversion_obstack, p);
6337 return ok_p;
6340 /* Like can_convert_arg, but allows dubious conversions as well. */
6342 bool
6343 can_convert_arg_bad (tree to, tree from, tree arg)
6345 conversion *t;
6346 void *p;
6348 /* Get the high-water mark for the CONVERSION_OBSTACK. */
6349 p = conversion_obstack_alloc (0);
6350 /* Try to perform the conversion. */
6351 t = implicit_conversion (to, from, arg, /*c_cast_p=*/false,
6352 LOOKUP_NORMAL);
6353 /* Free all the conversions we allocated. */
6354 obstack_free (&conversion_obstack, p);
6356 return t != NULL;
6359 /* Convert EXPR to TYPE. Return the converted expression.
6361 Note that we allow bad conversions here because by the time we get to
6362 this point we are committed to doing the conversion. If we end up
6363 doing a bad conversion, convert_like will complain. */
6365 tree
6366 perform_implicit_conversion (tree type, tree expr)
6368 conversion *conv;
6369 void *p;
6371 if (error_operand_p (expr))
6372 return error_mark_node;
6374 /* Get the high-water mark for the CONVERSION_OBSTACK. */
6375 p = conversion_obstack_alloc (0);
6377 conv = implicit_conversion (type, TREE_TYPE (expr), expr,
6378 /*c_cast_p=*/false,
6379 LOOKUP_NORMAL);
6380 if (!conv)
6382 error ("could not convert %qE to %qT", expr, type);
6383 expr = error_mark_node;
6385 else
6386 expr = convert_like (conv, expr);
6388 /* Free all the conversions we allocated. */
6389 obstack_free (&conversion_obstack, p);
6391 return expr;
6394 /* Convert EXPR to TYPE (as a direct-initialization) if that is
6395 permitted. If the conversion is valid, the converted expression is
6396 returned. Otherwise, NULL_TREE is returned, except in the case
6397 that TYPE is a class type; in that case, an error is issued. If
6398 C_CAST_P is true, then this direction initialization is taking
6399 place as part of a static_cast being attempted as part of a C-style
6400 cast. */
6402 tree
6403 perform_direct_initialization_if_possible (tree type,
6404 tree expr,
6405 bool c_cast_p)
6407 conversion *conv;
6408 void *p;
6410 if (type == error_mark_node || error_operand_p (expr))
6411 return error_mark_node;
6412 /* [dcl.init]
6414 If the destination type is a (possibly cv-qualified) class type:
6416 -- If the initialization is direct-initialization ...,
6417 constructors are considered. ... If no constructor applies, or
6418 the overload resolution is ambiguous, the initialization is
6419 ill-formed. */
6420 if (CLASS_TYPE_P (type))
6422 expr = build_special_member_call (NULL_TREE, complete_ctor_identifier,
6423 build_tree_list (NULL_TREE, expr),
6424 type, LOOKUP_NORMAL);
6425 return build_cplus_new (type, expr);
6428 /* Get the high-water mark for the CONVERSION_OBSTACK. */
6429 p = conversion_obstack_alloc (0);
6431 conv = implicit_conversion (type, TREE_TYPE (expr), expr,
6432 c_cast_p,
6433 LOOKUP_NORMAL);
6434 if (!conv || conv->bad_p)
6435 expr = NULL_TREE;
6436 else
6437 expr = convert_like_real (conv, expr, NULL_TREE, 0, 0,
6438 /*issue_conversion_warnings=*/false,
6439 c_cast_p);
6441 /* Free all the conversions we allocated. */
6442 obstack_free (&conversion_obstack, p);
6444 return expr;
6447 /* DECL is a VAR_DECL whose type is a REFERENCE_TYPE. The reference
6448 is being bound to a temporary. Create and return a new VAR_DECL
6449 with the indicated TYPE; this variable will store the value to
6450 which the reference is bound. */
6452 tree
6453 make_temporary_var_for_ref_to_temp (tree decl, tree type)
6455 tree var;
6457 /* Create the variable. */
6458 var = create_temporary_var (type);
6460 /* Register the variable. */
6461 if (TREE_STATIC (decl))
6463 /* Namespace-scope or local static; give it a mangled name. */
6464 tree name;
6466 TREE_STATIC (var) = 1;
6467 name = mangle_ref_init_variable (decl);
6468 DECL_NAME (var) = name;
6469 SET_DECL_ASSEMBLER_NAME (var, name);
6470 var = pushdecl_top_level (var);
6472 else
6473 /* Create a new cleanup level if necessary. */
6474 maybe_push_cleanup_level (type);
6476 return var;
6479 /* Convert EXPR to the indicated reference TYPE, in a way suitable for
6480 initializing a variable of that TYPE. If DECL is non-NULL, it is
6481 the VAR_DECL being initialized with the EXPR. (In that case, the
6482 type of DECL will be TYPE.) If DECL is non-NULL, then CLEANUP must
6483 also be non-NULL, and with *CLEANUP initialized to NULL. Upon
6484 return, if *CLEANUP is no longer NULL, it will be an expression
6485 that should be pushed as a cleanup after the returned expression
6486 is used to initialize DECL.
6488 Return the converted expression. */
6490 tree
6491 initialize_reference (tree type, tree expr, tree decl, tree *cleanup)
6493 conversion *conv;
6494 void *p;
6496 if (type == error_mark_node || error_operand_p (expr))
6497 return error_mark_node;
6499 /* Get the high-water mark for the CONVERSION_OBSTACK. */
6500 p = conversion_obstack_alloc (0);
6502 conv = reference_binding (type, TREE_TYPE (expr), expr, LOOKUP_NORMAL);
6503 if (!conv || conv->bad_p)
6505 if (!(TYPE_QUALS (TREE_TYPE (type)) & TYPE_QUAL_CONST)
6506 && !real_lvalue_p (expr))
6507 error ("invalid initialization of non-const reference of "
6508 "type %qT from a temporary of type %qT",
6509 type, TREE_TYPE (expr));
6510 else
6511 error ("invalid initialization of reference of type "
6512 "%qT from expression of type %qT", type,
6513 TREE_TYPE (expr));
6514 return error_mark_node;
6517 /* If DECL is non-NULL, then this special rule applies:
6519 [class.temporary]
6521 The temporary to which the reference is bound or the temporary
6522 that is the complete object to which the reference is bound
6523 persists for the lifetime of the reference.
6525 The temporaries created during the evaluation of the expression
6526 initializing the reference, except the temporary to which the
6527 reference is bound, are destroyed at the end of the
6528 full-expression in which they are created.
6530 In that case, we store the converted expression into a new
6531 VAR_DECL in a new scope.
6533 However, we want to be careful not to create temporaries when
6534 they are not required. For example, given:
6536 struct B {};
6537 struct D : public B {};
6538 D f();
6539 const B& b = f();
6541 there is no need to copy the return value from "f"; we can just
6542 extend its lifetime. Similarly, given:
6544 struct S {};
6545 struct T { operator S(); };
6546 T t;
6547 const S& s = t;
6549 we can extend the lifetime of the return value of the conversion
6550 operator. */
6551 gcc_assert (conv->kind == ck_ref_bind);
6552 if (decl)
6554 tree var;
6555 tree base_conv_type;
6557 /* Skip over the REF_BIND. */
6558 conv = conv->u.next;
6559 /* If the next conversion is a BASE_CONV, skip that too -- but
6560 remember that the conversion was required. */
6561 if (conv->kind == ck_base)
6563 if (conv->check_copy_constructor_p)
6564 check_constructor_callable (TREE_TYPE (expr), expr);
6565 base_conv_type = conv->type;
6566 conv = conv->u.next;
6568 else
6569 base_conv_type = NULL_TREE;
6570 /* Perform the remainder of the conversion. */
6571 expr = convert_like_real (conv, expr,
6572 /*fn=*/NULL_TREE, /*argnum=*/0,
6573 /*inner=*/-1,
6574 /*issue_conversion_warnings=*/true,
6575 /*c_cast_p=*/false);
6576 if (error_operand_p (expr))
6577 expr = error_mark_node;
6578 else
6580 if (!real_lvalue_p (expr))
6582 tree init;
6583 tree type;
6585 /* Create the temporary variable. */
6586 type = TREE_TYPE (expr);
6587 var = make_temporary_var_for_ref_to_temp (decl, type);
6588 layout_decl (var, 0);
6589 /* If the rvalue is the result of a function call it will be
6590 a TARGET_EXPR. If it is some other construct (such as a
6591 member access expression where the underlying object is
6592 itself the result of a function call), turn it into a
6593 TARGET_EXPR here. It is important that EXPR be a
6594 TARGET_EXPR below since otherwise the INIT_EXPR will
6595 attempt to make a bitwise copy of EXPR to initialize
6596 VAR. */
6597 if (TREE_CODE (expr) != TARGET_EXPR)
6598 expr = get_target_expr (expr);
6599 /* Create the INIT_EXPR that will initialize the temporary
6600 variable. */
6601 init = build2 (INIT_EXPR, type, var, expr);
6602 if (at_function_scope_p ())
6604 add_decl_expr (var);
6605 *cleanup = cxx_maybe_build_cleanup (var);
6607 /* We must be careful to destroy the temporary only
6608 after its initialization has taken place. If the
6609 initialization throws an exception, then the
6610 destructor should not be run. We cannot simply
6611 transform INIT into something like:
6613 (INIT, ({ CLEANUP_STMT; }))
6615 because emit_local_var always treats the
6616 initializer as a full-expression. Thus, the
6617 destructor would run too early; it would run at the
6618 end of initializing the reference variable, rather
6619 than at the end of the block enclosing the
6620 reference variable.
6622 The solution is to pass back a cleanup expression
6623 which the caller is responsible for attaching to
6624 the statement tree. */
6626 else
6628 rest_of_decl_compilation (var, /*toplev=*/1, at_eof);
6629 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
6630 static_aggregates = tree_cons (NULL_TREE, var,
6631 static_aggregates);
6633 /* Use its address to initialize the reference variable. */
6634 expr = build_address (var);
6635 if (base_conv_type)
6636 expr = convert_to_base (expr,
6637 build_pointer_type (base_conv_type),
6638 /*check_access=*/true,
6639 /*nonnull=*/true);
6640 expr = build2 (COMPOUND_EXPR, TREE_TYPE (expr), init, expr);
6642 else
6643 /* Take the address of EXPR. */
6644 expr = build_unary_op (ADDR_EXPR, expr, 0);
6645 /* If a BASE_CONV was required, perform it now. */
6646 if (base_conv_type)
6647 expr = (perform_implicit_conversion
6648 (build_pointer_type (base_conv_type), expr));
6649 expr = build_nop (type, expr);
6652 else
6653 /* Perform the conversion. */
6654 expr = convert_like (conv, expr);
6656 /* Free all the conversions we allocated. */
6657 obstack_free (&conversion_obstack, p);
6659 return expr;
6662 #include "gt-cp-call.h"