Retry rdrand if the carry flag isn't valid.
[official-gcc.git] / gcc / cp / call.c
blob0bf7b8eb58d7b152e6abb97c25bbe217baa82ce6
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, 2010
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 "toplev.h"
36 #include "diagnostic-core.h"
37 #include "intl.h"
38 #include "target.h"
39 #include "convert.h"
40 #include "langhooks.h"
42 /* The various kinds of conversion. */
44 typedef enum conversion_kind {
45 ck_identity,
46 ck_lvalue,
47 ck_qual,
48 ck_std,
49 ck_ptr,
50 ck_pmem,
51 ck_base,
52 ck_ref_bind,
53 ck_user,
54 ck_ambig,
55 ck_list,
56 ck_aggr,
57 ck_rvalue
58 } conversion_kind;
60 /* The rank of the conversion. Order of the enumerals matters; better
61 conversions should come earlier in the list. */
63 typedef enum conversion_rank {
64 cr_identity,
65 cr_exact,
66 cr_promotion,
67 cr_std,
68 cr_pbool,
69 cr_user,
70 cr_ellipsis,
71 cr_bad
72 } conversion_rank;
74 /* An implicit conversion sequence, in the sense of [over.best.ics].
75 The first conversion to be performed is at the end of the chain.
76 That conversion is always a cr_identity conversion. */
78 typedef struct conversion conversion;
79 struct conversion {
80 /* The kind of conversion represented by this step. */
81 conversion_kind kind;
82 /* The rank of this conversion. */
83 conversion_rank rank;
84 BOOL_BITFIELD user_conv_p : 1;
85 BOOL_BITFIELD ellipsis_p : 1;
86 BOOL_BITFIELD this_p : 1;
87 BOOL_BITFIELD bad_p : 1;
88 /* If KIND is ck_ref_bind ck_base_conv, true to indicate that a
89 temporary should be created to hold the result of the
90 conversion. */
91 BOOL_BITFIELD need_temporary_p : 1;
92 /* If KIND is ck_ptr or ck_pmem, true to indicate that a conversion
93 from a pointer-to-derived to pointer-to-base is being performed. */
94 BOOL_BITFIELD base_p : 1;
95 /* If KIND is ck_ref_bind, true when either an lvalue reference is
96 being bound to an lvalue expression or an rvalue reference is
97 being bound to an rvalue expression. */
98 BOOL_BITFIELD rvaluedness_matches_p: 1;
99 BOOL_BITFIELD check_narrowing: 1;
100 /* The type of the expression resulting from the conversion. */
101 tree type;
102 union {
103 /* The next conversion in the chain. Since the conversions are
104 arranged from outermost to innermost, the NEXT conversion will
105 actually be performed before this conversion. This variant is
106 used only when KIND is neither ck_identity nor ck_ambig. */
107 conversion *next;
108 /* The expression at the beginning of the conversion chain. This
109 variant is used only if KIND is ck_identity or ck_ambig. */
110 tree expr;
111 /* The array of conversions for an initializer_list. */
112 conversion **list;
113 } u;
114 /* The function candidate corresponding to this conversion
115 sequence. This field is only used if KIND is ck_user. */
116 struct z_candidate *cand;
119 #define CONVERSION_RANK(NODE) \
120 ((NODE)->bad_p ? cr_bad \
121 : (NODE)->ellipsis_p ? cr_ellipsis \
122 : (NODE)->user_conv_p ? cr_user \
123 : (NODE)->rank)
125 #define BAD_CONVERSION_RANK(NODE) \
126 ((NODE)->ellipsis_p ? cr_ellipsis \
127 : (NODE)->user_conv_p ? cr_user \
128 : (NODE)->rank)
130 static struct obstack conversion_obstack;
131 static bool conversion_obstack_initialized;
133 static struct z_candidate * tourney (struct z_candidate *);
134 static int equal_functions (tree, tree);
135 static int joust (struct z_candidate *, struct z_candidate *, bool);
136 static int compare_ics (conversion *, conversion *);
137 static tree build_over_call (struct z_candidate *, int, tsubst_flags_t);
138 static tree build_java_interface_fn_ref (tree, tree);
139 #define convert_like(CONV, EXPR, COMPLAIN) \
140 convert_like_real ((CONV), (EXPR), NULL_TREE, 0, 0, \
141 /*issue_conversion_warnings=*/true, \
142 /*c_cast_p=*/false, (COMPLAIN))
143 #define convert_like_with_context(CONV, EXPR, FN, ARGNO, COMPLAIN ) \
144 convert_like_real ((CONV), (EXPR), (FN), (ARGNO), 0, \
145 /*issue_conversion_warnings=*/true, \
146 /*c_cast_p=*/false, (COMPLAIN))
147 static tree convert_like_real (conversion *, tree, tree, int, int, bool,
148 bool, tsubst_flags_t);
149 static void op_error (enum tree_code, enum tree_code, tree, tree,
150 tree, bool);
151 static VEC(tree,gc) *resolve_args (VEC(tree,gc) *);
152 static struct z_candidate *build_user_type_conversion_1 (tree, tree, int);
153 static void print_z_candidate (const char *, struct z_candidate *);
154 static void print_z_candidates (struct z_candidate *);
155 static tree build_this (tree);
156 static struct z_candidate *splice_viable (struct z_candidate *, bool, bool *);
157 static bool any_strictly_viable (struct z_candidate *);
158 static struct z_candidate *add_template_candidate
159 (struct z_candidate **, tree, tree, tree, tree, const VEC(tree,gc) *,
160 tree, tree, tree, int, unification_kind_t);
161 static struct z_candidate *add_template_candidate_real
162 (struct z_candidate **, tree, tree, tree, tree, const VEC(tree,gc) *,
163 tree, tree, tree, int, tree, unification_kind_t);
164 static struct z_candidate *add_template_conv_candidate
165 (struct z_candidate **, tree, tree, tree, const VEC(tree,gc) *, tree,
166 tree, tree);
167 static void add_builtin_candidates
168 (struct z_candidate **, enum tree_code, enum tree_code,
169 tree, tree *, int);
170 static void add_builtin_candidate
171 (struct z_candidate **, enum tree_code, enum tree_code,
172 tree, tree, tree, tree *, tree *, int);
173 static bool is_complete (tree);
174 static void build_builtin_candidate
175 (struct z_candidate **, tree, tree, tree, tree *, tree *,
176 int);
177 static struct z_candidate *add_conv_candidate
178 (struct z_candidate **, tree, tree, tree, const VEC(tree,gc) *, tree,
179 tree);
180 static struct z_candidate *add_function_candidate
181 (struct z_candidate **, tree, tree, tree, const VEC(tree,gc) *, tree,
182 tree, int);
183 static conversion *implicit_conversion (tree, tree, tree, bool, int);
184 static conversion *standard_conversion (tree, tree, tree, bool, int);
185 static conversion *reference_binding (tree, tree, tree, bool, int);
186 static conversion *build_conv (conversion_kind, tree, conversion *);
187 static conversion *build_list_conv (tree, tree, int);
188 static bool is_subseq (conversion *, conversion *);
189 static conversion *maybe_handle_ref_bind (conversion **);
190 static void maybe_handle_implicit_object (conversion **);
191 static struct z_candidate *add_candidate
192 (struct z_candidate **, tree, tree, const VEC(tree,gc) *, size_t,
193 conversion **, tree, tree, int);
194 static tree source_type (conversion *);
195 static void add_warning (struct z_candidate *, struct z_candidate *);
196 static bool reference_compatible_p (tree, tree);
197 static conversion *convert_class_to_reference (tree, tree, tree, int);
198 static conversion *direct_reference_binding (tree, conversion *);
199 static bool promoted_arithmetic_type_p (tree);
200 static conversion *conditional_conversion (tree, tree);
201 static char *name_as_c_string (tree, tree, bool *);
202 static tree prep_operand (tree);
203 static void add_candidates (tree, tree, const VEC(tree,gc) *, tree, tree, bool,
204 tree, tree, int, struct z_candidate **);
205 static conversion *merge_conversion_sequences (conversion *, conversion *);
206 static bool magic_varargs_p (tree);
207 static tree build_temp (tree, tree, int, diagnostic_t *);
209 /* Returns nonzero iff the destructor name specified in NAME matches BASETYPE.
210 NAME can take many forms... */
212 bool
213 check_dtor_name (tree basetype, tree name)
215 /* Just accept something we've already complained about. */
216 if (name == error_mark_node)
217 return true;
219 if (TREE_CODE (name) == TYPE_DECL)
220 name = TREE_TYPE (name);
221 else if (TYPE_P (name))
222 /* OK */;
223 else if (TREE_CODE (name) == IDENTIFIER_NODE)
225 if ((MAYBE_CLASS_TYPE_P (basetype)
226 && name == constructor_name (basetype))
227 || (TREE_CODE (basetype) == ENUMERAL_TYPE
228 && name == TYPE_IDENTIFIER (basetype)))
229 return true;
230 else
231 name = get_type_value (name);
233 else
235 /* In the case of:
237 template <class T> struct S { ~S(); };
238 int i;
239 i.~S();
241 NAME will be a class template. */
242 gcc_assert (DECL_CLASS_TEMPLATE_P (name));
243 return false;
246 if (!name || name == error_mark_node)
247 return false;
248 return same_type_p (TYPE_MAIN_VARIANT (basetype), TYPE_MAIN_VARIANT (name));
251 /* We want the address of a function or method. We avoid creating a
252 pointer-to-member function. */
254 tree
255 build_addr_func (tree function)
257 tree type = TREE_TYPE (function);
259 /* We have to do these by hand to avoid real pointer to member
260 functions. */
261 if (TREE_CODE (type) == METHOD_TYPE)
263 if (TREE_CODE (function) == OFFSET_REF)
265 tree object = build_address (TREE_OPERAND (function, 0));
266 return get_member_function_from_ptrfunc (&object,
267 TREE_OPERAND (function, 1));
269 function = build_address (function);
271 else
272 function = decay_conversion (function);
274 return function;
277 /* Build a CALL_EXPR, we can handle FUNCTION_TYPEs, METHOD_TYPEs, or
278 POINTER_TYPE to those. Note, pointer to member function types
279 (TYPE_PTRMEMFUNC_P) must be handled by our callers. There are
280 two variants. build_call_a is the primitive taking an array of
281 arguments, while build_call_n is a wrapper that handles varargs. */
283 tree
284 build_call_n (tree function, int n, ...)
286 if (n == 0)
287 return build_call_a (function, 0, NULL);
288 else
290 tree *argarray = XALLOCAVEC (tree, n);
291 va_list ap;
292 int i;
294 va_start (ap, n);
295 for (i = 0; i < n; i++)
296 argarray[i] = va_arg (ap, tree);
297 va_end (ap);
298 return build_call_a (function, n, argarray);
302 tree
303 build_call_a (tree function, int n, tree *argarray)
305 int is_constructor = 0;
306 int nothrow;
307 tree decl;
308 tree result_type;
309 tree fntype;
310 int i;
312 function = build_addr_func (function);
314 gcc_assert (TYPE_PTR_P (TREE_TYPE (function)));
315 fntype = TREE_TYPE (TREE_TYPE (function));
316 gcc_assert (TREE_CODE (fntype) == FUNCTION_TYPE
317 || TREE_CODE (fntype) == METHOD_TYPE);
318 result_type = TREE_TYPE (fntype);
319 /* An rvalue has no cv-qualifiers. */
320 if (SCALAR_TYPE_P (result_type) || VOID_TYPE_P (result_type))
321 result_type = cv_unqualified (result_type);
323 if (TREE_CODE (function) == ADDR_EXPR
324 && TREE_CODE (TREE_OPERAND (function, 0)) == FUNCTION_DECL)
326 decl = TREE_OPERAND (function, 0);
327 if (!TREE_USED (decl))
329 /* We invoke build_call directly for several library
330 functions. These may have been declared normally if
331 we're building libgcc, so we can't just check
332 DECL_ARTIFICIAL. */
333 gcc_assert (DECL_ARTIFICIAL (decl)
334 || !strncmp (IDENTIFIER_POINTER (DECL_NAME (decl)),
335 "__", 2));
336 mark_used (decl);
339 else
340 decl = NULL_TREE;
342 /* We check both the decl and the type; a function may be known not to
343 throw without being declared throw(). */
344 nothrow = ((decl && TREE_NOTHROW (decl))
345 || TYPE_NOTHROW_P (TREE_TYPE (TREE_TYPE (function))));
347 if (decl && TREE_THIS_VOLATILE (decl) && cfun && cp_function_chain)
348 current_function_returns_abnormally = 1;
350 if (decl && TREE_DEPRECATED (decl))
351 warn_deprecated_use (decl, NULL_TREE);
352 require_complete_eh_spec_types (fntype, decl);
354 if (decl && DECL_CONSTRUCTOR_P (decl))
355 is_constructor = 1;
357 /* Don't pass empty class objects by value. This is useful
358 for tags in STL, which are used to control overload resolution.
359 We don't need to handle other cases of copying empty classes. */
360 if (! decl || ! DECL_BUILT_IN (decl))
361 for (i = 0; i < n; i++)
362 if (is_empty_class (TREE_TYPE (argarray[i]))
363 && ! TREE_ADDRESSABLE (TREE_TYPE (argarray[i])))
365 tree t = build0 (EMPTY_CLASS_EXPR, TREE_TYPE (argarray[i]));
366 argarray[i] = build2 (COMPOUND_EXPR, TREE_TYPE (t),
367 argarray[i], t);
370 function = build_call_array_loc (input_location,
371 result_type, function, n, argarray);
372 TREE_HAS_CONSTRUCTOR (function) = is_constructor;
373 TREE_NOTHROW (function) = nothrow;
375 return function;
378 /* Build something of the form ptr->method (args)
379 or object.method (args). This can also build
380 calls to constructors, and find friends.
382 Member functions always take their class variable
383 as a pointer.
385 INSTANCE is a class instance.
387 NAME is the name of the method desired, usually an IDENTIFIER_NODE.
389 PARMS help to figure out what that NAME really refers to.
391 BASETYPE_PATH, if non-NULL, contains a chain from the type of INSTANCE
392 down to the real instance type to use for access checking. We need this
393 information to get protected accesses correct.
395 FLAGS is the logical disjunction of zero or more LOOKUP_
396 flags. See cp-tree.h for more info.
398 If this is all OK, calls build_function_call with the resolved
399 member function.
401 This function must also handle being called to perform
402 initialization, promotion/coercion of arguments, and
403 instantiation of default parameters.
405 Note that NAME may refer to an instance variable name. If
406 `operator()()' is defined for the type of that field, then we return
407 that result. */
409 /* New overloading code. */
411 typedef struct z_candidate z_candidate;
413 typedef struct candidate_warning candidate_warning;
414 struct candidate_warning {
415 z_candidate *loser;
416 candidate_warning *next;
419 struct z_candidate {
420 /* The FUNCTION_DECL that will be called if this candidate is
421 selected by overload resolution. */
422 tree fn;
423 /* If not NULL_TREE, the first argument to use when calling this
424 function. */
425 tree first_arg;
426 /* The rest of the arguments to use when calling this function. If
427 there are no further arguments this may be NULL or it may be an
428 empty vector. */
429 const VEC(tree,gc) *args;
430 /* The implicit conversion sequences for each of the arguments to
431 FN. */
432 conversion **convs;
433 /* The number of implicit conversion sequences. */
434 size_t num_convs;
435 /* If FN is a user-defined conversion, the standard conversion
436 sequence from the type returned by FN to the desired destination
437 type. */
438 conversion *second_conv;
439 int viable;
440 /* If FN is a member function, the binfo indicating the path used to
441 qualify the name of FN at the call site. This path is used to
442 determine whether or not FN is accessible if it is selected by
443 overload resolution. The DECL_CONTEXT of FN will always be a
444 (possibly improper) base of this binfo. */
445 tree access_path;
446 /* If FN is a non-static member function, the binfo indicating the
447 subobject to which the `this' pointer should be converted if FN
448 is selected by overload resolution. The type pointed to the by
449 the `this' pointer must correspond to the most derived class
450 indicated by the CONVERSION_PATH. */
451 tree conversion_path;
452 tree template_decl;
453 tree explicit_targs;
454 candidate_warning *warnings;
455 z_candidate *next;
458 /* Returns true iff T is a null pointer constant in the sense of
459 [conv.ptr]. */
461 bool
462 null_ptr_cst_p (tree t)
464 /* [conv.ptr]
466 A null pointer constant is an integral constant expression
467 (_expr.const_) rvalue of integer type that evaluates to zero or
468 an rvalue of type std::nullptr_t. */
469 t = integral_constant_value (t);
470 if (t == null_node
471 || NULLPTR_TYPE_P (TREE_TYPE (t)))
472 return true;
473 if (CP_INTEGRAL_TYPE_P (TREE_TYPE (t)) && integer_zerop (t))
475 STRIP_NOPS (t);
476 if (!TREE_OVERFLOW (t))
477 return true;
479 return false;
482 /* Returns nonzero if PARMLIST consists of only default parms and/or
483 ellipsis. */
485 bool
486 sufficient_parms_p (const_tree parmlist)
488 for (; parmlist && parmlist != void_list_node;
489 parmlist = TREE_CHAIN (parmlist))
490 if (!TREE_PURPOSE (parmlist))
491 return false;
492 return true;
495 /* Allocate N bytes of memory from the conversion obstack. The memory
496 is zeroed before being returned. */
498 static void *
499 conversion_obstack_alloc (size_t n)
501 void *p;
502 if (!conversion_obstack_initialized)
504 gcc_obstack_init (&conversion_obstack);
505 conversion_obstack_initialized = true;
507 p = obstack_alloc (&conversion_obstack, n);
508 memset (p, 0, n);
509 return p;
512 /* Dynamically allocate a conversion. */
514 static conversion *
515 alloc_conversion (conversion_kind kind)
517 conversion *c;
518 c = (conversion *) conversion_obstack_alloc (sizeof (conversion));
519 c->kind = kind;
520 return c;
523 #ifdef ENABLE_CHECKING
525 /* Make sure that all memory on the conversion obstack has been
526 freed. */
528 void
529 validate_conversion_obstack (void)
531 if (conversion_obstack_initialized)
532 gcc_assert ((obstack_next_free (&conversion_obstack)
533 == obstack_base (&conversion_obstack)));
536 #endif /* ENABLE_CHECKING */
538 /* Dynamically allocate an array of N conversions. */
540 static conversion **
541 alloc_conversions (size_t n)
543 return (conversion **) conversion_obstack_alloc (n * sizeof (conversion *));
546 static conversion *
547 build_conv (conversion_kind code, tree type, conversion *from)
549 conversion *t;
550 conversion_rank rank = CONVERSION_RANK (from);
552 /* Note that the caller is responsible for filling in t->cand for
553 user-defined conversions. */
554 t = alloc_conversion (code);
555 t->type = type;
556 t->u.next = from;
558 switch (code)
560 case ck_ptr:
561 case ck_pmem:
562 case ck_base:
563 case ck_std:
564 if (rank < cr_std)
565 rank = cr_std;
566 break;
568 case ck_qual:
569 if (rank < cr_exact)
570 rank = cr_exact;
571 break;
573 default:
574 break;
576 t->rank = rank;
577 t->user_conv_p = (code == ck_user || from->user_conv_p);
578 t->bad_p = from->bad_p;
579 t->base_p = false;
580 return t;
583 /* Represent a conversion from CTOR, a braced-init-list, to TYPE, a
584 specialization of std::initializer_list<T>, if such a conversion is
585 possible. */
587 static conversion *
588 build_list_conv (tree type, tree ctor, int flags)
590 tree elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (type), 0);
591 unsigned len = CONSTRUCTOR_NELTS (ctor);
592 conversion **subconvs = alloc_conversions (len);
593 conversion *t;
594 unsigned i;
595 tree val;
597 /* Within a list-initialization we can have more user-defined
598 conversions. */
599 flags &= ~LOOKUP_NO_CONVERSION;
600 /* But no narrowing conversions. */
601 flags |= LOOKUP_NO_NARROWING;
603 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor), i, val)
605 conversion *sub
606 = implicit_conversion (elttype, TREE_TYPE (val), val,
607 false, flags);
608 if (sub == NULL)
609 return NULL;
611 subconvs[i] = sub;
614 t = alloc_conversion (ck_list);
615 t->type = type;
616 t->u.list = subconvs;
617 t->rank = cr_exact;
619 for (i = 0; i < len; ++i)
621 conversion *sub = subconvs[i];
622 if (sub->rank > t->rank)
623 t->rank = sub->rank;
624 if (sub->user_conv_p)
625 t->user_conv_p = true;
626 if (sub->bad_p)
627 t->bad_p = true;
630 return t;
633 /* Represent a conversion from CTOR, a braced-init-list, to TYPE, an
634 aggregate class, if such a conversion is possible. */
636 static conversion *
637 build_aggr_conv (tree type, tree ctor, int flags)
639 unsigned HOST_WIDE_INT i = 0;
640 conversion *c;
641 tree field = next_initializable_field (TYPE_FIELDS (type));
642 tree empty_ctor = NULL_TREE;
644 for (; field; field = next_initializable_field (TREE_CHAIN (field)))
646 if (i < CONSTRUCTOR_NELTS (ctor))
648 constructor_elt *ce = CONSTRUCTOR_ELT (ctor, i);
649 if (!can_convert_arg (TREE_TYPE (field), TREE_TYPE (ce->value),
650 ce->value, flags))
651 return NULL;
652 ++i;
653 if (TREE_CODE (type) == UNION_TYPE)
654 break;
656 else
658 if (empty_ctor == NULL_TREE)
659 empty_ctor = build_constructor (init_list_type_node, NULL);
660 if (!can_convert_arg (TREE_TYPE (field), TREE_TYPE (empty_ctor),
661 empty_ctor, flags))
662 return NULL;
666 if (i < CONSTRUCTOR_NELTS (ctor))
667 return NULL;
669 c = alloc_conversion (ck_aggr);
670 c->type = type;
671 c->rank = cr_exact;
672 c->user_conv_p = true;
673 c->u.next = NULL;
674 return c;
677 /* Build a representation of the identity conversion from EXPR to
678 itself. The TYPE should match the type of EXPR, if EXPR is non-NULL. */
680 static conversion *
681 build_identity_conv (tree type, tree expr)
683 conversion *c;
685 c = alloc_conversion (ck_identity);
686 c->type = type;
687 c->u.expr = expr;
689 return c;
692 /* Converting from EXPR to TYPE was ambiguous in the sense that there
693 were multiple user-defined conversions to accomplish the job.
694 Build a conversion that indicates that ambiguity. */
696 static conversion *
697 build_ambiguous_conv (tree type, tree expr)
699 conversion *c;
701 c = alloc_conversion (ck_ambig);
702 c->type = type;
703 c->u.expr = expr;
705 return c;
708 tree
709 strip_top_quals (tree t)
711 if (TREE_CODE (t) == ARRAY_TYPE)
712 return t;
713 return cp_build_qualified_type (t, 0);
716 /* Returns the standard conversion path (see [conv]) from type FROM to type
717 TO, if any. For proper handling of null pointer constants, you must
718 also pass the expression EXPR to convert from. If C_CAST_P is true,
719 this conversion is coming from a C-style cast. */
721 static conversion *
722 standard_conversion (tree to, tree from, tree expr, bool c_cast_p,
723 int flags)
725 enum tree_code fcode, tcode;
726 conversion *conv;
727 bool fromref = false;
729 to = non_reference (to);
730 if (TREE_CODE (from) == REFERENCE_TYPE)
732 fromref = true;
733 from = TREE_TYPE (from);
735 to = strip_top_quals (to);
736 from = strip_top_quals (from);
738 if ((TYPE_PTRFN_P (to) || TYPE_PTRMEMFUNC_P (to))
739 && expr && type_unknown_p (expr))
741 tsubst_flags_t tflags = tf_conv;
742 if (!(flags & LOOKUP_PROTECT))
743 tflags |= tf_no_access_control;
744 expr = instantiate_type (to, expr, tflags);
745 if (expr == error_mark_node)
746 return NULL;
747 from = TREE_TYPE (expr);
750 fcode = TREE_CODE (from);
751 tcode = TREE_CODE (to);
753 conv = build_identity_conv (from, expr);
754 if (fcode == FUNCTION_TYPE || fcode == ARRAY_TYPE)
756 from = type_decays_to (from);
757 fcode = TREE_CODE (from);
758 conv = build_conv (ck_lvalue, from, conv);
760 else if (fromref || (expr && lvalue_p (expr)))
762 if (expr)
764 tree bitfield_type;
765 bitfield_type = is_bitfield_expr_with_lowered_type (expr);
766 if (bitfield_type)
768 from = strip_top_quals (bitfield_type);
769 fcode = TREE_CODE (from);
772 conv = build_conv (ck_rvalue, from, conv);
775 /* Allow conversion between `__complex__' data types. */
776 if (tcode == COMPLEX_TYPE && fcode == COMPLEX_TYPE)
778 /* The standard conversion sequence to convert FROM to TO is
779 the standard conversion sequence to perform componentwise
780 conversion. */
781 conversion *part_conv = standard_conversion
782 (TREE_TYPE (to), TREE_TYPE (from), NULL_TREE, c_cast_p, flags);
784 if (part_conv)
786 conv = build_conv (part_conv->kind, to, conv);
787 conv->rank = part_conv->rank;
789 else
790 conv = NULL;
792 return conv;
795 if (same_type_p (from, to))
796 return conv;
798 /* [conv.ptr]
799 A null pointer constant can be converted to a pointer type; ... A
800 null pointer constant of integral type can be converted to an
801 rvalue of type std::nullptr_t. */
802 if ((tcode == POINTER_TYPE || TYPE_PTR_TO_MEMBER_P (to)
803 || NULLPTR_TYPE_P (to))
804 && expr && null_ptr_cst_p (expr))
805 conv = build_conv (ck_std, to, conv);
806 else if ((tcode == INTEGER_TYPE && fcode == POINTER_TYPE)
807 || (tcode == POINTER_TYPE && fcode == INTEGER_TYPE))
809 /* For backwards brain damage compatibility, allow interconversion of
810 pointers and integers with a pedwarn. */
811 conv = build_conv (ck_std, to, conv);
812 conv->bad_p = true;
814 else if (UNSCOPED_ENUM_P (to) && fcode == INTEGER_TYPE)
816 /* For backwards brain damage compatibility, allow interconversion of
817 enums and integers with a pedwarn. */
818 conv = build_conv (ck_std, to, conv);
819 conv->bad_p = true;
821 else if ((tcode == POINTER_TYPE && fcode == POINTER_TYPE)
822 || (TYPE_PTRMEM_P (to) && TYPE_PTRMEM_P (from)))
824 tree to_pointee;
825 tree from_pointee;
827 if (tcode == POINTER_TYPE
828 && same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (from),
829 TREE_TYPE (to)))
831 else if (VOID_TYPE_P (TREE_TYPE (to))
832 && !TYPE_PTRMEM_P (from)
833 && TREE_CODE (TREE_TYPE (from)) != FUNCTION_TYPE)
835 from = build_pointer_type
836 (cp_build_qualified_type (void_type_node,
837 cp_type_quals (TREE_TYPE (from))));
838 conv = build_conv (ck_ptr, from, conv);
840 else if (TYPE_PTRMEM_P (from))
842 tree fbase = TYPE_PTRMEM_CLASS_TYPE (from);
843 tree tbase = TYPE_PTRMEM_CLASS_TYPE (to);
845 if (DERIVED_FROM_P (fbase, tbase)
846 && (same_type_ignoring_top_level_qualifiers_p
847 (TYPE_PTRMEM_POINTED_TO_TYPE (from),
848 TYPE_PTRMEM_POINTED_TO_TYPE (to))))
850 from = build_ptrmem_type (tbase,
851 TYPE_PTRMEM_POINTED_TO_TYPE (from));
852 conv = build_conv (ck_pmem, from, conv);
854 else if (!same_type_p (fbase, tbase))
855 return NULL;
857 else if (CLASS_TYPE_P (TREE_TYPE (from))
858 && CLASS_TYPE_P (TREE_TYPE (to))
859 /* [conv.ptr]
861 An rvalue of type "pointer to cv D," where D is a
862 class type, can be converted to an rvalue of type
863 "pointer to cv B," where B is a base class (clause
864 _class.derived_) of D. If B is an inaccessible
865 (clause _class.access_) or ambiguous
866 (_class.member.lookup_) base class of D, a program
867 that necessitates this conversion is ill-formed.
868 Therefore, we use DERIVED_FROM_P, and do not check
869 access or uniqueness. */
870 && DERIVED_FROM_P (TREE_TYPE (to), TREE_TYPE (from)))
872 from =
873 cp_build_qualified_type (TREE_TYPE (to),
874 cp_type_quals (TREE_TYPE (from)));
875 from = build_pointer_type (from);
876 conv = build_conv (ck_ptr, from, conv);
877 conv->base_p = true;
880 if (tcode == POINTER_TYPE)
882 to_pointee = TREE_TYPE (to);
883 from_pointee = TREE_TYPE (from);
885 else
887 to_pointee = TYPE_PTRMEM_POINTED_TO_TYPE (to);
888 from_pointee = TYPE_PTRMEM_POINTED_TO_TYPE (from);
891 if (same_type_p (from, to))
892 /* OK */;
893 else if (c_cast_p && comp_ptr_ttypes_const (to, from))
894 /* In a C-style cast, we ignore CV-qualification because we
895 are allowed to perform a static_cast followed by a
896 const_cast. */
897 conv = build_conv (ck_qual, to, conv);
898 else if (!c_cast_p && comp_ptr_ttypes (to_pointee, from_pointee))
899 conv = build_conv (ck_qual, to, conv);
900 else if (expr && string_conv_p (to, expr, 0))
901 /* converting from string constant to char *. */
902 conv = build_conv (ck_qual, to, conv);
903 else if (ptr_reasonably_similar (to_pointee, from_pointee))
905 conv = build_conv (ck_ptr, to, conv);
906 conv->bad_p = true;
908 else
909 return NULL;
911 from = to;
913 else if (TYPE_PTRMEMFUNC_P (to) && TYPE_PTRMEMFUNC_P (from))
915 tree fromfn = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (from));
916 tree tofn = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (to));
917 tree fbase = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (fromfn)));
918 tree tbase = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (tofn)));
920 if (!DERIVED_FROM_P (fbase, tbase)
921 || !same_type_p (TREE_TYPE (fromfn), TREE_TYPE (tofn))
922 || !compparms (TREE_CHAIN (TYPE_ARG_TYPES (fromfn)),
923 TREE_CHAIN (TYPE_ARG_TYPES (tofn)))
924 || cp_type_quals (fbase) != cp_type_quals (tbase))
925 return NULL;
927 from = build_memfn_type (fromfn, tbase, cp_type_quals (tbase));
928 from = build_ptrmemfunc_type (build_pointer_type (from));
929 conv = build_conv (ck_pmem, from, conv);
930 conv->base_p = true;
932 else if (tcode == BOOLEAN_TYPE)
934 /* [conv.bool]
936 An rvalue of arithmetic, unscoped enumeration, pointer, or
937 pointer to member type can be converted to an rvalue of type
938 bool. ... An rvalue of type std::nullptr_t can be converted
939 to an rvalue of type bool; */
940 if (ARITHMETIC_TYPE_P (from)
941 || UNSCOPED_ENUM_P (from)
942 || fcode == POINTER_TYPE
943 || TYPE_PTR_TO_MEMBER_P (from)
944 || NULLPTR_TYPE_P (from))
946 conv = build_conv (ck_std, to, conv);
947 if (fcode == POINTER_TYPE
948 || TYPE_PTRMEM_P (from)
949 || (TYPE_PTRMEMFUNC_P (from)
950 && conv->rank < cr_pbool)
951 || NULLPTR_TYPE_P (from))
952 conv->rank = cr_pbool;
953 return conv;
956 return NULL;
958 /* We don't check for ENUMERAL_TYPE here because there are no standard
959 conversions to enum type. */
960 /* As an extension, allow conversion to complex type. */
961 else if (ARITHMETIC_TYPE_P (to))
963 if (! (INTEGRAL_CODE_P (fcode) || fcode == REAL_TYPE)
964 || SCOPED_ENUM_P (from))
965 return NULL;
966 conv = build_conv (ck_std, to, conv);
968 /* Give this a better rank if it's a promotion. */
969 if (same_type_p (to, type_promotes_to (from))
970 && conv->u.next->rank <= cr_promotion)
971 conv->rank = cr_promotion;
973 else if (fcode == VECTOR_TYPE && tcode == VECTOR_TYPE
974 && vector_types_convertible_p (from, to, false))
975 return build_conv (ck_std, to, conv);
976 else if (MAYBE_CLASS_TYPE_P (to) && MAYBE_CLASS_TYPE_P (from)
977 && is_properly_derived_from (from, to))
979 if (conv->kind == ck_rvalue)
980 conv = conv->u.next;
981 conv = build_conv (ck_base, to, conv);
982 /* The derived-to-base conversion indicates the initialization
983 of a parameter with base type from an object of a derived
984 type. A temporary object is created to hold the result of
985 the conversion unless we're binding directly to a reference. */
986 conv->need_temporary_p = !(flags & LOOKUP_NO_TEMP_BIND);
988 else
989 return NULL;
991 if (flags & LOOKUP_NO_NARROWING)
992 conv->check_narrowing = true;
994 return conv;
997 /* Returns nonzero if T1 is reference-related to T2. */
999 bool
1000 reference_related_p (tree t1, tree t2)
1002 t1 = TYPE_MAIN_VARIANT (t1);
1003 t2 = TYPE_MAIN_VARIANT (t2);
1005 /* [dcl.init.ref]
1007 Given types "cv1 T1" and "cv2 T2," "cv1 T1" is reference-related
1008 to "cv2 T2" if T1 is the same type as T2, or T1 is a base class
1009 of T2. */
1010 return (same_type_p (t1, t2)
1011 || (CLASS_TYPE_P (t1) && CLASS_TYPE_P (t2)
1012 && DERIVED_FROM_P (t1, t2)));
1015 /* Returns nonzero if T1 is reference-compatible with T2. */
1017 static bool
1018 reference_compatible_p (tree t1, tree t2)
1020 /* [dcl.init.ref]
1022 "cv1 T1" is reference compatible with "cv2 T2" if T1 is
1023 reference-related to T2 and cv1 is the same cv-qualification as,
1024 or greater cv-qualification than, cv2. */
1025 return (reference_related_p (t1, t2)
1026 && at_least_as_qualified_p (t1, t2));
1029 /* Determine whether or not the EXPR (of class type S) can be
1030 converted to T as in [over.match.ref]. */
1032 static conversion *
1033 convert_class_to_reference (tree reference_type, tree s, tree expr, int flags)
1035 tree conversions;
1036 tree first_arg;
1037 conversion *conv;
1038 tree t;
1039 struct z_candidate *candidates;
1040 struct z_candidate *cand;
1041 bool any_viable_p;
1043 if (!expr)
1044 return NULL;
1046 conversions = lookup_conversions (s, /*lookup_template_convs_p=*/true);
1047 if (!conversions)
1048 return NULL;
1050 /* [over.match.ref]
1052 Assuming that "cv1 T" is the underlying type of the reference
1053 being initialized, and "cv S" is the type of the initializer
1054 expression, with S a class type, the candidate functions are
1055 selected as follows:
1057 --The conversion functions of S and its base classes are
1058 considered. Those that are not hidden within S and yield type
1059 "reference to cv2 T2", where "cv1 T" is reference-compatible
1060 (_dcl.init.ref_) with "cv2 T2", are candidate functions.
1062 The argument list has one argument, which is the initializer
1063 expression. */
1065 candidates = 0;
1067 /* Conceptually, we should take the address of EXPR and put it in
1068 the argument list. Unfortunately, however, that can result in
1069 error messages, which we should not issue now because we are just
1070 trying to find a conversion operator. Therefore, we use NULL,
1071 cast to the appropriate type. */
1072 first_arg = build_int_cst (build_pointer_type (s), 0);
1074 t = TREE_TYPE (reference_type);
1076 /* We're performing a user-defined conversion to a desired type, so set
1077 this for the benefit of add_candidates. */
1078 flags |= LOOKUP_NO_CONVERSION;
1080 for (; conversions; conversions = TREE_CHAIN (conversions))
1082 tree fns = TREE_VALUE (conversions);
1083 tree binfo = TREE_PURPOSE (conversions);
1084 struct z_candidate *old_candidates = candidates;;
1086 add_candidates (fns, first_arg, NULL, reference_type,
1087 NULL_TREE, false,
1088 binfo, TYPE_BINFO (s),
1089 flags, &candidates);
1091 for (cand = candidates; cand != old_candidates; cand = cand->next)
1093 /* Now, see if the conversion function really returns
1094 an lvalue of the appropriate type. From the
1095 point of view of unification, simply returning an
1096 rvalue of the right type is good enough. */
1097 tree f = cand->fn;
1098 tree t2 = TREE_TYPE (TREE_TYPE (f));
1099 if (TREE_CODE (t2) != REFERENCE_TYPE
1100 || !reference_compatible_p (t, TREE_TYPE (t2)))
1102 cand->viable = 0;
1104 else
1106 conversion *identity_conv;
1107 /* Build a standard conversion sequence indicating the
1108 binding from the reference type returned by the
1109 function to the desired REFERENCE_TYPE. */
1110 identity_conv
1111 = build_identity_conv (TREE_TYPE (TREE_TYPE
1112 (TREE_TYPE (cand->fn))),
1113 NULL_TREE);
1114 cand->second_conv
1115 = (direct_reference_binding
1116 (reference_type, identity_conv));
1117 cand->second_conv->rvaluedness_matches_p
1118 = TYPE_REF_IS_RVALUE (TREE_TYPE (TREE_TYPE (cand->fn)))
1119 == TYPE_REF_IS_RVALUE (reference_type);
1120 cand->second_conv->bad_p |= cand->convs[0]->bad_p;
1122 /* Don't allow binding of lvalues to rvalue references. */
1123 if (TYPE_REF_IS_RVALUE (reference_type)
1124 && !TYPE_REF_IS_RVALUE (TREE_TYPE (TREE_TYPE (cand->fn))))
1125 cand->second_conv->bad_p = true;
1130 candidates = splice_viable (candidates, pedantic, &any_viable_p);
1131 /* If none of the conversion functions worked out, let our caller
1132 know. */
1133 if (!any_viable_p)
1134 return NULL;
1136 cand = tourney (candidates);
1137 if (!cand)
1138 return NULL;
1140 /* Now that we know that this is the function we're going to use fix
1141 the dummy first argument. */
1142 gcc_assert (cand->first_arg == NULL_TREE
1143 || integer_zerop (cand->first_arg));
1144 cand->first_arg = build_this (expr);
1146 /* Build a user-defined conversion sequence representing the
1147 conversion. */
1148 conv = build_conv (ck_user,
1149 TREE_TYPE (TREE_TYPE (cand->fn)),
1150 build_identity_conv (TREE_TYPE (expr), expr));
1151 conv->cand = cand;
1153 if (cand->viable == -1)
1154 conv->bad_p = true;
1156 /* Merge it with the standard conversion sequence from the
1157 conversion function's return type to the desired type. */
1158 cand->second_conv = merge_conversion_sequences (conv, cand->second_conv);
1160 return cand->second_conv;
1163 /* A reference of the indicated TYPE is being bound directly to the
1164 expression represented by the implicit conversion sequence CONV.
1165 Return a conversion sequence for this binding. */
1167 static conversion *
1168 direct_reference_binding (tree type, conversion *conv)
1170 tree t;
1172 gcc_assert (TREE_CODE (type) == REFERENCE_TYPE);
1173 gcc_assert (TREE_CODE (conv->type) != REFERENCE_TYPE);
1175 t = TREE_TYPE (type);
1177 /* [over.ics.rank]
1179 When a parameter of reference type binds directly
1180 (_dcl.init.ref_) to an argument expression, the implicit
1181 conversion sequence is the identity conversion, unless the
1182 argument expression has a type that is a derived class of the
1183 parameter type, in which case the implicit conversion sequence is
1184 a derived-to-base Conversion.
1186 If the parameter binds directly to the result of applying a
1187 conversion function to the argument expression, the implicit
1188 conversion sequence is a user-defined conversion sequence
1189 (_over.ics.user_), with the second standard conversion sequence
1190 either an identity conversion or, if the conversion function
1191 returns an entity of a type that is a derived class of the
1192 parameter type, a derived-to-base conversion. */
1193 if (!same_type_ignoring_top_level_qualifiers_p (t, conv->type))
1195 /* Represent the derived-to-base conversion. */
1196 conv = build_conv (ck_base, t, conv);
1197 /* We will actually be binding to the base-class subobject in
1198 the derived class, so we mark this conversion appropriately.
1199 That way, convert_like knows not to generate a temporary. */
1200 conv->need_temporary_p = false;
1202 return build_conv (ck_ref_bind, type, conv);
1205 /* Returns the conversion path from type FROM to reference type TO for
1206 purposes of reference binding. For lvalue binding, either pass a
1207 reference type to FROM or an lvalue expression to EXPR. If the
1208 reference will be bound to a temporary, NEED_TEMPORARY_P is set for
1209 the conversion returned. If C_CAST_P is true, this
1210 conversion is coming from a C-style cast. */
1212 static conversion *
1213 reference_binding (tree rto, tree rfrom, tree expr, bool c_cast_p, int flags)
1215 conversion *conv = NULL;
1216 tree to = TREE_TYPE (rto);
1217 tree from = rfrom;
1218 tree tfrom;
1219 bool related_p;
1220 bool compatible_p;
1221 cp_lvalue_kind is_lvalue = clk_none;
1223 if (TREE_CODE (to) == FUNCTION_TYPE && expr && type_unknown_p (expr))
1225 expr = instantiate_type (to, expr, tf_none);
1226 if (expr == error_mark_node)
1227 return NULL;
1228 from = TREE_TYPE (expr);
1231 if (TREE_CODE (from) == REFERENCE_TYPE)
1233 /* Anything with reference type is an lvalue. */
1234 is_lvalue = clk_ordinary;
1235 from = TREE_TYPE (from);
1238 if (expr && BRACE_ENCLOSED_INITIALIZER_P (expr))
1240 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
1241 conv = implicit_conversion (to, from, expr, c_cast_p,
1242 flags);
1243 if (!CLASS_TYPE_P (to)
1244 && CONSTRUCTOR_NELTS (expr) == 1)
1246 expr = CONSTRUCTOR_ELT (expr, 0)->value;
1247 if (error_operand_p (expr))
1248 return NULL;
1249 from = TREE_TYPE (expr);
1253 if (is_lvalue == clk_none && expr)
1254 is_lvalue = real_lvalue_p (expr);
1256 tfrom = from;
1257 if ((is_lvalue & clk_bitfield) != 0)
1258 tfrom = unlowered_expr_type (expr);
1260 /* Figure out whether or not the types are reference-related and
1261 reference compatible. We have do do this after stripping
1262 references from FROM. */
1263 related_p = reference_related_p (to, tfrom);
1264 /* If this is a C cast, first convert to an appropriately qualified
1265 type, so that we can later do a const_cast to the desired type. */
1266 if (related_p && c_cast_p
1267 && !at_least_as_qualified_p (to, tfrom))
1268 to = cp_build_qualified_type (to, cp_type_quals (tfrom));
1269 compatible_p = reference_compatible_p (to, tfrom);
1271 /* Directly bind reference when target expression's type is compatible with
1272 the reference and expression is an lvalue. In DR391, the wording in
1273 [8.5.3/5 dcl.init.ref] is changed to also require direct bindings for
1274 const and rvalue references to rvalues of compatible class type.
1275 We should also do direct bindings for non-class "rvalues" derived from
1276 rvalue references. */
1277 if (compatible_p
1278 && (is_lvalue
1279 || (((CP_TYPE_CONST_NON_VOLATILE_P (to)
1280 && !(flags & LOOKUP_NO_TEMP_BIND))
1281 || TYPE_REF_IS_RVALUE (rto))
1282 && (CLASS_TYPE_P (from) || (expr && lvalue_p (expr))))))
1284 /* [dcl.init.ref]
1286 If the initializer expression
1288 -- is an lvalue (but not an lvalue for a bit-field), and "cv1 T1"
1289 is reference-compatible with "cv2 T2,"
1291 the reference is bound directly to the initializer expression
1292 lvalue.
1294 [...]
1295 If the initializer expression is an rvalue, with T2 a class type,
1296 and "cv1 T1" is reference-compatible with "cv2 T2", the reference
1297 is bound to the object represented by the rvalue or to a sub-object
1298 within that object. */
1300 conv = build_identity_conv (tfrom, expr);
1301 conv = direct_reference_binding (rto, conv);
1303 if (flags & LOOKUP_PREFER_RVALUE)
1304 /* The top-level caller requested that we pretend that the lvalue
1305 be treated as an rvalue. */
1306 conv->rvaluedness_matches_p = TYPE_REF_IS_RVALUE (rto);
1307 else
1308 conv->rvaluedness_matches_p
1309 = (TYPE_REF_IS_RVALUE (rto) == !is_lvalue);
1311 if ((is_lvalue & clk_bitfield) != 0
1312 || ((is_lvalue & clk_packed) != 0 && !TYPE_PACKED (to)))
1313 /* For the purposes of overload resolution, we ignore the fact
1314 this expression is a bitfield or packed field. (In particular,
1315 [over.ics.ref] says specifically that a function with a
1316 non-const reference parameter is viable even if the
1317 argument is a bitfield.)
1319 However, when we actually call the function we must create
1320 a temporary to which to bind the reference. If the
1321 reference is volatile, or isn't const, then we cannot make
1322 a temporary, so we just issue an error when the conversion
1323 actually occurs. */
1324 conv->need_temporary_p = true;
1326 /* Don't allow binding of lvalues to rvalue references. */
1327 if (is_lvalue && TYPE_REF_IS_RVALUE (rto)
1328 && !(flags & LOOKUP_PREFER_RVALUE))
1329 conv->bad_p = true;
1331 return conv;
1333 /* [class.conv.fct] A conversion function is never used to convert a
1334 (possibly cv-qualified) object to the (possibly cv-qualified) same
1335 object type (or a reference to it), to a (possibly cv-qualified) base
1336 class of that type (or a reference to it).... */
1337 else if (CLASS_TYPE_P (from) && !related_p
1338 && !(flags & LOOKUP_NO_CONVERSION))
1340 /* [dcl.init.ref]
1342 If the initializer expression
1344 -- has a class type (i.e., T2 is a class type) can be
1345 implicitly converted to an lvalue of type "cv3 T3," where
1346 "cv1 T1" is reference-compatible with "cv3 T3". (this
1347 conversion is selected by enumerating the applicable
1348 conversion functions (_over.match.ref_) and choosing the
1349 best one through overload resolution. (_over.match_).
1351 the reference is bound to the lvalue result of the conversion
1352 in the second case. */
1353 conv = convert_class_to_reference (rto, from, expr, flags);
1354 if (conv)
1355 return conv;
1358 /* From this point on, we conceptually need temporaries, even if we
1359 elide them. Only the cases above are "direct bindings". */
1360 if (flags & LOOKUP_NO_TEMP_BIND)
1361 return NULL;
1363 /* [over.ics.rank]
1365 When a parameter of reference type is not bound directly to an
1366 argument expression, the conversion sequence is the one required
1367 to convert the argument expression to the underlying type of the
1368 reference according to _over.best.ics_. Conceptually, this
1369 conversion sequence corresponds to copy-initializing a temporary
1370 of the underlying type with the argument expression. Any
1371 difference in top-level cv-qualification is subsumed by the
1372 initialization itself and does not constitute a conversion. */
1374 /* [dcl.init.ref]
1376 Otherwise, the reference shall be to a non-volatile const type.
1378 Under C++0x, [8.5.3/5 dcl.init.ref] it may also be an rvalue reference */
1379 if (!CP_TYPE_CONST_NON_VOLATILE_P (to) && !TYPE_REF_IS_RVALUE (rto))
1380 return NULL;
1382 /* [dcl.init.ref]
1384 Otherwise, a temporary of type "cv1 T1" is created and
1385 initialized from the initializer expression using the rules for a
1386 non-reference copy initialization. If T1 is reference-related to
1387 T2, cv1 must be the same cv-qualification as, or greater
1388 cv-qualification than, cv2; otherwise, the program is ill-formed. */
1389 if (related_p && !at_least_as_qualified_p (to, from))
1390 return NULL;
1392 /* We're generating a temporary now, but don't bind any more in the
1393 conversion (specifically, don't slice the temporary returned by a
1394 conversion operator). */
1395 flags |= LOOKUP_NO_TEMP_BIND;
1397 /* Core issue 899: When [copy-]initializing a temporary to be bound
1398 to the first parameter of a copy constructor (12.8) called with
1399 a single argument in the context of direct-initialization,
1400 explicit conversion functions are also considered.
1402 So don't set LOOKUP_ONLYCONVERTING in that case. */
1403 if (!(flags & LOOKUP_COPY_PARM))
1404 flags |= LOOKUP_ONLYCONVERTING;
1406 if (!conv)
1407 conv = implicit_conversion (to, from, expr, c_cast_p,
1408 flags);
1409 if (!conv)
1410 return NULL;
1412 conv = build_conv (ck_ref_bind, rto, conv);
1413 /* This reference binding, unlike those above, requires the
1414 creation of a temporary. */
1415 conv->need_temporary_p = true;
1416 conv->rvaluedness_matches_p = TYPE_REF_IS_RVALUE (rto);
1418 return conv;
1421 /* Returns the implicit conversion sequence (see [over.ics]) from type
1422 FROM to type TO. The optional expression EXPR may affect the
1423 conversion. FLAGS are the usual overloading flags. If C_CAST_P is
1424 true, this conversion is coming from a C-style cast. */
1426 static conversion *
1427 implicit_conversion (tree to, tree from, tree expr, bool c_cast_p,
1428 int flags)
1430 conversion *conv;
1432 if (from == error_mark_node || to == error_mark_node
1433 || expr == error_mark_node)
1434 return NULL;
1436 if (TREE_CODE (to) == REFERENCE_TYPE)
1437 conv = reference_binding (to, from, expr, c_cast_p, flags);
1438 else
1439 conv = standard_conversion (to, from, expr, c_cast_p, flags);
1441 if (conv)
1442 return conv;
1444 if (expr && BRACE_ENCLOSED_INITIALIZER_P (expr))
1446 if (is_std_init_list (to))
1447 return build_list_conv (to, expr, flags);
1449 /* Allow conversion from an initializer-list with one element to a
1450 scalar type. */
1451 if (SCALAR_TYPE_P (to))
1453 int nelts = CONSTRUCTOR_NELTS (expr);
1454 tree elt;
1456 if (nelts == 0)
1457 elt = integer_zero_node;
1458 else if (nelts == 1)
1459 elt = CONSTRUCTOR_ELT (expr, 0)->value;
1460 else
1461 elt = error_mark_node;
1463 conv = implicit_conversion (to, TREE_TYPE (elt), elt,
1464 c_cast_p, flags);
1465 if (conv)
1467 conv->check_narrowing = true;
1468 if (BRACE_ENCLOSED_INITIALIZER_P (elt))
1469 /* Too many levels of braces, i.e. '{{1}}'. */
1470 conv->bad_p = true;
1471 return conv;
1476 if (expr != NULL_TREE
1477 && (MAYBE_CLASS_TYPE_P (from)
1478 || MAYBE_CLASS_TYPE_P (to))
1479 && (flags & LOOKUP_NO_CONVERSION) == 0)
1481 struct z_candidate *cand;
1482 int convflags = (flags & (LOOKUP_NO_TEMP_BIND|LOOKUP_ONLYCONVERTING
1483 |LOOKUP_NO_NARROWING));
1485 if (CLASS_TYPE_P (to)
1486 && !CLASSTYPE_NON_AGGREGATE (complete_type (to))
1487 && BRACE_ENCLOSED_INITIALIZER_P (expr))
1488 return build_aggr_conv (to, expr, flags);
1490 cand = build_user_type_conversion_1 (to, expr, convflags);
1491 if (cand)
1492 conv = cand->second_conv;
1494 /* We used to try to bind a reference to a temporary here, but that
1495 is now handled after the recursive call to this function at the end
1496 of reference_binding. */
1497 return conv;
1500 return NULL;
1503 /* Add a new entry to the list of candidates. Used by the add_*_candidate
1504 functions. ARGS will not be changed until a single candidate is
1505 selected. */
1507 static struct z_candidate *
1508 add_candidate (struct z_candidate **candidates,
1509 tree fn, tree first_arg, const VEC(tree,gc) *args,
1510 size_t num_convs, conversion **convs,
1511 tree access_path, tree conversion_path,
1512 int viable)
1514 struct z_candidate *cand = (struct z_candidate *)
1515 conversion_obstack_alloc (sizeof (struct z_candidate));
1517 cand->fn = fn;
1518 cand->first_arg = first_arg;
1519 cand->args = args;
1520 cand->convs = convs;
1521 cand->num_convs = num_convs;
1522 cand->access_path = access_path;
1523 cand->conversion_path = conversion_path;
1524 cand->viable = viable;
1525 cand->next = *candidates;
1526 *candidates = cand;
1528 return cand;
1531 /* Create an overload candidate for the function or method FN called
1532 with the argument list FIRST_ARG/ARGS and add it to CANDIDATES.
1533 FLAGS is passed on to implicit_conversion.
1535 This does not change ARGS.
1537 CTYPE, if non-NULL, is the type we want to pretend this function
1538 comes from for purposes of overload resolution. */
1540 static struct z_candidate *
1541 add_function_candidate (struct z_candidate **candidates,
1542 tree fn, tree ctype, tree first_arg,
1543 const VEC(tree,gc) *args, tree access_path,
1544 tree conversion_path, int flags)
1546 tree parmlist = TYPE_ARG_TYPES (TREE_TYPE (fn));
1547 int i, len;
1548 conversion **convs;
1549 tree parmnode;
1550 tree orig_first_arg = first_arg;
1551 int skip;
1552 int viable = 1;
1554 /* At this point we should not see any functions which haven't been
1555 explicitly declared, except for friend functions which will have
1556 been found using argument dependent lookup. */
1557 gcc_assert (!DECL_ANTICIPATED (fn) || DECL_HIDDEN_FRIEND_P (fn));
1559 /* The `this', `in_chrg' and VTT arguments to constructors are not
1560 considered in overload resolution. */
1561 if (DECL_CONSTRUCTOR_P (fn))
1563 parmlist = skip_artificial_parms_for (fn, parmlist);
1564 skip = num_artificial_parms_for (fn);
1565 if (skip > 0 && first_arg != NULL_TREE)
1567 --skip;
1568 first_arg = NULL_TREE;
1571 else
1572 skip = 0;
1574 len = VEC_length (tree, args) - skip + (first_arg != NULL_TREE ? 1 : 0);
1575 convs = alloc_conversions (len);
1577 /* 13.3.2 - Viable functions [over.match.viable]
1578 First, to be a viable function, a candidate function shall have enough
1579 parameters to agree in number with the arguments in the list.
1581 We need to check this first; otherwise, checking the ICSes might cause
1582 us to produce an ill-formed template instantiation. */
1584 parmnode = parmlist;
1585 for (i = 0; i < len; ++i)
1587 if (parmnode == NULL_TREE || parmnode == void_list_node)
1588 break;
1589 parmnode = TREE_CHAIN (parmnode);
1592 if (i < len && parmnode)
1593 viable = 0;
1595 /* Make sure there are default args for the rest of the parms. */
1596 else if (!sufficient_parms_p (parmnode))
1597 viable = 0;
1599 if (! viable)
1600 goto out;
1602 /* Second, for F to be a viable function, there shall exist for each
1603 argument an implicit conversion sequence that converts that argument
1604 to the corresponding parameter of F. */
1606 parmnode = parmlist;
1608 for (i = 0; i < len; ++i)
1610 tree arg, argtype;
1611 conversion *t;
1612 int is_this;
1614 if (parmnode == void_list_node)
1615 break;
1617 if (i == 0 && first_arg != NULL_TREE)
1618 arg = first_arg;
1619 else
1620 arg = VEC_index (tree, args,
1621 i + skip - (first_arg != NULL_TREE ? 1 : 0));
1622 argtype = lvalue_type (arg);
1624 is_this = (i == 0 && DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
1625 && ! DECL_CONSTRUCTOR_P (fn));
1627 if (parmnode)
1629 tree parmtype = TREE_VALUE (parmnode);
1630 int lflags = flags;
1632 parmnode = TREE_CHAIN (parmnode);
1634 /* The type of the implicit object parameter ('this') for
1635 overload resolution is not always the same as for the
1636 function itself; conversion functions are considered to
1637 be members of the class being converted, and functions
1638 introduced by a using-declaration are considered to be
1639 members of the class that uses them.
1641 Since build_over_call ignores the ICS for the `this'
1642 parameter, we can just change the parm type. */
1643 if (ctype && is_this)
1645 parmtype = cp_build_qualified_type
1646 (ctype, cp_type_quals (TREE_TYPE (parmtype)));
1647 parmtype = build_pointer_type (parmtype);
1650 /* Core issue 899: When [copy-]initializing a temporary to be bound
1651 to the first parameter of a copy constructor (12.8) called with
1652 a single argument in the context of direct-initialization,
1653 explicit conversion functions are also considered.
1655 So set LOOKUP_COPY_PARM to let reference_binding know that
1656 it's being called in that context. We generalize the above
1657 to handle move constructors and template constructors as well;
1658 the standardese should soon be updated similarly. */
1659 if (ctype && i == 0 && (len-skip == 1)
1660 && !(flags & LOOKUP_ONLYCONVERTING)
1661 && DECL_CONSTRUCTOR_P (fn)
1662 && parmtype != error_mark_node
1663 && (same_type_ignoring_top_level_qualifiers_p
1664 (non_reference (parmtype), ctype)))
1666 lflags |= LOOKUP_COPY_PARM;
1667 /* We allow user-defined conversions within init-lists, but
1668 not for the copy constructor. */
1669 if (flags & LOOKUP_NO_COPY_CTOR_CONVERSION)
1670 lflags |= LOOKUP_NO_CONVERSION;
1672 else
1673 lflags |= LOOKUP_ONLYCONVERTING;
1675 t = implicit_conversion (parmtype, argtype, arg,
1676 /*c_cast_p=*/false, lflags);
1678 else
1680 t = build_identity_conv (argtype, arg);
1681 t->ellipsis_p = true;
1684 if (t && is_this)
1685 t->this_p = true;
1687 convs[i] = t;
1688 if (! t)
1690 viable = 0;
1691 break;
1694 if (t->bad_p)
1695 viable = -1;
1698 out:
1699 return add_candidate (candidates, fn, orig_first_arg, args, len, convs,
1700 access_path, conversion_path, viable);
1703 /* Create an overload candidate for the conversion function FN which will
1704 be invoked for expression OBJ, producing a pointer-to-function which
1705 will in turn be called with the argument list FIRST_ARG/ARGLIST,
1706 and add it to CANDIDATES. This does not change ARGLIST. FLAGS is
1707 passed on to implicit_conversion.
1709 Actually, we don't really care about FN; we care about the type it
1710 converts to. There may be multiple conversion functions that will
1711 convert to that type, and we rely on build_user_type_conversion_1 to
1712 choose the best one; so when we create our candidate, we record the type
1713 instead of the function. */
1715 static struct z_candidate *
1716 add_conv_candidate (struct z_candidate **candidates, tree fn, tree obj,
1717 tree first_arg, const VEC(tree,gc) *arglist,
1718 tree access_path, tree conversion_path)
1720 tree totype = TREE_TYPE (TREE_TYPE (fn));
1721 int i, len, viable, flags;
1722 tree parmlist, parmnode;
1723 conversion **convs;
1725 for (parmlist = totype; TREE_CODE (parmlist) != FUNCTION_TYPE; )
1726 parmlist = TREE_TYPE (parmlist);
1727 parmlist = TYPE_ARG_TYPES (parmlist);
1729 len = VEC_length (tree, arglist) + (first_arg != NULL_TREE ? 1 : 0) + 1;
1730 convs = alloc_conversions (len);
1731 parmnode = parmlist;
1732 viable = 1;
1733 flags = LOOKUP_IMPLICIT;
1735 /* Don't bother looking up the same type twice. */
1736 if (*candidates && (*candidates)->fn == totype)
1737 return NULL;
1739 for (i = 0; i < len; ++i)
1741 tree arg, argtype;
1742 conversion *t;
1744 if (i == 0)
1745 arg = obj;
1746 else if (i == 1 && first_arg != NULL_TREE)
1747 arg = first_arg;
1748 else
1749 arg = VEC_index (tree, arglist,
1750 i - (first_arg != NULL_TREE ? 1 : 0) - 1);
1751 argtype = lvalue_type (arg);
1753 if (i == 0)
1754 t = implicit_conversion (totype, argtype, arg, /*c_cast_p=*/false,
1755 flags);
1756 else if (parmnode == void_list_node)
1757 break;
1758 else if (parmnode)
1759 t = implicit_conversion (TREE_VALUE (parmnode), argtype, arg,
1760 /*c_cast_p=*/false, flags);
1761 else
1763 t = build_identity_conv (argtype, arg);
1764 t->ellipsis_p = true;
1767 convs[i] = t;
1768 if (! t)
1769 break;
1771 if (t->bad_p)
1772 viable = -1;
1774 if (i == 0)
1775 continue;
1777 if (parmnode)
1778 parmnode = TREE_CHAIN (parmnode);
1781 if (i < len)
1782 viable = 0;
1784 if (!sufficient_parms_p (parmnode))
1785 viable = 0;
1787 return add_candidate (candidates, totype, first_arg, arglist, len, convs,
1788 access_path, conversion_path, viable);
1791 static void
1792 build_builtin_candidate (struct z_candidate **candidates, tree fnname,
1793 tree type1, tree type2, tree *args, tree *argtypes,
1794 int flags)
1796 conversion *t;
1797 conversion **convs;
1798 size_t num_convs;
1799 int viable = 1, i;
1800 tree types[2];
1802 types[0] = type1;
1803 types[1] = type2;
1805 num_convs = args[2] ? 3 : (args[1] ? 2 : 1);
1806 convs = alloc_conversions (num_convs);
1808 /* TRUTH_*_EXPR do "contextual conversion to bool", which means explicit
1809 conversion ops are allowed. We handle that here by just checking for
1810 boolean_type_node because other operators don't ask for it. COND_EXPR
1811 also does contextual conversion to bool for the first operand, but we
1812 handle that in build_conditional_expr, and type1 here is operand 2. */
1813 if (type1 != boolean_type_node)
1814 flags |= LOOKUP_ONLYCONVERTING;
1816 for (i = 0; i < 2; ++i)
1818 if (! args[i])
1819 break;
1821 t = implicit_conversion (types[i], argtypes[i], args[i],
1822 /*c_cast_p=*/false, flags);
1823 if (! t)
1825 viable = 0;
1826 /* We need something for printing the candidate. */
1827 t = build_identity_conv (types[i], NULL_TREE);
1829 else if (t->bad_p)
1830 viable = 0;
1831 convs[i] = t;
1834 /* For COND_EXPR we rearranged the arguments; undo that now. */
1835 if (args[2])
1837 convs[2] = convs[1];
1838 convs[1] = convs[0];
1839 t = implicit_conversion (boolean_type_node, argtypes[2], args[2],
1840 /*c_cast_p=*/false, flags);
1841 if (t)
1842 convs[0] = t;
1843 else
1844 viable = 0;
1847 add_candidate (candidates, fnname, /*first_arg=*/NULL_TREE, /*args=*/NULL,
1848 num_convs, convs,
1849 /*access_path=*/NULL_TREE,
1850 /*conversion_path=*/NULL_TREE,
1851 viable);
1854 static bool
1855 is_complete (tree t)
1857 return COMPLETE_TYPE_P (complete_type (t));
1860 /* Returns nonzero if TYPE is a promoted arithmetic type. */
1862 static bool
1863 promoted_arithmetic_type_p (tree type)
1865 /* [over.built]
1867 In this section, the term promoted integral type is used to refer
1868 to those integral types which are preserved by integral promotion
1869 (including e.g. int and long but excluding e.g. char).
1870 Similarly, the term promoted arithmetic type refers to promoted
1871 integral types plus floating types. */
1872 return ((CP_INTEGRAL_TYPE_P (type)
1873 && same_type_p (type_promotes_to (type), type))
1874 || TREE_CODE (type) == REAL_TYPE);
1877 /* Create any builtin operator overload candidates for the operator in
1878 question given the converted operand types TYPE1 and TYPE2. The other
1879 args are passed through from add_builtin_candidates to
1880 build_builtin_candidate.
1882 TYPE1 and TYPE2 may not be permissible, and we must filter them.
1883 If CODE is requires candidates operands of the same type of the kind
1884 of which TYPE1 and TYPE2 are, we add both candidates
1885 CODE (TYPE1, TYPE1) and CODE (TYPE2, TYPE2). */
1887 static void
1888 add_builtin_candidate (struct z_candidate **candidates, enum tree_code code,
1889 enum tree_code code2, tree fnname, tree type1,
1890 tree type2, tree *args, tree *argtypes, int flags)
1892 switch (code)
1894 case POSTINCREMENT_EXPR:
1895 case POSTDECREMENT_EXPR:
1896 args[1] = integer_zero_node;
1897 type2 = integer_type_node;
1898 break;
1899 default:
1900 break;
1903 switch (code)
1906 /* 4 For every pair T, VQ), where T is an arithmetic or enumeration type,
1907 and VQ is either volatile or empty, there exist candidate operator
1908 functions of the form
1909 VQ T& operator++(VQ T&);
1910 T operator++(VQ T&, int);
1911 5 For every pair T, VQ), where T is an enumeration type or an arithmetic
1912 type other than bool, and VQ is either volatile or empty, there exist
1913 candidate operator functions of the form
1914 VQ T& operator--(VQ T&);
1915 T operator--(VQ T&, int);
1916 6 For every pair T, VQ), where T is a cv-qualified or cv-unqualified
1917 complete object type, and VQ is either volatile or empty, there exist
1918 candidate operator functions of the form
1919 T*VQ& operator++(T*VQ&);
1920 T*VQ& operator--(T*VQ&);
1921 T* operator++(T*VQ&, int);
1922 T* operator--(T*VQ&, int); */
1924 case POSTDECREMENT_EXPR:
1925 case PREDECREMENT_EXPR:
1926 if (TREE_CODE (type1) == BOOLEAN_TYPE)
1927 return;
1928 case POSTINCREMENT_EXPR:
1929 case PREINCREMENT_EXPR:
1930 if (ARITHMETIC_TYPE_P (type1) || TYPE_PTROB_P (type1))
1932 type1 = build_reference_type (type1);
1933 break;
1935 return;
1937 /* 7 For every cv-qualified or cv-unqualified complete object type T, there
1938 exist candidate operator functions of the form
1940 T& operator*(T*);
1942 8 For every function type T, there exist candidate operator functions of
1943 the form
1944 T& operator*(T*); */
1946 case INDIRECT_REF:
1947 if (TREE_CODE (type1) == POINTER_TYPE
1948 && (TYPE_PTROB_P (type1)
1949 || TREE_CODE (TREE_TYPE (type1)) == FUNCTION_TYPE))
1950 break;
1951 return;
1953 /* 9 For every type T, there exist candidate operator functions of the form
1954 T* operator+(T*);
1956 10For every promoted arithmetic type T, there exist candidate operator
1957 functions of the form
1958 T operator+(T);
1959 T operator-(T); */
1961 case UNARY_PLUS_EXPR: /* unary + */
1962 if (TREE_CODE (type1) == POINTER_TYPE)
1963 break;
1964 case NEGATE_EXPR:
1965 if (ARITHMETIC_TYPE_P (type1))
1966 break;
1967 return;
1969 /* 11For every promoted integral type T, there exist candidate operator
1970 functions of the form
1971 T operator~(T); */
1973 case BIT_NOT_EXPR:
1974 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1))
1975 break;
1976 return;
1978 /* 12For every quintuple C1, C2, T, CV1, CV2), where C2 is a class type, C1
1979 is the same type as C2 or is a derived class of C2, T is a complete
1980 object type or a function type, and CV1 and CV2 are cv-qualifier-seqs,
1981 there exist candidate operator functions of the form
1982 CV12 T& operator->*(CV1 C1*, CV2 T C2::*);
1983 where CV12 is the union of CV1 and CV2. */
1985 case MEMBER_REF:
1986 if (TREE_CODE (type1) == POINTER_TYPE
1987 && TYPE_PTR_TO_MEMBER_P (type2))
1989 tree c1 = TREE_TYPE (type1);
1990 tree c2 = TYPE_PTRMEM_CLASS_TYPE (type2);
1992 if (MAYBE_CLASS_TYPE_P (c1) && DERIVED_FROM_P (c2, c1)
1993 && (TYPE_PTRMEMFUNC_P (type2)
1994 || is_complete (TYPE_PTRMEM_POINTED_TO_TYPE (type2))))
1995 break;
1997 return;
1999 /* 13For every pair of promoted arithmetic types L and R, there exist can-
2000 didate operator functions of the form
2001 LR operator*(L, R);
2002 LR operator/(L, R);
2003 LR operator+(L, R);
2004 LR operator-(L, R);
2005 bool operator<(L, R);
2006 bool operator>(L, R);
2007 bool operator<=(L, R);
2008 bool operator>=(L, R);
2009 bool operator==(L, R);
2010 bool operator!=(L, R);
2011 where LR is the result of the usual arithmetic conversions between
2012 types L and R.
2014 14For every pair of types T and I, where T is a cv-qualified or cv-
2015 unqualified complete object type and I is a promoted integral type,
2016 there exist candidate operator functions of the form
2017 T* operator+(T*, I);
2018 T& operator[](T*, I);
2019 T* operator-(T*, I);
2020 T* operator+(I, T*);
2021 T& operator[](I, T*);
2023 15For every T, where T is a pointer to complete object type, there exist
2024 candidate operator functions of the form112)
2025 ptrdiff_t operator-(T, T);
2027 16For every pointer or enumeration type T, there exist candidate operator
2028 functions of the form
2029 bool operator<(T, T);
2030 bool operator>(T, T);
2031 bool operator<=(T, T);
2032 bool operator>=(T, T);
2033 bool operator==(T, T);
2034 bool operator!=(T, T);
2036 17For every pointer to member type T, there exist candidate operator
2037 functions of the form
2038 bool operator==(T, T);
2039 bool operator!=(T, T); */
2041 case MINUS_EXPR:
2042 if (TYPE_PTROB_P (type1) && TYPE_PTROB_P (type2))
2043 break;
2044 if (TYPE_PTROB_P (type1)
2045 && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2047 type2 = ptrdiff_type_node;
2048 break;
2050 case MULT_EXPR:
2051 case TRUNC_DIV_EXPR:
2052 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2053 break;
2054 return;
2056 case EQ_EXPR:
2057 case NE_EXPR:
2058 if ((TYPE_PTRMEMFUNC_P (type1) && TYPE_PTRMEMFUNC_P (type2))
2059 || (TYPE_PTRMEM_P (type1) && TYPE_PTRMEM_P (type2)))
2060 break;
2061 if (TYPE_PTR_TO_MEMBER_P (type1) && null_ptr_cst_p (args[1]))
2063 type2 = type1;
2064 break;
2066 if (TYPE_PTR_TO_MEMBER_P (type2) && null_ptr_cst_p (args[0]))
2068 type1 = type2;
2069 break;
2071 /* Fall through. */
2072 case LT_EXPR:
2073 case GT_EXPR:
2074 case LE_EXPR:
2075 case GE_EXPR:
2076 case MAX_EXPR:
2077 case MIN_EXPR:
2078 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2079 break;
2080 if (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
2081 break;
2082 if (TREE_CODE (type1) == ENUMERAL_TYPE
2083 && TREE_CODE (type2) == ENUMERAL_TYPE)
2084 break;
2085 if (TYPE_PTR_P (type1)
2086 && null_ptr_cst_p (args[1])
2087 && !uses_template_parms (type1))
2089 type2 = type1;
2090 break;
2092 if (null_ptr_cst_p (args[0])
2093 && TYPE_PTR_P (type2)
2094 && !uses_template_parms (type2))
2096 type1 = type2;
2097 break;
2099 return;
2101 case PLUS_EXPR:
2102 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2103 break;
2104 case ARRAY_REF:
2105 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1) && TYPE_PTROB_P (type2))
2107 type1 = ptrdiff_type_node;
2108 break;
2110 if (TYPE_PTROB_P (type1) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2112 type2 = ptrdiff_type_node;
2113 break;
2115 return;
2117 /* 18For every pair of promoted integral types L and R, there exist candi-
2118 date operator functions of the form
2119 LR operator%(L, R);
2120 LR operator&(L, R);
2121 LR operator^(L, R);
2122 LR operator|(L, R);
2123 L operator<<(L, R);
2124 L operator>>(L, R);
2125 where LR is the result of the usual arithmetic conversions between
2126 types L and R. */
2128 case TRUNC_MOD_EXPR:
2129 case BIT_AND_EXPR:
2130 case BIT_IOR_EXPR:
2131 case BIT_XOR_EXPR:
2132 case LSHIFT_EXPR:
2133 case RSHIFT_EXPR:
2134 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2135 break;
2136 return;
2138 /* 19For every triple L, VQ, R), where L is an arithmetic or enumeration
2139 type, VQ is either volatile or empty, and R is a promoted arithmetic
2140 type, there exist candidate operator functions of the form
2141 VQ L& operator=(VQ L&, R);
2142 VQ L& operator*=(VQ L&, R);
2143 VQ L& operator/=(VQ L&, R);
2144 VQ L& operator+=(VQ L&, R);
2145 VQ L& operator-=(VQ L&, R);
2147 20For every pair T, VQ), where T is any type and VQ is either volatile
2148 or empty, there exist candidate operator functions of the form
2149 T*VQ& operator=(T*VQ&, T*);
2151 21For every pair T, VQ), where T is a pointer to member type and VQ is
2152 either volatile or empty, there exist candidate operator functions of
2153 the form
2154 VQ T& operator=(VQ T&, T);
2156 22For every triple T, VQ, I), where T is a cv-qualified or cv-
2157 unqualified complete object type, VQ is either volatile or empty, and
2158 I is a promoted integral type, there exist candidate operator func-
2159 tions of the form
2160 T*VQ& operator+=(T*VQ&, I);
2161 T*VQ& operator-=(T*VQ&, I);
2163 23For every triple L, VQ, R), where L is an integral or enumeration
2164 type, VQ is either volatile or empty, and R is a promoted integral
2165 type, there exist candidate operator functions of the form
2167 VQ L& operator%=(VQ L&, R);
2168 VQ L& operator<<=(VQ L&, R);
2169 VQ L& operator>>=(VQ L&, R);
2170 VQ L& operator&=(VQ L&, R);
2171 VQ L& operator^=(VQ L&, R);
2172 VQ L& operator|=(VQ L&, R); */
2174 case MODIFY_EXPR:
2175 switch (code2)
2177 case PLUS_EXPR:
2178 case MINUS_EXPR:
2179 if (TYPE_PTROB_P (type1) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2181 type2 = ptrdiff_type_node;
2182 break;
2184 case MULT_EXPR:
2185 case TRUNC_DIV_EXPR:
2186 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2187 break;
2188 return;
2190 case TRUNC_MOD_EXPR:
2191 case BIT_AND_EXPR:
2192 case BIT_IOR_EXPR:
2193 case BIT_XOR_EXPR:
2194 case LSHIFT_EXPR:
2195 case RSHIFT_EXPR:
2196 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2197 break;
2198 return;
2200 case NOP_EXPR:
2201 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2202 break;
2203 if ((TYPE_PTRMEMFUNC_P (type1) && TYPE_PTRMEMFUNC_P (type2))
2204 || (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
2205 || (TYPE_PTRMEM_P (type1) && TYPE_PTRMEM_P (type2))
2206 || ((TYPE_PTRMEMFUNC_P (type1)
2207 || TREE_CODE (type1) == POINTER_TYPE)
2208 && null_ptr_cst_p (args[1])))
2210 type2 = type1;
2211 break;
2213 return;
2215 default:
2216 gcc_unreachable ();
2218 type1 = build_reference_type (type1);
2219 break;
2221 case COND_EXPR:
2222 /* [over.built]
2224 For every pair of promoted arithmetic types L and R, there
2225 exist candidate operator functions of the form
2227 LR operator?(bool, L, R);
2229 where LR is the result of the usual arithmetic conversions
2230 between types L and R.
2232 For every type T, where T is a pointer or pointer-to-member
2233 type, there exist candidate operator functions of the form T
2234 operator?(bool, T, T); */
2236 if (promoted_arithmetic_type_p (type1)
2237 && promoted_arithmetic_type_p (type2))
2238 /* That's OK. */
2239 break;
2241 /* Otherwise, the types should be pointers. */
2242 if (!(TYPE_PTR_P (type1) || TYPE_PTR_TO_MEMBER_P (type1))
2243 || !(TYPE_PTR_P (type2) || TYPE_PTR_TO_MEMBER_P (type2)))
2244 return;
2246 /* We don't check that the two types are the same; the logic
2247 below will actually create two candidates; one in which both
2248 parameter types are TYPE1, and one in which both parameter
2249 types are TYPE2. */
2250 break;
2252 default:
2253 gcc_unreachable ();
2256 /* If we're dealing with two pointer types or two enumeral types,
2257 we need candidates for both of them. */
2258 if (type2 && !same_type_p (type1, type2)
2259 && TREE_CODE (type1) == TREE_CODE (type2)
2260 && (TREE_CODE (type1) == REFERENCE_TYPE
2261 || (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
2262 || (TYPE_PTRMEM_P (type1) && TYPE_PTRMEM_P (type2))
2263 || TYPE_PTRMEMFUNC_P (type1)
2264 || MAYBE_CLASS_TYPE_P (type1)
2265 || TREE_CODE (type1) == ENUMERAL_TYPE))
2267 build_builtin_candidate
2268 (candidates, fnname, type1, type1, args, argtypes, flags);
2269 build_builtin_candidate
2270 (candidates, fnname, type2, type2, args, argtypes, flags);
2271 return;
2274 build_builtin_candidate
2275 (candidates, fnname, type1, type2, args, argtypes, flags);
2278 tree
2279 type_decays_to (tree type)
2281 if (TREE_CODE (type) == ARRAY_TYPE)
2282 return build_pointer_type (TREE_TYPE (type));
2283 if (TREE_CODE (type) == FUNCTION_TYPE)
2284 return build_pointer_type (type);
2285 if (!MAYBE_CLASS_TYPE_P (type))
2286 type = cv_unqualified (type);
2287 return type;
2290 /* There are three conditions of builtin candidates:
2292 1) bool-taking candidates. These are the same regardless of the input.
2293 2) pointer-pair taking candidates. These are generated for each type
2294 one of the input types converts to.
2295 3) arithmetic candidates. According to the standard, we should generate
2296 all of these, but I'm trying not to...
2298 Here we generate a superset of the possible candidates for this particular
2299 case. That is a subset of the full set the standard defines, plus some
2300 other cases which the standard disallows. add_builtin_candidate will
2301 filter out the invalid set. */
2303 static void
2304 add_builtin_candidates (struct z_candidate **candidates, enum tree_code code,
2305 enum tree_code code2, tree fnname, tree *args,
2306 int flags)
2308 int ref1, i;
2309 int enum_p = 0;
2310 tree type, argtypes[3];
2311 /* TYPES[i] is the set of possible builtin-operator parameter types
2312 we will consider for the Ith argument. These are represented as
2313 a TREE_LIST; the TREE_VALUE of each node is the potential
2314 parameter type. */
2315 tree types[2];
2317 for (i = 0; i < 3; ++i)
2319 if (args[i])
2320 argtypes[i] = unlowered_expr_type (args[i]);
2321 else
2322 argtypes[i] = NULL_TREE;
2325 switch (code)
2327 /* 4 For every pair T, VQ), where T is an arithmetic or enumeration type,
2328 and VQ is either volatile or empty, there exist candidate operator
2329 functions of the form
2330 VQ T& operator++(VQ T&); */
2332 case POSTINCREMENT_EXPR:
2333 case PREINCREMENT_EXPR:
2334 case POSTDECREMENT_EXPR:
2335 case PREDECREMENT_EXPR:
2336 case MODIFY_EXPR:
2337 ref1 = 1;
2338 break;
2340 /* 24There also exist candidate operator functions of the form
2341 bool operator!(bool);
2342 bool operator&&(bool, bool);
2343 bool operator||(bool, bool); */
2345 case TRUTH_NOT_EXPR:
2346 build_builtin_candidate
2347 (candidates, fnname, boolean_type_node,
2348 NULL_TREE, args, argtypes, flags);
2349 return;
2351 case TRUTH_ORIF_EXPR:
2352 case TRUTH_ANDIF_EXPR:
2353 build_builtin_candidate
2354 (candidates, fnname, boolean_type_node,
2355 boolean_type_node, args, argtypes, flags);
2356 return;
2358 case ADDR_EXPR:
2359 case COMPOUND_EXPR:
2360 case COMPONENT_REF:
2361 return;
2363 case COND_EXPR:
2364 case EQ_EXPR:
2365 case NE_EXPR:
2366 case LT_EXPR:
2367 case LE_EXPR:
2368 case GT_EXPR:
2369 case GE_EXPR:
2370 enum_p = 1;
2371 /* Fall through. */
2373 default:
2374 ref1 = 0;
2377 types[0] = types[1] = NULL_TREE;
2379 for (i = 0; i < 2; ++i)
2381 if (! args[i])
2383 else if (MAYBE_CLASS_TYPE_P (argtypes[i]))
2385 tree convs;
2387 if (i == 0 && code == MODIFY_EXPR && code2 == NOP_EXPR)
2388 return;
2390 convs = lookup_conversions (argtypes[i],
2391 /*lookup_template_convs_p=*/false);
2393 if (code == COND_EXPR)
2395 if (real_lvalue_p (args[i]))
2396 types[i] = tree_cons
2397 (NULL_TREE, build_reference_type (argtypes[i]), types[i]);
2399 types[i] = tree_cons
2400 (NULL_TREE, TYPE_MAIN_VARIANT (argtypes[i]), types[i]);
2403 else if (! convs)
2404 return;
2406 for (; convs; convs = TREE_CHAIN (convs))
2408 type = TREE_TYPE (convs);
2410 if (i == 0 && ref1
2411 && (TREE_CODE (type) != REFERENCE_TYPE
2412 || CP_TYPE_CONST_P (TREE_TYPE (type))))
2413 continue;
2415 if (code == COND_EXPR && TREE_CODE (type) == REFERENCE_TYPE)
2416 types[i] = tree_cons (NULL_TREE, type, types[i]);
2418 type = non_reference (type);
2419 if (i != 0 || ! ref1)
2421 type = TYPE_MAIN_VARIANT (type_decays_to (type));
2422 if (enum_p && TREE_CODE (type) == ENUMERAL_TYPE)
2423 types[i] = tree_cons (NULL_TREE, type, types[i]);
2424 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
2425 type = type_promotes_to (type);
2428 if (! value_member (type, types[i]))
2429 types[i] = tree_cons (NULL_TREE, type, types[i]);
2432 else
2434 if (code == COND_EXPR && real_lvalue_p (args[i]))
2435 types[i] = tree_cons
2436 (NULL_TREE, build_reference_type (argtypes[i]), types[i]);
2437 type = non_reference (argtypes[i]);
2438 if (i != 0 || ! ref1)
2440 type = TYPE_MAIN_VARIANT (type_decays_to (type));
2441 if (enum_p && UNSCOPED_ENUM_P (type))
2442 types[i] = tree_cons (NULL_TREE, type, types[i]);
2443 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
2444 type = type_promotes_to (type);
2446 types[i] = tree_cons (NULL_TREE, type, types[i]);
2450 /* Run through the possible parameter types of both arguments,
2451 creating candidates with those parameter types. */
2452 for (; types[0]; types[0] = TREE_CHAIN (types[0]))
2454 if (types[1])
2455 for (type = types[1]; type; type = TREE_CHAIN (type))
2456 add_builtin_candidate
2457 (candidates, code, code2, fnname, TREE_VALUE (types[0]),
2458 TREE_VALUE (type), args, argtypes, flags);
2459 else
2460 add_builtin_candidate
2461 (candidates, code, code2, fnname, TREE_VALUE (types[0]),
2462 NULL_TREE, args, argtypes, flags);
2467 /* If TMPL can be successfully instantiated as indicated by
2468 EXPLICIT_TARGS and ARGLIST, adds the instantiation to CANDIDATES.
2470 TMPL is the template. EXPLICIT_TARGS are any explicit template
2471 arguments. ARGLIST is the arguments provided at the call-site.
2472 This does not change ARGLIST. The RETURN_TYPE is the desired type
2473 for conversion operators. If OBJ is NULL_TREE, FLAGS and CTYPE are
2474 as for add_function_candidate. If an OBJ is supplied, FLAGS and
2475 CTYPE are ignored, and OBJ is as for add_conv_candidate. */
2477 static struct z_candidate*
2478 add_template_candidate_real (struct z_candidate **candidates, tree tmpl,
2479 tree ctype, tree explicit_targs, tree first_arg,
2480 const VEC(tree,gc) *arglist, tree return_type,
2481 tree access_path, tree conversion_path,
2482 int flags, tree obj, unification_kind_t strict)
2484 int ntparms = DECL_NTPARMS (tmpl);
2485 tree targs = make_tree_vec (ntparms);
2486 unsigned int len = VEC_length (tree, arglist);
2487 unsigned int nargs = (first_arg == NULL_TREE ? 0 : 1) + len;
2488 unsigned int skip_without_in_chrg = 0;
2489 tree first_arg_without_in_chrg = first_arg;
2490 tree *args_without_in_chrg;
2491 unsigned int nargs_without_in_chrg;
2492 unsigned int ia, ix;
2493 tree arg;
2494 struct z_candidate *cand;
2495 int i;
2496 tree fn;
2498 /* We don't do deduction on the in-charge parameter, the VTT
2499 parameter or 'this'. */
2500 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (tmpl))
2502 if (first_arg_without_in_chrg != NULL_TREE)
2503 first_arg_without_in_chrg = NULL_TREE;
2504 else
2505 ++skip_without_in_chrg;
2508 if ((DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (tmpl)
2509 || DECL_BASE_CONSTRUCTOR_P (tmpl))
2510 && CLASSTYPE_VBASECLASSES (DECL_CONTEXT (tmpl)))
2512 if (first_arg_without_in_chrg != NULL_TREE)
2513 first_arg_without_in_chrg = NULL_TREE;
2514 else
2515 ++skip_without_in_chrg;
2518 if (len < skip_without_in_chrg)
2519 return NULL;
2521 nargs_without_in_chrg = ((first_arg_without_in_chrg != NULL_TREE ? 1 : 0)
2522 + (len - skip_without_in_chrg));
2523 args_without_in_chrg = XALLOCAVEC (tree, nargs_without_in_chrg);
2524 ia = 0;
2525 if (first_arg_without_in_chrg != NULL_TREE)
2527 args_without_in_chrg[ia] = first_arg_without_in_chrg;
2528 ++ia;
2530 for (ix = skip_without_in_chrg;
2531 VEC_iterate (tree, arglist, ix, arg);
2532 ++ix)
2534 args_without_in_chrg[ia] = arg;
2535 ++ia;
2537 gcc_assert (ia == nargs_without_in_chrg);
2539 i = fn_type_unification (tmpl, explicit_targs, targs,
2540 args_without_in_chrg,
2541 nargs_without_in_chrg,
2542 return_type, strict, flags);
2544 if (i != 0)
2545 goto fail;
2547 fn = instantiate_template (tmpl, targs, tf_none);
2548 if (fn == error_mark_node)
2549 goto fail;
2551 /* In [class.copy]:
2553 A member function template is never instantiated to perform the
2554 copy of a class object to an object of its class type.
2556 It's a little unclear what this means; the standard explicitly
2557 does allow a template to be used to copy a class. For example,
2560 struct A {
2561 A(A&);
2562 template <class T> A(const T&);
2564 const A f ();
2565 void g () { A a (f ()); }
2567 the member template will be used to make the copy. The section
2568 quoted above appears in the paragraph that forbids constructors
2569 whose only parameter is (a possibly cv-qualified variant of) the
2570 class type, and a logical interpretation is that the intent was
2571 to forbid the instantiation of member templates which would then
2572 have that form. */
2573 if (DECL_CONSTRUCTOR_P (fn) && nargs == 2)
2575 tree arg_types = FUNCTION_FIRST_USER_PARMTYPE (fn);
2576 if (arg_types && same_type_p (TYPE_MAIN_VARIANT (TREE_VALUE (arg_types)),
2577 ctype))
2578 goto fail;
2581 if (obj != NULL_TREE)
2582 /* Aha, this is a conversion function. */
2583 cand = add_conv_candidate (candidates, fn, obj, first_arg, arglist,
2584 access_path, conversion_path);
2585 else
2586 cand = add_function_candidate (candidates, fn, ctype,
2587 first_arg, arglist, access_path,
2588 conversion_path, flags);
2589 if (DECL_TI_TEMPLATE (fn) != tmpl)
2590 /* This situation can occur if a member template of a template
2591 class is specialized. Then, instantiate_template might return
2592 an instantiation of the specialization, in which case the
2593 DECL_TI_TEMPLATE field will point at the original
2594 specialization. For example:
2596 template <class T> struct S { template <class U> void f(U);
2597 template <> void f(int) {}; };
2598 S<double> sd;
2599 sd.f(3);
2601 Here, TMPL will be template <class U> S<double>::f(U).
2602 And, instantiate template will give us the specialization
2603 template <> S<double>::f(int). But, the DECL_TI_TEMPLATE field
2604 for this will point at template <class T> template <> S<T>::f(int),
2605 so that we can find the definition. For the purposes of
2606 overload resolution, however, we want the original TMPL. */
2607 cand->template_decl = build_template_info (tmpl, targs);
2608 else
2609 cand->template_decl = DECL_TEMPLATE_INFO (fn);
2610 cand->explicit_targs = explicit_targs;
2612 return cand;
2613 fail:
2614 return add_candidate (candidates, tmpl, first_arg, arglist, nargs, NULL,
2615 access_path, conversion_path, 0);
2619 static struct z_candidate *
2620 add_template_candidate (struct z_candidate **candidates, tree tmpl, tree ctype,
2621 tree explicit_targs, tree first_arg,
2622 const VEC(tree,gc) *arglist, tree return_type,
2623 tree access_path, tree conversion_path, int flags,
2624 unification_kind_t strict)
2626 return
2627 add_template_candidate_real (candidates, tmpl, ctype,
2628 explicit_targs, first_arg, arglist,
2629 return_type, access_path, conversion_path,
2630 flags, NULL_TREE, strict);
2634 static struct z_candidate *
2635 add_template_conv_candidate (struct z_candidate **candidates, tree tmpl,
2636 tree obj, tree first_arg,
2637 const VEC(tree,gc) *arglist,
2638 tree return_type, tree access_path,
2639 tree conversion_path)
2641 return
2642 add_template_candidate_real (candidates, tmpl, NULL_TREE, NULL_TREE,
2643 first_arg, arglist, return_type, access_path,
2644 conversion_path, 0, obj, DEDUCE_CONV);
2647 /* The CANDS are the set of candidates that were considered for
2648 overload resolution. Return the set of viable candidates, or CANDS
2649 if none are viable. If any of the candidates were viable, set
2650 *ANY_VIABLE_P to true. STRICT_P is true if a candidate should be
2651 considered viable only if it is strictly viable. */
2653 static struct z_candidate*
2654 splice_viable (struct z_candidate *cands,
2655 bool strict_p,
2656 bool *any_viable_p)
2658 struct z_candidate *viable;
2659 struct z_candidate **last_viable;
2660 struct z_candidate **cand;
2662 viable = NULL;
2663 last_viable = &viable;
2664 *any_viable_p = false;
2666 cand = &cands;
2667 while (*cand)
2669 struct z_candidate *c = *cand;
2670 if (strict_p ? c->viable == 1 : c->viable)
2672 *last_viable = c;
2673 *cand = c->next;
2674 c->next = NULL;
2675 last_viable = &c->next;
2676 *any_viable_p = true;
2678 else
2679 cand = &c->next;
2682 return viable ? viable : cands;
2685 static bool
2686 any_strictly_viable (struct z_candidate *cands)
2688 for (; cands; cands = cands->next)
2689 if (cands->viable == 1)
2690 return true;
2691 return false;
2694 /* OBJ is being used in an expression like "OBJ.f (...)". In other
2695 words, it is about to become the "this" pointer for a member
2696 function call. Take the address of the object. */
2698 static tree
2699 build_this (tree obj)
2701 /* In a template, we are only concerned about the type of the
2702 expression, so we can take a shortcut. */
2703 if (processing_template_decl)
2704 return build_address (obj);
2706 return cp_build_unary_op (ADDR_EXPR, obj, 0, tf_warning_or_error);
2709 /* Returns true iff functions are equivalent. Equivalent functions are
2710 not '==' only if one is a function-local extern function or if
2711 both are extern "C". */
2713 static inline int
2714 equal_functions (tree fn1, tree fn2)
2716 if (TREE_CODE (fn1) != TREE_CODE (fn2))
2717 return 0;
2718 if (TREE_CODE (fn1) == TEMPLATE_DECL)
2719 return fn1 == fn2;
2720 if (DECL_LOCAL_FUNCTION_P (fn1) || DECL_LOCAL_FUNCTION_P (fn2)
2721 || DECL_EXTERN_C_FUNCTION_P (fn1))
2722 return decls_match (fn1, fn2);
2723 return fn1 == fn2;
2726 /* Print information about one overload candidate CANDIDATE. MSGSTR
2727 is the text to print before the candidate itself.
2729 NOTE: Unlike most diagnostic functions in GCC, MSGSTR is expected
2730 to have been run through gettext by the caller. This wart makes
2731 life simpler in print_z_candidates and for the translators. */
2733 static void
2734 print_z_candidate (const char *msgstr, struct z_candidate *candidate)
2736 if (TREE_CODE (candidate->fn) == IDENTIFIER_NODE)
2738 if (candidate->num_convs == 3)
2739 inform (input_location, "%s %D(%T, %T, %T) <built-in>", msgstr, candidate->fn,
2740 candidate->convs[0]->type,
2741 candidate->convs[1]->type,
2742 candidate->convs[2]->type);
2743 else if (candidate->num_convs == 2)
2744 inform (input_location, "%s %D(%T, %T) <built-in>", msgstr, candidate->fn,
2745 candidate->convs[0]->type,
2746 candidate->convs[1]->type);
2747 else
2748 inform (input_location, "%s %D(%T) <built-in>", msgstr, candidate->fn,
2749 candidate->convs[0]->type);
2751 else if (TYPE_P (candidate->fn))
2752 inform (input_location, "%s %T <conversion>", msgstr, candidate->fn);
2753 else if (candidate->viable == -1)
2754 inform (input_location, "%s %+#D <near match>", msgstr, candidate->fn);
2755 else if (DECL_DELETED_FN (STRIP_TEMPLATE (candidate->fn)))
2756 inform (input_location, "%s %+#D <deleted>", msgstr, candidate->fn);
2757 else
2758 inform (input_location, "%s %+#D", msgstr, candidate->fn);
2761 static void
2762 print_z_candidates (struct z_candidate *candidates)
2764 const char *str;
2765 struct z_candidate *cand1;
2766 struct z_candidate **cand2;
2767 char *spaces;
2769 if (!candidates)
2770 return;
2772 /* Remove non-viable deleted candidates. */
2773 cand1 = candidates;
2774 for (cand2 = &cand1; *cand2; )
2776 if (TREE_CODE ((*cand2)->fn) == FUNCTION_DECL
2777 && !(*cand2)->viable
2778 && DECL_DELETED_FN ((*cand2)->fn))
2779 *cand2 = (*cand2)->next;
2780 else
2781 cand2 = &(*cand2)->next;
2783 /* ...if there are any non-deleted ones. */
2784 if (cand1)
2785 candidates = cand1;
2787 /* There may be duplicates in the set of candidates. We put off
2788 checking this condition as long as possible, since we have no way
2789 to eliminate duplicates from a set of functions in less than n^2
2790 time. Now we are about to emit an error message, so it is more
2791 permissible to go slowly. */
2792 for (cand1 = candidates; cand1; cand1 = cand1->next)
2794 tree fn = cand1->fn;
2795 /* Skip builtin candidates and conversion functions. */
2796 if (!DECL_P (fn))
2797 continue;
2798 cand2 = &cand1->next;
2799 while (*cand2)
2801 if (DECL_P ((*cand2)->fn)
2802 && equal_functions (fn, (*cand2)->fn))
2803 *cand2 = (*cand2)->next;
2804 else
2805 cand2 = &(*cand2)->next;
2809 str = candidates->next ? _("candidates are:") : _("candidate is:");
2810 spaces = NULL;
2811 for (; candidates; candidates = candidates->next)
2813 print_z_candidate (spaces ? spaces : str, candidates);
2814 spaces = spaces ? spaces : get_spaces (str);
2816 free (spaces);
2819 /* USER_SEQ is a user-defined conversion sequence, beginning with a
2820 USER_CONV. STD_SEQ is the standard conversion sequence applied to
2821 the result of the conversion function to convert it to the final
2822 desired type. Merge the two sequences into a single sequence,
2823 and return the merged sequence. */
2825 static conversion *
2826 merge_conversion_sequences (conversion *user_seq, conversion *std_seq)
2828 conversion **t;
2830 gcc_assert (user_seq->kind == ck_user);
2832 /* Find the end of the second conversion sequence. */
2833 t = &(std_seq);
2834 while ((*t)->kind != ck_identity)
2835 t = &((*t)->u.next);
2837 /* Replace the identity conversion with the user conversion
2838 sequence. */
2839 *t = user_seq;
2841 /* The entire sequence is a user-conversion sequence. */
2842 std_seq->user_conv_p = true;
2844 return std_seq;
2847 /* Handle overload resolution for initializing an object of class type from
2848 an initializer list. First we look for a suitable constructor that
2849 takes a std::initializer_list; if we don't find one, we then look for a
2850 non-list constructor.
2852 Parameters are as for add_candidates, except that the arguments are in
2853 the form of a CONSTRUCTOR (the initializer list) rather than a VEC, and
2854 the RETURN_TYPE parameter is replaced by TOTYPE, the desired type. */
2856 static void
2857 add_list_candidates (tree fns, tree first_arg,
2858 tree init_list, tree totype,
2859 tree explicit_targs, bool template_only,
2860 tree conversion_path, tree access_path,
2861 int flags,
2862 struct z_candidate **candidates)
2864 VEC(tree,gc) *args;
2866 gcc_assert (*candidates == NULL);
2868 /* For list-initialization we consider explicit constructors, but
2869 give an error if one is selected. */
2870 flags &= ~LOOKUP_ONLYCONVERTING;
2871 /* And we don't allow narrowing conversions. We also use this flag to
2872 avoid the copy constructor call for copy-list-initialization. */
2873 flags |= LOOKUP_NO_NARROWING;
2875 /* Always use the default constructor if the list is empty (DR 990). */
2876 if (CONSTRUCTOR_NELTS (init_list) == 0
2877 && TYPE_HAS_DEFAULT_CONSTRUCTOR (totype))
2879 /* If the class has a list ctor, try passing the list as a single
2880 argument first, but only consider list ctors. */
2881 else if (TYPE_HAS_LIST_CTOR (totype))
2883 flags |= LOOKUP_LIST_ONLY;
2884 args = make_tree_vector_single (init_list);
2885 add_candidates (fns, first_arg, args, NULL_TREE,
2886 explicit_targs, template_only, conversion_path,
2887 access_path, flags, candidates);
2888 if (any_strictly_viable (*candidates))
2889 return;
2892 args = ctor_to_vec (init_list);
2894 /* We aren't looking for list-ctors anymore. */
2895 flags &= ~LOOKUP_LIST_ONLY;
2896 /* We allow more user-defined conversions within an init-list. */
2897 flags &= ~LOOKUP_NO_CONVERSION;
2898 /* But not for the copy ctor. */
2899 flags |= LOOKUP_NO_COPY_CTOR_CONVERSION;
2901 add_candidates (fns, first_arg, args, NULL_TREE,
2902 explicit_targs, template_only, conversion_path,
2903 access_path, flags, candidates);
2906 /* Returns the best overload candidate to perform the requested
2907 conversion. This function is used for three the overloading situations
2908 described in [over.match.copy], [over.match.conv], and [over.match.ref].
2909 If TOTYPE is a REFERENCE_TYPE, we're trying to find an lvalue binding as
2910 per [dcl.init.ref], so we ignore temporary bindings. */
2912 static struct z_candidate *
2913 build_user_type_conversion_1 (tree totype, tree expr, int flags)
2915 struct z_candidate *candidates, *cand;
2916 tree fromtype = TREE_TYPE (expr);
2917 tree ctors = NULL_TREE;
2918 tree conv_fns = NULL_TREE;
2919 conversion *conv = NULL;
2920 tree first_arg = NULL_TREE;
2921 VEC(tree,gc) *args = NULL;
2922 bool any_viable_p;
2923 int convflags;
2925 /* We represent conversion within a hierarchy using RVALUE_CONV and
2926 BASE_CONV, as specified by [over.best.ics]; these become plain
2927 constructor calls, as specified in [dcl.init]. */
2928 gcc_assert (!MAYBE_CLASS_TYPE_P (fromtype) || !MAYBE_CLASS_TYPE_P (totype)
2929 || !DERIVED_FROM_P (totype, fromtype));
2931 if (MAYBE_CLASS_TYPE_P (totype))
2932 ctors = lookup_fnfields (totype, complete_ctor_identifier, 0);
2934 if (MAYBE_CLASS_TYPE_P (fromtype))
2936 tree to_nonref = non_reference (totype);
2937 if (same_type_ignoring_top_level_qualifiers_p (to_nonref, fromtype) ||
2938 (CLASS_TYPE_P (to_nonref) && CLASS_TYPE_P (fromtype)
2939 && DERIVED_FROM_P (to_nonref, fromtype)))
2941 /* [class.conv.fct] A conversion function is never used to
2942 convert a (possibly cv-qualified) object to the (possibly
2943 cv-qualified) same object type (or a reference to it), to a
2944 (possibly cv-qualified) base class of that type (or a
2945 reference to it)... */
2947 else
2948 conv_fns = lookup_conversions (fromtype,
2949 /*lookup_template_convs_p=*/true);
2952 candidates = 0;
2953 flags |= LOOKUP_NO_CONVERSION;
2954 if (BRACE_ENCLOSED_INITIALIZER_P (expr))
2955 flags |= LOOKUP_NO_NARROWING;
2957 /* It's OK to bind a temporary for converting constructor arguments, but
2958 not in converting the return value of a conversion operator. */
2959 convflags = ((flags & LOOKUP_NO_TEMP_BIND) | LOOKUP_NO_CONVERSION);
2960 flags &= ~LOOKUP_NO_TEMP_BIND;
2962 if (ctors)
2964 int ctorflags = flags;
2965 ctors = BASELINK_FUNCTIONS (ctors);
2967 first_arg = build_int_cst (build_pointer_type (totype), 0);
2969 /* We should never try to call the abstract or base constructor
2970 from here. */
2971 gcc_assert (!DECL_HAS_IN_CHARGE_PARM_P (OVL_CURRENT (ctors))
2972 && !DECL_HAS_VTT_PARM_P (OVL_CURRENT (ctors)));
2974 if (BRACE_ENCLOSED_INITIALIZER_P (expr))
2976 /* List-initialization. */
2977 add_list_candidates (ctors, first_arg, expr, totype, NULL_TREE,
2978 false, TYPE_BINFO (totype), TYPE_BINFO (totype),
2979 ctorflags, &candidates);
2981 else
2983 args = make_tree_vector_single (expr);
2984 add_candidates (ctors, first_arg, args, NULL_TREE, NULL_TREE, false,
2985 TYPE_BINFO (totype), TYPE_BINFO (totype),
2986 ctorflags, &candidates);
2989 for (cand = candidates; cand; cand = cand->next)
2991 cand->second_conv = build_identity_conv (totype, NULL_TREE);
2993 /* If totype isn't a reference, and LOOKUP_NO_TEMP_BIND isn't
2994 set, then this is copy-initialization. In that case, "The
2995 result of the call is then used to direct-initialize the
2996 object that is the destination of the copy-initialization."
2997 [dcl.init]
2999 We represent this in the conversion sequence with an
3000 rvalue conversion, which means a constructor call. */
3001 if (TREE_CODE (totype) != REFERENCE_TYPE
3002 && !(convflags & LOOKUP_NO_TEMP_BIND))
3003 cand->second_conv
3004 = build_conv (ck_rvalue, totype, cand->second_conv);
3008 if (conv_fns)
3009 first_arg = build_this (expr);
3011 for (; conv_fns; conv_fns = TREE_CHAIN (conv_fns))
3013 tree conversion_path = TREE_PURPOSE (conv_fns);
3014 struct z_candidate *old_candidates;
3016 /* If we are called to convert to a reference type, we are trying to
3017 find an lvalue binding, so don't even consider temporaries. If
3018 we don't find an lvalue binding, the caller will try again to
3019 look for a temporary binding. */
3020 if (TREE_CODE (totype) == REFERENCE_TYPE)
3021 convflags |= LOOKUP_NO_TEMP_BIND;
3023 old_candidates = candidates;
3024 add_candidates (TREE_VALUE (conv_fns), first_arg, NULL, totype,
3025 NULL_TREE, false,
3026 conversion_path, TYPE_BINFO (fromtype),
3027 flags, &candidates);
3029 for (cand = candidates; cand != old_candidates; cand = cand->next)
3031 conversion *ics
3032 = implicit_conversion (totype,
3033 TREE_TYPE (TREE_TYPE (cand->fn)),
3035 /*c_cast_p=*/false, convflags);
3037 /* If LOOKUP_NO_TEMP_BIND isn't set, then this is
3038 copy-initialization. In that case, "The result of the
3039 call is then used to direct-initialize the object that is
3040 the destination of the copy-initialization." [dcl.init]
3042 We represent this in the conversion sequence with an
3043 rvalue conversion, which means a constructor call. But
3044 don't add a second rvalue conversion if there's already
3045 one there. Which there really shouldn't be, but it's
3046 harmless since we'd add it here anyway. */
3047 if (ics && MAYBE_CLASS_TYPE_P (totype) && ics->kind != ck_rvalue
3048 && !(convflags & LOOKUP_NO_TEMP_BIND))
3049 ics = build_conv (ck_rvalue, totype, ics);
3051 cand->second_conv = ics;
3053 if (!ics)
3054 cand->viable = 0;
3055 else if (cand->viable == 1 && ics->bad_p)
3056 cand->viable = -1;
3060 candidates = splice_viable (candidates, pedantic, &any_viable_p);
3061 if (!any_viable_p)
3062 return NULL;
3064 cand = tourney (candidates);
3065 if (cand == 0)
3067 if (flags & LOOKUP_COMPLAIN)
3069 error ("conversion from %qT to %qT is ambiguous",
3070 fromtype, totype);
3071 print_z_candidates (candidates);
3074 cand = candidates; /* any one will do */
3075 cand->second_conv = build_ambiguous_conv (totype, expr);
3076 cand->second_conv->user_conv_p = true;
3077 if (!any_strictly_viable (candidates))
3078 cand->second_conv->bad_p = true;
3079 /* If there are viable candidates, don't set ICS_BAD_FLAG; an
3080 ambiguous conversion is no worse than another user-defined
3081 conversion. */
3083 return cand;
3086 /* Build the user conversion sequence. */
3087 conv = build_conv
3088 (ck_user,
3089 (DECL_CONSTRUCTOR_P (cand->fn)
3090 ? totype : non_reference (TREE_TYPE (TREE_TYPE (cand->fn)))),
3091 build_identity_conv (TREE_TYPE (expr), expr));
3092 conv->cand = cand;
3094 /* Remember that this was a list-initialization. */
3095 if (flags & LOOKUP_NO_NARROWING)
3096 conv->check_narrowing = true;
3098 /* Combine it with the second conversion sequence. */
3099 cand->second_conv = merge_conversion_sequences (conv,
3100 cand->second_conv);
3102 if (cand->viable == -1)
3103 cand->second_conv->bad_p = true;
3105 return cand;
3108 tree
3109 build_user_type_conversion (tree totype, tree expr, int flags)
3111 struct z_candidate *cand
3112 = build_user_type_conversion_1 (totype, expr, flags);
3114 if (cand)
3116 if (cand->second_conv->kind == ck_ambig)
3117 return error_mark_node;
3118 expr = convert_like (cand->second_conv, expr, tf_warning_or_error);
3119 return convert_from_reference (expr);
3121 return NULL_TREE;
3124 /* Do any initial processing on the arguments to a function call. */
3126 static VEC(tree,gc) *
3127 resolve_args (VEC(tree,gc) *args)
3129 unsigned int ix;
3130 tree arg;
3132 for (ix = 0; VEC_iterate (tree, args, ix, arg); ++ix)
3134 if (error_operand_p (arg))
3135 return NULL;
3136 else if (VOID_TYPE_P (TREE_TYPE (arg)))
3138 error ("invalid use of void expression");
3139 return NULL;
3141 else if (invalid_nonstatic_memfn_p (arg, tf_warning_or_error))
3142 return NULL;
3144 return args;
3147 /* Perform overload resolution on FN, which is called with the ARGS.
3149 Return the candidate function selected by overload resolution, or
3150 NULL if the event that overload resolution failed. In the case
3151 that overload resolution fails, *CANDIDATES will be the set of
3152 candidates considered, and ANY_VIABLE_P will be set to true or
3153 false to indicate whether or not any of the candidates were
3154 viable.
3156 The ARGS should already have gone through RESOLVE_ARGS before this
3157 function is called. */
3159 static struct z_candidate *
3160 perform_overload_resolution (tree fn,
3161 const VEC(tree,gc) *args,
3162 struct z_candidate **candidates,
3163 bool *any_viable_p)
3165 struct z_candidate *cand;
3166 tree explicit_targs = NULL_TREE;
3167 int template_only = 0;
3169 *candidates = NULL;
3170 *any_viable_p = true;
3172 /* Check FN. */
3173 gcc_assert (TREE_CODE (fn) == FUNCTION_DECL
3174 || TREE_CODE (fn) == TEMPLATE_DECL
3175 || TREE_CODE (fn) == OVERLOAD
3176 || TREE_CODE (fn) == TEMPLATE_ID_EXPR);
3178 if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
3180 explicit_targs = TREE_OPERAND (fn, 1);
3181 fn = TREE_OPERAND (fn, 0);
3182 template_only = 1;
3185 /* Add the various candidate functions. */
3186 add_candidates (fn, NULL_TREE, args, NULL_TREE,
3187 explicit_targs, template_only,
3188 /*conversion_path=*/NULL_TREE,
3189 /*access_path=*/NULL_TREE,
3190 LOOKUP_NORMAL,
3191 candidates);
3193 *candidates = splice_viable (*candidates, pedantic, any_viable_p);
3194 if (!*any_viable_p)
3195 return NULL;
3197 cand = tourney (*candidates);
3198 return cand;
3201 /* Return an expression for a call to FN (a namespace-scope function,
3202 or a static member function) with the ARGS. This may change
3203 ARGS. */
3205 tree
3206 build_new_function_call (tree fn, VEC(tree,gc) **args, bool koenig_p,
3207 tsubst_flags_t complain)
3209 struct z_candidate *candidates, *cand;
3210 bool any_viable_p;
3211 void *p;
3212 tree result;
3214 if (args != NULL && *args != NULL)
3216 *args = resolve_args (*args);
3217 if (*args == NULL)
3218 return error_mark_node;
3221 /* If this function was found without using argument dependent
3222 lookup, then we want to ignore any undeclared friend
3223 functions. */
3224 if (!koenig_p)
3226 tree orig_fn = fn;
3228 fn = remove_hidden_names (fn);
3229 if (!fn)
3231 if (complain & tf_error)
3232 error ("no matching function for call to %<%D(%A)%>",
3233 DECL_NAME (OVL_CURRENT (orig_fn)),
3234 build_tree_list_vec (*args));
3235 return error_mark_node;
3239 /* Get the high-water mark for the CONVERSION_OBSTACK. */
3240 p = conversion_obstack_alloc (0);
3242 cand = perform_overload_resolution (fn, *args, &candidates, &any_viable_p);
3244 if (!cand)
3246 if (complain & tf_error)
3248 if (!any_viable_p && candidates && ! candidates->next
3249 && (TREE_CODE (candidates->fn) == FUNCTION_DECL))
3250 return cp_build_function_call_vec (candidates->fn, args, complain);
3251 if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
3252 fn = TREE_OPERAND (fn, 0);
3253 if (!any_viable_p)
3254 error ("no matching function for call to %<%D(%A)%>",
3255 DECL_NAME (OVL_CURRENT (fn)), build_tree_list_vec (*args));
3256 else
3257 error ("call of overloaded %<%D(%A)%> is ambiguous",
3258 DECL_NAME (OVL_CURRENT (fn)), build_tree_list_vec (*args));
3259 if (candidates)
3260 print_z_candidates (candidates);
3262 result = error_mark_node;
3264 else
3265 result = build_over_call (cand, LOOKUP_NORMAL, complain);
3267 /* Free all the conversions we allocated. */
3268 obstack_free (&conversion_obstack, p);
3270 return result;
3273 /* Build a call to a global operator new. FNNAME is the name of the
3274 operator (either "operator new" or "operator new[]") and ARGS are
3275 the arguments provided. This may change ARGS. *SIZE points to the
3276 total number of bytes required by the allocation, and is updated if
3277 that is changed here. *COOKIE_SIZE is non-NULL if a cookie should
3278 be used. If this function determines that no cookie should be
3279 used, after all, *COOKIE_SIZE is set to NULL_TREE. If FN is
3280 non-NULL, it will be set, upon return, to the allocation function
3281 called. */
3283 tree
3284 build_operator_new_call (tree fnname, VEC(tree,gc) **args,
3285 tree *size, tree *cookie_size,
3286 tree *fn)
3288 tree fns;
3289 struct z_candidate *candidates;
3290 struct z_candidate *cand;
3291 bool any_viable_p;
3293 if (fn)
3294 *fn = NULL_TREE;
3295 VEC_safe_insert (tree, gc, *args, 0, *size);
3296 *args = resolve_args (*args);
3297 if (*args == NULL)
3298 return error_mark_node;
3300 /* Based on:
3302 [expr.new]
3304 If this lookup fails to find the name, or if the allocated type
3305 is not a class type, the allocation function's name is looked
3306 up in the global scope.
3308 we disregard block-scope declarations of "operator new". */
3309 fns = lookup_function_nonclass (fnname, *args, /*block_p=*/false);
3311 /* Figure out what function is being called. */
3312 cand = perform_overload_resolution (fns, *args, &candidates, &any_viable_p);
3314 /* If no suitable function could be found, issue an error message
3315 and give up. */
3316 if (!cand)
3318 if (!any_viable_p)
3319 error ("no matching function for call to %<%D(%A)%>",
3320 DECL_NAME (OVL_CURRENT (fns)), build_tree_list_vec (*args));
3321 else
3322 error ("call of overloaded %<%D(%A)%> is ambiguous",
3323 DECL_NAME (OVL_CURRENT (fns)), build_tree_list_vec (*args));
3324 if (candidates)
3325 print_z_candidates (candidates);
3326 return error_mark_node;
3329 /* If a cookie is required, add some extra space. Whether
3330 or not a cookie is required cannot be determined until
3331 after we know which function was called. */
3332 if (*cookie_size)
3334 bool use_cookie = true;
3335 if (!abi_version_at_least (2))
3337 /* In G++ 3.2, the check was implemented incorrectly; it
3338 looked at the placement expression, rather than the
3339 type of the function. */
3340 if (VEC_length (tree, *args) == 2
3341 && same_type_p (TREE_TYPE (VEC_index (tree, *args, 1)),
3342 ptr_type_node))
3343 use_cookie = false;
3345 else
3347 tree arg_types;
3349 arg_types = TYPE_ARG_TYPES (TREE_TYPE (cand->fn));
3350 /* Skip the size_t parameter. */
3351 arg_types = TREE_CHAIN (arg_types);
3352 /* Check the remaining parameters (if any). */
3353 if (arg_types
3354 && TREE_CHAIN (arg_types) == void_list_node
3355 && same_type_p (TREE_VALUE (arg_types),
3356 ptr_type_node))
3357 use_cookie = false;
3359 /* If we need a cookie, adjust the number of bytes allocated. */
3360 if (use_cookie)
3362 /* Update the total size. */
3363 *size = size_binop (PLUS_EXPR, *size, *cookie_size);
3364 /* Update the argument list to reflect the adjusted size. */
3365 VEC_replace (tree, *args, 0, *size);
3367 else
3368 *cookie_size = NULL_TREE;
3371 /* Tell our caller which function we decided to call. */
3372 if (fn)
3373 *fn = cand->fn;
3375 /* Build the CALL_EXPR. */
3376 return build_over_call (cand, LOOKUP_NORMAL, tf_warning_or_error);
3379 /* Build a new call to operator(). This may change ARGS. */
3381 tree
3382 build_op_call (tree obj, VEC(tree,gc) **args, tsubst_flags_t complain)
3384 struct z_candidate *candidates = 0, *cand;
3385 tree fns, convs, first_mem_arg = NULL_TREE;
3386 tree type = TREE_TYPE (obj);
3387 bool any_viable_p;
3388 tree result = NULL_TREE;
3389 void *p;
3391 if (error_operand_p (obj))
3392 return error_mark_node;
3394 obj = prep_operand (obj);
3396 if (TYPE_PTRMEMFUNC_P (type))
3398 if (complain & tf_error)
3399 /* It's no good looking for an overloaded operator() on a
3400 pointer-to-member-function. */
3401 error ("pointer-to-member function %E cannot be called without an object; consider using .* or ->*", obj);
3402 return error_mark_node;
3405 if (TYPE_BINFO (type))
3407 fns = lookup_fnfields (TYPE_BINFO (type), ansi_opname (CALL_EXPR), 1);
3408 if (fns == error_mark_node)
3409 return error_mark_node;
3411 else
3412 fns = NULL_TREE;
3414 if (args != NULL && *args != NULL)
3416 *args = resolve_args (*args);
3417 if (*args == NULL)
3418 return error_mark_node;
3421 /* Get the high-water mark for the CONVERSION_OBSTACK. */
3422 p = conversion_obstack_alloc (0);
3424 if (fns)
3426 first_mem_arg = build_this (obj);
3428 add_candidates (BASELINK_FUNCTIONS (fns),
3429 first_mem_arg, *args, NULL_TREE,
3430 NULL_TREE, false,
3431 BASELINK_BINFO (fns), BASELINK_ACCESS_BINFO (fns),
3432 LOOKUP_NORMAL, &candidates);
3435 convs = lookup_conversions (type, /*lookup_template_convs_p=*/true);
3437 for (; convs; convs = TREE_CHAIN (convs))
3439 tree fns = TREE_VALUE (convs);
3440 tree totype = TREE_TYPE (convs);
3442 if ((TREE_CODE (totype) == POINTER_TYPE
3443 && TREE_CODE (TREE_TYPE (totype)) == FUNCTION_TYPE)
3444 || (TREE_CODE (totype) == REFERENCE_TYPE
3445 && TREE_CODE (TREE_TYPE (totype)) == FUNCTION_TYPE)
3446 || (TREE_CODE (totype) == REFERENCE_TYPE
3447 && TREE_CODE (TREE_TYPE (totype)) == POINTER_TYPE
3448 && TREE_CODE (TREE_TYPE (TREE_TYPE (totype))) == FUNCTION_TYPE))
3449 for (; fns; fns = OVL_NEXT (fns))
3451 tree fn = OVL_CURRENT (fns);
3453 if (DECL_NONCONVERTING_P (fn))
3454 continue;
3456 if (TREE_CODE (fn) == TEMPLATE_DECL)
3457 add_template_conv_candidate
3458 (&candidates, fn, obj, NULL_TREE, *args, totype,
3459 /*access_path=*/NULL_TREE,
3460 /*conversion_path=*/NULL_TREE);
3461 else
3462 add_conv_candidate (&candidates, fn, obj, NULL_TREE,
3463 *args, /*conversion_path=*/NULL_TREE,
3464 /*access_path=*/NULL_TREE);
3468 candidates = splice_viable (candidates, pedantic, &any_viable_p);
3469 if (!any_viable_p)
3471 if (complain & tf_error)
3473 error ("no match for call to %<(%T) (%A)%>", TREE_TYPE (obj),
3474 build_tree_list_vec (*args));
3475 print_z_candidates (candidates);
3477 result = error_mark_node;
3479 else
3481 cand = tourney (candidates);
3482 if (cand == 0)
3484 if (complain & tf_error)
3486 error ("call of %<(%T) (%A)%> is ambiguous",
3487 TREE_TYPE (obj), build_tree_list_vec (*args));
3488 print_z_candidates (candidates);
3490 result = error_mark_node;
3492 /* Since cand->fn will be a type, not a function, for a conversion
3493 function, we must be careful not to unconditionally look at
3494 DECL_NAME here. */
3495 else if (TREE_CODE (cand->fn) == FUNCTION_DECL
3496 && DECL_OVERLOADED_OPERATOR_P (cand->fn) == CALL_EXPR)
3497 result = build_over_call (cand, LOOKUP_NORMAL, complain);
3498 else
3500 obj = convert_like_with_context (cand->convs[0], obj, cand->fn, -1,
3501 complain);
3502 obj = convert_from_reference (obj);
3503 result = cp_build_function_call_vec (obj, args, complain);
3507 /* Free all the conversions we allocated. */
3508 obstack_free (&conversion_obstack, p);
3510 return result;
3513 static void
3514 op_error (enum tree_code code, enum tree_code code2,
3515 tree arg1, tree arg2, tree arg3, bool match)
3517 const char *opname;
3519 if (code == MODIFY_EXPR)
3520 opname = assignment_operator_name_info[code2].name;
3521 else
3522 opname = operator_name_info[code].name;
3524 switch (code)
3526 case COND_EXPR:
3527 if (match)
3528 error ("ambiguous overload for ternary %<operator?:%> "
3529 "in %<%E ? %E : %E%>", arg1, arg2, arg3);
3530 else
3531 error ("no match for ternary %<operator?:%> "
3532 "in %<%E ? %E : %E%>", arg1, arg2, arg3);
3533 break;
3535 case POSTINCREMENT_EXPR:
3536 case POSTDECREMENT_EXPR:
3537 if (match)
3538 error ("ambiguous overload for %<operator%s%> in %<%E%s%>",
3539 opname, arg1, opname);
3540 else
3541 error ("no match for %<operator%s%> in %<%E%s%>",
3542 opname, arg1, opname);
3543 break;
3545 case ARRAY_REF:
3546 if (match)
3547 error ("ambiguous overload for %<operator[]%> in %<%E[%E]%>",
3548 arg1, arg2);
3549 else
3550 error ("no match for %<operator[]%> in %<%E[%E]%>",
3551 arg1, arg2);
3552 break;
3554 case REALPART_EXPR:
3555 case IMAGPART_EXPR:
3556 if (match)
3557 error ("ambiguous overload for %qs in %<%s %E%>",
3558 opname, opname, arg1);
3559 else
3560 error ("no match for %qs in %<%s %E%>",
3561 opname, opname, arg1);
3562 break;
3564 default:
3565 if (arg2)
3566 if (match)
3567 error ("ambiguous overload for %<operator%s%> in %<%E %s %E%>",
3568 opname, arg1, opname, arg2);
3569 else
3570 error ("no match for %<operator%s%> in %<%E %s %E%>",
3571 opname, arg1, opname, arg2);
3572 else
3573 if (match)
3574 error ("ambiguous overload for %<operator%s%> in %<%s%E%>",
3575 opname, opname, arg1);
3576 else
3577 error ("no match for %<operator%s%> in %<%s%E%>",
3578 opname, opname, arg1);
3579 break;
3583 /* Return the implicit conversion sequence that could be used to
3584 convert E1 to E2 in [expr.cond]. */
3586 static conversion *
3587 conditional_conversion (tree e1, tree e2)
3589 tree t1 = non_reference (TREE_TYPE (e1));
3590 tree t2 = non_reference (TREE_TYPE (e2));
3591 conversion *conv;
3592 bool good_base;
3594 /* [expr.cond]
3596 If E2 is an lvalue: E1 can be converted to match E2 if E1 can be
3597 implicitly converted (clause _conv_) to the type "reference to
3598 T2", subject to the constraint that in the conversion the
3599 reference must bind directly (_dcl.init.ref_) to E1. */
3600 if (real_lvalue_p (e2))
3602 conv = implicit_conversion (build_reference_type (t2),
3605 /*c_cast_p=*/false,
3606 LOOKUP_NO_TEMP_BIND|LOOKUP_ONLYCONVERTING);
3607 if (conv)
3608 return conv;
3611 /* [expr.cond]
3613 If E1 and E2 have class type, and the underlying class types are
3614 the same or one is a base class of the other: E1 can be converted
3615 to match E2 if the class of T2 is the same type as, or a base
3616 class of, the class of T1, and the cv-qualification of T2 is the
3617 same cv-qualification as, or a greater cv-qualification than, the
3618 cv-qualification of T1. If the conversion is applied, E1 is
3619 changed to an rvalue of type T2 that still refers to the original
3620 source class object (or the appropriate subobject thereof). */
3621 if (CLASS_TYPE_P (t1) && CLASS_TYPE_P (t2)
3622 && ((good_base = DERIVED_FROM_P (t2, t1)) || DERIVED_FROM_P (t1, t2)))
3624 if (good_base && at_least_as_qualified_p (t2, t1))
3626 conv = build_identity_conv (t1, e1);
3627 if (!same_type_p (TYPE_MAIN_VARIANT (t1),
3628 TYPE_MAIN_VARIANT (t2)))
3629 conv = build_conv (ck_base, t2, conv);
3630 else
3631 conv = build_conv (ck_rvalue, t2, conv);
3632 return conv;
3634 else
3635 return NULL;
3637 else
3638 /* [expr.cond]
3640 Otherwise: E1 can be converted to match E2 if E1 can be implicitly
3641 converted to the type that expression E2 would have if E2 were
3642 converted to an rvalue (or the type it has, if E2 is an rvalue). */
3643 return implicit_conversion (t2, t1, e1, /*c_cast_p=*/false,
3644 LOOKUP_IMPLICIT);
3647 /* Implement [expr.cond]. ARG1, ARG2, and ARG3 are the three
3648 arguments to the conditional expression. */
3650 tree
3651 build_conditional_expr (tree arg1, tree arg2, tree arg3,
3652 tsubst_flags_t complain)
3654 tree arg2_type;
3655 tree arg3_type;
3656 tree result = NULL_TREE;
3657 tree result_type = NULL_TREE;
3658 bool lvalue_p = true;
3659 struct z_candidate *candidates = 0;
3660 struct z_candidate *cand;
3661 void *p;
3663 /* As a G++ extension, the second argument to the conditional can be
3664 omitted. (So that `a ? : c' is roughly equivalent to `a ? a :
3665 c'.) If the second operand is omitted, make sure it is
3666 calculated only once. */
3667 if (!arg2)
3669 if (complain & tf_error)
3670 pedwarn (input_location, OPT_pedantic,
3671 "ISO C++ forbids omitting the middle term of a ?: expression");
3673 /* Make sure that lvalues remain lvalues. See g++.oliva/ext1.C. */
3674 if (real_lvalue_p (arg1))
3675 arg2 = arg1 = stabilize_reference (arg1);
3676 else
3677 arg2 = arg1 = save_expr (arg1);
3680 /* [expr.cond]
3682 The first expression is implicitly converted to bool (clause
3683 _conv_). */
3684 arg1 = perform_implicit_conversion_flags (boolean_type_node, arg1, complain,
3685 LOOKUP_NORMAL);
3687 /* If something has already gone wrong, just pass that fact up the
3688 tree. */
3689 if (error_operand_p (arg1)
3690 || error_operand_p (arg2)
3691 || error_operand_p (arg3))
3692 return error_mark_node;
3694 /* [expr.cond]
3696 If either the second or the third operand has type (possibly
3697 cv-qualified) void, then the lvalue-to-rvalue (_conv.lval_),
3698 array-to-pointer (_conv.array_), and function-to-pointer
3699 (_conv.func_) standard conversions are performed on the second
3700 and third operands. */
3701 arg2_type = unlowered_expr_type (arg2);
3702 arg3_type = unlowered_expr_type (arg3);
3703 if (VOID_TYPE_P (arg2_type) || VOID_TYPE_P (arg3_type))
3705 /* Do the conversions. We don't these for `void' type arguments
3706 since it can't have any effect and since decay_conversion
3707 does not handle that case gracefully. */
3708 if (!VOID_TYPE_P (arg2_type))
3709 arg2 = decay_conversion (arg2);
3710 if (!VOID_TYPE_P (arg3_type))
3711 arg3 = decay_conversion (arg3);
3712 arg2_type = TREE_TYPE (arg2);
3713 arg3_type = TREE_TYPE (arg3);
3715 /* [expr.cond]
3717 One of the following shall hold:
3719 --The second or the third operand (but not both) is a
3720 throw-expression (_except.throw_); the result is of the
3721 type of the other and is an rvalue.
3723 --Both the second and the third operands have type void; the
3724 result is of type void and is an rvalue.
3726 We must avoid calling force_rvalue for expressions of type
3727 "void" because it will complain that their value is being
3728 used. */
3729 if (TREE_CODE (arg2) == THROW_EXPR
3730 && TREE_CODE (arg3) != THROW_EXPR)
3732 if (!VOID_TYPE_P (arg3_type))
3733 arg3 = force_rvalue (arg3);
3734 arg3_type = TREE_TYPE (arg3);
3735 result_type = arg3_type;
3737 else if (TREE_CODE (arg2) != THROW_EXPR
3738 && TREE_CODE (arg3) == THROW_EXPR)
3740 if (!VOID_TYPE_P (arg2_type))
3741 arg2 = force_rvalue (arg2);
3742 arg2_type = TREE_TYPE (arg2);
3743 result_type = arg2_type;
3745 else if (VOID_TYPE_P (arg2_type) && VOID_TYPE_P (arg3_type))
3746 result_type = void_type_node;
3747 else
3749 if (complain & tf_error)
3751 if (VOID_TYPE_P (arg2_type))
3752 error ("second operand to the conditional operator "
3753 "is of type %<void%>, "
3754 "but the third operand is neither a throw-expression "
3755 "nor of type %<void%>");
3756 else
3757 error ("third operand to the conditional operator "
3758 "is of type %<void%>, "
3759 "but the second operand is neither a throw-expression "
3760 "nor of type %<void%>");
3762 return error_mark_node;
3765 lvalue_p = false;
3766 goto valid_operands;
3768 /* [expr.cond]
3770 Otherwise, if the second and third operand have different types,
3771 and either has (possibly cv-qualified) class type, an attempt is
3772 made to convert each of those operands to the type of the other. */
3773 else if (!same_type_p (arg2_type, arg3_type)
3774 && (CLASS_TYPE_P (arg2_type) || CLASS_TYPE_P (arg3_type)))
3776 conversion *conv2;
3777 conversion *conv3;
3779 /* Get the high-water mark for the CONVERSION_OBSTACK. */
3780 p = conversion_obstack_alloc (0);
3782 conv2 = conditional_conversion (arg2, arg3);
3783 conv3 = conditional_conversion (arg3, arg2);
3785 /* [expr.cond]
3787 If both can be converted, or one can be converted but the
3788 conversion is ambiguous, the program is ill-formed. If
3789 neither can be converted, the operands are left unchanged and
3790 further checking is performed as described below. If exactly
3791 one conversion is possible, that conversion is applied to the
3792 chosen operand and the converted operand is used in place of
3793 the original operand for the remainder of this section. */
3794 if ((conv2 && !conv2->bad_p
3795 && conv3 && !conv3->bad_p)
3796 || (conv2 && conv2->kind == ck_ambig)
3797 || (conv3 && conv3->kind == ck_ambig))
3799 error ("operands to ?: have different types %qT and %qT",
3800 arg2_type, arg3_type);
3801 result = error_mark_node;
3803 else if (conv2 && (!conv2->bad_p || !conv3))
3805 arg2 = convert_like (conv2, arg2, complain);
3806 arg2 = convert_from_reference (arg2);
3807 arg2_type = TREE_TYPE (arg2);
3808 /* Even if CONV2 is a valid conversion, the result of the
3809 conversion may be invalid. For example, if ARG3 has type
3810 "volatile X", and X does not have a copy constructor
3811 accepting a "volatile X&", then even if ARG2 can be
3812 converted to X, the conversion will fail. */
3813 if (error_operand_p (arg2))
3814 result = error_mark_node;
3816 else if (conv3 && (!conv3->bad_p || !conv2))
3818 arg3 = convert_like (conv3, arg3, complain);
3819 arg3 = convert_from_reference (arg3);
3820 arg3_type = TREE_TYPE (arg3);
3821 if (error_operand_p (arg3))
3822 result = error_mark_node;
3825 /* Free all the conversions we allocated. */
3826 obstack_free (&conversion_obstack, p);
3828 if (result)
3829 return result;
3831 /* If, after the conversion, both operands have class type,
3832 treat the cv-qualification of both operands as if it were the
3833 union of the cv-qualification of the operands.
3835 The standard is not clear about what to do in this
3836 circumstance. For example, if the first operand has type
3837 "const X" and the second operand has a user-defined
3838 conversion to "volatile X", what is the type of the second
3839 operand after this step? Making it be "const X" (matching
3840 the first operand) seems wrong, as that discards the
3841 qualification without actually performing a copy. Leaving it
3842 as "volatile X" seems wrong as that will result in the
3843 conditional expression failing altogether, even though,
3844 according to this step, the one operand could be converted to
3845 the type of the other. */
3846 if ((conv2 || conv3)
3847 && CLASS_TYPE_P (arg2_type)
3848 && cp_type_quals (arg2_type) != cp_type_quals (arg3_type))
3849 arg2_type = arg3_type =
3850 cp_build_qualified_type (arg2_type,
3851 cp_type_quals (arg2_type)
3852 | cp_type_quals (arg3_type));
3855 /* [expr.cond]
3857 If the second and third operands are lvalues and have the same
3858 type, the result is of that type and is an lvalue. */
3859 if (real_lvalue_p (arg2)
3860 && real_lvalue_p (arg3)
3861 && same_type_p (arg2_type, arg3_type))
3863 result_type = arg2_type;
3864 arg2 = mark_lvalue_use (arg2);
3865 arg3 = mark_lvalue_use (arg3);
3866 goto valid_operands;
3869 /* [expr.cond]
3871 Otherwise, the result is an rvalue. If the second and third
3872 operand do not have the same type, and either has (possibly
3873 cv-qualified) class type, overload resolution is used to
3874 determine the conversions (if any) to be applied to the operands
3875 (_over.match.oper_, _over.built_). */
3876 lvalue_p = false;
3877 if (!same_type_p (arg2_type, arg3_type)
3878 && (CLASS_TYPE_P (arg2_type) || CLASS_TYPE_P (arg3_type)))
3880 tree args[3];
3881 conversion *conv;
3882 bool any_viable_p;
3884 /* Rearrange the arguments so that add_builtin_candidate only has
3885 to know about two args. In build_builtin_candidate, the
3886 arguments are unscrambled. */
3887 args[0] = arg2;
3888 args[1] = arg3;
3889 args[2] = arg1;
3890 add_builtin_candidates (&candidates,
3891 COND_EXPR,
3892 NOP_EXPR,
3893 ansi_opname (COND_EXPR),
3894 args,
3895 LOOKUP_NORMAL);
3897 /* [expr.cond]
3899 If the overload resolution fails, the program is
3900 ill-formed. */
3901 candidates = splice_viable (candidates, pedantic, &any_viable_p);
3902 if (!any_viable_p)
3904 if (complain & tf_error)
3906 op_error (COND_EXPR, NOP_EXPR, arg1, arg2, arg3, FALSE);
3907 print_z_candidates (candidates);
3909 return error_mark_node;
3911 cand = tourney (candidates);
3912 if (!cand)
3914 if (complain & tf_error)
3916 op_error (COND_EXPR, NOP_EXPR, arg1, arg2, arg3, FALSE);
3917 print_z_candidates (candidates);
3919 return error_mark_node;
3922 /* [expr.cond]
3924 Otherwise, the conversions thus determined are applied, and
3925 the converted operands are used in place of the original
3926 operands for the remainder of this section. */
3927 conv = cand->convs[0];
3928 arg1 = convert_like (conv, arg1, complain);
3929 conv = cand->convs[1];
3930 arg2 = convert_like (conv, arg2, complain);
3931 arg2_type = TREE_TYPE (arg2);
3932 conv = cand->convs[2];
3933 arg3 = convert_like (conv, arg3, complain);
3934 arg3_type = TREE_TYPE (arg3);
3937 /* [expr.cond]
3939 Lvalue-to-rvalue (_conv.lval_), array-to-pointer (_conv.array_),
3940 and function-to-pointer (_conv.func_) standard conversions are
3941 performed on the second and third operands.
3943 We need to force the lvalue-to-rvalue conversion here for class types,
3944 so we get TARGET_EXPRs; trying to deal with a COND_EXPR of class rvalues
3945 that isn't wrapped with a TARGET_EXPR plays havoc with exception
3946 regions. */
3948 arg2 = force_rvalue (arg2);
3949 if (!CLASS_TYPE_P (arg2_type))
3950 arg2_type = TREE_TYPE (arg2);
3952 arg3 = force_rvalue (arg3);
3953 if (!CLASS_TYPE_P (arg3_type))
3954 arg3_type = TREE_TYPE (arg3);
3956 if (arg2 == error_mark_node || arg3 == error_mark_node)
3957 return error_mark_node;
3959 /* [expr.cond]
3961 After those conversions, one of the following shall hold:
3963 --The second and third operands have the same type; the result is of
3964 that type. */
3965 if (same_type_p (arg2_type, arg3_type))
3966 result_type = arg2_type;
3967 /* [expr.cond]
3969 --The second and third operands have arithmetic or enumeration
3970 type; the usual arithmetic conversions are performed to bring
3971 them to a common type, and the result is of that type. */
3972 else if ((ARITHMETIC_TYPE_P (arg2_type)
3973 || UNSCOPED_ENUM_P (arg2_type))
3974 && (ARITHMETIC_TYPE_P (arg3_type)
3975 || UNSCOPED_ENUM_P (arg3_type)))
3977 /* In this case, there is always a common type. */
3978 result_type = type_after_usual_arithmetic_conversions (arg2_type,
3979 arg3_type);
3981 if (TREE_CODE (arg2_type) == ENUMERAL_TYPE
3982 && TREE_CODE (arg3_type) == ENUMERAL_TYPE)
3984 if (complain & tf_warning)
3985 warning (0,
3986 "enumeral mismatch in conditional expression: %qT vs %qT",
3987 arg2_type, arg3_type);
3989 else if (extra_warnings
3990 && ((TREE_CODE (arg2_type) == ENUMERAL_TYPE
3991 && !same_type_p (arg3_type, type_promotes_to (arg2_type)))
3992 || (TREE_CODE (arg3_type) == ENUMERAL_TYPE
3993 && !same_type_p (arg2_type, type_promotes_to (arg3_type)))))
3995 if (complain & tf_warning)
3996 warning (0,
3997 "enumeral and non-enumeral type in conditional expression");
4000 arg2 = perform_implicit_conversion (result_type, arg2, complain);
4001 arg3 = perform_implicit_conversion (result_type, arg3, complain);
4003 /* [expr.cond]
4005 --The second and third operands have pointer type, or one has
4006 pointer type and the other is a null pointer constant; pointer
4007 conversions (_conv.ptr_) and qualification conversions
4008 (_conv.qual_) are performed to bring them to their composite
4009 pointer type (_expr.rel_). The result is of the composite
4010 pointer type.
4012 --The second and third operands have pointer to member type, or
4013 one has pointer to member type and the other is a null pointer
4014 constant; pointer to member conversions (_conv.mem_) and
4015 qualification conversions (_conv.qual_) are performed to bring
4016 them to a common type, whose cv-qualification shall match the
4017 cv-qualification of either the second or the third operand.
4018 The result is of the common type. */
4019 else if ((null_ptr_cst_p (arg2)
4020 && (TYPE_PTR_P (arg3_type) || TYPE_PTR_TO_MEMBER_P (arg3_type)))
4021 || (null_ptr_cst_p (arg3)
4022 && (TYPE_PTR_P (arg2_type) || TYPE_PTR_TO_MEMBER_P (arg2_type)))
4023 || (TYPE_PTR_P (arg2_type) && TYPE_PTR_P (arg3_type))
4024 || (TYPE_PTRMEM_P (arg2_type) && TYPE_PTRMEM_P (arg3_type))
4025 || (TYPE_PTRMEMFUNC_P (arg2_type) && TYPE_PTRMEMFUNC_P (arg3_type)))
4027 result_type = composite_pointer_type (arg2_type, arg3_type, arg2,
4028 arg3, CPO_CONDITIONAL_EXPR,
4029 complain);
4030 if (result_type == error_mark_node)
4031 return error_mark_node;
4032 arg2 = perform_implicit_conversion (result_type, arg2, complain);
4033 arg3 = perform_implicit_conversion (result_type, arg3, complain);
4036 if (!result_type)
4038 if (complain & tf_error)
4039 error ("operands to ?: have different types %qT and %qT",
4040 arg2_type, arg3_type);
4041 return error_mark_node;
4044 valid_operands:
4045 result = build3 (COND_EXPR, result_type, arg1, arg2, arg3);
4046 if (!cp_unevaluated_operand)
4047 /* Avoid folding within decltype (c++/42013) and noexcept. */
4048 result = fold_if_not_in_template (result);
4050 /* We can't use result_type below, as fold might have returned a
4051 throw_expr. */
4053 if (!lvalue_p)
4055 /* Expand both sides into the same slot, hopefully the target of
4056 the ?: expression. We used to check for TARGET_EXPRs here,
4057 but now we sometimes wrap them in NOP_EXPRs so the test would
4058 fail. */
4059 if (CLASS_TYPE_P (TREE_TYPE (result)))
4060 result = get_target_expr (result);
4061 /* If this expression is an rvalue, but might be mistaken for an
4062 lvalue, we must add a NON_LVALUE_EXPR. */
4063 result = rvalue (result);
4066 return result;
4069 /* OPERAND is an operand to an expression. Perform necessary steps
4070 required before using it. If OPERAND is NULL_TREE, NULL_TREE is
4071 returned. */
4073 static tree
4074 prep_operand (tree operand)
4076 if (operand)
4078 if (CLASS_TYPE_P (TREE_TYPE (operand))
4079 && CLASSTYPE_TEMPLATE_INSTANTIATION (TREE_TYPE (operand)))
4080 /* Make sure the template type is instantiated now. */
4081 instantiate_class_template (TYPE_MAIN_VARIANT (TREE_TYPE (operand)));
4084 return operand;
4087 /* Add each of the viable functions in FNS (a FUNCTION_DECL or
4088 OVERLOAD) to the CANDIDATES, returning an updated list of
4089 CANDIDATES. The ARGS are the arguments provided to the call;
4090 if FIRST_ARG is non-null it is the implicit object argument,
4091 otherwise the first element of ARGS is used if needed. The
4092 EXPLICIT_TARGS are explicit template arguments provided.
4093 TEMPLATE_ONLY is true if only template functions should be
4094 considered. CONVERSION_PATH, ACCESS_PATH, and FLAGS are as for
4095 add_function_candidate. */
4097 static void
4098 add_candidates (tree fns, tree first_arg, const VEC(tree,gc) *args,
4099 tree return_type,
4100 tree explicit_targs, bool template_only,
4101 tree conversion_path, tree access_path,
4102 int flags,
4103 struct z_candidate **candidates)
4105 tree ctype;
4106 const VEC(tree,gc) *non_static_args;
4107 bool check_list_ctor;
4108 bool check_converting;
4109 unification_kind_t strict;
4110 tree fn;
4112 if (!fns)
4113 return;
4115 /* Precalculate special handling of constructors and conversion ops. */
4116 fn = OVL_CURRENT (fns);
4117 if (DECL_CONV_FN_P (fn))
4119 check_list_ctor = false;
4120 check_converting = !!(flags & LOOKUP_ONLYCONVERTING);
4121 if (flags & LOOKUP_NO_CONVERSION)
4122 /* We're doing return_type(x). */
4123 strict = DEDUCE_CONV;
4124 else
4125 /* We're doing x.operator return_type(). */
4126 strict = DEDUCE_EXACT;
4127 /* [over.match.funcs] For conversion functions, the function
4128 is considered to be a member of the class of the implicit
4129 object argument for the purpose of defining the type of
4130 the implicit object parameter. */
4131 ctype = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (first_arg)));
4133 else
4135 if (DECL_CONSTRUCTOR_P (fn))
4137 check_list_ctor = !!(flags & LOOKUP_LIST_ONLY);
4138 check_converting = !!(flags & LOOKUP_ONLYCONVERTING);
4140 else
4142 check_list_ctor = false;
4143 check_converting = false;
4145 strict = DEDUCE_CALL;
4146 ctype = conversion_path ? BINFO_TYPE (conversion_path) : NULL_TREE;
4149 if (first_arg)
4150 non_static_args = args;
4151 else
4152 /* Delay creating the implicit this parameter until it is needed. */
4153 non_static_args = NULL;
4155 for (; fns; fns = OVL_NEXT (fns))
4157 tree fn_first_arg;
4158 const VEC(tree,gc) *fn_args;
4160 fn = OVL_CURRENT (fns);
4162 if (check_converting && DECL_NONCONVERTING_P (fn))
4163 continue;
4164 if (check_list_ctor && !is_list_ctor (fn))
4165 continue;
4167 /* Figure out which set of arguments to use. */
4168 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
4170 /* If this function is a non-static member and we didn't get an
4171 implicit object argument, move it out of args. */
4172 if (first_arg == NULL_TREE)
4174 unsigned int ix;
4175 tree arg;
4176 VEC(tree,gc) *tempvec
4177 = VEC_alloc (tree, gc, VEC_length (tree, args) - 1);
4178 for (ix = 1; VEC_iterate (tree, args, ix, arg); ++ix)
4179 VEC_quick_push (tree, tempvec, arg);
4180 non_static_args = tempvec;
4181 first_arg = build_this (VEC_index (tree, args, 0));
4184 fn_first_arg = first_arg;
4185 fn_args = non_static_args;
4187 else
4189 /* Otherwise, just use the list of arguments provided. */
4190 fn_first_arg = NULL_TREE;
4191 fn_args = args;
4194 if (TREE_CODE (fn) == TEMPLATE_DECL)
4195 add_template_candidate (candidates,
4197 ctype,
4198 explicit_targs,
4199 fn_first_arg,
4200 fn_args,
4201 return_type,
4202 access_path,
4203 conversion_path,
4204 flags,
4205 strict);
4206 else if (!template_only)
4207 add_function_candidate (candidates,
4209 ctype,
4210 fn_first_arg,
4211 fn_args,
4212 access_path,
4213 conversion_path,
4214 flags);
4218 /* Even unsigned enum types promote to signed int. We don't want to
4219 issue -Wsign-compare warnings for this case. Here ORIG_ARG is the
4220 original argument and ARG is the argument after any conversions
4221 have been applied. We set TREE_NO_WARNING if we have added a cast
4222 from an unsigned enum type to a signed integer type. */
4224 static void
4225 avoid_sign_compare_warnings (tree orig_arg, tree arg)
4227 if (orig_arg != NULL_TREE
4228 && arg != NULL_TREE
4229 && orig_arg != arg
4230 && TREE_CODE (TREE_TYPE (orig_arg)) == ENUMERAL_TYPE
4231 && TYPE_UNSIGNED (TREE_TYPE (orig_arg))
4232 && INTEGRAL_TYPE_P (TREE_TYPE (arg))
4233 && !TYPE_UNSIGNED (TREE_TYPE (arg)))
4234 TREE_NO_WARNING (arg) = 1;
4237 tree
4238 build_new_op (enum tree_code code, int flags, tree arg1, tree arg2, tree arg3,
4239 bool *overloaded_p, tsubst_flags_t complain)
4241 tree orig_arg1 = arg1;
4242 tree orig_arg2 = arg2;
4243 tree orig_arg3 = arg3;
4244 struct z_candidate *candidates = 0, *cand;
4245 VEC(tree,gc) *arglist;
4246 tree fnname;
4247 tree args[3];
4248 tree result = NULL_TREE;
4249 bool result_valid_p = false;
4250 enum tree_code code2 = NOP_EXPR;
4251 enum tree_code code_orig_arg1 = ERROR_MARK;
4252 enum tree_code code_orig_arg2 = ERROR_MARK;
4253 conversion *conv;
4254 void *p;
4255 bool strict_p;
4256 bool any_viable_p;
4258 if (error_operand_p (arg1)
4259 || error_operand_p (arg2)
4260 || error_operand_p (arg3))
4261 return error_mark_node;
4263 if (code == MODIFY_EXPR)
4265 code2 = TREE_CODE (arg3);
4266 arg3 = NULL_TREE;
4267 fnname = ansi_assopname (code2);
4269 else
4270 fnname = ansi_opname (code);
4272 arg1 = prep_operand (arg1);
4274 switch (code)
4276 case NEW_EXPR:
4277 case VEC_NEW_EXPR:
4278 case VEC_DELETE_EXPR:
4279 case DELETE_EXPR:
4280 /* Use build_op_new_call and build_op_delete_call instead. */
4281 gcc_unreachable ();
4283 case CALL_EXPR:
4284 /* Use build_op_call instead. */
4285 gcc_unreachable ();
4287 case TRUTH_ORIF_EXPR:
4288 case TRUTH_ANDIF_EXPR:
4289 case TRUTH_AND_EXPR:
4290 case TRUTH_OR_EXPR:
4291 /* These are saved for the sake of warn_logical_operator. */
4292 code_orig_arg1 = TREE_CODE (arg1);
4293 code_orig_arg2 = TREE_CODE (arg2);
4295 default:
4296 break;
4299 arg2 = prep_operand (arg2);
4300 arg3 = prep_operand (arg3);
4302 if (code == COND_EXPR)
4303 /* Use build_conditional_expr instead. */
4304 gcc_unreachable ();
4305 else if (! IS_OVERLOAD_TYPE (TREE_TYPE (arg1))
4306 && (! arg2 || ! IS_OVERLOAD_TYPE (TREE_TYPE (arg2))))
4307 goto builtin;
4309 if (code == POSTINCREMENT_EXPR || code == POSTDECREMENT_EXPR)
4310 arg2 = integer_zero_node;
4312 arglist = VEC_alloc (tree, gc, 3);
4313 VEC_quick_push (tree, arglist, arg1);
4314 if (arg2 != NULL_TREE)
4315 VEC_quick_push (tree, arglist, arg2);
4316 if (arg3 != NULL_TREE)
4317 VEC_quick_push (tree, arglist, arg3);
4319 /* Get the high-water mark for the CONVERSION_OBSTACK. */
4320 p = conversion_obstack_alloc (0);
4322 /* Add namespace-scope operators to the list of functions to
4323 consider. */
4324 add_candidates (lookup_function_nonclass (fnname, arglist, /*block_p=*/true),
4325 NULL_TREE, arglist, NULL_TREE,
4326 NULL_TREE, false, NULL_TREE, NULL_TREE,
4327 flags, &candidates);
4328 /* Add class-member operators to the candidate set. */
4329 if (CLASS_TYPE_P (TREE_TYPE (arg1)))
4331 tree fns;
4333 fns = lookup_fnfields (TREE_TYPE (arg1), fnname, 1);
4334 if (fns == error_mark_node)
4336 result = error_mark_node;
4337 goto user_defined_result_ready;
4339 if (fns)
4340 add_candidates (BASELINK_FUNCTIONS (fns),
4341 NULL_TREE, arglist, NULL_TREE,
4342 NULL_TREE, false,
4343 BASELINK_BINFO (fns),
4344 BASELINK_ACCESS_BINFO (fns),
4345 flags, &candidates);
4348 args[0] = arg1;
4349 args[1] = arg2;
4350 args[2] = NULL_TREE;
4352 add_builtin_candidates (&candidates, code, code2, fnname, args, flags);
4354 switch (code)
4356 case COMPOUND_EXPR:
4357 case ADDR_EXPR:
4358 /* For these, the built-in candidates set is empty
4359 [over.match.oper]/3. We don't want non-strict matches
4360 because exact matches are always possible with built-in
4361 operators. The built-in candidate set for COMPONENT_REF
4362 would be empty too, but since there are no such built-in
4363 operators, we accept non-strict matches for them. */
4364 strict_p = true;
4365 break;
4367 default:
4368 strict_p = pedantic;
4369 break;
4372 candidates = splice_viable (candidates, strict_p, &any_viable_p);
4373 if (!any_viable_p)
4375 switch (code)
4377 case POSTINCREMENT_EXPR:
4378 case POSTDECREMENT_EXPR:
4379 /* Don't try anything fancy if we're not allowed to produce
4380 errors. */
4381 if (!(complain & tf_error))
4382 return error_mark_node;
4384 /* Look for an `operator++ (int)'. Pre-1985 C++ didn't
4385 distinguish between prefix and postfix ++ and
4386 operator++() was used for both, so we allow this with
4387 -fpermissive. */
4388 if (flags & LOOKUP_COMPLAIN)
4390 const char *msg = (flag_permissive)
4391 ? G_("no %<%D(int)%> declared for postfix %qs,"
4392 " trying prefix operator instead")
4393 : G_("no %<%D(int)%> declared for postfix %qs");
4394 permerror (input_location, msg, fnname,
4395 operator_name_info[code].name);
4398 if (!flag_permissive)
4399 return error_mark_node;
4401 if (code == POSTINCREMENT_EXPR)
4402 code = PREINCREMENT_EXPR;
4403 else
4404 code = PREDECREMENT_EXPR;
4405 result = build_new_op (code, flags, arg1, NULL_TREE, NULL_TREE,
4406 overloaded_p, complain);
4407 break;
4409 /* The caller will deal with these. */
4410 case ADDR_EXPR:
4411 case COMPOUND_EXPR:
4412 case COMPONENT_REF:
4413 result = NULL_TREE;
4414 result_valid_p = true;
4415 break;
4417 default:
4418 if ((flags & LOOKUP_COMPLAIN) && (complain & tf_error))
4420 /* If one of the arguments of the operator represents
4421 an invalid use of member function pointer, try to report
4422 a meaningful error ... */
4423 if (invalid_nonstatic_memfn_p (arg1, tf_error)
4424 || invalid_nonstatic_memfn_p (arg2, tf_error)
4425 || invalid_nonstatic_memfn_p (arg3, tf_error))
4426 /* We displayed the error message. */;
4427 else
4429 /* ... Otherwise, report the more generic
4430 "no matching operator found" error */
4431 op_error (code, code2, arg1, arg2, arg3, FALSE);
4432 print_z_candidates (candidates);
4435 result = error_mark_node;
4436 break;
4439 else
4441 cand = tourney (candidates);
4442 if (cand == 0)
4444 if ((flags & LOOKUP_COMPLAIN) && (complain & tf_error))
4446 op_error (code, code2, arg1, arg2, arg3, TRUE);
4447 print_z_candidates (candidates);
4449 result = error_mark_node;
4451 else if (TREE_CODE (cand->fn) == FUNCTION_DECL)
4453 if (overloaded_p)
4454 *overloaded_p = true;
4456 if (resolve_args (arglist) == NULL)
4457 result = error_mark_node;
4458 else
4459 result = build_over_call (cand, LOOKUP_NORMAL, complain);
4461 else
4463 /* Give any warnings we noticed during overload resolution. */
4464 if (cand->warnings && (complain & tf_warning))
4466 struct candidate_warning *w;
4467 for (w = cand->warnings; w; w = w->next)
4468 joust (cand, w->loser, 1);
4471 /* Check for comparison of different enum types. */
4472 switch (code)
4474 case GT_EXPR:
4475 case LT_EXPR:
4476 case GE_EXPR:
4477 case LE_EXPR:
4478 case EQ_EXPR:
4479 case NE_EXPR:
4480 if (TREE_CODE (TREE_TYPE (arg1)) == ENUMERAL_TYPE
4481 && TREE_CODE (TREE_TYPE (arg2)) == ENUMERAL_TYPE
4482 && (TYPE_MAIN_VARIANT (TREE_TYPE (arg1))
4483 != TYPE_MAIN_VARIANT (TREE_TYPE (arg2)))
4484 && (complain & tf_warning))
4486 warning (OPT_Wenum_compare,
4487 "comparison between %q#T and %q#T",
4488 TREE_TYPE (arg1), TREE_TYPE (arg2));
4490 break;
4491 default:
4492 break;
4495 /* We need to strip any leading REF_BIND so that bitfields
4496 don't cause errors. This should not remove any important
4497 conversions, because builtins don't apply to class
4498 objects directly. */
4499 conv = cand->convs[0];
4500 if (conv->kind == ck_ref_bind)
4501 conv = conv->u.next;
4502 arg1 = convert_like (conv, arg1, complain);
4504 if (arg2)
4506 /* We need to call warn_logical_operator before
4507 converting arg2 to a boolean_type. */
4508 if (complain & tf_warning)
4509 warn_logical_operator (input_location, code, boolean_type_node,
4510 code_orig_arg1, arg1,
4511 code_orig_arg2, arg2);
4513 conv = cand->convs[1];
4514 if (conv->kind == ck_ref_bind)
4515 conv = conv->u.next;
4516 arg2 = convert_like (conv, arg2, complain);
4518 if (arg3)
4520 conv = cand->convs[2];
4521 if (conv->kind == ck_ref_bind)
4522 conv = conv->u.next;
4523 arg3 = convert_like (conv, arg3, complain);
4529 user_defined_result_ready:
4531 /* Free all the conversions we allocated. */
4532 obstack_free (&conversion_obstack, p);
4534 if (result || result_valid_p)
4535 return result;
4537 builtin:
4538 avoid_sign_compare_warnings (orig_arg1, arg1);
4539 avoid_sign_compare_warnings (orig_arg2, arg2);
4540 avoid_sign_compare_warnings (orig_arg3, arg3);
4542 switch (code)
4544 case MODIFY_EXPR:
4545 return cp_build_modify_expr (arg1, code2, arg2, complain);
4547 case INDIRECT_REF:
4548 return cp_build_indirect_ref (arg1, RO_UNARY_STAR, complain);
4550 case TRUTH_ANDIF_EXPR:
4551 case TRUTH_ORIF_EXPR:
4552 case TRUTH_AND_EXPR:
4553 case TRUTH_OR_EXPR:
4554 warn_logical_operator (input_location, code, boolean_type_node,
4555 code_orig_arg1, arg1, code_orig_arg2, arg2);
4556 /* Fall through. */
4557 case PLUS_EXPR:
4558 case MINUS_EXPR:
4559 case MULT_EXPR:
4560 case TRUNC_DIV_EXPR:
4561 case GT_EXPR:
4562 case LT_EXPR:
4563 case GE_EXPR:
4564 case LE_EXPR:
4565 case EQ_EXPR:
4566 case NE_EXPR:
4567 case MAX_EXPR:
4568 case MIN_EXPR:
4569 case LSHIFT_EXPR:
4570 case RSHIFT_EXPR:
4571 case TRUNC_MOD_EXPR:
4572 case BIT_AND_EXPR:
4573 case BIT_IOR_EXPR:
4574 case BIT_XOR_EXPR:
4575 return cp_build_binary_op (input_location, code, arg1, arg2, complain);
4577 case UNARY_PLUS_EXPR:
4578 case NEGATE_EXPR:
4579 case BIT_NOT_EXPR:
4580 case TRUTH_NOT_EXPR:
4581 case PREINCREMENT_EXPR:
4582 case POSTINCREMENT_EXPR:
4583 case PREDECREMENT_EXPR:
4584 case POSTDECREMENT_EXPR:
4585 case REALPART_EXPR:
4586 case IMAGPART_EXPR:
4587 return cp_build_unary_op (code, arg1, candidates != 0, complain);
4589 case ARRAY_REF:
4590 return cp_build_array_ref (input_location, arg1, arg2, complain);
4592 case MEMBER_REF:
4593 return build_m_component_ref (cp_build_indirect_ref (arg1, RO_NULL,
4594 complain),
4595 arg2);
4597 /* The caller will deal with these. */
4598 case ADDR_EXPR:
4599 case COMPONENT_REF:
4600 case COMPOUND_EXPR:
4601 return NULL_TREE;
4603 default:
4604 gcc_unreachable ();
4606 return NULL_TREE;
4609 /* Returns true iff T, an element of an OVERLOAD chain, is a usual
4610 deallocation function (3.7.4.2 [basic.stc.dynamic.deallocation]). */
4612 static bool
4613 non_placement_deallocation_fn_p (tree t)
4615 /* A template instance is never a usual deallocation function,
4616 regardless of its signature. */
4617 if (TREE_CODE (t) == TEMPLATE_DECL
4618 || primary_template_instantiation_p (t))
4619 return false;
4621 /* If a class T has a member deallocation function named operator delete
4622 with exactly one parameter, then that function is a usual
4623 (non-placement) deallocation function. If class T does not declare
4624 such an operator delete but does declare a member deallocation
4625 function named operator delete with exactly two parameters, the second
4626 of which has type std::size_t (18.2), then this function is a usual
4627 deallocation function. */
4628 t = FUNCTION_ARG_CHAIN (t);
4629 if (t == void_list_node
4630 || (t && same_type_p (TREE_VALUE (t), size_type_node)
4631 && TREE_CHAIN (t) == void_list_node))
4632 return true;
4633 return false;
4636 /* Build a call to operator delete. This has to be handled very specially,
4637 because the restrictions on what signatures match are different from all
4638 other call instances. For a normal delete, only a delete taking (void *)
4639 or (void *, size_t) is accepted. For a placement delete, only an exact
4640 match with the placement new is accepted.
4642 CODE is either DELETE_EXPR or VEC_DELETE_EXPR.
4643 ADDR is the pointer to be deleted.
4644 SIZE is the size of the memory block to be deleted.
4645 GLOBAL_P is true if the delete-expression should not consider
4646 class-specific delete operators.
4647 PLACEMENT is the corresponding placement new call, or NULL_TREE.
4649 If this call to "operator delete" is being generated as part to
4650 deallocate memory allocated via a new-expression (as per [expr.new]
4651 which requires that if the initialization throws an exception then
4652 we call a deallocation function), then ALLOC_FN is the allocation
4653 function. */
4655 tree
4656 build_op_delete_call (enum tree_code code, tree addr, tree size,
4657 bool global_p, tree placement,
4658 tree alloc_fn)
4660 tree fn = NULL_TREE;
4661 tree fns, fnname, type, t;
4663 if (addr == error_mark_node)
4664 return error_mark_node;
4666 type = strip_array_types (TREE_TYPE (TREE_TYPE (addr)));
4668 fnname = ansi_opname (code);
4670 if (CLASS_TYPE_P (type)
4671 && COMPLETE_TYPE_P (complete_type (type))
4672 && !global_p)
4673 /* In [class.free]
4675 If the result of the lookup is ambiguous or inaccessible, or if
4676 the lookup selects a placement deallocation function, the
4677 program is ill-formed.
4679 Therefore, we ask lookup_fnfields to complain about ambiguity. */
4681 fns = lookup_fnfields (TYPE_BINFO (type), fnname, 1);
4682 if (fns == error_mark_node)
4683 return error_mark_node;
4685 else
4686 fns = NULL_TREE;
4688 if (fns == NULL_TREE)
4689 fns = lookup_name_nonclass (fnname);
4691 /* Strip const and volatile from addr. */
4692 addr = cp_convert (ptr_type_node, addr);
4694 if (placement)
4696 /* "A declaration of a placement deallocation function matches the
4697 declaration of a placement allocation function if it has the same
4698 number of parameters and, after parameter transformations (8.3.5),
4699 all parameter types except the first are identical."
4701 So we build up the function type we want and ask instantiate_type
4702 to get it for us. */
4703 t = FUNCTION_ARG_CHAIN (alloc_fn);
4704 t = tree_cons (NULL_TREE, ptr_type_node, t);
4705 t = build_function_type (void_type_node, t);
4707 fn = instantiate_type (t, fns, tf_none);
4708 if (fn == error_mark_node)
4709 return NULL_TREE;
4711 if (BASELINK_P (fn))
4712 fn = BASELINK_FUNCTIONS (fn);
4714 /* "If the lookup finds the two-parameter form of a usual deallocation
4715 function (3.7.4.2) and that function, considered as a placement
4716 deallocation function, would have been selected as a match for the
4717 allocation function, the program is ill-formed." */
4718 if (non_placement_deallocation_fn_p (fn))
4720 /* But if the class has an operator delete (void *), then that is
4721 the usual deallocation function, so we shouldn't complain
4722 about using the operator delete (void *, size_t). */
4723 for (t = BASELINK_P (fns) ? BASELINK_FUNCTIONS (fns) : fns;
4724 t; t = OVL_NEXT (t))
4726 tree elt = OVL_CURRENT (t);
4727 if (non_placement_deallocation_fn_p (elt)
4728 && FUNCTION_ARG_CHAIN (elt) == void_list_node)
4729 goto ok;
4731 permerror (0, "non-placement deallocation function %q+D", fn);
4732 permerror (input_location, "selected for placement delete");
4733 ok:;
4736 else
4737 /* "Any non-placement deallocation function matches a non-placement
4738 allocation function. If the lookup finds a single matching
4739 deallocation function, that function will be called; otherwise, no
4740 deallocation function will be called." */
4741 for (t = BASELINK_P (fns) ? BASELINK_FUNCTIONS (fns) : fns;
4742 t; t = OVL_NEXT (t))
4744 tree elt = OVL_CURRENT (t);
4745 if (non_placement_deallocation_fn_p (elt))
4747 fn = elt;
4748 /* "If a class T has a member deallocation function named
4749 operator delete with exactly one parameter, then that
4750 function is a usual (non-placement) deallocation
4751 function. If class T does not declare such an operator
4752 delete but does declare a member deallocation function named
4753 operator delete with exactly two parameters, the second of
4754 which has type std::size_t (18.2), then this function is a
4755 usual deallocation function."
4757 So (void*) beats (void*, size_t). */
4758 if (FUNCTION_ARG_CHAIN (fn) == void_list_node)
4759 break;
4763 /* If we have a matching function, call it. */
4764 if (fn)
4766 gcc_assert (TREE_CODE (fn) == FUNCTION_DECL);
4768 /* If the FN is a member function, make sure that it is
4769 accessible. */
4770 if (BASELINK_P (fns))
4771 perform_or_defer_access_check (BASELINK_BINFO (fns), fn, fn);
4773 /* Core issue 901: It's ok to new a type with deleted delete. */
4774 if (DECL_DELETED_FN (fn) && alloc_fn)
4775 return NULL_TREE;
4777 if (placement)
4779 /* The placement args might not be suitable for overload
4780 resolution at this point, so build the call directly. */
4781 int nargs = call_expr_nargs (placement);
4782 tree *argarray = XALLOCAVEC (tree, nargs);
4783 int i;
4784 argarray[0] = addr;
4785 for (i = 1; i < nargs; i++)
4786 argarray[i] = CALL_EXPR_ARG (placement, i);
4787 mark_used (fn);
4788 return build_cxx_call (fn, nargs, argarray);
4790 else
4792 tree ret;
4793 VEC(tree,gc) *args = VEC_alloc (tree, gc, 2);
4794 VEC_quick_push (tree, args, addr);
4795 if (FUNCTION_ARG_CHAIN (fn) != void_list_node)
4796 VEC_quick_push (tree, args, size);
4797 ret = cp_build_function_call_vec (fn, &args, tf_warning_or_error);
4798 VEC_free (tree, gc, args);
4799 return ret;
4803 /* [expr.new]
4805 If no unambiguous matching deallocation function can be found,
4806 propagating the exception does not cause the object's memory to
4807 be freed. */
4808 if (alloc_fn)
4810 if (!placement)
4811 warning (0, "no corresponding deallocation function for %qD",
4812 alloc_fn);
4813 return NULL_TREE;
4816 error ("no suitable %<operator %s%> for %qT",
4817 operator_name_info[(int)code].name, type);
4818 return error_mark_node;
4821 /* If the current scope isn't allowed to access DECL along
4822 BASETYPE_PATH, give an error. The most derived class in
4823 BASETYPE_PATH is the one used to qualify DECL. DIAG_DECL is
4824 the declaration to use in the error diagnostic. */
4826 bool
4827 enforce_access (tree basetype_path, tree decl, tree diag_decl)
4829 gcc_assert (TREE_CODE (basetype_path) == TREE_BINFO);
4831 if (!accessible_p (basetype_path, decl, true))
4833 if (TREE_PRIVATE (decl))
4834 error ("%q+#D is private", diag_decl);
4835 else if (TREE_PROTECTED (decl))
4836 error ("%q+#D is protected", diag_decl);
4837 else
4838 error ("%q+#D is inaccessible", diag_decl);
4839 error ("within this context");
4840 return false;
4843 return true;
4846 /* Initialize a temporary of type TYPE with EXPR. The FLAGS are a
4847 bitwise or of LOOKUP_* values. If any errors are warnings are
4848 generated, set *DIAGNOSTIC_FN to "error" or "warning",
4849 respectively. If no diagnostics are generated, set *DIAGNOSTIC_FN
4850 to NULL. */
4852 static tree
4853 build_temp (tree expr, tree type, int flags,
4854 diagnostic_t *diagnostic_kind)
4856 int savew, savee;
4857 VEC(tree,gc) *args;
4859 savew = warningcount, savee = errorcount;
4860 args = make_tree_vector_single (expr);
4861 expr = build_special_member_call (NULL_TREE, complete_ctor_identifier,
4862 &args, type, flags, tf_warning_or_error);
4863 release_tree_vector (args);
4864 if (warningcount > savew)
4865 *diagnostic_kind = DK_WARNING;
4866 else if (errorcount > savee)
4867 *diagnostic_kind = DK_ERROR;
4868 else
4869 *diagnostic_kind = DK_UNSPECIFIED;
4870 return expr;
4873 /* Perform warnings about peculiar, but valid, conversions from/to NULL.
4874 EXPR is implicitly converted to type TOTYPE.
4875 FN and ARGNUM are used for diagnostics. */
4877 static void
4878 conversion_null_warnings (tree totype, tree expr, tree fn, int argnum)
4880 tree t = non_reference (totype);
4882 /* Issue warnings about peculiar, but valid, uses of NULL. */
4883 if (expr == null_node && TREE_CODE (t) != BOOLEAN_TYPE && ARITHMETIC_TYPE_P (t))
4885 if (fn)
4886 warning_at (input_location, OPT_Wconversion_null,
4887 "passing NULL to non-pointer argument %P of %qD",
4888 argnum, fn);
4889 else
4890 warning_at (input_location, OPT_Wconversion_null,
4891 "converting to non-pointer type %qT from NULL", t);
4894 /* Issue warnings if "false" is converted to a NULL pointer */
4895 else if (expr == boolean_false_node && fn && POINTER_TYPE_P (t))
4896 warning_at (input_location, OPT_Wconversion_null,
4897 "converting %<false%> to pointer type for argument %P of %qD",
4898 argnum, fn);
4901 /* Perform the conversions in CONVS on the expression EXPR. FN and
4902 ARGNUM are used for diagnostics. ARGNUM is zero based, -1
4903 indicates the `this' argument of a method. INNER is nonzero when
4904 being called to continue a conversion chain. It is negative when a
4905 reference binding will be applied, positive otherwise. If
4906 ISSUE_CONVERSION_WARNINGS is true, warnings about suspicious
4907 conversions will be emitted if appropriate. If C_CAST_P is true,
4908 this conversion is coming from a C-style cast; in that case,
4909 conversions to inaccessible bases are permitted. */
4911 static tree
4912 convert_like_real (conversion *convs, tree expr, tree fn, int argnum,
4913 int inner, bool issue_conversion_warnings,
4914 bool c_cast_p, tsubst_flags_t complain)
4916 tree totype = convs->type;
4917 diagnostic_t diag_kind;
4918 int flags;
4920 if (convs->bad_p
4921 && convs->kind != ck_user
4922 && convs->kind != ck_list
4923 && convs->kind != ck_ambig
4924 && convs->kind != ck_ref_bind
4925 && convs->kind != ck_rvalue
4926 && convs->kind != ck_base)
4928 conversion *t = convs;
4930 /* Give a helpful error if this is bad because of excess braces. */
4931 if (BRACE_ENCLOSED_INITIALIZER_P (expr)
4932 && SCALAR_TYPE_P (totype)
4933 && CONSTRUCTOR_NELTS (expr) > 0
4934 && BRACE_ENCLOSED_INITIALIZER_P (CONSTRUCTOR_ELT (expr, 0)->value))
4935 permerror (input_location, "too many braces around initializer for %qT", totype);
4937 for (; t; t = convs->u.next)
4939 if (t->kind == ck_user || !t->bad_p)
4941 expr = convert_like_real (t, expr, fn, argnum, 1,
4942 /*issue_conversion_warnings=*/false,
4943 /*c_cast_p=*/false,
4944 complain);
4945 break;
4947 else if (t->kind == ck_ambig)
4948 return convert_like_real (t, expr, fn, argnum, 1,
4949 /*issue_conversion_warnings=*/false,
4950 /*c_cast_p=*/false,
4951 complain);
4952 else if (t->kind == ck_identity)
4953 break;
4955 if (complain & tf_error)
4957 permerror (input_location, "invalid conversion from %qT to %qT", TREE_TYPE (expr), totype);
4958 if (fn)
4959 permerror (DECL_SOURCE_LOCATION (fn),
4960 " initializing argument %P of %qD", argnum, fn);
4962 else
4963 return error_mark_node;
4965 return cp_convert (totype, expr);
4968 if (issue_conversion_warnings && (complain & tf_warning))
4969 conversion_null_warnings (totype, expr, fn, argnum);
4971 switch (convs->kind)
4973 case ck_user:
4975 struct z_candidate *cand = convs->cand;
4976 tree convfn = cand->fn;
4977 unsigned i;
4979 expr = mark_rvalue_use (expr);
4981 /* When converting from an init list we consider explicit
4982 constructors, but actually trying to call one is an error. */
4983 if (DECL_NONCONVERTING_P (convfn) && DECL_CONSTRUCTOR_P (convfn)
4984 /* Unless we're calling it for value-initialization from an
4985 empty list, since that is handled separately in 8.5.4. */
4986 && cand->num_convs > 0)
4988 if (complain & tf_error)
4989 error ("converting to %qT from initializer list would use "
4990 "explicit constructor %qD", totype, convfn);
4991 else
4992 return error_mark_node;
4995 /* Set user_conv_p on the argument conversions, so rvalue/base
4996 handling knows not to allow any more UDCs. */
4997 for (i = 0; i < cand->num_convs; ++i)
4998 cand->convs[i]->user_conv_p = true;
5000 expr = build_over_call (cand, LOOKUP_NORMAL, complain);
5002 /* If this is a constructor or a function returning an aggr type,
5003 we need to build up a TARGET_EXPR. */
5004 if (DECL_CONSTRUCTOR_P (convfn))
5006 expr = build_cplus_new (totype, expr);
5008 /* Remember that this was list-initialization. */
5009 if (convs->check_narrowing)
5010 TARGET_EXPR_LIST_INIT_P (expr) = true;
5013 return expr;
5015 case ck_identity:
5016 expr = mark_rvalue_use (expr);
5017 if (BRACE_ENCLOSED_INITIALIZER_P (expr))
5019 int nelts = CONSTRUCTOR_NELTS (expr);
5020 if (nelts == 0)
5021 expr = integer_zero_node;
5022 else if (nelts == 1)
5023 expr = CONSTRUCTOR_ELT (expr, 0)->value;
5024 else
5025 gcc_unreachable ();
5028 if (type_unknown_p (expr))
5029 expr = instantiate_type (totype, expr, complain);
5030 /* Convert a constant to its underlying value, unless we are
5031 about to bind it to a reference, in which case we need to
5032 leave it as an lvalue. */
5033 if (inner >= 0)
5035 expr = decl_constant_value (expr);
5036 if (expr == null_node && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (totype))
5037 /* If __null has been converted to an integer type, we do not
5038 want to warn about uses of EXPR as an integer, rather than
5039 as a pointer. */
5040 expr = build_int_cst (totype, 0);
5042 return expr;
5043 case ck_ambig:
5044 if (complain & tf_error)
5046 /* Call build_user_type_conversion again for the error. */
5047 build_user_type_conversion (totype, convs->u.expr, LOOKUP_NORMAL);
5048 if (fn)
5049 error (" initializing argument %P of %q+D", argnum, fn);
5051 return error_mark_node;
5053 case ck_list:
5055 /* Conversion to std::initializer_list<T>. */
5056 tree elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (totype), 0);
5057 tree new_ctor = build_constructor (init_list_type_node, NULL);
5058 unsigned len = CONSTRUCTOR_NELTS (expr);
5059 tree array, val;
5060 VEC(tree,gc) *parms;
5061 unsigned ix;
5063 /* Convert all the elements. */
5064 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expr), ix, val)
5066 tree sub = convert_like_real (convs->u.list[ix], val, fn, argnum,
5067 1, false, false, complain);
5068 if (sub == error_mark_node)
5069 return sub;
5070 check_narrowing (TREE_TYPE (sub), val);
5071 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_ctor), NULL_TREE, sub);
5073 /* Build up the array. */
5074 elttype = cp_build_qualified_type
5075 (elttype, cp_type_quals (elttype) | TYPE_QUAL_CONST);
5076 array = build_array_of_n_type (elttype, len);
5077 array = finish_compound_literal (array, new_ctor);
5079 parms = make_tree_vector ();
5080 VEC_safe_push (tree, gc, parms, decay_conversion (array));
5081 VEC_safe_push (tree, gc, parms, size_int (len));
5082 /* Call the private constructor. */
5083 push_deferring_access_checks (dk_no_check);
5084 new_ctor = build_special_member_call
5085 (NULL_TREE, complete_ctor_identifier, &parms, totype, 0, complain);
5086 release_tree_vector (parms);
5087 pop_deferring_access_checks ();
5088 return build_cplus_new (totype, new_ctor);
5091 case ck_aggr:
5092 return get_target_expr (digest_init (totype, expr));
5094 default:
5095 break;
5098 expr = convert_like_real (convs->u.next, expr, fn, argnum,
5099 convs->kind == ck_ref_bind ? -1 : 1,
5100 convs->kind == ck_ref_bind ? issue_conversion_warnings : false,
5101 c_cast_p,
5102 complain);
5103 if (expr == error_mark_node)
5104 return error_mark_node;
5106 switch (convs->kind)
5108 case ck_rvalue:
5109 expr = decay_conversion (expr);
5110 if (! MAYBE_CLASS_TYPE_P (totype))
5111 return expr;
5112 /* Else fall through. */
5113 case ck_base:
5114 if (convs->kind == ck_base && !convs->need_temporary_p)
5116 /* We are going to bind a reference directly to a base-class
5117 subobject of EXPR. */
5118 /* Build an expression for `*((base*) &expr)'. */
5119 expr = cp_build_unary_op (ADDR_EXPR, expr, 0, complain);
5120 expr = convert_to_base (expr, build_pointer_type (totype),
5121 !c_cast_p, /*nonnull=*/true, complain);
5122 expr = cp_build_indirect_ref (expr, RO_IMPLICIT_CONVERSION, complain);
5123 return expr;
5126 /* Copy-initialization where the cv-unqualified version of the source
5127 type is the same class as, or a derived class of, the class of the
5128 destination [is treated as direct-initialization]. [dcl.init] */
5129 flags = LOOKUP_NORMAL|LOOKUP_ONLYCONVERTING;
5130 if (convs->user_conv_p)
5131 /* This conversion is being done in the context of a user-defined
5132 conversion (i.e. the second step of copy-initialization), so
5133 don't allow any more. */
5134 flags |= LOOKUP_NO_CONVERSION;
5135 expr = build_temp (expr, totype, flags, &diag_kind);
5136 if (diag_kind && fn)
5138 if ((complain & tf_error))
5139 emit_diagnostic (diag_kind, DECL_SOURCE_LOCATION (fn), 0,
5140 " initializing argument %P of %qD", argnum, fn);
5141 else if (diag_kind == DK_ERROR)
5142 return error_mark_node;
5144 return build_cplus_new (totype, expr);
5146 case ck_ref_bind:
5148 tree ref_type = totype;
5150 if (convs->bad_p && TYPE_REF_IS_RVALUE (ref_type)
5151 && real_lvalue_p (expr))
5153 if (complain & tf_error)
5155 error ("cannot bind %qT lvalue to %qT",
5156 TREE_TYPE (expr), totype);
5157 if (fn)
5158 error (" initializing argument %P of %q+D", argnum, fn);
5160 return error_mark_node;
5163 /* If necessary, create a temporary.
5165 VA_ARG_EXPR and CONSTRUCTOR expressions are special cases
5166 that need temporaries, even when their types are reference
5167 compatible with the type of reference being bound, so the
5168 upcoming call to cp_build_unary_op (ADDR_EXPR, expr, ...)
5169 doesn't fail. */
5170 if (convs->need_temporary_p
5171 || TREE_CODE (expr) == CONSTRUCTOR
5172 || TREE_CODE (expr) == VA_ARG_EXPR)
5174 tree type = convs->u.next->type;
5175 cp_lvalue_kind lvalue = real_lvalue_p (expr);
5177 if (!CP_TYPE_CONST_NON_VOLATILE_P (TREE_TYPE (ref_type))
5178 && !TYPE_REF_IS_RVALUE (ref_type))
5180 if (complain & tf_error)
5182 /* If the reference is volatile or non-const, we
5183 cannot create a temporary. */
5184 if (lvalue & clk_bitfield)
5185 error ("cannot bind bitfield %qE to %qT",
5186 expr, ref_type);
5187 else if (lvalue & clk_packed)
5188 error ("cannot bind packed field %qE to %qT",
5189 expr, ref_type);
5190 else
5191 error ("cannot bind rvalue %qE to %qT", expr, ref_type);
5193 return error_mark_node;
5195 /* If the source is a packed field, and we must use a copy
5196 constructor, then building the target expr will require
5197 binding the field to the reference parameter to the
5198 copy constructor, and we'll end up with an infinite
5199 loop. If we can use a bitwise copy, then we'll be
5200 OK. */
5201 if ((lvalue & clk_packed)
5202 && CLASS_TYPE_P (type)
5203 && type_has_nontrivial_copy_init (type))
5205 if (complain & tf_error)
5206 error ("cannot bind packed field %qE to %qT",
5207 expr, ref_type);
5208 return error_mark_node;
5210 if (lvalue & clk_bitfield)
5212 expr = convert_bitfield_to_declared_type (expr);
5213 expr = fold_convert (type, expr);
5215 expr = build_target_expr_with_type (expr, type);
5218 /* Take the address of the thing to which we will bind the
5219 reference. */
5220 expr = cp_build_unary_op (ADDR_EXPR, expr, 1, complain);
5221 if (expr == error_mark_node)
5222 return error_mark_node;
5224 /* Convert it to a pointer to the type referred to by the
5225 reference. This will adjust the pointer if a derived to
5226 base conversion is being performed. */
5227 expr = cp_convert (build_pointer_type (TREE_TYPE (ref_type)),
5228 expr);
5229 /* Convert the pointer to the desired reference type. */
5230 return build_nop (ref_type, expr);
5233 case ck_lvalue:
5234 return decay_conversion (expr);
5236 case ck_qual:
5237 /* Warn about deprecated conversion if appropriate. */
5238 string_conv_p (totype, expr, 1);
5239 break;
5241 case ck_ptr:
5242 if (convs->base_p)
5243 expr = convert_to_base (expr, totype, !c_cast_p,
5244 /*nonnull=*/false, complain);
5245 return build_nop (totype, expr);
5247 case ck_pmem:
5248 return convert_ptrmem (totype, expr, /*allow_inverse_p=*/false,
5249 c_cast_p);
5251 default:
5252 break;
5255 if (convs->check_narrowing)
5256 check_narrowing (totype, expr);
5258 if (issue_conversion_warnings && (complain & tf_warning))
5259 expr = convert_and_check (totype, expr);
5260 else
5261 expr = convert (totype, expr);
5263 return expr;
5266 /* ARG is being passed to a varargs function. Perform any conversions
5267 required. Return the converted value. */
5269 tree
5270 convert_arg_to_ellipsis (tree arg)
5272 /* [expr.call]
5274 The lvalue-to-rvalue, array-to-pointer, and function-to-pointer
5275 standard conversions are performed. */
5276 arg = decay_conversion (arg);
5277 /* [expr.call]
5279 If the argument has integral or enumeration type that is subject
5280 to the integral promotions (_conv.prom_), or a floating point
5281 type that is subject to the floating point promotion
5282 (_conv.fpprom_), the value of the argument is converted to the
5283 promoted type before the call. */
5284 if (TREE_CODE (TREE_TYPE (arg)) == REAL_TYPE
5285 && (TYPE_PRECISION (TREE_TYPE (arg))
5286 < TYPE_PRECISION (double_type_node))
5287 && !DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (arg))))
5288 arg = convert_to_real (double_type_node, arg);
5289 else if (NULLPTR_TYPE_P (TREE_TYPE (arg)))
5290 arg = null_pointer_node;
5291 else if (INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (arg)))
5292 arg = perform_integral_promotions (arg);
5294 arg = require_complete_type (arg);
5296 if (arg != error_mark_node
5297 && (type_has_nontrivial_copy_init (TREE_TYPE (arg))
5298 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (arg))))
5300 /* [expr.call] 5.2.2/7:
5301 Passing a potentially-evaluated argument of class type (Clause 9)
5302 with a non-trivial copy constructor or a non-trivial destructor
5303 with no corresponding parameter is conditionally-supported, with
5304 implementation-defined semantics.
5306 We used to just warn here and do a bitwise copy, but now
5307 cp_expr_size will abort if we try to do that.
5309 If the call appears in the context of a sizeof expression,
5310 it is not potentially-evaluated. */
5311 if (cp_unevaluated_operand == 0)
5312 error ("cannot pass objects of non-trivially-copyable "
5313 "type %q#T through %<...%>", TREE_TYPE (arg));
5316 return arg;
5319 /* va_arg (EXPR, TYPE) is a builtin. Make sure it is not abused. */
5321 tree
5322 build_x_va_arg (tree expr, tree type)
5324 if (processing_template_decl)
5325 return build_min (VA_ARG_EXPR, type, expr);
5327 type = complete_type_or_else (type, NULL_TREE);
5329 if (expr == error_mark_node || !type)
5330 return error_mark_node;
5332 expr = mark_lvalue_use (expr);
5334 if (type_has_nontrivial_copy_init (type)
5335 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
5336 || TREE_CODE (type) == REFERENCE_TYPE)
5338 /* Remove reference types so we don't ICE later on. */
5339 tree type1 = non_reference (type);
5340 /* conditionally-supported behavior [expr.call] 5.2.2/7. */
5341 error ("cannot receive objects of non-trivially-copyable type %q#T "
5342 "through %<...%>; ", type);
5343 expr = convert (build_pointer_type (type1), null_node);
5344 expr = cp_build_indirect_ref (expr, RO_NULL, tf_warning_or_error);
5345 return expr;
5348 return build_va_arg (input_location, expr, type);
5351 /* TYPE has been given to va_arg. Apply the default conversions which
5352 would have happened when passed via ellipsis. Return the promoted
5353 type, or the passed type if there is no change. */
5355 tree
5356 cxx_type_promotes_to (tree type)
5358 tree promote;
5360 /* Perform the array-to-pointer and function-to-pointer
5361 conversions. */
5362 type = type_decays_to (type);
5364 promote = type_promotes_to (type);
5365 if (same_type_p (type, promote))
5366 promote = type;
5368 return promote;
5371 /* ARG is a default argument expression being passed to a parameter of
5372 the indicated TYPE, which is a parameter to FN. Do any required
5373 conversions. Return the converted value. */
5375 static GTY(()) VEC(tree,gc) *default_arg_context;
5377 tree
5378 convert_default_arg (tree type, tree arg, tree fn, int parmnum)
5380 int i;
5381 tree t;
5383 /* If the ARG is an unparsed default argument expression, the
5384 conversion cannot be performed. */
5385 if (TREE_CODE (arg) == DEFAULT_ARG)
5387 error ("the default argument for parameter %d of %qD has "
5388 "not yet been parsed",
5389 parmnum, fn);
5390 return error_mark_node;
5393 /* Detect recursion. */
5394 for (i = 0; VEC_iterate (tree, default_arg_context, i, t); ++i)
5395 if (t == fn)
5397 error ("recursive evaluation of default argument for %q#D", fn);
5398 return error_mark_node;
5400 VEC_safe_push (tree, gc, default_arg_context, fn);
5402 if (fn && DECL_TEMPLATE_INFO (fn))
5403 arg = tsubst_default_argument (fn, type, arg);
5405 /* Due to:
5407 [dcl.fct.default]
5409 The names in the expression are bound, and the semantic
5410 constraints are checked, at the point where the default
5411 expressions appears.
5413 we must not perform access checks here. */
5414 push_deferring_access_checks (dk_no_check);
5415 arg = break_out_target_exprs (arg);
5416 if (TREE_CODE (arg) == CONSTRUCTOR)
5418 arg = digest_init (type, arg);
5419 arg = convert_for_initialization (0, type, arg, LOOKUP_NORMAL,
5420 ICR_DEFAULT_ARGUMENT, fn, parmnum,
5421 tf_warning_or_error);
5423 else
5425 /* We must make a copy of ARG, in case subsequent processing
5426 alters any part of it. For example, during gimplification a
5427 cast of the form (T) &X::f (where "f" is a member function)
5428 will lead to replacing the PTRMEM_CST for &X::f with a
5429 VAR_DECL. We can avoid the copy for constants, since they
5430 are never modified in place. */
5431 if (!CONSTANT_CLASS_P (arg))
5432 arg = unshare_expr (arg);
5433 arg = convert_for_initialization (0, type, arg, LOOKUP_NORMAL,
5434 ICR_DEFAULT_ARGUMENT, fn, parmnum,
5435 tf_warning_or_error);
5436 arg = convert_for_arg_passing (type, arg);
5438 pop_deferring_access_checks();
5440 VEC_pop (tree, default_arg_context);
5442 return arg;
5445 /* Returns the type which will really be used for passing an argument of
5446 type TYPE. */
5448 tree
5449 type_passed_as (tree type)
5451 /* Pass classes with copy ctors by invisible reference. */
5452 if (TREE_ADDRESSABLE (type))
5454 type = build_reference_type (type);
5455 /* There are no other pointers to this temporary. */
5456 type = cp_build_qualified_type (type, TYPE_QUAL_RESTRICT);
5458 else if (targetm.calls.promote_prototypes (type)
5459 && INTEGRAL_TYPE_P (type)
5460 && COMPLETE_TYPE_P (type)
5461 && INT_CST_LT_UNSIGNED (TYPE_SIZE (type),
5462 TYPE_SIZE (integer_type_node)))
5463 type = integer_type_node;
5465 return type;
5468 /* Actually perform the appropriate conversion. */
5470 tree
5471 convert_for_arg_passing (tree type, tree val)
5473 tree bitfield_type;
5475 /* If VAL is a bitfield, then -- since it has already been converted
5476 to TYPE -- it cannot have a precision greater than TYPE.
5478 If it has a smaller precision, we must widen it here. For
5479 example, passing "int f:3;" to a function expecting an "int" will
5480 not result in any conversion before this point.
5482 If the precision is the same we must not risk widening. For
5483 example, the COMPONENT_REF for a 32-bit "long long" bitfield will
5484 often have type "int", even though the C++ type for the field is
5485 "long long". If the value is being passed to a function
5486 expecting an "int", then no conversions will be required. But,
5487 if we call convert_bitfield_to_declared_type, the bitfield will
5488 be converted to "long long". */
5489 bitfield_type = is_bitfield_expr_with_lowered_type (val);
5490 if (bitfield_type
5491 && TYPE_PRECISION (TREE_TYPE (val)) < TYPE_PRECISION (type))
5492 val = convert_to_integer (TYPE_MAIN_VARIANT (bitfield_type), val);
5494 if (val == error_mark_node)
5496 /* Pass classes with copy ctors by invisible reference. */
5497 else if (TREE_ADDRESSABLE (type))
5498 val = build1 (ADDR_EXPR, build_reference_type (type), val);
5499 else if (targetm.calls.promote_prototypes (type)
5500 && INTEGRAL_TYPE_P (type)
5501 && COMPLETE_TYPE_P (type)
5502 && INT_CST_LT_UNSIGNED (TYPE_SIZE (type),
5503 TYPE_SIZE (integer_type_node)))
5504 val = perform_integral_promotions (val);
5505 if (warn_missing_format_attribute)
5507 tree rhstype = TREE_TYPE (val);
5508 const enum tree_code coder = TREE_CODE (rhstype);
5509 const enum tree_code codel = TREE_CODE (type);
5510 if ((codel == POINTER_TYPE || codel == REFERENCE_TYPE)
5511 && coder == codel
5512 && check_missing_format_attribute (type, rhstype))
5513 warning (OPT_Wmissing_format_attribute,
5514 "argument of function call might be a candidate for a format attribute");
5516 return val;
5519 /* Returns true iff FN is a function with magic varargs, i.e. ones for
5520 which no conversions at all should be done. This is true for some
5521 builtins which don't act like normal functions. */
5523 static bool
5524 magic_varargs_p (tree fn)
5526 if (DECL_BUILT_IN (fn))
5527 switch (DECL_FUNCTION_CODE (fn))
5529 case BUILT_IN_CLASSIFY_TYPE:
5530 case BUILT_IN_CONSTANT_P:
5531 case BUILT_IN_NEXT_ARG:
5532 case BUILT_IN_VA_START:
5533 return true;
5535 default:;
5536 return lookup_attribute ("type generic",
5537 TYPE_ATTRIBUTES (TREE_TYPE (fn))) != 0;
5540 return false;
5543 /* Subroutine of the various build_*_call functions. Overload resolution
5544 has chosen a winning candidate CAND; build up a CALL_EXPR accordingly.
5545 ARGS is a TREE_LIST of the unconverted arguments to the call. FLAGS is a
5546 bitmask of various LOOKUP_* flags which apply to the call itself. */
5548 static tree
5549 build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain)
5551 tree fn = cand->fn;
5552 const VEC(tree,gc) *args = cand->args;
5553 tree first_arg = cand->first_arg;
5554 conversion **convs = cand->convs;
5555 conversion *conv;
5556 tree parm = TYPE_ARG_TYPES (TREE_TYPE (fn));
5557 int parmlen;
5558 tree val;
5559 int i = 0;
5560 int j = 0;
5561 unsigned int arg_index = 0;
5562 int is_method = 0;
5563 int nargs;
5564 tree *argarray;
5565 bool already_used = false;
5567 /* In a template, there is no need to perform all of the work that
5568 is normally done. We are only interested in the type of the call
5569 expression, i.e., the return type of the function. Any semantic
5570 errors will be deferred until the template is instantiated. */
5571 if (processing_template_decl)
5573 tree expr;
5574 tree return_type;
5575 const tree *argarray;
5576 unsigned int nargs;
5578 return_type = TREE_TYPE (TREE_TYPE (fn));
5579 nargs = VEC_length (tree, args);
5580 if (first_arg == NULL_TREE)
5581 argarray = VEC_address (tree, CONST_CAST (VEC(tree,gc) *, args));
5582 else
5584 tree *alcarray;
5585 unsigned int ix;
5586 tree arg;
5588 ++nargs;
5589 alcarray = XALLOCAVEC (tree, nargs);
5590 alcarray[0] = first_arg;
5591 for (ix = 0; VEC_iterate (tree, args, ix, arg); ++ix)
5592 alcarray[ix + 1] = arg;
5593 argarray = alcarray;
5595 expr = build_call_array_loc (input_location,
5596 return_type, build_addr_func (fn), nargs,
5597 argarray);
5598 if (TREE_THIS_VOLATILE (fn) && cfun)
5599 current_function_returns_abnormally = 1;
5600 if (!VOID_TYPE_P (return_type))
5601 require_complete_type (return_type);
5602 return convert_from_reference (expr);
5605 /* Give any warnings we noticed during overload resolution. */
5606 if (cand->warnings && (complain & tf_warning))
5608 struct candidate_warning *w;
5609 for (w = cand->warnings; w; w = w->next)
5610 joust (cand, w->loser, 1);
5613 /* Make =delete work with SFINAE. */
5614 if (DECL_DELETED_FN (fn) && !(complain & tf_error))
5615 return error_mark_node;
5617 if (DECL_FUNCTION_MEMBER_P (fn))
5619 tree access_fn;
5620 /* If FN is a template function, two cases must be considered.
5621 For example:
5623 struct A {
5624 protected:
5625 template <class T> void f();
5627 template <class T> struct B {
5628 protected:
5629 void g();
5631 struct C : A, B<int> {
5632 using A::f; // #1
5633 using B<int>::g; // #2
5636 In case #1 where `A::f' is a member template, DECL_ACCESS is
5637 recorded in the primary template but not in its specialization.
5638 We check access of FN using its primary template.
5640 In case #2, where `B<int>::g' has a DECL_TEMPLATE_INFO simply
5641 because it is a member of class template B, DECL_ACCESS is
5642 recorded in the specialization `B<int>::g'. We cannot use its
5643 primary template because `B<T>::g' and `B<int>::g' may have
5644 different access. */
5645 if (DECL_TEMPLATE_INFO (fn)
5646 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (fn)))
5647 access_fn = DECL_TI_TEMPLATE (fn);
5648 else
5649 access_fn = fn;
5650 if (flags & LOOKUP_SPECULATIVE)
5652 /* If we're checking for implicit delete, we don't want access
5653 control errors. */
5654 if (!accessible_p (cand->access_path, access_fn, true))
5656 /* Unless we're under maybe_explain_implicit_delete. */
5657 if (flags & LOOKUP_COMPLAIN)
5658 enforce_access (cand->access_path, access_fn, fn);
5659 return error_mark_node;
5662 else
5663 perform_or_defer_access_check (cand->access_path, access_fn, fn);
5666 /* If we're checking for implicit delete, don't bother with argument
5667 conversions. */
5668 if (flags & LOOKUP_SPECULATIVE)
5670 if (DECL_DELETED_FN (fn))
5672 if (flags & LOOKUP_COMPLAIN)
5673 mark_used (fn);
5674 return error_mark_node;
5676 if (cand->viable == 1)
5677 return fn;
5678 else if (!(flags & LOOKUP_COMPLAIN))
5679 /* Reject bad conversions now. */
5680 return error_mark_node;
5681 /* else continue to get conversion error. */
5684 /* Find maximum size of vector to hold converted arguments. */
5685 parmlen = list_length (parm);
5686 nargs = VEC_length (tree, args) + (first_arg != NULL_TREE ? 1 : 0);
5687 if (parmlen > nargs)
5688 nargs = parmlen;
5689 argarray = XALLOCAVEC (tree, nargs);
5691 /* The implicit parameters to a constructor are not considered by overload
5692 resolution, and must be of the proper type. */
5693 if (DECL_CONSTRUCTOR_P (fn))
5695 if (first_arg != NULL_TREE)
5697 argarray[j++] = first_arg;
5698 first_arg = NULL_TREE;
5700 else
5702 argarray[j++] = VEC_index (tree, args, arg_index);
5703 ++arg_index;
5705 parm = TREE_CHAIN (parm);
5706 /* We should never try to call the abstract constructor. */
5707 gcc_assert (!DECL_HAS_IN_CHARGE_PARM_P (fn));
5709 if (DECL_HAS_VTT_PARM_P (fn))
5711 argarray[j++] = VEC_index (tree, args, arg_index);
5712 ++arg_index;
5713 parm = TREE_CHAIN (parm);
5716 /* Bypass access control for 'this' parameter. */
5717 else if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
5719 tree parmtype = TREE_VALUE (parm);
5720 tree arg = (first_arg != NULL_TREE
5721 ? first_arg
5722 : VEC_index (tree, args, arg_index));
5723 tree argtype = TREE_TYPE (arg);
5724 tree converted_arg;
5725 tree base_binfo;
5727 if (convs[i]->bad_p)
5729 if (complain & tf_error)
5730 permerror (input_location, "passing %qT as %<this%> argument of %q#D discards qualifiers",
5731 TREE_TYPE (argtype), fn);
5732 else
5733 return error_mark_node;
5736 /* [class.mfct.nonstatic]: If a nonstatic member function of a class
5737 X is called for an object that is not of type X, or of a type
5738 derived from X, the behavior is undefined.
5740 So we can assume that anything passed as 'this' is non-null, and
5741 optimize accordingly. */
5742 gcc_assert (TREE_CODE (parmtype) == POINTER_TYPE);
5743 /* Convert to the base in which the function was declared. */
5744 gcc_assert (cand->conversion_path != NULL_TREE);
5745 converted_arg = build_base_path (PLUS_EXPR,
5746 arg,
5747 cand->conversion_path,
5749 /* Check that the base class is accessible. */
5750 if (!accessible_base_p (TREE_TYPE (argtype),
5751 BINFO_TYPE (cand->conversion_path), true))
5752 error ("%qT is not an accessible base of %qT",
5753 BINFO_TYPE (cand->conversion_path),
5754 TREE_TYPE (argtype));
5755 /* If fn was found by a using declaration, the conversion path
5756 will be to the derived class, not the base declaring fn. We
5757 must convert from derived to base. */
5758 base_binfo = lookup_base (TREE_TYPE (TREE_TYPE (converted_arg)),
5759 TREE_TYPE (parmtype), ba_unique, NULL);
5760 converted_arg = build_base_path (PLUS_EXPR, converted_arg,
5761 base_binfo, 1);
5763 argarray[j++] = converted_arg;
5764 parm = TREE_CHAIN (parm);
5765 if (first_arg != NULL_TREE)
5766 first_arg = NULL_TREE;
5767 else
5768 ++arg_index;
5769 ++i;
5770 is_method = 1;
5773 gcc_assert (first_arg == NULL_TREE);
5774 for (; arg_index < VEC_length (tree, args) && parm;
5775 parm = TREE_CHAIN (parm), ++arg_index, ++i)
5777 tree type = TREE_VALUE (parm);
5778 tree arg = VEC_index (tree, args, arg_index);
5780 conv = convs[i];
5782 /* Don't make a copy here if build_call is going to. */
5783 if (conv->kind == ck_rvalue
5784 && COMPLETE_TYPE_P (complete_type (type))
5785 && !TREE_ADDRESSABLE (type))
5786 conv = conv->u.next;
5788 /* Warn about initializer_list deduction that isn't currently in the
5789 working draft. */
5790 if (cxx_dialect > cxx98
5791 && flag_deduce_init_list
5792 && cand->template_decl
5793 && is_std_init_list (non_reference (type))
5794 && BRACE_ENCLOSED_INITIALIZER_P (arg))
5796 tree tmpl = TI_TEMPLATE (cand->template_decl);
5797 tree realparm = chain_index (j, DECL_ARGUMENTS (cand->fn));
5798 tree patparm = get_pattern_parm (realparm, tmpl);
5799 tree pattype = TREE_TYPE (patparm);
5800 if (PACK_EXPANSION_P (pattype))
5801 pattype = PACK_EXPANSION_PATTERN (pattype);
5802 pattype = non_reference (pattype);
5804 if (TREE_CODE (pattype) == TEMPLATE_TYPE_PARM
5805 && (cand->explicit_targs == NULL_TREE
5806 || (TREE_VEC_LENGTH (cand->explicit_targs)
5807 <= TEMPLATE_TYPE_IDX (pattype))))
5809 pedwarn (input_location, 0, "deducing %qT as %qT",
5810 non_reference (TREE_TYPE (patparm)),
5811 non_reference (type));
5812 pedwarn (input_location, 0, " in call to %q+D", cand->fn);
5813 pedwarn (input_location, 0,
5814 " (you can disable this with -fno-deduce-init-list)");
5818 val = convert_like_with_context (conv, arg, fn, i-is_method, complain);
5820 val = convert_for_arg_passing (type, val);
5821 if (val == error_mark_node)
5822 return error_mark_node;
5823 else
5824 argarray[j++] = val;
5827 /* Default arguments */
5828 for (; parm && parm != void_list_node; parm = TREE_CHAIN (parm), i++)
5829 argarray[j++] = convert_default_arg (TREE_VALUE (parm),
5830 TREE_PURPOSE (parm),
5831 fn, i - is_method);
5832 /* Ellipsis */
5833 for (; arg_index < VEC_length (tree, args); ++arg_index)
5835 tree a = VEC_index (tree, args, arg_index);
5836 if (magic_varargs_p (fn))
5837 /* Do no conversions for magic varargs. */
5838 a = mark_type_use (a);
5839 else
5840 a = convert_arg_to_ellipsis (a);
5841 argarray[j++] = a;
5844 gcc_assert (j <= nargs);
5845 nargs = j;
5847 check_function_arguments (TYPE_ATTRIBUTES (TREE_TYPE (fn)),
5848 nargs, argarray, TYPE_ARG_TYPES (TREE_TYPE (fn)));
5850 /* Avoid actually calling copy constructors and copy assignment operators,
5851 if possible. */
5853 if (! flag_elide_constructors)
5854 /* Do things the hard way. */;
5855 else if (cand->num_convs == 1
5856 && (DECL_COPY_CONSTRUCTOR_P (fn)
5857 || DECL_MOVE_CONSTRUCTOR_P (fn)))
5859 tree targ;
5860 tree arg = argarray[num_artificial_parms_for (fn)];
5861 tree fa;
5862 bool trivial = trivial_fn_p (fn);
5864 /* Pull out the real argument, disregarding const-correctness. */
5865 targ = arg;
5866 while (CONVERT_EXPR_P (targ)
5867 || TREE_CODE (targ) == NON_LVALUE_EXPR)
5868 targ = TREE_OPERAND (targ, 0);
5869 if (TREE_CODE (targ) == ADDR_EXPR)
5871 targ = TREE_OPERAND (targ, 0);
5872 if (!same_type_ignoring_top_level_qualifiers_p
5873 (TREE_TYPE (TREE_TYPE (arg)), TREE_TYPE (targ)))
5874 targ = NULL_TREE;
5876 else
5877 targ = NULL_TREE;
5879 if (targ)
5880 arg = targ;
5881 else
5882 arg = cp_build_indirect_ref (arg, RO_NULL, complain);
5884 if (TREE_CODE (arg) == TARGET_EXPR
5885 && TARGET_EXPR_LIST_INIT_P (arg))
5887 /* Copy-list-initialization doesn't require the constructor
5888 to be defined. */
5890 /* [class.copy]: the copy constructor is implicitly defined even if
5891 the implementation elided its use. */
5892 else if (!trivial)
5894 mark_used (fn);
5895 already_used = true;
5898 /* If we're creating a temp and we already have one, don't create a
5899 new one. If we're not creating a temp but we get one, use
5900 INIT_EXPR to collapse the temp into our target. Otherwise, if the
5901 ctor is trivial, do a bitwise copy with a simple TARGET_EXPR for a
5902 temp or an INIT_EXPR otherwise. */
5903 fa = (cand->first_arg != NULL_TREE
5904 ? cand->first_arg
5905 : VEC_index (tree, args, 0));
5906 if (integer_zerop (fa))
5908 if (TREE_CODE (arg) == TARGET_EXPR)
5909 return arg;
5910 else if (trivial)
5911 return force_target_expr (DECL_CONTEXT (fn), arg);
5913 else if (TREE_CODE (arg) == TARGET_EXPR || trivial)
5915 tree to = stabilize_reference (cp_build_indirect_ref (fa, RO_NULL,
5916 complain));
5918 val = build2 (INIT_EXPR, DECL_CONTEXT (fn), to, arg);
5919 return val;
5922 else if (DECL_OVERLOADED_OPERATOR_P (fn) == NOP_EXPR
5923 && trivial_fn_p (fn))
5925 tree to = stabilize_reference
5926 (cp_build_indirect_ref (argarray[0], RO_NULL, complain));
5927 tree type = TREE_TYPE (to);
5928 tree as_base = CLASSTYPE_AS_BASE (type);
5929 tree arg = argarray[1];
5931 if (is_really_empty_class (type))
5933 /* Avoid copying empty classes. */
5934 val = build2 (COMPOUND_EXPR, void_type_node, to, arg);
5935 TREE_NO_WARNING (val) = 1;
5936 val = build2 (COMPOUND_EXPR, type, val, to);
5937 TREE_NO_WARNING (val) = 1;
5939 else if (tree_int_cst_equal (TYPE_SIZE (type), TYPE_SIZE (as_base)))
5941 arg = cp_build_indirect_ref (arg, RO_NULL, complain);
5942 val = build2 (MODIFY_EXPR, TREE_TYPE (to), to, arg);
5944 else
5946 /* We must only copy the non-tail padding parts.
5947 Use __builtin_memcpy for the bitwise copy.
5948 FIXME fix 22488 so we can go back to using MODIFY_EXPR
5949 instead of an explicit call to memcpy. */
5951 tree arg0, arg1, arg2, t;
5952 tree test = NULL_TREE;
5954 arg2 = TYPE_SIZE_UNIT (as_base);
5955 arg1 = arg;
5956 arg0 = cp_build_unary_op (ADDR_EXPR, to, 0, complain);
5958 if (!can_trust_pointer_alignment ())
5960 /* If we can't be sure about pointer alignment, a call
5961 to __builtin_memcpy is expanded as a call to memcpy, which
5962 is invalid with identical args. Otherwise it is
5963 expanded as a block move, which should be safe. */
5964 arg0 = save_expr (arg0);
5965 arg1 = save_expr (arg1);
5966 test = build2 (EQ_EXPR, boolean_type_node, arg0, arg1);
5968 t = implicit_built_in_decls[BUILT_IN_MEMCPY];
5969 t = build_call_n (t, 3, arg0, arg1, arg2);
5971 t = convert (TREE_TYPE (arg0), t);
5972 if (test)
5973 t = build3 (COND_EXPR, TREE_TYPE (t), test, arg0, t);
5974 val = cp_build_indirect_ref (t, RO_NULL, complain);
5975 TREE_NO_WARNING (val) = 1;
5978 return val;
5981 if (!already_used)
5982 mark_used (fn);
5984 if (DECL_VINDEX (fn) && (flags & LOOKUP_NONVIRTUAL) == 0)
5986 tree t;
5987 tree binfo = lookup_base (TREE_TYPE (TREE_TYPE (argarray[0])),
5988 DECL_CONTEXT (fn),
5989 ba_any, NULL);
5990 gcc_assert (binfo && binfo != error_mark_node);
5992 /* Warn about deprecated virtual functions now, since we're about
5993 to throw away the decl. */
5994 if (TREE_DEPRECATED (fn))
5995 warn_deprecated_use (fn, NULL_TREE);
5997 argarray[0] = build_base_path (PLUS_EXPR, argarray[0], binfo, 1);
5998 if (TREE_SIDE_EFFECTS (argarray[0]))
5999 argarray[0] = save_expr (argarray[0]);
6000 t = build_pointer_type (TREE_TYPE (fn));
6001 if (DECL_CONTEXT (fn) && TYPE_JAVA_INTERFACE (DECL_CONTEXT (fn)))
6002 fn = build_java_interface_fn_ref (fn, argarray[0]);
6003 else
6004 fn = build_vfn_ref (argarray[0], DECL_VINDEX (fn));
6005 TREE_TYPE (fn) = t;
6007 else
6008 fn = build_addr_func (fn);
6010 return build_cxx_call (fn, nargs, argarray);
6013 /* Build and return a call to FN, using NARGS arguments in ARGARRAY.
6014 This function performs no overload resolution, conversion, or other
6015 high-level operations. */
6017 tree
6018 build_cxx_call (tree fn, int nargs, tree *argarray)
6020 tree fndecl;
6022 fn = build_call_a (fn, nargs, argarray);
6024 /* If this call might throw an exception, note that fact. */
6025 fndecl = get_callee_fndecl (fn);
6026 if ((!fndecl || !TREE_NOTHROW (fndecl))
6027 && at_function_scope_p ()
6028 && cfun)
6029 cp_function_chain->can_throw = 1;
6031 /* Check that arguments to builtin functions match the expectations. */
6032 if (fndecl
6033 && DECL_BUILT_IN (fndecl)
6034 && DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_NORMAL
6035 && !check_builtin_function_arguments (fndecl, nargs, argarray))
6036 return error_mark_node;
6038 /* Some built-in function calls will be evaluated at compile-time in
6039 fold (). */
6040 fn = fold_if_not_in_template (fn);
6042 if (VOID_TYPE_P (TREE_TYPE (fn)))
6043 return fn;
6045 fn = require_complete_type (fn);
6046 if (fn == error_mark_node)
6047 return error_mark_node;
6049 if (MAYBE_CLASS_TYPE_P (TREE_TYPE (fn)))
6050 fn = build_cplus_new (TREE_TYPE (fn), fn);
6051 return convert_from_reference (fn);
6054 static GTY(()) tree java_iface_lookup_fn;
6056 /* Make an expression which yields the address of the Java interface
6057 method FN. This is achieved by generating a call to libjava's
6058 _Jv_LookupInterfaceMethodIdx(). */
6060 static tree
6061 build_java_interface_fn_ref (tree fn, tree instance)
6063 tree lookup_fn, method, idx;
6064 tree klass_ref, iface, iface_ref;
6065 int i;
6067 if (!java_iface_lookup_fn)
6069 tree ftype = build_function_type_list (ptr_type_node,
6070 ptr_type_node, ptr_type_node,
6071 java_int_type_node, NULL_TREE);
6072 java_iface_lookup_fn
6073 = add_builtin_function ("_Jv_LookupInterfaceMethodIdx", ftype,
6074 0, NOT_BUILT_IN, NULL, NULL_TREE);
6077 /* Look up the pointer to the runtime java.lang.Class object for `instance'.
6078 This is the first entry in the vtable. */
6079 klass_ref = build_vtbl_ref (cp_build_indirect_ref (instance, RO_NULL,
6080 tf_warning_or_error),
6081 integer_zero_node);
6083 /* Get the java.lang.Class pointer for the interface being called. */
6084 iface = DECL_CONTEXT (fn);
6085 iface_ref = lookup_field (iface, get_identifier ("class$"), 0, false);
6086 if (!iface_ref || TREE_CODE (iface_ref) != VAR_DECL
6087 || DECL_CONTEXT (iface_ref) != iface)
6089 error ("could not find class$ field in java interface type %qT",
6090 iface);
6091 return error_mark_node;
6093 iface_ref = build_address (iface_ref);
6094 iface_ref = convert (build_pointer_type (iface), iface_ref);
6096 /* Determine the itable index of FN. */
6097 i = 1;
6098 for (method = TYPE_METHODS (iface); method; method = TREE_CHAIN (method))
6100 if (!DECL_VIRTUAL_P (method))
6101 continue;
6102 if (fn == method)
6103 break;
6104 i++;
6106 idx = build_int_cst (NULL_TREE, i);
6108 lookup_fn = build1 (ADDR_EXPR,
6109 build_pointer_type (TREE_TYPE (java_iface_lookup_fn)),
6110 java_iface_lookup_fn);
6111 return build_call_nary (ptr_type_node, lookup_fn,
6112 3, klass_ref, iface_ref, idx);
6115 /* Returns the value to use for the in-charge parameter when making a
6116 call to a function with the indicated NAME.
6118 FIXME:Can't we find a neater way to do this mapping? */
6120 tree
6121 in_charge_arg_for_name (tree name)
6123 if (name == base_ctor_identifier
6124 || name == base_dtor_identifier)
6125 return integer_zero_node;
6126 else if (name == complete_ctor_identifier)
6127 return integer_one_node;
6128 else if (name == complete_dtor_identifier)
6129 return integer_two_node;
6130 else if (name == deleting_dtor_identifier)
6131 return integer_three_node;
6133 /* This function should only be called with one of the names listed
6134 above. */
6135 gcc_unreachable ();
6136 return NULL_TREE;
6139 /* Build a call to a constructor, destructor, or an assignment
6140 operator for INSTANCE, an expression with class type. NAME
6141 indicates the special member function to call; *ARGS are the
6142 arguments. ARGS may be NULL. This may change ARGS. BINFO
6143 indicates the base of INSTANCE that is to be passed as the `this'
6144 parameter to the member function called.
6146 FLAGS are the LOOKUP_* flags to use when processing the call.
6148 If NAME indicates a complete object constructor, INSTANCE may be
6149 NULL_TREE. In this case, the caller will call build_cplus_new to
6150 store the newly constructed object into a VAR_DECL. */
6152 tree
6153 build_special_member_call (tree instance, tree name, VEC(tree,gc) **args,
6154 tree binfo, int flags, tsubst_flags_t complain)
6156 tree fns;
6157 /* The type of the subobject to be constructed or destroyed. */
6158 tree class_type;
6159 VEC(tree,gc) *allocated = NULL;
6160 tree ret;
6162 gcc_assert (name == complete_ctor_identifier
6163 || name == base_ctor_identifier
6164 || name == complete_dtor_identifier
6165 || name == base_dtor_identifier
6166 || name == deleting_dtor_identifier
6167 || name == ansi_assopname (NOP_EXPR));
6168 if (TYPE_P (binfo))
6170 /* Resolve the name. */
6171 if (!complete_type_or_else (binfo, NULL_TREE))
6172 return error_mark_node;
6174 binfo = TYPE_BINFO (binfo);
6177 gcc_assert (binfo != NULL_TREE);
6179 class_type = BINFO_TYPE (binfo);
6181 /* Handle the special case where INSTANCE is NULL_TREE. */
6182 if (name == complete_ctor_identifier && !instance)
6184 instance = build_int_cst (build_pointer_type (class_type), 0);
6185 instance = build1 (INDIRECT_REF, class_type, instance);
6187 else
6189 if (name == complete_dtor_identifier
6190 || name == base_dtor_identifier
6191 || name == deleting_dtor_identifier)
6192 gcc_assert (args == NULL || VEC_empty (tree, *args));
6194 /* Convert to the base class, if necessary. */
6195 if (!same_type_ignoring_top_level_qualifiers_p
6196 (TREE_TYPE (instance), BINFO_TYPE (binfo)))
6198 if (name != ansi_assopname (NOP_EXPR))
6199 /* For constructors and destructors, either the base is
6200 non-virtual, or it is virtual but we are doing the
6201 conversion from a constructor or destructor for the
6202 complete object. In either case, we can convert
6203 statically. */
6204 instance = convert_to_base_statically (instance, binfo);
6205 else
6206 /* However, for assignment operators, we must convert
6207 dynamically if the base is virtual. */
6208 instance = build_base_path (PLUS_EXPR, instance,
6209 binfo, /*nonnull=*/1);
6213 gcc_assert (instance != NULL_TREE);
6215 fns = lookup_fnfields (binfo, name, 1);
6217 /* When making a call to a constructor or destructor for a subobject
6218 that uses virtual base classes, pass down a pointer to a VTT for
6219 the subobject. */
6220 if ((name == base_ctor_identifier
6221 || name == base_dtor_identifier)
6222 && CLASSTYPE_VBASECLASSES (class_type))
6224 tree vtt;
6225 tree sub_vtt;
6227 /* If the current function is a complete object constructor
6228 or destructor, then we fetch the VTT directly.
6229 Otherwise, we look it up using the VTT we were given. */
6230 vtt = TREE_CHAIN (CLASSTYPE_VTABLES (current_class_type));
6231 vtt = decay_conversion (vtt);
6232 vtt = build3 (COND_EXPR, TREE_TYPE (vtt),
6233 build2 (EQ_EXPR, boolean_type_node,
6234 current_in_charge_parm, integer_zero_node),
6235 current_vtt_parm,
6236 vtt);
6237 gcc_assert (BINFO_SUBVTT_INDEX (binfo));
6238 sub_vtt = build2 (POINTER_PLUS_EXPR, TREE_TYPE (vtt), vtt,
6239 BINFO_SUBVTT_INDEX (binfo));
6241 if (args == NULL)
6243 allocated = make_tree_vector ();
6244 args = &allocated;
6247 VEC_safe_insert (tree, gc, *args, 0, sub_vtt);
6250 ret = build_new_method_call (instance, fns, args,
6251 TYPE_BINFO (BINFO_TYPE (binfo)),
6252 flags, /*fn=*/NULL,
6253 complain);
6255 if (allocated != NULL)
6256 release_tree_vector (allocated);
6258 return ret;
6261 /* Return the NAME, as a C string. The NAME indicates a function that
6262 is a member of TYPE. *FREE_P is set to true if the caller must
6263 free the memory returned.
6265 Rather than go through all of this, we should simply set the names
6266 of constructors and destructors appropriately, and dispense with
6267 ctor_identifier, dtor_identifier, etc. */
6269 static char *
6270 name_as_c_string (tree name, tree type, bool *free_p)
6272 char *pretty_name;
6274 /* Assume that we will not allocate memory. */
6275 *free_p = false;
6276 /* Constructors and destructors are special. */
6277 if (IDENTIFIER_CTOR_OR_DTOR_P (name))
6279 pretty_name
6280 = CONST_CAST (char *, identifier_to_locale (IDENTIFIER_POINTER (constructor_name (type))));
6281 /* For a destructor, add the '~'. */
6282 if (name == complete_dtor_identifier
6283 || name == base_dtor_identifier
6284 || name == deleting_dtor_identifier)
6286 pretty_name = concat ("~", pretty_name, NULL);
6287 /* Remember that we need to free the memory allocated. */
6288 *free_p = true;
6291 else if (IDENTIFIER_TYPENAME_P (name))
6293 pretty_name = concat ("operator ",
6294 type_as_string_translate (TREE_TYPE (name),
6295 TFF_PLAIN_IDENTIFIER),
6296 NULL);
6297 /* Remember that we need to free the memory allocated. */
6298 *free_p = true;
6300 else
6301 pretty_name = CONST_CAST (char *, identifier_to_locale (IDENTIFIER_POINTER (name)));
6303 return pretty_name;
6306 /* Build a call to "INSTANCE.FN (ARGS)". If FN_P is non-NULL, it will
6307 be set, upon return, to the function called. ARGS may be NULL.
6308 This may change ARGS. */
6310 tree
6311 build_new_method_call (tree instance, tree fns, VEC(tree,gc) **args,
6312 tree conversion_path, int flags,
6313 tree *fn_p, tsubst_flags_t complain)
6315 struct z_candidate *candidates = 0, *cand;
6316 tree explicit_targs = NULL_TREE;
6317 tree basetype = NULL_TREE;
6318 tree access_binfo;
6319 tree optype;
6320 tree first_mem_arg = NULL_TREE;
6321 tree instance_ptr;
6322 tree name;
6323 bool skip_first_for_error;
6324 VEC(tree,gc) *user_args;
6325 tree call;
6326 tree fn;
6327 int template_only = 0;
6328 bool any_viable_p;
6329 tree orig_instance;
6330 tree orig_fns;
6331 VEC(tree,gc) *orig_args = NULL;
6332 void *p;
6334 gcc_assert (instance != NULL_TREE);
6336 /* We don't know what function we're going to call, yet. */
6337 if (fn_p)
6338 *fn_p = NULL_TREE;
6340 if (error_operand_p (instance)
6341 || !fns || error_operand_p (fns))
6342 return error_mark_node;
6344 if (!BASELINK_P (fns))
6346 if (complain & tf_error)
6347 error ("call to non-function %qD", fns);
6348 return error_mark_node;
6351 orig_instance = instance;
6352 orig_fns = fns;
6354 /* Dismantle the baselink to collect all the information we need. */
6355 if (!conversion_path)
6356 conversion_path = BASELINK_BINFO (fns);
6357 access_binfo = BASELINK_ACCESS_BINFO (fns);
6358 optype = BASELINK_OPTYPE (fns);
6359 fns = BASELINK_FUNCTIONS (fns);
6360 if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
6362 explicit_targs = TREE_OPERAND (fns, 1);
6363 fns = TREE_OPERAND (fns, 0);
6364 template_only = 1;
6366 gcc_assert (TREE_CODE (fns) == FUNCTION_DECL
6367 || TREE_CODE (fns) == TEMPLATE_DECL
6368 || TREE_CODE (fns) == OVERLOAD);
6369 fn = get_first_fn (fns);
6370 name = DECL_NAME (fn);
6372 basetype = TYPE_MAIN_VARIANT (TREE_TYPE (instance));
6373 gcc_assert (CLASS_TYPE_P (basetype));
6375 if (processing_template_decl)
6377 orig_args = args == NULL ? NULL : make_tree_vector_copy (*args);
6378 instance = build_non_dependent_expr (instance);
6379 if (args != NULL)
6380 make_args_non_dependent (*args);
6383 user_args = args == NULL ? NULL : *args;
6384 /* Under DR 147 A::A() is an invalid constructor call,
6385 not a functional cast. */
6386 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (fn))
6388 if (! (complain & tf_error))
6389 return error_mark_node;
6391 permerror (input_location,
6392 "cannot call constructor %<%T::%D%> directly",
6393 basetype, name);
6394 permerror (input_location, " for a function-style cast, remove the "
6395 "redundant %<::%D%>", name);
6396 call = build_functional_cast (basetype, build_tree_list_vec (user_args),
6397 complain);
6398 return call;
6401 /* Figure out whether to skip the first argument for the error
6402 message we will display to users if an error occurs. We don't
6403 want to display any compiler-generated arguments. The "this"
6404 pointer hasn't been added yet. However, we must remove the VTT
6405 pointer if this is a call to a base-class constructor or
6406 destructor. */
6407 skip_first_for_error = false;
6408 if (IDENTIFIER_CTOR_OR_DTOR_P (name))
6410 /* Callers should explicitly indicate whether they want to construct
6411 the complete object or just the part without virtual bases. */
6412 gcc_assert (name != ctor_identifier);
6413 /* Similarly for destructors. */
6414 gcc_assert (name != dtor_identifier);
6415 /* Remove the VTT pointer, if present. */
6416 if ((name == base_ctor_identifier || name == base_dtor_identifier)
6417 && CLASSTYPE_VBASECLASSES (basetype))
6418 skip_first_for_error = true;
6421 /* Process the argument list. */
6422 if (args != NULL && *args != NULL)
6424 *args = resolve_args (*args);
6425 if (*args == NULL)
6426 return error_mark_node;
6429 instance_ptr = build_this (instance);
6431 /* It's OK to call destructors and constructors on cv-qualified objects.
6432 Therefore, convert the INSTANCE_PTR to the unqualified type, if
6433 necessary. */
6434 if (DECL_DESTRUCTOR_P (fn)
6435 || DECL_CONSTRUCTOR_P (fn))
6437 tree type = build_pointer_type (basetype);
6438 if (!same_type_p (type, TREE_TYPE (instance_ptr)))
6439 instance_ptr = build_nop (type, instance_ptr);
6441 if (DECL_DESTRUCTOR_P (fn))
6442 name = complete_dtor_identifier;
6444 first_mem_arg = instance_ptr;
6446 /* Get the high-water mark for the CONVERSION_OBSTACK. */
6447 p = conversion_obstack_alloc (0);
6449 /* If CONSTRUCTOR_IS_DIRECT_INIT is set, this was a T{ } form
6450 initializer, not T({ }). */
6451 if (DECL_CONSTRUCTOR_P (fn) && args != NULL && !VEC_empty (tree, *args)
6452 && BRACE_ENCLOSED_INITIALIZER_P (VEC_index (tree, *args, 0))
6453 && CONSTRUCTOR_IS_DIRECT_INIT (VEC_index (tree, *args, 0)))
6455 gcc_assert (VEC_length (tree, *args) == 1
6456 && !(flags & LOOKUP_ONLYCONVERTING));
6458 add_list_candidates (fns, first_mem_arg, VEC_index (tree, *args, 0),
6459 basetype, explicit_targs, template_only,
6460 conversion_path, access_binfo, flags, &candidates);
6462 else
6464 add_candidates (fns, first_mem_arg, user_args, optype,
6465 explicit_targs, template_only, conversion_path,
6466 access_binfo, flags, &candidates);
6468 any_viable_p = false;
6469 candidates = splice_viable (candidates, pedantic, &any_viable_p);
6471 if (!any_viable_p)
6473 if (complain & tf_error)
6475 if (!COMPLETE_TYPE_P (basetype))
6476 cxx_incomplete_type_error (instance_ptr, basetype);
6477 else if (optype)
6478 error ("no matching function for call to %<%T::operator %T(%A)%#V%>",
6479 basetype, optype, build_tree_list_vec (user_args),
6480 TREE_TYPE (TREE_TYPE (instance_ptr)));
6481 else
6483 char *pretty_name;
6484 bool free_p;
6485 tree arglist;
6487 pretty_name = name_as_c_string (name, basetype, &free_p);
6488 arglist = build_tree_list_vec (user_args);
6489 if (skip_first_for_error)
6490 arglist = TREE_CHAIN (arglist);
6491 error ("no matching function for call to %<%T::%s(%A)%#V%>",
6492 basetype, pretty_name, arglist,
6493 TREE_TYPE (TREE_TYPE (instance_ptr)));
6494 if (free_p)
6495 free (pretty_name);
6497 print_z_candidates (candidates);
6499 call = error_mark_node;
6501 else
6503 cand = tourney (candidates);
6504 if (cand == 0)
6506 char *pretty_name;
6507 bool free_p;
6508 tree arglist;
6510 if (complain & tf_error)
6512 pretty_name = name_as_c_string (name, basetype, &free_p);
6513 arglist = build_tree_list_vec (user_args);
6514 if (skip_first_for_error)
6515 arglist = TREE_CHAIN (arglist);
6516 error ("call of overloaded %<%s(%A)%> is ambiguous", pretty_name,
6517 arglist);
6518 print_z_candidates (candidates);
6519 if (free_p)
6520 free (pretty_name);
6522 call = error_mark_node;
6524 else
6526 fn = cand->fn;
6528 if (!(flags & LOOKUP_NONVIRTUAL)
6529 && DECL_PURE_VIRTUAL_P (fn)
6530 && instance == current_class_ref
6531 && (DECL_CONSTRUCTOR_P (current_function_decl)
6532 || DECL_DESTRUCTOR_P (current_function_decl))
6533 && (complain & tf_warning))
6534 /* This is not an error, it is runtime undefined
6535 behavior. */
6536 warning (0, (DECL_CONSTRUCTOR_P (current_function_decl) ?
6537 "pure virtual %q#D called from constructor"
6538 : "pure virtual %q#D called from destructor"),
6539 fn);
6541 if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE
6542 && is_dummy_object (instance_ptr))
6544 if (complain & tf_error)
6545 error ("cannot call member function %qD without object",
6546 fn);
6547 call = error_mark_node;
6549 else
6551 if (DECL_VINDEX (fn) && ! (flags & LOOKUP_NONVIRTUAL)
6552 && resolves_to_fixed_type_p (instance, 0))
6553 flags |= LOOKUP_NONVIRTUAL;
6554 /* Now we know what function is being called. */
6555 if (fn_p)
6556 *fn_p = fn;
6557 /* Build the actual CALL_EXPR. */
6558 call = build_over_call (cand, flags, complain);
6559 /* In an expression of the form `a->f()' where `f' turns
6560 out to be a static member function, `a' is
6561 none-the-less evaluated. */
6562 if (TREE_CODE (TREE_TYPE (fn)) != METHOD_TYPE
6563 && !is_dummy_object (instance_ptr)
6564 && TREE_SIDE_EFFECTS (instance_ptr))
6565 call = build2 (COMPOUND_EXPR, TREE_TYPE (call),
6566 instance_ptr, call);
6567 else if (call != error_mark_node
6568 && DECL_DESTRUCTOR_P (cand->fn)
6569 && !VOID_TYPE_P (TREE_TYPE (call)))
6570 /* An explicit call of the form "x->~X()" has type
6571 "void". However, on platforms where destructors
6572 return "this" (i.e., those where
6573 targetm.cxx.cdtor_returns_this is true), such calls
6574 will appear to have a return value of pointer type
6575 to the low-level call machinery. We do not want to
6576 change the low-level machinery, since we want to be
6577 able to optimize "delete f()" on such platforms as
6578 "operator delete(~X(f()))" (rather than generating
6579 "t = f(), ~X(t), operator delete (t)"). */
6580 call = build_nop (void_type_node, call);
6585 if (processing_template_decl && call != error_mark_node)
6587 bool cast_to_void = false;
6589 if (TREE_CODE (call) == COMPOUND_EXPR)
6590 call = TREE_OPERAND (call, 1);
6591 else if (TREE_CODE (call) == NOP_EXPR)
6593 cast_to_void = true;
6594 call = TREE_OPERAND (call, 0);
6596 if (TREE_CODE (call) == INDIRECT_REF)
6597 call = TREE_OPERAND (call, 0);
6598 call = (build_min_non_dep_call_vec
6599 (call,
6600 build_min (COMPONENT_REF, TREE_TYPE (CALL_EXPR_FN (call)),
6601 orig_instance, orig_fns, NULL_TREE),
6602 orig_args));
6603 call = convert_from_reference (call);
6604 if (cast_to_void)
6605 call = build_nop (void_type_node, call);
6608 /* Free all the conversions we allocated. */
6609 obstack_free (&conversion_obstack, p);
6611 if (orig_args != NULL)
6612 release_tree_vector (orig_args);
6614 return call;
6617 /* Returns true iff standard conversion sequence ICS1 is a proper
6618 subsequence of ICS2. */
6620 static bool
6621 is_subseq (conversion *ics1, conversion *ics2)
6623 /* We can assume that a conversion of the same code
6624 between the same types indicates a subsequence since we only get
6625 here if the types we are converting from are the same. */
6627 while (ics1->kind == ck_rvalue
6628 || ics1->kind == ck_lvalue)
6629 ics1 = ics1->u.next;
6631 while (1)
6633 while (ics2->kind == ck_rvalue
6634 || ics2->kind == ck_lvalue)
6635 ics2 = ics2->u.next;
6637 if (ics2->kind == ck_user
6638 || ics2->kind == ck_ambig
6639 || ics2->kind == ck_aggr
6640 || ics2->kind == ck_list
6641 || ics2->kind == ck_identity)
6642 /* At this point, ICS1 cannot be a proper subsequence of
6643 ICS2. We can get a USER_CONV when we are comparing the
6644 second standard conversion sequence of two user conversion
6645 sequences. */
6646 return false;
6648 ics2 = ics2->u.next;
6650 if (ics2->kind == ics1->kind
6651 && same_type_p (ics2->type, ics1->type)
6652 && same_type_p (ics2->u.next->type,
6653 ics1->u.next->type))
6654 return true;
6658 /* Returns nonzero iff DERIVED is derived from BASE. The inputs may
6659 be any _TYPE nodes. */
6661 bool
6662 is_properly_derived_from (tree derived, tree base)
6664 if (!CLASS_TYPE_P (derived) || !CLASS_TYPE_P (base))
6665 return false;
6667 /* We only allow proper derivation here. The DERIVED_FROM_P macro
6668 considers every class derived from itself. */
6669 return (!same_type_ignoring_top_level_qualifiers_p (derived, base)
6670 && DERIVED_FROM_P (base, derived));
6673 /* We build the ICS for an implicit object parameter as a pointer
6674 conversion sequence. However, such a sequence should be compared
6675 as if it were a reference conversion sequence. If ICS is the
6676 implicit conversion sequence for an implicit object parameter,
6677 modify it accordingly. */
6679 static void
6680 maybe_handle_implicit_object (conversion **ics)
6682 if ((*ics)->this_p)
6684 /* [over.match.funcs]
6686 For non-static member functions, the type of the
6687 implicit object parameter is "reference to cv X"
6688 where X is the class of which the function is a
6689 member and cv is the cv-qualification on the member
6690 function declaration. */
6691 conversion *t = *ics;
6692 tree reference_type;
6694 /* The `this' parameter is a pointer to a class type. Make the
6695 implicit conversion talk about a reference to that same class
6696 type. */
6697 reference_type = TREE_TYPE (t->type);
6698 reference_type = build_reference_type (reference_type);
6700 if (t->kind == ck_qual)
6701 t = t->u.next;
6702 if (t->kind == ck_ptr)
6703 t = t->u.next;
6704 t = build_identity_conv (TREE_TYPE (t->type), NULL_TREE);
6705 t = direct_reference_binding (reference_type, t);
6706 t->this_p = 1;
6707 t->rvaluedness_matches_p = 0;
6708 *ics = t;
6712 /* If *ICS is a REF_BIND set *ICS to the remainder of the conversion,
6713 and return the initial reference binding conversion. Otherwise,
6714 leave *ICS unchanged and return NULL. */
6716 static conversion *
6717 maybe_handle_ref_bind (conversion **ics)
6719 if ((*ics)->kind == ck_ref_bind)
6721 conversion *old_ics = *ics;
6722 *ics = old_ics->u.next;
6723 (*ics)->user_conv_p = old_ics->user_conv_p;
6724 return old_ics;
6727 return NULL;
6730 /* Compare two implicit conversion sequences according to the rules set out in
6731 [over.ics.rank]. Return values:
6733 1: ics1 is better than ics2
6734 -1: ics2 is better than ics1
6735 0: ics1 and ics2 are indistinguishable */
6737 static int
6738 compare_ics (conversion *ics1, conversion *ics2)
6740 tree from_type1;
6741 tree from_type2;
6742 tree to_type1;
6743 tree to_type2;
6744 tree deref_from_type1 = NULL_TREE;
6745 tree deref_from_type2 = NULL_TREE;
6746 tree deref_to_type1 = NULL_TREE;
6747 tree deref_to_type2 = NULL_TREE;
6748 conversion_rank rank1, rank2;
6750 /* REF_BINDING is nonzero if the result of the conversion sequence
6751 is a reference type. In that case REF_CONV is the reference
6752 binding conversion. */
6753 conversion *ref_conv1;
6754 conversion *ref_conv2;
6756 /* Handle implicit object parameters. */
6757 maybe_handle_implicit_object (&ics1);
6758 maybe_handle_implicit_object (&ics2);
6760 /* Handle reference parameters. */
6761 ref_conv1 = maybe_handle_ref_bind (&ics1);
6762 ref_conv2 = maybe_handle_ref_bind (&ics2);
6764 /* List-initialization sequence L1 is a better conversion sequence than
6765 list-initialization sequence L2 if L1 converts to
6766 std::initializer_list<X> for some X and L2 does not. */
6767 if (ics1->kind == ck_list && ics2->kind != ck_list)
6768 return 1;
6769 if (ics2->kind == ck_list && ics1->kind != ck_list)
6770 return -1;
6772 /* [over.ics.rank]
6774 When comparing the basic forms of implicit conversion sequences (as
6775 defined in _over.best.ics_)
6777 --a standard conversion sequence (_over.ics.scs_) is a better
6778 conversion sequence than a user-defined conversion sequence
6779 or an ellipsis conversion sequence, and
6781 --a user-defined conversion sequence (_over.ics.user_) is a
6782 better conversion sequence than an ellipsis conversion sequence
6783 (_over.ics.ellipsis_). */
6784 rank1 = CONVERSION_RANK (ics1);
6785 rank2 = CONVERSION_RANK (ics2);
6787 if (rank1 > rank2)
6788 return -1;
6789 else if (rank1 < rank2)
6790 return 1;
6792 if (rank1 == cr_bad)
6794 /* Both ICS are bad. We try to make a decision based on what would
6795 have happened if they'd been good. This is not an extension,
6796 we'll still give an error when we build up the call; this just
6797 helps us give a more helpful error message. */
6798 rank1 = BAD_CONVERSION_RANK (ics1);
6799 rank2 = BAD_CONVERSION_RANK (ics2);
6801 if (rank1 > rank2)
6802 return -1;
6803 else if (rank1 < rank2)
6804 return 1;
6806 /* We couldn't make up our minds; try to figure it out below. */
6809 if (ics1->ellipsis_p || ics1->kind == ck_list)
6810 /* Both conversions are ellipsis conversions or both are building a
6811 std::initializer_list. */
6812 return 0;
6814 /* User-defined conversion sequence U1 is a better conversion sequence
6815 than another user-defined conversion sequence U2 if they contain the
6816 same user-defined conversion operator or constructor and if the sec-
6817 ond standard conversion sequence of U1 is better than the second
6818 standard conversion sequence of U2. */
6820 if (ics1->user_conv_p)
6822 conversion *t1;
6823 conversion *t2;
6825 for (t1 = ics1; t1->kind != ck_user; t1 = t1->u.next)
6826 if (t1->kind == ck_ambig || t1->kind == ck_aggr)
6827 break;
6828 for (t2 = ics2; t2->kind != ck_user; t2 = t2->u.next)
6829 if (t2->kind == ck_ambig || t2->kind == ck_aggr)
6830 break;
6832 if (t1->kind != t2->kind)
6833 return 0;
6834 else if (t1->kind == ck_user)
6836 if (t1->cand->fn != t2->cand->fn)
6837 return 0;
6839 else
6841 /* For ambiguous or aggregate conversions, use the target type as
6842 a proxy for the conversion function. */
6843 if (!same_type_ignoring_top_level_qualifiers_p (t1->type, t2->type))
6844 return 0;
6847 /* We can just fall through here, after setting up
6848 FROM_TYPE1 and FROM_TYPE2. */
6849 from_type1 = t1->type;
6850 from_type2 = t2->type;
6852 else
6854 conversion *t1;
6855 conversion *t2;
6857 /* We're dealing with two standard conversion sequences.
6859 [over.ics.rank]
6861 Standard conversion sequence S1 is a better conversion
6862 sequence than standard conversion sequence S2 if
6864 --S1 is a proper subsequence of S2 (comparing the conversion
6865 sequences in the canonical form defined by _over.ics.scs_,
6866 excluding any Lvalue Transformation; the identity
6867 conversion sequence is considered to be a subsequence of
6868 any non-identity conversion sequence */
6870 t1 = ics1;
6871 while (t1->kind != ck_identity)
6872 t1 = t1->u.next;
6873 from_type1 = t1->type;
6875 t2 = ics2;
6876 while (t2->kind != ck_identity)
6877 t2 = t2->u.next;
6878 from_type2 = t2->type;
6881 /* One sequence can only be a subsequence of the other if they start with
6882 the same type. They can start with different types when comparing the
6883 second standard conversion sequence in two user-defined conversion
6884 sequences. */
6885 if (same_type_p (from_type1, from_type2))
6887 if (is_subseq (ics1, ics2))
6888 return 1;
6889 if (is_subseq (ics2, ics1))
6890 return -1;
6893 /* [over.ics.rank]
6895 Or, if not that,
6897 --the rank of S1 is better than the rank of S2 (by the rules
6898 defined below):
6900 Standard conversion sequences are ordered by their ranks: an Exact
6901 Match is a better conversion than a Promotion, which is a better
6902 conversion than a Conversion.
6904 Two conversion sequences with the same rank are indistinguishable
6905 unless one of the following rules applies:
6907 --A conversion that does not a convert a pointer, pointer to member,
6908 or std::nullptr_t to bool is better than one that does.
6910 The ICS_STD_RANK automatically handles the pointer-to-bool rule,
6911 so that we do not have to check it explicitly. */
6912 if (ics1->rank < ics2->rank)
6913 return 1;
6914 else if (ics2->rank < ics1->rank)
6915 return -1;
6917 to_type1 = ics1->type;
6918 to_type2 = ics2->type;
6920 /* A conversion from scalar arithmetic type to complex is worse than a
6921 conversion between scalar arithmetic types. */
6922 if (same_type_p (from_type1, from_type2)
6923 && ARITHMETIC_TYPE_P (from_type1)
6924 && ARITHMETIC_TYPE_P (to_type1)
6925 && ARITHMETIC_TYPE_P (to_type2)
6926 && ((TREE_CODE (to_type1) == COMPLEX_TYPE)
6927 != (TREE_CODE (to_type2) == COMPLEX_TYPE)))
6929 if (TREE_CODE (to_type1) == COMPLEX_TYPE)
6930 return -1;
6931 else
6932 return 1;
6935 if (TYPE_PTR_P (from_type1)
6936 && TYPE_PTR_P (from_type2)
6937 && TYPE_PTR_P (to_type1)
6938 && TYPE_PTR_P (to_type2))
6940 deref_from_type1 = TREE_TYPE (from_type1);
6941 deref_from_type2 = TREE_TYPE (from_type2);
6942 deref_to_type1 = TREE_TYPE (to_type1);
6943 deref_to_type2 = TREE_TYPE (to_type2);
6945 /* The rules for pointers to members A::* are just like the rules
6946 for pointers A*, except opposite: if B is derived from A then
6947 A::* converts to B::*, not vice versa. For that reason, we
6948 switch the from_ and to_ variables here. */
6949 else if ((TYPE_PTRMEM_P (from_type1) && TYPE_PTRMEM_P (from_type2)
6950 && TYPE_PTRMEM_P (to_type1) && TYPE_PTRMEM_P (to_type2))
6951 || (TYPE_PTRMEMFUNC_P (from_type1)
6952 && TYPE_PTRMEMFUNC_P (from_type2)
6953 && TYPE_PTRMEMFUNC_P (to_type1)
6954 && TYPE_PTRMEMFUNC_P (to_type2)))
6956 deref_to_type1 = TYPE_PTRMEM_CLASS_TYPE (from_type1);
6957 deref_to_type2 = TYPE_PTRMEM_CLASS_TYPE (from_type2);
6958 deref_from_type1 = TYPE_PTRMEM_CLASS_TYPE (to_type1);
6959 deref_from_type2 = TYPE_PTRMEM_CLASS_TYPE (to_type2);
6962 if (deref_from_type1 != NULL_TREE
6963 && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_from_type1))
6964 && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_from_type2)))
6966 /* This was one of the pointer or pointer-like conversions.
6968 [over.ics.rank]
6970 --If class B is derived directly or indirectly from class A,
6971 conversion of B* to A* is better than conversion of B* to
6972 void*, and conversion of A* to void* is better than
6973 conversion of B* to void*. */
6974 if (TREE_CODE (deref_to_type1) == VOID_TYPE
6975 && TREE_CODE (deref_to_type2) == VOID_TYPE)
6977 if (is_properly_derived_from (deref_from_type1,
6978 deref_from_type2))
6979 return -1;
6980 else if (is_properly_derived_from (deref_from_type2,
6981 deref_from_type1))
6982 return 1;
6984 else if (TREE_CODE (deref_to_type1) == VOID_TYPE
6985 || TREE_CODE (deref_to_type2) == VOID_TYPE)
6987 if (same_type_p (deref_from_type1, deref_from_type2))
6989 if (TREE_CODE (deref_to_type2) == VOID_TYPE)
6991 if (is_properly_derived_from (deref_from_type1,
6992 deref_to_type1))
6993 return 1;
6995 /* We know that DEREF_TO_TYPE1 is `void' here. */
6996 else if (is_properly_derived_from (deref_from_type1,
6997 deref_to_type2))
6998 return -1;
7001 else if (RECORD_OR_UNION_CODE_P (TREE_CODE (deref_to_type1))
7002 && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_to_type2)))
7004 /* [over.ics.rank]
7006 --If class B is derived directly or indirectly from class A
7007 and class C is derived directly or indirectly from B,
7009 --conversion of C* to B* is better than conversion of C* to
7012 --conversion of B* to A* is better than conversion of C* to
7013 A* */
7014 if (same_type_p (deref_from_type1, deref_from_type2))
7016 if (is_properly_derived_from (deref_to_type1,
7017 deref_to_type2))
7018 return 1;
7019 else if (is_properly_derived_from (deref_to_type2,
7020 deref_to_type1))
7021 return -1;
7023 else if (same_type_p (deref_to_type1, deref_to_type2))
7025 if (is_properly_derived_from (deref_from_type2,
7026 deref_from_type1))
7027 return 1;
7028 else if (is_properly_derived_from (deref_from_type1,
7029 deref_from_type2))
7030 return -1;
7034 else if (CLASS_TYPE_P (non_reference (from_type1))
7035 && same_type_p (from_type1, from_type2))
7037 tree from = non_reference (from_type1);
7039 /* [over.ics.rank]
7041 --binding of an expression of type C to a reference of type
7042 B& is better than binding an expression of type C to a
7043 reference of type A&
7045 --conversion of C to B is better than conversion of C to A, */
7046 if (is_properly_derived_from (from, to_type1)
7047 && is_properly_derived_from (from, to_type2))
7049 if (is_properly_derived_from (to_type1, to_type2))
7050 return 1;
7051 else if (is_properly_derived_from (to_type2, to_type1))
7052 return -1;
7055 else if (CLASS_TYPE_P (non_reference (to_type1))
7056 && same_type_p (to_type1, to_type2))
7058 tree to = non_reference (to_type1);
7060 /* [over.ics.rank]
7062 --binding of an expression of type B to a reference of type
7063 A& is better than binding an expression of type C to a
7064 reference of type A&,
7066 --conversion of B to A is better than conversion of C to A */
7067 if (is_properly_derived_from (from_type1, to)
7068 && is_properly_derived_from (from_type2, to))
7070 if (is_properly_derived_from (from_type2, from_type1))
7071 return 1;
7072 else if (is_properly_derived_from (from_type1, from_type2))
7073 return -1;
7077 /* [over.ics.rank]
7079 --S1 and S2 differ only in their qualification conversion and yield
7080 similar types T1 and T2 (_conv.qual_), respectively, and the cv-
7081 qualification signature of type T1 is a proper subset of the cv-
7082 qualification signature of type T2 */
7083 if (ics1->kind == ck_qual
7084 && ics2->kind == ck_qual
7085 && same_type_p (from_type1, from_type2))
7087 int result = comp_cv_qual_signature (to_type1, to_type2);
7088 if (result != 0)
7089 return result;
7092 /* [over.ics.rank]
7094 --S1 and S2 are reference bindings (_dcl.init.ref_) and neither refers
7095 to an implicit object parameter, and either S1 binds an lvalue reference
7096 to an lvalue and S2 binds an rvalue reference or S1 binds an rvalue
7097 reference to an rvalue and S2 binds an lvalue reference
7098 (C++0x draft standard, 13.3.3.2)
7100 --S1 and S2 are reference bindings (_dcl.init.ref_), and the
7101 types to which the references refer are the same type except for
7102 top-level cv-qualifiers, and the type to which the reference
7103 initialized by S2 refers is more cv-qualified than the type to
7104 which the reference initialized by S1 refers */
7106 if (ref_conv1 && ref_conv2)
7108 if (!ref_conv1->this_p && !ref_conv2->this_p
7109 && (TYPE_REF_IS_RVALUE (ref_conv1->type)
7110 != TYPE_REF_IS_RVALUE (ref_conv2->type)))
7112 if (ref_conv1->rvaluedness_matches_p)
7113 return 1;
7114 if (ref_conv2->rvaluedness_matches_p)
7115 return -1;
7118 if (same_type_ignoring_top_level_qualifiers_p (to_type1, to_type2))
7119 return comp_cv_qualification (TREE_TYPE (ref_conv2->type),
7120 TREE_TYPE (ref_conv1->type));
7123 /* Neither conversion sequence is better than the other. */
7124 return 0;
7127 /* The source type for this standard conversion sequence. */
7129 static tree
7130 source_type (conversion *t)
7132 for (;; t = t->u.next)
7134 if (t->kind == ck_user
7135 || t->kind == ck_ambig
7136 || t->kind == ck_identity)
7137 return t->type;
7139 gcc_unreachable ();
7142 /* Note a warning about preferring WINNER to LOSER. We do this by storing
7143 a pointer to LOSER and re-running joust to produce the warning if WINNER
7144 is actually used. */
7146 static void
7147 add_warning (struct z_candidate *winner, struct z_candidate *loser)
7149 candidate_warning *cw = (candidate_warning *)
7150 conversion_obstack_alloc (sizeof (candidate_warning));
7151 cw->loser = loser;
7152 cw->next = winner->warnings;
7153 winner->warnings = cw;
7156 /* Compare two candidates for overloading as described in
7157 [over.match.best]. Return values:
7159 1: cand1 is better than cand2
7160 -1: cand2 is better than cand1
7161 0: cand1 and cand2 are indistinguishable */
7163 static int
7164 joust (struct z_candidate *cand1, struct z_candidate *cand2, bool warn)
7166 int winner = 0;
7167 int off1 = 0, off2 = 0;
7168 size_t i;
7169 size_t len;
7171 /* Candidates that involve bad conversions are always worse than those
7172 that don't. */
7173 if (cand1->viable > cand2->viable)
7174 return 1;
7175 if (cand1->viable < cand2->viable)
7176 return -1;
7178 /* If we have two pseudo-candidates for conversions to the same type,
7179 or two candidates for the same function, arbitrarily pick one. */
7180 if (cand1->fn == cand2->fn
7181 && (IS_TYPE_OR_DECL_P (cand1->fn)))
7182 return 1;
7184 /* a viable function F1
7185 is defined to be a better function than another viable function F2 if
7186 for all arguments i, ICSi(F1) is not a worse conversion sequence than
7187 ICSi(F2), and then */
7189 /* for some argument j, ICSj(F1) is a better conversion sequence than
7190 ICSj(F2) */
7192 /* For comparing static and non-static member functions, we ignore
7193 the implicit object parameter of the non-static function. The
7194 standard says to pretend that the static function has an object
7195 parm, but that won't work with operator overloading. */
7196 len = cand1->num_convs;
7197 if (len != cand2->num_convs)
7199 int static_1 = DECL_STATIC_FUNCTION_P (cand1->fn);
7200 int static_2 = DECL_STATIC_FUNCTION_P (cand2->fn);
7202 gcc_assert (static_1 != static_2);
7204 if (static_1)
7205 off2 = 1;
7206 else
7208 off1 = 1;
7209 --len;
7213 for (i = 0; i < len; ++i)
7215 conversion *t1 = cand1->convs[i + off1];
7216 conversion *t2 = cand2->convs[i + off2];
7217 int comp = compare_ics (t1, t2);
7219 if (comp != 0)
7221 if (warn_sign_promo
7222 && (CONVERSION_RANK (t1) + CONVERSION_RANK (t2)
7223 == cr_std + cr_promotion)
7224 && t1->kind == ck_std
7225 && t2->kind == ck_std
7226 && TREE_CODE (t1->type) == INTEGER_TYPE
7227 && TREE_CODE (t2->type) == INTEGER_TYPE
7228 && (TYPE_PRECISION (t1->type)
7229 == TYPE_PRECISION (t2->type))
7230 && (TYPE_UNSIGNED (t1->u.next->type)
7231 || (TREE_CODE (t1->u.next->type)
7232 == ENUMERAL_TYPE)))
7234 tree type = t1->u.next->type;
7235 tree type1, type2;
7236 struct z_candidate *w, *l;
7237 if (comp > 0)
7238 type1 = t1->type, type2 = t2->type,
7239 w = cand1, l = cand2;
7240 else
7241 type1 = t2->type, type2 = t1->type,
7242 w = cand2, l = cand1;
7244 if (warn)
7246 warning (OPT_Wsign_promo, "passing %qT chooses %qT over %qT",
7247 type, type1, type2);
7248 warning (OPT_Wsign_promo, " in call to %qD", w->fn);
7250 else
7251 add_warning (w, l);
7254 if (winner && comp != winner)
7256 winner = 0;
7257 goto tweak;
7259 winner = comp;
7263 /* warn about confusing overload resolution for user-defined conversions,
7264 either between a constructor and a conversion op, or between two
7265 conversion ops. */
7266 if (winner && warn_conversion && cand1->second_conv
7267 && (!DECL_CONSTRUCTOR_P (cand1->fn) || !DECL_CONSTRUCTOR_P (cand2->fn))
7268 && winner != compare_ics (cand1->second_conv, cand2->second_conv))
7270 struct z_candidate *w, *l;
7271 bool give_warning = false;
7273 if (winner == 1)
7274 w = cand1, l = cand2;
7275 else
7276 w = cand2, l = cand1;
7278 /* We don't want to complain about `X::operator T1 ()'
7279 beating `X::operator T2 () const', when T2 is a no less
7280 cv-qualified version of T1. */
7281 if (DECL_CONTEXT (w->fn) == DECL_CONTEXT (l->fn)
7282 && !DECL_CONSTRUCTOR_P (w->fn) && !DECL_CONSTRUCTOR_P (l->fn))
7284 tree t = TREE_TYPE (TREE_TYPE (l->fn));
7285 tree f = TREE_TYPE (TREE_TYPE (w->fn));
7287 if (TREE_CODE (t) == TREE_CODE (f) && POINTER_TYPE_P (t))
7289 t = TREE_TYPE (t);
7290 f = TREE_TYPE (f);
7292 if (!comp_ptr_ttypes (t, f))
7293 give_warning = true;
7295 else
7296 give_warning = true;
7298 if (!give_warning)
7299 /*NOP*/;
7300 else if (warn)
7302 tree source = source_type (w->convs[0]);
7303 if (! DECL_CONSTRUCTOR_P (w->fn))
7304 source = TREE_TYPE (source);
7305 if (warning (OPT_Wconversion, "choosing %qD over %qD", w->fn, l->fn)
7306 && warning (OPT_Wconversion, " for conversion from %qT to %qT",
7307 source, w->second_conv->type))
7309 inform (input_location, " because conversion sequence for the argument is better");
7312 else
7313 add_warning (w, l);
7316 if (winner)
7317 return winner;
7319 /* or, if not that,
7320 F1 is a non-template function and F2 is a template function
7321 specialization. */
7323 if (!cand1->template_decl && cand2->template_decl)
7324 return 1;
7325 else if (cand1->template_decl && !cand2->template_decl)
7326 return -1;
7328 /* or, if not that,
7329 F1 and F2 are template functions and the function template for F1 is
7330 more specialized than the template for F2 according to the partial
7331 ordering rules. */
7333 if (cand1->template_decl && cand2->template_decl)
7335 winner = more_specialized_fn
7336 (TI_TEMPLATE (cand1->template_decl),
7337 TI_TEMPLATE (cand2->template_decl),
7338 /* [temp.func.order]: The presence of unused ellipsis and default
7339 arguments has no effect on the partial ordering of function
7340 templates. add_function_candidate() will not have
7341 counted the "this" argument for constructors. */
7342 cand1->num_convs + DECL_CONSTRUCTOR_P (cand1->fn));
7343 if (winner)
7344 return winner;
7347 /* or, if not that,
7348 the context is an initialization by user-defined conversion (see
7349 _dcl.init_ and _over.match.user_) and the standard conversion
7350 sequence from the return type of F1 to the destination type (i.e.,
7351 the type of the entity being initialized) is a better conversion
7352 sequence than the standard conversion sequence from the return type
7353 of F2 to the destination type. */
7355 if (cand1->second_conv)
7357 winner = compare_ics (cand1->second_conv, cand2->second_conv);
7358 if (winner)
7359 return winner;
7362 /* Check whether we can discard a builtin candidate, either because we
7363 have two identical ones or matching builtin and non-builtin candidates.
7365 (Pedantically in the latter case the builtin which matched the user
7366 function should not be added to the overload set, but we spot it here.
7368 [over.match.oper]
7369 ... the builtin candidates include ...
7370 - do not have the same parameter type list as any non-template
7371 non-member candidate. */
7373 if (TREE_CODE (cand1->fn) == IDENTIFIER_NODE
7374 || TREE_CODE (cand2->fn) == IDENTIFIER_NODE)
7376 for (i = 0; i < len; ++i)
7377 if (!same_type_p (cand1->convs[i]->type,
7378 cand2->convs[i]->type))
7379 break;
7380 if (i == cand1->num_convs)
7382 if (cand1->fn == cand2->fn)
7383 /* Two built-in candidates; arbitrarily pick one. */
7384 return 1;
7385 else if (TREE_CODE (cand1->fn) == IDENTIFIER_NODE)
7386 /* cand1 is built-in; prefer cand2. */
7387 return -1;
7388 else
7389 /* cand2 is built-in; prefer cand1. */
7390 return 1;
7394 /* If the two function declarations represent the same function (this can
7395 happen with declarations in multiple scopes and arg-dependent lookup),
7396 arbitrarily choose one. But first make sure the default args we're
7397 using match. */
7398 if (DECL_P (cand1->fn) && DECL_P (cand2->fn)
7399 && equal_functions (cand1->fn, cand2->fn))
7401 tree parms1 = TYPE_ARG_TYPES (TREE_TYPE (cand1->fn));
7402 tree parms2 = TYPE_ARG_TYPES (TREE_TYPE (cand2->fn));
7404 gcc_assert (!DECL_CONSTRUCTOR_P (cand1->fn));
7406 for (i = 0; i < len; ++i)
7408 /* Don't crash if the fn is variadic. */
7409 if (!parms1)
7410 break;
7411 parms1 = TREE_CHAIN (parms1);
7412 parms2 = TREE_CHAIN (parms2);
7415 if (off1)
7416 parms1 = TREE_CHAIN (parms1);
7417 else if (off2)
7418 parms2 = TREE_CHAIN (parms2);
7420 for (; parms1; ++i)
7422 if (!cp_tree_equal (TREE_PURPOSE (parms1),
7423 TREE_PURPOSE (parms2)))
7425 if (warn)
7427 permerror (input_location, "default argument mismatch in "
7428 "overload resolution");
7429 inform (input_location,
7430 " candidate 1: %q+#F", cand1->fn);
7431 inform (input_location,
7432 " candidate 2: %q+#F", cand2->fn);
7434 else
7435 add_warning (cand1, cand2);
7436 break;
7438 parms1 = TREE_CHAIN (parms1);
7439 parms2 = TREE_CHAIN (parms2);
7442 return 1;
7445 tweak:
7447 /* Extension: If the worst conversion for one candidate is worse than the
7448 worst conversion for the other, take the first. */
7449 if (!pedantic)
7451 conversion_rank rank1 = cr_identity, rank2 = cr_identity;
7452 struct z_candidate *w = 0, *l = 0;
7454 for (i = 0; i < len; ++i)
7456 if (CONVERSION_RANK (cand1->convs[i+off1]) > rank1)
7457 rank1 = CONVERSION_RANK (cand1->convs[i+off1]);
7458 if (CONVERSION_RANK (cand2->convs[i + off2]) > rank2)
7459 rank2 = CONVERSION_RANK (cand2->convs[i + off2]);
7461 if (rank1 < rank2)
7462 winner = 1, w = cand1, l = cand2;
7463 if (rank1 > rank2)
7464 winner = -1, w = cand2, l = cand1;
7465 if (winner)
7467 /* Don't choose a deleted function over ambiguity. */
7468 if (DECL_P (w->fn) && DECL_DELETED_FN (w->fn))
7469 return 0;
7470 if (warn)
7472 pedwarn (input_location, 0,
7473 "ISO C++ says that these are ambiguous, even "
7474 "though the worst conversion for the first is better than "
7475 "the worst conversion for the second:");
7476 print_z_candidate (_("candidate 1:"), w);
7477 print_z_candidate (_("candidate 2:"), l);
7479 else
7480 add_warning (w, l);
7481 return winner;
7485 gcc_assert (!winner);
7486 return 0;
7489 /* Given a list of candidates for overloading, find the best one, if any.
7490 This algorithm has a worst case of O(2n) (winner is last), and a best
7491 case of O(n/2) (totally ambiguous); much better than a sorting
7492 algorithm. */
7494 static struct z_candidate *
7495 tourney (struct z_candidate *candidates)
7497 struct z_candidate *champ = candidates, *challenger;
7498 int fate;
7499 int champ_compared_to_predecessor = 0;
7501 /* Walk through the list once, comparing each current champ to the next
7502 candidate, knocking out a candidate or two with each comparison. */
7504 for (challenger = champ->next; challenger; )
7506 fate = joust (champ, challenger, 0);
7507 if (fate == 1)
7508 challenger = challenger->next;
7509 else
7511 if (fate == 0)
7513 champ = challenger->next;
7514 if (champ == 0)
7515 return NULL;
7516 champ_compared_to_predecessor = 0;
7518 else
7520 champ = challenger;
7521 champ_compared_to_predecessor = 1;
7524 challenger = champ->next;
7528 /* Make sure the champ is better than all the candidates it hasn't yet
7529 been compared to. */
7531 for (challenger = candidates;
7532 challenger != champ
7533 && !(champ_compared_to_predecessor && challenger->next == champ);
7534 challenger = challenger->next)
7536 fate = joust (champ, challenger, 0);
7537 if (fate != 1)
7538 return NULL;
7541 return champ;
7544 /* Returns nonzero if things of type FROM can be converted to TO. */
7546 bool
7547 can_convert (tree to, tree from)
7549 return can_convert_arg (to, from, NULL_TREE, LOOKUP_IMPLICIT);
7552 /* Returns nonzero if ARG (of type FROM) can be converted to TO. */
7554 bool
7555 can_convert_arg (tree to, tree from, tree arg, int flags)
7557 conversion *t;
7558 void *p;
7559 bool ok_p;
7561 /* Get the high-water mark for the CONVERSION_OBSTACK. */
7562 p = conversion_obstack_alloc (0);
7564 t = implicit_conversion (to, from, arg, /*c_cast_p=*/false,
7565 flags);
7566 ok_p = (t && !t->bad_p);
7568 /* Free all the conversions we allocated. */
7569 obstack_free (&conversion_obstack, p);
7571 return ok_p;
7574 /* Like can_convert_arg, but allows dubious conversions as well. */
7576 bool
7577 can_convert_arg_bad (tree to, tree from, tree arg, int flags)
7579 conversion *t;
7580 void *p;
7582 /* Get the high-water mark for the CONVERSION_OBSTACK. */
7583 p = conversion_obstack_alloc (0);
7584 /* Try to perform the conversion. */
7585 t = implicit_conversion (to, from, arg, /*c_cast_p=*/false,
7586 flags);
7587 /* Free all the conversions we allocated. */
7588 obstack_free (&conversion_obstack, p);
7590 return t != NULL;
7593 /* Convert EXPR to TYPE. Return the converted expression.
7595 Note that we allow bad conversions here because by the time we get to
7596 this point we are committed to doing the conversion. If we end up
7597 doing a bad conversion, convert_like will complain. */
7599 tree
7600 perform_implicit_conversion_flags (tree type, tree expr, tsubst_flags_t complain, int flags)
7602 conversion *conv;
7603 void *p;
7605 if (error_operand_p (expr))
7606 return error_mark_node;
7608 /* Get the high-water mark for the CONVERSION_OBSTACK. */
7609 p = conversion_obstack_alloc (0);
7611 conv = implicit_conversion (type, TREE_TYPE (expr), expr,
7612 /*c_cast_p=*/false,
7613 flags);
7615 if (!conv)
7617 if (complain & tf_error)
7619 /* If expr has unknown type, then it is an overloaded function.
7620 Call instantiate_type to get good error messages. */
7621 if (TREE_TYPE (expr) == unknown_type_node)
7622 instantiate_type (type, expr, complain);
7623 else if (invalid_nonstatic_memfn_p (expr, complain))
7624 /* We gave an error. */;
7625 else
7626 error ("could not convert %qE to %qT", expr, type);
7628 expr = error_mark_node;
7630 else if (processing_template_decl)
7632 /* In a template, we are only concerned about determining the
7633 type of non-dependent expressions, so we do not have to
7634 perform the actual conversion. */
7635 if (TREE_TYPE (expr) != type)
7636 expr = build_nop (type, expr);
7638 else
7639 expr = convert_like (conv, expr, complain);
7641 /* Free all the conversions we allocated. */
7642 obstack_free (&conversion_obstack, p);
7644 return expr;
7647 tree
7648 perform_implicit_conversion (tree type, tree expr, tsubst_flags_t complain)
7650 return perform_implicit_conversion_flags (type, expr, complain, LOOKUP_IMPLICIT);
7653 /* Convert EXPR to TYPE (as a direct-initialization) if that is
7654 permitted. If the conversion is valid, the converted expression is
7655 returned. Otherwise, NULL_TREE is returned, except in the case
7656 that TYPE is a class type; in that case, an error is issued. If
7657 C_CAST_P is true, then this direction initialization is taking
7658 place as part of a static_cast being attempted as part of a C-style
7659 cast. */
7661 tree
7662 perform_direct_initialization_if_possible (tree type,
7663 tree expr,
7664 bool c_cast_p,
7665 tsubst_flags_t complain)
7667 conversion *conv;
7668 void *p;
7670 if (type == error_mark_node || error_operand_p (expr))
7671 return error_mark_node;
7672 /* [dcl.init]
7674 If the destination type is a (possibly cv-qualified) class type:
7676 -- If the initialization is direct-initialization ...,
7677 constructors are considered. ... If no constructor applies, or
7678 the overload resolution is ambiguous, the initialization is
7679 ill-formed. */
7680 if (CLASS_TYPE_P (type))
7682 VEC(tree,gc) *args = make_tree_vector_single (expr);
7683 expr = build_special_member_call (NULL_TREE, complete_ctor_identifier,
7684 &args, type, LOOKUP_NORMAL, complain);
7685 release_tree_vector (args);
7686 return build_cplus_new (type, expr);
7689 /* Get the high-water mark for the CONVERSION_OBSTACK. */
7690 p = conversion_obstack_alloc (0);
7692 conv = implicit_conversion (type, TREE_TYPE (expr), expr,
7693 c_cast_p,
7694 LOOKUP_NORMAL);
7695 if (!conv || conv->bad_p)
7696 expr = NULL_TREE;
7697 else
7698 expr = convert_like_real (conv, expr, NULL_TREE, 0, 0,
7699 /*issue_conversion_warnings=*/false,
7700 c_cast_p,
7701 complain);
7703 /* Free all the conversions we allocated. */
7704 obstack_free (&conversion_obstack, p);
7706 return expr;
7709 /* DECL is a VAR_DECL whose type is a REFERENCE_TYPE. The reference
7710 is being bound to a temporary. Create and return a new VAR_DECL
7711 with the indicated TYPE; this variable will store the value to
7712 which the reference is bound. */
7714 tree
7715 make_temporary_var_for_ref_to_temp (tree decl, tree type)
7717 tree var;
7719 /* Create the variable. */
7720 var = create_temporary_var (type);
7722 /* Register the variable. */
7723 if (TREE_STATIC (decl))
7725 /* Namespace-scope or local static; give it a mangled name. */
7726 tree name;
7728 TREE_STATIC (var) = 1;
7729 name = mangle_ref_init_variable (decl);
7730 DECL_NAME (var) = name;
7731 SET_DECL_ASSEMBLER_NAME (var, name);
7732 var = pushdecl_top_level (var);
7734 else
7735 /* Create a new cleanup level if necessary. */
7736 maybe_push_cleanup_level (type);
7738 return var;
7741 /* EXPR is the initializer for a variable DECL of reference or
7742 std::initializer_list type. Create, push and return a new VAR_DECL
7743 for the initializer so that it will live as long as DECL. Any
7744 cleanup for the new variable is returned through CLEANUP, and the
7745 code to initialize the new variable is returned through INITP. */
7747 tree
7748 set_up_extended_ref_temp (tree decl, tree expr, tree *cleanup, tree *initp)
7750 tree init;
7751 tree type;
7752 tree var;
7754 /* Create the temporary variable. */
7755 type = TREE_TYPE (expr);
7756 var = make_temporary_var_for_ref_to_temp (decl, type);
7757 layout_decl (var, 0);
7758 /* If the rvalue is the result of a function call it will be
7759 a TARGET_EXPR. If it is some other construct (such as a
7760 member access expression where the underlying object is
7761 itself the result of a function call), turn it into a
7762 TARGET_EXPR here. It is important that EXPR be a
7763 TARGET_EXPR below since otherwise the INIT_EXPR will
7764 attempt to make a bitwise copy of EXPR to initialize
7765 VAR. */
7766 if (TREE_CODE (expr) != TARGET_EXPR)
7767 expr = get_target_expr (expr);
7768 /* Create the INIT_EXPR that will initialize the temporary
7769 variable. */
7770 init = build2 (INIT_EXPR, type, var, expr);
7771 if (at_function_scope_p ())
7773 add_decl_expr (var);
7775 if (TREE_STATIC (var))
7776 init = add_stmt_to_compound (init, register_dtor_fn (var));
7777 else
7778 *cleanup = cxx_maybe_build_cleanup (var);
7780 /* We must be careful to destroy the temporary only
7781 after its initialization has taken place. If the
7782 initialization throws an exception, then the
7783 destructor should not be run. We cannot simply
7784 transform INIT into something like:
7786 (INIT, ({ CLEANUP_STMT; }))
7788 because emit_local_var always treats the
7789 initializer as a full-expression. Thus, the
7790 destructor would run too early; it would run at the
7791 end of initializing the reference variable, rather
7792 than at the end of the block enclosing the
7793 reference variable.
7795 The solution is to pass back a cleanup expression
7796 which the caller is responsible for attaching to
7797 the statement tree. */
7799 else
7801 rest_of_decl_compilation (var, /*toplev=*/1, at_eof);
7802 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
7803 static_aggregates = tree_cons (NULL_TREE, var,
7804 static_aggregates);
7807 *initp = init;
7808 return var;
7811 /* Convert EXPR to the indicated reference TYPE, in a way suitable for
7812 initializing a variable of that TYPE. If DECL is non-NULL, it is
7813 the VAR_DECL being initialized with the EXPR. (In that case, the
7814 type of DECL will be TYPE.) If DECL is non-NULL, then CLEANUP must
7815 also be non-NULL, and with *CLEANUP initialized to NULL. Upon
7816 return, if *CLEANUP is no longer NULL, it will be an expression
7817 that should be pushed as a cleanup after the returned expression
7818 is used to initialize DECL.
7820 Return the converted expression. */
7822 tree
7823 initialize_reference (tree type, tree expr, tree decl, tree *cleanup,
7824 tsubst_flags_t complain)
7826 conversion *conv;
7827 void *p;
7829 if (type == error_mark_node || error_operand_p (expr))
7830 return error_mark_node;
7832 /* Get the high-water mark for the CONVERSION_OBSTACK. */
7833 p = conversion_obstack_alloc (0);
7835 conv = reference_binding (type, TREE_TYPE (expr), expr, /*c_cast_p=*/false,
7836 LOOKUP_NORMAL);
7837 if (!conv || conv->bad_p)
7839 if (complain & tf_error)
7841 if (!CP_TYPE_CONST_P (TREE_TYPE (type))
7842 && !TYPE_REF_IS_RVALUE (type)
7843 && !real_lvalue_p (expr))
7844 error ("invalid initialization of non-const reference of "
7845 "type %qT from an rvalue of type %qT",
7846 type, TREE_TYPE (expr));
7847 else
7848 error ("invalid initialization of reference of type "
7849 "%qT from expression of type %qT", type,
7850 TREE_TYPE (expr));
7852 return error_mark_node;
7855 /* If DECL is non-NULL, then this special rule applies:
7857 [class.temporary]
7859 The temporary to which the reference is bound or the temporary
7860 that is the complete object to which the reference is bound
7861 persists for the lifetime of the reference.
7863 The temporaries created during the evaluation of the expression
7864 initializing the reference, except the temporary to which the
7865 reference is bound, are destroyed at the end of the
7866 full-expression in which they are created.
7868 In that case, we store the converted expression into a new
7869 VAR_DECL in a new scope.
7871 However, we want to be careful not to create temporaries when
7872 they are not required. For example, given:
7874 struct B {};
7875 struct D : public B {};
7876 D f();
7877 const B& b = f();
7879 there is no need to copy the return value from "f"; we can just
7880 extend its lifetime. Similarly, given:
7882 struct S {};
7883 struct T { operator S(); };
7884 T t;
7885 const S& s = t;
7887 we can extend the lifetime of the return value of the conversion
7888 operator. */
7889 gcc_assert (conv->kind == ck_ref_bind);
7890 if (decl)
7892 tree var;
7893 tree base_conv_type;
7895 /* Skip over the REF_BIND. */
7896 conv = conv->u.next;
7897 /* If the next conversion is a BASE_CONV, skip that too -- but
7898 remember that the conversion was required. */
7899 if (conv->kind == ck_base)
7901 base_conv_type = conv->type;
7902 conv = conv->u.next;
7904 else
7905 base_conv_type = NULL_TREE;
7906 /* Perform the remainder of the conversion. */
7907 expr = convert_like_real (conv, expr,
7908 /*fn=*/NULL_TREE, /*argnum=*/0,
7909 /*inner=*/-1,
7910 /*issue_conversion_warnings=*/true,
7911 /*c_cast_p=*/false,
7912 tf_warning_or_error);
7913 if (error_operand_p (expr))
7914 expr = error_mark_node;
7915 else
7917 if (!lvalue_or_rvalue_with_address_p (expr))
7919 tree init;
7920 var = set_up_extended_ref_temp (decl, expr, cleanup, &init);
7921 /* Use its address to initialize the reference variable. */
7922 expr = build_address (var);
7923 if (base_conv_type)
7924 expr = convert_to_base (expr,
7925 build_pointer_type (base_conv_type),
7926 /*check_access=*/true,
7927 /*nonnull=*/true, complain);
7928 expr = build2 (COMPOUND_EXPR, TREE_TYPE (expr), init, expr);
7930 else
7931 /* Take the address of EXPR. */
7932 expr = cp_build_unary_op (ADDR_EXPR, expr, 0, tf_warning_or_error);
7933 /* If a BASE_CONV was required, perform it now. */
7934 if (base_conv_type)
7935 expr = (perform_implicit_conversion
7936 (build_pointer_type (base_conv_type), expr,
7937 tf_warning_or_error));
7938 expr = build_nop (type, expr);
7941 else
7942 /* Perform the conversion. */
7943 expr = convert_like (conv, expr, tf_warning_or_error);
7945 /* Free all the conversions we allocated. */
7946 obstack_free (&conversion_obstack, p);
7948 return expr;
7951 /* Returns true iff TYPE is some variant of std::initializer_list. */
7953 bool
7954 is_std_init_list (tree type)
7956 /* Look through typedefs. */
7957 if (!TYPE_P (type))
7958 return false;
7959 type = TYPE_MAIN_VARIANT (type);
7960 return (CLASS_TYPE_P (type)
7961 && CP_TYPE_CONTEXT (type) == std_node
7962 && strcmp (TYPE_NAME_STRING (type), "initializer_list") == 0);
7965 /* Returns true iff DECL is a list constructor: i.e. a constructor which
7966 will accept an argument list of a single std::initializer_list<T>. */
7968 bool
7969 is_list_ctor (tree decl)
7971 tree args = FUNCTION_FIRST_USER_PARMTYPE (decl);
7972 tree arg;
7974 if (!args || args == void_list_node)
7975 return false;
7977 arg = non_reference (TREE_VALUE (args));
7978 if (!is_std_init_list (arg))
7979 return false;
7981 args = TREE_CHAIN (args);
7983 if (args && args != void_list_node && !TREE_PURPOSE (args))
7984 /* There are more non-defaulted parms. */
7985 return false;
7987 return true;
7990 #include "gt-cp-call.h"