Remove INT_CST_LT and INT_CST_LE.
[official-gcc.git] / gcc / cp / call.c
blobb0b1a61cb245d4fc58b0af66ea194beb27c52c09
1 /* Functions related to invoking methods and overloaded functions.
2 Copyright (C) 1987-2013 Free Software Foundation, Inc.
3 Contributed by Michael Tiemann (tiemann@cygnus.com) and
4 modified by Brendan Kehoe (brendan@cygnus.com).
6 This file is part of GCC.
8 GCC is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 3, or (at your option)
11 any later version.
13 GCC is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3. If not see
20 <http://www.gnu.org/licenses/>. */
23 /* High-level class interface. */
25 #include "config.h"
26 #include "system.h"
27 #include "coretypes.h"
28 #include "tm.h"
29 #include "tree.h"
30 #include "stor-layout.h"
31 #include "trans-mem.h"
32 #include "stringpool.h"
33 #include "cp-tree.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"
41 #include "c-family/c-objc.h"
42 #include "timevar.h"
43 #include "cgraph.h"
44 #include "wide-int.h"
46 /* The various kinds of conversion. */
48 typedef enum conversion_kind {
49 ck_identity,
50 ck_lvalue,
51 ck_qual,
52 ck_std,
53 ck_ptr,
54 ck_pmem,
55 ck_base,
56 ck_ref_bind,
57 ck_user,
58 ck_ambig,
59 ck_list,
60 ck_aggr,
61 ck_rvalue
62 } conversion_kind;
64 /* The rank of the conversion. Order of the enumerals matters; better
65 conversions should come earlier in the list. */
67 typedef enum conversion_rank {
68 cr_identity,
69 cr_exact,
70 cr_promotion,
71 cr_std,
72 cr_pbool,
73 cr_user,
74 cr_ellipsis,
75 cr_bad
76 } conversion_rank;
78 /* An implicit conversion sequence, in the sense of [over.best.ics].
79 The first conversion to be performed is at the end of the chain.
80 That conversion is always a cr_identity conversion. */
82 typedef struct conversion conversion;
83 struct conversion {
84 /* The kind of conversion represented by this step. */
85 conversion_kind kind;
86 /* The rank of this conversion. */
87 conversion_rank rank;
88 BOOL_BITFIELD user_conv_p : 1;
89 BOOL_BITFIELD ellipsis_p : 1;
90 BOOL_BITFIELD this_p : 1;
91 /* True if this conversion would be permitted with a bending of
92 language standards, e.g. disregarding pointer qualifiers or
93 converting integers to pointers. */
94 BOOL_BITFIELD bad_p : 1;
95 /* If KIND is ck_ref_bind ck_base_conv, true to indicate that a
96 temporary should be created to hold the result of the
97 conversion. */
98 BOOL_BITFIELD need_temporary_p : 1;
99 /* If KIND is ck_ptr or ck_pmem, true to indicate that a conversion
100 from a pointer-to-derived to pointer-to-base is being performed. */
101 BOOL_BITFIELD base_p : 1;
102 /* If KIND is ck_ref_bind, true when either an lvalue reference is
103 being bound to an lvalue expression or an rvalue reference is
104 being bound to an rvalue expression. If KIND is ck_rvalue,
105 true when we should treat an lvalue as an rvalue (12.8p33). If
106 KIND is ck_base, always false. */
107 BOOL_BITFIELD rvaluedness_matches_p: 1;
108 BOOL_BITFIELD check_narrowing: 1;
109 /* The type of the expression resulting from the conversion. */
110 tree type;
111 union {
112 /* The next conversion in the chain. Since the conversions are
113 arranged from outermost to innermost, the NEXT conversion will
114 actually be performed before this conversion. This variant is
115 used only when KIND is neither ck_identity, ck_ambig nor
116 ck_list. Please use the next_conversion function instead
117 of using this field directly. */
118 conversion *next;
119 /* The expression at the beginning of the conversion chain. This
120 variant is used only if KIND is ck_identity or ck_ambig. */
121 tree expr;
122 /* The array of conversions for an initializer_list, so this
123 variant is used only when KIN D is ck_list. */
124 conversion **list;
125 } u;
126 /* The function candidate corresponding to this conversion
127 sequence. This field is only used if KIND is ck_user. */
128 struct z_candidate *cand;
131 #define CONVERSION_RANK(NODE) \
132 ((NODE)->bad_p ? cr_bad \
133 : (NODE)->ellipsis_p ? cr_ellipsis \
134 : (NODE)->user_conv_p ? cr_user \
135 : (NODE)->rank)
137 #define BAD_CONVERSION_RANK(NODE) \
138 ((NODE)->ellipsis_p ? cr_ellipsis \
139 : (NODE)->user_conv_p ? cr_user \
140 : (NODE)->rank)
142 static struct obstack conversion_obstack;
143 static bool conversion_obstack_initialized;
144 struct rejection_reason;
146 static struct z_candidate * tourney (struct z_candidate *, tsubst_flags_t);
147 static int equal_functions (tree, tree);
148 static int joust (struct z_candidate *, struct z_candidate *, bool,
149 tsubst_flags_t);
150 static int compare_ics (conversion *, conversion *);
151 static tree build_over_call (struct z_candidate *, int, tsubst_flags_t);
152 static tree build_java_interface_fn_ref (tree, tree);
153 #define convert_like(CONV, EXPR, COMPLAIN) \
154 convert_like_real ((CONV), (EXPR), NULL_TREE, 0, 0, \
155 /*issue_conversion_warnings=*/true, \
156 /*c_cast_p=*/false, (COMPLAIN))
157 #define convert_like_with_context(CONV, EXPR, FN, ARGNO, COMPLAIN ) \
158 convert_like_real ((CONV), (EXPR), (FN), (ARGNO), 0, \
159 /*issue_conversion_warnings=*/true, \
160 /*c_cast_p=*/false, (COMPLAIN))
161 static tree convert_like_real (conversion *, tree, tree, int, int, bool,
162 bool, tsubst_flags_t);
163 static void op_error (location_t, enum tree_code, enum tree_code, tree,
164 tree, tree, bool);
165 static struct z_candidate *build_user_type_conversion_1 (tree, tree, int,
166 tsubst_flags_t);
167 static void print_z_candidate (location_t, const char *, struct z_candidate *);
168 static void print_z_candidates (location_t, struct z_candidate *);
169 static tree build_this (tree);
170 static struct z_candidate *splice_viable (struct z_candidate *, bool, bool *);
171 static bool any_strictly_viable (struct z_candidate *);
172 static struct z_candidate *add_template_candidate
173 (struct z_candidate **, tree, tree, tree, tree, const vec<tree, va_gc> *,
174 tree, tree, tree, int, unification_kind_t, tsubst_flags_t);
175 static struct z_candidate *add_template_candidate_real
176 (struct z_candidate **, tree, tree, tree, tree, const vec<tree, va_gc> *,
177 tree, tree, tree, int, tree, unification_kind_t, tsubst_flags_t);
178 static struct z_candidate *add_template_conv_candidate
179 (struct z_candidate **, tree, tree, tree, const vec<tree, va_gc> *,
180 tree, tree, tree, tsubst_flags_t);
181 static void add_builtin_candidates
182 (struct z_candidate **, enum tree_code, enum tree_code,
183 tree, tree *, int, tsubst_flags_t);
184 static void add_builtin_candidate
185 (struct z_candidate **, enum tree_code, enum tree_code,
186 tree, tree, tree, tree *, tree *, int, tsubst_flags_t);
187 static bool is_complete (tree);
188 static void build_builtin_candidate
189 (struct z_candidate **, tree, tree, tree, tree *, tree *,
190 int, tsubst_flags_t);
191 static struct z_candidate *add_conv_candidate
192 (struct z_candidate **, tree, tree, tree, const vec<tree, va_gc> *, tree,
193 tree, tsubst_flags_t);
194 static struct z_candidate *add_function_candidate
195 (struct z_candidate **, tree, tree, tree, const vec<tree, va_gc> *, tree,
196 tree, int, tsubst_flags_t);
197 static conversion *implicit_conversion (tree, tree, tree, bool, int,
198 tsubst_flags_t);
199 static conversion *standard_conversion (tree, tree, tree, bool, int);
200 static conversion *reference_binding (tree, tree, tree, bool, int,
201 tsubst_flags_t);
202 static conversion *build_conv (conversion_kind, tree, conversion *);
203 static conversion *build_list_conv (tree, tree, int, tsubst_flags_t);
204 static conversion *next_conversion (conversion *);
205 static bool is_subseq (conversion *, conversion *);
206 static conversion *maybe_handle_ref_bind (conversion **);
207 static void maybe_handle_implicit_object (conversion **);
208 static struct z_candidate *add_candidate
209 (struct z_candidate **, tree, tree, const vec<tree, va_gc> *, size_t,
210 conversion **, tree, tree, int, struct rejection_reason *);
211 static tree source_type (conversion *);
212 static void add_warning (struct z_candidate *, struct z_candidate *);
213 static bool reference_compatible_p (tree, tree);
214 static conversion *direct_reference_binding (tree, conversion *);
215 static bool promoted_arithmetic_type_p (tree);
216 static conversion *conditional_conversion (tree, tree, tsubst_flags_t);
217 static char *name_as_c_string (tree, tree, bool *);
218 static tree prep_operand (tree);
219 static void add_candidates (tree, tree, const vec<tree, va_gc> *, tree, tree,
220 bool, tree, tree, int, struct z_candidate **,
221 tsubst_flags_t);
222 static conversion *merge_conversion_sequences (conversion *, conversion *);
223 static tree build_temp (tree, tree, int, diagnostic_t *, tsubst_flags_t);
225 /* Returns nonzero iff the destructor name specified in NAME matches BASETYPE.
226 NAME can take many forms... */
228 bool
229 check_dtor_name (tree basetype, tree name)
231 /* Just accept something we've already complained about. */
232 if (name == error_mark_node)
233 return true;
235 if (TREE_CODE (name) == TYPE_DECL)
236 name = TREE_TYPE (name);
237 else if (TYPE_P (name))
238 /* OK */;
239 else if (identifier_p (name))
241 if ((MAYBE_CLASS_TYPE_P (basetype)
242 && name == constructor_name (basetype))
243 || (TREE_CODE (basetype) == ENUMERAL_TYPE
244 && name == TYPE_IDENTIFIER (basetype)))
245 return true;
246 else
247 name = get_type_value (name);
249 else
251 /* In the case of:
253 template <class T> struct S { ~S(); };
254 int i;
255 i.~S();
257 NAME will be a class template. */
258 gcc_assert (DECL_CLASS_TEMPLATE_P (name));
259 return false;
262 if (!name || name == error_mark_node)
263 return false;
264 return same_type_p (TYPE_MAIN_VARIANT (basetype), TYPE_MAIN_VARIANT (name));
267 /* We want the address of a function or method. We avoid creating a
268 pointer-to-member function. */
270 tree
271 build_addr_func (tree function, tsubst_flags_t complain)
273 tree type = TREE_TYPE (function);
275 /* We have to do these by hand to avoid real pointer to member
276 functions. */
277 if (TREE_CODE (type) == METHOD_TYPE)
279 if (TREE_CODE (function) == OFFSET_REF)
281 tree object = build_address (TREE_OPERAND (function, 0));
282 return get_member_function_from_ptrfunc (&object,
283 TREE_OPERAND (function, 1),
284 complain);
286 function = build_address (function);
288 else
289 function = decay_conversion (function, complain);
291 return function;
294 /* Build a CALL_EXPR, we can handle FUNCTION_TYPEs, METHOD_TYPEs, or
295 POINTER_TYPE to those. Note, pointer to member function types
296 (TYPE_PTRMEMFUNC_P) must be handled by our callers. There are
297 two variants. build_call_a is the primitive taking an array of
298 arguments, while build_call_n is a wrapper that handles varargs. */
300 tree
301 build_call_n (tree function, int n, ...)
303 if (n == 0)
304 return build_call_a (function, 0, NULL);
305 else
307 tree *argarray = XALLOCAVEC (tree, n);
308 va_list ap;
309 int i;
311 va_start (ap, n);
312 for (i = 0; i < n; i++)
313 argarray[i] = va_arg (ap, tree);
314 va_end (ap);
315 return build_call_a (function, n, argarray);
319 /* Update various flags in cfun and the call itself based on what is being
320 called. Split out of build_call_a so that bot_manip can use it too. */
322 void
323 set_flags_from_callee (tree call)
325 int nothrow;
326 tree decl = get_callee_fndecl (call);
328 /* We check both the decl and the type; a function may be known not to
329 throw without being declared throw(). */
330 nothrow = ((decl && TREE_NOTHROW (decl))
331 || TYPE_NOTHROW_P (TREE_TYPE (TREE_TYPE (CALL_EXPR_FN (call)))));
333 if (!nothrow && at_function_scope_p () && cfun && cp_function_chain)
334 cp_function_chain->can_throw = 1;
336 if (decl && TREE_THIS_VOLATILE (decl) && cfun && cp_function_chain)
337 current_function_returns_abnormally = 1;
339 TREE_NOTHROW (call) = nothrow;
342 tree
343 build_call_a (tree function, int n, tree *argarray)
345 tree decl;
346 tree result_type;
347 tree fntype;
348 int i;
350 function = build_addr_func (function, tf_warning_or_error);
352 gcc_assert (TYPE_PTR_P (TREE_TYPE (function)));
353 fntype = TREE_TYPE (TREE_TYPE (function));
354 gcc_assert (TREE_CODE (fntype) == FUNCTION_TYPE
355 || TREE_CODE (fntype) == METHOD_TYPE);
356 result_type = TREE_TYPE (fntype);
357 /* An rvalue has no cv-qualifiers. */
358 if (SCALAR_TYPE_P (result_type) || VOID_TYPE_P (result_type))
359 result_type = cv_unqualified (result_type);
361 function = build_call_array_loc (input_location,
362 result_type, function, n, argarray);
363 set_flags_from_callee (function);
365 decl = get_callee_fndecl (function);
367 if (decl && !TREE_USED (decl))
369 /* We invoke build_call directly for several library
370 functions. These may have been declared normally if
371 we're building libgcc, so we can't just check
372 DECL_ARTIFICIAL. */
373 gcc_assert (DECL_ARTIFICIAL (decl)
374 || !strncmp (IDENTIFIER_POINTER (DECL_NAME (decl)),
375 "__", 2));
376 mark_used (decl);
379 if (decl && TREE_DEPRECATED (decl))
380 warn_deprecated_use (decl, NULL_TREE);
381 require_complete_eh_spec_types (fntype, decl);
383 TREE_HAS_CONSTRUCTOR (function) = (decl && DECL_CONSTRUCTOR_P (decl));
385 /* Don't pass empty class objects by value. This is useful
386 for tags in STL, which are used to control overload resolution.
387 We don't need to handle other cases of copying empty classes. */
388 if (! decl || ! DECL_BUILT_IN (decl))
389 for (i = 0; i < n; i++)
391 tree arg = CALL_EXPR_ARG (function, i);
392 if (is_empty_class (TREE_TYPE (arg))
393 && ! TREE_ADDRESSABLE (TREE_TYPE (arg)))
395 tree t = build0 (EMPTY_CLASS_EXPR, TREE_TYPE (arg));
396 arg = build2 (COMPOUND_EXPR, TREE_TYPE (t), arg, t);
397 CALL_EXPR_ARG (function, i) = arg;
401 return function;
404 /* Build something of the form ptr->method (args)
405 or object.method (args). This can also build
406 calls to constructors, and find friends.
408 Member functions always take their class variable
409 as a pointer.
411 INSTANCE is a class instance.
413 NAME is the name of the method desired, usually an IDENTIFIER_NODE.
415 PARMS help to figure out what that NAME really refers to.
417 BASETYPE_PATH, if non-NULL, contains a chain from the type of INSTANCE
418 down to the real instance type to use for access checking. We need this
419 information to get protected accesses correct.
421 FLAGS is the logical disjunction of zero or more LOOKUP_
422 flags. See cp-tree.h for more info.
424 If this is all OK, calls build_function_call with the resolved
425 member function.
427 This function must also handle being called to perform
428 initialization, promotion/coercion of arguments, and
429 instantiation of default parameters.
431 Note that NAME may refer to an instance variable name. If
432 `operator()()' is defined for the type of that field, then we return
433 that result. */
435 /* New overloading code. */
437 typedef struct z_candidate z_candidate;
439 typedef struct candidate_warning candidate_warning;
440 struct candidate_warning {
441 z_candidate *loser;
442 candidate_warning *next;
445 /* Information for providing diagnostics about why overloading failed. */
447 enum rejection_reason_code {
448 rr_none,
449 rr_arity,
450 rr_explicit_conversion,
451 rr_template_conversion,
452 rr_arg_conversion,
453 rr_bad_arg_conversion,
454 rr_template_unification,
455 rr_invalid_copy
458 struct conversion_info {
459 /* The index of the argument, 0-based. */
460 int n_arg;
461 /* The type of the actual argument. */
462 tree from_type;
463 /* The type of the formal argument. */
464 tree to_type;
467 struct rejection_reason {
468 enum rejection_reason_code code;
469 union {
470 /* Information about an arity mismatch. */
471 struct {
472 /* The expected number of arguments. */
473 int expected;
474 /* The actual number of arguments in the call. */
475 int actual;
476 /* Whether the call was a varargs call. */
477 bool call_varargs_p;
478 } arity;
479 /* Information about an argument conversion mismatch. */
480 struct conversion_info conversion;
481 /* Same, but for bad argument conversions. */
482 struct conversion_info bad_conversion;
483 /* Information about template unification failures. These are the
484 parameters passed to fn_type_unification. */
485 struct {
486 tree tmpl;
487 tree explicit_targs;
488 int num_targs;
489 const tree *args;
490 unsigned int nargs;
491 tree return_type;
492 unification_kind_t strict;
493 int flags;
494 } template_unification;
495 /* Information about template instantiation failures. These are the
496 parameters passed to instantiate_template. */
497 struct {
498 tree tmpl;
499 tree targs;
500 } template_instantiation;
501 } u;
504 struct z_candidate {
505 /* The FUNCTION_DECL that will be called if this candidate is
506 selected by overload resolution. */
507 tree fn;
508 /* If not NULL_TREE, the first argument to use when calling this
509 function. */
510 tree first_arg;
511 /* The rest of the arguments to use when calling this function. If
512 there are no further arguments this may be NULL or it may be an
513 empty vector. */
514 const vec<tree, va_gc> *args;
515 /* The implicit conversion sequences for each of the arguments to
516 FN. */
517 conversion **convs;
518 /* The number of implicit conversion sequences. */
519 size_t num_convs;
520 /* If FN is a user-defined conversion, the standard conversion
521 sequence from the type returned by FN to the desired destination
522 type. */
523 conversion *second_conv;
524 int viable;
525 struct rejection_reason *reason;
526 /* If FN is a member function, the binfo indicating the path used to
527 qualify the name of FN at the call site. This path is used to
528 determine whether or not FN is accessible if it is selected by
529 overload resolution. The DECL_CONTEXT of FN will always be a
530 (possibly improper) base of this binfo. */
531 tree access_path;
532 /* If FN is a non-static member function, the binfo indicating the
533 subobject to which the `this' pointer should be converted if FN
534 is selected by overload resolution. The type pointed to by
535 the `this' pointer must correspond to the most derived class
536 indicated by the CONVERSION_PATH. */
537 tree conversion_path;
538 tree template_decl;
539 tree explicit_targs;
540 candidate_warning *warnings;
541 z_candidate *next;
544 /* Returns true iff T is a null pointer constant in the sense of
545 [conv.ptr]. */
547 bool
548 null_ptr_cst_p (tree t)
550 /* [conv.ptr]
552 A null pointer constant is an integral constant expression
553 (_expr.const_) rvalue of integer type that evaluates to zero or
554 an rvalue of type std::nullptr_t. */
555 if (NULLPTR_TYPE_P (TREE_TYPE (t)))
556 return true;
557 if (CP_INTEGRAL_TYPE_P (TREE_TYPE (t)))
559 /* Core issue 903 says only literal 0 is a null pointer constant. */
560 if (cxx_dialect < cxx11)
561 t = maybe_constant_value (fold_non_dependent_expr_sfinae (t, tf_none));
562 STRIP_NOPS (t);
563 if (integer_zerop (t) && !TREE_OVERFLOW (t))
564 return true;
566 return false;
569 /* Returns true iff T is a null member pointer value (4.11). */
571 bool
572 null_member_pointer_value_p (tree t)
574 tree type = TREE_TYPE (t);
575 if (!type)
576 return false;
577 else if (TYPE_PTRMEMFUNC_P (type))
578 return (TREE_CODE (t) == CONSTRUCTOR
579 && integer_zerop (CONSTRUCTOR_ELT (t, 0)->value));
580 else if (TYPE_PTRDATAMEM_P (type))
581 return integer_all_onesp (t);
582 else
583 return false;
586 /* Returns nonzero if PARMLIST consists of only default parms,
587 ellipsis, and/or undeduced parameter packs. */
589 bool
590 sufficient_parms_p (const_tree parmlist)
592 for (; parmlist && parmlist != void_list_node;
593 parmlist = TREE_CHAIN (parmlist))
594 if (!TREE_PURPOSE (parmlist)
595 && !PACK_EXPANSION_P (TREE_VALUE (parmlist)))
596 return false;
597 return true;
600 /* Allocate N bytes of memory from the conversion obstack. The memory
601 is zeroed before being returned. */
603 static void *
604 conversion_obstack_alloc (size_t n)
606 void *p;
607 if (!conversion_obstack_initialized)
609 gcc_obstack_init (&conversion_obstack);
610 conversion_obstack_initialized = true;
612 p = obstack_alloc (&conversion_obstack, n);
613 memset (p, 0, n);
614 return p;
617 /* Allocate rejection reasons. */
619 static struct rejection_reason *
620 alloc_rejection (enum rejection_reason_code code)
622 struct rejection_reason *p;
623 p = (struct rejection_reason *) conversion_obstack_alloc (sizeof *p);
624 p->code = code;
625 return p;
628 static struct rejection_reason *
629 arity_rejection (tree first_arg, int expected, int actual)
631 struct rejection_reason *r = alloc_rejection (rr_arity);
632 int adjust = first_arg != NULL_TREE;
633 r->u.arity.expected = expected - adjust;
634 r->u.arity.actual = actual - adjust;
635 return r;
638 static struct rejection_reason *
639 arg_conversion_rejection (tree first_arg, int n_arg, tree from, tree to)
641 struct rejection_reason *r = alloc_rejection (rr_arg_conversion);
642 int adjust = first_arg != NULL_TREE;
643 r->u.conversion.n_arg = n_arg - adjust;
644 r->u.conversion.from_type = from;
645 r->u.conversion.to_type = to;
646 return r;
649 static struct rejection_reason *
650 bad_arg_conversion_rejection (tree first_arg, int n_arg, tree from, tree to)
652 struct rejection_reason *r = alloc_rejection (rr_bad_arg_conversion);
653 int adjust = first_arg != NULL_TREE;
654 r->u.bad_conversion.n_arg = n_arg - adjust;
655 r->u.bad_conversion.from_type = from;
656 r->u.bad_conversion.to_type = to;
657 return r;
660 static struct rejection_reason *
661 explicit_conversion_rejection (tree from, tree to)
663 struct rejection_reason *r = alloc_rejection (rr_explicit_conversion);
664 r->u.conversion.n_arg = 0;
665 r->u.conversion.from_type = from;
666 r->u.conversion.to_type = to;
667 return r;
670 static struct rejection_reason *
671 template_conversion_rejection (tree from, tree to)
673 struct rejection_reason *r = alloc_rejection (rr_template_conversion);
674 r->u.conversion.n_arg = 0;
675 r->u.conversion.from_type = from;
676 r->u.conversion.to_type = to;
677 return r;
680 static struct rejection_reason *
681 template_unification_rejection (tree tmpl, tree explicit_targs, tree targs,
682 const tree *args, unsigned int nargs,
683 tree return_type, unification_kind_t strict,
684 int flags)
686 size_t args_n_bytes = sizeof (*args) * nargs;
687 tree *args1 = (tree *) conversion_obstack_alloc (args_n_bytes);
688 struct rejection_reason *r = alloc_rejection (rr_template_unification);
689 r->u.template_unification.tmpl = tmpl;
690 r->u.template_unification.explicit_targs = explicit_targs;
691 r->u.template_unification.num_targs = TREE_VEC_LENGTH (targs);
692 /* Copy args to our own storage. */
693 memcpy (args1, args, args_n_bytes);
694 r->u.template_unification.args = args1;
695 r->u.template_unification.nargs = nargs;
696 r->u.template_unification.return_type = return_type;
697 r->u.template_unification.strict = strict;
698 r->u.template_unification.flags = flags;
699 return r;
702 static struct rejection_reason *
703 template_unification_error_rejection (void)
705 return alloc_rejection (rr_template_unification);
708 static struct rejection_reason *
709 invalid_copy_with_fn_template_rejection (void)
711 struct rejection_reason *r = alloc_rejection (rr_invalid_copy);
712 return r;
715 /* Dynamically allocate a conversion. */
717 static conversion *
718 alloc_conversion (conversion_kind kind)
720 conversion *c;
721 c = (conversion *) conversion_obstack_alloc (sizeof (conversion));
722 c->kind = kind;
723 return c;
726 #ifdef ENABLE_CHECKING
728 /* Make sure that all memory on the conversion obstack has been
729 freed. */
731 void
732 validate_conversion_obstack (void)
734 if (conversion_obstack_initialized)
735 gcc_assert ((obstack_next_free (&conversion_obstack)
736 == obstack_base (&conversion_obstack)));
739 #endif /* ENABLE_CHECKING */
741 /* Dynamically allocate an array of N conversions. */
743 static conversion **
744 alloc_conversions (size_t n)
746 return (conversion **) conversion_obstack_alloc (n * sizeof (conversion *));
749 static conversion *
750 build_conv (conversion_kind code, tree type, conversion *from)
752 conversion *t;
753 conversion_rank rank = CONVERSION_RANK (from);
755 /* Note that the caller is responsible for filling in t->cand for
756 user-defined conversions. */
757 t = alloc_conversion (code);
758 t->type = type;
759 t->u.next = from;
761 switch (code)
763 case ck_ptr:
764 case ck_pmem:
765 case ck_base:
766 case ck_std:
767 if (rank < cr_std)
768 rank = cr_std;
769 break;
771 case ck_qual:
772 if (rank < cr_exact)
773 rank = cr_exact;
774 break;
776 default:
777 break;
779 t->rank = rank;
780 t->user_conv_p = (code == ck_user || from->user_conv_p);
781 t->bad_p = from->bad_p;
782 t->base_p = false;
783 return t;
786 /* Represent a conversion from CTOR, a braced-init-list, to TYPE, a
787 specialization of std::initializer_list<T>, if such a conversion is
788 possible. */
790 static conversion *
791 build_list_conv (tree type, tree ctor, int flags, tsubst_flags_t complain)
793 tree elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (type), 0);
794 unsigned len = CONSTRUCTOR_NELTS (ctor);
795 conversion **subconvs = alloc_conversions (len);
796 conversion *t;
797 unsigned i;
798 tree val;
800 /* Within a list-initialization we can have more user-defined
801 conversions. */
802 flags &= ~LOOKUP_NO_CONVERSION;
803 /* But no narrowing conversions. */
804 flags |= LOOKUP_NO_NARROWING;
806 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor), i, val)
808 conversion *sub
809 = implicit_conversion (elttype, TREE_TYPE (val), val,
810 false, flags, complain);
811 if (sub == NULL)
812 return NULL;
814 subconvs[i] = sub;
817 t = alloc_conversion (ck_list);
818 t->type = type;
819 t->u.list = subconvs;
820 t->rank = cr_exact;
822 for (i = 0; i < len; ++i)
824 conversion *sub = subconvs[i];
825 if (sub->rank > t->rank)
826 t->rank = sub->rank;
827 if (sub->user_conv_p)
828 t->user_conv_p = true;
829 if (sub->bad_p)
830 t->bad_p = true;
833 return t;
836 /* Return the next conversion of the conversion chain (if applicable),
837 or NULL otherwise. Please use this function instead of directly
838 accessing fields of struct conversion. */
840 static conversion *
841 next_conversion (conversion *conv)
843 if (conv == NULL
844 || conv->kind == ck_identity
845 || conv->kind == ck_ambig
846 || conv->kind == ck_list)
847 return NULL;
848 return conv->u.next;
851 /* Subroutine of build_aggr_conv: check whether CTOR, a braced-init-list,
852 is a valid aggregate initializer for array type ATYPE. */
854 static bool
855 can_convert_array (tree atype, tree ctor, int flags, tsubst_flags_t complain)
857 unsigned i;
858 tree elttype = TREE_TYPE (atype);
859 for (i = 0; i < CONSTRUCTOR_NELTS (ctor); ++i)
861 tree val = CONSTRUCTOR_ELT (ctor, i)->value;
862 bool ok;
863 if (TREE_CODE (elttype) == ARRAY_TYPE
864 && TREE_CODE (val) == CONSTRUCTOR)
865 ok = can_convert_array (elttype, val, flags, complain);
866 else
867 ok = can_convert_arg (elttype, TREE_TYPE (val), val, flags,
868 complain);
869 if (!ok)
870 return false;
872 return true;
875 /* Represent a conversion from CTOR, a braced-init-list, to TYPE, an
876 aggregate class, if such a conversion is possible. */
878 static conversion *
879 build_aggr_conv (tree type, tree ctor, int flags, tsubst_flags_t complain)
881 unsigned HOST_WIDE_INT i = 0;
882 conversion *c;
883 tree field = next_initializable_field (TYPE_FIELDS (type));
884 tree empty_ctor = NULL_TREE;
886 ctor = reshape_init (type, ctor, tf_none);
887 if (ctor == error_mark_node)
888 return NULL;
890 for (; field; field = next_initializable_field (DECL_CHAIN (field)))
892 tree ftype = TREE_TYPE (field);
893 tree val;
894 bool ok;
896 if (i < CONSTRUCTOR_NELTS (ctor))
897 val = CONSTRUCTOR_ELT (ctor, i)->value;
898 else
900 if (empty_ctor == NULL_TREE)
901 empty_ctor = build_constructor (init_list_type_node, NULL);
902 val = empty_ctor;
904 ++i;
906 if (TREE_CODE (ftype) == ARRAY_TYPE
907 && TREE_CODE (val) == CONSTRUCTOR)
908 ok = can_convert_array (ftype, val, flags, complain);
909 else
910 ok = can_convert_arg (ftype, TREE_TYPE (val), val, flags,
911 complain);
913 if (!ok)
914 return NULL;
916 if (TREE_CODE (type) == UNION_TYPE)
917 break;
920 if (i < CONSTRUCTOR_NELTS (ctor))
921 return NULL;
923 c = alloc_conversion (ck_aggr);
924 c->type = type;
925 c->rank = cr_exact;
926 c->user_conv_p = true;
927 c->u.next = NULL;
928 return c;
931 /* Represent a conversion from CTOR, a braced-init-list, to TYPE, an
932 array type, if such a conversion is possible. */
934 static conversion *
935 build_array_conv (tree type, tree ctor, int flags, tsubst_flags_t complain)
937 conversion *c;
938 unsigned HOST_WIDE_INT len = CONSTRUCTOR_NELTS (ctor);
939 tree elttype = TREE_TYPE (type);
940 unsigned i;
941 tree val;
942 bool bad = false;
943 bool user = false;
944 enum conversion_rank rank = cr_exact;
946 if (TYPE_DOMAIN (type))
948 unsigned HOST_WIDE_INT alen = tree_to_uhwi (array_type_nelts_top (type));
949 if (alen < len)
950 return NULL;
953 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor), i, val)
955 conversion *sub
956 = implicit_conversion (elttype, TREE_TYPE (val), val,
957 false, flags, complain);
958 if (sub == NULL)
959 return NULL;
961 if (sub->rank > rank)
962 rank = sub->rank;
963 if (sub->user_conv_p)
964 user = true;
965 if (sub->bad_p)
966 bad = true;
969 c = alloc_conversion (ck_aggr);
970 c->type = type;
971 c->rank = rank;
972 c->user_conv_p = user;
973 c->bad_p = bad;
974 c->u.next = NULL;
975 return c;
978 /* Represent a conversion from CTOR, a braced-init-list, to TYPE, a
979 complex type, if such a conversion is possible. */
981 static conversion *
982 build_complex_conv (tree type, tree ctor, int flags,
983 tsubst_flags_t complain)
985 conversion *c;
986 unsigned HOST_WIDE_INT len = CONSTRUCTOR_NELTS (ctor);
987 tree elttype = TREE_TYPE (type);
988 unsigned i;
989 tree val;
990 bool bad = false;
991 bool user = false;
992 enum conversion_rank rank = cr_exact;
994 if (len != 2)
995 return NULL;
997 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor), i, val)
999 conversion *sub
1000 = implicit_conversion (elttype, TREE_TYPE (val), val,
1001 false, flags, complain);
1002 if (sub == NULL)
1003 return NULL;
1005 if (sub->rank > rank)
1006 rank = sub->rank;
1007 if (sub->user_conv_p)
1008 user = true;
1009 if (sub->bad_p)
1010 bad = true;
1013 c = alloc_conversion (ck_aggr);
1014 c->type = type;
1015 c->rank = rank;
1016 c->user_conv_p = user;
1017 c->bad_p = bad;
1018 c->u.next = NULL;
1019 return c;
1022 /* Build a representation of the identity conversion from EXPR to
1023 itself. The TYPE should match the type of EXPR, if EXPR is non-NULL. */
1025 static conversion *
1026 build_identity_conv (tree type, tree expr)
1028 conversion *c;
1030 c = alloc_conversion (ck_identity);
1031 c->type = type;
1032 c->u.expr = expr;
1034 return c;
1037 /* Converting from EXPR to TYPE was ambiguous in the sense that there
1038 were multiple user-defined conversions to accomplish the job.
1039 Build a conversion that indicates that ambiguity. */
1041 static conversion *
1042 build_ambiguous_conv (tree type, tree expr)
1044 conversion *c;
1046 c = alloc_conversion (ck_ambig);
1047 c->type = type;
1048 c->u.expr = expr;
1050 return c;
1053 tree
1054 strip_top_quals (tree t)
1056 if (TREE_CODE (t) == ARRAY_TYPE)
1057 return t;
1058 return cp_build_qualified_type (t, 0);
1061 /* Returns the standard conversion path (see [conv]) from type FROM to type
1062 TO, if any. For proper handling of null pointer constants, you must
1063 also pass the expression EXPR to convert from. If C_CAST_P is true,
1064 this conversion is coming from a C-style cast. */
1066 static conversion *
1067 standard_conversion (tree to, tree from, tree expr, bool c_cast_p,
1068 int flags)
1070 enum tree_code fcode, tcode;
1071 conversion *conv;
1072 bool fromref = false;
1073 tree qualified_to;
1075 to = non_reference (to);
1076 if (TREE_CODE (from) == REFERENCE_TYPE)
1078 fromref = true;
1079 from = TREE_TYPE (from);
1081 qualified_to = to;
1082 to = strip_top_quals (to);
1083 from = strip_top_quals (from);
1085 if ((TYPE_PTRFN_P (to) || TYPE_PTRMEMFUNC_P (to))
1086 && expr && type_unknown_p (expr))
1088 tsubst_flags_t tflags = tf_conv;
1089 expr = instantiate_type (to, expr, tflags);
1090 if (expr == error_mark_node)
1091 return NULL;
1092 from = TREE_TYPE (expr);
1095 fcode = TREE_CODE (from);
1096 tcode = TREE_CODE (to);
1098 conv = build_identity_conv (from, expr);
1099 if (fcode == FUNCTION_TYPE || fcode == ARRAY_TYPE)
1101 from = type_decays_to (from);
1102 fcode = TREE_CODE (from);
1103 conv = build_conv (ck_lvalue, from, conv);
1105 else if (fromref || (expr && lvalue_p (expr)))
1107 if (expr)
1109 tree bitfield_type;
1110 bitfield_type = is_bitfield_expr_with_lowered_type (expr);
1111 if (bitfield_type)
1113 from = strip_top_quals (bitfield_type);
1114 fcode = TREE_CODE (from);
1117 conv = build_conv (ck_rvalue, from, conv);
1118 if (flags & LOOKUP_PREFER_RVALUE)
1119 conv->rvaluedness_matches_p = true;
1122 /* Allow conversion between `__complex__' data types. */
1123 if (tcode == COMPLEX_TYPE && fcode == COMPLEX_TYPE)
1125 /* The standard conversion sequence to convert FROM to TO is
1126 the standard conversion sequence to perform componentwise
1127 conversion. */
1128 conversion *part_conv = standard_conversion
1129 (TREE_TYPE (to), TREE_TYPE (from), NULL_TREE, c_cast_p, flags);
1131 if (part_conv)
1133 conv = build_conv (part_conv->kind, to, conv);
1134 conv->rank = part_conv->rank;
1136 else
1137 conv = NULL;
1139 return conv;
1142 if (same_type_p (from, to))
1144 if (CLASS_TYPE_P (to) && conv->kind == ck_rvalue)
1145 conv->type = qualified_to;
1146 return conv;
1149 /* [conv.ptr]
1150 A null pointer constant can be converted to a pointer type; ... A
1151 null pointer constant of integral type can be converted to an
1152 rvalue of type std::nullptr_t. */
1153 if ((tcode == POINTER_TYPE || TYPE_PTRMEM_P (to)
1154 || NULLPTR_TYPE_P (to))
1155 && expr && null_ptr_cst_p (expr))
1156 conv = build_conv (ck_std, to, conv);
1157 else if ((tcode == INTEGER_TYPE && fcode == POINTER_TYPE)
1158 || (tcode == POINTER_TYPE && fcode == INTEGER_TYPE))
1160 /* For backwards brain damage compatibility, allow interconversion of
1161 pointers and integers with a pedwarn. */
1162 conv = build_conv (ck_std, to, conv);
1163 conv->bad_p = true;
1165 else if (UNSCOPED_ENUM_P (to) && fcode == INTEGER_TYPE)
1167 /* For backwards brain damage compatibility, allow interconversion of
1168 enums and integers with a pedwarn. */
1169 conv = build_conv (ck_std, to, conv);
1170 conv->bad_p = true;
1172 else if ((tcode == POINTER_TYPE && fcode == POINTER_TYPE)
1173 || (TYPE_PTRDATAMEM_P (to) && TYPE_PTRDATAMEM_P (from)))
1175 tree to_pointee;
1176 tree from_pointee;
1178 if (tcode == POINTER_TYPE
1179 && same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (from),
1180 TREE_TYPE (to)))
1182 else if (VOID_TYPE_P (TREE_TYPE (to))
1183 && !TYPE_PTRDATAMEM_P (from)
1184 && TREE_CODE (TREE_TYPE (from)) != FUNCTION_TYPE)
1186 tree nfrom = TREE_TYPE (from);
1187 from = build_pointer_type
1188 (cp_build_qualified_type (void_type_node,
1189 cp_type_quals (nfrom)));
1190 conv = build_conv (ck_ptr, from, conv);
1192 else if (TYPE_PTRDATAMEM_P (from))
1194 tree fbase = TYPE_PTRMEM_CLASS_TYPE (from);
1195 tree tbase = TYPE_PTRMEM_CLASS_TYPE (to);
1197 if (DERIVED_FROM_P (fbase, tbase)
1198 && (same_type_ignoring_top_level_qualifiers_p
1199 (TYPE_PTRMEM_POINTED_TO_TYPE (from),
1200 TYPE_PTRMEM_POINTED_TO_TYPE (to))))
1202 from = build_ptrmem_type (tbase,
1203 TYPE_PTRMEM_POINTED_TO_TYPE (from));
1204 conv = build_conv (ck_pmem, from, conv);
1206 else if (!same_type_p (fbase, tbase))
1207 return NULL;
1209 else if (CLASS_TYPE_P (TREE_TYPE (from))
1210 && CLASS_TYPE_P (TREE_TYPE (to))
1211 /* [conv.ptr]
1213 An rvalue of type "pointer to cv D," where D is a
1214 class type, can be converted to an rvalue of type
1215 "pointer to cv B," where B is a base class (clause
1216 _class.derived_) of D. If B is an inaccessible
1217 (clause _class.access_) or ambiguous
1218 (_class.member.lookup_) base class of D, a program
1219 that necessitates this conversion is ill-formed.
1220 Therefore, we use DERIVED_FROM_P, and do not check
1221 access or uniqueness. */
1222 && DERIVED_FROM_P (TREE_TYPE (to), TREE_TYPE (from)))
1224 from =
1225 cp_build_qualified_type (TREE_TYPE (to),
1226 cp_type_quals (TREE_TYPE (from)));
1227 from = build_pointer_type (from);
1228 conv = build_conv (ck_ptr, from, conv);
1229 conv->base_p = true;
1232 if (tcode == POINTER_TYPE)
1234 to_pointee = TREE_TYPE (to);
1235 from_pointee = TREE_TYPE (from);
1237 else
1239 to_pointee = TYPE_PTRMEM_POINTED_TO_TYPE (to);
1240 from_pointee = TYPE_PTRMEM_POINTED_TO_TYPE (from);
1243 if (same_type_p (from, to))
1244 /* OK */;
1245 else if (c_cast_p && comp_ptr_ttypes_const (to, from))
1246 /* In a C-style cast, we ignore CV-qualification because we
1247 are allowed to perform a static_cast followed by a
1248 const_cast. */
1249 conv = build_conv (ck_qual, to, conv);
1250 else if (!c_cast_p && comp_ptr_ttypes (to_pointee, from_pointee))
1251 conv = build_conv (ck_qual, to, conv);
1252 else if (expr && string_conv_p (to, expr, 0))
1253 /* converting from string constant to char *. */
1254 conv = build_conv (ck_qual, to, conv);
1255 /* Allow conversions among compatible ObjC pointer types (base
1256 conversions have been already handled above). */
1257 else if (c_dialect_objc ()
1258 && objc_compare_types (to, from, -4, NULL_TREE))
1259 conv = build_conv (ck_ptr, to, conv);
1260 else if (ptr_reasonably_similar (to_pointee, from_pointee))
1262 conv = build_conv (ck_ptr, to, conv);
1263 conv->bad_p = true;
1265 else
1266 return NULL;
1268 from = to;
1270 else if (TYPE_PTRMEMFUNC_P (to) && TYPE_PTRMEMFUNC_P (from))
1272 tree fromfn = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (from));
1273 tree tofn = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (to));
1274 tree fbase = class_of_this_parm (fromfn);
1275 tree tbase = class_of_this_parm (tofn);
1277 if (!DERIVED_FROM_P (fbase, tbase)
1278 || !same_type_p (static_fn_type (fromfn),
1279 static_fn_type (tofn)))
1280 return NULL;
1282 from = build_memfn_type (fromfn,
1283 tbase,
1284 cp_type_quals (tbase),
1285 type_memfn_rqual (tofn));
1286 from = build_ptrmemfunc_type (build_pointer_type (from));
1287 conv = build_conv (ck_pmem, from, conv);
1288 conv->base_p = true;
1290 else if (tcode == BOOLEAN_TYPE)
1292 /* [conv.bool]
1294 An rvalue of arithmetic, unscoped enumeration, pointer, or
1295 pointer to member type can be converted to an rvalue of type
1296 bool. ... An rvalue of type std::nullptr_t can be converted
1297 to an rvalue of type bool; */
1298 if (ARITHMETIC_TYPE_P (from)
1299 || UNSCOPED_ENUM_P (from)
1300 || fcode == POINTER_TYPE
1301 || TYPE_PTRMEM_P (from)
1302 || NULLPTR_TYPE_P (from))
1304 conv = build_conv (ck_std, to, conv);
1305 if (fcode == POINTER_TYPE
1306 || TYPE_PTRDATAMEM_P (from)
1307 || (TYPE_PTRMEMFUNC_P (from)
1308 && conv->rank < cr_pbool)
1309 || NULLPTR_TYPE_P (from))
1310 conv->rank = cr_pbool;
1311 return conv;
1314 return NULL;
1316 /* We don't check for ENUMERAL_TYPE here because there are no standard
1317 conversions to enum type. */
1318 /* As an extension, allow conversion to complex type. */
1319 else if (ARITHMETIC_TYPE_P (to))
1321 if (! (INTEGRAL_CODE_P (fcode)
1322 || (fcode == REAL_TYPE && !(flags & LOOKUP_NO_NON_INTEGRAL)))
1323 || SCOPED_ENUM_P (from))
1324 return NULL;
1325 conv = build_conv (ck_std, to, conv);
1327 /* Give this a better rank if it's a promotion. */
1328 if (same_type_p (to, type_promotes_to (from))
1329 && next_conversion (conv)->rank <= cr_promotion)
1330 conv->rank = cr_promotion;
1332 else if (fcode == VECTOR_TYPE && tcode == VECTOR_TYPE
1333 && vector_types_convertible_p (from, to, false))
1334 return build_conv (ck_std, to, conv);
1335 else if (MAYBE_CLASS_TYPE_P (to) && MAYBE_CLASS_TYPE_P (from)
1336 && is_properly_derived_from (from, to))
1338 if (conv->kind == ck_rvalue)
1339 conv = next_conversion (conv);
1340 conv = build_conv (ck_base, to, conv);
1341 /* The derived-to-base conversion indicates the initialization
1342 of a parameter with base type from an object of a derived
1343 type. A temporary object is created to hold the result of
1344 the conversion unless we're binding directly to a reference. */
1345 conv->need_temporary_p = !(flags & LOOKUP_NO_TEMP_BIND);
1347 else
1348 return NULL;
1350 if (flags & LOOKUP_NO_NARROWING)
1351 conv->check_narrowing = true;
1353 return conv;
1356 /* Returns nonzero if T1 is reference-related to T2. */
1358 bool
1359 reference_related_p (tree t1, tree t2)
1361 if (t1 == error_mark_node || t2 == error_mark_node)
1362 return false;
1364 t1 = TYPE_MAIN_VARIANT (t1);
1365 t2 = TYPE_MAIN_VARIANT (t2);
1367 /* [dcl.init.ref]
1369 Given types "cv1 T1" and "cv2 T2," "cv1 T1" is reference-related
1370 to "cv2 T2" if T1 is the same type as T2, or T1 is a base class
1371 of T2. */
1372 return (same_type_p (t1, t2)
1373 || (CLASS_TYPE_P (t1) && CLASS_TYPE_P (t2)
1374 && DERIVED_FROM_P (t1, t2)));
1377 /* Returns nonzero if T1 is reference-compatible with T2. */
1379 static bool
1380 reference_compatible_p (tree t1, tree t2)
1382 /* [dcl.init.ref]
1384 "cv1 T1" is reference compatible with "cv2 T2" if T1 is
1385 reference-related to T2 and cv1 is the same cv-qualification as,
1386 or greater cv-qualification than, cv2. */
1387 return (reference_related_p (t1, t2)
1388 && at_least_as_qualified_p (t1, t2));
1391 /* A reference of the indicated TYPE is being bound directly to the
1392 expression represented by the implicit conversion sequence CONV.
1393 Return a conversion sequence for this binding. */
1395 static conversion *
1396 direct_reference_binding (tree type, conversion *conv)
1398 tree t;
1400 gcc_assert (TREE_CODE (type) == REFERENCE_TYPE);
1401 gcc_assert (TREE_CODE (conv->type) != REFERENCE_TYPE);
1403 t = TREE_TYPE (type);
1405 /* [over.ics.rank]
1407 When a parameter of reference type binds directly
1408 (_dcl.init.ref_) to an argument expression, the implicit
1409 conversion sequence is the identity conversion, unless the
1410 argument expression has a type that is a derived class of the
1411 parameter type, in which case the implicit conversion sequence is
1412 a derived-to-base Conversion.
1414 If the parameter binds directly to the result of applying a
1415 conversion function to the argument expression, the implicit
1416 conversion sequence is a user-defined conversion sequence
1417 (_over.ics.user_), with the second standard conversion sequence
1418 either an identity conversion or, if the conversion function
1419 returns an entity of a type that is a derived class of the
1420 parameter type, a derived-to-base conversion. */
1421 if (!same_type_ignoring_top_level_qualifiers_p (t, conv->type))
1423 /* Represent the derived-to-base conversion. */
1424 conv = build_conv (ck_base, t, conv);
1425 /* We will actually be binding to the base-class subobject in
1426 the derived class, so we mark this conversion appropriately.
1427 That way, convert_like knows not to generate a temporary. */
1428 conv->need_temporary_p = false;
1430 return build_conv (ck_ref_bind, type, conv);
1433 /* Returns the conversion path from type FROM to reference type TO for
1434 purposes of reference binding. For lvalue binding, either pass a
1435 reference type to FROM or an lvalue expression to EXPR. If the
1436 reference will be bound to a temporary, NEED_TEMPORARY_P is set for
1437 the conversion returned. If C_CAST_P is true, this
1438 conversion is coming from a C-style cast. */
1440 static conversion *
1441 reference_binding (tree rto, tree rfrom, tree expr, bool c_cast_p, int flags,
1442 tsubst_flags_t complain)
1444 conversion *conv = NULL;
1445 tree to = TREE_TYPE (rto);
1446 tree from = rfrom;
1447 tree tfrom;
1448 bool related_p;
1449 bool compatible_p;
1450 cp_lvalue_kind gl_kind;
1451 bool is_lvalue;
1453 if (TREE_CODE (to) == FUNCTION_TYPE && expr && type_unknown_p (expr))
1455 expr = instantiate_type (to, expr, tf_none);
1456 if (expr == error_mark_node)
1457 return NULL;
1458 from = TREE_TYPE (expr);
1461 if (expr && BRACE_ENCLOSED_INITIALIZER_P (expr))
1463 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
1464 conv = implicit_conversion (to, from, expr, c_cast_p,
1465 flags, complain);
1466 if (!CLASS_TYPE_P (to)
1467 && CONSTRUCTOR_NELTS (expr) == 1)
1469 expr = CONSTRUCTOR_ELT (expr, 0)->value;
1470 if (error_operand_p (expr))
1471 return NULL;
1472 from = TREE_TYPE (expr);
1476 if (TREE_CODE (from) == REFERENCE_TYPE)
1478 from = TREE_TYPE (from);
1479 if (!TYPE_REF_IS_RVALUE (rfrom)
1480 || TREE_CODE (from) == FUNCTION_TYPE)
1481 gl_kind = clk_ordinary;
1482 else
1483 gl_kind = clk_rvalueref;
1485 else if (expr)
1487 gl_kind = lvalue_kind (expr);
1488 if (gl_kind & clk_class)
1489 /* A class prvalue is not a glvalue. */
1490 gl_kind = clk_none;
1492 else
1493 gl_kind = clk_none;
1494 is_lvalue = gl_kind && !(gl_kind & clk_rvalueref);
1496 tfrom = from;
1497 if ((gl_kind & clk_bitfield) != 0)
1498 tfrom = unlowered_expr_type (expr);
1500 /* Figure out whether or not the types are reference-related and
1501 reference compatible. We have do do this after stripping
1502 references from FROM. */
1503 related_p = reference_related_p (to, tfrom);
1504 /* If this is a C cast, first convert to an appropriately qualified
1505 type, so that we can later do a const_cast to the desired type. */
1506 if (related_p && c_cast_p
1507 && !at_least_as_qualified_p (to, tfrom))
1508 to = cp_build_qualified_type (to, cp_type_quals (tfrom));
1509 compatible_p = reference_compatible_p (to, tfrom);
1511 /* Directly bind reference when target expression's type is compatible with
1512 the reference and expression is an lvalue. In DR391, the wording in
1513 [8.5.3/5 dcl.init.ref] is changed to also require direct bindings for
1514 const and rvalue references to rvalues of compatible class type.
1515 We should also do direct bindings for non-class xvalues. */
1516 if (compatible_p
1517 && (is_lvalue
1518 || (((CP_TYPE_CONST_NON_VOLATILE_P (to)
1519 && !(flags & LOOKUP_NO_RVAL_BIND))
1520 || TYPE_REF_IS_RVALUE (rto))
1521 && (gl_kind
1522 || (!(flags & LOOKUP_NO_TEMP_BIND)
1523 && (CLASS_TYPE_P (from)
1524 || TREE_CODE (from) == ARRAY_TYPE))))))
1526 /* [dcl.init.ref]
1528 If the initializer expression
1530 -- is an lvalue (but not an lvalue for a bit-field), and "cv1 T1"
1531 is reference-compatible with "cv2 T2,"
1533 the reference is bound directly to the initializer expression
1534 lvalue.
1536 [...]
1537 If the initializer expression is an rvalue, with T2 a class type,
1538 and "cv1 T1" is reference-compatible with "cv2 T2", the reference
1539 is bound to the object represented by the rvalue or to a sub-object
1540 within that object. */
1542 conv = build_identity_conv (tfrom, expr);
1543 conv = direct_reference_binding (rto, conv);
1545 if (flags & LOOKUP_PREFER_RVALUE)
1546 /* The top-level caller requested that we pretend that the lvalue
1547 be treated as an rvalue. */
1548 conv->rvaluedness_matches_p = TYPE_REF_IS_RVALUE (rto);
1549 else if (TREE_CODE (rfrom) == REFERENCE_TYPE)
1550 /* Handle rvalue reference to function properly. */
1551 conv->rvaluedness_matches_p
1552 = (TYPE_REF_IS_RVALUE (rto) == TYPE_REF_IS_RVALUE (rfrom));
1553 else
1554 conv->rvaluedness_matches_p
1555 = (TYPE_REF_IS_RVALUE (rto) == !is_lvalue);
1557 if ((gl_kind & clk_bitfield) != 0
1558 || ((gl_kind & clk_packed) != 0 && !TYPE_PACKED (to)))
1559 /* For the purposes of overload resolution, we ignore the fact
1560 this expression is a bitfield or packed field. (In particular,
1561 [over.ics.ref] says specifically that a function with a
1562 non-const reference parameter is viable even if the
1563 argument is a bitfield.)
1565 However, when we actually call the function we must create
1566 a temporary to which to bind the reference. If the
1567 reference is volatile, or isn't const, then we cannot make
1568 a temporary, so we just issue an error when the conversion
1569 actually occurs. */
1570 conv->need_temporary_p = true;
1572 /* Don't allow binding of lvalues (other than function lvalues) to
1573 rvalue references. */
1574 if (is_lvalue && TYPE_REF_IS_RVALUE (rto)
1575 && TREE_CODE (to) != FUNCTION_TYPE
1576 && !(flags & LOOKUP_PREFER_RVALUE))
1577 conv->bad_p = true;
1579 return conv;
1581 /* [class.conv.fct] A conversion function is never used to convert a
1582 (possibly cv-qualified) object to the (possibly cv-qualified) same
1583 object type (or a reference to it), to a (possibly cv-qualified) base
1584 class of that type (or a reference to it).... */
1585 else if (CLASS_TYPE_P (from) && !related_p
1586 && !(flags & LOOKUP_NO_CONVERSION))
1588 /* [dcl.init.ref]
1590 If the initializer expression
1592 -- has a class type (i.e., T2 is a class type) can be
1593 implicitly converted to an lvalue of type "cv3 T3," where
1594 "cv1 T1" is reference-compatible with "cv3 T3". (this
1595 conversion is selected by enumerating the applicable
1596 conversion functions (_over.match.ref_) and choosing the
1597 best one through overload resolution. (_over.match_).
1599 the reference is bound to the lvalue result of the conversion
1600 in the second case. */
1601 z_candidate *cand = build_user_type_conversion_1 (rto, expr, flags,
1602 complain);
1603 if (cand)
1604 return cand->second_conv;
1607 /* From this point on, we conceptually need temporaries, even if we
1608 elide them. Only the cases above are "direct bindings". */
1609 if (flags & LOOKUP_NO_TEMP_BIND)
1610 return NULL;
1612 /* [over.ics.rank]
1614 When a parameter of reference type is not bound directly to an
1615 argument expression, the conversion sequence is the one required
1616 to convert the argument expression to the underlying type of the
1617 reference according to _over.best.ics_. Conceptually, this
1618 conversion sequence corresponds to copy-initializing a temporary
1619 of the underlying type with the argument expression. Any
1620 difference in top-level cv-qualification is subsumed by the
1621 initialization itself and does not constitute a conversion. */
1623 /* [dcl.init.ref]
1625 Otherwise, the reference shall be to a non-volatile const type.
1627 Under C++0x, [8.5.3/5 dcl.init.ref] it may also be an rvalue reference */
1628 if (!CP_TYPE_CONST_NON_VOLATILE_P (to) && !TYPE_REF_IS_RVALUE (rto))
1629 return NULL;
1631 /* [dcl.init.ref]
1633 Otherwise, a temporary of type "cv1 T1" is created and
1634 initialized from the initializer expression using the rules for a
1635 non-reference copy initialization. If T1 is reference-related to
1636 T2, cv1 must be the same cv-qualification as, or greater
1637 cv-qualification than, cv2; otherwise, the program is ill-formed. */
1638 if (related_p && !at_least_as_qualified_p (to, from))
1639 return NULL;
1641 /* We're generating a temporary now, but don't bind any more in the
1642 conversion (specifically, don't slice the temporary returned by a
1643 conversion operator). */
1644 flags |= LOOKUP_NO_TEMP_BIND;
1646 /* Core issue 899: When [copy-]initializing a temporary to be bound
1647 to the first parameter of a copy constructor (12.8) called with
1648 a single argument in the context of direct-initialization,
1649 explicit conversion functions are also considered.
1651 So don't set LOOKUP_ONLYCONVERTING in that case. */
1652 if (!(flags & LOOKUP_COPY_PARM))
1653 flags |= LOOKUP_ONLYCONVERTING;
1655 if (!conv)
1656 conv = implicit_conversion (to, from, expr, c_cast_p,
1657 flags, complain);
1658 if (!conv)
1659 return NULL;
1661 conv = build_conv (ck_ref_bind, rto, conv);
1662 /* This reference binding, unlike those above, requires the
1663 creation of a temporary. */
1664 conv->need_temporary_p = true;
1665 conv->rvaluedness_matches_p = TYPE_REF_IS_RVALUE (rto);
1667 return conv;
1670 /* Returns the implicit conversion sequence (see [over.ics]) from type
1671 FROM to type TO. The optional expression EXPR may affect the
1672 conversion. FLAGS are the usual overloading flags. If C_CAST_P is
1673 true, this conversion is coming from a C-style cast. */
1675 static conversion *
1676 implicit_conversion (tree to, tree from, tree expr, bool c_cast_p,
1677 int flags, tsubst_flags_t complain)
1679 conversion *conv;
1681 if (from == error_mark_node || to == error_mark_node
1682 || expr == error_mark_node)
1683 return NULL;
1685 /* Other flags only apply to the primary function in overload
1686 resolution, or after we've chosen one. */
1687 flags &= (LOOKUP_ONLYCONVERTING|LOOKUP_NO_CONVERSION|LOOKUP_COPY_PARM
1688 |LOOKUP_NO_TEMP_BIND|LOOKUP_NO_RVAL_BIND|LOOKUP_PREFER_RVALUE
1689 |LOOKUP_NO_NARROWING|LOOKUP_PROTECT|LOOKUP_NO_NON_INTEGRAL);
1691 /* FIXME: actually we don't want warnings either, but we can't just
1692 have 'complain &= ~(tf_warning|tf_error)' because it would cause
1693 the regression of, eg, g++.old-deja/g++.benjamin/16077.C.
1694 We really ought not to issue that warning until we've committed
1695 to that conversion. */
1696 complain &= ~tf_error;
1698 if (TREE_CODE (to) == REFERENCE_TYPE)
1699 conv = reference_binding (to, from, expr, c_cast_p, flags, complain);
1700 else
1701 conv = standard_conversion (to, from, expr, c_cast_p, flags);
1703 if (conv)
1704 return conv;
1706 if (expr && BRACE_ENCLOSED_INITIALIZER_P (expr))
1708 if (is_std_init_list (to))
1709 return build_list_conv (to, expr, flags, complain);
1711 /* As an extension, allow list-initialization of _Complex. */
1712 if (TREE_CODE (to) == COMPLEX_TYPE)
1714 conv = build_complex_conv (to, expr, flags, complain);
1715 if (conv)
1716 return conv;
1719 /* Allow conversion from an initializer-list with one element to a
1720 scalar type. */
1721 if (SCALAR_TYPE_P (to))
1723 int nelts = CONSTRUCTOR_NELTS (expr);
1724 tree elt;
1726 if (nelts == 0)
1727 elt = build_value_init (to, tf_none);
1728 else if (nelts == 1)
1729 elt = CONSTRUCTOR_ELT (expr, 0)->value;
1730 else
1731 elt = error_mark_node;
1733 conv = implicit_conversion (to, TREE_TYPE (elt), elt,
1734 c_cast_p, flags, complain);
1735 if (conv)
1737 conv->check_narrowing = true;
1738 if (BRACE_ENCLOSED_INITIALIZER_P (elt))
1739 /* Too many levels of braces, i.e. '{{1}}'. */
1740 conv->bad_p = true;
1741 return conv;
1744 else if (TREE_CODE (to) == ARRAY_TYPE)
1745 return build_array_conv (to, expr, flags, complain);
1748 if (expr != NULL_TREE
1749 && (MAYBE_CLASS_TYPE_P (from)
1750 || MAYBE_CLASS_TYPE_P (to))
1751 && (flags & LOOKUP_NO_CONVERSION) == 0)
1753 struct z_candidate *cand;
1755 if (CLASS_TYPE_P (to)
1756 && BRACE_ENCLOSED_INITIALIZER_P (expr)
1757 && !CLASSTYPE_NON_AGGREGATE (complete_type (to)))
1758 return build_aggr_conv (to, expr, flags, complain);
1760 cand = build_user_type_conversion_1 (to, expr, flags, complain);
1761 if (cand)
1762 conv = cand->second_conv;
1764 /* We used to try to bind a reference to a temporary here, but that
1765 is now handled after the recursive call to this function at the end
1766 of reference_binding. */
1767 return conv;
1770 return NULL;
1773 /* Add a new entry to the list of candidates. Used by the add_*_candidate
1774 functions. ARGS will not be changed until a single candidate is
1775 selected. */
1777 static struct z_candidate *
1778 add_candidate (struct z_candidate **candidates,
1779 tree fn, tree first_arg, const vec<tree, va_gc> *args,
1780 size_t num_convs, conversion **convs,
1781 tree access_path, tree conversion_path,
1782 int viable, struct rejection_reason *reason)
1784 struct z_candidate *cand = (struct z_candidate *)
1785 conversion_obstack_alloc (sizeof (struct z_candidate));
1787 cand->fn = fn;
1788 cand->first_arg = first_arg;
1789 cand->args = args;
1790 cand->convs = convs;
1791 cand->num_convs = num_convs;
1792 cand->access_path = access_path;
1793 cand->conversion_path = conversion_path;
1794 cand->viable = viable;
1795 cand->reason = reason;
1796 cand->next = *candidates;
1797 *candidates = cand;
1799 return cand;
1802 /* Return the number of remaining arguments in the parameter list
1803 beginning with ARG. */
1805 static int
1806 remaining_arguments (tree arg)
1808 int n;
1810 for (n = 0; arg != NULL_TREE && arg != void_list_node;
1811 arg = TREE_CHAIN (arg))
1812 n++;
1814 return n;
1817 /* Create an overload candidate for the function or method FN called
1818 with the argument list FIRST_ARG/ARGS and add it to CANDIDATES.
1819 FLAGS is passed on to implicit_conversion.
1821 This does not change ARGS.
1823 CTYPE, if non-NULL, is the type we want to pretend this function
1824 comes from for purposes of overload resolution. */
1826 static struct z_candidate *
1827 add_function_candidate (struct z_candidate **candidates,
1828 tree fn, tree ctype, tree first_arg,
1829 const vec<tree, va_gc> *args, tree access_path,
1830 tree conversion_path, int flags,
1831 tsubst_flags_t complain)
1833 tree parmlist = TYPE_ARG_TYPES (TREE_TYPE (fn));
1834 int i, len;
1835 conversion **convs;
1836 tree parmnode;
1837 tree orig_first_arg = first_arg;
1838 int skip;
1839 int viable = 1;
1840 struct rejection_reason *reason = NULL;
1842 /* At this point we should not see any functions which haven't been
1843 explicitly declared, except for friend functions which will have
1844 been found using argument dependent lookup. */
1845 gcc_assert (!DECL_ANTICIPATED (fn) || DECL_HIDDEN_FRIEND_P (fn));
1847 /* The `this', `in_chrg' and VTT arguments to constructors are not
1848 considered in overload resolution. */
1849 if (DECL_CONSTRUCTOR_P (fn))
1851 parmlist = skip_artificial_parms_for (fn, parmlist);
1852 skip = num_artificial_parms_for (fn);
1853 if (skip > 0 && first_arg != NULL_TREE)
1855 --skip;
1856 first_arg = NULL_TREE;
1859 else
1860 skip = 0;
1862 len = vec_safe_length (args) - skip + (first_arg != NULL_TREE ? 1 : 0);
1863 convs = alloc_conversions (len);
1865 /* 13.3.2 - Viable functions [over.match.viable]
1866 First, to be a viable function, a candidate function shall have enough
1867 parameters to agree in number with the arguments in the list.
1869 We need to check this first; otherwise, checking the ICSes might cause
1870 us to produce an ill-formed template instantiation. */
1872 parmnode = parmlist;
1873 for (i = 0; i < len; ++i)
1875 if (parmnode == NULL_TREE || parmnode == void_list_node)
1876 break;
1877 parmnode = TREE_CHAIN (parmnode);
1880 if ((i < len && parmnode)
1881 || !sufficient_parms_p (parmnode))
1883 int remaining = remaining_arguments (parmnode);
1884 viable = 0;
1885 reason = arity_rejection (first_arg, i + remaining, len);
1887 /* When looking for a function from a subobject from an implicit
1888 copy/move constructor/operator=, don't consider anything that takes (a
1889 reference to) an unrelated type. See c++/44909 and core 1092. */
1890 else if (parmlist && (flags & LOOKUP_DEFAULTED))
1892 if (DECL_CONSTRUCTOR_P (fn))
1893 i = 1;
1894 else if (DECL_ASSIGNMENT_OPERATOR_P (fn)
1895 && DECL_OVERLOADED_OPERATOR_P (fn) == NOP_EXPR)
1896 i = 2;
1897 else
1898 i = 0;
1899 if (i && len == i)
1901 parmnode = chain_index (i-1, parmlist);
1902 if (!reference_related_p (non_reference (TREE_VALUE (parmnode)),
1903 ctype))
1904 viable = 0;
1907 /* This only applies at the top level. */
1908 flags &= ~LOOKUP_DEFAULTED;
1911 if (! viable)
1912 goto out;
1914 /* Second, for F to be a viable function, there shall exist for each
1915 argument an implicit conversion sequence that converts that argument
1916 to the corresponding parameter of F. */
1918 parmnode = parmlist;
1920 for (i = 0; i < len; ++i)
1922 tree argtype, to_type;
1923 tree arg;
1924 conversion *t;
1925 int is_this;
1927 if (parmnode == void_list_node)
1928 break;
1930 if (i == 0 && first_arg != NULL_TREE)
1931 arg = first_arg;
1932 else
1933 arg = CONST_CAST_TREE (
1934 (*args)[i + skip - (first_arg != NULL_TREE ? 1 : 0)]);
1935 argtype = lvalue_type (arg);
1937 is_this = (i == 0 && DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
1938 && ! DECL_CONSTRUCTOR_P (fn));
1940 if (parmnode)
1942 tree parmtype = TREE_VALUE (parmnode);
1943 int lflags = flags;
1945 parmnode = TREE_CHAIN (parmnode);
1947 /* The type of the implicit object parameter ('this') for
1948 overload resolution is not always the same as for the
1949 function itself; conversion functions are considered to
1950 be members of the class being converted, and functions
1951 introduced by a using-declaration are considered to be
1952 members of the class that uses them.
1954 Since build_over_call ignores the ICS for the `this'
1955 parameter, we can just change the parm type. */
1956 if (ctype && is_this)
1958 parmtype = cp_build_qualified_type
1959 (ctype, cp_type_quals (TREE_TYPE (parmtype)));
1960 if (FUNCTION_REF_QUALIFIED (TREE_TYPE (fn)))
1962 /* If the function has a ref-qualifier, the implicit
1963 object parameter has reference type. */
1964 bool rv = FUNCTION_RVALUE_QUALIFIED (TREE_TYPE (fn));
1965 parmtype = cp_build_reference_type (parmtype, rv);
1967 else
1969 parmtype = build_pointer_type (parmtype);
1970 arg = build_this (arg);
1971 argtype = lvalue_type (arg);
1975 /* Core issue 899: When [copy-]initializing a temporary to be bound
1976 to the first parameter of a copy constructor (12.8) called with
1977 a single argument in the context of direct-initialization,
1978 explicit conversion functions are also considered.
1980 So set LOOKUP_COPY_PARM to let reference_binding know that
1981 it's being called in that context. We generalize the above
1982 to handle move constructors and template constructors as well;
1983 the standardese should soon be updated similarly. */
1984 if (ctype && i == 0 && (len-skip == 1)
1985 && DECL_CONSTRUCTOR_P (fn)
1986 && parmtype != error_mark_node
1987 && (same_type_ignoring_top_level_qualifiers_p
1988 (non_reference (parmtype), ctype)))
1990 if (!(flags & LOOKUP_ONLYCONVERTING))
1991 lflags |= LOOKUP_COPY_PARM;
1992 /* We allow user-defined conversions within init-lists, but
1993 don't list-initialize the copy parm, as that would mean
1994 using two levels of braces for the same type. */
1995 if ((flags & LOOKUP_LIST_INIT_CTOR)
1996 && BRACE_ENCLOSED_INITIALIZER_P (arg))
1997 lflags |= LOOKUP_NO_CONVERSION;
1999 else
2000 lflags |= LOOKUP_ONLYCONVERTING;
2002 t = implicit_conversion (parmtype, argtype, arg,
2003 /*c_cast_p=*/false, lflags, complain);
2004 to_type = parmtype;
2006 else
2008 t = build_identity_conv (argtype, arg);
2009 t->ellipsis_p = true;
2010 to_type = argtype;
2013 if (t && is_this)
2014 t->this_p = true;
2016 convs[i] = t;
2017 if (! t)
2019 viable = 0;
2020 reason = arg_conversion_rejection (first_arg, i, argtype, to_type);
2021 break;
2024 if (t->bad_p)
2026 viable = -1;
2027 reason = bad_arg_conversion_rejection (first_arg, i, argtype, to_type);
2031 out:
2032 return add_candidate (candidates, fn, orig_first_arg, args, len, convs,
2033 access_path, conversion_path, viable, reason);
2036 /* Create an overload candidate for the conversion function FN which will
2037 be invoked for expression OBJ, producing a pointer-to-function which
2038 will in turn be called with the argument list FIRST_ARG/ARGLIST,
2039 and add it to CANDIDATES. This does not change ARGLIST. FLAGS is
2040 passed on to implicit_conversion.
2042 Actually, we don't really care about FN; we care about the type it
2043 converts to. There may be multiple conversion functions that will
2044 convert to that type, and we rely on build_user_type_conversion_1 to
2045 choose the best one; so when we create our candidate, we record the type
2046 instead of the function. */
2048 static struct z_candidate *
2049 add_conv_candidate (struct z_candidate **candidates, tree fn, tree obj,
2050 tree first_arg, const vec<tree, va_gc> *arglist,
2051 tree access_path, tree conversion_path,
2052 tsubst_flags_t complain)
2054 tree totype = TREE_TYPE (TREE_TYPE (fn));
2055 int i, len, viable, flags;
2056 tree parmlist, parmnode;
2057 conversion **convs;
2058 struct rejection_reason *reason;
2060 for (parmlist = totype; TREE_CODE (parmlist) != FUNCTION_TYPE; )
2061 parmlist = TREE_TYPE (parmlist);
2062 parmlist = TYPE_ARG_TYPES (parmlist);
2064 len = vec_safe_length (arglist) + (first_arg != NULL_TREE ? 1 : 0) + 1;
2065 convs = alloc_conversions (len);
2066 parmnode = parmlist;
2067 viable = 1;
2068 flags = LOOKUP_IMPLICIT;
2069 reason = NULL;
2071 /* Don't bother looking up the same type twice. */
2072 if (*candidates && (*candidates)->fn == totype)
2073 return NULL;
2075 for (i = 0; i < len; ++i)
2077 tree arg, argtype, convert_type = NULL_TREE;
2078 conversion *t;
2080 if (i == 0)
2081 arg = obj;
2082 else if (i == 1 && first_arg != NULL_TREE)
2083 arg = first_arg;
2084 else
2085 arg = (*arglist)[i - (first_arg != NULL_TREE ? 1 : 0) - 1];
2086 argtype = lvalue_type (arg);
2088 if (i == 0)
2090 t = implicit_conversion (totype, argtype, arg, /*c_cast_p=*/false,
2091 flags, complain);
2092 convert_type = totype;
2094 else if (parmnode == void_list_node)
2095 break;
2096 else if (parmnode)
2098 t = implicit_conversion (TREE_VALUE (parmnode), argtype, arg,
2099 /*c_cast_p=*/false, flags, complain);
2100 convert_type = TREE_VALUE (parmnode);
2102 else
2104 t = build_identity_conv (argtype, arg);
2105 t->ellipsis_p = true;
2106 convert_type = argtype;
2109 convs[i] = t;
2110 if (! t)
2111 break;
2113 if (t->bad_p)
2115 viable = -1;
2116 reason = bad_arg_conversion_rejection (NULL_TREE, i, argtype, convert_type);
2119 if (i == 0)
2120 continue;
2122 if (parmnode)
2123 parmnode = TREE_CHAIN (parmnode);
2126 if (i < len
2127 || ! sufficient_parms_p (parmnode))
2129 int remaining = remaining_arguments (parmnode);
2130 viable = 0;
2131 reason = arity_rejection (NULL_TREE, i + remaining, len);
2134 return add_candidate (candidates, totype, first_arg, arglist, len, convs,
2135 access_path, conversion_path, viable, reason);
2138 static void
2139 build_builtin_candidate (struct z_candidate **candidates, tree fnname,
2140 tree type1, tree type2, tree *args, tree *argtypes,
2141 int flags, tsubst_flags_t complain)
2143 conversion *t;
2144 conversion **convs;
2145 size_t num_convs;
2146 int viable = 1, i;
2147 tree types[2];
2148 struct rejection_reason *reason = NULL;
2150 types[0] = type1;
2151 types[1] = type2;
2153 num_convs = args[2] ? 3 : (args[1] ? 2 : 1);
2154 convs = alloc_conversions (num_convs);
2156 /* TRUTH_*_EXPR do "contextual conversion to bool", which means explicit
2157 conversion ops are allowed. We handle that here by just checking for
2158 boolean_type_node because other operators don't ask for it. COND_EXPR
2159 also does contextual conversion to bool for the first operand, but we
2160 handle that in build_conditional_expr, and type1 here is operand 2. */
2161 if (type1 != boolean_type_node)
2162 flags |= LOOKUP_ONLYCONVERTING;
2164 for (i = 0; i < 2; ++i)
2166 if (! args[i])
2167 break;
2169 t = implicit_conversion (types[i], argtypes[i], args[i],
2170 /*c_cast_p=*/false, flags, complain);
2171 if (! t)
2173 viable = 0;
2174 /* We need something for printing the candidate. */
2175 t = build_identity_conv (types[i], NULL_TREE);
2176 reason = arg_conversion_rejection (NULL_TREE, i, argtypes[i],
2177 types[i]);
2179 else if (t->bad_p)
2181 viable = 0;
2182 reason = bad_arg_conversion_rejection (NULL_TREE, i, argtypes[i],
2183 types[i]);
2185 convs[i] = t;
2188 /* For COND_EXPR we rearranged the arguments; undo that now. */
2189 if (args[2])
2191 convs[2] = convs[1];
2192 convs[1] = convs[0];
2193 t = implicit_conversion (boolean_type_node, argtypes[2], args[2],
2194 /*c_cast_p=*/false, flags,
2195 complain);
2196 if (t)
2197 convs[0] = t;
2198 else
2200 viable = 0;
2201 reason = arg_conversion_rejection (NULL_TREE, 0, argtypes[2],
2202 boolean_type_node);
2206 add_candidate (candidates, fnname, /*first_arg=*/NULL_TREE, /*args=*/NULL,
2207 num_convs, convs,
2208 /*access_path=*/NULL_TREE,
2209 /*conversion_path=*/NULL_TREE,
2210 viable, reason);
2213 static bool
2214 is_complete (tree t)
2216 return COMPLETE_TYPE_P (complete_type (t));
2219 /* Returns nonzero if TYPE is a promoted arithmetic type. */
2221 static bool
2222 promoted_arithmetic_type_p (tree type)
2224 /* [over.built]
2226 In this section, the term promoted integral type is used to refer
2227 to those integral types which are preserved by integral promotion
2228 (including e.g. int and long but excluding e.g. char).
2229 Similarly, the term promoted arithmetic type refers to promoted
2230 integral types plus floating types. */
2231 return ((CP_INTEGRAL_TYPE_P (type)
2232 && same_type_p (type_promotes_to (type), type))
2233 || TREE_CODE (type) == REAL_TYPE);
2236 /* Create any builtin operator overload candidates for the operator in
2237 question given the converted operand types TYPE1 and TYPE2. The other
2238 args are passed through from add_builtin_candidates to
2239 build_builtin_candidate.
2241 TYPE1 and TYPE2 may not be permissible, and we must filter them.
2242 If CODE is requires candidates operands of the same type of the kind
2243 of which TYPE1 and TYPE2 are, we add both candidates
2244 CODE (TYPE1, TYPE1) and CODE (TYPE2, TYPE2). */
2246 static void
2247 add_builtin_candidate (struct z_candidate **candidates, enum tree_code code,
2248 enum tree_code code2, tree fnname, tree type1,
2249 tree type2, tree *args, tree *argtypes, int flags,
2250 tsubst_flags_t complain)
2252 switch (code)
2254 case POSTINCREMENT_EXPR:
2255 case POSTDECREMENT_EXPR:
2256 args[1] = integer_zero_node;
2257 type2 = integer_type_node;
2258 break;
2259 default:
2260 break;
2263 switch (code)
2266 /* 4 For every pair T, VQ), where T is an arithmetic or enumeration type,
2267 and VQ is either volatile or empty, there exist candidate operator
2268 functions of the form
2269 VQ T& operator++(VQ T&);
2270 T operator++(VQ T&, int);
2271 5 For every pair T, VQ), where T is an enumeration type or an arithmetic
2272 type other than bool, and VQ is either volatile or empty, there exist
2273 candidate operator functions of the form
2274 VQ T& operator--(VQ T&);
2275 T operator--(VQ T&, int);
2276 6 For every pair T, VQ), where T is a cv-qualified or cv-unqualified
2277 complete object type, and VQ is either volatile or empty, there exist
2278 candidate operator functions of the form
2279 T*VQ& operator++(T*VQ&);
2280 T*VQ& operator--(T*VQ&);
2281 T* operator++(T*VQ&, int);
2282 T* operator--(T*VQ&, int); */
2284 case POSTDECREMENT_EXPR:
2285 case PREDECREMENT_EXPR:
2286 if (TREE_CODE (type1) == BOOLEAN_TYPE)
2287 return;
2288 case POSTINCREMENT_EXPR:
2289 case PREINCREMENT_EXPR:
2290 if (ARITHMETIC_TYPE_P (type1) || TYPE_PTROB_P (type1))
2292 type1 = build_reference_type (type1);
2293 break;
2295 return;
2297 /* 7 For every cv-qualified or cv-unqualified object type T, there
2298 exist candidate operator functions of the form
2300 T& operator*(T*);
2302 8 For every function type T, there exist candidate operator functions of
2303 the form
2304 T& operator*(T*); */
2306 case INDIRECT_REF:
2307 if (TYPE_PTR_P (type1)
2308 && !uses_template_parms (TREE_TYPE (type1))
2309 && (TYPE_PTROB_P (type1)
2310 || TREE_CODE (TREE_TYPE (type1)) == FUNCTION_TYPE))
2311 break;
2312 return;
2314 /* 9 For every type T, there exist candidate operator functions of the form
2315 T* operator+(T*);
2317 10For every promoted arithmetic type T, there exist candidate operator
2318 functions of the form
2319 T operator+(T);
2320 T operator-(T); */
2322 case UNARY_PLUS_EXPR: /* unary + */
2323 if (TYPE_PTR_P (type1))
2324 break;
2325 case NEGATE_EXPR:
2326 if (ARITHMETIC_TYPE_P (type1))
2327 break;
2328 return;
2330 /* 11For every promoted integral type T, there exist candidate operator
2331 functions of the form
2332 T operator~(T); */
2334 case BIT_NOT_EXPR:
2335 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1))
2336 break;
2337 return;
2339 /* 12For every quintuple C1, C2, T, CV1, CV2), where C2 is a class type, C1
2340 is the same type as C2 or is a derived class of C2, T is a complete
2341 object type or a function type, and CV1 and CV2 are cv-qualifier-seqs,
2342 there exist candidate operator functions of the form
2343 CV12 T& operator->*(CV1 C1*, CV2 T C2::*);
2344 where CV12 is the union of CV1 and CV2. */
2346 case MEMBER_REF:
2347 if (TYPE_PTR_P (type1) && TYPE_PTRMEM_P (type2))
2349 tree c1 = TREE_TYPE (type1);
2350 tree c2 = TYPE_PTRMEM_CLASS_TYPE (type2);
2352 if (MAYBE_CLASS_TYPE_P (c1) && DERIVED_FROM_P (c2, c1)
2353 && (TYPE_PTRMEMFUNC_P (type2)
2354 || is_complete (TYPE_PTRMEM_POINTED_TO_TYPE (type2))))
2355 break;
2357 return;
2359 /* 13For every pair of promoted arithmetic types L and R, there exist can-
2360 didate operator functions of the form
2361 LR operator*(L, R);
2362 LR operator/(L, R);
2363 LR operator+(L, R);
2364 LR operator-(L, R);
2365 bool operator<(L, R);
2366 bool operator>(L, R);
2367 bool operator<=(L, R);
2368 bool operator>=(L, R);
2369 bool operator==(L, R);
2370 bool operator!=(L, R);
2371 where LR is the result of the usual arithmetic conversions between
2372 types L and R.
2374 14For every pair of types T and I, where T is a cv-qualified or cv-
2375 unqualified complete object type and I is a promoted integral type,
2376 there exist candidate operator functions of the form
2377 T* operator+(T*, I);
2378 T& operator[](T*, I);
2379 T* operator-(T*, I);
2380 T* operator+(I, T*);
2381 T& operator[](I, T*);
2383 15For every T, where T is a pointer to complete object type, there exist
2384 candidate operator functions of the form112)
2385 ptrdiff_t operator-(T, T);
2387 16For every pointer or enumeration type T, there exist candidate operator
2388 functions of the form
2389 bool operator<(T, T);
2390 bool operator>(T, T);
2391 bool operator<=(T, T);
2392 bool operator>=(T, T);
2393 bool operator==(T, T);
2394 bool operator!=(T, T);
2396 17For every pointer to member type T, there exist candidate operator
2397 functions of the form
2398 bool operator==(T, T);
2399 bool operator!=(T, T); */
2401 case MINUS_EXPR:
2402 if (TYPE_PTROB_P (type1) && TYPE_PTROB_P (type2))
2403 break;
2404 if (TYPE_PTROB_P (type1)
2405 && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2407 type2 = ptrdiff_type_node;
2408 break;
2410 case MULT_EXPR:
2411 case TRUNC_DIV_EXPR:
2412 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2413 break;
2414 return;
2416 case EQ_EXPR:
2417 case NE_EXPR:
2418 if ((TYPE_PTRMEMFUNC_P (type1) && TYPE_PTRMEMFUNC_P (type2))
2419 || (TYPE_PTRDATAMEM_P (type1) && TYPE_PTRDATAMEM_P (type2)))
2420 break;
2421 if (TYPE_PTRMEM_P (type1) && null_ptr_cst_p (args[1]))
2423 type2 = type1;
2424 break;
2426 if (TYPE_PTRMEM_P (type2) && null_ptr_cst_p (args[0]))
2428 type1 = type2;
2429 break;
2431 /* Fall through. */
2432 case LT_EXPR:
2433 case GT_EXPR:
2434 case LE_EXPR:
2435 case GE_EXPR:
2436 case MAX_EXPR:
2437 case MIN_EXPR:
2438 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2439 break;
2440 if (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
2441 break;
2442 if (TREE_CODE (type1) == ENUMERAL_TYPE
2443 && TREE_CODE (type2) == ENUMERAL_TYPE)
2444 break;
2445 if (TYPE_PTR_P (type1)
2446 && null_ptr_cst_p (args[1])
2447 && !uses_template_parms (type1))
2449 type2 = type1;
2450 break;
2452 if (null_ptr_cst_p (args[0])
2453 && TYPE_PTR_P (type2)
2454 && !uses_template_parms (type2))
2456 type1 = type2;
2457 break;
2459 return;
2461 case PLUS_EXPR:
2462 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2463 break;
2464 case ARRAY_REF:
2465 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1) && TYPE_PTROB_P (type2))
2467 type1 = ptrdiff_type_node;
2468 break;
2470 if (TYPE_PTROB_P (type1) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2472 type2 = ptrdiff_type_node;
2473 break;
2475 return;
2477 /* 18For every pair of promoted integral types L and R, there exist candi-
2478 date operator functions of the form
2479 LR operator%(L, R);
2480 LR operator&(L, R);
2481 LR operator^(L, R);
2482 LR operator|(L, R);
2483 L operator<<(L, R);
2484 L operator>>(L, R);
2485 where LR is the result of the usual arithmetic conversions between
2486 types L and R. */
2488 case TRUNC_MOD_EXPR:
2489 case BIT_AND_EXPR:
2490 case BIT_IOR_EXPR:
2491 case BIT_XOR_EXPR:
2492 case LSHIFT_EXPR:
2493 case RSHIFT_EXPR:
2494 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2495 break;
2496 return;
2498 /* 19For every triple L, VQ, R), where L is an arithmetic or enumeration
2499 type, VQ is either volatile or empty, and R is a promoted arithmetic
2500 type, there exist candidate operator functions of the form
2501 VQ L& operator=(VQ L&, R);
2502 VQ L& operator*=(VQ L&, R);
2503 VQ L& operator/=(VQ L&, R);
2504 VQ L& operator+=(VQ L&, R);
2505 VQ L& operator-=(VQ L&, R);
2507 20For every pair T, VQ), where T is any type and VQ is either volatile
2508 or empty, there exist candidate operator functions of the form
2509 T*VQ& operator=(T*VQ&, T*);
2511 21For every pair T, VQ), where T is a pointer to member type and VQ is
2512 either volatile or empty, there exist candidate operator functions of
2513 the form
2514 VQ T& operator=(VQ T&, T);
2516 22For every triple T, VQ, I), where T is a cv-qualified or cv-
2517 unqualified complete object type, VQ is either volatile or empty, and
2518 I is a promoted integral type, there exist candidate operator func-
2519 tions of the form
2520 T*VQ& operator+=(T*VQ&, I);
2521 T*VQ& operator-=(T*VQ&, I);
2523 23For every triple L, VQ, R), where L is an integral or enumeration
2524 type, VQ is either volatile or empty, and R is a promoted integral
2525 type, there exist candidate operator functions of the form
2527 VQ L& operator%=(VQ L&, R);
2528 VQ L& operator<<=(VQ L&, R);
2529 VQ L& operator>>=(VQ L&, R);
2530 VQ L& operator&=(VQ L&, R);
2531 VQ L& operator^=(VQ L&, R);
2532 VQ L& operator|=(VQ L&, R); */
2534 case MODIFY_EXPR:
2535 switch (code2)
2537 case PLUS_EXPR:
2538 case MINUS_EXPR:
2539 if (TYPE_PTROB_P (type1) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2541 type2 = ptrdiff_type_node;
2542 break;
2544 case MULT_EXPR:
2545 case TRUNC_DIV_EXPR:
2546 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2547 break;
2548 return;
2550 case TRUNC_MOD_EXPR:
2551 case BIT_AND_EXPR:
2552 case BIT_IOR_EXPR:
2553 case BIT_XOR_EXPR:
2554 case LSHIFT_EXPR:
2555 case RSHIFT_EXPR:
2556 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2557 break;
2558 return;
2560 case NOP_EXPR:
2561 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2562 break;
2563 if ((TYPE_PTRMEMFUNC_P (type1) && TYPE_PTRMEMFUNC_P (type2))
2564 || (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
2565 || (TYPE_PTRDATAMEM_P (type1) && TYPE_PTRDATAMEM_P (type2))
2566 || ((TYPE_PTRMEMFUNC_P (type1)
2567 || TYPE_PTR_P (type1))
2568 && null_ptr_cst_p (args[1])))
2570 type2 = type1;
2571 break;
2573 return;
2575 default:
2576 gcc_unreachable ();
2578 type1 = build_reference_type (type1);
2579 break;
2581 case COND_EXPR:
2582 /* [over.built]
2584 For every pair of promoted arithmetic types L and R, there
2585 exist candidate operator functions of the form
2587 LR operator?(bool, L, R);
2589 where LR is the result of the usual arithmetic conversions
2590 between types L and R.
2592 For every type T, where T is a pointer or pointer-to-member
2593 type, there exist candidate operator functions of the form T
2594 operator?(bool, T, T); */
2596 if (promoted_arithmetic_type_p (type1)
2597 && promoted_arithmetic_type_p (type2))
2598 /* That's OK. */
2599 break;
2601 /* Otherwise, the types should be pointers. */
2602 if (!TYPE_PTR_OR_PTRMEM_P (type1) || !TYPE_PTR_OR_PTRMEM_P (type2))
2603 return;
2605 /* We don't check that the two types are the same; the logic
2606 below will actually create two candidates; one in which both
2607 parameter types are TYPE1, and one in which both parameter
2608 types are TYPE2. */
2609 break;
2611 case REALPART_EXPR:
2612 case IMAGPART_EXPR:
2613 if (ARITHMETIC_TYPE_P (type1))
2614 break;
2615 return;
2617 default:
2618 gcc_unreachable ();
2621 /* If we're dealing with two pointer types or two enumeral types,
2622 we need candidates for both of them. */
2623 if (type2 && !same_type_p (type1, type2)
2624 && TREE_CODE (type1) == TREE_CODE (type2)
2625 && (TREE_CODE (type1) == REFERENCE_TYPE
2626 || (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
2627 || (TYPE_PTRDATAMEM_P (type1) && TYPE_PTRDATAMEM_P (type2))
2628 || TYPE_PTRMEMFUNC_P (type1)
2629 || MAYBE_CLASS_TYPE_P (type1)
2630 || TREE_CODE (type1) == ENUMERAL_TYPE))
2632 if (TYPE_PTR_OR_PTRMEM_P (type1))
2634 tree cptype = composite_pointer_type (type1, type2,
2635 error_mark_node,
2636 error_mark_node,
2637 CPO_CONVERSION,
2638 tf_none);
2639 if (cptype != error_mark_node)
2641 build_builtin_candidate
2642 (candidates, fnname, cptype, cptype, args, argtypes,
2643 flags, complain);
2644 return;
2648 build_builtin_candidate
2649 (candidates, fnname, type1, type1, args, argtypes, flags, complain);
2650 build_builtin_candidate
2651 (candidates, fnname, type2, type2, args, argtypes, flags, complain);
2652 return;
2655 build_builtin_candidate
2656 (candidates, fnname, type1, type2, args, argtypes, flags, complain);
2659 tree
2660 type_decays_to (tree type)
2662 if (TREE_CODE (type) == ARRAY_TYPE)
2663 return build_pointer_type (TREE_TYPE (type));
2664 if (TREE_CODE (type) == FUNCTION_TYPE)
2665 return build_pointer_type (type);
2666 return type;
2669 /* There are three conditions of builtin candidates:
2671 1) bool-taking candidates. These are the same regardless of the input.
2672 2) pointer-pair taking candidates. These are generated for each type
2673 one of the input types converts to.
2674 3) arithmetic candidates. According to the standard, we should generate
2675 all of these, but I'm trying not to...
2677 Here we generate a superset of the possible candidates for this particular
2678 case. That is a subset of the full set the standard defines, plus some
2679 other cases which the standard disallows. add_builtin_candidate will
2680 filter out the invalid set. */
2682 static void
2683 add_builtin_candidates (struct z_candidate **candidates, enum tree_code code,
2684 enum tree_code code2, tree fnname, tree *args,
2685 int flags, tsubst_flags_t complain)
2687 int ref1, i;
2688 int enum_p = 0;
2689 tree type, argtypes[3], t;
2690 /* TYPES[i] is the set of possible builtin-operator parameter types
2691 we will consider for the Ith argument. */
2692 vec<tree, va_gc> *types[2];
2693 unsigned ix;
2695 for (i = 0; i < 3; ++i)
2697 if (args[i])
2698 argtypes[i] = unlowered_expr_type (args[i]);
2699 else
2700 argtypes[i] = NULL_TREE;
2703 switch (code)
2705 /* 4 For every pair T, VQ), where T is an arithmetic or enumeration type,
2706 and VQ is either volatile or empty, there exist candidate operator
2707 functions of the form
2708 VQ T& operator++(VQ T&); */
2710 case POSTINCREMENT_EXPR:
2711 case PREINCREMENT_EXPR:
2712 case POSTDECREMENT_EXPR:
2713 case PREDECREMENT_EXPR:
2714 case MODIFY_EXPR:
2715 ref1 = 1;
2716 break;
2718 /* 24There also exist candidate operator functions of the form
2719 bool operator!(bool);
2720 bool operator&&(bool, bool);
2721 bool operator||(bool, bool); */
2723 case TRUTH_NOT_EXPR:
2724 build_builtin_candidate
2725 (candidates, fnname, boolean_type_node,
2726 NULL_TREE, args, argtypes, flags, complain);
2727 return;
2729 case TRUTH_ORIF_EXPR:
2730 case TRUTH_ANDIF_EXPR:
2731 build_builtin_candidate
2732 (candidates, fnname, boolean_type_node,
2733 boolean_type_node, args, argtypes, flags, complain);
2734 return;
2736 case ADDR_EXPR:
2737 case COMPOUND_EXPR:
2738 case COMPONENT_REF:
2739 return;
2741 case COND_EXPR:
2742 case EQ_EXPR:
2743 case NE_EXPR:
2744 case LT_EXPR:
2745 case LE_EXPR:
2746 case GT_EXPR:
2747 case GE_EXPR:
2748 enum_p = 1;
2749 /* Fall through. */
2751 default:
2752 ref1 = 0;
2755 types[0] = make_tree_vector ();
2756 types[1] = make_tree_vector ();
2758 for (i = 0; i < 2; ++i)
2760 if (! args[i])
2762 else if (MAYBE_CLASS_TYPE_P (argtypes[i]))
2764 tree convs;
2766 if (i == 0 && code == MODIFY_EXPR && code2 == NOP_EXPR)
2767 return;
2769 convs = lookup_conversions (argtypes[i]);
2771 if (code == COND_EXPR)
2773 if (real_lvalue_p (args[i]))
2774 vec_safe_push (types[i], build_reference_type (argtypes[i]));
2776 vec_safe_push (types[i], TYPE_MAIN_VARIANT (argtypes[i]));
2779 else if (! convs)
2780 return;
2782 for (; convs; convs = TREE_CHAIN (convs))
2784 type = TREE_TYPE (convs);
2786 if (i == 0 && ref1
2787 && (TREE_CODE (type) != REFERENCE_TYPE
2788 || CP_TYPE_CONST_P (TREE_TYPE (type))))
2789 continue;
2791 if (code == COND_EXPR && TREE_CODE (type) == REFERENCE_TYPE)
2792 vec_safe_push (types[i], type);
2794 type = non_reference (type);
2795 if (i != 0 || ! ref1)
2797 type = cv_unqualified (type_decays_to (type));
2798 if (enum_p && TREE_CODE (type) == ENUMERAL_TYPE)
2799 vec_safe_push (types[i], type);
2800 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
2801 type = type_promotes_to (type);
2804 if (! vec_member (type, types[i]))
2805 vec_safe_push (types[i], type);
2808 else
2810 if (code == COND_EXPR && real_lvalue_p (args[i]))
2811 vec_safe_push (types[i], build_reference_type (argtypes[i]));
2812 type = non_reference (argtypes[i]);
2813 if (i != 0 || ! ref1)
2815 type = cv_unqualified (type_decays_to (type));
2816 if (enum_p && UNSCOPED_ENUM_P (type))
2817 vec_safe_push (types[i], type);
2818 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
2819 type = type_promotes_to (type);
2821 vec_safe_push (types[i], type);
2825 /* Run through the possible parameter types of both arguments,
2826 creating candidates with those parameter types. */
2827 FOR_EACH_VEC_ELT_REVERSE (*(types[0]), ix, t)
2829 unsigned jx;
2830 tree u;
2832 if (!types[1]->is_empty ())
2833 FOR_EACH_VEC_ELT_REVERSE (*(types[1]), jx, u)
2834 add_builtin_candidate
2835 (candidates, code, code2, fnname, t,
2836 u, args, argtypes, flags, complain);
2837 else
2838 add_builtin_candidate
2839 (candidates, code, code2, fnname, t,
2840 NULL_TREE, args, argtypes, flags, complain);
2843 release_tree_vector (types[0]);
2844 release_tree_vector (types[1]);
2848 /* If TMPL can be successfully instantiated as indicated by
2849 EXPLICIT_TARGS and ARGLIST, adds the instantiation to CANDIDATES.
2851 TMPL is the template. EXPLICIT_TARGS are any explicit template
2852 arguments. ARGLIST is the arguments provided at the call-site.
2853 This does not change ARGLIST. The RETURN_TYPE is the desired type
2854 for conversion operators. If OBJ is NULL_TREE, FLAGS and CTYPE are
2855 as for add_function_candidate. If an OBJ is supplied, FLAGS and
2856 CTYPE are ignored, and OBJ is as for add_conv_candidate. */
2858 static struct z_candidate*
2859 add_template_candidate_real (struct z_candidate **candidates, tree tmpl,
2860 tree ctype, tree explicit_targs, tree first_arg,
2861 const vec<tree, va_gc> *arglist, tree return_type,
2862 tree access_path, tree conversion_path,
2863 int flags, tree obj, unification_kind_t strict,
2864 tsubst_flags_t complain)
2866 int ntparms = DECL_NTPARMS (tmpl);
2867 tree targs = make_tree_vec (ntparms);
2868 unsigned int len = vec_safe_length (arglist);
2869 unsigned int nargs = (first_arg == NULL_TREE ? 0 : 1) + len;
2870 unsigned int skip_without_in_chrg = 0;
2871 tree first_arg_without_in_chrg = first_arg;
2872 tree *args_without_in_chrg;
2873 unsigned int nargs_without_in_chrg;
2874 unsigned int ia, ix;
2875 tree arg;
2876 struct z_candidate *cand;
2877 tree fn;
2878 struct rejection_reason *reason = NULL;
2879 int errs;
2881 /* We don't do deduction on the in-charge parameter, the VTT
2882 parameter or 'this'. */
2883 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (tmpl))
2885 if (first_arg_without_in_chrg != NULL_TREE)
2886 first_arg_without_in_chrg = NULL_TREE;
2887 else
2888 ++skip_without_in_chrg;
2891 if ((DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (tmpl)
2892 || DECL_BASE_CONSTRUCTOR_P (tmpl))
2893 && CLASSTYPE_VBASECLASSES (DECL_CONTEXT (tmpl)))
2895 if (first_arg_without_in_chrg != NULL_TREE)
2896 first_arg_without_in_chrg = NULL_TREE;
2897 else
2898 ++skip_without_in_chrg;
2901 if (len < skip_without_in_chrg)
2902 return NULL;
2904 nargs_without_in_chrg = ((first_arg_without_in_chrg != NULL_TREE ? 1 : 0)
2905 + (len - skip_without_in_chrg));
2906 args_without_in_chrg = XALLOCAVEC (tree, nargs_without_in_chrg);
2907 ia = 0;
2908 if (first_arg_without_in_chrg != NULL_TREE)
2910 args_without_in_chrg[ia] = first_arg_without_in_chrg;
2911 ++ia;
2913 for (ix = skip_without_in_chrg;
2914 vec_safe_iterate (arglist, ix, &arg);
2915 ++ix)
2917 args_without_in_chrg[ia] = arg;
2918 ++ia;
2920 gcc_assert (ia == nargs_without_in_chrg);
2922 errs = errorcount+sorrycount;
2923 fn = fn_type_unification (tmpl, explicit_targs, targs,
2924 args_without_in_chrg,
2925 nargs_without_in_chrg,
2926 return_type, strict, flags, false,
2927 complain & tf_decltype);
2929 if (fn == error_mark_node)
2931 /* Don't repeat unification later if it already resulted in errors. */
2932 if (errorcount+sorrycount == errs)
2933 reason = template_unification_rejection (tmpl, explicit_targs,
2934 targs, args_without_in_chrg,
2935 nargs_without_in_chrg,
2936 return_type, strict, flags);
2937 else
2938 reason = template_unification_error_rejection ();
2939 goto fail;
2942 /* In [class.copy]:
2944 A member function template is never instantiated to perform the
2945 copy of a class object to an object of its class type.
2947 It's a little unclear what this means; the standard explicitly
2948 does allow a template to be used to copy a class. For example,
2951 struct A {
2952 A(A&);
2953 template <class T> A(const T&);
2955 const A f ();
2956 void g () { A a (f ()); }
2958 the member template will be used to make the copy. The section
2959 quoted above appears in the paragraph that forbids constructors
2960 whose only parameter is (a possibly cv-qualified variant of) the
2961 class type, and a logical interpretation is that the intent was
2962 to forbid the instantiation of member templates which would then
2963 have that form. */
2964 if (DECL_CONSTRUCTOR_P (fn) && nargs == 2)
2966 tree arg_types = FUNCTION_FIRST_USER_PARMTYPE (fn);
2967 if (arg_types && same_type_p (TYPE_MAIN_VARIANT (TREE_VALUE (arg_types)),
2968 ctype))
2970 reason = invalid_copy_with_fn_template_rejection ();
2971 goto fail;
2975 if (obj != NULL_TREE)
2976 /* Aha, this is a conversion function. */
2977 cand = add_conv_candidate (candidates, fn, obj, first_arg, arglist,
2978 access_path, conversion_path, complain);
2979 else
2980 cand = add_function_candidate (candidates, fn, ctype,
2981 first_arg, arglist, access_path,
2982 conversion_path, flags, complain);
2983 if (DECL_TI_TEMPLATE (fn) != tmpl)
2984 /* This situation can occur if a member template of a template
2985 class is specialized. Then, instantiate_template might return
2986 an instantiation of the specialization, in which case the
2987 DECL_TI_TEMPLATE field will point at the original
2988 specialization. For example:
2990 template <class T> struct S { template <class U> void f(U);
2991 template <> void f(int) {}; };
2992 S<double> sd;
2993 sd.f(3);
2995 Here, TMPL will be template <class U> S<double>::f(U).
2996 And, instantiate template will give us the specialization
2997 template <> S<double>::f(int). But, the DECL_TI_TEMPLATE field
2998 for this will point at template <class T> template <> S<T>::f(int),
2999 so that we can find the definition. For the purposes of
3000 overload resolution, however, we want the original TMPL. */
3001 cand->template_decl = build_template_info (tmpl, targs);
3002 else
3003 cand->template_decl = DECL_TEMPLATE_INFO (fn);
3004 cand->explicit_targs = explicit_targs;
3006 return cand;
3007 fail:
3008 return add_candidate (candidates, tmpl, first_arg, arglist, nargs, NULL,
3009 access_path, conversion_path, 0, reason);
3013 static struct z_candidate *
3014 add_template_candidate (struct z_candidate **candidates, tree tmpl, tree ctype,
3015 tree explicit_targs, tree first_arg,
3016 const vec<tree, va_gc> *arglist, tree return_type,
3017 tree access_path, tree conversion_path, int flags,
3018 unification_kind_t strict, tsubst_flags_t complain)
3020 return
3021 add_template_candidate_real (candidates, tmpl, ctype,
3022 explicit_targs, first_arg, arglist,
3023 return_type, access_path, conversion_path,
3024 flags, NULL_TREE, strict, complain);
3028 static struct z_candidate *
3029 add_template_conv_candidate (struct z_candidate **candidates, tree tmpl,
3030 tree obj, tree first_arg,
3031 const vec<tree, va_gc> *arglist,
3032 tree return_type, tree access_path,
3033 tree conversion_path, tsubst_flags_t complain)
3035 return
3036 add_template_candidate_real (candidates, tmpl, NULL_TREE, NULL_TREE,
3037 first_arg, arglist, return_type, access_path,
3038 conversion_path, 0, obj, DEDUCE_CONV,
3039 complain);
3042 /* The CANDS are the set of candidates that were considered for
3043 overload resolution. Return the set of viable candidates, or CANDS
3044 if none are viable. If any of the candidates were viable, set
3045 *ANY_VIABLE_P to true. STRICT_P is true if a candidate should be
3046 considered viable only if it is strictly viable. */
3048 static struct z_candidate*
3049 splice_viable (struct z_candidate *cands,
3050 bool strict_p,
3051 bool *any_viable_p)
3053 struct z_candidate *viable;
3054 struct z_candidate **last_viable;
3055 struct z_candidate **cand;
3057 /* Be strict inside templates, since build_over_call won't actually
3058 do the conversions to get pedwarns. */
3059 if (processing_template_decl)
3060 strict_p = true;
3062 viable = NULL;
3063 last_viable = &viable;
3064 *any_viable_p = false;
3066 cand = &cands;
3067 while (*cand)
3069 struct z_candidate *c = *cand;
3070 if (strict_p ? c->viable == 1 : c->viable)
3072 *last_viable = c;
3073 *cand = c->next;
3074 c->next = NULL;
3075 last_viable = &c->next;
3076 *any_viable_p = true;
3078 else
3079 cand = &c->next;
3082 return viable ? viable : cands;
3085 static bool
3086 any_strictly_viable (struct z_candidate *cands)
3088 for (; cands; cands = cands->next)
3089 if (cands->viable == 1)
3090 return true;
3091 return false;
3094 /* OBJ is being used in an expression like "OBJ.f (...)". In other
3095 words, it is about to become the "this" pointer for a member
3096 function call. Take the address of the object. */
3098 static tree
3099 build_this (tree obj)
3101 /* In a template, we are only concerned about the type of the
3102 expression, so we can take a shortcut. */
3103 if (processing_template_decl)
3104 return build_address (obj);
3106 return cp_build_addr_expr (obj, tf_warning_or_error);
3109 /* Returns true iff functions are equivalent. Equivalent functions are
3110 not '==' only if one is a function-local extern function or if
3111 both are extern "C". */
3113 static inline int
3114 equal_functions (tree fn1, tree fn2)
3116 if (TREE_CODE (fn1) != TREE_CODE (fn2))
3117 return 0;
3118 if (TREE_CODE (fn1) == TEMPLATE_DECL)
3119 return fn1 == fn2;
3120 if (DECL_LOCAL_FUNCTION_P (fn1) || DECL_LOCAL_FUNCTION_P (fn2)
3121 || DECL_EXTERN_C_FUNCTION_P (fn1))
3122 return decls_match (fn1, fn2);
3123 return fn1 == fn2;
3126 /* Print information about a candidate being rejected due to INFO. */
3128 static void
3129 print_conversion_rejection (location_t loc, struct conversion_info *info)
3131 if (info->n_arg == -1)
3132 /* Conversion of implicit `this' argument failed. */
3133 inform (loc, " no known conversion for implicit "
3134 "%<this%> parameter from %qT to %qT",
3135 info->from_type, info->to_type);
3136 else
3137 inform (loc, " no known conversion for argument %d from %qT to %qT",
3138 info->n_arg+1, info->from_type, info->to_type);
3141 /* Print information about a candidate with WANT parameters and we found
3142 HAVE. */
3144 static void
3145 print_arity_information (location_t loc, unsigned int have, unsigned int want)
3147 inform_n (loc, want,
3148 " candidate expects %d argument, %d provided",
3149 " candidate expects %d arguments, %d provided",
3150 want, have);
3153 /* Print information about one overload candidate CANDIDATE. MSGSTR
3154 is the text to print before the candidate itself.
3156 NOTE: Unlike most diagnostic functions in GCC, MSGSTR is expected
3157 to have been run through gettext by the caller. This wart makes
3158 life simpler in print_z_candidates and for the translators. */
3160 static void
3161 print_z_candidate (location_t loc, const char *msgstr,
3162 struct z_candidate *candidate)
3164 const char *msg = (msgstr == NULL
3165 ? ""
3166 : ACONCAT ((msgstr, " ", NULL)));
3167 location_t cloc = location_of (candidate->fn);
3169 if (identifier_p (candidate->fn))
3171 cloc = loc;
3172 if (candidate->num_convs == 3)
3173 inform (cloc, "%s%D(%T, %T, %T) <built-in>", msg, candidate->fn,
3174 candidate->convs[0]->type,
3175 candidate->convs[1]->type,
3176 candidate->convs[2]->type);
3177 else if (candidate->num_convs == 2)
3178 inform (cloc, "%s%D(%T, %T) <built-in>", msg, candidate->fn,
3179 candidate->convs[0]->type,
3180 candidate->convs[1]->type);
3181 else
3182 inform (cloc, "%s%D(%T) <built-in>", msg, candidate->fn,
3183 candidate->convs[0]->type);
3185 else if (TYPE_P (candidate->fn))
3186 inform (cloc, "%s%T <conversion>", msg, candidate->fn);
3187 else if (candidate->viable == -1)
3188 inform (cloc, "%s%#D <near match>", msg, candidate->fn);
3189 else if (DECL_DELETED_FN (STRIP_TEMPLATE (candidate->fn)))
3190 inform (cloc, "%s%#D <deleted>", msg, candidate->fn);
3191 else
3192 inform (cloc, "%s%#D", msg, candidate->fn);
3193 /* Give the user some information about why this candidate failed. */
3194 if (candidate->reason != NULL)
3196 struct rejection_reason *r = candidate->reason;
3198 switch (r->code)
3200 case rr_arity:
3201 print_arity_information (cloc, r->u.arity.actual,
3202 r->u.arity.expected);
3203 break;
3204 case rr_arg_conversion:
3205 print_conversion_rejection (cloc, &r->u.conversion);
3206 break;
3207 case rr_bad_arg_conversion:
3208 print_conversion_rejection (cloc, &r->u.bad_conversion);
3209 break;
3210 case rr_explicit_conversion:
3211 inform (cloc, " return type %qT of explicit conversion function "
3212 "cannot be converted to %qT with a qualification "
3213 "conversion", r->u.conversion.from_type,
3214 r->u.conversion.to_type);
3215 break;
3216 case rr_template_conversion:
3217 inform (cloc, " conversion from return type %qT of template "
3218 "conversion function specialization to %qT is not an "
3219 "exact match", r->u.conversion.from_type,
3220 r->u.conversion.to_type);
3221 break;
3222 case rr_template_unification:
3223 /* We use template_unification_error_rejection if unification caused
3224 actual non-SFINAE errors, in which case we don't need to repeat
3225 them here. */
3226 if (r->u.template_unification.tmpl == NULL_TREE)
3228 inform (cloc, " substitution of deduced template arguments "
3229 "resulted in errors seen above");
3230 break;
3232 /* Re-run template unification with diagnostics. */
3233 inform (cloc, " template argument deduction/substitution failed:");
3234 fn_type_unification (r->u.template_unification.tmpl,
3235 r->u.template_unification.explicit_targs,
3236 (make_tree_vec
3237 (r->u.template_unification.num_targs)),
3238 r->u.template_unification.args,
3239 r->u.template_unification.nargs,
3240 r->u.template_unification.return_type,
3241 r->u.template_unification.strict,
3242 r->u.template_unification.flags,
3243 true, false);
3244 break;
3245 case rr_invalid_copy:
3246 inform (cloc,
3247 " a constructor taking a single argument of its own "
3248 "class type is invalid");
3249 break;
3250 case rr_none:
3251 default:
3252 /* This candidate didn't have any issues or we failed to
3253 handle a particular code. Either way... */
3254 gcc_unreachable ();
3259 static void
3260 print_z_candidates (location_t loc, struct z_candidate *candidates)
3262 struct z_candidate *cand1;
3263 struct z_candidate **cand2;
3264 int n_candidates;
3266 if (!candidates)
3267 return;
3269 /* Remove non-viable deleted candidates. */
3270 cand1 = candidates;
3271 for (cand2 = &cand1; *cand2; )
3273 if (TREE_CODE ((*cand2)->fn) == FUNCTION_DECL
3274 && !(*cand2)->viable
3275 && DECL_DELETED_FN ((*cand2)->fn))
3276 *cand2 = (*cand2)->next;
3277 else
3278 cand2 = &(*cand2)->next;
3280 /* ...if there are any non-deleted ones. */
3281 if (cand1)
3282 candidates = cand1;
3284 /* There may be duplicates in the set of candidates. We put off
3285 checking this condition as long as possible, since we have no way
3286 to eliminate duplicates from a set of functions in less than n^2
3287 time. Now we are about to emit an error message, so it is more
3288 permissible to go slowly. */
3289 for (cand1 = candidates; cand1; cand1 = cand1->next)
3291 tree fn = cand1->fn;
3292 /* Skip builtin candidates and conversion functions. */
3293 if (!DECL_P (fn))
3294 continue;
3295 cand2 = &cand1->next;
3296 while (*cand2)
3298 if (DECL_P ((*cand2)->fn)
3299 && equal_functions (fn, (*cand2)->fn))
3300 *cand2 = (*cand2)->next;
3301 else
3302 cand2 = &(*cand2)->next;
3306 for (n_candidates = 0, cand1 = candidates; cand1; cand1 = cand1->next)
3307 n_candidates++;
3309 inform_n (loc, n_candidates, "candidate is:", "candidates are:");
3310 for (; candidates; candidates = candidates->next)
3311 print_z_candidate (loc, NULL, candidates);
3314 /* USER_SEQ is a user-defined conversion sequence, beginning with a
3315 USER_CONV. STD_SEQ is the standard conversion sequence applied to
3316 the result of the conversion function to convert it to the final
3317 desired type. Merge the two sequences into a single sequence,
3318 and return the merged sequence. */
3320 static conversion *
3321 merge_conversion_sequences (conversion *user_seq, conversion *std_seq)
3323 conversion **t;
3324 bool bad = user_seq->bad_p;
3326 gcc_assert (user_seq->kind == ck_user);
3328 /* Find the end of the second conversion sequence. */
3329 for (t = &std_seq; (*t)->kind != ck_identity; t = &((*t)->u.next))
3331 /* The entire sequence is a user-conversion sequence. */
3332 (*t)->user_conv_p = true;
3333 if (bad)
3334 (*t)->bad_p = true;
3337 /* Replace the identity conversion with the user conversion
3338 sequence. */
3339 *t = user_seq;
3341 return std_seq;
3344 /* Handle overload resolution for initializing an object of class type from
3345 an initializer list. First we look for a suitable constructor that
3346 takes a std::initializer_list; if we don't find one, we then look for a
3347 non-list constructor.
3349 Parameters are as for add_candidates, except that the arguments are in
3350 the form of a CONSTRUCTOR (the initializer list) rather than a vector, and
3351 the RETURN_TYPE parameter is replaced by TOTYPE, the desired type. */
3353 static void
3354 add_list_candidates (tree fns, tree first_arg,
3355 tree init_list, tree totype,
3356 tree explicit_targs, bool template_only,
3357 tree conversion_path, tree access_path,
3358 int flags,
3359 struct z_candidate **candidates,
3360 tsubst_flags_t complain)
3362 vec<tree, va_gc> *args;
3364 gcc_assert (*candidates == NULL);
3366 /* We're looking for a ctor for list-initialization. */
3367 flags |= LOOKUP_LIST_INIT_CTOR;
3368 /* And we don't allow narrowing conversions. We also use this flag to
3369 avoid the copy constructor call for copy-list-initialization. */
3370 flags |= LOOKUP_NO_NARROWING;
3372 /* Always use the default constructor if the list is empty (DR 990). */
3373 if (CONSTRUCTOR_NELTS (init_list) == 0
3374 && TYPE_HAS_DEFAULT_CONSTRUCTOR (totype))
3376 /* If the class has a list ctor, try passing the list as a single
3377 argument first, but only consider list ctors. */
3378 else if (TYPE_HAS_LIST_CTOR (totype))
3380 flags |= LOOKUP_LIST_ONLY;
3381 args = make_tree_vector_single (init_list);
3382 add_candidates (fns, first_arg, args, NULL_TREE,
3383 explicit_targs, template_only, conversion_path,
3384 access_path, flags, candidates, complain);
3385 if (any_strictly_viable (*candidates))
3386 return;
3389 args = ctor_to_vec (init_list);
3391 /* We aren't looking for list-ctors anymore. */
3392 flags &= ~LOOKUP_LIST_ONLY;
3393 /* We allow more user-defined conversions within an init-list. */
3394 flags &= ~LOOKUP_NO_CONVERSION;
3396 add_candidates (fns, first_arg, args, NULL_TREE,
3397 explicit_targs, template_only, conversion_path,
3398 access_path, flags, candidates, complain);
3401 /* Returns the best overload candidate to perform the requested
3402 conversion. This function is used for three the overloading situations
3403 described in [over.match.copy], [over.match.conv], and [over.match.ref].
3404 If TOTYPE is a REFERENCE_TYPE, we're trying to find a direct binding as
3405 per [dcl.init.ref], so we ignore temporary bindings. */
3407 static struct z_candidate *
3408 build_user_type_conversion_1 (tree totype, tree expr, int flags,
3409 tsubst_flags_t complain)
3411 struct z_candidate *candidates, *cand;
3412 tree fromtype;
3413 tree ctors = NULL_TREE;
3414 tree conv_fns = NULL_TREE;
3415 conversion *conv = NULL;
3416 tree first_arg = NULL_TREE;
3417 vec<tree, va_gc> *args = NULL;
3418 bool any_viable_p;
3419 int convflags;
3421 if (!expr)
3422 return NULL;
3424 fromtype = TREE_TYPE (expr);
3426 /* We represent conversion within a hierarchy using RVALUE_CONV and
3427 BASE_CONV, as specified by [over.best.ics]; these become plain
3428 constructor calls, as specified in [dcl.init]. */
3429 gcc_assert (!MAYBE_CLASS_TYPE_P (fromtype) || !MAYBE_CLASS_TYPE_P (totype)
3430 || !DERIVED_FROM_P (totype, fromtype));
3432 if (MAYBE_CLASS_TYPE_P (totype))
3433 /* Use lookup_fnfields_slot instead of lookup_fnfields to avoid
3434 creating a garbage BASELINK; constructors can't be inherited. */
3435 ctors = lookup_fnfields_slot (totype, complete_ctor_identifier);
3437 if (MAYBE_CLASS_TYPE_P (fromtype))
3439 tree to_nonref = non_reference (totype);
3440 if (same_type_ignoring_top_level_qualifiers_p (to_nonref, fromtype) ||
3441 (CLASS_TYPE_P (to_nonref) && CLASS_TYPE_P (fromtype)
3442 && DERIVED_FROM_P (to_nonref, fromtype)))
3444 /* [class.conv.fct] A conversion function is never used to
3445 convert a (possibly cv-qualified) object to the (possibly
3446 cv-qualified) same object type (or a reference to it), to a
3447 (possibly cv-qualified) base class of that type (or a
3448 reference to it)... */
3450 else
3451 conv_fns = lookup_conversions (fromtype);
3454 candidates = 0;
3455 flags |= LOOKUP_NO_CONVERSION;
3456 if (BRACE_ENCLOSED_INITIALIZER_P (expr))
3457 flags |= LOOKUP_NO_NARROWING;
3459 /* It's OK to bind a temporary for converting constructor arguments, but
3460 not in converting the return value of a conversion operator. */
3461 convflags = ((flags & LOOKUP_NO_TEMP_BIND) | LOOKUP_NO_CONVERSION);
3462 flags &= ~LOOKUP_NO_TEMP_BIND;
3464 if (ctors)
3466 int ctorflags = flags;
3468 first_arg = build_int_cst (build_pointer_type (totype), 0);
3469 first_arg = build_fold_indirect_ref (first_arg);
3471 /* We should never try to call the abstract or base constructor
3472 from here. */
3473 gcc_assert (!DECL_HAS_IN_CHARGE_PARM_P (OVL_CURRENT (ctors))
3474 && !DECL_HAS_VTT_PARM_P (OVL_CURRENT (ctors)));
3476 if (BRACE_ENCLOSED_INITIALIZER_P (expr))
3478 /* List-initialization. */
3479 add_list_candidates (ctors, first_arg, expr, totype, NULL_TREE,
3480 false, TYPE_BINFO (totype), TYPE_BINFO (totype),
3481 ctorflags, &candidates, complain);
3483 else
3485 args = make_tree_vector_single (expr);
3486 add_candidates (ctors, first_arg, args, NULL_TREE, NULL_TREE, false,
3487 TYPE_BINFO (totype), TYPE_BINFO (totype),
3488 ctorflags, &candidates, complain);
3491 for (cand = candidates; cand; cand = cand->next)
3493 cand->second_conv = build_identity_conv (totype, NULL_TREE);
3495 /* If totype isn't a reference, and LOOKUP_NO_TEMP_BIND isn't
3496 set, then this is copy-initialization. In that case, "The
3497 result of the call is then used to direct-initialize the
3498 object that is the destination of the copy-initialization."
3499 [dcl.init]
3501 We represent this in the conversion sequence with an
3502 rvalue conversion, which means a constructor call. */
3503 if (TREE_CODE (totype) != REFERENCE_TYPE
3504 && !(convflags & LOOKUP_NO_TEMP_BIND))
3505 cand->second_conv
3506 = build_conv (ck_rvalue, totype, cand->second_conv);
3510 if (conv_fns)
3511 first_arg = expr;
3513 for (; conv_fns; conv_fns = TREE_CHAIN (conv_fns))
3515 tree conversion_path = TREE_PURPOSE (conv_fns);
3516 struct z_candidate *old_candidates;
3518 /* If we are called to convert to a reference type, we are trying to
3519 find a direct binding, so don't even consider temporaries. If
3520 we don't find a direct binding, the caller will try again to
3521 look for a temporary binding. */
3522 if (TREE_CODE (totype) == REFERENCE_TYPE)
3523 convflags |= LOOKUP_NO_TEMP_BIND;
3525 old_candidates = candidates;
3526 add_candidates (TREE_VALUE (conv_fns), first_arg, NULL, totype,
3527 NULL_TREE, false,
3528 conversion_path, TYPE_BINFO (fromtype),
3529 flags, &candidates, complain);
3531 for (cand = candidates; cand != old_candidates; cand = cand->next)
3533 tree rettype = TREE_TYPE (TREE_TYPE (cand->fn));
3534 conversion *ics
3535 = implicit_conversion (totype,
3536 rettype,
3538 /*c_cast_p=*/false, convflags,
3539 complain);
3541 /* If LOOKUP_NO_TEMP_BIND isn't set, then this is
3542 copy-initialization. In that case, "The result of the
3543 call is then used to direct-initialize the object that is
3544 the destination of the copy-initialization." [dcl.init]
3546 We represent this in the conversion sequence with an
3547 rvalue conversion, which means a constructor call. But
3548 don't add a second rvalue conversion if there's already
3549 one there. Which there really shouldn't be, but it's
3550 harmless since we'd add it here anyway. */
3551 if (ics && MAYBE_CLASS_TYPE_P (totype) && ics->kind != ck_rvalue
3552 && !(convflags & LOOKUP_NO_TEMP_BIND))
3553 ics = build_conv (ck_rvalue, totype, ics);
3555 cand->second_conv = ics;
3557 if (!ics)
3559 cand->viable = 0;
3560 cand->reason = arg_conversion_rejection (NULL_TREE, -1,
3561 rettype, totype);
3563 else if (DECL_NONCONVERTING_P (cand->fn)
3564 && ics->rank > cr_exact)
3566 /* 13.3.1.5: For direct-initialization, those explicit
3567 conversion functions that are not hidden within S and
3568 yield type T or a type that can be converted to type T
3569 with a qualification conversion (4.4) are also candidate
3570 functions. */
3571 /* 13.3.1.6 doesn't have a parallel restriction, but it should;
3572 I've raised this issue with the committee. --jason 9/2011 */
3573 cand->viable = -1;
3574 cand->reason = explicit_conversion_rejection (rettype, totype);
3576 else if (cand->viable == 1 && ics->bad_p)
3578 cand->viable = -1;
3579 cand->reason
3580 = bad_arg_conversion_rejection (NULL_TREE, -1,
3581 rettype, totype);
3583 else if (primary_template_instantiation_p (cand->fn)
3584 && ics->rank > cr_exact)
3586 /* 13.3.3.1.2: If the user-defined conversion is specified by
3587 a specialization of a conversion function template, the
3588 second standard conversion sequence shall have exact match
3589 rank. */
3590 cand->viable = -1;
3591 cand->reason = template_conversion_rejection (rettype, totype);
3596 candidates = splice_viable (candidates, pedantic, &any_viable_p);
3597 if (!any_viable_p)
3599 if (args)
3600 release_tree_vector (args);
3601 return NULL;
3604 cand = tourney (candidates, complain);
3605 if (cand == 0)
3607 if (complain & tf_error)
3609 error ("conversion from %qT to %qT is ambiguous",
3610 fromtype, totype);
3611 print_z_candidates (location_of (expr), candidates);
3614 cand = candidates; /* any one will do */
3615 cand->second_conv = build_ambiguous_conv (totype, expr);
3616 cand->second_conv->user_conv_p = true;
3617 if (!any_strictly_viable (candidates))
3618 cand->second_conv->bad_p = true;
3619 /* If there are viable candidates, don't set ICS_BAD_FLAG; an
3620 ambiguous conversion is no worse than another user-defined
3621 conversion. */
3623 return cand;
3626 /* Build the user conversion sequence. */
3627 conv = build_conv
3628 (ck_user,
3629 (DECL_CONSTRUCTOR_P (cand->fn)
3630 ? totype : non_reference (TREE_TYPE (TREE_TYPE (cand->fn)))),
3631 build_identity_conv (TREE_TYPE (expr), expr));
3632 conv->cand = cand;
3633 if (cand->viable == -1)
3634 conv->bad_p = true;
3636 /* Remember that this was a list-initialization. */
3637 if (flags & LOOKUP_NO_NARROWING)
3638 conv->check_narrowing = true;
3640 /* Combine it with the second conversion sequence. */
3641 cand->second_conv = merge_conversion_sequences (conv,
3642 cand->second_conv);
3644 return cand;
3647 /* Wrapper for above. */
3649 tree
3650 build_user_type_conversion (tree totype, tree expr, int flags,
3651 tsubst_flags_t complain)
3653 struct z_candidate *cand;
3654 tree ret;
3656 bool subtime = timevar_cond_start (TV_OVERLOAD);
3657 cand = build_user_type_conversion_1 (totype, expr, flags, complain);
3659 if (cand)
3661 if (cand->second_conv->kind == ck_ambig)
3662 ret = error_mark_node;
3663 else
3665 expr = convert_like (cand->second_conv, expr, complain);
3666 ret = convert_from_reference (expr);
3669 else
3670 ret = NULL_TREE;
3672 timevar_cond_stop (TV_OVERLOAD, subtime);
3673 return ret;
3676 /* Subroutine of convert_nontype_argument.
3678 EXPR is an argument for a template non-type parameter of integral or
3679 enumeration type. Do any necessary conversions (that are permitted for
3680 non-type arguments) to convert it to the parameter type.
3682 If conversion is successful, returns the converted expression;
3683 otherwise, returns error_mark_node. */
3685 tree
3686 build_integral_nontype_arg_conv (tree type, tree expr, tsubst_flags_t complain)
3688 conversion *conv;
3689 void *p;
3690 tree t;
3691 location_t loc = EXPR_LOC_OR_LOC (expr, input_location);
3693 if (error_operand_p (expr))
3694 return error_mark_node;
3696 gcc_assert (INTEGRAL_OR_ENUMERATION_TYPE_P (type));
3698 /* Get the high-water mark for the CONVERSION_OBSTACK. */
3699 p = conversion_obstack_alloc (0);
3701 conv = implicit_conversion (type, TREE_TYPE (expr), expr,
3702 /*c_cast_p=*/false,
3703 LOOKUP_IMPLICIT, complain);
3705 /* for a non-type template-parameter of integral or
3706 enumeration type, integral promotions (4.5) and integral
3707 conversions (4.7) are applied. */
3708 /* It should be sufficient to check the outermost conversion step, since
3709 there are no qualification conversions to integer type. */
3710 if (conv)
3711 switch (conv->kind)
3713 /* A conversion function is OK. If it isn't constexpr, we'll
3714 complain later that the argument isn't constant. */
3715 case ck_user:
3716 /* The lvalue-to-rvalue conversion is OK. */
3717 case ck_rvalue:
3718 case ck_identity:
3719 break;
3721 case ck_std:
3722 t = next_conversion (conv)->type;
3723 if (INTEGRAL_OR_ENUMERATION_TYPE_P (t))
3724 break;
3726 if (complain & tf_error)
3727 error_at (loc, "conversion from %qT to %qT not considered for "
3728 "non-type template argument", t, type);
3729 /* and fall through. */
3731 default:
3732 conv = NULL;
3733 break;
3736 if (conv)
3737 expr = convert_like (conv, expr, complain);
3738 else
3739 expr = error_mark_node;
3741 /* Free all the conversions we allocated. */
3742 obstack_free (&conversion_obstack, p);
3744 return expr;
3747 /* Do any initial processing on the arguments to a function call. */
3749 static vec<tree, va_gc> *
3750 resolve_args (vec<tree, va_gc> *args, tsubst_flags_t complain)
3752 unsigned int ix;
3753 tree arg;
3755 FOR_EACH_VEC_SAFE_ELT (args, ix, arg)
3757 if (error_operand_p (arg))
3758 return NULL;
3759 else if (VOID_TYPE_P (TREE_TYPE (arg)))
3761 if (complain & tf_error)
3762 error ("invalid use of void expression");
3763 return NULL;
3765 else if (invalid_nonstatic_memfn_p (arg, complain))
3766 return NULL;
3768 return args;
3771 /* Perform overload resolution on FN, which is called with the ARGS.
3773 Return the candidate function selected by overload resolution, or
3774 NULL if the event that overload resolution failed. In the case
3775 that overload resolution fails, *CANDIDATES will be the set of
3776 candidates considered, and ANY_VIABLE_P will be set to true or
3777 false to indicate whether or not any of the candidates were
3778 viable.
3780 The ARGS should already have gone through RESOLVE_ARGS before this
3781 function is called. */
3783 static struct z_candidate *
3784 perform_overload_resolution (tree fn,
3785 const vec<tree, va_gc> *args,
3786 struct z_candidate **candidates,
3787 bool *any_viable_p, tsubst_flags_t complain)
3789 struct z_candidate *cand;
3790 tree explicit_targs;
3791 int template_only;
3793 bool subtime = timevar_cond_start (TV_OVERLOAD);
3795 explicit_targs = NULL_TREE;
3796 template_only = 0;
3798 *candidates = NULL;
3799 *any_viable_p = true;
3801 /* Check FN. */
3802 gcc_assert (TREE_CODE (fn) == FUNCTION_DECL
3803 || TREE_CODE (fn) == TEMPLATE_DECL
3804 || TREE_CODE (fn) == OVERLOAD
3805 || TREE_CODE (fn) == TEMPLATE_ID_EXPR);
3807 if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
3809 explicit_targs = TREE_OPERAND (fn, 1);
3810 fn = TREE_OPERAND (fn, 0);
3811 template_only = 1;
3814 /* Add the various candidate functions. */
3815 add_candidates (fn, NULL_TREE, args, NULL_TREE,
3816 explicit_targs, template_only,
3817 /*conversion_path=*/NULL_TREE,
3818 /*access_path=*/NULL_TREE,
3819 LOOKUP_NORMAL,
3820 candidates, complain);
3822 *candidates = splice_viable (*candidates, pedantic, any_viable_p);
3823 if (*any_viable_p)
3824 cand = tourney (*candidates, complain);
3825 else
3826 cand = NULL;
3828 timevar_cond_stop (TV_OVERLOAD, subtime);
3829 return cand;
3832 /* Print an error message about being unable to build a call to FN with
3833 ARGS. ANY_VIABLE_P indicates whether any candidate functions could
3834 be located; CANDIDATES is a possibly empty list of such
3835 functions. */
3837 static void
3838 print_error_for_call_failure (tree fn, vec<tree, va_gc> *args, bool any_viable_p,
3839 struct z_candidate *candidates)
3841 tree name = DECL_NAME (OVL_CURRENT (fn));
3842 location_t loc = location_of (name);
3844 if (!any_viable_p)
3845 error_at (loc, "no matching function for call to %<%D(%A)%>",
3846 name, build_tree_list_vec (args));
3847 else
3848 error_at (loc, "call of overloaded %<%D(%A)%> is ambiguous",
3849 name, build_tree_list_vec (args));
3850 if (candidates)
3851 print_z_candidates (loc, candidates);
3854 /* Return an expression for a call to FN (a namespace-scope function,
3855 or a static member function) with the ARGS. This may change
3856 ARGS. */
3858 tree
3859 build_new_function_call (tree fn, vec<tree, va_gc> **args, bool koenig_p,
3860 tsubst_flags_t complain)
3862 struct z_candidate *candidates, *cand;
3863 bool any_viable_p;
3864 void *p;
3865 tree result;
3867 if (args != NULL && *args != NULL)
3869 *args = resolve_args (*args, complain);
3870 if (*args == NULL)
3871 return error_mark_node;
3874 if (flag_tm)
3875 tm_malloc_replacement (fn);
3877 /* If this function was found without using argument dependent
3878 lookup, then we want to ignore any undeclared friend
3879 functions. */
3880 if (!koenig_p)
3882 tree orig_fn = fn;
3884 fn = remove_hidden_names (fn);
3885 if (!fn)
3887 if (complain & tf_error)
3888 print_error_for_call_failure (orig_fn, *args, false, NULL);
3889 return error_mark_node;
3893 /* Get the high-water mark for the CONVERSION_OBSTACK. */
3894 p = conversion_obstack_alloc (0);
3896 cand = perform_overload_resolution (fn, *args, &candidates, &any_viable_p,
3897 complain);
3899 if (!cand)
3901 if (complain & tf_error)
3903 if (!any_viable_p && candidates && ! candidates->next
3904 && (TREE_CODE (candidates->fn) == FUNCTION_DECL))
3905 return cp_build_function_call_vec (candidates->fn, args, complain);
3906 if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
3907 fn = TREE_OPERAND (fn, 0);
3908 print_error_for_call_failure (fn, *args, any_viable_p, candidates);
3910 result = error_mark_node;
3912 else
3914 int flags = LOOKUP_NORMAL;
3915 /* If fn is template_id_expr, the call has explicit template arguments
3916 (e.g. func<int>(5)), communicate this info to build_over_call
3917 through flags so that later we can use it to decide whether to warn
3918 about peculiar null pointer conversion. */
3919 if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
3920 flags |= LOOKUP_EXPLICIT_TMPL_ARGS;
3921 result = build_over_call (cand, flags, complain);
3924 /* Free all the conversions we allocated. */
3925 obstack_free (&conversion_obstack, p);
3927 return result;
3930 /* Build a call to a global operator new. FNNAME is the name of the
3931 operator (either "operator new" or "operator new[]") and ARGS are
3932 the arguments provided. This may change ARGS. *SIZE points to the
3933 total number of bytes required by the allocation, and is updated if
3934 that is changed here. *COOKIE_SIZE is non-NULL if a cookie should
3935 be used. If this function determines that no cookie should be
3936 used, after all, *COOKIE_SIZE is set to NULL_TREE. If SIZE_CHECK
3937 is not NULL_TREE, it is evaluated before calculating the final
3938 array size, and if it fails, the array size is replaced with
3939 (size_t)-1 (usually triggering a std::bad_alloc exception). If FN
3940 is non-NULL, it will be set, upon return, to the allocation
3941 function called. */
3943 tree
3944 build_operator_new_call (tree fnname, vec<tree, va_gc> **args,
3945 tree *size, tree *cookie_size, tree size_check,
3946 tree *fn, tsubst_flags_t complain)
3948 tree original_size = *size;
3949 tree fns;
3950 struct z_candidate *candidates;
3951 struct z_candidate *cand;
3952 bool any_viable_p;
3954 if (fn)
3955 *fn = NULL_TREE;
3956 /* Set to (size_t)-1 if the size check fails. */
3957 if (size_check != NULL_TREE)
3959 tree errval = TYPE_MAX_VALUE (sizetype);
3960 if (cxx_dialect >= cxx11 && flag_exceptions)
3961 errval = throw_bad_array_new_length ();
3962 *size = fold_build3 (COND_EXPR, sizetype, size_check,
3963 original_size, errval);
3965 vec_safe_insert (*args, 0, *size);
3966 *args = resolve_args (*args, complain);
3967 if (*args == NULL)
3968 return error_mark_node;
3970 /* Based on:
3972 [expr.new]
3974 If this lookup fails to find the name, or if the allocated type
3975 is not a class type, the allocation function's name is looked
3976 up in the global scope.
3978 we disregard block-scope declarations of "operator new". */
3979 fns = lookup_function_nonclass (fnname, *args, /*block_p=*/false);
3981 /* Figure out what function is being called. */
3982 cand = perform_overload_resolution (fns, *args, &candidates, &any_viable_p,
3983 complain);
3985 /* If no suitable function could be found, issue an error message
3986 and give up. */
3987 if (!cand)
3989 if (complain & tf_error)
3990 print_error_for_call_failure (fns, *args, any_viable_p, candidates);
3991 return error_mark_node;
3994 /* If a cookie is required, add some extra space. Whether
3995 or not a cookie is required cannot be determined until
3996 after we know which function was called. */
3997 if (*cookie_size)
3999 bool use_cookie = true;
4000 if (!abi_version_at_least (2))
4002 /* In G++ 3.2, the check was implemented incorrectly; it
4003 looked at the placement expression, rather than the
4004 type of the function. */
4005 if ((*args)->length () == 2
4006 && same_type_p (TREE_TYPE ((**args)[1]), ptr_type_node))
4007 use_cookie = false;
4009 else
4011 tree arg_types;
4013 arg_types = TYPE_ARG_TYPES (TREE_TYPE (cand->fn));
4014 /* Skip the size_t parameter. */
4015 arg_types = TREE_CHAIN (arg_types);
4016 /* Check the remaining parameters (if any). */
4017 if (arg_types
4018 && TREE_CHAIN (arg_types) == void_list_node
4019 && same_type_p (TREE_VALUE (arg_types),
4020 ptr_type_node))
4021 use_cookie = false;
4023 /* If we need a cookie, adjust the number of bytes allocated. */
4024 if (use_cookie)
4026 /* Update the total size. */
4027 *size = size_binop (PLUS_EXPR, original_size, *cookie_size);
4028 /* Set to (size_t)-1 if the size check fails. */
4029 gcc_assert (size_check != NULL_TREE);
4030 *size = fold_build3 (COND_EXPR, sizetype, size_check,
4031 *size, TYPE_MAX_VALUE (sizetype));
4032 /* Update the argument list to reflect the adjusted size. */
4033 (**args)[0] = *size;
4035 else
4036 *cookie_size = NULL_TREE;
4039 /* Tell our caller which function we decided to call. */
4040 if (fn)
4041 *fn = cand->fn;
4043 /* Build the CALL_EXPR. */
4044 return build_over_call (cand, LOOKUP_NORMAL, complain);
4047 /* Build a new call to operator(). This may change ARGS. */
4049 static tree
4050 build_op_call_1 (tree obj, vec<tree, va_gc> **args, tsubst_flags_t complain)
4052 struct z_candidate *candidates = 0, *cand;
4053 tree fns, convs, first_mem_arg = NULL_TREE;
4054 tree type = TREE_TYPE (obj);
4055 bool any_viable_p;
4056 tree result = NULL_TREE;
4057 void *p;
4059 if (error_operand_p (obj))
4060 return error_mark_node;
4062 obj = prep_operand (obj);
4064 if (TYPE_PTRMEMFUNC_P (type))
4066 if (complain & tf_error)
4067 /* It's no good looking for an overloaded operator() on a
4068 pointer-to-member-function. */
4069 error ("pointer-to-member function %E cannot be called without an object; consider using .* or ->*", obj);
4070 return error_mark_node;
4073 if (TYPE_BINFO (type))
4075 fns = lookup_fnfields (TYPE_BINFO (type), ansi_opname (CALL_EXPR), 1);
4076 if (fns == error_mark_node)
4077 return error_mark_node;
4079 else
4080 fns = NULL_TREE;
4082 if (args != NULL && *args != NULL)
4084 *args = resolve_args (*args, complain);
4085 if (*args == NULL)
4086 return error_mark_node;
4089 /* Get the high-water mark for the CONVERSION_OBSTACK. */
4090 p = conversion_obstack_alloc (0);
4092 if (fns)
4094 first_mem_arg = obj;
4096 add_candidates (BASELINK_FUNCTIONS (fns),
4097 first_mem_arg, *args, NULL_TREE,
4098 NULL_TREE, false,
4099 BASELINK_BINFO (fns), BASELINK_ACCESS_BINFO (fns),
4100 LOOKUP_NORMAL, &candidates, complain);
4103 convs = lookup_conversions (type);
4105 for (; convs; convs = TREE_CHAIN (convs))
4107 tree fns = TREE_VALUE (convs);
4108 tree totype = TREE_TYPE (convs);
4110 if (TYPE_PTRFN_P (totype)
4111 || TYPE_REFFN_P (totype)
4112 || (TREE_CODE (totype) == REFERENCE_TYPE
4113 && TYPE_PTRFN_P (TREE_TYPE (totype))))
4114 for (; fns; fns = OVL_NEXT (fns))
4116 tree fn = OVL_CURRENT (fns);
4118 if (DECL_NONCONVERTING_P (fn))
4119 continue;
4121 if (TREE_CODE (fn) == TEMPLATE_DECL)
4122 add_template_conv_candidate
4123 (&candidates, fn, obj, NULL_TREE, *args, totype,
4124 /*access_path=*/NULL_TREE,
4125 /*conversion_path=*/NULL_TREE, complain);
4126 else
4127 add_conv_candidate (&candidates, fn, obj, NULL_TREE,
4128 *args, /*conversion_path=*/NULL_TREE,
4129 /*access_path=*/NULL_TREE, complain);
4133 candidates = splice_viable (candidates, pedantic, &any_viable_p);
4134 if (!any_viable_p)
4136 if (complain & tf_error)
4138 error ("no match for call to %<(%T) (%A)%>", TREE_TYPE (obj),
4139 build_tree_list_vec (*args));
4140 print_z_candidates (location_of (TREE_TYPE (obj)), candidates);
4142 result = error_mark_node;
4144 else
4146 cand = tourney (candidates, complain);
4147 if (cand == 0)
4149 if (complain & tf_error)
4151 error ("call of %<(%T) (%A)%> is ambiguous",
4152 TREE_TYPE (obj), build_tree_list_vec (*args));
4153 print_z_candidates (location_of (TREE_TYPE (obj)), candidates);
4155 result = error_mark_node;
4157 /* Since cand->fn will be a type, not a function, for a conversion
4158 function, we must be careful not to unconditionally look at
4159 DECL_NAME here. */
4160 else if (TREE_CODE (cand->fn) == FUNCTION_DECL
4161 && DECL_OVERLOADED_OPERATOR_P (cand->fn) == CALL_EXPR)
4162 result = build_over_call (cand, LOOKUP_NORMAL, complain);
4163 else
4165 obj = convert_like_with_context (cand->convs[0], obj, cand->fn, -1,
4166 complain);
4167 obj = convert_from_reference (obj);
4168 result = cp_build_function_call_vec (obj, args, complain);
4172 /* Free all the conversions we allocated. */
4173 obstack_free (&conversion_obstack, p);
4175 return result;
4178 /* Wrapper for above. */
4180 tree
4181 build_op_call (tree obj, vec<tree, va_gc> **args, tsubst_flags_t complain)
4183 tree ret;
4184 bool subtime = timevar_cond_start (TV_OVERLOAD);
4185 ret = build_op_call_1 (obj, args, complain);
4186 timevar_cond_stop (TV_OVERLOAD, subtime);
4187 return ret;
4190 /* Called by op_error to prepare format strings suitable for the error
4191 function. It concatenates a prefix (controlled by MATCH), ERRMSG,
4192 and a suffix (controlled by NTYPES). */
4194 static const char *
4195 op_error_string (const char *errmsg, int ntypes, bool match)
4197 const char *msg;
4199 const char *msgp = concat (match ? G_("ambiguous overload for ")
4200 : G_("no match for "), errmsg, NULL);
4202 if (ntypes == 3)
4203 msg = concat (msgp, G_(" (operand types are %qT, %qT, and %qT)"), NULL);
4204 else if (ntypes == 2)
4205 msg = concat (msgp, G_(" (operand types are %qT and %qT)"), NULL);
4206 else
4207 msg = concat (msgp, G_(" (operand type is %qT)"), NULL);
4209 return msg;
4212 static void
4213 op_error (location_t loc, enum tree_code code, enum tree_code code2,
4214 tree arg1, tree arg2, tree arg3, bool match)
4216 const char *opname;
4218 if (code == MODIFY_EXPR)
4219 opname = assignment_operator_name_info[code2].name;
4220 else
4221 opname = operator_name_info[code].name;
4223 switch (code)
4225 case COND_EXPR:
4226 if (flag_diagnostics_show_caret)
4227 error_at (loc, op_error_string (G_("ternary %<operator?:%>"),
4228 3, match),
4229 TREE_TYPE (arg1), TREE_TYPE (arg2), TREE_TYPE (arg3));
4230 else
4231 error_at (loc, op_error_string (G_("ternary %<operator?:%> "
4232 "in %<%E ? %E : %E%>"), 3, match),
4233 arg1, arg2, arg3,
4234 TREE_TYPE (arg1), TREE_TYPE (arg2), TREE_TYPE (arg3));
4235 break;
4237 case POSTINCREMENT_EXPR:
4238 case POSTDECREMENT_EXPR:
4239 if (flag_diagnostics_show_caret)
4240 error_at (loc, op_error_string (G_("%<operator%s%>"), 1, match),
4241 opname, TREE_TYPE (arg1));
4242 else
4243 error_at (loc, op_error_string (G_("%<operator%s%> in %<%E%s%>"),
4244 1, match),
4245 opname, arg1, opname, TREE_TYPE (arg1));
4246 break;
4248 case ARRAY_REF:
4249 if (flag_diagnostics_show_caret)
4250 error_at (loc, op_error_string (G_("%<operator[]%>"), 2, match),
4251 TREE_TYPE (arg1), TREE_TYPE (arg2));
4252 else
4253 error_at (loc, op_error_string (G_("%<operator[]%> in %<%E[%E]%>"),
4254 2, match),
4255 arg1, arg2, TREE_TYPE (arg1), TREE_TYPE (arg2));
4256 break;
4258 case REALPART_EXPR:
4259 case IMAGPART_EXPR:
4260 if (flag_diagnostics_show_caret)
4261 error_at (loc, op_error_string (G_("%qs"), 1, match),
4262 opname, TREE_TYPE (arg1));
4263 else
4264 error_at (loc, op_error_string (G_("%qs in %<%s %E%>"), 1, match),
4265 opname, opname, arg1, TREE_TYPE (arg1));
4266 break;
4268 default:
4269 if (arg2)
4270 if (flag_diagnostics_show_caret)
4271 error_at (loc, op_error_string (G_("%<operator%s%>"), 2, match),
4272 opname, TREE_TYPE (arg1), TREE_TYPE (arg2));
4273 else
4274 error_at (loc, op_error_string (G_("%<operator%s%> in %<%E %s %E%>"),
4275 2, match),
4276 opname, arg1, opname, arg2,
4277 TREE_TYPE (arg1), TREE_TYPE (arg2));
4278 else
4279 if (flag_diagnostics_show_caret)
4280 error_at (loc, op_error_string (G_("%<operator%s%>"), 1, match),
4281 opname, TREE_TYPE (arg1));
4282 else
4283 error_at (loc, op_error_string (G_("%<operator%s%> in %<%s%E%>"),
4284 1, match),
4285 opname, opname, arg1, TREE_TYPE (arg1));
4286 break;
4290 /* Return the implicit conversion sequence that could be used to
4291 convert E1 to E2 in [expr.cond]. */
4293 static conversion *
4294 conditional_conversion (tree e1, tree e2, tsubst_flags_t complain)
4296 tree t1 = non_reference (TREE_TYPE (e1));
4297 tree t2 = non_reference (TREE_TYPE (e2));
4298 conversion *conv;
4299 bool good_base;
4301 /* [expr.cond]
4303 If E2 is an lvalue: E1 can be converted to match E2 if E1 can be
4304 implicitly converted (clause _conv_) to the type "lvalue reference to
4305 T2", subject to the constraint that in the conversion the
4306 reference must bind directly (_dcl.init.ref_) to an lvalue. */
4307 if (real_lvalue_p (e2))
4309 conv = implicit_conversion (build_reference_type (t2),
4312 /*c_cast_p=*/false,
4313 LOOKUP_NO_TEMP_BIND|LOOKUP_NO_RVAL_BIND
4314 |LOOKUP_ONLYCONVERTING,
4315 complain);
4316 if (conv)
4317 return conv;
4320 /* [expr.cond]
4322 If E1 and E2 have class type, and the underlying class types are
4323 the same or one is a base class of the other: E1 can be converted
4324 to match E2 if the class of T2 is the same type as, or a base
4325 class of, the class of T1, and the cv-qualification of T2 is the
4326 same cv-qualification as, or a greater cv-qualification than, the
4327 cv-qualification of T1. If the conversion is applied, E1 is
4328 changed to an rvalue of type T2 that still refers to the original
4329 source class object (or the appropriate subobject thereof). */
4330 if (CLASS_TYPE_P (t1) && CLASS_TYPE_P (t2)
4331 && ((good_base = DERIVED_FROM_P (t2, t1)) || DERIVED_FROM_P (t1, t2)))
4333 if (good_base && at_least_as_qualified_p (t2, t1))
4335 conv = build_identity_conv (t1, e1);
4336 if (!same_type_p (TYPE_MAIN_VARIANT (t1),
4337 TYPE_MAIN_VARIANT (t2)))
4338 conv = build_conv (ck_base, t2, conv);
4339 else
4340 conv = build_conv (ck_rvalue, t2, conv);
4341 return conv;
4343 else
4344 return NULL;
4346 else
4347 /* [expr.cond]
4349 Otherwise: E1 can be converted to match E2 if E1 can be implicitly
4350 converted to the type that expression E2 would have if E2 were
4351 converted to an rvalue (or the type it has, if E2 is an rvalue). */
4352 return implicit_conversion (t2, t1, e1, /*c_cast_p=*/false,
4353 LOOKUP_IMPLICIT, complain);
4356 /* Implement [expr.cond]. ARG1, ARG2, and ARG3 are the three
4357 arguments to the conditional expression. */
4359 static tree
4360 build_conditional_expr_1 (location_t loc, tree arg1, tree arg2, tree arg3,
4361 tsubst_flags_t complain)
4363 tree arg2_type;
4364 tree arg3_type;
4365 tree result = NULL_TREE;
4366 tree result_type = NULL_TREE;
4367 bool lvalue_p = true;
4368 struct z_candidate *candidates = 0;
4369 struct z_candidate *cand;
4370 void *p;
4371 tree orig_arg2, orig_arg3;
4373 /* As a G++ extension, the second argument to the conditional can be
4374 omitted. (So that `a ? : c' is roughly equivalent to `a ? a :
4375 c'.) If the second operand is omitted, make sure it is
4376 calculated only once. */
4377 if (!arg2)
4379 if (complain & tf_error)
4380 pedwarn (loc, OPT_Wpedantic,
4381 "ISO C++ forbids omitting the middle term of a ?: expression");
4383 /* Make sure that lvalues remain lvalues. See g++.oliva/ext1.C. */
4384 if (real_lvalue_p (arg1))
4385 arg2 = arg1 = stabilize_reference (arg1);
4386 else
4387 arg2 = arg1 = save_expr (arg1);
4390 /* If something has already gone wrong, just pass that fact up the
4391 tree. */
4392 if (error_operand_p (arg1)
4393 || error_operand_p (arg2)
4394 || error_operand_p (arg3))
4395 return error_mark_node;
4397 orig_arg2 = arg2;
4398 orig_arg3 = arg3;
4400 if (VECTOR_INTEGER_TYPE_P (TREE_TYPE (arg1)))
4402 arg1 = force_rvalue (arg1, complain);
4403 arg2 = force_rvalue (arg2, complain);
4404 arg3 = force_rvalue (arg3, complain);
4406 tree arg1_type = TREE_TYPE (arg1);
4407 arg2_type = TREE_TYPE (arg2);
4408 arg3_type = TREE_TYPE (arg3);
4410 if (TREE_CODE (arg2_type) != VECTOR_TYPE
4411 && TREE_CODE (arg3_type) != VECTOR_TYPE)
4413 /* Rely on the error messages of the scalar version. */
4414 tree scal = build_conditional_expr_1 (loc, integer_one_node,
4415 orig_arg2, orig_arg3, complain);
4416 if (scal == error_mark_node)
4417 return error_mark_node;
4418 tree stype = TREE_TYPE (scal);
4419 tree ctype = TREE_TYPE (arg1_type);
4420 if (TYPE_SIZE (stype) != TYPE_SIZE (ctype)
4421 || (!INTEGRAL_TYPE_P (stype) && !SCALAR_FLOAT_TYPE_P (stype)))
4423 if (complain & tf_error)
4424 error_at (loc, "inferred scalar type %qT is not an integer or "
4425 "floating point type of the same size as %qT", stype,
4426 COMPARISON_CLASS_P (arg1)
4427 ? TREE_TYPE (TREE_TYPE (TREE_OPERAND (arg1, 0)))
4428 : ctype);
4429 return error_mark_node;
4432 tree vtype = build_opaque_vector_type (stype,
4433 TYPE_VECTOR_SUBPARTS (arg1_type));
4434 /* We could pass complain & tf_warning to unsafe_conversion_p,
4435 but the warnings (like Wsign-conversion) have already been
4436 given by the scalar build_conditional_expr_1. We still check
4437 unsafe_conversion_p to forbid truncating long long -> float. */
4438 if (unsafe_conversion_p (stype, arg2, false))
4440 if (complain & tf_error)
4441 error_at (loc, "conversion of scalar %qT to vector %qT "
4442 "involves truncation", arg2_type, vtype);
4443 return error_mark_node;
4445 if (unsafe_conversion_p (stype, arg3, false))
4447 if (complain & tf_error)
4448 error_at (loc, "conversion of scalar %qT to vector %qT "
4449 "involves truncation", arg3_type, vtype);
4450 return error_mark_node;
4453 arg2 = cp_convert (stype, arg2, complain);
4454 arg2 = save_expr (arg2);
4455 arg2 = build_vector_from_val (vtype, arg2);
4456 arg2_type = vtype;
4457 arg3 = cp_convert (stype, arg3, complain);
4458 arg3 = save_expr (arg3);
4459 arg3 = build_vector_from_val (vtype, arg3);
4460 arg3_type = vtype;
4463 if ((TREE_CODE (arg2_type) == VECTOR_TYPE)
4464 != (TREE_CODE (arg3_type) == VECTOR_TYPE))
4466 enum stv_conv convert_flag =
4467 scalar_to_vector (loc, VEC_COND_EXPR, arg2, arg3,
4468 complain & tf_error);
4470 switch (convert_flag)
4472 case stv_error:
4473 return error_mark_node;
4474 case stv_firstarg:
4476 arg2 = save_expr (arg2);
4477 arg2 = convert (TREE_TYPE (arg3_type), arg2);
4478 arg2 = build_vector_from_val (arg3_type, arg2);
4479 arg2_type = TREE_TYPE (arg2);
4480 break;
4482 case stv_secondarg:
4484 arg3 = save_expr (arg3);
4485 arg3 = convert (TREE_TYPE (arg2_type), arg3);
4486 arg3 = build_vector_from_val (arg2_type, arg3);
4487 arg3_type = TREE_TYPE (arg3);
4488 break;
4490 default:
4491 break;
4495 if (!same_type_p (arg2_type, arg3_type)
4496 || TYPE_VECTOR_SUBPARTS (arg1_type)
4497 != TYPE_VECTOR_SUBPARTS (arg2_type)
4498 || TYPE_SIZE (arg1_type) != TYPE_SIZE (arg2_type))
4500 if (complain & tf_error)
4501 error_at (loc,
4502 "incompatible vector types in conditional expression: "
4503 "%qT, %qT and %qT", TREE_TYPE (arg1),
4504 TREE_TYPE (orig_arg2), TREE_TYPE (orig_arg3));
4505 return error_mark_node;
4508 if (!COMPARISON_CLASS_P (arg1))
4509 arg1 = cp_build_binary_op (loc, NE_EXPR, arg1,
4510 build_zero_cst (arg1_type), complain);
4511 return fold_build3 (VEC_COND_EXPR, arg2_type, arg1, arg2, arg3);
4514 /* [expr.cond]
4516 The first expression is implicitly converted to bool (clause
4517 _conv_). */
4518 arg1 = perform_implicit_conversion_flags (boolean_type_node, arg1, complain,
4519 LOOKUP_NORMAL);
4520 if (error_operand_p (arg1))
4521 return error_mark_node;
4523 /* [expr.cond]
4525 If either the second or the third operand has type (possibly
4526 cv-qualified) void, then the lvalue-to-rvalue (_conv.lval_),
4527 array-to-pointer (_conv.array_), and function-to-pointer
4528 (_conv.func_) standard conversions are performed on the second
4529 and third operands. */
4530 arg2_type = unlowered_expr_type (arg2);
4531 arg3_type = unlowered_expr_type (arg3);
4532 if (VOID_TYPE_P (arg2_type) || VOID_TYPE_P (arg3_type))
4534 /* Do the conversions. We don't these for `void' type arguments
4535 since it can't have any effect and since decay_conversion
4536 does not handle that case gracefully. */
4537 if (!VOID_TYPE_P (arg2_type))
4538 arg2 = decay_conversion (arg2, complain);
4539 if (!VOID_TYPE_P (arg3_type))
4540 arg3 = decay_conversion (arg3, complain);
4541 arg2_type = TREE_TYPE (arg2);
4542 arg3_type = TREE_TYPE (arg3);
4544 /* [expr.cond]
4546 One of the following shall hold:
4548 --The second or the third operand (but not both) is a
4549 throw-expression (_except.throw_); the result is of the
4550 type of the other and is an rvalue.
4552 --Both the second and the third operands have type void; the
4553 result is of type void and is an rvalue.
4555 We must avoid calling force_rvalue for expressions of type
4556 "void" because it will complain that their value is being
4557 used. */
4558 if (TREE_CODE (arg2) == THROW_EXPR
4559 && TREE_CODE (arg3) != THROW_EXPR)
4561 if (!VOID_TYPE_P (arg3_type))
4563 arg3 = force_rvalue (arg3, complain);
4564 if (arg3 == error_mark_node)
4565 return error_mark_node;
4567 arg3_type = TREE_TYPE (arg3);
4568 result_type = arg3_type;
4570 else if (TREE_CODE (arg2) != THROW_EXPR
4571 && TREE_CODE (arg3) == THROW_EXPR)
4573 if (!VOID_TYPE_P (arg2_type))
4575 arg2 = force_rvalue (arg2, complain);
4576 if (arg2 == error_mark_node)
4577 return error_mark_node;
4579 arg2_type = TREE_TYPE (arg2);
4580 result_type = arg2_type;
4582 else if (VOID_TYPE_P (arg2_type) && VOID_TYPE_P (arg3_type))
4583 result_type = void_type_node;
4584 else
4586 if (complain & tf_error)
4588 if (VOID_TYPE_P (arg2_type))
4589 error_at (EXPR_LOC_OR_LOC (arg3, loc),
4590 "second operand to the conditional operator "
4591 "is of type %<void%>, but the third operand is "
4592 "neither a throw-expression nor of type %<void%>");
4593 else
4594 error_at (EXPR_LOC_OR_LOC (arg2, loc),
4595 "third operand to the conditional operator "
4596 "is of type %<void%>, but the second operand is "
4597 "neither a throw-expression nor of type %<void%>");
4599 return error_mark_node;
4602 lvalue_p = false;
4603 goto valid_operands;
4605 /* [expr.cond]
4607 Otherwise, if the second and third operand have different types,
4608 and either has (possibly cv-qualified) class type, an attempt is
4609 made to convert each of those operands to the type of the other. */
4610 else if (!same_type_p (arg2_type, arg3_type)
4611 && (CLASS_TYPE_P (arg2_type) || CLASS_TYPE_P (arg3_type)))
4613 conversion *conv2;
4614 conversion *conv3;
4616 /* Get the high-water mark for the CONVERSION_OBSTACK. */
4617 p = conversion_obstack_alloc (0);
4619 conv2 = conditional_conversion (arg2, arg3, complain);
4620 conv3 = conditional_conversion (arg3, arg2, complain);
4622 /* [expr.cond]
4624 If both can be converted, or one can be converted but the
4625 conversion is ambiguous, the program is ill-formed. If
4626 neither can be converted, the operands are left unchanged and
4627 further checking is performed as described below. If exactly
4628 one conversion is possible, that conversion is applied to the
4629 chosen operand and the converted operand is used in place of
4630 the original operand for the remainder of this section. */
4631 if ((conv2 && !conv2->bad_p
4632 && conv3 && !conv3->bad_p)
4633 || (conv2 && conv2->kind == ck_ambig)
4634 || (conv3 && conv3->kind == ck_ambig))
4636 if (complain & tf_error)
4637 error_at (loc, "operands to ?: have different types %qT and %qT",
4638 arg2_type, arg3_type);
4639 result = error_mark_node;
4641 else if (conv2 && (!conv2->bad_p || !conv3))
4643 arg2 = convert_like (conv2, arg2, complain);
4644 arg2 = convert_from_reference (arg2);
4645 arg2_type = TREE_TYPE (arg2);
4646 /* Even if CONV2 is a valid conversion, the result of the
4647 conversion may be invalid. For example, if ARG3 has type
4648 "volatile X", and X does not have a copy constructor
4649 accepting a "volatile X&", then even if ARG2 can be
4650 converted to X, the conversion will fail. */
4651 if (error_operand_p (arg2))
4652 result = error_mark_node;
4654 else if (conv3 && (!conv3->bad_p || !conv2))
4656 arg3 = convert_like (conv3, arg3, complain);
4657 arg3 = convert_from_reference (arg3);
4658 arg3_type = TREE_TYPE (arg3);
4659 if (error_operand_p (arg3))
4660 result = error_mark_node;
4663 /* Free all the conversions we allocated. */
4664 obstack_free (&conversion_obstack, p);
4666 if (result)
4667 return result;
4669 /* If, after the conversion, both operands have class type,
4670 treat the cv-qualification of both operands as if it were the
4671 union of the cv-qualification of the operands.
4673 The standard is not clear about what to do in this
4674 circumstance. For example, if the first operand has type
4675 "const X" and the second operand has a user-defined
4676 conversion to "volatile X", what is the type of the second
4677 operand after this step? Making it be "const X" (matching
4678 the first operand) seems wrong, as that discards the
4679 qualification without actually performing a copy. Leaving it
4680 as "volatile X" seems wrong as that will result in the
4681 conditional expression failing altogether, even though,
4682 according to this step, the one operand could be converted to
4683 the type of the other. */
4684 if ((conv2 || conv3)
4685 && CLASS_TYPE_P (arg2_type)
4686 && cp_type_quals (arg2_type) != cp_type_quals (arg3_type))
4687 arg2_type = arg3_type =
4688 cp_build_qualified_type (arg2_type,
4689 cp_type_quals (arg2_type)
4690 | cp_type_quals (arg3_type));
4693 /* [expr.cond]
4695 If the second and third operands are glvalues of the same value
4696 category and have the same type, the result is of that type and
4697 value category. */
4698 if (((real_lvalue_p (arg2) && real_lvalue_p (arg3))
4699 || (xvalue_p (arg2) && xvalue_p (arg3)))
4700 && same_type_p (arg2_type, arg3_type))
4702 result_type = arg2_type;
4703 arg2 = mark_lvalue_use (arg2);
4704 arg3 = mark_lvalue_use (arg3);
4705 goto valid_operands;
4708 /* [expr.cond]
4710 Otherwise, the result is an rvalue. If the second and third
4711 operand do not have the same type, and either has (possibly
4712 cv-qualified) class type, overload resolution is used to
4713 determine the conversions (if any) to be applied to the operands
4714 (_over.match.oper_, _over.built_). */
4715 lvalue_p = false;
4716 if (!same_type_p (arg2_type, arg3_type)
4717 && (CLASS_TYPE_P (arg2_type) || CLASS_TYPE_P (arg3_type)))
4719 tree args[3];
4720 conversion *conv;
4721 bool any_viable_p;
4723 /* Rearrange the arguments so that add_builtin_candidate only has
4724 to know about two args. In build_builtin_candidate, the
4725 arguments are unscrambled. */
4726 args[0] = arg2;
4727 args[1] = arg3;
4728 args[2] = arg1;
4729 add_builtin_candidates (&candidates,
4730 COND_EXPR,
4731 NOP_EXPR,
4732 ansi_opname (COND_EXPR),
4733 args,
4734 LOOKUP_NORMAL, complain);
4736 /* [expr.cond]
4738 If the overload resolution fails, the program is
4739 ill-formed. */
4740 candidates = splice_viable (candidates, pedantic, &any_viable_p);
4741 if (!any_viable_p)
4743 if (complain & tf_error)
4745 op_error (loc, COND_EXPR, NOP_EXPR, arg1, arg2, arg3, FALSE);
4746 print_z_candidates (loc, candidates);
4748 return error_mark_node;
4750 cand = tourney (candidates, complain);
4751 if (!cand)
4753 if (complain & tf_error)
4755 op_error (loc, COND_EXPR, NOP_EXPR, arg1, arg2, arg3, FALSE);
4756 print_z_candidates (loc, candidates);
4758 return error_mark_node;
4761 /* [expr.cond]
4763 Otherwise, the conversions thus determined are applied, and
4764 the converted operands are used in place of the original
4765 operands for the remainder of this section. */
4766 conv = cand->convs[0];
4767 arg1 = convert_like (conv, arg1, complain);
4768 conv = cand->convs[1];
4769 arg2 = convert_like (conv, arg2, complain);
4770 arg2_type = TREE_TYPE (arg2);
4771 conv = cand->convs[2];
4772 arg3 = convert_like (conv, arg3, complain);
4773 arg3_type = TREE_TYPE (arg3);
4776 /* [expr.cond]
4778 Lvalue-to-rvalue (_conv.lval_), array-to-pointer (_conv.array_),
4779 and function-to-pointer (_conv.func_) standard conversions are
4780 performed on the second and third operands.
4782 We need to force the lvalue-to-rvalue conversion here for class types,
4783 so we get TARGET_EXPRs; trying to deal with a COND_EXPR of class rvalues
4784 that isn't wrapped with a TARGET_EXPR plays havoc with exception
4785 regions. */
4787 arg2 = force_rvalue (arg2, complain);
4788 if (!CLASS_TYPE_P (arg2_type))
4789 arg2_type = TREE_TYPE (arg2);
4791 arg3 = force_rvalue (arg3, complain);
4792 if (!CLASS_TYPE_P (arg3_type))
4793 arg3_type = TREE_TYPE (arg3);
4795 if (arg2 == error_mark_node || arg3 == error_mark_node)
4796 return error_mark_node;
4798 /* [expr.cond]
4800 After those conversions, one of the following shall hold:
4802 --The second and third operands have the same type; the result is of
4803 that type. */
4804 if (same_type_p (arg2_type, arg3_type))
4805 result_type = arg2_type;
4806 /* [expr.cond]
4808 --The second and third operands have arithmetic or enumeration
4809 type; the usual arithmetic conversions are performed to bring
4810 them to a common type, and the result is of that type. */
4811 else if ((ARITHMETIC_TYPE_P (arg2_type)
4812 || UNSCOPED_ENUM_P (arg2_type))
4813 && (ARITHMETIC_TYPE_P (arg3_type)
4814 || UNSCOPED_ENUM_P (arg3_type)))
4816 /* In this case, there is always a common type. */
4817 result_type = type_after_usual_arithmetic_conversions (arg2_type,
4818 arg3_type);
4819 if (complain & tf_warning)
4820 do_warn_double_promotion (result_type, arg2_type, arg3_type,
4821 "implicit conversion from %qT to %qT to "
4822 "match other result of conditional",
4823 loc);
4825 if (TREE_CODE (arg2_type) == ENUMERAL_TYPE
4826 && TREE_CODE (arg3_type) == ENUMERAL_TYPE)
4828 if (TREE_CODE (orig_arg2) == CONST_DECL
4829 && TREE_CODE (orig_arg3) == CONST_DECL
4830 && DECL_CONTEXT (orig_arg2) == DECL_CONTEXT (orig_arg3))
4831 /* Two enumerators from the same enumeration can have different
4832 types when the enumeration is still being defined. */;
4833 else if (complain & tf_warning)
4834 warning_at (loc, OPT_Wenum_compare, "enumeral mismatch in "
4835 "conditional expression: %qT vs %qT",
4836 arg2_type, arg3_type);
4838 else if (extra_warnings
4839 && ((TREE_CODE (arg2_type) == ENUMERAL_TYPE
4840 && !same_type_p (arg3_type, type_promotes_to (arg2_type)))
4841 || (TREE_CODE (arg3_type) == ENUMERAL_TYPE
4842 && !same_type_p (arg2_type,
4843 type_promotes_to (arg3_type)))))
4845 if (complain & tf_warning)
4846 warning_at (loc, 0, "enumeral and non-enumeral type in "
4847 "conditional expression");
4850 arg2 = perform_implicit_conversion (result_type, arg2, complain);
4851 arg3 = perform_implicit_conversion (result_type, arg3, complain);
4853 /* [expr.cond]
4855 --The second and third operands have pointer type, or one has
4856 pointer type and the other is a null pointer constant; pointer
4857 conversions (_conv.ptr_) and qualification conversions
4858 (_conv.qual_) are performed to bring them to their composite
4859 pointer type (_expr.rel_). The result is of the composite
4860 pointer type.
4862 --The second and third operands have pointer to member type, or
4863 one has pointer to member type and the other is a null pointer
4864 constant; pointer to member conversions (_conv.mem_) and
4865 qualification conversions (_conv.qual_) are performed to bring
4866 them to a common type, whose cv-qualification shall match the
4867 cv-qualification of either the second or the third operand.
4868 The result is of the common type. */
4869 else if ((null_ptr_cst_p (arg2)
4870 && TYPE_PTR_OR_PTRMEM_P (arg3_type))
4871 || (null_ptr_cst_p (arg3)
4872 && TYPE_PTR_OR_PTRMEM_P (arg2_type))
4873 || (TYPE_PTR_P (arg2_type) && TYPE_PTR_P (arg3_type))
4874 || (TYPE_PTRDATAMEM_P (arg2_type) && TYPE_PTRDATAMEM_P (arg3_type))
4875 || (TYPE_PTRMEMFUNC_P (arg2_type) && TYPE_PTRMEMFUNC_P (arg3_type)))
4877 result_type = composite_pointer_type (arg2_type, arg3_type, arg2,
4878 arg3, CPO_CONDITIONAL_EXPR,
4879 complain);
4880 if (result_type == error_mark_node)
4881 return error_mark_node;
4882 arg2 = perform_implicit_conversion (result_type, arg2, complain);
4883 arg3 = perform_implicit_conversion (result_type, arg3, complain);
4886 if (!result_type)
4888 if (complain & tf_error)
4889 error_at (loc, "operands to ?: have different types %qT and %qT",
4890 arg2_type, arg3_type);
4891 return error_mark_node;
4894 if (arg2 == error_mark_node || arg3 == error_mark_node)
4895 return error_mark_node;
4897 valid_operands:
4898 result = build3 (COND_EXPR, result_type, arg1, arg2, arg3);
4899 if (!cp_unevaluated_operand)
4900 /* Avoid folding within decltype (c++/42013) and noexcept. */
4901 result = fold_if_not_in_template (result);
4903 /* We can't use result_type below, as fold might have returned a
4904 throw_expr. */
4906 if (!lvalue_p)
4908 /* Expand both sides into the same slot, hopefully the target of
4909 the ?: expression. We used to check for TARGET_EXPRs here,
4910 but now we sometimes wrap them in NOP_EXPRs so the test would
4911 fail. */
4912 if (CLASS_TYPE_P (TREE_TYPE (result)))
4913 result = get_target_expr_sfinae (result, complain);
4914 /* If this expression is an rvalue, but might be mistaken for an
4915 lvalue, we must add a NON_LVALUE_EXPR. */
4916 result = rvalue (result);
4918 else
4919 result = force_paren_expr (result);
4921 return result;
4924 /* Wrapper for above. */
4926 tree
4927 build_conditional_expr (location_t loc, tree arg1, tree arg2, tree arg3,
4928 tsubst_flags_t complain)
4930 tree ret;
4931 bool subtime = timevar_cond_start (TV_OVERLOAD);
4932 ret = build_conditional_expr_1 (loc, arg1, arg2, arg3, complain);
4933 timevar_cond_stop (TV_OVERLOAD, subtime);
4934 return ret;
4937 /* OPERAND is an operand to an expression. Perform necessary steps
4938 required before using it. If OPERAND is NULL_TREE, NULL_TREE is
4939 returned. */
4941 static tree
4942 prep_operand (tree operand)
4944 if (operand)
4946 if (CLASS_TYPE_P (TREE_TYPE (operand))
4947 && CLASSTYPE_TEMPLATE_INSTANTIATION (TREE_TYPE (operand)))
4948 /* Make sure the template type is instantiated now. */
4949 instantiate_class_template (TYPE_MAIN_VARIANT (TREE_TYPE (operand)));
4952 return operand;
4955 /* Add each of the viable functions in FNS (a FUNCTION_DECL or
4956 OVERLOAD) to the CANDIDATES, returning an updated list of
4957 CANDIDATES. The ARGS are the arguments provided to the call;
4958 if FIRST_ARG is non-null it is the implicit object argument,
4959 otherwise the first element of ARGS is used if needed. The
4960 EXPLICIT_TARGS are explicit template arguments provided.
4961 TEMPLATE_ONLY is true if only template functions should be
4962 considered. CONVERSION_PATH, ACCESS_PATH, and FLAGS are as for
4963 add_function_candidate. */
4965 static void
4966 add_candidates (tree fns, tree first_arg, const vec<tree, va_gc> *args,
4967 tree return_type,
4968 tree explicit_targs, bool template_only,
4969 tree conversion_path, tree access_path,
4970 int flags,
4971 struct z_candidate **candidates,
4972 tsubst_flags_t complain)
4974 tree ctype;
4975 const vec<tree, va_gc> *non_static_args;
4976 bool check_list_ctor;
4977 bool check_converting;
4978 unification_kind_t strict;
4979 tree fn;
4981 if (!fns)
4982 return;
4984 /* Precalculate special handling of constructors and conversion ops. */
4985 fn = OVL_CURRENT (fns);
4986 if (DECL_CONV_FN_P (fn))
4988 check_list_ctor = false;
4989 check_converting = !!(flags & LOOKUP_ONLYCONVERTING);
4990 if (flags & LOOKUP_NO_CONVERSION)
4991 /* We're doing return_type(x). */
4992 strict = DEDUCE_CONV;
4993 else
4994 /* We're doing x.operator return_type(). */
4995 strict = DEDUCE_EXACT;
4996 /* [over.match.funcs] For conversion functions, the function
4997 is considered to be a member of the class of the implicit
4998 object argument for the purpose of defining the type of
4999 the implicit object parameter. */
5000 ctype = TYPE_MAIN_VARIANT (TREE_TYPE (first_arg));
5002 else
5004 if (DECL_CONSTRUCTOR_P (fn))
5006 check_list_ctor = !!(flags & LOOKUP_LIST_ONLY);
5007 /* For list-initialization we consider explicit constructors
5008 and complain if one is chosen. */
5009 check_converting
5010 = ((flags & (LOOKUP_ONLYCONVERTING|LOOKUP_LIST_INIT_CTOR))
5011 == LOOKUP_ONLYCONVERTING);
5013 else
5015 check_list_ctor = false;
5016 check_converting = false;
5018 strict = DEDUCE_CALL;
5019 ctype = conversion_path ? BINFO_TYPE (conversion_path) : NULL_TREE;
5022 if (first_arg)
5023 non_static_args = args;
5024 else
5025 /* Delay creating the implicit this parameter until it is needed. */
5026 non_static_args = NULL;
5028 for (; fns; fns = OVL_NEXT (fns))
5030 tree fn_first_arg;
5031 const vec<tree, va_gc> *fn_args;
5033 fn = OVL_CURRENT (fns);
5035 if (check_converting && DECL_NONCONVERTING_P (fn))
5036 continue;
5037 if (check_list_ctor && !is_list_ctor (fn))
5038 continue;
5040 /* Figure out which set of arguments to use. */
5041 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
5043 /* If this function is a non-static member and we didn't get an
5044 implicit object argument, move it out of args. */
5045 if (first_arg == NULL_TREE)
5047 unsigned int ix;
5048 tree arg;
5049 vec<tree, va_gc> *tempvec;
5050 vec_alloc (tempvec, args->length () - 1);
5051 for (ix = 1; args->iterate (ix, &arg); ++ix)
5052 tempvec->quick_push (arg);
5053 non_static_args = tempvec;
5054 first_arg = (*args)[0];
5057 fn_first_arg = first_arg;
5058 fn_args = non_static_args;
5060 else
5062 /* Otherwise, just use the list of arguments provided. */
5063 fn_first_arg = NULL_TREE;
5064 fn_args = args;
5067 if (TREE_CODE (fn) == TEMPLATE_DECL)
5068 add_template_candidate (candidates,
5070 ctype,
5071 explicit_targs,
5072 fn_first_arg,
5073 fn_args,
5074 return_type,
5075 access_path,
5076 conversion_path,
5077 flags,
5078 strict,
5079 complain);
5080 else if (!template_only)
5081 add_function_candidate (candidates,
5083 ctype,
5084 fn_first_arg,
5085 fn_args,
5086 access_path,
5087 conversion_path,
5088 flags,
5089 complain);
5093 static tree
5094 build_new_op_1 (location_t loc, enum tree_code code, int flags, tree arg1,
5095 tree arg2, tree arg3, tree *overload, tsubst_flags_t complain)
5097 struct z_candidate *candidates = 0, *cand;
5098 vec<tree, va_gc> *arglist;
5099 tree fnname;
5100 tree args[3];
5101 tree result = NULL_TREE;
5102 bool result_valid_p = false;
5103 enum tree_code code2 = NOP_EXPR;
5104 enum tree_code code_orig_arg1 = ERROR_MARK;
5105 enum tree_code code_orig_arg2 = ERROR_MARK;
5106 conversion *conv;
5107 void *p;
5108 bool strict_p;
5109 bool any_viable_p;
5111 if (error_operand_p (arg1)
5112 || error_operand_p (arg2)
5113 || error_operand_p (arg3))
5114 return error_mark_node;
5116 if (code == MODIFY_EXPR)
5118 code2 = TREE_CODE (arg3);
5119 arg3 = NULL_TREE;
5120 fnname = ansi_assopname (code2);
5122 else
5123 fnname = ansi_opname (code);
5125 arg1 = prep_operand (arg1);
5127 switch (code)
5129 case NEW_EXPR:
5130 case VEC_NEW_EXPR:
5131 case VEC_DELETE_EXPR:
5132 case DELETE_EXPR:
5133 /* Use build_op_new_call and build_op_delete_call instead. */
5134 gcc_unreachable ();
5136 case CALL_EXPR:
5137 /* Use build_op_call instead. */
5138 gcc_unreachable ();
5140 case TRUTH_ORIF_EXPR:
5141 case TRUTH_ANDIF_EXPR:
5142 case TRUTH_AND_EXPR:
5143 case TRUTH_OR_EXPR:
5144 /* These are saved for the sake of warn_logical_operator. */
5145 code_orig_arg1 = TREE_CODE (arg1);
5146 code_orig_arg2 = TREE_CODE (arg2);
5148 default:
5149 break;
5152 arg2 = prep_operand (arg2);
5153 arg3 = prep_operand (arg3);
5155 if (code == COND_EXPR)
5156 /* Use build_conditional_expr instead. */
5157 gcc_unreachable ();
5158 else if (! OVERLOAD_TYPE_P (TREE_TYPE (arg1))
5159 && (! arg2 || ! OVERLOAD_TYPE_P (TREE_TYPE (arg2))))
5160 goto builtin;
5162 if (code == POSTINCREMENT_EXPR || code == POSTDECREMENT_EXPR)
5163 arg2 = integer_zero_node;
5165 vec_alloc (arglist, 3);
5166 arglist->quick_push (arg1);
5167 if (arg2 != NULL_TREE)
5168 arglist->quick_push (arg2);
5169 if (arg3 != NULL_TREE)
5170 arglist->quick_push (arg3);
5172 /* Get the high-water mark for the CONVERSION_OBSTACK. */
5173 p = conversion_obstack_alloc (0);
5175 /* Add namespace-scope operators to the list of functions to
5176 consider. */
5177 add_candidates (lookup_function_nonclass (fnname, arglist, /*block_p=*/true),
5178 NULL_TREE, arglist, NULL_TREE,
5179 NULL_TREE, false, NULL_TREE, NULL_TREE,
5180 flags, &candidates, complain);
5182 args[0] = arg1;
5183 args[1] = arg2;
5184 args[2] = NULL_TREE;
5186 /* Add class-member operators to the candidate set. */
5187 if (CLASS_TYPE_P (TREE_TYPE (arg1)))
5189 tree fns;
5191 fns = lookup_fnfields (TREE_TYPE (arg1), fnname, 1);
5192 if (fns == error_mark_node)
5194 result = error_mark_node;
5195 goto user_defined_result_ready;
5197 if (fns)
5198 add_candidates (BASELINK_FUNCTIONS (fns),
5199 NULL_TREE, arglist, NULL_TREE,
5200 NULL_TREE, false,
5201 BASELINK_BINFO (fns),
5202 BASELINK_ACCESS_BINFO (fns),
5203 flags, &candidates, complain);
5205 /* Per 13.3.1.2/3, 2nd bullet, if no operand has a class type, then
5206 only non-member functions that have type T1 or reference to
5207 cv-qualified-opt T1 for the first argument, if the first argument
5208 has an enumeration type, or T2 or reference to cv-qualified-opt
5209 T2 for the second argument, if the the second argument has an
5210 enumeration type. Filter out those that don't match. */
5211 else if (! arg2 || ! CLASS_TYPE_P (TREE_TYPE (arg2)))
5213 struct z_candidate **candp, **next;
5215 for (candp = &candidates; *candp; candp = next)
5217 tree parmlist, parmtype;
5218 int i, nargs = (arg2 ? 2 : 1);
5220 cand = *candp;
5221 next = &cand->next;
5223 parmlist = TYPE_ARG_TYPES (TREE_TYPE (cand->fn));
5225 for (i = 0; i < nargs; ++i)
5227 parmtype = TREE_VALUE (parmlist);
5229 if (TREE_CODE (parmtype) == REFERENCE_TYPE)
5230 parmtype = TREE_TYPE (parmtype);
5231 if (TREE_CODE (TREE_TYPE (args[i])) == ENUMERAL_TYPE
5232 && (same_type_ignoring_top_level_qualifiers_p
5233 (TREE_TYPE (args[i]), parmtype)))
5234 break;
5236 parmlist = TREE_CHAIN (parmlist);
5239 /* No argument has an appropriate type, so remove this
5240 candidate function from the list. */
5241 if (i == nargs)
5243 *candp = cand->next;
5244 next = candp;
5249 add_builtin_candidates (&candidates, code, code2, fnname, args,
5250 flags, complain);
5252 switch (code)
5254 case COMPOUND_EXPR:
5255 case ADDR_EXPR:
5256 /* For these, the built-in candidates set is empty
5257 [over.match.oper]/3. We don't want non-strict matches
5258 because exact matches are always possible with built-in
5259 operators. The built-in candidate set for COMPONENT_REF
5260 would be empty too, but since there are no such built-in
5261 operators, we accept non-strict matches for them. */
5262 strict_p = true;
5263 break;
5265 default:
5266 strict_p = pedantic;
5267 break;
5270 candidates = splice_viable (candidates, strict_p, &any_viable_p);
5271 if (!any_viable_p)
5273 switch (code)
5275 case POSTINCREMENT_EXPR:
5276 case POSTDECREMENT_EXPR:
5277 /* Don't try anything fancy if we're not allowed to produce
5278 errors. */
5279 if (!(complain & tf_error))
5280 return error_mark_node;
5282 /* Look for an `operator++ (int)'. Pre-1985 C++ didn't
5283 distinguish between prefix and postfix ++ and
5284 operator++() was used for both, so we allow this with
5285 -fpermissive. */
5286 else
5288 const char *msg = (flag_permissive)
5289 ? G_("no %<%D(int)%> declared for postfix %qs,"
5290 " trying prefix operator instead")
5291 : G_("no %<%D(int)%> declared for postfix %qs");
5292 permerror (loc, msg, fnname, operator_name_info[code].name);
5295 if (!flag_permissive)
5296 return error_mark_node;
5298 if (code == POSTINCREMENT_EXPR)
5299 code = PREINCREMENT_EXPR;
5300 else
5301 code = PREDECREMENT_EXPR;
5302 result = build_new_op_1 (loc, code, flags, arg1, NULL_TREE,
5303 NULL_TREE, overload, complain);
5304 break;
5306 /* The caller will deal with these. */
5307 case ADDR_EXPR:
5308 case COMPOUND_EXPR:
5309 case COMPONENT_REF:
5310 result = NULL_TREE;
5311 result_valid_p = true;
5312 break;
5314 default:
5315 if (complain & tf_error)
5317 /* If one of the arguments of the operator represents
5318 an invalid use of member function pointer, try to report
5319 a meaningful error ... */
5320 if (invalid_nonstatic_memfn_p (arg1, tf_error)
5321 || invalid_nonstatic_memfn_p (arg2, tf_error)
5322 || invalid_nonstatic_memfn_p (arg3, tf_error))
5323 /* We displayed the error message. */;
5324 else
5326 /* ... Otherwise, report the more generic
5327 "no matching operator found" error */
5328 op_error (loc, code, code2, arg1, arg2, arg3, FALSE);
5329 print_z_candidates (loc, candidates);
5332 result = error_mark_node;
5333 break;
5336 else
5338 cand = tourney (candidates, complain);
5339 if (cand == 0)
5341 if (complain & tf_error)
5343 op_error (loc, code, code2, arg1, arg2, arg3, TRUE);
5344 print_z_candidates (loc, candidates);
5346 result = error_mark_node;
5348 else if (TREE_CODE (cand->fn) == FUNCTION_DECL)
5350 if (overload)
5351 *overload = cand->fn;
5353 if (resolve_args (arglist, complain) == NULL)
5354 result = error_mark_node;
5355 else
5356 result = build_over_call (cand, LOOKUP_NORMAL, complain);
5358 else
5360 /* Give any warnings we noticed during overload resolution. */
5361 if (cand->warnings && (complain & tf_warning))
5363 struct candidate_warning *w;
5364 for (w = cand->warnings; w; w = w->next)
5365 joust (cand, w->loser, 1, complain);
5368 /* Check for comparison of different enum types. */
5369 switch (code)
5371 case GT_EXPR:
5372 case LT_EXPR:
5373 case GE_EXPR:
5374 case LE_EXPR:
5375 case EQ_EXPR:
5376 case NE_EXPR:
5377 if (TREE_CODE (TREE_TYPE (arg1)) == ENUMERAL_TYPE
5378 && TREE_CODE (TREE_TYPE (arg2)) == ENUMERAL_TYPE
5379 && (TYPE_MAIN_VARIANT (TREE_TYPE (arg1))
5380 != TYPE_MAIN_VARIANT (TREE_TYPE (arg2)))
5381 && (complain & tf_warning))
5383 warning (OPT_Wenum_compare,
5384 "comparison between %q#T and %q#T",
5385 TREE_TYPE (arg1), TREE_TYPE (arg2));
5387 break;
5388 default:
5389 break;
5392 /* We need to strip any leading REF_BIND so that bitfields
5393 don't cause errors. This should not remove any important
5394 conversions, because builtins don't apply to class
5395 objects directly. */
5396 conv = cand->convs[0];
5397 if (conv->kind == ck_ref_bind)
5398 conv = next_conversion (conv);
5399 arg1 = convert_like (conv, arg1, complain);
5401 if (arg2)
5403 conv = cand->convs[1];
5404 if (conv->kind == ck_ref_bind)
5405 conv = next_conversion (conv);
5406 else
5407 arg2 = decay_conversion (arg2, complain);
5409 /* We need to call warn_logical_operator before
5410 converting arg2 to a boolean_type, but after
5411 decaying an enumerator to its value. */
5412 if (complain & tf_warning)
5413 warn_logical_operator (loc, code, boolean_type_node,
5414 code_orig_arg1, arg1,
5415 code_orig_arg2, arg2);
5417 arg2 = convert_like (conv, arg2, complain);
5419 if (arg3)
5421 conv = cand->convs[2];
5422 if (conv->kind == ck_ref_bind)
5423 conv = next_conversion (conv);
5424 arg3 = convert_like (conv, arg3, complain);
5430 user_defined_result_ready:
5432 /* Free all the conversions we allocated. */
5433 obstack_free (&conversion_obstack, p);
5435 if (result || result_valid_p)
5436 return result;
5438 builtin:
5439 switch (code)
5441 case MODIFY_EXPR:
5442 return cp_build_modify_expr (arg1, code2, arg2, complain);
5444 case INDIRECT_REF:
5445 return cp_build_indirect_ref (arg1, RO_UNARY_STAR, complain);
5447 case TRUTH_ANDIF_EXPR:
5448 case TRUTH_ORIF_EXPR:
5449 case TRUTH_AND_EXPR:
5450 case TRUTH_OR_EXPR:
5451 warn_logical_operator (loc, code, boolean_type_node,
5452 code_orig_arg1, arg1, code_orig_arg2, arg2);
5453 /* Fall through. */
5454 case PLUS_EXPR:
5455 case MINUS_EXPR:
5456 case MULT_EXPR:
5457 case TRUNC_DIV_EXPR:
5458 case GT_EXPR:
5459 case LT_EXPR:
5460 case GE_EXPR:
5461 case LE_EXPR:
5462 case EQ_EXPR:
5463 case NE_EXPR:
5464 case MAX_EXPR:
5465 case MIN_EXPR:
5466 case LSHIFT_EXPR:
5467 case RSHIFT_EXPR:
5468 case TRUNC_MOD_EXPR:
5469 case BIT_AND_EXPR:
5470 case BIT_IOR_EXPR:
5471 case BIT_XOR_EXPR:
5472 return cp_build_binary_op (loc, code, arg1, arg2, complain);
5474 case UNARY_PLUS_EXPR:
5475 case NEGATE_EXPR:
5476 case BIT_NOT_EXPR:
5477 case TRUTH_NOT_EXPR:
5478 case PREINCREMENT_EXPR:
5479 case POSTINCREMENT_EXPR:
5480 case PREDECREMENT_EXPR:
5481 case POSTDECREMENT_EXPR:
5482 case REALPART_EXPR:
5483 case IMAGPART_EXPR:
5484 case ABS_EXPR:
5485 return cp_build_unary_op (code, arg1, candidates != 0, complain);
5487 case ARRAY_REF:
5488 return cp_build_array_ref (input_location, arg1, arg2, complain);
5490 case MEMBER_REF:
5491 return build_m_component_ref (cp_build_indirect_ref (arg1, RO_ARROW_STAR,
5492 complain),
5493 arg2, complain);
5495 /* The caller will deal with these. */
5496 case ADDR_EXPR:
5497 case COMPONENT_REF:
5498 case COMPOUND_EXPR:
5499 return NULL_TREE;
5501 default:
5502 gcc_unreachable ();
5504 return NULL_TREE;
5507 /* Wrapper for above. */
5509 tree
5510 build_new_op (location_t loc, enum tree_code code, int flags,
5511 tree arg1, tree arg2, tree arg3,
5512 tree *overload, tsubst_flags_t complain)
5514 tree ret;
5515 bool subtime = timevar_cond_start (TV_OVERLOAD);
5516 ret = build_new_op_1 (loc, code, flags, arg1, arg2, arg3,
5517 overload, complain);
5518 timevar_cond_stop (TV_OVERLOAD, subtime);
5519 return ret;
5522 /* Returns true iff T, an element of an OVERLOAD chain, is a usual
5523 deallocation function (3.7.4.2 [basic.stc.dynamic.deallocation]). */
5525 static bool
5526 non_placement_deallocation_fn_p (tree t)
5528 /* A template instance is never a usual deallocation function,
5529 regardless of its signature. */
5530 if (TREE_CODE (t) == TEMPLATE_DECL
5531 || primary_template_instantiation_p (t))
5532 return false;
5534 /* If a class T has a member deallocation function named operator delete
5535 with exactly one parameter, then that function is a usual
5536 (non-placement) deallocation function. If class T does not declare
5537 such an operator delete but does declare a member deallocation
5538 function named operator delete with exactly two parameters, the second
5539 of which has type std::size_t (18.2), then this function is a usual
5540 deallocation function. */
5541 t = FUNCTION_ARG_CHAIN (t);
5542 if (t == void_list_node
5543 || (t && same_type_p (TREE_VALUE (t), size_type_node)
5544 && TREE_CHAIN (t) == void_list_node))
5545 return true;
5546 return false;
5549 /* Build a call to operator delete. This has to be handled very specially,
5550 because the restrictions on what signatures match are different from all
5551 other call instances. For a normal delete, only a delete taking (void *)
5552 or (void *, size_t) is accepted. For a placement delete, only an exact
5553 match with the placement new is accepted.
5555 CODE is either DELETE_EXPR or VEC_DELETE_EXPR.
5556 ADDR is the pointer to be deleted.
5557 SIZE is the size of the memory block to be deleted.
5558 GLOBAL_P is true if the delete-expression should not consider
5559 class-specific delete operators.
5560 PLACEMENT is the corresponding placement new call, or NULL_TREE.
5562 If this call to "operator delete" is being generated as part to
5563 deallocate memory allocated via a new-expression (as per [expr.new]
5564 which requires that if the initialization throws an exception then
5565 we call a deallocation function), then ALLOC_FN is the allocation
5566 function. */
5568 tree
5569 build_op_delete_call (enum tree_code code, tree addr, tree size,
5570 bool global_p, tree placement,
5571 tree alloc_fn, tsubst_flags_t complain)
5573 tree fn = NULL_TREE;
5574 tree fns, fnname, type, t;
5576 if (addr == error_mark_node)
5577 return error_mark_node;
5579 type = strip_array_types (TREE_TYPE (TREE_TYPE (addr)));
5581 fnname = ansi_opname (code);
5583 if (CLASS_TYPE_P (type)
5584 && COMPLETE_TYPE_P (complete_type (type))
5585 && !global_p)
5586 /* In [class.free]
5588 If the result of the lookup is ambiguous or inaccessible, or if
5589 the lookup selects a placement deallocation function, the
5590 program is ill-formed.
5592 Therefore, we ask lookup_fnfields to complain about ambiguity. */
5594 fns = lookup_fnfields (TYPE_BINFO (type), fnname, 1);
5595 if (fns == error_mark_node)
5596 return error_mark_node;
5598 else
5599 fns = NULL_TREE;
5601 if (fns == NULL_TREE)
5602 fns = lookup_name_nonclass (fnname);
5604 /* Strip const and volatile from addr. */
5605 addr = cp_convert (ptr_type_node, addr, complain);
5607 if (placement)
5609 /* "A declaration of a placement deallocation function matches the
5610 declaration of a placement allocation function if it has the same
5611 number of parameters and, after parameter transformations (8.3.5),
5612 all parameter types except the first are identical."
5614 So we build up the function type we want and ask instantiate_type
5615 to get it for us. */
5616 t = FUNCTION_ARG_CHAIN (alloc_fn);
5617 t = tree_cons (NULL_TREE, ptr_type_node, t);
5618 t = build_function_type (void_type_node, t);
5620 fn = instantiate_type (t, fns, tf_none);
5621 if (fn == error_mark_node)
5622 return NULL_TREE;
5624 if (BASELINK_P (fn))
5625 fn = BASELINK_FUNCTIONS (fn);
5627 /* "If the lookup finds the two-parameter form of a usual deallocation
5628 function (3.7.4.2) and that function, considered as a placement
5629 deallocation function, would have been selected as a match for the
5630 allocation function, the program is ill-formed." */
5631 if (non_placement_deallocation_fn_p (fn))
5633 /* But if the class has an operator delete (void *), then that is
5634 the usual deallocation function, so we shouldn't complain
5635 about using the operator delete (void *, size_t). */
5636 for (t = BASELINK_P (fns) ? BASELINK_FUNCTIONS (fns) : fns;
5637 t; t = OVL_NEXT (t))
5639 tree elt = OVL_CURRENT (t);
5640 if (non_placement_deallocation_fn_p (elt)
5641 && FUNCTION_ARG_CHAIN (elt) == void_list_node)
5642 goto ok;
5644 if (complain & tf_error)
5646 permerror (0, "non-placement deallocation function %q+D", fn);
5647 permerror (input_location, "selected for placement delete");
5649 else
5650 return error_mark_node;
5651 ok:;
5654 else
5655 /* "Any non-placement deallocation function matches a non-placement
5656 allocation function. If the lookup finds a single matching
5657 deallocation function, that function will be called; otherwise, no
5658 deallocation function will be called." */
5659 for (t = BASELINK_P (fns) ? BASELINK_FUNCTIONS (fns) : fns;
5660 t; t = OVL_NEXT (t))
5662 tree elt = OVL_CURRENT (t);
5663 if (non_placement_deallocation_fn_p (elt))
5665 fn = elt;
5666 /* "If a class T has a member deallocation function named
5667 operator delete with exactly one parameter, then that
5668 function is a usual (non-placement) deallocation
5669 function. If class T does not declare such an operator
5670 delete but does declare a member deallocation function named
5671 operator delete with exactly two parameters, the second of
5672 which has type std::size_t (18.2), then this function is a
5673 usual deallocation function."
5675 So (void*) beats (void*, size_t). */
5676 if (FUNCTION_ARG_CHAIN (fn) == void_list_node)
5677 break;
5681 /* If we have a matching function, call it. */
5682 if (fn)
5684 gcc_assert (TREE_CODE (fn) == FUNCTION_DECL);
5686 /* If the FN is a member function, make sure that it is
5687 accessible. */
5688 if (BASELINK_P (fns))
5689 perform_or_defer_access_check (BASELINK_BINFO (fns), fn, fn,
5690 complain);
5692 /* Core issue 901: It's ok to new a type with deleted delete. */
5693 if (DECL_DELETED_FN (fn) && alloc_fn)
5694 return NULL_TREE;
5696 if (placement)
5698 /* The placement args might not be suitable for overload
5699 resolution at this point, so build the call directly. */
5700 int nargs = call_expr_nargs (placement);
5701 tree *argarray = XALLOCAVEC (tree, nargs);
5702 int i;
5703 argarray[0] = addr;
5704 for (i = 1; i < nargs; i++)
5705 argarray[i] = CALL_EXPR_ARG (placement, i);
5706 mark_used (fn);
5707 return build_cxx_call (fn, nargs, argarray, complain);
5709 else
5711 tree ret;
5712 vec<tree, va_gc> *args;
5713 vec_alloc (args, 2);
5714 args->quick_push (addr);
5715 if (FUNCTION_ARG_CHAIN (fn) != void_list_node)
5716 args->quick_push (size);
5717 ret = cp_build_function_call_vec (fn, &args, complain);
5718 vec_free (args);
5719 return ret;
5723 /* [expr.new]
5725 If no unambiguous matching deallocation function can be found,
5726 propagating the exception does not cause the object's memory to
5727 be freed. */
5728 if (alloc_fn)
5730 if ((complain & tf_warning)
5731 && !placement)
5732 warning (0, "no corresponding deallocation function for %qD",
5733 alloc_fn);
5734 return NULL_TREE;
5737 if (complain & tf_error)
5738 error ("no suitable %<operator %s%> for %qT",
5739 operator_name_info[(int)code].name, type);
5740 return error_mark_node;
5743 /* If the current scope isn't allowed to access DECL along
5744 BASETYPE_PATH, give an error. The most derived class in
5745 BASETYPE_PATH is the one used to qualify DECL. DIAG_DECL is
5746 the declaration to use in the error diagnostic. */
5748 bool
5749 enforce_access (tree basetype_path, tree decl, tree diag_decl,
5750 tsubst_flags_t complain)
5752 gcc_assert (TREE_CODE (basetype_path) == TREE_BINFO);
5754 if (!accessible_p (basetype_path, decl, true))
5756 if (complain & tf_error)
5758 if (TREE_PRIVATE (decl))
5759 error ("%q+#D is private", diag_decl);
5760 else if (TREE_PROTECTED (decl))
5761 error ("%q+#D is protected", diag_decl);
5762 else
5763 error ("%q+#D is inaccessible", diag_decl);
5764 error ("within this context");
5766 return false;
5769 return true;
5772 /* Initialize a temporary of type TYPE with EXPR. The FLAGS are a
5773 bitwise or of LOOKUP_* values. If any errors are warnings are
5774 generated, set *DIAGNOSTIC_FN to "error" or "warning",
5775 respectively. If no diagnostics are generated, set *DIAGNOSTIC_FN
5776 to NULL. */
5778 static tree
5779 build_temp (tree expr, tree type, int flags,
5780 diagnostic_t *diagnostic_kind, tsubst_flags_t complain)
5782 int savew, savee;
5783 vec<tree, va_gc> *args;
5785 savew = warningcount + werrorcount, savee = errorcount;
5786 args = make_tree_vector_single (expr);
5787 expr = build_special_member_call (NULL_TREE, complete_ctor_identifier,
5788 &args, type, flags, complain);
5789 release_tree_vector (args);
5790 if (warningcount + werrorcount > savew)
5791 *diagnostic_kind = DK_WARNING;
5792 else if (errorcount > savee)
5793 *diagnostic_kind = DK_ERROR;
5794 else
5795 *diagnostic_kind = DK_UNSPECIFIED;
5796 return expr;
5799 /* Perform warnings about peculiar, but valid, conversions from/to NULL.
5800 EXPR is implicitly converted to type TOTYPE.
5801 FN and ARGNUM are used for diagnostics. */
5803 static void
5804 conversion_null_warnings (tree totype, tree expr, tree fn, int argnum)
5806 /* Issue warnings about peculiar, but valid, uses of NULL. */
5807 if (expr == null_node && TREE_CODE (totype) != BOOLEAN_TYPE
5808 && ARITHMETIC_TYPE_P (totype))
5810 source_location loc =
5811 expansion_point_location_if_in_system_header (input_location);
5813 if (fn)
5814 warning_at (loc, OPT_Wconversion_null,
5815 "passing NULL to non-pointer argument %P of %qD",
5816 argnum, fn);
5817 else
5818 warning_at (loc, OPT_Wconversion_null,
5819 "converting to non-pointer type %qT from NULL", totype);
5822 /* Issue warnings if "false" is converted to a NULL pointer */
5823 else if (TREE_CODE (TREE_TYPE (expr)) == BOOLEAN_TYPE
5824 && TYPE_PTR_P (totype))
5826 if (fn)
5827 warning_at (input_location, OPT_Wconversion_null,
5828 "converting %<false%> to pointer type for argument %P "
5829 "of %qD", argnum, fn);
5830 else
5831 warning_at (input_location, OPT_Wconversion_null,
5832 "converting %<false%> to pointer type %qT", totype);
5836 /* Perform the conversions in CONVS on the expression EXPR. FN and
5837 ARGNUM are used for diagnostics. ARGNUM is zero based, -1
5838 indicates the `this' argument of a method. INNER is nonzero when
5839 being called to continue a conversion chain. It is negative when a
5840 reference binding will be applied, positive otherwise. If
5841 ISSUE_CONVERSION_WARNINGS is true, warnings about suspicious
5842 conversions will be emitted if appropriate. If C_CAST_P is true,
5843 this conversion is coming from a C-style cast; in that case,
5844 conversions to inaccessible bases are permitted. */
5846 static tree
5847 convert_like_real (conversion *convs, tree expr, tree fn, int argnum,
5848 int inner, bool issue_conversion_warnings,
5849 bool c_cast_p, tsubst_flags_t complain)
5851 tree totype = convs->type;
5852 diagnostic_t diag_kind;
5853 int flags;
5854 location_t loc = EXPR_LOC_OR_LOC (expr, input_location);
5856 if (convs->bad_p && !(complain & tf_error))
5857 return error_mark_node;
5859 if (convs->bad_p
5860 && convs->kind != ck_user
5861 && convs->kind != ck_list
5862 && convs->kind != ck_ambig
5863 && (convs->kind != ck_ref_bind
5864 || convs->user_conv_p)
5865 && convs->kind != ck_rvalue
5866 && convs->kind != ck_base)
5868 conversion *t = convs;
5870 /* Give a helpful error if this is bad because of excess braces. */
5871 if (BRACE_ENCLOSED_INITIALIZER_P (expr)
5872 && SCALAR_TYPE_P (totype)
5873 && CONSTRUCTOR_NELTS (expr) > 0
5874 && BRACE_ENCLOSED_INITIALIZER_P (CONSTRUCTOR_ELT (expr, 0)->value))
5875 permerror (loc, "too many braces around initializer for %qT", totype);
5877 for (; t ; t = next_conversion (t))
5879 if (t->kind == ck_user && t->cand->reason)
5881 permerror (loc, "invalid user-defined conversion "
5882 "from %qT to %qT", TREE_TYPE (expr), totype);
5883 print_z_candidate (loc, "candidate is:", t->cand);
5884 expr = convert_like_real (t, expr, fn, argnum, 1,
5885 /*issue_conversion_warnings=*/false,
5886 /*c_cast_p=*/false,
5887 complain);
5888 if (convs->kind == ck_ref_bind)
5889 return convert_to_reference (totype, expr, CONV_IMPLICIT,
5890 LOOKUP_NORMAL, NULL_TREE,
5891 complain);
5892 else
5893 return cp_convert (totype, expr, complain);
5895 else if (t->kind == ck_user || !t->bad_p)
5897 expr = convert_like_real (t, expr, fn, argnum, 1,
5898 /*issue_conversion_warnings=*/false,
5899 /*c_cast_p=*/false,
5900 complain);
5901 break;
5903 else if (t->kind == ck_ambig)
5904 return convert_like_real (t, expr, fn, argnum, 1,
5905 /*issue_conversion_warnings=*/false,
5906 /*c_cast_p=*/false,
5907 complain);
5908 else if (t->kind == ck_identity)
5909 break;
5911 if (permerror (loc, "invalid conversion from %qT to %qT",
5912 TREE_TYPE (expr), totype)
5913 && fn)
5914 inform (DECL_SOURCE_LOCATION (fn),
5915 "initializing argument %P of %qD", argnum, fn);
5917 return cp_convert (totype, expr, complain);
5920 if (issue_conversion_warnings && (complain & tf_warning))
5921 conversion_null_warnings (totype, expr, fn, argnum);
5923 switch (convs->kind)
5925 case ck_user:
5927 struct z_candidate *cand = convs->cand;
5928 tree convfn = cand->fn;
5929 unsigned i;
5931 /* When converting from an init list we consider explicit
5932 constructors, but actually trying to call one is an error. */
5933 if (DECL_NONCONVERTING_P (convfn) && DECL_CONSTRUCTOR_P (convfn)
5934 /* Unless this is for direct-list-initialization. */
5935 && !(BRACE_ENCLOSED_INITIALIZER_P (expr)
5936 && CONSTRUCTOR_IS_DIRECT_INIT (expr)))
5938 error ("converting to %qT from initializer list would use "
5939 "explicit constructor %qD", totype, convfn);
5942 /* If we're initializing from {}, it's value-initialization. */
5943 if (BRACE_ENCLOSED_INITIALIZER_P (expr)
5944 && CONSTRUCTOR_NELTS (expr) == 0
5945 && TYPE_HAS_DEFAULT_CONSTRUCTOR (totype))
5947 bool direct = CONSTRUCTOR_IS_DIRECT_INIT (expr);
5948 expr = build_value_init (totype, complain);
5949 expr = get_target_expr_sfinae (expr, complain);
5950 if (expr != error_mark_node)
5952 TARGET_EXPR_LIST_INIT_P (expr) = true;
5953 TARGET_EXPR_DIRECT_INIT_P (expr) = direct;
5955 return expr;
5958 expr = mark_rvalue_use (expr);
5960 /* Set user_conv_p on the argument conversions, so rvalue/base
5961 handling knows not to allow any more UDCs. */
5962 for (i = 0; i < cand->num_convs; ++i)
5963 cand->convs[i]->user_conv_p = true;
5965 expr = build_over_call (cand, LOOKUP_NORMAL, complain);
5967 /* If this is a constructor or a function returning an aggr type,
5968 we need to build up a TARGET_EXPR. */
5969 if (DECL_CONSTRUCTOR_P (convfn))
5971 expr = build_cplus_new (totype, expr, complain);
5973 /* Remember that this was list-initialization. */
5974 if (convs->check_narrowing && expr != error_mark_node)
5975 TARGET_EXPR_LIST_INIT_P (expr) = true;
5978 return expr;
5980 case ck_identity:
5981 expr = mark_rvalue_use (expr);
5982 if (BRACE_ENCLOSED_INITIALIZER_P (expr))
5984 int nelts = CONSTRUCTOR_NELTS (expr);
5985 if (nelts == 0)
5986 expr = build_value_init (totype, complain);
5987 else if (nelts == 1)
5988 expr = CONSTRUCTOR_ELT (expr, 0)->value;
5989 else
5990 gcc_unreachable ();
5993 if (type_unknown_p (expr))
5994 expr = instantiate_type (totype, expr, complain);
5995 /* Convert a constant to its underlying value, unless we are
5996 about to bind it to a reference, in which case we need to
5997 leave it as an lvalue. */
5998 if (inner >= 0)
6000 expr = decl_constant_value_safe (expr);
6001 if (expr == null_node && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (totype))
6002 /* If __null has been converted to an integer type, we do not
6003 want to warn about uses of EXPR as an integer, rather than
6004 as a pointer. */
6005 expr = build_int_cst (totype, 0);
6007 return expr;
6008 case ck_ambig:
6009 /* We leave bad_p off ck_ambig because overload resolution considers
6010 it valid, it just fails when we try to perform it. So we need to
6011 check complain here, too. */
6012 if (complain & tf_error)
6014 /* Call build_user_type_conversion again for the error. */
6015 build_user_type_conversion (totype, convs->u.expr, LOOKUP_NORMAL,
6016 complain);
6017 if (fn)
6018 inform (input_location, "initializing argument %P of %q+D",
6019 argnum, fn);
6021 return error_mark_node;
6023 case ck_list:
6025 /* Conversion to std::initializer_list<T>. */
6026 tree elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (totype), 0);
6027 tree new_ctor = build_constructor (init_list_type_node, NULL);
6028 unsigned len = CONSTRUCTOR_NELTS (expr);
6029 tree array, val, field;
6030 vec<constructor_elt, va_gc> *vec = NULL;
6031 unsigned ix;
6033 /* Convert all the elements. */
6034 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expr), ix, val)
6036 tree sub = convert_like_real (convs->u.list[ix], val, fn, argnum,
6037 1, false, false, complain);
6038 if (sub == error_mark_node)
6039 return sub;
6040 if (!BRACE_ENCLOSED_INITIALIZER_P (val))
6041 check_narrowing (TREE_TYPE (sub), val);
6042 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_ctor), NULL_TREE, sub);
6043 if (!TREE_CONSTANT (sub))
6044 TREE_CONSTANT (new_ctor) = false;
6046 /* Build up the array. */
6047 elttype = cp_build_qualified_type
6048 (elttype, cp_type_quals (elttype) | TYPE_QUAL_CONST);
6049 array = build_array_of_n_type (elttype, len);
6050 array = finish_compound_literal (array, new_ctor, complain);
6051 /* Take the address explicitly rather than via decay_conversion
6052 to avoid the error about taking the address of a temporary. */
6053 array = cp_build_addr_expr (array, complain);
6054 array = cp_convert (build_pointer_type (elttype), array, complain);
6056 /* Build up the initializer_list object. */
6057 totype = complete_type (totype);
6058 field = next_initializable_field (TYPE_FIELDS (totype));
6059 CONSTRUCTOR_APPEND_ELT (vec, field, array);
6060 field = next_initializable_field (DECL_CHAIN (field));
6061 CONSTRUCTOR_APPEND_ELT (vec, field, size_int (len));
6062 new_ctor = build_constructor (totype, vec);
6063 return get_target_expr_sfinae (new_ctor, complain);
6066 case ck_aggr:
6067 if (TREE_CODE (totype) == COMPLEX_TYPE)
6069 tree real = CONSTRUCTOR_ELT (expr, 0)->value;
6070 tree imag = CONSTRUCTOR_ELT (expr, 1)->value;
6071 real = perform_implicit_conversion (TREE_TYPE (totype),
6072 real, complain);
6073 imag = perform_implicit_conversion (TREE_TYPE (totype),
6074 imag, complain);
6075 expr = build2 (COMPLEX_EXPR, totype, real, imag);
6076 return fold_if_not_in_template (expr);
6078 expr = reshape_init (totype, expr, complain);
6079 return get_target_expr_sfinae (digest_init (totype, expr, complain),
6080 complain);
6082 default:
6083 break;
6086 expr = convert_like_real (next_conversion (convs), expr, fn, argnum,
6087 convs->kind == ck_ref_bind ? -1 : 1,
6088 convs->kind == ck_ref_bind ? issue_conversion_warnings : false,
6089 c_cast_p,
6090 complain);
6091 if (expr == error_mark_node)
6092 return error_mark_node;
6094 switch (convs->kind)
6096 case ck_rvalue:
6097 expr = decay_conversion (expr, complain);
6098 if (expr == error_mark_node)
6099 return error_mark_node;
6101 if (! MAYBE_CLASS_TYPE_P (totype))
6102 return expr;
6103 /* Else fall through. */
6104 case ck_base:
6105 if (convs->kind == ck_base && !convs->need_temporary_p)
6107 /* We are going to bind a reference directly to a base-class
6108 subobject of EXPR. */
6109 /* Build an expression for `*((base*) &expr)'. */
6110 expr = cp_build_addr_expr (expr, complain);
6111 expr = convert_to_base (expr, build_pointer_type (totype),
6112 !c_cast_p, /*nonnull=*/true, complain);
6113 expr = cp_build_indirect_ref (expr, RO_IMPLICIT_CONVERSION, complain);
6114 return expr;
6117 /* Copy-initialization where the cv-unqualified version of the source
6118 type is the same class as, or a derived class of, the class of the
6119 destination [is treated as direct-initialization]. [dcl.init] */
6120 flags = LOOKUP_NORMAL|LOOKUP_ONLYCONVERTING;
6121 if (convs->user_conv_p)
6122 /* This conversion is being done in the context of a user-defined
6123 conversion (i.e. the second step of copy-initialization), so
6124 don't allow any more. */
6125 flags |= LOOKUP_NO_CONVERSION;
6126 if (convs->rvaluedness_matches_p)
6127 flags |= LOOKUP_PREFER_RVALUE;
6128 if (TREE_CODE (expr) == TARGET_EXPR
6129 && TARGET_EXPR_LIST_INIT_P (expr))
6130 /* Copy-list-initialization doesn't actually involve a copy. */
6131 return expr;
6132 expr = build_temp (expr, totype, flags, &diag_kind, complain);
6133 if (diag_kind && fn && complain)
6134 emit_diagnostic (diag_kind, DECL_SOURCE_LOCATION (fn), 0,
6135 " initializing argument %P of %qD", argnum, fn);
6136 return build_cplus_new (totype, expr, complain);
6138 case ck_ref_bind:
6140 tree ref_type = totype;
6142 if (convs->bad_p && !next_conversion (convs)->bad_p)
6144 gcc_assert (TYPE_REF_IS_RVALUE (ref_type)
6145 && real_lvalue_p (expr));
6147 error_at (loc, "cannot bind %qT lvalue to %qT",
6148 TREE_TYPE (expr), totype);
6149 if (fn)
6150 inform (input_location,
6151 "initializing argument %P of %q+D", argnum, fn);
6152 return error_mark_node;
6155 /* If necessary, create a temporary.
6157 VA_ARG_EXPR and CONSTRUCTOR expressions are special cases
6158 that need temporaries, even when their types are reference
6159 compatible with the type of reference being bound, so the
6160 upcoming call to cp_build_addr_expr doesn't fail. */
6161 if (convs->need_temporary_p
6162 || TREE_CODE (expr) == CONSTRUCTOR
6163 || TREE_CODE (expr) == VA_ARG_EXPR)
6165 /* Otherwise, a temporary of type "cv1 T1" is created and
6166 initialized from the initializer expression using the rules
6167 for a non-reference copy-initialization (8.5). */
6169 tree type = TREE_TYPE (ref_type);
6170 cp_lvalue_kind lvalue = real_lvalue_p (expr);
6172 gcc_assert (same_type_ignoring_top_level_qualifiers_p
6173 (type, next_conversion (convs)->type));
6174 if (!CP_TYPE_CONST_NON_VOLATILE_P (type)
6175 && !TYPE_REF_IS_RVALUE (ref_type))
6177 /* If the reference is volatile or non-const, we
6178 cannot create a temporary. */
6179 if (lvalue & clk_bitfield)
6180 error_at (loc, "cannot bind bitfield %qE to %qT",
6181 expr, ref_type);
6182 else if (lvalue & clk_packed)
6183 error_at (loc, "cannot bind packed field %qE to %qT",
6184 expr, ref_type);
6185 else
6186 error_at (loc, "cannot bind rvalue %qE to %qT",
6187 expr, ref_type);
6188 return error_mark_node;
6190 /* If the source is a packed field, and we must use a copy
6191 constructor, then building the target expr will require
6192 binding the field to the reference parameter to the
6193 copy constructor, and we'll end up with an infinite
6194 loop. If we can use a bitwise copy, then we'll be
6195 OK. */
6196 if ((lvalue & clk_packed)
6197 && CLASS_TYPE_P (type)
6198 && type_has_nontrivial_copy_init (type))
6200 error_at (loc, "cannot bind packed field %qE to %qT",
6201 expr, ref_type);
6202 return error_mark_node;
6204 if (lvalue & clk_bitfield)
6206 expr = convert_bitfield_to_declared_type (expr);
6207 expr = fold_convert (type, expr);
6209 expr = build_target_expr_with_type (expr, type, complain);
6212 /* Take the address of the thing to which we will bind the
6213 reference. */
6214 expr = cp_build_addr_expr (expr, complain);
6215 if (expr == error_mark_node)
6216 return error_mark_node;
6218 /* Convert it to a pointer to the type referred to by the
6219 reference. This will adjust the pointer if a derived to
6220 base conversion is being performed. */
6221 expr = cp_convert (build_pointer_type (TREE_TYPE (ref_type)),
6222 expr, complain);
6223 /* Convert the pointer to the desired reference type. */
6224 return build_nop (ref_type, expr);
6227 case ck_lvalue:
6228 return decay_conversion (expr, complain);
6230 case ck_qual:
6231 /* Warn about deprecated conversion if appropriate. */
6232 string_conv_p (totype, expr, 1);
6233 break;
6235 case ck_ptr:
6236 if (convs->base_p)
6237 expr = convert_to_base (expr, totype, !c_cast_p,
6238 /*nonnull=*/false, complain);
6239 return build_nop (totype, expr);
6241 case ck_pmem:
6242 return convert_ptrmem (totype, expr, /*allow_inverse_p=*/false,
6243 c_cast_p, complain);
6245 default:
6246 break;
6249 if (convs->check_narrowing)
6250 check_narrowing (totype, expr);
6252 if (issue_conversion_warnings)
6253 expr = cp_convert_and_check (totype, expr, complain);
6254 else
6255 expr = cp_convert (totype, expr, complain);
6257 return expr;
6260 /* ARG is being passed to a varargs function. Perform any conversions
6261 required. Return the converted value. */
6263 tree
6264 convert_arg_to_ellipsis (tree arg, tsubst_flags_t complain)
6266 tree arg_type;
6267 location_t loc = EXPR_LOC_OR_LOC (arg, input_location);
6269 /* [expr.call]
6271 The lvalue-to-rvalue, array-to-pointer, and function-to-pointer
6272 standard conversions are performed. */
6273 arg = decay_conversion (arg, complain);
6274 arg_type = TREE_TYPE (arg);
6275 /* [expr.call]
6277 If the argument has integral or enumeration type that is subject
6278 to the integral promotions (_conv.prom_), or a floating point
6279 type that is subject to the floating point promotion
6280 (_conv.fpprom_), the value of the argument is converted to the
6281 promoted type before the call. */
6282 if (TREE_CODE (arg_type) == REAL_TYPE
6283 && (TYPE_PRECISION (arg_type)
6284 < TYPE_PRECISION (double_type_node))
6285 && !DECIMAL_FLOAT_MODE_P (TYPE_MODE (arg_type)))
6287 if ((complain & tf_warning)
6288 && warn_double_promotion && !c_inhibit_evaluation_warnings)
6289 warning_at (loc, OPT_Wdouble_promotion,
6290 "implicit conversion from %qT to %qT when passing "
6291 "argument to function",
6292 arg_type, double_type_node);
6293 arg = convert_to_real (double_type_node, arg);
6295 else if (NULLPTR_TYPE_P (arg_type))
6296 arg = null_pointer_node;
6297 else if (INTEGRAL_OR_ENUMERATION_TYPE_P (arg_type))
6299 if (SCOPED_ENUM_P (arg_type) && !abi_version_at_least (6))
6301 if (complain & tf_warning)
6302 warning_at (loc, OPT_Wabi, "scoped enum %qT will not promote to an "
6303 "integral type in a future version of GCC", arg_type);
6304 arg = cp_convert (ENUM_UNDERLYING_TYPE (arg_type), arg, complain);
6306 arg = cp_perform_integral_promotions (arg, complain);
6309 arg = require_complete_type_sfinae (arg, complain);
6310 arg_type = TREE_TYPE (arg);
6312 if (arg != error_mark_node
6313 /* In a template (or ill-formed code), we can have an incomplete type
6314 even after require_complete_type_sfinae, in which case we don't know
6315 whether it has trivial copy or not. */
6316 && COMPLETE_TYPE_P (arg_type))
6318 /* Build up a real lvalue-to-rvalue conversion in case the
6319 copy constructor is trivial but not callable. */
6320 if (!cp_unevaluated_operand && CLASS_TYPE_P (arg_type))
6321 force_rvalue (arg, complain);
6323 /* [expr.call] 5.2.2/7:
6324 Passing a potentially-evaluated argument of class type (Clause 9)
6325 with a non-trivial copy constructor or a non-trivial destructor
6326 with no corresponding parameter is conditionally-supported, with
6327 implementation-defined semantics.
6329 We used to just warn here and do a bitwise copy, but now
6330 cp_expr_size will abort if we try to do that.
6332 If the call appears in the context of a sizeof expression,
6333 it is not potentially-evaluated. */
6334 if (cp_unevaluated_operand == 0
6335 && (type_has_nontrivial_copy_init (arg_type)
6336 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (arg_type)))
6338 if (complain & tf_error)
6339 error_at (loc, "cannot pass objects of non-trivially-copyable "
6340 "type %q#T through %<...%>", arg_type);
6341 else
6342 return error_mark_node;
6346 return arg;
6349 /* va_arg (EXPR, TYPE) is a builtin. Make sure it is not abused. */
6351 tree
6352 build_x_va_arg (source_location loc, tree expr, tree type)
6354 if (processing_template_decl)
6355 return build_min (VA_ARG_EXPR, type, expr);
6357 type = complete_type_or_else (type, NULL_TREE);
6359 if (expr == error_mark_node || !type)
6360 return error_mark_node;
6362 expr = mark_lvalue_use (expr);
6364 if (type_has_nontrivial_copy_init (type)
6365 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
6366 || TREE_CODE (type) == REFERENCE_TYPE)
6368 /* Remove reference types so we don't ICE later on. */
6369 tree type1 = non_reference (type);
6370 /* conditionally-supported behavior [expr.call] 5.2.2/7. */
6371 error ("cannot receive objects of non-trivially-copyable type %q#T "
6372 "through %<...%>; ", type);
6373 expr = convert (build_pointer_type (type1), null_node);
6374 expr = cp_build_indirect_ref (expr, RO_NULL, tf_warning_or_error);
6375 return expr;
6378 return build_va_arg (loc, expr, type);
6381 /* TYPE has been given to va_arg. Apply the default conversions which
6382 would have happened when passed via ellipsis. Return the promoted
6383 type, or the passed type if there is no change. */
6385 tree
6386 cxx_type_promotes_to (tree type)
6388 tree promote;
6390 /* Perform the array-to-pointer and function-to-pointer
6391 conversions. */
6392 type = type_decays_to (type);
6394 promote = type_promotes_to (type);
6395 if (same_type_p (type, promote))
6396 promote = type;
6398 return promote;
6401 /* ARG is a default argument expression being passed to a parameter of
6402 the indicated TYPE, which is a parameter to FN. PARMNUM is the
6403 zero-based argument number. Do any required conversions. Return
6404 the converted value. */
6406 static GTY(()) vec<tree, va_gc> *default_arg_context;
6407 void
6408 push_defarg_context (tree fn)
6409 { vec_safe_push (default_arg_context, fn); }
6411 void
6412 pop_defarg_context (void)
6413 { default_arg_context->pop (); }
6415 tree
6416 convert_default_arg (tree type, tree arg, tree fn, int parmnum,
6417 tsubst_flags_t complain)
6419 int i;
6420 tree t;
6422 /* See through clones. */
6423 fn = DECL_ORIGIN (fn);
6425 /* Detect recursion. */
6426 FOR_EACH_VEC_SAFE_ELT (default_arg_context, i, t)
6427 if (t == fn)
6429 if (complain & tf_error)
6430 error ("recursive evaluation of default argument for %q#D", fn);
6431 return error_mark_node;
6434 /* If the ARG is an unparsed default argument expression, the
6435 conversion cannot be performed. */
6436 if (TREE_CODE (arg) == DEFAULT_ARG)
6438 if (complain & tf_error)
6439 error ("call to %qD uses the default argument for parameter %P, which "
6440 "is not yet defined", fn, parmnum);
6441 return error_mark_node;
6444 push_defarg_context (fn);
6446 if (fn && DECL_TEMPLATE_INFO (fn))
6447 arg = tsubst_default_argument (fn, type, arg, complain);
6449 /* Due to:
6451 [dcl.fct.default]
6453 The names in the expression are bound, and the semantic
6454 constraints are checked, at the point where the default
6455 expressions appears.
6457 we must not perform access checks here. */
6458 push_deferring_access_checks (dk_no_check);
6459 /* We must make a copy of ARG, in case subsequent processing
6460 alters any part of it. */
6461 arg = break_out_target_exprs (arg);
6462 if (TREE_CODE (arg) == CONSTRUCTOR)
6464 arg = digest_init (type, arg, complain);
6465 arg = convert_for_initialization (0, type, arg, LOOKUP_IMPLICIT,
6466 ICR_DEFAULT_ARGUMENT, fn, parmnum,
6467 complain);
6469 else
6471 arg = convert_for_initialization (0, type, arg, LOOKUP_IMPLICIT,
6472 ICR_DEFAULT_ARGUMENT, fn, parmnum,
6473 complain);
6474 arg = convert_for_arg_passing (type, arg, complain);
6476 pop_deferring_access_checks();
6478 pop_defarg_context ();
6480 return arg;
6483 /* Returns the type which will really be used for passing an argument of
6484 type TYPE. */
6486 tree
6487 type_passed_as (tree type)
6489 /* Pass classes with copy ctors by invisible reference. */
6490 if (TREE_ADDRESSABLE (type))
6492 type = build_reference_type (type);
6493 /* There are no other pointers to this temporary. */
6494 type = cp_build_qualified_type (type, TYPE_QUAL_RESTRICT);
6496 else if (targetm.calls.promote_prototypes (type)
6497 && INTEGRAL_TYPE_P (type)
6498 && COMPLETE_TYPE_P (type)
6499 && tree_int_cst_lt (TYPE_SIZE (type), TYPE_SIZE (integer_type_node)))
6500 type = integer_type_node;
6502 return type;
6505 /* Actually perform the appropriate conversion. */
6507 tree
6508 convert_for_arg_passing (tree type, tree val, tsubst_flags_t complain)
6510 tree bitfield_type;
6512 /* If VAL is a bitfield, then -- since it has already been converted
6513 to TYPE -- it cannot have a precision greater than TYPE.
6515 If it has a smaller precision, we must widen it here. For
6516 example, passing "int f:3;" to a function expecting an "int" will
6517 not result in any conversion before this point.
6519 If the precision is the same we must not risk widening. For
6520 example, the COMPONENT_REF for a 32-bit "long long" bitfield will
6521 often have type "int", even though the C++ type for the field is
6522 "long long". If the value is being passed to a function
6523 expecting an "int", then no conversions will be required. But,
6524 if we call convert_bitfield_to_declared_type, the bitfield will
6525 be converted to "long long". */
6526 bitfield_type = is_bitfield_expr_with_lowered_type (val);
6527 if (bitfield_type
6528 && TYPE_PRECISION (TREE_TYPE (val)) < TYPE_PRECISION (type))
6529 val = convert_to_integer (TYPE_MAIN_VARIANT (bitfield_type), val);
6531 if (val == error_mark_node)
6533 /* Pass classes with copy ctors by invisible reference. */
6534 else if (TREE_ADDRESSABLE (type))
6535 val = build1 (ADDR_EXPR, build_reference_type (type), val);
6536 else if (targetm.calls.promote_prototypes (type)
6537 && INTEGRAL_TYPE_P (type)
6538 && COMPLETE_TYPE_P (type)
6539 && tree_int_cst_lt (TYPE_SIZE (type), TYPE_SIZE (integer_type_node)))
6540 val = cp_perform_integral_promotions (val, complain);
6541 if ((complain & tf_warning)
6542 && warn_suggest_attribute_format)
6544 tree rhstype = TREE_TYPE (val);
6545 const enum tree_code coder = TREE_CODE (rhstype);
6546 const enum tree_code codel = TREE_CODE (type);
6547 if ((codel == POINTER_TYPE || codel == REFERENCE_TYPE)
6548 && coder == codel
6549 && check_missing_format_attribute (type, rhstype))
6550 warning (OPT_Wsuggest_attribute_format,
6551 "argument of function call might be a candidate for a format attribute");
6553 return val;
6556 /* Returns true iff FN is a function with magic varargs, i.e. ones for
6557 which no conversions at all should be done. This is true for some
6558 builtins which don't act like normal functions. */
6560 bool
6561 magic_varargs_p (tree fn)
6563 if (flag_enable_cilkplus && is_cilkplus_reduce_builtin (fn) != BUILT_IN_NONE)
6564 return true;
6566 if (DECL_BUILT_IN (fn))
6567 switch (DECL_FUNCTION_CODE (fn))
6569 case BUILT_IN_CLASSIFY_TYPE:
6570 case BUILT_IN_CONSTANT_P:
6571 case BUILT_IN_NEXT_ARG:
6572 case BUILT_IN_VA_START:
6573 return true;
6575 default:;
6576 return lookup_attribute ("type generic",
6577 TYPE_ATTRIBUTES (TREE_TYPE (fn))) != 0;
6580 return false;
6583 /* Returns the decl of the dispatcher function if FN is a function version. */
6585 tree
6586 get_function_version_dispatcher (tree fn)
6588 tree dispatcher_decl = NULL;
6590 gcc_assert (TREE_CODE (fn) == FUNCTION_DECL
6591 && DECL_FUNCTION_VERSIONED (fn));
6593 gcc_assert (targetm.get_function_versions_dispatcher);
6594 dispatcher_decl = targetm.get_function_versions_dispatcher (fn);
6596 if (dispatcher_decl == NULL)
6598 error_at (input_location, "use of multiversioned function "
6599 "without a default");
6600 return NULL;
6603 retrofit_lang_decl (dispatcher_decl);
6604 gcc_assert (dispatcher_decl != NULL);
6605 return dispatcher_decl;
6608 /* fn is a function version dispatcher that is marked used. Mark all the
6609 semantically identical function versions it will dispatch as used. */
6611 void
6612 mark_versions_used (tree fn)
6614 struct cgraph_node *node;
6615 struct cgraph_function_version_info *node_v;
6616 struct cgraph_function_version_info *it_v;
6618 gcc_assert (TREE_CODE (fn) == FUNCTION_DECL);
6620 node = cgraph_get_node (fn);
6621 if (node == NULL)
6622 return;
6624 gcc_assert (node->dispatcher_function);
6626 node_v = get_cgraph_node_version (node);
6627 if (node_v == NULL)
6628 return;
6630 /* All semantically identical versions are chained. Traverse and mark each
6631 one of them as used. */
6632 it_v = node_v->next;
6633 while (it_v != NULL)
6635 mark_used (it_v->this_node->decl);
6636 it_v = it_v->next;
6640 /* Subroutine of the various build_*_call functions. Overload resolution
6641 has chosen a winning candidate CAND; build up a CALL_EXPR accordingly.
6642 ARGS is a TREE_LIST of the unconverted arguments to the call. FLAGS is a
6643 bitmask of various LOOKUP_* flags which apply to the call itself. */
6645 static tree
6646 build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain)
6648 tree fn = cand->fn;
6649 const vec<tree, va_gc> *args = cand->args;
6650 tree first_arg = cand->first_arg;
6651 conversion **convs = cand->convs;
6652 conversion *conv;
6653 tree parm = TYPE_ARG_TYPES (TREE_TYPE (fn));
6654 int parmlen;
6655 tree val;
6656 int i = 0;
6657 int j = 0;
6658 unsigned int arg_index = 0;
6659 int is_method = 0;
6660 int nargs;
6661 tree *argarray;
6662 bool already_used = false;
6664 /* In a template, there is no need to perform all of the work that
6665 is normally done. We are only interested in the type of the call
6666 expression, i.e., the return type of the function. Any semantic
6667 errors will be deferred until the template is instantiated. */
6668 if (processing_template_decl)
6670 tree expr, addr;
6671 tree return_type;
6672 const tree *argarray;
6673 unsigned int nargs;
6675 return_type = TREE_TYPE (TREE_TYPE (fn));
6676 nargs = vec_safe_length (args);
6677 if (first_arg == NULL_TREE)
6678 argarray = args->address ();
6679 else
6681 tree *alcarray;
6682 unsigned int ix;
6683 tree arg;
6685 ++nargs;
6686 alcarray = XALLOCAVEC (tree, nargs);
6687 alcarray[0] = first_arg;
6688 FOR_EACH_VEC_SAFE_ELT (args, ix, arg)
6689 alcarray[ix + 1] = arg;
6690 argarray = alcarray;
6693 addr = build_addr_func (fn, complain);
6694 if (addr == error_mark_node)
6695 return error_mark_node;
6696 expr = build_call_array_loc (input_location, return_type,
6697 addr, nargs, argarray);
6698 if (TREE_THIS_VOLATILE (fn) && cfun)
6699 current_function_returns_abnormally = 1;
6700 return convert_from_reference (expr);
6703 /* Give any warnings we noticed during overload resolution. */
6704 if (cand->warnings && (complain & tf_warning))
6706 struct candidate_warning *w;
6707 for (w = cand->warnings; w; w = w->next)
6708 joust (cand, w->loser, 1, complain);
6711 /* Make =delete work with SFINAE. */
6712 if (DECL_DELETED_FN (fn) && !(complain & tf_error))
6713 return error_mark_node;
6715 if (DECL_FUNCTION_MEMBER_P (fn))
6717 tree access_fn;
6718 /* If FN is a template function, two cases must be considered.
6719 For example:
6721 struct A {
6722 protected:
6723 template <class T> void f();
6725 template <class T> struct B {
6726 protected:
6727 void g();
6729 struct C : A, B<int> {
6730 using A::f; // #1
6731 using B<int>::g; // #2
6734 In case #1 where `A::f' is a member template, DECL_ACCESS is
6735 recorded in the primary template but not in its specialization.
6736 We check access of FN using its primary template.
6738 In case #2, where `B<int>::g' has a DECL_TEMPLATE_INFO simply
6739 because it is a member of class template B, DECL_ACCESS is
6740 recorded in the specialization `B<int>::g'. We cannot use its
6741 primary template because `B<T>::g' and `B<int>::g' may have
6742 different access. */
6743 if (DECL_TEMPLATE_INFO (fn)
6744 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (fn)))
6745 access_fn = DECL_TI_TEMPLATE (fn);
6746 else
6747 access_fn = fn;
6748 if (!perform_or_defer_access_check (cand->access_path, access_fn,
6749 fn, complain))
6750 return error_mark_node;
6753 /* If we're checking for implicit delete, don't bother with argument
6754 conversions. */
6755 if (flags & LOOKUP_SPECULATIVE)
6757 if (DECL_DELETED_FN (fn))
6759 if (complain & tf_error)
6760 mark_used (fn);
6761 return error_mark_node;
6763 if (cand->viable == 1)
6764 return fn;
6765 else if (!(complain & tf_error))
6766 /* Reject bad conversions now. */
6767 return error_mark_node;
6768 /* else continue to get conversion error. */
6771 /* N3276 magic doesn't apply to nested calls. */
6772 int decltype_flag = (complain & tf_decltype);
6773 complain &= ~tf_decltype;
6775 /* Find maximum size of vector to hold converted arguments. */
6776 parmlen = list_length (parm);
6777 nargs = vec_safe_length (args) + (first_arg != NULL_TREE ? 1 : 0);
6778 if (parmlen > nargs)
6779 nargs = parmlen;
6780 argarray = XALLOCAVEC (tree, nargs);
6782 /* The implicit parameters to a constructor are not considered by overload
6783 resolution, and must be of the proper type. */
6784 if (DECL_CONSTRUCTOR_P (fn))
6786 tree object_arg;
6787 if (first_arg != NULL_TREE)
6789 object_arg = first_arg;
6790 first_arg = NULL_TREE;
6792 else
6794 object_arg = (*args)[arg_index];
6795 ++arg_index;
6797 argarray[j++] = build_this (object_arg);
6798 parm = TREE_CHAIN (parm);
6799 /* We should never try to call the abstract constructor. */
6800 gcc_assert (!DECL_HAS_IN_CHARGE_PARM_P (fn));
6802 if (DECL_HAS_VTT_PARM_P (fn))
6804 argarray[j++] = (*args)[arg_index];
6805 ++arg_index;
6806 parm = TREE_CHAIN (parm);
6809 /* Bypass access control for 'this' parameter. */
6810 else if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
6812 tree parmtype = TREE_VALUE (parm);
6813 tree arg = build_this (first_arg != NULL_TREE
6814 ? first_arg
6815 : (*args)[arg_index]);
6816 tree argtype = TREE_TYPE (arg);
6817 tree converted_arg;
6818 tree base_binfo;
6820 if (convs[i]->bad_p)
6822 if (complain & tf_error)
6823 permerror (input_location, "passing %qT as %<this%> argument of %q#D discards qualifiers",
6824 TREE_TYPE (argtype), fn);
6825 else
6826 return error_mark_node;
6829 /* See if the function member or the whole class type is declared
6830 final and the call can be devirtualized. */
6831 if (DECL_FINAL_P (fn)
6832 || CLASSTYPE_FINAL (TYPE_METHOD_BASETYPE (TREE_TYPE (fn))))
6833 flags |= LOOKUP_NONVIRTUAL;
6835 /* [class.mfct.nonstatic]: If a nonstatic member function of a class
6836 X is called for an object that is not of type X, or of a type
6837 derived from X, the behavior is undefined.
6839 So we can assume that anything passed as 'this' is non-null, and
6840 optimize accordingly. */
6841 gcc_assert (TYPE_PTR_P (parmtype));
6842 /* Convert to the base in which the function was declared. */
6843 gcc_assert (cand->conversion_path != NULL_TREE);
6844 converted_arg = build_base_path (PLUS_EXPR,
6845 arg,
6846 cand->conversion_path,
6847 1, complain);
6848 /* Check that the base class is accessible. */
6849 if (!accessible_base_p (TREE_TYPE (argtype),
6850 BINFO_TYPE (cand->conversion_path), true))
6852 if (complain & tf_error)
6853 error ("%qT is not an accessible base of %qT",
6854 BINFO_TYPE (cand->conversion_path),
6855 TREE_TYPE (argtype));
6856 else
6857 return error_mark_node;
6859 /* If fn was found by a using declaration, the conversion path
6860 will be to the derived class, not the base declaring fn. We
6861 must convert from derived to base. */
6862 base_binfo = lookup_base (TREE_TYPE (TREE_TYPE (converted_arg)),
6863 TREE_TYPE (parmtype), ba_unique,
6864 NULL, complain);
6865 converted_arg = build_base_path (PLUS_EXPR, converted_arg,
6866 base_binfo, 1, complain);
6868 argarray[j++] = converted_arg;
6869 parm = TREE_CHAIN (parm);
6870 if (first_arg != NULL_TREE)
6871 first_arg = NULL_TREE;
6872 else
6873 ++arg_index;
6874 ++i;
6875 is_method = 1;
6878 gcc_assert (first_arg == NULL_TREE);
6879 for (; arg_index < vec_safe_length (args) && parm;
6880 parm = TREE_CHAIN (parm), ++arg_index, ++i)
6882 tree type = TREE_VALUE (parm);
6883 tree arg = (*args)[arg_index];
6884 bool conversion_warning = true;
6886 conv = convs[i];
6888 /* If the argument is NULL and used to (implicitly) instantiate a
6889 template function (and bind one of the template arguments to
6890 the type of 'long int'), we don't want to warn about passing NULL
6891 to non-pointer argument.
6892 For example, if we have this template function:
6894 template<typename T> void func(T x) {}
6896 we want to warn (when -Wconversion is enabled) in this case:
6898 void foo() {
6899 func<int>(NULL);
6902 but not in this case:
6904 void foo() {
6905 func(NULL);
6908 if (arg == null_node
6909 && DECL_TEMPLATE_INFO (fn)
6910 && cand->template_decl
6911 && !(flags & LOOKUP_EXPLICIT_TMPL_ARGS))
6912 conversion_warning = false;
6914 /* Warn about initializer_list deduction that isn't currently in the
6915 working draft. */
6916 if (cxx_dialect > cxx98
6917 && flag_deduce_init_list
6918 && cand->template_decl
6919 && is_std_init_list (non_reference (type))
6920 && BRACE_ENCLOSED_INITIALIZER_P (arg))
6922 tree tmpl = TI_TEMPLATE (cand->template_decl);
6923 tree realparm = chain_index (j, DECL_ARGUMENTS (cand->fn));
6924 tree patparm = get_pattern_parm (realparm, tmpl);
6925 tree pattype = TREE_TYPE (patparm);
6926 if (PACK_EXPANSION_P (pattype))
6927 pattype = PACK_EXPANSION_PATTERN (pattype);
6928 pattype = non_reference (pattype);
6930 if (TREE_CODE (pattype) == TEMPLATE_TYPE_PARM
6931 && (cand->explicit_targs == NULL_TREE
6932 || (TREE_VEC_LENGTH (cand->explicit_targs)
6933 <= TEMPLATE_TYPE_IDX (pattype))))
6935 pedwarn (input_location, 0, "deducing %qT as %qT",
6936 non_reference (TREE_TYPE (patparm)),
6937 non_reference (type));
6938 pedwarn (input_location, 0, " in call to %q+D", cand->fn);
6939 pedwarn (input_location, 0,
6940 " (you can disable this with -fno-deduce-init-list)");
6943 val = convert_like_with_context (conv, arg, fn, i - is_method,
6944 conversion_warning
6945 ? complain
6946 : complain & (~tf_warning));
6948 val = convert_for_arg_passing (type, val, complain);
6950 if (val == error_mark_node)
6951 return error_mark_node;
6952 else
6953 argarray[j++] = val;
6956 /* Default arguments */
6957 for (; parm && parm != void_list_node; parm = TREE_CHAIN (parm), i++)
6959 if (TREE_VALUE (parm) == error_mark_node)
6960 return error_mark_node;
6961 argarray[j++] = convert_default_arg (TREE_VALUE (parm),
6962 TREE_PURPOSE (parm),
6963 fn, i - is_method,
6964 complain);
6967 /* Ellipsis */
6968 for (; arg_index < vec_safe_length (args); ++arg_index)
6970 tree a = (*args)[arg_index];
6971 if (magic_varargs_p (fn))
6972 /* Do no conversions for magic varargs. */
6973 a = mark_type_use (a);
6974 else
6975 a = convert_arg_to_ellipsis (a, complain);
6976 argarray[j++] = a;
6979 gcc_assert (j <= nargs);
6980 nargs = j;
6982 check_function_arguments (TREE_TYPE (fn), nargs, argarray);
6984 /* Avoid actually calling copy constructors and copy assignment operators,
6985 if possible. */
6987 if (! flag_elide_constructors)
6988 /* Do things the hard way. */;
6989 else if (cand->num_convs == 1
6990 && (DECL_COPY_CONSTRUCTOR_P (fn)
6991 || DECL_MOVE_CONSTRUCTOR_P (fn)))
6993 tree targ;
6994 tree arg = argarray[num_artificial_parms_for (fn)];
6995 tree fa;
6996 bool trivial = trivial_fn_p (fn);
6998 /* Pull out the real argument, disregarding const-correctness. */
6999 targ = arg;
7000 while (CONVERT_EXPR_P (targ)
7001 || TREE_CODE (targ) == NON_LVALUE_EXPR)
7002 targ = TREE_OPERAND (targ, 0);
7003 if (TREE_CODE (targ) == ADDR_EXPR)
7005 targ = TREE_OPERAND (targ, 0);
7006 if (!same_type_ignoring_top_level_qualifiers_p
7007 (TREE_TYPE (TREE_TYPE (arg)), TREE_TYPE (targ)))
7008 targ = NULL_TREE;
7010 else
7011 targ = NULL_TREE;
7013 if (targ)
7014 arg = targ;
7015 else
7016 arg = cp_build_indirect_ref (arg, RO_NULL, complain);
7018 /* [class.copy]: the copy constructor is implicitly defined even if
7019 the implementation elided its use. */
7020 if (!trivial || DECL_DELETED_FN (fn))
7022 mark_used (fn);
7023 already_used = true;
7026 /* If we're creating a temp and we already have one, don't create a
7027 new one. If we're not creating a temp but we get one, use
7028 INIT_EXPR to collapse the temp into our target. Otherwise, if the
7029 ctor is trivial, do a bitwise copy with a simple TARGET_EXPR for a
7030 temp or an INIT_EXPR otherwise. */
7031 fa = argarray[0];
7032 if (integer_zerop (fa))
7034 if (TREE_CODE (arg) == TARGET_EXPR)
7035 return arg;
7036 else if (trivial)
7037 return force_target_expr (DECL_CONTEXT (fn), arg, complain);
7039 else if (TREE_CODE (arg) == TARGET_EXPR || trivial)
7041 tree to = stabilize_reference (cp_build_indirect_ref (fa, RO_NULL,
7042 complain));
7044 val = build2 (INIT_EXPR, DECL_CONTEXT (fn), to, arg);
7045 return val;
7048 else if (DECL_OVERLOADED_OPERATOR_P (fn) == NOP_EXPR
7049 && trivial_fn_p (fn)
7050 && !DECL_DELETED_FN (fn))
7052 tree to = stabilize_reference
7053 (cp_build_indirect_ref (argarray[0], RO_NULL, complain));
7054 tree type = TREE_TYPE (to);
7055 tree as_base = CLASSTYPE_AS_BASE (type);
7056 tree arg = argarray[1];
7058 if (is_really_empty_class (type))
7060 /* Avoid copying empty classes. */
7061 val = build2 (COMPOUND_EXPR, void_type_node, to, arg);
7062 TREE_NO_WARNING (val) = 1;
7063 val = build2 (COMPOUND_EXPR, type, val, to);
7064 TREE_NO_WARNING (val) = 1;
7066 else if (tree_int_cst_equal (TYPE_SIZE (type), TYPE_SIZE (as_base)))
7068 arg = cp_build_indirect_ref (arg, RO_NULL, complain);
7069 val = build2 (MODIFY_EXPR, TREE_TYPE (to), to, arg);
7071 else
7073 /* We must only copy the non-tail padding parts. */
7074 tree arg0, arg2, t;
7075 tree array_type, alias_set;
7077 arg2 = TYPE_SIZE_UNIT (as_base);
7078 arg0 = cp_build_addr_expr (to, complain);
7080 array_type = build_array_type (char_type_node,
7081 build_index_type
7082 (size_binop (MINUS_EXPR,
7083 arg2, size_int (1))));
7084 alias_set = build_int_cst (build_pointer_type (type), 0);
7085 t = build2 (MODIFY_EXPR, void_type_node,
7086 build2 (MEM_REF, array_type, arg0, alias_set),
7087 build2 (MEM_REF, array_type, arg, alias_set));
7088 val = build2 (COMPOUND_EXPR, TREE_TYPE (to), t, to);
7089 TREE_NO_WARNING (val) = 1;
7092 return val;
7094 else if (DECL_DESTRUCTOR_P (fn)
7095 && trivial_fn_p (fn)
7096 && !DECL_DELETED_FN (fn))
7097 return fold_convert (void_type_node, argarray[0]);
7098 /* FIXME handle trivial default constructor, too. */
7100 /* For calls to a multi-versioned function, overload resolution
7101 returns the function with the highest target priority, that is,
7102 the version that will checked for dispatching first. If this
7103 version is inlinable, a direct call to this version can be made
7104 otherwise the call should go through the dispatcher. */
7106 if (DECL_FUNCTION_VERSIONED (fn)
7107 && (current_function_decl == NULL
7108 || !targetm.target_option.can_inline_p (current_function_decl, fn)))
7110 fn = get_function_version_dispatcher (fn);
7111 if (fn == NULL)
7112 return NULL;
7113 if (!already_used)
7114 mark_versions_used (fn);
7117 if (!already_used
7118 && !mark_used (fn))
7119 return error_mark_node;
7121 if (DECL_VINDEX (fn) && (flags & LOOKUP_NONVIRTUAL) == 0
7122 /* Don't mess with virtual lookup in fold_non_dependent_expr; virtual
7123 functions can't be constexpr. */
7124 && !in_template_function ())
7126 tree t;
7127 tree binfo = lookup_base (TREE_TYPE (TREE_TYPE (argarray[0])),
7128 DECL_CONTEXT (fn),
7129 ba_any, NULL, complain);
7130 gcc_assert (binfo && binfo != error_mark_node);
7132 /* Warn about deprecated virtual functions now, since we're about
7133 to throw away the decl. */
7134 if (TREE_DEPRECATED (fn))
7135 warn_deprecated_use (fn, NULL_TREE);
7137 argarray[0] = build_base_path (PLUS_EXPR, argarray[0], binfo, 1,
7138 complain);
7139 if (TREE_SIDE_EFFECTS (argarray[0]))
7140 argarray[0] = save_expr (argarray[0]);
7141 t = build_pointer_type (TREE_TYPE (fn));
7142 if (DECL_CONTEXT (fn) && TYPE_JAVA_INTERFACE (DECL_CONTEXT (fn)))
7143 fn = build_java_interface_fn_ref (fn, argarray[0]);
7144 else
7145 fn = build_vfn_ref (argarray[0], DECL_VINDEX (fn));
7146 TREE_TYPE (fn) = t;
7148 else
7150 fn = build_addr_func (fn, complain);
7151 if (fn == error_mark_node)
7152 return error_mark_node;
7155 return build_cxx_call (fn, nargs, argarray, complain|decltype_flag);
7158 /* Build and return a call to FN, using NARGS arguments in ARGARRAY.
7159 This function performs no overload resolution, conversion, or other
7160 high-level operations. */
7162 tree
7163 build_cxx_call (tree fn, int nargs, tree *argarray,
7164 tsubst_flags_t complain)
7166 tree fndecl;
7167 int optimize_sav;
7169 /* Remember roughly where this call is. */
7170 location_t loc = EXPR_LOC_OR_LOC (fn, input_location);
7171 fn = build_call_a (fn, nargs, argarray);
7172 SET_EXPR_LOCATION (fn, loc);
7174 fndecl = get_callee_fndecl (fn);
7176 /* Check that arguments to builtin functions match the expectations. */
7177 if (fndecl
7178 && DECL_BUILT_IN (fndecl)
7179 && DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_NORMAL
7180 && !check_builtin_function_arguments (fndecl, nargs, argarray))
7181 return error_mark_node;
7183 /* If it is a built-in array notation function, then the return type of
7184 the function is the element type of the array passed in as array
7185 notation (i.e. the first parameter of the function). */
7186 if (flag_enable_cilkplus && TREE_CODE (fn) == CALL_EXPR)
7188 enum built_in_function bif =
7189 is_cilkplus_reduce_builtin (CALL_EXPR_FN (fn));
7190 if (bif == BUILT_IN_CILKPLUS_SEC_REDUCE_ADD
7191 || bif == BUILT_IN_CILKPLUS_SEC_REDUCE_MUL
7192 || bif == BUILT_IN_CILKPLUS_SEC_REDUCE_MAX
7193 || bif == BUILT_IN_CILKPLUS_SEC_REDUCE_MIN
7194 || bif == BUILT_IN_CILKPLUS_SEC_REDUCE
7195 || bif == BUILT_IN_CILKPLUS_SEC_REDUCE_MUTATING)
7197 /* for bif == BUILT_IN_CILKPLUS_SEC_REDUCE_ALL_ZERO or
7198 BUILT_IN_CILKPLUS_SEC_REDUCE_ANY_ZERO or
7199 BUILT_IN_CILKPLUS_SEC_REDUCE_ANY_NONZERO or
7200 BUILT_IN_CILKPLUS_SEC_REDUCE_ALL_NONZERO or
7201 BUILT_IN_CILKPLUS_SEC_REDUCE_MIN_IND or
7202 BUILT_IN_CILKPLUS_SEC_REDUCE_MAX_IND
7203 The pre-defined return-type is the correct one. */
7204 tree array_ntn = CALL_EXPR_ARG (fn, 0);
7205 TREE_TYPE (fn) = TREE_TYPE (array_ntn);
7206 return fn;
7210 /* Some built-in function calls will be evaluated at compile-time in
7211 fold (). Set optimize to 1 when folding __builtin_constant_p inside
7212 a constexpr function so that fold_builtin_1 doesn't fold it to 0. */
7213 optimize_sav = optimize;
7214 if (!optimize && fndecl && DECL_IS_BUILTIN_CONSTANT_P (fndecl)
7215 && current_function_decl
7216 && DECL_DECLARED_CONSTEXPR_P (current_function_decl))
7217 optimize = 1;
7218 fn = fold_if_not_in_template (fn);
7219 optimize = optimize_sav;
7221 if (VOID_TYPE_P (TREE_TYPE (fn)))
7222 return fn;
7224 /* 5.2.2/11: If a function call is a prvalue of object type: if the
7225 function call is either the operand of a decltype-specifier or the
7226 right operand of a comma operator that is the operand of a
7227 decltype-specifier, a temporary object is not introduced for the
7228 prvalue. The type of the prvalue may be incomplete. */
7229 if (!(complain & tf_decltype))
7231 fn = require_complete_type_sfinae (fn, complain);
7232 if (fn == error_mark_node)
7233 return error_mark_node;
7235 if (MAYBE_CLASS_TYPE_P (TREE_TYPE (fn)))
7236 fn = build_cplus_new (TREE_TYPE (fn), fn, complain);
7238 return convert_from_reference (fn);
7241 static GTY(()) tree java_iface_lookup_fn;
7243 /* Make an expression which yields the address of the Java interface
7244 method FN. This is achieved by generating a call to libjava's
7245 _Jv_LookupInterfaceMethodIdx(). */
7247 static tree
7248 build_java_interface_fn_ref (tree fn, tree instance)
7250 tree lookup_fn, method, idx;
7251 tree klass_ref, iface, iface_ref;
7252 int i;
7254 if (!java_iface_lookup_fn)
7256 tree ftype = build_function_type_list (ptr_type_node,
7257 ptr_type_node, ptr_type_node,
7258 java_int_type_node, NULL_TREE);
7259 java_iface_lookup_fn
7260 = add_builtin_function ("_Jv_LookupInterfaceMethodIdx", ftype,
7261 0, NOT_BUILT_IN, NULL, NULL_TREE);
7264 /* Look up the pointer to the runtime java.lang.Class object for `instance'.
7265 This is the first entry in the vtable. */
7266 klass_ref = build_vtbl_ref (cp_build_indirect_ref (instance, RO_NULL,
7267 tf_warning_or_error),
7268 integer_zero_node);
7270 /* Get the java.lang.Class pointer for the interface being called. */
7271 iface = DECL_CONTEXT (fn);
7272 iface_ref = lookup_field (iface, get_identifier ("class$"), 0, false);
7273 if (!iface_ref || !VAR_P (iface_ref)
7274 || DECL_CONTEXT (iface_ref) != iface)
7276 error ("could not find class$ field in java interface type %qT",
7277 iface);
7278 return error_mark_node;
7280 iface_ref = build_address (iface_ref);
7281 iface_ref = convert (build_pointer_type (iface), iface_ref);
7283 /* Determine the itable index of FN. */
7284 i = 1;
7285 for (method = TYPE_METHODS (iface); method; method = DECL_CHAIN (method))
7287 if (!DECL_VIRTUAL_P (method))
7288 continue;
7289 if (fn == method)
7290 break;
7291 i++;
7293 idx = build_int_cst (NULL_TREE, i);
7295 lookup_fn = build1 (ADDR_EXPR,
7296 build_pointer_type (TREE_TYPE (java_iface_lookup_fn)),
7297 java_iface_lookup_fn);
7298 return build_call_nary (ptr_type_node, lookup_fn,
7299 3, klass_ref, iface_ref, idx);
7302 /* Returns the value to use for the in-charge parameter when making a
7303 call to a function with the indicated NAME.
7305 FIXME:Can't we find a neater way to do this mapping? */
7307 tree
7308 in_charge_arg_for_name (tree name)
7310 if (name == base_ctor_identifier
7311 || name == base_dtor_identifier)
7312 return integer_zero_node;
7313 else if (name == complete_ctor_identifier)
7314 return integer_one_node;
7315 else if (name == complete_dtor_identifier)
7316 return integer_two_node;
7317 else if (name == deleting_dtor_identifier)
7318 return integer_three_node;
7320 /* This function should only be called with one of the names listed
7321 above. */
7322 gcc_unreachable ();
7323 return NULL_TREE;
7326 /* Build a call to a constructor, destructor, or an assignment
7327 operator for INSTANCE, an expression with class type. NAME
7328 indicates the special member function to call; *ARGS are the
7329 arguments. ARGS may be NULL. This may change ARGS. BINFO
7330 indicates the base of INSTANCE that is to be passed as the `this'
7331 parameter to the member function called.
7333 FLAGS are the LOOKUP_* flags to use when processing the call.
7335 If NAME indicates a complete object constructor, INSTANCE may be
7336 NULL_TREE. In this case, the caller will call build_cplus_new to
7337 store the newly constructed object into a VAR_DECL. */
7339 tree
7340 build_special_member_call (tree instance, tree name, vec<tree, va_gc> **args,
7341 tree binfo, int flags, tsubst_flags_t complain)
7343 tree fns;
7344 /* The type of the subobject to be constructed or destroyed. */
7345 tree class_type;
7346 vec<tree, va_gc> *allocated = NULL;
7347 tree ret;
7349 gcc_assert (name == complete_ctor_identifier
7350 || name == base_ctor_identifier
7351 || name == complete_dtor_identifier
7352 || name == base_dtor_identifier
7353 || name == deleting_dtor_identifier
7354 || name == ansi_assopname (NOP_EXPR));
7355 if (TYPE_P (binfo))
7357 /* Resolve the name. */
7358 if (!complete_type_or_maybe_complain (binfo, NULL_TREE, complain))
7359 return error_mark_node;
7361 binfo = TYPE_BINFO (binfo);
7364 gcc_assert (binfo != NULL_TREE);
7366 class_type = BINFO_TYPE (binfo);
7368 /* Handle the special case where INSTANCE is NULL_TREE. */
7369 if (name == complete_ctor_identifier && !instance)
7371 instance = build_int_cst (build_pointer_type (class_type), 0);
7372 instance = build1 (INDIRECT_REF, class_type, instance);
7374 else
7376 if (name == complete_dtor_identifier
7377 || name == base_dtor_identifier
7378 || name == deleting_dtor_identifier)
7379 gcc_assert (args == NULL || vec_safe_is_empty (*args));
7381 /* Convert to the base class, if necessary. */
7382 if (!same_type_ignoring_top_level_qualifiers_p
7383 (TREE_TYPE (instance), BINFO_TYPE (binfo)))
7385 if (name != ansi_assopname (NOP_EXPR))
7386 /* For constructors and destructors, either the base is
7387 non-virtual, or it is virtual but we are doing the
7388 conversion from a constructor or destructor for the
7389 complete object. In either case, we can convert
7390 statically. */
7391 instance = convert_to_base_statically (instance, binfo);
7392 else
7393 /* However, for assignment operators, we must convert
7394 dynamically if the base is virtual. */
7395 instance = build_base_path (PLUS_EXPR, instance,
7396 binfo, /*nonnull=*/1, complain);
7400 gcc_assert (instance != NULL_TREE);
7402 fns = lookup_fnfields (binfo, name, 1);
7404 /* When making a call to a constructor or destructor for a subobject
7405 that uses virtual base classes, pass down a pointer to a VTT for
7406 the subobject. */
7407 if ((name == base_ctor_identifier
7408 || name == base_dtor_identifier)
7409 && CLASSTYPE_VBASECLASSES (class_type))
7411 tree vtt;
7412 tree sub_vtt;
7414 /* If the current function is a complete object constructor
7415 or destructor, then we fetch the VTT directly.
7416 Otherwise, we look it up using the VTT we were given. */
7417 vtt = DECL_CHAIN (CLASSTYPE_VTABLES (current_class_type));
7418 vtt = decay_conversion (vtt, complain);
7419 if (vtt == error_mark_node)
7420 return error_mark_node;
7421 vtt = build3 (COND_EXPR, TREE_TYPE (vtt),
7422 build2 (EQ_EXPR, boolean_type_node,
7423 current_in_charge_parm, integer_zero_node),
7424 current_vtt_parm,
7425 vtt);
7426 if (BINFO_SUBVTT_INDEX (binfo))
7427 sub_vtt = fold_build_pointer_plus (vtt, BINFO_SUBVTT_INDEX (binfo));
7428 else
7429 sub_vtt = vtt;
7431 if (args == NULL)
7433 allocated = make_tree_vector ();
7434 args = &allocated;
7437 vec_safe_insert (*args, 0, sub_vtt);
7440 ret = build_new_method_call (instance, fns, args,
7441 TYPE_BINFO (BINFO_TYPE (binfo)),
7442 flags, /*fn=*/NULL,
7443 complain);
7445 if (allocated != NULL)
7446 release_tree_vector (allocated);
7448 if ((complain & tf_error)
7449 && (flags & LOOKUP_DELEGATING_CONS)
7450 && name == complete_ctor_identifier
7451 && TREE_CODE (ret) == CALL_EXPR
7452 && (DECL_ABSTRACT_ORIGIN (TREE_OPERAND (CALL_EXPR_FN (ret), 0))
7453 == current_function_decl))
7454 error ("constructor delegates to itself");
7456 return ret;
7459 /* Return the NAME, as a C string. The NAME indicates a function that
7460 is a member of TYPE. *FREE_P is set to true if the caller must
7461 free the memory returned.
7463 Rather than go through all of this, we should simply set the names
7464 of constructors and destructors appropriately, and dispense with
7465 ctor_identifier, dtor_identifier, etc. */
7467 static char *
7468 name_as_c_string (tree name, tree type, bool *free_p)
7470 char *pretty_name;
7472 /* Assume that we will not allocate memory. */
7473 *free_p = false;
7474 /* Constructors and destructors are special. */
7475 if (IDENTIFIER_CTOR_OR_DTOR_P (name))
7477 pretty_name
7478 = CONST_CAST (char *, identifier_to_locale (IDENTIFIER_POINTER (constructor_name (type))));
7479 /* For a destructor, add the '~'. */
7480 if (name == complete_dtor_identifier
7481 || name == base_dtor_identifier
7482 || name == deleting_dtor_identifier)
7484 pretty_name = concat ("~", pretty_name, NULL);
7485 /* Remember that we need to free the memory allocated. */
7486 *free_p = true;
7489 else if (IDENTIFIER_TYPENAME_P (name))
7491 pretty_name = concat ("operator ",
7492 type_as_string_translate (TREE_TYPE (name),
7493 TFF_PLAIN_IDENTIFIER),
7494 NULL);
7495 /* Remember that we need to free the memory allocated. */
7496 *free_p = true;
7498 else
7499 pretty_name = CONST_CAST (char *, identifier_to_locale (IDENTIFIER_POINTER (name)));
7501 return pretty_name;
7504 /* Build a call to "INSTANCE.FN (ARGS)". If FN_P is non-NULL, it will
7505 be set, upon return, to the function called. ARGS may be NULL.
7506 This may change ARGS. */
7508 static tree
7509 build_new_method_call_1 (tree instance, tree fns, vec<tree, va_gc> **args,
7510 tree conversion_path, int flags,
7511 tree *fn_p, tsubst_flags_t complain)
7513 struct z_candidate *candidates = 0, *cand;
7514 tree explicit_targs = NULL_TREE;
7515 tree basetype = NULL_TREE;
7516 tree access_binfo, binfo;
7517 tree optype;
7518 tree first_mem_arg = NULL_TREE;
7519 tree name;
7520 bool skip_first_for_error;
7521 vec<tree, va_gc> *user_args;
7522 tree call;
7523 tree fn;
7524 int template_only = 0;
7525 bool any_viable_p;
7526 tree orig_instance;
7527 tree orig_fns;
7528 vec<tree, va_gc> *orig_args = NULL;
7529 void *p;
7531 gcc_assert (instance != NULL_TREE);
7533 /* We don't know what function we're going to call, yet. */
7534 if (fn_p)
7535 *fn_p = NULL_TREE;
7537 if (error_operand_p (instance)
7538 || !fns || error_operand_p (fns))
7539 return error_mark_node;
7541 if (!BASELINK_P (fns))
7543 if (complain & tf_error)
7544 error ("call to non-function %qD", fns);
7545 return error_mark_node;
7548 orig_instance = instance;
7549 orig_fns = fns;
7551 /* Dismantle the baselink to collect all the information we need. */
7552 if (!conversion_path)
7553 conversion_path = BASELINK_BINFO (fns);
7554 access_binfo = BASELINK_ACCESS_BINFO (fns);
7555 binfo = BASELINK_BINFO (fns);
7556 optype = BASELINK_OPTYPE (fns);
7557 fns = BASELINK_FUNCTIONS (fns);
7558 if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
7560 explicit_targs = TREE_OPERAND (fns, 1);
7561 fns = TREE_OPERAND (fns, 0);
7562 template_only = 1;
7564 gcc_assert (TREE_CODE (fns) == FUNCTION_DECL
7565 || TREE_CODE (fns) == TEMPLATE_DECL
7566 || TREE_CODE (fns) == OVERLOAD);
7567 fn = get_first_fn (fns);
7568 name = DECL_NAME (fn);
7570 basetype = TYPE_MAIN_VARIANT (TREE_TYPE (instance));
7571 gcc_assert (CLASS_TYPE_P (basetype));
7573 if (processing_template_decl)
7575 orig_args = args == NULL ? NULL : make_tree_vector_copy (*args);
7576 instance = build_non_dependent_expr (instance);
7577 if (args != NULL)
7578 make_args_non_dependent (*args);
7581 user_args = args == NULL ? NULL : *args;
7582 /* Under DR 147 A::A() is an invalid constructor call,
7583 not a functional cast. */
7584 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (fn))
7586 if (! (complain & tf_error))
7587 return error_mark_node;
7589 if (permerror (input_location,
7590 "cannot call constructor %<%T::%D%> directly",
7591 basetype, name))
7592 inform (input_location, "for a function-style cast, remove the "
7593 "redundant %<::%D%>", name);
7594 call = build_functional_cast (basetype, build_tree_list_vec (user_args),
7595 complain);
7596 return call;
7599 /* Figure out whether to skip the first argument for the error
7600 message we will display to users if an error occurs. We don't
7601 want to display any compiler-generated arguments. The "this"
7602 pointer hasn't been added yet. However, we must remove the VTT
7603 pointer if this is a call to a base-class constructor or
7604 destructor. */
7605 skip_first_for_error = false;
7606 if (IDENTIFIER_CTOR_OR_DTOR_P (name))
7608 /* Callers should explicitly indicate whether they want to construct
7609 the complete object or just the part without virtual bases. */
7610 gcc_assert (name != ctor_identifier);
7611 /* Similarly for destructors. */
7612 gcc_assert (name != dtor_identifier);
7613 /* Remove the VTT pointer, if present. */
7614 if ((name == base_ctor_identifier || name == base_dtor_identifier)
7615 && CLASSTYPE_VBASECLASSES (basetype))
7616 skip_first_for_error = true;
7619 /* Process the argument list. */
7620 if (args != NULL && *args != NULL)
7622 *args = resolve_args (*args, complain);
7623 if (*args == NULL)
7624 return error_mark_node;
7627 /* Consider the object argument to be used even if we end up selecting a
7628 static member function. */
7629 instance = mark_type_use (instance);
7631 /* It's OK to call destructors and constructors on cv-qualified objects.
7632 Therefore, convert the INSTANCE to the unqualified type, if
7633 necessary. */
7634 if (DECL_DESTRUCTOR_P (fn)
7635 || DECL_CONSTRUCTOR_P (fn))
7637 if (!same_type_p (basetype, TREE_TYPE (instance)))
7639 instance = build_this (instance);
7640 instance = build_nop (build_pointer_type (basetype), instance);
7641 instance = build_fold_indirect_ref (instance);
7644 if (DECL_DESTRUCTOR_P (fn))
7645 name = complete_dtor_identifier;
7647 first_mem_arg = instance;
7649 /* Get the high-water mark for the CONVERSION_OBSTACK. */
7650 p = conversion_obstack_alloc (0);
7652 /* If CONSTRUCTOR_IS_DIRECT_INIT is set, this was a T{ } form
7653 initializer, not T({ }). */
7654 if (DECL_CONSTRUCTOR_P (fn) && args != NULL && !vec_safe_is_empty (*args)
7655 && BRACE_ENCLOSED_INITIALIZER_P ((**args)[0])
7656 && CONSTRUCTOR_IS_DIRECT_INIT ((**args)[0]))
7658 tree init_list = (**args)[0];
7659 tree init = NULL_TREE;
7661 gcc_assert ((*args)->length () == 1
7662 && !(flags & LOOKUP_ONLYCONVERTING));
7664 /* If the initializer list has no elements and T is a class type with
7665 a default constructor, the object is value-initialized. Handle
7666 this here so we don't need to handle it wherever we use
7667 build_special_member_call. */
7668 if (CONSTRUCTOR_NELTS (init_list) == 0
7669 && TYPE_HAS_DEFAULT_CONSTRUCTOR (basetype)
7670 /* For a user-provided default constructor, use the normal
7671 mechanisms so that protected access works. */
7672 && !type_has_user_provided_default_constructor (basetype)
7673 && !processing_template_decl)
7674 init = build_value_init (basetype, complain);
7676 /* If BASETYPE is an aggregate, we need to do aggregate
7677 initialization. */
7678 else if (CP_AGGREGATE_TYPE_P (basetype))
7679 init = digest_init (basetype, init_list, complain);
7681 if (init)
7683 if (INDIRECT_REF_P (instance)
7684 && integer_zerop (TREE_OPERAND (instance, 0)))
7685 return get_target_expr_sfinae (init, complain);
7686 init = build2 (INIT_EXPR, TREE_TYPE (instance), instance, init);
7687 TREE_SIDE_EFFECTS (init) = true;
7688 return init;
7691 /* Otherwise go ahead with overload resolution. */
7692 add_list_candidates (fns, first_mem_arg, init_list,
7693 basetype, explicit_targs, template_only,
7694 conversion_path, access_binfo, flags,
7695 &candidates, complain);
7697 else
7699 add_candidates (fns, first_mem_arg, user_args, optype,
7700 explicit_targs, template_only, conversion_path,
7701 access_binfo, flags, &candidates, complain);
7703 any_viable_p = false;
7704 candidates = splice_viable (candidates, pedantic, &any_viable_p);
7706 if (!any_viable_p)
7708 if (complain & tf_error)
7710 if (!COMPLETE_OR_OPEN_TYPE_P (basetype))
7711 cxx_incomplete_type_error (instance, basetype);
7712 else if (optype)
7713 error ("no matching function for call to %<%T::operator %T(%A)%#V%>",
7714 basetype, optype, build_tree_list_vec (user_args),
7715 TREE_TYPE (instance));
7716 else
7718 char *pretty_name;
7719 bool free_p;
7720 tree arglist;
7722 pretty_name = name_as_c_string (name, basetype, &free_p);
7723 arglist = build_tree_list_vec (user_args);
7724 if (skip_first_for_error)
7725 arglist = TREE_CHAIN (arglist);
7726 error ("no matching function for call to %<%T::%s(%A)%#V%>",
7727 basetype, pretty_name, arglist,
7728 TREE_TYPE (instance));
7729 if (free_p)
7730 free (pretty_name);
7732 print_z_candidates (location_of (name), candidates);
7734 call = error_mark_node;
7736 else
7738 cand = tourney (candidates, complain);
7739 if (cand == 0)
7741 char *pretty_name;
7742 bool free_p;
7743 tree arglist;
7745 if (complain & tf_error)
7747 pretty_name = name_as_c_string (name, basetype, &free_p);
7748 arglist = build_tree_list_vec (user_args);
7749 if (skip_first_for_error)
7750 arglist = TREE_CHAIN (arglist);
7751 error ("call of overloaded %<%s(%A)%> is ambiguous", pretty_name,
7752 arglist);
7753 print_z_candidates (location_of (name), candidates);
7754 if (free_p)
7755 free (pretty_name);
7757 call = error_mark_node;
7759 else
7761 fn = cand->fn;
7762 call = NULL_TREE;
7764 if (!(flags & LOOKUP_NONVIRTUAL)
7765 && DECL_PURE_VIRTUAL_P (fn)
7766 && instance == current_class_ref
7767 && (DECL_CONSTRUCTOR_P (current_function_decl)
7768 || DECL_DESTRUCTOR_P (current_function_decl))
7769 && (complain & tf_warning))
7770 /* This is not an error, it is runtime undefined
7771 behavior. */
7772 warning (0, (DECL_CONSTRUCTOR_P (current_function_decl) ?
7773 "pure virtual %q#D called from constructor"
7774 : "pure virtual %q#D called from destructor"),
7775 fn);
7777 if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE
7778 && is_dummy_object (instance))
7780 instance = maybe_resolve_dummy (instance);
7781 if (instance == error_mark_node)
7782 call = error_mark_node;
7783 else if (!is_dummy_object (instance))
7785 /* We captured 'this' in the current lambda now that
7786 we know we really need it. */
7787 cand->first_arg = instance;
7789 else
7791 if (complain & tf_error)
7792 error ("cannot call member function %qD without object",
7793 fn);
7794 call = error_mark_node;
7798 if (call != error_mark_node)
7800 /* Optimize away vtable lookup if we know that this
7801 function can't be overridden. We need to check if
7802 the context and the type where we found fn are the same,
7803 actually FN might be defined in a different class
7804 type because of a using-declaration. In this case, we
7805 do not want to perform a non-virtual call. */
7806 if (DECL_VINDEX (fn) && ! (flags & LOOKUP_NONVIRTUAL)
7807 && same_type_ignoring_top_level_qualifiers_p
7808 (DECL_CONTEXT (fn), BINFO_TYPE (binfo))
7809 && resolves_to_fixed_type_p (instance, 0))
7810 flags |= LOOKUP_NONVIRTUAL;
7811 if (explicit_targs)
7812 flags |= LOOKUP_EXPLICIT_TMPL_ARGS;
7813 /* Now we know what function is being called. */
7814 if (fn_p)
7815 *fn_p = fn;
7816 /* Build the actual CALL_EXPR. */
7817 call = build_over_call (cand, flags, complain);
7818 /* In an expression of the form `a->f()' where `f' turns
7819 out to be a static member function, `a' is
7820 none-the-less evaluated. */
7821 if (TREE_CODE (TREE_TYPE (fn)) != METHOD_TYPE
7822 && !is_dummy_object (instance)
7823 && TREE_SIDE_EFFECTS (instance))
7824 call = build2 (COMPOUND_EXPR, TREE_TYPE (call),
7825 instance, call);
7826 else if (call != error_mark_node
7827 && DECL_DESTRUCTOR_P (cand->fn)
7828 && !VOID_TYPE_P (TREE_TYPE (call)))
7829 /* An explicit call of the form "x->~X()" has type
7830 "void". However, on platforms where destructors
7831 return "this" (i.e., those where
7832 targetm.cxx.cdtor_returns_this is true), such calls
7833 will appear to have a return value of pointer type
7834 to the low-level call machinery. We do not want to
7835 change the low-level machinery, since we want to be
7836 able to optimize "delete f()" on such platforms as
7837 "operator delete(~X(f()))" (rather than generating
7838 "t = f(), ~X(t), operator delete (t)"). */
7839 call = build_nop (void_type_node, call);
7844 if (processing_template_decl && call != error_mark_node)
7846 bool cast_to_void = false;
7848 if (TREE_CODE (call) == COMPOUND_EXPR)
7849 call = TREE_OPERAND (call, 1);
7850 else if (TREE_CODE (call) == NOP_EXPR)
7852 cast_to_void = true;
7853 call = TREE_OPERAND (call, 0);
7855 if (INDIRECT_REF_P (call))
7856 call = TREE_OPERAND (call, 0);
7857 call = (build_min_non_dep_call_vec
7858 (call,
7859 build_min (COMPONENT_REF, TREE_TYPE (CALL_EXPR_FN (call)),
7860 orig_instance, orig_fns, NULL_TREE),
7861 orig_args));
7862 SET_EXPR_LOCATION (call, input_location);
7863 call = convert_from_reference (call);
7864 if (cast_to_void)
7865 call = build_nop (void_type_node, call);
7868 /* Free all the conversions we allocated. */
7869 obstack_free (&conversion_obstack, p);
7871 if (orig_args != NULL)
7872 release_tree_vector (orig_args);
7874 return call;
7877 /* Wrapper for above. */
7879 tree
7880 build_new_method_call (tree instance, tree fns, vec<tree, va_gc> **args,
7881 tree conversion_path, int flags,
7882 tree *fn_p, tsubst_flags_t complain)
7884 tree ret;
7885 bool subtime = timevar_cond_start (TV_OVERLOAD);
7886 ret = build_new_method_call_1 (instance, fns, args, conversion_path, flags,
7887 fn_p, complain);
7888 timevar_cond_stop (TV_OVERLOAD, subtime);
7889 return ret;
7892 /* Returns true iff standard conversion sequence ICS1 is a proper
7893 subsequence of ICS2. */
7895 static bool
7896 is_subseq (conversion *ics1, conversion *ics2)
7898 /* We can assume that a conversion of the same code
7899 between the same types indicates a subsequence since we only get
7900 here if the types we are converting from are the same. */
7902 while (ics1->kind == ck_rvalue
7903 || ics1->kind == ck_lvalue)
7904 ics1 = next_conversion (ics1);
7906 while (1)
7908 while (ics2->kind == ck_rvalue
7909 || ics2->kind == ck_lvalue)
7910 ics2 = next_conversion (ics2);
7912 if (ics2->kind == ck_user
7913 || ics2->kind == ck_ambig
7914 || ics2->kind == ck_aggr
7915 || ics2->kind == ck_list
7916 || ics2->kind == ck_identity)
7917 /* At this point, ICS1 cannot be a proper subsequence of
7918 ICS2. We can get a USER_CONV when we are comparing the
7919 second standard conversion sequence of two user conversion
7920 sequences. */
7921 return false;
7923 ics2 = next_conversion (ics2);
7925 if (ics2->kind == ics1->kind
7926 && same_type_p (ics2->type, ics1->type)
7927 && same_type_p (next_conversion (ics2)->type,
7928 next_conversion (ics1)->type))
7929 return true;
7933 /* Returns nonzero iff DERIVED is derived from BASE. The inputs may
7934 be any _TYPE nodes. */
7936 bool
7937 is_properly_derived_from (tree derived, tree base)
7939 if (!CLASS_TYPE_P (derived) || !CLASS_TYPE_P (base))
7940 return false;
7942 /* We only allow proper derivation here. The DERIVED_FROM_P macro
7943 considers every class derived from itself. */
7944 return (!same_type_ignoring_top_level_qualifiers_p (derived, base)
7945 && DERIVED_FROM_P (base, derived));
7948 /* We build the ICS for an implicit object parameter as a pointer
7949 conversion sequence. However, such a sequence should be compared
7950 as if it were a reference conversion sequence. If ICS is the
7951 implicit conversion sequence for an implicit object parameter,
7952 modify it accordingly. */
7954 static void
7955 maybe_handle_implicit_object (conversion **ics)
7957 if ((*ics)->this_p)
7959 /* [over.match.funcs]
7961 For non-static member functions, the type of the
7962 implicit object parameter is "reference to cv X"
7963 where X is the class of which the function is a
7964 member and cv is the cv-qualification on the member
7965 function declaration. */
7966 conversion *t = *ics;
7967 tree reference_type;
7969 /* The `this' parameter is a pointer to a class type. Make the
7970 implicit conversion talk about a reference to that same class
7971 type. */
7972 reference_type = TREE_TYPE (t->type);
7973 reference_type = build_reference_type (reference_type);
7975 if (t->kind == ck_qual)
7976 t = next_conversion (t);
7977 if (t->kind == ck_ptr)
7978 t = next_conversion (t);
7979 t = build_identity_conv (TREE_TYPE (t->type), NULL_TREE);
7980 t = direct_reference_binding (reference_type, t);
7981 t->this_p = 1;
7982 t->rvaluedness_matches_p = 0;
7983 *ics = t;
7987 /* If *ICS is a REF_BIND set *ICS to the remainder of the conversion,
7988 and return the initial reference binding conversion. Otherwise,
7989 leave *ICS unchanged and return NULL. */
7991 static conversion *
7992 maybe_handle_ref_bind (conversion **ics)
7994 if ((*ics)->kind == ck_ref_bind)
7996 conversion *old_ics = *ics;
7997 *ics = next_conversion (old_ics);
7998 (*ics)->user_conv_p = old_ics->user_conv_p;
7999 return old_ics;
8002 return NULL;
8005 /* Compare two implicit conversion sequences according to the rules set out in
8006 [over.ics.rank]. Return values:
8008 1: ics1 is better than ics2
8009 -1: ics2 is better than ics1
8010 0: ics1 and ics2 are indistinguishable */
8012 static int
8013 compare_ics (conversion *ics1, conversion *ics2)
8015 tree from_type1;
8016 tree from_type2;
8017 tree to_type1;
8018 tree to_type2;
8019 tree deref_from_type1 = NULL_TREE;
8020 tree deref_from_type2 = NULL_TREE;
8021 tree deref_to_type1 = NULL_TREE;
8022 tree deref_to_type2 = NULL_TREE;
8023 conversion_rank rank1, rank2;
8025 /* REF_BINDING is nonzero if the result of the conversion sequence
8026 is a reference type. In that case REF_CONV is the reference
8027 binding conversion. */
8028 conversion *ref_conv1;
8029 conversion *ref_conv2;
8031 /* Handle implicit object parameters. */
8032 maybe_handle_implicit_object (&ics1);
8033 maybe_handle_implicit_object (&ics2);
8035 /* Handle reference parameters. */
8036 ref_conv1 = maybe_handle_ref_bind (&ics1);
8037 ref_conv2 = maybe_handle_ref_bind (&ics2);
8039 /* List-initialization sequence L1 is a better conversion sequence than
8040 list-initialization sequence L2 if L1 converts to
8041 std::initializer_list<X> for some X and L2 does not. */
8042 if (ics1->kind == ck_list && ics2->kind != ck_list)
8043 return 1;
8044 if (ics2->kind == ck_list && ics1->kind != ck_list)
8045 return -1;
8047 /* [over.ics.rank]
8049 When comparing the basic forms of implicit conversion sequences (as
8050 defined in _over.best.ics_)
8052 --a standard conversion sequence (_over.ics.scs_) is a better
8053 conversion sequence than a user-defined conversion sequence
8054 or an ellipsis conversion sequence, and
8056 --a user-defined conversion sequence (_over.ics.user_) is a
8057 better conversion sequence than an ellipsis conversion sequence
8058 (_over.ics.ellipsis_). */
8059 rank1 = CONVERSION_RANK (ics1);
8060 rank2 = CONVERSION_RANK (ics2);
8062 if (rank1 > rank2)
8063 return -1;
8064 else if (rank1 < rank2)
8065 return 1;
8067 if (rank1 == cr_bad)
8069 /* Both ICS are bad. We try to make a decision based on what would
8070 have happened if they'd been good. This is not an extension,
8071 we'll still give an error when we build up the call; this just
8072 helps us give a more helpful error message. */
8073 rank1 = BAD_CONVERSION_RANK (ics1);
8074 rank2 = BAD_CONVERSION_RANK (ics2);
8076 if (rank1 > rank2)
8077 return -1;
8078 else if (rank1 < rank2)
8079 return 1;
8081 /* We couldn't make up our minds; try to figure it out below. */
8084 if (ics1->ellipsis_p)
8085 /* Both conversions are ellipsis conversions. */
8086 return 0;
8088 /* User-defined conversion sequence U1 is a better conversion sequence
8089 than another user-defined conversion sequence U2 if they contain the
8090 same user-defined conversion operator or constructor and if the sec-
8091 ond standard conversion sequence of U1 is better than the second
8092 standard conversion sequence of U2. */
8094 /* Handle list-conversion with the same code even though it isn't always
8095 ranked as a user-defined conversion and it doesn't have a second
8096 standard conversion sequence; it will still have the desired effect.
8097 Specifically, we need to do the reference binding comparison at the
8098 end of this function. */
8100 if (ics1->user_conv_p || ics1->kind == ck_list || ics1->kind == ck_aggr)
8102 conversion *t1;
8103 conversion *t2;
8105 for (t1 = ics1; t1->kind != ck_user; t1 = next_conversion (t1))
8106 if (t1->kind == ck_ambig || t1->kind == ck_aggr
8107 || t1->kind == ck_list)
8108 break;
8109 for (t2 = ics2; t2->kind != ck_user; t2 = next_conversion (t2))
8110 if (t2->kind == ck_ambig || t2->kind == ck_aggr
8111 || t2->kind == ck_list)
8112 break;
8114 if (t1->kind != t2->kind)
8115 return 0;
8116 else if (t1->kind == ck_user)
8118 if (t1->cand->fn != t2->cand->fn)
8119 return 0;
8121 else
8123 /* For ambiguous or aggregate conversions, use the target type as
8124 a proxy for the conversion function. */
8125 if (!same_type_ignoring_top_level_qualifiers_p (t1->type, t2->type))
8126 return 0;
8129 /* We can just fall through here, after setting up
8130 FROM_TYPE1 and FROM_TYPE2. */
8131 from_type1 = t1->type;
8132 from_type2 = t2->type;
8134 else
8136 conversion *t1;
8137 conversion *t2;
8139 /* We're dealing with two standard conversion sequences.
8141 [over.ics.rank]
8143 Standard conversion sequence S1 is a better conversion
8144 sequence than standard conversion sequence S2 if
8146 --S1 is a proper subsequence of S2 (comparing the conversion
8147 sequences in the canonical form defined by _over.ics.scs_,
8148 excluding any Lvalue Transformation; the identity
8149 conversion sequence is considered to be a subsequence of
8150 any non-identity conversion sequence */
8152 t1 = ics1;
8153 while (t1->kind != ck_identity)
8154 t1 = next_conversion (t1);
8155 from_type1 = t1->type;
8157 t2 = ics2;
8158 while (t2->kind != ck_identity)
8159 t2 = next_conversion (t2);
8160 from_type2 = t2->type;
8163 /* One sequence can only be a subsequence of the other if they start with
8164 the same type. They can start with different types when comparing the
8165 second standard conversion sequence in two user-defined conversion
8166 sequences. */
8167 if (same_type_p (from_type1, from_type2))
8169 if (is_subseq (ics1, ics2))
8170 return 1;
8171 if (is_subseq (ics2, ics1))
8172 return -1;
8175 /* [over.ics.rank]
8177 Or, if not that,
8179 --the rank of S1 is better than the rank of S2 (by the rules
8180 defined below):
8182 Standard conversion sequences are ordered by their ranks: an Exact
8183 Match is a better conversion than a Promotion, which is a better
8184 conversion than a Conversion.
8186 Two conversion sequences with the same rank are indistinguishable
8187 unless one of the following rules applies:
8189 --A conversion that does not a convert a pointer, pointer to member,
8190 or std::nullptr_t to bool is better than one that does.
8192 The ICS_STD_RANK automatically handles the pointer-to-bool rule,
8193 so that we do not have to check it explicitly. */
8194 if (ics1->rank < ics2->rank)
8195 return 1;
8196 else if (ics2->rank < ics1->rank)
8197 return -1;
8199 to_type1 = ics1->type;
8200 to_type2 = ics2->type;
8202 /* A conversion from scalar arithmetic type to complex is worse than a
8203 conversion between scalar arithmetic types. */
8204 if (same_type_p (from_type1, from_type2)
8205 && ARITHMETIC_TYPE_P (from_type1)
8206 && ARITHMETIC_TYPE_P (to_type1)
8207 && ARITHMETIC_TYPE_P (to_type2)
8208 && ((TREE_CODE (to_type1) == COMPLEX_TYPE)
8209 != (TREE_CODE (to_type2) == COMPLEX_TYPE)))
8211 if (TREE_CODE (to_type1) == COMPLEX_TYPE)
8212 return -1;
8213 else
8214 return 1;
8217 if (TYPE_PTR_P (from_type1)
8218 && TYPE_PTR_P (from_type2)
8219 && TYPE_PTR_P (to_type1)
8220 && TYPE_PTR_P (to_type2))
8222 deref_from_type1 = TREE_TYPE (from_type1);
8223 deref_from_type2 = TREE_TYPE (from_type2);
8224 deref_to_type1 = TREE_TYPE (to_type1);
8225 deref_to_type2 = TREE_TYPE (to_type2);
8227 /* The rules for pointers to members A::* are just like the rules
8228 for pointers A*, except opposite: if B is derived from A then
8229 A::* converts to B::*, not vice versa. For that reason, we
8230 switch the from_ and to_ variables here. */
8231 else if ((TYPE_PTRDATAMEM_P (from_type1) && TYPE_PTRDATAMEM_P (from_type2)
8232 && TYPE_PTRDATAMEM_P (to_type1) && TYPE_PTRDATAMEM_P (to_type2))
8233 || (TYPE_PTRMEMFUNC_P (from_type1)
8234 && TYPE_PTRMEMFUNC_P (from_type2)
8235 && TYPE_PTRMEMFUNC_P (to_type1)
8236 && TYPE_PTRMEMFUNC_P (to_type2)))
8238 deref_to_type1 = TYPE_PTRMEM_CLASS_TYPE (from_type1);
8239 deref_to_type2 = TYPE_PTRMEM_CLASS_TYPE (from_type2);
8240 deref_from_type1 = TYPE_PTRMEM_CLASS_TYPE (to_type1);
8241 deref_from_type2 = TYPE_PTRMEM_CLASS_TYPE (to_type2);
8244 if (deref_from_type1 != NULL_TREE
8245 && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_from_type1))
8246 && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_from_type2)))
8248 /* This was one of the pointer or pointer-like conversions.
8250 [over.ics.rank]
8252 --If class B is derived directly or indirectly from class A,
8253 conversion of B* to A* is better than conversion of B* to
8254 void*, and conversion of A* to void* is better than
8255 conversion of B* to void*. */
8256 if (VOID_TYPE_P (deref_to_type1)
8257 && VOID_TYPE_P (deref_to_type2))
8259 if (is_properly_derived_from (deref_from_type1,
8260 deref_from_type2))
8261 return -1;
8262 else if (is_properly_derived_from (deref_from_type2,
8263 deref_from_type1))
8264 return 1;
8266 else if (VOID_TYPE_P (deref_to_type1)
8267 || VOID_TYPE_P (deref_to_type2))
8269 if (same_type_p (deref_from_type1, deref_from_type2))
8271 if (VOID_TYPE_P (deref_to_type2))
8273 if (is_properly_derived_from (deref_from_type1,
8274 deref_to_type1))
8275 return 1;
8277 /* We know that DEREF_TO_TYPE1 is `void' here. */
8278 else if (is_properly_derived_from (deref_from_type1,
8279 deref_to_type2))
8280 return -1;
8283 else if (RECORD_OR_UNION_CODE_P (TREE_CODE (deref_to_type1))
8284 && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_to_type2)))
8286 /* [over.ics.rank]
8288 --If class B is derived directly or indirectly from class A
8289 and class C is derived directly or indirectly from B,
8291 --conversion of C* to B* is better than conversion of C* to
8294 --conversion of B* to A* is better than conversion of C* to
8295 A* */
8296 if (same_type_p (deref_from_type1, deref_from_type2))
8298 if (is_properly_derived_from (deref_to_type1,
8299 deref_to_type2))
8300 return 1;
8301 else if (is_properly_derived_from (deref_to_type2,
8302 deref_to_type1))
8303 return -1;
8305 else if (same_type_p (deref_to_type1, deref_to_type2))
8307 if (is_properly_derived_from (deref_from_type2,
8308 deref_from_type1))
8309 return 1;
8310 else if (is_properly_derived_from (deref_from_type1,
8311 deref_from_type2))
8312 return -1;
8316 else if (CLASS_TYPE_P (non_reference (from_type1))
8317 && same_type_p (from_type1, from_type2))
8319 tree from = non_reference (from_type1);
8321 /* [over.ics.rank]
8323 --binding of an expression of type C to a reference of type
8324 B& is better than binding an expression of type C to a
8325 reference of type A&
8327 --conversion of C to B is better than conversion of C to A, */
8328 if (is_properly_derived_from (from, to_type1)
8329 && is_properly_derived_from (from, to_type2))
8331 if (is_properly_derived_from (to_type1, to_type2))
8332 return 1;
8333 else if (is_properly_derived_from (to_type2, to_type1))
8334 return -1;
8337 else if (CLASS_TYPE_P (non_reference (to_type1))
8338 && same_type_p (to_type1, to_type2))
8340 tree to = non_reference (to_type1);
8342 /* [over.ics.rank]
8344 --binding of an expression of type B to a reference of type
8345 A& is better than binding an expression of type C to a
8346 reference of type A&,
8348 --conversion of B to A is better than conversion of C to A */
8349 if (is_properly_derived_from (from_type1, to)
8350 && is_properly_derived_from (from_type2, to))
8352 if (is_properly_derived_from (from_type2, from_type1))
8353 return 1;
8354 else if (is_properly_derived_from (from_type1, from_type2))
8355 return -1;
8359 /* [over.ics.rank]
8361 --S1 and S2 differ only in their qualification conversion and yield
8362 similar types T1 and T2 (_conv.qual_), respectively, and the cv-
8363 qualification signature of type T1 is a proper subset of the cv-
8364 qualification signature of type T2 */
8365 if (ics1->kind == ck_qual
8366 && ics2->kind == ck_qual
8367 && same_type_p (from_type1, from_type2))
8369 int result = comp_cv_qual_signature (to_type1, to_type2);
8370 if (result != 0)
8371 return result;
8374 /* [over.ics.rank]
8376 --S1 and S2 are reference bindings (_dcl.init.ref_) and neither refers
8377 to an implicit object parameter, and either S1 binds an lvalue reference
8378 to an lvalue and S2 binds an rvalue reference or S1 binds an rvalue
8379 reference to an rvalue and S2 binds an lvalue reference
8380 (C++0x draft standard, 13.3.3.2)
8382 --S1 and S2 are reference bindings (_dcl.init.ref_), and the
8383 types to which the references refer are the same type except for
8384 top-level cv-qualifiers, and the type to which the reference
8385 initialized by S2 refers is more cv-qualified than the type to
8386 which the reference initialized by S1 refers.
8388 DR 1328 [over.match.best]: the context is an initialization by
8389 conversion function for direct reference binding (13.3.1.6) of a
8390 reference to function type, the return type of F1 is the same kind of
8391 reference (i.e. lvalue or rvalue) as the reference being initialized,
8392 and the return type of F2 is not. */
8394 if (ref_conv1 && ref_conv2)
8396 if (!ref_conv1->this_p && !ref_conv2->this_p
8397 && (ref_conv1->rvaluedness_matches_p
8398 != ref_conv2->rvaluedness_matches_p)
8399 && (same_type_p (ref_conv1->type, ref_conv2->type)
8400 || (TYPE_REF_IS_RVALUE (ref_conv1->type)
8401 != TYPE_REF_IS_RVALUE (ref_conv2->type))))
8403 return (ref_conv1->rvaluedness_matches_p
8404 - ref_conv2->rvaluedness_matches_p);
8407 if (same_type_ignoring_top_level_qualifiers_p (to_type1, to_type2))
8408 return comp_cv_qualification (TREE_TYPE (ref_conv2->type),
8409 TREE_TYPE (ref_conv1->type));
8412 /* Neither conversion sequence is better than the other. */
8413 return 0;
8416 /* The source type for this standard conversion sequence. */
8418 static tree
8419 source_type (conversion *t)
8421 for (;; t = next_conversion (t))
8423 if (t->kind == ck_user
8424 || t->kind == ck_ambig
8425 || t->kind == ck_identity)
8426 return t->type;
8428 gcc_unreachable ();
8431 /* Note a warning about preferring WINNER to LOSER. We do this by storing
8432 a pointer to LOSER and re-running joust to produce the warning if WINNER
8433 is actually used. */
8435 static void
8436 add_warning (struct z_candidate *winner, struct z_candidate *loser)
8438 candidate_warning *cw = (candidate_warning *)
8439 conversion_obstack_alloc (sizeof (candidate_warning));
8440 cw->loser = loser;
8441 cw->next = winner->warnings;
8442 winner->warnings = cw;
8445 /* Compare two candidates for overloading as described in
8446 [over.match.best]. Return values:
8448 1: cand1 is better than cand2
8449 -1: cand2 is better than cand1
8450 0: cand1 and cand2 are indistinguishable */
8452 static int
8453 joust (struct z_candidate *cand1, struct z_candidate *cand2, bool warn,
8454 tsubst_flags_t complain)
8456 int winner = 0;
8457 int off1 = 0, off2 = 0;
8458 size_t i;
8459 size_t len;
8461 /* Candidates that involve bad conversions are always worse than those
8462 that don't. */
8463 if (cand1->viable > cand2->viable)
8464 return 1;
8465 if (cand1->viable < cand2->viable)
8466 return -1;
8468 /* If we have two pseudo-candidates for conversions to the same type,
8469 or two candidates for the same function, arbitrarily pick one. */
8470 if (cand1->fn == cand2->fn
8471 && (IS_TYPE_OR_DECL_P (cand1->fn)))
8472 return 1;
8474 /* Prefer a non-deleted function over an implicitly deleted move
8475 constructor or assignment operator. This differs slightly from the
8476 wording for issue 1402 (which says the move op is ignored by overload
8477 resolution), but this way produces better error messages. */
8478 if (TREE_CODE (cand1->fn) == FUNCTION_DECL
8479 && TREE_CODE (cand2->fn) == FUNCTION_DECL
8480 && DECL_DELETED_FN (cand1->fn) != DECL_DELETED_FN (cand2->fn))
8482 if (DECL_DELETED_FN (cand1->fn) && DECL_DEFAULTED_FN (cand1->fn)
8483 && move_fn_p (cand1->fn))
8484 return -1;
8485 if (DECL_DELETED_FN (cand2->fn) && DECL_DEFAULTED_FN (cand2->fn)
8486 && move_fn_p (cand2->fn))
8487 return 1;
8490 /* a viable function F1
8491 is defined to be a better function than another viable function F2 if
8492 for all arguments i, ICSi(F1) is not a worse conversion sequence than
8493 ICSi(F2), and then */
8495 /* for some argument j, ICSj(F1) is a better conversion sequence than
8496 ICSj(F2) */
8498 /* For comparing static and non-static member functions, we ignore
8499 the implicit object parameter of the non-static function. The
8500 standard says to pretend that the static function has an object
8501 parm, but that won't work with operator overloading. */
8502 len = cand1->num_convs;
8503 if (len != cand2->num_convs)
8505 int static_1 = DECL_STATIC_FUNCTION_P (cand1->fn);
8506 int static_2 = DECL_STATIC_FUNCTION_P (cand2->fn);
8508 if (DECL_CONSTRUCTOR_P (cand1->fn)
8509 && is_list_ctor (cand1->fn) != is_list_ctor (cand2->fn))
8510 /* We're comparing a near-match list constructor and a near-match
8511 non-list constructor. Just treat them as unordered. */
8512 return 0;
8514 gcc_assert (static_1 != static_2);
8516 if (static_1)
8517 off2 = 1;
8518 else
8520 off1 = 1;
8521 --len;
8525 for (i = 0; i < len; ++i)
8527 conversion *t1 = cand1->convs[i + off1];
8528 conversion *t2 = cand2->convs[i + off2];
8529 int comp = compare_ics (t1, t2);
8531 if (comp != 0)
8533 if ((complain & tf_warning)
8534 && warn_sign_promo
8535 && (CONVERSION_RANK (t1) + CONVERSION_RANK (t2)
8536 == cr_std + cr_promotion)
8537 && t1->kind == ck_std
8538 && t2->kind == ck_std
8539 && TREE_CODE (t1->type) == INTEGER_TYPE
8540 && TREE_CODE (t2->type) == INTEGER_TYPE
8541 && (TYPE_PRECISION (t1->type)
8542 == TYPE_PRECISION (t2->type))
8543 && (TYPE_UNSIGNED (next_conversion (t1)->type)
8544 || (TREE_CODE (next_conversion (t1)->type)
8545 == ENUMERAL_TYPE)))
8547 tree type = next_conversion (t1)->type;
8548 tree type1, type2;
8549 struct z_candidate *w, *l;
8550 if (comp > 0)
8551 type1 = t1->type, type2 = t2->type,
8552 w = cand1, l = cand2;
8553 else
8554 type1 = t2->type, type2 = t1->type,
8555 w = cand2, l = cand1;
8557 if (warn)
8559 warning (OPT_Wsign_promo, "passing %qT chooses %qT over %qT",
8560 type, type1, type2);
8561 warning (OPT_Wsign_promo, " in call to %qD", w->fn);
8563 else
8564 add_warning (w, l);
8567 if (winner && comp != winner)
8569 winner = 0;
8570 goto tweak;
8572 winner = comp;
8576 /* warn about confusing overload resolution for user-defined conversions,
8577 either between a constructor and a conversion op, or between two
8578 conversion ops. */
8579 if ((complain & tf_warning)
8580 && winner && warn_conversion && cand1->second_conv
8581 && (!DECL_CONSTRUCTOR_P (cand1->fn) || !DECL_CONSTRUCTOR_P (cand2->fn))
8582 && winner != compare_ics (cand1->second_conv, cand2->second_conv))
8584 struct z_candidate *w, *l;
8585 bool give_warning = false;
8587 if (winner == 1)
8588 w = cand1, l = cand2;
8589 else
8590 w = cand2, l = cand1;
8592 /* We don't want to complain about `X::operator T1 ()'
8593 beating `X::operator T2 () const', when T2 is a no less
8594 cv-qualified version of T1. */
8595 if (DECL_CONTEXT (w->fn) == DECL_CONTEXT (l->fn)
8596 && !DECL_CONSTRUCTOR_P (w->fn) && !DECL_CONSTRUCTOR_P (l->fn))
8598 tree t = TREE_TYPE (TREE_TYPE (l->fn));
8599 tree f = TREE_TYPE (TREE_TYPE (w->fn));
8601 if (TREE_CODE (t) == TREE_CODE (f) && POINTER_TYPE_P (t))
8603 t = TREE_TYPE (t);
8604 f = TREE_TYPE (f);
8606 if (!comp_ptr_ttypes (t, f))
8607 give_warning = true;
8609 else
8610 give_warning = true;
8612 if (!give_warning)
8613 /*NOP*/;
8614 else if (warn)
8616 tree source = source_type (w->convs[0]);
8617 if (! DECL_CONSTRUCTOR_P (w->fn))
8618 source = TREE_TYPE (source);
8619 if (warning (OPT_Wconversion, "choosing %qD over %qD", w->fn, l->fn)
8620 && warning (OPT_Wconversion, " for conversion from %qT to %qT",
8621 source, w->second_conv->type))
8623 inform (input_location, " because conversion sequence for the argument is better");
8626 else
8627 add_warning (w, l);
8630 if (winner)
8631 return winner;
8633 /* DR 495 moved this tiebreaker above the template ones. */
8634 /* or, if not that,
8635 the context is an initialization by user-defined conversion (see
8636 _dcl.init_ and _over.match.user_) and the standard conversion
8637 sequence from the return type of F1 to the destination type (i.e.,
8638 the type of the entity being initialized) is a better conversion
8639 sequence than the standard conversion sequence from the return type
8640 of F2 to the destination type. */
8642 if (cand1->second_conv)
8644 winner = compare_ics (cand1->second_conv, cand2->second_conv);
8645 if (winner)
8646 return winner;
8649 /* or, if not that,
8650 F1 is a non-template function and F2 is a template function
8651 specialization. */
8653 if (!cand1->template_decl && cand2->template_decl)
8654 return 1;
8655 else if (cand1->template_decl && !cand2->template_decl)
8656 return -1;
8658 /* or, if not that,
8659 F1 and F2 are template functions and the function template for F1 is
8660 more specialized than the template for F2 according to the partial
8661 ordering rules. */
8663 if (cand1->template_decl && cand2->template_decl)
8665 winner = more_specialized_fn
8666 (TI_TEMPLATE (cand1->template_decl),
8667 TI_TEMPLATE (cand2->template_decl),
8668 /* [temp.func.order]: The presence of unused ellipsis and default
8669 arguments has no effect on the partial ordering of function
8670 templates. add_function_candidate() will not have
8671 counted the "this" argument for constructors. */
8672 cand1->num_convs + DECL_CONSTRUCTOR_P (cand1->fn));
8673 if (winner)
8674 return winner;
8677 /* Check whether we can discard a builtin candidate, either because we
8678 have two identical ones or matching builtin and non-builtin candidates.
8680 (Pedantically in the latter case the builtin which matched the user
8681 function should not be added to the overload set, but we spot it here.
8683 [over.match.oper]
8684 ... the builtin candidates include ...
8685 - do not have the same parameter type list as any non-template
8686 non-member candidate. */
8688 if (identifier_p (cand1->fn) || identifier_p (cand2->fn))
8690 for (i = 0; i < len; ++i)
8691 if (!same_type_p (cand1->convs[i]->type,
8692 cand2->convs[i]->type))
8693 break;
8694 if (i == cand1->num_convs)
8696 if (cand1->fn == cand2->fn)
8697 /* Two built-in candidates; arbitrarily pick one. */
8698 return 1;
8699 else if (identifier_p (cand1->fn))
8700 /* cand1 is built-in; prefer cand2. */
8701 return -1;
8702 else
8703 /* cand2 is built-in; prefer cand1. */
8704 return 1;
8708 /* For candidates of a multi-versioned function, make the version with
8709 the highest priority win. This version will be checked for dispatching
8710 first. If this version can be inlined into the caller, the front-end
8711 will simply make a direct call to this function. */
8713 if (TREE_CODE (cand1->fn) == FUNCTION_DECL
8714 && DECL_FUNCTION_VERSIONED (cand1->fn)
8715 && TREE_CODE (cand2->fn) == FUNCTION_DECL
8716 && DECL_FUNCTION_VERSIONED (cand2->fn))
8718 tree f1 = TREE_TYPE (cand1->fn);
8719 tree f2 = TREE_TYPE (cand2->fn);
8720 tree p1 = TYPE_ARG_TYPES (f1);
8721 tree p2 = TYPE_ARG_TYPES (f2);
8723 /* Check if cand1->fn and cand2->fn are versions of the same function. It
8724 is possible that cand1->fn and cand2->fn are function versions but of
8725 different functions. Check types to see if they are versions of the same
8726 function. */
8727 if (compparms (p1, p2)
8728 && same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
8730 /* Always make the version with the higher priority, more
8731 specialized, win. */
8732 gcc_assert (targetm.compare_version_priority);
8733 if (targetm.compare_version_priority (cand1->fn, cand2->fn) >= 0)
8734 return 1;
8735 else
8736 return -1;
8740 /* If the two function declarations represent the same function (this can
8741 happen with declarations in multiple scopes and arg-dependent lookup),
8742 arbitrarily choose one. But first make sure the default args we're
8743 using match. */
8744 if (DECL_P (cand1->fn) && DECL_P (cand2->fn)
8745 && equal_functions (cand1->fn, cand2->fn))
8747 tree parms1 = TYPE_ARG_TYPES (TREE_TYPE (cand1->fn));
8748 tree parms2 = TYPE_ARG_TYPES (TREE_TYPE (cand2->fn));
8750 gcc_assert (!DECL_CONSTRUCTOR_P (cand1->fn));
8752 for (i = 0; i < len; ++i)
8754 /* Don't crash if the fn is variadic. */
8755 if (!parms1)
8756 break;
8757 parms1 = TREE_CHAIN (parms1);
8758 parms2 = TREE_CHAIN (parms2);
8761 if (off1)
8762 parms1 = TREE_CHAIN (parms1);
8763 else if (off2)
8764 parms2 = TREE_CHAIN (parms2);
8766 for (; parms1; ++i)
8768 if (!cp_tree_equal (TREE_PURPOSE (parms1),
8769 TREE_PURPOSE (parms2)))
8771 if (warn)
8773 if (complain & tf_error)
8775 if (permerror (input_location,
8776 "default argument mismatch in "
8777 "overload resolution"))
8779 inform (input_location,
8780 " candidate 1: %q+#F", cand1->fn);
8781 inform (input_location,
8782 " candidate 2: %q+#F", cand2->fn);
8785 else
8786 return 0;
8788 else
8789 add_warning (cand1, cand2);
8790 break;
8792 parms1 = TREE_CHAIN (parms1);
8793 parms2 = TREE_CHAIN (parms2);
8796 return 1;
8799 tweak:
8801 /* Extension: If the worst conversion for one candidate is worse than the
8802 worst conversion for the other, take the first. */
8803 if (!pedantic && (complain & tf_warning_or_error))
8805 conversion_rank rank1 = cr_identity, rank2 = cr_identity;
8806 struct z_candidate *w = 0, *l = 0;
8808 for (i = 0; i < len; ++i)
8810 if (CONVERSION_RANK (cand1->convs[i+off1]) > rank1)
8811 rank1 = CONVERSION_RANK (cand1->convs[i+off1]);
8812 if (CONVERSION_RANK (cand2->convs[i + off2]) > rank2)
8813 rank2 = CONVERSION_RANK (cand2->convs[i + off2]);
8815 if (rank1 < rank2)
8816 winner = 1, w = cand1, l = cand2;
8817 if (rank1 > rank2)
8818 winner = -1, w = cand2, l = cand1;
8819 if (winner)
8821 /* Don't choose a deleted function over ambiguity. */
8822 if (DECL_P (w->fn) && DECL_DELETED_FN (w->fn))
8823 return 0;
8824 if (warn)
8826 pedwarn (input_location, 0,
8827 "ISO C++ says that these are ambiguous, even "
8828 "though the worst conversion for the first is better than "
8829 "the worst conversion for the second:");
8830 print_z_candidate (input_location, _("candidate 1:"), w);
8831 print_z_candidate (input_location, _("candidate 2:"), l);
8833 else
8834 add_warning (w, l);
8835 return winner;
8839 gcc_assert (!winner);
8840 return 0;
8843 /* Given a list of candidates for overloading, find the best one, if any.
8844 This algorithm has a worst case of O(2n) (winner is last), and a best
8845 case of O(n/2) (totally ambiguous); much better than a sorting
8846 algorithm. */
8848 static struct z_candidate *
8849 tourney (struct z_candidate *candidates, tsubst_flags_t complain)
8851 struct z_candidate *champ = candidates, *challenger;
8852 int fate;
8853 int champ_compared_to_predecessor = 0;
8855 /* Walk through the list once, comparing each current champ to the next
8856 candidate, knocking out a candidate or two with each comparison. */
8858 for (challenger = champ->next; challenger; )
8860 fate = joust (champ, challenger, 0, complain);
8861 if (fate == 1)
8862 challenger = challenger->next;
8863 else
8865 if (fate == 0)
8867 champ = challenger->next;
8868 if (champ == 0)
8869 return NULL;
8870 champ_compared_to_predecessor = 0;
8872 else
8874 champ = challenger;
8875 champ_compared_to_predecessor = 1;
8878 challenger = champ->next;
8882 /* Make sure the champ is better than all the candidates it hasn't yet
8883 been compared to. */
8885 for (challenger = candidates;
8886 challenger != champ
8887 && !(champ_compared_to_predecessor && challenger->next == champ);
8888 challenger = challenger->next)
8890 fate = joust (champ, challenger, 0, complain);
8891 if (fate != 1)
8892 return NULL;
8895 return champ;
8898 /* Returns nonzero if things of type FROM can be converted to TO. */
8900 bool
8901 can_convert (tree to, tree from, tsubst_flags_t complain)
8903 tree arg = NULL_TREE;
8904 /* implicit_conversion only considers user-defined conversions
8905 if it has an expression for the call argument list. */
8906 if (CLASS_TYPE_P (from) || CLASS_TYPE_P (to))
8907 arg = build1 (CAST_EXPR, from, NULL_TREE);
8908 return can_convert_arg (to, from, arg, LOOKUP_IMPLICIT, complain);
8911 /* Returns nonzero if things of type FROM can be converted to TO with a
8912 standard conversion. */
8914 bool
8915 can_convert_standard (tree to, tree from, tsubst_flags_t complain)
8917 return can_convert_arg (to, from, NULL_TREE, LOOKUP_IMPLICIT, complain);
8920 /* Returns nonzero if ARG (of type FROM) can be converted to TO. */
8922 bool
8923 can_convert_arg (tree to, tree from, tree arg, int flags,
8924 tsubst_flags_t complain)
8926 conversion *t;
8927 void *p;
8928 bool ok_p;
8930 /* Get the high-water mark for the CONVERSION_OBSTACK. */
8931 p = conversion_obstack_alloc (0);
8932 /* We want to discard any access checks done for this test,
8933 as we might not be in the appropriate access context and
8934 we'll do the check again when we actually perform the
8935 conversion. */
8936 push_deferring_access_checks (dk_deferred);
8938 t = implicit_conversion (to, from, arg, /*c_cast_p=*/false,
8939 flags, complain);
8940 ok_p = (t && !t->bad_p);
8942 /* Discard the access checks now. */
8943 pop_deferring_access_checks ();
8944 /* Free all the conversions we allocated. */
8945 obstack_free (&conversion_obstack, p);
8947 return ok_p;
8950 /* Like can_convert_arg, but allows dubious conversions as well. */
8952 bool
8953 can_convert_arg_bad (tree to, tree from, tree arg, int flags,
8954 tsubst_flags_t complain)
8956 conversion *t;
8957 void *p;
8959 /* Get the high-water mark for the CONVERSION_OBSTACK. */
8960 p = conversion_obstack_alloc (0);
8961 /* Try to perform the conversion. */
8962 t = implicit_conversion (to, from, arg, /*c_cast_p=*/false,
8963 flags, complain);
8964 /* Free all the conversions we allocated. */
8965 obstack_free (&conversion_obstack, p);
8967 return t != NULL;
8970 /* Convert EXPR to TYPE. Return the converted expression.
8972 Note that we allow bad conversions here because by the time we get to
8973 this point we are committed to doing the conversion. If we end up
8974 doing a bad conversion, convert_like will complain. */
8976 tree
8977 perform_implicit_conversion_flags (tree type, tree expr,
8978 tsubst_flags_t complain, int flags)
8980 conversion *conv;
8981 void *p;
8982 location_t loc = EXPR_LOC_OR_LOC (expr, input_location);
8984 if (error_operand_p (expr))
8985 return error_mark_node;
8987 /* Get the high-water mark for the CONVERSION_OBSTACK. */
8988 p = conversion_obstack_alloc (0);
8990 conv = implicit_conversion (type, TREE_TYPE (expr), expr,
8991 /*c_cast_p=*/false,
8992 flags, complain);
8994 if (!conv)
8996 if (complain & tf_error)
8998 /* If expr has unknown type, then it is an overloaded function.
8999 Call instantiate_type to get good error messages. */
9000 if (TREE_TYPE (expr) == unknown_type_node)
9001 instantiate_type (type, expr, complain);
9002 else if (invalid_nonstatic_memfn_p (expr, complain))
9003 /* We gave an error. */;
9004 else
9005 error_at (loc, "could not convert %qE from %qT to %qT", expr,
9006 TREE_TYPE (expr), type);
9008 expr = error_mark_node;
9010 else if (processing_template_decl && conv->kind != ck_identity)
9012 /* In a template, we are only concerned about determining the
9013 type of non-dependent expressions, so we do not have to
9014 perform the actual conversion. But for initializers, we
9015 need to be able to perform it at instantiation
9016 (or fold_non_dependent_expr) time. */
9017 expr = build1 (IMPLICIT_CONV_EXPR, type, expr);
9018 if (!(flags & LOOKUP_ONLYCONVERTING))
9019 IMPLICIT_CONV_EXPR_DIRECT_INIT (expr) = true;
9021 else
9022 expr = convert_like (conv, expr, complain);
9024 /* Free all the conversions we allocated. */
9025 obstack_free (&conversion_obstack, p);
9027 return expr;
9030 tree
9031 perform_implicit_conversion (tree type, tree expr, tsubst_flags_t complain)
9033 return perform_implicit_conversion_flags (type, expr, complain,
9034 LOOKUP_IMPLICIT);
9037 /* Convert EXPR to TYPE (as a direct-initialization) if that is
9038 permitted. If the conversion is valid, the converted expression is
9039 returned. Otherwise, NULL_TREE is returned, except in the case
9040 that TYPE is a class type; in that case, an error is issued. If
9041 C_CAST_P is true, then this direct-initialization is taking
9042 place as part of a static_cast being attempted as part of a C-style
9043 cast. */
9045 tree
9046 perform_direct_initialization_if_possible (tree type,
9047 tree expr,
9048 bool c_cast_p,
9049 tsubst_flags_t complain)
9051 conversion *conv;
9052 void *p;
9054 if (type == error_mark_node || error_operand_p (expr))
9055 return error_mark_node;
9056 /* [dcl.init]
9058 If the destination type is a (possibly cv-qualified) class type:
9060 -- If the initialization is direct-initialization ...,
9061 constructors are considered. ... If no constructor applies, or
9062 the overload resolution is ambiguous, the initialization is
9063 ill-formed. */
9064 if (CLASS_TYPE_P (type))
9066 vec<tree, va_gc> *args = make_tree_vector_single (expr);
9067 expr = build_special_member_call (NULL_TREE, complete_ctor_identifier,
9068 &args, type, LOOKUP_NORMAL, complain);
9069 release_tree_vector (args);
9070 return build_cplus_new (type, expr, complain);
9073 /* Get the high-water mark for the CONVERSION_OBSTACK. */
9074 p = conversion_obstack_alloc (0);
9076 conv = implicit_conversion (type, TREE_TYPE (expr), expr,
9077 c_cast_p,
9078 LOOKUP_NORMAL, complain);
9079 if (!conv || conv->bad_p)
9080 expr = NULL_TREE;
9081 else
9082 expr = convert_like_real (conv, expr, NULL_TREE, 0, 0,
9083 /*issue_conversion_warnings=*/false,
9084 c_cast_p,
9085 complain);
9087 /* Free all the conversions we allocated. */
9088 obstack_free (&conversion_obstack, p);
9090 return expr;
9093 /* When initializing a reference that lasts longer than a full-expression,
9094 this special rule applies:
9096 [class.temporary]
9098 The temporary to which the reference is bound or the temporary
9099 that is the complete object to which the reference is bound
9100 persists for the lifetime of the reference.
9102 The temporaries created during the evaluation of the expression
9103 initializing the reference, except the temporary to which the
9104 reference is bound, are destroyed at the end of the
9105 full-expression in which they are created.
9107 In that case, we store the converted expression into a new
9108 VAR_DECL in a new scope.
9110 However, we want to be careful not to create temporaries when
9111 they are not required. For example, given:
9113 struct B {};
9114 struct D : public B {};
9115 D f();
9116 const B& b = f();
9118 there is no need to copy the return value from "f"; we can just
9119 extend its lifetime. Similarly, given:
9121 struct S {};
9122 struct T { operator S(); };
9123 T t;
9124 const S& s = t;
9126 we can extend the lifetime of the return value of the conversion
9127 operator.
9129 The next several functions are involved in this lifetime extension. */
9131 /* DECL is a VAR_DECL or FIELD_DECL whose type is a REFERENCE_TYPE. The
9132 reference is being bound to a temporary. Create and return a new
9133 VAR_DECL with the indicated TYPE; this variable will store the value to
9134 which the reference is bound. */
9136 tree
9137 make_temporary_var_for_ref_to_temp (tree decl, tree type)
9139 tree var;
9141 /* Create the variable. */
9142 var = create_temporary_var (type);
9144 /* Register the variable. */
9145 if (VAR_P (decl)
9146 && (TREE_STATIC (decl) || DECL_THREAD_LOCAL_P (decl)))
9148 /* Namespace-scope or local static; give it a mangled name. */
9149 /* FIXME share comdat with decl? */
9150 tree name;
9152 TREE_STATIC (var) = TREE_STATIC (decl);
9153 DECL_TLS_MODEL (var) = DECL_TLS_MODEL (decl);
9154 name = mangle_ref_init_variable (decl);
9155 DECL_NAME (var) = name;
9156 SET_DECL_ASSEMBLER_NAME (var, name);
9157 var = pushdecl_top_level (var);
9159 else
9160 /* Create a new cleanup level if necessary. */
9161 maybe_push_cleanup_level (type);
9163 return var;
9166 /* EXPR is the initializer for a variable DECL of reference or
9167 std::initializer_list type. Create, push and return a new VAR_DECL
9168 for the initializer so that it will live as long as DECL. Any
9169 cleanup for the new variable is returned through CLEANUP, and the
9170 code to initialize the new variable is returned through INITP. */
9172 static tree
9173 set_up_extended_ref_temp (tree decl, tree expr, vec<tree, va_gc> **cleanups,
9174 tree *initp)
9176 tree init;
9177 tree type;
9178 tree var;
9180 /* Create the temporary variable. */
9181 type = TREE_TYPE (expr);
9182 var = make_temporary_var_for_ref_to_temp (decl, type);
9183 layout_decl (var, 0);
9184 /* If the rvalue is the result of a function call it will be
9185 a TARGET_EXPR. If it is some other construct (such as a
9186 member access expression where the underlying object is
9187 itself the result of a function call), turn it into a
9188 TARGET_EXPR here. It is important that EXPR be a
9189 TARGET_EXPR below since otherwise the INIT_EXPR will
9190 attempt to make a bitwise copy of EXPR to initialize
9191 VAR. */
9192 if (TREE_CODE (expr) != TARGET_EXPR)
9193 expr = get_target_expr (expr);
9195 if (TREE_CODE (decl) == FIELD_DECL
9196 && extra_warnings && !TREE_NO_WARNING (decl))
9198 warning (OPT_Wextra, "a temporary bound to %qD only persists "
9199 "until the constructor exits", decl);
9200 TREE_NO_WARNING (decl) = true;
9203 /* Recursively extend temps in this initializer. */
9204 TARGET_EXPR_INITIAL (expr)
9205 = extend_ref_init_temps (decl, TARGET_EXPR_INITIAL (expr), cleanups);
9207 /* Any reference temp has a non-trivial initializer. */
9208 DECL_NONTRIVIALLY_INITIALIZED_P (var) = true;
9210 /* If the initializer is constant, put it in DECL_INITIAL so we get
9211 static initialization and use in constant expressions. */
9212 init = maybe_constant_init (expr);
9213 if (TREE_CONSTANT (init))
9215 if (literal_type_p (type) && CP_TYPE_CONST_NON_VOLATILE_P (type))
9217 /* 5.19 says that a constant expression can include an
9218 lvalue-rvalue conversion applied to "a glvalue of literal type
9219 that refers to a non-volatile temporary object initialized
9220 with a constant expression". Rather than try to communicate
9221 that this VAR_DECL is a temporary, just mark it constexpr.
9223 Currently this is only useful for initializer_list temporaries,
9224 since reference vars can't appear in constant expressions. */
9225 DECL_DECLARED_CONSTEXPR_P (var) = true;
9226 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (var) = true;
9227 TREE_CONSTANT (var) = true;
9229 DECL_INITIAL (var) = init;
9230 init = NULL_TREE;
9232 else
9233 /* Create the INIT_EXPR that will initialize the temporary
9234 variable. */
9235 init = build2 (INIT_EXPR, type, var, expr);
9236 if (at_function_scope_p ())
9238 add_decl_expr (var);
9240 if (TREE_STATIC (var))
9241 init = add_stmt_to_compound (init, register_dtor_fn (var));
9242 else
9244 tree cleanup = cxx_maybe_build_cleanup (var, tf_warning_or_error);
9245 if (cleanup)
9246 vec_safe_push (*cleanups, cleanup);
9249 /* We must be careful to destroy the temporary only
9250 after its initialization has taken place. If the
9251 initialization throws an exception, then the
9252 destructor should not be run. We cannot simply
9253 transform INIT into something like:
9255 (INIT, ({ CLEANUP_STMT; }))
9257 because emit_local_var always treats the
9258 initializer as a full-expression. Thus, the
9259 destructor would run too early; it would run at the
9260 end of initializing the reference variable, rather
9261 than at the end of the block enclosing the
9262 reference variable.
9264 The solution is to pass back a cleanup expression
9265 which the caller is responsible for attaching to
9266 the statement tree. */
9268 else
9270 rest_of_decl_compilation (var, /*toplev=*/1, at_eof);
9271 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
9273 if (DECL_THREAD_LOCAL_P (var))
9274 tls_aggregates = tree_cons (NULL_TREE, var,
9275 tls_aggregates);
9276 else
9277 static_aggregates = tree_cons (NULL_TREE, var,
9278 static_aggregates);
9280 else
9281 /* Check whether the dtor is callable. */
9282 cxx_maybe_build_cleanup (var, tf_warning_or_error);
9285 *initp = init;
9286 return var;
9289 /* Convert EXPR to the indicated reference TYPE, in a way suitable for
9290 initializing a variable of that TYPE. */
9292 tree
9293 initialize_reference (tree type, tree expr,
9294 int flags, tsubst_flags_t complain)
9296 conversion *conv;
9297 void *p;
9298 location_t loc = EXPR_LOC_OR_LOC (expr, input_location);
9300 if (type == error_mark_node || error_operand_p (expr))
9301 return error_mark_node;
9303 /* Get the high-water mark for the CONVERSION_OBSTACK. */
9304 p = conversion_obstack_alloc (0);
9306 conv = reference_binding (type, TREE_TYPE (expr), expr, /*c_cast_p=*/false,
9307 flags, complain);
9308 if (!conv || conv->bad_p)
9310 if (complain & tf_error)
9312 if (conv)
9313 convert_like (conv, expr, complain);
9314 else if (!CP_TYPE_CONST_P (TREE_TYPE (type))
9315 && !TYPE_REF_IS_RVALUE (type)
9316 && !real_lvalue_p (expr))
9317 error_at (loc, "invalid initialization of non-const reference of "
9318 "type %qT from an rvalue of type %qT",
9319 type, TREE_TYPE (expr));
9320 else
9321 error_at (loc, "invalid initialization of reference of type "
9322 "%qT from expression of type %qT", type,
9323 TREE_TYPE (expr));
9325 return error_mark_node;
9328 if (conv->kind == ck_ref_bind)
9329 /* Perform the conversion. */
9330 expr = convert_like (conv, expr, complain);
9331 else if (conv->kind == ck_ambig)
9332 /* We gave an error in build_user_type_conversion_1. */
9333 expr = error_mark_node;
9334 else
9335 gcc_unreachable ();
9337 /* Free all the conversions we allocated. */
9338 obstack_free (&conversion_obstack, p);
9340 return expr;
9343 /* Subroutine of extend_ref_init_temps. Possibly extend one initializer,
9344 which is bound either to a reference or a std::initializer_list. */
9346 static tree
9347 extend_ref_init_temps_1 (tree decl, tree init, vec<tree, va_gc> **cleanups)
9349 tree sub = init;
9350 tree *p;
9351 STRIP_NOPS (sub);
9352 if (TREE_CODE (sub) == COMPOUND_EXPR)
9354 TREE_OPERAND (sub, 1)
9355 = extend_ref_init_temps_1 (decl, TREE_OPERAND (sub, 1), cleanups);
9356 return init;
9358 if (TREE_CODE (sub) != ADDR_EXPR)
9359 return init;
9360 /* Deal with binding to a subobject. */
9361 for (p = &TREE_OPERAND (sub, 0); TREE_CODE (*p) == COMPONENT_REF; )
9362 p = &TREE_OPERAND (*p, 0);
9363 if (TREE_CODE (*p) == TARGET_EXPR)
9365 tree subinit = NULL_TREE;
9366 *p = set_up_extended_ref_temp (decl, *p, cleanups, &subinit);
9367 if (subinit)
9368 init = build2 (COMPOUND_EXPR, TREE_TYPE (init), subinit, init);
9369 recompute_tree_invariant_for_addr_expr (sub);
9371 return init;
9374 /* INIT is part of the initializer for DECL. If there are any
9375 reference or initializer lists being initialized, extend their
9376 lifetime to match that of DECL. */
9378 tree
9379 extend_ref_init_temps (tree decl, tree init, vec<tree, va_gc> **cleanups)
9381 tree type = TREE_TYPE (init);
9382 if (processing_template_decl)
9383 return init;
9384 if (TREE_CODE (type) == REFERENCE_TYPE)
9385 init = extend_ref_init_temps_1 (decl, init, cleanups);
9386 else if (is_std_init_list (type))
9388 /* The temporary array underlying a std::initializer_list
9389 is handled like a reference temporary. */
9390 tree ctor = init;
9391 if (TREE_CODE (ctor) == TARGET_EXPR)
9392 ctor = TARGET_EXPR_INITIAL (ctor);
9393 if (TREE_CODE (ctor) == CONSTRUCTOR)
9395 tree array = CONSTRUCTOR_ELT (ctor, 0)->value;
9396 array = extend_ref_init_temps_1 (decl, array, cleanups);
9397 CONSTRUCTOR_ELT (ctor, 0)->value = array;
9400 else if (TREE_CODE (init) == CONSTRUCTOR)
9402 unsigned i;
9403 constructor_elt *p;
9404 vec<constructor_elt, va_gc> *elts = CONSTRUCTOR_ELTS (init);
9405 FOR_EACH_VEC_SAFE_ELT (elts, i, p)
9406 p->value = extend_ref_init_temps (decl, p->value, cleanups);
9409 return init;
9412 /* Returns true iff an initializer for TYPE could contain temporaries that
9413 need to be extended because they are bound to references or
9414 std::initializer_list. */
9416 bool
9417 type_has_extended_temps (tree type)
9419 type = strip_array_types (type);
9420 if (TREE_CODE (type) == REFERENCE_TYPE)
9421 return true;
9422 if (CLASS_TYPE_P (type))
9424 if (is_std_init_list (type))
9425 return true;
9426 for (tree f = next_initializable_field (TYPE_FIELDS (type));
9427 f; f = next_initializable_field (DECL_CHAIN (f)))
9428 if (type_has_extended_temps (TREE_TYPE (f)))
9429 return true;
9431 return false;
9434 /* Returns true iff TYPE is some variant of std::initializer_list. */
9436 bool
9437 is_std_init_list (tree type)
9439 /* Look through typedefs. */
9440 if (!TYPE_P (type))
9441 return false;
9442 if (cxx_dialect == cxx98)
9443 return false;
9444 type = TYPE_MAIN_VARIANT (type);
9445 return (CLASS_TYPE_P (type)
9446 && CP_TYPE_CONTEXT (type) == std_node
9447 && strcmp (TYPE_NAME_STRING (type), "initializer_list") == 0);
9450 /* Returns true iff DECL is a list constructor: i.e. a constructor which
9451 will accept an argument list of a single std::initializer_list<T>. */
9453 bool
9454 is_list_ctor (tree decl)
9456 tree args = FUNCTION_FIRST_USER_PARMTYPE (decl);
9457 tree arg;
9459 if (!args || args == void_list_node)
9460 return false;
9462 arg = non_reference (TREE_VALUE (args));
9463 if (!is_std_init_list (arg))
9464 return false;
9466 args = TREE_CHAIN (args);
9468 if (args && args != void_list_node && !TREE_PURPOSE (args))
9469 /* There are more non-defaulted parms. */
9470 return false;
9472 return true;
9475 #include "gt-cp-call.h"