Merge from mainline
[official-gcc.git] / gcc / cp / call.c
blob268573d5bc019bce835dc109c3ef21ed367a5487
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)) && integer_zerop (t)))
431 return true;
432 return false;
435 /* Returns nonzero if PARMLIST consists of only default parms and/or
436 ellipsis. */
438 bool
439 sufficient_parms_p (tree parmlist)
441 for (; parmlist && parmlist != void_list_node;
442 parmlist = TREE_CHAIN (parmlist))
443 if (!TREE_PURPOSE (parmlist))
444 return false;
445 return true;
448 /* Allocate N bytes of memory from the conversion obstack. The memory
449 is zeroed before being returned. */
451 static void *
452 conversion_obstack_alloc (size_t n)
454 void *p;
455 if (!conversion_obstack_initialized)
457 gcc_obstack_init (&conversion_obstack);
458 conversion_obstack_initialized = true;
460 p = obstack_alloc (&conversion_obstack, n);
461 memset (p, 0, n);
462 return p;
465 /* Dynamically allocate a conversion. */
467 static conversion *
468 alloc_conversion (conversion_kind kind)
470 conversion *c;
471 c = (conversion *) conversion_obstack_alloc (sizeof (conversion));
472 c->kind = kind;
473 return c;
476 #ifdef ENABLE_CHECKING
478 /* Make sure that all memory on the conversion obstack has been
479 freed. */
481 void
482 validate_conversion_obstack (void)
484 if (conversion_obstack_initialized)
485 gcc_assert ((obstack_next_free (&conversion_obstack)
486 == obstack_base (&conversion_obstack)));
489 #endif /* ENABLE_CHECKING */
491 /* Dynamically allocate an array of N conversions. */
493 static conversion **
494 alloc_conversions (size_t n)
496 return (conversion **) conversion_obstack_alloc (n * sizeof (conversion *));
499 static conversion *
500 build_conv (conversion_kind code, tree type, conversion *from)
502 conversion *t;
503 conversion_rank rank = CONVERSION_RANK (from);
505 /* We can't use buildl1 here because CODE could be USER_CONV, which
506 takes two arguments. In that case, the caller is responsible for
507 filling in the second argument. */
508 t = alloc_conversion (code);
509 t->type = type;
510 t->u.next = from;
512 switch (code)
514 case ck_ptr:
515 case ck_pmem:
516 case ck_base:
517 case ck_std:
518 if (rank < cr_std)
519 rank = cr_std;
520 break;
522 case ck_qual:
523 if (rank < cr_exact)
524 rank = cr_exact;
525 break;
527 default:
528 break;
530 t->rank = rank;
531 t->user_conv_p = (code == ck_user || from->user_conv_p);
532 t->bad_p = from->bad_p;
533 t->base_p = false;
534 return t;
537 /* Build a representation of the identity conversion from EXPR to
538 itself. The TYPE should match the type of EXPR, if EXPR is non-NULL. */
540 static conversion *
541 build_identity_conv (tree type, tree expr)
543 conversion *c;
545 c = alloc_conversion (ck_identity);
546 c->type = type;
547 c->u.expr = expr;
549 return c;
552 /* Converting from EXPR to TYPE was ambiguous in the sense that there
553 were multiple user-defined conversions to accomplish the job.
554 Build a conversion that indicates that ambiguity. */
556 static conversion *
557 build_ambiguous_conv (tree type, tree expr)
559 conversion *c;
561 c = alloc_conversion (ck_ambig);
562 c->type = type;
563 c->u.expr = expr;
565 return c;
568 tree
569 strip_top_quals (tree t)
571 if (TREE_CODE (t) == ARRAY_TYPE)
572 return t;
573 return cp_build_qualified_type (t, 0);
576 /* Returns the standard conversion path (see [conv]) from type FROM to type
577 TO, if any. For proper handling of null pointer constants, you must
578 also pass the expression EXPR to convert from. If C_CAST_P is true,
579 this conversion is coming from a C-style cast. */
581 static conversion *
582 standard_conversion (tree to, tree from, tree expr, bool c_cast_p,
583 int flags)
585 enum tree_code fcode, tcode;
586 conversion *conv;
587 bool fromref = false;
589 to = non_reference (to);
590 if (TREE_CODE (from) == REFERENCE_TYPE)
592 fromref = true;
593 from = TREE_TYPE (from);
595 to = strip_top_quals (to);
596 from = strip_top_quals (from);
598 if ((TYPE_PTRFN_P (to) || TYPE_PTRMEMFUNC_P (to))
599 && expr && type_unknown_p (expr))
601 expr = instantiate_type (to, expr, tf_conv);
602 if (expr == error_mark_node)
603 return NULL;
604 from = TREE_TYPE (expr);
607 fcode = TREE_CODE (from);
608 tcode = TREE_CODE (to);
610 conv = build_identity_conv (from, expr);
611 if (fcode == FUNCTION_TYPE)
613 from = build_pointer_type (from);
614 fcode = TREE_CODE (from);
615 conv = build_conv (ck_lvalue, from, conv);
617 else if (fcode == ARRAY_TYPE)
619 from = build_pointer_type (TREE_TYPE (from));
620 fcode = TREE_CODE (from);
621 conv = build_conv (ck_lvalue, from, conv);
623 else if (fromref || (expr && lvalue_p (expr)))
624 conv = build_conv (ck_rvalue, from, conv);
626 /* Allow conversion between `__complex__' data types. */
627 if (tcode == COMPLEX_TYPE && fcode == COMPLEX_TYPE)
629 /* The standard conversion sequence to convert FROM to TO is
630 the standard conversion sequence to perform componentwise
631 conversion. */
632 conversion *part_conv = standard_conversion
633 (TREE_TYPE (to), TREE_TYPE (from), NULL_TREE, c_cast_p, flags);
635 if (part_conv)
637 conv = build_conv (part_conv->kind, to, conv);
638 conv->rank = part_conv->rank;
640 else
641 conv = NULL;
643 return conv;
646 if (same_type_p (from, to))
647 return conv;
649 if ((tcode == POINTER_TYPE || TYPE_PTR_TO_MEMBER_P (to))
650 && expr && null_ptr_cst_p (expr))
651 conv = build_conv (ck_std, to, conv);
652 else if ((tcode == INTEGER_TYPE && fcode == POINTER_TYPE)
653 || (tcode == POINTER_TYPE && fcode == INTEGER_TYPE))
655 /* For backwards brain damage compatibility, allow interconversion of
656 pointers and integers with a pedwarn. */
657 conv = build_conv (ck_std, to, conv);
658 conv->bad_p = true;
660 else if (tcode == ENUMERAL_TYPE && fcode == INTEGER_TYPE)
662 /* For backwards brain damage compatibility, allow interconversion of
663 enums and integers with a pedwarn. */
664 conv = build_conv (ck_std, to, conv);
665 conv->bad_p = true;
667 else if ((tcode == POINTER_TYPE && fcode == POINTER_TYPE)
668 || (TYPE_PTRMEM_P (to) && TYPE_PTRMEM_P (from)))
670 tree to_pointee;
671 tree from_pointee;
673 if (tcode == POINTER_TYPE
674 && same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (from),
675 TREE_TYPE (to)))
677 else if (VOID_TYPE_P (TREE_TYPE (to))
678 && !TYPE_PTRMEM_P (from)
679 && TREE_CODE (TREE_TYPE (from)) != FUNCTION_TYPE)
681 from = build_pointer_type
682 (cp_build_qualified_type (void_type_node,
683 cp_type_quals (TREE_TYPE (from))));
684 conv = build_conv (ck_ptr, from, conv);
686 else if (TYPE_PTRMEM_P (from))
688 tree fbase = TYPE_PTRMEM_CLASS_TYPE (from);
689 tree tbase = TYPE_PTRMEM_CLASS_TYPE (to);
691 if (DERIVED_FROM_P (fbase, tbase)
692 && (same_type_ignoring_top_level_qualifiers_p
693 (TYPE_PTRMEM_POINTED_TO_TYPE (from),
694 TYPE_PTRMEM_POINTED_TO_TYPE (to))))
696 from = build_ptrmem_type (tbase,
697 TYPE_PTRMEM_POINTED_TO_TYPE (from));
698 conv = build_conv (ck_pmem, from, conv);
700 else if (!same_type_p (fbase, tbase))
701 return NULL;
703 else if (IS_AGGR_TYPE (TREE_TYPE (from))
704 && IS_AGGR_TYPE (TREE_TYPE (to))
705 /* [conv.ptr]
707 An rvalue of type "pointer to cv D," where D is a
708 class type, can be converted to an rvalue of type
709 "pointer to cv B," where B is a base class (clause
710 _class.derived_) of D. If B is an inaccessible
711 (clause _class.access_) or ambiguous
712 (_class.member.lookup_) base class of D, a program
713 that necessitates this conversion is ill-formed.
714 Therefore, we use DERIVED_FROM_P, and do not check
715 access or uniqueness. */
716 && DERIVED_FROM_P (TREE_TYPE (to), TREE_TYPE (from)))
718 from =
719 cp_build_qualified_type (TREE_TYPE (to),
720 cp_type_quals (TREE_TYPE (from)));
721 from = build_pointer_type (from);
722 conv = build_conv (ck_ptr, from, conv);
723 conv->base_p = true;
726 if (tcode == POINTER_TYPE)
728 to_pointee = TREE_TYPE (to);
729 from_pointee = TREE_TYPE (from);
731 else
733 to_pointee = TYPE_PTRMEM_POINTED_TO_TYPE (to);
734 from_pointee = TYPE_PTRMEM_POINTED_TO_TYPE (from);
737 if (same_type_p (from, to))
738 /* OK */;
739 else if (c_cast_p && comp_ptr_ttypes_const (to, from))
740 /* In a C-style cast, we ignore CV-qualification because we
741 are allowed to perform a static_cast followed by a
742 const_cast. */
743 conv = build_conv (ck_qual, to, conv);
744 else if (!c_cast_p && comp_ptr_ttypes (to_pointee, from_pointee))
745 conv = build_conv (ck_qual, to, conv);
746 else if (expr && string_conv_p (to, expr, 0))
747 /* converting from string constant to char *. */
748 conv = build_conv (ck_qual, to, conv);
749 else if (ptr_reasonably_similar (to_pointee, from_pointee))
751 conv = build_conv (ck_ptr, to, conv);
752 conv->bad_p = true;
754 else
755 return NULL;
757 from = to;
759 else if (TYPE_PTRMEMFUNC_P (to) && TYPE_PTRMEMFUNC_P (from))
761 tree fromfn = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (from));
762 tree tofn = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (to));
763 tree fbase = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (fromfn)));
764 tree tbase = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (tofn)));
766 if (!DERIVED_FROM_P (fbase, tbase)
767 || !same_type_p (TREE_TYPE (fromfn), TREE_TYPE (tofn))
768 || !compparms (TREE_CHAIN (TYPE_ARG_TYPES (fromfn)),
769 TREE_CHAIN (TYPE_ARG_TYPES (tofn)))
770 || cp_type_quals (fbase) != cp_type_quals (tbase))
771 return NULL;
773 from = cp_build_qualified_type (tbase, cp_type_quals (fbase));
774 from = build_method_type_directly (from,
775 TREE_TYPE (fromfn),
776 TREE_CHAIN (TYPE_ARG_TYPES (fromfn)));
777 from = build_ptrmemfunc_type (build_pointer_type (from));
778 conv = build_conv (ck_pmem, from, conv);
779 conv->base_p = true;
781 else if (tcode == BOOLEAN_TYPE)
783 /* [conv.bool]
785 An rvalue of arithmetic, enumeration, pointer, or pointer to
786 member type can be converted to an rvalue of type bool. */
787 if (ARITHMETIC_TYPE_P (from)
788 || fcode == ENUMERAL_TYPE
789 || fcode == POINTER_TYPE
790 || TYPE_PTR_TO_MEMBER_P (from))
792 conv = build_conv (ck_std, to, conv);
793 if (fcode == POINTER_TYPE
794 || TYPE_PTRMEM_P (from)
795 || (TYPE_PTRMEMFUNC_P (from)
796 && conv->rank < cr_pbool))
797 conv->rank = cr_pbool;
798 return conv;
801 return NULL;
803 /* We don't check for ENUMERAL_TYPE here because there are no standard
804 conversions to enum type. */
805 else if (tcode == INTEGER_TYPE || tcode == BOOLEAN_TYPE
806 || tcode == REAL_TYPE)
808 if (! (INTEGRAL_CODE_P (fcode) || fcode == REAL_TYPE))
809 return NULL;
810 conv = build_conv (ck_std, to, conv);
812 /* Give this a better rank if it's a promotion. */
813 if (same_type_p (to, type_promotes_to (from))
814 && conv->u.next->rank <= cr_promotion)
815 conv->rank = cr_promotion;
817 else if (fcode == VECTOR_TYPE && tcode == VECTOR_TYPE
818 && vector_types_convertible_p (from, to))
819 return build_conv (ck_std, to, conv);
820 else if (!(flags & LOOKUP_CONSTRUCTOR_CALLABLE)
821 && IS_AGGR_TYPE (to) && IS_AGGR_TYPE (from)
822 && is_properly_derived_from (from, to))
824 if (conv->kind == ck_rvalue)
825 conv = conv->u.next;
826 conv = build_conv (ck_base, to, conv);
827 /* The derived-to-base conversion indicates the initialization
828 of a parameter with base type from an object of a derived
829 type. A temporary object is created to hold the result of
830 the conversion. */
831 conv->need_temporary_p = true;
833 else
834 return NULL;
836 return conv;
839 /* Returns nonzero if T1 is reference-related to T2. */
841 static bool
842 reference_related_p (tree t1, tree t2)
844 t1 = TYPE_MAIN_VARIANT (t1);
845 t2 = TYPE_MAIN_VARIANT (t2);
847 /* [dcl.init.ref]
849 Given types "cv1 T1" and "cv2 T2," "cv1 T1" is reference-related
850 to "cv2 T2" if T1 is the same type as T2, or T1 is a base class
851 of T2. */
852 return (same_type_p (t1, t2)
853 || (CLASS_TYPE_P (t1) && CLASS_TYPE_P (t2)
854 && DERIVED_FROM_P (t1, t2)));
857 /* Returns nonzero if T1 is reference-compatible with T2. */
859 static bool
860 reference_compatible_p (tree t1, tree t2)
862 /* [dcl.init.ref]
864 "cv1 T1" is reference compatible with "cv2 T2" if T1 is
865 reference-related to T2 and cv1 is the same cv-qualification as,
866 or greater cv-qualification than, cv2. */
867 return (reference_related_p (t1, t2)
868 && at_least_as_qualified_p (t1, t2));
871 /* Determine whether or not the EXPR (of class type S) can be
872 converted to T as in [over.match.ref]. */
874 static conversion *
875 convert_class_to_reference (tree t, tree s, tree expr)
877 tree conversions;
878 tree arglist;
879 conversion *conv;
880 tree reference_type;
881 struct z_candidate *candidates;
882 struct z_candidate *cand;
883 bool any_viable_p;
885 conversions = lookup_conversions (s);
886 if (!conversions)
887 return NULL;
889 /* [over.match.ref]
891 Assuming that "cv1 T" is the underlying type of the reference
892 being initialized, and "cv S" is the type of the initializer
893 expression, with S a class type, the candidate functions are
894 selected as follows:
896 --The conversion functions of S and its base classes are
897 considered. Those that are not hidden within S and yield type
898 "reference to cv2 T2", where "cv1 T" is reference-compatible
899 (_dcl.init.ref_) with "cv2 T2", are candidate functions.
901 The argument list has one argument, which is the initializer
902 expression. */
904 candidates = 0;
906 /* Conceptually, we should take the address of EXPR and put it in
907 the argument list. Unfortunately, however, that can result in
908 error messages, which we should not issue now because we are just
909 trying to find a conversion operator. Therefore, we use NULL,
910 cast to the appropriate type. */
911 arglist = build_int_cst (build_pointer_type (s), 0);
912 arglist = build_tree_list (NULL_TREE, arglist);
914 reference_type = build_reference_type (t);
916 while (conversions)
918 tree fns = TREE_VALUE (conversions);
920 for (; fns; fns = OVL_NEXT (fns))
922 tree f = OVL_CURRENT (fns);
923 tree t2 = TREE_TYPE (TREE_TYPE (f));
925 cand = NULL;
927 /* If this is a template function, try to get an exact
928 match. */
929 if (TREE_CODE (f) == TEMPLATE_DECL)
931 cand = add_template_candidate (&candidates,
932 f, s,
933 NULL_TREE,
934 arglist,
935 reference_type,
936 TYPE_BINFO (s),
937 TREE_PURPOSE (conversions),
938 LOOKUP_NORMAL,
939 DEDUCE_CONV);
941 if (cand)
943 /* Now, see if the conversion function really returns
944 an lvalue of the appropriate type. From the
945 point of view of unification, simply returning an
946 rvalue of the right type is good enough. */
947 f = cand->fn;
948 t2 = TREE_TYPE (TREE_TYPE (f));
949 if (TREE_CODE (t2) != REFERENCE_TYPE
950 || !reference_compatible_p (t, TREE_TYPE (t2)))
952 candidates = candidates->next;
953 cand = NULL;
957 else if (TREE_CODE (t2) == REFERENCE_TYPE
958 && reference_compatible_p (t, TREE_TYPE (t2)))
959 cand = add_function_candidate (&candidates, f, s, arglist,
960 TYPE_BINFO (s),
961 TREE_PURPOSE (conversions),
962 LOOKUP_NORMAL);
964 if (cand)
966 conversion *identity_conv;
967 /* Build a standard conversion sequence indicating the
968 binding from the reference type returned by the
969 function to the desired REFERENCE_TYPE. */
970 identity_conv
971 = build_identity_conv (TREE_TYPE (TREE_TYPE
972 (TREE_TYPE (cand->fn))),
973 NULL_TREE);
974 cand->second_conv
975 = (direct_reference_binding
976 (reference_type, identity_conv));
977 cand->second_conv->bad_p |= cand->convs[0]->bad_p;
980 conversions = TREE_CHAIN (conversions);
983 candidates = splice_viable (candidates, pedantic, &any_viable_p);
984 /* If none of the conversion functions worked out, let our caller
985 know. */
986 if (!any_viable_p)
987 return NULL;
989 cand = tourney (candidates);
990 if (!cand)
991 return NULL;
993 /* Now that we know that this is the function we're going to use fix
994 the dummy first argument. */
995 cand->args = tree_cons (NULL_TREE,
996 build_this (expr),
997 TREE_CHAIN (cand->args));
999 /* Build a user-defined conversion sequence representing the
1000 conversion. */
1001 conv = build_conv (ck_user,
1002 TREE_TYPE (TREE_TYPE (cand->fn)),
1003 build_identity_conv (TREE_TYPE (expr), expr));
1004 conv->cand = cand;
1006 /* Merge it with the standard conversion sequence from the
1007 conversion function's return type to the desired type. */
1008 cand->second_conv = merge_conversion_sequences (conv, cand->second_conv);
1010 if (cand->viable == -1)
1011 conv->bad_p = true;
1013 return cand->second_conv;
1016 /* A reference of the indicated TYPE is being bound directly to the
1017 expression represented by the implicit conversion sequence CONV.
1018 Return a conversion sequence for this binding. */
1020 static conversion *
1021 direct_reference_binding (tree type, conversion *conv)
1023 tree t;
1025 gcc_assert (TREE_CODE (type) == REFERENCE_TYPE);
1026 gcc_assert (TREE_CODE (conv->type) != REFERENCE_TYPE);
1028 t = TREE_TYPE (type);
1030 /* [over.ics.rank]
1032 When a parameter of reference type binds directly
1033 (_dcl.init.ref_) to an argument expression, the implicit
1034 conversion sequence is the identity conversion, unless the
1035 argument expression has a type that is a derived class of the
1036 parameter type, in which case the implicit conversion sequence is
1037 a derived-to-base Conversion.
1039 If the parameter binds directly to the result of applying a
1040 conversion function to the argument expression, the implicit
1041 conversion sequence is a user-defined conversion sequence
1042 (_over.ics.user_), with the second standard conversion sequence
1043 either an identity conversion or, if the conversion function
1044 returns an entity of a type that is a derived class of the
1045 parameter type, a derived-to-base conversion. */
1046 if (!same_type_ignoring_top_level_qualifiers_p (t, conv->type))
1048 /* Represent the derived-to-base conversion. */
1049 conv = build_conv (ck_base, t, conv);
1050 /* We will actually be binding to the base-class subobject in
1051 the derived class, so we mark this conversion appropriately.
1052 That way, convert_like knows not to generate a temporary. */
1053 conv->need_temporary_p = false;
1055 return build_conv (ck_ref_bind, type, conv);
1058 /* Returns the conversion path from type FROM to reference type TO for
1059 purposes of reference binding. For lvalue binding, either pass a
1060 reference type to FROM or an lvalue expression to EXPR. If the
1061 reference will be bound to a temporary, NEED_TEMPORARY_P is set for
1062 the conversion returned. */
1064 static conversion *
1065 reference_binding (tree rto, tree rfrom, tree expr, int flags)
1067 conversion *conv = NULL;
1068 tree to = TREE_TYPE (rto);
1069 tree from = rfrom;
1070 bool related_p;
1071 bool compatible_p;
1072 cp_lvalue_kind lvalue_p = clk_none;
1074 if (TREE_CODE (to) == FUNCTION_TYPE && expr && type_unknown_p (expr))
1076 expr = instantiate_type (to, expr, tf_none);
1077 if (expr == error_mark_node)
1078 return NULL;
1079 from = TREE_TYPE (expr);
1082 if (TREE_CODE (from) == REFERENCE_TYPE)
1084 /* Anything with reference type is an lvalue. */
1085 lvalue_p = clk_ordinary;
1086 from = TREE_TYPE (from);
1088 else if (expr)
1089 lvalue_p = real_lvalue_p (expr);
1091 /* Figure out whether or not the types are reference-related and
1092 reference compatible. We have do do this after stripping
1093 references from FROM. */
1094 related_p = reference_related_p (to, from);
1095 compatible_p = reference_compatible_p (to, from);
1097 if (lvalue_p && compatible_p)
1099 /* [dcl.init.ref]
1101 If the initializer expression
1103 -- is an lvalue (but not an lvalue for a bit-field), and "cv1 T1"
1104 is reference-compatible with "cv2 T2,"
1106 the reference is bound directly to the initializer expression
1107 lvalue. */
1108 conv = build_identity_conv (from, expr);
1109 conv = direct_reference_binding (rto, conv);
1110 if ((lvalue_p & clk_bitfield) != 0
1111 || ((lvalue_p & clk_packed) != 0 && !TYPE_PACKED (to)))
1112 /* For the purposes of overload resolution, we ignore the fact
1113 this expression is a bitfield or packed field. (In particular,
1114 [over.ics.ref] says specifically that a function with a
1115 non-const reference parameter is viable even if the
1116 argument is a bitfield.)
1118 However, when we actually call the function we must create
1119 a temporary to which to bind the reference. If the
1120 reference is volatile, or isn't const, then we cannot make
1121 a temporary, so we just issue an error when the conversion
1122 actually occurs. */
1123 conv->need_temporary_p = true;
1125 return conv;
1127 else if (CLASS_TYPE_P (from) && !(flags & LOOKUP_NO_CONVERSION))
1129 /* [dcl.init.ref]
1131 If the initializer expression
1133 -- has a class type (i.e., T2 is a class type) can be
1134 implicitly converted to an lvalue of type "cv3 T3," where
1135 "cv1 T1" is reference-compatible with "cv3 T3". (this
1136 conversion is selected by enumerating the applicable
1137 conversion functions (_over.match.ref_) and choosing the
1138 best one through overload resolution. (_over.match_).
1140 the reference is bound to the lvalue result of the conversion
1141 in the second case. */
1142 conv = convert_class_to_reference (to, from, expr);
1143 if (conv)
1144 return conv;
1147 /* From this point on, we conceptually need temporaries, even if we
1148 elide them. Only the cases above are "direct bindings". */
1149 if (flags & LOOKUP_NO_TEMP_BIND)
1150 return NULL;
1152 /* [over.ics.rank]
1154 When a parameter of reference type is not bound directly to an
1155 argument expression, the conversion sequence is the one required
1156 to convert the argument expression to the underlying type of the
1157 reference according to _over.best.ics_. Conceptually, this
1158 conversion sequence corresponds to copy-initializing a temporary
1159 of the underlying type with the argument expression. Any
1160 difference in top-level cv-qualification is subsumed by the
1161 initialization itself and does not constitute a conversion. */
1163 /* [dcl.init.ref]
1165 Otherwise, the reference shall be to a non-volatile const type. */
1166 if (!CP_TYPE_CONST_NON_VOLATILE_P (to))
1167 return NULL;
1169 /* [dcl.init.ref]
1171 If the initializer expression is an rvalue, with T2 a class type,
1172 and "cv1 T1" is reference-compatible with "cv2 T2", the reference
1173 is bound in one of the following ways:
1175 -- The reference is bound to the object represented by the rvalue
1176 or to a sub-object within that object.
1178 -- ...
1180 We use the first alternative. The implicit conversion sequence
1181 is supposed to be same as we would obtain by generating a
1182 temporary. Fortunately, if the types are reference compatible,
1183 then this is either an identity conversion or the derived-to-base
1184 conversion, just as for direct binding. */
1185 if (CLASS_TYPE_P (from) && compatible_p)
1187 conv = build_identity_conv (from, expr);
1188 conv = direct_reference_binding (rto, conv);
1189 if (!(flags & LOOKUP_CONSTRUCTOR_CALLABLE))
1190 conv->u.next->check_copy_constructor_p = true;
1191 return conv;
1194 /* [dcl.init.ref]
1196 Otherwise, a temporary of type "cv1 T1" is created and
1197 initialized from the initializer expression using the rules for a
1198 non-reference copy initialization. If T1 is reference-related to
1199 T2, cv1 must be the same cv-qualification as, or greater
1200 cv-qualification than, cv2; otherwise, the program is ill-formed. */
1201 if (related_p && !at_least_as_qualified_p (to, from))
1202 return NULL;
1204 conv = implicit_conversion (to, from, expr, /*c_cast_p=*/false,
1205 flags);
1206 if (!conv)
1207 return NULL;
1209 conv = build_conv (ck_ref_bind, rto, conv);
1210 /* This reference binding, unlike those above, requires the
1211 creation of a temporary. */
1212 conv->need_temporary_p = true;
1214 return conv;
1217 /* Returns the implicit conversion sequence (see [over.ics]) from type
1218 FROM to type TO. The optional expression EXPR may affect the
1219 conversion. FLAGS are the usual overloading flags. Only
1220 LOOKUP_NO_CONVERSION is significant. If C_CAST_P is true, this
1221 conversion is coming from a C-style cast. */
1223 static conversion *
1224 implicit_conversion (tree to, tree from, tree expr, bool c_cast_p,
1225 int flags)
1227 conversion *conv;
1229 if (from == error_mark_node || to == error_mark_node
1230 || expr == error_mark_node)
1231 return NULL;
1233 if (TREE_CODE (to) == REFERENCE_TYPE)
1234 conv = reference_binding (to, from, expr, flags);
1235 else
1236 conv = standard_conversion (to, from, expr, c_cast_p, flags);
1238 if (conv)
1239 return conv;
1241 if (expr != NULL_TREE
1242 && (IS_AGGR_TYPE (from)
1243 || IS_AGGR_TYPE (to))
1244 && (flags & LOOKUP_NO_CONVERSION) == 0)
1246 struct z_candidate *cand;
1248 cand = build_user_type_conversion_1
1249 (to, expr, LOOKUP_ONLYCONVERTING);
1250 if (cand)
1251 conv = cand->second_conv;
1253 /* We used to try to bind a reference to a temporary here, but that
1254 is now handled by the recursive call to this function at the end
1255 of reference_binding. */
1256 return conv;
1259 return NULL;
1262 /* Add a new entry to the list of candidates. Used by the add_*_candidate
1263 functions. */
1265 static struct z_candidate *
1266 add_candidate (struct z_candidate **candidates,
1267 tree fn, tree args,
1268 size_t num_convs, conversion **convs,
1269 tree access_path, tree conversion_path,
1270 int viable)
1272 struct z_candidate *cand = (struct z_candidate *)
1273 conversion_obstack_alloc (sizeof (struct z_candidate));
1275 cand->fn = fn;
1276 cand->args = args;
1277 cand->convs = convs;
1278 cand->num_convs = num_convs;
1279 cand->access_path = access_path;
1280 cand->conversion_path = conversion_path;
1281 cand->viable = viable;
1282 cand->next = *candidates;
1283 *candidates = cand;
1285 return cand;
1288 /* Create an overload candidate for the function or method FN called with
1289 the argument list ARGLIST and add it to CANDIDATES. FLAGS is passed on
1290 to implicit_conversion.
1292 CTYPE, if non-NULL, is the type we want to pretend this function
1293 comes from for purposes of overload resolution. */
1295 static struct z_candidate *
1296 add_function_candidate (struct z_candidate **candidates,
1297 tree fn, tree ctype, tree arglist,
1298 tree access_path, tree conversion_path,
1299 int flags)
1301 tree parmlist = TYPE_ARG_TYPES (TREE_TYPE (fn));
1302 int i, len;
1303 conversion **convs;
1304 tree parmnode, argnode;
1305 tree orig_arglist;
1306 int viable = 1;
1308 /* At this point we should not see any functions which haven't been
1309 explicitly declared, except for friend functions which will have
1310 been found using argument dependent lookup. */
1311 gcc_assert (!DECL_ANTICIPATED (fn) || DECL_HIDDEN_FRIEND_P (fn));
1313 /* The `this', `in_chrg' and VTT arguments to constructors are not
1314 considered in overload resolution. */
1315 if (DECL_CONSTRUCTOR_P (fn))
1317 parmlist = skip_artificial_parms_for (fn, parmlist);
1318 orig_arglist = arglist;
1319 arglist = skip_artificial_parms_for (fn, arglist);
1321 else
1322 orig_arglist = arglist;
1324 len = list_length (arglist);
1325 convs = alloc_conversions (len);
1327 /* 13.3.2 - Viable functions [over.match.viable]
1328 First, to be a viable function, a candidate function shall have enough
1329 parameters to agree in number with the arguments in the list.
1331 We need to check this first; otherwise, checking the ICSes might cause
1332 us to produce an ill-formed template instantiation. */
1334 parmnode = parmlist;
1335 for (i = 0; i < len; ++i)
1337 if (parmnode == NULL_TREE || parmnode == void_list_node)
1338 break;
1339 parmnode = TREE_CHAIN (parmnode);
1342 if (i < len && parmnode)
1343 viable = 0;
1345 /* Make sure there are default args for the rest of the parms. */
1346 else if (!sufficient_parms_p (parmnode))
1347 viable = 0;
1349 if (! viable)
1350 goto out;
1352 /* Second, for F to be a viable function, there shall exist for each
1353 argument an implicit conversion sequence that converts that argument
1354 to the corresponding parameter of F. */
1356 parmnode = parmlist;
1357 argnode = arglist;
1359 for (i = 0; i < len; ++i)
1361 tree arg = TREE_VALUE (argnode);
1362 tree argtype = lvalue_type (arg);
1363 conversion *t;
1364 int is_this;
1366 if (parmnode == void_list_node)
1367 break;
1369 is_this = (i == 0 && DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
1370 && ! DECL_CONSTRUCTOR_P (fn));
1372 if (parmnode)
1374 tree parmtype = TREE_VALUE (parmnode);
1376 /* The type of the implicit object parameter ('this') for
1377 overload resolution is not always the same as for the
1378 function itself; conversion functions are considered to
1379 be members of the class being converted, and functions
1380 introduced by a using-declaration are considered to be
1381 members of the class that uses them.
1383 Since build_over_call ignores the ICS for the `this'
1384 parameter, we can just change the parm type. */
1385 if (ctype && is_this)
1387 parmtype
1388 = build_qualified_type (ctype,
1389 TYPE_QUALS (TREE_TYPE (parmtype)));
1390 parmtype = build_pointer_type (parmtype);
1393 t = implicit_conversion (parmtype, argtype, arg,
1394 /*c_cast_p=*/false, flags);
1396 else
1398 t = build_identity_conv (argtype, arg);
1399 t->ellipsis_p = true;
1402 if (t && is_this)
1403 t->this_p = true;
1405 convs[i] = t;
1406 if (! t)
1408 viable = 0;
1409 break;
1412 if (t->bad_p)
1413 viable = -1;
1415 if (parmnode)
1416 parmnode = TREE_CHAIN (parmnode);
1417 argnode = TREE_CHAIN (argnode);
1420 out:
1421 return add_candidate (candidates, fn, orig_arglist, len, convs,
1422 access_path, conversion_path, viable);
1425 /* Create an overload candidate for the conversion function FN which will
1426 be invoked for expression OBJ, producing a pointer-to-function which
1427 will in turn be called with the argument list ARGLIST, and add it to
1428 CANDIDATES. FLAGS is passed on to implicit_conversion.
1430 Actually, we don't really care about FN; we care about the type it
1431 converts to. There may be multiple conversion functions that will
1432 convert to that type, and we rely on build_user_type_conversion_1 to
1433 choose the best one; so when we create our candidate, we record the type
1434 instead of the function. */
1436 static struct z_candidate *
1437 add_conv_candidate (struct z_candidate **candidates, tree fn, tree obj,
1438 tree arglist, tree access_path, tree conversion_path)
1440 tree totype = TREE_TYPE (TREE_TYPE (fn));
1441 int i, len, viable, flags;
1442 tree parmlist, parmnode, argnode;
1443 conversion **convs;
1445 for (parmlist = totype; TREE_CODE (parmlist) != FUNCTION_TYPE; )
1446 parmlist = TREE_TYPE (parmlist);
1447 parmlist = TYPE_ARG_TYPES (parmlist);
1449 len = list_length (arglist) + 1;
1450 convs = alloc_conversions (len);
1451 parmnode = parmlist;
1452 argnode = arglist;
1453 viable = 1;
1454 flags = LOOKUP_NORMAL;
1456 /* Don't bother looking up the same type twice. */
1457 if (*candidates && (*candidates)->fn == totype)
1458 return NULL;
1460 for (i = 0; i < len; ++i)
1462 tree arg = i == 0 ? obj : TREE_VALUE (argnode);
1463 tree argtype = lvalue_type (arg);
1464 conversion *t;
1466 if (i == 0)
1467 t = implicit_conversion (totype, argtype, arg, /*c_cast_p=*/false,
1468 flags);
1469 else if (parmnode == void_list_node)
1470 break;
1471 else if (parmnode)
1472 t = implicit_conversion (TREE_VALUE (parmnode), argtype, arg,
1473 /*c_cast_p=*/false, flags);
1474 else
1476 t = build_identity_conv (argtype, arg);
1477 t->ellipsis_p = true;
1480 convs[i] = t;
1481 if (! t)
1482 break;
1484 if (t->bad_p)
1485 viable = -1;
1487 if (i == 0)
1488 continue;
1490 if (parmnode)
1491 parmnode = TREE_CHAIN (parmnode);
1492 argnode = TREE_CHAIN (argnode);
1495 if (i < len)
1496 viable = 0;
1498 if (!sufficient_parms_p (parmnode))
1499 viable = 0;
1501 return add_candidate (candidates, totype, arglist, len, convs,
1502 access_path, conversion_path, viable);
1505 static void
1506 build_builtin_candidate (struct z_candidate **candidates, tree fnname,
1507 tree type1, tree type2, tree *args, tree *argtypes,
1508 int flags)
1510 conversion *t;
1511 conversion **convs;
1512 size_t num_convs;
1513 int viable = 1, i;
1514 tree types[2];
1516 types[0] = type1;
1517 types[1] = type2;
1519 num_convs = args[2] ? 3 : (args[1] ? 2 : 1);
1520 convs = alloc_conversions (num_convs);
1522 for (i = 0; i < 2; ++i)
1524 if (! args[i])
1525 break;
1527 t = implicit_conversion (types[i], argtypes[i], args[i],
1528 /*c_cast_p=*/false, flags);
1529 if (! t)
1531 viable = 0;
1532 /* We need something for printing the candidate. */
1533 t = build_identity_conv (types[i], NULL_TREE);
1535 else if (t->bad_p)
1536 viable = 0;
1537 convs[i] = t;
1540 /* For COND_EXPR we rearranged the arguments; undo that now. */
1541 if (args[2])
1543 convs[2] = convs[1];
1544 convs[1] = convs[0];
1545 t = implicit_conversion (boolean_type_node, argtypes[2], args[2],
1546 /*c_cast_p=*/false, flags);
1547 if (t)
1548 convs[0] = t;
1549 else
1550 viable = 0;
1553 add_candidate (candidates, fnname, /*args=*/NULL_TREE,
1554 num_convs, convs,
1555 /*access_path=*/NULL_TREE,
1556 /*conversion_path=*/NULL_TREE,
1557 viable);
1560 static bool
1561 is_complete (tree t)
1563 return COMPLETE_TYPE_P (complete_type (t));
1566 /* Returns nonzero if TYPE is a promoted arithmetic type. */
1568 static bool
1569 promoted_arithmetic_type_p (tree type)
1571 /* [over.built]
1573 In this section, the term promoted integral type is used to refer
1574 to those integral types which are preserved by integral promotion
1575 (including e.g. int and long but excluding e.g. char).
1576 Similarly, the term promoted arithmetic type refers to promoted
1577 integral types plus floating types. */
1578 return ((INTEGRAL_TYPE_P (type)
1579 && same_type_p (type_promotes_to (type), type))
1580 || TREE_CODE (type) == REAL_TYPE);
1583 /* Create any builtin operator overload candidates for the operator in
1584 question given the converted operand types TYPE1 and TYPE2. The other
1585 args are passed through from add_builtin_candidates to
1586 build_builtin_candidate.
1588 TYPE1 and TYPE2 may not be permissible, and we must filter them.
1589 If CODE is requires candidates operands of the same type of the kind
1590 of which TYPE1 and TYPE2 are, we add both candidates
1591 CODE (TYPE1, TYPE1) and CODE (TYPE2, TYPE2). */
1593 static void
1594 add_builtin_candidate (struct z_candidate **candidates, enum tree_code code,
1595 enum tree_code code2, tree fnname, tree type1,
1596 tree type2, tree *args, tree *argtypes, int flags)
1598 switch (code)
1600 case POSTINCREMENT_EXPR:
1601 case POSTDECREMENT_EXPR:
1602 args[1] = integer_zero_node;
1603 type2 = integer_type_node;
1604 break;
1605 default:
1606 break;
1609 switch (code)
1612 /* 4 For every pair T, VQ), where T is an arithmetic or enumeration type,
1613 and VQ is either volatile or empty, there exist candidate operator
1614 functions of the form
1615 VQ T& operator++(VQ T&);
1616 T operator++(VQ T&, int);
1617 5 For every pair T, VQ), where T is an enumeration type or an arithmetic
1618 type other than bool, and VQ is either volatile or empty, there exist
1619 candidate operator functions of the form
1620 VQ T& operator--(VQ T&);
1621 T operator--(VQ T&, int);
1622 6 For every pair T, VQ), where T is a cv-qualified or cv-unqualified
1623 complete object type, and VQ is either volatile or empty, there exist
1624 candidate operator functions of the form
1625 T*VQ& operator++(T*VQ&);
1626 T*VQ& operator--(T*VQ&);
1627 T* operator++(T*VQ&, int);
1628 T* operator--(T*VQ&, int); */
1630 case POSTDECREMENT_EXPR:
1631 case PREDECREMENT_EXPR:
1632 if (TREE_CODE (type1) == BOOLEAN_TYPE)
1633 return;
1634 case POSTINCREMENT_EXPR:
1635 case PREINCREMENT_EXPR:
1636 if (ARITHMETIC_TYPE_P (type1) || TYPE_PTROB_P (type1))
1638 type1 = build_reference_type (type1);
1639 break;
1641 return;
1643 /* 7 For every cv-qualified or cv-unqualified complete object type T, there
1644 exist candidate operator functions of the form
1646 T& operator*(T*);
1648 8 For every function type T, there exist candidate operator functions of
1649 the form
1650 T& operator*(T*); */
1652 case INDIRECT_REF:
1653 if (TREE_CODE (type1) == POINTER_TYPE
1654 && (TYPE_PTROB_P (type1)
1655 || TREE_CODE (TREE_TYPE (type1)) == FUNCTION_TYPE))
1656 break;
1657 return;
1659 /* 9 For every type T, there exist candidate operator functions of the form
1660 T* operator+(T*);
1662 10For every promoted arithmetic type T, there exist candidate operator
1663 functions of the form
1664 T operator+(T);
1665 T operator-(T); */
1667 case UNARY_PLUS_EXPR: /* unary + */
1668 if (TREE_CODE (type1) == POINTER_TYPE)
1669 break;
1670 case NEGATE_EXPR:
1671 if (ARITHMETIC_TYPE_P (type1))
1672 break;
1673 return;
1675 /* 11For every promoted integral type T, there exist candidate operator
1676 functions of the form
1677 T operator~(T); */
1679 case BIT_NOT_EXPR:
1680 if (INTEGRAL_TYPE_P (type1))
1681 break;
1682 return;
1684 /* 12For every quintuple C1, C2, T, CV1, CV2), where C2 is a class type, C1
1685 is the same type as C2 or is a derived class of C2, T is a complete
1686 object type or a function type, and CV1 and CV2 are cv-qualifier-seqs,
1687 there exist candidate operator functions of the form
1688 CV12 T& operator->*(CV1 C1*, CV2 T C2::*);
1689 where CV12 is the union of CV1 and CV2. */
1691 case MEMBER_REF:
1692 if (TREE_CODE (type1) == POINTER_TYPE
1693 && TYPE_PTR_TO_MEMBER_P (type2))
1695 tree c1 = TREE_TYPE (type1);
1696 tree c2 = TYPE_PTRMEM_CLASS_TYPE (type2);
1698 if (IS_AGGR_TYPE (c1) && DERIVED_FROM_P (c2, c1)
1699 && (TYPE_PTRMEMFUNC_P (type2)
1700 || is_complete (TYPE_PTRMEM_POINTED_TO_TYPE (type2))))
1701 break;
1703 return;
1705 /* 13For every pair of promoted arithmetic types L and R, there exist can-
1706 didate operator functions of the form
1707 LR operator*(L, R);
1708 LR operator/(L, R);
1709 LR operator+(L, R);
1710 LR operator-(L, R);
1711 bool operator<(L, R);
1712 bool operator>(L, R);
1713 bool operator<=(L, R);
1714 bool operator>=(L, R);
1715 bool operator==(L, R);
1716 bool operator!=(L, R);
1717 where LR is the result of the usual arithmetic conversions between
1718 types L and R.
1720 14For every pair of types T and I, where T is a cv-qualified or cv-
1721 unqualified complete object type and I is a promoted integral type,
1722 there exist candidate operator functions of the form
1723 T* operator+(T*, I);
1724 T& operator[](T*, I);
1725 T* operator-(T*, I);
1726 T* operator+(I, T*);
1727 T& operator[](I, T*);
1729 15For every T, where T is a pointer to complete object type, there exist
1730 candidate operator functions of the form112)
1731 ptrdiff_t operator-(T, T);
1733 16For every pointer or enumeration type T, there exist candidate operator
1734 functions of the form
1735 bool operator<(T, T);
1736 bool operator>(T, T);
1737 bool operator<=(T, T);
1738 bool operator>=(T, T);
1739 bool operator==(T, T);
1740 bool operator!=(T, T);
1742 17For every pointer to member type T, there exist candidate operator
1743 functions of the form
1744 bool operator==(T, T);
1745 bool operator!=(T, T); */
1747 case MINUS_EXPR:
1748 if (TYPE_PTROB_P (type1) && TYPE_PTROB_P (type2))
1749 break;
1750 if (TYPE_PTROB_P (type1) && INTEGRAL_TYPE_P (type2))
1752 type2 = ptrdiff_type_node;
1753 break;
1755 case MULT_EXPR:
1756 case TRUNC_DIV_EXPR:
1757 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
1758 break;
1759 return;
1761 case EQ_EXPR:
1762 case NE_EXPR:
1763 if ((TYPE_PTRMEMFUNC_P (type1) && TYPE_PTRMEMFUNC_P (type2))
1764 || (TYPE_PTRMEM_P (type1) && TYPE_PTRMEM_P (type2)))
1765 break;
1766 if (TYPE_PTR_TO_MEMBER_P (type1) && null_ptr_cst_p (args[1]))
1768 type2 = type1;
1769 break;
1771 if (TYPE_PTR_TO_MEMBER_P (type2) && null_ptr_cst_p (args[0]))
1773 type1 = type2;
1774 break;
1776 /* Fall through. */
1777 case LT_EXPR:
1778 case GT_EXPR:
1779 case LE_EXPR:
1780 case GE_EXPR:
1781 case MAX_EXPR:
1782 case MIN_EXPR:
1783 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
1784 break;
1785 if (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
1786 break;
1787 if (TREE_CODE (type1) == ENUMERAL_TYPE && TREE_CODE (type2) == ENUMERAL_TYPE)
1788 break;
1789 if (TYPE_PTR_P (type1) && null_ptr_cst_p (args[1]))
1791 type2 = type1;
1792 break;
1794 if (null_ptr_cst_p (args[0]) && TYPE_PTR_P (type2))
1796 type1 = type2;
1797 break;
1799 return;
1801 case PLUS_EXPR:
1802 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
1803 break;
1804 case ARRAY_REF:
1805 if (INTEGRAL_TYPE_P (type1) && TYPE_PTROB_P (type2))
1807 type1 = ptrdiff_type_node;
1808 break;
1810 if (TYPE_PTROB_P (type1) && INTEGRAL_TYPE_P (type2))
1812 type2 = ptrdiff_type_node;
1813 break;
1815 return;
1817 /* 18For every pair of promoted integral types L and R, there exist candi-
1818 date operator functions of the form
1819 LR operator%(L, R);
1820 LR operator&(L, R);
1821 LR operator^(L, R);
1822 LR operator|(L, R);
1823 L operator<<(L, R);
1824 L operator>>(L, R);
1825 where LR is the result of the usual arithmetic conversions between
1826 types L and R. */
1828 case TRUNC_MOD_EXPR:
1829 case BIT_AND_EXPR:
1830 case BIT_IOR_EXPR:
1831 case BIT_XOR_EXPR:
1832 case LSHIFT_EXPR:
1833 case RSHIFT_EXPR:
1834 if (INTEGRAL_TYPE_P (type1) && INTEGRAL_TYPE_P (type2))
1835 break;
1836 return;
1838 /* 19For every triple L, VQ, R), where L is an arithmetic or enumeration
1839 type, VQ is either volatile or empty, and R is a promoted arithmetic
1840 type, there exist candidate operator functions of the form
1841 VQ L& operator=(VQ L&, R);
1842 VQ L& operator*=(VQ L&, R);
1843 VQ L& operator/=(VQ L&, R);
1844 VQ L& operator+=(VQ L&, R);
1845 VQ L& operator-=(VQ L&, R);
1847 20For every pair T, VQ), where T is any type and VQ is either volatile
1848 or empty, there exist candidate operator functions of the form
1849 T*VQ& operator=(T*VQ&, T*);
1851 21For every pair T, VQ), where T is a pointer to member type and VQ is
1852 either volatile or empty, there exist candidate operator functions of
1853 the form
1854 VQ T& operator=(VQ T&, T);
1856 22For every triple T, VQ, I), where T is a cv-qualified or cv-
1857 unqualified complete object type, VQ is either volatile or empty, and
1858 I is a promoted integral type, there exist candidate operator func-
1859 tions of the form
1860 T*VQ& operator+=(T*VQ&, I);
1861 T*VQ& operator-=(T*VQ&, I);
1863 23For every triple L, VQ, R), where L is an integral or enumeration
1864 type, VQ is either volatile or empty, and R is a promoted integral
1865 type, there exist candidate operator functions of the form
1867 VQ L& operator%=(VQ L&, R);
1868 VQ L& operator<<=(VQ L&, R);
1869 VQ L& operator>>=(VQ L&, R);
1870 VQ L& operator&=(VQ L&, R);
1871 VQ L& operator^=(VQ L&, R);
1872 VQ L& operator|=(VQ L&, R); */
1874 case MODIFY_EXPR:
1875 switch (code2)
1877 case PLUS_EXPR:
1878 case MINUS_EXPR:
1879 if (TYPE_PTROB_P (type1) && INTEGRAL_TYPE_P (type2))
1881 type2 = ptrdiff_type_node;
1882 break;
1884 case MULT_EXPR:
1885 case TRUNC_DIV_EXPR:
1886 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
1887 break;
1888 return;
1890 case TRUNC_MOD_EXPR:
1891 case BIT_AND_EXPR:
1892 case BIT_IOR_EXPR:
1893 case BIT_XOR_EXPR:
1894 case LSHIFT_EXPR:
1895 case RSHIFT_EXPR:
1896 if (INTEGRAL_TYPE_P (type1) && INTEGRAL_TYPE_P (type2))
1897 break;
1898 return;
1900 case NOP_EXPR:
1901 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
1902 break;
1903 if ((TYPE_PTRMEMFUNC_P (type1) && TYPE_PTRMEMFUNC_P (type2))
1904 || (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
1905 || (TYPE_PTRMEM_P (type1) && TYPE_PTRMEM_P (type2))
1906 || ((TYPE_PTRMEMFUNC_P (type1)
1907 || TREE_CODE (type1) == POINTER_TYPE)
1908 && null_ptr_cst_p (args[1])))
1910 type2 = type1;
1911 break;
1913 return;
1915 default:
1916 gcc_unreachable ();
1918 type1 = build_reference_type (type1);
1919 break;
1921 case COND_EXPR:
1922 /* [over.built]
1924 For every pair of promoted arithmetic types L and R, there
1925 exist candidate operator functions of the form
1927 LR operator?(bool, L, R);
1929 where LR is the result of the usual arithmetic conversions
1930 between types L and R.
1932 For every type T, where T is a pointer or pointer-to-member
1933 type, there exist candidate operator functions of the form T
1934 operator?(bool, T, T); */
1936 if (promoted_arithmetic_type_p (type1)
1937 && promoted_arithmetic_type_p (type2))
1938 /* That's OK. */
1939 break;
1941 /* Otherwise, the types should be pointers. */
1942 if (!(TYPE_PTR_P (type1) || TYPE_PTR_TO_MEMBER_P (type1))
1943 || !(TYPE_PTR_P (type2) || TYPE_PTR_TO_MEMBER_P (type2)))
1944 return;
1946 /* We don't check that the two types are the same; the logic
1947 below will actually create two candidates; one in which both
1948 parameter types are TYPE1, and one in which both parameter
1949 types are TYPE2. */
1950 break;
1952 default:
1953 gcc_unreachable ();
1956 /* If we're dealing with two pointer types or two enumeral types,
1957 we need candidates for both of them. */
1958 if (type2 && !same_type_p (type1, type2)
1959 && TREE_CODE (type1) == TREE_CODE (type2)
1960 && (TREE_CODE (type1) == REFERENCE_TYPE
1961 || (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
1962 || (TYPE_PTRMEM_P (type1) && TYPE_PTRMEM_P (type2))
1963 || TYPE_PTRMEMFUNC_P (type1)
1964 || IS_AGGR_TYPE (type1)
1965 || TREE_CODE (type1) == ENUMERAL_TYPE))
1967 build_builtin_candidate
1968 (candidates, fnname, type1, type1, args, argtypes, flags);
1969 build_builtin_candidate
1970 (candidates, fnname, type2, type2, args, argtypes, flags);
1971 return;
1974 build_builtin_candidate
1975 (candidates, fnname, type1, type2, args, argtypes, flags);
1978 tree
1979 type_decays_to (tree type)
1981 if (TREE_CODE (type) == ARRAY_TYPE)
1982 return build_pointer_type (TREE_TYPE (type));
1983 if (TREE_CODE (type) == FUNCTION_TYPE)
1984 return build_pointer_type (type);
1985 return type;
1988 /* There are three conditions of builtin candidates:
1990 1) bool-taking candidates. These are the same regardless of the input.
1991 2) pointer-pair taking candidates. These are generated for each type
1992 one of the input types converts to.
1993 3) arithmetic candidates. According to the standard, we should generate
1994 all of these, but I'm trying not to...
1996 Here we generate a superset of the possible candidates for this particular
1997 case. That is a subset of the full set the standard defines, plus some
1998 other cases which the standard disallows. add_builtin_candidate will
1999 filter out the invalid set. */
2001 static void
2002 add_builtin_candidates (struct z_candidate **candidates, enum tree_code code,
2003 enum tree_code code2, tree fnname, tree *args,
2004 int flags)
2006 int ref1, i;
2007 int enum_p = 0;
2008 tree type, argtypes[3];
2009 /* TYPES[i] is the set of possible builtin-operator parameter types
2010 we will consider for the Ith argument. These are represented as
2011 a TREE_LIST; the TREE_VALUE of each node is the potential
2012 parameter type. */
2013 tree types[2];
2015 for (i = 0; i < 3; ++i)
2017 if (args[i])
2018 argtypes[i] = lvalue_type (args[i]);
2019 else
2020 argtypes[i] = NULL_TREE;
2023 switch (code)
2025 /* 4 For every pair T, VQ), where T is an arithmetic or enumeration type,
2026 and VQ is either volatile or empty, there exist candidate operator
2027 functions of the form
2028 VQ T& operator++(VQ T&); */
2030 case POSTINCREMENT_EXPR:
2031 case PREINCREMENT_EXPR:
2032 case POSTDECREMENT_EXPR:
2033 case PREDECREMENT_EXPR:
2034 case MODIFY_EXPR:
2035 ref1 = 1;
2036 break;
2038 /* 24There also exist candidate operator functions of the form
2039 bool operator!(bool);
2040 bool operator&&(bool, bool);
2041 bool operator||(bool, bool); */
2043 case TRUTH_NOT_EXPR:
2044 build_builtin_candidate
2045 (candidates, fnname, boolean_type_node,
2046 NULL_TREE, args, argtypes, flags);
2047 return;
2049 case TRUTH_ORIF_EXPR:
2050 case TRUTH_ANDIF_EXPR:
2051 build_builtin_candidate
2052 (candidates, fnname, boolean_type_node,
2053 boolean_type_node, args, argtypes, flags);
2054 return;
2056 case ADDR_EXPR:
2057 case COMPOUND_EXPR:
2058 case COMPONENT_REF:
2059 return;
2061 case COND_EXPR:
2062 case EQ_EXPR:
2063 case NE_EXPR:
2064 case LT_EXPR:
2065 case LE_EXPR:
2066 case GT_EXPR:
2067 case GE_EXPR:
2068 enum_p = 1;
2069 /* Fall through. */
2071 default:
2072 ref1 = 0;
2075 types[0] = types[1] = NULL_TREE;
2077 for (i = 0; i < 2; ++i)
2079 if (! args[i])
2081 else if (IS_AGGR_TYPE (argtypes[i]))
2083 tree convs;
2085 if (i == 0 && code == MODIFY_EXPR && code2 == NOP_EXPR)
2086 return;
2088 convs = lookup_conversions (argtypes[i]);
2090 if (code == COND_EXPR)
2092 if (real_lvalue_p (args[i]))
2093 types[i] = tree_cons
2094 (NULL_TREE, build_reference_type (argtypes[i]), types[i]);
2096 types[i] = tree_cons
2097 (NULL_TREE, TYPE_MAIN_VARIANT (argtypes[i]), types[i]);
2100 else if (! convs)
2101 return;
2103 for (; convs; convs = TREE_CHAIN (convs))
2105 type = TREE_TYPE (TREE_TYPE (OVL_CURRENT (TREE_VALUE (convs))));
2107 if (i == 0 && ref1
2108 && (TREE_CODE (type) != REFERENCE_TYPE
2109 || CP_TYPE_CONST_P (TREE_TYPE (type))))
2110 continue;
2112 if (code == COND_EXPR && TREE_CODE (type) == REFERENCE_TYPE)
2113 types[i] = tree_cons (NULL_TREE, type, types[i]);
2115 type = non_reference (type);
2116 if (i != 0 || ! ref1)
2118 type = TYPE_MAIN_VARIANT (type_decays_to (type));
2119 if (enum_p && TREE_CODE (type) == ENUMERAL_TYPE)
2120 types[i] = tree_cons (NULL_TREE, type, types[i]);
2121 if (INTEGRAL_TYPE_P (type))
2122 type = type_promotes_to (type);
2125 if (! value_member (type, types[i]))
2126 types[i] = tree_cons (NULL_TREE, type, types[i]);
2129 else
2131 if (code == COND_EXPR && real_lvalue_p (args[i]))
2132 types[i] = tree_cons
2133 (NULL_TREE, build_reference_type (argtypes[i]), types[i]);
2134 type = non_reference (argtypes[i]);
2135 if (i != 0 || ! ref1)
2137 type = TYPE_MAIN_VARIANT (type_decays_to (type));
2138 if (enum_p && TREE_CODE (type) == ENUMERAL_TYPE)
2139 types[i] = tree_cons (NULL_TREE, type, types[i]);
2140 if (INTEGRAL_TYPE_P (type))
2141 type = type_promotes_to (type);
2143 types[i] = tree_cons (NULL_TREE, type, types[i]);
2147 /* Run through the possible parameter types of both arguments,
2148 creating candidates with those parameter types. */
2149 for (; types[0]; types[0] = TREE_CHAIN (types[0]))
2151 if (types[1])
2152 for (type = types[1]; type; type = TREE_CHAIN (type))
2153 add_builtin_candidate
2154 (candidates, code, code2, fnname, TREE_VALUE (types[0]),
2155 TREE_VALUE (type), args, argtypes, flags);
2156 else
2157 add_builtin_candidate
2158 (candidates, code, code2, fnname, TREE_VALUE (types[0]),
2159 NULL_TREE, args, argtypes, flags);
2164 /* If TMPL can be successfully instantiated as indicated by
2165 EXPLICIT_TARGS and ARGLIST, adds the instantiation to CANDIDATES.
2167 TMPL is the template. EXPLICIT_TARGS are any explicit template
2168 arguments. ARGLIST is the arguments provided at the call-site.
2169 The RETURN_TYPE is the desired type for conversion operators. If
2170 OBJ is NULL_TREE, FLAGS and CTYPE are as for add_function_candidate.
2171 If an OBJ is supplied, FLAGS and CTYPE are ignored, and OBJ is as for
2172 add_conv_candidate. */
2174 static struct z_candidate*
2175 add_template_candidate_real (struct z_candidate **candidates, tree tmpl,
2176 tree ctype, tree explicit_targs, tree arglist,
2177 tree return_type, tree access_path,
2178 tree conversion_path, int flags, tree obj,
2179 unification_kind_t strict)
2181 int ntparms = DECL_NTPARMS (tmpl);
2182 tree targs = make_tree_vec (ntparms);
2183 tree args_without_in_chrg = arglist;
2184 struct z_candidate *cand;
2185 int i;
2186 tree fn;
2188 /* We don't do deduction on the in-charge parameter, the VTT
2189 parameter or 'this'. */
2190 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (tmpl))
2191 args_without_in_chrg = TREE_CHAIN (args_without_in_chrg);
2193 if ((DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (tmpl)
2194 || DECL_BASE_CONSTRUCTOR_P (tmpl))
2195 && CLASSTYPE_VBASECLASSES (DECL_CONTEXT (tmpl)))
2196 args_without_in_chrg = TREE_CHAIN (args_without_in_chrg);
2198 i = fn_type_unification (tmpl, explicit_targs, targs,
2199 args_without_in_chrg,
2200 return_type, strict, flags);
2202 if (i != 0)
2203 return NULL;
2205 fn = instantiate_template (tmpl, targs, tf_none);
2206 if (fn == error_mark_node)
2207 return NULL;
2209 /* In [class.copy]:
2211 A member function template is never instantiated to perform the
2212 copy of a class object to an object of its class type.
2214 It's a little unclear what this means; the standard explicitly
2215 does allow a template to be used to copy a class. For example,
2218 struct A {
2219 A(A&);
2220 template <class T> A(const T&);
2222 const A f ();
2223 void g () { A a (f ()); }
2225 the member template will be used to make the copy. The section
2226 quoted above appears in the paragraph that forbids constructors
2227 whose only parameter is (a possibly cv-qualified variant of) the
2228 class type, and a logical interpretation is that the intent was
2229 to forbid the instantiation of member templates which would then
2230 have that form. */
2231 if (DECL_CONSTRUCTOR_P (fn) && list_length (arglist) == 2)
2233 tree arg_types = FUNCTION_FIRST_USER_PARMTYPE (fn);
2234 if (arg_types && same_type_p (TYPE_MAIN_VARIANT (TREE_VALUE (arg_types)),
2235 ctype))
2236 return NULL;
2239 if (obj != NULL_TREE)
2240 /* Aha, this is a conversion function. */
2241 cand = add_conv_candidate (candidates, fn, obj, access_path,
2242 conversion_path, arglist);
2243 else
2244 cand = add_function_candidate (candidates, fn, ctype,
2245 arglist, access_path,
2246 conversion_path, flags);
2247 if (DECL_TI_TEMPLATE (fn) != tmpl)
2248 /* This situation can occur if a member template of a template
2249 class is specialized. Then, instantiate_template might return
2250 an instantiation of the specialization, in which case the
2251 DECL_TI_TEMPLATE field will point at the original
2252 specialization. For example:
2254 template <class T> struct S { template <class U> void f(U);
2255 template <> void f(int) {}; };
2256 S<double> sd;
2257 sd.f(3);
2259 Here, TMPL will be template <class U> S<double>::f(U).
2260 And, instantiate template will give us the specialization
2261 template <> S<double>::f(int). But, the DECL_TI_TEMPLATE field
2262 for this will point at template <class T> template <> S<T>::f(int),
2263 so that we can find the definition. For the purposes of
2264 overload resolution, however, we want the original TMPL. */
2265 cand->template_decl = tree_cons (tmpl, targs, NULL_TREE);
2266 else
2267 cand->template_decl = DECL_TEMPLATE_INFO (fn);
2269 return cand;
2273 static struct z_candidate *
2274 add_template_candidate (struct z_candidate **candidates, tree tmpl, tree ctype,
2275 tree explicit_targs, tree arglist, tree return_type,
2276 tree access_path, tree conversion_path, int flags,
2277 unification_kind_t strict)
2279 return
2280 add_template_candidate_real (candidates, tmpl, ctype,
2281 explicit_targs, arglist, return_type,
2282 access_path, conversion_path,
2283 flags, NULL_TREE, strict);
2287 static struct z_candidate *
2288 add_template_conv_candidate (struct z_candidate **candidates, tree tmpl,
2289 tree obj, tree arglist, tree return_type,
2290 tree access_path, tree conversion_path)
2292 return
2293 add_template_candidate_real (candidates, tmpl, NULL_TREE, NULL_TREE,
2294 arglist, return_type, access_path,
2295 conversion_path, 0, obj, DEDUCE_CONV);
2298 /* The CANDS are the set of candidates that were considered for
2299 overload resolution. Return the set of viable candidates. If none
2300 of the candidates were viable, set *ANY_VIABLE_P to true. STRICT_P
2301 is true if a candidate should be considered viable only if it is
2302 strictly viable. */
2304 static struct z_candidate*
2305 splice_viable (struct z_candidate *cands,
2306 bool strict_p,
2307 bool *any_viable_p)
2309 struct z_candidate *viable;
2310 struct z_candidate **last_viable;
2311 struct z_candidate **cand;
2313 viable = NULL;
2314 last_viable = &viable;
2315 *any_viable_p = false;
2317 cand = &cands;
2318 while (*cand)
2320 struct z_candidate *c = *cand;
2321 if (strict_p ? c->viable == 1 : c->viable)
2323 *last_viable = c;
2324 *cand = c->next;
2325 c->next = NULL;
2326 last_viable = &c->next;
2327 *any_viable_p = true;
2329 else
2330 cand = &c->next;
2333 return viable ? viable : cands;
2336 static bool
2337 any_strictly_viable (struct z_candidate *cands)
2339 for (; cands; cands = cands->next)
2340 if (cands->viable == 1)
2341 return true;
2342 return false;
2345 /* OBJ is being used in an expression like "OBJ.f (...)". In other
2346 words, it is about to become the "this" pointer for a member
2347 function call. Take the address of the object. */
2349 static tree
2350 build_this (tree obj)
2352 /* In a template, we are only concerned about the type of the
2353 expression, so we can take a shortcut. */
2354 if (processing_template_decl)
2355 return build_address (obj);
2357 return build_unary_op (ADDR_EXPR, obj, 0);
2360 /* Returns true iff functions are equivalent. Equivalent functions are
2361 not '==' only if one is a function-local extern function or if
2362 both are extern "C". */
2364 static inline int
2365 equal_functions (tree fn1, tree fn2)
2367 if (DECL_LOCAL_FUNCTION_P (fn1) || DECL_LOCAL_FUNCTION_P (fn2)
2368 || DECL_EXTERN_C_FUNCTION_P (fn1))
2369 return decls_match (fn1, fn2);
2370 return fn1 == fn2;
2373 /* Print information about one overload candidate CANDIDATE. MSGSTR
2374 is the text to print before the candidate itself.
2376 NOTE: Unlike most diagnostic functions in GCC, MSGSTR is expected
2377 to have been run through gettext by the caller. This wart makes
2378 life simpler in print_z_candidates and for the translators. */
2380 static void
2381 print_z_candidate (const char *msgstr, struct z_candidate *candidate)
2383 if (TREE_CODE (candidate->fn) == IDENTIFIER_NODE)
2385 if (candidate->num_convs == 3)
2386 inform ("%s %D(%T, %T, %T) <built-in>", msgstr, candidate->fn,
2387 candidate->convs[0]->type,
2388 candidate->convs[1]->type,
2389 candidate->convs[2]->type);
2390 else if (candidate->num_convs == 2)
2391 inform ("%s %D(%T, %T) <built-in>", msgstr, candidate->fn,
2392 candidate->convs[0]->type,
2393 candidate->convs[1]->type);
2394 else
2395 inform ("%s %D(%T) <built-in>", msgstr, candidate->fn,
2396 candidate->convs[0]->type);
2398 else if (TYPE_P (candidate->fn))
2399 inform ("%s %T <conversion>", msgstr, candidate->fn);
2400 else if (candidate->viable == -1)
2401 inform ("%s %+#D <near match>", msgstr, candidate->fn);
2402 else
2403 inform ("%s %+#D", msgstr, candidate->fn);
2406 static void
2407 print_z_candidates (struct z_candidate *candidates)
2409 const char *str;
2410 struct z_candidate *cand1;
2411 struct z_candidate **cand2;
2413 /* There may be duplicates in the set of candidates. We put off
2414 checking this condition as long as possible, since we have no way
2415 to eliminate duplicates from a set of functions in less than n^2
2416 time. Now we are about to emit an error message, so it is more
2417 permissible to go slowly. */
2418 for (cand1 = candidates; cand1; cand1 = cand1->next)
2420 tree fn = cand1->fn;
2421 /* Skip builtin candidates and conversion functions. */
2422 if (TREE_CODE (fn) != FUNCTION_DECL)
2423 continue;
2424 cand2 = &cand1->next;
2425 while (*cand2)
2427 if (TREE_CODE ((*cand2)->fn) == FUNCTION_DECL
2428 && equal_functions (fn, (*cand2)->fn))
2429 *cand2 = (*cand2)->next;
2430 else
2431 cand2 = &(*cand2)->next;
2435 if (!candidates)
2436 return;
2438 str = _("candidates are:");
2439 print_z_candidate (str, candidates);
2440 if (candidates->next)
2442 /* Indent successive candidates by the width of the translation
2443 of the above string. */
2444 size_t len = gcc_gettext_width (str) + 1;
2445 char *spaces = (char *) alloca (len);
2446 memset (spaces, ' ', len-1);
2447 spaces[len - 1] = '\0';
2449 candidates = candidates->next;
2452 print_z_candidate (spaces, candidates);
2453 candidates = candidates->next;
2455 while (candidates);
2459 /* USER_SEQ is a user-defined conversion sequence, beginning with a
2460 USER_CONV. STD_SEQ is the standard conversion sequence applied to
2461 the result of the conversion function to convert it to the final
2462 desired type. Merge the two sequences into a single sequence,
2463 and return the merged sequence. */
2465 static conversion *
2466 merge_conversion_sequences (conversion *user_seq, conversion *std_seq)
2468 conversion **t;
2470 gcc_assert (user_seq->kind == ck_user);
2472 /* Find the end of the second conversion sequence. */
2473 t = &(std_seq);
2474 while ((*t)->kind != ck_identity)
2475 t = &((*t)->u.next);
2477 /* Replace the identity conversion with the user conversion
2478 sequence. */
2479 *t = user_seq;
2481 /* The entire sequence is a user-conversion sequence. */
2482 std_seq->user_conv_p = true;
2484 return std_seq;
2487 /* Returns the best overload candidate to perform the requested
2488 conversion. This function is used for three the overloading situations
2489 described in [over.match.copy], [over.match.conv], and [over.match.ref].
2490 If TOTYPE is a REFERENCE_TYPE, we're trying to find an lvalue binding as
2491 per [dcl.init.ref], so we ignore temporary bindings. */
2493 static struct z_candidate *
2494 build_user_type_conversion_1 (tree totype, tree expr, int flags)
2496 struct z_candidate *candidates, *cand;
2497 tree fromtype = TREE_TYPE (expr);
2498 tree ctors = NULL_TREE;
2499 tree conv_fns = NULL_TREE;
2500 conversion *conv = NULL;
2501 tree args = NULL_TREE;
2502 bool any_viable_p;
2504 /* We represent conversion within a hierarchy using RVALUE_CONV and
2505 BASE_CONV, as specified by [over.best.ics]; these become plain
2506 constructor calls, as specified in [dcl.init]. */
2507 gcc_assert (!IS_AGGR_TYPE (fromtype) || !IS_AGGR_TYPE (totype)
2508 || !DERIVED_FROM_P (totype, fromtype));
2510 if (IS_AGGR_TYPE (totype))
2511 ctors = lookup_fnfields (totype, complete_ctor_identifier, 0);
2513 if (IS_AGGR_TYPE (fromtype))
2514 conv_fns = lookup_conversions (fromtype);
2516 candidates = 0;
2517 flags |= LOOKUP_NO_CONVERSION;
2519 if (ctors)
2521 tree t;
2523 ctors = BASELINK_FUNCTIONS (ctors);
2525 t = build_int_cst (build_pointer_type (totype), 0);
2526 args = build_tree_list (NULL_TREE, expr);
2527 /* We should never try to call the abstract or base constructor
2528 from here. */
2529 gcc_assert (!DECL_HAS_IN_CHARGE_PARM_P (OVL_CURRENT (ctors))
2530 && !DECL_HAS_VTT_PARM_P (OVL_CURRENT (ctors)));
2531 args = tree_cons (NULL_TREE, t, args);
2533 for (; ctors; ctors = OVL_NEXT (ctors))
2535 tree ctor = OVL_CURRENT (ctors);
2536 if (DECL_NONCONVERTING_P (ctor))
2537 continue;
2539 if (TREE_CODE (ctor) == TEMPLATE_DECL)
2540 cand = add_template_candidate (&candidates, ctor, totype,
2541 NULL_TREE, args, NULL_TREE,
2542 TYPE_BINFO (totype),
2543 TYPE_BINFO (totype),
2544 flags,
2545 DEDUCE_CALL);
2546 else
2547 cand = add_function_candidate (&candidates, ctor, totype,
2548 args, TYPE_BINFO (totype),
2549 TYPE_BINFO (totype),
2550 flags);
2552 if (cand)
2553 cand->second_conv = build_identity_conv (totype, NULL_TREE);
2556 if (conv_fns)
2557 args = build_tree_list (NULL_TREE, build_this (expr));
2559 for (; conv_fns; conv_fns = TREE_CHAIN (conv_fns))
2561 tree fns;
2562 tree conversion_path = TREE_PURPOSE (conv_fns);
2563 int convflags = LOOKUP_NO_CONVERSION;
2565 /* If we are called to convert to a reference type, we are trying to
2566 find an lvalue binding, so don't even consider temporaries. If
2567 we don't find an lvalue binding, the caller will try again to
2568 look for a temporary binding. */
2569 if (TREE_CODE (totype) == REFERENCE_TYPE)
2570 convflags |= LOOKUP_NO_TEMP_BIND;
2572 for (fns = TREE_VALUE (conv_fns); fns; fns = OVL_NEXT (fns))
2574 tree fn = OVL_CURRENT (fns);
2576 /* [over.match.funcs] For conversion functions, the function
2577 is considered to be a member of the class of the implicit
2578 object argument for the purpose of defining the type of
2579 the implicit object parameter.
2581 So we pass fromtype as CTYPE to add_*_candidate. */
2583 if (TREE_CODE (fn) == TEMPLATE_DECL)
2584 cand = add_template_candidate (&candidates, fn, fromtype,
2585 NULL_TREE,
2586 args, totype,
2587 TYPE_BINFO (fromtype),
2588 conversion_path,
2589 flags,
2590 DEDUCE_CONV);
2591 else
2592 cand = add_function_candidate (&candidates, fn, fromtype,
2593 args,
2594 TYPE_BINFO (fromtype),
2595 conversion_path,
2596 flags);
2598 if (cand)
2600 conversion *ics
2601 = implicit_conversion (totype,
2602 TREE_TYPE (TREE_TYPE (cand->fn)),
2604 /*c_cast_p=*/false, convflags);
2606 cand->second_conv = ics;
2608 if (!ics)
2609 cand->viable = 0;
2610 else if (candidates->viable == 1 && ics->bad_p)
2611 cand->viable = -1;
2616 candidates = splice_viable (candidates, pedantic, &any_viable_p);
2617 if (!any_viable_p)
2618 return NULL;
2620 cand = tourney (candidates);
2621 if (cand == 0)
2623 if (flags & LOOKUP_COMPLAIN)
2625 error ("conversion from %qT to %qT is ambiguous",
2626 fromtype, totype);
2627 print_z_candidates (candidates);
2630 cand = candidates; /* any one will do */
2631 cand->second_conv = build_ambiguous_conv (totype, expr);
2632 cand->second_conv->user_conv_p = true;
2633 if (!any_strictly_viable (candidates))
2634 cand->second_conv->bad_p = true;
2635 /* If there are viable candidates, don't set ICS_BAD_FLAG; an
2636 ambiguous conversion is no worse than another user-defined
2637 conversion. */
2639 return cand;
2642 /* Build the user conversion sequence. */
2643 conv = build_conv
2644 (ck_user,
2645 (DECL_CONSTRUCTOR_P (cand->fn)
2646 ? totype : non_reference (TREE_TYPE (TREE_TYPE (cand->fn)))),
2647 build_identity_conv (TREE_TYPE (expr), expr));
2648 conv->cand = cand;
2650 /* Combine it with the second conversion sequence. */
2651 cand->second_conv = merge_conversion_sequences (conv,
2652 cand->second_conv);
2654 if (cand->viable == -1)
2655 cand->second_conv->bad_p = true;
2657 return cand;
2660 tree
2661 build_user_type_conversion (tree totype, tree expr, int flags)
2663 struct z_candidate *cand
2664 = build_user_type_conversion_1 (totype, expr, flags);
2666 if (cand)
2668 if (cand->second_conv->kind == ck_ambig)
2669 return error_mark_node;
2670 expr = convert_like (cand->second_conv, expr);
2671 return convert_from_reference (expr);
2673 return NULL_TREE;
2676 /* Do any initial processing on the arguments to a function call. */
2678 static tree
2679 resolve_args (tree args)
2681 tree t;
2682 for (t = args; t; t = TREE_CHAIN (t))
2684 tree arg = TREE_VALUE (t);
2686 if (error_operand_p (arg))
2687 return error_mark_node;
2688 else if (VOID_TYPE_P (TREE_TYPE (arg)))
2690 error ("invalid use of void expression");
2691 return error_mark_node;
2694 return args;
2697 /* Perform overload resolution on FN, which is called with the ARGS.
2699 Return the candidate function selected by overload resolution, or
2700 NULL if the event that overload resolution failed. In the case
2701 that overload resolution fails, *CANDIDATES will be the set of
2702 candidates considered, and ANY_VIABLE_P will be set to true or
2703 false to indicate whether or not any of the candidates were
2704 viable.
2706 The ARGS should already have gone through RESOLVE_ARGS before this
2707 function is called. */
2709 static struct z_candidate *
2710 perform_overload_resolution (tree fn,
2711 tree args,
2712 struct z_candidate **candidates,
2713 bool *any_viable_p)
2715 struct z_candidate *cand;
2716 tree explicit_targs = NULL_TREE;
2717 int template_only = 0;
2719 *candidates = NULL;
2720 *any_viable_p = true;
2722 /* Check FN and ARGS. */
2723 gcc_assert (TREE_CODE (fn) == FUNCTION_DECL
2724 || TREE_CODE (fn) == TEMPLATE_DECL
2725 || TREE_CODE (fn) == OVERLOAD
2726 || TREE_CODE (fn) == TEMPLATE_ID_EXPR);
2727 gcc_assert (!args || TREE_CODE (args) == TREE_LIST);
2729 if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
2731 explicit_targs = TREE_OPERAND (fn, 1);
2732 fn = TREE_OPERAND (fn, 0);
2733 template_only = 1;
2736 /* Add the various candidate functions. */
2737 add_candidates (fn, args, explicit_targs, template_only,
2738 /*conversion_path=*/NULL_TREE,
2739 /*access_path=*/NULL_TREE,
2740 LOOKUP_NORMAL,
2741 candidates);
2743 *candidates = splice_viable (*candidates, pedantic, any_viable_p);
2744 if (!*any_viable_p)
2745 return NULL;
2747 cand = tourney (*candidates);
2748 return cand;
2751 /* Return an expression for a call to FN (a namespace-scope function,
2752 or a static member function) with the ARGS. */
2754 tree
2755 build_new_function_call (tree fn, tree args, bool koenig_p)
2757 struct z_candidate *candidates, *cand;
2758 bool any_viable_p;
2759 void *p;
2760 tree result;
2762 args = resolve_args (args);
2763 if (args == error_mark_node)
2764 return error_mark_node;
2766 /* If this function was found without using argument dependent
2767 lookup, then we want to ignore any undeclared friend
2768 functions. */
2769 if (!koenig_p)
2771 tree orig_fn = fn;
2773 fn = remove_hidden_names (fn);
2774 if (!fn)
2776 error ("no matching function for call to %<%D(%A)%>",
2777 DECL_NAME (OVL_CURRENT (orig_fn)), args);
2778 return error_mark_node;
2782 /* Get the high-water mark for the CONVERSION_OBSTACK. */
2783 p = conversion_obstack_alloc (0);
2785 cand = perform_overload_resolution (fn, args, &candidates, &any_viable_p);
2787 if (!cand)
2789 if (!any_viable_p && candidates && ! candidates->next)
2790 return build_function_call (candidates->fn, args);
2791 if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
2792 fn = TREE_OPERAND (fn, 0);
2793 if (!any_viable_p)
2794 error ("no matching function for call to %<%D(%A)%>",
2795 DECL_NAME (OVL_CURRENT (fn)), args);
2796 else
2797 error ("call of overloaded %<%D(%A)%> is ambiguous",
2798 DECL_NAME (OVL_CURRENT (fn)), args);
2799 if (candidates)
2800 print_z_candidates (candidates);
2801 result = error_mark_node;
2803 else
2804 result = build_over_call (cand, LOOKUP_NORMAL);
2806 /* Free all the conversions we allocated. */
2807 obstack_free (&conversion_obstack, p);
2809 return result;
2812 /* Build a call to a global operator new. FNNAME is the name of the
2813 operator (either "operator new" or "operator new[]") and ARGS are
2814 the arguments provided. *SIZE points to the total number of bytes
2815 required by the allocation, and is updated if that is changed here.
2816 *COOKIE_SIZE is non-NULL if a cookie should be used. If this
2817 function determines that no cookie should be used, after all,
2818 *COOKIE_SIZE is set to NULL_TREE. */
2820 tree
2821 build_operator_new_call (tree fnname, tree args, tree *size, tree *cookie_size)
2823 tree fns;
2824 struct z_candidate *candidates;
2825 struct z_candidate *cand;
2826 bool any_viable_p;
2828 args = tree_cons (NULL_TREE, *size, args);
2829 args = resolve_args (args);
2830 if (args == error_mark_node)
2831 return args;
2833 /* Based on:
2835 [expr.new]
2837 If this lookup fails to find the name, or if the allocated type
2838 is not a class type, the allocation function's name is looked
2839 up in the global scope.
2841 we disregard block-scope declarations of "operator new". */
2842 fns = lookup_function_nonclass (fnname, args, /*block_p=*/false);
2844 /* Figure out what function is being called. */
2845 cand = perform_overload_resolution (fns, args, &candidates, &any_viable_p);
2847 /* If no suitable function could be found, issue an error message
2848 and give up. */
2849 if (!cand)
2851 if (!any_viable_p)
2852 error ("no matching function for call to %<%D(%A)%>",
2853 DECL_NAME (OVL_CURRENT (fns)), args);
2854 else
2855 error ("call of overloaded %<%D(%A)%> is ambiguous",
2856 DECL_NAME (OVL_CURRENT (fns)), args);
2857 if (candidates)
2858 print_z_candidates (candidates);
2859 return error_mark_node;
2862 /* If a cookie is required, add some extra space. Whether
2863 or not a cookie is required cannot be determined until
2864 after we know which function was called. */
2865 if (*cookie_size)
2867 bool use_cookie = true;
2868 if (!abi_version_at_least (2))
2870 tree placement = TREE_CHAIN (args);
2871 /* In G++ 3.2, the check was implemented incorrectly; it
2872 looked at the placement expression, rather than the
2873 type of the function. */
2874 if (placement && !TREE_CHAIN (placement)
2875 && same_type_p (TREE_TYPE (TREE_VALUE (placement)),
2876 ptr_type_node))
2877 use_cookie = false;
2879 else
2881 tree arg_types;
2883 arg_types = TYPE_ARG_TYPES (TREE_TYPE (cand->fn));
2884 /* Skip the size_t parameter. */
2885 arg_types = TREE_CHAIN (arg_types);
2886 /* Check the remaining parameters (if any). */
2887 if (arg_types
2888 && TREE_CHAIN (arg_types) == void_list_node
2889 && same_type_p (TREE_VALUE (arg_types),
2890 ptr_type_node))
2891 use_cookie = false;
2893 /* If we need a cookie, adjust the number of bytes allocated. */
2894 if (use_cookie)
2896 /* Update the total size. */
2897 *size = size_binop (PLUS_EXPR, *size, *cookie_size);
2898 /* Update the argument list to reflect the adjusted size. */
2899 TREE_VALUE (args) = *size;
2901 else
2902 *cookie_size = NULL_TREE;
2905 /* Build the CALL_EXPR. */
2906 return build_over_call (cand, LOOKUP_NORMAL);
2909 static tree
2910 build_object_call (tree obj, tree args)
2912 struct z_candidate *candidates = 0, *cand;
2913 tree fns, convs, mem_args = NULL_TREE;
2914 tree type = TREE_TYPE (obj);
2915 bool any_viable_p;
2916 tree result = NULL_TREE;
2917 void *p;
2919 if (TYPE_PTRMEMFUNC_P (type))
2921 /* It's no good looking for an overloaded operator() on a
2922 pointer-to-member-function. */
2923 error ("pointer-to-member function %E cannot be called without an object; consider using .* or ->*", obj);
2924 return error_mark_node;
2927 if (TYPE_BINFO (type))
2929 fns = lookup_fnfields (TYPE_BINFO (type), ansi_opname (CALL_EXPR), 1);
2930 if (fns == error_mark_node)
2931 return error_mark_node;
2933 else
2934 fns = NULL_TREE;
2936 args = resolve_args (args);
2938 if (args == error_mark_node)
2939 return error_mark_node;
2941 /* Get the high-water mark for the CONVERSION_OBSTACK. */
2942 p = conversion_obstack_alloc (0);
2944 if (fns)
2946 tree base = BINFO_TYPE (BASELINK_BINFO (fns));
2947 mem_args = tree_cons (NULL_TREE, build_this (obj), args);
2949 for (fns = BASELINK_FUNCTIONS (fns); fns; fns = OVL_NEXT (fns))
2951 tree fn = OVL_CURRENT (fns);
2952 if (TREE_CODE (fn) == TEMPLATE_DECL)
2953 add_template_candidate (&candidates, fn, base, NULL_TREE,
2954 mem_args, NULL_TREE,
2955 TYPE_BINFO (type),
2956 TYPE_BINFO (type),
2957 LOOKUP_NORMAL, DEDUCE_CALL);
2958 else
2959 add_function_candidate
2960 (&candidates, fn, base, mem_args, TYPE_BINFO (type),
2961 TYPE_BINFO (type), LOOKUP_NORMAL);
2965 convs = lookup_conversions (type);
2967 for (; convs; convs = TREE_CHAIN (convs))
2969 tree fns = TREE_VALUE (convs);
2970 tree totype = TREE_TYPE (TREE_TYPE (OVL_CURRENT (fns)));
2972 if ((TREE_CODE (totype) == POINTER_TYPE
2973 && TREE_CODE (TREE_TYPE (totype)) == FUNCTION_TYPE)
2974 || (TREE_CODE (totype) == REFERENCE_TYPE
2975 && TREE_CODE (TREE_TYPE (totype)) == FUNCTION_TYPE)
2976 || (TREE_CODE (totype) == REFERENCE_TYPE
2977 && TREE_CODE (TREE_TYPE (totype)) == POINTER_TYPE
2978 && TREE_CODE (TREE_TYPE (TREE_TYPE (totype))) == FUNCTION_TYPE))
2979 for (; fns; fns = OVL_NEXT (fns))
2981 tree fn = OVL_CURRENT (fns);
2982 if (TREE_CODE (fn) == TEMPLATE_DECL)
2983 add_template_conv_candidate
2984 (&candidates, fn, obj, args, totype,
2985 /*access_path=*/NULL_TREE,
2986 /*conversion_path=*/NULL_TREE);
2987 else
2988 add_conv_candidate (&candidates, fn, obj, args,
2989 /*conversion_path=*/NULL_TREE,
2990 /*access_path=*/NULL_TREE);
2994 candidates = splice_viable (candidates, pedantic, &any_viable_p);
2995 if (!any_viable_p)
2997 error ("no match for call to %<(%T) (%A)%>", TREE_TYPE (obj), args);
2998 print_z_candidates (candidates);
2999 result = error_mark_node;
3001 else
3003 cand = tourney (candidates);
3004 if (cand == 0)
3006 error ("call of %<(%T) (%A)%> is ambiguous", TREE_TYPE (obj), args);
3007 print_z_candidates (candidates);
3008 result = error_mark_node;
3010 /* Since cand->fn will be a type, not a function, for a conversion
3011 function, we must be careful not to unconditionally look at
3012 DECL_NAME here. */
3013 else if (TREE_CODE (cand->fn) == FUNCTION_DECL
3014 && DECL_OVERLOADED_OPERATOR_P (cand->fn) == CALL_EXPR)
3015 result = build_over_call (cand, LOOKUP_NORMAL);
3016 else
3018 obj = convert_like_with_context (cand->convs[0], obj, cand->fn, -1);
3019 obj = convert_from_reference (obj);
3020 result = build_function_call (obj, args);
3024 /* Free all the conversions we allocated. */
3025 obstack_free (&conversion_obstack, p);
3027 return result;
3030 static void
3031 op_error (enum tree_code code, enum tree_code code2,
3032 tree arg1, tree arg2, tree arg3, const char *problem)
3034 const char *opname;
3036 if (code == MODIFY_EXPR)
3037 opname = assignment_operator_name_info[code2].name;
3038 else
3039 opname = operator_name_info[code].name;
3041 switch (code)
3043 case COND_EXPR:
3044 error ("%s for ternary %<operator?:%> in %<%E ? %E : %E%>",
3045 problem, arg1, arg2, arg3);
3046 break;
3048 case POSTINCREMENT_EXPR:
3049 case POSTDECREMENT_EXPR:
3050 error ("%s for %<operator%s%> in %<%E%s%>", problem, opname, arg1, opname);
3051 break;
3053 case ARRAY_REF:
3054 error ("%s for %<operator[]%> in %<%E[%E]%>", problem, arg1, arg2);
3055 break;
3057 case REALPART_EXPR:
3058 case IMAGPART_EXPR:
3059 error ("%s for %qs in %<%s %E%>", problem, opname, opname, arg1);
3060 break;
3062 default:
3063 if (arg2)
3064 error ("%s for %<operator%s%> in %<%E %s %E%>",
3065 problem, opname, arg1, opname, arg2);
3066 else
3067 error ("%s for %<operator%s%> in %<%s%E%>",
3068 problem, opname, opname, arg1);
3069 break;
3073 /* Return the implicit conversion sequence that could be used to
3074 convert E1 to E2 in [expr.cond]. */
3076 static conversion *
3077 conditional_conversion (tree e1, tree e2)
3079 tree t1 = non_reference (TREE_TYPE (e1));
3080 tree t2 = non_reference (TREE_TYPE (e2));
3081 conversion *conv;
3082 bool good_base;
3084 /* [expr.cond]
3086 If E2 is an lvalue: E1 can be converted to match E2 if E1 can be
3087 implicitly converted (clause _conv_) to the type "reference to
3088 T2", subject to the constraint that in the conversion the
3089 reference must bind directly (_dcl.init.ref_) to E1. */
3090 if (real_lvalue_p (e2))
3092 conv = implicit_conversion (build_reference_type (t2),
3095 /*c_cast_p=*/false,
3096 LOOKUP_NO_TEMP_BIND);
3097 if (conv)
3098 return conv;
3101 /* [expr.cond]
3103 If E1 and E2 have class type, and the underlying class types are
3104 the same or one is a base class of the other: E1 can be converted
3105 to match E2 if the class of T2 is the same type as, or a base
3106 class of, the class of T1, and the cv-qualification of T2 is the
3107 same cv-qualification as, or a greater cv-qualification than, the
3108 cv-qualification of T1. If the conversion is applied, E1 is
3109 changed to an rvalue of type T2 that still refers to the original
3110 source class object (or the appropriate subobject thereof). */
3111 if (CLASS_TYPE_P (t1) && CLASS_TYPE_P (t2)
3112 && ((good_base = DERIVED_FROM_P (t2, t1)) || DERIVED_FROM_P (t1, t2)))
3114 if (good_base && at_least_as_qualified_p (t2, t1))
3116 conv = build_identity_conv (t1, e1);
3117 if (!same_type_p (TYPE_MAIN_VARIANT (t1),
3118 TYPE_MAIN_VARIANT (t2)))
3119 conv = build_conv (ck_base, t2, conv);
3120 else
3121 conv = build_conv (ck_rvalue, t2, conv);
3122 return conv;
3124 else
3125 return NULL;
3127 else
3128 /* [expr.cond]
3130 Otherwise: E1 can be converted to match E2 if E1 can be implicitly
3131 converted to the type that expression E2 would have if E2 were
3132 converted to an rvalue (or the type it has, if E2 is an rvalue). */
3133 return implicit_conversion (t2, t1, e1, /*c_cast_p=*/false,
3134 LOOKUP_NORMAL);
3137 /* Implement [expr.cond]. ARG1, ARG2, and ARG3 are the three
3138 arguments to the conditional expression. */
3140 tree
3141 build_conditional_expr (tree arg1, tree arg2, tree arg3)
3143 tree arg2_type;
3144 tree arg3_type;
3145 tree result = NULL_TREE;
3146 tree result_type = NULL_TREE;
3147 bool lvalue_p = true;
3148 struct z_candidate *candidates = 0;
3149 struct z_candidate *cand;
3150 void *p;
3152 /* As a G++ extension, the second argument to the conditional can be
3153 omitted. (So that `a ? : c' is roughly equivalent to `a ? a :
3154 c'.) If the second operand is omitted, make sure it is
3155 calculated only once. */
3156 if (!arg2)
3158 if (pedantic)
3159 pedwarn ("ISO C++ forbids omitting the middle term of a ?: expression");
3161 /* Make sure that lvalues remain lvalues. See g++.oliva/ext1.C. */
3162 if (real_lvalue_p (arg1))
3163 arg2 = arg1 = stabilize_reference (arg1);
3164 else
3165 arg2 = arg1 = save_expr (arg1);
3168 /* [expr.cond]
3170 The first expr ession is implicitly converted to bool (clause
3171 _conv_). */
3172 arg1 = perform_implicit_conversion (boolean_type_node, arg1);
3174 /* If something has already gone wrong, just pass that fact up the
3175 tree. */
3176 if (error_operand_p (arg1)
3177 || error_operand_p (arg2)
3178 || error_operand_p (arg3))
3179 return error_mark_node;
3181 /* [expr.cond]
3183 If either the second or the third operand has type (possibly
3184 cv-qualified) void, then the lvalue-to-rvalue (_conv.lval_),
3185 array-to-pointer (_conv.array_), and function-to-pointer
3186 (_conv.func_) standard conversions are performed on the second
3187 and third operands. */
3188 arg2_type = TREE_TYPE (arg2);
3189 arg3_type = TREE_TYPE (arg3);
3190 if (VOID_TYPE_P (arg2_type) || VOID_TYPE_P (arg3_type))
3192 /* Do the conversions. We don't these for `void' type arguments
3193 since it can't have any effect and since decay_conversion
3194 does not handle that case gracefully. */
3195 if (!VOID_TYPE_P (arg2_type))
3196 arg2 = decay_conversion (arg2);
3197 if (!VOID_TYPE_P (arg3_type))
3198 arg3 = decay_conversion (arg3);
3199 arg2_type = TREE_TYPE (arg2);
3200 arg3_type = TREE_TYPE (arg3);
3202 /* [expr.cond]
3204 One of the following shall hold:
3206 --The second or the third operand (but not both) is a
3207 throw-expression (_except.throw_); the result is of the
3208 type of the other and is an rvalue.
3210 --Both the second and the third operands have type void; the
3211 result is of type void and is an rvalue.
3213 We must avoid calling force_rvalue for expressions of type
3214 "void" because it will complain that their value is being
3215 used. */
3216 if (TREE_CODE (arg2) == THROW_EXPR
3217 && TREE_CODE (arg3) != THROW_EXPR)
3219 if (!VOID_TYPE_P (arg3_type))
3220 arg3 = force_rvalue (arg3);
3221 arg3_type = TREE_TYPE (arg3);
3222 result_type = arg3_type;
3224 else if (TREE_CODE (arg2) != THROW_EXPR
3225 && TREE_CODE (arg3) == THROW_EXPR)
3227 if (!VOID_TYPE_P (arg2_type))
3228 arg2 = force_rvalue (arg2);
3229 arg2_type = TREE_TYPE (arg2);
3230 result_type = arg2_type;
3232 else if (VOID_TYPE_P (arg2_type) && VOID_TYPE_P (arg3_type))
3233 result_type = void_type_node;
3234 else
3236 error ("%qE has type %<void%> and is not a throw-expression",
3237 VOID_TYPE_P (arg2_type) ? arg2 : arg3);
3238 return error_mark_node;
3241 lvalue_p = false;
3242 goto valid_operands;
3244 /* [expr.cond]
3246 Otherwise, if the second and third operand have different types,
3247 and either has (possibly cv-qualified) class type, an attempt is
3248 made to convert each of those operands to the type of the other. */
3249 else if (!same_type_p (arg2_type, arg3_type)
3250 && (CLASS_TYPE_P (arg2_type) || CLASS_TYPE_P (arg3_type)))
3252 conversion *conv2;
3253 conversion *conv3;
3255 /* Get the high-water mark for the CONVERSION_OBSTACK. */
3256 p = conversion_obstack_alloc (0);
3258 conv2 = conditional_conversion (arg2, arg3);
3259 conv3 = conditional_conversion (arg3, arg2);
3261 /* [expr.cond]
3263 If both can be converted, or one can be converted but the
3264 conversion is ambiguous, the program is ill-formed. If
3265 neither can be converted, the operands are left unchanged and
3266 further checking is performed as described below. If exactly
3267 one conversion is possible, that conversion is applied to the
3268 chosen operand and the converted operand is used in place of
3269 the original operand for the remainder of this section. */
3270 if ((conv2 && !conv2->bad_p
3271 && conv3 && !conv3->bad_p)
3272 || (conv2 && conv2->kind == ck_ambig)
3273 || (conv3 && conv3->kind == ck_ambig))
3275 error ("operands to ?: have different types %qT and %qT",
3276 arg2_type, arg3_type);
3277 result = error_mark_node;
3279 else if (conv2 && (!conv2->bad_p || !conv3))
3281 arg2 = convert_like (conv2, arg2);
3282 arg2 = convert_from_reference (arg2);
3283 arg2_type = TREE_TYPE (arg2);
3285 else if (conv3 && (!conv3->bad_p || !conv2))
3287 arg3 = convert_like (conv3, arg3);
3288 arg3 = convert_from_reference (arg3);
3289 arg3_type = TREE_TYPE (arg3);
3292 /* Free all the conversions we allocated. */
3293 obstack_free (&conversion_obstack, p);
3295 if (result)
3296 return result;
3298 /* If, after the conversion, both operands have class type,
3299 treat the cv-qualification of both operands as if it were the
3300 union of the cv-qualification of the operands.
3302 The standard is not clear about what to do in this
3303 circumstance. For example, if the first operand has type
3304 "const X" and the second operand has a user-defined
3305 conversion to "volatile X", what is the type of the second
3306 operand after this step? Making it be "const X" (matching
3307 the first operand) seems wrong, as that discards the
3308 qualification without actually performing a copy. Leaving it
3309 as "volatile X" seems wrong as that will result in the
3310 conditional expression failing altogether, even though,
3311 according to this step, the one operand could be converted to
3312 the type of the other. */
3313 if ((conv2 || conv3)
3314 && CLASS_TYPE_P (arg2_type)
3315 && TYPE_QUALS (arg2_type) != TYPE_QUALS (arg3_type))
3316 arg2_type = arg3_type =
3317 cp_build_qualified_type (arg2_type,
3318 TYPE_QUALS (arg2_type)
3319 | TYPE_QUALS (arg3_type));
3322 /* [expr.cond]
3324 If the second and third operands are lvalues and have the same
3325 type, the result is of that type and is an lvalue. */
3326 if (real_lvalue_p (arg2)
3327 && real_lvalue_p (arg3)
3328 && same_type_p (arg2_type, arg3_type))
3330 result_type = arg2_type;
3331 goto valid_operands;
3334 /* [expr.cond]
3336 Otherwise, the result is an rvalue. If the second and third
3337 operand do not have the same type, and either has (possibly
3338 cv-qualified) class type, overload resolution is used to
3339 determine the conversions (if any) to be applied to the operands
3340 (_over.match.oper_, _over.built_). */
3341 lvalue_p = false;
3342 if (!same_type_p (arg2_type, arg3_type)
3343 && (CLASS_TYPE_P (arg2_type) || CLASS_TYPE_P (arg3_type)))
3345 tree args[3];
3346 conversion *conv;
3347 bool any_viable_p;
3349 /* Rearrange the arguments so that add_builtin_candidate only has
3350 to know about two args. In build_builtin_candidates, the
3351 arguments are unscrambled. */
3352 args[0] = arg2;
3353 args[1] = arg3;
3354 args[2] = arg1;
3355 add_builtin_candidates (&candidates,
3356 COND_EXPR,
3357 NOP_EXPR,
3358 ansi_opname (COND_EXPR),
3359 args,
3360 LOOKUP_NORMAL);
3362 /* [expr.cond]
3364 If the overload resolution fails, the program is
3365 ill-formed. */
3366 candidates = splice_viable (candidates, pedantic, &any_viable_p);
3367 if (!any_viable_p)
3369 op_error (COND_EXPR, NOP_EXPR, arg1, arg2, arg3, "no match");
3370 print_z_candidates (candidates);
3371 return error_mark_node;
3373 cand = tourney (candidates);
3374 if (!cand)
3376 op_error (COND_EXPR, NOP_EXPR, arg1, arg2, arg3, "no match");
3377 print_z_candidates (candidates);
3378 return error_mark_node;
3381 /* [expr.cond]
3383 Otherwise, the conversions thus determined are applied, and
3384 the converted operands are used in place of the original
3385 operands for the remainder of this section. */
3386 conv = cand->convs[0];
3387 arg1 = convert_like (conv, arg1);
3388 conv = cand->convs[1];
3389 arg2 = convert_like (conv, arg2);
3390 conv = cand->convs[2];
3391 arg3 = convert_like (conv, arg3);
3394 /* [expr.cond]
3396 Lvalue-to-rvalue (_conv.lval_), array-to-pointer (_conv.array_),
3397 and function-to-pointer (_conv.func_) standard conversions are
3398 performed on the second and third operands.
3400 We need to force the lvalue-to-rvalue conversion here for class types,
3401 so we get TARGET_EXPRs; trying to deal with a COND_EXPR of class rvalues
3402 that isn't wrapped with a TARGET_EXPR plays havoc with exception
3403 regions. */
3405 arg2 = force_rvalue (arg2);
3406 if (!CLASS_TYPE_P (arg2_type))
3407 arg2_type = TREE_TYPE (arg2);
3409 arg3 = force_rvalue (arg3);
3410 if (!CLASS_TYPE_P (arg2_type))
3411 arg3_type = TREE_TYPE (arg3);
3413 if (arg2 == error_mark_node || arg3 == error_mark_node)
3414 return error_mark_node;
3416 /* [expr.cond]
3418 After those conversions, one of the following shall hold:
3420 --The second and third operands have the same type; the result is of
3421 that type. */
3422 if (same_type_p (arg2_type, arg3_type))
3423 result_type = arg2_type;
3424 /* [expr.cond]
3426 --The second and third operands have arithmetic or enumeration
3427 type; the usual arithmetic conversions are performed to bring
3428 them to a common type, and the result is of that type. */
3429 else if ((ARITHMETIC_TYPE_P (arg2_type)
3430 || TREE_CODE (arg2_type) == ENUMERAL_TYPE)
3431 && (ARITHMETIC_TYPE_P (arg3_type)
3432 || TREE_CODE (arg3_type) == ENUMERAL_TYPE))
3434 /* In this case, there is always a common type. */
3435 result_type = type_after_usual_arithmetic_conversions (arg2_type,
3436 arg3_type);
3438 if (TREE_CODE (arg2_type) == ENUMERAL_TYPE
3439 && TREE_CODE (arg3_type) == ENUMERAL_TYPE)
3440 warning (0, "enumeral mismatch in conditional expression: %qT vs %qT",
3441 arg2_type, arg3_type);
3442 else if (extra_warnings
3443 && ((TREE_CODE (arg2_type) == ENUMERAL_TYPE
3444 && !same_type_p (arg3_type, type_promotes_to (arg2_type)))
3445 || (TREE_CODE (arg3_type) == ENUMERAL_TYPE
3446 && !same_type_p (arg2_type, type_promotes_to (arg3_type)))))
3447 warning (0, "enumeral and non-enumeral type in conditional expression");
3449 arg2 = perform_implicit_conversion (result_type, arg2);
3450 arg3 = perform_implicit_conversion (result_type, arg3);
3452 /* [expr.cond]
3454 --The second and third operands have pointer type, or one has
3455 pointer type and the other is a null pointer constant; pointer
3456 conversions (_conv.ptr_) and qualification conversions
3457 (_conv.qual_) are performed to bring them to their composite
3458 pointer type (_expr.rel_). The result is of the composite
3459 pointer type.
3461 --The second and third operands have pointer to member type, or
3462 one has pointer to member type and the other is a null pointer
3463 constant; pointer to member conversions (_conv.mem_) and
3464 qualification conversions (_conv.qual_) are performed to bring
3465 them to a common type, whose cv-qualification shall match the
3466 cv-qualification of either the second or the third operand.
3467 The result is of the common type. */
3468 else if ((null_ptr_cst_p (arg2)
3469 && (TYPE_PTR_P (arg3_type) || TYPE_PTR_TO_MEMBER_P (arg3_type)))
3470 || (null_ptr_cst_p (arg3)
3471 && (TYPE_PTR_P (arg2_type) || TYPE_PTR_TO_MEMBER_P (arg2_type)))
3472 || (TYPE_PTR_P (arg2_type) && TYPE_PTR_P (arg3_type))
3473 || (TYPE_PTRMEM_P (arg2_type) && TYPE_PTRMEM_P (arg3_type))
3474 || (TYPE_PTRMEMFUNC_P (arg2_type) && TYPE_PTRMEMFUNC_P (arg3_type)))
3476 result_type = composite_pointer_type (arg2_type, arg3_type, arg2,
3477 arg3, "conditional expression");
3478 if (result_type == error_mark_node)
3479 return error_mark_node;
3480 arg2 = perform_implicit_conversion (result_type, arg2);
3481 arg3 = perform_implicit_conversion (result_type, arg3);
3484 if (!result_type)
3486 error ("operands to ?: have different types %qT and %qT",
3487 arg2_type, arg3_type);
3488 return error_mark_node;
3491 valid_operands:
3492 result = fold_if_not_in_template (build3 (COND_EXPR, result_type, arg1,
3493 arg2, arg3));
3494 /* We can't use result_type below, as fold might have returned a
3495 throw_expr. */
3497 /* Expand both sides into the same slot, hopefully the target of the
3498 ?: expression. We used to check for TARGET_EXPRs here, but now we
3499 sometimes wrap them in NOP_EXPRs so the test would fail. */
3500 if (!lvalue_p && CLASS_TYPE_P (TREE_TYPE (result)))
3501 result = get_target_expr (result);
3503 /* If this expression is an rvalue, but might be mistaken for an
3504 lvalue, we must add a NON_LVALUE_EXPR. */
3505 if (!lvalue_p && real_lvalue_p (result))
3506 result = rvalue (result);
3508 return result;
3511 /* OPERAND is an operand to an expression. Perform necessary steps
3512 required before using it. If OPERAND is NULL_TREE, NULL_TREE is
3513 returned. */
3515 static tree
3516 prep_operand (tree operand)
3518 if (operand)
3520 if (CLASS_TYPE_P (TREE_TYPE (operand))
3521 && CLASSTYPE_TEMPLATE_INSTANTIATION (TREE_TYPE (operand)))
3522 /* Make sure the template type is instantiated now. */
3523 instantiate_class_template (TYPE_MAIN_VARIANT (TREE_TYPE (operand)));
3526 return operand;
3529 /* Add each of the viable functions in FNS (a FUNCTION_DECL or
3530 OVERLOAD) to the CANDIDATES, returning an updated list of
3531 CANDIDATES. The ARGS are the arguments provided to the call,
3532 without any implicit object parameter. The EXPLICIT_TARGS are
3533 explicit template arguments provided. TEMPLATE_ONLY is true if
3534 only template functions should be considered. CONVERSION_PATH,
3535 ACCESS_PATH, and FLAGS are as for add_function_candidate. */
3537 static void
3538 add_candidates (tree fns, tree args,
3539 tree explicit_targs, bool template_only,
3540 tree conversion_path, tree access_path,
3541 int flags,
3542 struct z_candidate **candidates)
3544 tree ctype;
3545 tree non_static_args;
3547 ctype = conversion_path ? BINFO_TYPE (conversion_path) : NULL_TREE;
3548 /* Delay creating the implicit this parameter until it is needed. */
3549 non_static_args = NULL_TREE;
3551 while (fns)
3553 tree fn;
3554 tree fn_args;
3556 fn = OVL_CURRENT (fns);
3557 /* Figure out which set of arguments to use. */
3558 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
3560 /* If this function is a non-static member, prepend the implicit
3561 object parameter. */
3562 if (!non_static_args)
3563 non_static_args = tree_cons (NULL_TREE,
3564 build_this (TREE_VALUE (args)),
3565 TREE_CHAIN (args));
3566 fn_args = non_static_args;
3568 else
3569 /* Otherwise, just use the list of arguments provided. */
3570 fn_args = args;
3572 if (TREE_CODE (fn) == TEMPLATE_DECL)
3573 add_template_candidate (candidates,
3575 ctype,
3576 explicit_targs,
3577 fn_args,
3578 NULL_TREE,
3579 access_path,
3580 conversion_path,
3581 flags,
3582 DEDUCE_CALL);
3583 else if (!template_only)
3584 add_function_candidate (candidates,
3586 ctype,
3587 fn_args,
3588 access_path,
3589 conversion_path,
3590 flags);
3591 fns = OVL_NEXT (fns);
3595 tree
3596 build_new_op (enum tree_code code, int flags, tree arg1, tree arg2, tree arg3,
3597 bool *overloaded_p)
3599 struct z_candidate *candidates = 0, *cand;
3600 tree arglist, fnname;
3601 tree args[3];
3602 tree result = NULL_TREE;
3603 bool result_valid_p = false;
3604 enum tree_code code2 = NOP_EXPR;
3605 conversion *conv;
3606 void *p;
3607 bool strict_p;
3608 bool any_viable_p;
3610 if (error_operand_p (arg1)
3611 || error_operand_p (arg2)
3612 || error_operand_p (arg3))
3613 return error_mark_node;
3615 if (code == MODIFY_EXPR)
3617 code2 = TREE_CODE (arg3);
3618 arg3 = NULL_TREE;
3619 fnname = ansi_assopname (code2);
3621 else
3622 fnname = ansi_opname (code);
3624 arg1 = prep_operand (arg1);
3626 switch (code)
3628 case NEW_EXPR:
3629 case VEC_NEW_EXPR:
3630 case VEC_DELETE_EXPR:
3631 case DELETE_EXPR:
3632 /* Use build_op_new_call and build_op_delete_call instead. */
3633 gcc_unreachable ();
3635 case CALL_EXPR:
3636 return build_object_call (arg1, arg2);
3638 default:
3639 break;
3642 arg2 = prep_operand (arg2);
3643 arg3 = prep_operand (arg3);
3645 if (code == COND_EXPR)
3647 if (arg2 == NULL_TREE
3648 || TREE_CODE (TREE_TYPE (arg2)) == VOID_TYPE
3649 || TREE_CODE (TREE_TYPE (arg3)) == VOID_TYPE
3650 || (! IS_OVERLOAD_TYPE (TREE_TYPE (arg2))
3651 && ! IS_OVERLOAD_TYPE (TREE_TYPE (arg3))))
3652 goto builtin;
3654 else if (! IS_OVERLOAD_TYPE (TREE_TYPE (arg1))
3655 && (! arg2 || ! IS_OVERLOAD_TYPE (TREE_TYPE (arg2))))
3656 goto builtin;
3658 if (code == POSTINCREMENT_EXPR || code == POSTDECREMENT_EXPR)
3659 arg2 = integer_zero_node;
3661 arglist = NULL_TREE;
3662 if (arg3)
3663 arglist = tree_cons (NULL_TREE, arg3, arglist);
3664 if (arg2)
3665 arglist = tree_cons (NULL_TREE, arg2, arglist);
3666 arglist = tree_cons (NULL_TREE, arg1, arglist);
3668 /* Get the high-water mark for the CONVERSION_OBSTACK. */
3669 p = conversion_obstack_alloc (0);
3671 /* Add namespace-scope operators to the list of functions to
3672 consider. */
3673 add_candidates (lookup_function_nonclass (fnname, arglist, /*block_p=*/true),
3674 arglist, NULL_TREE, false, NULL_TREE, NULL_TREE,
3675 flags, &candidates);
3676 /* Add class-member operators to the candidate set. */
3677 if (CLASS_TYPE_P (TREE_TYPE (arg1)))
3679 tree fns;
3681 fns = lookup_fnfields (TREE_TYPE (arg1), fnname, 1);
3682 if (fns == error_mark_node)
3684 result = error_mark_node;
3685 goto user_defined_result_ready;
3687 if (fns)
3688 add_candidates (BASELINK_FUNCTIONS (fns), arglist,
3689 NULL_TREE, false,
3690 BASELINK_BINFO (fns),
3691 TYPE_BINFO (TREE_TYPE (arg1)),
3692 flags, &candidates);
3695 /* Rearrange the arguments for ?: so that add_builtin_candidate only has
3696 to know about two args; a builtin candidate will always have a first
3697 parameter of type bool. We'll handle that in
3698 build_builtin_candidate. */
3699 if (code == COND_EXPR)
3701 args[0] = arg2;
3702 args[1] = arg3;
3703 args[2] = arg1;
3705 else
3707 args[0] = arg1;
3708 args[1] = arg2;
3709 args[2] = NULL_TREE;
3712 add_builtin_candidates (&candidates, code, code2, fnname, args, flags);
3714 switch (code)
3716 case COMPOUND_EXPR:
3717 case ADDR_EXPR:
3718 /* For these, the built-in candidates set is empty
3719 [over.match.oper]/3. We don't want non-strict matches
3720 because exact matches are always possible with built-in
3721 operators. The built-in candidate set for COMPONENT_REF
3722 would be empty too, but since there are no such built-in
3723 operators, we accept non-strict matches for them. */
3724 strict_p = true;
3725 break;
3727 default:
3728 strict_p = pedantic;
3729 break;
3732 candidates = splice_viable (candidates, strict_p, &any_viable_p);
3733 if (!any_viable_p)
3735 switch (code)
3737 case POSTINCREMENT_EXPR:
3738 case POSTDECREMENT_EXPR:
3739 /* Look for an `operator++ (int)'. If they didn't have
3740 one, then we fall back to the old way of doing things. */
3741 if (flags & LOOKUP_COMPLAIN)
3742 pedwarn ("no %<%D(int)%> declared for postfix %qs, "
3743 "trying prefix operator instead",
3744 fnname,
3745 operator_name_info[code].name);
3746 if (code == POSTINCREMENT_EXPR)
3747 code = PREINCREMENT_EXPR;
3748 else
3749 code = PREDECREMENT_EXPR;
3750 result = build_new_op (code, flags, arg1, NULL_TREE, NULL_TREE,
3751 overloaded_p);
3752 break;
3754 /* The caller will deal with these. */
3755 case ADDR_EXPR:
3756 case COMPOUND_EXPR:
3757 case COMPONENT_REF:
3758 result = NULL_TREE;
3759 result_valid_p = true;
3760 break;
3762 default:
3763 if (flags & LOOKUP_COMPLAIN)
3765 op_error (code, code2, arg1, arg2, arg3, "no match");
3766 print_z_candidates (candidates);
3768 result = error_mark_node;
3769 break;
3772 else
3774 cand = tourney (candidates);
3775 if (cand == 0)
3777 if (flags & LOOKUP_COMPLAIN)
3779 op_error (code, code2, arg1, arg2, arg3, "ambiguous overload");
3780 print_z_candidates (candidates);
3782 result = error_mark_node;
3784 else if (TREE_CODE (cand->fn) == FUNCTION_DECL)
3786 if (overloaded_p)
3787 *overloaded_p = true;
3789 result = build_over_call (cand, LOOKUP_NORMAL);
3791 else
3793 /* Give any warnings we noticed during overload resolution. */
3794 if (cand->warnings)
3796 struct candidate_warning *w;
3797 for (w = cand->warnings; w; w = w->next)
3798 joust (cand, w->loser, 1);
3801 /* Check for comparison of different enum types. */
3802 switch (code)
3804 case GT_EXPR:
3805 case LT_EXPR:
3806 case GE_EXPR:
3807 case LE_EXPR:
3808 case EQ_EXPR:
3809 case NE_EXPR:
3810 if (TREE_CODE (TREE_TYPE (arg1)) == ENUMERAL_TYPE
3811 && TREE_CODE (TREE_TYPE (arg2)) == ENUMERAL_TYPE
3812 && (TYPE_MAIN_VARIANT (TREE_TYPE (arg1))
3813 != TYPE_MAIN_VARIANT (TREE_TYPE (arg2))))
3815 warning (0, "comparison between %q#T and %q#T",
3816 TREE_TYPE (arg1), TREE_TYPE (arg2));
3818 break;
3819 default:
3820 break;
3823 /* We need to strip any leading REF_BIND so that bitfields
3824 don't cause errors. This should not remove any important
3825 conversions, because builtins don't apply to class
3826 objects directly. */
3827 conv = cand->convs[0];
3828 if (conv->kind == ck_ref_bind)
3829 conv = conv->u.next;
3830 arg1 = convert_like (conv, arg1);
3831 if (arg2)
3833 conv = cand->convs[1];
3834 if (conv->kind == ck_ref_bind)
3835 conv = conv->u.next;
3836 arg2 = convert_like (conv, arg2);
3838 if (arg3)
3840 conv = cand->convs[2];
3841 if (conv->kind == ck_ref_bind)
3842 conv = conv->u.next;
3843 arg3 = convert_like (conv, arg3);
3848 user_defined_result_ready:
3850 /* Free all the conversions we allocated. */
3851 obstack_free (&conversion_obstack, p);
3853 if (result || result_valid_p)
3854 return result;
3856 builtin:
3857 switch (code)
3859 case MODIFY_EXPR:
3860 return build_modify_expr (arg1, code2, arg2);
3862 case INDIRECT_REF:
3863 return build_indirect_ref (arg1, "unary *");
3865 case PLUS_EXPR:
3866 case MINUS_EXPR:
3867 case MULT_EXPR:
3868 case TRUNC_DIV_EXPR:
3869 case GT_EXPR:
3870 case LT_EXPR:
3871 case GE_EXPR:
3872 case LE_EXPR:
3873 case EQ_EXPR:
3874 case NE_EXPR:
3875 case MAX_EXPR:
3876 case MIN_EXPR:
3877 case LSHIFT_EXPR:
3878 case RSHIFT_EXPR:
3879 case TRUNC_MOD_EXPR:
3880 case BIT_AND_EXPR:
3881 case BIT_IOR_EXPR:
3882 case BIT_XOR_EXPR:
3883 case TRUTH_ANDIF_EXPR:
3884 case TRUTH_ORIF_EXPR:
3885 return cp_build_binary_op (code, arg1, arg2);
3887 case UNARY_PLUS_EXPR:
3888 case NEGATE_EXPR:
3889 case BIT_NOT_EXPR:
3890 case TRUTH_NOT_EXPR:
3891 case PREINCREMENT_EXPR:
3892 case POSTINCREMENT_EXPR:
3893 case PREDECREMENT_EXPR:
3894 case POSTDECREMENT_EXPR:
3895 case REALPART_EXPR:
3896 case IMAGPART_EXPR:
3897 return build_unary_op (code, arg1, candidates != 0);
3899 case ARRAY_REF:
3900 return build_array_ref (arg1, arg2);
3902 case COND_EXPR:
3903 return build_conditional_expr (arg1, arg2, arg3);
3905 case MEMBER_REF:
3906 return build_m_component_ref (build_indirect_ref (arg1, NULL), arg2);
3908 /* The caller will deal with these. */
3909 case ADDR_EXPR:
3910 case COMPONENT_REF:
3911 case COMPOUND_EXPR:
3912 return NULL_TREE;
3914 default:
3915 gcc_unreachable ();
3917 return NULL_TREE;
3920 /* Build a call to operator delete. This has to be handled very specially,
3921 because the restrictions on what signatures match are different from all
3922 other call instances. For a normal delete, only a delete taking (void *)
3923 or (void *, size_t) is accepted. For a placement delete, only an exact
3924 match with the placement new is accepted.
3926 CODE is either DELETE_EXPR or VEC_DELETE_EXPR.
3927 ADDR is the pointer to be deleted.
3928 SIZE is the size of the memory block to be deleted.
3929 GLOBAL_P is true if the delete-expression should not consider
3930 class-specific delete operators.
3931 PLACEMENT is the corresponding placement new call, or NULL_TREE. */
3933 tree
3934 build_op_delete_call (enum tree_code code, tree addr, tree size,
3935 bool global_p, tree placement)
3937 tree fn = NULL_TREE;
3938 tree fns, fnname, argtypes, args, type;
3939 int pass;
3941 if (addr == error_mark_node)
3942 return error_mark_node;
3944 type = strip_array_types (TREE_TYPE (TREE_TYPE (addr)));
3946 fnname = ansi_opname (code);
3948 if (CLASS_TYPE_P (type)
3949 && COMPLETE_TYPE_P (complete_type (type))
3950 && !global_p)
3951 /* In [class.free]
3953 If the result of the lookup is ambiguous or inaccessible, or if
3954 the lookup selects a placement deallocation function, the
3955 program is ill-formed.
3957 Therefore, we ask lookup_fnfields to complain about ambiguity. */
3959 fns = lookup_fnfields (TYPE_BINFO (type), fnname, 1);
3960 if (fns == error_mark_node)
3961 return error_mark_node;
3963 else
3964 fns = NULL_TREE;
3966 if (fns == NULL_TREE)
3967 fns = lookup_name_nonclass (fnname);
3969 if (placement)
3971 tree alloc_fn;
3972 tree call_expr;
3974 /* Find the allocation function that is being called. */
3975 call_expr = placement;
3976 /* Extract the function. */
3977 alloc_fn = get_callee_fndecl (call_expr);
3978 gcc_assert (alloc_fn != NULL_TREE);
3979 /* Then the second parm type. */
3980 argtypes = TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (alloc_fn)));
3981 /* Also the second argument. */
3982 args = TREE_CHAIN (TREE_OPERAND (call_expr, 1));
3984 else
3986 /* First try it without the size argument. */
3987 argtypes = void_list_node;
3988 args = NULL_TREE;
3991 /* Strip const and volatile from addr. */
3992 addr = cp_convert (ptr_type_node, addr);
3994 /* We make two tries at finding a matching `operator delete'. On
3995 the first pass, we look for a one-operator (or placement)
3996 operator delete. If we're not doing placement delete, then on
3997 the second pass we look for a two-argument delete. */
3998 for (pass = 0; pass < (placement ? 1 : 2); ++pass)
4000 /* Go through the `operator delete' functions looking for one
4001 with a matching type. */
4002 for (fn = BASELINK_P (fns) ? BASELINK_FUNCTIONS (fns) : fns;
4004 fn = OVL_NEXT (fn))
4006 tree t;
4008 /* The first argument must be "void *". */
4009 t = TYPE_ARG_TYPES (TREE_TYPE (OVL_CURRENT (fn)));
4010 if (!same_type_p (TREE_VALUE (t), ptr_type_node))
4011 continue;
4012 t = TREE_CHAIN (t);
4013 /* On the first pass, check the rest of the arguments. */
4014 if (pass == 0)
4016 tree a = argtypes;
4017 while (a && t)
4019 if (!same_type_p (TREE_VALUE (a), TREE_VALUE (t)))
4020 break;
4021 a = TREE_CHAIN (a);
4022 t = TREE_CHAIN (t);
4024 if (!a && !t)
4025 break;
4027 /* On the second pass, the second argument must be
4028 "size_t". */
4029 else if (pass == 1
4030 && same_type_p (TREE_VALUE (t), sizetype)
4031 && TREE_CHAIN (t) == void_list_node)
4032 break;
4035 /* If we found a match, we're done. */
4036 if (fn)
4037 break;
4040 /* If we have a matching function, call it. */
4041 if (fn)
4043 /* Make sure we have the actual function, and not an
4044 OVERLOAD. */
4045 fn = OVL_CURRENT (fn);
4047 /* If the FN is a member function, make sure that it is
4048 accessible. */
4049 if (DECL_CLASS_SCOPE_P (fn))
4050 perform_or_defer_access_check (TYPE_BINFO (type), fn);
4052 if (pass == 0)
4053 args = tree_cons (NULL_TREE, addr, args);
4054 else
4055 args = tree_cons (NULL_TREE, addr,
4056 build_tree_list (NULL_TREE, size));
4058 if (placement)
4060 /* The placement args might not be suitable for overload
4061 resolution at this point, so build the call directly. */
4062 mark_used (fn);
4063 return build_cxx_call (fn, args);
4065 else
4066 return build_function_call (fn, args);
4069 /* If we are doing placement delete we do nothing if we don't find a
4070 matching op delete. */
4071 if (placement)
4072 return NULL_TREE;
4074 error ("no suitable %<operator %s%> for %qT",
4075 operator_name_info[(int)code].name, type);
4076 return error_mark_node;
4079 /* If the current scope isn't allowed to access DECL along
4080 BASETYPE_PATH, give an error. The most derived class in
4081 BASETYPE_PATH is the one used to qualify DECL. */
4083 bool
4084 enforce_access (tree basetype_path, tree decl)
4086 gcc_assert (TREE_CODE (basetype_path) == TREE_BINFO);
4088 if (!accessible_p (basetype_path, decl, true))
4090 if (TREE_PRIVATE (decl))
4091 error ("%q+#D is private", decl);
4092 else if (TREE_PROTECTED (decl))
4093 error ("%q+#D is protected", decl);
4094 else
4095 error ("%q+#D is inaccessible", decl);
4096 error ("within this context");
4097 return false;
4100 return true;
4103 /* Check that a callable constructor to initialize a temporary of
4104 TYPE from an EXPR exists. */
4106 static void
4107 check_constructor_callable (tree type, tree expr)
4109 build_special_member_call (NULL_TREE,
4110 complete_ctor_identifier,
4111 build_tree_list (NULL_TREE, expr),
4112 type,
4113 LOOKUP_NORMAL | LOOKUP_ONLYCONVERTING
4114 | LOOKUP_NO_CONVERSION
4115 | LOOKUP_CONSTRUCTOR_CALLABLE);
4118 /* Initialize a temporary of type TYPE with EXPR. The FLAGS are a
4119 bitwise or of LOOKUP_* values. If any errors are warnings are
4120 generated, set *DIAGNOSTIC_FN to "error" or "warning",
4121 respectively. If no diagnostics are generated, set *DIAGNOSTIC_FN
4122 to NULL. */
4124 static tree
4125 build_temp (tree expr, tree type, int flags,
4126 diagnostic_fn_t *diagnostic_fn)
4128 int savew, savee;
4130 savew = warningcount, savee = errorcount;
4131 expr = build_special_member_call (NULL_TREE,
4132 complete_ctor_identifier,
4133 build_tree_list (NULL_TREE, expr),
4134 type, flags);
4135 if (warningcount > savew)
4136 *diagnostic_fn = warning0;
4137 else if (errorcount > savee)
4138 *diagnostic_fn = error;
4139 else
4140 *diagnostic_fn = NULL;
4141 return expr;
4145 /* Perform the conversions in CONVS on the expression EXPR. FN and
4146 ARGNUM are used for diagnostics. ARGNUM is zero based, -1
4147 indicates the `this' argument of a method. INNER is nonzero when
4148 being called to continue a conversion chain. It is negative when a
4149 reference binding will be applied, positive otherwise. If
4150 ISSUE_CONVERSION_WARNINGS is true, warnings about suspicious
4151 conversions will be emitted if appropriate. If C_CAST_P is true,
4152 this conversion is coming from a C-style cast; in that case,
4153 conversions to inaccessible bases are permitted. */
4155 static tree
4156 convert_like_real (conversion *convs, tree expr, tree fn, int argnum,
4157 int inner, bool issue_conversion_warnings,
4158 bool c_cast_p)
4160 tree totype = convs->type;
4161 diagnostic_fn_t diagnostic_fn;
4163 if (convs->bad_p
4164 && convs->kind != ck_user
4165 && convs->kind != ck_ambig
4166 && convs->kind != ck_ref_bind)
4168 conversion *t = convs;
4169 for (; t; t = convs->u.next)
4171 if (t->kind == ck_user || !t->bad_p)
4173 expr = convert_like_real (t, expr, fn, argnum, 1,
4174 /*issue_conversion_warnings=*/false,
4175 /*c_cast_p=*/false);
4176 break;
4178 else if (t->kind == ck_ambig)
4179 return convert_like_real (t, expr, fn, argnum, 1,
4180 /*issue_conversion_warnings=*/false,
4181 /*c_cast_p=*/false);
4182 else if (t->kind == ck_identity)
4183 break;
4185 pedwarn ("invalid conversion from %qT to %qT", TREE_TYPE (expr), totype);
4186 if (fn)
4187 pedwarn (" initializing argument %P of %qD", argnum, fn);
4188 return cp_convert (totype, expr);
4191 if (issue_conversion_warnings)
4193 tree t = non_reference (totype);
4195 /* Issue warnings about peculiar, but valid, uses of NULL. */
4196 if (ARITHMETIC_TYPE_P (t) && expr == null_node)
4198 if (fn)
4199 warning (OPT_Wconversion, "passing NULL to non-pointer argument %P of %qD",
4200 argnum, fn);
4201 else
4202 warning (OPT_Wconversion, "converting to non-pointer type %qT from NULL", t);
4205 /* Warn about assigning a floating-point type to an integer type. */
4206 if (TREE_CODE (TREE_TYPE (expr)) == REAL_TYPE
4207 && TREE_CODE (t) == INTEGER_TYPE)
4209 if (fn)
4210 warning (OPT_Wconversion, "passing %qT for argument %P to %qD",
4211 TREE_TYPE (expr), argnum, fn);
4212 else
4213 warning (OPT_Wconversion, "converting to %qT from %qT", t, TREE_TYPE (expr));
4217 switch (convs->kind)
4219 case ck_user:
4221 struct z_candidate *cand = convs->cand;
4222 tree convfn = cand->fn;
4223 tree args;
4225 if (DECL_CONSTRUCTOR_P (convfn))
4227 tree t = build_int_cst (build_pointer_type (DECL_CONTEXT (convfn)),
4230 args = build_tree_list (NULL_TREE, expr);
4231 /* We should never try to call the abstract or base constructor
4232 from here. */
4233 gcc_assert (!DECL_HAS_IN_CHARGE_PARM_P (convfn)
4234 && !DECL_HAS_VTT_PARM_P (convfn));
4235 args = tree_cons (NULL_TREE, t, args);
4237 else
4238 args = build_this (expr);
4239 expr = build_over_call (cand, LOOKUP_NORMAL);
4241 /* If this is a constructor or a function returning an aggr type,
4242 we need to build up a TARGET_EXPR. */
4243 if (DECL_CONSTRUCTOR_P (convfn))
4244 expr = build_cplus_new (totype, expr);
4246 /* The result of the call is then used to direct-initialize the object
4247 that is the destination of the copy-initialization. [dcl.init]
4249 Note that this step is not reflected in the conversion sequence;
4250 it affects the semantics when we actually perform the
4251 conversion, but is not considered during overload resolution.
4253 If the target is a class, that means call a ctor. */
4254 if (IS_AGGR_TYPE (totype)
4255 && (inner >= 0 || !lvalue_p (expr)))
4257 expr = (build_temp
4258 (expr, totype,
4259 /* Core issue 84, now a DR, says that we don't
4260 allow UDCs for these args (which deliberately
4261 breaks copy-init of an auto_ptr<Base> from an
4262 auto_ptr<Derived>). */
4263 LOOKUP_NORMAL|LOOKUP_ONLYCONVERTING|LOOKUP_NO_CONVERSION,
4264 &diagnostic_fn));
4266 if (diagnostic_fn)
4268 if (fn)
4269 diagnostic_fn
4270 (" initializing argument %P of %qD from result of %qD",
4271 argnum, fn, convfn);
4272 else
4273 diagnostic_fn
4274 (" initializing temporary from result of %qD", convfn);
4276 expr = build_cplus_new (totype, expr);
4278 return expr;
4280 case ck_identity:
4281 if (type_unknown_p (expr))
4282 expr = instantiate_type (totype, expr, tf_warning_or_error);
4283 /* Convert a constant to its underlying value, unless we are
4284 about to bind it to a reference, in which case we need to
4285 leave it as an lvalue. */
4286 if (inner >= 0)
4287 expr = decl_constant_value (expr);
4288 if (convs->check_copy_constructor_p)
4289 check_constructor_callable (totype, expr);
4290 return expr;
4291 case ck_ambig:
4292 /* Call build_user_type_conversion again for the error. */
4293 return build_user_type_conversion
4294 (totype, convs->u.expr, LOOKUP_NORMAL);
4296 default:
4297 break;
4300 expr = convert_like_real (convs->u.next, expr, fn, argnum,
4301 convs->kind == ck_ref_bind ? -1 : 1,
4302 /*issue_conversion_warnings=*/false,
4303 c_cast_p);
4304 if (expr == error_mark_node)
4305 return error_mark_node;
4307 switch (convs->kind)
4309 case ck_rvalue:
4310 if (! IS_AGGR_TYPE (totype))
4311 return expr;
4312 /* Else fall through. */
4313 case ck_base:
4314 if (convs->kind == ck_base && !convs->need_temporary_p)
4316 /* We are going to bind a reference directly to a base-class
4317 subobject of EXPR. */
4318 if (convs->check_copy_constructor_p)
4319 check_constructor_callable (TREE_TYPE (expr), expr);
4320 /* Build an expression for `*((base*) &expr)'. */
4321 expr = build_unary_op (ADDR_EXPR, expr, 0);
4322 expr = convert_to_base (expr, build_pointer_type (totype),
4323 !c_cast_p, /*nonnull=*/true);
4324 expr = build_indirect_ref (expr, "implicit conversion");
4325 return expr;
4328 /* Copy-initialization where the cv-unqualified version of the source
4329 type is the same class as, or a derived class of, the class of the
4330 destination [is treated as direct-initialization]. [dcl.init] */
4331 expr = build_temp (expr, totype, LOOKUP_NORMAL|LOOKUP_ONLYCONVERTING,
4332 &diagnostic_fn);
4333 if (diagnostic_fn && fn)
4334 diagnostic_fn (" initializing argument %P of %qD", argnum, fn);
4335 return build_cplus_new (totype, expr);
4337 case ck_ref_bind:
4339 tree ref_type = totype;
4341 /* If necessary, create a temporary. */
4342 if (convs->need_temporary_p || !lvalue_p (expr))
4344 tree type = convs->u.next->type;
4345 cp_lvalue_kind lvalue = real_lvalue_p (expr);
4347 if (!CP_TYPE_CONST_NON_VOLATILE_P (TREE_TYPE (ref_type)))
4349 /* If the reference is volatile or non-const, we
4350 cannot create a temporary. */
4351 if (lvalue & clk_bitfield)
4352 error ("cannot bind bitfield %qE to %qT",
4353 expr, ref_type);
4354 else if (lvalue & clk_packed)
4355 error ("cannot bind packed field %qE to %qT",
4356 expr, ref_type);
4357 else
4358 error ("cannot bind rvalue %qE to %qT", expr, ref_type);
4359 return error_mark_node;
4361 /* If the source is a packed field, and we must use a copy
4362 constructor, then building the target expr will require
4363 binding the field to the reference parameter to the
4364 copy constructor, and we'll end up with an infinite
4365 loop. If we can use a bitwise copy, then we'll be
4366 OK. */
4367 if ((lvalue & clk_packed)
4368 && CLASS_TYPE_P (type)
4369 && !TYPE_HAS_TRIVIAL_INIT_REF (type))
4371 error ("cannot bind packed field %qE to %qT",
4372 expr, ref_type);
4373 return error_mark_node;
4375 expr = build_target_expr_with_type (expr, type);
4378 /* Take the address of the thing to which we will bind the
4379 reference. */
4380 expr = build_unary_op (ADDR_EXPR, expr, 1);
4381 if (expr == error_mark_node)
4382 return error_mark_node;
4384 /* Convert it to a pointer to the type referred to by the
4385 reference. This will adjust the pointer if a derived to
4386 base conversion is being performed. */
4387 expr = cp_convert (build_pointer_type (TREE_TYPE (ref_type)),
4388 expr);
4389 /* Convert the pointer to the desired reference type. */
4390 return build_nop (ref_type, expr);
4393 case ck_lvalue:
4394 return decay_conversion (expr);
4396 case ck_qual:
4397 /* Warn about deprecated conversion if appropriate. */
4398 string_conv_p (totype, expr, 1);
4399 break;
4401 case ck_ptr:
4402 if (convs->base_p)
4403 expr = convert_to_base (expr, totype, !c_cast_p,
4404 /*nonnull=*/false);
4405 return build_nop (totype, expr);
4407 case ck_pmem:
4408 return convert_ptrmem (totype, expr, /*allow_inverse_p=*/false,
4409 c_cast_p);
4411 default:
4412 break;
4415 if (issue_conversion_warnings)
4416 expr = convert_and_check (totype, expr);
4417 else
4418 expr = convert (totype, expr);
4420 return expr;
4423 /* Build a call to __builtin_trap. */
4425 static tree
4426 call_builtin_trap (void)
4428 tree fn = implicit_built_in_decls[BUILT_IN_TRAP];
4430 gcc_assert (fn != NULL);
4431 fn = build_call (fn, NULL_TREE);
4432 return fn;
4435 /* ARG is being passed to a varargs function. Perform any conversions
4436 required. Return the converted value. */
4438 tree
4439 convert_arg_to_ellipsis (tree arg)
4441 /* [expr.call]
4443 The lvalue-to-rvalue, array-to-pointer, and function-to-pointer
4444 standard conversions are performed. */
4445 arg = decay_conversion (arg);
4446 /* [expr.call]
4448 If the argument has integral or enumeration type that is subject
4449 to the integral promotions (_conv.prom_), or a floating point
4450 type that is subject to the floating point promotion
4451 (_conv.fpprom_), the value of the argument is converted to the
4452 promoted type before the call. */
4453 if (TREE_CODE (TREE_TYPE (arg)) == REAL_TYPE
4454 && (TYPE_PRECISION (TREE_TYPE (arg))
4455 < TYPE_PRECISION (double_type_node)))
4456 arg = convert_to_real (double_type_node, arg);
4457 else if (INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (arg)))
4458 arg = perform_integral_promotions (arg);
4460 arg = require_complete_type (arg);
4462 if (arg != error_mark_node
4463 && !pod_type_p (TREE_TYPE (arg)))
4465 /* Undefined behavior [expr.call] 5.2.2/7. We used to just warn
4466 here and do a bitwise copy, but now cp_expr_size will abort if we
4467 try to do that.
4468 If the call appears in the context of a sizeof expression,
4469 there is no need to emit a warning, since the expression won't be
4470 evaluated. We keep the builtin_trap just as a safety check. */
4471 if (!skip_evaluation)
4472 warning (0, "cannot pass objects of non-POD type %q#T through %<...%>; "
4473 "call will abort at runtime", TREE_TYPE (arg));
4474 arg = call_builtin_trap ();
4475 arg = build2 (COMPOUND_EXPR, integer_type_node, arg,
4476 integer_zero_node);
4479 return arg;
4482 /* va_arg (EXPR, TYPE) is a builtin. Make sure it is not abused. */
4484 tree
4485 build_x_va_arg (tree expr, tree type)
4487 if (processing_template_decl)
4488 return build_min (VA_ARG_EXPR, type, expr);
4490 type = complete_type_or_else (type, NULL_TREE);
4492 if (expr == error_mark_node || !type)
4493 return error_mark_node;
4495 if (! pod_type_p (type))
4497 /* Undefined behavior [expr.call] 5.2.2/7. */
4498 warning (0, "cannot receive objects of non-POD type %q#T through %<...%>; "
4499 "call will abort at runtime", type);
4500 expr = convert (build_pointer_type (type), null_node);
4501 expr = build2 (COMPOUND_EXPR, TREE_TYPE (expr),
4502 call_builtin_trap (), expr);
4503 expr = build_indirect_ref (expr, NULL);
4504 return expr;
4507 return build_va_arg (expr, type);
4510 /* TYPE has been given to va_arg. Apply the default conversions which
4511 would have happened when passed via ellipsis. Return the promoted
4512 type, or the passed type if there is no change. */
4514 tree
4515 cxx_type_promotes_to (tree type)
4517 tree promote;
4519 /* Perform the array-to-pointer and function-to-pointer
4520 conversions. */
4521 type = type_decays_to (type);
4523 promote = type_promotes_to (type);
4524 if (same_type_p (type, promote))
4525 promote = type;
4527 return promote;
4530 /* ARG is a default argument expression being passed to a parameter of
4531 the indicated TYPE, which is a parameter to FN. Do any required
4532 conversions. Return the converted value. */
4534 tree
4535 convert_default_arg (tree type, tree arg, tree fn, int parmnum)
4537 /* If the ARG is an unparsed default argument expression, the
4538 conversion cannot be performed. */
4539 if (TREE_CODE (arg) == DEFAULT_ARG)
4541 error ("the default argument for parameter %d of %qD has "
4542 "not yet been parsed",
4543 parmnum, fn);
4544 return error_mark_node;
4547 if (fn && DECL_TEMPLATE_INFO (fn))
4548 arg = tsubst_default_argument (fn, type, arg);
4550 arg = break_out_target_exprs (arg);
4552 if (TREE_CODE (arg) == CONSTRUCTOR)
4554 arg = digest_init (type, arg);
4555 arg = convert_for_initialization (0, type, arg, LOOKUP_NORMAL,
4556 "default argument", fn, parmnum);
4558 else
4560 /* This could get clobbered by the following call. */
4561 if (TREE_HAS_CONSTRUCTOR (arg))
4562 arg = copy_node (arg);
4564 arg = convert_for_initialization (0, type, arg, LOOKUP_NORMAL,
4565 "default argument", fn, parmnum);
4566 arg = convert_for_arg_passing (type, arg);
4569 return arg;
4572 /* Returns the type which will really be used for passing an argument of
4573 type TYPE. */
4575 tree
4576 type_passed_as (tree type)
4578 /* Pass classes with copy ctors by invisible reference. */
4579 if (TREE_ADDRESSABLE (type))
4581 type = build_reference_type (type);
4582 /* There are no other pointers to this temporary. */
4583 type = build_qualified_type (type, TYPE_QUAL_RESTRICT);
4585 else if (targetm.calls.promote_prototypes (type)
4586 && INTEGRAL_TYPE_P (type)
4587 && COMPLETE_TYPE_P (type)
4588 && INT_CST_LT_UNSIGNED (TYPE_SIZE (type),
4589 TYPE_SIZE (integer_type_node)))
4590 type = integer_type_node;
4592 return type;
4595 /* Actually perform the appropriate conversion. */
4597 tree
4598 convert_for_arg_passing (tree type, tree val)
4600 if (val == error_mark_node)
4602 /* Pass classes with copy ctors by invisible reference. */
4603 else if (TREE_ADDRESSABLE (type))
4604 val = build1 (ADDR_EXPR, build_reference_type (type), val);
4605 else if (targetm.calls.promote_prototypes (type)
4606 && INTEGRAL_TYPE_P (type)
4607 && COMPLETE_TYPE_P (type)
4608 && INT_CST_LT_UNSIGNED (TYPE_SIZE (type),
4609 TYPE_SIZE (integer_type_node)))
4610 val = perform_integral_promotions (val);
4611 if (warn_missing_format_attribute)
4613 tree rhstype = TREE_TYPE (val);
4614 const enum tree_code coder = TREE_CODE (rhstype);
4615 const enum tree_code codel = TREE_CODE (type);
4616 if ((codel == POINTER_TYPE || codel == REFERENCE_TYPE)
4617 && coder == codel
4618 && check_missing_format_attribute (type, rhstype))
4619 warning (OPT_Wmissing_format_attribute,
4620 "argument of function call might be a candidate for a format attribute");
4622 return val;
4625 /* Returns true iff FN is a function with magic varargs, i.e. ones for
4626 which no conversions at all should be done. This is true for some
4627 builtins which don't act like normal functions. */
4629 static bool
4630 magic_varargs_p (tree fn)
4632 if (DECL_BUILT_IN (fn))
4633 switch (DECL_FUNCTION_CODE (fn))
4635 case BUILT_IN_CLASSIFY_TYPE:
4636 case BUILT_IN_CONSTANT_P:
4637 case BUILT_IN_NEXT_ARG:
4638 case BUILT_IN_STDARG_START:
4639 case BUILT_IN_VA_START:
4640 return true;
4642 default:;
4645 return false;
4648 /* Subroutine of the various build_*_call functions. Overload resolution
4649 has chosen a winning candidate CAND; build up a CALL_EXPR accordingly.
4650 ARGS is a TREE_LIST of the unconverted arguments to the call. FLAGS is a
4651 bitmask of various LOOKUP_* flags which apply to the call itself. */
4653 static tree
4654 build_over_call (struct z_candidate *cand, int flags)
4656 tree fn = cand->fn;
4657 tree args = cand->args;
4658 conversion **convs = cand->convs;
4659 conversion *conv;
4660 tree converted_args = NULL_TREE;
4661 tree parm = TYPE_ARG_TYPES (TREE_TYPE (fn));
4662 tree arg, val;
4663 int i = 0;
4664 int is_method = 0;
4666 /* In a template, there is no need to perform all of the work that
4667 is normally done. We are only interested in the type of the call
4668 expression, i.e., the return type of the function. Any semantic
4669 errors will be deferred until the template is instantiated. */
4670 if (processing_template_decl)
4672 tree expr;
4673 tree return_type;
4674 return_type = TREE_TYPE (TREE_TYPE (fn));
4675 expr = build3 (CALL_EXPR, return_type, fn, args, NULL_TREE);
4676 if (TREE_THIS_VOLATILE (fn) && cfun)
4677 current_function_returns_abnormally = 1;
4678 if (!VOID_TYPE_P (return_type))
4679 require_complete_type (return_type);
4680 return convert_from_reference (expr);
4683 /* Give any warnings we noticed during overload resolution. */
4684 if (cand->warnings)
4686 struct candidate_warning *w;
4687 for (w = cand->warnings; w; w = w->next)
4688 joust (cand, w->loser, 1);
4691 if (DECL_FUNCTION_MEMBER_P (fn))
4693 /* If FN is a template function, two cases must be considered.
4694 For example:
4696 struct A {
4697 protected:
4698 template <class T> void f();
4700 template <class T> struct B {
4701 protected:
4702 void g();
4704 struct C : A, B<int> {
4705 using A::f; // #1
4706 using B<int>::g; // #2
4709 In case #1 where `A::f' is a member template, DECL_ACCESS is
4710 recorded in the primary template but not in its specialization.
4711 We check access of FN using its primary template.
4713 In case #2, where `B<int>::g' has a DECL_TEMPLATE_INFO simply
4714 because it is a member of class template B, DECL_ACCESS is
4715 recorded in the specialization `B<int>::g'. We cannot use its
4716 primary template because `B<T>::g' and `B<int>::g' may have
4717 different access. */
4718 if (DECL_TEMPLATE_INFO (fn)
4719 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (fn)))
4720 perform_or_defer_access_check (cand->access_path,
4721 DECL_TI_TEMPLATE (fn));
4722 else
4723 perform_or_defer_access_check (cand->access_path, fn);
4726 if (args && TREE_CODE (args) != TREE_LIST)
4727 args = build_tree_list (NULL_TREE, args);
4728 arg = args;
4730 /* The implicit parameters to a constructor are not considered by overload
4731 resolution, and must be of the proper type. */
4732 if (DECL_CONSTRUCTOR_P (fn))
4734 converted_args = tree_cons (NULL_TREE, TREE_VALUE (arg), converted_args);
4735 arg = TREE_CHAIN (arg);
4736 parm = TREE_CHAIN (parm);
4737 /* We should never try to call the abstract constructor. */
4738 gcc_assert (!DECL_HAS_IN_CHARGE_PARM_P (fn));
4740 if (DECL_HAS_VTT_PARM_P (fn))
4742 converted_args = tree_cons
4743 (NULL_TREE, TREE_VALUE (arg), converted_args);
4744 arg = TREE_CHAIN (arg);
4745 parm = TREE_CHAIN (parm);
4748 /* Bypass access control for 'this' parameter. */
4749 else if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
4751 tree parmtype = TREE_VALUE (parm);
4752 tree argtype = TREE_TYPE (TREE_VALUE (arg));
4753 tree converted_arg;
4754 tree base_binfo;
4756 if (convs[i]->bad_p)
4757 pedwarn ("passing %qT as %<this%> argument of %q#D discards qualifiers",
4758 TREE_TYPE (argtype), fn);
4760 /* [class.mfct.nonstatic]: If a nonstatic member function of a class
4761 X is called for an object that is not of type X, or of a type
4762 derived from X, the behavior is undefined.
4764 So we can assume that anything passed as 'this' is non-null, and
4765 optimize accordingly. */
4766 gcc_assert (TREE_CODE (parmtype) == POINTER_TYPE);
4767 /* Convert to the base in which the function was declared. */
4768 gcc_assert (cand->conversion_path != NULL_TREE);
4769 converted_arg = build_base_path (PLUS_EXPR,
4770 TREE_VALUE (arg),
4771 cand->conversion_path,
4773 /* Check that the base class is accessible. */
4774 if (!accessible_base_p (TREE_TYPE (argtype),
4775 BINFO_TYPE (cand->conversion_path), true))
4776 error ("%qT is not an accessible base of %qT",
4777 BINFO_TYPE (cand->conversion_path),
4778 TREE_TYPE (argtype));
4779 /* If fn was found by a using declaration, the conversion path
4780 will be to the derived class, not the base declaring fn. We
4781 must convert from derived to base. */
4782 base_binfo = lookup_base (TREE_TYPE (TREE_TYPE (converted_arg)),
4783 TREE_TYPE (parmtype), ba_unique, NULL);
4784 converted_arg = build_base_path (PLUS_EXPR, converted_arg,
4785 base_binfo, 1);
4787 converted_args = tree_cons (NULL_TREE, converted_arg, converted_args);
4788 parm = TREE_CHAIN (parm);
4789 arg = TREE_CHAIN (arg);
4790 ++i;
4791 is_method = 1;
4794 for (; arg && parm;
4795 parm = TREE_CHAIN (parm), arg = TREE_CHAIN (arg), ++i)
4797 tree type = TREE_VALUE (parm);
4799 conv = convs[i];
4800 val = convert_like_with_context
4801 (conv, TREE_VALUE (arg), fn, i - is_method);
4803 val = convert_for_arg_passing (type, val);
4804 converted_args = tree_cons (NULL_TREE, val, converted_args);
4807 /* Default arguments */
4808 for (; parm && parm != void_list_node; parm = TREE_CHAIN (parm), i++)
4809 converted_args
4810 = tree_cons (NULL_TREE,
4811 convert_default_arg (TREE_VALUE (parm),
4812 TREE_PURPOSE (parm),
4813 fn, i - is_method),
4814 converted_args);
4816 /* Ellipsis */
4817 for (; arg; arg = TREE_CHAIN (arg))
4819 tree a = TREE_VALUE (arg);
4820 if (magic_varargs_p (fn))
4821 /* Do no conversions for magic varargs. */;
4822 else
4823 a = convert_arg_to_ellipsis (a);
4824 converted_args = tree_cons (NULL_TREE, a, converted_args);
4827 converted_args = nreverse (converted_args);
4829 check_function_arguments (TYPE_ATTRIBUTES (TREE_TYPE (fn)),
4830 converted_args, TYPE_ARG_TYPES (TREE_TYPE (fn)));
4832 /* Avoid actually calling copy constructors and copy assignment operators,
4833 if possible. */
4835 if (! flag_elide_constructors)
4836 /* Do things the hard way. */;
4837 else if (cand->num_convs == 1 && DECL_COPY_CONSTRUCTOR_P (fn))
4839 tree targ;
4840 arg = skip_artificial_parms_for (fn, converted_args);
4841 arg = TREE_VALUE (arg);
4843 /* Pull out the real argument, disregarding const-correctness. */
4844 targ = arg;
4845 while (TREE_CODE (targ) == NOP_EXPR
4846 || TREE_CODE (targ) == NON_LVALUE_EXPR
4847 || TREE_CODE (targ) == CONVERT_EXPR)
4848 targ = TREE_OPERAND (targ, 0);
4849 if (TREE_CODE (targ) == ADDR_EXPR)
4851 targ = TREE_OPERAND (targ, 0);
4852 if (!same_type_ignoring_top_level_qualifiers_p
4853 (TREE_TYPE (TREE_TYPE (arg)), TREE_TYPE (targ)))
4854 targ = NULL_TREE;
4856 else
4857 targ = NULL_TREE;
4859 if (targ)
4860 arg = targ;
4861 else
4862 arg = build_indirect_ref (arg, 0);
4864 /* [class.copy]: the copy constructor is implicitly defined even if
4865 the implementation elided its use. */
4866 if (TYPE_HAS_COMPLEX_INIT_REF (DECL_CONTEXT (fn)))
4867 mark_used (fn);
4869 /* If we're creating a temp and we already have one, don't create a
4870 new one. If we're not creating a temp but we get one, use
4871 INIT_EXPR to collapse the temp into our target. Otherwise, if the
4872 ctor is trivial, do a bitwise copy with a simple TARGET_EXPR for a
4873 temp or an INIT_EXPR otherwise. */
4874 if (integer_zerop (TREE_VALUE (args)))
4876 if (TREE_CODE (arg) == TARGET_EXPR)
4877 return arg;
4878 else if (TYPE_HAS_TRIVIAL_INIT_REF (DECL_CONTEXT (fn)))
4879 return build_target_expr_with_type (arg, DECL_CONTEXT (fn));
4881 else if (TREE_CODE (arg) == TARGET_EXPR
4882 || TYPE_HAS_TRIVIAL_INIT_REF (DECL_CONTEXT (fn)))
4884 tree to = stabilize_reference
4885 (build_indirect_ref (TREE_VALUE (args), 0));
4887 val = build2 (INIT_EXPR, DECL_CONTEXT (fn), to, arg);
4888 return val;
4891 else if (DECL_OVERLOADED_OPERATOR_P (fn) == NOP_EXPR
4892 && copy_fn_p (fn)
4893 && TYPE_HAS_TRIVIAL_ASSIGN_REF (DECL_CONTEXT (fn)))
4895 tree to = stabilize_reference
4896 (build_indirect_ref (TREE_VALUE (converted_args), 0));
4897 tree type = TREE_TYPE (to);
4898 tree as_base = CLASSTYPE_AS_BASE (type);
4900 arg = TREE_VALUE (TREE_CHAIN (converted_args));
4901 if (tree_int_cst_equal (TYPE_SIZE (type), TYPE_SIZE (as_base)))
4903 arg = build_indirect_ref (arg, 0);
4904 val = build2 (MODIFY_EXPR, TREE_TYPE (to), to, arg);
4906 else
4908 /* We must only copy the non-tail padding parts.
4909 Use __builtin_memcpy for the bitwise copy. */
4911 tree args, t;
4913 args = tree_cons (NULL, TYPE_SIZE_UNIT (as_base), NULL);
4914 args = tree_cons (NULL, arg, args);
4915 t = build_unary_op (ADDR_EXPR, to, 0);
4916 args = tree_cons (NULL, t, args);
4917 t = implicit_built_in_decls[BUILT_IN_MEMCPY];
4918 t = build_call (t, args);
4920 t = convert (TREE_TYPE (TREE_VALUE (args)), t);
4921 val = build_indirect_ref (t, 0);
4924 return val;
4927 mark_used (fn);
4929 if (DECL_VINDEX (fn) && (flags & LOOKUP_NONVIRTUAL) == 0)
4931 tree t, *p = &TREE_VALUE (converted_args);
4932 tree binfo = lookup_base (TREE_TYPE (TREE_TYPE (*p)),
4933 DECL_CONTEXT (fn),
4934 ba_any, NULL);
4935 gcc_assert (binfo && binfo != error_mark_node);
4937 *p = build_base_path (PLUS_EXPR, *p, binfo, 1);
4938 if (TREE_SIDE_EFFECTS (*p))
4939 *p = save_expr (*p);
4940 t = build_pointer_type (TREE_TYPE (fn));
4941 if (DECL_CONTEXT (fn) && TYPE_JAVA_INTERFACE (DECL_CONTEXT (fn)))
4942 fn = build_java_interface_fn_ref (fn, *p);
4943 else
4944 fn = build_vfn_ref (*p, DECL_VINDEX (fn));
4945 TREE_TYPE (fn) = t;
4947 else if (DECL_INLINE (fn))
4948 fn = inline_conversion (fn);
4949 else
4950 fn = build_addr_func (fn);
4952 return build_cxx_call (fn, converted_args);
4955 /* Build and return a call to FN, using ARGS. This function performs
4956 no overload resolution, conversion, or other high-level
4957 operations. */
4959 tree
4960 build_cxx_call (tree fn, tree args)
4962 tree fndecl;
4964 fn = build_call (fn, args);
4966 /* If this call might throw an exception, note that fact. */
4967 fndecl = get_callee_fndecl (fn);
4968 if ((!fndecl || !TREE_NOTHROW (fndecl))
4969 && at_function_scope_p ()
4970 && cfun)
4971 cp_function_chain->can_throw = 1;
4973 /* Some built-in function calls will be evaluated at compile-time in
4974 fold (). */
4975 fn = fold_if_not_in_template (fn);
4977 if (VOID_TYPE_P (TREE_TYPE (fn)))
4978 return fn;
4980 fn = require_complete_type (fn);
4981 if (fn == error_mark_node)
4982 return error_mark_node;
4984 if (IS_AGGR_TYPE (TREE_TYPE (fn)))
4985 fn = build_cplus_new (TREE_TYPE (fn), fn);
4986 return convert_from_reference (fn);
4989 static GTY(()) tree java_iface_lookup_fn;
4991 /* Make an expression which yields the address of the Java interface
4992 method FN. This is achieved by generating a call to libjava's
4993 _Jv_LookupInterfaceMethodIdx(). */
4995 static tree
4996 build_java_interface_fn_ref (tree fn, tree instance)
4998 tree lookup_args, lookup_fn, method, idx;
4999 tree klass_ref, iface, iface_ref;
5000 int i;
5002 if (!java_iface_lookup_fn)
5004 tree endlink = build_void_list_node ();
5005 tree t = tree_cons (NULL_TREE, ptr_type_node,
5006 tree_cons (NULL_TREE, ptr_type_node,
5007 tree_cons (NULL_TREE, java_int_type_node,
5008 endlink)));
5009 java_iface_lookup_fn
5010 = builtin_function ("_Jv_LookupInterfaceMethodIdx",
5011 build_function_type (ptr_type_node, t),
5012 0, NOT_BUILT_IN, NULL, NULL_TREE);
5015 /* Look up the pointer to the runtime java.lang.Class object for `instance'.
5016 This is the first entry in the vtable. */
5017 klass_ref = build_vtbl_ref (build_indirect_ref (instance, 0),
5018 integer_zero_node);
5020 /* Get the java.lang.Class pointer for the interface being called. */
5021 iface = DECL_CONTEXT (fn);
5022 iface_ref = lookup_field (iface, get_identifier ("class$"), 0, false);
5023 if (!iface_ref || TREE_CODE (iface_ref) != VAR_DECL
5024 || DECL_CONTEXT (iface_ref) != iface)
5026 error ("could not find class$ field in java interface type %qT",
5027 iface);
5028 return error_mark_node;
5030 iface_ref = build_address (iface_ref);
5031 iface_ref = convert (build_pointer_type (iface), iface_ref);
5033 /* Determine the itable index of FN. */
5034 i = 1;
5035 for (method = TYPE_METHODS (iface); method; method = TREE_CHAIN (method))
5037 if (!DECL_VIRTUAL_P (method))
5038 continue;
5039 if (fn == method)
5040 break;
5041 i++;
5043 idx = build_int_cst (NULL_TREE, i);
5045 lookup_args = tree_cons (NULL_TREE, klass_ref,
5046 tree_cons (NULL_TREE, iface_ref,
5047 build_tree_list (NULL_TREE, idx)));
5048 lookup_fn = build1 (ADDR_EXPR,
5049 build_pointer_type (TREE_TYPE (java_iface_lookup_fn)),
5050 java_iface_lookup_fn);
5051 return build3 (CALL_EXPR, ptr_type_node, lookup_fn, lookup_args, NULL_TREE);
5054 /* Returns the value to use for the in-charge parameter when making a
5055 call to a function with the indicated NAME.
5057 FIXME:Can't we find a neater way to do this mapping? */
5059 tree
5060 in_charge_arg_for_name (tree name)
5062 if (name == base_ctor_identifier
5063 || name == base_dtor_identifier)
5064 return integer_zero_node;
5065 else if (name == complete_ctor_identifier)
5066 return integer_one_node;
5067 else if (name == complete_dtor_identifier)
5068 return integer_two_node;
5069 else if (name == deleting_dtor_identifier)
5070 return integer_three_node;
5072 /* This function should only be called with one of the names listed
5073 above. */
5074 gcc_unreachable ();
5075 return NULL_TREE;
5078 /* Build a call to a constructor, destructor, or an assignment
5079 operator for INSTANCE, an expression with class type. NAME
5080 indicates the special member function to call; ARGS are the
5081 arguments. BINFO indicates the base of INSTANCE that is to be
5082 passed as the `this' parameter to the member function called.
5084 FLAGS are the LOOKUP_* flags to use when processing the call.
5086 If NAME indicates a complete object constructor, INSTANCE may be
5087 NULL_TREE. In this case, the caller will call build_cplus_new to
5088 store the newly constructed object into a VAR_DECL. */
5090 tree
5091 build_special_member_call (tree instance, tree name, tree args,
5092 tree binfo, int flags)
5094 tree fns;
5095 /* The type of the subobject to be constructed or destroyed. */
5096 tree class_type;
5098 gcc_assert (name == complete_ctor_identifier
5099 || name == base_ctor_identifier
5100 || name == complete_dtor_identifier
5101 || name == base_dtor_identifier
5102 || name == deleting_dtor_identifier
5103 || name == ansi_assopname (NOP_EXPR));
5104 if (TYPE_P (binfo))
5106 /* Resolve the name. */
5107 if (!complete_type_or_else (binfo, NULL_TREE))
5108 return error_mark_node;
5110 binfo = TYPE_BINFO (binfo);
5113 gcc_assert (binfo != NULL_TREE);
5115 class_type = BINFO_TYPE (binfo);
5117 /* Handle the special case where INSTANCE is NULL_TREE. */
5118 if (name == complete_ctor_identifier && !instance)
5120 instance = build_int_cst (build_pointer_type (class_type), 0);
5121 instance = build1 (INDIRECT_REF, class_type, instance);
5123 else
5125 if (name == complete_dtor_identifier
5126 || name == base_dtor_identifier
5127 || name == deleting_dtor_identifier)
5128 gcc_assert (args == NULL_TREE);
5130 /* Convert to the base class, if necessary. */
5131 if (!same_type_ignoring_top_level_qualifiers_p
5132 (TREE_TYPE (instance), BINFO_TYPE (binfo)))
5134 if (name != ansi_assopname (NOP_EXPR))
5135 /* For constructors and destructors, either the base is
5136 non-virtual, or it is virtual but we are doing the
5137 conversion from a constructor or destructor for the
5138 complete object. In either case, we can convert
5139 statically. */
5140 instance = convert_to_base_statically (instance, binfo);
5141 else
5142 /* However, for assignment operators, we must convert
5143 dynamically if the base is virtual. */
5144 instance = build_base_path (PLUS_EXPR, instance,
5145 binfo, /*nonnull=*/1);
5149 gcc_assert (instance != NULL_TREE);
5151 fns = lookup_fnfields (binfo, name, 1);
5153 /* When making a call to a constructor or destructor for a subobject
5154 that uses virtual base classes, pass down a pointer to a VTT for
5155 the subobject. */
5156 if ((name == base_ctor_identifier
5157 || name == base_dtor_identifier)
5158 && CLASSTYPE_VBASECLASSES (class_type))
5160 tree vtt;
5161 tree sub_vtt;
5163 /* If the current function is a complete object constructor
5164 or destructor, then we fetch the VTT directly.
5165 Otherwise, we look it up using the VTT we were given. */
5166 vtt = TREE_CHAIN (CLASSTYPE_VTABLES (current_class_type));
5167 vtt = decay_conversion (vtt);
5168 vtt = build3 (COND_EXPR, TREE_TYPE (vtt),
5169 build2 (EQ_EXPR, boolean_type_node,
5170 current_in_charge_parm, integer_zero_node),
5171 current_vtt_parm,
5172 vtt);
5173 gcc_assert (BINFO_SUBVTT_INDEX (binfo));
5174 sub_vtt = build2 (PLUS_EXPR, TREE_TYPE (vtt), vtt,
5175 BINFO_SUBVTT_INDEX (binfo));
5177 args = tree_cons (NULL_TREE, sub_vtt, args);
5180 return build_new_method_call (instance, fns, args,
5181 TYPE_BINFO (BINFO_TYPE (binfo)),
5182 flags);
5185 /* Return the NAME, as a C string. The NAME indicates a function that
5186 is a member of TYPE. *FREE_P is set to true if the caller must
5187 free the memory returned.
5189 Rather than go through all of this, we should simply set the names
5190 of constructors and destructors appropriately, and dispense with
5191 ctor_identifier, dtor_identifier, etc. */
5193 static char *
5194 name_as_c_string (tree name, tree type, bool *free_p)
5196 char *pretty_name;
5198 /* Assume that we will not allocate memory. */
5199 *free_p = false;
5200 /* Constructors and destructors are special. */
5201 if (IDENTIFIER_CTOR_OR_DTOR_P (name))
5203 pretty_name
5204 = (char *) IDENTIFIER_POINTER (constructor_name (type));
5205 /* For a destructor, add the '~'. */
5206 if (name == complete_dtor_identifier
5207 || name == base_dtor_identifier
5208 || name == deleting_dtor_identifier)
5210 pretty_name = concat ("~", pretty_name, NULL);
5211 /* Remember that we need to free the memory allocated. */
5212 *free_p = true;
5215 else if (IDENTIFIER_TYPENAME_P (name))
5217 pretty_name = concat ("operator ",
5218 type_as_string (TREE_TYPE (name),
5219 TFF_PLAIN_IDENTIFIER),
5220 NULL);
5221 /* Remember that we need to free the memory allocated. */
5222 *free_p = true;
5224 else
5225 pretty_name = (char *) IDENTIFIER_POINTER (name);
5227 return pretty_name;
5230 /* Build a call to "INSTANCE.FN (ARGS)". */
5232 tree
5233 build_new_method_call (tree instance, tree fns, tree args,
5234 tree conversion_path, int flags)
5236 struct z_candidate *candidates = 0, *cand;
5237 tree explicit_targs = NULL_TREE;
5238 tree basetype = NULL_TREE;
5239 tree access_binfo;
5240 tree optype;
5241 tree mem_args = NULL_TREE, instance_ptr;
5242 tree name;
5243 tree user_args;
5244 tree call;
5245 tree fn;
5246 tree class_type;
5247 int template_only = 0;
5248 bool any_viable_p;
5249 tree orig_instance;
5250 tree orig_fns;
5251 tree orig_args;
5252 void *p;
5254 gcc_assert (instance != NULL_TREE);
5256 if (error_operand_p (instance)
5257 || error_operand_p (fns)
5258 || args == error_mark_node)
5259 return error_mark_node;
5261 if (!BASELINK_P (fns))
5263 error ("call to non-function %qD", fns);
5264 return error_mark_node;
5267 orig_instance = instance;
5268 orig_fns = fns;
5269 orig_args = args;
5271 /* Dismantle the baselink to collect all the information we need. */
5272 if (!conversion_path)
5273 conversion_path = BASELINK_BINFO (fns);
5274 access_binfo = BASELINK_ACCESS_BINFO (fns);
5275 optype = BASELINK_OPTYPE (fns);
5276 fns = BASELINK_FUNCTIONS (fns);
5277 if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
5279 explicit_targs = TREE_OPERAND (fns, 1);
5280 fns = TREE_OPERAND (fns, 0);
5281 template_only = 1;
5283 gcc_assert (TREE_CODE (fns) == FUNCTION_DECL
5284 || TREE_CODE (fns) == TEMPLATE_DECL
5285 || TREE_CODE (fns) == OVERLOAD);
5286 fn = get_first_fn (fns);
5287 name = DECL_NAME (fn);
5289 basetype = TYPE_MAIN_VARIANT (TREE_TYPE (instance));
5290 gcc_assert (CLASS_TYPE_P (basetype));
5292 if (processing_template_decl)
5294 instance = build_non_dependent_expr (instance);
5295 args = build_non_dependent_args (orig_args);
5298 /* The USER_ARGS are the arguments we will display to users if an
5299 error occurs. The USER_ARGS should not include any
5300 compiler-generated arguments. The "this" pointer hasn't been
5301 added yet. However, we must remove the VTT pointer if this is a
5302 call to a base-class constructor or destructor. */
5303 user_args = args;
5304 if (IDENTIFIER_CTOR_OR_DTOR_P (name))
5306 /* Callers should explicitly indicate whether they want to construct
5307 the complete object or just the part without virtual bases. */
5308 gcc_assert (name != ctor_identifier);
5309 /* Similarly for destructors. */
5310 gcc_assert (name != dtor_identifier);
5311 /* Remove the VTT pointer, if present. */
5312 if ((name == base_ctor_identifier || name == base_dtor_identifier)
5313 && CLASSTYPE_VBASECLASSES (basetype))
5314 user_args = TREE_CHAIN (user_args);
5317 /* Process the argument list. */
5318 args = resolve_args (args);
5319 if (args == error_mark_node)
5320 return error_mark_node;
5322 instance_ptr = build_this (instance);
5324 /* It's OK to call destructors on cv-qualified objects. Therefore,
5325 convert the INSTANCE_PTR to the unqualified type, if necessary. */
5326 if (DECL_DESTRUCTOR_P (fn))
5328 tree type = build_pointer_type (basetype);
5329 if (!same_type_p (type, TREE_TYPE (instance_ptr)))
5330 instance_ptr = build_nop (type, instance_ptr);
5331 name = complete_dtor_identifier;
5334 class_type = (conversion_path ? BINFO_TYPE (conversion_path) : NULL_TREE);
5335 mem_args = tree_cons (NULL_TREE, instance_ptr, args);
5337 /* Get the high-water mark for the CONVERSION_OBSTACK. */
5338 p = conversion_obstack_alloc (0);
5340 for (fn = fns; fn; fn = OVL_NEXT (fn))
5342 tree t = OVL_CURRENT (fn);
5343 tree this_arglist;
5345 /* We can end up here for copy-init of same or base class. */
5346 if ((flags & LOOKUP_ONLYCONVERTING)
5347 && DECL_NONCONVERTING_P (t))
5348 continue;
5350 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (t))
5351 this_arglist = mem_args;
5352 else
5353 this_arglist = args;
5355 if (TREE_CODE (t) == TEMPLATE_DECL)
5356 /* A member template. */
5357 add_template_candidate (&candidates, t,
5358 class_type,
5359 explicit_targs,
5360 this_arglist, optype,
5361 access_binfo,
5362 conversion_path,
5363 flags,
5364 DEDUCE_CALL);
5365 else if (! template_only)
5366 add_function_candidate (&candidates, t,
5367 class_type,
5368 this_arglist,
5369 access_binfo,
5370 conversion_path,
5371 flags);
5374 candidates = splice_viable (candidates, pedantic, &any_viable_p);
5375 if (!any_viable_p)
5377 if (!COMPLETE_TYPE_P (basetype))
5378 cxx_incomplete_type_error (instance_ptr, basetype);
5379 else
5381 char *pretty_name;
5382 bool free_p;
5384 pretty_name = name_as_c_string (name, basetype, &free_p);
5385 error ("no matching function for call to %<%T::%s(%A)%#V%>",
5386 basetype, pretty_name, user_args,
5387 TREE_TYPE (TREE_TYPE (instance_ptr)));
5388 if (free_p)
5389 free (pretty_name);
5391 print_z_candidates (candidates);
5392 call = error_mark_node;
5394 else
5396 cand = tourney (candidates);
5397 if (cand == 0)
5399 char *pretty_name;
5400 bool free_p;
5402 pretty_name = name_as_c_string (name, basetype, &free_p);
5403 error ("call of overloaded %<%s(%A)%> is ambiguous", pretty_name,
5404 user_args);
5405 print_z_candidates (candidates);
5406 if (free_p)
5407 free (pretty_name);
5408 call = error_mark_node;
5410 else
5412 if (!(flags & LOOKUP_NONVIRTUAL)
5413 && DECL_PURE_VIRTUAL_P (cand->fn)
5414 && instance == current_class_ref
5415 && (DECL_CONSTRUCTOR_P (current_function_decl)
5416 || DECL_DESTRUCTOR_P (current_function_decl)))
5417 /* This is not an error, it is runtime undefined
5418 behavior. */
5419 warning (0, (DECL_CONSTRUCTOR_P (current_function_decl) ?
5420 "abstract virtual %q#D called from constructor"
5421 : "abstract virtual %q#D called from destructor"),
5422 cand->fn);
5424 if (TREE_CODE (TREE_TYPE (cand->fn)) == METHOD_TYPE
5425 && is_dummy_object (instance_ptr))
5427 error ("cannot call member function %qD without object",
5428 cand->fn);
5429 call = error_mark_node;
5431 else
5433 if (DECL_VINDEX (cand->fn) && ! (flags & LOOKUP_NONVIRTUAL)
5434 && resolves_to_fixed_type_p (instance, 0))
5435 flags |= LOOKUP_NONVIRTUAL;
5437 call = build_over_call (cand, flags);
5439 /* In an expression of the form `a->f()' where `f' turns
5440 out to be a static member function, `a' is
5441 none-the-less evaluated. */
5442 if (TREE_CODE (TREE_TYPE (cand->fn)) != METHOD_TYPE
5443 && !is_dummy_object (instance_ptr)
5444 && TREE_SIDE_EFFECTS (instance))
5445 call = build2 (COMPOUND_EXPR, TREE_TYPE (call),
5446 instance, call);
5451 if (processing_template_decl && call != error_mark_node)
5452 call = (build_min_non_dep
5453 (CALL_EXPR, call,
5454 build_min_nt (COMPONENT_REF, orig_instance, orig_fns, NULL_TREE),
5455 orig_args, NULL_TREE));
5457 /* Free all the conversions we allocated. */
5458 obstack_free (&conversion_obstack, p);
5460 return call;
5463 /* Returns true iff standard conversion sequence ICS1 is a proper
5464 subsequence of ICS2. */
5466 static bool
5467 is_subseq (conversion *ics1, conversion *ics2)
5469 /* We can assume that a conversion of the same code
5470 between the same types indicates a subsequence since we only get
5471 here if the types we are converting from are the same. */
5473 while (ics1->kind == ck_rvalue
5474 || ics1->kind == ck_lvalue)
5475 ics1 = ics1->u.next;
5477 while (1)
5479 while (ics2->kind == ck_rvalue
5480 || ics2->kind == ck_lvalue)
5481 ics2 = ics2->u.next;
5483 if (ics2->kind == ck_user
5484 || ics2->kind == ck_ambig
5485 || ics2->kind == ck_identity)
5486 /* At this point, ICS1 cannot be a proper subsequence of
5487 ICS2. We can get a USER_CONV when we are comparing the
5488 second standard conversion sequence of two user conversion
5489 sequences. */
5490 return false;
5492 ics2 = ics2->u.next;
5494 if (ics2->kind == ics1->kind
5495 && same_type_p (ics2->type, ics1->type)
5496 && same_type_p (ics2->u.next->type,
5497 ics1->u.next->type))
5498 return true;
5502 /* Returns nonzero iff DERIVED is derived from BASE. The inputs may
5503 be any _TYPE nodes. */
5505 bool
5506 is_properly_derived_from (tree derived, tree base)
5508 if (!IS_AGGR_TYPE_CODE (TREE_CODE (derived))
5509 || !IS_AGGR_TYPE_CODE (TREE_CODE (base)))
5510 return false;
5512 /* We only allow proper derivation here. The DERIVED_FROM_P macro
5513 considers every class derived from itself. */
5514 return (!same_type_ignoring_top_level_qualifiers_p (derived, base)
5515 && DERIVED_FROM_P (base, derived));
5518 /* We build the ICS for an implicit object parameter as a pointer
5519 conversion sequence. However, such a sequence should be compared
5520 as if it were a reference conversion sequence. If ICS is the
5521 implicit conversion sequence for an implicit object parameter,
5522 modify it accordingly. */
5524 static void
5525 maybe_handle_implicit_object (conversion **ics)
5527 if ((*ics)->this_p)
5529 /* [over.match.funcs]
5531 For non-static member functions, the type of the
5532 implicit object parameter is "reference to cv X"
5533 where X is the class of which the function is a
5534 member and cv is the cv-qualification on the member
5535 function declaration. */
5536 conversion *t = *ics;
5537 tree reference_type;
5539 /* The `this' parameter is a pointer to a class type. Make the
5540 implicit conversion talk about a reference to that same class
5541 type. */
5542 reference_type = TREE_TYPE (t->type);
5543 reference_type = build_reference_type (reference_type);
5545 if (t->kind == ck_qual)
5546 t = t->u.next;
5547 if (t->kind == ck_ptr)
5548 t = t->u.next;
5549 t = build_identity_conv (TREE_TYPE (t->type), NULL_TREE);
5550 t = direct_reference_binding (reference_type, t);
5551 *ics = t;
5555 /* If *ICS is a REF_BIND set *ICS to the remainder of the conversion,
5556 and return the type to which the reference refers. Otherwise,
5557 leave *ICS unchanged and return NULL_TREE. */
5559 static tree
5560 maybe_handle_ref_bind (conversion **ics)
5562 if ((*ics)->kind == ck_ref_bind)
5564 conversion *old_ics = *ics;
5565 tree type = TREE_TYPE (old_ics->type);
5566 *ics = old_ics->u.next;
5567 (*ics)->user_conv_p = old_ics->user_conv_p;
5568 (*ics)->bad_p = old_ics->bad_p;
5569 return type;
5572 return NULL_TREE;
5575 /* Compare two implicit conversion sequences according to the rules set out in
5576 [over.ics.rank]. Return values:
5578 1: ics1 is better than ics2
5579 -1: ics2 is better than ics1
5580 0: ics1 and ics2 are indistinguishable */
5582 static int
5583 compare_ics (conversion *ics1, conversion *ics2)
5585 tree from_type1;
5586 tree from_type2;
5587 tree to_type1;
5588 tree to_type2;
5589 tree deref_from_type1 = NULL_TREE;
5590 tree deref_from_type2 = NULL_TREE;
5591 tree deref_to_type1 = NULL_TREE;
5592 tree deref_to_type2 = NULL_TREE;
5593 conversion_rank rank1, rank2;
5595 /* REF_BINDING is nonzero if the result of the conversion sequence
5596 is a reference type. In that case TARGET_TYPE is the
5597 type referred to by the reference. */
5598 tree target_type1;
5599 tree target_type2;
5601 /* Handle implicit object parameters. */
5602 maybe_handle_implicit_object (&ics1);
5603 maybe_handle_implicit_object (&ics2);
5605 /* Handle reference parameters. */
5606 target_type1 = maybe_handle_ref_bind (&ics1);
5607 target_type2 = maybe_handle_ref_bind (&ics2);
5609 /* [over.ics.rank]
5611 When comparing the basic forms of implicit conversion sequences (as
5612 defined in _over.best.ics_)
5614 --a standard conversion sequence (_over.ics.scs_) is a better
5615 conversion sequence than a user-defined conversion sequence
5616 or an ellipsis conversion sequence, and
5618 --a user-defined conversion sequence (_over.ics.user_) is a
5619 better conversion sequence than an ellipsis conversion sequence
5620 (_over.ics.ellipsis_). */
5621 rank1 = CONVERSION_RANK (ics1);
5622 rank2 = CONVERSION_RANK (ics2);
5624 if (rank1 > rank2)
5625 return -1;
5626 else if (rank1 < rank2)
5627 return 1;
5629 if (rank1 == cr_bad)
5631 /* XXX Isn't this an extension? */
5632 /* Both ICS are bad. We try to make a decision based on what
5633 would have happened if they'd been good. */
5634 if (ics1->user_conv_p > ics2->user_conv_p
5635 || ics1->rank > ics2->rank)
5636 return -1;
5637 else if (ics1->user_conv_p < ics2->user_conv_p
5638 || ics1->rank < ics2->rank)
5639 return 1;
5641 /* We couldn't make up our minds; try to figure it out below. */
5644 if (ics1->ellipsis_p)
5645 /* Both conversions are ellipsis conversions. */
5646 return 0;
5648 /* User-defined conversion sequence U1 is a better conversion sequence
5649 than another user-defined conversion sequence U2 if they contain the
5650 same user-defined conversion operator or constructor and if the sec-
5651 ond standard conversion sequence of U1 is better than the second
5652 standard conversion sequence of U2. */
5654 if (ics1->user_conv_p)
5656 conversion *t1;
5657 conversion *t2;
5659 for (t1 = ics1; t1->kind != ck_user; t1 = t1->u.next)
5660 if (t1->kind == ck_ambig)
5661 return 0;
5662 for (t2 = ics2; t2->kind != ck_user; t2 = t2->u.next)
5663 if (t2->kind == ck_ambig)
5664 return 0;
5666 if (t1->cand->fn != t2->cand->fn)
5667 return 0;
5669 /* We can just fall through here, after setting up
5670 FROM_TYPE1 and FROM_TYPE2. */
5671 from_type1 = t1->type;
5672 from_type2 = t2->type;
5674 else
5676 conversion *t1;
5677 conversion *t2;
5679 /* We're dealing with two standard conversion sequences.
5681 [over.ics.rank]
5683 Standard conversion sequence S1 is a better conversion
5684 sequence than standard conversion sequence S2 if
5686 --S1 is a proper subsequence of S2 (comparing the conversion
5687 sequences in the canonical form defined by _over.ics.scs_,
5688 excluding any Lvalue Transformation; the identity
5689 conversion sequence is considered to be a subsequence of
5690 any non-identity conversion sequence */
5692 t1 = ics1;
5693 while (t1->kind != ck_identity)
5694 t1 = t1->u.next;
5695 from_type1 = t1->type;
5697 t2 = ics2;
5698 while (t2->kind != ck_identity)
5699 t2 = t2->u.next;
5700 from_type2 = t2->type;
5703 if (same_type_p (from_type1, from_type2))
5705 if (is_subseq (ics1, ics2))
5706 return 1;
5707 if (is_subseq (ics2, ics1))
5708 return -1;
5710 /* Otherwise, one sequence cannot be a subsequence of the other; they
5711 don't start with the same type. This can happen when comparing the
5712 second standard conversion sequence in two user-defined conversion
5713 sequences. */
5715 /* [over.ics.rank]
5717 Or, if not that,
5719 --the rank of S1 is better than the rank of S2 (by the rules
5720 defined below):
5722 Standard conversion sequences are ordered by their ranks: an Exact
5723 Match is a better conversion than a Promotion, which is a better
5724 conversion than a Conversion.
5726 Two conversion sequences with the same rank are indistinguishable
5727 unless one of the following rules applies:
5729 --A conversion that is not a conversion of a pointer, or pointer
5730 to member, to bool is better than another conversion that is such
5731 a conversion.
5733 The ICS_STD_RANK automatically handles the pointer-to-bool rule,
5734 so that we do not have to check it explicitly. */
5735 if (ics1->rank < ics2->rank)
5736 return 1;
5737 else if (ics2->rank < ics1->rank)
5738 return -1;
5740 to_type1 = ics1->type;
5741 to_type2 = ics2->type;
5743 if (TYPE_PTR_P (from_type1)
5744 && TYPE_PTR_P (from_type2)
5745 && TYPE_PTR_P (to_type1)
5746 && TYPE_PTR_P (to_type2))
5748 deref_from_type1 = TREE_TYPE (from_type1);
5749 deref_from_type2 = TREE_TYPE (from_type2);
5750 deref_to_type1 = TREE_TYPE (to_type1);
5751 deref_to_type2 = TREE_TYPE (to_type2);
5753 /* The rules for pointers to members A::* are just like the rules
5754 for pointers A*, except opposite: if B is derived from A then
5755 A::* converts to B::*, not vice versa. For that reason, we
5756 switch the from_ and to_ variables here. */
5757 else if ((TYPE_PTRMEM_P (from_type1) && TYPE_PTRMEM_P (from_type2)
5758 && TYPE_PTRMEM_P (to_type1) && TYPE_PTRMEM_P (to_type2))
5759 || (TYPE_PTRMEMFUNC_P (from_type1)
5760 && TYPE_PTRMEMFUNC_P (from_type2)
5761 && TYPE_PTRMEMFUNC_P (to_type1)
5762 && TYPE_PTRMEMFUNC_P (to_type2)))
5764 deref_to_type1 = TYPE_PTRMEM_CLASS_TYPE (from_type1);
5765 deref_to_type2 = TYPE_PTRMEM_CLASS_TYPE (from_type2);
5766 deref_from_type1 = TYPE_PTRMEM_CLASS_TYPE (to_type1);
5767 deref_from_type2 = TYPE_PTRMEM_CLASS_TYPE (to_type2);
5770 if (deref_from_type1 != NULL_TREE
5771 && IS_AGGR_TYPE_CODE (TREE_CODE (deref_from_type1))
5772 && IS_AGGR_TYPE_CODE (TREE_CODE (deref_from_type2)))
5774 /* This was one of the pointer or pointer-like conversions.
5776 [over.ics.rank]
5778 --If class B is derived directly or indirectly from class A,
5779 conversion of B* to A* is better than conversion of B* to
5780 void*, and conversion of A* to void* is better than
5781 conversion of B* to void*. */
5782 if (TREE_CODE (deref_to_type1) == VOID_TYPE
5783 && TREE_CODE (deref_to_type2) == VOID_TYPE)
5785 if (is_properly_derived_from (deref_from_type1,
5786 deref_from_type2))
5787 return -1;
5788 else if (is_properly_derived_from (deref_from_type2,
5789 deref_from_type1))
5790 return 1;
5792 else if (TREE_CODE (deref_to_type1) == VOID_TYPE
5793 || TREE_CODE (deref_to_type2) == VOID_TYPE)
5795 if (same_type_p (deref_from_type1, deref_from_type2))
5797 if (TREE_CODE (deref_to_type2) == VOID_TYPE)
5799 if (is_properly_derived_from (deref_from_type1,
5800 deref_to_type1))
5801 return 1;
5803 /* We know that DEREF_TO_TYPE1 is `void' here. */
5804 else if (is_properly_derived_from (deref_from_type1,
5805 deref_to_type2))
5806 return -1;
5809 else if (IS_AGGR_TYPE_CODE (TREE_CODE (deref_to_type1))
5810 && IS_AGGR_TYPE_CODE (TREE_CODE (deref_to_type2)))
5812 /* [over.ics.rank]
5814 --If class B is derived directly or indirectly from class A
5815 and class C is derived directly or indirectly from B,
5817 --conversion of C* to B* is better than conversion of C* to
5820 --conversion of B* to A* is better than conversion of C* to
5821 A* */
5822 if (same_type_p (deref_from_type1, deref_from_type2))
5824 if (is_properly_derived_from (deref_to_type1,
5825 deref_to_type2))
5826 return 1;
5827 else if (is_properly_derived_from (deref_to_type2,
5828 deref_to_type1))
5829 return -1;
5831 else if (same_type_p (deref_to_type1, deref_to_type2))
5833 if (is_properly_derived_from (deref_from_type2,
5834 deref_from_type1))
5835 return 1;
5836 else if (is_properly_derived_from (deref_from_type1,
5837 deref_from_type2))
5838 return -1;
5842 else if (CLASS_TYPE_P (non_reference (from_type1))
5843 && same_type_p (from_type1, from_type2))
5845 tree from = non_reference (from_type1);
5847 /* [over.ics.rank]
5849 --binding of an expression of type C to a reference of type
5850 B& is better than binding an expression of type C to a
5851 reference of type A&
5853 --conversion of C to B is better than conversion of C to A, */
5854 if (is_properly_derived_from (from, to_type1)
5855 && is_properly_derived_from (from, to_type2))
5857 if (is_properly_derived_from (to_type1, to_type2))
5858 return 1;
5859 else if (is_properly_derived_from (to_type2, to_type1))
5860 return -1;
5863 else if (CLASS_TYPE_P (non_reference (to_type1))
5864 && same_type_p (to_type1, to_type2))
5866 tree to = non_reference (to_type1);
5868 /* [over.ics.rank]
5870 --binding of an expression of type B to a reference of type
5871 A& is better than binding an expression of type C to a
5872 reference of type A&,
5874 --conversion of B to A is better than conversion of C to A */
5875 if (is_properly_derived_from (from_type1, to)
5876 && is_properly_derived_from (from_type2, to))
5878 if (is_properly_derived_from (from_type2, from_type1))
5879 return 1;
5880 else if (is_properly_derived_from (from_type1, from_type2))
5881 return -1;
5885 /* [over.ics.rank]
5887 --S1 and S2 differ only in their qualification conversion and yield
5888 similar types T1 and T2 (_conv.qual_), respectively, and the cv-
5889 qualification signature of type T1 is a proper subset of the cv-
5890 qualification signature of type T2 */
5891 if (ics1->kind == ck_qual
5892 && ics2->kind == ck_qual
5893 && same_type_p (from_type1, from_type2))
5894 return comp_cv_qual_signature (to_type1, to_type2);
5896 /* [over.ics.rank]
5898 --S1 and S2 are reference bindings (_dcl.init.ref_), and the
5899 types to which the references refer are the same type except for
5900 top-level cv-qualifiers, and the type to which the reference
5901 initialized by S2 refers is more cv-qualified than the type to
5902 which the reference initialized by S1 refers */
5904 if (target_type1 && target_type2
5905 && same_type_ignoring_top_level_qualifiers_p (to_type1, to_type2))
5906 return comp_cv_qualification (target_type2, target_type1);
5908 /* Neither conversion sequence is better than the other. */
5909 return 0;
5912 /* The source type for this standard conversion sequence. */
5914 static tree
5915 source_type (conversion *t)
5917 for (;; t = t->u.next)
5919 if (t->kind == ck_user
5920 || t->kind == ck_ambig
5921 || t->kind == ck_identity)
5922 return t->type;
5924 gcc_unreachable ();
5927 /* Note a warning about preferring WINNER to LOSER. We do this by storing
5928 a pointer to LOSER and re-running joust to produce the warning if WINNER
5929 is actually used. */
5931 static void
5932 add_warning (struct z_candidate *winner, struct z_candidate *loser)
5934 candidate_warning *cw = (candidate_warning *)
5935 conversion_obstack_alloc (sizeof (candidate_warning));
5936 cw->loser = loser;
5937 cw->next = winner->warnings;
5938 winner->warnings = cw;
5941 /* Compare two candidates for overloading as described in
5942 [over.match.best]. Return values:
5944 1: cand1 is better than cand2
5945 -1: cand2 is better than cand1
5946 0: cand1 and cand2 are indistinguishable */
5948 static int
5949 joust (struct z_candidate *cand1, struct z_candidate *cand2, bool warn)
5951 int winner = 0;
5952 int off1 = 0, off2 = 0;
5953 size_t i;
5954 size_t len;
5956 /* Candidates that involve bad conversions are always worse than those
5957 that don't. */
5958 if (cand1->viable > cand2->viable)
5959 return 1;
5960 if (cand1->viable < cand2->viable)
5961 return -1;
5963 /* If we have two pseudo-candidates for conversions to the same type,
5964 or two candidates for the same function, arbitrarily pick one. */
5965 if (cand1->fn == cand2->fn
5966 && (IS_TYPE_OR_DECL_P (cand1->fn)))
5967 return 1;
5969 /* a viable function F1
5970 is defined to be a better function than another viable function F2 if
5971 for all arguments i, ICSi(F1) is not a worse conversion sequence than
5972 ICSi(F2), and then */
5974 /* for some argument j, ICSj(F1) is a better conversion sequence than
5975 ICSj(F2) */
5977 /* For comparing static and non-static member functions, we ignore
5978 the implicit object parameter of the non-static function. The
5979 standard says to pretend that the static function has an object
5980 parm, but that won't work with operator overloading. */
5981 len = cand1->num_convs;
5982 if (len != cand2->num_convs)
5984 int static_1 = DECL_STATIC_FUNCTION_P (cand1->fn);
5985 int static_2 = DECL_STATIC_FUNCTION_P (cand2->fn);
5987 gcc_assert (static_1 != static_2);
5989 if (static_1)
5990 off2 = 1;
5991 else
5993 off1 = 1;
5994 --len;
5998 for (i = 0; i < len; ++i)
6000 conversion *t1 = cand1->convs[i + off1];
6001 conversion *t2 = cand2->convs[i + off2];
6002 int comp = compare_ics (t1, t2);
6004 if (comp != 0)
6006 if (warn_sign_promo
6007 && (CONVERSION_RANK (t1) + CONVERSION_RANK (t2)
6008 == cr_std + cr_promotion)
6009 && t1->kind == ck_std
6010 && t2->kind == ck_std
6011 && TREE_CODE (t1->type) == INTEGER_TYPE
6012 && TREE_CODE (t2->type) == INTEGER_TYPE
6013 && (TYPE_PRECISION (t1->type)
6014 == TYPE_PRECISION (t2->type))
6015 && (TYPE_UNSIGNED (t1->u.next->type)
6016 || (TREE_CODE (t1->u.next->type)
6017 == ENUMERAL_TYPE)))
6019 tree type = t1->u.next->type;
6020 tree type1, type2;
6021 struct z_candidate *w, *l;
6022 if (comp > 0)
6023 type1 = t1->type, type2 = t2->type,
6024 w = cand1, l = cand2;
6025 else
6026 type1 = t2->type, type2 = t1->type,
6027 w = cand2, l = cand1;
6029 if (warn)
6031 warning (OPT_Wsign_promo, "passing %qT chooses %qT over %qT",
6032 type, type1, type2);
6033 warning (OPT_Wsign_promo, " in call to %qD", w->fn);
6035 else
6036 add_warning (w, l);
6039 if (winner && comp != winner)
6041 winner = 0;
6042 goto tweak;
6044 winner = comp;
6048 /* warn about confusing overload resolution for user-defined conversions,
6049 either between a constructor and a conversion op, or between two
6050 conversion ops. */
6051 if (winner && warn_conversion && cand1->second_conv
6052 && (!DECL_CONSTRUCTOR_P (cand1->fn) || !DECL_CONSTRUCTOR_P (cand2->fn))
6053 && winner != compare_ics (cand1->second_conv, cand2->second_conv))
6055 struct z_candidate *w, *l;
6056 bool give_warning = false;
6058 if (winner == 1)
6059 w = cand1, l = cand2;
6060 else
6061 w = cand2, l = cand1;
6063 /* We don't want to complain about `X::operator T1 ()'
6064 beating `X::operator T2 () const', when T2 is a no less
6065 cv-qualified version of T1. */
6066 if (DECL_CONTEXT (w->fn) == DECL_CONTEXT (l->fn)
6067 && !DECL_CONSTRUCTOR_P (w->fn) && !DECL_CONSTRUCTOR_P (l->fn))
6069 tree t = TREE_TYPE (TREE_TYPE (l->fn));
6070 tree f = TREE_TYPE (TREE_TYPE (w->fn));
6072 if (TREE_CODE (t) == TREE_CODE (f) && POINTER_TYPE_P (t))
6074 t = TREE_TYPE (t);
6075 f = TREE_TYPE (f);
6077 if (!comp_ptr_ttypes (t, f))
6078 give_warning = true;
6080 else
6081 give_warning = true;
6083 if (!give_warning)
6084 /*NOP*/;
6085 else if (warn)
6087 tree source = source_type (w->convs[0]);
6088 if (! DECL_CONSTRUCTOR_P (w->fn))
6089 source = TREE_TYPE (source);
6090 warning (OPT_Wconversion, "choosing %qD over %qD", w->fn, l->fn);
6091 warning (OPT_Wconversion, " for conversion from %qT to %qT",
6092 source, w->second_conv->type);
6093 inform (" because conversion sequence for the argument is better");
6095 else
6096 add_warning (w, l);
6099 if (winner)
6100 return winner;
6102 /* or, if not that,
6103 F1 is a non-template function and F2 is a template function
6104 specialization. */
6106 if (!cand1->template_decl && cand2->template_decl)
6107 return 1;
6108 else if (cand1->template_decl && !cand2->template_decl)
6109 return -1;
6111 /* or, if not that,
6112 F1 and F2 are template functions and the function template for F1 is
6113 more specialized than the template for F2 according to the partial
6114 ordering rules. */
6116 if (cand1->template_decl && cand2->template_decl)
6118 winner = more_specialized_fn
6119 (TI_TEMPLATE (cand1->template_decl),
6120 TI_TEMPLATE (cand2->template_decl),
6121 /* [temp.func.order]: The presence of unused ellipsis and default
6122 arguments has no effect on the partial ordering of function
6123 templates. add_function_candidate() will not have
6124 counted the "this" argument for constructors. */
6125 cand1->num_convs + DECL_CONSTRUCTOR_P (cand1->fn));
6126 if (winner)
6127 return winner;
6130 /* or, if not that,
6131 the context is an initialization by user-defined conversion (see
6132 _dcl.init_ and _over.match.user_) and the standard conversion
6133 sequence from the return type of F1 to the destination type (i.e.,
6134 the type of the entity being initialized) is a better conversion
6135 sequence than the standard conversion sequence from the return type
6136 of F2 to the destination type. */
6138 if (cand1->second_conv)
6140 winner = compare_ics (cand1->second_conv, cand2->second_conv);
6141 if (winner)
6142 return winner;
6145 /* Check whether we can discard a builtin candidate, either because we
6146 have two identical ones or matching builtin and non-builtin candidates.
6148 (Pedantically in the latter case the builtin which matched the user
6149 function should not be added to the overload set, but we spot it here.
6151 [over.match.oper]
6152 ... the builtin candidates include ...
6153 - do not have the same parameter type list as any non-template
6154 non-member candidate. */
6156 if (TREE_CODE (cand1->fn) == IDENTIFIER_NODE
6157 || TREE_CODE (cand2->fn) == IDENTIFIER_NODE)
6159 for (i = 0; i < len; ++i)
6160 if (!same_type_p (cand1->convs[i]->type,
6161 cand2->convs[i]->type))
6162 break;
6163 if (i == cand1->num_convs)
6165 if (cand1->fn == cand2->fn)
6166 /* Two built-in candidates; arbitrarily pick one. */
6167 return 1;
6168 else if (TREE_CODE (cand1->fn) == IDENTIFIER_NODE)
6169 /* cand1 is built-in; prefer cand2. */
6170 return -1;
6171 else
6172 /* cand2 is built-in; prefer cand1. */
6173 return 1;
6177 /* If the two functions are the same (this can happen with declarations
6178 in multiple scopes and arg-dependent lookup), arbitrarily choose one. */
6179 if (DECL_P (cand1->fn) && DECL_P (cand2->fn)
6180 && equal_functions (cand1->fn, cand2->fn))
6181 return 1;
6183 tweak:
6185 /* Extension: If the worst conversion for one candidate is worse than the
6186 worst conversion for the other, take the first. */
6187 if (!pedantic)
6189 conversion_rank rank1 = cr_identity, rank2 = cr_identity;
6190 struct z_candidate *w = 0, *l = 0;
6192 for (i = 0; i < len; ++i)
6194 if (CONVERSION_RANK (cand1->convs[i+off1]) > rank1)
6195 rank1 = CONVERSION_RANK (cand1->convs[i+off1]);
6196 if (CONVERSION_RANK (cand2->convs[i + off2]) > rank2)
6197 rank2 = CONVERSION_RANK (cand2->convs[i + off2]);
6199 if (rank1 < rank2)
6200 winner = 1, w = cand1, l = cand2;
6201 if (rank1 > rank2)
6202 winner = -1, w = cand2, l = cand1;
6203 if (winner)
6205 if (warn)
6207 pedwarn ("\
6208 ISO C++ says that these are ambiguous, even \
6209 though the worst conversion for the first is better than \
6210 the worst conversion for the second:");
6211 print_z_candidate (_("candidate 1:"), w);
6212 print_z_candidate (_("candidate 2:"), l);
6214 else
6215 add_warning (w, l);
6216 return winner;
6220 gcc_assert (!winner);
6221 return 0;
6224 /* Given a list of candidates for overloading, find the best one, if any.
6225 This algorithm has a worst case of O(2n) (winner is last), and a best
6226 case of O(n/2) (totally ambiguous); much better than a sorting
6227 algorithm. */
6229 static struct z_candidate *
6230 tourney (struct z_candidate *candidates)
6232 struct z_candidate *champ = candidates, *challenger;
6233 int fate;
6234 int champ_compared_to_predecessor = 0;
6236 /* Walk through the list once, comparing each current champ to the next
6237 candidate, knocking out a candidate or two with each comparison. */
6239 for (challenger = champ->next; challenger; )
6241 fate = joust (champ, challenger, 0);
6242 if (fate == 1)
6243 challenger = challenger->next;
6244 else
6246 if (fate == 0)
6248 champ = challenger->next;
6249 if (champ == 0)
6250 return NULL;
6251 champ_compared_to_predecessor = 0;
6253 else
6255 champ = challenger;
6256 champ_compared_to_predecessor = 1;
6259 challenger = champ->next;
6263 /* Make sure the champ is better than all the candidates it hasn't yet
6264 been compared to. */
6266 for (challenger = candidates;
6267 challenger != champ
6268 && !(champ_compared_to_predecessor && challenger->next == champ);
6269 challenger = challenger->next)
6271 fate = joust (champ, challenger, 0);
6272 if (fate != 1)
6273 return NULL;
6276 return champ;
6279 /* Returns nonzero if things of type FROM can be converted to TO. */
6281 bool
6282 can_convert (tree to, tree from)
6284 return can_convert_arg (to, from, NULL_TREE, LOOKUP_NORMAL);
6287 /* Returns nonzero if ARG (of type FROM) can be converted to TO. */
6289 bool
6290 can_convert_arg (tree to, tree from, tree arg, int flags)
6292 conversion *t;
6293 void *p;
6294 bool ok_p;
6296 /* Get the high-water mark for the CONVERSION_OBSTACK. */
6297 p = conversion_obstack_alloc (0);
6299 t = implicit_conversion (to, from, arg, /*c_cast_p=*/false,
6300 flags);
6301 ok_p = (t && !t->bad_p);
6303 /* Free all the conversions we allocated. */
6304 obstack_free (&conversion_obstack, p);
6306 return ok_p;
6309 /* Like can_convert_arg, but allows dubious conversions as well. */
6311 bool
6312 can_convert_arg_bad (tree to, tree from, tree arg)
6314 conversion *t;
6315 void *p;
6317 /* Get the high-water mark for the CONVERSION_OBSTACK. */
6318 p = conversion_obstack_alloc (0);
6319 /* Try to perform the conversion. */
6320 t = implicit_conversion (to, from, arg, /*c_cast_p=*/false,
6321 LOOKUP_NORMAL);
6322 /* Free all the conversions we allocated. */
6323 obstack_free (&conversion_obstack, p);
6325 return t != NULL;
6328 /* Convert EXPR to TYPE. Return the converted expression.
6330 Note that we allow bad conversions here because by the time we get to
6331 this point we are committed to doing the conversion. If we end up
6332 doing a bad conversion, convert_like will complain. */
6334 tree
6335 perform_implicit_conversion (tree type, tree expr)
6337 conversion *conv;
6338 void *p;
6340 if (error_operand_p (expr))
6341 return error_mark_node;
6343 /* Get the high-water mark for the CONVERSION_OBSTACK. */
6344 p = conversion_obstack_alloc (0);
6346 conv = implicit_conversion (type, TREE_TYPE (expr), expr,
6347 /*c_cast_p=*/false,
6348 LOOKUP_NORMAL);
6349 if (!conv)
6351 error ("could not convert %qE to %qT", expr, type);
6352 expr = error_mark_node;
6354 else
6355 expr = convert_like (conv, expr);
6357 /* Free all the conversions we allocated. */
6358 obstack_free (&conversion_obstack, p);
6360 return expr;
6363 /* Convert EXPR to TYPE (as a direct-initialization) if that is
6364 permitted. If the conversion is valid, the converted expression is
6365 returned. Otherwise, NULL_TREE is returned, except in the case
6366 that TYPE is a class type; in that case, an error is issued. If
6367 C_CAST_P is true, then this direction initialization is taking
6368 place as part of a static_cast being attempted as part of a C-style
6369 cast. */
6371 tree
6372 perform_direct_initialization_if_possible (tree type,
6373 tree expr,
6374 bool c_cast_p)
6376 conversion *conv;
6377 void *p;
6379 if (type == error_mark_node || error_operand_p (expr))
6380 return error_mark_node;
6381 /* [dcl.init]
6383 If the destination type is a (possibly cv-qualified) class type:
6385 -- If the initialization is direct-initialization ...,
6386 constructors are considered. ... If no constructor applies, or
6387 the overload resolution is ambiguous, the initialization is
6388 ill-formed. */
6389 if (CLASS_TYPE_P (type))
6391 expr = build_special_member_call (NULL_TREE, complete_ctor_identifier,
6392 build_tree_list (NULL_TREE, expr),
6393 type, LOOKUP_NORMAL);
6394 return build_cplus_new (type, expr);
6397 /* Get the high-water mark for the CONVERSION_OBSTACK. */
6398 p = conversion_obstack_alloc (0);
6400 conv = implicit_conversion (type, TREE_TYPE (expr), expr,
6401 c_cast_p,
6402 LOOKUP_NORMAL);
6403 if (!conv || conv->bad_p)
6404 expr = NULL_TREE;
6405 else
6406 expr = convert_like_real (conv, expr, NULL_TREE, 0, 0,
6407 /*issue_conversion_warnings=*/false,
6408 c_cast_p);
6410 /* Free all the conversions we allocated. */
6411 obstack_free (&conversion_obstack, p);
6413 return expr;
6416 /* DECL is a VAR_DECL whose type is a REFERENCE_TYPE. The reference
6417 is being bound to a temporary. Create and return a new VAR_DECL
6418 with the indicated TYPE; this variable will store the value to
6419 which the reference is bound. */
6421 tree
6422 make_temporary_var_for_ref_to_temp (tree decl, tree type)
6424 tree var;
6426 /* Create the variable. */
6427 var = create_temporary_var (type);
6429 /* Register the variable. */
6430 if (TREE_STATIC (decl))
6432 /* Namespace-scope or local static; give it a mangled name. */
6433 tree name;
6435 TREE_STATIC (var) = 1;
6436 name = mangle_ref_init_variable (decl);
6437 DECL_NAME (var) = name;
6438 SET_DECL_ASSEMBLER_NAME (var, name);
6439 var = pushdecl_top_level (var);
6441 else
6442 /* Create a new cleanup level if necessary. */
6443 maybe_push_cleanup_level (type);
6445 return var;
6448 /* Convert EXPR to the indicated reference TYPE, in a way suitable for
6449 initializing a variable of that TYPE. If DECL is non-NULL, it is
6450 the VAR_DECL being initialized with the EXPR. (In that case, the
6451 type of DECL will be TYPE.) If DECL is non-NULL, then CLEANUP must
6452 also be non-NULL, and with *CLEANUP initialized to NULL. Upon
6453 return, if *CLEANUP is no longer NULL, it will be an expression
6454 that should be pushed as a cleanup after the returned expression
6455 is used to initialize DECL.
6457 Return the converted expression. */
6459 tree
6460 initialize_reference (tree type, tree expr, tree decl, tree *cleanup)
6462 conversion *conv;
6463 void *p;
6465 if (type == error_mark_node || error_operand_p (expr))
6466 return error_mark_node;
6468 /* Get the high-water mark for the CONVERSION_OBSTACK. */
6469 p = conversion_obstack_alloc (0);
6471 conv = reference_binding (type, TREE_TYPE (expr), expr, LOOKUP_NORMAL);
6472 if (!conv || conv->bad_p)
6474 if (!(TYPE_QUALS (TREE_TYPE (type)) & TYPE_QUAL_CONST)
6475 && !real_lvalue_p (expr))
6476 error ("invalid initialization of non-const reference of "
6477 "type %qT from a temporary of type %qT",
6478 type, TREE_TYPE (expr));
6479 else
6480 error ("invalid initialization of reference of type "
6481 "%qT from expression of type %qT", type,
6482 TREE_TYPE (expr));
6483 return error_mark_node;
6486 /* If DECL is non-NULL, then this special rule applies:
6488 [class.temporary]
6490 The temporary to which the reference is bound or the temporary
6491 that is the complete object to which the reference is bound
6492 persists for the lifetime of the reference.
6494 The temporaries created during the evaluation of the expression
6495 initializing the reference, except the temporary to which the
6496 reference is bound, are destroyed at the end of the
6497 full-expression in which they are created.
6499 In that case, we store the converted expression into a new
6500 VAR_DECL in a new scope.
6502 However, we want to be careful not to create temporaries when
6503 they are not required. For example, given:
6505 struct B {};
6506 struct D : public B {};
6507 D f();
6508 const B& b = f();
6510 there is no need to copy the return value from "f"; we can just
6511 extend its lifetime. Similarly, given:
6513 struct S {};
6514 struct T { operator S(); };
6515 T t;
6516 const S& s = t;
6518 we can extend the lifetime of the return value of the conversion
6519 operator. */
6520 gcc_assert (conv->kind == ck_ref_bind);
6521 if (decl)
6523 tree var;
6524 tree base_conv_type;
6526 /* Skip over the REF_BIND. */
6527 conv = conv->u.next;
6528 /* If the next conversion is a BASE_CONV, skip that too -- but
6529 remember that the conversion was required. */
6530 if (conv->kind == ck_base)
6532 if (conv->check_copy_constructor_p)
6533 check_constructor_callable (TREE_TYPE (expr), expr);
6534 base_conv_type = conv->type;
6535 conv = conv->u.next;
6537 else
6538 base_conv_type = NULL_TREE;
6539 /* Perform the remainder of the conversion. */
6540 expr = convert_like_real (conv, expr,
6541 /*fn=*/NULL_TREE, /*argnum=*/0,
6542 /*inner=*/-1,
6543 /*issue_conversion_warnings=*/true,
6544 /*c_cast_p=*/false);
6545 if (error_operand_p (expr))
6546 expr = error_mark_node;
6547 else
6549 if (!real_lvalue_p (expr))
6551 tree init;
6552 tree type;
6554 /* Create the temporary variable. */
6555 type = TREE_TYPE (expr);
6556 var = make_temporary_var_for_ref_to_temp (decl, type);
6557 layout_decl (var, 0);
6558 /* If the rvalue is the result of a function call it will be
6559 a TARGET_EXPR. If it is some other construct (such as a
6560 member access expression where the underlying object is
6561 itself the result of a function call), turn it into a
6562 TARGET_EXPR here. It is important that EXPR be a
6563 TARGET_EXPR below since otherwise the INIT_EXPR will
6564 attempt to make a bitwise copy of EXPR to initialize
6565 VAR. */
6566 if (TREE_CODE (expr) != TARGET_EXPR)
6567 expr = get_target_expr (expr);
6568 /* Create the INIT_EXPR that will initialize the temporary
6569 variable. */
6570 init = build2 (INIT_EXPR, type, var, expr);
6571 if (at_function_scope_p ())
6573 add_decl_expr (var);
6574 *cleanup = cxx_maybe_build_cleanup (var);
6576 /* We must be careful to destroy the temporary only
6577 after its initialization has taken place. If the
6578 initialization throws an exception, then the
6579 destructor should not be run. We cannot simply
6580 transform INIT into something like:
6582 (INIT, ({ CLEANUP_STMT; }))
6584 because emit_local_var always treats the
6585 initializer as a full-expression. Thus, the
6586 destructor would run too early; it would run at the
6587 end of initializing the reference variable, rather
6588 than at the end of the block enclosing the
6589 reference variable.
6591 The solution is to pass back a cleanup expression
6592 which the caller is responsible for attaching to
6593 the statement tree. */
6595 else
6597 rest_of_decl_compilation (var, /*toplev=*/1, at_eof);
6598 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
6599 static_aggregates = tree_cons (NULL_TREE, var,
6600 static_aggregates);
6602 /* Use its address to initialize the reference variable. */
6603 expr = build_address (var);
6604 if (base_conv_type)
6605 expr = convert_to_base (expr,
6606 build_pointer_type (base_conv_type),
6607 /*check_access=*/true,
6608 /*nonnull=*/true);
6609 expr = build2 (COMPOUND_EXPR, TREE_TYPE (expr), init, expr);
6611 else
6612 /* Take the address of EXPR. */
6613 expr = build_unary_op (ADDR_EXPR, expr, 0);
6614 /* If a BASE_CONV was required, perform it now. */
6615 if (base_conv_type)
6616 expr = (perform_implicit_conversion
6617 (build_pointer_type (base_conv_type), expr));
6618 expr = build_nop (type, expr);
6621 else
6622 /* Perform the conversion. */
6623 expr = convert_like (conv, expr);
6625 /* Free all the conversions we allocated. */
6626 obstack_free (&conversion_obstack, p);
6628 return expr;
6631 #include "gt-cp-call.h"