PR c++/62153
[official-gcc.git] / gcc / cp / call.c
blob161235b64cb05070007219f362ea2662249b09ac
1 /* Functions related to invoking methods and overloaded functions.
2 Copyright (C) 1987-2014 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 *, int);
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 actual argument or its type. */
462 tree from;
463 /* The type of the parameter. */
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 struct rejection_reason *reason;
525 /* If FN is a member function, the binfo indicating the path used to
526 qualify the name of FN at the call site. This path is used to
527 determine whether or not FN is accessible if it is selected by
528 overload resolution. The DECL_CONTEXT of FN will always be a
529 (possibly improper) base of this binfo. */
530 tree access_path;
531 /* If FN is a non-static member function, the binfo indicating the
532 subobject to which the `this' pointer should be converted if FN
533 is selected by overload resolution. The type pointed to by
534 the `this' pointer must correspond to the most derived class
535 indicated by the CONVERSION_PATH. */
536 tree conversion_path;
537 tree template_decl;
538 tree explicit_targs;
539 candidate_warning *warnings;
540 z_candidate *next;
541 int viable;
543 /* The flags active in add_candidate. */
544 int flags;
547 /* Returns true iff T is a null pointer constant in the sense of
548 [conv.ptr]. */
550 bool
551 null_ptr_cst_p (tree t)
553 /* [conv.ptr]
555 A null pointer constant is an integral constant expression
556 (_expr.const_) rvalue of integer type that evaluates to zero or
557 an rvalue of type std::nullptr_t. */
558 if (NULLPTR_TYPE_P (TREE_TYPE (t)))
559 return true;
560 if (CP_INTEGRAL_TYPE_P (TREE_TYPE (t)))
562 /* Core issue 903 says only literal 0 is a null pointer constant. */
563 if (cxx_dialect < cxx11)
564 t = maybe_constant_value (fold_non_dependent_expr_sfinae (t, tf_none));
565 STRIP_NOPS (t);
566 if (integer_zerop (t) && !TREE_OVERFLOW (t))
567 return true;
569 return false;
572 /* Returns true iff T is a null member pointer value (4.11). */
574 bool
575 null_member_pointer_value_p (tree t)
577 tree type = TREE_TYPE (t);
578 if (!type)
579 return false;
580 else if (TYPE_PTRMEMFUNC_P (type))
581 return (TREE_CODE (t) == CONSTRUCTOR
582 && integer_zerop (CONSTRUCTOR_ELT (t, 0)->value));
583 else if (TYPE_PTRDATAMEM_P (type))
584 return integer_all_onesp (t);
585 else
586 return false;
589 /* Returns nonzero if PARMLIST consists of only default parms,
590 ellipsis, and/or undeduced parameter packs. */
592 bool
593 sufficient_parms_p (const_tree parmlist)
595 for (; parmlist && parmlist != void_list_node;
596 parmlist = TREE_CHAIN (parmlist))
597 if (!TREE_PURPOSE (parmlist)
598 && !PACK_EXPANSION_P (TREE_VALUE (parmlist)))
599 return false;
600 return true;
603 /* Allocate N bytes of memory from the conversion obstack. The memory
604 is zeroed before being returned. */
606 static void *
607 conversion_obstack_alloc (size_t n)
609 void *p;
610 if (!conversion_obstack_initialized)
612 gcc_obstack_init (&conversion_obstack);
613 conversion_obstack_initialized = true;
615 p = obstack_alloc (&conversion_obstack, n);
616 memset (p, 0, n);
617 return p;
620 /* Allocate rejection reasons. */
622 static struct rejection_reason *
623 alloc_rejection (enum rejection_reason_code code)
625 struct rejection_reason *p;
626 p = (struct rejection_reason *) conversion_obstack_alloc (sizeof *p);
627 p->code = code;
628 return p;
631 static struct rejection_reason *
632 arity_rejection (tree first_arg, int expected, int actual)
634 struct rejection_reason *r = alloc_rejection (rr_arity);
635 int adjust = first_arg != NULL_TREE;
636 r->u.arity.expected = expected - adjust;
637 r->u.arity.actual = actual - adjust;
638 return r;
641 static struct rejection_reason *
642 arg_conversion_rejection (tree first_arg, int n_arg, tree from, tree to)
644 struct rejection_reason *r = alloc_rejection (rr_arg_conversion);
645 int adjust = first_arg != NULL_TREE;
646 r->u.conversion.n_arg = n_arg - adjust;
647 r->u.conversion.from = from;
648 r->u.conversion.to_type = to;
649 return r;
652 static struct rejection_reason *
653 bad_arg_conversion_rejection (tree first_arg, int n_arg, tree from, tree to)
655 struct rejection_reason *r = alloc_rejection (rr_bad_arg_conversion);
656 int adjust = first_arg != NULL_TREE;
657 r->u.bad_conversion.n_arg = n_arg - adjust;
658 r->u.bad_conversion.from = from;
659 r->u.bad_conversion.to_type = to;
660 return r;
663 static struct rejection_reason *
664 explicit_conversion_rejection (tree from, tree to)
666 struct rejection_reason *r = alloc_rejection (rr_explicit_conversion);
667 r->u.conversion.n_arg = 0;
668 r->u.conversion.from = from;
669 r->u.conversion.to_type = to;
670 return r;
673 static struct rejection_reason *
674 template_conversion_rejection (tree from, tree to)
676 struct rejection_reason *r = alloc_rejection (rr_template_conversion);
677 r->u.conversion.n_arg = 0;
678 r->u.conversion.from = from;
679 r->u.conversion.to_type = to;
680 return r;
683 static struct rejection_reason *
684 template_unification_rejection (tree tmpl, tree explicit_targs, tree targs,
685 const tree *args, unsigned int nargs,
686 tree return_type, unification_kind_t strict,
687 int flags)
689 size_t args_n_bytes = sizeof (*args) * nargs;
690 tree *args1 = (tree *) conversion_obstack_alloc (args_n_bytes);
691 struct rejection_reason *r = alloc_rejection (rr_template_unification);
692 r->u.template_unification.tmpl = tmpl;
693 r->u.template_unification.explicit_targs = explicit_targs;
694 r->u.template_unification.num_targs = TREE_VEC_LENGTH (targs);
695 /* Copy args to our own storage. */
696 memcpy (args1, args, args_n_bytes);
697 r->u.template_unification.args = args1;
698 r->u.template_unification.nargs = nargs;
699 r->u.template_unification.return_type = return_type;
700 r->u.template_unification.strict = strict;
701 r->u.template_unification.flags = flags;
702 return r;
705 static struct rejection_reason *
706 template_unification_error_rejection (void)
708 return alloc_rejection (rr_template_unification);
711 static struct rejection_reason *
712 invalid_copy_with_fn_template_rejection (void)
714 struct rejection_reason *r = alloc_rejection (rr_invalid_copy);
715 return r;
718 /* Dynamically allocate a conversion. */
720 static conversion *
721 alloc_conversion (conversion_kind kind)
723 conversion *c;
724 c = (conversion *) conversion_obstack_alloc (sizeof (conversion));
725 c->kind = kind;
726 return c;
729 #ifdef ENABLE_CHECKING
731 /* Make sure that all memory on the conversion obstack has been
732 freed. */
734 void
735 validate_conversion_obstack (void)
737 if (conversion_obstack_initialized)
738 gcc_assert ((obstack_next_free (&conversion_obstack)
739 == obstack_base (&conversion_obstack)));
742 #endif /* ENABLE_CHECKING */
744 /* Dynamically allocate an array of N conversions. */
746 static conversion **
747 alloc_conversions (size_t n)
749 return (conversion **) conversion_obstack_alloc (n * sizeof (conversion *));
752 static conversion *
753 build_conv (conversion_kind code, tree type, conversion *from)
755 conversion *t;
756 conversion_rank rank = CONVERSION_RANK (from);
758 /* Note that the caller is responsible for filling in t->cand for
759 user-defined conversions. */
760 t = alloc_conversion (code);
761 t->type = type;
762 t->u.next = from;
764 switch (code)
766 case ck_ptr:
767 case ck_pmem:
768 case ck_base:
769 case ck_std:
770 if (rank < cr_std)
771 rank = cr_std;
772 break;
774 case ck_qual:
775 if (rank < cr_exact)
776 rank = cr_exact;
777 break;
779 default:
780 break;
782 t->rank = rank;
783 t->user_conv_p = (code == ck_user || from->user_conv_p);
784 t->bad_p = from->bad_p;
785 t->base_p = false;
786 return t;
789 /* Represent a conversion from CTOR, a braced-init-list, to TYPE, a
790 specialization of std::initializer_list<T>, if such a conversion is
791 possible. */
793 static conversion *
794 build_list_conv (tree type, tree ctor, int flags, tsubst_flags_t complain)
796 tree elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (type), 0);
797 unsigned len = CONSTRUCTOR_NELTS (ctor);
798 conversion **subconvs = alloc_conversions (len);
799 conversion *t;
800 unsigned i;
801 tree val;
803 /* Within a list-initialization we can have more user-defined
804 conversions. */
805 flags &= ~LOOKUP_NO_CONVERSION;
806 /* But no narrowing conversions. */
807 flags |= LOOKUP_NO_NARROWING;
809 /* Can't make an array of these types. */
810 if (TREE_CODE (elttype) == REFERENCE_TYPE
811 || TREE_CODE (elttype) == FUNCTION_TYPE
812 || VOID_TYPE_P (elttype))
813 return NULL;
815 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor), i, val)
817 conversion *sub
818 = implicit_conversion (elttype, TREE_TYPE (val), val,
819 false, flags, complain);
820 if (sub == NULL)
821 return NULL;
823 subconvs[i] = sub;
826 t = alloc_conversion (ck_list);
827 t->type = type;
828 t->u.list = subconvs;
829 t->rank = cr_exact;
831 for (i = 0; i < len; ++i)
833 conversion *sub = subconvs[i];
834 if (sub->rank > t->rank)
835 t->rank = sub->rank;
836 if (sub->user_conv_p)
837 t->user_conv_p = true;
838 if (sub->bad_p)
839 t->bad_p = true;
842 return t;
845 /* Return the next conversion of the conversion chain (if applicable),
846 or NULL otherwise. Please use this function instead of directly
847 accessing fields of struct conversion. */
849 static conversion *
850 next_conversion (conversion *conv)
852 if (conv == NULL
853 || conv->kind == ck_identity
854 || conv->kind == ck_ambig
855 || conv->kind == ck_list)
856 return NULL;
857 return conv->u.next;
860 /* Subroutine of build_aggr_conv: check whether CTOR, a braced-init-list,
861 is a valid aggregate initializer for array type ATYPE. */
863 static bool
864 can_convert_array (tree atype, tree ctor, int flags, tsubst_flags_t complain)
866 unsigned i;
867 tree elttype = TREE_TYPE (atype);
868 for (i = 0; i < CONSTRUCTOR_NELTS (ctor); ++i)
870 tree val = CONSTRUCTOR_ELT (ctor, i)->value;
871 bool ok;
872 if (TREE_CODE (elttype) == ARRAY_TYPE
873 && TREE_CODE (val) == CONSTRUCTOR)
874 ok = can_convert_array (elttype, val, flags, complain);
875 else
876 ok = can_convert_arg (elttype, TREE_TYPE (val), val, flags,
877 complain);
878 if (!ok)
879 return false;
881 return true;
884 /* Represent a conversion from CTOR, a braced-init-list, to TYPE, an
885 aggregate class, if such a conversion is possible. */
887 static conversion *
888 build_aggr_conv (tree type, tree ctor, int flags, tsubst_flags_t complain)
890 unsigned HOST_WIDE_INT i = 0;
891 conversion *c;
892 tree field = next_initializable_field (TYPE_FIELDS (type));
893 tree empty_ctor = NULL_TREE;
895 ctor = reshape_init (type, ctor, tf_none);
896 if (ctor == error_mark_node)
897 return NULL;
899 /* The conversions within the init-list aren't affected by the enclosing
900 context; they're always simple copy-initialization. */
901 flags = LOOKUP_IMPLICIT|LOOKUP_NO_NARROWING;
903 for (; field; field = next_initializable_field (DECL_CHAIN (field)))
905 tree ftype = TREE_TYPE (field);
906 tree val;
907 bool ok;
909 if (i < CONSTRUCTOR_NELTS (ctor))
910 val = CONSTRUCTOR_ELT (ctor, i)->value;
911 else if (TREE_CODE (ftype) == REFERENCE_TYPE)
912 /* Value-initialization of reference is ill-formed. */
913 return NULL;
914 else
916 if (empty_ctor == NULL_TREE)
917 empty_ctor = build_constructor (init_list_type_node, NULL);
918 val = empty_ctor;
920 ++i;
922 if (TREE_CODE (ftype) == ARRAY_TYPE
923 && TREE_CODE (val) == CONSTRUCTOR)
924 ok = can_convert_array (ftype, val, flags, complain);
925 else
926 ok = can_convert_arg (ftype, TREE_TYPE (val), val, flags,
927 complain);
929 if (!ok)
930 return NULL;
932 if (TREE_CODE (type) == UNION_TYPE)
933 break;
936 if (i < CONSTRUCTOR_NELTS (ctor))
937 return NULL;
939 c = alloc_conversion (ck_aggr);
940 c->type = type;
941 c->rank = cr_exact;
942 c->user_conv_p = true;
943 c->check_narrowing = true;
944 c->u.next = NULL;
945 return c;
948 /* Represent a conversion from CTOR, a braced-init-list, to TYPE, an
949 array type, if such a conversion is possible. */
951 static conversion *
952 build_array_conv (tree type, tree ctor, int flags, tsubst_flags_t complain)
954 conversion *c;
955 unsigned HOST_WIDE_INT len = CONSTRUCTOR_NELTS (ctor);
956 tree elttype = TREE_TYPE (type);
957 unsigned i;
958 tree val;
959 bool bad = false;
960 bool user = false;
961 enum conversion_rank rank = cr_exact;
963 /* We might need to propagate the size from the element to the array. */
964 complete_type (type);
966 if (TYPE_DOMAIN (type)
967 && !variably_modified_type_p (TYPE_DOMAIN (type), NULL_TREE))
969 unsigned HOST_WIDE_INT alen = tree_to_uhwi (array_type_nelts_top (type));
970 if (alen < len)
971 return NULL;
974 flags = LOOKUP_IMPLICIT|LOOKUP_NO_NARROWING;
976 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor), i, val)
978 conversion *sub
979 = implicit_conversion (elttype, TREE_TYPE (val), val,
980 false, flags, complain);
981 if (sub == NULL)
982 return NULL;
984 if (sub->rank > rank)
985 rank = sub->rank;
986 if (sub->user_conv_p)
987 user = true;
988 if (sub->bad_p)
989 bad = true;
992 c = alloc_conversion (ck_aggr);
993 c->type = type;
994 c->rank = rank;
995 c->user_conv_p = user;
996 c->bad_p = bad;
997 c->u.next = NULL;
998 return c;
1001 /* Represent a conversion from CTOR, a braced-init-list, to TYPE, a
1002 complex type, if such a conversion is possible. */
1004 static conversion *
1005 build_complex_conv (tree type, tree ctor, int flags,
1006 tsubst_flags_t complain)
1008 conversion *c;
1009 unsigned HOST_WIDE_INT len = CONSTRUCTOR_NELTS (ctor);
1010 tree elttype = TREE_TYPE (type);
1011 unsigned i;
1012 tree val;
1013 bool bad = false;
1014 bool user = false;
1015 enum conversion_rank rank = cr_exact;
1017 if (len != 2)
1018 return NULL;
1020 flags = LOOKUP_IMPLICIT|LOOKUP_NO_NARROWING;
1022 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor), i, val)
1024 conversion *sub
1025 = implicit_conversion (elttype, TREE_TYPE (val), val,
1026 false, flags, complain);
1027 if (sub == NULL)
1028 return NULL;
1030 if (sub->rank > rank)
1031 rank = sub->rank;
1032 if (sub->user_conv_p)
1033 user = true;
1034 if (sub->bad_p)
1035 bad = true;
1038 c = alloc_conversion (ck_aggr);
1039 c->type = type;
1040 c->rank = rank;
1041 c->user_conv_p = user;
1042 c->bad_p = bad;
1043 c->u.next = NULL;
1044 return c;
1047 /* Build a representation of the identity conversion from EXPR to
1048 itself. The TYPE should match the type of EXPR, if EXPR is non-NULL. */
1050 static conversion *
1051 build_identity_conv (tree type, tree expr)
1053 conversion *c;
1055 c = alloc_conversion (ck_identity);
1056 c->type = type;
1057 c->u.expr = expr;
1059 return c;
1062 /* Converting from EXPR to TYPE was ambiguous in the sense that there
1063 were multiple user-defined conversions to accomplish the job.
1064 Build a conversion that indicates that ambiguity. */
1066 static conversion *
1067 build_ambiguous_conv (tree type, tree expr)
1069 conversion *c;
1071 c = alloc_conversion (ck_ambig);
1072 c->type = type;
1073 c->u.expr = expr;
1075 return c;
1078 tree
1079 strip_top_quals (tree t)
1081 if (TREE_CODE (t) == ARRAY_TYPE)
1082 return t;
1083 return cp_build_qualified_type (t, 0);
1086 /* Returns the standard conversion path (see [conv]) from type FROM to type
1087 TO, if any. For proper handling of null pointer constants, you must
1088 also pass the expression EXPR to convert from. If C_CAST_P is true,
1089 this conversion is coming from a C-style cast. */
1091 static conversion *
1092 standard_conversion (tree to, tree from, tree expr, bool c_cast_p,
1093 int flags)
1095 enum tree_code fcode, tcode;
1096 conversion *conv;
1097 bool fromref = false;
1098 tree qualified_to;
1100 to = non_reference (to);
1101 if (TREE_CODE (from) == REFERENCE_TYPE)
1103 fromref = true;
1104 from = TREE_TYPE (from);
1106 qualified_to = to;
1107 to = strip_top_quals (to);
1108 from = strip_top_quals (from);
1110 if (expr && type_unknown_p (expr))
1112 if (TYPE_PTRFN_P (to) || TYPE_PTRMEMFUNC_P (to))
1114 tsubst_flags_t tflags = tf_conv;
1115 expr = instantiate_type (to, expr, tflags);
1116 if (expr == error_mark_node)
1117 return NULL;
1118 from = TREE_TYPE (expr);
1120 else if (TREE_CODE (to) == BOOLEAN_TYPE)
1122 /* Necessary for eg, TEMPLATE_ID_EXPRs (c++/50961). */
1123 expr = resolve_nondeduced_context (expr);
1124 from = TREE_TYPE (expr);
1128 fcode = TREE_CODE (from);
1129 tcode = TREE_CODE (to);
1131 conv = build_identity_conv (from, expr);
1132 if (fcode == FUNCTION_TYPE || fcode == ARRAY_TYPE)
1134 from = type_decays_to (from);
1135 fcode = TREE_CODE (from);
1136 conv = build_conv (ck_lvalue, from, conv);
1138 else if (fromref || (expr && lvalue_p (expr)))
1140 if (expr)
1142 tree bitfield_type;
1143 bitfield_type = is_bitfield_expr_with_lowered_type (expr);
1144 if (bitfield_type)
1146 from = strip_top_quals (bitfield_type);
1147 fcode = TREE_CODE (from);
1150 conv = build_conv (ck_rvalue, from, conv);
1151 if (flags & LOOKUP_PREFER_RVALUE)
1152 conv->rvaluedness_matches_p = true;
1155 /* Allow conversion between `__complex__' data types. */
1156 if (tcode == COMPLEX_TYPE && fcode == COMPLEX_TYPE)
1158 /* The standard conversion sequence to convert FROM to TO is
1159 the standard conversion sequence to perform componentwise
1160 conversion. */
1161 conversion *part_conv = standard_conversion
1162 (TREE_TYPE (to), TREE_TYPE (from), NULL_TREE, c_cast_p, flags);
1164 if (part_conv)
1166 conv = build_conv (part_conv->kind, to, conv);
1167 conv->rank = part_conv->rank;
1169 else
1170 conv = NULL;
1172 return conv;
1175 if (same_type_p (from, to))
1177 if (CLASS_TYPE_P (to) && conv->kind == ck_rvalue)
1178 conv->type = qualified_to;
1179 return conv;
1182 /* [conv.ptr]
1183 A null pointer constant can be converted to a pointer type; ... A
1184 null pointer constant of integral type can be converted to an
1185 rvalue of type std::nullptr_t. */
1186 if ((tcode == POINTER_TYPE || TYPE_PTRMEM_P (to)
1187 || NULLPTR_TYPE_P (to))
1188 && expr && null_ptr_cst_p (expr))
1189 conv = build_conv (ck_std, to, conv);
1190 else if ((tcode == INTEGER_TYPE && fcode == POINTER_TYPE)
1191 || (tcode == POINTER_TYPE && fcode == INTEGER_TYPE))
1193 /* For backwards brain damage compatibility, allow interconversion of
1194 pointers and integers with a pedwarn. */
1195 conv = build_conv (ck_std, to, conv);
1196 conv->bad_p = true;
1198 else if (UNSCOPED_ENUM_P (to) && fcode == INTEGER_TYPE)
1200 /* For backwards brain damage compatibility, allow interconversion of
1201 enums and integers with a pedwarn. */
1202 conv = build_conv (ck_std, to, conv);
1203 conv->bad_p = true;
1205 else if ((tcode == POINTER_TYPE && fcode == POINTER_TYPE)
1206 || (TYPE_PTRDATAMEM_P (to) && TYPE_PTRDATAMEM_P (from)))
1208 tree to_pointee;
1209 tree from_pointee;
1211 if (tcode == POINTER_TYPE
1212 && same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (from),
1213 TREE_TYPE (to)))
1215 else if (VOID_TYPE_P (TREE_TYPE (to))
1216 && !TYPE_PTRDATAMEM_P (from)
1217 && TREE_CODE (TREE_TYPE (from)) != FUNCTION_TYPE)
1219 tree nfrom = TREE_TYPE (from);
1220 /* Don't try to apply restrict to void. */
1221 int quals = cp_type_quals (nfrom) & ~TYPE_QUAL_RESTRICT;
1222 from = build_pointer_type
1223 (cp_build_qualified_type (void_type_node, quals));
1224 conv = build_conv (ck_ptr, from, conv);
1226 else if (TYPE_PTRDATAMEM_P (from))
1228 tree fbase = TYPE_PTRMEM_CLASS_TYPE (from);
1229 tree tbase = TYPE_PTRMEM_CLASS_TYPE (to);
1231 if (DERIVED_FROM_P (fbase, tbase)
1232 && (same_type_ignoring_top_level_qualifiers_p
1233 (TYPE_PTRMEM_POINTED_TO_TYPE (from),
1234 TYPE_PTRMEM_POINTED_TO_TYPE (to))))
1236 from = build_ptrmem_type (tbase,
1237 TYPE_PTRMEM_POINTED_TO_TYPE (from));
1238 conv = build_conv (ck_pmem, from, conv);
1240 else if (!same_type_p (fbase, tbase))
1241 return NULL;
1243 else if (CLASS_TYPE_P (TREE_TYPE (from))
1244 && CLASS_TYPE_P (TREE_TYPE (to))
1245 /* [conv.ptr]
1247 An rvalue of type "pointer to cv D," where D is a
1248 class type, can be converted to an rvalue of type
1249 "pointer to cv B," where B is a base class (clause
1250 _class.derived_) of D. If B is an inaccessible
1251 (clause _class.access_) or ambiguous
1252 (_class.member.lookup_) base class of D, a program
1253 that necessitates this conversion is ill-formed.
1254 Therefore, we use DERIVED_FROM_P, and do not check
1255 access or uniqueness. */
1256 && DERIVED_FROM_P (TREE_TYPE (to), TREE_TYPE (from)))
1258 from =
1259 cp_build_qualified_type (TREE_TYPE (to),
1260 cp_type_quals (TREE_TYPE (from)));
1261 from = build_pointer_type (from);
1262 conv = build_conv (ck_ptr, from, conv);
1263 conv->base_p = true;
1266 if (tcode == POINTER_TYPE)
1268 to_pointee = TREE_TYPE (to);
1269 from_pointee = TREE_TYPE (from);
1271 else
1273 to_pointee = TYPE_PTRMEM_POINTED_TO_TYPE (to);
1274 from_pointee = TYPE_PTRMEM_POINTED_TO_TYPE (from);
1277 if (same_type_p (from, to))
1278 /* OK */;
1279 else if (c_cast_p && comp_ptr_ttypes_const (to, from))
1280 /* In a C-style cast, we ignore CV-qualification because we
1281 are allowed to perform a static_cast followed by a
1282 const_cast. */
1283 conv = build_conv (ck_qual, to, conv);
1284 else if (!c_cast_p && comp_ptr_ttypes (to_pointee, from_pointee))
1285 conv = build_conv (ck_qual, to, conv);
1286 else if (expr && string_conv_p (to, expr, 0))
1287 /* converting from string constant to char *. */
1288 conv = build_conv (ck_qual, to, conv);
1289 /* Allow conversions among compatible ObjC pointer types (base
1290 conversions have been already handled above). */
1291 else if (c_dialect_objc ()
1292 && objc_compare_types (to, from, -4, NULL_TREE))
1293 conv = build_conv (ck_ptr, to, conv);
1294 else if (ptr_reasonably_similar (to_pointee, from_pointee))
1296 conv = build_conv (ck_ptr, to, conv);
1297 conv->bad_p = true;
1299 else
1300 return NULL;
1302 from = to;
1304 else if (TYPE_PTRMEMFUNC_P (to) && TYPE_PTRMEMFUNC_P (from))
1306 tree fromfn = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (from));
1307 tree tofn = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (to));
1308 tree fbase = class_of_this_parm (fromfn);
1309 tree tbase = class_of_this_parm (tofn);
1311 if (!DERIVED_FROM_P (fbase, tbase)
1312 || !same_type_p (static_fn_type (fromfn),
1313 static_fn_type (tofn)))
1314 return NULL;
1316 from = build_memfn_type (fromfn,
1317 tbase,
1318 cp_type_quals (tbase),
1319 type_memfn_rqual (tofn));
1320 from = build_ptrmemfunc_type (build_pointer_type (from));
1321 conv = build_conv (ck_pmem, from, conv);
1322 conv->base_p = true;
1324 else if (tcode == BOOLEAN_TYPE)
1326 /* [conv.bool]
1328 A prvalue of arithmetic, unscoped enumeration, pointer, or pointer
1329 to member type can be converted to a prvalue of type bool. ...
1330 For direct-initialization (8.5 [dcl.init]), a prvalue of type
1331 std::nullptr_t can be converted to a prvalue of type bool; */
1332 if (ARITHMETIC_TYPE_P (from)
1333 || UNSCOPED_ENUM_P (from)
1334 || fcode == POINTER_TYPE
1335 || TYPE_PTRMEM_P (from)
1336 || NULLPTR_TYPE_P (from))
1338 conv = build_conv (ck_std, to, conv);
1339 if (fcode == POINTER_TYPE
1340 || TYPE_PTRDATAMEM_P (from)
1341 || (TYPE_PTRMEMFUNC_P (from)
1342 && conv->rank < cr_pbool)
1343 || NULLPTR_TYPE_P (from))
1344 conv->rank = cr_pbool;
1345 if (NULLPTR_TYPE_P (from) && (flags & LOOKUP_ONLYCONVERTING))
1346 conv->bad_p = true;
1347 return conv;
1350 return NULL;
1352 /* We don't check for ENUMERAL_TYPE here because there are no standard
1353 conversions to enum type. */
1354 /* As an extension, allow conversion to complex type. */
1355 else if (ARITHMETIC_TYPE_P (to))
1357 if (! (INTEGRAL_CODE_P (fcode)
1358 || (fcode == REAL_TYPE && !(flags & LOOKUP_NO_NON_INTEGRAL)))
1359 || SCOPED_ENUM_P (from))
1360 return NULL;
1361 conv = build_conv (ck_std, to, conv);
1363 /* Give this a better rank if it's a promotion. */
1364 if (same_type_p (to, type_promotes_to (from))
1365 && next_conversion (conv)->rank <= cr_promotion)
1366 conv->rank = cr_promotion;
1368 else if (fcode == VECTOR_TYPE && tcode == VECTOR_TYPE
1369 && vector_types_convertible_p (from, to, false))
1370 return build_conv (ck_std, to, conv);
1371 else if (MAYBE_CLASS_TYPE_P (to) && MAYBE_CLASS_TYPE_P (from)
1372 && is_properly_derived_from (from, to))
1374 if (conv->kind == ck_rvalue)
1375 conv = next_conversion (conv);
1376 conv = build_conv (ck_base, to, conv);
1377 /* The derived-to-base conversion indicates the initialization
1378 of a parameter with base type from an object of a derived
1379 type. A temporary object is created to hold the result of
1380 the conversion unless we're binding directly to a reference. */
1381 conv->need_temporary_p = !(flags & LOOKUP_NO_TEMP_BIND);
1383 else
1384 return NULL;
1386 if (flags & LOOKUP_NO_NARROWING)
1387 conv->check_narrowing = true;
1389 return conv;
1392 /* Returns nonzero if T1 is reference-related to T2. */
1394 bool
1395 reference_related_p (tree t1, tree t2)
1397 if (t1 == error_mark_node || t2 == error_mark_node)
1398 return false;
1400 t1 = TYPE_MAIN_VARIANT (t1);
1401 t2 = TYPE_MAIN_VARIANT (t2);
1403 /* [dcl.init.ref]
1405 Given types "cv1 T1" and "cv2 T2," "cv1 T1" is reference-related
1406 to "cv2 T2" if T1 is the same type as T2, or T1 is a base class
1407 of T2. */
1408 return (same_type_p (t1, t2)
1409 || (CLASS_TYPE_P (t1) && CLASS_TYPE_P (t2)
1410 && DERIVED_FROM_P (t1, t2)));
1413 /* Returns nonzero if T1 is reference-compatible with T2. */
1415 static bool
1416 reference_compatible_p (tree t1, tree t2)
1418 /* [dcl.init.ref]
1420 "cv1 T1" is reference compatible with "cv2 T2" if T1 is
1421 reference-related to T2 and cv1 is the same cv-qualification as,
1422 or greater cv-qualification than, cv2. */
1423 return (reference_related_p (t1, t2)
1424 && at_least_as_qualified_p (t1, t2));
1427 /* A reference of the indicated TYPE is being bound directly to the
1428 expression represented by the implicit conversion sequence CONV.
1429 Return a conversion sequence for this binding. */
1431 static conversion *
1432 direct_reference_binding (tree type, conversion *conv)
1434 tree t;
1436 gcc_assert (TREE_CODE (type) == REFERENCE_TYPE);
1437 gcc_assert (TREE_CODE (conv->type) != REFERENCE_TYPE);
1439 t = TREE_TYPE (type);
1441 /* [over.ics.rank]
1443 When a parameter of reference type binds directly
1444 (_dcl.init.ref_) to an argument expression, the implicit
1445 conversion sequence is the identity conversion, unless the
1446 argument expression has a type that is a derived class of the
1447 parameter type, in which case the implicit conversion sequence is
1448 a derived-to-base Conversion.
1450 If the parameter binds directly to the result of applying a
1451 conversion function to the argument expression, the implicit
1452 conversion sequence is a user-defined conversion sequence
1453 (_over.ics.user_), with the second standard conversion sequence
1454 either an identity conversion or, if the conversion function
1455 returns an entity of a type that is a derived class of the
1456 parameter type, a derived-to-base conversion. */
1457 if (!same_type_ignoring_top_level_qualifiers_p (t, conv->type))
1459 /* Represent the derived-to-base conversion. */
1460 conv = build_conv (ck_base, t, conv);
1461 /* We will actually be binding to the base-class subobject in
1462 the derived class, so we mark this conversion appropriately.
1463 That way, convert_like knows not to generate a temporary. */
1464 conv->need_temporary_p = false;
1466 return build_conv (ck_ref_bind, type, conv);
1469 /* Returns the conversion path from type FROM to reference type TO for
1470 purposes of reference binding. For lvalue binding, either pass a
1471 reference type to FROM or an lvalue expression to EXPR. If the
1472 reference will be bound to a temporary, NEED_TEMPORARY_P is set for
1473 the conversion returned. If C_CAST_P is true, this
1474 conversion is coming from a C-style cast. */
1476 static conversion *
1477 reference_binding (tree rto, tree rfrom, tree expr, bool c_cast_p, int flags,
1478 tsubst_flags_t complain)
1480 conversion *conv = NULL;
1481 tree to = TREE_TYPE (rto);
1482 tree from = rfrom;
1483 tree tfrom;
1484 bool related_p;
1485 bool compatible_p;
1486 cp_lvalue_kind gl_kind;
1487 bool is_lvalue;
1489 if (TREE_CODE (to) == FUNCTION_TYPE && expr && type_unknown_p (expr))
1491 expr = instantiate_type (to, expr, tf_none);
1492 if (expr == error_mark_node)
1493 return NULL;
1494 from = TREE_TYPE (expr);
1497 if (expr && BRACE_ENCLOSED_INITIALIZER_P (expr))
1499 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
1500 /* DR 1288: Otherwise, if the initializer list has a single element
1501 of type E and ... [T's] referenced type is reference-related to E,
1502 the object or reference is initialized from that element... */
1503 if (CONSTRUCTOR_NELTS (expr) == 1)
1505 tree elt = CONSTRUCTOR_ELT (expr, 0)->value;
1506 if (error_operand_p (elt))
1507 return NULL;
1508 tree etype = TREE_TYPE (elt);
1509 if (reference_related_p (to, etype))
1511 expr = elt;
1512 from = etype;
1513 goto skip;
1516 /* Otherwise, if T is a reference type, a prvalue temporary of the
1517 type referenced by T is copy-list-initialized or
1518 direct-list-initialized, depending on the kind of initialization
1519 for the reference, and the reference is bound to that temporary. */
1520 conv = implicit_conversion (to, from, expr, c_cast_p,
1521 flags|LOOKUP_NO_TEMP_BIND, complain);
1522 skip:;
1525 if (TREE_CODE (from) == REFERENCE_TYPE)
1527 from = TREE_TYPE (from);
1528 if (!TYPE_REF_IS_RVALUE (rfrom)
1529 || TREE_CODE (from) == FUNCTION_TYPE)
1530 gl_kind = clk_ordinary;
1531 else
1532 gl_kind = clk_rvalueref;
1534 else if (expr)
1536 gl_kind = lvalue_kind (expr);
1537 if (gl_kind & clk_class)
1538 /* A class prvalue is not a glvalue. */
1539 gl_kind = clk_none;
1541 else
1542 gl_kind = clk_none;
1543 is_lvalue = gl_kind && !(gl_kind & clk_rvalueref);
1545 tfrom = from;
1546 if ((gl_kind & clk_bitfield) != 0)
1547 tfrom = unlowered_expr_type (expr);
1549 /* Figure out whether or not the types are reference-related and
1550 reference compatible. We have do do this after stripping
1551 references from FROM. */
1552 related_p = reference_related_p (to, tfrom);
1553 /* If this is a C cast, first convert to an appropriately qualified
1554 type, so that we can later do a const_cast to the desired type. */
1555 if (related_p && c_cast_p
1556 && !at_least_as_qualified_p (to, tfrom))
1557 to = cp_build_qualified_type (to, cp_type_quals (tfrom));
1558 compatible_p = reference_compatible_p (to, tfrom);
1560 /* Directly bind reference when target expression's type is compatible with
1561 the reference and expression is an lvalue. In DR391, the wording in
1562 [8.5.3/5 dcl.init.ref] is changed to also require direct bindings for
1563 const and rvalue references to rvalues of compatible class type.
1564 We should also do direct bindings for non-class xvalues. */
1565 if (related_p
1566 && (gl_kind
1567 || (!(flags & LOOKUP_NO_TEMP_BIND)
1568 && (CLASS_TYPE_P (from)
1569 || TREE_CODE (from) == ARRAY_TYPE))))
1571 /* [dcl.init.ref]
1573 If the initializer expression
1575 -- is an lvalue (but not an lvalue for a bit-field), and "cv1 T1"
1576 is reference-compatible with "cv2 T2,"
1578 the reference is bound directly to the initializer expression
1579 lvalue.
1581 [...]
1582 If the initializer expression is an rvalue, with T2 a class type,
1583 and "cv1 T1" is reference-compatible with "cv2 T2", the reference
1584 is bound to the object represented by the rvalue or to a sub-object
1585 within that object. */
1587 conv = build_identity_conv (tfrom, expr);
1588 conv = direct_reference_binding (rto, conv);
1590 if (flags & LOOKUP_PREFER_RVALUE)
1591 /* The top-level caller requested that we pretend that the lvalue
1592 be treated as an rvalue. */
1593 conv->rvaluedness_matches_p = TYPE_REF_IS_RVALUE (rto);
1594 else if (TREE_CODE (rfrom) == REFERENCE_TYPE)
1595 /* Handle rvalue reference to function properly. */
1596 conv->rvaluedness_matches_p
1597 = (TYPE_REF_IS_RVALUE (rto) == TYPE_REF_IS_RVALUE (rfrom));
1598 else
1599 conv->rvaluedness_matches_p
1600 = (TYPE_REF_IS_RVALUE (rto) == !is_lvalue);
1602 if ((gl_kind & clk_bitfield) != 0
1603 || ((gl_kind & clk_packed) != 0 && !TYPE_PACKED (to)))
1604 /* For the purposes of overload resolution, we ignore the fact
1605 this expression is a bitfield or packed field. (In particular,
1606 [over.ics.ref] says specifically that a function with a
1607 non-const reference parameter is viable even if the
1608 argument is a bitfield.)
1610 However, when we actually call the function we must create
1611 a temporary to which to bind the reference. If the
1612 reference is volatile, or isn't const, then we cannot make
1613 a temporary, so we just issue an error when the conversion
1614 actually occurs. */
1615 conv->need_temporary_p = true;
1617 /* Don't allow binding of lvalues (other than function lvalues) to
1618 rvalue references. */
1619 if (is_lvalue && TYPE_REF_IS_RVALUE (rto)
1620 && TREE_CODE (to) != FUNCTION_TYPE
1621 && !(flags & LOOKUP_PREFER_RVALUE))
1622 conv->bad_p = true;
1624 /* Nor the reverse. */
1625 if (!is_lvalue && !TYPE_REF_IS_RVALUE (rto)
1626 && (!CP_TYPE_CONST_NON_VOLATILE_P (to)
1627 || (flags & LOOKUP_NO_RVAL_BIND))
1628 && TREE_CODE (to) != FUNCTION_TYPE)
1629 conv->bad_p = true;
1631 if (!compatible_p)
1632 conv->bad_p = true;
1634 return conv;
1636 /* [class.conv.fct] A conversion function is never used to convert a
1637 (possibly cv-qualified) object to the (possibly cv-qualified) same
1638 object type (or a reference to it), to a (possibly cv-qualified) base
1639 class of that type (or a reference to it).... */
1640 else if (CLASS_TYPE_P (from) && !related_p
1641 && !(flags & LOOKUP_NO_CONVERSION))
1643 /* [dcl.init.ref]
1645 If the initializer expression
1647 -- has a class type (i.e., T2 is a class type) can be
1648 implicitly converted to an lvalue of type "cv3 T3," where
1649 "cv1 T1" is reference-compatible with "cv3 T3". (this
1650 conversion is selected by enumerating the applicable
1651 conversion functions (_over.match.ref_) and choosing the
1652 best one through overload resolution. (_over.match_).
1654 the reference is bound to the lvalue result of the conversion
1655 in the second case. */
1656 z_candidate *cand = build_user_type_conversion_1 (rto, expr, flags,
1657 complain);
1658 if (cand)
1659 return cand->second_conv;
1662 /* From this point on, we conceptually need temporaries, even if we
1663 elide them. Only the cases above are "direct bindings". */
1664 if (flags & LOOKUP_NO_TEMP_BIND)
1665 return NULL;
1667 /* [over.ics.rank]
1669 When a parameter of reference type is not bound directly to an
1670 argument expression, the conversion sequence is the one required
1671 to convert the argument expression to the underlying type of the
1672 reference according to _over.best.ics_. Conceptually, this
1673 conversion sequence corresponds to copy-initializing a temporary
1674 of the underlying type with the argument expression. Any
1675 difference in top-level cv-qualification is subsumed by the
1676 initialization itself and does not constitute a conversion. */
1678 /* We're generating a temporary now, but don't bind any more in the
1679 conversion (specifically, don't slice the temporary returned by a
1680 conversion operator). */
1681 flags |= LOOKUP_NO_TEMP_BIND;
1683 /* Core issue 899: When [copy-]initializing a temporary to be bound
1684 to the first parameter of a copy constructor (12.8) called with
1685 a single argument in the context of direct-initialization,
1686 explicit conversion functions are also considered.
1688 So don't set LOOKUP_ONLYCONVERTING in that case. */
1689 if (!(flags & LOOKUP_COPY_PARM))
1690 flags |= LOOKUP_ONLYCONVERTING;
1692 if (!conv)
1693 conv = implicit_conversion (to, from, expr, c_cast_p,
1694 flags, complain);
1695 if (!conv)
1696 return NULL;
1698 if (conv->user_conv_p)
1700 /* If initializing the temporary used a conversion function,
1701 recalculate the second conversion sequence. */
1702 for (conversion *t = conv; t; t = next_conversion (t))
1703 if (t->kind == ck_user
1704 && DECL_CONV_FN_P (t->cand->fn))
1706 tree ftype = TREE_TYPE (TREE_TYPE (t->cand->fn));
1707 int sflags = (flags|LOOKUP_NO_CONVERSION)&~LOOKUP_NO_TEMP_BIND;
1708 conversion *new_second
1709 = reference_binding (rto, ftype, NULL_TREE, c_cast_p,
1710 sflags, complain);
1711 if (!new_second)
1712 return NULL;
1713 return merge_conversion_sequences (t, new_second);
1717 conv = build_conv (ck_ref_bind, rto, conv);
1718 /* This reference binding, unlike those above, requires the
1719 creation of a temporary. */
1720 conv->need_temporary_p = true;
1721 conv->rvaluedness_matches_p = TYPE_REF_IS_RVALUE (rto);
1723 /* [dcl.init.ref]
1725 Otherwise, the reference shall be an lvalue reference to a
1726 non-volatile const type, or the reference shall be an rvalue
1727 reference. */
1728 if (!CP_TYPE_CONST_NON_VOLATILE_P (to) && !TYPE_REF_IS_RVALUE (rto))
1729 conv->bad_p = true;
1731 /* [dcl.init.ref]
1733 Otherwise, a temporary of type "cv1 T1" is created and
1734 initialized from the initializer expression using the rules for a
1735 non-reference copy initialization. If T1 is reference-related to
1736 T2, cv1 must be the same cv-qualification as, or greater
1737 cv-qualification than, cv2; otherwise, the program is ill-formed. */
1738 if (related_p && !at_least_as_qualified_p (to, from))
1739 conv->bad_p = true;
1741 return conv;
1744 /* Returns the implicit conversion sequence (see [over.ics]) from type
1745 FROM to type TO. The optional expression EXPR may affect the
1746 conversion. FLAGS are the usual overloading flags. If C_CAST_P is
1747 true, this conversion is coming from a C-style cast. */
1749 static conversion *
1750 implicit_conversion (tree to, tree from, tree expr, bool c_cast_p,
1751 int flags, tsubst_flags_t complain)
1753 conversion *conv;
1755 if (from == error_mark_node || to == error_mark_node
1756 || expr == error_mark_node)
1757 return NULL;
1759 /* Other flags only apply to the primary function in overload
1760 resolution, or after we've chosen one. */
1761 flags &= (LOOKUP_ONLYCONVERTING|LOOKUP_NO_CONVERSION|LOOKUP_COPY_PARM
1762 |LOOKUP_NO_TEMP_BIND|LOOKUP_NO_RVAL_BIND|LOOKUP_PREFER_RVALUE
1763 |LOOKUP_NO_NARROWING|LOOKUP_PROTECT|LOOKUP_NO_NON_INTEGRAL);
1765 /* FIXME: actually we don't want warnings either, but we can't just
1766 have 'complain &= ~(tf_warning|tf_error)' because it would cause
1767 the regression of, eg, g++.old-deja/g++.benjamin/16077.C.
1768 We really ought not to issue that warning until we've committed
1769 to that conversion. */
1770 complain &= ~tf_error;
1772 if (TREE_CODE (to) == REFERENCE_TYPE)
1773 conv = reference_binding (to, from, expr, c_cast_p, flags, complain);
1774 else
1775 conv = standard_conversion (to, from, expr, c_cast_p, flags);
1777 if (conv)
1778 return conv;
1780 if (expr && BRACE_ENCLOSED_INITIALIZER_P (expr))
1782 if (is_std_init_list (to))
1783 return build_list_conv (to, expr, flags, complain);
1785 /* As an extension, allow list-initialization of _Complex. */
1786 if (TREE_CODE (to) == COMPLEX_TYPE)
1788 conv = build_complex_conv (to, expr, flags, complain);
1789 if (conv)
1790 return conv;
1793 /* Allow conversion from an initializer-list with one element to a
1794 scalar type. */
1795 if (SCALAR_TYPE_P (to))
1797 int nelts = CONSTRUCTOR_NELTS (expr);
1798 tree elt;
1800 if (nelts == 0)
1801 elt = build_value_init (to, tf_none);
1802 else if (nelts == 1)
1803 elt = CONSTRUCTOR_ELT (expr, 0)->value;
1804 else
1805 elt = error_mark_node;
1807 conv = implicit_conversion (to, TREE_TYPE (elt), elt,
1808 c_cast_p, flags, complain);
1809 if (conv)
1811 conv->check_narrowing = true;
1812 if (BRACE_ENCLOSED_INITIALIZER_P (elt))
1813 /* Too many levels of braces, i.e. '{{1}}'. */
1814 conv->bad_p = true;
1815 return conv;
1818 else if (TREE_CODE (to) == ARRAY_TYPE)
1819 return build_array_conv (to, expr, flags, complain);
1822 if (expr != NULL_TREE
1823 && (MAYBE_CLASS_TYPE_P (from)
1824 || MAYBE_CLASS_TYPE_P (to))
1825 && (flags & LOOKUP_NO_CONVERSION) == 0)
1827 struct z_candidate *cand;
1829 if (CLASS_TYPE_P (to)
1830 && BRACE_ENCLOSED_INITIALIZER_P (expr)
1831 && !CLASSTYPE_NON_AGGREGATE (complete_type (to)))
1832 return build_aggr_conv (to, expr, flags, complain);
1834 cand = build_user_type_conversion_1 (to, expr, flags, complain);
1835 if (cand)
1836 conv = cand->second_conv;
1838 /* We used to try to bind a reference to a temporary here, but that
1839 is now handled after the recursive call to this function at the end
1840 of reference_binding. */
1841 return conv;
1844 return NULL;
1847 /* Add a new entry to the list of candidates. Used by the add_*_candidate
1848 functions. ARGS will not be changed until a single candidate is
1849 selected. */
1851 static struct z_candidate *
1852 add_candidate (struct z_candidate **candidates,
1853 tree fn, tree first_arg, const vec<tree, va_gc> *args,
1854 size_t num_convs, conversion **convs,
1855 tree access_path, tree conversion_path,
1856 int viable, struct rejection_reason *reason,
1857 int flags)
1859 struct z_candidate *cand = (struct z_candidate *)
1860 conversion_obstack_alloc (sizeof (struct z_candidate));
1862 cand->fn = fn;
1863 cand->first_arg = first_arg;
1864 cand->args = args;
1865 cand->convs = convs;
1866 cand->num_convs = num_convs;
1867 cand->access_path = access_path;
1868 cand->conversion_path = conversion_path;
1869 cand->viable = viable;
1870 cand->reason = reason;
1871 cand->next = *candidates;
1872 cand->flags = flags;
1873 *candidates = cand;
1875 return cand;
1878 /* Return the number of remaining arguments in the parameter list
1879 beginning with ARG. */
1881 static int
1882 remaining_arguments (tree arg)
1884 int n;
1886 for (n = 0; arg != NULL_TREE && arg != void_list_node;
1887 arg = TREE_CHAIN (arg))
1888 n++;
1890 return n;
1893 /* Create an overload candidate for the function or method FN called
1894 with the argument list FIRST_ARG/ARGS and add it to CANDIDATES.
1895 FLAGS is passed on to implicit_conversion.
1897 This does not change ARGS.
1899 CTYPE, if non-NULL, is the type we want to pretend this function
1900 comes from for purposes of overload resolution. */
1902 static struct z_candidate *
1903 add_function_candidate (struct z_candidate **candidates,
1904 tree fn, tree ctype, tree first_arg,
1905 const vec<tree, va_gc> *args, tree access_path,
1906 tree conversion_path, int flags,
1907 tsubst_flags_t complain)
1909 tree parmlist = TYPE_ARG_TYPES (TREE_TYPE (fn));
1910 int i, len;
1911 conversion **convs;
1912 tree parmnode;
1913 tree orig_first_arg = first_arg;
1914 int skip;
1915 int viable = 1;
1916 struct rejection_reason *reason = NULL;
1918 /* At this point we should not see any functions which haven't been
1919 explicitly declared, except for friend functions which will have
1920 been found using argument dependent lookup. */
1921 gcc_assert (!DECL_ANTICIPATED (fn) || DECL_HIDDEN_FRIEND_P (fn));
1923 /* The `this', `in_chrg' and VTT arguments to constructors are not
1924 considered in overload resolution. */
1925 if (DECL_CONSTRUCTOR_P (fn))
1927 parmlist = skip_artificial_parms_for (fn, parmlist);
1928 skip = num_artificial_parms_for (fn);
1929 if (skip > 0 && first_arg != NULL_TREE)
1931 --skip;
1932 first_arg = NULL_TREE;
1935 else
1936 skip = 0;
1938 len = vec_safe_length (args) - skip + (first_arg != NULL_TREE ? 1 : 0);
1939 convs = alloc_conversions (len);
1941 /* 13.3.2 - Viable functions [over.match.viable]
1942 First, to be a viable function, a candidate function shall have enough
1943 parameters to agree in number with the arguments in the list.
1945 We need to check this first; otherwise, checking the ICSes might cause
1946 us to produce an ill-formed template instantiation. */
1948 parmnode = parmlist;
1949 for (i = 0; i < len; ++i)
1951 if (parmnode == NULL_TREE || parmnode == void_list_node)
1952 break;
1953 parmnode = TREE_CHAIN (parmnode);
1956 if ((i < len && parmnode)
1957 || !sufficient_parms_p (parmnode))
1959 int remaining = remaining_arguments (parmnode);
1960 viable = 0;
1961 reason = arity_rejection (first_arg, i + remaining, len);
1963 /* When looking for a function from a subobject from an implicit
1964 copy/move constructor/operator=, don't consider anything that takes (a
1965 reference to) an unrelated type. See c++/44909 and core 1092. */
1966 else if (parmlist && (flags & LOOKUP_DEFAULTED))
1968 if (DECL_CONSTRUCTOR_P (fn))
1969 i = 1;
1970 else if (DECL_ASSIGNMENT_OPERATOR_P (fn)
1971 && DECL_OVERLOADED_OPERATOR_P (fn) == NOP_EXPR)
1972 i = 2;
1973 else
1974 i = 0;
1975 if (i && len == i)
1977 parmnode = chain_index (i-1, parmlist);
1978 if (!reference_related_p (non_reference (TREE_VALUE (parmnode)),
1979 ctype))
1980 viable = 0;
1983 /* This only applies at the top level. */
1984 flags &= ~LOOKUP_DEFAULTED;
1987 if (! viable)
1988 goto out;
1990 /* Second, for F to be a viable function, there shall exist for each
1991 argument an implicit conversion sequence that converts that argument
1992 to the corresponding parameter of F. */
1994 parmnode = parmlist;
1996 for (i = 0; i < len; ++i)
1998 tree argtype, to_type;
1999 tree arg;
2000 conversion *t;
2001 int is_this;
2003 if (parmnode == void_list_node)
2004 break;
2006 if (i == 0 && first_arg != NULL_TREE)
2007 arg = first_arg;
2008 else
2009 arg = CONST_CAST_TREE (
2010 (*args)[i + skip - (first_arg != NULL_TREE ? 1 : 0)]);
2011 argtype = lvalue_type (arg);
2013 is_this = (i == 0 && DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
2014 && ! DECL_CONSTRUCTOR_P (fn));
2016 if (parmnode)
2018 tree parmtype = TREE_VALUE (parmnode);
2019 int lflags = flags;
2021 parmnode = TREE_CHAIN (parmnode);
2023 /* The type of the implicit object parameter ('this') for
2024 overload resolution is not always the same as for the
2025 function itself; conversion functions are considered to
2026 be members of the class being converted, and functions
2027 introduced by a using-declaration are considered to be
2028 members of the class that uses them.
2030 Since build_over_call ignores the ICS for the `this'
2031 parameter, we can just change the parm type. */
2032 if (ctype && is_this)
2034 parmtype = cp_build_qualified_type
2035 (ctype, cp_type_quals (TREE_TYPE (parmtype)));
2036 if (FUNCTION_REF_QUALIFIED (TREE_TYPE (fn)))
2038 /* If the function has a ref-qualifier, the implicit
2039 object parameter has reference type. */
2040 bool rv = FUNCTION_RVALUE_QUALIFIED (TREE_TYPE (fn));
2041 parmtype = cp_build_reference_type (parmtype, rv);
2042 /* The special handling of 'this' conversions in compare_ics
2043 does not apply if there is a ref-qualifier. */
2044 is_this = false;
2046 else
2048 parmtype = build_pointer_type (parmtype);
2049 arg = build_this (arg);
2050 argtype = lvalue_type (arg);
2054 /* Core issue 899: When [copy-]initializing a temporary to be bound
2055 to the first parameter of a copy constructor (12.8) called with
2056 a single argument in the context of direct-initialization,
2057 explicit conversion functions are also considered.
2059 So set LOOKUP_COPY_PARM to let reference_binding know that
2060 it's being called in that context. We generalize the above
2061 to handle move constructors and template constructors as well;
2062 the standardese should soon be updated similarly. */
2063 if (ctype && i == 0 && (len-skip == 1)
2064 && DECL_CONSTRUCTOR_P (fn)
2065 && parmtype != error_mark_node
2066 && (same_type_ignoring_top_level_qualifiers_p
2067 (non_reference (parmtype), ctype)))
2069 if (!(flags & LOOKUP_ONLYCONVERTING))
2070 lflags |= LOOKUP_COPY_PARM;
2071 /* We allow user-defined conversions within init-lists, but
2072 don't list-initialize the copy parm, as that would mean
2073 using two levels of braces for the same type. */
2074 if ((flags & LOOKUP_LIST_INIT_CTOR)
2075 && BRACE_ENCLOSED_INITIALIZER_P (arg))
2076 lflags |= LOOKUP_NO_CONVERSION;
2078 else
2079 lflags |= LOOKUP_ONLYCONVERTING;
2081 t = implicit_conversion (parmtype, argtype, arg,
2082 /*c_cast_p=*/false, lflags, complain);
2083 to_type = parmtype;
2085 else
2087 t = build_identity_conv (argtype, arg);
2088 t->ellipsis_p = true;
2089 to_type = argtype;
2092 if (t && is_this)
2093 t->this_p = true;
2095 convs[i] = t;
2096 if (! t)
2098 viable = 0;
2099 reason = arg_conversion_rejection (first_arg, i, argtype, to_type);
2100 break;
2103 if (t->bad_p)
2105 viable = -1;
2106 reason = bad_arg_conversion_rejection (first_arg, i, arg, to_type);
2110 out:
2111 return add_candidate (candidates, fn, orig_first_arg, args, len, convs,
2112 access_path, conversion_path, viable, reason, flags);
2115 /* Create an overload candidate for the conversion function FN which will
2116 be invoked for expression OBJ, producing a pointer-to-function which
2117 will in turn be called with the argument list FIRST_ARG/ARGLIST,
2118 and add it to CANDIDATES. This does not change ARGLIST. FLAGS is
2119 passed on to implicit_conversion.
2121 Actually, we don't really care about FN; we care about the type it
2122 converts to. There may be multiple conversion functions that will
2123 convert to that type, and we rely on build_user_type_conversion_1 to
2124 choose the best one; so when we create our candidate, we record the type
2125 instead of the function. */
2127 static struct z_candidate *
2128 add_conv_candidate (struct z_candidate **candidates, tree fn, tree obj,
2129 tree first_arg, const vec<tree, va_gc> *arglist,
2130 tree access_path, tree conversion_path,
2131 tsubst_flags_t complain)
2133 tree totype = TREE_TYPE (TREE_TYPE (fn));
2134 int i, len, viable, flags;
2135 tree parmlist, parmnode;
2136 conversion **convs;
2137 struct rejection_reason *reason;
2139 for (parmlist = totype; TREE_CODE (parmlist) != FUNCTION_TYPE; )
2140 parmlist = TREE_TYPE (parmlist);
2141 parmlist = TYPE_ARG_TYPES (parmlist);
2143 len = vec_safe_length (arglist) + (first_arg != NULL_TREE ? 1 : 0) + 1;
2144 convs = alloc_conversions (len);
2145 parmnode = parmlist;
2146 viable = 1;
2147 flags = LOOKUP_IMPLICIT;
2148 reason = NULL;
2150 /* Don't bother looking up the same type twice. */
2151 if (*candidates && (*candidates)->fn == totype)
2152 return NULL;
2154 for (i = 0; i < len; ++i)
2156 tree arg, argtype, convert_type = NULL_TREE;
2157 conversion *t;
2159 if (i == 0)
2160 arg = obj;
2161 else if (i == 1 && first_arg != NULL_TREE)
2162 arg = first_arg;
2163 else
2164 arg = (*arglist)[i - (first_arg != NULL_TREE ? 1 : 0) - 1];
2165 argtype = lvalue_type (arg);
2167 if (i == 0)
2169 t = implicit_conversion (totype, argtype, arg, /*c_cast_p=*/false,
2170 flags, complain);
2171 convert_type = totype;
2173 else if (parmnode == void_list_node)
2174 break;
2175 else if (parmnode)
2177 t = implicit_conversion (TREE_VALUE (parmnode), argtype, arg,
2178 /*c_cast_p=*/false, flags, complain);
2179 convert_type = TREE_VALUE (parmnode);
2181 else
2183 t = build_identity_conv (argtype, arg);
2184 t->ellipsis_p = true;
2185 convert_type = argtype;
2188 convs[i] = t;
2189 if (! t)
2190 break;
2192 if (t->bad_p)
2194 viable = -1;
2195 reason = bad_arg_conversion_rejection (NULL_TREE, i, arg, convert_type);
2198 if (i == 0)
2199 continue;
2201 if (parmnode)
2202 parmnode = TREE_CHAIN (parmnode);
2205 if (i < len
2206 || ! sufficient_parms_p (parmnode))
2208 int remaining = remaining_arguments (parmnode);
2209 viable = 0;
2210 reason = arity_rejection (NULL_TREE, i + remaining, len);
2213 return add_candidate (candidates, totype, first_arg, arglist, len, convs,
2214 access_path, conversion_path, viable, reason, flags);
2217 static void
2218 build_builtin_candidate (struct z_candidate **candidates, tree fnname,
2219 tree type1, tree type2, tree *args, tree *argtypes,
2220 int flags, tsubst_flags_t complain)
2222 conversion *t;
2223 conversion **convs;
2224 size_t num_convs;
2225 int viable = 1, i;
2226 tree types[2];
2227 struct rejection_reason *reason = NULL;
2229 types[0] = type1;
2230 types[1] = type2;
2232 num_convs = args[2] ? 3 : (args[1] ? 2 : 1);
2233 convs = alloc_conversions (num_convs);
2235 /* TRUTH_*_EXPR do "contextual conversion to bool", which means explicit
2236 conversion ops are allowed. We handle that here by just checking for
2237 boolean_type_node because other operators don't ask for it. COND_EXPR
2238 also does contextual conversion to bool for the first operand, but we
2239 handle that in build_conditional_expr, and type1 here is operand 2. */
2240 if (type1 != boolean_type_node)
2241 flags |= LOOKUP_ONLYCONVERTING;
2243 for (i = 0; i < 2; ++i)
2245 if (! args[i])
2246 break;
2248 t = implicit_conversion (types[i], argtypes[i], args[i],
2249 /*c_cast_p=*/false, flags, complain);
2250 if (! t)
2252 viable = 0;
2253 /* We need something for printing the candidate. */
2254 t = build_identity_conv (types[i], NULL_TREE);
2255 reason = arg_conversion_rejection (NULL_TREE, i, argtypes[i],
2256 types[i]);
2258 else if (t->bad_p)
2260 viable = 0;
2261 reason = bad_arg_conversion_rejection (NULL_TREE, i, args[i],
2262 types[i]);
2264 convs[i] = t;
2267 /* For COND_EXPR we rearranged the arguments; undo that now. */
2268 if (args[2])
2270 convs[2] = convs[1];
2271 convs[1] = convs[0];
2272 t = implicit_conversion (boolean_type_node, argtypes[2], args[2],
2273 /*c_cast_p=*/false, flags,
2274 complain);
2275 if (t)
2276 convs[0] = t;
2277 else
2279 viable = 0;
2280 reason = arg_conversion_rejection (NULL_TREE, 0, argtypes[2],
2281 boolean_type_node);
2285 add_candidate (candidates, fnname, /*first_arg=*/NULL_TREE, /*args=*/NULL,
2286 num_convs, convs,
2287 /*access_path=*/NULL_TREE,
2288 /*conversion_path=*/NULL_TREE,
2289 viable, reason, flags);
2292 static bool
2293 is_complete (tree t)
2295 return COMPLETE_TYPE_P (complete_type (t));
2298 /* Returns nonzero if TYPE is a promoted arithmetic type. */
2300 static bool
2301 promoted_arithmetic_type_p (tree type)
2303 /* [over.built]
2305 In this section, the term promoted integral type is used to refer
2306 to those integral types which are preserved by integral promotion
2307 (including e.g. int and long but excluding e.g. char).
2308 Similarly, the term promoted arithmetic type refers to promoted
2309 integral types plus floating types. */
2310 return ((CP_INTEGRAL_TYPE_P (type)
2311 && same_type_p (type_promotes_to (type), type))
2312 || TREE_CODE (type) == REAL_TYPE);
2315 /* Create any builtin operator overload candidates for the operator in
2316 question given the converted operand types TYPE1 and TYPE2. The other
2317 args are passed through from add_builtin_candidates to
2318 build_builtin_candidate.
2320 TYPE1 and TYPE2 may not be permissible, and we must filter them.
2321 If CODE is requires candidates operands of the same type of the kind
2322 of which TYPE1 and TYPE2 are, we add both candidates
2323 CODE (TYPE1, TYPE1) and CODE (TYPE2, TYPE2). */
2325 static void
2326 add_builtin_candidate (struct z_candidate **candidates, enum tree_code code,
2327 enum tree_code code2, tree fnname, tree type1,
2328 tree type2, tree *args, tree *argtypes, int flags,
2329 tsubst_flags_t complain)
2331 switch (code)
2333 case POSTINCREMENT_EXPR:
2334 case POSTDECREMENT_EXPR:
2335 args[1] = integer_zero_node;
2336 type2 = integer_type_node;
2337 break;
2338 default:
2339 break;
2342 switch (code)
2345 /* 4 For every pair T, VQ), where T is an arithmetic or enumeration type,
2346 and VQ is either volatile or empty, there exist candidate operator
2347 functions of the form
2348 VQ T& operator++(VQ T&);
2349 T operator++(VQ T&, int);
2350 5 For every pair T, VQ), where T is an enumeration type or an arithmetic
2351 type other than bool, and VQ is either volatile or empty, there exist
2352 candidate operator functions of the form
2353 VQ T& operator--(VQ T&);
2354 T operator--(VQ T&, int);
2355 6 For every pair T, VQ), where T is a cv-qualified or cv-unqualified
2356 complete object type, and VQ is either volatile or empty, there exist
2357 candidate operator functions of the form
2358 T*VQ& operator++(T*VQ&);
2359 T*VQ& operator--(T*VQ&);
2360 T* operator++(T*VQ&, int);
2361 T* operator--(T*VQ&, int); */
2363 case POSTDECREMENT_EXPR:
2364 case PREDECREMENT_EXPR:
2365 if (TREE_CODE (type1) == BOOLEAN_TYPE)
2366 return;
2367 case POSTINCREMENT_EXPR:
2368 case PREINCREMENT_EXPR:
2369 if (ARITHMETIC_TYPE_P (type1) || TYPE_PTROB_P (type1))
2371 type1 = build_reference_type (type1);
2372 break;
2374 return;
2376 /* 7 For every cv-qualified or cv-unqualified object type T, there
2377 exist candidate operator functions of the form
2379 T& operator*(T*);
2381 8 For every function type T, there exist candidate operator functions of
2382 the form
2383 T& operator*(T*); */
2385 case INDIRECT_REF:
2386 if (TYPE_PTR_P (type1)
2387 && (TYPE_PTROB_P (type1)
2388 || TREE_CODE (TREE_TYPE (type1)) == FUNCTION_TYPE))
2389 break;
2390 return;
2392 /* 9 For every type T, there exist candidate operator functions of the form
2393 T* operator+(T*);
2395 10For every promoted arithmetic type T, there exist candidate operator
2396 functions of the form
2397 T operator+(T);
2398 T operator-(T); */
2400 case UNARY_PLUS_EXPR: /* unary + */
2401 if (TYPE_PTR_P (type1))
2402 break;
2403 case NEGATE_EXPR:
2404 if (ARITHMETIC_TYPE_P (type1))
2405 break;
2406 return;
2408 /* 11For every promoted integral type T, there exist candidate operator
2409 functions of the form
2410 T operator~(T); */
2412 case BIT_NOT_EXPR:
2413 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1))
2414 break;
2415 return;
2417 /* 12For every quintuple C1, C2, T, CV1, CV2), where C2 is a class type, C1
2418 is the same type as C2 or is a derived class of C2, T is a complete
2419 object type or a function type, and CV1 and CV2 are cv-qualifier-seqs,
2420 there exist candidate operator functions of the form
2421 CV12 T& operator->*(CV1 C1*, CV2 T C2::*);
2422 where CV12 is the union of CV1 and CV2. */
2424 case MEMBER_REF:
2425 if (TYPE_PTR_P (type1) && TYPE_PTRMEM_P (type2))
2427 tree c1 = TREE_TYPE (type1);
2428 tree c2 = TYPE_PTRMEM_CLASS_TYPE (type2);
2430 if (MAYBE_CLASS_TYPE_P (c1) && DERIVED_FROM_P (c2, c1)
2431 && (TYPE_PTRMEMFUNC_P (type2)
2432 || is_complete (TYPE_PTRMEM_POINTED_TO_TYPE (type2))))
2433 break;
2435 return;
2437 /* 13For every pair of promoted arithmetic types L and R, there exist can-
2438 didate operator functions of the form
2439 LR operator*(L, R);
2440 LR operator/(L, R);
2441 LR operator+(L, R);
2442 LR operator-(L, R);
2443 bool operator<(L, R);
2444 bool operator>(L, R);
2445 bool operator<=(L, R);
2446 bool operator>=(L, R);
2447 bool operator==(L, R);
2448 bool operator!=(L, R);
2449 where LR is the result of the usual arithmetic conversions between
2450 types L and R.
2452 14For every pair of types T and I, where T is a cv-qualified or cv-
2453 unqualified complete object type and I is a promoted integral type,
2454 there exist candidate operator functions of the form
2455 T* operator+(T*, I);
2456 T& operator[](T*, I);
2457 T* operator-(T*, I);
2458 T* operator+(I, T*);
2459 T& operator[](I, T*);
2461 15For every T, where T is a pointer to complete object type, there exist
2462 candidate operator functions of the form112)
2463 ptrdiff_t operator-(T, T);
2465 16For every pointer or enumeration type T, there exist candidate operator
2466 functions of the form
2467 bool operator<(T, T);
2468 bool operator>(T, T);
2469 bool operator<=(T, T);
2470 bool operator>=(T, T);
2471 bool operator==(T, T);
2472 bool operator!=(T, T);
2474 17For every pointer to member type T, there exist candidate operator
2475 functions of the form
2476 bool operator==(T, T);
2477 bool operator!=(T, T); */
2479 case MINUS_EXPR:
2480 if (TYPE_PTROB_P (type1) && TYPE_PTROB_P (type2))
2481 break;
2482 if (TYPE_PTROB_P (type1)
2483 && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2485 type2 = ptrdiff_type_node;
2486 break;
2488 case MULT_EXPR:
2489 case TRUNC_DIV_EXPR:
2490 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2491 break;
2492 return;
2494 case EQ_EXPR:
2495 case NE_EXPR:
2496 if ((TYPE_PTRMEMFUNC_P (type1) && TYPE_PTRMEMFUNC_P (type2))
2497 || (TYPE_PTRDATAMEM_P (type1) && TYPE_PTRDATAMEM_P (type2)))
2498 break;
2499 if (TYPE_PTRMEM_P (type1) && null_ptr_cst_p (args[1]))
2501 type2 = type1;
2502 break;
2504 if (TYPE_PTRMEM_P (type2) && null_ptr_cst_p (args[0]))
2506 type1 = type2;
2507 break;
2509 /* Fall through. */
2510 case LT_EXPR:
2511 case GT_EXPR:
2512 case LE_EXPR:
2513 case GE_EXPR:
2514 case MAX_EXPR:
2515 case MIN_EXPR:
2516 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2517 break;
2518 if (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
2519 break;
2520 if (TREE_CODE (type1) == ENUMERAL_TYPE
2521 && TREE_CODE (type2) == ENUMERAL_TYPE)
2522 break;
2523 if (TYPE_PTR_P (type1)
2524 && null_ptr_cst_p (args[1]))
2526 type2 = type1;
2527 break;
2529 if (null_ptr_cst_p (args[0])
2530 && TYPE_PTR_P (type2))
2532 type1 = type2;
2533 break;
2535 return;
2537 case PLUS_EXPR:
2538 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2539 break;
2540 case ARRAY_REF:
2541 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1) && TYPE_PTROB_P (type2))
2543 type1 = ptrdiff_type_node;
2544 break;
2546 if (TYPE_PTROB_P (type1) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2548 type2 = ptrdiff_type_node;
2549 break;
2551 return;
2553 /* 18For every pair of promoted integral types L and R, there exist candi-
2554 date operator functions of the form
2555 LR operator%(L, R);
2556 LR operator&(L, R);
2557 LR operator^(L, R);
2558 LR operator|(L, R);
2559 L operator<<(L, R);
2560 L operator>>(L, R);
2561 where LR is the result of the usual arithmetic conversions between
2562 types L and R. */
2564 case TRUNC_MOD_EXPR:
2565 case BIT_AND_EXPR:
2566 case BIT_IOR_EXPR:
2567 case BIT_XOR_EXPR:
2568 case LSHIFT_EXPR:
2569 case RSHIFT_EXPR:
2570 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2571 break;
2572 return;
2574 /* 19For every triple L, VQ, R), where L is an arithmetic or enumeration
2575 type, VQ is either volatile or empty, and R is a promoted arithmetic
2576 type, there exist candidate operator functions of the form
2577 VQ L& operator=(VQ L&, R);
2578 VQ L& operator*=(VQ L&, R);
2579 VQ L& operator/=(VQ L&, R);
2580 VQ L& operator+=(VQ L&, R);
2581 VQ L& operator-=(VQ L&, R);
2583 20For every pair T, VQ), where T is any type and VQ is either volatile
2584 or empty, there exist candidate operator functions of the form
2585 T*VQ& operator=(T*VQ&, T*);
2587 21For every pair T, VQ), where T is a pointer to member type and VQ is
2588 either volatile or empty, there exist candidate operator functions of
2589 the form
2590 VQ T& operator=(VQ T&, T);
2592 22For every triple T, VQ, I), where T is a cv-qualified or cv-
2593 unqualified complete object type, VQ is either volatile or empty, and
2594 I is a promoted integral type, there exist candidate operator func-
2595 tions of the form
2596 T*VQ& operator+=(T*VQ&, I);
2597 T*VQ& operator-=(T*VQ&, I);
2599 23For every triple L, VQ, R), where L is an integral or enumeration
2600 type, VQ is either volatile or empty, and R is a promoted integral
2601 type, there exist candidate operator functions of the form
2603 VQ L& operator%=(VQ L&, R);
2604 VQ L& operator<<=(VQ L&, R);
2605 VQ L& operator>>=(VQ L&, R);
2606 VQ L& operator&=(VQ L&, R);
2607 VQ L& operator^=(VQ L&, R);
2608 VQ L& operator|=(VQ L&, R); */
2610 case MODIFY_EXPR:
2611 switch (code2)
2613 case PLUS_EXPR:
2614 case MINUS_EXPR:
2615 if (TYPE_PTROB_P (type1) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2617 type2 = ptrdiff_type_node;
2618 break;
2620 case MULT_EXPR:
2621 case TRUNC_DIV_EXPR:
2622 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2623 break;
2624 return;
2626 case TRUNC_MOD_EXPR:
2627 case BIT_AND_EXPR:
2628 case BIT_IOR_EXPR:
2629 case BIT_XOR_EXPR:
2630 case LSHIFT_EXPR:
2631 case RSHIFT_EXPR:
2632 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2633 break;
2634 return;
2636 case NOP_EXPR:
2637 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2638 break;
2639 if ((TYPE_PTRMEMFUNC_P (type1) && TYPE_PTRMEMFUNC_P (type2))
2640 || (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
2641 || (TYPE_PTRDATAMEM_P (type1) && TYPE_PTRDATAMEM_P (type2))
2642 || ((TYPE_PTRMEMFUNC_P (type1)
2643 || TYPE_PTR_P (type1))
2644 && null_ptr_cst_p (args[1])))
2646 type2 = type1;
2647 break;
2649 return;
2651 default:
2652 gcc_unreachable ();
2654 type1 = build_reference_type (type1);
2655 break;
2657 case COND_EXPR:
2658 /* [over.built]
2660 For every pair of promoted arithmetic types L and R, there
2661 exist candidate operator functions of the form
2663 LR operator?(bool, L, R);
2665 where LR is the result of the usual arithmetic conversions
2666 between types L and R.
2668 For every type T, where T is a pointer or pointer-to-member
2669 type, there exist candidate operator functions of the form T
2670 operator?(bool, T, T); */
2672 if (promoted_arithmetic_type_p (type1)
2673 && promoted_arithmetic_type_p (type2))
2674 /* That's OK. */
2675 break;
2677 /* Otherwise, the types should be pointers. */
2678 if (!TYPE_PTR_OR_PTRMEM_P (type1) || !TYPE_PTR_OR_PTRMEM_P (type2))
2679 return;
2681 /* We don't check that the two types are the same; the logic
2682 below will actually create two candidates; one in which both
2683 parameter types are TYPE1, and one in which both parameter
2684 types are TYPE2. */
2685 break;
2687 case REALPART_EXPR:
2688 case IMAGPART_EXPR:
2689 if (ARITHMETIC_TYPE_P (type1))
2690 break;
2691 return;
2693 default:
2694 gcc_unreachable ();
2697 /* Make sure we don't create builtin candidates with dependent types. */
2698 bool u1 = uses_template_parms (type1);
2699 bool u2 = type2 ? uses_template_parms (type2) : false;
2700 if (u1 || u2)
2702 /* Try to recover if one of the types is non-dependent. But if
2703 there's only one type, there's nothing we can do. */
2704 if (!type2)
2705 return;
2706 /* And we lose if both are dependent. */
2707 if (u1 && u2)
2708 return;
2709 /* Or if they have different forms. */
2710 if (TREE_CODE (type1) != TREE_CODE (type2))
2711 return;
2713 if (u1 && !u2)
2714 type1 = type2;
2715 else if (u2 && !u1)
2716 type2 = type1;
2719 /* If we're dealing with two pointer types or two enumeral types,
2720 we need candidates for both of them. */
2721 if (type2 && !same_type_p (type1, type2)
2722 && TREE_CODE (type1) == TREE_CODE (type2)
2723 && (TREE_CODE (type1) == REFERENCE_TYPE
2724 || (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
2725 || (TYPE_PTRDATAMEM_P (type1) && TYPE_PTRDATAMEM_P (type2))
2726 || TYPE_PTRMEMFUNC_P (type1)
2727 || MAYBE_CLASS_TYPE_P (type1)
2728 || TREE_CODE (type1) == ENUMERAL_TYPE))
2730 if (TYPE_PTR_OR_PTRMEM_P (type1))
2732 tree cptype = composite_pointer_type (type1, type2,
2733 error_mark_node,
2734 error_mark_node,
2735 CPO_CONVERSION,
2736 tf_none);
2737 if (cptype != error_mark_node)
2739 build_builtin_candidate
2740 (candidates, fnname, cptype, cptype, args, argtypes,
2741 flags, complain);
2742 return;
2746 build_builtin_candidate
2747 (candidates, fnname, type1, type1, args, argtypes, flags, complain);
2748 build_builtin_candidate
2749 (candidates, fnname, type2, type2, args, argtypes, flags, complain);
2750 return;
2753 build_builtin_candidate
2754 (candidates, fnname, type1, type2, args, argtypes, flags, complain);
2757 tree
2758 type_decays_to (tree type)
2760 if (TREE_CODE (type) == ARRAY_TYPE)
2761 return build_pointer_type (TREE_TYPE (type));
2762 if (TREE_CODE (type) == FUNCTION_TYPE)
2763 return build_pointer_type (type);
2764 return type;
2767 /* There are three conditions of builtin candidates:
2769 1) bool-taking candidates. These are the same regardless of the input.
2770 2) pointer-pair taking candidates. These are generated for each type
2771 one of the input types converts to.
2772 3) arithmetic candidates. According to the standard, we should generate
2773 all of these, but I'm trying not to...
2775 Here we generate a superset of the possible candidates for this particular
2776 case. That is a subset of the full set the standard defines, plus some
2777 other cases which the standard disallows. add_builtin_candidate will
2778 filter out the invalid set. */
2780 static void
2781 add_builtin_candidates (struct z_candidate **candidates, enum tree_code code,
2782 enum tree_code code2, tree fnname, tree *args,
2783 int flags, tsubst_flags_t complain)
2785 int ref1, i;
2786 int enum_p = 0;
2787 tree type, argtypes[3], t;
2788 /* TYPES[i] is the set of possible builtin-operator parameter types
2789 we will consider for the Ith argument. */
2790 vec<tree, va_gc> *types[2];
2791 unsigned ix;
2793 for (i = 0; i < 3; ++i)
2795 if (args[i])
2796 argtypes[i] = unlowered_expr_type (args[i]);
2797 else
2798 argtypes[i] = NULL_TREE;
2801 switch (code)
2803 /* 4 For every pair T, VQ), where T is an arithmetic or enumeration type,
2804 and VQ is either volatile or empty, there exist candidate operator
2805 functions of the form
2806 VQ T& operator++(VQ T&); */
2808 case POSTINCREMENT_EXPR:
2809 case PREINCREMENT_EXPR:
2810 case POSTDECREMENT_EXPR:
2811 case PREDECREMENT_EXPR:
2812 case MODIFY_EXPR:
2813 ref1 = 1;
2814 break;
2816 /* 24There also exist candidate operator functions of the form
2817 bool operator!(bool);
2818 bool operator&&(bool, bool);
2819 bool operator||(bool, bool); */
2821 case TRUTH_NOT_EXPR:
2822 build_builtin_candidate
2823 (candidates, fnname, boolean_type_node,
2824 NULL_TREE, args, argtypes, flags, complain);
2825 return;
2827 case TRUTH_ORIF_EXPR:
2828 case TRUTH_ANDIF_EXPR:
2829 build_builtin_candidate
2830 (candidates, fnname, boolean_type_node,
2831 boolean_type_node, args, argtypes, flags, complain);
2832 return;
2834 case ADDR_EXPR:
2835 case COMPOUND_EXPR:
2836 case COMPONENT_REF:
2837 return;
2839 case COND_EXPR:
2840 case EQ_EXPR:
2841 case NE_EXPR:
2842 case LT_EXPR:
2843 case LE_EXPR:
2844 case GT_EXPR:
2845 case GE_EXPR:
2846 enum_p = 1;
2847 /* Fall through. */
2849 default:
2850 ref1 = 0;
2853 types[0] = make_tree_vector ();
2854 types[1] = make_tree_vector ();
2856 for (i = 0; i < 2; ++i)
2858 if (! args[i])
2860 else if (MAYBE_CLASS_TYPE_P (argtypes[i]))
2862 tree convs;
2864 if (i == 0 && code == MODIFY_EXPR && code2 == NOP_EXPR)
2865 return;
2867 convs = lookup_conversions (argtypes[i]);
2869 if (code == COND_EXPR)
2871 if (real_lvalue_p (args[i]))
2872 vec_safe_push (types[i], build_reference_type (argtypes[i]));
2874 vec_safe_push (types[i], TYPE_MAIN_VARIANT (argtypes[i]));
2877 else if (! convs)
2878 return;
2880 for (; convs; convs = TREE_CHAIN (convs))
2882 type = TREE_TYPE (convs);
2884 if (i == 0 && ref1
2885 && (TREE_CODE (type) != REFERENCE_TYPE
2886 || CP_TYPE_CONST_P (TREE_TYPE (type))))
2887 continue;
2889 if (code == COND_EXPR && TREE_CODE (type) == REFERENCE_TYPE)
2890 vec_safe_push (types[i], type);
2892 type = non_reference (type);
2893 if (i != 0 || ! ref1)
2895 type = cv_unqualified (type_decays_to (type));
2896 if (enum_p && TREE_CODE (type) == ENUMERAL_TYPE)
2897 vec_safe_push (types[i], type);
2898 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
2899 type = type_promotes_to (type);
2902 if (! vec_member (type, types[i]))
2903 vec_safe_push (types[i], type);
2906 else
2908 if (code == COND_EXPR && real_lvalue_p (args[i]))
2909 vec_safe_push (types[i], build_reference_type (argtypes[i]));
2910 type = non_reference (argtypes[i]);
2911 if (i != 0 || ! ref1)
2913 type = cv_unqualified (type_decays_to (type));
2914 if (enum_p && UNSCOPED_ENUM_P (type))
2915 vec_safe_push (types[i], type);
2916 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
2917 type = type_promotes_to (type);
2919 vec_safe_push (types[i], type);
2923 /* Run through the possible parameter types of both arguments,
2924 creating candidates with those parameter types. */
2925 FOR_EACH_VEC_ELT_REVERSE (*(types[0]), ix, t)
2927 unsigned jx;
2928 tree u;
2930 if (!types[1]->is_empty ())
2931 FOR_EACH_VEC_ELT_REVERSE (*(types[1]), jx, u)
2932 add_builtin_candidate
2933 (candidates, code, code2, fnname, t,
2934 u, args, argtypes, flags, complain);
2935 else
2936 add_builtin_candidate
2937 (candidates, code, code2, fnname, t,
2938 NULL_TREE, args, argtypes, flags, complain);
2941 release_tree_vector (types[0]);
2942 release_tree_vector (types[1]);
2946 /* If TMPL can be successfully instantiated as indicated by
2947 EXPLICIT_TARGS and ARGLIST, adds the instantiation to CANDIDATES.
2949 TMPL is the template. EXPLICIT_TARGS are any explicit template
2950 arguments. ARGLIST is the arguments provided at the call-site.
2951 This does not change ARGLIST. The RETURN_TYPE is the desired type
2952 for conversion operators. If OBJ is NULL_TREE, FLAGS and CTYPE are
2953 as for add_function_candidate. If an OBJ is supplied, FLAGS and
2954 CTYPE are ignored, and OBJ is as for add_conv_candidate. */
2956 static struct z_candidate*
2957 add_template_candidate_real (struct z_candidate **candidates, tree tmpl,
2958 tree ctype, tree explicit_targs, tree first_arg,
2959 const vec<tree, va_gc> *arglist, tree return_type,
2960 tree access_path, tree conversion_path,
2961 int flags, tree obj, unification_kind_t strict,
2962 tsubst_flags_t complain)
2964 int ntparms = DECL_NTPARMS (tmpl);
2965 tree targs = make_tree_vec (ntparms);
2966 unsigned int len = vec_safe_length (arglist);
2967 unsigned int nargs = (first_arg == NULL_TREE ? 0 : 1) + len;
2968 unsigned int skip_without_in_chrg = 0;
2969 tree first_arg_without_in_chrg = first_arg;
2970 tree *args_without_in_chrg;
2971 unsigned int nargs_without_in_chrg;
2972 unsigned int ia, ix;
2973 tree arg;
2974 struct z_candidate *cand;
2975 tree fn;
2976 struct rejection_reason *reason = NULL;
2977 int errs;
2979 /* We don't do deduction on the in-charge parameter, the VTT
2980 parameter or 'this'. */
2981 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (tmpl))
2983 if (first_arg_without_in_chrg != NULL_TREE)
2984 first_arg_without_in_chrg = NULL_TREE;
2985 else
2986 ++skip_without_in_chrg;
2989 if ((DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (tmpl)
2990 || DECL_BASE_CONSTRUCTOR_P (tmpl))
2991 && CLASSTYPE_VBASECLASSES (DECL_CONTEXT (tmpl)))
2993 if (first_arg_without_in_chrg != NULL_TREE)
2994 first_arg_without_in_chrg = NULL_TREE;
2995 else
2996 ++skip_without_in_chrg;
2999 if (len < skip_without_in_chrg)
3000 return NULL;
3002 nargs_without_in_chrg = ((first_arg_without_in_chrg != NULL_TREE ? 1 : 0)
3003 + (len - skip_without_in_chrg));
3004 args_without_in_chrg = XALLOCAVEC (tree, nargs_without_in_chrg);
3005 ia = 0;
3006 if (first_arg_without_in_chrg != NULL_TREE)
3008 args_without_in_chrg[ia] = first_arg_without_in_chrg;
3009 ++ia;
3011 for (ix = skip_without_in_chrg;
3012 vec_safe_iterate (arglist, ix, &arg);
3013 ++ix)
3015 args_without_in_chrg[ia] = arg;
3016 ++ia;
3018 gcc_assert (ia == nargs_without_in_chrg);
3020 errs = errorcount+sorrycount;
3021 fn = fn_type_unification (tmpl, explicit_targs, targs,
3022 args_without_in_chrg,
3023 nargs_without_in_chrg,
3024 return_type, strict, flags, false,
3025 complain & tf_decltype);
3027 if (fn == error_mark_node)
3029 /* Don't repeat unification later if it already resulted in errors. */
3030 if (errorcount+sorrycount == errs)
3031 reason = template_unification_rejection (tmpl, explicit_targs,
3032 targs, args_without_in_chrg,
3033 nargs_without_in_chrg,
3034 return_type, strict, flags);
3035 else
3036 reason = template_unification_error_rejection ();
3037 goto fail;
3040 /* In [class.copy]:
3042 A member function template is never instantiated to perform the
3043 copy of a class object to an object of its class type.
3045 It's a little unclear what this means; the standard explicitly
3046 does allow a template to be used to copy a class. For example,
3049 struct A {
3050 A(A&);
3051 template <class T> A(const T&);
3053 const A f ();
3054 void g () { A a (f ()); }
3056 the member template will be used to make the copy. The section
3057 quoted above appears in the paragraph that forbids constructors
3058 whose only parameter is (a possibly cv-qualified variant of) the
3059 class type, and a logical interpretation is that the intent was
3060 to forbid the instantiation of member templates which would then
3061 have that form. */
3062 if (DECL_CONSTRUCTOR_P (fn) && nargs == 2)
3064 tree arg_types = FUNCTION_FIRST_USER_PARMTYPE (fn);
3065 if (arg_types && same_type_p (TYPE_MAIN_VARIANT (TREE_VALUE (arg_types)),
3066 ctype))
3068 reason = invalid_copy_with_fn_template_rejection ();
3069 goto fail;
3073 if (obj != NULL_TREE)
3074 /* Aha, this is a conversion function. */
3075 cand = add_conv_candidate (candidates, fn, obj, first_arg, arglist,
3076 access_path, conversion_path, complain);
3077 else
3078 cand = add_function_candidate (candidates, fn, ctype,
3079 first_arg, arglist, access_path,
3080 conversion_path, flags, complain);
3081 if (DECL_TI_TEMPLATE (fn) != tmpl)
3082 /* This situation can occur if a member template of a template
3083 class is specialized. Then, instantiate_template might return
3084 an instantiation of the specialization, in which case the
3085 DECL_TI_TEMPLATE field will point at the original
3086 specialization. For example:
3088 template <class T> struct S { template <class U> void f(U);
3089 template <> void f(int) {}; };
3090 S<double> sd;
3091 sd.f(3);
3093 Here, TMPL will be template <class U> S<double>::f(U).
3094 And, instantiate template will give us the specialization
3095 template <> S<double>::f(int). But, the DECL_TI_TEMPLATE field
3096 for this will point at template <class T> template <> S<T>::f(int),
3097 so that we can find the definition. For the purposes of
3098 overload resolution, however, we want the original TMPL. */
3099 cand->template_decl = build_template_info (tmpl, targs);
3100 else
3101 cand->template_decl = DECL_TEMPLATE_INFO (fn);
3102 cand->explicit_targs = explicit_targs;
3104 return cand;
3105 fail:
3106 return add_candidate (candidates, tmpl, first_arg, arglist, nargs, NULL,
3107 access_path, conversion_path, 0, reason, flags);
3111 static struct z_candidate *
3112 add_template_candidate (struct z_candidate **candidates, tree tmpl, tree ctype,
3113 tree explicit_targs, tree first_arg,
3114 const vec<tree, va_gc> *arglist, tree return_type,
3115 tree access_path, tree conversion_path, int flags,
3116 unification_kind_t strict, tsubst_flags_t complain)
3118 return
3119 add_template_candidate_real (candidates, tmpl, ctype,
3120 explicit_targs, first_arg, arglist,
3121 return_type, access_path, conversion_path,
3122 flags, NULL_TREE, strict, complain);
3126 static struct z_candidate *
3127 add_template_conv_candidate (struct z_candidate **candidates, tree tmpl,
3128 tree obj, tree first_arg,
3129 const vec<tree, va_gc> *arglist,
3130 tree return_type, tree access_path,
3131 tree conversion_path, tsubst_flags_t complain)
3133 return
3134 add_template_candidate_real (candidates, tmpl, NULL_TREE, NULL_TREE,
3135 first_arg, arglist, return_type, access_path,
3136 conversion_path, 0, obj, DEDUCE_CONV,
3137 complain);
3140 /* The CANDS are the set of candidates that were considered for
3141 overload resolution. Return the set of viable candidates, or CANDS
3142 if none are viable. If any of the candidates were viable, set
3143 *ANY_VIABLE_P to true. STRICT_P is true if a candidate should be
3144 considered viable only if it is strictly viable. */
3146 static struct z_candidate*
3147 splice_viable (struct z_candidate *cands,
3148 bool strict_p,
3149 bool *any_viable_p)
3151 struct z_candidate *viable;
3152 struct z_candidate **last_viable;
3153 struct z_candidate **cand;
3154 bool found_strictly_viable = false;
3156 /* Be strict inside templates, since build_over_call won't actually
3157 do the conversions to get pedwarns. */
3158 if (processing_template_decl)
3159 strict_p = true;
3161 viable = NULL;
3162 last_viable = &viable;
3163 *any_viable_p = false;
3165 cand = &cands;
3166 while (*cand)
3168 struct z_candidate *c = *cand;
3169 if (!strict_p
3170 && (c->viable == 1 || TREE_CODE (c->fn) == TEMPLATE_DECL))
3172 /* Be strict in the presence of a viable candidate. Also if
3173 there are template candidates, so that we get deduction errors
3174 for them instead of silently preferring a bad conversion. */
3175 strict_p = true;
3176 if (viable && !found_strictly_viable)
3178 /* Put any spliced near matches back onto the main list so
3179 that we see them if there is no strict match. */
3180 *any_viable_p = false;
3181 *last_viable = cands;
3182 cands = viable;
3183 viable = NULL;
3184 last_viable = &viable;
3188 if (strict_p ? c->viable == 1 : c->viable)
3190 *last_viable = c;
3191 *cand = c->next;
3192 c->next = NULL;
3193 last_viable = &c->next;
3194 *any_viable_p = true;
3195 if (c->viable == 1)
3196 found_strictly_viable = true;
3198 else
3199 cand = &c->next;
3202 return viable ? viable : cands;
3205 static bool
3206 any_strictly_viable (struct z_candidate *cands)
3208 for (; cands; cands = cands->next)
3209 if (cands->viable == 1)
3210 return true;
3211 return false;
3214 /* OBJ is being used in an expression like "OBJ.f (...)". In other
3215 words, it is about to become the "this" pointer for a member
3216 function call. Take the address of the object. */
3218 static tree
3219 build_this (tree obj)
3221 /* In a template, we are only concerned about the type of the
3222 expression, so we can take a shortcut. */
3223 if (processing_template_decl)
3224 return build_address (obj);
3226 return cp_build_addr_expr (obj, tf_warning_or_error);
3229 /* Returns true iff functions are equivalent. Equivalent functions are
3230 not '==' only if one is a function-local extern function or if
3231 both are extern "C". */
3233 static inline int
3234 equal_functions (tree fn1, tree fn2)
3236 if (TREE_CODE (fn1) != TREE_CODE (fn2))
3237 return 0;
3238 if (TREE_CODE (fn1) == TEMPLATE_DECL)
3239 return fn1 == fn2;
3240 if (DECL_LOCAL_FUNCTION_P (fn1) || DECL_LOCAL_FUNCTION_P (fn2)
3241 || DECL_EXTERN_C_FUNCTION_P (fn1))
3242 return decls_match (fn1, fn2);
3243 return fn1 == fn2;
3246 /* Print information about a candidate being rejected due to INFO. */
3248 static void
3249 print_conversion_rejection (location_t loc, struct conversion_info *info)
3251 tree from = info->from;
3252 if (!TYPE_P (from))
3253 from = lvalue_type (from);
3254 if (info->n_arg == -1)
3256 /* Conversion of implicit `this' argument failed. */
3257 if (!TYPE_P (info->from))
3258 /* A bad conversion for 'this' must be discarding cv-quals. */
3259 inform (loc, " passing %qT as %<this%> "
3260 "argument discards qualifiers",
3261 from);
3262 else
3263 inform (loc, " no known conversion for implicit "
3264 "%<this%> parameter from %qT to %qT",
3265 from, info->to_type);
3267 else if (!TYPE_P (info->from))
3269 if (info->n_arg >= 0)
3270 inform (loc, " conversion of argument %d would be ill-formed:",
3271 info->n_arg + 1);
3272 perform_implicit_conversion (info->to_type, info->from,
3273 tf_warning_or_error);
3275 else if (info->n_arg == -2)
3276 /* Conversion of conversion function return value failed. */
3277 inform (loc, " no known conversion from %qT to %qT",
3278 from, info->to_type);
3279 else
3280 inform (loc, " no known conversion for argument %d from %qT to %qT",
3281 info->n_arg + 1, from, info->to_type);
3284 /* Print information about a candidate with WANT parameters and we found
3285 HAVE. */
3287 static void
3288 print_arity_information (location_t loc, unsigned int have, unsigned int want)
3290 inform_n (loc, want,
3291 " candidate expects %d argument, %d provided",
3292 " candidate expects %d arguments, %d provided",
3293 want, have);
3296 /* Print information about one overload candidate CANDIDATE. MSGSTR
3297 is the text to print before the candidate itself.
3299 NOTE: Unlike most diagnostic functions in GCC, MSGSTR is expected
3300 to have been run through gettext by the caller. This wart makes
3301 life simpler in print_z_candidates and for the translators. */
3303 static void
3304 print_z_candidate (location_t loc, const char *msgstr,
3305 struct z_candidate *candidate)
3307 const char *msg = (msgstr == NULL
3308 ? ""
3309 : ACONCAT ((msgstr, " ", NULL)));
3310 location_t cloc = location_of (candidate->fn);
3312 if (identifier_p (candidate->fn))
3314 cloc = loc;
3315 if (candidate->num_convs == 3)
3316 inform (cloc, "%s%D(%T, %T, %T) <built-in>", msg, candidate->fn,
3317 candidate->convs[0]->type,
3318 candidate->convs[1]->type,
3319 candidate->convs[2]->type);
3320 else if (candidate->num_convs == 2)
3321 inform (cloc, "%s%D(%T, %T) <built-in>", msg, candidate->fn,
3322 candidate->convs[0]->type,
3323 candidate->convs[1]->type);
3324 else
3325 inform (cloc, "%s%D(%T) <built-in>", msg, candidate->fn,
3326 candidate->convs[0]->type);
3328 else if (TYPE_P (candidate->fn))
3329 inform (cloc, "%s%T <conversion>", msg, candidate->fn);
3330 else if (candidate->viable == -1)
3331 inform (cloc, "%s%#D <near match>", msg, candidate->fn);
3332 else if (DECL_DELETED_FN (candidate->fn))
3333 inform (cloc, "%s%#D <deleted>", msg, candidate->fn);
3334 else
3335 inform (cloc, "%s%#D", msg, candidate->fn);
3336 /* Give the user some information about why this candidate failed. */
3337 if (candidate->reason != NULL)
3339 struct rejection_reason *r = candidate->reason;
3341 switch (r->code)
3343 case rr_arity:
3344 print_arity_information (cloc, r->u.arity.actual,
3345 r->u.arity.expected);
3346 break;
3347 case rr_arg_conversion:
3348 print_conversion_rejection (cloc, &r->u.conversion);
3349 break;
3350 case rr_bad_arg_conversion:
3351 print_conversion_rejection (cloc, &r->u.bad_conversion);
3352 break;
3353 case rr_explicit_conversion:
3354 inform (cloc, " return type %qT of explicit conversion function "
3355 "cannot be converted to %qT with a qualification "
3356 "conversion", r->u.conversion.from,
3357 r->u.conversion.to_type);
3358 break;
3359 case rr_template_conversion:
3360 inform (cloc, " conversion from return type %qT of template "
3361 "conversion function specialization to %qT is not an "
3362 "exact match", r->u.conversion.from,
3363 r->u.conversion.to_type);
3364 break;
3365 case rr_template_unification:
3366 /* We use template_unification_error_rejection if unification caused
3367 actual non-SFINAE errors, in which case we don't need to repeat
3368 them here. */
3369 if (r->u.template_unification.tmpl == NULL_TREE)
3371 inform (cloc, " substitution of deduced template arguments "
3372 "resulted in errors seen above");
3373 break;
3375 /* Re-run template unification with diagnostics. */
3376 inform (cloc, " template argument deduction/substitution failed:");
3377 fn_type_unification (r->u.template_unification.tmpl,
3378 r->u.template_unification.explicit_targs,
3379 (make_tree_vec
3380 (r->u.template_unification.num_targs)),
3381 r->u.template_unification.args,
3382 r->u.template_unification.nargs,
3383 r->u.template_unification.return_type,
3384 r->u.template_unification.strict,
3385 r->u.template_unification.flags,
3386 true, false);
3387 break;
3388 case rr_invalid_copy:
3389 inform (cloc,
3390 " a constructor taking a single argument of its own "
3391 "class type is invalid");
3392 break;
3393 case rr_none:
3394 default:
3395 /* This candidate didn't have any issues or we failed to
3396 handle a particular code. Either way... */
3397 gcc_unreachable ();
3402 static void
3403 print_z_candidates (location_t loc, struct z_candidate *candidates)
3405 struct z_candidate *cand1;
3406 struct z_candidate **cand2;
3407 int n_candidates;
3409 if (!candidates)
3410 return;
3412 /* Remove non-viable deleted candidates. */
3413 cand1 = candidates;
3414 for (cand2 = &cand1; *cand2; )
3416 if (TREE_CODE ((*cand2)->fn) == FUNCTION_DECL
3417 && !(*cand2)->viable
3418 && DECL_DELETED_FN ((*cand2)->fn))
3419 *cand2 = (*cand2)->next;
3420 else
3421 cand2 = &(*cand2)->next;
3423 /* ...if there are any non-deleted ones. */
3424 if (cand1)
3425 candidates = cand1;
3427 /* There may be duplicates in the set of candidates. We put off
3428 checking this condition as long as possible, since we have no way
3429 to eliminate duplicates from a set of functions in less than n^2
3430 time. Now we are about to emit an error message, so it is more
3431 permissible to go slowly. */
3432 for (cand1 = candidates; cand1; cand1 = cand1->next)
3434 tree fn = cand1->fn;
3435 /* Skip builtin candidates and conversion functions. */
3436 if (!DECL_P (fn))
3437 continue;
3438 cand2 = &cand1->next;
3439 while (*cand2)
3441 if (DECL_P ((*cand2)->fn)
3442 && equal_functions (fn, (*cand2)->fn))
3443 *cand2 = (*cand2)->next;
3444 else
3445 cand2 = &(*cand2)->next;
3449 for (n_candidates = 0, cand1 = candidates; cand1; cand1 = cand1->next)
3450 n_candidates++;
3452 for (; candidates; candidates = candidates->next)
3453 print_z_candidate (loc, "candidate:", candidates);
3456 /* USER_SEQ is a user-defined conversion sequence, beginning with a
3457 USER_CONV. STD_SEQ is the standard conversion sequence applied to
3458 the result of the conversion function to convert it to the final
3459 desired type. Merge the two sequences into a single sequence,
3460 and return the merged sequence. */
3462 static conversion *
3463 merge_conversion_sequences (conversion *user_seq, conversion *std_seq)
3465 conversion **t;
3466 bool bad = user_seq->bad_p;
3468 gcc_assert (user_seq->kind == ck_user);
3470 /* Find the end of the second conversion sequence. */
3471 for (t = &std_seq; (*t)->kind != ck_identity; t = &((*t)->u.next))
3473 /* The entire sequence is a user-conversion sequence. */
3474 (*t)->user_conv_p = true;
3475 if (bad)
3476 (*t)->bad_p = true;
3479 /* Replace the identity conversion with the user conversion
3480 sequence. */
3481 *t = user_seq;
3483 return std_seq;
3486 /* Handle overload resolution for initializing an object of class type from
3487 an initializer list. First we look for a suitable constructor that
3488 takes a std::initializer_list; if we don't find one, we then look for a
3489 non-list constructor.
3491 Parameters are as for add_candidates, except that the arguments are in
3492 the form of a CONSTRUCTOR (the initializer list) rather than a vector, and
3493 the RETURN_TYPE parameter is replaced by TOTYPE, the desired type. */
3495 static void
3496 add_list_candidates (tree fns, tree first_arg,
3497 tree init_list, tree totype,
3498 tree explicit_targs, bool template_only,
3499 tree conversion_path, tree access_path,
3500 int flags,
3501 struct z_candidate **candidates,
3502 tsubst_flags_t complain)
3504 vec<tree, va_gc> *args;
3506 gcc_assert (*candidates == NULL);
3508 /* We're looking for a ctor for list-initialization. */
3509 flags |= LOOKUP_LIST_INIT_CTOR;
3510 /* And we don't allow narrowing conversions. We also use this flag to
3511 avoid the copy constructor call for copy-list-initialization. */
3512 flags |= LOOKUP_NO_NARROWING;
3514 /* Always use the default constructor if the list is empty (DR 990). */
3515 if (CONSTRUCTOR_NELTS (init_list) == 0
3516 && TYPE_HAS_DEFAULT_CONSTRUCTOR (totype))
3518 /* If the class has a list ctor, try passing the list as a single
3519 argument first, but only consider list ctors. */
3520 else if (TYPE_HAS_LIST_CTOR (totype))
3522 flags |= LOOKUP_LIST_ONLY;
3523 args = make_tree_vector_single (init_list);
3524 add_candidates (fns, first_arg, args, NULL_TREE,
3525 explicit_targs, template_only, conversion_path,
3526 access_path, flags, candidates, complain);
3527 if (any_strictly_viable (*candidates))
3528 return;
3531 args = ctor_to_vec (init_list);
3533 /* We aren't looking for list-ctors anymore. */
3534 flags &= ~LOOKUP_LIST_ONLY;
3535 /* We allow more user-defined conversions within an init-list. */
3536 flags &= ~LOOKUP_NO_CONVERSION;
3538 add_candidates (fns, first_arg, args, NULL_TREE,
3539 explicit_targs, template_only, conversion_path,
3540 access_path, flags, candidates, complain);
3543 /* Returns the best overload candidate to perform the requested
3544 conversion. This function is used for three the overloading situations
3545 described in [over.match.copy], [over.match.conv], and [over.match.ref].
3546 If TOTYPE is a REFERENCE_TYPE, we're trying to find a direct binding as
3547 per [dcl.init.ref], so we ignore temporary bindings. */
3549 static struct z_candidate *
3550 build_user_type_conversion_1 (tree totype, tree expr, int flags,
3551 tsubst_flags_t complain)
3553 struct z_candidate *candidates, *cand;
3554 tree fromtype;
3555 tree ctors = NULL_TREE;
3556 tree conv_fns = NULL_TREE;
3557 conversion *conv = NULL;
3558 tree first_arg = NULL_TREE;
3559 vec<tree, va_gc> *args = NULL;
3560 bool any_viable_p;
3561 int convflags;
3563 if (!expr)
3564 return NULL;
3566 fromtype = TREE_TYPE (expr);
3568 /* We represent conversion within a hierarchy using RVALUE_CONV and
3569 BASE_CONV, as specified by [over.best.ics]; these become plain
3570 constructor calls, as specified in [dcl.init]. */
3571 gcc_assert (!MAYBE_CLASS_TYPE_P (fromtype) || !MAYBE_CLASS_TYPE_P (totype)
3572 || !DERIVED_FROM_P (totype, fromtype));
3574 if (MAYBE_CLASS_TYPE_P (totype))
3575 /* Use lookup_fnfields_slot instead of lookup_fnfields to avoid
3576 creating a garbage BASELINK; constructors can't be inherited. */
3577 ctors = lookup_fnfields_slot (totype, complete_ctor_identifier);
3579 if (MAYBE_CLASS_TYPE_P (fromtype))
3581 tree to_nonref = non_reference (totype);
3582 if (same_type_ignoring_top_level_qualifiers_p (to_nonref, fromtype) ||
3583 (CLASS_TYPE_P (to_nonref) && CLASS_TYPE_P (fromtype)
3584 && DERIVED_FROM_P (to_nonref, fromtype)))
3586 /* [class.conv.fct] A conversion function is never used to
3587 convert a (possibly cv-qualified) object to the (possibly
3588 cv-qualified) same object type (or a reference to it), to a
3589 (possibly cv-qualified) base class of that type (or a
3590 reference to it)... */
3592 else
3593 conv_fns = lookup_conversions (fromtype);
3596 candidates = 0;
3597 flags |= LOOKUP_NO_CONVERSION;
3598 if (BRACE_ENCLOSED_INITIALIZER_P (expr))
3599 flags |= LOOKUP_NO_NARROWING;
3601 /* It's OK to bind a temporary for converting constructor arguments, but
3602 not in converting the return value of a conversion operator. */
3603 convflags = ((flags & LOOKUP_NO_TEMP_BIND) | LOOKUP_NO_CONVERSION
3604 | (flags & LOOKUP_NO_NARROWING));
3605 flags &= ~LOOKUP_NO_TEMP_BIND;
3607 if (ctors)
3609 int ctorflags = flags;
3611 first_arg = build_dummy_object (totype);
3613 /* We should never try to call the abstract or base constructor
3614 from here. */
3615 gcc_assert (!DECL_HAS_IN_CHARGE_PARM_P (OVL_CURRENT (ctors))
3616 && !DECL_HAS_VTT_PARM_P (OVL_CURRENT (ctors)));
3618 if (BRACE_ENCLOSED_INITIALIZER_P (expr))
3620 /* List-initialization. */
3621 add_list_candidates (ctors, first_arg, expr, totype, NULL_TREE,
3622 false, TYPE_BINFO (totype), TYPE_BINFO (totype),
3623 ctorflags, &candidates, complain);
3625 else
3627 args = make_tree_vector_single (expr);
3628 add_candidates (ctors, first_arg, args, NULL_TREE, NULL_TREE, false,
3629 TYPE_BINFO (totype), TYPE_BINFO (totype),
3630 ctorflags, &candidates, complain);
3633 for (cand = candidates; cand; cand = cand->next)
3635 cand->second_conv = build_identity_conv (totype, NULL_TREE);
3637 /* If totype isn't a reference, and LOOKUP_NO_TEMP_BIND isn't
3638 set, then this is copy-initialization. In that case, "The
3639 result of the call is then used to direct-initialize the
3640 object that is the destination of the copy-initialization."
3641 [dcl.init]
3643 We represent this in the conversion sequence with an
3644 rvalue conversion, which means a constructor call. */
3645 if (TREE_CODE (totype) != REFERENCE_TYPE
3646 && !(convflags & LOOKUP_NO_TEMP_BIND))
3647 cand->second_conv
3648 = build_conv (ck_rvalue, totype, cand->second_conv);
3652 if (conv_fns)
3653 first_arg = expr;
3655 for (; conv_fns; conv_fns = TREE_CHAIN (conv_fns))
3657 tree conversion_path = TREE_PURPOSE (conv_fns);
3658 struct z_candidate *old_candidates;
3660 /* If we are called to convert to a reference type, we are trying to
3661 find a direct binding, so don't even consider temporaries. If
3662 we don't find a direct binding, the caller will try again to
3663 look for a temporary binding. */
3664 if (TREE_CODE (totype) == REFERENCE_TYPE)
3665 convflags |= LOOKUP_NO_TEMP_BIND;
3667 old_candidates = candidates;
3668 add_candidates (TREE_VALUE (conv_fns), first_arg, NULL, totype,
3669 NULL_TREE, false,
3670 conversion_path, TYPE_BINFO (fromtype),
3671 flags, &candidates, complain);
3673 for (cand = candidates; cand != old_candidates; cand = cand->next)
3675 tree rettype = TREE_TYPE (TREE_TYPE (cand->fn));
3676 conversion *ics
3677 = implicit_conversion (totype,
3678 rettype,
3680 /*c_cast_p=*/false, convflags,
3681 complain);
3683 /* If LOOKUP_NO_TEMP_BIND isn't set, then this is
3684 copy-initialization. In that case, "The result of the
3685 call is then used to direct-initialize the object that is
3686 the destination of the copy-initialization." [dcl.init]
3688 We represent this in the conversion sequence with an
3689 rvalue conversion, which means a constructor call. But
3690 don't add a second rvalue conversion if there's already
3691 one there. Which there really shouldn't be, but it's
3692 harmless since we'd add it here anyway. */
3693 if (ics && MAYBE_CLASS_TYPE_P (totype) && ics->kind != ck_rvalue
3694 && !(convflags & LOOKUP_NO_TEMP_BIND))
3695 ics = build_conv (ck_rvalue, totype, ics);
3697 cand->second_conv = ics;
3699 if (!ics)
3701 cand->viable = 0;
3702 cand->reason = arg_conversion_rejection (NULL_TREE, -2,
3703 rettype, totype);
3705 else if (DECL_NONCONVERTING_P (cand->fn)
3706 && ics->rank > cr_exact)
3708 /* 13.3.1.5: For direct-initialization, those explicit
3709 conversion functions that are not hidden within S and
3710 yield type T or a type that can be converted to type T
3711 with a qualification conversion (4.4) are also candidate
3712 functions. */
3713 /* 13.3.1.6 doesn't have a parallel restriction, but it should;
3714 I've raised this issue with the committee. --jason 9/2011 */
3715 cand->viable = -1;
3716 cand->reason = explicit_conversion_rejection (rettype, totype);
3718 else if (cand->viable == 1 && ics->bad_p)
3720 cand->viable = -1;
3721 cand->reason
3722 = bad_arg_conversion_rejection (NULL_TREE, -2,
3723 rettype, totype);
3725 else if (primary_template_instantiation_p (cand->fn)
3726 && ics->rank > cr_exact)
3728 /* 13.3.3.1.2: If the user-defined conversion is specified by
3729 a specialization of a conversion function template, the
3730 second standard conversion sequence shall have exact match
3731 rank. */
3732 cand->viable = -1;
3733 cand->reason = template_conversion_rejection (rettype, totype);
3738 candidates = splice_viable (candidates, false, &any_viable_p);
3739 if (!any_viable_p)
3741 if (args)
3742 release_tree_vector (args);
3743 return NULL;
3746 cand = tourney (candidates, complain);
3747 if (cand == 0)
3749 if (complain & tf_error)
3751 error ("conversion from %qT to %qT is ambiguous",
3752 fromtype, totype);
3753 print_z_candidates (location_of (expr), candidates);
3756 cand = candidates; /* any one will do */
3757 cand->second_conv = build_ambiguous_conv (totype, expr);
3758 cand->second_conv->user_conv_p = true;
3759 if (!any_strictly_viable (candidates))
3760 cand->second_conv->bad_p = true;
3761 /* If there are viable candidates, don't set ICS_BAD_FLAG; an
3762 ambiguous conversion is no worse than another user-defined
3763 conversion. */
3765 return cand;
3768 tree convtype;
3769 if (!DECL_CONSTRUCTOR_P (cand->fn))
3770 convtype = non_reference (TREE_TYPE (TREE_TYPE (cand->fn)));
3771 else if (cand->second_conv->kind == ck_rvalue)
3772 /* DR 5: [in the first step of copy-initialization]...if the function
3773 is a constructor, the call initializes a temporary of the
3774 cv-unqualified version of the destination type. */
3775 convtype = cv_unqualified (totype);
3776 else
3777 convtype = totype;
3778 /* Build the user conversion sequence. */
3779 conv = build_conv
3780 (ck_user,
3781 convtype,
3782 build_identity_conv (TREE_TYPE (expr), expr));
3783 conv->cand = cand;
3784 if (cand->viable == -1)
3785 conv->bad_p = true;
3787 /* Remember that this was a list-initialization. */
3788 if (flags & LOOKUP_NO_NARROWING)
3789 conv->check_narrowing = true;
3791 /* Combine it with the second conversion sequence. */
3792 cand->second_conv = merge_conversion_sequences (conv,
3793 cand->second_conv);
3795 return cand;
3798 /* Wrapper for above. */
3800 tree
3801 build_user_type_conversion (tree totype, tree expr, int flags,
3802 tsubst_flags_t complain)
3804 struct z_candidate *cand;
3805 tree ret;
3807 bool subtime = timevar_cond_start (TV_OVERLOAD);
3808 cand = build_user_type_conversion_1 (totype, expr, flags, complain);
3810 if (cand)
3812 if (cand->second_conv->kind == ck_ambig)
3813 ret = error_mark_node;
3814 else
3816 expr = convert_like (cand->second_conv, expr, complain);
3817 ret = convert_from_reference (expr);
3820 else
3821 ret = NULL_TREE;
3823 timevar_cond_stop (TV_OVERLOAD, subtime);
3824 return ret;
3827 /* Subroutine of convert_nontype_argument.
3829 EXPR is an argument for a template non-type parameter of integral or
3830 enumeration type. Do any necessary conversions (that are permitted for
3831 non-type arguments) to convert it to the parameter type.
3833 If conversion is successful, returns the converted expression;
3834 otherwise, returns error_mark_node. */
3836 tree
3837 build_integral_nontype_arg_conv (tree type, tree expr, tsubst_flags_t complain)
3839 conversion *conv;
3840 void *p;
3841 tree t;
3842 location_t loc = EXPR_LOC_OR_LOC (expr, input_location);
3844 if (error_operand_p (expr))
3845 return error_mark_node;
3847 gcc_assert (INTEGRAL_OR_ENUMERATION_TYPE_P (type));
3849 /* Get the high-water mark for the CONVERSION_OBSTACK. */
3850 p = conversion_obstack_alloc (0);
3852 conv = implicit_conversion (type, TREE_TYPE (expr), expr,
3853 /*c_cast_p=*/false,
3854 LOOKUP_IMPLICIT, complain);
3856 /* for a non-type template-parameter of integral or
3857 enumeration type, integral promotions (4.5) and integral
3858 conversions (4.7) are applied. */
3859 /* It should be sufficient to check the outermost conversion step, since
3860 there are no qualification conversions to integer type. */
3861 if (conv)
3862 switch (conv->kind)
3864 /* A conversion function is OK. If it isn't constexpr, we'll
3865 complain later that the argument isn't constant. */
3866 case ck_user:
3867 /* The lvalue-to-rvalue conversion is OK. */
3868 case ck_rvalue:
3869 case ck_identity:
3870 break;
3872 case ck_std:
3873 t = next_conversion (conv)->type;
3874 if (INTEGRAL_OR_ENUMERATION_TYPE_P (t))
3875 break;
3877 if (complain & tf_error)
3878 error_at (loc, "conversion from %qT to %qT not considered for "
3879 "non-type template argument", t, type);
3880 /* and fall through. */
3882 default:
3883 conv = NULL;
3884 break;
3887 if (conv)
3888 expr = convert_like (conv, expr, complain);
3889 else
3890 expr = error_mark_node;
3892 /* Free all the conversions we allocated. */
3893 obstack_free (&conversion_obstack, p);
3895 return expr;
3898 /* Do any initial processing on the arguments to a function call. */
3900 static vec<tree, va_gc> *
3901 resolve_args (vec<tree, va_gc> *args, tsubst_flags_t complain)
3903 unsigned int ix;
3904 tree arg;
3906 FOR_EACH_VEC_SAFE_ELT (args, ix, arg)
3908 if (error_operand_p (arg))
3909 return NULL;
3910 else if (VOID_TYPE_P (TREE_TYPE (arg)))
3912 if (complain & tf_error)
3913 error ("invalid use of void expression");
3914 return NULL;
3916 else if (invalid_nonstatic_memfn_p (arg, complain))
3917 return NULL;
3919 return args;
3922 /* Perform overload resolution on FN, which is called with the ARGS.
3924 Return the candidate function selected by overload resolution, or
3925 NULL if the event that overload resolution failed. In the case
3926 that overload resolution fails, *CANDIDATES will be the set of
3927 candidates considered, and ANY_VIABLE_P will be set to true or
3928 false to indicate whether or not any of the candidates were
3929 viable.
3931 The ARGS should already have gone through RESOLVE_ARGS before this
3932 function is called. */
3934 static struct z_candidate *
3935 perform_overload_resolution (tree fn,
3936 const vec<tree, va_gc> *args,
3937 struct z_candidate **candidates,
3938 bool *any_viable_p, tsubst_flags_t complain)
3940 struct z_candidate *cand;
3941 tree explicit_targs;
3942 int template_only;
3944 bool subtime = timevar_cond_start (TV_OVERLOAD);
3946 explicit_targs = NULL_TREE;
3947 template_only = 0;
3949 *candidates = NULL;
3950 *any_viable_p = true;
3952 /* Check FN. */
3953 gcc_assert (TREE_CODE (fn) == FUNCTION_DECL
3954 || TREE_CODE (fn) == TEMPLATE_DECL
3955 || TREE_CODE (fn) == OVERLOAD
3956 || TREE_CODE (fn) == TEMPLATE_ID_EXPR);
3958 if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
3960 explicit_targs = TREE_OPERAND (fn, 1);
3961 fn = TREE_OPERAND (fn, 0);
3962 template_only = 1;
3965 /* Add the various candidate functions. */
3966 add_candidates (fn, NULL_TREE, args, NULL_TREE,
3967 explicit_targs, template_only,
3968 /*conversion_path=*/NULL_TREE,
3969 /*access_path=*/NULL_TREE,
3970 LOOKUP_NORMAL,
3971 candidates, complain);
3973 *candidates = splice_viable (*candidates, false, any_viable_p);
3974 if (*any_viable_p)
3975 cand = tourney (*candidates, complain);
3976 else
3977 cand = NULL;
3979 timevar_cond_stop (TV_OVERLOAD, subtime);
3980 return cand;
3983 /* Print an error message about being unable to build a call to FN with
3984 ARGS. ANY_VIABLE_P indicates whether any candidate functions could
3985 be located; CANDIDATES is a possibly empty list of such
3986 functions. */
3988 static void
3989 print_error_for_call_failure (tree fn, vec<tree, va_gc> *args,
3990 struct z_candidate *candidates)
3992 tree name = DECL_NAME (OVL_CURRENT (fn));
3993 location_t loc = location_of (name);
3995 if (!any_strictly_viable (candidates))
3996 error_at (loc, "no matching function for call to %<%D(%A)%>",
3997 name, build_tree_list_vec (args));
3998 else
3999 error_at (loc, "call of overloaded %<%D(%A)%> is ambiguous",
4000 name, build_tree_list_vec (args));
4001 if (candidates)
4002 print_z_candidates (loc, candidates);
4005 /* Return an expression for a call to FN (a namespace-scope function,
4006 or a static member function) with the ARGS. This may change
4007 ARGS. */
4009 tree
4010 build_new_function_call (tree fn, vec<tree, va_gc> **args, bool koenig_p,
4011 tsubst_flags_t complain)
4013 struct z_candidate *candidates, *cand;
4014 bool any_viable_p;
4015 void *p;
4016 tree result;
4018 if (args != NULL && *args != NULL)
4020 *args = resolve_args (*args, complain);
4021 if (*args == NULL)
4022 return error_mark_node;
4025 if (flag_tm)
4026 tm_malloc_replacement (fn);
4028 /* If this function was found without using argument dependent
4029 lookup, then we want to ignore any undeclared friend
4030 functions. */
4031 if (!koenig_p)
4033 tree orig_fn = fn;
4035 fn = remove_hidden_names (fn);
4036 if (!fn)
4038 if (complain & tf_error)
4039 print_error_for_call_failure (orig_fn, *args, NULL);
4040 return error_mark_node;
4044 /* Get the high-water mark for the CONVERSION_OBSTACK. */
4045 p = conversion_obstack_alloc (0);
4047 cand = perform_overload_resolution (fn, *args, &candidates, &any_viable_p,
4048 complain);
4050 if (!cand)
4052 if (complain & tf_error)
4054 if (!any_viable_p && candidates && ! candidates->next
4055 && (TREE_CODE (candidates->fn) == FUNCTION_DECL))
4056 return cp_build_function_call_vec (candidates->fn, args, complain);
4057 if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
4058 fn = TREE_OPERAND (fn, 0);
4059 print_error_for_call_failure (fn, *args, candidates);
4061 result = error_mark_node;
4063 else
4065 int flags = LOOKUP_NORMAL;
4066 /* If fn is template_id_expr, the call has explicit template arguments
4067 (e.g. func<int>(5)), communicate this info to build_over_call
4068 through flags so that later we can use it to decide whether to warn
4069 about peculiar null pointer conversion. */
4070 if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
4071 flags |= LOOKUP_EXPLICIT_TMPL_ARGS;
4072 result = build_over_call (cand, flags, complain);
4075 /* Free all the conversions we allocated. */
4076 obstack_free (&conversion_obstack, p);
4078 return result;
4081 /* Build a call to a global operator new. FNNAME is the name of the
4082 operator (either "operator new" or "operator new[]") and ARGS are
4083 the arguments provided. This may change ARGS. *SIZE points to the
4084 total number of bytes required by the allocation, and is updated if
4085 that is changed here. *COOKIE_SIZE is non-NULL if a cookie should
4086 be used. If this function determines that no cookie should be
4087 used, after all, *COOKIE_SIZE is set to NULL_TREE. If SIZE_CHECK
4088 is not NULL_TREE, it is evaluated before calculating the final
4089 array size, and if it fails, the array size is replaced with
4090 (size_t)-1 (usually triggering a std::bad_alloc exception). If FN
4091 is non-NULL, it will be set, upon return, to the allocation
4092 function called. */
4094 tree
4095 build_operator_new_call (tree fnname, vec<tree, va_gc> **args,
4096 tree *size, tree *cookie_size, tree size_check,
4097 tree *fn, tsubst_flags_t complain)
4099 tree original_size = *size;
4100 tree fns;
4101 struct z_candidate *candidates;
4102 struct z_candidate *cand;
4103 bool any_viable_p;
4105 if (fn)
4106 *fn = NULL_TREE;
4107 /* Set to (size_t)-1 if the size check fails. */
4108 if (size_check != NULL_TREE)
4110 tree errval = TYPE_MAX_VALUE (sizetype);
4111 if (cxx_dialect >= cxx11 && flag_exceptions)
4112 errval = throw_bad_array_new_length ();
4113 *size = fold_build3 (COND_EXPR, sizetype, size_check,
4114 original_size, errval);
4116 vec_safe_insert (*args, 0, *size);
4117 *args = resolve_args (*args, complain);
4118 if (*args == NULL)
4119 return error_mark_node;
4121 /* Based on:
4123 [expr.new]
4125 If this lookup fails to find the name, or if the allocated type
4126 is not a class type, the allocation function's name is looked
4127 up in the global scope.
4129 we disregard block-scope declarations of "operator new". */
4130 fns = lookup_function_nonclass (fnname, *args, /*block_p=*/false);
4132 /* Figure out what function is being called. */
4133 cand = perform_overload_resolution (fns, *args, &candidates, &any_viable_p,
4134 complain);
4136 /* If no suitable function could be found, issue an error message
4137 and give up. */
4138 if (!cand)
4140 if (complain & tf_error)
4141 print_error_for_call_failure (fns, *args, candidates);
4142 return error_mark_node;
4145 /* If a cookie is required, add some extra space. Whether
4146 or not a cookie is required cannot be determined until
4147 after we know which function was called. */
4148 if (*cookie_size)
4150 bool use_cookie = true;
4151 tree arg_types;
4153 arg_types = TYPE_ARG_TYPES (TREE_TYPE (cand->fn));
4154 /* Skip the size_t parameter. */
4155 arg_types = TREE_CHAIN (arg_types);
4156 /* Check the remaining parameters (if any). */
4157 if (arg_types
4158 && TREE_CHAIN (arg_types) == void_list_node
4159 && same_type_p (TREE_VALUE (arg_types),
4160 ptr_type_node))
4161 use_cookie = false;
4162 /* If we need a cookie, adjust the number of bytes allocated. */
4163 if (use_cookie)
4165 /* Update the total size. */
4166 *size = size_binop (PLUS_EXPR, original_size, *cookie_size);
4167 /* Set to (size_t)-1 if the size check fails. */
4168 gcc_assert (size_check != NULL_TREE);
4169 *size = fold_build3 (COND_EXPR, sizetype, size_check,
4170 *size, TYPE_MAX_VALUE (sizetype));
4171 /* Update the argument list to reflect the adjusted size. */
4172 (**args)[0] = *size;
4174 else
4175 *cookie_size = NULL_TREE;
4178 /* Tell our caller which function we decided to call. */
4179 if (fn)
4180 *fn = cand->fn;
4182 /* Build the CALL_EXPR. */
4183 return build_over_call (cand, LOOKUP_NORMAL, complain);
4186 /* Build a new call to operator(). This may change ARGS. */
4188 static tree
4189 build_op_call_1 (tree obj, vec<tree, va_gc> **args, tsubst_flags_t complain)
4191 struct z_candidate *candidates = 0, *cand;
4192 tree fns, convs, first_mem_arg = NULL_TREE;
4193 tree type = TREE_TYPE (obj);
4194 bool any_viable_p;
4195 tree result = NULL_TREE;
4196 void *p;
4198 if (error_operand_p (obj))
4199 return error_mark_node;
4201 obj = prep_operand (obj);
4203 if (TYPE_PTRMEMFUNC_P (type))
4205 if (complain & tf_error)
4206 /* It's no good looking for an overloaded operator() on a
4207 pointer-to-member-function. */
4208 error ("pointer-to-member function %E cannot be called without an object; consider using .* or ->*", obj);
4209 return error_mark_node;
4212 if (TYPE_BINFO (type))
4214 fns = lookup_fnfields (TYPE_BINFO (type), ansi_opname (CALL_EXPR), 1);
4215 if (fns == error_mark_node)
4216 return error_mark_node;
4218 else
4219 fns = NULL_TREE;
4221 if (args != NULL && *args != NULL)
4223 *args = resolve_args (*args, complain);
4224 if (*args == NULL)
4225 return error_mark_node;
4228 /* Get the high-water mark for the CONVERSION_OBSTACK. */
4229 p = conversion_obstack_alloc (0);
4231 if (fns)
4233 first_mem_arg = obj;
4235 add_candidates (BASELINK_FUNCTIONS (fns),
4236 first_mem_arg, *args, NULL_TREE,
4237 NULL_TREE, false,
4238 BASELINK_BINFO (fns), BASELINK_ACCESS_BINFO (fns),
4239 LOOKUP_NORMAL, &candidates, complain);
4242 convs = lookup_conversions (type);
4244 for (; convs; convs = TREE_CHAIN (convs))
4246 tree fns = TREE_VALUE (convs);
4247 tree totype = TREE_TYPE (convs);
4249 if (TYPE_PTRFN_P (totype)
4250 || TYPE_REFFN_P (totype)
4251 || (TREE_CODE (totype) == REFERENCE_TYPE
4252 && TYPE_PTRFN_P (TREE_TYPE (totype))))
4253 for (; fns; fns = OVL_NEXT (fns))
4255 tree fn = OVL_CURRENT (fns);
4257 if (DECL_NONCONVERTING_P (fn))
4258 continue;
4260 if (TREE_CODE (fn) == TEMPLATE_DECL)
4261 add_template_conv_candidate
4262 (&candidates, fn, obj, NULL_TREE, *args, totype,
4263 /*access_path=*/NULL_TREE,
4264 /*conversion_path=*/NULL_TREE, complain);
4265 else
4266 add_conv_candidate (&candidates, fn, obj, NULL_TREE,
4267 *args, /*conversion_path=*/NULL_TREE,
4268 /*access_path=*/NULL_TREE, complain);
4272 /* Be strict here because if we choose a bad conversion candidate, the
4273 errors we get won't mention the call context. */
4274 candidates = splice_viable (candidates, true, &any_viable_p);
4275 if (!any_viable_p)
4277 if (complain & tf_error)
4279 error ("no match for call to %<(%T) (%A)%>", TREE_TYPE (obj),
4280 build_tree_list_vec (*args));
4281 print_z_candidates (location_of (TREE_TYPE (obj)), candidates);
4283 result = error_mark_node;
4285 else
4287 cand = tourney (candidates, complain);
4288 if (cand == 0)
4290 if (complain & tf_error)
4292 error ("call of %<(%T) (%A)%> is ambiguous",
4293 TREE_TYPE (obj), build_tree_list_vec (*args));
4294 print_z_candidates (location_of (TREE_TYPE (obj)), candidates);
4296 result = error_mark_node;
4298 /* Since cand->fn will be a type, not a function, for a conversion
4299 function, we must be careful not to unconditionally look at
4300 DECL_NAME here. */
4301 else if (TREE_CODE (cand->fn) == FUNCTION_DECL
4302 && DECL_OVERLOADED_OPERATOR_P (cand->fn) == CALL_EXPR)
4303 result = build_over_call (cand, LOOKUP_NORMAL, complain);
4304 else
4306 obj = convert_like_with_context (cand->convs[0], obj, cand->fn, -1,
4307 complain);
4308 obj = convert_from_reference (obj);
4309 result = cp_build_function_call_vec (obj, args, complain);
4313 /* Free all the conversions we allocated. */
4314 obstack_free (&conversion_obstack, p);
4316 return result;
4319 /* Wrapper for above. */
4321 tree
4322 build_op_call (tree obj, vec<tree, va_gc> **args, tsubst_flags_t complain)
4324 tree ret;
4325 bool subtime = timevar_cond_start (TV_OVERLOAD);
4326 ret = build_op_call_1 (obj, args, complain);
4327 timevar_cond_stop (TV_OVERLOAD, subtime);
4328 return ret;
4331 /* Called by op_error to prepare format strings suitable for the error
4332 function. It concatenates a prefix (controlled by MATCH), ERRMSG,
4333 and a suffix (controlled by NTYPES). */
4335 static const char *
4336 op_error_string (const char *errmsg, int ntypes, bool match)
4338 const char *msg;
4340 const char *msgp = concat (match ? G_("ambiguous overload for ")
4341 : G_("no match for "), errmsg, NULL);
4343 if (ntypes == 3)
4344 msg = concat (msgp, G_(" (operand types are %qT, %qT, and %qT)"), NULL);
4345 else if (ntypes == 2)
4346 msg = concat (msgp, G_(" (operand types are %qT and %qT)"), NULL);
4347 else
4348 msg = concat (msgp, G_(" (operand type is %qT)"), NULL);
4350 return msg;
4353 static void
4354 op_error (location_t loc, enum tree_code code, enum tree_code code2,
4355 tree arg1, tree arg2, tree arg3, bool match)
4357 const char *opname;
4359 if (code == MODIFY_EXPR)
4360 opname = assignment_operator_name_info[code2].name;
4361 else
4362 opname = operator_name_info[code].name;
4364 switch (code)
4366 case COND_EXPR:
4367 if (flag_diagnostics_show_caret)
4368 error_at (loc, op_error_string (G_("ternary %<operator?:%>"),
4369 3, match),
4370 TREE_TYPE (arg1), TREE_TYPE (arg2), TREE_TYPE (arg3));
4371 else
4372 error_at (loc, op_error_string (G_("ternary %<operator?:%> "
4373 "in %<%E ? %E : %E%>"), 3, match),
4374 arg1, arg2, arg3,
4375 TREE_TYPE (arg1), TREE_TYPE (arg2), TREE_TYPE (arg3));
4376 break;
4378 case POSTINCREMENT_EXPR:
4379 case POSTDECREMENT_EXPR:
4380 if (flag_diagnostics_show_caret)
4381 error_at (loc, op_error_string (G_("%<operator%s%>"), 1, match),
4382 opname, TREE_TYPE (arg1));
4383 else
4384 error_at (loc, op_error_string (G_("%<operator%s%> in %<%E%s%>"),
4385 1, match),
4386 opname, arg1, opname, TREE_TYPE (arg1));
4387 break;
4389 case ARRAY_REF:
4390 if (flag_diagnostics_show_caret)
4391 error_at (loc, op_error_string (G_("%<operator[]%>"), 2, match),
4392 TREE_TYPE (arg1), TREE_TYPE (arg2));
4393 else
4394 error_at (loc, op_error_string (G_("%<operator[]%> in %<%E[%E]%>"),
4395 2, match),
4396 arg1, arg2, TREE_TYPE (arg1), TREE_TYPE (arg2));
4397 break;
4399 case REALPART_EXPR:
4400 case IMAGPART_EXPR:
4401 if (flag_diagnostics_show_caret)
4402 error_at (loc, op_error_string (G_("%qs"), 1, match),
4403 opname, TREE_TYPE (arg1));
4404 else
4405 error_at (loc, op_error_string (G_("%qs in %<%s %E%>"), 1, match),
4406 opname, opname, arg1, TREE_TYPE (arg1));
4407 break;
4409 default:
4410 if (arg2)
4411 if (flag_diagnostics_show_caret)
4412 error_at (loc, op_error_string (G_("%<operator%s%>"), 2, match),
4413 opname, TREE_TYPE (arg1), TREE_TYPE (arg2));
4414 else
4415 error_at (loc, op_error_string (G_("%<operator%s%> in %<%E %s %E%>"),
4416 2, match),
4417 opname, arg1, opname, arg2,
4418 TREE_TYPE (arg1), TREE_TYPE (arg2));
4419 else
4420 if (flag_diagnostics_show_caret)
4421 error_at (loc, op_error_string (G_("%<operator%s%>"), 1, match),
4422 opname, TREE_TYPE (arg1));
4423 else
4424 error_at (loc, op_error_string (G_("%<operator%s%> in %<%s%E%>"),
4425 1, match),
4426 opname, opname, arg1, TREE_TYPE (arg1));
4427 break;
4431 /* Return the implicit conversion sequence that could be used to
4432 convert E1 to E2 in [expr.cond]. */
4434 static conversion *
4435 conditional_conversion (tree e1, tree e2, tsubst_flags_t complain)
4437 tree t1 = non_reference (TREE_TYPE (e1));
4438 tree t2 = non_reference (TREE_TYPE (e2));
4439 conversion *conv;
4440 bool good_base;
4442 /* [expr.cond]
4444 If E2 is an lvalue: E1 can be converted to match E2 if E1 can be
4445 implicitly converted (clause _conv_) to the type "lvalue reference to
4446 T2", subject to the constraint that in the conversion the
4447 reference must bind directly (_dcl.init.ref_) to an lvalue.
4449 If E2 is an xvalue: E1 can be converted to match E2 if E1 can be
4450 implicitly converted to the type "rvalue reference to T2", subject to
4451 the constraint that the reference must bind directly. */
4452 if (lvalue_or_rvalue_with_address_p (e2))
4454 tree rtype = cp_build_reference_type (t2, !real_lvalue_p (e2));
4455 conv = implicit_conversion (rtype,
4458 /*c_cast_p=*/false,
4459 LOOKUP_NO_TEMP_BIND|LOOKUP_NO_RVAL_BIND
4460 |LOOKUP_ONLYCONVERTING,
4461 complain);
4462 if (conv && !conv->bad_p)
4463 return conv;
4466 /* If E2 is a prvalue or if neither of the conversions above can be done
4467 and at least one of the operands has (possibly cv-qualified) class
4468 type: */
4469 if (!CLASS_TYPE_P (t1) && !CLASS_TYPE_P (t2))
4470 return NULL;
4472 /* [expr.cond]
4474 If E1 and E2 have class type, and the underlying class types are
4475 the same or one is a base class of the other: E1 can be converted
4476 to match E2 if the class of T2 is the same type as, or a base
4477 class of, the class of T1, and the cv-qualification of T2 is the
4478 same cv-qualification as, or a greater cv-qualification than, the
4479 cv-qualification of T1. If the conversion is applied, E1 is
4480 changed to an rvalue of type T2 that still refers to the original
4481 source class object (or the appropriate subobject thereof). */
4482 if (CLASS_TYPE_P (t1) && CLASS_TYPE_P (t2)
4483 && ((good_base = DERIVED_FROM_P (t2, t1)) || DERIVED_FROM_P (t1, t2)))
4485 if (good_base && at_least_as_qualified_p (t2, t1))
4487 conv = build_identity_conv (t1, e1);
4488 if (!same_type_p (TYPE_MAIN_VARIANT (t1),
4489 TYPE_MAIN_VARIANT (t2)))
4490 conv = build_conv (ck_base, t2, conv);
4491 else
4492 conv = build_conv (ck_rvalue, t2, conv);
4493 return conv;
4495 else
4496 return NULL;
4498 else
4499 /* [expr.cond]
4501 Otherwise: E1 can be converted to match E2 if E1 can be implicitly
4502 converted to the type that expression E2 would have if E2 were
4503 converted to an rvalue (or the type it has, if E2 is an rvalue). */
4504 return implicit_conversion (t2, t1, e1, /*c_cast_p=*/false,
4505 LOOKUP_IMPLICIT, complain);
4508 /* Implement [expr.cond]. ARG1, ARG2, and ARG3 are the three
4509 arguments to the conditional expression. */
4511 static tree
4512 build_conditional_expr_1 (location_t loc, tree arg1, tree arg2, tree arg3,
4513 tsubst_flags_t complain)
4515 tree arg2_type;
4516 tree arg3_type;
4517 tree result = NULL_TREE;
4518 tree result_type = NULL_TREE;
4519 bool lvalue_p = true;
4520 struct z_candidate *candidates = 0;
4521 struct z_candidate *cand;
4522 void *p;
4523 tree orig_arg2, orig_arg3;
4525 /* As a G++ extension, the second argument to the conditional can be
4526 omitted. (So that `a ? : c' is roughly equivalent to `a ? a :
4527 c'.) If the second operand is omitted, make sure it is
4528 calculated only once. */
4529 if (!arg2)
4531 if (complain & tf_error)
4532 pedwarn (loc, OPT_Wpedantic,
4533 "ISO C++ forbids omitting the middle term of a ?: expression");
4535 /* Make sure that lvalues remain lvalues. See g++.oliva/ext1.C. */
4536 if (real_lvalue_p (arg1))
4537 arg2 = arg1 = stabilize_reference (arg1);
4538 else
4539 arg2 = arg1 = save_expr (arg1);
4542 /* If something has already gone wrong, just pass that fact up the
4543 tree. */
4544 if (error_operand_p (arg1)
4545 || error_operand_p (arg2)
4546 || error_operand_p (arg3))
4547 return error_mark_node;
4549 orig_arg2 = arg2;
4550 orig_arg3 = arg3;
4552 if (VECTOR_INTEGER_TYPE_P (TREE_TYPE (arg1)))
4554 arg1 = force_rvalue (arg1, complain);
4555 arg2 = force_rvalue (arg2, complain);
4556 arg3 = force_rvalue (arg3, complain);
4558 /* force_rvalue can return error_mark on valid arguments. */
4559 if (error_operand_p (arg1)
4560 || error_operand_p (arg2)
4561 || error_operand_p (arg3))
4562 return error_mark_node;
4564 tree arg1_type = TREE_TYPE (arg1);
4565 arg2_type = TREE_TYPE (arg2);
4566 arg3_type = TREE_TYPE (arg3);
4568 if (TREE_CODE (arg2_type) != VECTOR_TYPE
4569 && TREE_CODE (arg3_type) != VECTOR_TYPE)
4571 /* Rely on the error messages of the scalar version. */
4572 tree scal = build_conditional_expr_1 (loc, integer_one_node,
4573 orig_arg2, orig_arg3, complain);
4574 if (scal == error_mark_node)
4575 return error_mark_node;
4576 tree stype = TREE_TYPE (scal);
4577 tree ctype = TREE_TYPE (arg1_type);
4578 if (TYPE_SIZE (stype) != TYPE_SIZE (ctype)
4579 || (!INTEGRAL_TYPE_P (stype) && !SCALAR_FLOAT_TYPE_P (stype)))
4581 if (complain & tf_error)
4582 error_at (loc, "inferred scalar type %qT is not an integer or "
4583 "floating point type of the same size as %qT", stype,
4584 COMPARISON_CLASS_P (arg1)
4585 ? TREE_TYPE (TREE_TYPE (TREE_OPERAND (arg1, 0)))
4586 : ctype);
4587 return error_mark_node;
4590 tree vtype = build_opaque_vector_type (stype,
4591 TYPE_VECTOR_SUBPARTS (arg1_type));
4592 /* We could pass complain & tf_warning to unsafe_conversion_p,
4593 but the warnings (like Wsign-conversion) have already been
4594 given by the scalar build_conditional_expr_1. We still check
4595 unsafe_conversion_p to forbid truncating long long -> float. */
4596 if (unsafe_conversion_p (loc, stype, arg2, false))
4598 if (complain & tf_error)
4599 error_at (loc, "conversion of scalar %qT to vector %qT "
4600 "involves truncation", arg2_type, vtype);
4601 return error_mark_node;
4603 if (unsafe_conversion_p (loc, stype, arg3, false))
4605 if (complain & tf_error)
4606 error_at (loc, "conversion of scalar %qT to vector %qT "
4607 "involves truncation", arg3_type, vtype);
4608 return error_mark_node;
4611 arg2 = cp_convert (stype, arg2, complain);
4612 arg2 = save_expr (arg2);
4613 arg2 = build_vector_from_val (vtype, arg2);
4614 arg2_type = vtype;
4615 arg3 = cp_convert (stype, arg3, complain);
4616 arg3 = save_expr (arg3);
4617 arg3 = build_vector_from_val (vtype, arg3);
4618 arg3_type = vtype;
4621 if ((TREE_CODE (arg2_type) == VECTOR_TYPE)
4622 != (TREE_CODE (arg3_type) == VECTOR_TYPE))
4624 enum stv_conv convert_flag =
4625 scalar_to_vector (loc, VEC_COND_EXPR, arg2, arg3,
4626 complain & tf_error);
4628 switch (convert_flag)
4630 case stv_error:
4631 return error_mark_node;
4632 case stv_firstarg:
4634 arg2 = save_expr (arg2);
4635 arg2 = convert (TREE_TYPE (arg3_type), arg2);
4636 arg2 = build_vector_from_val (arg3_type, arg2);
4637 arg2_type = TREE_TYPE (arg2);
4638 break;
4640 case stv_secondarg:
4642 arg3 = save_expr (arg3);
4643 arg3 = convert (TREE_TYPE (arg2_type), arg3);
4644 arg3 = build_vector_from_val (arg2_type, arg3);
4645 arg3_type = TREE_TYPE (arg3);
4646 break;
4648 default:
4649 break;
4653 if (!same_type_p (arg2_type, arg3_type)
4654 || TYPE_VECTOR_SUBPARTS (arg1_type)
4655 != TYPE_VECTOR_SUBPARTS (arg2_type)
4656 || TYPE_SIZE (arg1_type) != TYPE_SIZE (arg2_type))
4658 if (complain & tf_error)
4659 error_at (loc,
4660 "incompatible vector types in conditional expression: "
4661 "%qT, %qT and %qT", TREE_TYPE (arg1),
4662 TREE_TYPE (orig_arg2), TREE_TYPE (orig_arg3));
4663 return error_mark_node;
4666 if (!COMPARISON_CLASS_P (arg1))
4667 arg1 = cp_build_binary_op (loc, NE_EXPR, arg1,
4668 build_zero_cst (arg1_type), complain);
4669 return fold_build3 (VEC_COND_EXPR, arg2_type, arg1, arg2, arg3);
4672 /* [expr.cond]
4674 The first expression is implicitly converted to bool (clause
4675 _conv_). */
4676 arg1 = perform_implicit_conversion_flags (boolean_type_node, arg1, complain,
4677 LOOKUP_NORMAL);
4678 if (error_operand_p (arg1))
4679 return error_mark_node;
4681 /* [expr.cond]
4683 If either the second or the third operand has type (possibly
4684 cv-qualified) void, then the lvalue-to-rvalue (_conv.lval_),
4685 array-to-pointer (_conv.array_), and function-to-pointer
4686 (_conv.func_) standard conversions are performed on the second
4687 and third operands. */
4688 arg2_type = unlowered_expr_type (arg2);
4689 arg3_type = unlowered_expr_type (arg3);
4690 if (VOID_TYPE_P (arg2_type) || VOID_TYPE_P (arg3_type))
4692 /* Do the conversions. We don't these for `void' type arguments
4693 since it can't have any effect and since decay_conversion
4694 does not handle that case gracefully. */
4695 if (!VOID_TYPE_P (arg2_type))
4696 arg2 = decay_conversion (arg2, complain);
4697 if (!VOID_TYPE_P (arg3_type))
4698 arg3 = decay_conversion (arg3, complain);
4699 arg2_type = TREE_TYPE (arg2);
4700 arg3_type = TREE_TYPE (arg3);
4702 /* [expr.cond]
4704 One of the following shall hold:
4706 --The second or the third operand (but not both) is a
4707 throw-expression (_except.throw_); the result is of the
4708 type of the other and is an rvalue.
4710 --Both the second and the third operands have type void; the
4711 result is of type void and is an rvalue.
4713 We must avoid calling force_rvalue for expressions of type
4714 "void" because it will complain that their value is being
4715 used. */
4716 if (TREE_CODE (arg2) == THROW_EXPR
4717 && TREE_CODE (arg3) != THROW_EXPR)
4719 if (!VOID_TYPE_P (arg3_type))
4721 arg3 = force_rvalue (arg3, complain);
4722 if (arg3 == error_mark_node)
4723 return error_mark_node;
4725 arg3_type = TREE_TYPE (arg3);
4726 result_type = arg3_type;
4728 else if (TREE_CODE (arg2) != THROW_EXPR
4729 && TREE_CODE (arg3) == THROW_EXPR)
4731 if (!VOID_TYPE_P (arg2_type))
4733 arg2 = force_rvalue (arg2, complain);
4734 if (arg2 == error_mark_node)
4735 return error_mark_node;
4737 arg2_type = TREE_TYPE (arg2);
4738 result_type = arg2_type;
4740 else if (VOID_TYPE_P (arg2_type) && VOID_TYPE_P (arg3_type))
4741 result_type = void_type_node;
4742 else
4744 if (complain & tf_error)
4746 if (VOID_TYPE_P (arg2_type))
4747 error_at (EXPR_LOC_OR_LOC (arg3, loc),
4748 "second operand to the conditional operator "
4749 "is of type %<void%>, but the third operand is "
4750 "neither a throw-expression nor of type %<void%>");
4751 else
4752 error_at (EXPR_LOC_OR_LOC (arg2, loc),
4753 "third operand to the conditional operator "
4754 "is of type %<void%>, but the second operand is "
4755 "neither a throw-expression nor of type %<void%>");
4757 return error_mark_node;
4760 lvalue_p = false;
4761 goto valid_operands;
4763 /* [expr.cond]
4765 Otherwise, if the second and third operand have different types,
4766 and either has (possibly cv-qualified) class type, or if both are
4767 glvalues of the same value category and the same type except for
4768 cv-qualification, an attempt is made to convert each of those operands
4769 to the type of the other. */
4770 else if (!same_type_p (arg2_type, arg3_type)
4771 && (CLASS_TYPE_P (arg2_type) || CLASS_TYPE_P (arg3_type)
4772 || (same_type_ignoring_top_level_qualifiers_p (arg2_type,
4773 arg3_type)
4774 && lvalue_or_rvalue_with_address_p (arg2)
4775 && lvalue_or_rvalue_with_address_p (arg3)
4776 && real_lvalue_p (arg2) == real_lvalue_p (arg3))))
4778 conversion *conv2;
4779 conversion *conv3;
4780 bool converted = false;
4782 /* Get the high-water mark for the CONVERSION_OBSTACK. */
4783 p = conversion_obstack_alloc (0);
4785 conv2 = conditional_conversion (arg2, arg3, complain);
4786 conv3 = conditional_conversion (arg3, arg2, complain);
4788 /* [expr.cond]
4790 If both can be converted, or one can be converted but the
4791 conversion is ambiguous, the program is ill-formed. If
4792 neither can be converted, the operands are left unchanged and
4793 further checking is performed as described below. If exactly
4794 one conversion is possible, that conversion is applied to the
4795 chosen operand and the converted operand is used in place of
4796 the original operand for the remainder of this section. */
4797 if ((conv2 && !conv2->bad_p
4798 && conv3 && !conv3->bad_p)
4799 || (conv2 && conv2->kind == ck_ambig)
4800 || (conv3 && conv3->kind == ck_ambig))
4802 if (complain & tf_error)
4804 error_at (loc, "operands to ?: have different types %qT and %qT",
4805 arg2_type, arg3_type);
4806 if (conv2 && !conv2->bad_p && conv3 && !conv3->bad_p)
4807 inform (loc, " and each type can be converted to the other");
4808 else if (conv2 && conv2->kind == ck_ambig)
4809 convert_like (conv2, arg2, complain);
4810 else
4811 convert_like (conv3, arg3, complain);
4813 result = error_mark_node;
4815 else if (conv2 && !conv2->bad_p)
4817 arg2 = convert_like (conv2, arg2, complain);
4818 arg2 = convert_from_reference (arg2);
4819 arg2_type = TREE_TYPE (arg2);
4820 /* Even if CONV2 is a valid conversion, the result of the
4821 conversion may be invalid. For example, if ARG3 has type
4822 "volatile X", and X does not have a copy constructor
4823 accepting a "volatile X&", then even if ARG2 can be
4824 converted to X, the conversion will fail. */
4825 if (error_operand_p (arg2))
4826 result = error_mark_node;
4827 converted = true;
4829 else if (conv3 && !conv3->bad_p)
4831 arg3 = convert_like (conv3, arg3, complain);
4832 arg3 = convert_from_reference (arg3);
4833 arg3_type = TREE_TYPE (arg3);
4834 if (error_operand_p (arg3))
4835 result = error_mark_node;
4836 converted = true;
4839 /* Free all the conversions we allocated. */
4840 obstack_free (&conversion_obstack, p);
4842 if (result)
4843 return result;
4845 /* If, after the conversion, both operands have class type,
4846 treat the cv-qualification of both operands as if it were the
4847 union of the cv-qualification of the operands.
4849 The standard is not clear about what to do in this
4850 circumstance. For example, if the first operand has type
4851 "const X" and the second operand has a user-defined
4852 conversion to "volatile X", what is the type of the second
4853 operand after this step? Making it be "const X" (matching
4854 the first operand) seems wrong, as that discards the
4855 qualification without actually performing a copy. Leaving it
4856 as "volatile X" seems wrong as that will result in the
4857 conditional expression failing altogether, even though,
4858 according to this step, the one operand could be converted to
4859 the type of the other. */
4860 if (converted
4861 && CLASS_TYPE_P (arg2_type)
4862 && cp_type_quals (arg2_type) != cp_type_quals (arg3_type))
4863 arg2_type = arg3_type =
4864 cp_build_qualified_type (arg2_type,
4865 cp_type_quals (arg2_type)
4866 | cp_type_quals (arg3_type));
4869 /* [expr.cond]
4871 If the second and third operands are glvalues of the same value
4872 category and have the same type, the result is of that type and
4873 value category. */
4874 if (((real_lvalue_p (arg2) && real_lvalue_p (arg3))
4875 || (xvalue_p (arg2) && xvalue_p (arg3)))
4876 && same_type_p (arg2_type, arg3_type))
4878 result_type = arg2_type;
4879 arg2 = mark_lvalue_use (arg2);
4880 arg3 = mark_lvalue_use (arg3);
4881 goto valid_operands;
4884 /* [expr.cond]
4886 Otherwise, the result is an rvalue. If the second and third
4887 operand do not have the same type, and either has (possibly
4888 cv-qualified) class type, overload resolution is used to
4889 determine the conversions (if any) to be applied to the operands
4890 (_over.match.oper_, _over.built_). */
4891 lvalue_p = false;
4892 if (!same_type_p (arg2_type, arg3_type)
4893 && (CLASS_TYPE_P (arg2_type) || CLASS_TYPE_P (arg3_type)))
4895 tree args[3];
4896 conversion *conv;
4897 bool any_viable_p;
4899 /* Rearrange the arguments so that add_builtin_candidate only has
4900 to know about two args. In build_builtin_candidate, the
4901 arguments are unscrambled. */
4902 args[0] = arg2;
4903 args[1] = arg3;
4904 args[2] = arg1;
4905 add_builtin_candidates (&candidates,
4906 COND_EXPR,
4907 NOP_EXPR,
4908 ansi_opname (COND_EXPR),
4909 args,
4910 LOOKUP_NORMAL, complain);
4912 /* [expr.cond]
4914 If the overload resolution fails, the program is
4915 ill-formed. */
4916 candidates = splice_viable (candidates, false, &any_viable_p);
4917 if (!any_viable_p)
4919 if (complain & tf_error)
4920 error_at (loc, "operands to ?: have different types %qT and %qT",
4921 arg2_type, arg3_type);
4922 return error_mark_node;
4924 cand = tourney (candidates, complain);
4925 if (!cand)
4927 if (complain & tf_error)
4929 op_error (loc, COND_EXPR, NOP_EXPR, arg1, arg2, arg3, FALSE);
4930 print_z_candidates (loc, candidates);
4932 return error_mark_node;
4935 /* [expr.cond]
4937 Otherwise, the conversions thus determined are applied, and
4938 the converted operands are used in place of the original
4939 operands for the remainder of this section. */
4940 conv = cand->convs[0];
4941 arg1 = convert_like (conv, arg1, complain);
4942 conv = cand->convs[1];
4943 arg2 = convert_like (conv, arg2, complain);
4944 arg2_type = TREE_TYPE (arg2);
4945 conv = cand->convs[2];
4946 arg3 = convert_like (conv, arg3, complain);
4947 arg3_type = TREE_TYPE (arg3);
4950 /* [expr.cond]
4952 Lvalue-to-rvalue (_conv.lval_), array-to-pointer (_conv.array_),
4953 and function-to-pointer (_conv.func_) standard conversions are
4954 performed on the second and third operands.
4956 We need to force the lvalue-to-rvalue conversion here for class types,
4957 so we get TARGET_EXPRs; trying to deal with a COND_EXPR of class rvalues
4958 that isn't wrapped with a TARGET_EXPR plays havoc with exception
4959 regions. */
4961 arg2 = force_rvalue (arg2, complain);
4962 if (!CLASS_TYPE_P (arg2_type))
4963 arg2_type = TREE_TYPE (arg2);
4965 arg3 = force_rvalue (arg3, complain);
4966 if (!CLASS_TYPE_P (arg3_type))
4967 arg3_type = TREE_TYPE (arg3);
4969 if (arg2 == error_mark_node || arg3 == error_mark_node)
4970 return error_mark_node;
4972 /* [expr.cond]
4974 After those conversions, one of the following shall hold:
4976 --The second and third operands have the same type; the result is of
4977 that type. */
4978 if (same_type_p (arg2_type, arg3_type))
4979 result_type = arg2_type;
4980 /* [expr.cond]
4982 --The second and third operands have arithmetic or enumeration
4983 type; the usual arithmetic conversions are performed to bring
4984 them to a common type, and the result is of that type. */
4985 else if ((ARITHMETIC_TYPE_P (arg2_type)
4986 || UNSCOPED_ENUM_P (arg2_type))
4987 && (ARITHMETIC_TYPE_P (arg3_type)
4988 || UNSCOPED_ENUM_P (arg3_type)))
4990 /* In this case, there is always a common type. */
4991 result_type = type_after_usual_arithmetic_conversions (arg2_type,
4992 arg3_type);
4993 if (complain & tf_warning)
4994 do_warn_double_promotion (result_type, arg2_type, arg3_type,
4995 "implicit conversion from %qT to %qT to "
4996 "match other result of conditional",
4997 loc);
4999 if (TREE_CODE (arg2_type) == ENUMERAL_TYPE
5000 && TREE_CODE (arg3_type) == ENUMERAL_TYPE)
5002 if (TREE_CODE (orig_arg2) == CONST_DECL
5003 && TREE_CODE (orig_arg3) == CONST_DECL
5004 && DECL_CONTEXT (orig_arg2) == DECL_CONTEXT (orig_arg3))
5005 /* Two enumerators from the same enumeration can have different
5006 types when the enumeration is still being defined. */;
5007 else if (complain & tf_warning)
5008 warning_at (loc, OPT_Wenum_compare, "enumeral mismatch in "
5009 "conditional expression: %qT vs %qT",
5010 arg2_type, arg3_type);
5012 else if (extra_warnings
5013 && ((TREE_CODE (arg2_type) == ENUMERAL_TYPE
5014 && !same_type_p (arg3_type, type_promotes_to (arg2_type)))
5015 || (TREE_CODE (arg3_type) == ENUMERAL_TYPE
5016 && !same_type_p (arg2_type,
5017 type_promotes_to (arg3_type)))))
5019 if (complain & tf_warning)
5020 warning_at (loc, OPT_Wextra, "enumeral and non-enumeral type in "
5021 "conditional expression");
5024 arg2 = perform_implicit_conversion (result_type, arg2, complain);
5025 arg3 = perform_implicit_conversion (result_type, arg3, complain);
5027 /* [expr.cond]
5029 --The second and third operands have pointer type, or one has
5030 pointer type and the other is a null pointer constant; pointer
5031 conversions (_conv.ptr_) and qualification conversions
5032 (_conv.qual_) are performed to bring them to their composite
5033 pointer type (_expr.rel_). The result is of the composite
5034 pointer type.
5036 --The second and third operands have pointer to member type, or
5037 one has pointer to member type and the other is a null pointer
5038 constant; pointer to member conversions (_conv.mem_) and
5039 qualification conversions (_conv.qual_) are performed to bring
5040 them to a common type, whose cv-qualification shall match the
5041 cv-qualification of either the second or the third operand.
5042 The result is of the common type. */
5043 else if ((null_ptr_cst_p (arg2)
5044 && TYPE_PTR_OR_PTRMEM_P (arg3_type))
5045 || (null_ptr_cst_p (arg3)
5046 && TYPE_PTR_OR_PTRMEM_P (arg2_type))
5047 || (TYPE_PTR_P (arg2_type) && TYPE_PTR_P (arg3_type))
5048 || (TYPE_PTRDATAMEM_P (arg2_type) && TYPE_PTRDATAMEM_P (arg3_type))
5049 || (TYPE_PTRMEMFUNC_P (arg2_type) && TYPE_PTRMEMFUNC_P (arg3_type)))
5051 result_type = composite_pointer_type (arg2_type, arg3_type, arg2,
5052 arg3, CPO_CONDITIONAL_EXPR,
5053 complain);
5054 if (result_type == error_mark_node)
5055 return error_mark_node;
5056 arg2 = perform_implicit_conversion (result_type, arg2, complain);
5057 arg3 = perform_implicit_conversion (result_type, arg3, complain);
5060 if (!result_type)
5062 if (complain & tf_error)
5063 error_at (loc, "operands to ?: have different types %qT and %qT",
5064 arg2_type, arg3_type);
5065 return error_mark_node;
5068 if (arg2 == error_mark_node || arg3 == error_mark_node)
5069 return error_mark_node;
5071 valid_operands:
5072 result = build3 (COND_EXPR, result_type, arg1, arg2, arg3);
5073 if (!cp_unevaluated_operand)
5074 /* Avoid folding within decltype (c++/42013) and noexcept. */
5075 result = fold_if_not_in_template (result);
5077 /* We can't use result_type below, as fold might have returned a
5078 throw_expr. */
5080 if (!lvalue_p)
5082 /* Expand both sides into the same slot, hopefully the target of
5083 the ?: expression. We used to check for TARGET_EXPRs here,
5084 but now we sometimes wrap them in NOP_EXPRs so the test would
5085 fail. */
5086 if (CLASS_TYPE_P (TREE_TYPE (result)))
5087 result = get_target_expr_sfinae (result, complain);
5088 /* If this expression is an rvalue, but might be mistaken for an
5089 lvalue, we must add a NON_LVALUE_EXPR. */
5090 result = rvalue (result);
5092 else
5093 result = force_paren_expr (result);
5095 return result;
5098 /* Wrapper for above. */
5100 tree
5101 build_conditional_expr (location_t loc, tree arg1, tree arg2, tree arg3,
5102 tsubst_flags_t complain)
5104 tree ret;
5105 bool subtime = timevar_cond_start (TV_OVERLOAD);
5106 ret = build_conditional_expr_1 (loc, arg1, arg2, arg3, complain);
5107 timevar_cond_stop (TV_OVERLOAD, subtime);
5108 return ret;
5111 /* OPERAND is an operand to an expression. Perform necessary steps
5112 required before using it. If OPERAND is NULL_TREE, NULL_TREE is
5113 returned. */
5115 static tree
5116 prep_operand (tree operand)
5118 if (operand)
5120 if (CLASS_TYPE_P (TREE_TYPE (operand))
5121 && CLASSTYPE_TEMPLATE_INSTANTIATION (TREE_TYPE (operand)))
5122 /* Make sure the template type is instantiated now. */
5123 instantiate_class_template (TYPE_MAIN_VARIANT (TREE_TYPE (operand)));
5126 return operand;
5129 /* Add each of the viable functions in FNS (a FUNCTION_DECL or
5130 OVERLOAD) to the CANDIDATES, returning an updated list of
5131 CANDIDATES. The ARGS are the arguments provided to the call;
5132 if FIRST_ARG is non-null it is the implicit object argument,
5133 otherwise the first element of ARGS is used if needed. The
5134 EXPLICIT_TARGS are explicit template arguments provided.
5135 TEMPLATE_ONLY is true if only template functions should be
5136 considered. CONVERSION_PATH, ACCESS_PATH, and FLAGS are as for
5137 add_function_candidate. */
5139 static void
5140 add_candidates (tree fns, tree first_arg, const vec<tree, va_gc> *args,
5141 tree return_type,
5142 tree explicit_targs, bool template_only,
5143 tree conversion_path, tree access_path,
5144 int flags,
5145 struct z_candidate **candidates,
5146 tsubst_flags_t complain)
5148 tree ctype;
5149 const vec<tree, va_gc> *non_static_args;
5150 bool check_list_ctor;
5151 bool check_converting;
5152 unification_kind_t strict;
5153 tree fn;
5155 if (!fns)
5156 return;
5158 /* Precalculate special handling of constructors and conversion ops. */
5159 fn = OVL_CURRENT (fns);
5160 if (DECL_CONV_FN_P (fn))
5162 check_list_ctor = false;
5163 check_converting = !!(flags & LOOKUP_ONLYCONVERTING);
5164 if (flags & LOOKUP_NO_CONVERSION)
5165 /* We're doing return_type(x). */
5166 strict = DEDUCE_CONV;
5167 else
5168 /* We're doing x.operator return_type(). */
5169 strict = DEDUCE_EXACT;
5170 /* [over.match.funcs] For conversion functions, the function
5171 is considered to be a member of the class of the implicit
5172 object argument for the purpose of defining the type of
5173 the implicit object parameter. */
5174 ctype = TYPE_MAIN_VARIANT (TREE_TYPE (first_arg));
5176 else
5178 if (DECL_CONSTRUCTOR_P (fn))
5180 check_list_ctor = !!(flags & LOOKUP_LIST_ONLY);
5181 /* For list-initialization we consider explicit constructors
5182 and complain if one is chosen. */
5183 check_converting
5184 = ((flags & (LOOKUP_ONLYCONVERTING|LOOKUP_LIST_INIT_CTOR))
5185 == LOOKUP_ONLYCONVERTING);
5187 else
5189 check_list_ctor = false;
5190 check_converting = false;
5192 strict = DEDUCE_CALL;
5193 ctype = conversion_path ? BINFO_TYPE (conversion_path) : NULL_TREE;
5196 if (first_arg)
5197 non_static_args = args;
5198 else
5199 /* Delay creating the implicit this parameter until it is needed. */
5200 non_static_args = NULL;
5202 for (; fns; fns = OVL_NEXT (fns))
5204 tree fn_first_arg;
5205 const vec<tree, va_gc> *fn_args;
5207 fn = OVL_CURRENT (fns);
5209 if (check_converting && DECL_NONCONVERTING_P (fn))
5210 continue;
5211 if (check_list_ctor && !is_list_ctor (fn))
5212 continue;
5214 /* Figure out which set of arguments to use. */
5215 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
5217 /* If this function is a non-static member and we didn't get an
5218 implicit object argument, move it out of args. */
5219 if (first_arg == NULL_TREE)
5221 unsigned int ix;
5222 tree arg;
5223 vec<tree, va_gc> *tempvec;
5224 vec_alloc (tempvec, args->length () - 1);
5225 for (ix = 1; args->iterate (ix, &arg); ++ix)
5226 tempvec->quick_push (arg);
5227 non_static_args = tempvec;
5228 first_arg = (*args)[0];
5231 fn_first_arg = first_arg;
5232 fn_args = non_static_args;
5234 else
5236 /* Otherwise, just use the list of arguments provided. */
5237 fn_first_arg = NULL_TREE;
5238 fn_args = args;
5241 if (TREE_CODE (fn) == TEMPLATE_DECL)
5242 add_template_candidate (candidates,
5244 ctype,
5245 explicit_targs,
5246 fn_first_arg,
5247 fn_args,
5248 return_type,
5249 access_path,
5250 conversion_path,
5251 flags,
5252 strict,
5253 complain);
5254 else if (!template_only)
5255 add_function_candidate (candidates,
5257 ctype,
5258 fn_first_arg,
5259 fn_args,
5260 access_path,
5261 conversion_path,
5262 flags,
5263 complain);
5267 static tree
5268 build_new_op_1 (location_t loc, enum tree_code code, int flags, tree arg1,
5269 tree arg2, tree arg3, tree *overload, tsubst_flags_t complain)
5271 struct z_candidate *candidates = 0, *cand;
5272 vec<tree, va_gc> *arglist;
5273 tree fnname;
5274 tree args[3];
5275 tree result = NULL_TREE;
5276 bool result_valid_p = false;
5277 enum tree_code code2 = NOP_EXPR;
5278 enum tree_code code_orig_arg1 = ERROR_MARK;
5279 enum tree_code code_orig_arg2 = ERROR_MARK;
5280 conversion *conv;
5281 void *p;
5282 bool strict_p;
5283 bool any_viable_p;
5285 if (error_operand_p (arg1)
5286 || error_operand_p (arg2)
5287 || error_operand_p (arg3))
5288 return error_mark_node;
5290 if (code == MODIFY_EXPR)
5292 code2 = TREE_CODE (arg3);
5293 arg3 = NULL_TREE;
5294 fnname = ansi_assopname (code2);
5296 else
5297 fnname = ansi_opname (code);
5299 arg1 = prep_operand (arg1);
5301 switch (code)
5303 case NEW_EXPR:
5304 case VEC_NEW_EXPR:
5305 case VEC_DELETE_EXPR:
5306 case DELETE_EXPR:
5307 /* Use build_op_new_call and build_op_delete_call instead. */
5308 gcc_unreachable ();
5310 case CALL_EXPR:
5311 /* Use build_op_call instead. */
5312 gcc_unreachable ();
5314 case TRUTH_ORIF_EXPR:
5315 case TRUTH_ANDIF_EXPR:
5316 case TRUTH_AND_EXPR:
5317 case TRUTH_OR_EXPR:
5318 /* These are saved for the sake of warn_logical_operator. */
5319 code_orig_arg1 = TREE_CODE (arg1);
5320 code_orig_arg2 = TREE_CODE (arg2);
5321 break;
5322 case GT_EXPR:
5323 case LT_EXPR:
5324 case GE_EXPR:
5325 case LE_EXPR:
5326 case EQ_EXPR:
5327 case NE_EXPR:
5328 /* These are saved for the sake of maybe_warn_bool_compare. */
5329 code_orig_arg1 = TREE_CODE (TREE_TYPE (arg1));
5330 code_orig_arg2 = TREE_CODE (TREE_TYPE (arg2));
5331 break;
5332 default:
5333 break;
5336 arg2 = prep_operand (arg2);
5337 arg3 = prep_operand (arg3);
5339 if (code == COND_EXPR)
5340 /* Use build_conditional_expr instead. */
5341 gcc_unreachable ();
5342 else if (! OVERLOAD_TYPE_P (TREE_TYPE (arg1))
5343 && (! arg2 || ! OVERLOAD_TYPE_P (TREE_TYPE (arg2))))
5344 goto builtin;
5346 if (code == POSTINCREMENT_EXPR || code == POSTDECREMENT_EXPR)
5347 arg2 = integer_zero_node;
5349 vec_alloc (arglist, 3);
5350 arglist->quick_push (arg1);
5351 if (arg2 != NULL_TREE)
5352 arglist->quick_push (arg2);
5353 if (arg3 != NULL_TREE)
5354 arglist->quick_push (arg3);
5356 /* Get the high-water mark for the CONVERSION_OBSTACK. */
5357 p = conversion_obstack_alloc (0);
5359 /* Add namespace-scope operators to the list of functions to
5360 consider. */
5361 add_candidates (lookup_function_nonclass (fnname, arglist, /*block_p=*/true),
5362 NULL_TREE, arglist, NULL_TREE,
5363 NULL_TREE, false, NULL_TREE, NULL_TREE,
5364 flags, &candidates, complain);
5366 args[0] = arg1;
5367 args[1] = arg2;
5368 args[2] = NULL_TREE;
5370 /* Add class-member operators to the candidate set. */
5371 if (CLASS_TYPE_P (TREE_TYPE (arg1)))
5373 tree fns;
5375 fns = lookup_fnfields (TREE_TYPE (arg1), fnname, 1);
5376 if (fns == error_mark_node)
5378 result = error_mark_node;
5379 goto user_defined_result_ready;
5381 if (fns)
5382 add_candidates (BASELINK_FUNCTIONS (fns),
5383 NULL_TREE, arglist, NULL_TREE,
5384 NULL_TREE, false,
5385 BASELINK_BINFO (fns),
5386 BASELINK_ACCESS_BINFO (fns),
5387 flags, &candidates, complain);
5389 /* Per 13.3.1.2/3, 2nd bullet, if no operand has a class type, then
5390 only non-member functions that have type T1 or reference to
5391 cv-qualified-opt T1 for the first argument, if the first argument
5392 has an enumeration type, or T2 or reference to cv-qualified-opt
5393 T2 for the second argument, if the the second argument has an
5394 enumeration type. Filter out those that don't match. */
5395 else if (! arg2 || ! CLASS_TYPE_P (TREE_TYPE (arg2)))
5397 struct z_candidate **candp, **next;
5399 for (candp = &candidates; *candp; candp = next)
5401 tree parmlist, parmtype;
5402 int i, nargs = (arg2 ? 2 : 1);
5404 cand = *candp;
5405 next = &cand->next;
5407 parmlist = TYPE_ARG_TYPES (TREE_TYPE (cand->fn));
5409 for (i = 0; i < nargs; ++i)
5411 parmtype = TREE_VALUE (parmlist);
5413 if (TREE_CODE (parmtype) == REFERENCE_TYPE)
5414 parmtype = TREE_TYPE (parmtype);
5415 if (TREE_CODE (TREE_TYPE (args[i])) == ENUMERAL_TYPE
5416 && (same_type_ignoring_top_level_qualifiers_p
5417 (TREE_TYPE (args[i]), parmtype)))
5418 break;
5420 parmlist = TREE_CHAIN (parmlist);
5423 /* No argument has an appropriate type, so remove this
5424 candidate function from the list. */
5425 if (i == nargs)
5427 *candp = cand->next;
5428 next = candp;
5433 add_builtin_candidates (&candidates, code, code2, fnname, args,
5434 flags, complain);
5436 switch (code)
5438 case COMPOUND_EXPR:
5439 case ADDR_EXPR:
5440 /* For these, the built-in candidates set is empty
5441 [over.match.oper]/3. We don't want non-strict matches
5442 because exact matches are always possible with built-in
5443 operators. The built-in candidate set for COMPONENT_REF
5444 would be empty too, but since there are no such built-in
5445 operators, we accept non-strict matches for them. */
5446 strict_p = true;
5447 break;
5449 default:
5450 strict_p = false;
5451 break;
5454 candidates = splice_viable (candidates, strict_p, &any_viable_p);
5455 if (!any_viable_p)
5457 switch (code)
5459 case POSTINCREMENT_EXPR:
5460 case POSTDECREMENT_EXPR:
5461 /* Don't try anything fancy if we're not allowed to produce
5462 errors. */
5463 if (!(complain & tf_error))
5464 return error_mark_node;
5466 /* Look for an `operator++ (int)'. Pre-1985 C++ didn't
5467 distinguish between prefix and postfix ++ and
5468 operator++() was used for both, so we allow this with
5469 -fpermissive. */
5470 else
5472 const char *msg = (flag_permissive)
5473 ? G_("no %<%D(int)%> declared for postfix %qs,"
5474 " trying prefix operator instead")
5475 : G_("no %<%D(int)%> declared for postfix %qs");
5476 permerror (loc, msg, fnname, operator_name_info[code].name);
5479 if (!flag_permissive)
5480 return error_mark_node;
5482 if (code == POSTINCREMENT_EXPR)
5483 code = PREINCREMENT_EXPR;
5484 else
5485 code = PREDECREMENT_EXPR;
5486 result = build_new_op_1 (loc, code, flags, arg1, NULL_TREE,
5487 NULL_TREE, overload, complain);
5488 break;
5490 /* The caller will deal with these. */
5491 case ADDR_EXPR:
5492 case COMPOUND_EXPR:
5493 case COMPONENT_REF:
5494 result = NULL_TREE;
5495 result_valid_p = true;
5496 break;
5498 default:
5499 if (complain & tf_error)
5501 /* If one of the arguments of the operator represents
5502 an invalid use of member function pointer, try to report
5503 a meaningful error ... */
5504 if (invalid_nonstatic_memfn_p (arg1, tf_error)
5505 || invalid_nonstatic_memfn_p (arg2, tf_error)
5506 || invalid_nonstatic_memfn_p (arg3, tf_error))
5507 /* We displayed the error message. */;
5508 else
5510 /* ... Otherwise, report the more generic
5511 "no matching operator found" error */
5512 op_error (loc, code, code2, arg1, arg2, arg3, FALSE);
5513 print_z_candidates (loc, candidates);
5516 result = error_mark_node;
5517 break;
5520 else
5522 cand = tourney (candidates, complain);
5523 if (cand == 0)
5525 if (complain & tf_error)
5527 op_error (loc, code, code2, arg1, arg2, arg3, TRUE);
5528 print_z_candidates (loc, candidates);
5530 result = error_mark_node;
5532 else if (TREE_CODE (cand->fn) == FUNCTION_DECL)
5534 if (overload)
5535 *overload = cand->fn;
5537 if (resolve_args (arglist, complain) == NULL)
5538 result = error_mark_node;
5539 else
5540 result = build_over_call (cand, LOOKUP_NORMAL, complain);
5542 else
5544 /* Give any warnings we noticed during overload resolution. */
5545 if (cand->warnings && (complain & tf_warning))
5547 struct candidate_warning *w;
5548 for (w = cand->warnings; w; w = w->next)
5549 joust (cand, w->loser, 1, complain);
5552 /* Check for comparison of different enum types. */
5553 switch (code)
5555 case GT_EXPR:
5556 case LT_EXPR:
5557 case GE_EXPR:
5558 case LE_EXPR:
5559 case EQ_EXPR:
5560 case NE_EXPR:
5561 if (TREE_CODE (TREE_TYPE (arg1)) == ENUMERAL_TYPE
5562 && TREE_CODE (TREE_TYPE (arg2)) == ENUMERAL_TYPE
5563 && (TYPE_MAIN_VARIANT (TREE_TYPE (arg1))
5564 != TYPE_MAIN_VARIANT (TREE_TYPE (arg2)))
5565 && (complain & tf_warning))
5567 warning (OPT_Wenum_compare,
5568 "comparison between %q#T and %q#T",
5569 TREE_TYPE (arg1), TREE_TYPE (arg2));
5571 break;
5572 default:
5573 break;
5576 /* We need to strip any leading REF_BIND so that bitfields
5577 don't cause errors. This should not remove any important
5578 conversions, because builtins don't apply to class
5579 objects directly. */
5580 conv = cand->convs[0];
5581 if (conv->kind == ck_ref_bind)
5582 conv = next_conversion (conv);
5583 arg1 = convert_like (conv, arg1, complain);
5585 if (arg2)
5587 conv = cand->convs[1];
5588 if (conv->kind == ck_ref_bind)
5589 conv = next_conversion (conv);
5590 else
5591 arg2 = decay_conversion (arg2, complain);
5593 /* We need to call warn_logical_operator before
5594 converting arg2 to a boolean_type, but after
5595 decaying an enumerator to its value. */
5596 if (complain & tf_warning)
5597 warn_logical_operator (loc, code, boolean_type_node,
5598 code_orig_arg1, arg1,
5599 code_orig_arg2, arg2);
5601 arg2 = convert_like (conv, arg2, complain);
5603 if (arg3)
5605 conv = cand->convs[2];
5606 if (conv->kind == ck_ref_bind)
5607 conv = next_conversion (conv);
5608 arg3 = convert_like (conv, arg3, complain);
5614 user_defined_result_ready:
5616 /* Free all the conversions we allocated. */
5617 obstack_free (&conversion_obstack, p);
5619 if (result || result_valid_p)
5620 return result;
5622 builtin:
5623 switch (code)
5625 case MODIFY_EXPR:
5626 return cp_build_modify_expr (arg1, code2, arg2, complain);
5628 case INDIRECT_REF:
5629 return cp_build_indirect_ref (arg1, RO_UNARY_STAR, complain);
5631 case TRUTH_ANDIF_EXPR:
5632 case TRUTH_ORIF_EXPR:
5633 case TRUTH_AND_EXPR:
5634 case TRUTH_OR_EXPR:
5635 warn_logical_operator (loc, code, boolean_type_node,
5636 code_orig_arg1, arg1, code_orig_arg2, arg2);
5637 /* Fall through. */
5638 case GT_EXPR:
5639 case LT_EXPR:
5640 case GE_EXPR:
5641 case LE_EXPR:
5642 case EQ_EXPR:
5643 case NE_EXPR:
5644 if ((code_orig_arg1 == BOOLEAN_TYPE)
5645 ^ (code_orig_arg2 == BOOLEAN_TYPE))
5646 maybe_warn_bool_compare (loc, code, arg1, arg2);
5647 /* Fall through. */
5648 case PLUS_EXPR:
5649 case MINUS_EXPR:
5650 case MULT_EXPR:
5651 case TRUNC_DIV_EXPR:
5652 case MAX_EXPR:
5653 case MIN_EXPR:
5654 case LSHIFT_EXPR:
5655 case RSHIFT_EXPR:
5656 case TRUNC_MOD_EXPR:
5657 case BIT_AND_EXPR:
5658 case BIT_IOR_EXPR:
5659 case BIT_XOR_EXPR:
5660 return cp_build_binary_op (loc, code, arg1, arg2, complain);
5662 case UNARY_PLUS_EXPR:
5663 case NEGATE_EXPR:
5664 case BIT_NOT_EXPR:
5665 case TRUTH_NOT_EXPR:
5666 case PREINCREMENT_EXPR:
5667 case POSTINCREMENT_EXPR:
5668 case PREDECREMENT_EXPR:
5669 case POSTDECREMENT_EXPR:
5670 case REALPART_EXPR:
5671 case IMAGPART_EXPR:
5672 case ABS_EXPR:
5673 return cp_build_unary_op (code, arg1, candidates != 0, complain);
5675 case ARRAY_REF:
5676 return cp_build_array_ref (input_location, arg1, arg2, complain);
5678 case MEMBER_REF:
5679 return build_m_component_ref (cp_build_indirect_ref (arg1, RO_ARROW_STAR,
5680 complain),
5681 arg2, complain);
5683 /* The caller will deal with these. */
5684 case ADDR_EXPR:
5685 case COMPONENT_REF:
5686 case COMPOUND_EXPR:
5687 return NULL_TREE;
5689 default:
5690 gcc_unreachable ();
5692 return NULL_TREE;
5695 /* Wrapper for above. */
5697 tree
5698 build_new_op (location_t loc, enum tree_code code, int flags,
5699 tree arg1, tree arg2, tree arg3,
5700 tree *overload, tsubst_flags_t complain)
5702 tree ret;
5703 bool subtime = timevar_cond_start (TV_OVERLOAD);
5704 ret = build_new_op_1 (loc, code, flags, arg1, arg2, arg3,
5705 overload, complain);
5706 timevar_cond_stop (TV_OVERLOAD, subtime);
5707 return ret;
5710 /* Returns true iff T, an element of an OVERLOAD chain, is a usual
5711 deallocation function (3.7.4.2 [basic.stc.dynamic.deallocation]). */
5713 static bool
5714 non_placement_deallocation_fn_p (tree t)
5716 /* A template instance is never a usual deallocation function,
5717 regardless of its signature. */
5718 if (TREE_CODE (t) == TEMPLATE_DECL
5719 || primary_template_instantiation_p (t))
5720 return false;
5722 /* If a class T has a member deallocation function named operator delete
5723 with exactly one parameter, then that function is a usual
5724 (non-placement) deallocation function. If class T does not declare
5725 such an operator delete but does declare a member deallocation
5726 function named operator delete with exactly two parameters, the second
5727 of which has type std::size_t (18.2), then this function is a usual
5728 deallocation function. */
5729 t = FUNCTION_ARG_CHAIN (t);
5730 if (t == void_list_node
5731 || (t && same_type_p (TREE_VALUE (t), size_type_node)
5732 && TREE_CHAIN (t) == void_list_node))
5733 return true;
5734 return false;
5737 /* Build a call to operator delete. This has to be handled very specially,
5738 because the restrictions on what signatures match are different from all
5739 other call instances. For a normal delete, only a delete taking (void *)
5740 or (void *, size_t) is accepted. For a placement delete, only an exact
5741 match with the placement new is accepted.
5743 CODE is either DELETE_EXPR or VEC_DELETE_EXPR.
5744 ADDR is the pointer to be deleted.
5745 SIZE is the size of the memory block to be deleted.
5746 GLOBAL_P is true if the delete-expression should not consider
5747 class-specific delete operators.
5748 PLACEMENT is the corresponding placement new call, or NULL_TREE.
5750 If this call to "operator delete" is being generated as part to
5751 deallocate memory allocated via a new-expression (as per [expr.new]
5752 which requires that if the initialization throws an exception then
5753 we call a deallocation function), then ALLOC_FN is the allocation
5754 function. */
5756 tree
5757 build_op_delete_call (enum tree_code code, tree addr, tree size,
5758 bool global_p, tree placement,
5759 tree alloc_fn, tsubst_flags_t complain)
5761 tree fn = NULL_TREE;
5762 tree fns, fnname, type, t;
5764 if (addr == error_mark_node)
5765 return error_mark_node;
5767 type = strip_array_types (TREE_TYPE (TREE_TYPE (addr)));
5769 fnname = ansi_opname (code);
5771 if (CLASS_TYPE_P (type)
5772 && COMPLETE_TYPE_P (complete_type (type))
5773 && !global_p)
5774 /* In [class.free]
5776 If the result of the lookup is ambiguous or inaccessible, or if
5777 the lookup selects a placement deallocation function, the
5778 program is ill-formed.
5780 Therefore, we ask lookup_fnfields to complain about ambiguity. */
5782 fns = lookup_fnfields (TYPE_BINFO (type), fnname, 1);
5783 if (fns == error_mark_node)
5784 return error_mark_node;
5786 else
5787 fns = NULL_TREE;
5789 if (fns == NULL_TREE)
5790 fns = lookup_name_nonclass (fnname);
5792 /* Strip const and volatile from addr. */
5793 addr = cp_convert (ptr_type_node, addr, complain);
5795 if (placement)
5797 /* "A declaration of a placement deallocation function matches the
5798 declaration of a placement allocation function if it has the same
5799 number of parameters and, after parameter transformations (8.3.5),
5800 all parameter types except the first are identical."
5802 So we build up the function type we want and ask instantiate_type
5803 to get it for us. */
5804 t = FUNCTION_ARG_CHAIN (alloc_fn);
5805 t = tree_cons (NULL_TREE, ptr_type_node, t);
5806 t = build_function_type (void_type_node, t);
5808 fn = instantiate_type (t, fns, tf_none);
5809 if (fn == error_mark_node)
5810 return NULL_TREE;
5812 if (BASELINK_P (fn))
5813 fn = BASELINK_FUNCTIONS (fn);
5815 /* "If the lookup finds the two-parameter form of a usual deallocation
5816 function (3.7.4.2) and that function, considered as a placement
5817 deallocation function, would have been selected as a match for the
5818 allocation function, the program is ill-formed." */
5819 if (non_placement_deallocation_fn_p (fn))
5821 /* But if the class has an operator delete (void *), then that is
5822 the usual deallocation function, so we shouldn't complain
5823 about using the operator delete (void *, size_t). */
5824 for (t = BASELINK_P (fns) ? BASELINK_FUNCTIONS (fns) : fns;
5825 t; t = OVL_NEXT (t))
5827 tree elt = OVL_CURRENT (t);
5828 if (non_placement_deallocation_fn_p (elt)
5829 && FUNCTION_ARG_CHAIN (elt) == void_list_node)
5830 goto ok;
5832 if (complain & tf_error)
5834 permerror (0, "non-placement deallocation function %q+D", fn);
5835 permerror (input_location, "selected for placement delete");
5837 else
5838 return error_mark_node;
5839 ok:;
5842 else
5843 /* "Any non-placement deallocation function matches a non-placement
5844 allocation function. If the lookup finds a single matching
5845 deallocation function, that function will be called; otherwise, no
5846 deallocation function will be called." */
5847 for (t = BASELINK_P (fns) ? BASELINK_FUNCTIONS (fns) : fns;
5848 t; t = OVL_NEXT (t))
5850 tree elt = OVL_CURRENT (t);
5851 if (non_placement_deallocation_fn_p (elt))
5853 fn = elt;
5854 /* "If a class T has a member deallocation function named
5855 operator delete with exactly one parameter, then that
5856 function is a usual (non-placement) deallocation
5857 function. If class T does not declare such an operator
5858 delete but does declare a member deallocation function named
5859 operator delete with exactly two parameters, the second of
5860 which has type std::size_t (18.2), then this function is a
5861 usual deallocation function."
5863 So (void*) beats (void*, size_t). */
5864 if (FUNCTION_ARG_CHAIN (fn) == void_list_node)
5865 break;
5869 /* If we have a matching function, call it. */
5870 if (fn)
5872 gcc_assert (TREE_CODE (fn) == FUNCTION_DECL);
5874 /* If the FN is a member function, make sure that it is
5875 accessible. */
5876 if (BASELINK_P (fns))
5877 perform_or_defer_access_check (BASELINK_BINFO (fns), fn, fn,
5878 complain);
5880 /* Core issue 901: It's ok to new a type with deleted delete. */
5881 if (DECL_DELETED_FN (fn) && alloc_fn)
5882 return NULL_TREE;
5884 if (placement)
5886 /* The placement args might not be suitable for overload
5887 resolution at this point, so build the call directly. */
5888 int nargs = call_expr_nargs (placement);
5889 tree *argarray = XALLOCAVEC (tree, nargs);
5890 int i;
5891 argarray[0] = addr;
5892 for (i = 1; i < nargs; i++)
5893 argarray[i] = CALL_EXPR_ARG (placement, i);
5894 mark_used (fn);
5895 return build_cxx_call (fn, nargs, argarray, complain);
5897 else
5899 tree ret;
5900 vec<tree, va_gc> *args = make_tree_vector ();
5901 args->quick_push (addr);
5902 if (FUNCTION_ARG_CHAIN (fn) != void_list_node)
5903 args->quick_push (size);
5904 ret = cp_build_function_call_vec (fn, &args, complain);
5905 release_tree_vector (args);
5906 return ret;
5910 /* [expr.new]
5912 If no unambiguous matching deallocation function can be found,
5913 propagating the exception does not cause the object's memory to
5914 be freed. */
5915 if (alloc_fn)
5917 if ((complain & tf_warning)
5918 && !placement)
5919 warning (0, "no corresponding deallocation function for %qD",
5920 alloc_fn);
5921 return NULL_TREE;
5924 if (complain & tf_error)
5925 error ("no suitable %<operator %s%> for %qT",
5926 operator_name_info[(int)code].name, type);
5927 return error_mark_node;
5930 /* If the current scope isn't allowed to access DECL along
5931 BASETYPE_PATH, give an error. The most derived class in
5932 BASETYPE_PATH is the one used to qualify DECL. DIAG_DECL is
5933 the declaration to use in the error diagnostic. */
5935 bool
5936 enforce_access (tree basetype_path, tree decl, tree diag_decl,
5937 tsubst_flags_t complain)
5939 gcc_assert (TREE_CODE (basetype_path) == TREE_BINFO);
5941 if (!accessible_p (basetype_path, decl, true))
5943 if (complain & tf_error)
5945 if (TREE_PRIVATE (decl))
5946 error ("%q+#D is private", diag_decl);
5947 else if (TREE_PROTECTED (decl))
5948 error ("%q+#D is protected", diag_decl);
5949 else
5950 error ("%q+#D is inaccessible", diag_decl);
5951 error ("within this context");
5953 return false;
5956 return true;
5959 /* Initialize a temporary of type TYPE with EXPR. The FLAGS are a
5960 bitwise or of LOOKUP_* values. If any errors are warnings are
5961 generated, set *DIAGNOSTIC_FN to "error" or "warning",
5962 respectively. If no diagnostics are generated, set *DIAGNOSTIC_FN
5963 to NULL. */
5965 static tree
5966 build_temp (tree expr, tree type, int flags,
5967 diagnostic_t *diagnostic_kind, tsubst_flags_t complain)
5969 int savew, savee;
5970 vec<tree, va_gc> *args;
5972 savew = warningcount + werrorcount, savee = errorcount;
5973 args = make_tree_vector_single (expr);
5974 expr = build_special_member_call (NULL_TREE, complete_ctor_identifier,
5975 &args, type, flags, complain);
5976 release_tree_vector (args);
5977 if (warningcount + werrorcount > savew)
5978 *diagnostic_kind = DK_WARNING;
5979 else if (errorcount > savee)
5980 *diagnostic_kind = DK_ERROR;
5981 else
5982 *diagnostic_kind = DK_UNSPECIFIED;
5983 return expr;
5986 /* Perform warnings about peculiar, but valid, conversions from/to NULL.
5987 EXPR is implicitly converted to type TOTYPE.
5988 FN and ARGNUM are used for diagnostics. */
5990 static void
5991 conversion_null_warnings (tree totype, tree expr, tree fn, int argnum)
5993 /* Issue warnings about peculiar, but valid, uses of NULL. */
5994 if (expr == null_node && TREE_CODE (totype) != BOOLEAN_TYPE
5995 && ARITHMETIC_TYPE_P (totype))
5997 source_location loc =
5998 expansion_point_location_if_in_system_header (input_location);
6000 if (fn)
6001 warning_at (loc, OPT_Wconversion_null,
6002 "passing NULL to non-pointer argument %P of %qD",
6003 argnum, fn);
6004 else
6005 warning_at (loc, OPT_Wconversion_null,
6006 "converting to non-pointer type %qT from NULL", totype);
6009 /* Issue warnings if "false" is converted to a NULL pointer */
6010 else if (TREE_CODE (TREE_TYPE (expr)) == BOOLEAN_TYPE
6011 && TYPE_PTR_P (totype))
6013 if (fn)
6014 warning_at (input_location, OPT_Wconversion_null,
6015 "converting %<false%> to pointer type for argument %P "
6016 "of %qD", argnum, fn);
6017 else
6018 warning_at (input_location, OPT_Wconversion_null,
6019 "converting %<false%> to pointer type %qT", totype);
6023 /* We gave a diagnostic during a conversion. If this was in the second
6024 standard conversion sequence of a user-defined conversion sequence, say
6025 which user-defined conversion. */
6027 static void
6028 maybe_print_user_conv_context (conversion *convs)
6030 if (convs->user_conv_p)
6031 for (conversion *t = convs; t; t = next_conversion (t))
6032 if (t->kind == ck_user)
6034 print_z_candidate (0, " after user-defined conversion:",
6035 t->cand);
6036 break;
6040 /* Perform the conversions in CONVS on the expression EXPR. FN and
6041 ARGNUM are used for diagnostics. ARGNUM is zero based, -1
6042 indicates the `this' argument of a method. INNER is nonzero when
6043 being called to continue a conversion chain. It is negative when a
6044 reference binding will be applied, positive otherwise. If
6045 ISSUE_CONVERSION_WARNINGS is true, warnings about suspicious
6046 conversions will be emitted if appropriate. If C_CAST_P is true,
6047 this conversion is coming from a C-style cast; in that case,
6048 conversions to inaccessible bases are permitted. */
6050 static tree
6051 convert_like_real (conversion *convs, tree expr, tree fn, int argnum,
6052 int inner, bool issue_conversion_warnings,
6053 bool c_cast_p, tsubst_flags_t complain)
6055 tree totype = convs->type;
6056 diagnostic_t diag_kind;
6057 int flags;
6058 location_t loc = EXPR_LOC_OR_LOC (expr, input_location);
6060 if (convs->bad_p && !(complain & tf_error))
6061 return error_mark_node;
6063 if (convs->bad_p
6064 && convs->kind != ck_user
6065 && convs->kind != ck_list
6066 && convs->kind != ck_ambig
6067 && (convs->kind != ck_ref_bind
6068 || (convs->user_conv_p && next_conversion (convs)->bad_p))
6069 && (convs->kind != ck_rvalue
6070 || SCALAR_TYPE_P (totype))
6071 && convs->kind != ck_base)
6073 bool complained = false;
6074 conversion *t = convs;
6076 /* Give a helpful error if this is bad because of excess braces. */
6077 if (BRACE_ENCLOSED_INITIALIZER_P (expr)
6078 && SCALAR_TYPE_P (totype)
6079 && CONSTRUCTOR_NELTS (expr) > 0
6080 && BRACE_ENCLOSED_INITIALIZER_P (CONSTRUCTOR_ELT (expr, 0)->value))
6082 complained = permerror (loc, "too many braces around initializer "
6083 "for %qT", totype);
6084 while (BRACE_ENCLOSED_INITIALIZER_P (expr)
6085 && CONSTRUCTOR_NELTS (expr) == 1)
6086 expr = CONSTRUCTOR_ELT (expr, 0)->value;
6089 /* Give a helpful error if this is bad because a conversion to bool
6090 from std::nullptr_t requires direct-initialization. */
6091 if (NULLPTR_TYPE_P (TREE_TYPE (expr))
6092 && TREE_CODE (totype) == BOOLEAN_TYPE)
6093 complained = permerror (loc, "converting to %qT from %qT requires "
6094 "direct-initialization",
6095 totype, TREE_TYPE (expr));
6097 for (; t ; t = next_conversion (t))
6099 if (t->kind == ck_user && t->cand->reason)
6101 complained = permerror (loc, "invalid user-defined conversion "
6102 "from %qT to %qT", TREE_TYPE (expr),
6103 totype);
6104 if (complained)
6105 print_z_candidate (loc, "candidate is:", t->cand);
6106 expr = convert_like_real (t, expr, fn, argnum, 1,
6107 /*issue_conversion_warnings=*/false,
6108 /*c_cast_p=*/false,
6109 complain);
6110 if (convs->kind == ck_ref_bind)
6111 expr = convert_to_reference (totype, expr, CONV_IMPLICIT,
6112 LOOKUP_NORMAL, NULL_TREE,
6113 complain);
6114 else
6115 expr = cp_convert (totype, expr, complain);
6116 if (complained && fn)
6117 inform (DECL_SOURCE_LOCATION (fn),
6118 " initializing argument %P of %qD", argnum, fn);
6119 return expr;
6121 else if (t->kind == ck_user || !t->bad_p)
6123 expr = convert_like_real (t, expr, fn, argnum, 1,
6124 /*issue_conversion_warnings=*/false,
6125 /*c_cast_p=*/false,
6126 complain);
6127 break;
6129 else if (t->kind == ck_ambig)
6130 return convert_like_real (t, expr, fn, argnum, 1,
6131 /*issue_conversion_warnings=*/false,
6132 /*c_cast_p=*/false,
6133 complain);
6134 else if (t->kind == ck_identity)
6135 break;
6137 if (!complained)
6138 complained = permerror (loc, "invalid conversion from %qT to %qT",
6139 TREE_TYPE (expr), totype);
6140 if (complained && fn)
6141 inform (DECL_SOURCE_LOCATION (fn),
6142 " initializing argument %P of %qD", argnum, fn);
6144 return cp_convert (totype, expr, complain);
6147 if (issue_conversion_warnings && (complain & tf_warning))
6148 conversion_null_warnings (totype, expr, fn, argnum);
6150 switch (convs->kind)
6152 case ck_user:
6154 struct z_candidate *cand = convs->cand;
6155 tree convfn = cand->fn;
6156 unsigned i;
6158 /* When converting from an init list we consider explicit
6159 constructors, but actually trying to call one is an error. */
6160 if (DECL_NONCONVERTING_P (convfn) && DECL_CONSTRUCTOR_P (convfn)
6161 /* Unless this is for direct-list-initialization. */
6162 && !DIRECT_LIST_INIT_P (expr))
6164 if (!(complain & tf_error))
6165 return error_mark_node;
6166 error ("converting to %qT from initializer list would use "
6167 "explicit constructor %qD", totype, convfn);
6170 /* If we're initializing from {}, it's value-initialization. */
6171 if (BRACE_ENCLOSED_INITIALIZER_P (expr)
6172 && CONSTRUCTOR_NELTS (expr) == 0
6173 && TYPE_HAS_DEFAULT_CONSTRUCTOR (totype))
6175 bool direct = CONSTRUCTOR_IS_DIRECT_INIT (expr);
6176 expr = build_value_init (totype, complain);
6177 expr = get_target_expr_sfinae (expr, complain);
6178 if (expr != error_mark_node)
6180 TARGET_EXPR_LIST_INIT_P (expr) = true;
6181 TARGET_EXPR_DIRECT_INIT_P (expr) = direct;
6183 return expr;
6186 expr = mark_rvalue_use (expr);
6188 /* Set user_conv_p on the argument conversions, so rvalue/base
6189 handling knows not to allow any more UDCs. */
6190 for (i = 0; i < cand->num_convs; ++i)
6191 cand->convs[i]->user_conv_p = true;
6193 expr = build_over_call (cand, LOOKUP_NORMAL, complain);
6195 /* If this is a constructor or a function returning an aggr type,
6196 we need to build up a TARGET_EXPR. */
6197 if (DECL_CONSTRUCTOR_P (convfn))
6199 expr = build_cplus_new (totype, expr, complain);
6201 /* Remember that this was list-initialization. */
6202 if (convs->check_narrowing && expr != error_mark_node)
6203 TARGET_EXPR_LIST_INIT_P (expr) = true;
6206 return expr;
6208 case ck_identity:
6209 expr = mark_rvalue_use (expr);
6210 if (BRACE_ENCLOSED_INITIALIZER_P (expr))
6212 int nelts = CONSTRUCTOR_NELTS (expr);
6213 if (nelts == 0)
6214 expr = build_value_init (totype, complain);
6215 else if (nelts == 1)
6216 expr = CONSTRUCTOR_ELT (expr, 0)->value;
6217 else
6218 gcc_unreachable ();
6221 if (type_unknown_p (expr))
6222 expr = instantiate_type (totype, expr, complain);
6223 /* Convert a constant to its underlying value, unless we are
6224 about to bind it to a reference, in which case we need to
6225 leave it as an lvalue. */
6226 if (inner >= 0)
6228 expr = decl_constant_value_safe (expr);
6229 if (expr == null_node && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (totype))
6230 /* If __null has been converted to an integer type, we do not
6231 want to warn about uses of EXPR as an integer, rather than
6232 as a pointer. */
6233 expr = build_int_cst (totype, 0);
6235 return expr;
6236 case ck_ambig:
6237 /* We leave bad_p off ck_ambig because overload resolution considers
6238 it valid, it just fails when we try to perform it. So we need to
6239 check complain here, too. */
6240 if (complain & tf_error)
6242 /* Call build_user_type_conversion again for the error. */
6243 build_user_type_conversion (totype, convs->u.expr, LOOKUP_NORMAL,
6244 complain);
6245 if (fn)
6246 inform (input_location, " initializing argument %P of %q+D",
6247 argnum, fn);
6249 return error_mark_node;
6251 case ck_list:
6253 /* Conversion to std::initializer_list<T>. */
6254 tree elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (totype), 0);
6255 tree new_ctor = build_constructor (init_list_type_node, NULL);
6256 unsigned len = CONSTRUCTOR_NELTS (expr);
6257 tree array, val, field;
6258 vec<constructor_elt, va_gc> *vec = NULL;
6259 unsigned ix;
6261 /* Convert all the elements. */
6262 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expr), ix, val)
6264 tree sub = convert_like_real (convs->u.list[ix], val, fn, argnum,
6265 1, false, false, complain);
6266 if (sub == error_mark_node)
6267 return sub;
6268 if (!BRACE_ENCLOSED_INITIALIZER_P (val)
6269 && !check_narrowing (TREE_TYPE (sub), val, complain))
6270 return error_mark_node;
6271 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_ctor), NULL_TREE, sub);
6272 if (!TREE_CONSTANT (sub))
6273 TREE_CONSTANT (new_ctor) = false;
6275 /* Build up the array. */
6276 elttype = cp_build_qualified_type
6277 (elttype, cp_type_quals (elttype) | TYPE_QUAL_CONST);
6278 array = build_array_of_n_type (elttype, len);
6279 array = finish_compound_literal (array, new_ctor, complain);
6280 /* Take the address explicitly rather than via decay_conversion
6281 to avoid the error about taking the address of a temporary. */
6282 array = cp_build_addr_expr (array, complain);
6283 array = cp_convert (build_pointer_type (elttype), array, complain);
6284 if (array == error_mark_node)
6285 return error_mark_node;
6287 /* Build up the initializer_list object. */
6288 totype = complete_type (totype);
6289 field = next_initializable_field (TYPE_FIELDS (totype));
6290 CONSTRUCTOR_APPEND_ELT (vec, field, array);
6291 field = next_initializable_field (DECL_CHAIN (field));
6292 CONSTRUCTOR_APPEND_ELT (vec, field, size_int (len));
6293 new_ctor = build_constructor (totype, vec);
6294 return get_target_expr_sfinae (new_ctor, complain);
6297 case ck_aggr:
6298 if (TREE_CODE (totype) == COMPLEX_TYPE)
6300 tree real = CONSTRUCTOR_ELT (expr, 0)->value;
6301 tree imag = CONSTRUCTOR_ELT (expr, 1)->value;
6302 real = perform_implicit_conversion (TREE_TYPE (totype),
6303 real, complain);
6304 imag = perform_implicit_conversion (TREE_TYPE (totype),
6305 imag, complain);
6306 expr = build2 (COMPLEX_EXPR, totype, real, imag);
6307 return fold_if_not_in_template (expr);
6309 expr = reshape_init (totype, expr, complain);
6310 expr = get_target_expr_sfinae (digest_init (totype, expr, complain),
6311 complain);
6312 if (expr != error_mark_node)
6313 TARGET_EXPR_LIST_INIT_P (expr) = true;
6314 return expr;
6316 default:
6317 break;
6320 expr = convert_like_real (next_conversion (convs), expr, fn, argnum,
6321 convs->kind == ck_ref_bind ? -1 : 1,
6322 convs->kind == ck_ref_bind ? issue_conversion_warnings : false,
6323 c_cast_p,
6324 complain);
6325 if (expr == error_mark_node)
6326 return error_mark_node;
6328 switch (convs->kind)
6330 case ck_rvalue:
6331 expr = decay_conversion (expr, complain);
6332 if (expr == error_mark_node)
6333 return error_mark_node;
6335 if (! MAYBE_CLASS_TYPE_P (totype))
6336 return expr;
6337 /* Else fall through. */
6338 case ck_base:
6339 if (convs->kind == ck_base && !convs->need_temporary_p)
6341 /* We are going to bind a reference directly to a base-class
6342 subobject of EXPR. */
6343 /* Build an expression for `*((base*) &expr)'. */
6344 expr = cp_build_addr_expr (expr, complain);
6345 expr = convert_to_base (expr, build_pointer_type (totype),
6346 !c_cast_p, /*nonnull=*/true, complain);
6347 expr = cp_build_indirect_ref (expr, RO_IMPLICIT_CONVERSION, complain);
6348 return expr;
6351 /* Copy-initialization where the cv-unqualified version of the source
6352 type is the same class as, or a derived class of, the class of the
6353 destination [is treated as direct-initialization]. [dcl.init] */
6354 flags = LOOKUP_NORMAL|LOOKUP_ONLYCONVERTING;
6355 if (convs->user_conv_p)
6356 /* This conversion is being done in the context of a user-defined
6357 conversion (i.e. the second step of copy-initialization), so
6358 don't allow any more. */
6359 flags |= LOOKUP_NO_CONVERSION;
6360 if (convs->rvaluedness_matches_p)
6361 flags |= LOOKUP_PREFER_RVALUE;
6362 if (TREE_CODE (expr) == TARGET_EXPR
6363 && TARGET_EXPR_LIST_INIT_P (expr))
6364 /* Copy-list-initialization doesn't actually involve a copy. */
6365 return expr;
6366 expr = build_temp (expr, totype, flags, &diag_kind, complain);
6367 if (diag_kind && complain)
6369 maybe_print_user_conv_context (convs);
6370 if (fn)
6371 inform (DECL_SOURCE_LOCATION (fn),
6372 " initializing argument %P of %qD", argnum, fn);
6375 return build_cplus_new (totype, expr, complain);
6377 case ck_ref_bind:
6379 tree ref_type = totype;
6381 if (convs->bad_p && !next_conversion (convs)->bad_p)
6383 tree extype = TREE_TYPE (expr);
6384 if (TYPE_REF_IS_RVALUE (ref_type)
6385 && real_lvalue_p (expr))
6386 error_at (loc, "cannot bind %qT lvalue to %qT",
6387 extype, totype);
6388 else if (!TYPE_REF_IS_RVALUE (ref_type) && !real_lvalue_p (expr)
6389 && !CP_TYPE_CONST_NON_VOLATILE_P (TREE_TYPE (ref_type)))
6390 error_at (loc, "invalid initialization of non-const reference of "
6391 "type %qT from an rvalue of type %qT", totype, extype);
6392 else if (!reference_compatible_p (TREE_TYPE (totype), extype))
6393 error_at (loc, "binding %qT to reference of type %qT "
6394 "discards qualifiers", extype, totype);
6395 else
6396 gcc_unreachable ();
6397 maybe_print_user_conv_context (convs);
6398 if (fn)
6399 inform (input_location,
6400 " initializing argument %P of %q+D", argnum, fn);
6401 return error_mark_node;
6404 /* If necessary, create a temporary.
6406 VA_ARG_EXPR and CONSTRUCTOR expressions are special cases
6407 that need temporaries, even when their types are reference
6408 compatible with the type of reference being bound, so the
6409 upcoming call to cp_build_addr_expr doesn't fail. */
6410 if (convs->need_temporary_p
6411 || TREE_CODE (expr) == CONSTRUCTOR
6412 || TREE_CODE (expr) == VA_ARG_EXPR)
6414 /* Otherwise, a temporary of type "cv1 T1" is created and
6415 initialized from the initializer expression using the rules
6416 for a non-reference copy-initialization (8.5). */
6418 tree type = TREE_TYPE (ref_type);
6419 cp_lvalue_kind lvalue = real_lvalue_p (expr);
6421 gcc_assert (same_type_ignoring_top_level_qualifiers_p
6422 (type, next_conversion (convs)->type));
6423 if (!CP_TYPE_CONST_NON_VOLATILE_P (type)
6424 && !TYPE_REF_IS_RVALUE (ref_type))
6426 /* If the reference is volatile or non-const, we
6427 cannot create a temporary. */
6428 if (lvalue & clk_bitfield)
6429 error_at (loc, "cannot bind bitfield %qE to %qT",
6430 expr, ref_type);
6431 else if (lvalue & clk_packed)
6432 error_at (loc, "cannot bind packed field %qE to %qT",
6433 expr, ref_type);
6434 else
6435 error_at (loc, "cannot bind rvalue %qE to %qT",
6436 expr, ref_type);
6437 return error_mark_node;
6439 /* If the source is a packed field, and we must use a copy
6440 constructor, then building the target expr will require
6441 binding the field to the reference parameter to the
6442 copy constructor, and we'll end up with an infinite
6443 loop. If we can use a bitwise copy, then we'll be
6444 OK. */
6445 if ((lvalue & clk_packed)
6446 && CLASS_TYPE_P (type)
6447 && type_has_nontrivial_copy_init (type))
6449 error_at (loc, "cannot bind packed field %qE to %qT",
6450 expr, ref_type);
6451 return error_mark_node;
6453 if (lvalue & clk_bitfield)
6455 expr = convert_bitfield_to_declared_type (expr);
6456 expr = fold_convert (type, expr);
6458 expr = build_target_expr_with_type (expr, type, complain);
6461 /* Take the address of the thing to which we will bind the
6462 reference. */
6463 expr = cp_build_addr_expr (expr, complain);
6464 if (expr == error_mark_node)
6465 return error_mark_node;
6467 /* Convert it to a pointer to the type referred to by the
6468 reference. This will adjust the pointer if a derived to
6469 base conversion is being performed. */
6470 expr = cp_convert (build_pointer_type (TREE_TYPE (ref_type)),
6471 expr, complain);
6472 /* Convert the pointer to the desired reference type. */
6473 return build_nop (ref_type, expr);
6476 case ck_lvalue:
6477 return decay_conversion (expr, complain);
6479 case ck_qual:
6480 /* Warn about deprecated conversion if appropriate. */
6481 string_conv_p (totype, expr, 1);
6482 break;
6484 case ck_ptr:
6485 if (convs->base_p)
6486 expr = convert_to_base (expr, totype, !c_cast_p,
6487 /*nonnull=*/false, complain);
6488 return build_nop (totype, expr);
6490 case ck_pmem:
6491 return convert_ptrmem (totype, expr, /*allow_inverse_p=*/false,
6492 c_cast_p, complain);
6494 default:
6495 break;
6498 if (convs->check_narrowing
6499 && !check_narrowing (totype, expr, complain))
6500 return error_mark_node;
6502 if (issue_conversion_warnings)
6503 expr = cp_convert_and_check (totype, expr, complain);
6504 else
6505 expr = cp_convert (totype, expr, complain);
6507 return expr;
6510 /* ARG is being passed to a varargs function. Perform any conversions
6511 required. Return the converted value. */
6513 tree
6514 convert_arg_to_ellipsis (tree arg, tsubst_flags_t complain)
6516 tree arg_type;
6517 location_t loc = EXPR_LOC_OR_LOC (arg, input_location);
6519 /* [expr.call]
6521 The lvalue-to-rvalue, array-to-pointer, and function-to-pointer
6522 standard conversions are performed. */
6523 arg = decay_conversion (arg, complain);
6524 arg_type = TREE_TYPE (arg);
6525 /* [expr.call]
6527 If the argument has integral or enumeration type that is subject
6528 to the integral promotions (_conv.prom_), or a floating point
6529 type that is subject to the floating point promotion
6530 (_conv.fpprom_), the value of the argument is converted to the
6531 promoted type before the call. */
6532 if (TREE_CODE (arg_type) == REAL_TYPE
6533 && (TYPE_PRECISION (arg_type)
6534 < TYPE_PRECISION (double_type_node))
6535 && !DECIMAL_FLOAT_MODE_P (TYPE_MODE (arg_type)))
6537 if ((complain & tf_warning)
6538 && warn_double_promotion && !c_inhibit_evaluation_warnings)
6539 warning_at (loc, OPT_Wdouble_promotion,
6540 "implicit conversion from %qT to %qT when passing "
6541 "argument to function",
6542 arg_type, double_type_node);
6543 arg = convert_to_real (double_type_node, arg);
6545 else if (NULLPTR_TYPE_P (arg_type))
6546 arg = null_pointer_node;
6547 else if (INTEGRAL_OR_ENUMERATION_TYPE_P (arg_type))
6549 if (SCOPED_ENUM_P (arg_type))
6551 tree prom = cp_convert (ENUM_UNDERLYING_TYPE (arg_type), arg,
6552 complain);
6553 prom = cp_perform_integral_promotions (prom, complain);
6554 if (abi_version_crosses (6)
6555 && TYPE_MODE (TREE_TYPE (prom)) != TYPE_MODE (arg_type)
6556 && (complain & tf_warning))
6557 warning_at (loc, OPT_Wabi, "scoped enum %qT passed through ... as "
6558 "%qT before -fabi-version=6, %qT after", arg_type,
6559 TREE_TYPE (prom), ENUM_UNDERLYING_TYPE (arg_type));
6560 if (!abi_version_at_least (6))
6561 arg = prom;
6563 else
6564 arg = cp_perform_integral_promotions (arg, complain);
6567 arg = require_complete_type_sfinae (arg, complain);
6568 arg_type = TREE_TYPE (arg);
6570 if (arg != error_mark_node
6571 /* In a template (or ill-formed code), we can have an incomplete type
6572 even after require_complete_type_sfinae, in which case we don't know
6573 whether it has trivial copy or not. */
6574 && COMPLETE_TYPE_P (arg_type))
6576 /* Build up a real lvalue-to-rvalue conversion in case the
6577 copy constructor is trivial but not callable. */
6578 if (!cp_unevaluated_operand && CLASS_TYPE_P (arg_type))
6579 force_rvalue (arg, complain);
6581 /* [expr.call] 5.2.2/7:
6582 Passing a potentially-evaluated argument of class type (Clause 9)
6583 with a non-trivial copy constructor or a non-trivial destructor
6584 with no corresponding parameter is conditionally-supported, with
6585 implementation-defined semantics.
6587 We support it as pass-by-invisible-reference, just like a normal
6588 value parameter.
6590 If the call appears in the context of a sizeof expression,
6591 it is not potentially-evaluated. */
6592 if (cp_unevaluated_operand == 0
6593 && (type_has_nontrivial_copy_init (arg_type)
6594 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (arg_type)))
6596 if (complain & tf_warning)
6597 warning (OPT_Wconditionally_supported,
6598 "passing objects of non-trivially-copyable "
6599 "type %q#T through %<...%> is conditionally supported",
6600 arg_type);
6601 return cp_build_addr_expr (arg, complain);
6605 return arg;
6608 /* va_arg (EXPR, TYPE) is a builtin. Make sure it is not abused. */
6610 tree
6611 build_x_va_arg (source_location loc, tree expr, tree type)
6613 if (processing_template_decl)
6615 tree r = build_min (VA_ARG_EXPR, type, expr);
6616 SET_EXPR_LOCATION (r, loc);
6617 return r;
6620 type = complete_type_or_else (type, NULL_TREE);
6622 if (expr == error_mark_node || !type)
6623 return error_mark_node;
6625 expr = mark_lvalue_use (expr);
6627 if (TREE_CODE (type) == REFERENCE_TYPE)
6629 error ("cannot receive reference type %qT through %<...%>", type);
6630 return error_mark_node;
6633 if (type_has_nontrivial_copy_init (type)
6634 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
6636 /* conditionally-supported behavior [expr.call] 5.2.2/7. Let's treat
6637 it as pass by invisible reference. */
6638 warning_at (loc, OPT_Wconditionally_supported,
6639 "receiving objects of non-trivially-copyable type %q#T "
6640 "through %<...%> is conditionally-supported", type);
6642 tree ref = cp_build_reference_type (type, false);
6643 expr = build_va_arg (loc, expr, ref);
6644 return convert_from_reference (expr);
6647 return build_va_arg (loc, expr, type);
6650 /* TYPE has been given to va_arg. Apply the default conversions which
6651 would have happened when passed via ellipsis. Return the promoted
6652 type, or the passed type if there is no change. */
6654 tree
6655 cxx_type_promotes_to (tree type)
6657 tree promote;
6659 /* Perform the array-to-pointer and function-to-pointer
6660 conversions. */
6661 type = type_decays_to (type);
6663 promote = type_promotes_to (type);
6664 if (same_type_p (type, promote))
6665 promote = type;
6667 return promote;
6670 /* ARG is a default argument expression being passed to a parameter of
6671 the indicated TYPE, which is a parameter to FN. PARMNUM is the
6672 zero-based argument number. Do any required conversions. Return
6673 the converted value. */
6675 static GTY(()) vec<tree, va_gc> *default_arg_context;
6676 void
6677 push_defarg_context (tree fn)
6678 { vec_safe_push (default_arg_context, fn); }
6680 void
6681 pop_defarg_context (void)
6682 { default_arg_context->pop (); }
6684 tree
6685 convert_default_arg (tree type, tree arg, tree fn, int parmnum,
6686 tsubst_flags_t complain)
6688 int i;
6689 tree t;
6691 /* See through clones. */
6692 fn = DECL_ORIGIN (fn);
6694 /* Detect recursion. */
6695 FOR_EACH_VEC_SAFE_ELT (default_arg_context, i, t)
6696 if (t == fn)
6698 if (complain & tf_error)
6699 error ("recursive evaluation of default argument for %q#D", fn);
6700 return error_mark_node;
6703 /* If the ARG is an unparsed default argument expression, the
6704 conversion cannot be performed. */
6705 if (TREE_CODE (arg) == DEFAULT_ARG)
6707 if (complain & tf_error)
6708 error ("call to %qD uses the default argument for parameter %P, which "
6709 "is not yet defined", fn, parmnum);
6710 return error_mark_node;
6713 push_defarg_context (fn);
6715 if (fn && DECL_TEMPLATE_INFO (fn))
6716 arg = tsubst_default_argument (fn, type, arg, complain);
6718 /* Due to:
6720 [dcl.fct.default]
6722 The names in the expression are bound, and the semantic
6723 constraints are checked, at the point where the default
6724 expressions appears.
6726 we must not perform access checks here. */
6727 push_deferring_access_checks (dk_no_check);
6728 /* We must make a copy of ARG, in case subsequent processing
6729 alters any part of it. */
6730 arg = break_out_target_exprs (arg);
6731 arg = convert_for_initialization (0, type, arg, LOOKUP_IMPLICIT,
6732 ICR_DEFAULT_ARGUMENT, fn, parmnum,
6733 complain);
6734 arg = convert_for_arg_passing (type, arg, complain);
6735 pop_deferring_access_checks();
6737 pop_defarg_context ();
6739 return arg;
6742 /* Returns the type which will really be used for passing an argument of
6743 type TYPE. */
6745 tree
6746 type_passed_as (tree type)
6748 /* Pass classes with copy ctors by invisible reference. */
6749 if (TREE_ADDRESSABLE (type))
6751 type = build_reference_type (type);
6752 /* There are no other pointers to this temporary. */
6753 type = cp_build_qualified_type (type, TYPE_QUAL_RESTRICT);
6755 else if (targetm.calls.promote_prototypes (type)
6756 && INTEGRAL_TYPE_P (type)
6757 && COMPLETE_TYPE_P (type)
6758 && tree_int_cst_lt (TYPE_SIZE (type), TYPE_SIZE (integer_type_node)))
6759 type = integer_type_node;
6761 return type;
6764 /* Actually perform the appropriate conversion. */
6766 tree
6767 convert_for_arg_passing (tree type, tree val, tsubst_flags_t complain)
6769 tree bitfield_type;
6771 /* If VAL is a bitfield, then -- since it has already been converted
6772 to TYPE -- it cannot have a precision greater than TYPE.
6774 If it has a smaller precision, we must widen it here. For
6775 example, passing "int f:3;" to a function expecting an "int" will
6776 not result in any conversion before this point.
6778 If the precision is the same we must not risk widening. For
6779 example, the COMPONENT_REF for a 32-bit "long long" bitfield will
6780 often have type "int", even though the C++ type for the field is
6781 "long long". If the value is being passed to a function
6782 expecting an "int", then no conversions will be required. But,
6783 if we call convert_bitfield_to_declared_type, the bitfield will
6784 be converted to "long long". */
6785 bitfield_type = is_bitfield_expr_with_lowered_type (val);
6786 if (bitfield_type
6787 && TYPE_PRECISION (TREE_TYPE (val)) < TYPE_PRECISION (type))
6788 val = convert_to_integer (TYPE_MAIN_VARIANT (bitfield_type), val);
6790 if (val == error_mark_node)
6792 /* Pass classes with copy ctors by invisible reference. */
6793 else if (TREE_ADDRESSABLE (type))
6794 val = build1 (ADDR_EXPR, build_reference_type (type), val);
6795 else if (targetm.calls.promote_prototypes (type)
6796 && INTEGRAL_TYPE_P (type)
6797 && COMPLETE_TYPE_P (type)
6798 && tree_int_cst_lt (TYPE_SIZE (type), TYPE_SIZE (integer_type_node)))
6799 val = cp_perform_integral_promotions (val, complain);
6800 if ((complain & tf_warning)
6801 && warn_suggest_attribute_format)
6803 tree rhstype = TREE_TYPE (val);
6804 const enum tree_code coder = TREE_CODE (rhstype);
6805 const enum tree_code codel = TREE_CODE (type);
6806 if ((codel == POINTER_TYPE || codel == REFERENCE_TYPE)
6807 && coder == codel
6808 && check_missing_format_attribute (type, rhstype))
6809 warning (OPT_Wsuggest_attribute_format,
6810 "argument of function call might be a candidate for a format attribute");
6812 return val;
6815 /* Returns true iff FN is a function with magic varargs, i.e. ones for
6816 which no conversions at all should be done. This is true for some
6817 builtins which don't act like normal functions. */
6819 bool
6820 magic_varargs_p (tree fn)
6822 if (flag_cilkplus && is_cilkplus_reduce_builtin (fn) != BUILT_IN_NONE)
6823 return true;
6825 if (DECL_BUILT_IN (fn))
6826 switch (DECL_FUNCTION_CODE (fn))
6828 case BUILT_IN_CLASSIFY_TYPE:
6829 case BUILT_IN_CONSTANT_P:
6830 case BUILT_IN_NEXT_ARG:
6831 case BUILT_IN_VA_START:
6832 return true;
6834 default:;
6835 return lookup_attribute ("type generic",
6836 TYPE_ATTRIBUTES (TREE_TYPE (fn))) != 0;
6839 return false;
6842 /* Returns the decl of the dispatcher function if FN is a function version. */
6844 tree
6845 get_function_version_dispatcher (tree fn)
6847 tree dispatcher_decl = NULL;
6849 gcc_assert (TREE_CODE (fn) == FUNCTION_DECL
6850 && DECL_FUNCTION_VERSIONED (fn));
6852 gcc_assert (targetm.get_function_versions_dispatcher);
6853 dispatcher_decl = targetm.get_function_versions_dispatcher (fn);
6855 if (dispatcher_decl == NULL)
6857 error_at (input_location, "use of multiversioned function "
6858 "without a default");
6859 return NULL;
6862 retrofit_lang_decl (dispatcher_decl);
6863 gcc_assert (dispatcher_decl != NULL);
6864 return dispatcher_decl;
6867 /* fn is a function version dispatcher that is marked used. Mark all the
6868 semantically identical function versions it will dispatch as used. */
6870 void
6871 mark_versions_used (tree fn)
6873 struct cgraph_node *node;
6874 struct cgraph_function_version_info *node_v;
6875 struct cgraph_function_version_info *it_v;
6877 gcc_assert (TREE_CODE (fn) == FUNCTION_DECL);
6879 node = cgraph_node::get (fn);
6880 if (node == NULL)
6881 return;
6883 gcc_assert (node->dispatcher_function);
6885 node_v = node->function_version ();
6886 if (node_v == NULL)
6887 return;
6889 /* All semantically identical versions are chained. Traverse and mark each
6890 one of them as used. */
6891 it_v = node_v->next;
6892 while (it_v != NULL)
6894 mark_used (it_v->this_node->decl);
6895 it_v = it_v->next;
6899 /* Subroutine of the various build_*_call functions. Overload resolution
6900 has chosen a winning candidate CAND; build up a CALL_EXPR accordingly.
6901 ARGS is a TREE_LIST of the unconverted arguments to the call. FLAGS is a
6902 bitmask of various LOOKUP_* flags which apply to the call itself. */
6904 static tree
6905 build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain)
6907 tree fn = cand->fn;
6908 const vec<tree, va_gc> *args = cand->args;
6909 tree first_arg = cand->first_arg;
6910 conversion **convs = cand->convs;
6911 conversion *conv;
6912 tree parm = TYPE_ARG_TYPES (TREE_TYPE (fn));
6913 int parmlen;
6914 tree val;
6915 int i = 0;
6916 int j = 0;
6917 unsigned int arg_index = 0;
6918 int is_method = 0;
6919 int nargs;
6920 tree *argarray;
6921 bool already_used = false;
6923 /* In a template, there is no need to perform all of the work that
6924 is normally done. We are only interested in the type of the call
6925 expression, i.e., the return type of the function. Any semantic
6926 errors will be deferred until the template is instantiated. */
6927 if (processing_template_decl)
6929 tree expr, addr;
6930 tree return_type;
6931 const tree *argarray;
6932 unsigned int nargs;
6934 return_type = TREE_TYPE (TREE_TYPE (fn));
6935 nargs = vec_safe_length (args);
6936 if (first_arg == NULL_TREE)
6937 argarray = args->address ();
6938 else
6940 tree *alcarray;
6941 unsigned int ix;
6942 tree arg;
6944 ++nargs;
6945 alcarray = XALLOCAVEC (tree, nargs);
6946 alcarray[0] = build_this (first_arg);
6947 FOR_EACH_VEC_SAFE_ELT (args, ix, arg)
6948 alcarray[ix + 1] = arg;
6949 argarray = alcarray;
6952 addr = build_addr_func (fn, complain);
6953 if (addr == error_mark_node)
6954 return error_mark_node;
6955 expr = build_call_array_loc (input_location, return_type,
6956 addr, nargs, argarray);
6957 if (TREE_THIS_VOLATILE (fn) && cfun)
6958 current_function_returns_abnormally = 1;
6959 return convert_from_reference (expr);
6962 /* Give any warnings we noticed during overload resolution. */
6963 if (cand->warnings && (complain & tf_warning))
6965 struct candidate_warning *w;
6966 for (w = cand->warnings; w; w = w->next)
6967 joust (cand, w->loser, 1, complain);
6970 /* Make =delete work with SFINAE. */
6971 if (DECL_DELETED_FN (fn) && !(complain & tf_error))
6972 return error_mark_node;
6974 if (DECL_FUNCTION_MEMBER_P (fn))
6976 tree access_fn;
6977 /* If FN is a template function, two cases must be considered.
6978 For example:
6980 struct A {
6981 protected:
6982 template <class T> void f();
6984 template <class T> struct B {
6985 protected:
6986 void g();
6988 struct C : A, B<int> {
6989 using A::f; // #1
6990 using B<int>::g; // #2
6993 In case #1 where `A::f' is a member template, DECL_ACCESS is
6994 recorded in the primary template but not in its specialization.
6995 We check access of FN using its primary template.
6997 In case #2, where `B<int>::g' has a DECL_TEMPLATE_INFO simply
6998 because it is a member of class template B, DECL_ACCESS is
6999 recorded in the specialization `B<int>::g'. We cannot use its
7000 primary template because `B<T>::g' and `B<int>::g' may have
7001 different access. */
7002 if (DECL_TEMPLATE_INFO (fn)
7003 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (fn)))
7004 access_fn = DECL_TI_TEMPLATE (fn);
7005 else
7006 access_fn = fn;
7007 if (!perform_or_defer_access_check (cand->access_path, access_fn,
7008 fn, complain))
7009 return error_mark_node;
7012 /* If we're checking for implicit delete, don't bother with argument
7013 conversions. */
7014 if (flags & LOOKUP_SPECULATIVE)
7016 if (DECL_DELETED_FN (fn))
7018 if (complain & tf_error)
7019 mark_used (fn);
7020 return error_mark_node;
7022 if (cand->viable == 1)
7023 return fn;
7024 else if (!(complain & tf_error))
7025 /* Reject bad conversions now. */
7026 return error_mark_node;
7027 /* else continue to get conversion error. */
7030 /* N3276 magic doesn't apply to nested calls. */
7031 int decltype_flag = (complain & tf_decltype);
7032 complain &= ~tf_decltype;
7034 /* Find maximum size of vector to hold converted arguments. */
7035 parmlen = list_length (parm);
7036 nargs = vec_safe_length (args) + (first_arg != NULL_TREE ? 1 : 0);
7037 if (parmlen > nargs)
7038 nargs = parmlen;
7039 argarray = XALLOCAVEC (tree, nargs);
7041 /* The implicit parameters to a constructor are not considered by overload
7042 resolution, and must be of the proper type. */
7043 if (DECL_CONSTRUCTOR_P (fn))
7045 tree object_arg;
7046 if (first_arg != NULL_TREE)
7048 object_arg = first_arg;
7049 first_arg = NULL_TREE;
7051 else
7053 object_arg = (*args)[arg_index];
7054 ++arg_index;
7056 argarray[j++] = build_this (object_arg);
7057 parm = TREE_CHAIN (parm);
7058 /* We should never try to call the abstract constructor. */
7059 gcc_assert (!DECL_HAS_IN_CHARGE_PARM_P (fn));
7061 if (DECL_HAS_VTT_PARM_P (fn))
7063 argarray[j++] = (*args)[arg_index];
7064 ++arg_index;
7065 parm = TREE_CHAIN (parm);
7068 /* Bypass access control for 'this' parameter. */
7069 else if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
7071 tree parmtype = TREE_VALUE (parm);
7072 tree arg = build_this (first_arg != NULL_TREE
7073 ? first_arg
7074 : (*args)[arg_index]);
7075 tree argtype = TREE_TYPE (arg);
7076 tree converted_arg;
7077 tree base_binfo;
7079 if (convs[i]->bad_p)
7081 if (complain & tf_error)
7083 if (permerror (input_location, "passing %qT as %<this%> "
7084 "argument discards qualifiers",
7085 TREE_TYPE (argtype)))
7086 inform (DECL_SOURCE_LOCATION (fn), " in call to %qD", fn);
7088 else
7089 return error_mark_node;
7092 /* See if the function member or the whole class type is declared
7093 final and the call can be devirtualized. */
7094 if (DECL_FINAL_P (fn)
7095 || CLASSTYPE_FINAL (TYPE_METHOD_BASETYPE (TREE_TYPE (fn))))
7096 flags |= LOOKUP_NONVIRTUAL;
7098 /* [class.mfct.nonstatic]: If a nonstatic member function of a class
7099 X is called for an object that is not of type X, or of a type
7100 derived from X, the behavior is undefined.
7102 So we can assume that anything passed as 'this' is non-null, and
7103 optimize accordingly. */
7104 gcc_assert (TYPE_PTR_P (parmtype));
7105 /* Convert to the base in which the function was declared. */
7106 gcc_assert (cand->conversion_path != NULL_TREE);
7107 converted_arg = build_base_path (PLUS_EXPR,
7108 arg,
7109 cand->conversion_path,
7110 1, complain);
7111 /* Check that the base class is accessible. */
7112 if (!accessible_base_p (TREE_TYPE (argtype),
7113 BINFO_TYPE (cand->conversion_path), true))
7115 if (complain & tf_error)
7116 error ("%qT is not an accessible base of %qT",
7117 BINFO_TYPE (cand->conversion_path),
7118 TREE_TYPE (argtype));
7119 else
7120 return error_mark_node;
7122 /* If fn was found by a using declaration, the conversion path
7123 will be to the derived class, not the base declaring fn. We
7124 must convert from derived to base. */
7125 base_binfo = lookup_base (TREE_TYPE (TREE_TYPE (converted_arg)),
7126 TREE_TYPE (parmtype), ba_unique,
7127 NULL, complain);
7128 converted_arg = build_base_path (PLUS_EXPR, converted_arg,
7129 base_binfo, 1, complain);
7131 argarray[j++] = converted_arg;
7132 parm = TREE_CHAIN (parm);
7133 if (first_arg != NULL_TREE)
7134 first_arg = NULL_TREE;
7135 else
7136 ++arg_index;
7137 ++i;
7138 is_method = 1;
7141 gcc_assert (first_arg == NULL_TREE);
7142 for (; arg_index < vec_safe_length (args) && parm;
7143 parm = TREE_CHAIN (parm), ++arg_index, ++i)
7145 tree type = TREE_VALUE (parm);
7146 tree arg = (*args)[arg_index];
7147 bool conversion_warning = true;
7149 conv = convs[i];
7151 /* If the argument is NULL and used to (implicitly) instantiate a
7152 template function (and bind one of the template arguments to
7153 the type of 'long int'), we don't want to warn about passing NULL
7154 to non-pointer argument.
7155 For example, if we have this template function:
7157 template<typename T> void func(T x) {}
7159 we want to warn (when -Wconversion is enabled) in this case:
7161 void foo() {
7162 func<int>(NULL);
7165 but not in this case:
7167 void foo() {
7168 func(NULL);
7171 if (arg == null_node
7172 && DECL_TEMPLATE_INFO (fn)
7173 && cand->template_decl
7174 && !(flags & LOOKUP_EXPLICIT_TMPL_ARGS))
7175 conversion_warning = false;
7177 /* Warn about initializer_list deduction that isn't currently in the
7178 working draft. */
7179 if (cxx_dialect > cxx98
7180 && flag_deduce_init_list
7181 && cand->template_decl
7182 && is_std_init_list (non_reference (type))
7183 && BRACE_ENCLOSED_INITIALIZER_P (arg))
7185 tree tmpl = TI_TEMPLATE (cand->template_decl);
7186 tree realparm = chain_index (j, DECL_ARGUMENTS (cand->fn));
7187 tree patparm = get_pattern_parm (realparm, tmpl);
7188 tree pattype = TREE_TYPE (patparm);
7189 if (PACK_EXPANSION_P (pattype))
7190 pattype = PACK_EXPANSION_PATTERN (pattype);
7191 pattype = non_reference (pattype);
7193 if (TREE_CODE (pattype) == TEMPLATE_TYPE_PARM
7194 && (cand->explicit_targs == NULL_TREE
7195 || (TREE_VEC_LENGTH (cand->explicit_targs)
7196 <= TEMPLATE_TYPE_IDX (pattype))))
7198 pedwarn (input_location, 0, "deducing %qT as %qT",
7199 non_reference (TREE_TYPE (patparm)),
7200 non_reference (type));
7201 pedwarn (input_location, 0, " in call to %q+D", cand->fn);
7202 pedwarn (input_location, 0,
7203 " (you can disable this with -fno-deduce-init-list)");
7206 val = convert_like_with_context (conv, arg, fn, i - is_method,
7207 conversion_warning
7208 ? complain
7209 : complain & (~tf_warning));
7211 val = convert_for_arg_passing (type, val, complain);
7213 if (val == error_mark_node)
7214 return error_mark_node;
7215 else
7216 argarray[j++] = val;
7219 /* Default arguments */
7220 for (; parm && parm != void_list_node; parm = TREE_CHAIN (parm), i++)
7222 if (TREE_VALUE (parm) == error_mark_node)
7223 return error_mark_node;
7224 argarray[j++] = convert_default_arg (TREE_VALUE (parm),
7225 TREE_PURPOSE (parm),
7226 fn, i - is_method,
7227 complain);
7230 /* Ellipsis */
7231 for (; arg_index < vec_safe_length (args); ++arg_index)
7233 tree a = (*args)[arg_index];
7234 if (magic_varargs_p (fn))
7235 /* Do no conversions for magic varargs. */
7236 a = mark_type_use (a);
7237 else
7238 a = convert_arg_to_ellipsis (a, complain);
7239 argarray[j++] = a;
7242 gcc_assert (j <= nargs);
7243 nargs = j;
7245 check_function_arguments (TREE_TYPE (fn), nargs, argarray);
7247 /* Avoid actually calling copy constructors and copy assignment operators,
7248 if possible. */
7250 if (! flag_elide_constructors)
7251 /* Do things the hard way. */;
7252 else if (cand->num_convs == 1
7253 && (DECL_COPY_CONSTRUCTOR_P (fn)
7254 || DECL_MOVE_CONSTRUCTOR_P (fn)))
7256 tree targ;
7257 tree arg = argarray[num_artificial_parms_for (fn)];
7258 tree fa;
7259 bool trivial = trivial_fn_p (fn);
7261 /* Pull out the real argument, disregarding const-correctness. */
7262 targ = arg;
7263 while (CONVERT_EXPR_P (targ)
7264 || TREE_CODE (targ) == NON_LVALUE_EXPR)
7265 targ = TREE_OPERAND (targ, 0);
7266 if (TREE_CODE (targ) == ADDR_EXPR)
7268 targ = TREE_OPERAND (targ, 0);
7269 if (!same_type_ignoring_top_level_qualifiers_p
7270 (TREE_TYPE (TREE_TYPE (arg)), TREE_TYPE (targ)))
7271 targ = NULL_TREE;
7273 else
7274 targ = NULL_TREE;
7276 if (targ)
7277 arg = targ;
7278 else
7279 arg = cp_build_indirect_ref (arg, RO_NULL, complain);
7281 /* [class.copy]: the copy constructor is implicitly defined even if
7282 the implementation elided its use. */
7283 if (!trivial || DECL_DELETED_FN (fn))
7285 mark_used (fn);
7286 already_used = true;
7289 /* If we're creating a temp and we already have one, don't create a
7290 new one. If we're not creating a temp but we get one, use
7291 INIT_EXPR to collapse the temp into our target. Otherwise, if the
7292 ctor is trivial, do a bitwise copy with a simple TARGET_EXPR for a
7293 temp or an INIT_EXPR otherwise. */
7294 fa = argarray[0];
7295 if (is_dummy_object (fa))
7297 if (TREE_CODE (arg) == TARGET_EXPR)
7298 return arg;
7299 else if (trivial)
7300 return force_target_expr (DECL_CONTEXT (fn), arg, complain);
7302 else if (TREE_CODE (arg) == TARGET_EXPR || trivial)
7304 tree to = stabilize_reference (cp_build_indirect_ref (fa, RO_NULL,
7305 complain));
7307 val = build2 (INIT_EXPR, DECL_CONTEXT (fn), to, arg);
7308 return val;
7311 else if (DECL_OVERLOADED_OPERATOR_P (fn) == NOP_EXPR
7312 && trivial_fn_p (fn)
7313 && !DECL_DELETED_FN (fn))
7315 tree to = stabilize_reference
7316 (cp_build_indirect_ref (argarray[0], RO_NULL, complain));
7317 tree type = TREE_TYPE (to);
7318 tree as_base = CLASSTYPE_AS_BASE (type);
7319 tree arg = argarray[1];
7321 if (is_really_empty_class (type))
7323 /* Avoid copying empty classes. */
7324 val = build2 (COMPOUND_EXPR, void_type_node, to, arg);
7325 TREE_NO_WARNING (val) = 1;
7326 val = build2 (COMPOUND_EXPR, type, val, to);
7327 TREE_NO_WARNING (val) = 1;
7329 else if (tree_int_cst_equal (TYPE_SIZE (type), TYPE_SIZE (as_base)))
7331 arg = cp_build_indirect_ref (arg, RO_NULL, complain);
7332 val = build2 (MODIFY_EXPR, TREE_TYPE (to), to, arg);
7334 else
7336 /* We must only copy the non-tail padding parts. */
7337 tree arg0, arg2, t;
7338 tree array_type, alias_set;
7340 arg2 = TYPE_SIZE_UNIT (as_base);
7341 arg0 = cp_build_addr_expr (to, complain);
7343 array_type = build_array_type (char_type_node,
7344 build_index_type
7345 (size_binop (MINUS_EXPR,
7346 arg2, size_int (1))));
7347 alias_set = build_int_cst (build_pointer_type (type), 0);
7348 t = build2 (MODIFY_EXPR, void_type_node,
7349 build2 (MEM_REF, array_type, arg0, alias_set),
7350 build2 (MEM_REF, array_type, arg, alias_set));
7351 val = build2 (COMPOUND_EXPR, TREE_TYPE (to), t, to);
7352 TREE_NO_WARNING (val) = 1;
7355 return val;
7357 else if (DECL_DESTRUCTOR_P (fn)
7358 && trivial_fn_p (fn)
7359 && !DECL_DELETED_FN (fn))
7360 return fold_convert (void_type_node, argarray[0]);
7361 /* FIXME handle trivial default constructor, too. */
7363 /* For calls to a multi-versioned function, overload resolution
7364 returns the function with the highest target priority, that is,
7365 the version that will checked for dispatching first. If this
7366 version is inlinable, a direct call to this version can be made
7367 otherwise the call should go through the dispatcher. */
7369 if (DECL_FUNCTION_VERSIONED (fn)
7370 && (current_function_decl == NULL
7371 || !targetm.target_option.can_inline_p (current_function_decl, fn)))
7373 fn = get_function_version_dispatcher (fn);
7374 if (fn == NULL)
7375 return NULL;
7376 if (!already_used)
7377 mark_versions_used (fn);
7380 if (!already_used
7381 && !mark_used (fn))
7382 return error_mark_node;
7384 if (DECL_VINDEX (fn) && (flags & LOOKUP_NONVIRTUAL) == 0
7385 /* Don't mess with virtual lookup in fold_non_dependent_expr; virtual
7386 functions can't be constexpr. */
7387 && !in_template_function ())
7389 tree t;
7390 tree binfo = lookup_base (TREE_TYPE (TREE_TYPE (argarray[0])),
7391 DECL_CONTEXT (fn),
7392 ba_any, NULL, complain);
7393 gcc_assert (binfo && binfo != error_mark_node);
7395 /* Warn about deprecated virtual functions now, since we're about
7396 to throw away the decl. */
7397 if (TREE_DEPRECATED (fn))
7398 warn_deprecated_use (fn, NULL_TREE);
7400 argarray[0] = build_base_path (PLUS_EXPR, argarray[0], binfo, 1,
7401 complain);
7402 if (TREE_SIDE_EFFECTS (argarray[0]))
7403 argarray[0] = save_expr (argarray[0]);
7404 t = build_pointer_type (TREE_TYPE (fn));
7405 if (DECL_CONTEXT (fn) && TYPE_JAVA_INTERFACE (DECL_CONTEXT (fn)))
7406 fn = build_java_interface_fn_ref (fn, argarray[0]);
7407 else
7408 fn = build_vfn_ref (argarray[0], DECL_VINDEX (fn));
7409 TREE_TYPE (fn) = t;
7411 else
7413 fn = build_addr_func (fn, complain);
7414 if (fn == error_mark_node)
7415 return error_mark_node;
7418 tree call = build_cxx_call (fn, nargs, argarray, complain|decltype_flag);
7419 if (TREE_CODE (call) == CALL_EXPR
7420 && (cand->flags & LOOKUP_LIST_INIT_CTOR))
7421 CALL_EXPR_LIST_INIT_P (call) = true;
7422 return call;
7425 /* Build and return a call to FN, using NARGS arguments in ARGARRAY.
7426 This function performs no overload resolution, conversion, or other
7427 high-level operations. */
7429 tree
7430 build_cxx_call (tree fn, int nargs, tree *argarray,
7431 tsubst_flags_t complain)
7433 tree fndecl;
7434 int optimize_sav;
7436 /* Remember roughly where this call is. */
7437 location_t loc = EXPR_LOC_OR_LOC (fn, input_location);
7438 fn = build_call_a (fn, nargs, argarray);
7439 SET_EXPR_LOCATION (fn, loc);
7441 fndecl = get_callee_fndecl (fn);
7443 /* Check that arguments to builtin functions match the expectations. */
7444 if (fndecl
7445 && DECL_BUILT_IN (fndecl)
7446 && DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_NORMAL
7447 && !check_builtin_function_arguments (fndecl, nargs, argarray))
7448 return error_mark_node;
7450 /* If it is a built-in array notation function, then the return type of
7451 the function is the element type of the array passed in as array
7452 notation (i.e. the first parameter of the function). */
7453 if (flag_cilkplus && TREE_CODE (fn) == CALL_EXPR)
7455 enum built_in_function bif =
7456 is_cilkplus_reduce_builtin (CALL_EXPR_FN (fn));
7457 if (bif == BUILT_IN_CILKPLUS_SEC_REDUCE_ADD
7458 || bif == BUILT_IN_CILKPLUS_SEC_REDUCE_MUL
7459 || bif == BUILT_IN_CILKPLUS_SEC_REDUCE_MAX
7460 || bif == BUILT_IN_CILKPLUS_SEC_REDUCE_MIN
7461 || bif == BUILT_IN_CILKPLUS_SEC_REDUCE
7462 || bif == BUILT_IN_CILKPLUS_SEC_REDUCE_MUTATING)
7464 if (call_expr_nargs (fn) == 0)
7466 error_at (EXPR_LOCATION (fn), "Invalid builtin arguments");
7467 return error_mark_node;
7469 /* for bif == BUILT_IN_CILKPLUS_SEC_REDUCE_ALL_ZERO or
7470 BUILT_IN_CILKPLUS_SEC_REDUCE_ANY_ZERO or
7471 BUILT_IN_CILKPLUS_SEC_REDUCE_ANY_NONZERO or
7472 BUILT_IN_CILKPLUS_SEC_REDUCE_ALL_NONZERO or
7473 BUILT_IN_CILKPLUS_SEC_REDUCE_MIN_IND or
7474 BUILT_IN_CILKPLUS_SEC_REDUCE_MAX_IND
7475 The pre-defined return-type is the correct one. */
7476 tree array_ntn = CALL_EXPR_ARG (fn, 0);
7477 TREE_TYPE (fn) = TREE_TYPE (array_ntn);
7478 return fn;
7482 /* Some built-in function calls will be evaluated at compile-time in
7483 fold (). Set optimize to 1 when folding __builtin_constant_p inside
7484 a constexpr function so that fold_builtin_1 doesn't fold it to 0. */
7485 optimize_sav = optimize;
7486 if (!optimize && fndecl && DECL_IS_BUILTIN_CONSTANT_P (fndecl)
7487 && current_function_decl
7488 && DECL_DECLARED_CONSTEXPR_P (current_function_decl))
7489 optimize = 1;
7490 fn = fold_if_not_in_template (fn);
7491 optimize = optimize_sav;
7493 if (VOID_TYPE_P (TREE_TYPE (fn)))
7494 return fn;
7496 /* 5.2.2/11: If a function call is a prvalue of object type: if the
7497 function call is either the operand of a decltype-specifier or the
7498 right operand of a comma operator that is the operand of a
7499 decltype-specifier, a temporary object is not introduced for the
7500 prvalue. The type of the prvalue may be incomplete. */
7501 if (!(complain & tf_decltype))
7503 fn = require_complete_type_sfinae (fn, complain);
7504 if (fn == error_mark_node)
7505 return error_mark_node;
7507 if (MAYBE_CLASS_TYPE_P (TREE_TYPE (fn)))
7508 fn = build_cplus_new (TREE_TYPE (fn), fn, complain);
7510 return convert_from_reference (fn);
7513 static GTY(()) tree java_iface_lookup_fn;
7515 /* Make an expression which yields the address of the Java interface
7516 method FN. This is achieved by generating a call to libjava's
7517 _Jv_LookupInterfaceMethodIdx(). */
7519 static tree
7520 build_java_interface_fn_ref (tree fn, tree instance)
7522 tree lookup_fn, method, idx;
7523 tree klass_ref, iface, iface_ref;
7524 int i;
7526 if (!java_iface_lookup_fn)
7528 tree ftype = build_function_type_list (ptr_type_node,
7529 ptr_type_node, ptr_type_node,
7530 java_int_type_node, NULL_TREE);
7531 java_iface_lookup_fn
7532 = add_builtin_function ("_Jv_LookupInterfaceMethodIdx", ftype,
7533 0, NOT_BUILT_IN, NULL, NULL_TREE);
7536 /* Look up the pointer to the runtime java.lang.Class object for `instance'.
7537 This is the first entry in the vtable. */
7538 klass_ref = build_vtbl_ref (cp_build_indirect_ref (instance, RO_NULL,
7539 tf_warning_or_error),
7540 integer_zero_node);
7542 /* Get the java.lang.Class pointer for the interface being called. */
7543 iface = DECL_CONTEXT (fn);
7544 iface_ref = lookup_field (iface, get_identifier ("class$"), 0, false);
7545 if (!iface_ref || !VAR_P (iface_ref)
7546 || DECL_CONTEXT (iface_ref) != iface)
7548 error ("could not find class$ field in java interface type %qT",
7549 iface);
7550 return error_mark_node;
7552 iface_ref = build_address (iface_ref);
7553 iface_ref = convert (build_pointer_type (iface), iface_ref);
7555 /* Determine the itable index of FN. */
7556 i = 1;
7557 for (method = TYPE_METHODS (iface); method; method = DECL_CHAIN (method))
7559 if (!DECL_VIRTUAL_P (method))
7560 continue;
7561 if (fn == method)
7562 break;
7563 i++;
7565 idx = build_int_cst (NULL_TREE, i);
7567 lookup_fn = build1 (ADDR_EXPR,
7568 build_pointer_type (TREE_TYPE (java_iface_lookup_fn)),
7569 java_iface_lookup_fn);
7570 return build_call_nary (ptr_type_node, lookup_fn,
7571 3, klass_ref, iface_ref, idx);
7574 /* Returns the value to use for the in-charge parameter when making a
7575 call to a function with the indicated NAME.
7577 FIXME:Can't we find a neater way to do this mapping? */
7579 tree
7580 in_charge_arg_for_name (tree name)
7582 if (name == base_ctor_identifier
7583 || name == base_dtor_identifier)
7584 return integer_zero_node;
7585 else if (name == complete_ctor_identifier)
7586 return integer_one_node;
7587 else if (name == complete_dtor_identifier)
7588 return integer_two_node;
7589 else if (name == deleting_dtor_identifier)
7590 return integer_three_node;
7592 /* This function should only be called with one of the names listed
7593 above. */
7594 gcc_unreachable ();
7595 return NULL_TREE;
7598 /* Build a call to a constructor, destructor, or an assignment
7599 operator for INSTANCE, an expression with class type. NAME
7600 indicates the special member function to call; *ARGS are the
7601 arguments. ARGS may be NULL. This may change ARGS. BINFO
7602 indicates the base of INSTANCE that is to be passed as the `this'
7603 parameter to the member function called.
7605 FLAGS are the LOOKUP_* flags to use when processing the call.
7607 If NAME indicates a complete object constructor, INSTANCE may be
7608 NULL_TREE. In this case, the caller will call build_cplus_new to
7609 store the newly constructed object into a VAR_DECL. */
7611 tree
7612 build_special_member_call (tree instance, tree name, vec<tree, va_gc> **args,
7613 tree binfo, int flags, tsubst_flags_t complain)
7615 tree fns;
7616 /* The type of the subobject to be constructed or destroyed. */
7617 tree class_type;
7618 vec<tree, va_gc> *allocated = NULL;
7619 tree ret;
7621 gcc_assert (name == complete_ctor_identifier
7622 || name == base_ctor_identifier
7623 || name == complete_dtor_identifier
7624 || name == base_dtor_identifier
7625 || name == deleting_dtor_identifier
7626 || name == ansi_assopname (NOP_EXPR));
7627 if (TYPE_P (binfo))
7629 /* Resolve the name. */
7630 if (!complete_type_or_maybe_complain (binfo, NULL_TREE, complain))
7631 return error_mark_node;
7633 binfo = TYPE_BINFO (binfo);
7636 gcc_assert (binfo != NULL_TREE);
7638 class_type = BINFO_TYPE (binfo);
7640 /* Handle the special case where INSTANCE is NULL_TREE. */
7641 if (name == complete_ctor_identifier && !instance)
7642 instance = build_dummy_object (class_type);
7643 else
7645 if (name == complete_dtor_identifier
7646 || name == base_dtor_identifier
7647 || name == deleting_dtor_identifier)
7648 gcc_assert (args == NULL || vec_safe_is_empty (*args));
7650 /* Convert to the base class, if necessary. */
7651 if (!same_type_ignoring_top_level_qualifiers_p
7652 (TREE_TYPE (instance), BINFO_TYPE (binfo)))
7654 if (name != ansi_assopname (NOP_EXPR))
7655 /* For constructors and destructors, either the base is
7656 non-virtual, or it is virtual but we are doing the
7657 conversion from a constructor or destructor for the
7658 complete object. In either case, we can convert
7659 statically. */
7660 instance = convert_to_base_statically (instance, binfo);
7661 else
7662 /* However, for assignment operators, we must convert
7663 dynamically if the base is virtual. */
7664 instance = build_base_path (PLUS_EXPR, instance,
7665 binfo, /*nonnull=*/1, complain);
7669 gcc_assert (instance != NULL_TREE);
7671 fns = lookup_fnfields (binfo, name, 1);
7673 /* When making a call to a constructor or destructor for a subobject
7674 that uses virtual base classes, pass down a pointer to a VTT for
7675 the subobject. */
7676 if ((name == base_ctor_identifier
7677 || name == base_dtor_identifier)
7678 && CLASSTYPE_VBASECLASSES (class_type))
7680 tree vtt;
7681 tree sub_vtt;
7683 /* If the current function is a complete object constructor
7684 or destructor, then we fetch the VTT directly.
7685 Otherwise, we look it up using the VTT we were given. */
7686 vtt = DECL_CHAIN (CLASSTYPE_VTABLES (current_class_type));
7687 vtt = decay_conversion (vtt, complain);
7688 if (vtt == error_mark_node)
7689 return error_mark_node;
7690 vtt = build3 (COND_EXPR, TREE_TYPE (vtt),
7691 build2 (EQ_EXPR, boolean_type_node,
7692 current_in_charge_parm, integer_zero_node),
7693 current_vtt_parm,
7694 vtt);
7695 if (BINFO_SUBVTT_INDEX (binfo))
7696 sub_vtt = fold_build_pointer_plus (vtt, BINFO_SUBVTT_INDEX (binfo));
7697 else
7698 sub_vtt = vtt;
7700 if (args == NULL)
7702 allocated = make_tree_vector ();
7703 args = &allocated;
7706 vec_safe_insert (*args, 0, sub_vtt);
7709 ret = build_new_method_call (instance, fns, args,
7710 TYPE_BINFO (BINFO_TYPE (binfo)),
7711 flags, /*fn=*/NULL,
7712 complain);
7714 if (allocated != NULL)
7715 release_tree_vector (allocated);
7717 if ((complain & tf_error)
7718 && (flags & LOOKUP_DELEGATING_CONS)
7719 && name == complete_ctor_identifier
7720 && TREE_CODE (ret) == CALL_EXPR
7721 && (DECL_ABSTRACT_ORIGIN (TREE_OPERAND (CALL_EXPR_FN (ret), 0))
7722 == current_function_decl))
7723 error ("constructor delegates to itself");
7725 return ret;
7728 /* Return the NAME, as a C string. The NAME indicates a function that
7729 is a member of TYPE. *FREE_P is set to true if the caller must
7730 free the memory returned.
7732 Rather than go through all of this, we should simply set the names
7733 of constructors and destructors appropriately, and dispense with
7734 ctor_identifier, dtor_identifier, etc. */
7736 static char *
7737 name_as_c_string (tree name, tree type, bool *free_p)
7739 char *pretty_name;
7741 /* Assume that we will not allocate memory. */
7742 *free_p = false;
7743 /* Constructors and destructors are special. */
7744 if (IDENTIFIER_CTOR_OR_DTOR_P (name))
7746 pretty_name
7747 = CONST_CAST (char *, identifier_to_locale (IDENTIFIER_POINTER (constructor_name (type))));
7748 /* For a destructor, add the '~'. */
7749 if (name == complete_dtor_identifier
7750 || name == base_dtor_identifier
7751 || name == deleting_dtor_identifier)
7753 pretty_name = concat ("~", pretty_name, NULL);
7754 /* Remember that we need to free the memory allocated. */
7755 *free_p = true;
7758 else if (IDENTIFIER_TYPENAME_P (name))
7760 pretty_name = concat ("operator ",
7761 type_as_string_translate (TREE_TYPE (name),
7762 TFF_PLAIN_IDENTIFIER),
7763 NULL);
7764 /* Remember that we need to free the memory allocated. */
7765 *free_p = true;
7767 else
7768 pretty_name = CONST_CAST (char *, identifier_to_locale (IDENTIFIER_POINTER (name)));
7770 return pretty_name;
7773 /* Build a call to "INSTANCE.FN (ARGS)". If FN_P is non-NULL, it will
7774 be set, upon return, to the function called. ARGS may be NULL.
7775 This may change ARGS. */
7777 static tree
7778 build_new_method_call_1 (tree instance, tree fns, vec<tree, va_gc> **args,
7779 tree conversion_path, int flags,
7780 tree *fn_p, tsubst_flags_t complain)
7782 struct z_candidate *candidates = 0, *cand;
7783 tree explicit_targs = NULL_TREE;
7784 tree basetype = NULL_TREE;
7785 tree access_binfo, binfo;
7786 tree optype;
7787 tree first_mem_arg = NULL_TREE;
7788 tree name;
7789 bool skip_first_for_error;
7790 vec<tree, va_gc> *user_args;
7791 tree call;
7792 tree fn;
7793 int template_only = 0;
7794 bool any_viable_p;
7795 tree orig_instance;
7796 tree orig_fns;
7797 vec<tree, va_gc> *orig_args = NULL;
7798 void *p;
7800 gcc_assert (instance != NULL_TREE);
7802 /* We don't know what function we're going to call, yet. */
7803 if (fn_p)
7804 *fn_p = NULL_TREE;
7806 if (error_operand_p (instance)
7807 || !fns || error_operand_p (fns))
7808 return error_mark_node;
7810 if (!BASELINK_P (fns))
7812 if (complain & tf_error)
7813 error ("call to non-function %qD", fns);
7814 return error_mark_node;
7817 orig_instance = instance;
7818 orig_fns = fns;
7820 /* Dismantle the baselink to collect all the information we need. */
7821 if (!conversion_path)
7822 conversion_path = BASELINK_BINFO (fns);
7823 access_binfo = BASELINK_ACCESS_BINFO (fns);
7824 binfo = BASELINK_BINFO (fns);
7825 optype = BASELINK_OPTYPE (fns);
7826 fns = BASELINK_FUNCTIONS (fns);
7827 if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
7829 explicit_targs = TREE_OPERAND (fns, 1);
7830 fns = TREE_OPERAND (fns, 0);
7831 template_only = 1;
7833 gcc_assert (TREE_CODE (fns) == FUNCTION_DECL
7834 || TREE_CODE (fns) == TEMPLATE_DECL
7835 || TREE_CODE (fns) == OVERLOAD);
7836 fn = get_first_fn (fns);
7837 name = DECL_NAME (fn);
7839 basetype = TYPE_MAIN_VARIANT (TREE_TYPE (instance));
7840 gcc_assert (CLASS_TYPE_P (basetype));
7842 if (processing_template_decl)
7844 orig_args = args == NULL ? NULL : make_tree_vector_copy (*args);
7845 instance = build_non_dependent_expr (instance);
7846 if (args != NULL)
7847 make_args_non_dependent (*args);
7850 user_args = args == NULL ? NULL : *args;
7851 /* Under DR 147 A::A() is an invalid constructor call,
7852 not a functional cast. */
7853 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (fn))
7855 if (! (complain & tf_error))
7856 return error_mark_node;
7858 if (permerror (input_location,
7859 "cannot call constructor %<%T::%D%> directly",
7860 basetype, name))
7861 inform (input_location, "for a function-style cast, remove the "
7862 "redundant %<::%D%>", name);
7863 call = build_functional_cast (basetype, build_tree_list_vec (user_args),
7864 complain);
7865 return call;
7868 /* Figure out whether to skip the first argument for the error
7869 message we will display to users if an error occurs. We don't
7870 want to display any compiler-generated arguments. The "this"
7871 pointer hasn't been added yet. However, we must remove the VTT
7872 pointer if this is a call to a base-class constructor or
7873 destructor. */
7874 skip_first_for_error = false;
7875 if (IDENTIFIER_CTOR_OR_DTOR_P (name))
7877 /* Callers should explicitly indicate whether they want to construct
7878 the complete object or just the part without virtual bases. */
7879 gcc_assert (name != ctor_identifier);
7880 /* Similarly for destructors. */
7881 gcc_assert (name != dtor_identifier);
7882 /* Remove the VTT pointer, if present. */
7883 if ((name == base_ctor_identifier || name == base_dtor_identifier)
7884 && CLASSTYPE_VBASECLASSES (basetype))
7885 skip_first_for_error = true;
7888 /* Process the argument list. */
7889 if (args != NULL && *args != NULL)
7891 *args = resolve_args (*args, complain);
7892 if (*args == NULL)
7893 return error_mark_node;
7896 /* Consider the object argument to be used even if we end up selecting a
7897 static member function. */
7898 instance = mark_type_use (instance);
7900 /* It's OK to call destructors and constructors on cv-qualified objects.
7901 Therefore, convert the INSTANCE to the unqualified type, if
7902 necessary. */
7903 if (DECL_DESTRUCTOR_P (fn)
7904 || DECL_CONSTRUCTOR_P (fn))
7906 if (!same_type_p (basetype, TREE_TYPE (instance)))
7908 instance = build_this (instance);
7909 instance = build_nop (build_pointer_type (basetype), instance);
7910 instance = build_fold_indirect_ref (instance);
7913 if (DECL_DESTRUCTOR_P (fn))
7914 name = complete_dtor_identifier;
7916 /* For the overload resolution we need to find the actual `this`
7917 that would be captured if the call turns out to be to a
7918 non-static member function. Do not actually capture it at this
7919 point. */
7920 first_mem_arg = maybe_resolve_dummy (instance, false);
7922 /* Get the high-water mark for the CONVERSION_OBSTACK. */
7923 p = conversion_obstack_alloc (0);
7925 /* If CONSTRUCTOR_IS_DIRECT_INIT is set, this was a T{ } form
7926 initializer, not T({ }). */
7927 if (DECL_CONSTRUCTOR_P (fn) && args != NULL && !vec_safe_is_empty (*args)
7928 && DIRECT_LIST_INIT_P ((**args)[0]))
7930 tree init_list = (**args)[0];
7931 tree init = NULL_TREE;
7933 gcc_assert ((*args)->length () == 1
7934 && !(flags & LOOKUP_ONLYCONVERTING));
7936 /* If the initializer list has no elements and T is a class type with
7937 a default constructor, the object is value-initialized. Handle
7938 this here so we don't need to handle it wherever we use
7939 build_special_member_call. */
7940 if (CONSTRUCTOR_NELTS (init_list) == 0
7941 && TYPE_HAS_DEFAULT_CONSTRUCTOR (basetype)
7942 /* For a user-provided default constructor, use the normal
7943 mechanisms so that protected access works. */
7944 && !type_has_user_provided_default_constructor (basetype)
7945 && !processing_template_decl)
7946 init = build_value_init (basetype, complain);
7948 /* If BASETYPE is an aggregate, we need to do aggregate
7949 initialization. */
7950 else if (CP_AGGREGATE_TYPE_P (basetype))
7951 init = digest_init (basetype, init_list, complain);
7953 if (init)
7955 if (is_dummy_object (instance))
7956 return get_target_expr_sfinae (init, complain);
7957 init = build2 (INIT_EXPR, TREE_TYPE (instance), instance, init);
7958 TREE_SIDE_EFFECTS (init) = true;
7959 return init;
7962 /* Otherwise go ahead with overload resolution. */
7963 add_list_candidates (fns, first_mem_arg, init_list,
7964 basetype, explicit_targs, template_only,
7965 conversion_path, access_binfo, flags,
7966 &candidates, complain);
7968 else
7970 add_candidates (fns, first_mem_arg, user_args, optype,
7971 explicit_targs, template_only, conversion_path,
7972 access_binfo, flags, &candidates, complain);
7974 any_viable_p = false;
7975 candidates = splice_viable (candidates, false, &any_viable_p);
7977 if (!any_viable_p)
7979 if (complain & tf_error)
7981 if (!COMPLETE_OR_OPEN_TYPE_P (basetype))
7982 cxx_incomplete_type_error (instance, basetype);
7983 else if (optype)
7984 error ("no matching function for call to %<%T::operator %T(%A)%#V%>",
7985 basetype, optype, build_tree_list_vec (user_args),
7986 TREE_TYPE (instance));
7987 else
7989 char *pretty_name;
7990 bool free_p;
7991 tree arglist;
7993 pretty_name = name_as_c_string (name, basetype, &free_p);
7994 arglist = build_tree_list_vec (user_args);
7995 if (skip_first_for_error)
7996 arglist = TREE_CHAIN (arglist);
7997 error ("no matching function for call to %<%T::%s(%A)%#V%>",
7998 basetype, pretty_name, arglist,
7999 TREE_TYPE (instance));
8000 if (free_p)
8001 free (pretty_name);
8003 print_z_candidates (location_of (name), candidates);
8005 call = error_mark_node;
8007 else
8009 cand = tourney (candidates, complain);
8010 if (cand == 0)
8012 char *pretty_name;
8013 bool free_p;
8014 tree arglist;
8016 if (complain & tf_error)
8018 pretty_name = name_as_c_string (name, basetype, &free_p);
8019 arglist = build_tree_list_vec (user_args);
8020 if (skip_first_for_error)
8021 arglist = TREE_CHAIN (arglist);
8022 if (!any_strictly_viable (candidates))
8023 error ("no matching function for call to %<%s(%A)%>",
8024 pretty_name, arglist);
8025 else
8026 error ("call of overloaded %<%s(%A)%> is ambiguous",
8027 pretty_name, arglist);
8028 print_z_candidates (location_of (name), candidates);
8029 if (free_p)
8030 free (pretty_name);
8032 call = error_mark_node;
8034 else
8036 fn = cand->fn;
8037 call = NULL_TREE;
8039 if (!(flags & LOOKUP_NONVIRTUAL)
8040 && DECL_PURE_VIRTUAL_P (fn)
8041 && instance == current_class_ref
8042 && (complain & tf_warning))
8044 /* This is not an error, it is runtime undefined
8045 behavior. */
8046 if (!current_function_decl)
8047 warning (0, "pure virtual %q#D called from "
8048 "non-static data member initializer", fn);
8049 else if (DECL_CONSTRUCTOR_P (current_function_decl)
8050 || DECL_DESTRUCTOR_P (current_function_decl))
8051 warning (0, (DECL_CONSTRUCTOR_P (current_function_decl)
8052 ? "pure virtual %q#D called from constructor"
8053 : "pure virtual %q#D called from destructor"),
8054 fn);
8057 if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE
8058 && !DECL_CONSTRUCTOR_P (fn)
8059 && is_dummy_object (instance))
8061 instance = maybe_resolve_dummy (instance, true);
8062 if (instance == error_mark_node)
8063 call = error_mark_node;
8064 else if (!is_dummy_object (instance))
8066 /* We captured 'this' in the current lambda now that
8067 we know we really need it. */
8068 cand->first_arg = instance;
8070 else
8072 if (complain & tf_error)
8073 error ("cannot call member function %qD without object",
8074 fn);
8075 call = error_mark_node;
8079 if (call != error_mark_node)
8081 /* Optimize away vtable lookup if we know that this
8082 function can't be overridden. We need to check if
8083 the context and the type where we found fn are the same,
8084 actually FN might be defined in a different class
8085 type because of a using-declaration. In this case, we
8086 do not want to perform a non-virtual call. */
8087 if (DECL_VINDEX (fn) && ! (flags & LOOKUP_NONVIRTUAL)
8088 && same_type_ignoring_top_level_qualifiers_p
8089 (DECL_CONTEXT (fn), BINFO_TYPE (binfo))
8090 && resolves_to_fixed_type_p (instance, 0))
8091 flags |= LOOKUP_NONVIRTUAL;
8092 if (explicit_targs)
8093 flags |= LOOKUP_EXPLICIT_TMPL_ARGS;
8094 /* Now we know what function is being called. */
8095 if (fn_p)
8096 *fn_p = fn;
8097 /* Build the actual CALL_EXPR. */
8098 call = build_over_call (cand, flags, complain);
8099 /* In an expression of the form `a->f()' where `f' turns
8100 out to be a static member function, `a' is
8101 none-the-less evaluated. */
8102 if (TREE_CODE (TREE_TYPE (fn)) != METHOD_TYPE
8103 && !is_dummy_object (instance)
8104 && TREE_SIDE_EFFECTS (instance))
8105 call = build2 (COMPOUND_EXPR, TREE_TYPE (call),
8106 instance, call);
8107 else if (call != error_mark_node
8108 && DECL_DESTRUCTOR_P (cand->fn)
8109 && !VOID_TYPE_P (TREE_TYPE (call)))
8110 /* An explicit call of the form "x->~X()" has type
8111 "void". However, on platforms where destructors
8112 return "this" (i.e., those where
8113 targetm.cxx.cdtor_returns_this is true), such calls
8114 will appear to have a return value of pointer type
8115 to the low-level call machinery. We do not want to
8116 change the low-level machinery, since we want to be
8117 able to optimize "delete f()" on such platforms as
8118 "operator delete(~X(f()))" (rather than generating
8119 "t = f(), ~X(t), operator delete (t)"). */
8120 call = build_nop (void_type_node, call);
8125 if (processing_template_decl && call != error_mark_node)
8127 bool cast_to_void = false;
8129 if (TREE_CODE (call) == COMPOUND_EXPR)
8130 call = TREE_OPERAND (call, 1);
8131 else if (TREE_CODE (call) == NOP_EXPR)
8133 cast_to_void = true;
8134 call = TREE_OPERAND (call, 0);
8136 if (INDIRECT_REF_P (call))
8137 call = TREE_OPERAND (call, 0);
8138 call = (build_min_non_dep_call_vec
8139 (call,
8140 build_min (COMPONENT_REF, TREE_TYPE (CALL_EXPR_FN (call)),
8141 orig_instance, orig_fns, NULL_TREE),
8142 orig_args));
8143 SET_EXPR_LOCATION (call, input_location);
8144 call = convert_from_reference (call);
8145 if (cast_to_void)
8146 call = build_nop (void_type_node, call);
8149 /* Free all the conversions we allocated. */
8150 obstack_free (&conversion_obstack, p);
8152 if (orig_args != NULL)
8153 release_tree_vector (orig_args);
8155 return call;
8158 /* Wrapper for above. */
8160 tree
8161 build_new_method_call (tree instance, tree fns, vec<tree, va_gc> **args,
8162 tree conversion_path, int flags,
8163 tree *fn_p, tsubst_flags_t complain)
8165 tree ret;
8166 bool subtime = timevar_cond_start (TV_OVERLOAD);
8167 ret = build_new_method_call_1 (instance, fns, args, conversion_path, flags,
8168 fn_p, complain);
8169 timevar_cond_stop (TV_OVERLOAD, subtime);
8170 return ret;
8173 /* Returns true iff standard conversion sequence ICS1 is a proper
8174 subsequence of ICS2. */
8176 static bool
8177 is_subseq (conversion *ics1, conversion *ics2)
8179 /* We can assume that a conversion of the same code
8180 between the same types indicates a subsequence since we only get
8181 here if the types we are converting from are the same. */
8183 while (ics1->kind == ck_rvalue
8184 || ics1->kind == ck_lvalue)
8185 ics1 = next_conversion (ics1);
8187 while (1)
8189 while (ics2->kind == ck_rvalue
8190 || ics2->kind == ck_lvalue)
8191 ics2 = next_conversion (ics2);
8193 if (ics2->kind == ck_user
8194 || ics2->kind == ck_ambig
8195 || ics2->kind == ck_aggr
8196 || ics2->kind == ck_list
8197 || ics2->kind == ck_identity)
8198 /* At this point, ICS1 cannot be a proper subsequence of
8199 ICS2. We can get a USER_CONV when we are comparing the
8200 second standard conversion sequence of two user conversion
8201 sequences. */
8202 return false;
8204 ics2 = next_conversion (ics2);
8206 if (ics2->kind == ics1->kind
8207 && same_type_p (ics2->type, ics1->type)
8208 && same_type_p (next_conversion (ics2)->type,
8209 next_conversion (ics1)->type))
8210 return true;
8214 /* Returns nonzero iff DERIVED is derived from BASE. The inputs may
8215 be any _TYPE nodes. */
8217 bool
8218 is_properly_derived_from (tree derived, tree base)
8220 if (!CLASS_TYPE_P (derived) || !CLASS_TYPE_P (base))
8221 return false;
8223 /* We only allow proper derivation here. The DERIVED_FROM_P macro
8224 considers every class derived from itself. */
8225 return (!same_type_ignoring_top_level_qualifiers_p (derived, base)
8226 && DERIVED_FROM_P (base, derived));
8229 /* We build the ICS for an implicit object parameter as a pointer
8230 conversion sequence. However, such a sequence should be compared
8231 as if it were a reference conversion sequence. If ICS is the
8232 implicit conversion sequence for an implicit object parameter,
8233 modify it accordingly. */
8235 static void
8236 maybe_handle_implicit_object (conversion **ics)
8238 if ((*ics)->this_p)
8240 /* [over.match.funcs]
8242 For non-static member functions, the type of the
8243 implicit object parameter is "reference to cv X"
8244 where X is the class of which the function is a
8245 member and cv is the cv-qualification on the member
8246 function declaration. */
8247 conversion *t = *ics;
8248 tree reference_type;
8250 /* The `this' parameter is a pointer to a class type. Make the
8251 implicit conversion talk about a reference to that same class
8252 type. */
8253 reference_type = TREE_TYPE (t->type);
8254 reference_type = build_reference_type (reference_type);
8256 if (t->kind == ck_qual)
8257 t = next_conversion (t);
8258 if (t->kind == ck_ptr)
8259 t = next_conversion (t);
8260 t = build_identity_conv (TREE_TYPE (t->type), NULL_TREE);
8261 t = direct_reference_binding (reference_type, t);
8262 t->this_p = 1;
8263 t->rvaluedness_matches_p = 0;
8264 *ics = t;
8268 /* If *ICS is a REF_BIND set *ICS to the remainder of the conversion,
8269 and return the initial reference binding conversion. Otherwise,
8270 leave *ICS unchanged and return NULL. */
8272 static conversion *
8273 maybe_handle_ref_bind (conversion **ics)
8275 if ((*ics)->kind == ck_ref_bind)
8277 conversion *old_ics = *ics;
8278 *ics = next_conversion (old_ics);
8279 (*ics)->user_conv_p = old_ics->user_conv_p;
8280 return old_ics;
8283 return NULL;
8286 /* Compare two implicit conversion sequences according to the rules set out in
8287 [over.ics.rank]. Return values:
8289 1: ics1 is better than ics2
8290 -1: ics2 is better than ics1
8291 0: ics1 and ics2 are indistinguishable */
8293 static int
8294 compare_ics (conversion *ics1, conversion *ics2)
8296 tree from_type1;
8297 tree from_type2;
8298 tree to_type1;
8299 tree to_type2;
8300 tree deref_from_type1 = NULL_TREE;
8301 tree deref_from_type2 = NULL_TREE;
8302 tree deref_to_type1 = NULL_TREE;
8303 tree deref_to_type2 = NULL_TREE;
8304 conversion_rank rank1, rank2;
8306 /* REF_BINDING is nonzero if the result of the conversion sequence
8307 is a reference type. In that case REF_CONV is the reference
8308 binding conversion. */
8309 conversion *ref_conv1;
8310 conversion *ref_conv2;
8312 /* Compare badness before stripping the reference conversion. */
8313 if (ics1->bad_p > ics2->bad_p)
8314 return -1;
8315 else if (ics1->bad_p < ics2->bad_p)
8316 return 1;
8318 /* Handle implicit object parameters. */
8319 maybe_handle_implicit_object (&ics1);
8320 maybe_handle_implicit_object (&ics2);
8322 /* Handle reference parameters. */
8323 ref_conv1 = maybe_handle_ref_bind (&ics1);
8324 ref_conv2 = maybe_handle_ref_bind (&ics2);
8326 /* List-initialization sequence L1 is a better conversion sequence than
8327 list-initialization sequence L2 if L1 converts to
8328 std::initializer_list<X> for some X and L2 does not. */
8329 if (ics1->kind == ck_list && ics2->kind != ck_list)
8330 return 1;
8331 if (ics2->kind == ck_list && ics1->kind != ck_list)
8332 return -1;
8334 /* [over.ics.rank]
8336 When comparing the basic forms of implicit conversion sequences (as
8337 defined in _over.best.ics_)
8339 --a standard conversion sequence (_over.ics.scs_) is a better
8340 conversion sequence than a user-defined conversion sequence
8341 or an ellipsis conversion sequence, and
8343 --a user-defined conversion sequence (_over.ics.user_) is a
8344 better conversion sequence than an ellipsis conversion sequence
8345 (_over.ics.ellipsis_). */
8346 /* Use BAD_CONVERSION_RANK because we already checked for a badness
8347 mismatch. If both ICS are bad, we try to make a decision based on
8348 what would have happened if they'd been good. This is not an
8349 extension, we'll still give an error when we build up the call; this
8350 just helps us give a more helpful error message. */
8351 rank1 = BAD_CONVERSION_RANK (ics1);
8352 rank2 = BAD_CONVERSION_RANK (ics2);
8354 if (rank1 > rank2)
8355 return -1;
8356 else if (rank1 < rank2)
8357 return 1;
8359 if (ics1->ellipsis_p)
8360 /* Both conversions are ellipsis conversions. */
8361 return 0;
8363 /* User-defined conversion sequence U1 is a better conversion sequence
8364 than another user-defined conversion sequence U2 if they contain the
8365 same user-defined conversion operator or constructor and if the sec-
8366 ond standard conversion sequence of U1 is better than the second
8367 standard conversion sequence of U2. */
8369 /* Handle list-conversion with the same code even though it isn't always
8370 ranked as a user-defined conversion and it doesn't have a second
8371 standard conversion sequence; it will still have the desired effect.
8372 Specifically, we need to do the reference binding comparison at the
8373 end of this function. */
8375 if (ics1->user_conv_p || ics1->kind == ck_list || ics1->kind == ck_aggr)
8377 conversion *t1;
8378 conversion *t2;
8380 for (t1 = ics1; t1->kind != ck_user; t1 = next_conversion (t1))
8381 if (t1->kind == ck_ambig || t1->kind == ck_aggr
8382 || t1->kind == ck_list)
8383 break;
8384 for (t2 = ics2; t2->kind != ck_user; t2 = next_conversion (t2))
8385 if (t2->kind == ck_ambig || t2->kind == ck_aggr
8386 || t2->kind == ck_list)
8387 break;
8389 if (t1->kind != t2->kind)
8390 return 0;
8391 else if (t1->kind == ck_user)
8393 if (t1->cand->fn != t2->cand->fn)
8394 return 0;
8396 else
8398 /* For ambiguous or aggregate conversions, use the target type as
8399 a proxy for the conversion function. */
8400 if (!same_type_ignoring_top_level_qualifiers_p (t1->type, t2->type))
8401 return 0;
8404 /* We can just fall through here, after setting up
8405 FROM_TYPE1 and FROM_TYPE2. */
8406 from_type1 = t1->type;
8407 from_type2 = t2->type;
8409 else
8411 conversion *t1;
8412 conversion *t2;
8414 /* We're dealing with two standard conversion sequences.
8416 [over.ics.rank]
8418 Standard conversion sequence S1 is a better conversion
8419 sequence than standard conversion sequence S2 if
8421 --S1 is a proper subsequence of S2 (comparing the conversion
8422 sequences in the canonical form defined by _over.ics.scs_,
8423 excluding any Lvalue Transformation; the identity
8424 conversion sequence is considered to be a subsequence of
8425 any non-identity conversion sequence */
8427 t1 = ics1;
8428 while (t1->kind != ck_identity)
8429 t1 = next_conversion (t1);
8430 from_type1 = t1->type;
8432 t2 = ics2;
8433 while (t2->kind != ck_identity)
8434 t2 = next_conversion (t2);
8435 from_type2 = t2->type;
8438 /* One sequence can only be a subsequence of the other if they start with
8439 the same type. They can start with different types when comparing the
8440 second standard conversion sequence in two user-defined conversion
8441 sequences. */
8442 if (same_type_p (from_type1, from_type2))
8444 if (is_subseq (ics1, ics2))
8445 return 1;
8446 if (is_subseq (ics2, ics1))
8447 return -1;
8450 /* [over.ics.rank]
8452 Or, if not that,
8454 --the rank of S1 is better than the rank of S2 (by the rules
8455 defined below):
8457 Standard conversion sequences are ordered by their ranks: an Exact
8458 Match is a better conversion than a Promotion, which is a better
8459 conversion than a Conversion.
8461 Two conversion sequences with the same rank are indistinguishable
8462 unless one of the following rules applies:
8464 --A conversion that does not a convert a pointer, pointer to member,
8465 or std::nullptr_t to bool is better than one that does.
8467 The ICS_STD_RANK automatically handles the pointer-to-bool rule,
8468 so that we do not have to check it explicitly. */
8469 if (ics1->rank < ics2->rank)
8470 return 1;
8471 else if (ics2->rank < ics1->rank)
8472 return -1;
8474 to_type1 = ics1->type;
8475 to_type2 = ics2->type;
8477 /* A conversion from scalar arithmetic type to complex is worse than a
8478 conversion between scalar arithmetic types. */
8479 if (same_type_p (from_type1, from_type2)
8480 && ARITHMETIC_TYPE_P (from_type1)
8481 && ARITHMETIC_TYPE_P (to_type1)
8482 && ARITHMETIC_TYPE_P (to_type2)
8483 && ((TREE_CODE (to_type1) == COMPLEX_TYPE)
8484 != (TREE_CODE (to_type2) == COMPLEX_TYPE)))
8486 if (TREE_CODE (to_type1) == COMPLEX_TYPE)
8487 return -1;
8488 else
8489 return 1;
8492 if (TYPE_PTR_P (from_type1)
8493 && TYPE_PTR_P (from_type2)
8494 && TYPE_PTR_P (to_type1)
8495 && TYPE_PTR_P (to_type2))
8497 deref_from_type1 = TREE_TYPE (from_type1);
8498 deref_from_type2 = TREE_TYPE (from_type2);
8499 deref_to_type1 = TREE_TYPE (to_type1);
8500 deref_to_type2 = TREE_TYPE (to_type2);
8502 /* The rules for pointers to members A::* are just like the rules
8503 for pointers A*, except opposite: if B is derived from A then
8504 A::* converts to B::*, not vice versa. For that reason, we
8505 switch the from_ and to_ variables here. */
8506 else if ((TYPE_PTRDATAMEM_P (from_type1) && TYPE_PTRDATAMEM_P (from_type2)
8507 && TYPE_PTRDATAMEM_P (to_type1) && TYPE_PTRDATAMEM_P (to_type2))
8508 || (TYPE_PTRMEMFUNC_P (from_type1)
8509 && TYPE_PTRMEMFUNC_P (from_type2)
8510 && TYPE_PTRMEMFUNC_P (to_type1)
8511 && TYPE_PTRMEMFUNC_P (to_type2)))
8513 deref_to_type1 = TYPE_PTRMEM_CLASS_TYPE (from_type1);
8514 deref_to_type2 = TYPE_PTRMEM_CLASS_TYPE (from_type2);
8515 deref_from_type1 = TYPE_PTRMEM_CLASS_TYPE (to_type1);
8516 deref_from_type2 = TYPE_PTRMEM_CLASS_TYPE (to_type2);
8519 if (deref_from_type1 != NULL_TREE
8520 && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_from_type1))
8521 && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_from_type2)))
8523 /* This was one of the pointer or pointer-like conversions.
8525 [over.ics.rank]
8527 --If class B is derived directly or indirectly from class A,
8528 conversion of B* to A* is better than conversion of B* to
8529 void*, and conversion of A* to void* is better than
8530 conversion of B* to void*. */
8531 if (VOID_TYPE_P (deref_to_type1)
8532 && VOID_TYPE_P (deref_to_type2))
8534 if (is_properly_derived_from (deref_from_type1,
8535 deref_from_type2))
8536 return -1;
8537 else if (is_properly_derived_from (deref_from_type2,
8538 deref_from_type1))
8539 return 1;
8541 else if (VOID_TYPE_P (deref_to_type1)
8542 || VOID_TYPE_P (deref_to_type2))
8544 if (same_type_p (deref_from_type1, deref_from_type2))
8546 if (VOID_TYPE_P (deref_to_type2))
8548 if (is_properly_derived_from (deref_from_type1,
8549 deref_to_type1))
8550 return 1;
8552 /* We know that DEREF_TO_TYPE1 is `void' here. */
8553 else if (is_properly_derived_from (deref_from_type1,
8554 deref_to_type2))
8555 return -1;
8558 else if (RECORD_OR_UNION_CODE_P (TREE_CODE (deref_to_type1))
8559 && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_to_type2)))
8561 /* [over.ics.rank]
8563 --If class B is derived directly or indirectly from class A
8564 and class C is derived directly or indirectly from B,
8566 --conversion of C* to B* is better than conversion of C* to
8569 --conversion of B* to A* is better than conversion of C* to
8570 A* */
8571 if (same_type_p (deref_from_type1, deref_from_type2))
8573 if (is_properly_derived_from (deref_to_type1,
8574 deref_to_type2))
8575 return 1;
8576 else if (is_properly_derived_from (deref_to_type2,
8577 deref_to_type1))
8578 return -1;
8580 else if (same_type_p (deref_to_type1, deref_to_type2))
8582 if (is_properly_derived_from (deref_from_type2,
8583 deref_from_type1))
8584 return 1;
8585 else if (is_properly_derived_from (deref_from_type1,
8586 deref_from_type2))
8587 return -1;
8591 else if (CLASS_TYPE_P (non_reference (from_type1))
8592 && same_type_p (from_type1, from_type2))
8594 tree from = non_reference (from_type1);
8596 /* [over.ics.rank]
8598 --binding of an expression of type C to a reference of type
8599 B& is better than binding an expression of type C to a
8600 reference of type A&
8602 --conversion of C to B is better than conversion of C to A, */
8603 if (is_properly_derived_from (from, to_type1)
8604 && is_properly_derived_from (from, to_type2))
8606 if (is_properly_derived_from (to_type1, to_type2))
8607 return 1;
8608 else if (is_properly_derived_from (to_type2, to_type1))
8609 return -1;
8612 else if (CLASS_TYPE_P (non_reference (to_type1))
8613 && same_type_p (to_type1, to_type2))
8615 tree to = non_reference (to_type1);
8617 /* [over.ics.rank]
8619 --binding of an expression of type B to a reference of type
8620 A& is better than binding an expression of type C to a
8621 reference of type A&,
8623 --conversion of B to A is better than conversion of C to A */
8624 if (is_properly_derived_from (from_type1, to)
8625 && is_properly_derived_from (from_type2, to))
8627 if (is_properly_derived_from (from_type2, from_type1))
8628 return 1;
8629 else if (is_properly_derived_from (from_type1, from_type2))
8630 return -1;
8634 /* [over.ics.rank]
8636 --S1 and S2 differ only in their qualification conversion and yield
8637 similar types T1 and T2 (_conv.qual_), respectively, and the cv-
8638 qualification signature of type T1 is a proper subset of the cv-
8639 qualification signature of type T2 */
8640 if (ics1->kind == ck_qual
8641 && ics2->kind == ck_qual
8642 && same_type_p (from_type1, from_type2))
8644 int result = comp_cv_qual_signature (to_type1, to_type2);
8645 if (result != 0)
8646 return result;
8649 /* [over.ics.rank]
8651 --S1 and S2 are reference bindings (_dcl.init.ref_) and neither refers
8652 to an implicit object parameter of a non-static member function
8653 declared without a ref-qualifier, and either S1 binds an lvalue
8654 reference to an lvalue and S2 binds an rvalue reference or S1 binds an
8655 rvalue reference to an rvalue and S2 binds an lvalue reference (C++0x
8656 draft standard, 13.3.3.2)
8658 --S1 and S2 are reference bindings (_dcl.init.ref_), and the
8659 types to which the references refer are the same type except for
8660 top-level cv-qualifiers, and the type to which the reference
8661 initialized by S2 refers is more cv-qualified than the type to
8662 which the reference initialized by S1 refers.
8664 DR 1328 [over.match.best]: the context is an initialization by
8665 conversion function for direct reference binding (13.3.1.6) of a
8666 reference to function type, the return type of F1 is the same kind of
8667 reference (i.e. lvalue or rvalue) as the reference being initialized,
8668 and the return type of F2 is not. */
8670 if (ref_conv1 && ref_conv2)
8672 if (!ref_conv1->this_p && !ref_conv2->this_p
8673 && (ref_conv1->rvaluedness_matches_p
8674 != ref_conv2->rvaluedness_matches_p)
8675 && (same_type_p (ref_conv1->type, ref_conv2->type)
8676 || (TYPE_REF_IS_RVALUE (ref_conv1->type)
8677 != TYPE_REF_IS_RVALUE (ref_conv2->type))))
8679 if (ref_conv1->bad_p
8680 && !same_type_p (TREE_TYPE (ref_conv1->type),
8681 TREE_TYPE (ref_conv2->type)))
8682 /* Don't prefer a bad conversion that drops cv-quals to a bad
8683 conversion with the wrong rvalueness. */
8684 return 0;
8685 return (ref_conv1->rvaluedness_matches_p
8686 - ref_conv2->rvaluedness_matches_p);
8689 if (same_type_ignoring_top_level_qualifiers_p (to_type1, to_type2))
8691 int q1 = cp_type_quals (TREE_TYPE (ref_conv1->type));
8692 int q2 = cp_type_quals (TREE_TYPE (ref_conv2->type));
8693 if (ref_conv1->bad_p)
8695 /* Prefer the one that drops fewer cv-quals. */
8696 tree ftype = next_conversion (ref_conv1)->type;
8697 int fquals = cp_type_quals (ftype);
8698 q1 ^= fquals;
8699 q2 ^= fquals;
8701 return comp_cv_qualification (q2, q1);
8705 /* Neither conversion sequence is better than the other. */
8706 return 0;
8709 /* The source type for this standard conversion sequence. */
8711 static tree
8712 source_type (conversion *t)
8714 for (;; t = next_conversion (t))
8716 if (t->kind == ck_user
8717 || t->kind == ck_ambig
8718 || t->kind == ck_identity)
8719 return t->type;
8721 gcc_unreachable ();
8724 /* Note a warning about preferring WINNER to LOSER. We do this by storing
8725 a pointer to LOSER and re-running joust to produce the warning if WINNER
8726 is actually used. */
8728 static void
8729 add_warning (struct z_candidate *winner, struct z_candidate *loser)
8731 candidate_warning *cw = (candidate_warning *)
8732 conversion_obstack_alloc (sizeof (candidate_warning));
8733 cw->loser = loser;
8734 cw->next = winner->warnings;
8735 winner->warnings = cw;
8738 /* Compare two candidates for overloading as described in
8739 [over.match.best]. Return values:
8741 1: cand1 is better than cand2
8742 -1: cand2 is better than cand1
8743 0: cand1 and cand2 are indistinguishable */
8745 static int
8746 joust (struct z_candidate *cand1, struct z_candidate *cand2, bool warn,
8747 tsubst_flags_t complain)
8749 int winner = 0;
8750 int off1 = 0, off2 = 0;
8751 size_t i;
8752 size_t len;
8754 /* Candidates that involve bad conversions are always worse than those
8755 that don't. */
8756 if (cand1->viable > cand2->viable)
8757 return 1;
8758 if (cand1->viable < cand2->viable)
8759 return -1;
8761 /* If we have two pseudo-candidates for conversions to the same type,
8762 or two candidates for the same function, arbitrarily pick one. */
8763 if (cand1->fn == cand2->fn
8764 && (IS_TYPE_OR_DECL_P (cand1->fn)))
8765 return 1;
8767 /* Prefer a non-deleted function over an implicitly deleted move
8768 constructor or assignment operator. This differs slightly from the
8769 wording for issue 1402 (which says the move op is ignored by overload
8770 resolution), but this way produces better error messages. */
8771 if (TREE_CODE (cand1->fn) == FUNCTION_DECL
8772 && TREE_CODE (cand2->fn) == FUNCTION_DECL
8773 && DECL_DELETED_FN (cand1->fn) != DECL_DELETED_FN (cand2->fn))
8775 if (DECL_DELETED_FN (cand1->fn) && DECL_DEFAULTED_FN (cand1->fn)
8776 && move_fn_p (cand1->fn))
8777 return -1;
8778 if (DECL_DELETED_FN (cand2->fn) && DECL_DEFAULTED_FN (cand2->fn)
8779 && move_fn_p (cand2->fn))
8780 return 1;
8783 /* a viable function F1
8784 is defined to be a better function than another viable function F2 if
8785 for all arguments i, ICSi(F1) is not a worse conversion sequence than
8786 ICSi(F2), and then */
8788 /* for some argument j, ICSj(F1) is a better conversion sequence than
8789 ICSj(F2) */
8791 /* For comparing static and non-static member functions, we ignore
8792 the implicit object parameter of the non-static function. The
8793 standard says to pretend that the static function has an object
8794 parm, but that won't work with operator overloading. */
8795 len = cand1->num_convs;
8796 if (len != cand2->num_convs)
8798 int static_1 = DECL_STATIC_FUNCTION_P (cand1->fn);
8799 int static_2 = DECL_STATIC_FUNCTION_P (cand2->fn);
8801 if (DECL_CONSTRUCTOR_P (cand1->fn)
8802 && is_list_ctor (cand1->fn) != is_list_ctor (cand2->fn))
8803 /* We're comparing a near-match list constructor and a near-match
8804 non-list constructor. Just treat them as unordered. */
8805 return 0;
8807 gcc_assert (static_1 != static_2);
8809 if (static_1)
8810 off2 = 1;
8811 else
8813 off1 = 1;
8814 --len;
8818 for (i = 0; i < len; ++i)
8820 conversion *t1 = cand1->convs[i + off1];
8821 conversion *t2 = cand2->convs[i + off2];
8822 int comp = compare_ics (t1, t2);
8824 if (comp != 0)
8826 if ((complain & tf_warning)
8827 && warn_sign_promo
8828 && (CONVERSION_RANK (t1) + CONVERSION_RANK (t2)
8829 == cr_std + cr_promotion)
8830 && t1->kind == ck_std
8831 && t2->kind == ck_std
8832 && TREE_CODE (t1->type) == INTEGER_TYPE
8833 && TREE_CODE (t2->type) == INTEGER_TYPE
8834 && (TYPE_PRECISION (t1->type)
8835 == TYPE_PRECISION (t2->type))
8836 && (TYPE_UNSIGNED (next_conversion (t1)->type)
8837 || (TREE_CODE (next_conversion (t1)->type)
8838 == ENUMERAL_TYPE)))
8840 tree type = next_conversion (t1)->type;
8841 tree type1, type2;
8842 struct z_candidate *w, *l;
8843 if (comp > 0)
8844 type1 = t1->type, type2 = t2->type,
8845 w = cand1, l = cand2;
8846 else
8847 type1 = t2->type, type2 = t1->type,
8848 w = cand2, l = cand1;
8850 if (warn)
8852 warning (OPT_Wsign_promo, "passing %qT chooses %qT over %qT",
8853 type, type1, type2);
8854 warning (OPT_Wsign_promo, " in call to %qD", w->fn);
8856 else
8857 add_warning (w, l);
8860 if (winner && comp != winner)
8862 winner = 0;
8863 goto tweak;
8865 winner = comp;
8869 /* warn about confusing overload resolution for user-defined conversions,
8870 either between a constructor and a conversion op, or between two
8871 conversion ops. */
8872 if ((complain & tf_warning)
8873 && winner && warn_conversion && cand1->second_conv
8874 && (!DECL_CONSTRUCTOR_P (cand1->fn) || !DECL_CONSTRUCTOR_P (cand2->fn))
8875 && winner != compare_ics (cand1->second_conv, cand2->second_conv))
8877 struct z_candidate *w, *l;
8878 bool give_warning = false;
8880 if (winner == 1)
8881 w = cand1, l = cand2;
8882 else
8883 w = cand2, l = cand1;
8885 /* We don't want to complain about `X::operator T1 ()'
8886 beating `X::operator T2 () const', when T2 is a no less
8887 cv-qualified version of T1. */
8888 if (DECL_CONTEXT (w->fn) == DECL_CONTEXT (l->fn)
8889 && !DECL_CONSTRUCTOR_P (w->fn) && !DECL_CONSTRUCTOR_P (l->fn))
8891 tree t = TREE_TYPE (TREE_TYPE (l->fn));
8892 tree f = TREE_TYPE (TREE_TYPE (w->fn));
8894 if (TREE_CODE (t) == TREE_CODE (f) && POINTER_TYPE_P (t))
8896 t = TREE_TYPE (t);
8897 f = TREE_TYPE (f);
8899 if (!comp_ptr_ttypes (t, f))
8900 give_warning = true;
8902 else
8903 give_warning = true;
8905 if (!give_warning)
8906 /*NOP*/;
8907 else if (warn)
8909 tree source = source_type (w->convs[0]);
8910 if (! DECL_CONSTRUCTOR_P (w->fn))
8911 source = TREE_TYPE (source);
8912 if (warning (OPT_Wconversion, "choosing %qD over %qD", w->fn, l->fn)
8913 && warning (OPT_Wconversion, " for conversion from %qT to %qT",
8914 source, w->second_conv->type))
8916 inform (input_location, " because conversion sequence for the argument is better");
8919 else
8920 add_warning (w, l);
8923 if (winner)
8924 return winner;
8926 /* DR 495 moved this tiebreaker above the template ones. */
8927 /* or, if not that,
8928 the context is an initialization by user-defined conversion (see
8929 _dcl.init_ and _over.match.user_) and the standard conversion
8930 sequence from the return type of F1 to the destination type (i.e.,
8931 the type of the entity being initialized) is a better conversion
8932 sequence than the standard conversion sequence from the return type
8933 of F2 to the destination type. */
8935 if (cand1->second_conv)
8937 winner = compare_ics (cand1->second_conv, cand2->second_conv);
8938 if (winner)
8939 return winner;
8942 /* or, if not that,
8943 F1 is a non-template function and F2 is a template function
8944 specialization. */
8946 if (!cand1->template_decl && cand2->template_decl)
8947 return 1;
8948 else if (cand1->template_decl && !cand2->template_decl)
8949 return -1;
8951 /* or, if not that,
8952 F1 and F2 are template functions and the function template for F1 is
8953 more specialized than the template for F2 according to the partial
8954 ordering rules. */
8956 if (cand1->template_decl && cand2->template_decl)
8958 winner = more_specialized_fn
8959 (TI_TEMPLATE (cand1->template_decl),
8960 TI_TEMPLATE (cand2->template_decl),
8961 /* [temp.func.order]: The presence of unused ellipsis and default
8962 arguments has no effect on the partial ordering of function
8963 templates. add_function_candidate() will not have
8964 counted the "this" argument for constructors. */
8965 cand1->num_convs + DECL_CONSTRUCTOR_P (cand1->fn));
8966 if (winner)
8967 return winner;
8970 /* Check whether we can discard a builtin candidate, either because we
8971 have two identical ones or matching builtin and non-builtin candidates.
8973 (Pedantically in the latter case the builtin which matched the user
8974 function should not be added to the overload set, but we spot it here.
8976 [over.match.oper]
8977 ... the builtin candidates include ...
8978 - do not have the same parameter type list as any non-template
8979 non-member candidate. */
8981 if (identifier_p (cand1->fn) || identifier_p (cand2->fn))
8983 for (i = 0; i < len; ++i)
8984 if (!same_type_p (cand1->convs[i]->type,
8985 cand2->convs[i]->type))
8986 break;
8987 if (i == cand1->num_convs)
8989 if (cand1->fn == cand2->fn)
8990 /* Two built-in candidates; arbitrarily pick one. */
8991 return 1;
8992 else if (identifier_p (cand1->fn))
8993 /* cand1 is built-in; prefer cand2. */
8994 return -1;
8995 else
8996 /* cand2 is built-in; prefer cand1. */
8997 return 1;
9001 /* For candidates of a multi-versioned function, make the version with
9002 the highest priority win. This version will be checked for dispatching
9003 first. If this version can be inlined into the caller, the front-end
9004 will simply make a direct call to this function. */
9006 if (TREE_CODE (cand1->fn) == FUNCTION_DECL
9007 && DECL_FUNCTION_VERSIONED (cand1->fn)
9008 && TREE_CODE (cand2->fn) == FUNCTION_DECL
9009 && DECL_FUNCTION_VERSIONED (cand2->fn))
9011 tree f1 = TREE_TYPE (cand1->fn);
9012 tree f2 = TREE_TYPE (cand2->fn);
9013 tree p1 = TYPE_ARG_TYPES (f1);
9014 tree p2 = TYPE_ARG_TYPES (f2);
9016 /* Check if cand1->fn and cand2->fn are versions of the same function. It
9017 is possible that cand1->fn and cand2->fn are function versions but of
9018 different functions. Check types to see if they are versions of the same
9019 function. */
9020 if (compparms (p1, p2)
9021 && same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
9023 /* Always make the version with the higher priority, more
9024 specialized, win. */
9025 gcc_assert (targetm.compare_version_priority);
9026 if (targetm.compare_version_priority (cand1->fn, cand2->fn) >= 0)
9027 return 1;
9028 else
9029 return -1;
9033 /* If the two function declarations represent the same function (this can
9034 happen with declarations in multiple scopes and arg-dependent lookup),
9035 arbitrarily choose one. But first make sure the default args we're
9036 using match. */
9037 if (DECL_P (cand1->fn) && DECL_P (cand2->fn)
9038 && equal_functions (cand1->fn, cand2->fn))
9040 tree parms1 = TYPE_ARG_TYPES (TREE_TYPE (cand1->fn));
9041 tree parms2 = TYPE_ARG_TYPES (TREE_TYPE (cand2->fn));
9043 gcc_assert (!DECL_CONSTRUCTOR_P (cand1->fn));
9045 for (i = 0; i < len; ++i)
9047 /* Don't crash if the fn is variadic. */
9048 if (!parms1)
9049 break;
9050 parms1 = TREE_CHAIN (parms1);
9051 parms2 = TREE_CHAIN (parms2);
9054 if (off1)
9055 parms1 = TREE_CHAIN (parms1);
9056 else if (off2)
9057 parms2 = TREE_CHAIN (parms2);
9059 for (; parms1; ++i)
9061 if (!cp_tree_equal (TREE_PURPOSE (parms1),
9062 TREE_PURPOSE (parms2)))
9064 if (warn)
9066 if (complain & tf_error)
9068 if (permerror (input_location,
9069 "default argument mismatch in "
9070 "overload resolution"))
9072 inform (input_location,
9073 " candidate 1: %q+#F", cand1->fn);
9074 inform (input_location,
9075 " candidate 2: %q+#F", cand2->fn);
9078 else
9079 return 0;
9081 else
9082 add_warning (cand1, cand2);
9083 break;
9085 parms1 = TREE_CHAIN (parms1);
9086 parms2 = TREE_CHAIN (parms2);
9089 return 1;
9092 tweak:
9094 /* Extension: If the worst conversion for one candidate is worse than the
9095 worst conversion for the other, take the first. */
9096 if (!pedantic && (complain & tf_warning_or_error))
9098 conversion_rank rank1 = cr_identity, rank2 = cr_identity;
9099 struct z_candidate *w = 0, *l = 0;
9101 for (i = 0; i < len; ++i)
9103 if (CONVERSION_RANK (cand1->convs[i+off1]) > rank1)
9104 rank1 = CONVERSION_RANK (cand1->convs[i+off1]);
9105 if (CONVERSION_RANK (cand2->convs[i + off2]) > rank2)
9106 rank2 = CONVERSION_RANK (cand2->convs[i + off2]);
9108 if (rank1 < rank2)
9109 winner = 1, w = cand1, l = cand2;
9110 if (rank1 > rank2)
9111 winner = -1, w = cand2, l = cand1;
9112 if (winner)
9114 /* Don't choose a deleted function over ambiguity. */
9115 if (DECL_P (w->fn) && DECL_DELETED_FN (w->fn))
9116 return 0;
9117 if (warn)
9119 pedwarn (input_location, 0,
9120 "ISO C++ says that these are ambiguous, even "
9121 "though the worst conversion for the first is better than "
9122 "the worst conversion for the second:");
9123 print_z_candidate (input_location, _("candidate 1:"), w);
9124 print_z_candidate (input_location, _("candidate 2:"), l);
9126 else
9127 add_warning (w, l);
9128 return winner;
9132 gcc_assert (!winner);
9133 return 0;
9136 /* Given a list of candidates for overloading, find the best one, if any.
9137 This algorithm has a worst case of O(2n) (winner is last), and a best
9138 case of O(n/2) (totally ambiguous); much better than a sorting
9139 algorithm. */
9141 static struct z_candidate *
9142 tourney (struct z_candidate *candidates, tsubst_flags_t complain)
9144 struct z_candidate *champ = candidates, *challenger;
9145 int fate;
9146 int champ_compared_to_predecessor = 0;
9148 /* Walk through the list once, comparing each current champ to the next
9149 candidate, knocking out a candidate or two with each comparison. */
9151 for (challenger = champ->next; challenger; )
9153 fate = joust (champ, challenger, 0, complain);
9154 if (fate == 1)
9155 challenger = challenger->next;
9156 else
9158 if (fate == 0)
9160 champ = challenger->next;
9161 if (champ == 0)
9162 return NULL;
9163 champ_compared_to_predecessor = 0;
9165 else
9167 champ = challenger;
9168 champ_compared_to_predecessor = 1;
9171 challenger = champ->next;
9175 /* Make sure the champ is better than all the candidates it hasn't yet
9176 been compared to. */
9178 for (challenger = candidates;
9179 challenger != champ
9180 && !(champ_compared_to_predecessor && challenger->next == champ);
9181 challenger = challenger->next)
9183 fate = joust (champ, challenger, 0, complain);
9184 if (fate != 1)
9185 return NULL;
9188 return champ;
9191 /* Returns nonzero if things of type FROM can be converted to TO. */
9193 bool
9194 can_convert (tree to, tree from, tsubst_flags_t complain)
9196 tree arg = NULL_TREE;
9197 /* implicit_conversion only considers user-defined conversions
9198 if it has an expression for the call argument list. */
9199 if (CLASS_TYPE_P (from) || CLASS_TYPE_P (to))
9200 arg = build1 (CAST_EXPR, from, NULL_TREE);
9201 return can_convert_arg (to, from, arg, LOOKUP_IMPLICIT, complain);
9204 /* Returns nonzero if things of type FROM can be converted to TO with a
9205 standard conversion. */
9207 bool
9208 can_convert_standard (tree to, tree from, tsubst_flags_t complain)
9210 return can_convert_arg (to, from, NULL_TREE, LOOKUP_IMPLICIT, complain);
9213 /* Returns nonzero if ARG (of type FROM) can be converted to TO. */
9215 bool
9216 can_convert_arg (tree to, tree from, tree arg, int flags,
9217 tsubst_flags_t complain)
9219 conversion *t;
9220 void *p;
9221 bool ok_p;
9223 /* Get the high-water mark for the CONVERSION_OBSTACK. */
9224 p = conversion_obstack_alloc (0);
9225 /* We want to discard any access checks done for this test,
9226 as we might not be in the appropriate access context and
9227 we'll do the check again when we actually perform the
9228 conversion. */
9229 push_deferring_access_checks (dk_deferred);
9231 t = implicit_conversion (to, from, arg, /*c_cast_p=*/false,
9232 flags, complain);
9233 ok_p = (t && !t->bad_p);
9235 /* Discard the access checks now. */
9236 pop_deferring_access_checks ();
9237 /* Free all the conversions we allocated. */
9238 obstack_free (&conversion_obstack, p);
9240 return ok_p;
9243 /* Like can_convert_arg, but allows dubious conversions as well. */
9245 bool
9246 can_convert_arg_bad (tree to, tree from, tree arg, int flags,
9247 tsubst_flags_t complain)
9249 conversion *t;
9250 void *p;
9252 /* Get the high-water mark for the CONVERSION_OBSTACK. */
9253 p = conversion_obstack_alloc (0);
9254 /* Try to perform the conversion. */
9255 t = implicit_conversion (to, from, arg, /*c_cast_p=*/false,
9256 flags, complain);
9257 /* Free all the conversions we allocated. */
9258 obstack_free (&conversion_obstack, p);
9260 return t != NULL;
9263 /* Convert EXPR to TYPE. Return the converted expression.
9265 Note that we allow bad conversions here because by the time we get to
9266 this point we are committed to doing the conversion. If we end up
9267 doing a bad conversion, convert_like will complain. */
9269 tree
9270 perform_implicit_conversion_flags (tree type, tree expr,
9271 tsubst_flags_t complain, int flags)
9273 conversion *conv;
9274 void *p;
9275 location_t loc = EXPR_LOC_OR_LOC (expr, input_location);
9277 if (error_operand_p (expr))
9278 return error_mark_node;
9280 /* Get the high-water mark for the CONVERSION_OBSTACK. */
9281 p = conversion_obstack_alloc (0);
9283 conv = implicit_conversion (type, TREE_TYPE (expr), expr,
9284 /*c_cast_p=*/false,
9285 flags, complain);
9287 if (!conv)
9289 if (complain & tf_error)
9291 /* If expr has unknown type, then it is an overloaded function.
9292 Call instantiate_type to get good error messages. */
9293 if (TREE_TYPE (expr) == unknown_type_node)
9294 instantiate_type (type, expr, complain);
9295 else if (invalid_nonstatic_memfn_p (expr, complain))
9296 /* We gave an error. */;
9297 else
9298 error_at (loc, "could not convert %qE from %qT to %qT", expr,
9299 TREE_TYPE (expr), type);
9301 expr = error_mark_node;
9303 else if (processing_template_decl && conv->kind != ck_identity)
9305 /* In a template, we are only concerned about determining the
9306 type of non-dependent expressions, so we do not have to
9307 perform the actual conversion. But for initializers, we
9308 need to be able to perform it at instantiation
9309 (or fold_non_dependent_expr) time. */
9310 expr = build1 (IMPLICIT_CONV_EXPR, type, expr);
9311 if (!(flags & LOOKUP_ONLYCONVERTING))
9312 IMPLICIT_CONV_EXPR_DIRECT_INIT (expr) = true;
9314 else
9315 expr = convert_like (conv, expr, complain);
9317 /* Free all the conversions we allocated. */
9318 obstack_free (&conversion_obstack, p);
9320 return expr;
9323 tree
9324 perform_implicit_conversion (tree type, tree expr, tsubst_flags_t complain)
9326 return perform_implicit_conversion_flags (type, expr, complain,
9327 LOOKUP_IMPLICIT);
9330 /* Convert EXPR to TYPE (as a direct-initialization) if that is
9331 permitted. If the conversion is valid, the converted expression is
9332 returned. Otherwise, NULL_TREE is returned, except in the case
9333 that TYPE is a class type; in that case, an error is issued. If
9334 C_CAST_P is true, then this direct-initialization is taking
9335 place as part of a static_cast being attempted as part of a C-style
9336 cast. */
9338 tree
9339 perform_direct_initialization_if_possible (tree type,
9340 tree expr,
9341 bool c_cast_p,
9342 tsubst_flags_t complain)
9344 conversion *conv;
9345 void *p;
9347 if (type == error_mark_node || error_operand_p (expr))
9348 return error_mark_node;
9349 /* [dcl.init]
9351 If the destination type is a (possibly cv-qualified) class type:
9353 -- If the initialization is direct-initialization ...,
9354 constructors are considered. ... If no constructor applies, or
9355 the overload resolution is ambiguous, the initialization is
9356 ill-formed. */
9357 if (CLASS_TYPE_P (type))
9359 vec<tree, va_gc> *args = make_tree_vector_single (expr);
9360 expr = build_special_member_call (NULL_TREE, complete_ctor_identifier,
9361 &args, type, LOOKUP_NORMAL, complain);
9362 release_tree_vector (args);
9363 return build_cplus_new (type, expr, complain);
9366 /* Get the high-water mark for the CONVERSION_OBSTACK. */
9367 p = conversion_obstack_alloc (0);
9369 conv = implicit_conversion (type, TREE_TYPE (expr), expr,
9370 c_cast_p,
9371 LOOKUP_NORMAL, complain);
9372 if (!conv || conv->bad_p)
9373 expr = NULL_TREE;
9374 else
9375 expr = convert_like_real (conv, expr, NULL_TREE, 0, 0,
9376 /*issue_conversion_warnings=*/false,
9377 c_cast_p,
9378 complain);
9380 /* Free all the conversions we allocated. */
9381 obstack_free (&conversion_obstack, p);
9383 return expr;
9386 /* When initializing a reference that lasts longer than a full-expression,
9387 this special rule applies:
9389 [class.temporary]
9391 The temporary to which the reference is bound or the temporary
9392 that is the complete object to which the reference is bound
9393 persists for the lifetime of the reference.
9395 The temporaries created during the evaluation of the expression
9396 initializing the reference, except the temporary to which the
9397 reference is bound, are destroyed at the end of the
9398 full-expression in which they are created.
9400 In that case, we store the converted expression into a new
9401 VAR_DECL in a new scope.
9403 However, we want to be careful not to create temporaries when
9404 they are not required. For example, given:
9406 struct B {};
9407 struct D : public B {};
9408 D f();
9409 const B& b = f();
9411 there is no need to copy the return value from "f"; we can just
9412 extend its lifetime. Similarly, given:
9414 struct S {};
9415 struct T { operator S(); };
9416 T t;
9417 const S& s = t;
9419 we can extend the lifetime of the return value of the conversion
9420 operator.
9422 The next several functions are involved in this lifetime extension. */
9424 /* DECL is a VAR_DECL or FIELD_DECL whose type is a REFERENCE_TYPE. The
9425 reference is being bound to a temporary. Create and return a new
9426 VAR_DECL with the indicated TYPE; this variable will store the value to
9427 which the reference is bound. */
9429 tree
9430 make_temporary_var_for_ref_to_temp (tree decl, tree type)
9432 tree var;
9434 /* Create the variable. */
9435 var = create_temporary_var (type);
9437 /* Register the variable. */
9438 if (VAR_P (decl)
9439 && (TREE_STATIC (decl) || DECL_THREAD_LOCAL_P (decl)))
9441 /* Namespace-scope or local static; give it a mangled name. */
9442 /* FIXME share comdat with decl? */
9443 tree name;
9445 TREE_STATIC (var) = TREE_STATIC (decl);
9446 set_decl_tls_model (var, DECL_TLS_MODEL (decl));
9447 name = mangle_ref_init_variable (decl);
9448 DECL_NAME (var) = name;
9449 SET_DECL_ASSEMBLER_NAME (var, name);
9450 var = pushdecl_top_level (var);
9452 else
9453 /* Create a new cleanup level if necessary. */
9454 maybe_push_cleanup_level (type);
9456 return var;
9459 /* EXPR is the initializer for a variable DECL of reference or
9460 std::initializer_list type. Create, push and return a new VAR_DECL
9461 for the initializer so that it will live as long as DECL. Any
9462 cleanup for the new variable is returned through CLEANUP, and the
9463 code to initialize the new variable is returned through INITP. */
9465 static tree
9466 set_up_extended_ref_temp (tree decl, tree expr, vec<tree, va_gc> **cleanups,
9467 tree *initp)
9469 tree init;
9470 tree type;
9471 tree var;
9473 /* Create the temporary variable. */
9474 type = TREE_TYPE (expr);
9475 var = make_temporary_var_for_ref_to_temp (decl, type);
9476 layout_decl (var, 0);
9477 /* If the rvalue is the result of a function call it will be
9478 a TARGET_EXPR. If it is some other construct (such as a
9479 member access expression where the underlying object is
9480 itself the result of a function call), turn it into a
9481 TARGET_EXPR here. It is important that EXPR be a
9482 TARGET_EXPR below since otherwise the INIT_EXPR will
9483 attempt to make a bitwise copy of EXPR to initialize
9484 VAR. */
9485 if (TREE_CODE (expr) != TARGET_EXPR)
9486 expr = get_target_expr (expr);
9488 if (TREE_CODE (decl) == FIELD_DECL
9489 && extra_warnings && !TREE_NO_WARNING (decl))
9491 warning (OPT_Wextra, "a temporary bound to %qD only persists "
9492 "until the constructor exits", decl);
9493 TREE_NO_WARNING (decl) = true;
9496 /* Recursively extend temps in this initializer. */
9497 TARGET_EXPR_INITIAL (expr)
9498 = extend_ref_init_temps (decl, TARGET_EXPR_INITIAL (expr), cleanups);
9500 /* Any reference temp has a non-trivial initializer. */
9501 DECL_NONTRIVIALLY_INITIALIZED_P (var) = true;
9503 /* If the initializer is constant, put it in DECL_INITIAL so we get
9504 static initialization and use in constant expressions. */
9505 init = maybe_constant_init (expr);
9506 if (TREE_CONSTANT (init))
9508 if (literal_type_p (type) && CP_TYPE_CONST_NON_VOLATILE_P (type))
9510 /* 5.19 says that a constant expression can include an
9511 lvalue-rvalue conversion applied to "a glvalue of literal type
9512 that refers to a non-volatile temporary object initialized
9513 with a constant expression". Rather than try to communicate
9514 that this VAR_DECL is a temporary, just mark it constexpr.
9516 Currently this is only useful for initializer_list temporaries,
9517 since reference vars can't appear in constant expressions. */
9518 DECL_DECLARED_CONSTEXPR_P (var) = true;
9519 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (var) = true;
9520 TREE_CONSTANT (var) = true;
9522 DECL_INITIAL (var) = init;
9523 init = NULL_TREE;
9525 else
9526 /* Create the INIT_EXPR that will initialize the temporary
9527 variable. */
9528 init = build2 (INIT_EXPR, type, var, expr);
9529 if (at_function_scope_p ())
9531 add_decl_expr (var);
9533 if (TREE_STATIC (var))
9534 init = add_stmt_to_compound (init, register_dtor_fn (var));
9535 else
9537 tree cleanup = cxx_maybe_build_cleanup (var, tf_warning_or_error);
9538 if (cleanup)
9539 vec_safe_push (*cleanups, cleanup);
9542 /* We must be careful to destroy the temporary only
9543 after its initialization has taken place. If the
9544 initialization throws an exception, then the
9545 destructor should not be run. We cannot simply
9546 transform INIT into something like:
9548 (INIT, ({ CLEANUP_STMT; }))
9550 because emit_local_var always treats the
9551 initializer as a full-expression. Thus, the
9552 destructor would run too early; it would run at the
9553 end of initializing the reference variable, rather
9554 than at the end of the block enclosing the
9555 reference variable.
9557 The solution is to pass back a cleanup expression
9558 which the caller is responsible for attaching to
9559 the statement tree. */
9561 else
9563 rest_of_decl_compilation (var, /*toplev=*/1, at_eof);
9564 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
9566 if (DECL_THREAD_LOCAL_P (var))
9567 tls_aggregates = tree_cons (NULL_TREE, var,
9568 tls_aggregates);
9569 else
9570 static_aggregates = tree_cons (NULL_TREE, var,
9571 static_aggregates);
9573 else
9574 /* Check whether the dtor is callable. */
9575 cxx_maybe_build_cleanup (var, tf_warning_or_error);
9578 *initp = init;
9579 return var;
9582 /* Convert EXPR to the indicated reference TYPE, in a way suitable for
9583 initializing a variable of that TYPE. */
9585 tree
9586 initialize_reference (tree type, tree expr,
9587 int flags, tsubst_flags_t complain)
9589 conversion *conv;
9590 void *p;
9591 location_t loc = EXPR_LOC_OR_LOC (expr, input_location);
9593 if (type == error_mark_node || error_operand_p (expr))
9594 return error_mark_node;
9596 /* Get the high-water mark for the CONVERSION_OBSTACK. */
9597 p = conversion_obstack_alloc (0);
9599 conv = reference_binding (type, TREE_TYPE (expr), expr, /*c_cast_p=*/false,
9600 flags, complain);
9601 if (!conv || conv->bad_p)
9603 if (complain & tf_error)
9605 if (conv)
9606 convert_like (conv, expr, complain);
9607 else if (!CP_TYPE_CONST_P (TREE_TYPE (type))
9608 && !TYPE_REF_IS_RVALUE (type)
9609 && !real_lvalue_p (expr))
9610 error_at (loc, "invalid initialization of non-const reference of "
9611 "type %qT from an rvalue of type %qT",
9612 type, TREE_TYPE (expr));
9613 else
9614 error_at (loc, "invalid initialization of reference of type "
9615 "%qT from expression of type %qT", type,
9616 TREE_TYPE (expr));
9618 return error_mark_node;
9621 if (conv->kind == ck_ref_bind)
9622 /* Perform the conversion. */
9623 expr = convert_like (conv, expr, complain);
9624 else if (conv->kind == ck_ambig)
9625 /* We gave an error in build_user_type_conversion_1. */
9626 expr = error_mark_node;
9627 else
9628 gcc_unreachable ();
9630 /* Free all the conversions we allocated. */
9631 obstack_free (&conversion_obstack, p);
9633 return expr;
9636 /* Subroutine of extend_ref_init_temps. Possibly extend one initializer,
9637 which is bound either to a reference or a std::initializer_list. */
9639 static tree
9640 extend_ref_init_temps_1 (tree decl, tree init, vec<tree, va_gc> **cleanups)
9642 tree sub = init;
9643 tree *p;
9644 STRIP_NOPS (sub);
9645 if (TREE_CODE (sub) == COMPOUND_EXPR)
9647 TREE_OPERAND (sub, 1)
9648 = extend_ref_init_temps_1 (decl, TREE_OPERAND (sub, 1), cleanups);
9649 return init;
9651 if (TREE_CODE (sub) != ADDR_EXPR)
9652 return init;
9653 /* Deal with binding to a subobject. */
9654 for (p = &TREE_OPERAND (sub, 0); TREE_CODE (*p) == COMPONENT_REF; )
9655 p = &TREE_OPERAND (*p, 0);
9656 if (TREE_CODE (*p) == TARGET_EXPR)
9658 tree subinit = NULL_TREE;
9659 *p = set_up_extended_ref_temp (decl, *p, cleanups, &subinit);
9660 if (subinit)
9661 init = build2 (COMPOUND_EXPR, TREE_TYPE (init), subinit, init);
9662 recompute_tree_invariant_for_addr_expr (sub);
9664 return init;
9667 /* INIT is part of the initializer for DECL. If there are any
9668 reference or initializer lists being initialized, extend their
9669 lifetime to match that of DECL. */
9671 tree
9672 extend_ref_init_temps (tree decl, tree init, vec<tree, va_gc> **cleanups)
9674 tree type = TREE_TYPE (init);
9675 if (processing_template_decl)
9676 return init;
9677 if (TREE_CODE (type) == REFERENCE_TYPE)
9678 init = extend_ref_init_temps_1 (decl, init, cleanups);
9679 else if (is_std_init_list (type))
9681 /* The temporary array underlying a std::initializer_list
9682 is handled like a reference temporary. */
9683 tree ctor = init;
9684 if (TREE_CODE (ctor) == TARGET_EXPR)
9685 ctor = TARGET_EXPR_INITIAL (ctor);
9686 if (TREE_CODE (ctor) == CONSTRUCTOR)
9688 tree array = CONSTRUCTOR_ELT (ctor, 0)->value;
9689 array = extend_ref_init_temps_1 (decl, array, cleanups);
9690 CONSTRUCTOR_ELT (ctor, 0)->value = array;
9693 else if (TREE_CODE (init) == CONSTRUCTOR)
9695 unsigned i;
9696 constructor_elt *p;
9697 vec<constructor_elt, va_gc> *elts = CONSTRUCTOR_ELTS (init);
9698 FOR_EACH_VEC_SAFE_ELT (elts, i, p)
9699 p->value = extend_ref_init_temps (decl, p->value, cleanups);
9702 return init;
9705 /* Returns true iff an initializer for TYPE could contain temporaries that
9706 need to be extended because they are bound to references or
9707 std::initializer_list. */
9709 bool
9710 type_has_extended_temps (tree type)
9712 type = strip_array_types (type);
9713 if (TREE_CODE (type) == REFERENCE_TYPE)
9714 return true;
9715 if (CLASS_TYPE_P (type))
9717 if (is_std_init_list (type))
9718 return true;
9719 for (tree f = next_initializable_field (TYPE_FIELDS (type));
9720 f; f = next_initializable_field (DECL_CHAIN (f)))
9721 if (type_has_extended_temps (TREE_TYPE (f)))
9722 return true;
9724 return false;
9727 /* Returns true iff TYPE is some variant of std::initializer_list. */
9729 bool
9730 is_std_init_list (tree type)
9732 /* Look through typedefs. */
9733 if (!TYPE_P (type))
9734 return false;
9735 if (cxx_dialect == cxx98)
9736 return false;
9737 type = TYPE_MAIN_VARIANT (type);
9738 return (CLASS_TYPE_P (type)
9739 && CP_TYPE_CONTEXT (type) == std_node
9740 && strcmp (TYPE_NAME_STRING (type), "initializer_list") == 0);
9743 /* Returns true iff DECL is a list constructor: i.e. a constructor which
9744 will accept an argument list of a single std::initializer_list<T>. */
9746 bool
9747 is_list_ctor (tree decl)
9749 tree args = FUNCTION_FIRST_USER_PARMTYPE (decl);
9750 tree arg;
9752 if (!args || args == void_list_node)
9753 return false;
9755 arg = non_reference (TREE_VALUE (args));
9756 if (!is_std_init_list (arg))
9757 return false;
9759 args = TREE_CHAIN (args);
9761 if (args && args != void_list_node && !TREE_PURPOSE (args))
9762 /* There are more non-defaulted parms. */
9763 return false;
9765 return true;
9768 #include "gt-cp-call.h"