2009-07-17 Richard Guenther <rguenther@suse.de>
[official-gcc.git] / gcc / cp / call.c
blob6a7a1b861a03ea8bb64153fc6b98066adc1e35ce
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, 2007, 2008, 2009
4 Free Software Foundation, Inc.
5 Contributed by Michael Tiemann (tiemann@cygnus.com) and
6 modified by Brendan Kehoe (brendan@cygnus.com).
8 This file is part of GCC.
10 GCC is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation; either version 3, or (at your option)
13 any later version.
15 GCC is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License for more details.
20 You should have received a copy of the GNU General Public License
21 along with GCC; see the file COPYING3. If not see
22 <http://www.gnu.org/licenses/>. */
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"
42 #include "langhooks.h"
44 /* The various kinds of conversion. */
46 typedef enum conversion_kind {
47 ck_identity,
48 ck_lvalue,
49 ck_qual,
50 ck_std,
51 ck_ptr,
52 ck_pmem,
53 ck_base,
54 ck_ref_bind,
55 ck_user,
56 ck_ambig,
57 ck_list,
58 ck_aggr,
59 ck_rvalue
60 } conversion_kind;
62 /* The rank of the conversion. Order of the enumerals matters; better
63 conversions should come earlier in the list. */
65 typedef enum conversion_rank {
66 cr_identity,
67 cr_exact,
68 cr_promotion,
69 cr_std,
70 cr_pbool,
71 cr_user,
72 cr_ellipsis,
73 cr_bad
74 } conversion_rank;
76 /* An implicit conversion sequence, in the sense of [over.best.ics].
77 The first conversion to be performed is at the end of the chain.
78 That conversion is always a cr_identity conversion. */
80 typedef struct conversion conversion;
81 struct conversion {
82 /* The kind of conversion represented by this step. */
83 conversion_kind kind;
84 /* The rank of this conversion. */
85 conversion_rank rank;
86 BOOL_BITFIELD user_conv_p : 1;
87 BOOL_BITFIELD ellipsis_p : 1;
88 BOOL_BITFIELD this_p : 1;
89 BOOL_BITFIELD bad_p : 1;
90 /* If KIND is ck_ref_bind ck_base_conv, true to indicate that a
91 temporary should be created to hold the result of the
92 conversion. */
93 BOOL_BITFIELD need_temporary_p : 1;
94 /* If KIND is ck_ptr or ck_pmem, true to indicate that a conversion
95 from a pointer-to-derived to pointer-to-base is being performed. */
96 BOOL_BITFIELD base_p : 1;
97 /* If KIND is ck_ref_bind, true when either an lvalue reference is
98 being bound to an lvalue expression or an rvalue reference is
99 being bound to an rvalue expression. */
100 BOOL_BITFIELD rvaluedness_matches_p: 1;
101 BOOL_BITFIELD check_narrowing: 1;
102 /* The type of the expression resulting from the conversion. */
103 tree type;
104 union {
105 /* The next conversion in the chain. Since the conversions are
106 arranged from outermost to innermost, the NEXT conversion will
107 actually be performed before this conversion. This variant is
108 used only when KIND is neither ck_identity nor ck_ambig. */
109 conversion *next;
110 /* The expression at the beginning of the conversion chain. This
111 variant is used only if KIND is ck_identity or ck_ambig. */
112 tree expr;
113 /* The array of conversions for an initializer_list. */
114 conversion **list;
115 } u;
116 /* The function candidate corresponding to this conversion
117 sequence. This field is only used if KIND is ck_user. */
118 struct z_candidate *cand;
121 #define CONVERSION_RANK(NODE) \
122 ((NODE)->bad_p ? cr_bad \
123 : (NODE)->ellipsis_p ? cr_ellipsis \
124 : (NODE)->user_conv_p ? cr_user \
125 : (NODE)->rank)
127 static struct obstack conversion_obstack;
128 static bool conversion_obstack_initialized;
130 static struct z_candidate * tourney (struct z_candidate *);
131 static int equal_functions (tree, tree);
132 static int joust (struct z_candidate *, struct z_candidate *, bool);
133 static int compare_ics (conversion *, conversion *);
134 static tree build_over_call (struct z_candidate *, int, tsubst_flags_t);
135 static tree build_java_interface_fn_ref (tree, tree);
136 #define convert_like(CONV, EXPR, COMPLAIN) \
137 convert_like_real ((CONV), (EXPR), NULL_TREE, 0, 0, \
138 /*issue_conversion_warnings=*/true, \
139 /*c_cast_p=*/false, (COMPLAIN))
140 #define convert_like_with_context(CONV, EXPR, FN, ARGNO, COMPLAIN ) \
141 convert_like_real ((CONV), (EXPR), (FN), (ARGNO), 0, \
142 /*issue_conversion_warnings=*/true, \
143 /*c_cast_p=*/false, (COMPLAIN))
144 static tree convert_like_real (conversion *, tree, tree, int, int, bool,
145 bool, tsubst_flags_t);
146 static void op_error (enum tree_code, enum tree_code, tree, tree,
147 tree, const char *);
148 static VEC(tree,gc) *resolve_args (VEC(tree,gc) *);
149 static struct z_candidate *build_user_type_conversion_1 (tree, tree, int);
150 static void print_z_candidate (const char *, struct z_candidate *);
151 static void print_z_candidates (struct z_candidate *);
152 static tree build_this (tree);
153 static struct z_candidate *splice_viable (struct z_candidate *, bool, bool *);
154 static bool any_strictly_viable (struct z_candidate *);
155 static struct z_candidate *add_template_candidate
156 (struct z_candidate **, tree, tree, tree, tree, const VEC(tree,gc) *,
157 tree, tree, tree, int, unification_kind_t);
158 static struct z_candidate *add_template_candidate_real
159 (struct z_candidate **, tree, tree, tree, tree, const VEC(tree,gc) *,
160 tree, tree, tree, int, tree, unification_kind_t);
161 static struct z_candidate *add_template_conv_candidate
162 (struct z_candidate **, tree, tree, tree, const VEC(tree,gc) *, tree,
163 tree, tree);
164 static void add_builtin_candidates
165 (struct z_candidate **, enum tree_code, enum tree_code,
166 tree, tree *, int);
167 static void add_builtin_candidate
168 (struct z_candidate **, enum tree_code, enum tree_code,
169 tree, tree, tree, tree *, tree *, int);
170 static bool is_complete (tree);
171 static void build_builtin_candidate
172 (struct z_candidate **, tree, tree, tree, tree *, tree *,
173 int);
174 static struct z_candidate *add_conv_candidate
175 (struct z_candidate **, tree, tree, tree, const VEC(tree,gc) *, tree,
176 tree);
177 static struct z_candidate *add_function_candidate
178 (struct z_candidate **, tree, tree, tree, const VEC(tree,gc) *, tree,
179 tree, int);
180 static conversion *implicit_conversion (tree, tree, tree, bool, int);
181 static conversion *standard_conversion (tree, tree, tree, bool, int);
182 static conversion *reference_binding (tree, tree, tree, bool, int);
183 static conversion *build_conv (conversion_kind, tree, conversion *);
184 static conversion *build_list_conv (tree, tree, int);
185 static bool is_subseq (conversion *, conversion *);
186 static conversion *maybe_handle_ref_bind (conversion **);
187 static void maybe_handle_implicit_object (conversion **);
188 static struct z_candidate *add_candidate
189 (struct z_candidate **, tree, tree, const VEC(tree,gc) *, size_t,
190 conversion **, tree, tree, int);
191 static tree source_type (conversion *);
192 static void add_warning (struct z_candidate *, struct z_candidate *);
193 static bool reference_related_p (tree, tree);
194 static bool reference_compatible_p (tree, tree);
195 static conversion *convert_class_to_reference (tree, tree, tree, int);
196 static conversion *direct_reference_binding (tree, conversion *);
197 static bool promoted_arithmetic_type_p (tree);
198 static conversion *conditional_conversion (tree, tree);
199 static char *name_as_c_string (tree, tree, bool *);
200 static tree prep_operand (tree);
201 static void add_candidates (tree, const VEC(tree,gc) *, tree, bool, tree, tree,
202 int, struct z_candidate **);
203 static conversion *merge_conversion_sequences (conversion *, conversion *);
204 static bool magic_varargs_p (tree);
205 static tree build_temp (tree, tree, int, diagnostic_t *);
207 /* Returns nonzero iff the destructor name specified in NAME matches BASETYPE.
208 NAME can take many forms... */
210 bool
211 check_dtor_name (tree basetype, tree name)
213 /* Just accept something we've already complained about. */
214 if (name == error_mark_node)
215 return true;
217 if (TREE_CODE (name) == TYPE_DECL)
218 name = TREE_TYPE (name);
219 else if (TYPE_P (name))
220 /* OK */;
221 else if (TREE_CODE (name) == IDENTIFIER_NODE)
223 if ((MAYBE_CLASS_TYPE_P (basetype)
224 && name == constructor_name (basetype))
225 || (TREE_CODE (basetype) == ENUMERAL_TYPE
226 && name == TYPE_IDENTIFIER (basetype)))
227 return true;
228 else
229 name = get_type_value (name);
231 else
233 /* In the case of:
235 template <class T> struct S { ~S(); };
236 int i;
237 i.~S();
239 NAME will be a class template. */
240 gcc_assert (DECL_CLASS_TEMPLATE_P (name));
241 return false;
244 if (!name || name == error_mark_node)
245 return false;
246 return same_type_p (TYPE_MAIN_VARIANT (basetype), TYPE_MAIN_VARIANT (name));
249 /* We want the address of a function or method. We avoid creating a
250 pointer-to-member function. */
252 tree
253 build_addr_func (tree function)
255 tree type = TREE_TYPE (function);
257 /* We have to do these by hand to avoid real pointer to member
258 functions. */
259 if (TREE_CODE (type) == METHOD_TYPE)
261 if (TREE_CODE (function) == OFFSET_REF)
263 tree object = build_address (TREE_OPERAND (function, 0));
264 return get_member_function_from_ptrfunc (&object,
265 TREE_OPERAND (function, 1));
267 function = build_address (function);
269 else
270 function = decay_conversion (function);
272 return function;
275 /* Build a CALL_EXPR, we can handle FUNCTION_TYPEs, METHOD_TYPEs, or
276 POINTER_TYPE to those. Note, pointer to member function types
277 (TYPE_PTRMEMFUNC_P) must be handled by our callers. There are
278 two variants. build_call_a is the primitive taking an array of
279 arguments, while build_call_n is a wrapper that handles varargs. */
281 tree
282 build_call_n (tree function, int n, ...)
284 if (n == 0)
285 return build_call_a (function, 0, NULL);
286 else
288 tree *argarray = (tree *) alloca (n * sizeof (tree));
289 va_list ap;
290 int i;
292 va_start (ap, n);
293 for (i = 0; i < n; i++)
294 argarray[i] = va_arg (ap, tree);
295 va_end (ap);
296 return build_call_a (function, n, argarray);
300 tree
301 build_call_a (tree function, int n, tree *argarray)
303 int is_constructor = 0;
304 int nothrow;
305 tree decl;
306 tree result_type;
307 tree fntype;
308 int i;
310 function = build_addr_func (function);
312 gcc_assert (TYPE_PTR_P (TREE_TYPE (function)));
313 fntype = TREE_TYPE (TREE_TYPE (function));
314 gcc_assert (TREE_CODE (fntype) == FUNCTION_TYPE
315 || TREE_CODE (fntype) == METHOD_TYPE);
316 result_type = TREE_TYPE (fntype);
318 if (TREE_CODE (function) == ADDR_EXPR
319 && TREE_CODE (TREE_OPERAND (function, 0)) == FUNCTION_DECL)
321 decl = TREE_OPERAND (function, 0);
322 if (!TREE_USED (decl))
324 /* We invoke build_call directly for several library
325 functions. These may have been declared normally if
326 we're building libgcc, so we can't just check
327 DECL_ARTIFICIAL. */
328 gcc_assert (DECL_ARTIFICIAL (decl)
329 || !strncmp (IDENTIFIER_POINTER (DECL_NAME (decl)),
330 "__", 2));
331 mark_used (decl);
334 else
335 decl = NULL_TREE;
337 /* We check both the decl and the type; a function may be known not to
338 throw without being declared throw(). */
339 nothrow = ((decl && TREE_NOTHROW (decl))
340 || TYPE_NOTHROW_P (TREE_TYPE (TREE_TYPE (function))));
342 if (decl && TREE_THIS_VOLATILE (decl) && cfun && cp_function_chain)
343 current_function_returns_abnormally = 1;
345 if (decl && TREE_DEPRECATED (decl))
346 warn_deprecated_use (decl, NULL_TREE);
347 require_complete_eh_spec_types (fntype, decl);
349 if (decl && DECL_CONSTRUCTOR_P (decl))
350 is_constructor = 1;
352 /* Don't pass empty class objects by value. This is useful
353 for tags in STL, which are used to control overload resolution.
354 We don't need to handle other cases of copying empty classes. */
355 if (! decl || ! DECL_BUILT_IN (decl))
356 for (i = 0; i < n; i++)
357 if (is_empty_class (TREE_TYPE (argarray[i]))
358 && ! TREE_ADDRESSABLE (TREE_TYPE (argarray[i])))
360 tree t = build0 (EMPTY_CLASS_EXPR, TREE_TYPE (argarray[i]));
361 argarray[i] = build2 (COMPOUND_EXPR, TREE_TYPE (t),
362 argarray[i], t);
365 function = build_call_array (result_type, function, n, argarray);
366 TREE_HAS_CONSTRUCTOR (function) = is_constructor;
367 TREE_NOTHROW (function) = nothrow;
369 return function;
372 /* Build something of the form ptr->method (args)
373 or object.method (args). This can also build
374 calls to constructors, and find friends.
376 Member functions always take their class variable
377 as a pointer.
379 INSTANCE is a class instance.
381 NAME is the name of the method desired, usually an IDENTIFIER_NODE.
383 PARMS help to figure out what that NAME really refers to.
385 BASETYPE_PATH, if non-NULL, contains a chain from the type of INSTANCE
386 down to the real instance type to use for access checking. We need this
387 information to get protected accesses correct.
389 FLAGS is the logical disjunction of zero or more LOOKUP_
390 flags. See cp-tree.h for more info.
392 If this is all OK, calls build_function_call with the resolved
393 member function.
395 This function must also handle being called to perform
396 initialization, promotion/coercion of arguments, and
397 instantiation of default parameters.
399 Note that NAME may refer to an instance variable name. If
400 `operator()()' is defined for the type of that field, then we return
401 that result. */
403 /* New overloading code. */
405 typedef struct z_candidate z_candidate;
407 typedef struct candidate_warning candidate_warning;
408 struct candidate_warning {
409 z_candidate *loser;
410 candidate_warning *next;
413 struct z_candidate {
414 /* The FUNCTION_DECL that will be called if this candidate is
415 selected by overload resolution. */
416 tree fn;
417 /* If not NULL_TREE, the first argument to use when calling this
418 function. */
419 tree first_arg;
420 /* The rest of the arguments to use when calling this function. If
421 there are no further arguments this may be NULL or it may be an
422 empty vector. */
423 const VEC(tree,gc) *args;
424 /* The implicit conversion sequences for each of the arguments to
425 FN. */
426 conversion **convs;
427 /* The number of implicit conversion sequences. */
428 size_t num_convs;
429 /* If FN is a user-defined conversion, the standard conversion
430 sequence from the type returned by FN to the desired destination
431 type. */
432 conversion *second_conv;
433 int viable;
434 /* If FN is a member function, the binfo indicating the path used to
435 qualify the name of FN at the call site. This path is used to
436 determine whether or not FN is accessible if it is selected by
437 overload resolution. The DECL_CONTEXT of FN will always be a
438 (possibly improper) base of this binfo. */
439 tree access_path;
440 /* If FN is a non-static member function, the binfo indicating the
441 subobject to which the `this' pointer should be converted if FN
442 is selected by overload resolution. The type pointed to the by
443 the `this' pointer must correspond to the most derived class
444 indicated by the CONVERSION_PATH. */
445 tree conversion_path;
446 tree template_decl;
447 candidate_warning *warnings;
448 z_candidate *next;
451 /* Returns true iff T is a null pointer constant in the sense of
452 [conv.ptr]. */
454 bool
455 null_ptr_cst_p (tree t)
457 /* [conv.ptr]
459 A null pointer constant is an integral constant expression
460 (_expr.const_) rvalue of integer type that evaluates to zero. */
461 t = integral_constant_value (t);
462 if (t == null_node)
463 return true;
464 if (CP_INTEGRAL_TYPE_P (TREE_TYPE (t)) && integer_zerop (t))
466 STRIP_NOPS (t);
467 if (!TREE_OVERFLOW (t))
468 return true;
470 return false;
473 /* Returns nonzero if PARMLIST consists of only default parms and/or
474 ellipsis. */
476 bool
477 sufficient_parms_p (const_tree parmlist)
479 for (; parmlist && parmlist != void_list_node;
480 parmlist = TREE_CHAIN (parmlist))
481 if (!TREE_PURPOSE (parmlist))
482 return false;
483 return true;
486 /* Allocate N bytes of memory from the conversion obstack. The memory
487 is zeroed before being returned. */
489 static void *
490 conversion_obstack_alloc (size_t n)
492 void *p;
493 if (!conversion_obstack_initialized)
495 gcc_obstack_init (&conversion_obstack);
496 conversion_obstack_initialized = true;
498 p = obstack_alloc (&conversion_obstack, n);
499 memset (p, 0, n);
500 return p;
503 /* Dynamically allocate a conversion. */
505 static conversion *
506 alloc_conversion (conversion_kind kind)
508 conversion *c;
509 c = (conversion *) conversion_obstack_alloc (sizeof (conversion));
510 c->kind = kind;
511 return c;
514 #ifdef ENABLE_CHECKING
516 /* Make sure that all memory on the conversion obstack has been
517 freed. */
519 void
520 validate_conversion_obstack (void)
522 if (conversion_obstack_initialized)
523 gcc_assert ((obstack_next_free (&conversion_obstack)
524 == obstack_base (&conversion_obstack)));
527 #endif /* ENABLE_CHECKING */
529 /* Dynamically allocate an array of N conversions. */
531 static conversion **
532 alloc_conversions (size_t n)
534 return (conversion **) conversion_obstack_alloc (n * sizeof (conversion *));
537 static conversion *
538 build_conv (conversion_kind code, tree type, conversion *from)
540 conversion *t;
541 conversion_rank rank = CONVERSION_RANK (from);
543 /* Note that the caller is responsible for filling in t->cand for
544 user-defined conversions. */
545 t = alloc_conversion (code);
546 t->type = type;
547 t->u.next = from;
549 switch (code)
551 case ck_ptr:
552 case ck_pmem:
553 case ck_base:
554 case ck_std:
555 if (rank < cr_std)
556 rank = cr_std;
557 break;
559 case ck_qual:
560 if (rank < cr_exact)
561 rank = cr_exact;
562 break;
564 default:
565 break;
567 t->rank = rank;
568 t->user_conv_p = (code == ck_user || from->user_conv_p);
569 t->bad_p = from->bad_p;
570 t->base_p = false;
571 return t;
574 /* Represent a conversion from CTOR, a braced-init-list, to TYPE, a
575 specialization of std::initializer_list<T>, if such a conversion is
576 possible. */
578 static conversion *
579 build_list_conv (tree type, tree ctor, int flags)
581 tree elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (type), 0);
582 unsigned len = CONSTRUCTOR_NELTS (ctor);
583 conversion **subconvs = alloc_conversions (len);
584 conversion *t;
585 unsigned i;
586 tree val;
588 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor), i, val)
590 conversion *sub
591 = implicit_conversion (elttype, TREE_TYPE (val), val,
592 false, flags);
593 if (sub == NULL)
594 return NULL;
596 subconvs[i] = sub;
599 t = alloc_conversion (ck_list);
600 t->type = type;
601 t->u.list = subconvs;
602 t->rank = cr_exact;
604 for (i = 0; i < len; ++i)
606 conversion *sub = subconvs[i];
607 if (sub->rank > t->rank)
608 t->rank = sub->rank;
609 if (sub->user_conv_p)
610 t->user_conv_p = true;
611 if (sub->bad_p)
612 t->bad_p = true;
615 return t;
618 /* Represent a conversion from CTOR, a braced-init-list, to TYPE, an
619 aggregate class, if such a conversion is possible. */
621 static conversion *
622 build_aggr_conv (tree type, tree ctor, int flags)
624 unsigned HOST_WIDE_INT i = 0;
625 conversion *c;
626 tree field = TYPE_FIELDS (type);
628 for (; field; field = TREE_CHAIN (field), ++i)
630 if (TREE_CODE (field) != FIELD_DECL)
631 continue;
632 if (i < CONSTRUCTOR_NELTS (ctor))
634 constructor_elt *ce = CONSTRUCTOR_ELT (ctor, i);
635 if (!can_convert_arg (TREE_TYPE (field), TREE_TYPE (ce->value),
636 ce->value, flags))
637 return NULL;
639 else if (build_value_init (TREE_TYPE (field)) == error_mark_node)
640 return NULL;
643 c = alloc_conversion (ck_aggr);
644 c->type = type;
645 c->rank = cr_exact;
646 c->user_conv_p = true;
647 c->u.next = NULL;
648 return c;
651 /* Build a representation of the identity conversion from EXPR to
652 itself. The TYPE should match the type of EXPR, if EXPR is non-NULL. */
654 static conversion *
655 build_identity_conv (tree type, tree expr)
657 conversion *c;
659 c = alloc_conversion (ck_identity);
660 c->type = type;
661 c->u.expr = expr;
663 return c;
666 /* Converting from EXPR to TYPE was ambiguous in the sense that there
667 were multiple user-defined conversions to accomplish the job.
668 Build a conversion that indicates that ambiguity. */
670 static conversion *
671 build_ambiguous_conv (tree type, tree expr)
673 conversion *c;
675 c = alloc_conversion (ck_ambig);
676 c->type = type;
677 c->u.expr = expr;
679 return c;
682 tree
683 strip_top_quals (tree t)
685 if (TREE_CODE (t) == ARRAY_TYPE)
686 return t;
687 return cp_build_qualified_type (t, 0);
690 /* Returns the standard conversion path (see [conv]) from type FROM to type
691 TO, if any. For proper handling of null pointer constants, you must
692 also pass the expression EXPR to convert from. If C_CAST_P is true,
693 this conversion is coming from a C-style cast. */
695 static conversion *
696 standard_conversion (tree to, tree from, tree expr, bool c_cast_p,
697 int flags)
699 enum tree_code fcode, tcode;
700 conversion *conv;
701 bool fromref = false;
703 to = non_reference (to);
704 if (TREE_CODE (from) == REFERENCE_TYPE)
706 fromref = true;
707 from = TREE_TYPE (from);
709 to = strip_top_quals (to);
710 from = strip_top_quals (from);
712 if ((TYPE_PTRFN_P (to) || TYPE_PTRMEMFUNC_P (to))
713 && expr && type_unknown_p (expr))
715 tsubst_flags_t tflags = tf_conv;
716 if (!(flags & LOOKUP_PROTECT))
717 tflags |= tf_no_access_control;
718 expr = instantiate_type (to, expr, tflags);
719 if (expr == error_mark_node)
720 return NULL;
721 from = TREE_TYPE (expr);
724 fcode = TREE_CODE (from);
725 tcode = TREE_CODE (to);
727 conv = build_identity_conv (from, expr);
728 if (fcode == FUNCTION_TYPE || fcode == ARRAY_TYPE)
730 from = type_decays_to (from);
731 fcode = TREE_CODE (from);
732 conv = build_conv (ck_lvalue, from, conv);
734 else if (fromref || (expr && lvalue_p (expr)))
736 if (expr)
738 tree bitfield_type;
739 bitfield_type = is_bitfield_expr_with_lowered_type (expr);
740 if (bitfield_type)
742 from = strip_top_quals (bitfield_type);
743 fcode = TREE_CODE (from);
746 conv = build_conv (ck_rvalue, from, conv);
749 /* Allow conversion between `__complex__' data types. */
750 if (tcode == COMPLEX_TYPE && fcode == COMPLEX_TYPE)
752 /* The standard conversion sequence to convert FROM to TO is
753 the standard conversion sequence to perform componentwise
754 conversion. */
755 conversion *part_conv = standard_conversion
756 (TREE_TYPE (to), TREE_TYPE (from), NULL_TREE, c_cast_p, flags);
758 if (part_conv)
760 conv = build_conv (part_conv->kind, to, conv);
761 conv->rank = part_conv->rank;
763 else
764 conv = NULL;
766 return conv;
769 if (same_type_p (from, to))
770 return conv;
772 if ((tcode == POINTER_TYPE || TYPE_PTR_TO_MEMBER_P (to))
773 && expr && null_ptr_cst_p (expr))
774 conv = build_conv (ck_std, to, conv);
775 else if ((tcode == INTEGER_TYPE && fcode == POINTER_TYPE)
776 || (tcode == POINTER_TYPE && fcode == INTEGER_TYPE))
778 /* For backwards brain damage compatibility, allow interconversion of
779 pointers and integers with a pedwarn. */
780 conv = build_conv (ck_std, to, conv);
781 conv->bad_p = true;
783 else if (UNSCOPED_ENUM_P (to) && fcode == INTEGER_TYPE)
785 /* For backwards brain damage compatibility, allow interconversion of
786 enums and integers with a pedwarn. */
787 conv = build_conv (ck_std, to, conv);
788 conv->bad_p = true;
790 else if ((tcode == POINTER_TYPE && fcode == POINTER_TYPE)
791 || (TYPE_PTRMEM_P (to) && TYPE_PTRMEM_P (from)))
793 tree to_pointee;
794 tree from_pointee;
796 if (tcode == POINTER_TYPE
797 && same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (from),
798 TREE_TYPE (to)))
800 else if (VOID_TYPE_P (TREE_TYPE (to))
801 && !TYPE_PTRMEM_P (from)
802 && TREE_CODE (TREE_TYPE (from)) != FUNCTION_TYPE)
804 from = build_pointer_type
805 (cp_build_qualified_type (void_type_node,
806 cp_type_quals (TREE_TYPE (from))));
807 conv = build_conv (ck_ptr, from, conv);
809 else if (TYPE_PTRMEM_P (from))
811 tree fbase = TYPE_PTRMEM_CLASS_TYPE (from);
812 tree tbase = TYPE_PTRMEM_CLASS_TYPE (to);
814 if (DERIVED_FROM_P (fbase, tbase)
815 && (same_type_ignoring_top_level_qualifiers_p
816 (TYPE_PTRMEM_POINTED_TO_TYPE (from),
817 TYPE_PTRMEM_POINTED_TO_TYPE (to))))
819 from = build_ptrmem_type (tbase,
820 TYPE_PTRMEM_POINTED_TO_TYPE (from));
821 conv = build_conv (ck_pmem, from, conv);
823 else if (!same_type_p (fbase, tbase))
824 return NULL;
826 else if (CLASS_TYPE_P (TREE_TYPE (from))
827 && CLASS_TYPE_P (TREE_TYPE (to))
828 /* [conv.ptr]
830 An rvalue of type "pointer to cv D," where D is a
831 class type, can be converted to an rvalue of type
832 "pointer to cv B," where B is a base class (clause
833 _class.derived_) of D. If B is an inaccessible
834 (clause _class.access_) or ambiguous
835 (_class.member.lookup_) base class of D, a program
836 that necessitates this conversion is ill-formed.
837 Therefore, we use DERIVED_FROM_P, and do not check
838 access or uniqueness. */
839 && DERIVED_FROM_P (TREE_TYPE (to), TREE_TYPE (from)))
841 from =
842 cp_build_qualified_type (TREE_TYPE (to),
843 cp_type_quals (TREE_TYPE (from)));
844 from = build_pointer_type (from);
845 conv = build_conv (ck_ptr, from, conv);
846 conv->base_p = true;
849 if (tcode == POINTER_TYPE)
851 to_pointee = TREE_TYPE (to);
852 from_pointee = TREE_TYPE (from);
854 else
856 to_pointee = TYPE_PTRMEM_POINTED_TO_TYPE (to);
857 from_pointee = TYPE_PTRMEM_POINTED_TO_TYPE (from);
860 if (same_type_p (from, to))
861 /* OK */;
862 else if (c_cast_p && comp_ptr_ttypes_const (to, from))
863 /* In a C-style cast, we ignore CV-qualification because we
864 are allowed to perform a static_cast followed by a
865 const_cast. */
866 conv = build_conv (ck_qual, to, conv);
867 else if (!c_cast_p && comp_ptr_ttypes (to_pointee, from_pointee))
868 conv = build_conv (ck_qual, to, conv);
869 else if (expr && string_conv_p (to, expr, 0))
870 /* converting from string constant to char *. */
871 conv = build_conv (ck_qual, to, conv);
872 else if (ptr_reasonably_similar (to_pointee, from_pointee))
874 conv = build_conv (ck_ptr, to, conv);
875 conv->bad_p = true;
877 else
878 return NULL;
880 from = to;
882 else if (TYPE_PTRMEMFUNC_P (to) && TYPE_PTRMEMFUNC_P (from))
884 tree fromfn = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (from));
885 tree tofn = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (to));
886 tree fbase = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (fromfn)));
887 tree tbase = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (tofn)));
889 if (!DERIVED_FROM_P (fbase, tbase)
890 || !same_type_p (TREE_TYPE (fromfn), TREE_TYPE (tofn))
891 || !compparms (TREE_CHAIN (TYPE_ARG_TYPES (fromfn)),
892 TREE_CHAIN (TYPE_ARG_TYPES (tofn)))
893 || cp_type_quals (fbase) != cp_type_quals (tbase))
894 return NULL;
896 from = cp_build_qualified_type (tbase, cp_type_quals (fbase));
897 from = build_method_type_directly (from,
898 TREE_TYPE (fromfn),
899 TREE_CHAIN (TYPE_ARG_TYPES (fromfn)));
900 from = build_ptrmemfunc_type (build_pointer_type (from));
901 conv = build_conv (ck_pmem, from, conv);
902 conv->base_p = true;
904 else if (tcode == BOOLEAN_TYPE)
906 /* [conv.bool]
908 An rvalue of arithmetic, unscoped enumeration, pointer, or
909 pointer to member type can be converted to an rvalue of type
910 bool. */
911 if (ARITHMETIC_TYPE_P (from)
912 || UNSCOPED_ENUM_P (from)
913 || fcode == POINTER_TYPE
914 || TYPE_PTR_TO_MEMBER_P (from))
916 conv = build_conv (ck_std, to, conv);
917 if (fcode == POINTER_TYPE
918 || TYPE_PTRMEM_P (from)
919 || (TYPE_PTRMEMFUNC_P (from)
920 && conv->rank < cr_pbool))
921 conv->rank = cr_pbool;
922 return conv;
925 return NULL;
927 /* We don't check for ENUMERAL_TYPE here because there are no standard
928 conversions to enum type. */
929 /* As an extension, allow conversion to complex type. */
930 else if (ARITHMETIC_TYPE_P (to))
932 if (! (INTEGRAL_CODE_P (fcode) || fcode == REAL_TYPE)
933 || SCOPED_ENUM_P (from))
934 return NULL;
935 conv = build_conv (ck_std, to, conv);
937 /* Give this a better rank if it's a promotion. */
938 if (same_type_p (to, type_promotes_to (from))
939 && conv->u.next->rank <= cr_promotion)
940 conv->rank = cr_promotion;
942 else if (fcode == VECTOR_TYPE && tcode == VECTOR_TYPE
943 && vector_types_convertible_p (from, to, false))
944 return build_conv (ck_std, to, conv);
945 else if (MAYBE_CLASS_TYPE_P (to) && MAYBE_CLASS_TYPE_P (from)
946 && is_properly_derived_from (from, to))
948 if (conv->kind == ck_rvalue)
949 conv = conv->u.next;
950 conv = build_conv (ck_base, to, conv);
951 /* The derived-to-base conversion indicates the initialization
952 of a parameter with base type from an object of a derived
953 type. A temporary object is created to hold the result of
954 the conversion unless we're binding directly to a reference. */
955 conv->need_temporary_p = !(flags & LOOKUP_NO_TEMP_BIND);
957 else
958 return NULL;
960 if (flags & LOOKUP_NO_NARROWING)
961 conv->check_narrowing = true;
963 return conv;
966 /* Returns nonzero if T1 is reference-related to T2. */
968 static bool
969 reference_related_p (tree t1, tree t2)
971 t1 = TYPE_MAIN_VARIANT (t1);
972 t2 = TYPE_MAIN_VARIANT (t2);
974 /* [dcl.init.ref]
976 Given types "cv1 T1" and "cv2 T2," "cv1 T1" is reference-related
977 to "cv2 T2" if T1 is the same type as T2, or T1 is a base class
978 of T2. */
979 return (same_type_p (t1, t2)
980 || (CLASS_TYPE_P (t1) && CLASS_TYPE_P (t2)
981 && DERIVED_FROM_P (t1, t2)));
984 /* Returns nonzero if T1 is reference-compatible with T2. */
986 static bool
987 reference_compatible_p (tree t1, tree t2)
989 /* [dcl.init.ref]
991 "cv1 T1" is reference compatible with "cv2 T2" if T1 is
992 reference-related to T2 and cv1 is the same cv-qualification as,
993 or greater cv-qualification than, cv2. */
994 return (reference_related_p (t1, t2)
995 && at_least_as_qualified_p (t1, t2));
998 /* Determine whether or not the EXPR (of class type S) can be
999 converted to T as in [over.match.ref]. */
1001 static conversion *
1002 convert_class_to_reference (tree reference_type, tree s, tree expr, int flags)
1004 tree conversions;
1005 tree first_arg;
1006 conversion *conv;
1007 tree t;
1008 struct z_candidate *candidates;
1009 struct z_candidate *cand;
1010 bool any_viable_p;
1012 conversions = lookup_conversions (s);
1013 if (!conversions)
1014 return NULL;
1016 /* [over.match.ref]
1018 Assuming that "cv1 T" is the underlying type of the reference
1019 being initialized, and "cv S" is the type of the initializer
1020 expression, with S a class type, the candidate functions are
1021 selected as follows:
1023 --The conversion functions of S and its base classes are
1024 considered. Those that are not hidden within S and yield type
1025 "reference to cv2 T2", where "cv1 T" is reference-compatible
1026 (_dcl.init.ref_) with "cv2 T2", are candidate functions.
1028 The argument list has one argument, which is the initializer
1029 expression. */
1031 candidates = 0;
1033 /* Conceptually, we should take the address of EXPR and put it in
1034 the argument list. Unfortunately, however, that can result in
1035 error messages, which we should not issue now because we are just
1036 trying to find a conversion operator. Therefore, we use NULL,
1037 cast to the appropriate type. */
1038 first_arg = build_int_cst (build_pointer_type (s), 0);
1040 t = TREE_TYPE (reference_type);
1042 for (; conversions; conversions = TREE_CHAIN (conversions))
1044 tree fns = TREE_VALUE (conversions);
1046 for (; fns; fns = OVL_NEXT (fns))
1048 tree f = OVL_CURRENT (fns);
1049 tree t2 = TREE_TYPE (TREE_TYPE (f));
1051 if (DECL_NONCONVERTING_P (f)
1052 && (flags & LOOKUP_ONLYCONVERTING))
1053 continue;
1055 cand = NULL;
1057 /* If this is a template function, try to get an exact
1058 match. */
1059 if (TREE_CODE (f) == TEMPLATE_DECL)
1061 cand = add_template_candidate (&candidates,
1062 f, s,
1063 NULL_TREE,
1064 first_arg,
1065 NULL,
1066 reference_type,
1067 TYPE_BINFO (s),
1068 TREE_PURPOSE (conversions),
1069 LOOKUP_NORMAL,
1070 DEDUCE_CONV);
1072 if (cand)
1074 /* Now, see if the conversion function really returns
1075 an lvalue of the appropriate type. From the
1076 point of view of unification, simply returning an
1077 rvalue of the right type is good enough. */
1078 f = cand->fn;
1079 t2 = TREE_TYPE (TREE_TYPE (f));
1080 if (TREE_CODE (t2) != REFERENCE_TYPE
1081 || !reference_compatible_p (t, TREE_TYPE (t2)))
1083 candidates = candidates->next;
1084 cand = NULL;
1088 else if (TREE_CODE (t2) == REFERENCE_TYPE
1089 && reference_compatible_p (t, TREE_TYPE (t2)))
1090 cand = add_function_candidate (&candidates, f, s, first_arg,
1091 NULL, TYPE_BINFO (s),
1092 TREE_PURPOSE (conversions),
1093 LOOKUP_NORMAL);
1095 if (cand)
1097 conversion *identity_conv;
1098 /* Build a standard conversion sequence indicating the
1099 binding from the reference type returned by the
1100 function to the desired REFERENCE_TYPE. */
1101 identity_conv
1102 = build_identity_conv (TREE_TYPE (TREE_TYPE
1103 (TREE_TYPE (cand->fn))),
1104 NULL_TREE);
1105 cand->second_conv
1106 = (direct_reference_binding
1107 (reference_type, identity_conv));
1108 cand->second_conv->rvaluedness_matches_p
1109 = TYPE_REF_IS_RVALUE (TREE_TYPE (TREE_TYPE (cand->fn)))
1110 == TYPE_REF_IS_RVALUE (reference_type);
1111 cand->second_conv->bad_p |= cand->convs[0]->bad_p;
1116 candidates = splice_viable (candidates, pedantic, &any_viable_p);
1117 /* If none of the conversion functions worked out, let our caller
1118 know. */
1119 if (!any_viable_p)
1120 return NULL;
1122 cand = tourney (candidates);
1123 if (!cand)
1124 return NULL;
1126 /* Now that we know that this is the function we're going to use fix
1127 the dummy first argument. */
1128 gcc_assert (cand->first_arg == NULL_TREE
1129 || integer_zerop (cand->first_arg));
1130 cand->first_arg = build_this (expr);
1132 /* Build a user-defined conversion sequence representing the
1133 conversion. */
1134 conv = build_conv (ck_user,
1135 TREE_TYPE (TREE_TYPE (cand->fn)),
1136 build_identity_conv (TREE_TYPE (expr), expr));
1137 conv->cand = cand;
1139 /* Merge it with the standard conversion sequence from the
1140 conversion function's return type to the desired type. */
1141 cand->second_conv = merge_conversion_sequences (conv, cand->second_conv);
1143 if (cand->viable == -1)
1144 conv->bad_p = true;
1146 return cand->second_conv;
1149 /* A reference of the indicated TYPE is being bound directly to the
1150 expression represented by the implicit conversion sequence CONV.
1151 Return a conversion sequence for this binding. */
1153 static conversion *
1154 direct_reference_binding (tree type, conversion *conv)
1156 tree t;
1158 gcc_assert (TREE_CODE (type) == REFERENCE_TYPE);
1159 gcc_assert (TREE_CODE (conv->type) != REFERENCE_TYPE);
1161 t = TREE_TYPE (type);
1163 /* [over.ics.rank]
1165 When a parameter of reference type binds directly
1166 (_dcl.init.ref_) to an argument expression, the implicit
1167 conversion sequence is the identity conversion, unless the
1168 argument expression has a type that is a derived class of the
1169 parameter type, in which case the implicit conversion sequence is
1170 a derived-to-base Conversion.
1172 If the parameter binds directly to the result of applying a
1173 conversion function to the argument expression, the implicit
1174 conversion sequence is a user-defined conversion sequence
1175 (_over.ics.user_), with the second standard conversion sequence
1176 either an identity conversion or, if the conversion function
1177 returns an entity of a type that is a derived class of the
1178 parameter type, a derived-to-base conversion. */
1179 if (!same_type_ignoring_top_level_qualifiers_p (t, conv->type))
1181 /* Represent the derived-to-base conversion. */
1182 conv = build_conv (ck_base, t, conv);
1183 /* We will actually be binding to the base-class subobject in
1184 the derived class, so we mark this conversion appropriately.
1185 That way, convert_like knows not to generate a temporary. */
1186 conv->need_temporary_p = false;
1188 return build_conv (ck_ref_bind, type, conv);
1191 /* Returns the conversion path from type FROM to reference type TO for
1192 purposes of reference binding. For lvalue binding, either pass a
1193 reference type to FROM or an lvalue expression to EXPR. If the
1194 reference will be bound to a temporary, NEED_TEMPORARY_P is set for
1195 the conversion returned. If C_CAST_P is true, this
1196 conversion is coming from a C-style cast. */
1198 static conversion *
1199 reference_binding (tree rto, tree rfrom, tree expr, bool c_cast_p, int flags)
1201 conversion *conv = NULL;
1202 tree to = TREE_TYPE (rto);
1203 tree from = rfrom;
1204 tree tfrom;
1205 bool related_p;
1206 bool compatible_p;
1207 cp_lvalue_kind lvalue_p = clk_none;
1209 if (TREE_CODE (to) == FUNCTION_TYPE && expr && type_unknown_p (expr))
1211 expr = instantiate_type (to, expr, tf_none);
1212 if (expr == error_mark_node)
1213 return NULL;
1214 from = TREE_TYPE (expr);
1217 if (TREE_CODE (from) == REFERENCE_TYPE)
1219 /* Anything with reference type is an lvalue. */
1220 lvalue_p = clk_ordinary;
1221 from = TREE_TYPE (from);
1223 else if (expr)
1224 lvalue_p = real_lvalue_p (expr);
1226 tfrom = from;
1227 if ((lvalue_p & clk_bitfield) != 0)
1228 tfrom = unlowered_expr_type (expr);
1230 /* Figure out whether or not the types are reference-related and
1231 reference compatible. We have do do this after stripping
1232 references from FROM. */
1233 related_p = reference_related_p (to, tfrom);
1234 /* If this is a C cast, first convert to an appropriately qualified
1235 type, so that we can later do a const_cast to the desired type. */
1236 if (related_p && c_cast_p
1237 && !at_least_as_qualified_p (to, tfrom))
1238 to = build_qualified_type (to, cp_type_quals (tfrom));
1239 compatible_p = reference_compatible_p (to, tfrom);
1241 /* Directly bind reference when target expression's type is compatible with
1242 the reference and expression is an lvalue. In DR391, the wording in
1243 [8.5.3/5 dcl.init.ref] is changed to also require direct bindings for
1244 const and rvalue references to rvalues of compatible class type. */
1245 if (compatible_p
1246 && (lvalue_p
1247 || (!(flags & LOOKUP_NO_TEMP_BIND)
1248 && (CP_TYPE_CONST_NON_VOLATILE_P(to) || TYPE_REF_IS_RVALUE (rto))
1249 && CLASS_TYPE_P (from))))
1251 /* [dcl.init.ref]
1253 If the initializer expression
1255 -- is an lvalue (but not an lvalue for a bit-field), and "cv1 T1"
1256 is reference-compatible with "cv2 T2,"
1258 the reference is bound directly to the initializer expression
1259 lvalue.
1261 [...]
1262 If the initializer expression is an rvalue, with T2 a class type,
1263 and "cv1 T1" is reference-compatible with "cv2 T2", the reference
1264 is bound to the object represented by the rvalue or to a sub-object
1265 within that object. */
1267 conv = build_identity_conv (tfrom, expr);
1268 conv = direct_reference_binding (rto, conv);
1270 if (flags & LOOKUP_PREFER_RVALUE)
1271 /* The top-level caller requested that we pretend that the lvalue
1272 be treated as an rvalue. */
1273 conv->rvaluedness_matches_p = TYPE_REF_IS_RVALUE (rto);
1274 else
1275 conv->rvaluedness_matches_p
1276 = (TYPE_REF_IS_RVALUE (rto) == !lvalue_p);
1278 if ((lvalue_p & clk_bitfield) != 0
1279 || ((lvalue_p & clk_packed) != 0 && !TYPE_PACKED (to)))
1280 /* For the purposes of overload resolution, we ignore the fact
1281 this expression is a bitfield or packed field. (In particular,
1282 [over.ics.ref] says specifically that a function with a
1283 non-const reference parameter is viable even if the
1284 argument is a bitfield.)
1286 However, when we actually call the function we must create
1287 a temporary to which to bind the reference. If the
1288 reference is volatile, or isn't const, then we cannot make
1289 a temporary, so we just issue an error when the conversion
1290 actually occurs. */
1291 conv->need_temporary_p = true;
1293 return conv;
1295 /* [class.conv.fct] A conversion function is never used to convert a
1296 (possibly cv-qualified) object to the (possibly cv-qualified) same
1297 object type (or a reference to it), to a (possibly cv-qualified) base
1298 class of that type (or a reference to it).... */
1299 else if (CLASS_TYPE_P (from) && !related_p
1300 && !(flags & LOOKUP_NO_CONVERSION))
1302 /* [dcl.init.ref]
1304 If the initializer expression
1306 -- has a class type (i.e., T2 is a class type) can be
1307 implicitly converted to an lvalue of type "cv3 T3," where
1308 "cv1 T1" is reference-compatible with "cv3 T3". (this
1309 conversion is selected by enumerating the applicable
1310 conversion functions (_over.match.ref_) and choosing the
1311 best one through overload resolution. (_over.match_).
1313 the reference is bound to the lvalue result of the conversion
1314 in the second case. */
1315 conv = convert_class_to_reference (rto, from, expr, flags);
1316 if (conv)
1317 return conv;
1320 /* From this point on, we conceptually need temporaries, even if we
1321 elide them. Only the cases above are "direct bindings". */
1322 if (flags & LOOKUP_NO_TEMP_BIND)
1323 return NULL;
1325 /* [over.ics.rank]
1327 When a parameter of reference type is not bound directly to an
1328 argument expression, the conversion sequence is the one required
1329 to convert the argument expression to the underlying type of the
1330 reference according to _over.best.ics_. Conceptually, this
1331 conversion sequence corresponds to copy-initializing a temporary
1332 of the underlying type with the argument expression. Any
1333 difference in top-level cv-qualification is subsumed by the
1334 initialization itself and does not constitute a conversion. */
1336 /* [dcl.init.ref]
1338 Otherwise, the reference shall be to a non-volatile const type.
1340 Under C++0x, [8.5.3/5 dcl.init.ref] it may also be an rvalue reference */
1341 if (!CP_TYPE_CONST_NON_VOLATILE_P (to) && !TYPE_REF_IS_RVALUE (rto))
1342 return NULL;
1344 /* [dcl.init.ref]
1346 Otherwise, a temporary of type "cv1 T1" is created and
1347 initialized from the initializer expression using the rules for a
1348 non-reference copy initialization. If T1 is reference-related to
1349 T2, cv1 must be the same cv-qualification as, or greater
1350 cv-qualification than, cv2; otherwise, the program is ill-formed. */
1351 if (related_p && !at_least_as_qualified_p (to, from))
1352 return NULL;
1354 /* We're generating a temporary now, but don't bind any more in the
1355 conversion (specifically, don't slice the temporary returned by a
1356 conversion operator). */
1357 flags |= LOOKUP_NO_TEMP_BIND;
1359 /* Temporaries are copy-initialized, except for this hack to allow
1360 explicit conversion ops to the copy ctor. See also
1361 add_function_candidate. */
1362 if (!(flags & LOOKUP_COPY_PARM))
1363 flags |= LOOKUP_ONLYCONVERTING;
1365 conv = implicit_conversion (to, from, expr, c_cast_p,
1366 flags);
1367 if (!conv)
1368 return NULL;
1370 conv = build_conv (ck_ref_bind, rto, conv);
1371 /* This reference binding, unlike those above, requires the
1372 creation of a temporary. */
1373 conv->need_temporary_p = true;
1374 conv->rvaluedness_matches_p = TYPE_REF_IS_RVALUE (rto);
1376 return conv;
1379 /* Returns the implicit conversion sequence (see [over.ics]) from type
1380 FROM to type TO. The optional expression EXPR may affect the
1381 conversion. FLAGS are the usual overloading flags. If C_CAST_P is
1382 true, this conversion is coming from a C-style cast. */
1384 static conversion *
1385 implicit_conversion (tree to, tree from, tree expr, bool c_cast_p,
1386 int flags)
1388 conversion *conv;
1390 if (from == error_mark_node || to == error_mark_node
1391 || expr == error_mark_node)
1392 return NULL;
1394 if (TREE_CODE (to) == REFERENCE_TYPE)
1395 conv = reference_binding (to, from, expr, c_cast_p, flags);
1396 else
1397 conv = standard_conversion (to, from, expr, c_cast_p, flags);
1399 if (conv)
1400 return conv;
1402 if (expr && BRACE_ENCLOSED_INITIALIZER_P (expr))
1404 if (is_std_init_list (to))
1405 return build_list_conv (to, expr, flags);
1407 /* Allow conversion from an initializer-list with one element to a
1408 scalar type. */
1409 if (SCALAR_TYPE_P (to))
1411 int nelts = CONSTRUCTOR_NELTS (expr);
1412 tree elt;
1414 if (nelts == 0)
1415 elt = integer_zero_node;
1416 else if (nelts == 1)
1417 elt = CONSTRUCTOR_ELT (expr, 0)->value;
1418 else
1419 elt = error_mark_node;
1421 conv = implicit_conversion (to, TREE_TYPE (elt), elt,
1422 c_cast_p, flags);
1423 if (conv)
1425 conv->check_narrowing = true;
1426 if (BRACE_ENCLOSED_INITIALIZER_P (elt))
1427 /* Too many levels of braces, i.e. '{{1}}'. */
1428 conv->bad_p = true;
1429 return conv;
1434 if (expr != NULL_TREE
1435 && (MAYBE_CLASS_TYPE_P (from)
1436 || MAYBE_CLASS_TYPE_P (to))
1437 && (flags & LOOKUP_NO_CONVERSION) == 0)
1439 struct z_candidate *cand;
1440 int convflags = (flags & (LOOKUP_NO_TEMP_BIND|LOOKUP_ONLYCONVERTING));
1442 if (CLASS_TYPE_P (to)
1443 && !CLASSTYPE_NON_AGGREGATE (complete_type (to))
1444 && BRACE_ENCLOSED_INITIALIZER_P (expr))
1445 return build_aggr_conv (to, expr, flags);
1447 cand = build_user_type_conversion_1 (to, expr, convflags);
1448 if (cand)
1449 conv = cand->second_conv;
1451 /* We used to try to bind a reference to a temporary here, but that
1452 is now handled after the recursive call to this function at the end
1453 of reference_binding. */
1454 return conv;
1457 return NULL;
1460 /* Add a new entry to the list of candidates. Used by the add_*_candidate
1461 functions. ARGS will not be changed until a single candidate is
1462 selected. */
1464 static struct z_candidate *
1465 add_candidate (struct z_candidate **candidates,
1466 tree fn, tree first_arg, const VEC(tree,gc) *args,
1467 size_t num_convs, conversion **convs,
1468 tree access_path, tree conversion_path,
1469 int viable)
1471 struct z_candidate *cand = (struct z_candidate *)
1472 conversion_obstack_alloc (sizeof (struct z_candidate));
1474 cand->fn = fn;
1475 cand->first_arg = first_arg;
1476 cand->args = args;
1477 cand->convs = convs;
1478 cand->num_convs = num_convs;
1479 cand->access_path = access_path;
1480 cand->conversion_path = conversion_path;
1481 cand->viable = viable;
1482 cand->next = *candidates;
1483 *candidates = cand;
1485 return cand;
1488 /* Create an overload candidate for the function or method FN called
1489 with the argument list FIRST_ARG/ARGS and add it to CANDIDATES.
1490 FLAGS is passed on to implicit_conversion.
1492 This does not change ARGS.
1494 CTYPE, if non-NULL, is the type we want to pretend this function
1495 comes from for purposes of overload resolution. */
1497 static struct z_candidate *
1498 add_function_candidate (struct z_candidate **candidates,
1499 tree fn, tree ctype, tree first_arg,
1500 const VEC(tree,gc) *args, tree access_path,
1501 tree conversion_path, int flags)
1503 tree parmlist = TYPE_ARG_TYPES (TREE_TYPE (fn));
1504 int i, len;
1505 conversion **convs;
1506 tree parmnode;
1507 tree orig_first_arg = first_arg;
1508 int skip;
1509 int viable = 1;
1511 /* At this point we should not see any functions which haven't been
1512 explicitly declared, except for friend functions which will have
1513 been found using argument dependent lookup. */
1514 gcc_assert (!DECL_ANTICIPATED (fn) || DECL_HIDDEN_FRIEND_P (fn));
1516 /* The `this', `in_chrg' and VTT arguments to constructors are not
1517 considered in overload resolution. */
1518 if (DECL_CONSTRUCTOR_P (fn))
1520 parmlist = skip_artificial_parms_for (fn, parmlist);
1521 skip = num_artificial_parms_for (fn);
1522 if (skip > 0 && first_arg != NULL_TREE)
1524 --skip;
1525 first_arg = NULL_TREE;
1528 else
1529 skip = 0;
1531 len = VEC_length (tree, args) - skip + (first_arg != NULL_TREE ? 1 : 0);
1532 convs = alloc_conversions (len);
1534 /* 13.3.2 - Viable functions [over.match.viable]
1535 First, to be a viable function, a candidate function shall have enough
1536 parameters to agree in number with the arguments in the list.
1538 We need to check this first; otherwise, checking the ICSes might cause
1539 us to produce an ill-formed template instantiation. */
1541 parmnode = parmlist;
1542 for (i = 0; i < len; ++i)
1544 if (parmnode == NULL_TREE || parmnode == void_list_node)
1545 break;
1546 parmnode = TREE_CHAIN (parmnode);
1549 if (i < len && parmnode)
1550 viable = 0;
1552 /* Make sure there are default args for the rest of the parms. */
1553 else if (!sufficient_parms_p (parmnode))
1554 viable = 0;
1556 if (! viable)
1557 goto out;
1559 /* Second, for F to be a viable function, there shall exist for each
1560 argument an implicit conversion sequence that converts that argument
1561 to the corresponding parameter of F. */
1563 parmnode = parmlist;
1565 for (i = 0; i < len; ++i)
1567 tree arg, argtype;
1568 conversion *t;
1569 int is_this;
1571 if (parmnode == void_list_node)
1572 break;
1574 if (i == 0 && first_arg != NULL_TREE)
1575 arg = first_arg;
1576 else
1577 arg = VEC_index (tree, args,
1578 i + skip - (first_arg != NULL_TREE ? 1 : 0));
1579 argtype = lvalue_type (arg);
1581 is_this = (i == 0 && DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
1582 && ! DECL_CONSTRUCTOR_P (fn));
1584 if (parmnode)
1586 tree parmtype = TREE_VALUE (parmnode);
1587 int lflags = flags;
1589 /* The type of the implicit object parameter ('this') for
1590 overload resolution is not always the same as for the
1591 function itself; conversion functions are considered to
1592 be members of the class being converted, and functions
1593 introduced by a using-declaration are considered to be
1594 members of the class that uses them.
1596 Since build_over_call ignores the ICS for the `this'
1597 parameter, we can just change the parm type. */
1598 if (ctype && is_this)
1600 parmtype
1601 = build_qualified_type (ctype,
1602 TYPE_QUALS (TREE_TYPE (parmtype)));
1603 parmtype = build_pointer_type (parmtype);
1606 if (ctype && i == 0 && DECL_COPY_CONSTRUCTOR_P (fn))
1608 /* Hack: Direct-initialize copy parm (i.e. suppress
1609 LOOKUP_ONLYCONVERTING) to make explicit conversion ops
1610 work. See also reference_binding. */
1611 lflags |= LOOKUP_COPY_PARM;
1612 if (flags & LOOKUP_NO_COPY_CTOR_CONVERSION)
1613 lflags |= LOOKUP_NO_CONVERSION;
1615 else
1616 lflags |= LOOKUP_ONLYCONVERTING;
1618 t = implicit_conversion (parmtype, argtype, arg,
1619 /*c_cast_p=*/false, lflags);
1621 else
1623 t = build_identity_conv (argtype, arg);
1624 t->ellipsis_p = true;
1627 if (t && is_this)
1628 t->this_p = true;
1630 convs[i] = t;
1631 if (! t)
1633 viable = 0;
1634 break;
1637 if (t->bad_p)
1638 viable = -1;
1640 if (parmnode)
1641 parmnode = TREE_CHAIN (parmnode);
1644 out:
1645 return add_candidate (candidates, fn, orig_first_arg, args, len, convs,
1646 access_path, conversion_path, viable);
1649 /* Create an overload candidate for the conversion function FN which will
1650 be invoked for expression OBJ, producing a pointer-to-function which
1651 will in turn be called with the argument list FIRST_ARG/ARGLIST,
1652 and add it to CANDIDATES. This does not change ARGLIST. FLAGS is
1653 passed on to implicit_conversion.
1655 Actually, we don't really care about FN; we care about the type it
1656 converts to. There may be multiple conversion functions that will
1657 convert to that type, and we rely on build_user_type_conversion_1 to
1658 choose the best one; so when we create our candidate, we record the type
1659 instead of the function. */
1661 static struct z_candidate *
1662 add_conv_candidate (struct z_candidate **candidates, tree fn, tree obj,
1663 tree first_arg, const VEC(tree,gc) *arglist,
1664 tree access_path, tree conversion_path)
1666 tree totype = TREE_TYPE (TREE_TYPE (fn));
1667 int i, len, viable, flags;
1668 tree parmlist, parmnode;
1669 conversion **convs;
1671 for (parmlist = totype; TREE_CODE (parmlist) != FUNCTION_TYPE; )
1672 parmlist = TREE_TYPE (parmlist);
1673 parmlist = TYPE_ARG_TYPES (parmlist);
1675 len = VEC_length (tree, arglist) + (first_arg != NULL_TREE ? 1 : 0) + 1;
1676 convs = alloc_conversions (len);
1677 parmnode = parmlist;
1678 viable = 1;
1679 flags = LOOKUP_IMPLICIT;
1681 /* Don't bother looking up the same type twice. */
1682 if (*candidates && (*candidates)->fn == totype)
1683 return NULL;
1685 for (i = 0; i < len; ++i)
1687 tree arg, argtype;
1688 conversion *t;
1690 if (i == 0)
1691 arg = obj;
1692 else if (i == 1 && first_arg != NULL_TREE)
1693 arg = first_arg;
1694 else
1695 arg = VEC_index (tree, arglist,
1696 i - (first_arg != NULL_TREE ? 1 : 0) - 1);
1697 argtype = lvalue_type (arg);
1699 if (i == 0)
1700 t = implicit_conversion (totype, argtype, arg, /*c_cast_p=*/false,
1701 flags);
1702 else if (parmnode == void_list_node)
1703 break;
1704 else if (parmnode)
1705 t = implicit_conversion (TREE_VALUE (parmnode), argtype, arg,
1706 /*c_cast_p=*/false, flags);
1707 else
1709 t = build_identity_conv (argtype, arg);
1710 t->ellipsis_p = true;
1713 convs[i] = t;
1714 if (! t)
1715 break;
1717 if (t->bad_p)
1718 viable = -1;
1720 if (i == 0)
1721 continue;
1723 if (parmnode)
1724 parmnode = TREE_CHAIN (parmnode);
1727 if (i < len)
1728 viable = 0;
1730 if (!sufficient_parms_p (parmnode))
1731 viable = 0;
1733 return add_candidate (candidates, totype, first_arg, arglist, len, convs,
1734 access_path, conversion_path, viable);
1737 static void
1738 build_builtin_candidate (struct z_candidate **candidates, tree fnname,
1739 tree type1, tree type2, tree *args, tree *argtypes,
1740 int flags)
1742 conversion *t;
1743 conversion **convs;
1744 size_t num_convs;
1745 int viable = 1, i;
1746 tree types[2];
1748 types[0] = type1;
1749 types[1] = type2;
1751 num_convs = args[2] ? 3 : (args[1] ? 2 : 1);
1752 convs = alloc_conversions (num_convs);
1753 flags |= LOOKUP_ONLYCONVERTING;
1755 for (i = 0; i < 2; ++i)
1757 if (! args[i])
1758 break;
1760 t = implicit_conversion (types[i], argtypes[i], args[i],
1761 /*c_cast_p=*/false, flags);
1762 if (! t)
1764 viable = 0;
1765 /* We need something for printing the candidate. */
1766 t = build_identity_conv (types[i], NULL_TREE);
1768 else if (t->bad_p)
1769 viable = 0;
1770 convs[i] = t;
1773 /* For COND_EXPR we rearranged the arguments; undo that now. */
1774 if (args[2])
1776 convs[2] = convs[1];
1777 convs[1] = convs[0];
1778 t = implicit_conversion (boolean_type_node, argtypes[2], args[2],
1779 /*c_cast_p=*/false, flags);
1780 if (t)
1781 convs[0] = t;
1782 else
1783 viable = 0;
1786 add_candidate (candidates, fnname, /*first_arg=*/NULL_TREE, /*args=*/NULL,
1787 num_convs, convs,
1788 /*access_path=*/NULL_TREE,
1789 /*conversion_path=*/NULL_TREE,
1790 viable);
1793 static bool
1794 is_complete (tree t)
1796 return COMPLETE_TYPE_P (complete_type (t));
1799 /* Returns nonzero if TYPE is a promoted arithmetic type. */
1801 static bool
1802 promoted_arithmetic_type_p (tree type)
1804 /* [over.built]
1806 In this section, the term promoted integral type is used to refer
1807 to those integral types which are preserved by integral promotion
1808 (including e.g. int and long but excluding e.g. char).
1809 Similarly, the term promoted arithmetic type refers to promoted
1810 integral types plus floating types. */
1811 return ((CP_INTEGRAL_TYPE_P (type)
1812 && same_type_p (type_promotes_to (type), type))
1813 || TREE_CODE (type) == REAL_TYPE);
1816 /* Create any builtin operator overload candidates for the operator in
1817 question given the converted operand types TYPE1 and TYPE2. The other
1818 args are passed through from add_builtin_candidates to
1819 build_builtin_candidate.
1821 TYPE1 and TYPE2 may not be permissible, and we must filter them.
1822 If CODE is requires candidates operands of the same type of the kind
1823 of which TYPE1 and TYPE2 are, we add both candidates
1824 CODE (TYPE1, TYPE1) and CODE (TYPE2, TYPE2). */
1826 static void
1827 add_builtin_candidate (struct z_candidate **candidates, enum tree_code code,
1828 enum tree_code code2, tree fnname, tree type1,
1829 tree type2, tree *args, tree *argtypes, int flags)
1831 switch (code)
1833 case POSTINCREMENT_EXPR:
1834 case POSTDECREMENT_EXPR:
1835 args[1] = integer_zero_node;
1836 type2 = integer_type_node;
1837 break;
1838 default:
1839 break;
1842 switch (code)
1845 /* 4 For every pair T, VQ), where T is an arithmetic or enumeration type,
1846 and VQ is either volatile or empty, there exist candidate operator
1847 functions of the form
1848 VQ T& operator++(VQ T&);
1849 T operator++(VQ T&, int);
1850 5 For every pair T, VQ), where T is an enumeration type or an arithmetic
1851 type other than bool, and VQ is either volatile or empty, there exist
1852 candidate operator functions of the form
1853 VQ T& operator--(VQ T&);
1854 T operator--(VQ T&, int);
1855 6 For every pair T, VQ), where T is a cv-qualified or cv-unqualified
1856 complete object type, and VQ is either volatile or empty, there exist
1857 candidate operator functions of the form
1858 T*VQ& operator++(T*VQ&);
1859 T*VQ& operator--(T*VQ&);
1860 T* operator++(T*VQ&, int);
1861 T* operator--(T*VQ&, int); */
1863 case POSTDECREMENT_EXPR:
1864 case PREDECREMENT_EXPR:
1865 if (TREE_CODE (type1) == BOOLEAN_TYPE)
1866 return;
1867 case POSTINCREMENT_EXPR:
1868 case PREINCREMENT_EXPR:
1869 if (ARITHMETIC_TYPE_P (type1) || TYPE_PTROB_P (type1))
1871 type1 = build_reference_type (type1);
1872 break;
1874 return;
1876 /* 7 For every cv-qualified or cv-unqualified complete object type T, there
1877 exist candidate operator functions of the form
1879 T& operator*(T*);
1881 8 For every function type T, there exist candidate operator functions of
1882 the form
1883 T& operator*(T*); */
1885 case INDIRECT_REF:
1886 if (TREE_CODE (type1) == POINTER_TYPE
1887 && (TYPE_PTROB_P (type1)
1888 || TREE_CODE (TREE_TYPE (type1)) == FUNCTION_TYPE))
1889 break;
1890 return;
1892 /* 9 For every type T, there exist candidate operator functions of the form
1893 T* operator+(T*);
1895 10For every promoted arithmetic type T, there exist candidate operator
1896 functions of the form
1897 T operator+(T);
1898 T operator-(T); */
1900 case UNARY_PLUS_EXPR: /* unary + */
1901 if (TREE_CODE (type1) == POINTER_TYPE)
1902 break;
1903 case NEGATE_EXPR:
1904 if (ARITHMETIC_TYPE_P (type1))
1905 break;
1906 return;
1908 /* 11For every promoted integral type T, there exist candidate operator
1909 functions of the form
1910 T operator~(T); */
1912 case BIT_NOT_EXPR:
1913 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1))
1914 break;
1915 return;
1917 /* 12For every quintuple C1, C2, T, CV1, CV2), where C2 is a class type, C1
1918 is the same type as C2 or is a derived class of C2, T is a complete
1919 object type or a function type, and CV1 and CV2 are cv-qualifier-seqs,
1920 there exist candidate operator functions of the form
1921 CV12 T& operator->*(CV1 C1*, CV2 T C2::*);
1922 where CV12 is the union of CV1 and CV2. */
1924 case MEMBER_REF:
1925 if (TREE_CODE (type1) == POINTER_TYPE
1926 && TYPE_PTR_TO_MEMBER_P (type2))
1928 tree c1 = TREE_TYPE (type1);
1929 tree c2 = TYPE_PTRMEM_CLASS_TYPE (type2);
1931 if (MAYBE_CLASS_TYPE_P (c1) && DERIVED_FROM_P (c2, c1)
1932 && (TYPE_PTRMEMFUNC_P (type2)
1933 || is_complete (TYPE_PTRMEM_POINTED_TO_TYPE (type2))))
1934 break;
1936 return;
1938 /* 13For every pair of promoted arithmetic types L and R, there exist can-
1939 didate operator functions of the form
1940 LR operator*(L, R);
1941 LR operator/(L, R);
1942 LR operator+(L, R);
1943 LR operator-(L, R);
1944 bool operator<(L, R);
1945 bool operator>(L, R);
1946 bool operator<=(L, R);
1947 bool operator>=(L, R);
1948 bool operator==(L, R);
1949 bool operator!=(L, R);
1950 where LR is the result of the usual arithmetic conversions between
1951 types L and R.
1953 14For every pair of types T and I, where T is a cv-qualified or cv-
1954 unqualified complete object type and I is a promoted integral type,
1955 there exist candidate operator functions of the form
1956 T* operator+(T*, I);
1957 T& operator[](T*, I);
1958 T* operator-(T*, I);
1959 T* operator+(I, T*);
1960 T& operator[](I, T*);
1962 15For every T, where T is a pointer to complete object type, there exist
1963 candidate operator functions of the form112)
1964 ptrdiff_t operator-(T, T);
1966 16For every pointer or enumeration type T, there exist candidate operator
1967 functions of the form
1968 bool operator<(T, T);
1969 bool operator>(T, T);
1970 bool operator<=(T, T);
1971 bool operator>=(T, T);
1972 bool operator==(T, T);
1973 bool operator!=(T, T);
1975 17For every pointer to member type T, there exist candidate operator
1976 functions of the form
1977 bool operator==(T, T);
1978 bool operator!=(T, T); */
1980 case MINUS_EXPR:
1981 if (TYPE_PTROB_P (type1) && TYPE_PTROB_P (type2))
1982 break;
1983 if (TYPE_PTROB_P (type1)
1984 && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
1986 type2 = ptrdiff_type_node;
1987 break;
1989 case MULT_EXPR:
1990 case TRUNC_DIV_EXPR:
1991 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
1992 break;
1993 return;
1995 case EQ_EXPR:
1996 case NE_EXPR:
1997 if ((TYPE_PTRMEMFUNC_P (type1) && TYPE_PTRMEMFUNC_P (type2))
1998 || (TYPE_PTRMEM_P (type1) && TYPE_PTRMEM_P (type2)))
1999 break;
2000 if (TYPE_PTR_TO_MEMBER_P (type1) && null_ptr_cst_p (args[1]))
2002 type2 = type1;
2003 break;
2005 if (TYPE_PTR_TO_MEMBER_P (type2) && null_ptr_cst_p (args[0]))
2007 type1 = type2;
2008 break;
2010 /* Fall through. */
2011 case LT_EXPR:
2012 case GT_EXPR:
2013 case LE_EXPR:
2014 case GE_EXPR:
2015 case MAX_EXPR:
2016 case MIN_EXPR:
2017 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2018 break;
2019 if (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
2020 break;
2021 if (TREE_CODE (type1) == ENUMERAL_TYPE
2022 && TREE_CODE (type2) == ENUMERAL_TYPE)
2023 break;
2024 if (TYPE_PTR_P (type1)
2025 && null_ptr_cst_p (args[1])
2026 && !uses_template_parms (type1))
2028 type2 = type1;
2029 break;
2031 if (null_ptr_cst_p (args[0])
2032 && TYPE_PTR_P (type2)
2033 && !uses_template_parms (type2))
2035 type1 = type2;
2036 break;
2038 return;
2040 case PLUS_EXPR:
2041 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2042 break;
2043 case ARRAY_REF:
2044 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1) && TYPE_PTROB_P (type2))
2046 type1 = ptrdiff_type_node;
2047 break;
2049 if (TYPE_PTROB_P (type1) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2051 type2 = ptrdiff_type_node;
2052 break;
2054 return;
2056 /* 18For every pair of promoted integral types L and R, there exist candi-
2057 date operator functions of the form
2058 LR operator%(L, R);
2059 LR operator&(L, R);
2060 LR operator^(L, R);
2061 LR operator|(L, R);
2062 L operator<<(L, R);
2063 L operator>>(L, R);
2064 where LR is the result of the usual arithmetic conversions between
2065 types L and R. */
2067 case TRUNC_MOD_EXPR:
2068 case BIT_AND_EXPR:
2069 case BIT_IOR_EXPR:
2070 case BIT_XOR_EXPR:
2071 case LSHIFT_EXPR:
2072 case RSHIFT_EXPR:
2073 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2074 break;
2075 return;
2077 /* 19For every triple L, VQ, R), where L is an arithmetic or enumeration
2078 type, VQ is either volatile or empty, and R is a promoted arithmetic
2079 type, there exist candidate operator functions of the form
2080 VQ L& operator=(VQ L&, R);
2081 VQ L& operator*=(VQ L&, R);
2082 VQ L& operator/=(VQ L&, R);
2083 VQ L& operator+=(VQ L&, R);
2084 VQ L& operator-=(VQ L&, R);
2086 20For every pair T, VQ), where T is any type and VQ is either volatile
2087 or empty, there exist candidate operator functions of the form
2088 T*VQ& operator=(T*VQ&, T*);
2090 21For every pair T, VQ), where T is a pointer to member type and VQ is
2091 either volatile or empty, there exist candidate operator functions of
2092 the form
2093 VQ T& operator=(VQ T&, T);
2095 22For every triple T, VQ, I), where T is a cv-qualified or cv-
2096 unqualified complete object type, VQ is either volatile or empty, and
2097 I is a promoted integral type, there exist candidate operator func-
2098 tions of the form
2099 T*VQ& operator+=(T*VQ&, I);
2100 T*VQ& operator-=(T*VQ&, I);
2102 23For every triple L, VQ, R), where L is an integral or enumeration
2103 type, VQ is either volatile or empty, and R is a promoted integral
2104 type, there exist candidate operator functions of the form
2106 VQ L& operator%=(VQ L&, R);
2107 VQ L& operator<<=(VQ L&, R);
2108 VQ L& operator>>=(VQ L&, R);
2109 VQ L& operator&=(VQ L&, R);
2110 VQ L& operator^=(VQ L&, R);
2111 VQ L& operator|=(VQ L&, R); */
2113 case MODIFY_EXPR:
2114 switch (code2)
2116 case PLUS_EXPR:
2117 case MINUS_EXPR:
2118 if (TYPE_PTROB_P (type1) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2120 type2 = ptrdiff_type_node;
2121 break;
2123 case MULT_EXPR:
2124 case TRUNC_DIV_EXPR:
2125 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2126 break;
2127 return;
2129 case TRUNC_MOD_EXPR:
2130 case BIT_AND_EXPR:
2131 case BIT_IOR_EXPR:
2132 case BIT_XOR_EXPR:
2133 case LSHIFT_EXPR:
2134 case RSHIFT_EXPR:
2135 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2136 break;
2137 return;
2139 case NOP_EXPR:
2140 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2141 break;
2142 if ((TYPE_PTRMEMFUNC_P (type1) && TYPE_PTRMEMFUNC_P (type2))
2143 || (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
2144 || (TYPE_PTRMEM_P (type1) && TYPE_PTRMEM_P (type2))
2145 || ((TYPE_PTRMEMFUNC_P (type1)
2146 || TREE_CODE (type1) == POINTER_TYPE)
2147 && null_ptr_cst_p (args[1])))
2149 type2 = type1;
2150 break;
2152 return;
2154 default:
2155 gcc_unreachable ();
2157 type1 = build_reference_type (type1);
2158 break;
2160 case COND_EXPR:
2161 /* [over.built]
2163 For every pair of promoted arithmetic types L and R, there
2164 exist candidate operator functions of the form
2166 LR operator?(bool, L, R);
2168 where LR is the result of the usual arithmetic conversions
2169 between types L and R.
2171 For every type T, where T is a pointer or pointer-to-member
2172 type, there exist candidate operator functions of the form T
2173 operator?(bool, T, T); */
2175 if (promoted_arithmetic_type_p (type1)
2176 && promoted_arithmetic_type_p (type2))
2177 /* That's OK. */
2178 break;
2180 /* Otherwise, the types should be pointers. */
2181 if (!(TYPE_PTR_P (type1) || TYPE_PTR_TO_MEMBER_P (type1))
2182 || !(TYPE_PTR_P (type2) || TYPE_PTR_TO_MEMBER_P (type2)))
2183 return;
2185 /* We don't check that the two types are the same; the logic
2186 below will actually create two candidates; one in which both
2187 parameter types are TYPE1, and one in which both parameter
2188 types are TYPE2. */
2189 break;
2191 default:
2192 gcc_unreachable ();
2195 /* If we're dealing with two pointer types or two enumeral types,
2196 we need candidates for both of them. */
2197 if (type2 && !same_type_p (type1, type2)
2198 && TREE_CODE (type1) == TREE_CODE (type2)
2199 && (TREE_CODE (type1) == REFERENCE_TYPE
2200 || (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
2201 || (TYPE_PTRMEM_P (type1) && TYPE_PTRMEM_P (type2))
2202 || TYPE_PTRMEMFUNC_P (type1)
2203 || MAYBE_CLASS_TYPE_P (type1)
2204 || TREE_CODE (type1) == ENUMERAL_TYPE))
2206 build_builtin_candidate
2207 (candidates, fnname, type1, type1, args, argtypes, flags);
2208 build_builtin_candidate
2209 (candidates, fnname, type2, type2, args, argtypes, flags);
2210 return;
2213 build_builtin_candidate
2214 (candidates, fnname, type1, type2, args, argtypes, flags);
2217 tree
2218 type_decays_to (tree type)
2220 if (TREE_CODE (type) == ARRAY_TYPE)
2221 return build_pointer_type (TREE_TYPE (type));
2222 if (TREE_CODE (type) == FUNCTION_TYPE)
2223 return build_pointer_type (type);
2224 return type;
2227 /* There are three conditions of builtin candidates:
2229 1) bool-taking candidates. These are the same regardless of the input.
2230 2) pointer-pair taking candidates. These are generated for each type
2231 one of the input types converts to.
2232 3) arithmetic candidates. According to the standard, we should generate
2233 all of these, but I'm trying not to...
2235 Here we generate a superset of the possible candidates for this particular
2236 case. That is a subset of the full set the standard defines, plus some
2237 other cases which the standard disallows. add_builtin_candidate will
2238 filter out the invalid set. */
2240 static void
2241 add_builtin_candidates (struct z_candidate **candidates, enum tree_code code,
2242 enum tree_code code2, tree fnname, tree *args,
2243 int flags)
2245 int ref1, i;
2246 int enum_p = 0;
2247 tree type, argtypes[3];
2248 /* TYPES[i] is the set of possible builtin-operator parameter types
2249 we will consider for the Ith argument. These are represented as
2250 a TREE_LIST; the TREE_VALUE of each node is the potential
2251 parameter type. */
2252 tree types[2];
2254 for (i = 0; i < 3; ++i)
2256 if (args[i])
2257 argtypes[i] = unlowered_expr_type (args[i]);
2258 else
2259 argtypes[i] = NULL_TREE;
2262 switch (code)
2264 /* 4 For every pair T, VQ), where T is an arithmetic or enumeration type,
2265 and VQ is either volatile or empty, there exist candidate operator
2266 functions of the form
2267 VQ T& operator++(VQ T&); */
2269 case POSTINCREMENT_EXPR:
2270 case PREINCREMENT_EXPR:
2271 case POSTDECREMENT_EXPR:
2272 case PREDECREMENT_EXPR:
2273 case MODIFY_EXPR:
2274 ref1 = 1;
2275 break;
2277 /* 24There also exist candidate operator functions of the form
2278 bool operator!(bool);
2279 bool operator&&(bool, bool);
2280 bool operator||(bool, bool); */
2282 case TRUTH_NOT_EXPR:
2283 build_builtin_candidate
2284 (candidates, fnname, boolean_type_node,
2285 NULL_TREE, args, argtypes, flags);
2286 return;
2288 case TRUTH_ORIF_EXPR:
2289 case TRUTH_ANDIF_EXPR:
2290 build_builtin_candidate
2291 (candidates, fnname, boolean_type_node,
2292 boolean_type_node, args, argtypes, flags);
2293 return;
2295 case ADDR_EXPR:
2296 case COMPOUND_EXPR:
2297 case COMPONENT_REF:
2298 return;
2300 case COND_EXPR:
2301 case EQ_EXPR:
2302 case NE_EXPR:
2303 case LT_EXPR:
2304 case LE_EXPR:
2305 case GT_EXPR:
2306 case GE_EXPR:
2307 enum_p = 1;
2308 /* Fall through. */
2310 default:
2311 ref1 = 0;
2314 types[0] = types[1] = NULL_TREE;
2316 for (i = 0; i < 2; ++i)
2318 if (! args[i])
2320 else if (MAYBE_CLASS_TYPE_P (argtypes[i]))
2322 tree convs;
2324 if (i == 0 && code == MODIFY_EXPR && code2 == NOP_EXPR)
2325 return;
2327 convs = lookup_conversions (argtypes[i]);
2329 if (code == COND_EXPR)
2331 if (real_lvalue_p (args[i]))
2332 types[i] = tree_cons
2333 (NULL_TREE, build_reference_type (argtypes[i]), types[i]);
2335 types[i] = tree_cons
2336 (NULL_TREE, TYPE_MAIN_VARIANT (argtypes[i]), types[i]);
2339 else if (! convs)
2340 return;
2342 for (; convs; convs = TREE_CHAIN (convs))
2344 type = TREE_TYPE (convs);
2346 if (i == 0 && ref1
2347 && (TREE_CODE (type) != REFERENCE_TYPE
2348 || CP_TYPE_CONST_P (TREE_TYPE (type))))
2349 continue;
2351 if (code == COND_EXPR && TREE_CODE (type) == REFERENCE_TYPE)
2352 types[i] = tree_cons (NULL_TREE, type, types[i]);
2354 type = non_reference (type);
2355 if (i != 0 || ! ref1)
2357 type = TYPE_MAIN_VARIANT (type_decays_to (type));
2358 if (enum_p && TREE_CODE (type) == ENUMERAL_TYPE)
2359 types[i] = tree_cons (NULL_TREE, type, types[i]);
2360 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
2361 type = type_promotes_to (type);
2364 if (! value_member (type, types[i]))
2365 types[i] = tree_cons (NULL_TREE, type, types[i]);
2368 else
2370 if (code == COND_EXPR && real_lvalue_p (args[i]))
2371 types[i] = tree_cons
2372 (NULL_TREE, build_reference_type (argtypes[i]), types[i]);
2373 type = non_reference (argtypes[i]);
2374 if (i != 0 || ! ref1)
2376 type = TYPE_MAIN_VARIANT (type_decays_to (type));
2377 if (enum_p && UNSCOPED_ENUM_P (type))
2378 types[i] = tree_cons (NULL_TREE, type, types[i]);
2379 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
2380 type = type_promotes_to (type);
2382 types[i] = tree_cons (NULL_TREE, type, types[i]);
2386 /* Run through the possible parameter types of both arguments,
2387 creating candidates with those parameter types. */
2388 for (; types[0]; types[0] = TREE_CHAIN (types[0]))
2390 if (types[1])
2391 for (type = types[1]; type; type = TREE_CHAIN (type))
2392 add_builtin_candidate
2393 (candidates, code, code2, fnname, TREE_VALUE (types[0]),
2394 TREE_VALUE (type), args, argtypes, flags);
2395 else
2396 add_builtin_candidate
2397 (candidates, code, code2, fnname, TREE_VALUE (types[0]),
2398 NULL_TREE, args, argtypes, flags);
2403 /* If TMPL can be successfully instantiated as indicated by
2404 EXPLICIT_TARGS and ARGLIST, adds the instantiation to CANDIDATES.
2406 TMPL is the template. EXPLICIT_TARGS are any explicit template
2407 arguments. ARGLIST is the arguments provided at the call-site.
2408 This does not change ARGLIST. The RETURN_TYPE is the desired type
2409 for conversion operators. If OBJ is NULL_TREE, FLAGS and CTYPE are
2410 as for add_function_candidate. If an OBJ is supplied, FLAGS and
2411 CTYPE are ignored, and OBJ is as for add_conv_candidate. */
2413 static struct z_candidate*
2414 add_template_candidate_real (struct z_candidate **candidates, tree tmpl,
2415 tree ctype, tree explicit_targs, tree first_arg,
2416 const VEC(tree,gc) *arglist, tree return_type,
2417 tree access_path, tree conversion_path,
2418 int flags, tree obj, unification_kind_t strict)
2420 int ntparms = DECL_NTPARMS (tmpl);
2421 tree targs = make_tree_vec (ntparms);
2422 unsigned int nargs;
2423 int skip_without_in_chrg;
2424 tree first_arg_without_in_chrg;
2425 tree *args_without_in_chrg;
2426 unsigned int nargs_without_in_chrg;
2427 unsigned int ia, ix;
2428 tree arg;
2429 struct z_candidate *cand;
2430 int i;
2431 tree fn;
2433 nargs = (first_arg == NULL_TREE ? 0 : 1) + VEC_length (tree, arglist);
2435 skip_without_in_chrg = 0;
2437 first_arg_without_in_chrg = first_arg;
2439 /* We don't do deduction on the in-charge parameter, the VTT
2440 parameter or 'this'. */
2441 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (tmpl))
2443 if (first_arg_without_in_chrg != NULL_TREE)
2444 first_arg_without_in_chrg = NULL_TREE;
2445 else
2446 ++skip_without_in_chrg;
2449 if ((DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (tmpl)
2450 || DECL_BASE_CONSTRUCTOR_P (tmpl))
2451 && CLASSTYPE_VBASECLASSES (DECL_CONTEXT (tmpl)))
2453 if (first_arg_without_in_chrg != NULL_TREE)
2454 first_arg_without_in_chrg = NULL_TREE;
2455 else
2456 ++skip_without_in_chrg;
2459 nargs_without_in_chrg = ((first_arg_without_in_chrg != NULL_TREE ? 1 : 0)
2460 + (VEC_length (tree, arglist)
2461 - skip_without_in_chrg));
2462 args_without_in_chrg = XALLOCAVEC (tree, nargs_without_in_chrg);
2463 ia = 0;
2464 if (first_arg_without_in_chrg != NULL_TREE)
2466 args_without_in_chrg[ia] = first_arg_without_in_chrg;
2467 ++ia;
2469 for (ix = skip_without_in_chrg;
2470 VEC_iterate (tree, arglist, ix, arg);
2471 ++ix)
2473 args_without_in_chrg[ia] = arg;
2474 ++ia;
2476 gcc_assert (ia == nargs_without_in_chrg);
2478 i = fn_type_unification (tmpl, explicit_targs, targs,
2479 args_without_in_chrg,
2480 nargs_without_in_chrg,
2481 return_type, strict, flags);
2483 if (i != 0)
2484 return NULL;
2486 fn = instantiate_template (tmpl, targs, tf_none);
2487 if (fn == error_mark_node)
2488 return NULL;
2490 /* In [class.copy]:
2492 A member function template is never instantiated to perform the
2493 copy of a class object to an object of its class type.
2495 It's a little unclear what this means; the standard explicitly
2496 does allow a template to be used to copy a class. For example,
2499 struct A {
2500 A(A&);
2501 template <class T> A(const T&);
2503 const A f ();
2504 void g () { A a (f ()); }
2506 the member template will be used to make the copy. The section
2507 quoted above appears in the paragraph that forbids constructors
2508 whose only parameter is (a possibly cv-qualified variant of) the
2509 class type, and a logical interpretation is that the intent was
2510 to forbid the instantiation of member templates which would then
2511 have that form. */
2512 if (DECL_CONSTRUCTOR_P (fn) && nargs == 2)
2514 tree arg_types = FUNCTION_FIRST_USER_PARMTYPE (fn);
2515 if (arg_types && same_type_p (TYPE_MAIN_VARIANT (TREE_VALUE (arg_types)),
2516 ctype))
2517 return NULL;
2520 if (obj != NULL_TREE)
2521 /* Aha, this is a conversion function. */
2522 cand = add_conv_candidate (candidates, fn, obj, first_arg, arglist,
2523 access_path, conversion_path);
2524 else
2525 cand = add_function_candidate (candidates, fn, ctype,
2526 first_arg, arglist, access_path,
2527 conversion_path, flags);
2528 if (DECL_TI_TEMPLATE (fn) != tmpl)
2529 /* This situation can occur if a member template of a template
2530 class is specialized. Then, instantiate_template might return
2531 an instantiation of the specialization, in which case the
2532 DECL_TI_TEMPLATE field will point at the original
2533 specialization. For example:
2535 template <class T> struct S { template <class U> void f(U);
2536 template <> void f(int) {}; };
2537 S<double> sd;
2538 sd.f(3);
2540 Here, TMPL will be template <class U> S<double>::f(U).
2541 And, instantiate template will give us the specialization
2542 template <> S<double>::f(int). But, the DECL_TI_TEMPLATE field
2543 for this will point at template <class T> template <> S<T>::f(int),
2544 so that we can find the definition. For the purposes of
2545 overload resolution, however, we want the original TMPL. */
2546 cand->template_decl = tree_cons (tmpl, targs, NULL_TREE);
2547 else
2548 cand->template_decl = DECL_TEMPLATE_INFO (fn);
2550 return cand;
2554 static struct z_candidate *
2555 add_template_candidate (struct z_candidate **candidates, tree tmpl, tree ctype,
2556 tree explicit_targs, tree first_arg,
2557 const VEC(tree,gc) *arglist, tree return_type,
2558 tree access_path, tree conversion_path, int flags,
2559 unification_kind_t strict)
2561 return
2562 add_template_candidate_real (candidates, tmpl, ctype,
2563 explicit_targs, first_arg, arglist,
2564 return_type, access_path, conversion_path,
2565 flags, NULL_TREE, strict);
2569 static struct z_candidate *
2570 add_template_conv_candidate (struct z_candidate **candidates, tree tmpl,
2571 tree obj, tree first_arg,
2572 const VEC(tree,gc) *arglist,
2573 tree return_type, tree access_path,
2574 tree conversion_path)
2576 return
2577 add_template_candidate_real (candidates, tmpl, NULL_TREE, NULL_TREE,
2578 first_arg, arglist, return_type, access_path,
2579 conversion_path, 0, obj, DEDUCE_CONV);
2582 /* The CANDS are the set of candidates that were considered for
2583 overload resolution. Return the set of viable candidates. If none
2584 of the candidates were viable, set *ANY_VIABLE_P to true. STRICT_P
2585 is true if a candidate should be considered viable only if it is
2586 strictly viable. */
2588 static struct z_candidate*
2589 splice_viable (struct z_candidate *cands,
2590 bool strict_p,
2591 bool *any_viable_p)
2593 struct z_candidate *viable;
2594 struct z_candidate **last_viable;
2595 struct z_candidate **cand;
2597 viable = NULL;
2598 last_viable = &viable;
2599 *any_viable_p = false;
2601 cand = &cands;
2602 while (*cand)
2604 struct z_candidate *c = *cand;
2605 if (strict_p ? c->viable == 1 : c->viable)
2607 *last_viable = c;
2608 *cand = c->next;
2609 c->next = NULL;
2610 last_viable = &c->next;
2611 *any_viable_p = true;
2613 else
2614 cand = &c->next;
2617 return viable ? viable : cands;
2620 static bool
2621 any_strictly_viable (struct z_candidate *cands)
2623 for (; cands; cands = cands->next)
2624 if (cands->viable == 1)
2625 return true;
2626 return false;
2629 /* OBJ is being used in an expression like "OBJ.f (...)". In other
2630 words, it is about to become the "this" pointer for a member
2631 function call. Take the address of the object. */
2633 static tree
2634 build_this (tree obj)
2636 /* In a template, we are only concerned about the type of the
2637 expression, so we can take a shortcut. */
2638 if (processing_template_decl)
2639 return build_address (obj);
2641 return cp_build_unary_op (ADDR_EXPR, obj, 0, tf_warning_or_error);
2644 /* Returns true iff functions are equivalent. Equivalent functions are
2645 not '==' only if one is a function-local extern function or if
2646 both are extern "C". */
2648 static inline int
2649 equal_functions (tree fn1, tree fn2)
2651 if (DECL_LOCAL_FUNCTION_P (fn1) || DECL_LOCAL_FUNCTION_P (fn2)
2652 || DECL_EXTERN_C_FUNCTION_P (fn1))
2653 return decls_match (fn1, fn2);
2654 return fn1 == fn2;
2657 /* Print information about one overload candidate CANDIDATE. MSGSTR
2658 is the text to print before the candidate itself.
2660 NOTE: Unlike most diagnostic functions in GCC, MSGSTR is expected
2661 to have been run through gettext by the caller. This wart makes
2662 life simpler in print_z_candidates and for the translators. */
2664 static void
2665 print_z_candidate (const char *msgstr, struct z_candidate *candidate)
2667 if (TREE_CODE (candidate->fn) == IDENTIFIER_NODE)
2669 if (candidate->num_convs == 3)
2670 inform (input_location, "%s %D(%T, %T, %T) <built-in>", msgstr, candidate->fn,
2671 candidate->convs[0]->type,
2672 candidate->convs[1]->type,
2673 candidate->convs[2]->type);
2674 else if (candidate->num_convs == 2)
2675 inform (input_location, "%s %D(%T, %T) <built-in>", msgstr, candidate->fn,
2676 candidate->convs[0]->type,
2677 candidate->convs[1]->type);
2678 else
2679 inform (input_location, "%s %D(%T) <built-in>", msgstr, candidate->fn,
2680 candidate->convs[0]->type);
2682 else if (TYPE_P (candidate->fn))
2683 inform (input_location, "%s %T <conversion>", msgstr, candidate->fn);
2684 else if (candidate->viable == -1)
2685 inform (input_location, "%s %+#D <near match>", msgstr, candidate->fn);
2686 else
2687 inform (input_location, "%s %+#D", msgstr, candidate->fn);
2690 static void
2691 print_z_candidates (struct z_candidate *candidates)
2693 const char *str;
2694 struct z_candidate *cand1;
2695 struct z_candidate **cand2;
2697 /* There may be duplicates in the set of candidates. We put off
2698 checking this condition as long as possible, since we have no way
2699 to eliminate duplicates from a set of functions in less than n^2
2700 time. Now we are about to emit an error message, so it is more
2701 permissible to go slowly. */
2702 for (cand1 = candidates; cand1; cand1 = cand1->next)
2704 tree fn = cand1->fn;
2705 /* Skip builtin candidates and conversion functions. */
2706 if (TREE_CODE (fn) != FUNCTION_DECL)
2707 continue;
2708 cand2 = &cand1->next;
2709 while (*cand2)
2711 if (TREE_CODE ((*cand2)->fn) == FUNCTION_DECL
2712 && equal_functions (fn, (*cand2)->fn))
2713 *cand2 = (*cand2)->next;
2714 else
2715 cand2 = &(*cand2)->next;
2719 if (!candidates)
2720 return;
2722 str = _("candidates are:");
2723 print_z_candidate (str, candidates);
2724 if (candidates->next)
2726 /* Indent successive candidates by the width of the translation
2727 of the above string. */
2728 size_t len = gcc_gettext_width (str) + 1;
2729 char *spaces = (char *) alloca (len);
2730 memset (spaces, ' ', len-1);
2731 spaces[len - 1] = '\0';
2733 candidates = candidates->next;
2736 print_z_candidate (spaces, candidates);
2737 candidates = candidates->next;
2739 while (candidates);
2743 /* USER_SEQ is a user-defined conversion sequence, beginning with a
2744 USER_CONV. STD_SEQ is the standard conversion sequence applied to
2745 the result of the conversion function to convert it to the final
2746 desired type. Merge the two sequences into a single sequence,
2747 and return the merged sequence. */
2749 static conversion *
2750 merge_conversion_sequences (conversion *user_seq, conversion *std_seq)
2752 conversion **t;
2754 gcc_assert (user_seq->kind == ck_user);
2756 /* Find the end of the second conversion sequence. */
2757 t = &(std_seq);
2758 while ((*t)->kind != ck_identity)
2759 t = &((*t)->u.next);
2761 /* Replace the identity conversion with the user conversion
2762 sequence. */
2763 *t = user_seq;
2765 /* The entire sequence is a user-conversion sequence. */
2766 std_seq->user_conv_p = true;
2768 return std_seq;
2771 /* Returns the best overload candidate to perform the requested
2772 conversion. This function is used for three the overloading situations
2773 described in [over.match.copy], [over.match.conv], and [over.match.ref].
2774 If TOTYPE is a REFERENCE_TYPE, we're trying to find an lvalue binding as
2775 per [dcl.init.ref], so we ignore temporary bindings. */
2777 static struct z_candidate *
2778 build_user_type_conversion_1 (tree totype, tree expr, int flags)
2780 struct z_candidate *candidates, *cand;
2781 tree fromtype = TREE_TYPE (expr);
2782 tree ctors = NULL_TREE;
2783 tree conv_fns = NULL_TREE;
2784 conversion *conv = NULL;
2785 tree first_arg = NULL_TREE;
2786 VEC(tree,gc) *args = NULL;
2787 bool any_viable_p;
2788 int convflags;
2790 /* We represent conversion within a hierarchy using RVALUE_CONV and
2791 BASE_CONV, as specified by [over.best.ics]; these become plain
2792 constructor calls, as specified in [dcl.init]. */
2793 gcc_assert (!MAYBE_CLASS_TYPE_P (fromtype) || !MAYBE_CLASS_TYPE_P (totype)
2794 || !DERIVED_FROM_P (totype, fromtype));
2796 if (MAYBE_CLASS_TYPE_P (totype))
2797 ctors = lookup_fnfields (totype, complete_ctor_identifier, 0);
2799 if (MAYBE_CLASS_TYPE_P (fromtype))
2801 tree to_nonref = non_reference (totype);
2802 if (same_type_ignoring_top_level_qualifiers_p (to_nonref, fromtype) ||
2803 (CLASS_TYPE_P (to_nonref) && CLASS_TYPE_P (fromtype)
2804 && DERIVED_FROM_P (to_nonref, fromtype)))
2806 /* [class.conv.fct] A conversion function is never used to
2807 convert a (possibly cv-qualified) object to the (possibly
2808 cv-qualified) same object type (or a reference to it), to a
2809 (possibly cv-qualified) base class of that type (or a
2810 reference to it)... */
2812 else
2813 conv_fns = lookup_conversions (fromtype);
2816 candidates = 0;
2817 flags |= LOOKUP_NO_CONVERSION;
2819 /* It's OK to bind a temporary for converting constructor arguments, but
2820 not in converting the return value of a conversion operator. */
2821 convflags = ((flags & LOOKUP_NO_TEMP_BIND) | LOOKUP_NO_CONVERSION);
2822 flags &= ~LOOKUP_NO_TEMP_BIND;
2824 if (ctors)
2826 ctors = BASELINK_FUNCTIONS (ctors);
2828 first_arg = build_int_cst (build_pointer_type (totype), 0);
2829 if (BRACE_ENCLOSED_INITIALIZER_P (expr)
2830 && !TYPE_HAS_LIST_CTOR (totype))
2832 args = ctor_to_vec (expr);
2833 /* We still allow more conversions within an init-list. */
2834 flags = ((flags & ~LOOKUP_NO_CONVERSION)
2835 /* But not for the copy ctor. */
2836 |LOOKUP_NO_COPY_CTOR_CONVERSION
2837 |LOOKUP_NO_NARROWING);
2839 else
2840 args = make_tree_vector_single (expr);
2842 /* We should never try to call the abstract or base constructor
2843 from here. */
2844 gcc_assert (!DECL_HAS_IN_CHARGE_PARM_P (OVL_CURRENT (ctors))
2845 && !DECL_HAS_VTT_PARM_P (OVL_CURRENT (ctors)));
2847 for (; ctors; ctors = OVL_NEXT (ctors))
2849 tree ctor = OVL_CURRENT (ctors);
2850 if (DECL_NONCONVERTING_P (ctor)
2851 && !BRACE_ENCLOSED_INITIALIZER_P (expr))
2852 continue;
2854 if (TREE_CODE (ctor) == TEMPLATE_DECL)
2855 cand = add_template_candidate (&candidates, ctor, totype,
2856 NULL_TREE, first_arg, args, NULL_TREE,
2857 TYPE_BINFO (totype),
2858 TYPE_BINFO (totype),
2859 flags,
2860 DEDUCE_CALL);
2861 else
2862 cand = add_function_candidate (&candidates, ctor, totype,
2863 first_arg, args, TYPE_BINFO (totype),
2864 TYPE_BINFO (totype),
2865 flags);
2867 if (cand)
2869 cand->second_conv = build_identity_conv (totype, NULL_TREE);
2871 /* If totype isn't a reference, and LOOKUP_NO_TEMP_BIND isn't
2872 set, then this is copy-initialization. In that case, "The
2873 result of the call is then used to direct-initialize the
2874 object that is the destination of the copy-initialization."
2875 [dcl.init]
2877 We represent this in the conversion sequence with an
2878 rvalue conversion, which means a constructor call. */
2879 if (TREE_CODE (totype) != REFERENCE_TYPE
2880 && !(convflags & LOOKUP_NO_TEMP_BIND))
2881 cand->second_conv
2882 = build_conv (ck_rvalue, totype, cand->second_conv);
2886 if (conv_fns)
2887 first_arg = build_this (expr);
2889 for (; conv_fns; conv_fns = TREE_CHAIN (conv_fns))
2891 tree fns;
2892 tree conversion_path = TREE_PURPOSE (conv_fns);
2894 /* If we are called to convert to a reference type, we are trying to
2895 find an lvalue binding, so don't even consider temporaries. If
2896 we don't find an lvalue binding, the caller will try again to
2897 look for a temporary binding. */
2898 if (TREE_CODE (totype) == REFERENCE_TYPE)
2899 convflags |= LOOKUP_NO_TEMP_BIND;
2901 for (fns = TREE_VALUE (conv_fns); fns; fns = OVL_NEXT (fns))
2903 tree fn = OVL_CURRENT (fns);
2905 if (DECL_NONCONVERTING_P (fn)
2906 && (flags & LOOKUP_ONLYCONVERTING))
2907 continue;
2909 /* [over.match.funcs] For conversion functions, the function
2910 is considered to be a member of the class of the implicit
2911 object argument for the purpose of defining the type of
2912 the implicit object parameter.
2914 So we pass fromtype as CTYPE to add_*_candidate. */
2916 if (TREE_CODE (fn) == TEMPLATE_DECL)
2917 cand = add_template_candidate (&candidates, fn, fromtype,
2918 NULL_TREE,
2919 first_arg, NULL, totype,
2920 TYPE_BINFO (fromtype),
2921 conversion_path,
2922 flags,
2923 DEDUCE_CONV);
2924 else
2925 cand = add_function_candidate (&candidates, fn, fromtype,
2926 first_arg, NULL,
2927 TYPE_BINFO (fromtype),
2928 conversion_path,
2929 flags);
2931 if (cand)
2933 conversion *ics
2934 = implicit_conversion (totype,
2935 TREE_TYPE (TREE_TYPE (cand->fn)),
2937 /*c_cast_p=*/false, convflags);
2939 /* If LOOKUP_NO_TEMP_BIND isn't set, then this is
2940 copy-initialization. In that case, "The result of the
2941 call is then used to direct-initialize the object that is
2942 the destination of the copy-initialization." [dcl.init]
2944 We represent this in the conversion sequence with an
2945 rvalue conversion, which means a constructor call. But
2946 don't add a second rvalue conversion if there's already
2947 one there. Which there really shouldn't be, but it's
2948 harmless since we'd add it here anyway. */
2949 if (ics && MAYBE_CLASS_TYPE_P (totype) && ics->kind != ck_rvalue
2950 && !(convflags & LOOKUP_NO_TEMP_BIND))
2951 ics = build_conv (ck_rvalue, totype, ics);
2953 cand->second_conv = ics;
2955 if (!ics)
2956 cand->viable = 0;
2957 else if (candidates->viable == 1 && ics->bad_p)
2958 cand->viable = -1;
2963 candidates = splice_viable (candidates, pedantic, &any_viable_p);
2964 if (!any_viable_p)
2965 return NULL;
2967 cand = tourney (candidates);
2968 if (cand == 0)
2970 if (flags & LOOKUP_COMPLAIN)
2972 error ("conversion from %qT to %qT is ambiguous",
2973 fromtype, totype);
2974 print_z_candidates (candidates);
2977 cand = candidates; /* any one will do */
2978 cand->second_conv = build_ambiguous_conv (totype, expr);
2979 cand->second_conv->user_conv_p = true;
2980 if (!any_strictly_viable (candidates))
2981 cand->second_conv->bad_p = true;
2982 /* If there are viable candidates, don't set ICS_BAD_FLAG; an
2983 ambiguous conversion is no worse than another user-defined
2984 conversion. */
2986 return cand;
2989 /* Build the user conversion sequence. */
2990 conv = build_conv
2991 (ck_user,
2992 (DECL_CONSTRUCTOR_P (cand->fn)
2993 ? totype : non_reference (TREE_TYPE (TREE_TYPE (cand->fn)))),
2994 build_identity_conv (TREE_TYPE (expr), expr));
2995 conv->cand = cand;
2997 /* Remember that this was a list-initialization. */
2998 if (flags & LOOKUP_NO_NARROWING)
2999 conv->check_narrowing = true;
3001 /* Combine it with the second conversion sequence. */
3002 cand->second_conv = merge_conversion_sequences (conv,
3003 cand->second_conv);
3005 if (cand->viable == -1)
3006 cand->second_conv->bad_p = true;
3008 return cand;
3011 tree
3012 build_user_type_conversion (tree totype, tree expr, int flags)
3014 struct z_candidate *cand
3015 = build_user_type_conversion_1 (totype, expr, flags);
3017 if (cand)
3019 if (cand->second_conv->kind == ck_ambig)
3020 return error_mark_node;
3021 expr = convert_like (cand->second_conv, expr, tf_warning_or_error);
3022 return convert_from_reference (expr);
3024 return NULL_TREE;
3027 /* Do any initial processing on the arguments to a function call. */
3029 static VEC(tree,gc) *
3030 resolve_args (VEC(tree,gc) *args)
3032 unsigned int ix;
3033 tree arg;
3035 for (ix = 0; VEC_iterate (tree, args, ix, arg); ++ix)
3037 if (error_operand_p (arg))
3038 return NULL;
3039 else if (VOID_TYPE_P (TREE_TYPE (arg)))
3041 error ("invalid use of void expression");
3042 return NULL;
3044 else if (invalid_nonstatic_memfn_p (arg, tf_warning_or_error))
3045 return NULL;
3047 return args;
3050 /* Perform overload resolution on FN, which is called with the ARGS.
3052 Return the candidate function selected by overload resolution, or
3053 NULL if the event that overload resolution failed. In the case
3054 that overload resolution fails, *CANDIDATES will be the set of
3055 candidates considered, and ANY_VIABLE_P will be set to true or
3056 false to indicate whether or not any of the candidates were
3057 viable.
3059 The ARGS should already have gone through RESOLVE_ARGS before this
3060 function is called. */
3062 static struct z_candidate *
3063 perform_overload_resolution (tree fn,
3064 const VEC(tree,gc) *args,
3065 struct z_candidate **candidates,
3066 bool *any_viable_p)
3068 struct z_candidate *cand;
3069 tree explicit_targs = NULL_TREE;
3070 int template_only = 0;
3072 *candidates = NULL;
3073 *any_viable_p = true;
3075 /* Check FN. */
3076 gcc_assert (TREE_CODE (fn) == FUNCTION_DECL
3077 || TREE_CODE (fn) == TEMPLATE_DECL
3078 || TREE_CODE (fn) == OVERLOAD
3079 || TREE_CODE (fn) == TEMPLATE_ID_EXPR);
3081 if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
3083 explicit_targs = TREE_OPERAND (fn, 1);
3084 fn = TREE_OPERAND (fn, 0);
3085 template_only = 1;
3088 /* Add the various candidate functions. */
3089 add_candidates (fn, args, explicit_targs, template_only,
3090 /*conversion_path=*/NULL_TREE,
3091 /*access_path=*/NULL_TREE,
3092 LOOKUP_NORMAL,
3093 candidates);
3095 *candidates = splice_viable (*candidates, pedantic, any_viable_p);
3096 if (!*any_viable_p)
3097 return NULL;
3099 cand = tourney (*candidates);
3100 return cand;
3103 /* Return an expression for a call to FN (a namespace-scope function,
3104 or a static member function) with the ARGS. This may change
3105 ARGS. */
3107 tree
3108 build_new_function_call (tree fn, VEC(tree,gc) **args, bool koenig_p,
3109 tsubst_flags_t complain)
3111 struct z_candidate *candidates, *cand;
3112 bool any_viable_p;
3113 void *p;
3114 tree result;
3116 if (args != NULL && *args != NULL)
3118 *args = resolve_args (*args);
3119 if (*args == NULL)
3120 return error_mark_node;
3123 /* If this function was found without using argument dependent
3124 lookup, then we want to ignore any undeclared friend
3125 functions. */
3126 if (!koenig_p)
3128 tree orig_fn = fn;
3130 fn = remove_hidden_names (fn);
3131 if (!fn)
3133 if (complain & tf_error)
3134 error ("no matching function for call to %<%D(%A)%>",
3135 DECL_NAME (OVL_CURRENT (orig_fn)),
3136 build_tree_list_vec (*args));
3137 return error_mark_node;
3141 /* Get the high-water mark for the CONVERSION_OBSTACK. */
3142 p = conversion_obstack_alloc (0);
3144 cand = perform_overload_resolution (fn, *args, &candidates, &any_viable_p);
3146 if (!cand)
3148 if (complain & tf_error)
3150 if (!any_viable_p && candidates && ! candidates->next)
3151 return cp_build_function_call_vec (candidates->fn, args, complain);
3152 if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
3153 fn = TREE_OPERAND (fn, 0);
3154 if (!any_viable_p)
3155 error ("no matching function for call to %<%D(%A)%>",
3156 DECL_NAME (OVL_CURRENT (fn)), build_tree_list_vec (*args));
3157 else
3158 error ("call of overloaded %<%D(%A)%> is ambiguous",
3159 DECL_NAME (OVL_CURRENT (fn)), build_tree_list_vec (*args));
3160 if (candidates)
3161 print_z_candidates (candidates);
3163 result = error_mark_node;
3165 else
3166 result = build_over_call (cand, LOOKUP_NORMAL, complain);
3168 /* Free all the conversions we allocated. */
3169 obstack_free (&conversion_obstack, p);
3171 return result;
3174 /* Build a call to a global operator new. FNNAME is the name of the
3175 operator (either "operator new" or "operator new[]") and ARGS are
3176 the arguments provided. This may change ARGS. *SIZE points to the
3177 total number of bytes required by the allocation, and is updated if
3178 that is changed here. *COOKIE_SIZE is non-NULL if a cookie should
3179 be used. If this function determines that no cookie should be
3180 used, after all, *COOKIE_SIZE is set to NULL_TREE. If FN is
3181 non-NULL, it will be set, upon return, to the allocation function
3182 called. */
3184 tree
3185 build_operator_new_call (tree fnname, VEC(tree,gc) **args,
3186 tree *size, tree *cookie_size,
3187 tree *fn)
3189 tree fns;
3190 struct z_candidate *candidates;
3191 struct z_candidate *cand;
3192 bool any_viable_p;
3194 if (fn)
3195 *fn = NULL_TREE;
3196 VEC_safe_insert (tree, gc, *args, 0, *size);
3197 *args = resolve_args (*args);
3198 if (*args == NULL)
3199 return error_mark_node;
3201 /* Based on:
3203 [expr.new]
3205 If this lookup fails to find the name, or if the allocated type
3206 is not a class type, the allocation function's name is looked
3207 up in the global scope.
3209 we disregard block-scope declarations of "operator new". */
3210 fns = lookup_function_nonclass (fnname, *args, /*block_p=*/false);
3212 /* Figure out what function is being called. */
3213 cand = perform_overload_resolution (fns, *args, &candidates, &any_viable_p);
3215 /* If no suitable function could be found, issue an error message
3216 and give up. */
3217 if (!cand)
3219 if (!any_viable_p)
3220 error ("no matching function for call to %<%D(%A)%>",
3221 DECL_NAME (OVL_CURRENT (fns)), build_tree_list_vec (*args));
3222 else
3223 error ("call of overloaded %<%D(%A)%> is ambiguous",
3224 DECL_NAME (OVL_CURRENT (fns)), build_tree_list_vec (*args));
3225 if (candidates)
3226 print_z_candidates (candidates);
3227 return error_mark_node;
3230 /* If a cookie is required, add some extra space. Whether
3231 or not a cookie is required cannot be determined until
3232 after we know which function was called. */
3233 if (*cookie_size)
3235 bool use_cookie = true;
3236 if (!abi_version_at_least (2))
3238 /* In G++ 3.2, the check was implemented incorrectly; it
3239 looked at the placement expression, rather than the
3240 type of the function. */
3241 if (VEC_length (tree, *args) == 2
3242 && same_type_p (TREE_TYPE (VEC_index (tree, *args, 1)),
3243 ptr_type_node))
3244 use_cookie = false;
3246 else
3248 tree arg_types;
3250 arg_types = TYPE_ARG_TYPES (TREE_TYPE (cand->fn));
3251 /* Skip the size_t parameter. */
3252 arg_types = TREE_CHAIN (arg_types);
3253 /* Check the remaining parameters (if any). */
3254 if (arg_types
3255 && TREE_CHAIN (arg_types) == void_list_node
3256 && same_type_p (TREE_VALUE (arg_types),
3257 ptr_type_node))
3258 use_cookie = false;
3260 /* If we need a cookie, adjust the number of bytes allocated. */
3261 if (use_cookie)
3263 /* Update the total size. */
3264 *size = size_binop (PLUS_EXPR, *size, *cookie_size);
3265 /* Update the argument list to reflect the adjusted size. */
3266 VEC_replace (tree, *args, 0, *size);
3268 else
3269 *cookie_size = NULL_TREE;
3272 /* Tell our caller which function we decided to call. */
3273 if (fn)
3274 *fn = cand->fn;
3276 /* Build the CALL_EXPR. */
3277 return build_over_call (cand, LOOKUP_NORMAL, tf_warning_or_error);
3280 /* Build a new call to operator(). This may change ARGS. */
3282 tree
3283 build_op_call (tree obj, VEC(tree,gc) **args, tsubst_flags_t complain)
3285 struct z_candidate *candidates = 0, *cand;
3286 tree fns, convs, first_mem_arg = NULL_TREE;
3287 tree type = TREE_TYPE (obj);
3288 bool any_viable_p;
3289 tree result = NULL_TREE;
3290 void *p;
3292 if (error_operand_p (obj))
3293 return error_mark_node;
3295 obj = prep_operand (obj);
3297 if (TYPE_PTRMEMFUNC_P (type))
3299 if (complain & tf_error)
3300 /* It's no good looking for an overloaded operator() on a
3301 pointer-to-member-function. */
3302 error ("pointer-to-member function %E cannot be called without an object; consider using .* or ->*", obj);
3303 return error_mark_node;
3306 if (TYPE_BINFO (type))
3308 fns = lookup_fnfields (TYPE_BINFO (type), ansi_opname (CALL_EXPR), 1);
3309 if (fns == error_mark_node)
3310 return error_mark_node;
3312 else
3313 fns = NULL_TREE;
3315 if (args != NULL && *args != NULL)
3317 *args = resolve_args (*args);
3318 if (*args == NULL)
3319 return error_mark_node;
3322 /* Get the high-water mark for the CONVERSION_OBSTACK. */
3323 p = conversion_obstack_alloc (0);
3325 if (fns)
3327 tree base = BINFO_TYPE (BASELINK_BINFO (fns));
3328 first_mem_arg = build_this (obj);
3330 for (fns = BASELINK_FUNCTIONS (fns); fns; fns = OVL_NEXT (fns))
3332 tree fn = OVL_CURRENT (fns);
3333 if (TREE_CODE (fn) == TEMPLATE_DECL)
3334 add_template_candidate (&candidates, fn, base, NULL_TREE,
3335 first_mem_arg, *args, NULL_TREE,
3336 TYPE_BINFO (type),
3337 TYPE_BINFO (type),
3338 LOOKUP_NORMAL, DEDUCE_CALL);
3339 else
3340 add_function_candidate
3341 (&candidates, fn, base, first_mem_arg, *args, TYPE_BINFO (type),
3342 TYPE_BINFO (type), LOOKUP_NORMAL);
3346 convs = lookup_conversions (type);
3348 for (; convs; convs = TREE_CHAIN (convs))
3350 tree fns = TREE_VALUE (convs);
3351 tree totype = TREE_TYPE (convs);
3353 if ((TREE_CODE (totype) == POINTER_TYPE
3354 && TREE_CODE (TREE_TYPE (totype)) == FUNCTION_TYPE)
3355 || (TREE_CODE (totype) == REFERENCE_TYPE
3356 && TREE_CODE (TREE_TYPE (totype)) == FUNCTION_TYPE)
3357 || (TREE_CODE (totype) == REFERENCE_TYPE
3358 && TREE_CODE (TREE_TYPE (totype)) == POINTER_TYPE
3359 && TREE_CODE (TREE_TYPE (TREE_TYPE (totype))) == FUNCTION_TYPE))
3360 for (; fns; fns = OVL_NEXT (fns))
3362 tree fn = OVL_CURRENT (fns);
3364 if (DECL_NONCONVERTING_P (fn))
3365 continue;
3367 if (TREE_CODE (fn) == TEMPLATE_DECL)
3368 add_template_conv_candidate
3369 (&candidates, fn, obj, NULL_TREE, *args, totype,
3370 /*access_path=*/NULL_TREE,
3371 /*conversion_path=*/NULL_TREE);
3372 else
3373 add_conv_candidate (&candidates, fn, obj, NULL_TREE,
3374 *args, /*conversion_path=*/NULL_TREE,
3375 /*access_path=*/NULL_TREE);
3379 candidates = splice_viable (candidates, pedantic, &any_viable_p);
3380 if (!any_viable_p)
3382 if (complain & tf_error)
3384 error ("no match for call to %<(%T) (%A)%>", TREE_TYPE (obj),
3385 build_tree_list_vec (*args));
3386 print_z_candidates (candidates);
3388 result = error_mark_node;
3390 else
3392 cand = tourney (candidates);
3393 if (cand == 0)
3395 if (complain & tf_error)
3397 error ("call of %<(%T) (%A)%> is ambiguous",
3398 TREE_TYPE (obj), build_tree_list_vec (*args));
3399 print_z_candidates (candidates);
3401 result = error_mark_node;
3403 /* Since cand->fn will be a type, not a function, for a conversion
3404 function, we must be careful not to unconditionally look at
3405 DECL_NAME here. */
3406 else if (TREE_CODE (cand->fn) == FUNCTION_DECL
3407 && DECL_OVERLOADED_OPERATOR_P (cand->fn) == CALL_EXPR)
3408 result = build_over_call (cand, LOOKUP_NORMAL, complain);
3409 else
3411 obj = convert_like_with_context (cand->convs[0], obj, cand->fn, -1,
3412 complain);
3413 obj = convert_from_reference (obj);
3414 result = cp_build_function_call_vec (obj, args, complain);
3418 /* Free all the conversions we allocated. */
3419 obstack_free (&conversion_obstack, p);
3421 return result;
3424 static void
3425 op_error (enum tree_code code, enum tree_code code2,
3426 tree arg1, tree arg2, tree arg3, const char *problem)
3428 const char *opname;
3430 if (code == MODIFY_EXPR)
3431 opname = assignment_operator_name_info[code2].name;
3432 else
3433 opname = operator_name_info[code].name;
3435 switch (code)
3437 case COND_EXPR:
3438 error ("%s for ternary %<operator?:%> in %<%E ? %E : %E%>",
3439 problem, arg1, arg2, arg3);
3440 break;
3442 case POSTINCREMENT_EXPR:
3443 case POSTDECREMENT_EXPR:
3444 error ("%s for %<operator%s%> in %<%E%s%>", problem, opname, arg1, opname);
3445 break;
3447 case ARRAY_REF:
3448 error ("%s for %<operator[]%> in %<%E[%E]%>", problem, arg1, arg2);
3449 break;
3451 case REALPART_EXPR:
3452 case IMAGPART_EXPR:
3453 error ("%s for %qs in %<%s %E%>", problem, opname, opname, arg1);
3454 break;
3456 default:
3457 if (arg2)
3458 error ("%s for %<operator%s%> in %<%E %s %E%>",
3459 problem, opname, arg1, opname, arg2);
3460 else
3461 error ("%s for %<operator%s%> in %<%s%E%>",
3462 problem, opname, opname, arg1);
3463 break;
3467 /* Return the implicit conversion sequence that could be used to
3468 convert E1 to E2 in [expr.cond]. */
3470 static conversion *
3471 conditional_conversion (tree e1, tree e2)
3473 tree t1 = non_reference (TREE_TYPE (e1));
3474 tree t2 = non_reference (TREE_TYPE (e2));
3475 conversion *conv;
3476 bool good_base;
3478 /* [expr.cond]
3480 If E2 is an lvalue: E1 can be converted to match E2 if E1 can be
3481 implicitly converted (clause _conv_) to the type "reference to
3482 T2", subject to the constraint that in the conversion the
3483 reference must bind directly (_dcl.init.ref_) to E1. */
3484 if (real_lvalue_p (e2))
3486 conv = implicit_conversion (build_reference_type (t2),
3489 /*c_cast_p=*/false,
3490 LOOKUP_NO_TEMP_BIND|LOOKUP_ONLYCONVERTING);
3491 if (conv)
3492 return conv;
3495 /* [expr.cond]
3497 If E1 and E2 have class type, and the underlying class types are
3498 the same or one is a base class of the other: E1 can be converted
3499 to match E2 if the class of T2 is the same type as, or a base
3500 class of, the class of T1, and the cv-qualification of T2 is the
3501 same cv-qualification as, or a greater cv-qualification than, the
3502 cv-qualification of T1. If the conversion is applied, E1 is
3503 changed to an rvalue of type T2 that still refers to the original
3504 source class object (or the appropriate subobject thereof). */
3505 if (CLASS_TYPE_P (t1) && CLASS_TYPE_P (t2)
3506 && ((good_base = DERIVED_FROM_P (t2, t1)) || DERIVED_FROM_P (t1, t2)))
3508 if (good_base && at_least_as_qualified_p (t2, t1))
3510 conv = build_identity_conv (t1, e1);
3511 if (!same_type_p (TYPE_MAIN_VARIANT (t1),
3512 TYPE_MAIN_VARIANT (t2)))
3513 conv = build_conv (ck_base, t2, conv);
3514 else
3515 conv = build_conv (ck_rvalue, t2, conv);
3516 return conv;
3518 else
3519 return NULL;
3521 else
3522 /* [expr.cond]
3524 Otherwise: E1 can be converted to match E2 if E1 can be implicitly
3525 converted to the type that expression E2 would have if E2 were
3526 converted to an rvalue (or the type it has, if E2 is an rvalue). */
3527 return implicit_conversion (t2, t1, e1, /*c_cast_p=*/false,
3528 LOOKUP_IMPLICIT);
3531 /* Implement [expr.cond]. ARG1, ARG2, and ARG3 are the three
3532 arguments to the conditional expression. */
3534 tree
3535 build_conditional_expr (tree arg1, tree arg2, tree arg3,
3536 tsubst_flags_t complain)
3538 tree arg2_type;
3539 tree arg3_type;
3540 tree result = NULL_TREE;
3541 tree result_type = NULL_TREE;
3542 bool lvalue_p = true;
3543 struct z_candidate *candidates = 0;
3544 struct z_candidate *cand;
3545 void *p;
3547 /* As a G++ extension, the second argument to the conditional can be
3548 omitted. (So that `a ? : c' is roughly equivalent to `a ? a :
3549 c'.) If the second operand is omitted, make sure it is
3550 calculated only once. */
3551 if (!arg2)
3553 if (complain & tf_error)
3554 pedwarn (input_location, OPT_pedantic,
3555 "ISO C++ forbids omitting the middle term of a ?: expression");
3557 /* Make sure that lvalues remain lvalues. See g++.oliva/ext1.C. */
3558 if (real_lvalue_p (arg1))
3559 arg2 = arg1 = stabilize_reference (arg1);
3560 else
3561 arg2 = arg1 = save_expr (arg1);
3564 /* [expr.cond]
3566 The first expression is implicitly converted to bool (clause
3567 _conv_). */
3568 arg1 = perform_implicit_conversion (boolean_type_node, arg1, complain);
3570 /* If something has already gone wrong, just pass that fact up the
3571 tree. */
3572 if (error_operand_p (arg1)
3573 || error_operand_p (arg2)
3574 || error_operand_p (arg3))
3575 return error_mark_node;
3577 /* [expr.cond]
3579 If either the second or the third operand has type (possibly
3580 cv-qualified) void, then the lvalue-to-rvalue (_conv.lval_),
3581 array-to-pointer (_conv.array_), and function-to-pointer
3582 (_conv.func_) standard conversions are performed on the second
3583 and third operands. */
3584 arg2_type = unlowered_expr_type (arg2);
3585 arg3_type = unlowered_expr_type (arg3);
3586 if (VOID_TYPE_P (arg2_type) || VOID_TYPE_P (arg3_type))
3588 /* Do the conversions. We don't these for `void' type arguments
3589 since it can't have any effect and since decay_conversion
3590 does not handle that case gracefully. */
3591 if (!VOID_TYPE_P (arg2_type))
3592 arg2 = decay_conversion (arg2);
3593 if (!VOID_TYPE_P (arg3_type))
3594 arg3 = decay_conversion (arg3);
3595 arg2_type = TREE_TYPE (arg2);
3596 arg3_type = TREE_TYPE (arg3);
3598 /* [expr.cond]
3600 One of the following shall hold:
3602 --The second or the third operand (but not both) is a
3603 throw-expression (_except.throw_); the result is of the
3604 type of the other and is an rvalue.
3606 --Both the second and the third operands have type void; the
3607 result is of type void and is an rvalue.
3609 We must avoid calling force_rvalue for expressions of type
3610 "void" because it will complain that their value is being
3611 used. */
3612 if (TREE_CODE (arg2) == THROW_EXPR
3613 && TREE_CODE (arg3) != THROW_EXPR)
3615 if (!VOID_TYPE_P (arg3_type))
3616 arg3 = force_rvalue (arg3);
3617 arg3_type = TREE_TYPE (arg3);
3618 result_type = arg3_type;
3620 else if (TREE_CODE (arg2) != THROW_EXPR
3621 && TREE_CODE (arg3) == THROW_EXPR)
3623 if (!VOID_TYPE_P (arg2_type))
3624 arg2 = force_rvalue (arg2);
3625 arg2_type = TREE_TYPE (arg2);
3626 result_type = arg2_type;
3628 else if (VOID_TYPE_P (arg2_type) && VOID_TYPE_P (arg3_type))
3629 result_type = void_type_node;
3630 else
3632 if (complain & tf_error)
3634 if (VOID_TYPE_P (arg2_type))
3635 error ("second operand to the conditional operator "
3636 "is of type %<void%>, "
3637 "but the third operand is neither a throw-expression "
3638 "nor of type %<void%>");
3639 else
3640 error ("third operand to the conditional operator "
3641 "is of type %<void%>, "
3642 "but the second operand is neither a throw-expression "
3643 "nor of type %<void%>");
3645 return error_mark_node;
3648 lvalue_p = false;
3649 goto valid_operands;
3651 /* [expr.cond]
3653 Otherwise, if the second and third operand have different types,
3654 and either has (possibly cv-qualified) class type, an attempt is
3655 made to convert each of those operands to the type of the other. */
3656 else if (!same_type_p (arg2_type, arg3_type)
3657 && (CLASS_TYPE_P (arg2_type) || CLASS_TYPE_P (arg3_type)))
3659 conversion *conv2;
3660 conversion *conv3;
3662 /* Get the high-water mark for the CONVERSION_OBSTACK. */
3663 p = conversion_obstack_alloc (0);
3665 conv2 = conditional_conversion (arg2, arg3);
3666 conv3 = conditional_conversion (arg3, arg2);
3668 /* [expr.cond]
3670 If both can be converted, or one can be converted but the
3671 conversion is ambiguous, the program is ill-formed. If
3672 neither can be converted, the operands are left unchanged and
3673 further checking is performed as described below. If exactly
3674 one conversion is possible, that conversion is applied to the
3675 chosen operand and the converted operand is used in place of
3676 the original operand for the remainder of this section. */
3677 if ((conv2 && !conv2->bad_p
3678 && conv3 && !conv3->bad_p)
3679 || (conv2 && conv2->kind == ck_ambig)
3680 || (conv3 && conv3->kind == ck_ambig))
3682 error ("operands to ?: have different types %qT and %qT",
3683 arg2_type, arg3_type);
3684 result = error_mark_node;
3686 else if (conv2 && (!conv2->bad_p || !conv3))
3688 arg2 = convert_like (conv2, arg2, complain);
3689 arg2 = convert_from_reference (arg2);
3690 arg2_type = TREE_TYPE (arg2);
3691 /* Even if CONV2 is a valid conversion, the result of the
3692 conversion may be invalid. For example, if ARG3 has type
3693 "volatile X", and X does not have a copy constructor
3694 accepting a "volatile X&", then even if ARG2 can be
3695 converted to X, the conversion will fail. */
3696 if (error_operand_p (arg2))
3697 result = error_mark_node;
3699 else if (conv3 && (!conv3->bad_p || !conv2))
3701 arg3 = convert_like (conv3, arg3, complain);
3702 arg3 = convert_from_reference (arg3);
3703 arg3_type = TREE_TYPE (arg3);
3704 if (error_operand_p (arg3))
3705 result = error_mark_node;
3708 /* Free all the conversions we allocated. */
3709 obstack_free (&conversion_obstack, p);
3711 if (result)
3712 return result;
3714 /* If, after the conversion, both operands have class type,
3715 treat the cv-qualification of both operands as if it were the
3716 union of the cv-qualification of the operands.
3718 The standard is not clear about what to do in this
3719 circumstance. For example, if the first operand has type
3720 "const X" and the second operand has a user-defined
3721 conversion to "volatile X", what is the type of the second
3722 operand after this step? Making it be "const X" (matching
3723 the first operand) seems wrong, as that discards the
3724 qualification without actually performing a copy. Leaving it
3725 as "volatile X" seems wrong as that will result in the
3726 conditional expression failing altogether, even though,
3727 according to this step, the one operand could be converted to
3728 the type of the other. */
3729 if ((conv2 || conv3)
3730 && CLASS_TYPE_P (arg2_type)
3731 && TYPE_QUALS (arg2_type) != TYPE_QUALS (arg3_type))
3732 arg2_type = arg3_type =
3733 cp_build_qualified_type (arg2_type,
3734 TYPE_QUALS (arg2_type)
3735 | TYPE_QUALS (arg3_type));
3738 /* [expr.cond]
3740 If the second and third operands are lvalues and have the same
3741 type, the result is of that type and is an lvalue. */
3742 if (real_lvalue_p (arg2)
3743 && real_lvalue_p (arg3)
3744 && same_type_p (arg2_type, arg3_type))
3746 result_type = arg2_type;
3747 goto valid_operands;
3750 /* [expr.cond]
3752 Otherwise, the result is an rvalue. If the second and third
3753 operand do not have the same type, and either has (possibly
3754 cv-qualified) class type, overload resolution is used to
3755 determine the conversions (if any) to be applied to the operands
3756 (_over.match.oper_, _over.built_). */
3757 lvalue_p = false;
3758 if (!same_type_p (arg2_type, arg3_type)
3759 && (CLASS_TYPE_P (arg2_type) || CLASS_TYPE_P (arg3_type)))
3761 tree args[3];
3762 conversion *conv;
3763 bool any_viable_p;
3765 /* Rearrange the arguments so that add_builtin_candidate only has
3766 to know about two args. In build_builtin_candidates, the
3767 arguments are unscrambled. */
3768 args[0] = arg2;
3769 args[1] = arg3;
3770 args[2] = arg1;
3771 add_builtin_candidates (&candidates,
3772 COND_EXPR,
3773 NOP_EXPR,
3774 ansi_opname (COND_EXPR),
3775 args,
3776 LOOKUP_NORMAL);
3778 /* [expr.cond]
3780 If the overload resolution fails, the program is
3781 ill-formed. */
3782 candidates = splice_viable (candidates, pedantic, &any_viable_p);
3783 if (!any_viable_p)
3785 if (complain & tf_error)
3787 op_error (COND_EXPR, NOP_EXPR, arg1, arg2, arg3, "no match");
3788 print_z_candidates (candidates);
3790 return error_mark_node;
3792 cand = tourney (candidates);
3793 if (!cand)
3795 if (complain & tf_error)
3797 op_error (COND_EXPR, NOP_EXPR, arg1, arg2, arg3, "no match");
3798 print_z_candidates (candidates);
3800 return error_mark_node;
3803 /* [expr.cond]
3805 Otherwise, the conversions thus determined are applied, and
3806 the converted operands are used in place of the original
3807 operands for the remainder of this section. */
3808 conv = cand->convs[0];
3809 arg1 = convert_like (conv, arg1, complain);
3810 conv = cand->convs[1];
3811 arg2 = convert_like (conv, arg2, complain);
3812 conv = cand->convs[2];
3813 arg3 = convert_like (conv, arg3, complain);
3816 /* [expr.cond]
3818 Lvalue-to-rvalue (_conv.lval_), array-to-pointer (_conv.array_),
3819 and function-to-pointer (_conv.func_) standard conversions are
3820 performed on the second and third operands.
3822 We need to force the lvalue-to-rvalue conversion here for class types,
3823 so we get TARGET_EXPRs; trying to deal with a COND_EXPR of class rvalues
3824 that isn't wrapped with a TARGET_EXPR plays havoc with exception
3825 regions. */
3827 arg2 = force_rvalue (arg2);
3828 if (!CLASS_TYPE_P (arg2_type))
3829 arg2_type = TREE_TYPE (arg2);
3831 arg3 = force_rvalue (arg3);
3832 if (!CLASS_TYPE_P (arg2_type))
3833 arg3_type = TREE_TYPE (arg3);
3835 if (arg2 == error_mark_node || arg3 == error_mark_node)
3836 return error_mark_node;
3838 /* [expr.cond]
3840 After those conversions, one of the following shall hold:
3842 --The second and third operands have the same type; the result is of
3843 that type. */
3844 if (same_type_p (arg2_type, arg3_type))
3845 result_type = arg2_type;
3846 /* [expr.cond]
3848 --The second and third operands have arithmetic or enumeration
3849 type; the usual arithmetic conversions are performed to bring
3850 them to a common type, and the result is of that type. */
3851 else if ((ARITHMETIC_TYPE_P (arg2_type)
3852 || UNSCOPED_ENUM_P (arg2_type))
3853 && (ARITHMETIC_TYPE_P (arg3_type)
3854 || UNSCOPED_ENUM_P (arg3_type)))
3856 /* In this case, there is always a common type. */
3857 result_type = type_after_usual_arithmetic_conversions (arg2_type,
3858 arg3_type);
3860 if (TREE_CODE (arg2_type) == ENUMERAL_TYPE
3861 && TREE_CODE (arg3_type) == ENUMERAL_TYPE)
3863 if (complain & tf_warning)
3864 warning (0,
3865 "enumeral mismatch in conditional expression: %qT vs %qT",
3866 arg2_type, arg3_type);
3868 else if (extra_warnings
3869 && ((TREE_CODE (arg2_type) == ENUMERAL_TYPE
3870 && !same_type_p (arg3_type, type_promotes_to (arg2_type)))
3871 || (TREE_CODE (arg3_type) == ENUMERAL_TYPE
3872 && !same_type_p (arg2_type, type_promotes_to (arg3_type)))))
3874 if (complain & tf_warning)
3875 warning (0,
3876 "enumeral and non-enumeral type in conditional expression");
3879 arg2 = perform_implicit_conversion (result_type, arg2, complain);
3880 arg3 = perform_implicit_conversion (result_type, arg3, complain);
3882 /* [expr.cond]
3884 --The second and third operands have pointer type, or one has
3885 pointer type and the other is a null pointer constant; pointer
3886 conversions (_conv.ptr_) and qualification conversions
3887 (_conv.qual_) are performed to bring them to their composite
3888 pointer type (_expr.rel_). The result is of the composite
3889 pointer type.
3891 --The second and third operands have pointer to member type, or
3892 one has pointer to member type and the other is a null pointer
3893 constant; pointer to member conversions (_conv.mem_) and
3894 qualification conversions (_conv.qual_) are performed to bring
3895 them to a common type, whose cv-qualification shall match the
3896 cv-qualification of either the second or the third operand.
3897 The result is of the common type. */
3898 else if ((null_ptr_cst_p (arg2)
3899 && (TYPE_PTR_P (arg3_type) || TYPE_PTR_TO_MEMBER_P (arg3_type)))
3900 || (null_ptr_cst_p (arg3)
3901 && (TYPE_PTR_P (arg2_type) || TYPE_PTR_TO_MEMBER_P (arg2_type)))
3902 || (TYPE_PTR_P (arg2_type) && TYPE_PTR_P (arg3_type))
3903 || (TYPE_PTRMEM_P (arg2_type) && TYPE_PTRMEM_P (arg3_type))
3904 || (TYPE_PTRMEMFUNC_P (arg2_type) && TYPE_PTRMEMFUNC_P (arg3_type)))
3906 result_type = composite_pointer_type (arg2_type, arg3_type, arg2,
3907 arg3, "conditional expression",
3908 complain);
3909 if (result_type == error_mark_node)
3910 return error_mark_node;
3911 arg2 = perform_implicit_conversion (result_type, arg2, complain);
3912 arg3 = perform_implicit_conversion (result_type, arg3, complain);
3915 if (!result_type)
3917 if (complain & tf_error)
3918 error ("operands to ?: have different types %qT and %qT",
3919 arg2_type, arg3_type);
3920 return error_mark_node;
3923 valid_operands:
3924 result = fold_if_not_in_template (build3 (COND_EXPR, result_type, arg1,
3925 arg2, arg3));
3926 /* We can't use result_type below, as fold might have returned a
3927 throw_expr. */
3929 if (!lvalue_p)
3931 /* Expand both sides into the same slot, hopefully the target of
3932 the ?: expression. We used to check for TARGET_EXPRs here,
3933 but now we sometimes wrap them in NOP_EXPRs so the test would
3934 fail. */
3935 if (CLASS_TYPE_P (TREE_TYPE (result)))
3936 result = get_target_expr (result);
3937 /* If this expression is an rvalue, but might be mistaken for an
3938 lvalue, we must add a NON_LVALUE_EXPR. */
3939 result = rvalue (result);
3942 return result;
3945 /* OPERAND is an operand to an expression. Perform necessary steps
3946 required before using it. If OPERAND is NULL_TREE, NULL_TREE is
3947 returned. */
3949 static tree
3950 prep_operand (tree operand)
3952 if (operand)
3954 if (CLASS_TYPE_P (TREE_TYPE (operand))
3955 && CLASSTYPE_TEMPLATE_INSTANTIATION (TREE_TYPE (operand)))
3956 /* Make sure the template type is instantiated now. */
3957 instantiate_class_template (TYPE_MAIN_VARIANT (TREE_TYPE (operand)));
3960 return operand;
3963 /* Add each of the viable functions in FNS (a FUNCTION_DECL or
3964 OVERLOAD) to the CANDIDATES, returning an updated list of
3965 CANDIDATES. The ARGS are the arguments provided to the call,
3966 without any implicit object parameter. This may change ARGS. The
3967 EXPLICIT_TARGS are explicit template arguments provided.
3968 TEMPLATE_ONLY is true if only template functions should be
3969 considered. CONVERSION_PATH, ACCESS_PATH, and FLAGS are as for
3970 add_function_candidate. */
3972 static void
3973 add_candidates (tree fns, const VEC(tree,gc) *args,
3974 tree explicit_targs, bool template_only,
3975 tree conversion_path, tree access_path,
3976 int flags,
3977 struct z_candidate **candidates)
3979 tree ctype;
3980 VEC(tree,gc) *non_static_args;
3981 tree first_arg;
3983 ctype = conversion_path ? BINFO_TYPE (conversion_path) : NULL_TREE;
3984 /* Delay creating the implicit this parameter until it is needed. */
3985 non_static_args = NULL;
3986 first_arg = NULL_TREE;
3988 while (fns)
3990 tree fn;
3991 tree fn_first_arg;
3992 const VEC(tree,gc) *fn_args;
3994 fn = OVL_CURRENT (fns);
3995 /* Figure out which set of arguments to use. */
3996 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
3998 /* If this function is a non-static member, prepend the implicit
3999 object parameter. */
4000 if (non_static_args == NULL)
4002 unsigned int ix;
4003 tree arg;
4005 non_static_args = VEC_alloc (tree, gc,
4006 VEC_length (tree, args) - 1);
4007 for (ix = 1; VEC_iterate (tree, args, ix, arg); ++ix)
4008 VEC_quick_push (tree, non_static_args, arg);
4010 if (first_arg == NULL_TREE)
4011 first_arg = build_this (VEC_index (tree, args, 0));
4012 fn_first_arg = first_arg;
4013 fn_args = non_static_args;
4015 else
4017 /* Otherwise, just use the list of arguments provided. */
4018 fn_first_arg = NULL_TREE;
4019 fn_args = args;
4022 if (TREE_CODE (fn) == TEMPLATE_DECL)
4023 add_template_candidate (candidates,
4025 ctype,
4026 explicit_targs,
4027 fn_first_arg,
4028 fn_args,
4029 NULL_TREE,
4030 access_path,
4031 conversion_path,
4032 flags,
4033 DEDUCE_CALL);
4034 else if (!template_only)
4035 add_function_candidate (candidates,
4037 ctype,
4038 fn_first_arg,
4039 fn_args,
4040 access_path,
4041 conversion_path,
4042 flags);
4043 fns = OVL_NEXT (fns);
4047 /* Even unsigned enum types promote to signed int. We don't want to
4048 issue -Wsign-compare warnings for this case. Here ORIG_ARG is the
4049 original argument and ARG is the argument after any conversions
4050 have been applied. We set TREE_NO_WARNING if we have added a cast
4051 from an unsigned enum type to a signed integer type. */
4053 static void
4054 avoid_sign_compare_warnings (tree orig_arg, tree arg)
4056 if (orig_arg != NULL_TREE
4057 && arg != NULL_TREE
4058 && orig_arg != arg
4059 && TREE_CODE (TREE_TYPE (orig_arg)) == ENUMERAL_TYPE
4060 && TYPE_UNSIGNED (TREE_TYPE (orig_arg))
4061 && INTEGRAL_TYPE_P (TREE_TYPE (arg))
4062 && !TYPE_UNSIGNED (TREE_TYPE (arg)))
4063 TREE_NO_WARNING (arg) = 1;
4066 tree
4067 build_new_op (enum tree_code code, int flags, tree arg1, tree arg2, tree arg3,
4068 bool *overloaded_p, tsubst_flags_t complain)
4070 tree orig_arg1 = arg1;
4071 tree orig_arg2 = arg2;
4072 tree orig_arg3 = arg3;
4073 struct z_candidate *candidates = 0, *cand;
4074 VEC(tree,gc) *arglist;
4075 tree fnname;
4076 tree args[3];
4077 tree result = NULL_TREE;
4078 bool result_valid_p = false;
4079 enum tree_code code2 = NOP_EXPR;
4080 enum tree_code code_orig_arg1 = ERROR_MARK;
4081 enum tree_code code_orig_arg2 = ERROR_MARK;
4082 conversion *conv;
4083 void *p;
4084 bool strict_p;
4085 bool any_viable_p;
4087 if (error_operand_p (arg1)
4088 || error_operand_p (arg2)
4089 || error_operand_p (arg3))
4090 return error_mark_node;
4092 if (code == MODIFY_EXPR)
4094 code2 = TREE_CODE (arg3);
4095 arg3 = NULL_TREE;
4096 fnname = ansi_assopname (code2);
4098 else
4099 fnname = ansi_opname (code);
4101 arg1 = prep_operand (arg1);
4103 switch (code)
4105 case NEW_EXPR:
4106 case VEC_NEW_EXPR:
4107 case VEC_DELETE_EXPR:
4108 case DELETE_EXPR:
4109 /* Use build_op_new_call and build_op_delete_call instead. */
4110 gcc_unreachable ();
4112 case CALL_EXPR:
4113 /* Use build_op_call instead. */
4114 gcc_unreachable ();
4116 case TRUTH_ORIF_EXPR:
4117 case TRUTH_ANDIF_EXPR:
4118 case TRUTH_AND_EXPR:
4119 case TRUTH_OR_EXPR:
4120 /* These are saved for the sake of warn_logical_operator. */
4121 code_orig_arg1 = TREE_CODE (arg1);
4122 code_orig_arg2 = TREE_CODE (arg2);
4124 default:
4125 break;
4128 arg2 = prep_operand (arg2);
4129 arg3 = prep_operand (arg3);
4131 if (code == COND_EXPR)
4133 if (arg2 == NULL_TREE
4134 || TREE_CODE (TREE_TYPE (arg2)) == VOID_TYPE
4135 || TREE_CODE (TREE_TYPE (arg3)) == VOID_TYPE
4136 || (! IS_OVERLOAD_TYPE (TREE_TYPE (arg2))
4137 && ! IS_OVERLOAD_TYPE (TREE_TYPE (arg3))))
4138 goto builtin;
4140 else if (! IS_OVERLOAD_TYPE (TREE_TYPE (arg1))
4141 && (! arg2 || ! IS_OVERLOAD_TYPE (TREE_TYPE (arg2))))
4142 goto builtin;
4144 if (code == POSTINCREMENT_EXPR || code == POSTDECREMENT_EXPR)
4145 arg2 = integer_zero_node;
4147 arglist = VEC_alloc (tree, gc, 3);
4148 VEC_quick_push (tree, arglist, arg1);
4149 if (arg2 != NULL_TREE)
4150 VEC_quick_push (tree, arglist, arg2);
4151 if (arg3 != NULL_TREE)
4152 VEC_quick_push (tree, arglist, arg3);
4154 /* Get the high-water mark for the CONVERSION_OBSTACK. */
4155 p = conversion_obstack_alloc (0);
4157 /* Add namespace-scope operators to the list of functions to
4158 consider. */
4159 add_candidates (lookup_function_nonclass (fnname, arglist, /*block_p=*/true),
4160 arglist, NULL_TREE, false, NULL_TREE, NULL_TREE,
4161 flags, &candidates);
4162 /* Add class-member operators to the candidate set. */
4163 if (CLASS_TYPE_P (TREE_TYPE (arg1)))
4165 tree fns;
4167 fns = lookup_fnfields (TREE_TYPE (arg1), fnname, 1);
4168 if (fns == error_mark_node)
4170 result = error_mark_node;
4171 goto user_defined_result_ready;
4173 if (fns)
4174 add_candidates (BASELINK_FUNCTIONS (fns), arglist,
4175 NULL_TREE, false,
4176 BASELINK_BINFO (fns),
4177 TYPE_BINFO (TREE_TYPE (arg1)),
4178 flags, &candidates);
4181 /* Rearrange the arguments for ?: so that add_builtin_candidate only has
4182 to know about two args; a builtin candidate will always have a first
4183 parameter of type bool. We'll handle that in
4184 build_builtin_candidate. */
4185 if (code == COND_EXPR)
4187 args[0] = arg2;
4188 args[1] = arg3;
4189 args[2] = arg1;
4191 else
4193 args[0] = arg1;
4194 args[1] = arg2;
4195 args[2] = NULL_TREE;
4198 add_builtin_candidates (&candidates, code, code2, fnname, args, flags);
4200 switch (code)
4202 case COMPOUND_EXPR:
4203 case ADDR_EXPR:
4204 /* For these, the built-in candidates set is empty
4205 [over.match.oper]/3. We don't want non-strict matches
4206 because exact matches are always possible with built-in
4207 operators. The built-in candidate set for COMPONENT_REF
4208 would be empty too, but since there are no such built-in
4209 operators, we accept non-strict matches for them. */
4210 strict_p = true;
4211 break;
4213 default:
4214 strict_p = pedantic;
4215 break;
4218 candidates = splice_viable (candidates, strict_p, &any_viable_p);
4219 if (!any_viable_p)
4221 switch (code)
4223 case POSTINCREMENT_EXPR:
4224 case POSTDECREMENT_EXPR:
4225 /* Don't try anything fancy if we're not allowed to produce
4226 errors. */
4227 if (!(complain & tf_error))
4228 return error_mark_node;
4230 /* Look for an `operator++ (int)'. If they didn't have
4231 one, then we fall back to the old way of doing things. */
4232 if (flags & LOOKUP_COMPLAIN)
4233 permerror (input_location, "no %<%D(int)%> declared for postfix %qs, "
4234 "trying prefix operator instead",
4235 fnname,
4236 operator_name_info[code].name);
4237 if (code == POSTINCREMENT_EXPR)
4238 code = PREINCREMENT_EXPR;
4239 else
4240 code = PREDECREMENT_EXPR;
4241 result = build_new_op (code, flags, arg1, NULL_TREE, NULL_TREE,
4242 overloaded_p, complain);
4243 break;
4245 /* The caller will deal with these. */
4246 case ADDR_EXPR:
4247 case COMPOUND_EXPR:
4248 case COMPONENT_REF:
4249 result = NULL_TREE;
4250 result_valid_p = true;
4251 break;
4253 default:
4254 if ((flags & LOOKUP_COMPLAIN) && (complain & tf_error))
4256 /* If one of the arguments of the operator represents
4257 an invalid use of member function pointer, try to report
4258 a meaningful error ... */
4259 if (invalid_nonstatic_memfn_p (arg1, tf_error)
4260 || invalid_nonstatic_memfn_p (arg2, tf_error)
4261 || invalid_nonstatic_memfn_p (arg3, tf_error))
4262 /* We displayed the error message. */;
4263 else
4265 /* ... Otherwise, report the more generic
4266 "no matching operator found" error */
4267 op_error (code, code2, arg1, arg2, arg3, "no match");
4268 print_z_candidates (candidates);
4271 result = error_mark_node;
4272 break;
4275 else
4277 cand = tourney (candidates);
4278 if (cand == 0)
4280 if ((flags & LOOKUP_COMPLAIN) && (complain & tf_error))
4282 op_error (code, code2, arg1, arg2, arg3, "ambiguous overload");
4283 print_z_candidates (candidates);
4285 result = error_mark_node;
4287 else if (TREE_CODE (cand->fn) == FUNCTION_DECL)
4289 if (overloaded_p)
4290 *overloaded_p = true;
4292 if (resolve_args (arglist) == NULL)
4293 result = error_mark_node;
4294 else
4295 result = build_over_call (cand, LOOKUP_NORMAL, complain);
4297 else
4299 /* Give any warnings we noticed during overload resolution. */
4300 if (cand->warnings && (complain & tf_warning))
4302 struct candidate_warning *w;
4303 for (w = cand->warnings; w; w = w->next)
4304 joust (cand, w->loser, 1);
4307 /* Check for comparison of different enum types. */
4308 switch (code)
4310 case GT_EXPR:
4311 case LT_EXPR:
4312 case GE_EXPR:
4313 case LE_EXPR:
4314 case EQ_EXPR:
4315 case NE_EXPR:
4316 if (TREE_CODE (TREE_TYPE (arg1)) == ENUMERAL_TYPE
4317 && TREE_CODE (TREE_TYPE (arg2)) == ENUMERAL_TYPE
4318 && (TYPE_MAIN_VARIANT (TREE_TYPE (arg1))
4319 != TYPE_MAIN_VARIANT (TREE_TYPE (arg2)))
4320 && (complain & tf_warning))
4322 warning (OPT_Wenum_compare,
4323 "comparison between %q#T and %q#T",
4324 TREE_TYPE (arg1), TREE_TYPE (arg2));
4326 break;
4327 default:
4328 break;
4331 /* We need to strip any leading REF_BIND so that bitfields
4332 don't cause errors. This should not remove any important
4333 conversions, because builtins don't apply to class
4334 objects directly. */
4335 conv = cand->convs[0];
4336 if (conv->kind == ck_ref_bind)
4337 conv = conv->u.next;
4338 arg1 = convert_like (conv, arg1, complain);
4340 if (arg2)
4342 /* We need to call warn_logical_operator before
4343 converting arg2 to a boolean_type. */
4344 if (complain & tf_warning)
4345 warn_logical_operator (input_location, code, boolean_type_node,
4346 code_orig_arg1, arg1,
4347 code_orig_arg2, arg2);
4349 conv = cand->convs[1];
4350 if (conv->kind == ck_ref_bind)
4351 conv = conv->u.next;
4352 arg2 = convert_like (conv, arg2, complain);
4354 if (arg3)
4356 conv = cand->convs[2];
4357 if (conv->kind == ck_ref_bind)
4358 conv = conv->u.next;
4359 arg3 = convert_like (conv, arg3, complain);
4365 user_defined_result_ready:
4367 /* Free all the conversions we allocated. */
4368 obstack_free (&conversion_obstack, p);
4370 if (result || result_valid_p)
4371 return result;
4373 builtin:
4374 avoid_sign_compare_warnings (orig_arg1, arg1);
4375 avoid_sign_compare_warnings (orig_arg2, arg2);
4376 avoid_sign_compare_warnings (orig_arg3, arg3);
4378 switch (code)
4380 case MODIFY_EXPR:
4381 return cp_build_modify_expr (arg1, code2, arg2, complain);
4383 case INDIRECT_REF:
4384 return cp_build_indirect_ref (arg1, "unary *", complain);
4386 case TRUTH_ANDIF_EXPR:
4387 case TRUTH_ORIF_EXPR:
4388 case TRUTH_AND_EXPR:
4389 case TRUTH_OR_EXPR:
4390 warn_logical_operator (input_location, code, boolean_type_node,
4391 code_orig_arg1, arg1, code_orig_arg2, arg2);
4392 /* Fall through. */
4393 case PLUS_EXPR:
4394 case MINUS_EXPR:
4395 case MULT_EXPR:
4396 case TRUNC_DIV_EXPR:
4397 case GT_EXPR:
4398 case LT_EXPR:
4399 case GE_EXPR:
4400 case LE_EXPR:
4401 case EQ_EXPR:
4402 case NE_EXPR:
4403 case MAX_EXPR:
4404 case MIN_EXPR:
4405 case LSHIFT_EXPR:
4406 case RSHIFT_EXPR:
4407 case TRUNC_MOD_EXPR:
4408 case BIT_AND_EXPR:
4409 case BIT_IOR_EXPR:
4410 case BIT_XOR_EXPR:
4411 return cp_build_binary_op (input_location, code, arg1, arg2, complain);
4413 case UNARY_PLUS_EXPR:
4414 case NEGATE_EXPR:
4415 case BIT_NOT_EXPR:
4416 case TRUTH_NOT_EXPR:
4417 case PREINCREMENT_EXPR:
4418 case POSTINCREMENT_EXPR:
4419 case PREDECREMENT_EXPR:
4420 case POSTDECREMENT_EXPR:
4421 case REALPART_EXPR:
4422 case IMAGPART_EXPR:
4423 return cp_build_unary_op (code, arg1, candidates != 0, complain);
4425 case ARRAY_REF:
4426 return build_array_ref (input_location, arg1, arg2);
4428 case COND_EXPR:
4429 return build_conditional_expr (arg1, arg2, arg3, complain);
4431 case MEMBER_REF:
4432 return build_m_component_ref (cp_build_indirect_ref (arg1, NULL,
4433 complain),
4434 arg2);
4436 /* The caller will deal with these. */
4437 case ADDR_EXPR:
4438 case COMPONENT_REF:
4439 case COMPOUND_EXPR:
4440 return NULL_TREE;
4442 default:
4443 gcc_unreachable ();
4445 return NULL_TREE;
4448 /* Build a call to operator delete. This has to be handled very specially,
4449 because the restrictions on what signatures match are different from all
4450 other call instances. For a normal delete, only a delete taking (void *)
4451 or (void *, size_t) is accepted. For a placement delete, only an exact
4452 match with the placement new is accepted.
4454 CODE is either DELETE_EXPR or VEC_DELETE_EXPR.
4455 ADDR is the pointer to be deleted.
4456 SIZE is the size of the memory block to be deleted.
4457 GLOBAL_P is true if the delete-expression should not consider
4458 class-specific delete operators.
4459 PLACEMENT is the corresponding placement new call, or NULL_TREE.
4461 If this call to "operator delete" is being generated as part to
4462 deallocate memory allocated via a new-expression (as per [expr.new]
4463 which requires that if the initialization throws an exception then
4464 we call a deallocation function), then ALLOC_FN is the allocation
4465 function. */
4467 tree
4468 build_op_delete_call (enum tree_code code, tree addr, tree size,
4469 bool global_p, tree placement,
4470 tree alloc_fn)
4472 tree fn = NULL_TREE;
4473 tree fns, fnname, argtypes, type;
4474 int pass;
4476 if (addr == error_mark_node)
4477 return error_mark_node;
4479 type = strip_array_types (TREE_TYPE (TREE_TYPE (addr)));
4481 fnname = ansi_opname (code);
4483 if (CLASS_TYPE_P (type)
4484 && COMPLETE_TYPE_P (complete_type (type))
4485 && !global_p)
4486 /* In [class.free]
4488 If the result of the lookup is ambiguous or inaccessible, or if
4489 the lookup selects a placement deallocation function, the
4490 program is ill-formed.
4492 Therefore, we ask lookup_fnfields to complain about ambiguity. */
4494 fns = lookup_fnfields (TYPE_BINFO (type), fnname, 1);
4495 if (fns == error_mark_node)
4496 return error_mark_node;
4498 else
4499 fns = NULL_TREE;
4501 if (fns == NULL_TREE)
4502 fns = lookup_name_nonclass (fnname);
4504 /* Strip const and volatile from addr. */
4505 addr = cp_convert (ptr_type_node, addr);
4507 if (placement)
4509 /* Get the parameter types for the allocation function that is
4510 being called. */
4511 gcc_assert (alloc_fn != NULL_TREE);
4512 argtypes = TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (alloc_fn)));
4514 else
4516 /* First try it without the size argument. */
4517 argtypes = void_list_node;
4520 /* We make two tries at finding a matching `operator delete'. On
4521 the first pass, we look for a one-operator (or placement)
4522 operator delete. If we're not doing placement delete, then on
4523 the second pass we look for a two-argument delete. */
4524 for (pass = 0; pass < (placement ? 1 : 2); ++pass)
4526 /* Go through the `operator delete' functions looking for one
4527 with a matching type. */
4528 for (fn = BASELINK_P (fns) ? BASELINK_FUNCTIONS (fns) : fns;
4530 fn = OVL_NEXT (fn))
4532 tree t;
4534 /* The first argument must be "void *". */
4535 t = TYPE_ARG_TYPES (TREE_TYPE (OVL_CURRENT (fn)));
4536 if (!same_type_p (TREE_VALUE (t), ptr_type_node))
4537 continue;
4538 t = TREE_CHAIN (t);
4539 /* On the first pass, check the rest of the arguments. */
4540 if (pass == 0)
4542 tree a = argtypes;
4543 while (a && t)
4545 if (!same_type_p (TREE_VALUE (a), TREE_VALUE (t)))
4546 break;
4547 a = TREE_CHAIN (a);
4548 t = TREE_CHAIN (t);
4550 if (!a && !t)
4551 break;
4553 /* On the second pass, look for a function with exactly two
4554 arguments: "void *" and "size_t". */
4555 else if (pass == 1
4556 /* For "operator delete(void *, ...)" there will be
4557 no second argument, but we will not get an exact
4558 match above. */
4559 && t
4560 && same_type_p (TREE_VALUE (t), size_type_node)
4561 && TREE_CHAIN (t) == void_list_node)
4562 break;
4565 /* If we found a match, we're done. */
4566 if (fn)
4567 break;
4570 /* If we have a matching function, call it. */
4571 if (fn)
4573 /* Make sure we have the actual function, and not an
4574 OVERLOAD. */
4575 fn = OVL_CURRENT (fn);
4577 /* If the FN is a member function, make sure that it is
4578 accessible. */
4579 if (DECL_CLASS_SCOPE_P (fn))
4580 perform_or_defer_access_check (TYPE_BINFO (type), fn, fn);
4582 if (placement)
4584 /* The placement args might not be suitable for overload
4585 resolution at this point, so build the call directly. */
4586 int nargs = call_expr_nargs (placement);
4587 tree *argarray = (tree *) alloca (nargs * sizeof (tree));
4588 int i;
4589 argarray[0] = addr;
4590 for (i = 1; i < nargs; i++)
4591 argarray[i] = CALL_EXPR_ARG (placement, i);
4592 mark_used (fn);
4593 return build_cxx_call (fn, nargs, argarray);
4595 else
4597 tree ret;
4598 VEC(tree,gc) *args = VEC_alloc (tree, gc, 2);
4599 VEC_quick_push (tree, args, addr);
4600 if (pass != 0)
4601 VEC_quick_push (tree, args, size);
4602 ret = cp_build_function_call_vec (fn, &args, tf_warning_or_error);
4603 VEC_free (tree, gc, args);
4604 return ret;
4608 /* [expr.new]
4610 If no unambiguous matching deallocation function can be found,
4611 propagating the exception does not cause the object's memory to
4612 be freed. */
4613 if (alloc_fn)
4615 if (!placement)
4616 warning (0, "no corresponding deallocation function for %qD",
4617 alloc_fn);
4618 return NULL_TREE;
4621 error ("no suitable %<operator %s%> for %qT",
4622 operator_name_info[(int)code].name, type);
4623 return error_mark_node;
4626 /* If the current scope isn't allowed to access DECL along
4627 BASETYPE_PATH, give an error. The most derived class in
4628 BASETYPE_PATH is the one used to qualify DECL. DIAG_DECL is
4629 the declaration to use in the error diagnostic. */
4631 bool
4632 enforce_access (tree basetype_path, tree decl, tree diag_decl)
4634 gcc_assert (TREE_CODE (basetype_path) == TREE_BINFO);
4636 if (!accessible_p (basetype_path, decl, true))
4638 if (TREE_PRIVATE (decl))
4639 error ("%q+#D is private", diag_decl);
4640 else if (TREE_PROTECTED (decl))
4641 error ("%q+#D is protected", diag_decl);
4642 else
4643 error ("%q+#D is inaccessible", diag_decl);
4644 error ("within this context");
4645 return false;
4648 return true;
4651 /* Initialize a temporary of type TYPE with EXPR. The FLAGS are a
4652 bitwise or of LOOKUP_* values. If any errors are warnings are
4653 generated, set *DIAGNOSTIC_FN to "error" or "warning",
4654 respectively. If no diagnostics are generated, set *DIAGNOSTIC_FN
4655 to NULL. */
4657 static tree
4658 build_temp (tree expr, tree type, int flags,
4659 diagnostic_t *diagnostic_kind)
4661 int savew, savee;
4662 VEC(tree,gc) *args;
4664 savew = warningcount, savee = errorcount;
4665 args = make_tree_vector_single (expr);
4666 expr = build_special_member_call (NULL_TREE, complete_ctor_identifier,
4667 &args, type, flags, tf_warning_or_error);
4668 release_tree_vector (args);
4669 if (warningcount > savew)
4670 *diagnostic_kind = DK_WARNING;
4671 else if (errorcount > savee)
4672 *diagnostic_kind = DK_ERROR;
4673 else
4674 *diagnostic_kind = DK_UNSPECIFIED;
4675 return expr;
4678 /* Perform warnings about peculiar, but valid, conversions from/to NULL.
4679 EXPR is implicitly converted to type TOTYPE.
4680 FN and ARGNUM are used for diagnostics. */
4682 static void
4683 conversion_null_warnings (tree totype, tree expr, tree fn, int argnum)
4685 tree t = non_reference (totype);
4687 /* Issue warnings about peculiar, but valid, uses of NULL. */
4688 if (expr == null_node && TREE_CODE (t) != BOOLEAN_TYPE && ARITHMETIC_TYPE_P (t))
4690 if (fn)
4691 warning (OPT_Wconversion, "passing NULL to non-pointer argument %P of %qD",
4692 argnum, fn);
4693 else
4694 warning (OPT_Wconversion, "converting to non-pointer type %qT from NULL", t);
4697 /* Issue warnings if "false" is converted to a NULL pointer */
4698 else if (expr == boolean_false_node && fn && POINTER_TYPE_P (t))
4699 warning (OPT_Wconversion,
4700 "converting %<false%> to pointer type for argument %P of %qD",
4701 argnum, fn);
4704 /* Perform the conversions in CONVS on the expression EXPR. FN and
4705 ARGNUM are used for diagnostics. ARGNUM is zero based, -1
4706 indicates the `this' argument of a method. INNER is nonzero when
4707 being called to continue a conversion chain. It is negative when a
4708 reference binding will be applied, positive otherwise. If
4709 ISSUE_CONVERSION_WARNINGS is true, warnings about suspicious
4710 conversions will be emitted if appropriate. If C_CAST_P is true,
4711 this conversion is coming from a C-style cast; in that case,
4712 conversions to inaccessible bases are permitted. */
4714 static tree
4715 convert_like_real (conversion *convs, tree expr, tree fn, int argnum,
4716 int inner, bool issue_conversion_warnings,
4717 bool c_cast_p, tsubst_flags_t complain)
4719 tree totype = convs->type;
4720 diagnostic_t diag_kind;
4721 int flags;
4723 if (convs->bad_p
4724 && convs->kind != ck_user
4725 && convs->kind != ck_list
4726 && convs->kind != ck_ambig
4727 && convs->kind != ck_ref_bind
4728 && convs->kind != ck_rvalue
4729 && convs->kind != ck_base)
4731 conversion *t = convs;
4733 /* Give a helpful error if this is bad because of excess braces. */
4734 if (BRACE_ENCLOSED_INITIALIZER_P (expr)
4735 && SCALAR_TYPE_P (totype)
4736 && CONSTRUCTOR_NELTS (expr) > 0
4737 && BRACE_ENCLOSED_INITIALIZER_P (CONSTRUCTOR_ELT (expr, 0)->value))
4738 permerror (input_location, "too many braces around initializer for %qT", totype);
4740 for (; t; t = convs->u.next)
4742 if (t->kind == ck_user || !t->bad_p)
4744 expr = convert_like_real (t, expr, fn, argnum, 1,
4745 /*issue_conversion_warnings=*/false,
4746 /*c_cast_p=*/false,
4747 complain);
4748 break;
4750 else if (t->kind == ck_ambig)
4751 return convert_like_real (t, expr, fn, argnum, 1,
4752 /*issue_conversion_warnings=*/false,
4753 /*c_cast_p=*/false,
4754 complain);
4755 else if (t->kind == ck_identity)
4756 break;
4758 if (complain & tf_error)
4760 permerror (input_location, "invalid conversion from %qT to %qT", TREE_TYPE (expr), totype);
4761 if (fn)
4762 permerror (input_location, " initializing argument %P of %qD", argnum, fn);
4764 else
4765 return error_mark_node;
4767 return cp_convert (totype, expr);
4770 if (issue_conversion_warnings && (complain & tf_warning))
4771 conversion_null_warnings (totype, expr, fn, argnum);
4773 switch (convs->kind)
4775 case ck_user:
4777 struct z_candidate *cand = convs->cand;
4778 tree convfn = cand->fn;
4779 unsigned i;
4781 /* When converting from an init list we consider explicit
4782 constructors, but actually trying to call one is an error. */
4783 if (DECL_NONCONVERTING_P (convfn) && DECL_CONSTRUCTOR_P (convfn))
4785 if (complain & tf_error)
4786 error ("converting to %qT from initializer list would use "
4787 "explicit constructor %qD", totype, convfn);
4788 else
4789 return error_mark_node;
4792 /* Set user_conv_p on the argument conversions, so rvalue/base
4793 handling knows not to allow any more UDCs. */
4794 for (i = 0; i < cand->num_convs; ++i)
4795 cand->convs[i]->user_conv_p = true;
4797 expr = build_over_call (cand, LOOKUP_NORMAL, complain);
4799 /* If this is a constructor or a function returning an aggr type,
4800 we need to build up a TARGET_EXPR. */
4801 if (DECL_CONSTRUCTOR_P (convfn))
4803 expr = build_cplus_new (totype, expr);
4805 /* Remember that this was list-initialization. */
4806 if (convs->check_narrowing)
4807 TARGET_EXPR_LIST_INIT_P (expr) = true;
4810 return expr;
4812 case ck_identity:
4813 if (BRACE_ENCLOSED_INITIALIZER_P (expr))
4815 int nelts = CONSTRUCTOR_NELTS (expr);
4816 if (nelts == 0)
4817 expr = integer_zero_node;
4818 else if (nelts == 1)
4819 expr = CONSTRUCTOR_ELT (expr, 0)->value;
4820 else
4821 gcc_unreachable ();
4824 if (type_unknown_p (expr))
4825 expr = instantiate_type (totype, expr, complain);
4826 /* Convert a constant to its underlying value, unless we are
4827 about to bind it to a reference, in which case we need to
4828 leave it as an lvalue. */
4829 if (inner >= 0)
4831 expr = decl_constant_value (expr);
4832 if (expr == null_node && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (totype))
4833 /* If __null has been converted to an integer type, we do not
4834 want to warn about uses of EXPR as an integer, rather than
4835 as a pointer. */
4836 expr = build_int_cst (totype, 0);
4838 return expr;
4839 case ck_ambig:
4840 /* Call build_user_type_conversion again for the error. */
4841 return build_user_type_conversion
4842 (totype, convs->u.expr, LOOKUP_NORMAL);
4844 case ck_list:
4846 /* Conversion to std::initializer_list<T>. */
4847 tree elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (totype), 0);
4848 tree new_ctor = build_constructor (init_list_type_node, NULL);
4849 unsigned len = CONSTRUCTOR_NELTS (expr);
4850 tree array, val;
4851 VEC(tree,gc) *parms;
4852 unsigned ix;
4854 /* Convert all the elements. */
4855 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expr), ix, val)
4857 tree sub = convert_like_real (convs->u.list[ix], val, fn, argnum,
4858 1, false, false, complain);
4859 if (sub == error_mark_node)
4860 return sub;
4861 check_narrowing (TREE_TYPE (sub), val);
4862 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_ctor), NULL_TREE, sub);
4864 /* Build up the array. */
4865 elttype = cp_build_qualified_type
4866 (elttype, TYPE_QUALS (elttype) | TYPE_QUAL_CONST);
4867 array = build_array_of_n_type (elttype, len);
4868 array = finish_compound_literal (array, new_ctor);
4870 parms = make_tree_vector ();
4871 VEC_safe_push (tree, gc, parms, decay_conversion (array));
4872 VEC_safe_push (tree, gc, parms, size_int (len));
4873 /* Call the private constructor. */
4874 push_deferring_access_checks (dk_no_check);
4875 new_ctor = build_special_member_call
4876 (NULL_TREE, complete_ctor_identifier, &parms, totype, 0, complain);
4877 release_tree_vector (parms);
4878 pop_deferring_access_checks ();
4879 return build_cplus_new (totype, new_ctor);
4882 case ck_aggr:
4883 return get_target_expr (digest_init (totype, expr));
4885 default:
4886 break;
4889 expr = convert_like_real (convs->u.next, expr, fn, argnum,
4890 convs->kind == ck_ref_bind ? -1 : 1,
4891 convs->kind == ck_ref_bind ? issue_conversion_warnings : false,
4892 c_cast_p,
4893 complain);
4894 if (expr == error_mark_node)
4895 return error_mark_node;
4897 switch (convs->kind)
4899 case ck_rvalue:
4900 expr = convert_bitfield_to_declared_type (expr);
4901 if (! MAYBE_CLASS_TYPE_P (totype))
4902 return expr;
4903 /* Else fall through. */
4904 case ck_base:
4905 if (convs->kind == ck_base && !convs->need_temporary_p)
4907 /* We are going to bind a reference directly to a base-class
4908 subobject of EXPR. */
4909 /* Build an expression for `*((base*) &expr)'. */
4910 expr = cp_build_unary_op (ADDR_EXPR, expr, 0, complain);
4911 expr = convert_to_base (expr, build_pointer_type (totype),
4912 !c_cast_p, /*nonnull=*/true);
4913 expr = cp_build_indirect_ref (expr, "implicit conversion", complain);
4914 return expr;
4917 /* Copy-initialization where the cv-unqualified version of the source
4918 type is the same class as, or a derived class of, the class of the
4919 destination [is treated as direct-initialization]. [dcl.init] */
4920 flags = LOOKUP_NORMAL|LOOKUP_ONLYCONVERTING;
4921 if (convs->user_conv_p)
4922 /* This conversion is being done in the context of a user-defined
4923 conversion (i.e. the second step of copy-initialization), so
4924 don't allow any more. */
4925 flags |= LOOKUP_NO_CONVERSION;
4926 expr = build_temp (expr, totype, flags, &diag_kind);
4927 if (diag_kind && fn)
4929 if ((complain & tf_error))
4930 emit_diagnostic (diag_kind, input_location, 0,
4931 " initializing argument %P of %qD", argnum, fn);
4932 else if (diag_kind == DK_ERROR)
4933 return error_mark_node;
4935 return build_cplus_new (totype, expr);
4937 case ck_ref_bind:
4939 tree ref_type = totype;
4941 /* If necessary, create a temporary.
4943 VA_ARG_EXPR and CONSTRUCTOR expressions are special cases
4944 that need temporaries, even when their types are reference
4945 compatible with the type of reference being bound, so the
4946 upcoming call to cp_build_unary_op (ADDR_EXPR, expr, ...)
4947 doesn't fail. */
4948 if (convs->need_temporary_p
4949 || TREE_CODE (expr) == CONSTRUCTOR
4950 || TREE_CODE (expr) == VA_ARG_EXPR)
4952 tree type = convs->u.next->type;
4953 cp_lvalue_kind lvalue = real_lvalue_p (expr);
4955 if (!CP_TYPE_CONST_NON_VOLATILE_P (TREE_TYPE (ref_type))
4956 && !TYPE_REF_IS_RVALUE (ref_type))
4958 if (complain & tf_error)
4960 /* If the reference is volatile or non-const, we
4961 cannot create a temporary. */
4962 if (lvalue & clk_bitfield)
4963 error ("cannot bind bitfield %qE to %qT",
4964 expr, ref_type);
4965 else if (lvalue & clk_packed)
4966 error ("cannot bind packed field %qE to %qT",
4967 expr, ref_type);
4968 else
4969 error ("cannot bind rvalue %qE to %qT", expr, ref_type);
4971 return error_mark_node;
4973 /* If the source is a packed field, and we must use a copy
4974 constructor, then building the target expr will require
4975 binding the field to the reference parameter to the
4976 copy constructor, and we'll end up with an infinite
4977 loop. If we can use a bitwise copy, then we'll be
4978 OK. */
4979 if ((lvalue & clk_packed)
4980 && CLASS_TYPE_P (type)
4981 && !TYPE_HAS_TRIVIAL_INIT_REF (type))
4983 if (complain & tf_error)
4984 error ("cannot bind packed field %qE to %qT",
4985 expr, ref_type);
4986 return error_mark_node;
4988 if (lvalue & clk_bitfield)
4990 expr = convert_bitfield_to_declared_type (expr);
4991 expr = fold_convert (type, expr);
4993 expr = build_target_expr_with_type (expr, type);
4996 /* Take the address of the thing to which we will bind the
4997 reference. */
4998 expr = cp_build_unary_op (ADDR_EXPR, expr, 1, complain);
4999 if (expr == error_mark_node)
5000 return error_mark_node;
5002 /* Convert it to a pointer to the type referred to by the
5003 reference. This will adjust the pointer if a derived to
5004 base conversion is being performed. */
5005 expr = cp_convert (build_pointer_type (TREE_TYPE (ref_type)),
5006 expr);
5007 /* Convert the pointer to the desired reference type. */
5008 return build_nop (ref_type, expr);
5011 case ck_lvalue:
5012 return decay_conversion (expr);
5014 case ck_qual:
5015 /* Warn about deprecated conversion if appropriate. */
5016 string_conv_p (totype, expr, 1);
5017 break;
5019 case ck_ptr:
5020 if (convs->base_p)
5021 expr = convert_to_base (expr, totype, !c_cast_p,
5022 /*nonnull=*/false);
5023 return build_nop (totype, expr);
5025 case ck_pmem:
5026 return convert_ptrmem (totype, expr, /*allow_inverse_p=*/false,
5027 c_cast_p);
5029 default:
5030 break;
5033 if (convs->check_narrowing)
5034 check_narrowing (totype, expr);
5036 if (issue_conversion_warnings && (complain & tf_warning))
5037 expr = convert_and_check (totype, expr);
5038 else
5039 expr = convert (totype, expr);
5041 return expr;
5044 /* ARG is being passed to a varargs function. Perform any conversions
5045 required. Return the converted value. */
5047 tree
5048 convert_arg_to_ellipsis (tree arg)
5050 /* [expr.call]
5052 The lvalue-to-rvalue, array-to-pointer, and function-to-pointer
5053 standard conversions are performed. */
5054 arg = decay_conversion (arg);
5055 /* [expr.call]
5057 If the argument has integral or enumeration type that is subject
5058 to the integral promotions (_conv.prom_), or a floating point
5059 type that is subject to the floating point promotion
5060 (_conv.fpprom_), the value of the argument is converted to the
5061 promoted type before the call. */
5062 if (TREE_CODE (TREE_TYPE (arg)) == REAL_TYPE
5063 && (TYPE_PRECISION (TREE_TYPE (arg))
5064 < TYPE_PRECISION (double_type_node)))
5065 arg = convert_to_real (double_type_node, arg);
5066 else if (INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (arg)))
5067 arg = perform_integral_promotions (arg);
5069 arg = require_complete_type (arg);
5071 if (arg != error_mark_node
5072 && (type_has_nontrivial_copy_init (TREE_TYPE (arg))
5073 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (arg))))
5075 /* [expr.call] 5.2.2/7:
5076 Passing a potentially-evaluated argument of class type (Clause 9)
5077 with a non-trivial copy constructor or a non-trivial destructor
5078 with no corresponding parameter is conditionally-supported, with
5079 implementation-defined semantics.
5081 We used to just warn here and do a bitwise copy, but now
5082 cp_expr_size will abort if we try to do that.
5084 If the call appears in the context of a sizeof expression,
5085 it is not potentially-evaluated. */
5086 if (cp_unevaluated_operand == 0)
5087 error ("cannot pass objects of non-trivially-copyable "
5088 "type %q#T through %<...%>", TREE_TYPE (arg));
5091 return arg;
5094 /* va_arg (EXPR, TYPE) is a builtin. Make sure it is not abused. */
5096 tree
5097 build_x_va_arg (tree expr, tree type)
5099 if (processing_template_decl)
5100 return build_min (VA_ARG_EXPR, type, expr);
5102 type = complete_type_or_else (type, NULL_TREE);
5104 if (expr == error_mark_node || !type)
5105 return error_mark_node;
5107 if (type_has_nontrivial_copy_init (type)
5108 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
5109 || TREE_CODE (type) == REFERENCE_TYPE)
5111 /* Remove reference types so we don't ICE later on. */
5112 tree type1 = non_reference (type);
5113 /* conditionally-supported behavior [expr.call] 5.2.2/7. */
5114 error ("cannot receive objects of non-trivially-copyable type %q#T "
5115 "through %<...%>; ", type);
5116 expr = convert (build_pointer_type (type1), null_node);
5117 expr = cp_build_indirect_ref (expr, NULL, tf_warning_or_error);
5118 return expr;
5121 return build_va_arg (input_location, expr, type);
5124 /* TYPE has been given to va_arg. Apply the default conversions which
5125 would have happened when passed via ellipsis. Return the promoted
5126 type, or the passed type if there is no change. */
5128 tree
5129 cxx_type_promotes_to (tree type)
5131 tree promote;
5133 /* Perform the array-to-pointer and function-to-pointer
5134 conversions. */
5135 type = type_decays_to (type);
5137 promote = type_promotes_to (type);
5138 if (same_type_p (type, promote))
5139 promote = type;
5141 return promote;
5144 /* ARG is a default argument expression being passed to a parameter of
5145 the indicated TYPE, which is a parameter to FN. Do any required
5146 conversions. Return the converted value. */
5148 static GTY(()) VEC(tree,gc) *default_arg_context;
5150 tree
5151 convert_default_arg (tree type, tree arg, tree fn, int parmnum)
5153 int i;
5154 tree t;
5156 /* If the ARG is an unparsed default argument expression, the
5157 conversion cannot be performed. */
5158 if (TREE_CODE (arg) == DEFAULT_ARG)
5160 error ("the default argument for parameter %d of %qD has "
5161 "not yet been parsed",
5162 parmnum, fn);
5163 return error_mark_node;
5166 /* Detect recursion. */
5167 for (i = 0; VEC_iterate (tree, default_arg_context, i, t); ++i)
5168 if (t == fn)
5170 error ("recursive evaluation of default argument for %q#D", fn);
5171 return error_mark_node;
5173 VEC_safe_push (tree, gc, default_arg_context, fn);
5175 if (fn && DECL_TEMPLATE_INFO (fn))
5176 arg = tsubst_default_argument (fn, type, arg);
5178 /* Due to:
5180 [dcl.fct.default]
5182 The names in the expression are bound, and the semantic
5183 constraints are checked, at the point where the default
5184 expressions appears.
5186 we must not perform access checks here. */
5187 push_deferring_access_checks (dk_no_check);
5188 arg = break_out_target_exprs (arg);
5189 if (TREE_CODE (arg) == CONSTRUCTOR)
5191 arg = digest_init (type, arg);
5192 arg = convert_for_initialization (0, type, arg, LOOKUP_NORMAL,
5193 "default argument", fn, parmnum,
5194 tf_warning_or_error);
5196 else
5198 /* We must make a copy of ARG, in case subsequent processing
5199 alters any part of it. For example, during gimplification a
5200 cast of the form (T) &X::f (where "f" is a member function)
5201 will lead to replacing the PTRMEM_CST for &X::f with a
5202 VAR_DECL. We can avoid the copy for constants, since they
5203 are never modified in place. */
5204 if (!CONSTANT_CLASS_P (arg))
5205 arg = unshare_expr (arg);
5206 arg = convert_for_initialization (0, type, arg, LOOKUP_NORMAL,
5207 "default argument", fn, parmnum,
5208 tf_warning_or_error);
5209 arg = convert_for_arg_passing (type, arg);
5211 pop_deferring_access_checks();
5213 VEC_pop (tree, default_arg_context);
5215 return arg;
5218 /* Returns the type which will really be used for passing an argument of
5219 type TYPE. */
5221 tree
5222 type_passed_as (tree type)
5224 /* Pass classes with copy ctors by invisible reference. */
5225 if (TREE_ADDRESSABLE (type))
5227 type = build_reference_type (type);
5228 /* There are no other pointers to this temporary. */
5229 type = build_qualified_type (type, TYPE_QUAL_RESTRICT);
5231 else if (targetm.calls.promote_prototypes (type)
5232 && INTEGRAL_TYPE_P (type)
5233 && COMPLETE_TYPE_P (type)
5234 && INT_CST_LT_UNSIGNED (TYPE_SIZE (type),
5235 TYPE_SIZE (integer_type_node)))
5236 type = integer_type_node;
5238 return type;
5241 /* Actually perform the appropriate conversion. */
5243 tree
5244 convert_for_arg_passing (tree type, tree val)
5246 tree bitfield_type;
5248 /* If VAL is a bitfield, then -- since it has already been converted
5249 to TYPE -- it cannot have a precision greater than TYPE.
5251 If it has a smaller precision, we must widen it here. For
5252 example, passing "int f:3;" to a function expecting an "int" will
5253 not result in any conversion before this point.
5255 If the precision is the same we must not risk widening. For
5256 example, the COMPONENT_REF for a 32-bit "long long" bitfield will
5257 often have type "int", even though the C++ type for the field is
5258 "long long". If the value is being passed to a function
5259 expecting an "int", then no conversions will be required. But,
5260 if we call convert_bitfield_to_declared_type, the bitfield will
5261 be converted to "long long". */
5262 bitfield_type = is_bitfield_expr_with_lowered_type (val);
5263 if (bitfield_type
5264 && TYPE_PRECISION (TREE_TYPE (val)) < TYPE_PRECISION (type))
5265 val = convert_to_integer (TYPE_MAIN_VARIANT (bitfield_type), val);
5267 if (val == error_mark_node)
5269 /* Pass classes with copy ctors by invisible reference. */
5270 else if (TREE_ADDRESSABLE (type))
5271 val = build1 (ADDR_EXPR, build_reference_type (type), val);
5272 else if (targetm.calls.promote_prototypes (type)
5273 && INTEGRAL_TYPE_P (type)
5274 && COMPLETE_TYPE_P (type)
5275 && INT_CST_LT_UNSIGNED (TYPE_SIZE (type),
5276 TYPE_SIZE (integer_type_node)))
5277 val = perform_integral_promotions (val);
5278 if (warn_missing_format_attribute)
5280 tree rhstype = TREE_TYPE (val);
5281 const enum tree_code coder = TREE_CODE (rhstype);
5282 const enum tree_code codel = TREE_CODE (type);
5283 if ((codel == POINTER_TYPE || codel == REFERENCE_TYPE)
5284 && coder == codel
5285 && check_missing_format_attribute (type, rhstype))
5286 warning (OPT_Wmissing_format_attribute,
5287 "argument of function call might be a candidate for a format attribute");
5289 return val;
5292 /* Returns true iff FN is a function with magic varargs, i.e. ones for
5293 which no conversions at all should be done. This is true for some
5294 builtins which don't act like normal functions. */
5296 static bool
5297 magic_varargs_p (tree fn)
5299 if (DECL_BUILT_IN (fn))
5300 switch (DECL_FUNCTION_CODE (fn))
5302 case BUILT_IN_CLASSIFY_TYPE:
5303 case BUILT_IN_CONSTANT_P:
5304 case BUILT_IN_NEXT_ARG:
5305 case BUILT_IN_VA_START:
5306 return true;
5308 default:;
5309 return lookup_attribute ("type generic",
5310 TYPE_ATTRIBUTES (TREE_TYPE (fn))) != 0;
5313 return false;
5316 /* Subroutine of the various build_*_call functions. Overload resolution
5317 has chosen a winning candidate CAND; build up a CALL_EXPR accordingly.
5318 ARGS is a TREE_LIST of the unconverted arguments to the call. FLAGS is a
5319 bitmask of various LOOKUP_* flags which apply to the call itself. */
5321 static tree
5322 build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain)
5324 tree fn = cand->fn;
5325 const VEC(tree,gc) *args = cand->args;
5326 tree first_arg = cand->first_arg;
5327 conversion **convs = cand->convs;
5328 conversion *conv;
5329 tree parm = TYPE_ARG_TYPES (TREE_TYPE (fn));
5330 int parmlen;
5331 tree val;
5332 int i = 0;
5333 int j = 0;
5334 unsigned int arg_index = 0;
5335 int is_method = 0;
5336 int nargs;
5337 tree *argarray;
5338 bool already_used = false;
5340 /* In a template, there is no need to perform all of the work that
5341 is normally done. We are only interested in the type of the call
5342 expression, i.e., the return type of the function. Any semantic
5343 errors will be deferred until the template is instantiated. */
5344 if (processing_template_decl)
5346 tree expr;
5347 tree return_type;
5348 const tree *argarray;
5349 unsigned int nargs;
5351 return_type = TREE_TYPE (TREE_TYPE (fn));
5352 nargs = VEC_length (tree, args);
5353 if (first_arg == NULL_TREE)
5354 argarray = VEC_address (tree, CONST_CAST (VEC(tree,gc) *, args));
5355 else
5357 tree *alcarray;
5358 unsigned int ix;
5359 tree arg;
5361 ++nargs;
5362 alcarray = XALLOCAVEC (tree, nargs);
5363 alcarray[0] = first_arg;
5364 for (ix = 0; VEC_iterate (tree, args, ix, arg); ++ix)
5365 alcarray[ix + 1] = arg;
5366 argarray = alcarray;
5368 expr = build_call_array (return_type, build_addr_func (fn), nargs,
5369 argarray);
5370 if (TREE_THIS_VOLATILE (fn) && cfun)
5371 current_function_returns_abnormally = 1;
5372 if (!VOID_TYPE_P (return_type))
5373 require_complete_type (return_type);
5374 return convert_from_reference (expr);
5377 /* Give any warnings we noticed during overload resolution. */
5378 if (cand->warnings)
5380 struct candidate_warning *w;
5381 for (w = cand->warnings; w; w = w->next)
5382 joust (cand, w->loser, 1);
5385 /* Make =delete work with SFINAE. */
5386 if (DECL_DELETED_FN (fn) && !(complain & tf_error))
5387 return error_mark_node;
5389 if (DECL_FUNCTION_MEMBER_P (fn))
5391 /* If FN is a template function, two cases must be considered.
5392 For example:
5394 struct A {
5395 protected:
5396 template <class T> void f();
5398 template <class T> struct B {
5399 protected:
5400 void g();
5402 struct C : A, B<int> {
5403 using A::f; // #1
5404 using B<int>::g; // #2
5407 In case #1 where `A::f' is a member template, DECL_ACCESS is
5408 recorded in the primary template but not in its specialization.
5409 We check access of FN using its primary template.
5411 In case #2, where `B<int>::g' has a DECL_TEMPLATE_INFO simply
5412 because it is a member of class template B, DECL_ACCESS is
5413 recorded in the specialization `B<int>::g'. We cannot use its
5414 primary template because `B<T>::g' and `B<int>::g' may have
5415 different access. */
5416 if (DECL_TEMPLATE_INFO (fn)
5417 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (fn)))
5418 perform_or_defer_access_check (cand->access_path,
5419 DECL_TI_TEMPLATE (fn), fn);
5420 else
5421 perform_or_defer_access_check (cand->access_path, fn, fn);
5424 /* Find maximum size of vector to hold converted arguments. */
5425 parmlen = list_length (parm);
5426 nargs = VEC_length (tree, args) + (first_arg != NULL_TREE ? 1 : 0);
5427 if (parmlen > nargs)
5428 nargs = parmlen;
5429 argarray = (tree *) alloca (nargs * sizeof (tree));
5431 /* The implicit parameters to a constructor are not considered by overload
5432 resolution, and must be of the proper type. */
5433 if (DECL_CONSTRUCTOR_P (fn))
5435 if (first_arg != NULL_TREE)
5437 argarray[j++] = first_arg;
5438 first_arg = NULL_TREE;
5440 else
5442 argarray[j++] = VEC_index (tree, args, arg_index);
5443 ++arg_index;
5445 parm = TREE_CHAIN (parm);
5446 /* We should never try to call the abstract constructor. */
5447 gcc_assert (!DECL_HAS_IN_CHARGE_PARM_P (fn));
5449 if (DECL_HAS_VTT_PARM_P (fn))
5451 argarray[j++] = VEC_index (tree, args, arg_index);
5452 ++arg_index;
5453 parm = TREE_CHAIN (parm);
5456 /* Bypass access control for 'this' parameter. */
5457 else if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
5459 tree parmtype = TREE_VALUE (parm);
5460 tree arg = (first_arg != NULL_TREE
5461 ? first_arg
5462 : VEC_index (tree, args, arg_index));
5463 tree argtype = TREE_TYPE (arg);
5464 tree converted_arg;
5465 tree base_binfo;
5467 if (convs[i]->bad_p)
5469 if (complain & tf_error)
5470 permerror (input_location, "passing %qT as %<this%> argument of %q#D discards qualifiers",
5471 TREE_TYPE (argtype), fn);
5472 else
5473 return error_mark_node;
5476 /* [class.mfct.nonstatic]: If a nonstatic member function of a class
5477 X is called for an object that is not of type X, or of a type
5478 derived from X, the behavior is undefined.
5480 So we can assume that anything passed as 'this' is non-null, and
5481 optimize accordingly. */
5482 gcc_assert (TREE_CODE (parmtype) == POINTER_TYPE);
5483 /* Convert to the base in which the function was declared. */
5484 gcc_assert (cand->conversion_path != NULL_TREE);
5485 converted_arg = build_base_path (PLUS_EXPR,
5486 arg,
5487 cand->conversion_path,
5489 /* Check that the base class is accessible. */
5490 if (!accessible_base_p (TREE_TYPE (argtype),
5491 BINFO_TYPE (cand->conversion_path), true))
5492 error ("%qT is not an accessible base of %qT",
5493 BINFO_TYPE (cand->conversion_path),
5494 TREE_TYPE (argtype));
5495 /* If fn was found by a using declaration, the conversion path
5496 will be to the derived class, not the base declaring fn. We
5497 must convert from derived to base. */
5498 base_binfo = lookup_base (TREE_TYPE (TREE_TYPE (converted_arg)),
5499 TREE_TYPE (parmtype), ba_unique, NULL);
5500 converted_arg = build_base_path (PLUS_EXPR, converted_arg,
5501 base_binfo, 1);
5503 argarray[j++] = converted_arg;
5504 parm = TREE_CHAIN (parm);
5505 if (first_arg != NULL_TREE)
5506 first_arg = NULL_TREE;
5507 else
5508 ++arg_index;
5509 ++i;
5510 is_method = 1;
5513 gcc_assert (first_arg == NULL_TREE);
5514 for (; arg_index < VEC_length (tree, args) && parm;
5515 parm = TREE_CHAIN (parm), ++arg_index, ++i)
5517 tree type = TREE_VALUE (parm);
5519 conv = convs[i];
5521 /* Don't make a copy here if build_call is going to. */
5522 if (conv->kind == ck_rvalue
5523 && COMPLETE_TYPE_P (complete_type (type))
5524 && !TREE_ADDRESSABLE (type))
5525 conv = conv->u.next;
5527 val = convert_like_with_context
5528 (conv, VEC_index (tree, args, arg_index), fn, i - is_method,
5529 complain);
5531 val = convert_for_arg_passing (type, val);
5532 if (val == error_mark_node)
5533 return error_mark_node;
5534 else
5535 argarray[j++] = val;
5538 /* Default arguments */
5539 for (; parm && parm != void_list_node; parm = TREE_CHAIN (parm), i++)
5540 argarray[j++] = convert_default_arg (TREE_VALUE (parm),
5541 TREE_PURPOSE (parm),
5542 fn, i - is_method);
5543 /* Ellipsis */
5544 for (; arg_index < VEC_length (tree, args); ++arg_index)
5546 tree a = VEC_index (tree, args, arg_index);
5547 if (magic_varargs_p (fn))
5548 /* Do no conversions for magic varargs. */;
5549 else
5550 a = convert_arg_to_ellipsis (a);
5551 argarray[j++] = a;
5554 gcc_assert (j <= nargs);
5555 nargs = j;
5557 check_function_arguments (TYPE_ATTRIBUTES (TREE_TYPE (fn)),
5558 nargs, argarray, TYPE_ARG_TYPES (TREE_TYPE (fn)));
5560 /* Avoid actually calling copy constructors and copy assignment operators,
5561 if possible. */
5563 if (! flag_elide_constructors)
5564 /* Do things the hard way. */;
5565 else if (cand->num_convs == 1
5566 && (DECL_COPY_CONSTRUCTOR_P (fn)
5567 || DECL_MOVE_CONSTRUCTOR_P (fn)))
5569 tree targ;
5570 tree arg = argarray[num_artificial_parms_for (fn)];
5571 tree fa;
5573 /* Pull out the real argument, disregarding const-correctness. */
5574 targ = arg;
5575 while (CONVERT_EXPR_P (targ)
5576 || TREE_CODE (targ) == NON_LVALUE_EXPR)
5577 targ = TREE_OPERAND (targ, 0);
5578 if (TREE_CODE (targ) == ADDR_EXPR)
5580 targ = TREE_OPERAND (targ, 0);
5581 if (!same_type_ignoring_top_level_qualifiers_p
5582 (TREE_TYPE (TREE_TYPE (arg)), TREE_TYPE (targ)))
5583 targ = NULL_TREE;
5585 else
5586 targ = NULL_TREE;
5588 if (targ)
5589 arg = targ;
5590 else
5591 arg = cp_build_indirect_ref (arg, 0, complain);
5593 if (TREE_CODE (arg) == TARGET_EXPR
5594 && TARGET_EXPR_LIST_INIT_P (arg))
5596 /* Copy-list-initialization doesn't require the copy constructor
5597 to be defined. */
5599 /* [class.copy]: the copy constructor is implicitly defined even if
5600 the implementation elided its use. */
5601 else if (TYPE_HAS_COMPLEX_INIT_REF (DECL_CONTEXT (fn)))
5603 mark_used (fn);
5604 already_used = true;
5607 /* If we're creating a temp and we already have one, don't create a
5608 new one. If we're not creating a temp but we get one, use
5609 INIT_EXPR to collapse the temp into our target. Otherwise, if the
5610 ctor is trivial, do a bitwise copy with a simple TARGET_EXPR for a
5611 temp or an INIT_EXPR otherwise. */
5612 fa = (cand->first_arg != NULL_TREE
5613 ? cand->first_arg
5614 : VEC_index (tree, args, 0));
5615 if (integer_zerop (fa))
5617 if (TREE_CODE (arg) == TARGET_EXPR)
5618 return arg;
5619 else if (TYPE_HAS_TRIVIAL_INIT_REF (DECL_CONTEXT (fn)))
5620 return build_target_expr_with_type (arg, DECL_CONTEXT (fn));
5622 else if (TREE_CODE (arg) == TARGET_EXPR
5623 || (TYPE_HAS_TRIVIAL_INIT_REF (DECL_CONTEXT (fn))
5624 && !move_fn_p (fn)))
5626 tree to = stabilize_reference (cp_build_indirect_ref (fa, 0,
5627 complain));
5629 val = build2 (INIT_EXPR, DECL_CONTEXT (fn), to, arg);
5630 return val;
5633 else if (DECL_OVERLOADED_OPERATOR_P (fn) == NOP_EXPR
5634 && copy_fn_p (fn)
5635 && TYPE_HAS_TRIVIAL_ASSIGN_REF (DECL_CONTEXT (fn)))
5637 tree to = stabilize_reference
5638 (cp_build_indirect_ref (argarray[0], 0, complain));
5639 tree type = TREE_TYPE (to);
5640 tree as_base = CLASSTYPE_AS_BASE (type);
5641 tree arg = argarray[1];
5643 if (tree_int_cst_equal (TYPE_SIZE (type), TYPE_SIZE (as_base)))
5645 arg = cp_build_indirect_ref (arg, 0, complain);
5646 val = build2 (MODIFY_EXPR, TREE_TYPE (to), to, arg);
5648 else
5650 /* We must only copy the non-tail padding parts.
5651 Use __builtin_memcpy for the bitwise copy.
5652 FIXME fix 22488 so we can go back to using MODIFY_EXPR
5653 instead of an explicit call to memcpy. */
5655 tree arg0, arg1, arg2, t;
5656 tree test = NULL_TREE;
5658 arg2 = TYPE_SIZE_UNIT (as_base);
5659 arg1 = arg;
5660 arg0 = cp_build_unary_op (ADDR_EXPR, to, 0, complain);
5662 if (!can_trust_pointer_alignment ())
5664 /* If we can't be sure about pointer alignment, a call
5665 to __builtin_memcpy is expanded as a call to memcpy, which
5666 is invalid with identical args. Otherwise it is
5667 expanded as a block move, which should be safe. */
5668 arg0 = save_expr (arg0);
5669 arg1 = save_expr (arg1);
5670 test = build2 (EQ_EXPR, boolean_type_node, arg0, arg1);
5672 t = implicit_built_in_decls[BUILT_IN_MEMCPY];
5673 t = build_call_n (t, 3, arg0, arg1, arg2);
5675 t = convert (TREE_TYPE (arg0), t);
5676 if (test)
5677 t = build3 (COND_EXPR, TREE_TYPE (t), test, arg0, t);
5678 val = cp_build_indirect_ref (t, 0, complain);
5679 TREE_NO_WARNING (val) = 1;
5682 return val;
5685 if (!already_used)
5686 mark_used (fn);
5688 if (DECL_VINDEX (fn) && (flags & LOOKUP_NONVIRTUAL) == 0)
5690 tree t;
5691 tree binfo = lookup_base (TREE_TYPE (TREE_TYPE (argarray[0])),
5692 DECL_CONTEXT (fn),
5693 ba_any, NULL);
5694 gcc_assert (binfo && binfo != error_mark_node);
5696 /* Warn about deprecated virtual functions now, since we're about
5697 to throw away the decl. */
5698 if (TREE_DEPRECATED (fn))
5699 warn_deprecated_use (fn, NULL_TREE);
5701 argarray[0] = build_base_path (PLUS_EXPR, argarray[0], binfo, 1);
5702 if (TREE_SIDE_EFFECTS (argarray[0]))
5703 argarray[0] = save_expr (argarray[0]);
5704 t = build_pointer_type (TREE_TYPE (fn));
5705 if (DECL_CONTEXT (fn) && TYPE_JAVA_INTERFACE (DECL_CONTEXT (fn)))
5706 fn = build_java_interface_fn_ref (fn, argarray[0]);
5707 else
5708 fn = build_vfn_ref (argarray[0], DECL_VINDEX (fn));
5709 TREE_TYPE (fn) = t;
5711 else
5712 fn = build_addr_func (fn);
5714 return build_cxx_call (fn, nargs, argarray);
5717 /* Build and return a call to FN, using NARGS arguments in ARGARRAY.
5718 This function performs no overload resolution, conversion, or other
5719 high-level operations. */
5721 tree
5722 build_cxx_call (tree fn, int nargs, tree *argarray)
5724 tree fndecl;
5726 fn = build_call_a (fn, nargs, argarray);
5728 /* If this call might throw an exception, note that fact. */
5729 fndecl = get_callee_fndecl (fn);
5730 if ((!fndecl || !TREE_NOTHROW (fndecl))
5731 && at_function_scope_p ()
5732 && cfun)
5733 cp_function_chain->can_throw = 1;
5735 /* Check that arguments to builtin functions match the expectations. */
5736 if (fndecl
5737 && DECL_BUILT_IN (fndecl)
5738 && DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_NORMAL
5739 && !check_builtin_function_arguments (fndecl, nargs, argarray))
5740 return error_mark_node;
5742 /* Some built-in function calls will be evaluated at compile-time in
5743 fold (). */
5744 fn = fold_if_not_in_template (fn);
5746 if (VOID_TYPE_P (TREE_TYPE (fn)))
5747 return fn;
5749 fn = require_complete_type (fn);
5750 if (fn == error_mark_node)
5751 return error_mark_node;
5753 if (MAYBE_CLASS_TYPE_P (TREE_TYPE (fn)))
5754 fn = build_cplus_new (TREE_TYPE (fn), fn);
5755 return convert_from_reference (fn);
5758 static GTY(()) tree java_iface_lookup_fn;
5760 /* Make an expression which yields the address of the Java interface
5761 method FN. This is achieved by generating a call to libjava's
5762 _Jv_LookupInterfaceMethodIdx(). */
5764 static tree
5765 build_java_interface_fn_ref (tree fn, tree instance)
5767 tree lookup_fn, method, idx;
5768 tree klass_ref, iface, iface_ref;
5769 int i;
5771 if (!java_iface_lookup_fn)
5773 tree endlink = build_void_list_node ();
5774 tree t = tree_cons (NULL_TREE, ptr_type_node,
5775 tree_cons (NULL_TREE, ptr_type_node,
5776 tree_cons (NULL_TREE, java_int_type_node,
5777 endlink)));
5778 java_iface_lookup_fn
5779 = add_builtin_function ("_Jv_LookupInterfaceMethodIdx",
5780 build_function_type (ptr_type_node, t),
5781 0, NOT_BUILT_IN, NULL, NULL_TREE);
5784 /* Look up the pointer to the runtime java.lang.Class object for `instance'.
5785 This is the first entry in the vtable. */
5786 klass_ref = build_vtbl_ref (cp_build_indirect_ref (instance, 0,
5787 tf_warning_or_error),
5788 integer_zero_node);
5790 /* Get the java.lang.Class pointer for the interface being called. */
5791 iface = DECL_CONTEXT (fn);
5792 iface_ref = lookup_field (iface, get_identifier ("class$"), 0, false);
5793 if (!iface_ref || TREE_CODE (iface_ref) != VAR_DECL
5794 || DECL_CONTEXT (iface_ref) != iface)
5796 error ("could not find class$ field in java interface type %qT",
5797 iface);
5798 return error_mark_node;
5800 iface_ref = build_address (iface_ref);
5801 iface_ref = convert (build_pointer_type (iface), iface_ref);
5803 /* Determine the itable index of FN. */
5804 i = 1;
5805 for (method = TYPE_METHODS (iface); method; method = TREE_CHAIN (method))
5807 if (!DECL_VIRTUAL_P (method))
5808 continue;
5809 if (fn == method)
5810 break;
5811 i++;
5813 idx = build_int_cst (NULL_TREE, i);
5815 lookup_fn = build1 (ADDR_EXPR,
5816 build_pointer_type (TREE_TYPE (java_iface_lookup_fn)),
5817 java_iface_lookup_fn);
5818 return build_call_nary (ptr_type_node, lookup_fn,
5819 3, klass_ref, iface_ref, idx);
5822 /* Returns the value to use for the in-charge parameter when making a
5823 call to a function with the indicated NAME.
5825 FIXME:Can't we find a neater way to do this mapping? */
5827 tree
5828 in_charge_arg_for_name (tree name)
5830 if (name == base_ctor_identifier
5831 || name == base_dtor_identifier)
5832 return integer_zero_node;
5833 else if (name == complete_ctor_identifier)
5834 return integer_one_node;
5835 else if (name == complete_dtor_identifier)
5836 return integer_two_node;
5837 else if (name == deleting_dtor_identifier)
5838 return integer_three_node;
5840 /* This function should only be called with one of the names listed
5841 above. */
5842 gcc_unreachable ();
5843 return NULL_TREE;
5846 /* Build a call to a constructor, destructor, or an assignment
5847 operator for INSTANCE, an expression with class type. NAME
5848 indicates the special member function to call; *ARGS are the
5849 arguments. ARGS may be NULL. This may change ARGS. BINFO
5850 indicates the base of INSTANCE that is to be passed as the `this'
5851 parameter to the member function called.
5853 FLAGS are the LOOKUP_* flags to use when processing the call.
5855 If NAME indicates a complete object constructor, INSTANCE may be
5856 NULL_TREE. In this case, the caller will call build_cplus_new to
5857 store the newly constructed object into a VAR_DECL. */
5859 tree
5860 build_special_member_call (tree instance, tree name, VEC(tree,gc) **args,
5861 tree binfo, int flags, tsubst_flags_t complain)
5863 tree fns;
5864 /* The type of the subobject to be constructed or destroyed. */
5865 tree class_type;
5866 VEC(tree,gc) *allocated = NULL;
5867 tree ret;
5869 gcc_assert (name == complete_ctor_identifier
5870 || name == base_ctor_identifier
5871 || name == complete_dtor_identifier
5872 || name == base_dtor_identifier
5873 || name == deleting_dtor_identifier
5874 || name == ansi_assopname (NOP_EXPR));
5875 if (TYPE_P (binfo))
5877 /* Resolve the name. */
5878 if (!complete_type_or_else (binfo, NULL_TREE))
5879 return error_mark_node;
5881 binfo = TYPE_BINFO (binfo);
5884 gcc_assert (binfo != NULL_TREE);
5886 class_type = BINFO_TYPE (binfo);
5888 /* Handle the special case where INSTANCE is NULL_TREE. */
5889 if (name == complete_ctor_identifier && !instance)
5891 instance = build_int_cst (build_pointer_type (class_type), 0);
5892 instance = build1 (INDIRECT_REF, class_type, instance);
5894 else
5896 if (name == complete_dtor_identifier
5897 || name == base_dtor_identifier
5898 || name == deleting_dtor_identifier)
5899 gcc_assert (args == NULL || VEC_empty (tree, *args));
5901 /* Convert to the base class, if necessary. */
5902 if (!same_type_ignoring_top_level_qualifiers_p
5903 (TREE_TYPE (instance), BINFO_TYPE (binfo)))
5905 if (name != ansi_assopname (NOP_EXPR))
5906 /* For constructors and destructors, either the base is
5907 non-virtual, or it is virtual but we are doing the
5908 conversion from a constructor or destructor for the
5909 complete object. In either case, we can convert
5910 statically. */
5911 instance = convert_to_base_statically (instance, binfo);
5912 else
5913 /* However, for assignment operators, we must convert
5914 dynamically if the base is virtual. */
5915 instance = build_base_path (PLUS_EXPR, instance,
5916 binfo, /*nonnull=*/1);
5920 gcc_assert (instance != NULL_TREE);
5922 fns = lookup_fnfields (binfo, name, 1);
5924 /* When making a call to a constructor or destructor for a subobject
5925 that uses virtual base classes, pass down a pointer to a VTT for
5926 the subobject. */
5927 if ((name == base_ctor_identifier
5928 || name == base_dtor_identifier)
5929 && CLASSTYPE_VBASECLASSES (class_type))
5931 tree vtt;
5932 tree sub_vtt;
5934 /* If the current function is a complete object constructor
5935 or destructor, then we fetch the VTT directly.
5936 Otherwise, we look it up using the VTT we were given. */
5937 vtt = TREE_CHAIN (CLASSTYPE_VTABLES (current_class_type));
5938 vtt = decay_conversion (vtt);
5939 vtt = build3 (COND_EXPR, TREE_TYPE (vtt),
5940 build2 (EQ_EXPR, boolean_type_node,
5941 current_in_charge_parm, integer_zero_node),
5942 current_vtt_parm,
5943 vtt);
5944 gcc_assert (BINFO_SUBVTT_INDEX (binfo));
5945 sub_vtt = build2 (POINTER_PLUS_EXPR, TREE_TYPE (vtt), vtt,
5946 BINFO_SUBVTT_INDEX (binfo));
5948 if (args == NULL)
5950 allocated = make_tree_vector ();
5951 args = &allocated;
5954 VEC_safe_insert (tree, gc, *args, 0, sub_vtt);
5957 ret = build_new_method_call (instance, fns, args,
5958 TYPE_BINFO (BINFO_TYPE (binfo)),
5959 flags, /*fn=*/NULL,
5960 complain);
5962 if (allocated != NULL)
5963 release_tree_vector (allocated);
5965 return ret;
5968 /* Return the NAME, as a C string. The NAME indicates a function that
5969 is a member of TYPE. *FREE_P is set to true if the caller must
5970 free the memory returned.
5972 Rather than go through all of this, we should simply set the names
5973 of constructors and destructors appropriately, and dispense with
5974 ctor_identifier, dtor_identifier, etc. */
5976 static char *
5977 name_as_c_string (tree name, tree type, bool *free_p)
5979 char *pretty_name;
5981 /* Assume that we will not allocate memory. */
5982 *free_p = false;
5983 /* Constructors and destructors are special. */
5984 if (IDENTIFIER_CTOR_OR_DTOR_P (name))
5986 pretty_name
5987 = CONST_CAST (char *, identifier_to_locale (IDENTIFIER_POINTER (constructor_name (type))));
5988 /* For a destructor, add the '~'. */
5989 if (name == complete_dtor_identifier
5990 || name == base_dtor_identifier
5991 || name == deleting_dtor_identifier)
5993 pretty_name = concat ("~", pretty_name, NULL);
5994 /* Remember that we need to free the memory allocated. */
5995 *free_p = true;
5998 else if (IDENTIFIER_TYPENAME_P (name))
6000 pretty_name = concat ("operator ",
6001 type_as_string_translate (TREE_TYPE (name),
6002 TFF_PLAIN_IDENTIFIER),
6003 NULL);
6004 /* Remember that we need to free the memory allocated. */
6005 *free_p = true;
6007 else
6008 pretty_name = CONST_CAST (char *, identifier_to_locale (IDENTIFIER_POINTER (name)));
6010 return pretty_name;
6013 /* Build a call to "INSTANCE.FN (ARGS)". If FN_P is non-NULL, it will
6014 be set, upon return, to the function called. ARGS may be NULL.
6015 This may change ARGS. */
6017 tree
6018 build_new_method_call (tree instance, tree fns, VEC(tree,gc) **args,
6019 tree conversion_path, int flags,
6020 tree *fn_p, tsubst_flags_t complain)
6022 struct z_candidate *candidates = 0, *cand;
6023 tree explicit_targs = NULL_TREE;
6024 tree basetype = NULL_TREE;
6025 tree access_binfo;
6026 tree optype;
6027 tree first_mem_arg = NULL_TREE;
6028 tree instance_ptr;
6029 tree name;
6030 bool skip_first_for_error;
6031 VEC(tree,gc) *user_args;
6032 tree call;
6033 tree fn;
6034 tree class_type;
6035 int template_only = 0;
6036 bool any_viable_p;
6037 tree orig_instance;
6038 tree orig_fns;
6039 VEC(tree,gc) *orig_args = NULL;
6040 void *p;
6042 gcc_assert (instance != NULL_TREE);
6044 /* We don't know what function we're going to call, yet. */
6045 if (fn_p)
6046 *fn_p = NULL_TREE;
6048 if (error_operand_p (instance)
6049 || error_operand_p (fns))
6050 return error_mark_node;
6052 if (!BASELINK_P (fns))
6054 if (complain & tf_error)
6055 error ("call to non-function %qD", fns);
6056 return error_mark_node;
6059 orig_instance = instance;
6060 orig_fns = fns;
6062 /* Dismantle the baselink to collect all the information we need. */
6063 if (!conversion_path)
6064 conversion_path = BASELINK_BINFO (fns);
6065 access_binfo = BASELINK_ACCESS_BINFO (fns);
6066 optype = BASELINK_OPTYPE (fns);
6067 fns = BASELINK_FUNCTIONS (fns);
6068 if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
6070 explicit_targs = TREE_OPERAND (fns, 1);
6071 fns = TREE_OPERAND (fns, 0);
6072 template_only = 1;
6074 gcc_assert (TREE_CODE (fns) == FUNCTION_DECL
6075 || TREE_CODE (fns) == TEMPLATE_DECL
6076 || TREE_CODE (fns) == OVERLOAD);
6077 fn = get_first_fn (fns);
6078 name = DECL_NAME (fn);
6080 basetype = TYPE_MAIN_VARIANT (TREE_TYPE (instance));
6081 gcc_assert (CLASS_TYPE_P (basetype));
6083 if (processing_template_decl)
6085 orig_args = args == NULL ? NULL : make_tree_vector_copy (*args);
6086 instance = build_non_dependent_expr (instance);
6087 if (args != NULL)
6088 make_args_non_dependent (*args);
6091 /* Figure out whether to skip the first argument for the error
6092 message we will display to users if an error occurs. We don't
6093 want to display any compiler-generated arguments. The "this"
6094 pointer hasn't been added yet. However, we must remove the VTT
6095 pointer if this is a call to a base-class constructor or
6096 destructor. */
6097 skip_first_for_error = false;
6098 user_args = args == NULL ? NULL : *args;
6099 if (IDENTIFIER_CTOR_OR_DTOR_P (name))
6101 /* Callers should explicitly indicate whether they want to construct
6102 the complete object or just the part without virtual bases. */
6103 gcc_assert (name != ctor_identifier);
6104 /* Similarly for destructors. */
6105 gcc_assert (name != dtor_identifier);
6106 /* Remove the VTT pointer, if present. */
6107 if ((name == base_ctor_identifier || name == base_dtor_identifier)
6108 && CLASSTYPE_VBASECLASSES (basetype))
6109 skip_first_for_error = true;
6112 /* Process the argument list. */
6113 if (args != NULL && *args != NULL)
6115 *args = resolve_args (*args);
6116 if (*args == NULL)
6117 return error_mark_node;
6120 instance_ptr = build_this (instance);
6122 /* It's OK to call destructors and constructors on cv-qualified objects.
6123 Therefore, convert the INSTANCE_PTR to the unqualified type, if
6124 necessary. */
6125 if (DECL_DESTRUCTOR_P (fn)
6126 || DECL_CONSTRUCTOR_P (fn))
6128 tree type = build_pointer_type (basetype);
6129 if (!same_type_p (type, TREE_TYPE (instance_ptr)))
6130 instance_ptr = build_nop (type, instance_ptr);
6132 if (DECL_DESTRUCTOR_P (fn))
6133 name = complete_dtor_identifier;
6135 /* If CONSTRUCTOR_IS_DIRECT_INIT is set, this was a T{ } form
6136 initializer, not T({ }). If the type doesn't have a list ctor,
6137 break apart the list into separate ctor args. */
6138 if (DECL_CONSTRUCTOR_P (fn) && args != NULL && !VEC_empty (tree, *args)
6139 && BRACE_ENCLOSED_INITIALIZER_P (VEC_index (tree, *args, 0))
6140 && CONSTRUCTOR_IS_DIRECT_INIT (VEC_index (tree, *args, 0))
6141 && !TYPE_HAS_LIST_CTOR (basetype))
6143 gcc_assert (VEC_length (tree, *args) == 1);
6144 *args = ctor_to_vec (VEC_index (tree, *args, 0));
6147 class_type = (conversion_path ? BINFO_TYPE (conversion_path) : NULL_TREE);
6148 first_mem_arg = instance_ptr;
6150 /* Get the high-water mark for the CONVERSION_OBSTACK. */
6151 p = conversion_obstack_alloc (0);
6153 for (fn = fns; fn; fn = OVL_NEXT (fn))
6155 tree t = OVL_CURRENT (fn);
6156 tree this_first_arg;
6158 /* We can end up here for copy-init of same or base class. */
6159 if ((flags & LOOKUP_ONLYCONVERTING)
6160 && DECL_NONCONVERTING_P (t))
6161 continue;
6163 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (t))
6164 this_first_arg = first_mem_arg;
6165 else
6166 this_first_arg = NULL_TREE;
6168 if (TREE_CODE (t) == TEMPLATE_DECL)
6169 /* A member template. */
6170 add_template_candidate (&candidates, t,
6171 class_type,
6172 explicit_targs,
6173 this_first_arg,
6174 args == NULL ? NULL : *args,
6175 optype,
6176 access_binfo,
6177 conversion_path,
6178 flags,
6179 DEDUCE_CALL);
6180 else if (! template_only)
6181 add_function_candidate (&candidates, t,
6182 class_type,
6183 this_first_arg,
6184 args == NULL ? NULL : *args,
6185 access_binfo,
6186 conversion_path,
6187 flags);
6190 candidates = splice_viable (candidates, pedantic, &any_viable_p);
6191 if (!any_viable_p)
6193 if (complain & tf_error)
6195 if (!COMPLETE_TYPE_P (basetype))
6196 cxx_incomplete_type_error (instance_ptr, basetype);
6197 else
6199 char *pretty_name;
6200 bool free_p;
6201 tree arglist;
6203 pretty_name = name_as_c_string (name, basetype, &free_p);
6204 arglist = build_tree_list_vec (user_args);
6205 if (skip_first_for_error)
6206 arglist = TREE_CHAIN (arglist);
6207 error ("no matching function for call to %<%T::%s(%A)%#V%>",
6208 basetype, pretty_name, arglist,
6209 TREE_TYPE (TREE_TYPE (instance_ptr)));
6210 if (free_p)
6211 free (pretty_name);
6213 print_z_candidates (candidates);
6215 call = error_mark_node;
6217 else
6219 cand = tourney (candidates);
6220 if (cand == 0)
6222 char *pretty_name;
6223 bool free_p;
6224 tree arglist;
6226 if (complain & tf_error)
6228 pretty_name = name_as_c_string (name, basetype, &free_p);
6229 arglist = build_tree_list_vec (user_args);
6230 if (skip_first_for_error)
6231 arglist = TREE_CHAIN (arglist);
6232 error ("call of overloaded %<%s(%A)%> is ambiguous", pretty_name,
6233 arglist);
6234 print_z_candidates (candidates);
6235 if (free_p)
6236 free (pretty_name);
6238 call = error_mark_node;
6240 else
6242 fn = cand->fn;
6244 if (!(flags & LOOKUP_NONVIRTUAL)
6245 && DECL_PURE_VIRTUAL_P (fn)
6246 && instance == current_class_ref
6247 && (DECL_CONSTRUCTOR_P (current_function_decl)
6248 || DECL_DESTRUCTOR_P (current_function_decl))
6249 && (complain & tf_warning))
6250 /* This is not an error, it is runtime undefined
6251 behavior. */
6252 warning (0, (DECL_CONSTRUCTOR_P (current_function_decl) ?
6253 "abstract virtual %q#D called from constructor"
6254 : "abstract virtual %q#D called from destructor"),
6255 fn);
6257 if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE
6258 && is_dummy_object (instance_ptr))
6260 if (complain & tf_error)
6261 error ("cannot call member function %qD without object",
6262 fn);
6263 call = error_mark_node;
6265 else
6267 if (DECL_VINDEX (fn) && ! (flags & LOOKUP_NONVIRTUAL)
6268 && resolves_to_fixed_type_p (instance, 0))
6269 flags |= LOOKUP_NONVIRTUAL;
6270 /* Now we know what function is being called. */
6271 if (fn_p)
6272 *fn_p = fn;
6273 /* Build the actual CALL_EXPR. */
6274 call = build_over_call (cand, flags, complain);
6275 /* In an expression of the form `a->f()' where `f' turns
6276 out to be a static member function, `a' is
6277 none-the-less evaluated. */
6278 if (TREE_CODE (TREE_TYPE (fn)) != METHOD_TYPE
6279 && !is_dummy_object (instance_ptr)
6280 && TREE_SIDE_EFFECTS (instance_ptr))
6281 call = build2 (COMPOUND_EXPR, TREE_TYPE (call),
6282 instance_ptr, call);
6283 else if (call != error_mark_node
6284 && DECL_DESTRUCTOR_P (cand->fn)
6285 && !VOID_TYPE_P (TREE_TYPE (call)))
6286 /* An explicit call of the form "x->~X()" has type
6287 "void". However, on platforms where destructors
6288 return "this" (i.e., those where
6289 targetm.cxx.cdtor_returns_this is true), such calls
6290 will appear to have a return value of pointer type
6291 to the low-level call machinery. We do not want to
6292 change the low-level machinery, since we want to be
6293 able to optimize "delete f()" on such platforms as
6294 "operator delete(~X(f()))" (rather than generating
6295 "t = f(), ~X(t), operator delete (t)"). */
6296 call = build_nop (void_type_node, call);
6301 if (processing_template_decl && call != error_mark_node)
6303 bool cast_to_void = false;
6305 if (TREE_CODE (call) == COMPOUND_EXPR)
6306 call = TREE_OPERAND (call, 1);
6307 else if (TREE_CODE (call) == NOP_EXPR)
6309 cast_to_void = true;
6310 call = TREE_OPERAND (call, 0);
6312 if (TREE_CODE (call) == INDIRECT_REF)
6313 call = TREE_OPERAND (call, 0);
6314 call = (build_min_non_dep_call_vec
6315 (call,
6316 build_min (COMPONENT_REF, TREE_TYPE (CALL_EXPR_FN (call)),
6317 orig_instance, orig_fns, NULL_TREE),
6318 orig_args));
6319 call = convert_from_reference (call);
6320 if (cast_to_void)
6321 call = build_nop (void_type_node, call);
6324 /* Free all the conversions we allocated. */
6325 obstack_free (&conversion_obstack, p);
6327 if (orig_args != NULL)
6328 release_tree_vector (orig_args);
6330 return call;
6333 /* Returns true iff standard conversion sequence ICS1 is a proper
6334 subsequence of ICS2. */
6336 static bool
6337 is_subseq (conversion *ics1, conversion *ics2)
6339 /* We can assume that a conversion of the same code
6340 between the same types indicates a subsequence since we only get
6341 here if the types we are converting from are the same. */
6343 while (ics1->kind == ck_rvalue
6344 || ics1->kind == ck_lvalue)
6345 ics1 = ics1->u.next;
6347 while (1)
6349 while (ics2->kind == ck_rvalue
6350 || ics2->kind == ck_lvalue)
6351 ics2 = ics2->u.next;
6353 if (ics2->kind == ck_user
6354 || ics2->kind == ck_ambig
6355 || ics2->kind == ck_identity)
6356 /* At this point, ICS1 cannot be a proper subsequence of
6357 ICS2. We can get a USER_CONV when we are comparing the
6358 second standard conversion sequence of two user conversion
6359 sequences. */
6360 return false;
6362 ics2 = ics2->u.next;
6364 if (ics2->kind == ics1->kind
6365 && same_type_p (ics2->type, ics1->type)
6366 && same_type_p (ics2->u.next->type,
6367 ics1->u.next->type))
6368 return true;
6372 /* Returns nonzero iff DERIVED is derived from BASE. The inputs may
6373 be any _TYPE nodes. */
6375 bool
6376 is_properly_derived_from (tree derived, tree base)
6378 if (!CLASS_TYPE_P (derived) || !CLASS_TYPE_P (base))
6379 return false;
6381 /* We only allow proper derivation here. The DERIVED_FROM_P macro
6382 considers every class derived from itself. */
6383 return (!same_type_ignoring_top_level_qualifiers_p (derived, base)
6384 && DERIVED_FROM_P (base, derived));
6387 /* We build the ICS for an implicit object parameter as a pointer
6388 conversion sequence. However, such a sequence should be compared
6389 as if it were a reference conversion sequence. If ICS is the
6390 implicit conversion sequence for an implicit object parameter,
6391 modify it accordingly. */
6393 static void
6394 maybe_handle_implicit_object (conversion **ics)
6396 if ((*ics)->this_p)
6398 /* [over.match.funcs]
6400 For non-static member functions, the type of the
6401 implicit object parameter is "reference to cv X"
6402 where X is the class of which the function is a
6403 member and cv is the cv-qualification on the member
6404 function declaration. */
6405 conversion *t = *ics;
6406 tree reference_type;
6408 /* The `this' parameter is a pointer to a class type. Make the
6409 implicit conversion talk about a reference to that same class
6410 type. */
6411 reference_type = TREE_TYPE (t->type);
6412 reference_type = build_reference_type (reference_type);
6414 if (t->kind == ck_qual)
6415 t = t->u.next;
6416 if (t->kind == ck_ptr)
6417 t = t->u.next;
6418 t = build_identity_conv (TREE_TYPE (t->type), NULL_TREE);
6419 t = direct_reference_binding (reference_type, t);
6420 t->this_p = 1;
6421 t->rvaluedness_matches_p = 0;
6422 *ics = t;
6426 /* If *ICS is a REF_BIND set *ICS to the remainder of the conversion,
6427 and return the initial reference binding conversion. Otherwise,
6428 leave *ICS unchanged and return NULL. */
6430 static conversion *
6431 maybe_handle_ref_bind (conversion **ics)
6433 if ((*ics)->kind == ck_ref_bind)
6435 conversion *old_ics = *ics;
6436 *ics = old_ics->u.next;
6437 (*ics)->user_conv_p = old_ics->user_conv_p;
6438 (*ics)->bad_p = old_ics->bad_p;
6439 return old_ics;
6442 return NULL;
6445 /* Compare two implicit conversion sequences according to the rules set out in
6446 [over.ics.rank]. Return values:
6448 1: ics1 is better than ics2
6449 -1: ics2 is better than ics1
6450 0: ics1 and ics2 are indistinguishable */
6452 static int
6453 compare_ics (conversion *ics1, conversion *ics2)
6455 tree from_type1;
6456 tree from_type2;
6457 tree to_type1;
6458 tree to_type2;
6459 tree deref_from_type1 = NULL_TREE;
6460 tree deref_from_type2 = NULL_TREE;
6461 tree deref_to_type1 = NULL_TREE;
6462 tree deref_to_type2 = NULL_TREE;
6463 conversion_rank rank1, rank2;
6465 /* REF_BINDING is nonzero if the result of the conversion sequence
6466 is a reference type. In that case REF_CONV is the reference
6467 binding conversion. */
6468 conversion *ref_conv1;
6469 conversion *ref_conv2;
6471 /* Handle implicit object parameters. */
6472 maybe_handle_implicit_object (&ics1);
6473 maybe_handle_implicit_object (&ics2);
6475 /* Handle reference parameters. */
6476 ref_conv1 = maybe_handle_ref_bind (&ics1);
6477 ref_conv2 = maybe_handle_ref_bind (&ics2);
6479 /* [over.ics.rank]
6481 When comparing the basic forms of implicit conversion sequences (as
6482 defined in _over.best.ics_)
6484 --a standard conversion sequence (_over.ics.scs_) is a better
6485 conversion sequence than a user-defined conversion sequence
6486 or an ellipsis conversion sequence, and
6488 --a user-defined conversion sequence (_over.ics.user_) is a
6489 better conversion sequence than an ellipsis conversion sequence
6490 (_over.ics.ellipsis_). */
6491 rank1 = CONVERSION_RANK (ics1);
6492 rank2 = CONVERSION_RANK (ics2);
6494 if (rank1 > rank2)
6495 return -1;
6496 else if (rank1 < rank2)
6497 return 1;
6499 if (rank1 == cr_bad)
6501 /* XXX Isn't this an extension? */
6502 /* Both ICS are bad. We try to make a decision based on what
6503 would have happened if they'd been good. */
6504 if (ics1->user_conv_p > ics2->user_conv_p
6505 || ics1->rank > ics2->rank)
6506 return -1;
6507 else if (ics1->user_conv_p < ics2->user_conv_p
6508 || ics1->rank < ics2->rank)
6509 return 1;
6511 /* We couldn't make up our minds; try to figure it out below. */
6514 if (ics1->ellipsis_p)
6515 /* Both conversions are ellipsis conversions. */
6516 return 0;
6518 /* User-defined conversion sequence U1 is a better conversion sequence
6519 than another user-defined conversion sequence U2 if they contain the
6520 same user-defined conversion operator or constructor and if the sec-
6521 ond standard conversion sequence of U1 is better than the second
6522 standard conversion sequence of U2. */
6524 if (ics1->user_conv_p)
6526 conversion *t1;
6527 conversion *t2;
6529 for (t1 = ics1; t1->kind != ck_user && t1->kind != ck_list; t1 = t1->u.next)
6530 if (t1->kind == ck_ambig || t1->kind == ck_aggr)
6531 return 0;
6532 for (t2 = ics2; t2->kind != ck_user && t2->kind != ck_list; t2 = t2->u.next)
6533 if (t2->kind == ck_ambig || t2->kind == ck_aggr)
6534 return 0;
6536 /* Conversion to std::initializer_list is better than other
6537 user-defined conversions. */
6538 if (t1->kind == ck_list
6539 || t2->kind == ck_list)
6541 if (t2->kind != ck_list)
6542 return 1;
6543 else if (t1->kind != ck_list)
6544 return -1;
6545 else
6546 return 0;
6549 if (t1->cand->fn != t2->cand->fn)
6550 return 0;
6552 /* We can just fall through here, after setting up
6553 FROM_TYPE1 and FROM_TYPE2. */
6554 from_type1 = t1->type;
6555 from_type2 = t2->type;
6557 else
6559 conversion *t1;
6560 conversion *t2;
6562 /* We're dealing with two standard conversion sequences.
6564 [over.ics.rank]
6566 Standard conversion sequence S1 is a better conversion
6567 sequence than standard conversion sequence S2 if
6569 --S1 is a proper subsequence of S2 (comparing the conversion
6570 sequences in the canonical form defined by _over.ics.scs_,
6571 excluding any Lvalue Transformation; the identity
6572 conversion sequence is considered to be a subsequence of
6573 any non-identity conversion sequence */
6575 t1 = ics1;
6576 while (t1->kind != ck_identity)
6577 t1 = t1->u.next;
6578 from_type1 = t1->type;
6580 t2 = ics2;
6581 while (t2->kind != ck_identity)
6582 t2 = t2->u.next;
6583 from_type2 = t2->type;
6586 /* One sequence can only be a subsequence of the other if they start with
6587 the same type. They can start with different types when comparing the
6588 second standard conversion sequence in two user-defined conversion
6589 sequences. */
6590 if (same_type_p (from_type1, from_type2))
6592 if (is_subseq (ics1, ics2))
6593 return 1;
6594 if (is_subseq (ics2, ics1))
6595 return -1;
6598 /* [over.ics.rank]
6600 Or, if not that,
6602 --the rank of S1 is better than the rank of S2 (by the rules
6603 defined below):
6605 Standard conversion sequences are ordered by their ranks: an Exact
6606 Match is a better conversion than a Promotion, which is a better
6607 conversion than a Conversion.
6609 Two conversion sequences with the same rank are indistinguishable
6610 unless one of the following rules applies:
6612 --A conversion that is not a conversion of a pointer, or pointer
6613 to member, to bool is better than another conversion that is such
6614 a conversion.
6616 The ICS_STD_RANK automatically handles the pointer-to-bool rule,
6617 so that we do not have to check it explicitly. */
6618 if (ics1->rank < ics2->rank)
6619 return 1;
6620 else if (ics2->rank < ics1->rank)
6621 return -1;
6623 to_type1 = ics1->type;
6624 to_type2 = ics2->type;
6626 /* A conversion from scalar arithmetic type to complex is worse than a
6627 conversion between scalar arithmetic types. */
6628 if (same_type_p (from_type1, from_type2)
6629 && ARITHMETIC_TYPE_P (from_type1)
6630 && ARITHMETIC_TYPE_P (to_type1)
6631 && ARITHMETIC_TYPE_P (to_type2)
6632 && ((TREE_CODE (to_type1) == COMPLEX_TYPE)
6633 != (TREE_CODE (to_type2) == COMPLEX_TYPE)))
6635 if (TREE_CODE (to_type1) == COMPLEX_TYPE)
6636 return -1;
6637 else
6638 return 1;
6641 if (TYPE_PTR_P (from_type1)
6642 && TYPE_PTR_P (from_type2)
6643 && TYPE_PTR_P (to_type1)
6644 && TYPE_PTR_P (to_type2))
6646 deref_from_type1 = TREE_TYPE (from_type1);
6647 deref_from_type2 = TREE_TYPE (from_type2);
6648 deref_to_type1 = TREE_TYPE (to_type1);
6649 deref_to_type2 = TREE_TYPE (to_type2);
6651 /* The rules for pointers to members A::* are just like the rules
6652 for pointers A*, except opposite: if B is derived from A then
6653 A::* converts to B::*, not vice versa. For that reason, we
6654 switch the from_ and to_ variables here. */
6655 else if ((TYPE_PTRMEM_P (from_type1) && TYPE_PTRMEM_P (from_type2)
6656 && TYPE_PTRMEM_P (to_type1) && TYPE_PTRMEM_P (to_type2))
6657 || (TYPE_PTRMEMFUNC_P (from_type1)
6658 && TYPE_PTRMEMFUNC_P (from_type2)
6659 && TYPE_PTRMEMFUNC_P (to_type1)
6660 && TYPE_PTRMEMFUNC_P (to_type2)))
6662 deref_to_type1 = TYPE_PTRMEM_CLASS_TYPE (from_type1);
6663 deref_to_type2 = TYPE_PTRMEM_CLASS_TYPE (from_type2);
6664 deref_from_type1 = TYPE_PTRMEM_CLASS_TYPE (to_type1);
6665 deref_from_type2 = TYPE_PTRMEM_CLASS_TYPE (to_type2);
6668 if (deref_from_type1 != NULL_TREE
6669 && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_from_type1))
6670 && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_from_type2)))
6672 /* This was one of the pointer or pointer-like conversions.
6674 [over.ics.rank]
6676 --If class B is derived directly or indirectly from class A,
6677 conversion of B* to A* is better than conversion of B* to
6678 void*, and conversion of A* to void* is better than
6679 conversion of B* to void*. */
6680 if (TREE_CODE (deref_to_type1) == VOID_TYPE
6681 && TREE_CODE (deref_to_type2) == VOID_TYPE)
6683 if (is_properly_derived_from (deref_from_type1,
6684 deref_from_type2))
6685 return -1;
6686 else if (is_properly_derived_from (deref_from_type2,
6687 deref_from_type1))
6688 return 1;
6690 else if (TREE_CODE (deref_to_type1) == VOID_TYPE
6691 || TREE_CODE (deref_to_type2) == VOID_TYPE)
6693 if (same_type_p (deref_from_type1, deref_from_type2))
6695 if (TREE_CODE (deref_to_type2) == VOID_TYPE)
6697 if (is_properly_derived_from (deref_from_type1,
6698 deref_to_type1))
6699 return 1;
6701 /* We know that DEREF_TO_TYPE1 is `void' here. */
6702 else if (is_properly_derived_from (deref_from_type1,
6703 deref_to_type2))
6704 return -1;
6707 else if (RECORD_OR_UNION_CODE_P (TREE_CODE (deref_to_type1))
6708 && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_to_type2)))
6710 /* [over.ics.rank]
6712 --If class B is derived directly or indirectly from class A
6713 and class C is derived directly or indirectly from B,
6715 --conversion of C* to B* is better than conversion of C* to
6718 --conversion of B* to A* is better than conversion of C* to
6719 A* */
6720 if (same_type_p (deref_from_type1, deref_from_type2))
6722 if (is_properly_derived_from (deref_to_type1,
6723 deref_to_type2))
6724 return 1;
6725 else if (is_properly_derived_from (deref_to_type2,
6726 deref_to_type1))
6727 return -1;
6729 else if (same_type_p (deref_to_type1, deref_to_type2))
6731 if (is_properly_derived_from (deref_from_type2,
6732 deref_from_type1))
6733 return 1;
6734 else if (is_properly_derived_from (deref_from_type1,
6735 deref_from_type2))
6736 return -1;
6740 else if (CLASS_TYPE_P (non_reference (from_type1))
6741 && same_type_p (from_type1, from_type2))
6743 tree from = non_reference (from_type1);
6745 /* [over.ics.rank]
6747 --binding of an expression of type C to a reference of type
6748 B& is better than binding an expression of type C to a
6749 reference of type A&
6751 --conversion of C to B is better than conversion of C to A, */
6752 if (is_properly_derived_from (from, to_type1)
6753 && is_properly_derived_from (from, to_type2))
6755 if (is_properly_derived_from (to_type1, to_type2))
6756 return 1;
6757 else if (is_properly_derived_from (to_type2, to_type1))
6758 return -1;
6761 else if (CLASS_TYPE_P (non_reference (to_type1))
6762 && same_type_p (to_type1, to_type2))
6764 tree to = non_reference (to_type1);
6766 /* [over.ics.rank]
6768 --binding of an expression of type B to a reference of type
6769 A& is better than binding an expression of type C to a
6770 reference of type A&,
6772 --conversion of B to A is better than conversion of C to A */
6773 if (is_properly_derived_from (from_type1, to)
6774 && is_properly_derived_from (from_type2, to))
6776 if (is_properly_derived_from (from_type2, from_type1))
6777 return 1;
6778 else if (is_properly_derived_from (from_type1, from_type2))
6779 return -1;
6783 /* [over.ics.rank]
6785 --S1 and S2 differ only in their qualification conversion and yield
6786 similar types T1 and T2 (_conv.qual_), respectively, and the cv-
6787 qualification signature of type T1 is a proper subset of the cv-
6788 qualification signature of type T2 */
6789 if (ics1->kind == ck_qual
6790 && ics2->kind == ck_qual
6791 && same_type_p (from_type1, from_type2))
6793 int result = comp_cv_qual_signature (to_type1, to_type2);
6794 if (result != 0)
6795 return result;
6798 /* [over.ics.rank]
6800 --S1 and S2 are reference bindings (_dcl.init.ref_) and neither refers
6801 to an implicit object parameter, and either S1 binds an lvalue reference
6802 to an lvalue and S2 binds an rvalue reference or S1 binds an rvalue
6803 reference to an rvalue and S2 binds an lvalue reference
6804 (C++0x draft standard, 13.3.3.2)
6806 --S1 and S2 are reference bindings (_dcl.init.ref_), and the
6807 types to which the references refer are the same type except for
6808 top-level cv-qualifiers, and the type to which the reference
6809 initialized by S2 refers is more cv-qualified than the type to
6810 which the reference initialized by S1 refers */
6812 if (ref_conv1 && ref_conv2)
6814 if (!ref_conv1->this_p && !ref_conv2->this_p
6815 && (TYPE_REF_IS_RVALUE (ref_conv1->type)
6816 != TYPE_REF_IS_RVALUE (ref_conv2->type)))
6818 if (ref_conv1->rvaluedness_matches_p)
6819 return 1;
6820 if (ref_conv2->rvaluedness_matches_p)
6821 return -1;
6824 if (same_type_ignoring_top_level_qualifiers_p (to_type1, to_type2))
6825 return comp_cv_qualification (TREE_TYPE (ref_conv2->type),
6826 TREE_TYPE (ref_conv1->type));
6829 /* Neither conversion sequence is better than the other. */
6830 return 0;
6833 /* The source type for this standard conversion sequence. */
6835 static tree
6836 source_type (conversion *t)
6838 for (;; t = t->u.next)
6840 if (t->kind == ck_user
6841 || t->kind == ck_ambig
6842 || t->kind == ck_identity)
6843 return t->type;
6845 gcc_unreachable ();
6848 /* Note a warning about preferring WINNER to LOSER. We do this by storing
6849 a pointer to LOSER and re-running joust to produce the warning if WINNER
6850 is actually used. */
6852 static void
6853 add_warning (struct z_candidate *winner, struct z_candidate *loser)
6855 candidate_warning *cw = (candidate_warning *)
6856 conversion_obstack_alloc (sizeof (candidate_warning));
6857 cw->loser = loser;
6858 cw->next = winner->warnings;
6859 winner->warnings = cw;
6862 /* Compare two candidates for overloading as described in
6863 [over.match.best]. Return values:
6865 1: cand1 is better than cand2
6866 -1: cand2 is better than cand1
6867 0: cand1 and cand2 are indistinguishable */
6869 static int
6870 joust (struct z_candidate *cand1, struct z_candidate *cand2, bool warn)
6872 int winner = 0;
6873 int off1 = 0, off2 = 0;
6874 size_t i;
6875 size_t len;
6877 /* Candidates that involve bad conversions are always worse than those
6878 that don't. */
6879 if (cand1->viable > cand2->viable)
6880 return 1;
6881 if (cand1->viable < cand2->viable)
6882 return -1;
6884 /* If we have two pseudo-candidates for conversions to the same type,
6885 or two candidates for the same function, arbitrarily pick one. */
6886 if (cand1->fn == cand2->fn
6887 && (IS_TYPE_OR_DECL_P (cand1->fn)))
6888 return 1;
6890 /* a viable function F1
6891 is defined to be a better function than another viable function F2 if
6892 for all arguments i, ICSi(F1) is not a worse conversion sequence than
6893 ICSi(F2), and then */
6895 /* for some argument j, ICSj(F1) is a better conversion sequence than
6896 ICSj(F2) */
6898 /* For comparing static and non-static member functions, we ignore
6899 the implicit object parameter of the non-static function. The
6900 standard says to pretend that the static function has an object
6901 parm, but that won't work with operator overloading. */
6902 len = cand1->num_convs;
6903 if (len != cand2->num_convs)
6905 int static_1 = DECL_STATIC_FUNCTION_P (cand1->fn);
6906 int static_2 = DECL_STATIC_FUNCTION_P (cand2->fn);
6908 gcc_assert (static_1 != static_2);
6910 if (static_1)
6911 off2 = 1;
6912 else
6914 off1 = 1;
6915 --len;
6919 for (i = 0; i < len; ++i)
6921 conversion *t1 = cand1->convs[i + off1];
6922 conversion *t2 = cand2->convs[i + off2];
6923 int comp = compare_ics (t1, t2);
6925 if (comp != 0)
6927 if (warn_sign_promo
6928 && (CONVERSION_RANK (t1) + CONVERSION_RANK (t2)
6929 == cr_std + cr_promotion)
6930 && t1->kind == ck_std
6931 && t2->kind == ck_std
6932 && TREE_CODE (t1->type) == INTEGER_TYPE
6933 && TREE_CODE (t2->type) == INTEGER_TYPE
6934 && (TYPE_PRECISION (t1->type)
6935 == TYPE_PRECISION (t2->type))
6936 && (TYPE_UNSIGNED (t1->u.next->type)
6937 || (TREE_CODE (t1->u.next->type)
6938 == ENUMERAL_TYPE)))
6940 tree type = t1->u.next->type;
6941 tree type1, type2;
6942 struct z_candidate *w, *l;
6943 if (comp > 0)
6944 type1 = t1->type, type2 = t2->type,
6945 w = cand1, l = cand2;
6946 else
6947 type1 = t2->type, type2 = t1->type,
6948 w = cand2, l = cand1;
6950 if (warn)
6952 warning (OPT_Wsign_promo, "passing %qT chooses %qT over %qT",
6953 type, type1, type2);
6954 warning (OPT_Wsign_promo, " in call to %qD", w->fn);
6956 else
6957 add_warning (w, l);
6960 if (winner && comp != winner)
6962 winner = 0;
6963 goto tweak;
6965 winner = comp;
6969 /* warn about confusing overload resolution for user-defined conversions,
6970 either between a constructor and a conversion op, or between two
6971 conversion ops. */
6972 if (winner && warn_conversion && cand1->second_conv
6973 && (!DECL_CONSTRUCTOR_P (cand1->fn) || !DECL_CONSTRUCTOR_P (cand2->fn))
6974 && winner != compare_ics (cand1->second_conv, cand2->second_conv))
6976 struct z_candidate *w, *l;
6977 bool give_warning = false;
6979 if (winner == 1)
6980 w = cand1, l = cand2;
6981 else
6982 w = cand2, l = cand1;
6984 /* We don't want to complain about `X::operator T1 ()'
6985 beating `X::operator T2 () const', when T2 is a no less
6986 cv-qualified version of T1. */
6987 if (DECL_CONTEXT (w->fn) == DECL_CONTEXT (l->fn)
6988 && !DECL_CONSTRUCTOR_P (w->fn) && !DECL_CONSTRUCTOR_P (l->fn))
6990 tree t = TREE_TYPE (TREE_TYPE (l->fn));
6991 tree f = TREE_TYPE (TREE_TYPE (w->fn));
6993 if (TREE_CODE (t) == TREE_CODE (f) && POINTER_TYPE_P (t))
6995 t = TREE_TYPE (t);
6996 f = TREE_TYPE (f);
6998 if (!comp_ptr_ttypes (t, f))
6999 give_warning = true;
7001 else
7002 give_warning = true;
7004 if (!give_warning)
7005 /*NOP*/;
7006 else if (warn)
7008 tree source = source_type (w->convs[0]);
7009 if (! DECL_CONSTRUCTOR_P (w->fn))
7010 source = TREE_TYPE (source);
7011 if (warning (OPT_Wconversion, "choosing %qD over %qD", w->fn, l->fn)
7012 && warning (OPT_Wconversion, " for conversion from %qT to %qT",
7013 source, w->second_conv->type))
7015 inform (input_location, " because conversion sequence for the argument is better");
7018 else
7019 add_warning (w, l);
7022 if (winner)
7023 return winner;
7025 /* or, if not that,
7026 F1 is a non-template function and F2 is a template function
7027 specialization. */
7029 if (!cand1->template_decl && cand2->template_decl)
7030 return 1;
7031 else if (cand1->template_decl && !cand2->template_decl)
7032 return -1;
7034 /* or, if not that,
7035 F1 and F2 are template functions and the function template for F1 is
7036 more specialized than the template for F2 according to the partial
7037 ordering rules. */
7039 if (cand1->template_decl && cand2->template_decl)
7041 winner = more_specialized_fn
7042 (TI_TEMPLATE (cand1->template_decl),
7043 TI_TEMPLATE (cand2->template_decl),
7044 /* [temp.func.order]: The presence of unused ellipsis and default
7045 arguments has no effect on the partial ordering of function
7046 templates. add_function_candidate() will not have
7047 counted the "this" argument for constructors. */
7048 cand1->num_convs + DECL_CONSTRUCTOR_P (cand1->fn));
7049 if (winner)
7050 return winner;
7053 /* or, if not that,
7054 the context is an initialization by user-defined conversion (see
7055 _dcl.init_ and _over.match.user_) and the standard conversion
7056 sequence from the return type of F1 to the destination type (i.e.,
7057 the type of the entity being initialized) is a better conversion
7058 sequence than the standard conversion sequence from the return type
7059 of F2 to the destination type. */
7061 if (cand1->second_conv)
7063 winner = compare_ics (cand1->second_conv, cand2->second_conv);
7064 if (winner)
7065 return winner;
7068 /* Check whether we can discard a builtin candidate, either because we
7069 have two identical ones or matching builtin and non-builtin candidates.
7071 (Pedantically in the latter case the builtin which matched the user
7072 function should not be added to the overload set, but we spot it here.
7074 [over.match.oper]
7075 ... the builtin candidates include ...
7076 - do not have the same parameter type list as any non-template
7077 non-member candidate. */
7079 if (TREE_CODE (cand1->fn) == IDENTIFIER_NODE
7080 || TREE_CODE (cand2->fn) == IDENTIFIER_NODE)
7082 for (i = 0; i < len; ++i)
7083 if (!same_type_p (cand1->convs[i]->type,
7084 cand2->convs[i]->type))
7085 break;
7086 if (i == cand1->num_convs)
7088 if (cand1->fn == cand2->fn)
7089 /* Two built-in candidates; arbitrarily pick one. */
7090 return 1;
7091 else if (TREE_CODE (cand1->fn) == IDENTIFIER_NODE)
7092 /* cand1 is built-in; prefer cand2. */
7093 return -1;
7094 else
7095 /* cand2 is built-in; prefer cand1. */
7096 return 1;
7100 /* If the two function declarations represent the same function (this can
7101 happen with declarations in multiple scopes and arg-dependent lookup),
7102 arbitrarily choose one. But first make sure the default args we're
7103 using match. */
7104 if (DECL_P (cand1->fn) && DECL_P (cand2->fn)
7105 && equal_functions (cand1->fn, cand2->fn))
7107 tree parms1 = TYPE_ARG_TYPES (TREE_TYPE (cand1->fn));
7108 tree parms2 = TYPE_ARG_TYPES (TREE_TYPE (cand2->fn));
7110 gcc_assert (!DECL_CONSTRUCTOR_P (cand1->fn));
7112 for (i = 0; i < len; ++i)
7114 /* Don't crash if the fn is variadic. */
7115 if (!parms1)
7116 break;
7117 parms1 = TREE_CHAIN (parms1);
7118 parms2 = TREE_CHAIN (parms2);
7121 if (off1)
7122 parms1 = TREE_CHAIN (parms1);
7123 else if (off2)
7124 parms2 = TREE_CHAIN (parms2);
7126 for (; parms1; ++i)
7128 if (!cp_tree_equal (TREE_PURPOSE (parms1),
7129 TREE_PURPOSE (parms2)))
7131 if (warn)
7133 permerror (input_location, "default argument mismatch in "
7134 "overload resolution");
7135 inform (input_location,
7136 " candidate 1: %q+#F", cand1->fn);
7137 inform (input_location,
7138 " candidate 2: %q+#F", cand2->fn);
7140 else
7141 add_warning (cand1, cand2);
7142 break;
7144 parms1 = TREE_CHAIN (parms1);
7145 parms2 = TREE_CHAIN (parms2);
7148 return 1;
7151 tweak:
7153 /* Extension: If the worst conversion for one candidate is worse than the
7154 worst conversion for the other, take the first. */
7155 if (!pedantic)
7157 conversion_rank rank1 = cr_identity, rank2 = cr_identity;
7158 struct z_candidate *w = 0, *l = 0;
7160 for (i = 0; i < len; ++i)
7162 if (CONVERSION_RANK (cand1->convs[i+off1]) > rank1)
7163 rank1 = CONVERSION_RANK (cand1->convs[i+off1]);
7164 if (CONVERSION_RANK (cand2->convs[i + off2]) > rank2)
7165 rank2 = CONVERSION_RANK (cand2->convs[i + off2]);
7167 if (rank1 < rank2)
7168 winner = 1, w = cand1, l = cand2;
7169 if (rank1 > rank2)
7170 winner = -1, w = cand2, l = cand1;
7171 if (winner)
7173 if (warn)
7175 pedwarn (input_location, 0,
7176 "ISO C++ says that these are ambiguous, even "
7177 "though the worst conversion for the first is better than "
7178 "the worst conversion for the second:");
7179 print_z_candidate (_("candidate 1:"), w);
7180 print_z_candidate (_("candidate 2:"), l);
7182 else
7183 add_warning (w, l);
7184 return winner;
7188 gcc_assert (!winner);
7189 return 0;
7192 /* Given a list of candidates for overloading, find the best one, if any.
7193 This algorithm has a worst case of O(2n) (winner is last), and a best
7194 case of O(n/2) (totally ambiguous); much better than a sorting
7195 algorithm. */
7197 static struct z_candidate *
7198 tourney (struct z_candidate *candidates)
7200 struct z_candidate *champ = candidates, *challenger;
7201 int fate;
7202 int champ_compared_to_predecessor = 0;
7204 /* Walk through the list once, comparing each current champ to the next
7205 candidate, knocking out a candidate or two with each comparison. */
7207 for (challenger = champ->next; challenger; )
7209 fate = joust (champ, challenger, 0);
7210 if (fate == 1)
7211 challenger = challenger->next;
7212 else
7214 if (fate == 0)
7216 champ = challenger->next;
7217 if (champ == 0)
7218 return NULL;
7219 champ_compared_to_predecessor = 0;
7221 else
7223 champ = challenger;
7224 champ_compared_to_predecessor = 1;
7227 challenger = champ->next;
7231 /* Make sure the champ is better than all the candidates it hasn't yet
7232 been compared to. */
7234 for (challenger = candidates;
7235 challenger != champ
7236 && !(champ_compared_to_predecessor && challenger->next == champ);
7237 challenger = challenger->next)
7239 fate = joust (champ, challenger, 0);
7240 if (fate != 1)
7241 return NULL;
7244 return champ;
7247 /* Returns nonzero if things of type FROM can be converted to TO. */
7249 bool
7250 can_convert (tree to, tree from)
7252 return can_convert_arg (to, from, NULL_TREE, LOOKUP_IMPLICIT);
7255 /* Returns nonzero if ARG (of type FROM) can be converted to TO. */
7257 bool
7258 can_convert_arg (tree to, tree from, tree arg, int flags)
7260 conversion *t;
7261 void *p;
7262 bool ok_p;
7264 /* Get the high-water mark for the CONVERSION_OBSTACK. */
7265 p = conversion_obstack_alloc (0);
7267 t = implicit_conversion (to, from, arg, /*c_cast_p=*/false,
7268 flags);
7269 ok_p = (t && !t->bad_p);
7271 /* Free all the conversions we allocated. */
7272 obstack_free (&conversion_obstack, p);
7274 return ok_p;
7277 /* Like can_convert_arg, but allows dubious conversions as well. */
7279 bool
7280 can_convert_arg_bad (tree to, tree from, tree arg, int flags)
7282 conversion *t;
7283 void *p;
7285 /* Get the high-water mark for the CONVERSION_OBSTACK. */
7286 p = conversion_obstack_alloc (0);
7287 /* Try to perform the conversion. */
7288 t = implicit_conversion (to, from, arg, /*c_cast_p=*/false,
7289 flags);
7290 /* Free all the conversions we allocated. */
7291 obstack_free (&conversion_obstack, p);
7293 return t != NULL;
7296 /* Convert EXPR to TYPE. Return the converted expression.
7298 Note that we allow bad conversions here because by the time we get to
7299 this point we are committed to doing the conversion. If we end up
7300 doing a bad conversion, convert_like will complain. */
7302 tree
7303 perform_implicit_conversion_flags (tree type, tree expr, tsubst_flags_t complain, int flags)
7305 conversion *conv;
7306 void *p;
7308 if (error_operand_p (expr))
7309 return error_mark_node;
7311 /* Get the high-water mark for the CONVERSION_OBSTACK. */
7312 p = conversion_obstack_alloc (0);
7314 conv = implicit_conversion (type, TREE_TYPE (expr), expr,
7315 /*c_cast_p=*/false,
7316 flags);
7318 if (!conv)
7320 if (complain & tf_error)
7322 /* If expr has unknown type, then it is an overloaded function.
7323 Call instantiate_type to get good error messages. */
7324 if (TREE_TYPE (expr) == unknown_type_node)
7325 instantiate_type (type, expr, complain);
7326 else if (invalid_nonstatic_memfn_p (expr, complain))
7327 /* We gave an error. */;
7328 else
7329 error ("could not convert %qE to %qT", expr, type);
7331 expr = error_mark_node;
7333 else if (processing_template_decl)
7335 /* In a template, we are only concerned about determining the
7336 type of non-dependent expressions, so we do not have to
7337 perform the actual conversion. */
7338 if (TREE_TYPE (expr) != type)
7339 expr = build_nop (type, expr);
7341 else
7342 expr = convert_like (conv, expr, complain);
7344 /* Free all the conversions we allocated. */
7345 obstack_free (&conversion_obstack, p);
7347 return expr;
7350 tree
7351 perform_implicit_conversion (tree type, tree expr, tsubst_flags_t complain)
7353 return perform_implicit_conversion_flags (type, expr, complain, LOOKUP_IMPLICIT);
7356 /* Convert EXPR to TYPE (as a direct-initialization) if that is
7357 permitted. If the conversion is valid, the converted expression is
7358 returned. Otherwise, NULL_TREE is returned, except in the case
7359 that TYPE is a class type; in that case, an error is issued. If
7360 C_CAST_P is true, then this direction initialization is taking
7361 place as part of a static_cast being attempted as part of a C-style
7362 cast. */
7364 tree
7365 perform_direct_initialization_if_possible (tree type,
7366 tree expr,
7367 bool c_cast_p,
7368 tsubst_flags_t complain)
7370 conversion *conv;
7371 void *p;
7373 if (type == error_mark_node || error_operand_p (expr))
7374 return error_mark_node;
7375 /* [dcl.init]
7377 If the destination type is a (possibly cv-qualified) class type:
7379 -- If the initialization is direct-initialization ...,
7380 constructors are considered. ... If no constructor applies, or
7381 the overload resolution is ambiguous, the initialization is
7382 ill-formed. */
7383 if (CLASS_TYPE_P (type))
7385 VEC(tree,gc) *args = make_tree_vector_single (expr);
7386 expr = build_special_member_call (NULL_TREE, complete_ctor_identifier,
7387 &args, type, LOOKUP_NORMAL, complain);
7388 release_tree_vector (args);
7389 return build_cplus_new (type, expr);
7392 /* Get the high-water mark for the CONVERSION_OBSTACK. */
7393 p = conversion_obstack_alloc (0);
7395 conv = implicit_conversion (type, TREE_TYPE (expr), expr,
7396 c_cast_p,
7397 LOOKUP_NORMAL);
7398 if (!conv || conv->bad_p)
7399 expr = NULL_TREE;
7400 else
7401 expr = convert_like_real (conv, expr, NULL_TREE, 0, 0,
7402 /*issue_conversion_warnings=*/false,
7403 c_cast_p,
7404 tf_warning_or_error);
7406 /* Free all the conversions we allocated. */
7407 obstack_free (&conversion_obstack, p);
7409 return expr;
7412 /* DECL is a VAR_DECL whose type is a REFERENCE_TYPE. The reference
7413 is being bound to a temporary. Create and return a new VAR_DECL
7414 with the indicated TYPE; this variable will store the value to
7415 which the reference is bound. */
7417 tree
7418 make_temporary_var_for_ref_to_temp (tree decl, tree type)
7420 tree var;
7422 /* Create the variable. */
7423 var = create_temporary_var (type);
7425 /* Register the variable. */
7426 if (TREE_STATIC (decl))
7428 /* Namespace-scope or local static; give it a mangled name. */
7429 tree name;
7431 TREE_STATIC (var) = 1;
7432 name = mangle_ref_init_variable (decl);
7433 DECL_NAME (var) = name;
7434 SET_DECL_ASSEMBLER_NAME (var, name);
7435 var = pushdecl_top_level (var);
7437 else
7438 /* Create a new cleanup level if necessary. */
7439 maybe_push_cleanup_level (type);
7441 return var;
7444 /* EXPR is the initializer for a variable DECL of reference or
7445 std::initializer_list type. Create, push and return a new VAR_DECL
7446 for the initializer so that it will live as long as DECL. Any
7447 cleanup for the new variable is returned through CLEANUP, and the
7448 code to initialize the new variable is returned through INITP. */
7450 tree
7451 set_up_extended_ref_temp (tree decl, tree expr, tree *cleanup, tree *initp)
7453 tree init;
7454 tree type;
7455 tree var;
7457 /* Create the temporary variable. */
7458 type = TREE_TYPE (expr);
7459 var = make_temporary_var_for_ref_to_temp (decl, type);
7460 layout_decl (var, 0);
7461 /* If the rvalue is the result of a function call it will be
7462 a TARGET_EXPR. If it is some other construct (such as a
7463 member access expression where the underlying object is
7464 itself the result of a function call), turn it into a
7465 TARGET_EXPR here. It is important that EXPR be a
7466 TARGET_EXPR below since otherwise the INIT_EXPR will
7467 attempt to make a bitwise copy of EXPR to initialize
7468 VAR. */
7469 if (TREE_CODE (expr) != TARGET_EXPR)
7470 expr = get_target_expr (expr);
7471 /* Create the INIT_EXPR that will initialize the temporary
7472 variable. */
7473 init = build2 (INIT_EXPR, type, var, expr);
7474 if (at_function_scope_p ())
7476 add_decl_expr (var);
7478 if (TREE_STATIC (var))
7479 init = add_stmt_to_compound (init, register_dtor_fn (var));
7480 else
7481 *cleanup = cxx_maybe_build_cleanup (var);
7483 /* We must be careful to destroy the temporary only
7484 after its initialization has taken place. If the
7485 initialization throws an exception, then the
7486 destructor should not be run. We cannot simply
7487 transform INIT into something like:
7489 (INIT, ({ CLEANUP_STMT; }))
7491 because emit_local_var always treats the
7492 initializer as a full-expression. Thus, the
7493 destructor would run too early; it would run at the
7494 end of initializing the reference variable, rather
7495 than at the end of the block enclosing the
7496 reference variable.
7498 The solution is to pass back a cleanup expression
7499 which the caller is responsible for attaching to
7500 the statement tree. */
7502 else
7504 rest_of_decl_compilation (var, /*toplev=*/1, at_eof);
7505 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
7506 static_aggregates = tree_cons (NULL_TREE, var,
7507 static_aggregates);
7510 *initp = init;
7511 return var;
7514 /* Convert EXPR to the indicated reference TYPE, in a way suitable for
7515 initializing a variable of that TYPE. If DECL is non-NULL, it is
7516 the VAR_DECL being initialized with the EXPR. (In that case, the
7517 type of DECL will be TYPE.) If DECL is non-NULL, then CLEANUP must
7518 also be non-NULL, and with *CLEANUP initialized to NULL. Upon
7519 return, if *CLEANUP is no longer NULL, it will be an expression
7520 that should be pushed as a cleanup after the returned expression
7521 is used to initialize DECL.
7523 Return the converted expression. */
7525 tree
7526 initialize_reference (tree type, tree expr, tree decl, tree *cleanup)
7528 conversion *conv;
7529 void *p;
7531 if (type == error_mark_node || error_operand_p (expr))
7532 return error_mark_node;
7534 /* Get the high-water mark for the CONVERSION_OBSTACK. */
7535 p = conversion_obstack_alloc (0);
7537 conv = reference_binding (type, TREE_TYPE (expr), expr, /*c_cast_p=*/false,
7538 LOOKUP_NORMAL);
7539 if (!conv || conv->bad_p)
7541 if (!(TYPE_QUALS (TREE_TYPE (type)) & TYPE_QUAL_CONST)
7542 && !real_lvalue_p (expr))
7543 error ("invalid initialization of non-const reference of "
7544 "type %qT from a temporary of type %qT",
7545 type, TREE_TYPE (expr));
7546 else
7547 error ("invalid initialization of reference of type "
7548 "%qT from expression of type %qT", type,
7549 TREE_TYPE (expr));
7550 return error_mark_node;
7553 /* If DECL is non-NULL, then this special rule applies:
7555 [class.temporary]
7557 The temporary to which the reference is bound or the temporary
7558 that is the complete object to which the reference is bound
7559 persists for the lifetime of the reference.
7561 The temporaries created during the evaluation of the expression
7562 initializing the reference, except the temporary to which the
7563 reference is bound, are destroyed at the end of the
7564 full-expression in which they are created.
7566 In that case, we store the converted expression into a new
7567 VAR_DECL in a new scope.
7569 However, we want to be careful not to create temporaries when
7570 they are not required. For example, given:
7572 struct B {};
7573 struct D : public B {};
7574 D f();
7575 const B& b = f();
7577 there is no need to copy the return value from "f"; we can just
7578 extend its lifetime. Similarly, given:
7580 struct S {};
7581 struct T { operator S(); };
7582 T t;
7583 const S& s = t;
7585 we can extend the lifetime of the return value of the conversion
7586 operator. */
7587 gcc_assert (conv->kind == ck_ref_bind);
7588 if (decl)
7590 tree var;
7591 tree base_conv_type;
7593 /* Skip over the REF_BIND. */
7594 conv = conv->u.next;
7595 /* If the next conversion is a BASE_CONV, skip that too -- but
7596 remember that the conversion was required. */
7597 if (conv->kind == ck_base)
7599 base_conv_type = conv->type;
7600 conv = conv->u.next;
7602 else
7603 base_conv_type = NULL_TREE;
7604 /* Perform the remainder of the conversion. */
7605 expr = convert_like_real (conv, expr,
7606 /*fn=*/NULL_TREE, /*argnum=*/0,
7607 /*inner=*/-1,
7608 /*issue_conversion_warnings=*/true,
7609 /*c_cast_p=*/false,
7610 tf_warning_or_error);
7611 if (error_operand_p (expr))
7612 expr = error_mark_node;
7613 else
7615 if (!lvalue_or_rvalue_with_address_p (expr))
7617 tree init;
7618 var = set_up_extended_ref_temp (decl, expr, cleanup, &init);
7619 /* Use its address to initialize the reference variable. */
7620 expr = build_address (var);
7621 if (base_conv_type)
7622 expr = convert_to_base (expr,
7623 build_pointer_type (base_conv_type),
7624 /*check_access=*/true,
7625 /*nonnull=*/true);
7626 expr = build2 (COMPOUND_EXPR, TREE_TYPE (expr), init, expr);
7628 else
7629 /* Take the address of EXPR. */
7630 expr = cp_build_unary_op (ADDR_EXPR, expr, 0, tf_warning_or_error);
7631 /* If a BASE_CONV was required, perform it now. */
7632 if (base_conv_type)
7633 expr = (perform_implicit_conversion
7634 (build_pointer_type (base_conv_type), expr,
7635 tf_warning_or_error));
7636 expr = build_nop (type, expr);
7639 else
7640 /* Perform the conversion. */
7641 expr = convert_like (conv, expr, tf_warning_or_error);
7643 /* Free all the conversions we allocated. */
7644 obstack_free (&conversion_obstack, p);
7646 return expr;
7649 /* Returns true iff TYPE is some variant of std::initializer_list. */
7651 bool
7652 is_std_init_list (tree type)
7654 return (CLASS_TYPE_P (type)
7655 && CP_TYPE_CONTEXT (type) == std_node
7656 && strcmp (TYPE_NAME_STRING (type), "initializer_list") == 0);
7659 /* Returns true iff DECL is a list constructor: i.e. a constructor which
7660 will accept an argument list of a single std::initializer_list<T>. */
7662 bool
7663 is_list_ctor (tree decl)
7665 tree args = FUNCTION_FIRST_USER_PARMTYPE (decl);
7666 tree arg;
7668 if (!args || args == void_list_node)
7669 return false;
7671 arg = non_reference (TREE_VALUE (args));
7672 if (!is_std_init_list (arg))
7673 return false;
7675 args = TREE_CHAIN (args);
7677 if (args && args != void_list_node && !TREE_PURPOSE (args))
7678 /* There are more non-defaulted parms. */
7679 return false;
7681 return true;
7684 #include "gt-cp-call.h"