2014-07-30 Robert Dewar <dewar@adacore.com>
[official-gcc.git] / gcc / cp / call.c
blob4d37c65209febef405477e1452cc6958bac2cf68
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, 0, "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);
5322 default:
5323 break;
5326 arg2 = prep_operand (arg2);
5327 arg3 = prep_operand (arg3);
5329 if (code == COND_EXPR)
5330 /* Use build_conditional_expr instead. */
5331 gcc_unreachable ();
5332 else if (! OVERLOAD_TYPE_P (TREE_TYPE (arg1))
5333 && (! arg2 || ! OVERLOAD_TYPE_P (TREE_TYPE (arg2))))
5334 goto builtin;
5336 if (code == POSTINCREMENT_EXPR || code == POSTDECREMENT_EXPR)
5337 arg2 = integer_zero_node;
5339 vec_alloc (arglist, 3);
5340 arglist->quick_push (arg1);
5341 if (arg2 != NULL_TREE)
5342 arglist->quick_push (arg2);
5343 if (arg3 != NULL_TREE)
5344 arglist->quick_push (arg3);
5346 /* Get the high-water mark for the CONVERSION_OBSTACK. */
5347 p = conversion_obstack_alloc (0);
5349 /* Add namespace-scope operators to the list of functions to
5350 consider. */
5351 add_candidates (lookup_function_nonclass (fnname, arglist, /*block_p=*/true),
5352 NULL_TREE, arglist, NULL_TREE,
5353 NULL_TREE, false, NULL_TREE, NULL_TREE,
5354 flags, &candidates, complain);
5356 args[0] = arg1;
5357 args[1] = arg2;
5358 args[2] = NULL_TREE;
5360 /* Add class-member operators to the candidate set. */
5361 if (CLASS_TYPE_P (TREE_TYPE (arg1)))
5363 tree fns;
5365 fns = lookup_fnfields (TREE_TYPE (arg1), fnname, 1);
5366 if (fns == error_mark_node)
5368 result = error_mark_node;
5369 goto user_defined_result_ready;
5371 if (fns)
5372 add_candidates (BASELINK_FUNCTIONS (fns),
5373 NULL_TREE, arglist, NULL_TREE,
5374 NULL_TREE, false,
5375 BASELINK_BINFO (fns),
5376 BASELINK_ACCESS_BINFO (fns),
5377 flags, &candidates, complain);
5379 /* Per 13.3.1.2/3, 2nd bullet, if no operand has a class type, then
5380 only non-member functions that have type T1 or reference to
5381 cv-qualified-opt T1 for the first argument, if the first argument
5382 has an enumeration type, or T2 or reference to cv-qualified-opt
5383 T2 for the second argument, if the the second argument has an
5384 enumeration type. Filter out those that don't match. */
5385 else if (! arg2 || ! CLASS_TYPE_P (TREE_TYPE (arg2)))
5387 struct z_candidate **candp, **next;
5389 for (candp = &candidates; *candp; candp = next)
5391 tree parmlist, parmtype;
5392 int i, nargs = (arg2 ? 2 : 1);
5394 cand = *candp;
5395 next = &cand->next;
5397 parmlist = TYPE_ARG_TYPES (TREE_TYPE (cand->fn));
5399 for (i = 0; i < nargs; ++i)
5401 parmtype = TREE_VALUE (parmlist);
5403 if (TREE_CODE (parmtype) == REFERENCE_TYPE)
5404 parmtype = TREE_TYPE (parmtype);
5405 if (TREE_CODE (TREE_TYPE (args[i])) == ENUMERAL_TYPE
5406 && (same_type_ignoring_top_level_qualifiers_p
5407 (TREE_TYPE (args[i]), parmtype)))
5408 break;
5410 parmlist = TREE_CHAIN (parmlist);
5413 /* No argument has an appropriate type, so remove this
5414 candidate function from the list. */
5415 if (i == nargs)
5417 *candp = cand->next;
5418 next = candp;
5423 add_builtin_candidates (&candidates, code, code2, fnname, args,
5424 flags, complain);
5426 switch (code)
5428 case COMPOUND_EXPR:
5429 case ADDR_EXPR:
5430 /* For these, the built-in candidates set is empty
5431 [over.match.oper]/3. We don't want non-strict matches
5432 because exact matches are always possible with built-in
5433 operators. The built-in candidate set for COMPONENT_REF
5434 would be empty too, but since there are no such built-in
5435 operators, we accept non-strict matches for them. */
5436 strict_p = true;
5437 break;
5439 default:
5440 strict_p = false;
5441 break;
5444 candidates = splice_viable (candidates, strict_p, &any_viable_p);
5445 if (!any_viable_p)
5447 switch (code)
5449 case POSTINCREMENT_EXPR:
5450 case POSTDECREMENT_EXPR:
5451 /* Don't try anything fancy if we're not allowed to produce
5452 errors. */
5453 if (!(complain & tf_error))
5454 return error_mark_node;
5456 /* Look for an `operator++ (int)'. Pre-1985 C++ didn't
5457 distinguish between prefix and postfix ++ and
5458 operator++() was used for both, so we allow this with
5459 -fpermissive. */
5460 else
5462 const char *msg = (flag_permissive)
5463 ? G_("no %<%D(int)%> declared for postfix %qs,"
5464 " trying prefix operator instead")
5465 : G_("no %<%D(int)%> declared for postfix %qs");
5466 permerror (loc, msg, fnname, operator_name_info[code].name);
5469 if (!flag_permissive)
5470 return error_mark_node;
5472 if (code == POSTINCREMENT_EXPR)
5473 code = PREINCREMENT_EXPR;
5474 else
5475 code = PREDECREMENT_EXPR;
5476 result = build_new_op_1 (loc, code, flags, arg1, NULL_TREE,
5477 NULL_TREE, overload, complain);
5478 break;
5480 /* The caller will deal with these. */
5481 case ADDR_EXPR:
5482 case COMPOUND_EXPR:
5483 case COMPONENT_REF:
5484 result = NULL_TREE;
5485 result_valid_p = true;
5486 break;
5488 default:
5489 if (complain & tf_error)
5491 /* If one of the arguments of the operator represents
5492 an invalid use of member function pointer, try to report
5493 a meaningful error ... */
5494 if (invalid_nonstatic_memfn_p (arg1, tf_error)
5495 || invalid_nonstatic_memfn_p (arg2, tf_error)
5496 || invalid_nonstatic_memfn_p (arg3, tf_error))
5497 /* We displayed the error message. */;
5498 else
5500 /* ... Otherwise, report the more generic
5501 "no matching operator found" error */
5502 op_error (loc, code, code2, arg1, arg2, arg3, FALSE);
5503 print_z_candidates (loc, candidates);
5506 result = error_mark_node;
5507 break;
5510 else
5512 cand = tourney (candidates, complain);
5513 if (cand == 0)
5515 if (complain & tf_error)
5517 op_error (loc, code, code2, arg1, arg2, arg3, TRUE);
5518 print_z_candidates (loc, candidates);
5520 result = error_mark_node;
5522 else if (TREE_CODE (cand->fn) == FUNCTION_DECL)
5524 if (overload)
5525 *overload = cand->fn;
5527 if (resolve_args (arglist, complain) == NULL)
5528 result = error_mark_node;
5529 else
5530 result = build_over_call (cand, LOOKUP_NORMAL, complain);
5532 else
5534 /* Give any warnings we noticed during overload resolution. */
5535 if (cand->warnings && (complain & tf_warning))
5537 struct candidate_warning *w;
5538 for (w = cand->warnings; w; w = w->next)
5539 joust (cand, w->loser, 1, complain);
5542 /* Check for comparison of different enum types. */
5543 switch (code)
5545 case GT_EXPR:
5546 case LT_EXPR:
5547 case GE_EXPR:
5548 case LE_EXPR:
5549 case EQ_EXPR:
5550 case NE_EXPR:
5551 if (TREE_CODE (TREE_TYPE (arg1)) == ENUMERAL_TYPE
5552 && TREE_CODE (TREE_TYPE (arg2)) == ENUMERAL_TYPE
5553 && (TYPE_MAIN_VARIANT (TREE_TYPE (arg1))
5554 != TYPE_MAIN_VARIANT (TREE_TYPE (arg2)))
5555 && (complain & tf_warning))
5557 warning (OPT_Wenum_compare,
5558 "comparison between %q#T and %q#T",
5559 TREE_TYPE (arg1), TREE_TYPE (arg2));
5561 break;
5562 default:
5563 break;
5566 /* We need to strip any leading REF_BIND so that bitfields
5567 don't cause errors. This should not remove any important
5568 conversions, because builtins don't apply to class
5569 objects directly. */
5570 conv = cand->convs[0];
5571 if (conv->kind == ck_ref_bind)
5572 conv = next_conversion (conv);
5573 arg1 = convert_like (conv, arg1, complain);
5575 if (arg2)
5577 conv = cand->convs[1];
5578 if (conv->kind == ck_ref_bind)
5579 conv = next_conversion (conv);
5580 else
5581 arg2 = decay_conversion (arg2, complain);
5583 /* We need to call warn_logical_operator before
5584 converting arg2 to a boolean_type, but after
5585 decaying an enumerator to its value. */
5586 if (complain & tf_warning)
5587 warn_logical_operator (loc, code, boolean_type_node,
5588 code_orig_arg1, arg1,
5589 code_orig_arg2, arg2);
5591 arg2 = convert_like (conv, arg2, complain);
5593 if (arg3)
5595 conv = cand->convs[2];
5596 if (conv->kind == ck_ref_bind)
5597 conv = next_conversion (conv);
5598 arg3 = convert_like (conv, arg3, complain);
5604 user_defined_result_ready:
5606 /* Free all the conversions we allocated. */
5607 obstack_free (&conversion_obstack, p);
5609 if (result || result_valid_p)
5610 return result;
5612 builtin:
5613 switch (code)
5615 case MODIFY_EXPR:
5616 return cp_build_modify_expr (arg1, code2, arg2, complain);
5618 case INDIRECT_REF:
5619 return cp_build_indirect_ref (arg1, RO_UNARY_STAR, complain);
5621 case TRUTH_ANDIF_EXPR:
5622 case TRUTH_ORIF_EXPR:
5623 case TRUTH_AND_EXPR:
5624 case TRUTH_OR_EXPR:
5625 warn_logical_operator (loc, code, boolean_type_node,
5626 code_orig_arg1, arg1, code_orig_arg2, arg2);
5627 /* Fall through. */
5628 case PLUS_EXPR:
5629 case MINUS_EXPR:
5630 case MULT_EXPR:
5631 case TRUNC_DIV_EXPR:
5632 case GT_EXPR:
5633 case LT_EXPR:
5634 case GE_EXPR:
5635 case LE_EXPR:
5636 case EQ_EXPR:
5637 case NE_EXPR:
5638 case MAX_EXPR:
5639 case MIN_EXPR:
5640 case LSHIFT_EXPR:
5641 case RSHIFT_EXPR:
5642 case TRUNC_MOD_EXPR:
5643 case BIT_AND_EXPR:
5644 case BIT_IOR_EXPR:
5645 case BIT_XOR_EXPR:
5646 return cp_build_binary_op (loc, code, arg1, arg2, complain);
5648 case UNARY_PLUS_EXPR:
5649 case NEGATE_EXPR:
5650 case BIT_NOT_EXPR:
5651 case TRUTH_NOT_EXPR:
5652 case PREINCREMENT_EXPR:
5653 case POSTINCREMENT_EXPR:
5654 case PREDECREMENT_EXPR:
5655 case POSTDECREMENT_EXPR:
5656 case REALPART_EXPR:
5657 case IMAGPART_EXPR:
5658 case ABS_EXPR:
5659 return cp_build_unary_op (code, arg1, candidates != 0, complain);
5661 case ARRAY_REF:
5662 return cp_build_array_ref (input_location, arg1, arg2, complain);
5664 case MEMBER_REF:
5665 return build_m_component_ref (cp_build_indirect_ref (arg1, RO_ARROW_STAR,
5666 complain),
5667 arg2, complain);
5669 /* The caller will deal with these. */
5670 case ADDR_EXPR:
5671 case COMPONENT_REF:
5672 case COMPOUND_EXPR:
5673 return NULL_TREE;
5675 default:
5676 gcc_unreachable ();
5678 return NULL_TREE;
5681 /* Wrapper for above. */
5683 tree
5684 build_new_op (location_t loc, enum tree_code code, int flags,
5685 tree arg1, tree arg2, tree arg3,
5686 tree *overload, tsubst_flags_t complain)
5688 tree ret;
5689 bool subtime = timevar_cond_start (TV_OVERLOAD);
5690 ret = build_new_op_1 (loc, code, flags, arg1, arg2, arg3,
5691 overload, complain);
5692 timevar_cond_stop (TV_OVERLOAD, subtime);
5693 return ret;
5696 /* Returns true iff T, an element of an OVERLOAD chain, is a usual
5697 deallocation function (3.7.4.2 [basic.stc.dynamic.deallocation]). */
5699 static bool
5700 non_placement_deallocation_fn_p (tree t)
5702 /* A template instance is never a usual deallocation function,
5703 regardless of its signature. */
5704 if (TREE_CODE (t) == TEMPLATE_DECL
5705 || primary_template_instantiation_p (t))
5706 return false;
5708 /* If a class T has a member deallocation function named operator delete
5709 with exactly one parameter, then that function is a usual
5710 (non-placement) deallocation function. If class T does not declare
5711 such an operator delete but does declare a member deallocation
5712 function named operator delete with exactly two parameters, the second
5713 of which has type std::size_t (18.2), then this function is a usual
5714 deallocation function. */
5715 t = FUNCTION_ARG_CHAIN (t);
5716 if (t == void_list_node
5717 || (t && same_type_p (TREE_VALUE (t), size_type_node)
5718 && TREE_CHAIN (t) == void_list_node))
5719 return true;
5720 return false;
5723 /* Build a call to operator delete. This has to be handled very specially,
5724 because the restrictions on what signatures match are different from all
5725 other call instances. For a normal delete, only a delete taking (void *)
5726 or (void *, size_t) is accepted. For a placement delete, only an exact
5727 match with the placement new is accepted.
5729 CODE is either DELETE_EXPR or VEC_DELETE_EXPR.
5730 ADDR is the pointer to be deleted.
5731 SIZE is the size of the memory block to be deleted.
5732 GLOBAL_P is true if the delete-expression should not consider
5733 class-specific delete operators.
5734 PLACEMENT is the corresponding placement new call, or NULL_TREE.
5736 If this call to "operator delete" is being generated as part to
5737 deallocate memory allocated via a new-expression (as per [expr.new]
5738 which requires that if the initialization throws an exception then
5739 we call a deallocation function), then ALLOC_FN is the allocation
5740 function. */
5742 tree
5743 build_op_delete_call (enum tree_code code, tree addr, tree size,
5744 bool global_p, tree placement,
5745 tree alloc_fn, tsubst_flags_t complain)
5747 tree fn = NULL_TREE;
5748 tree fns, fnname, type, t;
5750 if (addr == error_mark_node)
5751 return error_mark_node;
5753 type = strip_array_types (TREE_TYPE (TREE_TYPE (addr)));
5755 fnname = ansi_opname (code);
5757 if (CLASS_TYPE_P (type)
5758 && COMPLETE_TYPE_P (complete_type (type))
5759 && !global_p)
5760 /* In [class.free]
5762 If the result of the lookup is ambiguous or inaccessible, or if
5763 the lookup selects a placement deallocation function, the
5764 program is ill-formed.
5766 Therefore, we ask lookup_fnfields to complain about ambiguity. */
5768 fns = lookup_fnfields (TYPE_BINFO (type), fnname, 1);
5769 if (fns == error_mark_node)
5770 return error_mark_node;
5772 else
5773 fns = NULL_TREE;
5775 if (fns == NULL_TREE)
5776 fns = lookup_name_nonclass (fnname);
5778 /* Strip const and volatile from addr. */
5779 addr = cp_convert (ptr_type_node, addr, complain);
5781 if (placement)
5783 /* "A declaration of a placement deallocation function matches the
5784 declaration of a placement allocation function if it has the same
5785 number of parameters and, after parameter transformations (8.3.5),
5786 all parameter types except the first are identical."
5788 So we build up the function type we want and ask instantiate_type
5789 to get it for us. */
5790 t = FUNCTION_ARG_CHAIN (alloc_fn);
5791 t = tree_cons (NULL_TREE, ptr_type_node, t);
5792 t = build_function_type (void_type_node, t);
5794 fn = instantiate_type (t, fns, tf_none);
5795 if (fn == error_mark_node)
5796 return NULL_TREE;
5798 if (BASELINK_P (fn))
5799 fn = BASELINK_FUNCTIONS (fn);
5801 /* "If the lookup finds the two-parameter form of a usual deallocation
5802 function (3.7.4.2) and that function, considered as a placement
5803 deallocation function, would have been selected as a match for the
5804 allocation function, the program is ill-formed." */
5805 if (non_placement_deallocation_fn_p (fn))
5807 /* But if the class has an operator delete (void *), then that is
5808 the usual deallocation function, so we shouldn't complain
5809 about using the operator delete (void *, size_t). */
5810 for (t = BASELINK_P (fns) ? BASELINK_FUNCTIONS (fns) : fns;
5811 t; t = OVL_NEXT (t))
5813 tree elt = OVL_CURRENT (t);
5814 if (non_placement_deallocation_fn_p (elt)
5815 && FUNCTION_ARG_CHAIN (elt) == void_list_node)
5816 goto ok;
5818 if (complain & tf_error)
5820 permerror (0, "non-placement deallocation function %q+D", fn);
5821 permerror (input_location, "selected for placement delete");
5823 else
5824 return error_mark_node;
5825 ok:;
5828 else
5829 /* "Any non-placement deallocation function matches a non-placement
5830 allocation function. If the lookup finds a single matching
5831 deallocation function, that function will be called; otherwise, no
5832 deallocation function will be called." */
5833 for (t = BASELINK_P (fns) ? BASELINK_FUNCTIONS (fns) : fns;
5834 t; t = OVL_NEXT (t))
5836 tree elt = OVL_CURRENT (t);
5837 if (non_placement_deallocation_fn_p (elt))
5839 fn = elt;
5840 /* "If a class T has a member deallocation function named
5841 operator delete with exactly one parameter, then that
5842 function is a usual (non-placement) deallocation
5843 function. If class T does not declare such an operator
5844 delete but does declare a member deallocation function named
5845 operator delete with exactly two parameters, the second of
5846 which has type std::size_t (18.2), then this function is a
5847 usual deallocation function."
5849 So (void*) beats (void*, size_t). */
5850 if (FUNCTION_ARG_CHAIN (fn) == void_list_node)
5851 break;
5855 /* If we have a matching function, call it. */
5856 if (fn)
5858 gcc_assert (TREE_CODE (fn) == FUNCTION_DECL);
5860 /* If the FN is a member function, make sure that it is
5861 accessible. */
5862 if (BASELINK_P (fns))
5863 perform_or_defer_access_check (BASELINK_BINFO (fns), fn, fn,
5864 complain);
5866 /* Core issue 901: It's ok to new a type with deleted delete. */
5867 if (DECL_DELETED_FN (fn) && alloc_fn)
5868 return NULL_TREE;
5870 if (placement)
5872 /* The placement args might not be suitable for overload
5873 resolution at this point, so build the call directly. */
5874 int nargs = call_expr_nargs (placement);
5875 tree *argarray = XALLOCAVEC (tree, nargs);
5876 int i;
5877 argarray[0] = addr;
5878 for (i = 1; i < nargs; i++)
5879 argarray[i] = CALL_EXPR_ARG (placement, i);
5880 mark_used (fn);
5881 return build_cxx_call (fn, nargs, argarray, complain);
5883 else
5885 tree ret;
5886 vec<tree, va_gc> *args = make_tree_vector ();
5887 args->quick_push (addr);
5888 if (FUNCTION_ARG_CHAIN (fn) != void_list_node)
5889 args->quick_push (size);
5890 ret = cp_build_function_call_vec (fn, &args, complain);
5891 release_tree_vector (args);
5892 return ret;
5896 /* [expr.new]
5898 If no unambiguous matching deallocation function can be found,
5899 propagating the exception does not cause the object's memory to
5900 be freed. */
5901 if (alloc_fn)
5903 if ((complain & tf_warning)
5904 && !placement)
5905 warning (0, "no corresponding deallocation function for %qD",
5906 alloc_fn);
5907 return NULL_TREE;
5910 if (complain & tf_error)
5911 error ("no suitable %<operator %s%> for %qT",
5912 operator_name_info[(int)code].name, type);
5913 return error_mark_node;
5916 /* If the current scope isn't allowed to access DECL along
5917 BASETYPE_PATH, give an error. The most derived class in
5918 BASETYPE_PATH is the one used to qualify DECL. DIAG_DECL is
5919 the declaration to use in the error diagnostic. */
5921 bool
5922 enforce_access (tree basetype_path, tree decl, tree diag_decl,
5923 tsubst_flags_t complain)
5925 gcc_assert (TREE_CODE (basetype_path) == TREE_BINFO);
5927 if (!accessible_p (basetype_path, decl, true))
5929 if (complain & tf_error)
5931 if (TREE_PRIVATE (decl))
5932 error ("%q+#D is private", diag_decl);
5933 else if (TREE_PROTECTED (decl))
5934 error ("%q+#D is protected", diag_decl);
5935 else
5936 error ("%q+#D is inaccessible", diag_decl);
5937 error ("within this context");
5939 return false;
5942 return true;
5945 /* Initialize a temporary of type TYPE with EXPR. The FLAGS are a
5946 bitwise or of LOOKUP_* values. If any errors are warnings are
5947 generated, set *DIAGNOSTIC_FN to "error" or "warning",
5948 respectively. If no diagnostics are generated, set *DIAGNOSTIC_FN
5949 to NULL. */
5951 static tree
5952 build_temp (tree expr, tree type, int flags,
5953 diagnostic_t *diagnostic_kind, tsubst_flags_t complain)
5955 int savew, savee;
5956 vec<tree, va_gc> *args;
5958 savew = warningcount + werrorcount, savee = errorcount;
5959 args = make_tree_vector_single (expr);
5960 expr = build_special_member_call (NULL_TREE, complete_ctor_identifier,
5961 &args, type, flags, complain);
5962 release_tree_vector (args);
5963 if (warningcount + werrorcount > savew)
5964 *diagnostic_kind = DK_WARNING;
5965 else if (errorcount > savee)
5966 *diagnostic_kind = DK_ERROR;
5967 else
5968 *diagnostic_kind = DK_UNSPECIFIED;
5969 return expr;
5972 /* Perform warnings about peculiar, but valid, conversions from/to NULL.
5973 EXPR is implicitly converted to type TOTYPE.
5974 FN and ARGNUM are used for diagnostics. */
5976 static void
5977 conversion_null_warnings (tree totype, tree expr, tree fn, int argnum)
5979 /* Issue warnings about peculiar, but valid, uses of NULL. */
5980 if (expr == null_node && TREE_CODE (totype) != BOOLEAN_TYPE
5981 && ARITHMETIC_TYPE_P (totype))
5983 source_location loc =
5984 expansion_point_location_if_in_system_header (input_location);
5986 if (fn)
5987 warning_at (loc, OPT_Wconversion_null,
5988 "passing NULL to non-pointer argument %P of %qD",
5989 argnum, fn);
5990 else
5991 warning_at (loc, OPT_Wconversion_null,
5992 "converting to non-pointer type %qT from NULL", totype);
5995 /* Issue warnings if "false" is converted to a NULL pointer */
5996 else if (TREE_CODE (TREE_TYPE (expr)) == BOOLEAN_TYPE
5997 && TYPE_PTR_P (totype))
5999 if (fn)
6000 warning_at (input_location, OPT_Wconversion_null,
6001 "converting %<false%> to pointer type for argument %P "
6002 "of %qD", argnum, fn);
6003 else
6004 warning_at (input_location, OPT_Wconversion_null,
6005 "converting %<false%> to pointer type %qT", totype);
6009 /* We gave a diagnostic during a conversion. If this was in the second
6010 standard conversion sequence of a user-defined conversion sequence, say
6011 which user-defined conversion. */
6013 static void
6014 maybe_print_user_conv_context (conversion *convs)
6016 if (convs->user_conv_p)
6017 for (conversion *t = convs; t; t = next_conversion (t))
6018 if (t->kind == ck_user)
6020 print_z_candidate (0, " after user-defined conversion:",
6021 t->cand);
6022 break;
6026 /* Perform the conversions in CONVS on the expression EXPR. FN and
6027 ARGNUM are used for diagnostics. ARGNUM is zero based, -1
6028 indicates the `this' argument of a method. INNER is nonzero when
6029 being called to continue a conversion chain. It is negative when a
6030 reference binding will be applied, positive otherwise. If
6031 ISSUE_CONVERSION_WARNINGS is true, warnings about suspicious
6032 conversions will be emitted if appropriate. If C_CAST_P is true,
6033 this conversion is coming from a C-style cast; in that case,
6034 conversions to inaccessible bases are permitted. */
6036 static tree
6037 convert_like_real (conversion *convs, tree expr, tree fn, int argnum,
6038 int inner, bool issue_conversion_warnings,
6039 bool c_cast_p, tsubst_flags_t complain)
6041 tree totype = convs->type;
6042 diagnostic_t diag_kind;
6043 int flags;
6044 location_t loc = EXPR_LOC_OR_LOC (expr, input_location);
6046 if (convs->bad_p && !(complain & tf_error))
6047 return error_mark_node;
6049 if (convs->bad_p
6050 && convs->kind != ck_user
6051 && convs->kind != ck_list
6052 && convs->kind != ck_ambig
6053 && (convs->kind != ck_ref_bind
6054 || (convs->user_conv_p && next_conversion (convs)->bad_p))
6055 && (convs->kind != ck_rvalue
6056 || SCALAR_TYPE_P (totype))
6057 && convs->kind != ck_base)
6059 bool complained = false;
6060 conversion *t = convs;
6062 /* Give a helpful error if this is bad because of excess braces. */
6063 if (BRACE_ENCLOSED_INITIALIZER_P (expr)
6064 && SCALAR_TYPE_P (totype)
6065 && CONSTRUCTOR_NELTS (expr) > 0
6066 && BRACE_ENCLOSED_INITIALIZER_P (CONSTRUCTOR_ELT (expr, 0)->value))
6068 complained = permerror (loc, "too many braces around initializer "
6069 "for %qT", totype);
6070 while (BRACE_ENCLOSED_INITIALIZER_P (expr)
6071 && CONSTRUCTOR_NELTS (expr) == 1)
6072 expr = CONSTRUCTOR_ELT (expr, 0)->value;
6075 /* Give a helpful error if this is bad because a conversion to bool
6076 from std::nullptr_t requires direct-initialization. */
6077 if (NULLPTR_TYPE_P (TREE_TYPE (expr))
6078 && TREE_CODE (totype) == BOOLEAN_TYPE)
6079 complained = permerror (loc, "converting to %qT from %qT requires "
6080 "direct-initialization",
6081 totype, TREE_TYPE (expr));
6083 for (; t ; t = next_conversion (t))
6085 if (t->kind == ck_user && t->cand->reason)
6087 complained = permerror (loc, "invalid user-defined conversion "
6088 "from %qT to %qT", TREE_TYPE (expr),
6089 totype);
6090 if (complained)
6091 print_z_candidate (loc, "candidate is:", t->cand);
6092 expr = convert_like_real (t, expr, fn, argnum, 1,
6093 /*issue_conversion_warnings=*/false,
6094 /*c_cast_p=*/false,
6095 complain);
6096 if (convs->kind == ck_ref_bind)
6097 expr = convert_to_reference (totype, expr, CONV_IMPLICIT,
6098 LOOKUP_NORMAL, NULL_TREE,
6099 complain);
6100 else
6101 expr = cp_convert (totype, expr, complain);
6102 if (complained && fn)
6103 inform (DECL_SOURCE_LOCATION (fn),
6104 " initializing argument %P of %qD", argnum, fn);
6105 return expr;
6107 else if (t->kind == ck_user || !t->bad_p)
6109 expr = convert_like_real (t, expr, fn, argnum, 1,
6110 /*issue_conversion_warnings=*/false,
6111 /*c_cast_p=*/false,
6112 complain);
6113 break;
6115 else if (t->kind == ck_ambig)
6116 return convert_like_real (t, expr, fn, argnum, 1,
6117 /*issue_conversion_warnings=*/false,
6118 /*c_cast_p=*/false,
6119 complain);
6120 else if (t->kind == ck_identity)
6121 break;
6123 if (!complained)
6124 complained = permerror (loc, "invalid conversion from %qT to %qT",
6125 TREE_TYPE (expr), totype);
6126 if (complained && fn)
6127 inform (DECL_SOURCE_LOCATION (fn),
6128 " initializing argument %P of %qD", argnum, fn);
6130 return cp_convert (totype, expr, complain);
6133 if (issue_conversion_warnings && (complain & tf_warning))
6134 conversion_null_warnings (totype, expr, fn, argnum);
6136 switch (convs->kind)
6138 case ck_user:
6140 struct z_candidate *cand = convs->cand;
6141 tree convfn = cand->fn;
6142 unsigned i;
6144 /* When converting from an init list we consider explicit
6145 constructors, but actually trying to call one is an error. */
6146 if (DECL_NONCONVERTING_P (convfn) && DECL_CONSTRUCTOR_P (convfn)
6147 /* Unless this is for direct-list-initialization. */
6148 && !DIRECT_LIST_INIT_P (expr))
6150 if (!(complain & tf_error))
6151 return error_mark_node;
6152 error ("converting to %qT from initializer list would use "
6153 "explicit constructor %qD", totype, convfn);
6156 /* If we're initializing from {}, it's value-initialization. */
6157 if (BRACE_ENCLOSED_INITIALIZER_P (expr)
6158 && CONSTRUCTOR_NELTS (expr) == 0
6159 && TYPE_HAS_DEFAULT_CONSTRUCTOR (totype))
6161 bool direct = CONSTRUCTOR_IS_DIRECT_INIT (expr);
6162 expr = build_value_init (totype, complain);
6163 expr = get_target_expr_sfinae (expr, complain);
6164 if (expr != error_mark_node)
6166 TARGET_EXPR_LIST_INIT_P (expr) = true;
6167 TARGET_EXPR_DIRECT_INIT_P (expr) = direct;
6169 return expr;
6172 expr = mark_rvalue_use (expr);
6174 /* Set user_conv_p on the argument conversions, so rvalue/base
6175 handling knows not to allow any more UDCs. */
6176 for (i = 0; i < cand->num_convs; ++i)
6177 cand->convs[i]->user_conv_p = true;
6179 expr = build_over_call (cand, LOOKUP_NORMAL, complain);
6181 /* If this is a constructor or a function returning an aggr type,
6182 we need to build up a TARGET_EXPR. */
6183 if (DECL_CONSTRUCTOR_P (convfn))
6185 expr = build_cplus_new (totype, expr, complain);
6187 /* Remember that this was list-initialization. */
6188 if (convs->check_narrowing && expr != error_mark_node)
6189 TARGET_EXPR_LIST_INIT_P (expr) = true;
6192 return expr;
6194 case ck_identity:
6195 expr = mark_rvalue_use (expr);
6196 if (BRACE_ENCLOSED_INITIALIZER_P (expr))
6198 int nelts = CONSTRUCTOR_NELTS (expr);
6199 if (nelts == 0)
6200 expr = build_value_init (totype, complain);
6201 else if (nelts == 1)
6202 expr = CONSTRUCTOR_ELT (expr, 0)->value;
6203 else
6204 gcc_unreachable ();
6207 if (type_unknown_p (expr))
6208 expr = instantiate_type (totype, expr, complain);
6209 /* Convert a constant to its underlying value, unless we are
6210 about to bind it to a reference, in which case we need to
6211 leave it as an lvalue. */
6212 if (inner >= 0)
6214 expr = decl_constant_value_safe (expr);
6215 if (expr == null_node && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (totype))
6216 /* If __null has been converted to an integer type, we do not
6217 want to warn about uses of EXPR as an integer, rather than
6218 as a pointer. */
6219 expr = build_int_cst (totype, 0);
6221 return expr;
6222 case ck_ambig:
6223 /* We leave bad_p off ck_ambig because overload resolution considers
6224 it valid, it just fails when we try to perform it. So we need to
6225 check complain here, too. */
6226 if (complain & tf_error)
6228 /* Call build_user_type_conversion again for the error. */
6229 build_user_type_conversion (totype, convs->u.expr, LOOKUP_NORMAL,
6230 complain);
6231 if (fn)
6232 inform (input_location, " initializing argument %P of %q+D",
6233 argnum, fn);
6235 return error_mark_node;
6237 case ck_list:
6239 /* Conversion to std::initializer_list<T>. */
6240 tree elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (totype), 0);
6241 tree new_ctor = build_constructor (init_list_type_node, NULL);
6242 unsigned len = CONSTRUCTOR_NELTS (expr);
6243 tree array, val, field;
6244 vec<constructor_elt, va_gc> *vec = NULL;
6245 unsigned ix;
6247 /* Convert all the elements. */
6248 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expr), ix, val)
6250 tree sub = convert_like_real (convs->u.list[ix], val, fn, argnum,
6251 1, false, false, complain);
6252 if (sub == error_mark_node)
6253 return sub;
6254 if (!BRACE_ENCLOSED_INITIALIZER_P (val))
6255 check_narrowing (TREE_TYPE (sub), val);
6256 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_ctor), NULL_TREE, sub);
6257 if (!TREE_CONSTANT (sub))
6258 TREE_CONSTANT (new_ctor) = false;
6260 /* Build up the array. */
6261 elttype = cp_build_qualified_type
6262 (elttype, cp_type_quals (elttype) | TYPE_QUAL_CONST);
6263 array = build_array_of_n_type (elttype, len);
6264 array = finish_compound_literal (array, new_ctor, complain);
6265 /* Take the address explicitly rather than via decay_conversion
6266 to avoid the error about taking the address of a temporary. */
6267 array = cp_build_addr_expr (array, complain);
6268 array = cp_convert (build_pointer_type (elttype), array, complain);
6269 if (array == error_mark_node)
6270 return error_mark_node;
6272 /* Build up the initializer_list object. */
6273 totype = complete_type (totype);
6274 field = next_initializable_field (TYPE_FIELDS (totype));
6275 CONSTRUCTOR_APPEND_ELT (vec, field, array);
6276 field = next_initializable_field (DECL_CHAIN (field));
6277 CONSTRUCTOR_APPEND_ELT (vec, field, size_int (len));
6278 new_ctor = build_constructor (totype, vec);
6279 return get_target_expr_sfinae (new_ctor, complain);
6282 case ck_aggr:
6283 if (TREE_CODE (totype) == COMPLEX_TYPE)
6285 tree real = CONSTRUCTOR_ELT (expr, 0)->value;
6286 tree imag = CONSTRUCTOR_ELT (expr, 1)->value;
6287 real = perform_implicit_conversion (TREE_TYPE (totype),
6288 real, complain);
6289 imag = perform_implicit_conversion (TREE_TYPE (totype),
6290 imag, complain);
6291 expr = build2 (COMPLEX_EXPR, totype, real, imag);
6292 return fold_if_not_in_template (expr);
6294 expr = reshape_init (totype, expr, complain);
6295 expr = get_target_expr_sfinae (digest_init (totype, expr, complain),
6296 complain);
6297 if (expr != error_mark_node)
6298 TARGET_EXPR_LIST_INIT_P (expr) = true;
6299 return expr;
6301 default:
6302 break;
6305 expr = convert_like_real (next_conversion (convs), expr, fn, argnum,
6306 convs->kind == ck_ref_bind ? -1 : 1,
6307 convs->kind == ck_ref_bind ? issue_conversion_warnings : false,
6308 c_cast_p,
6309 complain);
6310 if (expr == error_mark_node)
6311 return error_mark_node;
6313 switch (convs->kind)
6315 case ck_rvalue:
6316 expr = decay_conversion (expr, complain);
6317 if (expr == error_mark_node)
6318 return error_mark_node;
6320 if (! MAYBE_CLASS_TYPE_P (totype))
6321 return expr;
6322 /* Else fall through. */
6323 case ck_base:
6324 if (convs->kind == ck_base && !convs->need_temporary_p)
6326 /* We are going to bind a reference directly to a base-class
6327 subobject of EXPR. */
6328 /* Build an expression for `*((base*) &expr)'. */
6329 expr = cp_build_addr_expr (expr, complain);
6330 expr = convert_to_base (expr, build_pointer_type (totype),
6331 !c_cast_p, /*nonnull=*/true, complain);
6332 expr = cp_build_indirect_ref (expr, RO_IMPLICIT_CONVERSION, complain);
6333 return expr;
6336 /* Copy-initialization where the cv-unqualified version of the source
6337 type is the same class as, or a derived class of, the class of the
6338 destination [is treated as direct-initialization]. [dcl.init] */
6339 flags = LOOKUP_NORMAL|LOOKUP_ONLYCONVERTING;
6340 if (convs->user_conv_p)
6341 /* This conversion is being done in the context of a user-defined
6342 conversion (i.e. the second step of copy-initialization), so
6343 don't allow any more. */
6344 flags |= LOOKUP_NO_CONVERSION;
6345 if (convs->rvaluedness_matches_p)
6346 flags |= LOOKUP_PREFER_RVALUE;
6347 if (TREE_CODE (expr) == TARGET_EXPR
6348 && TARGET_EXPR_LIST_INIT_P (expr))
6349 /* Copy-list-initialization doesn't actually involve a copy. */
6350 return expr;
6351 expr = build_temp (expr, totype, flags, &diag_kind, complain);
6352 if (diag_kind && complain)
6354 maybe_print_user_conv_context (convs);
6355 if (fn)
6356 inform (DECL_SOURCE_LOCATION (fn),
6357 " initializing argument %P of %qD", argnum, fn);
6360 return build_cplus_new (totype, expr, complain);
6362 case ck_ref_bind:
6364 tree ref_type = totype;
6366 if (convs->bad_p && !next_conversion (convs)->bad_p)
6368 tree extype = TREE_TYPE (expr);
6369 if (TYPE_REF_IS_RVALUE (ref_type)
6370 && real_lvalue_p (expr))
6371 error_at (loc, "cannot bind %qT lvalue to %qT",
6372 extype, totype);
6373 else if (!TYPE_REF_IS_RVALUE (ref_type) && !real_lvalue_p (expr)
6374 && !CP_TYPE_CONST_NON_VOLATILE_P (TREE_TYPE (ref_type)))
6375 error_at (loc, "invalid initialization of non-const reference of "
6376 "type %qT from an rvalue of type %qT", totype, extype);
6377 else if (!reference_compatible_p (TREE_TYPE (totype), extype))
6378 error_at (loc, "binding %qT to reference of type %qT "
6379 "discards qualifiers", extype, totype);
6380 else
6381 gcc_unreachable ();
6382 maybe_print_user_conv_context (convs);
6383 if (fn)
6384 inform (input_location,
6385 " initializing argument %P of %q+D", argnum, fn);
6386 return error_mark_node;
6389 /* If necessary, create a temporary.
6391 VA_ARG_EXPR and CONSTRUCTOR expressions are special cases
6392 that need temporaries, even when their types are reference
6393 compatible with the type of reference being bound, so the
6394 upcoming call to cp_build_addr_expr doesn't fail. */
6395 if (convs->need_temporary_p
6396 || TREE_CODE (expr) == CONSTRUCTOR
6397 || TREE_CODE (expr) == VA_ARG_EXPR)
6399 /* Otherwise, a temporary of type "cv1 T1" is created and
6400 initialized from the initializer expression using the rules
6401 for a non-reference copy-initialization (8.5). */
6403 tree type = TREE_TYPE (ref_type);
6404 cp_lvalue_kind lvalue = real_lvalue_p (expr);
6406 gcc_assert (same_type_ignoring_top_level_qualifiers_p
6407 (type, next_conversion (convs)->type));
6408 if (!CP_TYPE_CONST_NON_VOLATILE_P (type)
6409 && !TYPE_REF_IS_RVALUE (ref_type))
6411 /* If the reference is volatile or non-const, we
6412 cannot create a temporary. */
6413 if (lvalue & clk_bitfield)
6414 error_at (loc, "cannot bind bitfield %qE to %qT",
6415 expr, ref_type);
6416 else if (lvalue & clk_packed)
6417 error_at (loc, "cannot bind packed field %qE to %qT",
6418 expr, ref_type);
6419 else
6420 error_at (loc, "cannot bind rvalue %qE to %qT",
6421 expr, ref_type);
6422 return error_mark_node;
6424 /* If the source is a packed field, and we must use a copy
6425 constructor, then building the target expr will require
6426 binding the field to the reference parameter to the
6427 copy constructor, and we'll end up with an infinite
6428 loop. If we can use a bitwise copy, then we'll be
6429 OK. */
6430 if ((lvalue & clk_packed)
6431 && CLASS_TYPE_P (type)
6432 && type_has_nontrivial_copy_init (type))
6434 error_at (loc, "cannot bind packed field %qE to %qT",
6435 expr, ref_type);
6436 return error_mark_node;
6438 if (lvalue & clk_bitfield)
6440 expr = convert_bitfield_to_declared_type (expr);
6441 expr = fold_convert (type, expr);
6443 expr = build_target_expr_with_type (expr, type, complain);
6446 /* Take the address of the thing to which we will bind the
6447 reference. */
6448 expr = cp_build_addr_expr (expr, complain);
6449 if (expr == error_mark_node)
6450 return error_mark_node;
6452 /* Convert it to a pointer to the type referred to by the
6453 reference. This will adjust the pointer if a derived to
6454 base conversion is being performed. */
6455 expr = cp_convert (build_pointer_type (TREE_TYPE (ref_type)),
6456 expr, complain);
6457 /* Convert the pointer to the desired reference type. */
6458 return build_nop (ref_type, expr);
6461 case ck_lvalue:
6462 return decay_conversion (expr, complain);
6464 case ck_qual:
6465 /* Warn about deprecated conversion if appropriate. */
6466 string_conv_p (totype, expr, 1);
6467 break;
6469 case ck_ptr:
6470 if (convs->base_p)
6471 expr = convert_to_base (expr, totype, !c_cast_p,
6472 /*nonnull=*/false, complain);
6473 return build_nop (totype, expr);
6475 case ck_pmem:
6476 return convert_ptrmem (totype, expr, /*allow_inverse_p=*/false,
6477 c_cast_p, complain);
6479 default:
6480 break;
6483 if (convs->check_narrowing)
6484 check_narrowing (totype, expr);
6486 if (issue_conversion_warnings)
6487 expr = cp_convert_and_check (totype, expr, complain);
6488 else
6489 expr = cp_convert (totype, expr, complain);
6491 return expr;
6494 /* ARG is being passed to a varargs function. Perform any conversions
6495 required. Return the converted value. */
6497 tree
6498 convert_arg_to_ellipsis (tree arg, tsubst_flags_t complain)
6500 tree arg_type;
6501 location_t loc = EXPR_LOC_OR_LOC (arg, input_location);
6503 /* [expr.call]
6505 The lvalue-to-rvalue, array-to-pointer, and function-to-pointer
6506 standard conversions are performed. */
6507 arg = decay_conversion (arg, complain);
6508 arg_type = TREE_TYPE (arg);
6509 /* [expr.call]
6511 If the argument has integral or enumeration type that is subject
6512 to the integral promotions (_conv.prom_), or a floating point
6513 type that is subject to the floating point promotion
6514 (_conv.fpprom_), the value of the argument is converted to the
6515 promoted type before the call. */
6516 if (TREE_CODE (arg_type) == REAL_TYPE
6517 && (TYPE_PRECISION (arg_type)
6518 < TYPE_PRECISION (double_type_node))
6519 && !DECIMAL_FLOAT_MODE_P (TYPE_MODE (arg_type)))
6521 if ((complain & tf_warning)
6522 && warn_double_promotion && !c_inhibit_evaluation_warnings)
6523 warning_at (loc, OPT_Wdouble_promotion,
6524 "implicit conversion from %qT to %qT when passing "
6525 "argument to function",
6526 arg_type, double_type_node);
6527 arg = convert_to_real (double_type_node, arg);
6529 else if (NULLPTR_TYPE_P (arg_type))
6530 arg = null_pointer_node;
6531 else if (INTEGRAL_OR_ENUMERATION_TYPE_P (arg_type))
6533 if (SCOPED_ENUM_P (arg_type))
6535 tree prom = cp_convert (ENUM_UNDERLYING_TYPE (arg_type), arg,
6536 complain);
6537 prom = cp_perform_integral_promotions (prom, complain);
6538 if (abi_version_crosses (6)
6539 && TYPE_MODE (TREE_TYPE (prom)) != TYPE_MODE (arg_type)
6540 && (complain & tf_warning))
6541 warning_at (loc, OPT_Wabi, "scoped enum %qT passed through ... as "
6542 "%qT before -fabi-version=6, %qT after", arg_type,
6543 TREE_TYPE (prom), ENUM_UNDERLYING_TYPE (arg_type));
6544 if (!abi_version_at_least (6))
6545 arg = prom;
6547 else
6548 arg = cp_perform_integral_promotions (arg, complain);
6551 arg = require_complete_type_sfinae (arg, complain);
6552 arg_type = TREE_TYPE (arg);
6554 if (arg != error_mark_node
6555 /* In a template (or ill-formed code), we can have an incomplete type
6556 even after require_complete_type_sfinae, in which case we don't know
6557 whether it has trivial copy or not. */
6558 && COMPLETE_TYPE_P (arg_type))
6560 /* Build up a real lvalue-to-rvalue conversion in case the
6561 copy constructor is trivial but not callable. */
6562 if (!cp_unevaluated_operand && CLASS_TYPE_P (arg_type))
6563 force_rvalue (arg, complain);
6565 /* [expr.call] 5.2.2/7:
6566 Passing a potentially-evaluated argument of class type (Clause 9)
6567 with a non-trivial copy constructor or a non-trivial destructor
6568 with no corresponding parameter is conditionally-supported, with
6569 implementation-defined semantics.
6571 We used to just warn here and do a bitwise copy, but now
6572 cp_expr_size will abort if we try to do that.
6574 If the call appears in the context of a sizeof expression,
6575 it is not potentially-evaluated. */
6576 if (cp_unevaluated_operand == 0
6577 && (type_has_nontrivial_copy_init (arg_type)
6578 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (arg_type)))
6580 if (complain & tf_error)
6581 error_at (loc, "cannot pass objects of non-trivially-copyable "
6582 "type %q#T through %<...%>", arg_type);
6583 return error_mark_node;
6587 return arg;
6590 /* va_arg (EXPR, TYPE) is a builtin. Make sure it is not abused. */
6592 tree
6593 build_x_va_arg (source_location loc, tree expr, tree type)
6595 if (processing_template_decl)
6596 return build_min (VA_ARG_EXPR, type, expr);
6598 type = complete_type_or_else (type, NULL_TREE);
6600 if (expr == error_mark_node || !type)
6601 return error_mark_node;
6603 expr = mark_lvalue_use (expr);
6605 if (type_has_nontrivial_copy_init (type)
6606 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
6607 || TREE_CODE (type) == REFERENCE_TYPE)
6609 /* Remove reference types so we don't ICE later on. */
6610 tree type1 = non_reference (type);
6611 /* conditionally-supported behavior [expr.call] 5.2.2/7. */
6612 error ("cannot receive objects of non-trivially-copyable type %q#T "
6613 "through %<...%>; ", type);
6614 expr = convert (build_pointer_type (type1), null_node);
6615 expr = cp_build_indirect_ref (expr, RO_NULL, tf_warning_or_error);
6616 return expr;
6619 return build_va_arg (loc, expr, type);
6622 /* TYPE has been given to va_arg. Apply the default conversions which
6623 would have happened when passed via ellipsis. Return the promoted
6624 type, or the passed type if there is no change. */
6626 tree
6627 cxx_type_promotes_to (tree type)
6629 tree promote;
6631 /* Perform the array-to-pointer and function-to-pointer
6632 conversions. */
6633 type = type_decays_to (type);
6635 promote = type_promotes_to (type);
6636 if (same_type_p (type, promote))
6637 promote = type;
6639 return promote;
6642 /* ARG is a default argument expression being passed to a parameter of
6643 the indicated TYPE, which is a parameter to FN. PARMNUM is the
6644 zero-based argument number. Do any required conversions. Return
6645 the converted value. */
6647 static GTY(()) vec<tree, va_gc> *default_arg_context;
6648 void
6649 push_defarg_context (tree fn)
6650 { vec_safe_push (default_arg_context, fn); }
6652 void
6653 pop_defarg_context (void)
6654 { default_arg_context->pop (); }
6656 tree
6657 convert_default_arg (tree type, tree arg, tree fn, int parmnum,
6658 tsubst_flags_t complain)
6660 int i;
6661 tree t;
6663 /* See through clones. */
6664 fn = DECL_ORIGIN (fn);
6666 /* Detect recursion. */
6667 FOR_EACH_VEC_SAFE_ELT (default_arg_context, i, t)
6668 if (t == fn)
6670 if (complain & tf_error)
6671 error ("recursive evaluation of default argument for %q#D", fn);
6672 return error_mark_node;
6675 /* If the ARG is an unparsed default argument expression, the
6676 conversion cannot be performed. */
6677 if (TREE_CODE (arg) == DEFAULT_ARG)
6679 if (complain & tf_error)
6680 error ("call to %qD uses the default argument for parameter %P, which "
6681 "is not yet defined", fn, parmnum);
6682 return error_mark_node;
6685 push_defarg_context (fn);
6687 if (fn && DECL_TEMPLATE_INFO (fn))
6688 arg = tsubst_default_argument (fn, type, arg, complain);
6690 /* Due to:
6692 [dcl.fct.default]
6694 The names in the expression are bound, and the semantic
6695 constraints are checked, at the point where the default
6696 expressions appears.
6698 we must not perform access checks here. */
6699 push_deferring_access_checks (dk_no_check);
6700 /* We must make a copy of ARG, in case subsequent processing
6701 alters any part of it. */
6702 arg = break_out_target_exprs (arg);
6703 arg = convert_for_initialization (0, type, arg, LOOKUP_IMPLICIT,
6704 ICR_DEFAULT_ARGUMENT, fn, parmnum,
6705 complain);
6706 arg = convert_for_arg_passing (type, arg, complain);
6707 pop_deferring_access_checks();
6709 pop_defarg_context ();
6711 return arg;
6714 /* Returns the type which will really be used for passing an argument of
6715 type TYPE. */
6717 tree
6718 type_passed_as (tree type)
6720 /* Pass classes with copy ctors by invisible reference. */
6721 if (TREE_ADDRESSABLE (type))
6723 type = build_reference_type (type);
6724 /* There are no other pointers to this temporary. */
6725 type = cp_build_qualified_type (type, TYPE_QUAL_RESTRICT);
6727 else if (targetm.calls.promote_prototypes (type)
6728 && INTEGRAL_TYPE_P (type)
6729 && COMPLETE_TYPE_P (type)
6730 && tree_int_cst_lt (TYPE_SIZE (type), TYPE_SIZE (integer_type_node)))
6731 type = integer_type_node;
6733 return type;
6736 /* Actually perform the appropriate conversion. */
6738 tree
6739 convert_for_arg_passing (tree type, tree val, tsubst_flags_t complain)
6741 tree bitfield_type;
6743 /* If VAL is a bitfield, then -- since it has already been converted
6744 to TYPE -- it cannot have a precision greater than TYPE.
6746 If it has a smaller precision, we must widen it here. For
6747 example, passing "int f:3;" to a function expecting an "int" will
6748 not result in any conversion before this point.
6750 If the precision is the same we must not risk widening. For
6751 example, the COMPONENT_REF for a 32-bit "long long" bitfield will
6752 often have type "int", even though the C++ type for the field is
6753 "long long". If the value is being passed to a function
6754 expecting an "int", then no conversions will be required. But,
6755 if we call convert_bitfield_to_declared_type, the bitfield will
6756 be converted to "long long". */
6757 bitfield_type = is_bitfield_expr_with_lowered_type (val);
6758 if (bitfield_type
6759 && TYPE_PRECISION (TREE_TYPE (val)) < TYPE_PRECISION (type))
6760 val = convert_to_integer (TYPE_MAIN_VARIANT (bitfield_type), val);
6762 if (val == error_mark_node)
6764 /* Pass classes with copy ctors by invisible reference. */
6765 else if (TREE_ADDRESSABLE (type))
6766 val = build1 (ADDR_EXPR, build_reference_type (type), val);
6767 else if (targetm.calls.promote_prototypes (type)
6768 && INTEGRAL_TYPE_P (type)
6769 && COMPLETE_TYPE_P (type)
6770 && tree_int_cst_lt (TYPE_SIZE (type), TYPE_SIZE (integer_type_node)))
6771 val = cp_perform_integral_promotions (val, complain);
6772 if ((complain & tf_warning)
6773 && warn_suggest_attribute_format)
6775 tree rhstype = TREE_TYPE (val);
6776 const enum tree_code coder = TREE_CODE (rhstype);
6777 const enum tree_code codel = TREE_CODE (type);
6778 if ((codel == POINTER_TYPE || codel == REFERENCE_TYPE)
6779 && coder == codel
6780 && check_missing_format_attribute (type, rhstype))
6781 warning (OPT_Wsuggest_attribute_format,
6782 "argument of function call might be a candidate for a format attribute");
6784 return val;
6787 /* Returns true iff FN is a function with magic varargs, i.e. ones for
6788 which no conversions at all should be done. This is true for some
6789 builtins which don't act like normal functions. */
6791 bool
6792 magic_varargs_p (tree fn)
6794 if (flag_cilkplus && is_cilkplus_reduce_builtin (fn) != BUILT_IN_NONE)
6795 return true;
6797 if (DECL_BUILT_IN (fn))
6798 switch (DECL_FUNCTION_CODE (fn))
6800 case BUILT_IN_CLASSIFY_TYPE:
6801 case BUILT_IN_CONSTANT_P:
6802 case BUILT_IN_NEXT_ARG:
6803 case BUILT_IN_VA_START:
6804 return true;
6806 default:;
6807 return lookup_attribute ("type generic",
6808 TYPE_ATTRIBUTES (TREE_TYPE (fn))) != 0;
6811 return false;
6814 /* Returns the decl of the dispatcher function if FN is a function version. */
6816 tree
6817 get_function_version_dispatcher (tree fn)
6819 tree dispatcher_decl = NULL;
6821 gcc_assert (TREE_CODE (fn) == FUNCTION_DECL
6822 && DECL_FUNCTION_VERSIONED (fn));
6824 gcc_assert (targetm.get_function_versions_dispatcher);
6825 dispatcher_decl = targetm.get_function_versions_dispatcher (fn);
6827 if (dispatcher_decl == NULL)
6829 error_at (input_location, "use of multiversioned function "
6830 "without a default");
6831 return NULL;
6834 retrofit_lang_decl (dispatcher_decl);
6835 gcc_assert (dispatcher_decl != NULL);
6836 return dispatcher_decl;
6839 /* fn is a function version dispatcher that is marked used. Mark all the
6840 semantically identical function versions it will dispatch as used. */
6842 void
6843 mark_versions_used (tree fn)
6845 struct cgraph_node *node;
6846 struct cgraph_function_version_info *node_v;
6847 struct cgraph_function_version_info *it_v;
6849 gcc_assert (TREE_CODE (fn) == FUNCTION_DECL);
6851 node = cgraph_node::get (fn);
6852 if (node == NULL)
6853 return;
6855 gcc_assert (node->dispatcher_function);
6857 node_v = node->function_version ();
6858 if (node_v == NULL)
6859 return;
6861 /* All semantically identical versions are chained. Traverse and mark each
6862 one of them as used. */
6863 it_v = node_v->next;
6864 while (it_v != NULL)
6866 mark_used (it_v->this_node->decl);
6867 it_v = it_v->next;
6871 /* Subroutine of the various build_*_call functions. Overload resolution
6872 has chosen a winning candidate CAND; build up a CALL_EXPR accordingly.
6873 ARGS is a TREE_LIST of the unconverted arguments to the call. FLAGS is a
6874 bitmask of various LOOKUP_* flags which apply to the call itself. */
6876 static tree
6877 build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain)
6879 tree fn = cand->fn;
6880 const vec<tree, va_gc> *args = cand->args;
6881 tree first_arg = cand->first_arg;
6882 conversion **convs = cand->convs;
6883 conversion *conv;
6884 tree parm = TYPE_ARG_TYPES (TREE_TYPE (fn));
6885 int parmlen;
6886 tree val;
6887 int i = 0;
6888 int j = 0;
6889 unsigned int arg_index = 0;
6890 int is_method = 0;
6891 int nargs;
6892 tree *argarray;
6893 bool already_used = false;
6895 /* In a template, there is no need to perform all of the work that
6896 is normally done. We are only interested in the type of the call
6897 expression, i.e., the return type of the function. Any semantic
6898 errors will be deferred until the template is instantiated. */
6899 if (processing_template_decl)
6901 tree expr, addr;
6902 tree return_type;
6903 const tree *argarray;
6904 unsigned int nargs;
6906 return_type = TREE_TYPE (TREE_TYPE (fn));
6907 nargs = vec_safe_length (args);
6908 if (first_arg == NULL_TREE)
6909 argarray = args->address ();
6910 else
6912 tree *alcarray;
6913 unsigned int ix;
6914 tree arg;
6916 ++nargs;
6917 alcarray = XALLOCAVEC (tree, nargs);
6918 alcarray[0] = build_this (first_arg);
6919 FOR_EACH_VEC_SAFE_ELT (args, ix, arg)
6920 alcarray[ix + 1] = arg;
6921 argarray = alcarray;
6924 addr = build_addr_func (fn, complain);
6925 if (addr == error_mark_node)
6926 return error_mark_node;
6927 expr = build_call_array_loc (input_location, return_type,
6928 addr, nargs, argarray);
6929 if (TREE_THIS_VOLATILE (fn) && cfun)
6930 current_function_returns_abnormally = 1;
6931 return convert_from_reference (expr);
6934 /* Give any warnings we noticed during overload resolution. */
6935 if (cand->warnings && (complain & tf_warning))
6937 struct candidate_warning *w;
6938 for (w = cand->warnings; w; w = w->next)
6939 joust (cand, w->loser, 1, complain);
6942 /* Make =delete work with SFINAE. */
6943 if (DECL_DELETED_FN (fn) && !(complain & tf_error))
6944 return error_mark_node;
6946 if (DECL_FUNCTION_MEMBER_P (fn))
6948 tree access_fn;
6949 /* If FN is a template function, two cases must be considered.
6950 For example:
6952 struct A {
6953 protected:
6954 template <class T> void f();
6956 template <class T> struct B {
6957 protected:
6958 void g();
6960 struct C : A, B<int> {
6961 using A::f; // #1
6962 using B<int>::g; // #2
6965 In case #1 where `A::f' is a member template, DECL_ACCESS is
6966 recorded in the primary template but not in its specialization.
6967 We check access of FN using its primary template.
6969 In case #2, where `B<int>::g' has a DECL_TEMPLATE_INFO simply
6970 because it is a member of class template B, DECL_ACCESS is
6971 recorded in the specialization `B<int>::g'. We cannot use its
6972 primary template because `B<T>::g' and `B<int>::g' may have
6973 different access. */
6974 if (DECL_TEMPLATE_INFO (fn)
6975 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (fn)))
6976 access_fn = DECL_TI_TEMPLATE (fn);
6977 else
6978 access_fn = fn;
6979 if (!perform_or_defer_access_check (cand->access_path, access_fn,
6980 fn, complain))
6981 return error_mark_node;
6984 /* If we're checking for implicit delete, don't bother with argument
6985 conversions. */
6986 if (flags & LOOKUP_SPECULATIVE)
6988 if (DECL_DELETED_FN (fn))
6990 if (complain & tf_error)
6991 mark_used (fn);
6992 return error_mark_node;
6994 if (cand->viable == 1)
6995 return fn;
6996 else if (!(complain & tf_error))
6997 /* Reject bad conversions now. */
6998 return error_mark_node;
6999 /* else continue to get conversion error. */
7002 /* N3276 magic doesn't apply to nested calls. */
7003 int decltype_flag = (complain & tf_decltype);
7004 complain &= ~tf_decltype;
7006 /* Find maximum size of vector to hold converted arguments. */
7007 parmlen = list_length (parm);
7008 nargs = vec_safe_length (args) + (first_arg != NULL_TREE ? 1 : 0);
7009 if (parmlen > nargs)
7010 nargs = parmlen;
7011 argarray = XALLOCAVEC (tree, nargs);
7013 /* The implicit parameters to a constructor are not considered by overload
7014 resolution, and must be of the proper type. */
7015 if (DECL_CONSTRUCTOR_P (fn))
7017 tree object_arg;
7018 if (first_arg != NULL_TREE)
7020 object_arg = first_arg;
7021 first_arg = NULL_TREE;
7023 else
7025 object_arg = (*args)[arg_index];
7026 ++arg_index;
7028 argarray[j++] = build_this (object_arg);
7029 parm = TREE_CHAIN (parm);
7030 /* We should never try to call the abstract constructor. */
7031 gcc_assert (!DECL_HAS_IN_CHARGE_PARM_P (fn));
7033 if (DECL_HAS_VTT_PARM_P (fn))
7035 argarray[j++] = (*args)[arg_index];
7036 ++arg_index;
7037 parm = TREE_CHAIN (parm);
7040 /* Bypass access control for 'this' parameter. */
7041 else if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
7043 tree parmtype = TREE_VALUE (parm);
7044 tree arg = build_this (first_arg != NULL_TREE
7045 ? first_arg
7046 : (*args)[arg_index]);
7047 tree argtype = TREE_TYPE (arg);
7048 tree converted_arg;
7049 tree base_binfo;
7051 if (convs[i]->bad_p)
7053 if (complain & tf_error)
7055 if (permerror (input_location, "passing %qT as %<this%> "
7056 "argument discards qualifiers",
7057 TREE_TYPE (argtype)))
7058 inform (DECL_SOURCE_LOCATION (fn), " in call to %qD", fn);
7060 else
7061 return error_mark_node;
7064 /* See if the function member or the whole class type is declared
7065 final and the call can be devirtualized. */
7066 if (DECL_FINAL_P (fn)
7067 || CLASSTYPE_FINAL (TYPE_METHOD_BASETYPE (TREE_TYPE (fn))))
7068 flags |= LOOKUP_NONVIRTUAL;
7070 /* [class.mfct.nonstatic]: If a nonstatic member function of a class
7071 X is called for an object that is not of type X, or of a type
7072 derived from X, the behavior is undefined.
7074 So we can assume that anything passed as 'this' is non-null, and
7075 optimize accordingly. */
7076 gcc_assert (TYPE_PTR_P (parmtype));
7077 /* Convert to the base in which the function was declared. */
7078 gcc_assert (cand->conversion_path != NULL_TREE);
7079 converted_arg = build_base_path (PLUS_EXPR,
7080 arg,
7081 cand->conversion_path,
7082 1, complain);
7083 /* Check that the base class is accessible. */
7084 if (!accessible_base_p (TREE_TYPE (argtype),
7085 BINFO_TYPE (cand->conversion_path), true))
7087 if (complain & tf_error)
7088 error ("%qT is not an accessible base of %qT",
7089 BINFO_TYPE (cand->conversion_path),
7090 TREE_TYPE (argtype));
7091 else
7092 return error_mark_node;
7094 /* If fn was found by a using declaration, the conversion path
7095 will be to the derived class, not the base declaring fn. We
7096 must convert from derived to base. */
7097 base_binfo = lookup_base (TREE_TYPE (TREE_TYPE (converted_arg)),
7098 TREE_TYPE (parmtype), ba_unique,
7099 NULL, complain);
7100 converted_arg = build_base_path (PLUS_EXPR, converted_arg,
7101 base_binfo, 1, complain);
7103 argarray[j++] = converted_arg;
7104 parm = TREE_CHAIN (parm);
7105 if (first_arg != NULL_TREE)
7106 first_arg = NULL_TREE;
7107 else
7108 ++arg_index;
7109 ++i;
7110 is_method = 1;
7113 gcc_assert (first_arg == NULL_TREE);
7114 for (; arg_index < vec_safe_length (args) && parm;
7115 parm = TREE_CHAIN (parm), ++arg_index, ++i)
7117 tree type = TREE_VALUE (parm);
7118 tree arg = (*args)[arg_index];
7119 bool conversion_warning = true;
7121 conv = convs[i];
7123 /* If the argument is NULL and used to (implicitly) instantiate a
7124 template function (and bind one of the template arguments to
7125 the type of 'long int'), we don't want to warn about passing NULL
7126 to non-pointer argument.
7127 For example, if we have this template function:
7129 template<typename T> void func(T x) {}
7131 we want to warn (when -Wconversion is enabled) in this case:
7133 void foo() {
7134 func<int>(NULL);
7137 but not in this case:
7139 void foo() {
7140 func(NULL);
7143 if (arg == null_node
7144 && DECL_TEMPLATE_INFO (fn)
7145 && cand->template_decl
7146 && !(flags & LOOKUP_EXPLICIT_TMPL_ARGS))
7147 conversion_warning = false;
7149 /* Warn about initializer_list deduction that isn't currently in the
7150 working draft. */
7151 if (cxx_dialect > cxx98
7152 && flag_deduce_init_list
7153 && cand->template_decl
7154 && is_std_init_list (non_reference (type))
7155 && BRACE_ENCLOSED_INITIALIZER_P (arg))
7157 tree tmpl = TI_TEMPLATE (cand->template_decl);
7158 tree realparm = chain_index (j, DECL_ARGUMENTS (cand->fn));
7159 tree patparm = get_pattern_parm (realparm, tmpl);
7160 tree pattype = TREE_TYPE (patparm);
7161 if (PACK_EXPANSION_P (pattype))
7162 pattype = PACK_EXPANSION_PATTERN (pattype);
7163 pattype = non_reference (pattype);
7165 if (TREE_CODE (pattype) == TEMPLATE_TYPE_PARM
7166 && (cand->explicit_targs == NULL_TREE
7167 || (TREE_VEC_LENGTH (cand->explicit_targs)
7168 <= TEMPLATE_TYPE_IDX (pattype))))
7170 pedwarn (input_location, 0, "deducing %qT as %qT",
7171 non_reference (TREE_TYPE (patparm)),
7172 non_reference (type));
7173 pedwarn (input_location, 0, " in call to %q+D", cand->fn);
7174 pedwarn (input_location, 0,
7175 " (you can disable this with -fno-deduce-init-list)");
7178 val = convert_like_with_context (conv, arg, fn, i - is_method,
7179 conversion_warning
7180 ? complain
7181 : complain & (~tf_warning));
7183 val = convert_for_arg_passing (type, val, complain);
7185 if (val == error_mark_node)
7186 return error_mark_node;
7187 else
7188 argarray[j++] = val;
7191 /* Default arguments */
7192 for (; parm && parm != void_list_node; parm = TREE_CHAIN (parm), i++)
7194 if (TREE_VALUE (parm) == error_mark_node)
7195 return error_mark_node;
7196 argarray[j++] = convert_default_arg (TREE_VALUE (parm),
7197 TREE_PURPOSE (parm),
7198 fn, i - is_method,
7199 complain);
7202 /* Ellipsis */
7203 for (; arg_index < vec_safe_length (args); ++arg_index)
7205 tree a = (*args)[arg_index];
7206 if (magic_varargs_p (fn))
7207 /* Do no conversions for magic varargs. */
7208 a = mark_type_use (a);
7209 else
7210 a = convert_arg_to_ellipsis (a, complain);
7211 argarray[j++] = a;
7214 gcc_assert (j <= nargs);
7215 nargs = j;
7217 check_function_arguments (TREE_TYPE (fn), nargs, argarray);
7219 /* Avoid actually calling copy constructors and copy assignment operators,
7220 if possible. */
7222 if (! flag_elide_constructors)
7223 /* Do things the hard way. */;
7224 else if (cand->num_convs == 1
7225 && (DECL_COPY_CONSTRUCTOR_P (fn)
7226 || DECL_MOVE_CONSTRUCTOR_P (fn)))
7228 tree targ;
7229 tree arg = argarray[num_artificial_parms_for (fn)];
7230 tree fa;
7231 bool trivial = trivial_fn_p (fn);
7233 /* Pull out the real argument, disregarding const-correctness. */
7234 targ = arg;
7235 while (CONVERT_EXPR_P (targ)
7236 || TREE_CODE (targ) == NON_LVALUE_EXPR)
7237 targ = TREE_OPERAND (targ, 0);
7238 if (TREE_CODE (targ) == ADDR_EXPR)
7240 targ = TREE_OPERAND (targ, 0);
7241 if (!same_type_ignoring_top_level_qualifiers_p
7242 (TREE_TYPE (TREE_TYPE (arg)), TREE_TYPE (targ)))
7243 targ = NULL_TREE;
7245 else
7246 targ = NULL_TREE;
7248 if (targ)
7249 arg = targ;
7250 else
7251 arg = cp_build_indirect_ref (arg, RO_NULL, complain);
7253 /* [class.copy]: the copy constructor is implicitly defined even if
7254 the implementation elided its use. */
7255 if (!trivial || DECL_DELETED_FN (fn))
7257 mark_used (fn);
7258 already_used = true;
7261 /* If we're creating a temp and we already have one, don't create a
7262 new one. If we're not creating a temp but we get one, use
7263 INIT_EXPR to collapse the temp into our target. Otherwise, if the
7264 ctor is trivial, do a bitwise copy with a simple TARGET_EXPR for a
7265 temp or an INIT_EXPR otherwise. */
7266 fa = argarray[0];
7267 if (is_dummy_object (fa))
7269 if (TREE_CODE (arg) == TARGET_EXPR)
7270 return arg;
7271 else if (trivial)
7272 return force_target_expr (DECL_CONTEXT (fn), arg, complain);
7274 else if (TREE_CODE (arg) == TARGET_EXPR || trivial)
7276 tree to = stabilize_reference (cp_build_indirect_ref (fa, RO_NULL,
7277 complain));
7279 val = build2 (INIT_EXPR, DECL_CONTEXT (fn), to, arg);
7280 return val;
7283 else if (DECL_OVERLOADED_OPERATOR_P (fn) == NOP_EXPR
7284 && trivial_fn_p (fn)
7285 && !DECL_DELETED_FN (fn))
7287 tree to = stabilize_reference
7288 (cp_build_indirect_ref (argarray[0], RO_NULL, complain));
7289 tree type = TREE_TYPE (to);
7290 tree as_base = CLASSTYPE_AS_BASE (type);
7291 tree arg = argarray[1];
7293 if (is_really_empty_class (type))
7295 /* Avoid copying empty classes. */
7296 val = build2 (COMPOUND_EXPR, void_type_node, to, arg);
7297 TREE_NO_WARNING (val) = 1;
7298 val = build2 (COMPOUND_EXPR, type, val, to);
7299 TREE_NO_WARNING (val) = 1;
7301 else if (tree_int_cst_equal (TYPE_SIZE (type), TYPE_SIZE (as_base)))
7303 arg = cp_build_indirect_ref (arg, RO_NULL, complain);
7304 val = build2 (MODIFY_EXPR, TREE_TYPE (to), to, arg);
7306 else
7308 /* We must only copy the non-tail padding parts. */
7309 tree arg0, arg2, t;
7310 tree array_type, alias_set;
7312 arg2 = TYPE_SIZE_UNIT (as_base);
7313 arg0 = cp_build_addr_expr (to, complain);
7315 array_type = build_array_type (char_type_node,
7316 build_index_type
7317 (size_binop (MINUS_EXPR,
7318 arg2, size_int (1))));
7319 alias_set = build_int_cst (build_pointer_type (type), 0);
7320 t = build2 (MODIFY_EXPR, void_type_node,
7321 build2 (MEM_REF, array_type, arg0, alias_set),
7322 build2 (MEM_REF, array_type, arg, alias_set));
7323 val = build2 (COMPOUND_EXPR, TREE_TYPE (to), t, to);
7324 TREE_NO_WARNING (val) = 1;
7327 return val;
7329 else if (DECL_DESTRUCTOR_P (fn)
7330 && trivial_fn_p (fn)
7331 && !DECL_DELETED_FN (fn))
7332 return fold_convert (void_type_node, argarray[0]);
7333 /* FIXME handle trivial default constructor, too. */
7335 /* For calls to a multi-versioned function, overload resolution
7336 returns the function with the highest target priority, that is,
7337 the version that will checked for dispatching first. If this
7338 version is inlinable, a direct call to this version can be made
7339 otherwise the call should go through the dispatcher. */
7341 if (DECL_FUNCTION_VERSIONED (fn)
7342 && (current_function_decl == NULL
7343 || !targetm.target_option.can_inline_p (current_function_decl, fn)))
7345 fn = get_function_version_dispatcher (fn);
7346 if (fn == NULL)
7347 return NULL;
7348 if (!already_used)
7349 mark_versions_used (fn);
7352 if (!already_used
7353 && !mark_used (fn))
7354 return error_mark_node;
7356 if (DECL_VINDEX (fn) && (flags & LOOKUP_NONVIRTUAL) == 0
7357 /* Don't mess with virtual lookup in fold_non_dependent_expr; virtual
7358 functions can't be constexpr. */
7359 && !in_template_function ())
7361 tree t;
7362 tree binfo = lookup_base (TREE_TYPE (TREE_TYPE (argarray[0])),
7363 DECL_CONTEXT (fn),
7364 ba_any, NULL, complain);
7365 gcc_assert (binfo && binfo != error_mark_node);
7367 /* Warn about deprecated virtual functions now, since we're about
7368 to throw away the decl. */
7369 if (TREE_DEPRECATED (fn))
7370 warn_deprecated_use (fn, NULL_TREE);
7372 argarray[0] = build_base_path (PLUS_EXPR, argarray[0], binfo, 1,
7373 complain);
7374 if (TREE_SIDE_EFFECTS (argarray[0]))
7375 argarray[0] = save_expr (argarray[0]);
7376 t = build_pointer_type (TREE_TYPE (fn));
7377 if (DECL_CONTEXT (fn) && TYPE_JAVA_INTERFACE (DECL_CONTEXT (fn)))
7378 fn = build_java_interface_fn_ref (fn, argarray[0]);
7379 else
7380 fn = build_vfn_ref (argarray[0], DECL_VINDEX (fn));
7381 TREE_TYPE (fn) = t;
7383 else
7385 fn = build_addr_func (fn, complain);
7386 if (fn == error_mark_node)
7387 return error_mark_node;
7390 tree call = build_cxx_call (fn, nargs, argarray, complain|decltype_flag);
7391 if (TREE_CODE (call) == CALL_EXPR
7392 && (cand->flags & LOOKUP_LIST_INIT_CTOR))
7393 CALL_EXPR_LIST_INIT_P (call) = true;
7394 return call;
7397 /* Build and return a call to FN, using NARGS arguments in ARGARRAY.
7398 This function performs no overload resolution, conversion, or other
7399 high-level operations. */
7401 tree
7402 build_cxx_call (tree fn, int nargs, tree *argarray,
7403 tsubst_flags_t complain)
7405 tree fndecl;
7406 int optimize_sav;
7408 /* Remember roughly where this call is. */
7409 location_t loc = EXPR_LOC_OR_LOC (fn, input_location);
7410 fn = build_call_a (fn, nargs, argarray);
7411 SET_EXPR_LOCATION (fn, loc);
7413 fndecl = get_callee_fndecl (fn);
7415 /* Check that arguments to builtin functions match the expectations. */
7416 if (fndecl
7417 && DECL_BUILT_IN (fndecl)
7418 && DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_NORMAL
7419 && !check_builtin_function_arguments (fndecl, nargs, argarray))
7420 return error_mark_node;
7422 /* If it is a built-in array notation function, then the return type of
7423 the function is the element type of the array passed in as array
7424 notation (i.e. the first parameter of the function). */
7425 if (flag_cilkplus && TREE_CODE (fn) == CALL_EXPR)
7427 enum built_in_function bif =
7428 is_cilkplus_reduce_builtin (CALL_EXPR_FN (fn));
7429 if (bif == BUILT_IN_CILKPLUS_SEC_REDUCE_ADD
7430 || bif == BUILT_IN_CILKPLUS_SEC_REDUCE_MUL
7431 || bif == BUILT_IN_CILKPLUS_SEC_REDUCE_MAX
7432 || bif == BUILT_IN_CILKPLUS_SEC_REDUCE_MIN
7433 || bif == BUILT_IN_CILKPLUS_SEC_REDUCE
7434 || bif == BUILT_IN_CILKPLUS_SEC_REDUCE_MUTATING)
7436 if (call_expr_nargs (fn) == 0)
7438 error_at (EXPR_LOCATION (fn), "Invalid builtin arguments");
7439 return error_mark_node;
7441 /* for bif == BUILT_IN_CILKPLUS_SEC_REDUCE_ALL_ZERO or
7442 BUILT_IN_CILKPLUS_SEC_REDUCE_ANY_ZERO or
7443 BUILT_IN_CILKPLUS_SEC_REDUCE_ANY_NONZERO or
7444 BUILT_IN_CILKPLUS_SEC_REDUCE_ALL_NONZERO or
7445 BUILT_IN_CILKPLUS_SEC_REDUCE_MIN_IND or
7446 BUILT_IN_CILKPLUS_SEC_REDUCE_MAX_IND
7447 The pre-defined return-type is the correct one. */
7448 tree array_ntn = CALL_EXPR_ARG (fn, 0);
7449 TREE_TYPE (fn) = TREE_TYPE (array_ntn);
7450 return fn;
7454 /* Some built-in function calls will be evaluated at compile-time in
7455 fold (). Set optimize to 1 when folding __builtin_constant_p inside
7456 a constexpr function so that fold_builtin_1 doesn't fold it to 0. */
7457 optimize_sav = optimize;
7458 if (!optimize && fndecl && DECL_IS_BUILTIN_CONSTANT_P (fndecl)
7459 && current_function_decl
7460 && DECL_DECLARED_CONSTEXPR_P (current_function_decl))
7461 optimize = 1;
7462 fn = fold_if_not_in_template (fn);
7463 optimize = optimize_sav;
7465 if (VOID_TYPE_P (TREE_TYPE (fn)))
7466 return fn;
7468 /* 5.2.2/11: If a function call is a prvalue of object type: if the
7469 function call is either the operand of a decltype-specifier or the
7470 right operand of a comma operator that is the operand of a
7471 decltype-specifier, a temporary object is not introduced for the
7472 prvalue. The type of the prvalue may be incomplete. */
7473 if (!(complain & tf_decltype))
7475 fn = require_complete_type_sfinae (fn, complain);
7476 if (fn == error_mark_node)
7477 return error_mark_node;
7479 if (MAYBE_CLASS_TYPE_P (TREE_TYPE (fn)))
7480 fn = build_cplus_new (TREE_TYPE (fn), fn, complain);
7482 return convert_from_reference (fn);
7485 static GTY(()) tree java_iface_lookup_fn;
7487 /* Make an expression which yields the address of the Java interface
7488 method FN. This is achieved by generating a call to libjava's
7489 _Jv_LookupInterfaceMethodIdx(). */
7491 static tree
7492 build_java_interface_fn_ref (tree fn, tree instance)
7494 tree lookup_fn, method, idx;
7495 tree klass_ref, iface, iface_ref;
7496 int i;
7498 if (!java_iface_lookup_fn)
7500 tree ftype = build_function_type_list (ptr_type_node,
7501 ptr_type_node, ptr_type_node,
7502 java_int_type_node, NULL_TREE);
7503 java_iface_lookup_fn
7504 = add_builtin_function ("_Jv_LookupInterfaceMethodIdx", ftype,
7505 0, NOT_BUILT_IN, NULL, NULL_TREE);
7508 /* Look up the pointer to the runtime java.lang.Class object for `instance'.
7509 This is the first entry in the vtable. */
7510 klass_ref = build_vtbl_ref (cp_build_indirect_ref (instance, RO_NULL,
7511 tf_warning_or_error),
7512 integer_zero_node);
7514 /* Get the java.lang.Class pointer for the interface being called. */
7515 iface = DECL_CONTEXT (fn);
7516 iface_ref = lookup_field (iface, get_identifier ("class$"), 0, false);
7517 if (!iface_ref || !VAR_P (iface_ref)
7518 || DECL_CONTEXT (iface_ref) != iface)
7520 error ("could not find class$ field in java interface type %qT",
7521 iface);
7522 return error_mark_node;
7524 iface_ref = build_address (iface_ref);
7525 iface_ref = convert (build_pointer_type (iface), iface_ref);
7527 /* Determine the itable index of FN. */
7528 i = 1;
7529 for (method = TYPE_METHODS (iface); method; method = DECL_CHAIN (method))
7531 if (!DECL_VIRTUAL_P (method))
7532 continue;
7533 if (fn == method)
7534 break;
7535 i++;
7537 idx = build_int_cst (NULL_TREE, i);
7539 lookup_fn = build1 (ADDR_EXPR,
7540 build_pointer_type (TREE_TYPE (java_iface_lookup_fn)),
7541 java_iface_lookup_fn);
7542 return build_call_nary (ptr_type_node, lookup_fn,
7543 3, klass_ref, iface_ref, idx);
7546 /* Returns the value to use for the in-charge parameter when making a
7547 call to a function with the indicated NAME.
7549 FIXME:Can't we find a neater way to do this mapping? */
7551 tree
7552 in_charge_arg_for_name (tree name)
7554 if (name == base_ctor_identifier
7555 || name == base_dtor_identifier)
7556 return integer_zero_node;
7557 else if (name == complete_ctor_identifier)
7558 return integer_one_node;
7559 else if (name == complete_dtor_identifier)
7560 return integer_two_node;
7561 else if (name == deleting_dtor_identifier)
7562 return integer_three_node;
7564 /* This function should only be called with one of the names listed
7565 above. */
7566 gcc_unreachable ();
7567 return NULL_TREE;
7570 /* Build a call to a constructor, destructor, or an assignment
7571 operator for INSTANCE, an expression with class type. NAME
7572 indicates the special member function to call; *ARGS are the
7573 arguments. ARGS may be NULL. This may change ARGS. BINFO
7574 indicates the base of INSTANCE that is to be passed as the `this'
7575 parameter to the member function called.
7577 FLAGS are the LOOKUP_* flags to use when processing the call.
7579 If NAME indicates a complete object constructor, INSTANCE may be
7580 NULL_TREE. In this case, the caller will call build_cplus_new to
7581 store the newly constructed object into a VAR_DECL. */
7583 tree
7584 build_special_member_call (tree instance, tree name, vec<tree, va_gc> **args,
7585 tree binfo, int flags, tsubst_flags_t complain)
7587 tree fns;
7588 /* The type of the subobject to be constructed or destroyed. */
7589 tree class_type;
7590 vec<tree, va_gc> *allocated = NULL;
7591 tree ret;
7593 gcc_assert (name == complete_ctor_identifier
7594 || name == base_ctor_identifier
7595 || name == complete_dtor_identifier
7596 || name == base_dtor_identifier
7597 || name == deleting_dtor_identifier
7598 || name == ansi_assopname (NOP_EXPR));
7599 if (TYPE_P (binfo))
7601 /* Resolve the name. */
7602 if (!complete_type_or_maybe_complain (binfo, NULL_TREE, complain))
7603 return error_mark_node;
7605 binfo = TYPE_BINFO (binfo);
7608 gcc_assert (binfo != NULL_TREE);
7610 class_type = BINFO_TYPE (binfo);
7612 /* Handle the special case where INSTANCE is NULL_TREE. */
7613 if (name == complete_ctor_identifier && !instance)
7614 instance = build_dummy_object (class_type);
7615 else
7617 if (name == complete_dtor_identifier
7618 || name == base_dtor_identifier
7619 || name == deleting_dtor_identifier)
7620 gcc_assert (args == NULL || vec_safe_is_empty (*args));
7622 /* Convert to the base class, if necessary. */
7623 if (!same_type_ignoring_top_level_qualifiers_p
7624 (TREE_TYPE (instance), BINFO_TYPE (binfo)))
7626 if (name != ansi_assopname (NOP_EXPR))
7627 /* For constructors and destructors, either the base is
7628 non-virtual, or it is virtual but we are doing the
7629 conversion from a constructor or destructor for the
7630 complete object. In either case, we can convert
7631 statically. */
7632 instance = convert_to_base_statically (instance, binfo);
7633 else
7634 /* However, for assignment operators, we must convert
7635 dynamically if the base is virtual. */
7636 instance = build_base_path (PLUS_EXPR, instance,
7637 binfo, /*nonnull=*/1, complain);
7641 gcc_assert (instance != NULL_TREE);
7643 fns = lookup_fnfields (binfo, name, 1);
7645 /* When making a call to a constructor or destructor for a subobject
7646 that uses virtual base classes, pass down a pointer to a VTT for
7647 the subobject. */
7648 if ((name == base_ctor_identifier
7649 || name == base_dtor_identifier)
7650 && CLASSTYPE_VBASECLASSES (class_type))
7652 tree vtt;
7653 tree sub_vtt;
7655 /* If the current function is a complete object constructor
7656 or destructor, then we fetch the VTT directly.
7657 Otherwise, we look it up using the VTT we were given. */
7658 vtt = DECL_CHAIN (CLASSTYPE_VTABLES (current_class_type));
7659 vtt = decay_conversion (vtt, complain);
7660 if (vtt == error_mark_node)
7661 return error_mark_node;
7662 vtt = build3 (COND_EXPR, TREE_TYPE (vtt),
7663 build2 (EQ_EXPR, boolean_type_node,
7664 current_in_charge_parm, integer_zero_node),
7665 current_vtt_parm,
7666 vtt);
7667 if (BINFO_SUBVTT_INDEX (binfo))
7668 sub_vtt = fold_build_pointer_plus (vtt, BINFO_SUBVTT_INDEX (binfo));
7669 else
7670 sub_vtt = vtt;
7672 if (args == NULL)
7674 allocated = make_tree_vector ();
7675 args = &allocated;
7678 vec_safe_insert (*args, 0, sub_vtt);
7681 ret = build_new_method_call (instance, fns, args,
7682 TYPE_BINFO (BINFO_TYPE (binfo)),
7683 flags, /*fn=*/NULL,
7684 complain);
7686 if (allocated != NULL)
7687 release_tree_vector (allocated);
7689 if ((complain & tf_error)
7690 && (flags & LOOKUP_DELEGATING_CONS)
7691 && name == complete_ctor_identifier
7692 && TREE_CODE (ret) == CALL_EXPR
7693 && (DECL_ABSTRACT_ORIGIN (TREE_OPERAND (CALL_EXPR_FN (ret), 0))
7694 == current_function_decl))
7695 error ("constructor delegates to itself");
7697 return ret;
7700 /* Return the NAME, as a C string. The NAME indicates a function that
7701 is a member of TYPE. *FREE_P is set to true if the caller must
7702 free the memory returned.
7704 Rather than go through all of this, we should simply set the names
7705 of constructors and destructors appropriately, and dispense with
7706 ctor_identifier, dtor_identifier, etc. */
7708 static char *
7709 name_as_c_string (tree name, tree type, bool *free_p)
7711 char *pretty_name;
7713 /* Assume that we will not allocate memory. */
7714 *free_p = false;
7715 /* Constructors and destructors are special. */
7716 if (IDENTIFIER_CTOR_OR_DTOR_P (name))
7718 pretty_name
7719 = CONST_CAST (char *, identifier_to_locale (IDENTIFIER_POINTER (constructor_name (type))));
7720 /* For a destructor, add the '~'. */
7721 if (name == complete_dtor_identifier
7722 || name == base_dtor_identifier
7723 || name == deleting_dtor_identifier)
7725 pretty_name = concat ("~", pretty_name, NULL);
7726 /* Remember that we need to free the memory allocated. */
7727 *free_p = true;
7730 else if (IDENTIFIER_TYPENAME_P (name))
7732 pretty_name = concat ("operator ",
7733 type_as_string_translate (TREE_TYPE (name),
7734 TFF_PLAIN_IDENTIFIER),
7735 NULL);
7736 /* Remember that we need to free the memory allocated. */
7737 *free_p = true;
7739 else
7740 pretty_name = CONST_CAST (char *, identifier_to_locale (IDENTIFIER_POINTER (name)));
7742 return pretty_name;
7745 /* Build a call to "INSTANCE.FN (ARGS)". If FN_P is non-NULL, it will
7746 be set, upon return, to the function called. ARGS may be NULL.
7747 This may change ARGS. */
7749 static tree
7750 build_new_method_call_1 (tree instance, tree fns, vec<tree, va_gc> **args,
7751 tree conversion_path, int flags,
7752 tree *fn_p, tsubst_flags_t complain)
7754 struct z_candidate *candidates = 0, *cand;
7755 tree explicit_targs = NULL_TREE;
7756 tree basetype = NULL_TREE;
7757 tree access_binfo, binfo;
7758 tree optype;
7759 tree first_mem_arg = NULL_TREE;
7760 tree name;
7761 bool skip_first_for_error;
7762 vec<tree, va_gc> *user_args;
7763 tree call;
7764 tree fn;
7765 int template_only = 0;
7766 bool any_viable_p;
7767 tree orig_instance;
7768 tree orig_fns;
7769 vec<tree, va_gc> *orig_args = NULL;
7770 void *p;
7772 gcc_assert (instance != NULL_TREE);
7774 /* We don't know what function we're going to call, yet. */
7775 if (fn_p)
7776 *fn_p = NULL_TREE;
7778 if (error_operand_p (instance)
7779 || !fns || error_operand_p (fns))
7780 return error_mark_node;
7782 if (!BASELINK_P (fns))
7784 if (complain & tf_error)
7785 error ("call to non-function %qD", fns);
7786 return error_mark_node;
7789 orig_instance = instance;
7790 orig_fns = fns;
7792 /* Dismantle the baselink to collect all the information we need. */
7793 if (!conversion_path)
7794 conversion_path = BASELINK_BINFO (fns);
7795 access_binfo = BASELINK_ACCESS_BINFO (fns);
7796 binfo = BASELINK_BINFO (fns);
7797 optype = BASELINK_OPTYPE (fns);
7798 fns = BASELINK_FUNCTIONS (fns);
7799 if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
7801 explicit_targs = TREE_OPERAND (fns, 1);
7802 fns = TREE_OPERAND (fns, 0);
7803 template_only = 1;
7805 gcc_assert (TREE_CODE (fns) == FUNCTION_DECL
7806 || TREE_CODE (fns) == TEMPLATE_DECL
7807 || TREE_CODE (fns) == OVERLOAD);
7808 fn = get_first_fn (fns);
7809 name = DECL_NAME (fn);
7811 basetype = TYPE_MAIN_VARIANT (TREE_TYPE (instance));
7812 gcc_assert (CLASS_TYPE_P (basetype));
7814 if (processing_template_decl)
7816 orig_args = args == NULL ? NULL : make_tree_vector_copy (*args);
7817 instance = build_non_dependent_expr (instance);
7818 if (args != NULL)
7819 make_args_non_dependent (*args);
7822 user_args = args == NULL ? NULL : *args;
7823 /* Under DR 147 A::A() is an invalid constructor call,
7824 not a functional cast. */
7825 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (fn))
7827 if (! (complain & tf_error))
7828 return error_mark_node;
7830 if (permerror (input_location,
7831 "cannot call constructor %<%T::%D%> directly",
7832 basetype, name))
7833 inform (input_location, "for a function-style cast, remove the "
7834 "redundant %<::%D%>", name);
7835 call = build_functional_cast (basetype, build_tree_list_vec (user_args),
7836 complain);
7837 return call;
7840 /* Figure out whether to skip the first argument for the error
7841 message we will display to users if an error occurs. We don't
7842 want to display any compiler-generated arguments. The "this"
7843 pointer hasn't been added yet. However, we must remove the VTT
7844 pointer if this is a call to a base-class constructor or
7845 destructor. */
7846 skip_first_for_error = false;
7847 if (IDENTIFIER_CTOR_OR_DTOR_P (name))
7849 /* Callers should explicitly indicate whether they want to construct
7850 the complete object or just the part without virtual bases. */
7851 gcc_assert (name != ctor_identifier);
7852 /* Similarly for destructors. */
7853 gcc_assert (name != dtor_identifier);
7854 /* Remove the VTT pointer, if present. */
7855 if ((name == base_ctor_identifier || name == base_dtor_identifier)
7856 && CLASSTYPE_VBASECLASSES (basetype))
7857 skip_first_for_error = true;
7860 /* Process the argument list. */
7861 if (args != NULL && *args != NULL)
7863 *args = resolve_args (*args, complain);
7864 if (*args == NULL)
7865 return error_mark_node;
7868 /* Consider the object argument to be used even if we end up selecting a
7869 static member function. */
7870 instance = mark_type_use (instance);
7872 /* It's OK to call destructors and constructors on cv-qualified objects.
7873 Therefore, convert the INSTANCE to the unqualified type, if
7874 necessary. */
7875 if (DECL_DESTRUCTOR_P (fn)
7876 || DECL_CONSTRUCTOR_P (fn))
7878 if (!same_type_p (basetype, TREE_TYPE (instance)))
7880 instance = build_this (instance);
7881 instance = build_nop (build_pointer_type (basetype), instance);
7882 instance = build_fold_indirect_ref (instance);
7885 if (DECL_DESTRUCTOR_P (fn))
7886 name = complete_dtor_identifier;
7888 /* For the overload resolution we need to find the actual `this`
7889 that would be captured if the call turns out to be to a
7890 non-static member function. Do not actually capture it at this
7891 point. */
7892 first_mem_arg = maybe_resolve_dummy (instance, false);
7894 /* Get the high-water mark for the CONVERSION_OBSTACK. */
7895 p = conversion_obstack_alloc (0);
7897 /* If CONSTRUCTOR_IS_DIRECT_INIT is set, this was a T{ } form
7898 initializer, not T({ }). */
7899 if (DECL_CONSTRUCTOR_P (fn) && args != NULL && !vec_safe_is_empty (*args)
7900 && DIRECT_LIST_INIT_P ((**args)[0]))
7902 tree init_list = (**args)[0];
7903 tree init = NULL_TREE;
7905 gcc_assert ((*args)->length () == 1
7906 && !(flags & LOOKUP_ONLYCONVERTING));
7908 /* If the initializer list has no elements and T is a class type with
7909 a default constructor, the object is value-initialized. Handle
7910 this here so we don't need to handle it wherever we use
7911 build_special_member_call. */
7912 if (CONSTRUCTOR_NELTS (init_list) == 0
7913 && TYPE_HAS_DEFAULT_CONSTRUCTOR (basetype)
7914 /* For a user-provided default constructor, use the normal
7915 mechanisms so that protected access works. */
7916 && !type_has_user_provided_default_constructor (basetype)
7917 && !processing_template_decl)
7918 init = build_value_init (basetype, complain);
7920 /* If BASETYPE is an aggregate, we need to do aggregate
7921 initialization. */
7922 else if (CP_AGGREGATE_TYPE_P (basetype))
7923 init = digest_init (basetype, init_list, complain);
7925 if (init)
7927 if (is_dummy_object (instance))
7928 return get_target_expr_sfinae (init, complain);
7929 init = build2 (INIT_EXPR, TREE_TYPE (instance), instance, init);
7930 TREE_SIDE_EFFECTS (init) = true;
7931 return init;
7934 /* Otherwise go ahead with overload resolution. */
7935 add_list_candidates (fns, first_mem_arg, init_list,
7936 basetype, explicit_targs, template_only,
7937 conversion_path, access_binfo, flags,
7938 &candidates, complain);
7940 else
7942 add_candidates (fns, first_mem_arg, user_args, optype,
7943 explicit_targs, template_only, conversion_path,
7944 access_binfo, flags, &candidates, complain);
7946 any_viable_p = false;
7947 candidates = splice_viable (candidates, false, &any_viable_p);
7949 if (!any_viable_p)
7951 if (complain & tf_error)
7953 if (!COMPLETE_OR_OPEN_TYPE_P (basetype))
7954 cxx_incomplete_type_error (instance, basetype);
7955 else if (optype)
7956 error ("no matching function for call to %<%T::operator %T(%A)%#V%>",
7957 basetype, optype, build_tree_list_vec (user_args),
7958 TREE_TYPE (instance));
7959 else
7961 char *pretty_name;
7962 bool free_p;
7963 tree arglist;
7965 pretty_name = name_as_c_string (name, basetype, &free_p);
7966 arglist = build_tree_list_vec (user_args);
7967 if (skip_first_for_error)
7968 arglist = TREE_CHAIN (arglist);
7969 error ("no matching function for call to %<%T::%s(%A)%#V%>",
7970 basetype, pretty_name, arglist,
7971 TREE_TYPE (instance));
7972 if (free_p)
7973 free (pretty_name);
7975 print_z_candidates (location_of (name), candidates);
7977 call = error_mark_node;
7979 else
7981 cand = tourney (candidates, complain);
7982 if (cand == 0)
7984 char *pretty_name;
7985 bool free_p;
7986 tree arglist;
7988 if (complain & tf_error)
7990 pretty_name = name_as_c_string (name, basetype, &free_p);
7991 arglist = build_tree_list_vec (user_args);
7992 if (skip_first_for_error)
7993 arglist = TREE_CHAIN (arglist);
7994 if (!any_strictly_viable (candidates))
7995 error ("no matching function for call to %<%s(%A)%>",
7996 pretty_name, arglist);
7997 else
7998 error ("call of overloaded %<%s(%A)%> is ambiguous",
7999 pretty_name, arglist);
8000 print_z_candidates (location_of (name), candidates);
8001 if (free_p)
8002 free (pretty_name);
8004 call = error_mark_node;
8006 else
8008 fn = cand->fn;
8009 call = NULL_TREE;
8011 if (!(flags & LOOKUP_NONVIRTUAL)
8012 && DECL_PURE_VIRTUAL_P (fn)
8013 && instance == current_class_ref
8014 && (complain & tf_warning))
8016 /* This is not an error, it is runtime undefined
8017 behavior. */
8018 if (!current_function_decl)
8019 warning (0, "pure virtual %q#D called from "
8020 "non-static data member initializer", fn);
8021 else if (DECL_CONSTRUCTOR_P (current_function_decl)
8022 || DECL_DESTRUCTOR_P (current_function_decl))
8023 warning (0, (DECL_CONSTRUCTOR_P (current_function_decl)
8024 ? "pure virtual %q#D called from constructor"
8025 : "pure virtual %q#D called from destructor"),
8026 fn);
8029 if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE
8030 && !DECL_CONSTRUCTOR_P (fn)
8031 && is_dummy_object (instance))
8033 instance = maybe_resolve_dummy (instance, true);
8034 if (instance == error_mark_node)
8035 call = error_mark_node;
8036 else if (!is_dummy_object (instance))
8038 /* We captured 'this' in the current lambda now that
8039 we know we really need it. */
8040 cand->first_arg = instance;
8042 else
8044 if (complain & tf_error)
8045 error ("cannot call member function %qD without object",
8046 fn);
8047 call = error_mark_node;
8051 if (call != error_mark_node)
8053 /* Optimize away vtable lookup if we know that this
8054 function can't be overridden. We need to check if
8055 the context and the type where we found fn are the same,
8056 actually FN might be defined in a different class
8057 type because of a using-declaration. In this case, we
8058 do not want to perform a non-virtual call. */
8059 if (DECL_VINDEX (fn) && ! (flags & LOOKUP_NONVIRTUAL)
8060 && same_type_ignoring_top_level_qualifiers_p
8061 (DECL_CONTEXT (fn), BINFO_TYPE (binfo))
8062 && resolves_to_fixed_type_p (instance, 0))
8063 flags |= LOOKUP_NONVIRTUAL;
8064 if (explicit_targs)
8065 flags |= LOOKUP_EXPLICIT_TMPL_ARGS;
8066 /* Now we know what function is being called. */
8067 if (fn_p)
8068 *fn_p = fn;
8069 /* Build the actual CALL_EXPR. */
8070 call = build_over_call (cand, flags, complain);
8071 /* In an expression of the form `a->f()' where `f' turns
8072 out to be a static member function, `a' is
8073 none-the-less evaluated. */
8074 if (TREE_CODE (TREE_TYPE (fn)) != METHOD_TYPE
8075 && !is_dummy_object (instance)
8076 && TREE_SIDE_EFFECTS (instance))
8077 call = build2 (COMPOUND_EXPR, TREE_TYPE (call),
8078 instance, call);
8079 else if (call != error_mark_node
8080 && DECL_DESTRUCTOR_P (cand->fn)
8081 && !VOID_TYPE_P (TREE_TYPE (call)))
8082 /* An explicit call of the form "x->~X()" has type
8083 "void". However, on platforms where destructors
8084 return "this" (i.e., those where
8085 targetm.cxx.cdtor_returns_this is true), such calls
8086 will appear to have a return value of pointer type
8087 to the low-level call machinery. We do not want to
8088 change the low-level machinery, since we want to be
8089 able to optimize "delete f()" on such platforms as
8090 "operator delete(~X(f()))" (rather than generating
8091 "t = f(), ~X(t), operator delete (t)"). */
8092 call = build_nop (void_type_node, call);
8097 if (processing_template_decl && call != error_mark_node)
8099 bool cast_to_void = false;
8101 if (TREE_CODE (call) == COMPOUND_EXPR)
8102 call = TREE_OPERAND (call, 1);
8103 else if (TREE_CODE (call) == NOP_EXPR)
8105 cast_to_void = true;
8106 call = TREE_OPERAND (call, 0);
8108 if (INDIRECT_REF_P (call))
8109 call = TREE_OPERAND (call, 0);
8110 call = (build_min_non_dep_call_vec
8111 (call,
8112 build_min (COMPONENT_REF, TREE_TYPE (CALL_EXPR_FN (call)),
8113 orig_instance, orig_fns, NULL_TREE),
8114 orig_args));
8115 SET_EXPR_LOCATION (call, input_location);
8116 call = convert_from_reference (call);
8117 if (cast_to_void)
8118 call = build_nop (void_type_node, call);
8121 /* Free all the conversions we allocated. */
8122 obstack_free (&conversion_obstack, p);
8124 if (orig_args != NULL)
8125 release_tree_vector (orig_args);
8127 return call;
8130 /* Wrapper for above. */
8132 tree
8133 build_new_method_call (tree instance, tree fns, vec<tree, va_gc> **args,
8134 tree conversion_path, int flags,
8135 tree *fn_p, tsubst_flags_t complain)
8137 tree ret;
8138 bool subtime = timevar_cond_start (TV_OVERLOAD);
8139 ret = build_new_method_call_1 (instance, fns, args, conversion_path, flags,
8140 fn_p, complain);
8141 timevar_cond_stop (TV_OVERLOAD, subtime);
8142 return ret;
8145 /* Returns true iff standard conversion sequence ICS1 is a proper
8146 subsequence of ICS2. */
8148 static bool
8149 is_subseq (conversion *ics1, conversion *ics2)
8151 /* We can assume that a conversion of the same code
8152 between the same types indicates a subsequence since we only get
8153 here if the types we are converting from are the same. */
8155 while (ics1->kind == ck_rvalue
8156 || ics1->kind == ck_lvalue)
8157 ics1 = next_conversion (ics1);
8159 while (1)
8161 while (ics2->kind == ck_rvalue
8162 || ics2->kind == ck_lvalue)
8163 ics2 = next_conversion (ics2);
8165 if (ics2->kind == ck_user
8166 || ics2->kind == ck_ambig
8167 || ics2->kind == ck_aggr
8168 || ics2->kind == ck_list
8169 || ics2->kind == ck_identity)
8170 /* At this point, ICS1 cannot be a proper subsequence of
8171 ICS2. We can get a USER_CONV when we are comparing the
8172 second standard conversion sequence of two user conversion
8173 sequences. */
8174 return false;
8176 ics2 = next_conversion (ics2);
8178 if (ics2->kind == ics1->kind
8179 && same_type_p (ics2->type, ics1->type)
8180 && same_type_p (next_conversion (ics2)->type,
8181 next_conversion (ics1)->type))
8182 return true;
8186 /* Returns nonzero iff DERIVED is derived from BASE. The inputs may
8187 be any _TYPE nodes. */
8189 bool
8190 is_properly_derived_from (tree derived, tree base)
8192 if (!CLASS_TYPE_P (derived) || !CLASS_TYPE_P (base))
8193 return false;
8195 /* We only allow proper derivation here. The DERIVED_FROM_P macro
8196 considers every class derived from itself. */
8197 return (!same_type_ignoring_top_level_qualifiers_p (derived, base)
8198 && DERIVED_FROM_P (base, derived));
8201 /* We build the ICS for an implicit object parameter as a pointer
8202 conversion sequence. However, such a sequence should be compared
8203 as if it were a reference conversion sequence. If ICS is the
8204 implicit conversion sequence for an implicit object parameter,
8205 modify it accordingly. */
8207 static void
8208 maybe_handle_implicit_object (conversion **ics)
8210 if ((*ics)->this_p)
8212 /* [over.match.funcs]
8214 For non-static member functions, the type of the
8215 implicit object parameter is "reference to cv X"
8216 where X is the class of which the function is a
8217 member and cv is the cv-qualification on the member
8218 function declaration. */
8219 conversion *t = *ics;
8220 tree reference_type;
8222 /* The `this' parameter is a pointer to a class type. Make the
8223 implicit conversion talk about a reference to that same class
8224 type. */
8225 reference_type = TREE_TYPE (t->type);
8226 reference_type = build_reference_type (reference_type);
8228 if (t->kind == ck_qual)
8229 t = next_conversion (t);
8230 if (t->kind == ck_ptr)
8231 t = next_conversion (t);
8232 t = build_identity_conv (TREE_TYPE (t->type), NULL_TREE);
8233 t = direct_reference_binding (reference_type, t);
8234 t->this_p = 1;
8235 t->rvaluedness_matches_p = 0;
8236 *ics = t;
8240 /* If *ICS is a REF_BIND set *ICS to the remainder of the conversion,
8241 and return the initial reference binding conversion. Otherwise,
8242 leave *ICS unchanged and return NULL. */
8244 static conversion *
8245 maybe_handle_ref_bind (conversion **ics)
8247 if ((*ics)->kind == ck_ref_bind)
8249 conversion *old_ics = *ics;
8250 *ics = next_conversion (old_ics);
8251 (*ics)->user_conv_p = old_ics->user_conv_p;
8252 return old_ics;
8255 return NULL;
8258 /* Compare two implicit conversion sequences according to the rules set out in
8259 [over.ics.rank]. Return values:
8261 1: ics1 is better than ics2
8262 -1: ics2 is better than ics1
8263 0: ics1 and ics2 are indistinguishable */
8265 static int
8266 compare_ics (conversion *ics1, conversion *ics2)
8268 tree from_type1;
8269 tree from_type2;
8270 tree to_type1;
8271 tree to_type2;
8272 tree deref_from_type1 = NULL_TREE;
8273 tree deref_from_type2 = NULL_TREE;
8274 tree deref_to_type1 = NULL_TREE;
8275 tree deref_to_type2 = NULL_TREE;
8276 conversion_rank rank1, rank2;
8278 /* REF_BINDING is nonzero if the result of the conversion sequence
8279 is a reference type. In that case REF_CONV is the reference
8280 binding conversion. */
8281 conversion *ref_conv1;
8282 conversion *ref_conv2;
8284 /* Compare badness before stripping the reference conversion. */
8285 if (ics1->bad_p > ics2->bad_p)
8286 return -1;
8287 else if (ics1->bad_p < ics2->bad_p)
8288 return 1;
8290 /* Handle implicit object parameters. */
8291 maybe_handle_implicit_object (&ics1);
8292 maybe_handle_implicit_object (&ics2);
8294 /* Handle reference parameters. */
8295 ref_conv1 = maybe_handle_ref_bind (&ics1);
8296 ref_conv2 = maybe_handle_ref_bind (&ics2);
8298 /* List-initialization sequence L1 is a better conversion sequence than
8299 list-initialization sequence L2 if L1 converts to
8300 std::initializer_list<X> for some X and L2 does not. */
8301 if (ics1->kind == ck_list && ics2->kind != ck_list)
8302 return 1;
8303 if (ics2->kind == ck_list && ics1->kind != ck_list)
8304 return -1;
8306 /* [over.ics.rank]
8308 When comparing the basic forms of implicit conversion sequences (as
8309 defined in _over.best.ics_)
8311 --a standard conversion sequence (_over.ics.scs_) is a better
8312 conversion sequence than a user-defined conversion sequence
8313 or an ellipsis conversion sequence, and
8315 --a user-defined conversion sequence (_over.ics.user_) is a
8316 better conversion sequence than an ellipsis conversion sequence
8317 (_over.ics.ellipsis_). */
8318 /* Use BAD_CONVERSION_RANK because we already checked for a badness
8319 mismatch. If both ICS are bad, we try to make a decision based on
8320 what would have happened if they'd been good. This is not an
8321 extension, we'll still give an error when we build up the call; this
8322 just helps us give a more helpful error message. */
8323 rank1 = BAD_CONVERSION_RANK (ics1);
8324 rank2 = BAD_CONVERSION_RANK (ics2);
8326 if (rank1 > rank2)
8327 return -1;
8328 else if (rank1 < rank2)
8329 return 1;
8331 if (ics1->ellipsis_p)
8332 /* Both conversions are ellipsis conversions. */
8333 return 0;
8335 /* User-defined conversion sequence U1 is a better conversion sequence
8336 than another user-defined conversion sequence U2 if they contain the
8337 same user-defined conversion operator or constructor and if the sec-
8338 ond standard conversion sequence of U1 is better than the second
8339 standard conversion sequence of U2. */
8341 /* Handle list-conversion with the same code even though it isn't always
8342 ranked as a user-defined conversion and it doesn't have a second
8343 standard conversion sequence; it will still have the desired effect.
8344 Specifically, we need to do the reference binding comparison at the
8345 end of this function. */
8347 if (ics1->user_conv_p || ics1->kind == ck_list || ics1->kind == ck_aggr)
8349 conversion *t1;
8350 conversion *t2;
8352 for (t1 = ics1; t1->kind != ck_user; t1 = next_conversion (t1))
8353 if (t1->kind == ck_ambig || t1->kind == ck_aggr
8354 || t1->kind == ck_list)
8355 break;
8356 for (t2 = ics2; t2->kind != ck_user; t2 = next_conversion (t2))
8357 if (t2->kind == ck_ambig || t2->kind == ck_aggr
8358 || t2->kind == ck_list)
8359 break;
8361 if (t1->kind != t2->kind)
8362 return 0;
8363 else if (t1->kind == ck_user)
8365 if (t1->cand->fn != t2->cand->fn)
8366 return 0;
8368 else
8370 /* For ambiguous or aggregate conversions, use the target type as
8371 a proxy for the conversion function. */
8372 if (!same_type_ignoring_top_level_qualifiers_p (t1->type, t2->type))
8373 return 0;
8376 /* We can just fall through here, after setting up
8377 FROM_TYPE1 and FROM_TYPE2. */
8378 from_type1 = t1->type;
8379 from_type2 = t2->type;
8381 else
8383 conversion *t1;
8384 conversion *t2;
8386 /* We're dealing with two standard conversion sequences.
8388 [over.ics.rank]
8390 Standard conversion sequence S1 is a better conversion
8391 sequence than standard conversion sequence S2 if
8393 --S1 is a proper subsequence of S2 (comparing the conversion
8394 sequences in the canonical form defined by _over.ics.scs_,
8395 excluding any Lvalue Transformation; the identity
8396 conversion sequence is considered to be a subsequence of
8397 any non-identity conversion sequence */
8399 t1 = ics1;
8400 while (t1->kind != ck_identity)
8401 t1 = next_conversion (t1);
8402 from_type1 = t1->type;
8404 t2 = ics2;
8405 while (t2->kind != ck_identity)
8406 t2 = next_conversion (t2);
8407 from_type2 = t2->type;
8410 /* One sequence can only be a subsequence of the other if they start with
8411 the same type. They can start with different types when comparing the
8412 second standard conversion sequence in two user-defined conversion
8413 sequences. */
8414 if (same_type_p (from_type1, from_type2))
8416 if (is_subseq (ics1, ics2))
8417 return 1;
8418 if (is_subseq (ics2, ics1))
8419 return -1;
8422 /* [over.ics.rank]
8424 Or, if not that,
8426 --the rank of S1 is better than the rank of S2 (by the rules
8427 defined below):
8429 Standard conversion sequences are ordered by their ranks: an Exact
8430 Match is a better conversion than a Promotion, which is a better
8431 conversion than a Conversion.
8433 Two conversion sequences with the same rank are indistinguishable
8434 unless one of the following rules applies:
8436 --A conversion that does not a convert a pointer, pointer to member,
8437 or std::nullptr_t to bool is better than one that does.
8439 The ICS_STD_RANK automatically handles the pointer-to-bool rule,
8440 so that we do not have to check it explicitly. */
8441 if (ics1->rank < ics2->rank)
8442 return 1;
8443 else if (ics2->rank < ics1->rank)
8444 return -1;
8446 to_type1 = ics1->type;
8447 to_type2 = ics2->type;
8449 /* A conversion from scalar arithmetic type to complex is worse than a
8450 conversion between scalar arithmetic types. */
8451 if (same_type_p (from_type1, from_type2)
8452 && ARITHMETIC_TYPE_P (from_type1)
8453 && ARITHMETIC_TYPE_P (to_type1)
8454 && ARITHMETIC_TYPE_P (to_type2)
8455 && ((TREE_CODE (to_type1) == COMPLEX_TYPE)
8456 != (TREE_CODE (to_type2) == COMPLEX_TYPE)))
8458 if (TREE_CODE (to_type1) == COMPLEX_TYPE)
8459 return -1;
8460 else
8461 return 1;
8464 if (TYPE_PTR_P (from_type1)
8465 && TYPE_PTR_P (from_type2)
8466 && TYPE_PTR_P (to_type1)
8467 && TYPE_PTR_P (to_type2))
8469 deref_from_type1 = TREE_TYPE (from_type1);
8470 deref_from_type2 = TREE_TYPE (from_type2);
8471 deref_to_type1 = TREE_TYPE (to_type1);
8472 deref_to_type2 = TREE_TYPE (to_type2);
8474 /* The rules for pointers to members A::* are just like the rules
8475 for pointers A*, except opposite: if B is derived from A then
8476 A::* converts to B::*, not vice versa. For that reason, we
8477 switch the from_ and to_ variables here. */
8478 else if ((TYPE_PTRDATAMEM_P (from_type1) && TYPE_PTRDATAMEM_P (from_type2)
8479 && TYPE_PTRDATAMEM_P (to_type1) && TYPE_PTRDATAMEM_P (to_type2))
8480 || (TYPE_PTRMEMFUNC_P (from_type1)
8481 && TYPE_PTRMEMFUNC_P (from_type2)
8482 && TYPE_PTRMEMFUNC_P (to_type1)
8483 && TYPE_PTRMEMFUNC_P (to_type2)))
8485 deref_to_type1 = TYPE_PTRMEM_CLASS_TYPE (from_type1);
8486 deref_to_type2 = TYPE_PTRMEM_CLASS_TYPE (from_type2);
8487 deref_from_type1 = TYPE_PTRMEM_CLASS_TYPE (to_type1);
8488 deref_from_type2 = TYPE_PTRMEM_CLASS_TYPE (to_type2);
8491 if (deref_from_type1 != NULL_TREE
8492 && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_from_type1))
8493 && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_from_type2)))
8495 /* This was one of the pointer or pointer-like conversions.
8497 [over.ics.rank]
8499 --If class B is derived directly or indirectly from class A,
8500 conversion of B* to A* is better than conversion of B* to
8501 void*, and conversion of A* to void* is better than
8502 conversion of B* to void*. */
8503 if (VOID_TYPE_P (deref_to_type1)
8504 && VOID_TYPE_P (deref_to_type2))
8506 if (is_properly_derived_from (deref_from_type1,
8507 deref_from_type2))
8508 return -1;
8509 else if (is_properly_derived_from (deref_from_type2,
8510 deref_from_type1))
8511 return 1;
8513 else if (VOID_TYPE_P (deref_to_type1)
8514 || VOID_TYPE_P (deref_to_type2))
8516 if (same_type_p (deref_from_type1, deref_from_type2))
8518 if (VOID_TYPE_P (deref_to_type2))
8520 if (is_properly_derived_from (deref_from_type1,
8521 deref_to_type1))
8522 return 1;
8524 /* We know that DEREF_TO_TYPE1 is `void' here. */
8525 else if (is_properly_derived_from (deref_from_type1,
8526 deref_to_type2))
8527 return -1;
8530 else if (RECORD_OR_UNION_CODE_P (TREE_CODE (deref_to_type1))
8531 && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_to_type2)))
8533 /* [over.ics.rank]
8535 --If class B is derived directly or indirectly from class A
8536 and class C is derived directly or indirectly from B,
8538 --conversion of C* to B* is better than conversion of C* to
8541 --conversion of B* to A* is better than conversion of C* to
8542 A* */
8543 if (same_type_p (deref_from_type1, deref_from_type2))
8545 if (is_properly_derived_from (deref_to_type1,
8546 deref_to_type2))
8547 return 1;
8548 else if (is_properly_derived_from (deref_to_type2,
8549 deref_to_type1))
8550 return -1;
8552 else if (same_type_p (deref_to_type1, deref_to_type2))
8554 if (is_properly_derived_from (deref_from_type2,
8555 deref_from_type1))
8556 return 1;
8557 else if (is_properly_derived_from (deref_from_type1,
8558 deref_from_type2))
8559 return -1;
8563 else if (CLASS_TYPE_P (non_reference (from_type1))
8564 && same_type_p (from_type1, from_type2))
8566 tree from = non_reference (from_type1);
8568 /* [over.ics.rank]
8570 --binding of an expression of type C to a reference of type
8571 B& is better than binding an expression of type C to a
8572 reference of type A&
8574 --conversion of C to B is better than conversion of C to A, */
8575 if (is_properly_derived_from (from, to_type1)
8576 && is_properly_derived_from (from, to_type2))
8578 if (is_properly_derived_from (to_type1, to_type2))
8579 return 1;
8580 else if (is_properly_derived_from (to_type2, to_type1))
8581 return -1;
8584 else if (CLASS_TYPE_P (non_reference (to_type1))
8585 && same_type_p (to_type1, to_type2))
8587 tree to = non_reference (to_type1);
8589 /* [over.ics.rank]
8591 --binding of an expression of type B to a reference of type
8592 A& is better than binding an expression of type C to a
8593 reference of type A&,
8595 --conversion of B to A is better than conversion of C to A */
8596 if (is_properly_derived_from (from_type1, to)
8597 && is_properly_derived_from (from_type2, to))
8599 if (is_properly_derived_from (from_type2, from_type1))
8600 return 1;
8601 else if (is_properly_derived_from (from_type1, from_type2))
8602 return -1;
8606 /* [over.ics.rank]
8608 --S1 and S2 differ only in their qualification conversion and yield
8609 similar types T1 and T2 (_conv.qual_), respectively, and the cv-
8610 qualification signature of type T1 is a proper subset of the cv-
8611 qualification signature of type T2 */
8612 if (ics1->kind == ck_qual
8613 && ics2->kind == ck_qual
8614 && same_type_p (from_type1, from_type2))
8616 int result = comp_cv_qual_signature (to_type1, to_type2);
8617 if (result != 0)
8618 return result;
8621 /* [over.ics.rank]
8623 --S1 and S2 are reference bindings (_dcl.init.ref_) and neither refers
8624 to an implicit object parameter of a non-static member function
8625 declared without a ref-qualifier, and either S1 binds an lvalue
8626 reference to an lvalue and S2 binds an rvalue reference or S1 binds an
8627 rvalue reference to an rvalue and S2 binds an lvalue reference (C++0x
8628 draft standard, 13.3.3.2)
8630 --S1 and S2 are reference bindings (_dcl.init.ref_), and the
8631 types to which the references refer are the same type except for
8632 top-level cv-qualifiers, and the type to which the reference
8633 initialized by S2 refers is more cv-qualified than the type to
8634 which the reference initialized by S1 refers.
8636 DR 1328 [over.match.best]: the context is an initialization by
8637 conversion function for direct reference binding (13.3.1.6) of a
8638 reference to function type, the return type of F1 is the same kind of
8639 reference (i.e. lvalue or rvalue) as the reference being initialized,
8640 and the return type of F2 is not. */
8642 if (ref_conv1 && ref_conv2)
8644 if (!ref_conv1->this_p && !ref_conv2->this_p
8645 && (ref_conv1->rvaluedness_matches_p
8646 != ref_conv2->rvaluedness_matches_p)
8647 && (same_type_p (ref_conv1->type, ref_conv2->type)
8648 || (TYPE_REF_IS_RVALUE (ref_conv1->type)
8649 != TYPE_REF_IS_RVALUE (ref_conv2->type))))
8651 if (ref_conv1->bad_p
8652 && !same_type_p (TREE_TYPE (ref_conv1->type),
8653 TREE_TYPE (ref_conv2->type)))
8654 /* Don't prefer a bad conversion that drops cv-quals to a bad
8655 conversion with the wrong rvalueness. */
8656 return 0;
8657 return (ref_conv1->rvaluedness_matches_p
8658 - ref_conv2->rvaluedness_matches_p);
8661 if (same_type_ignoring_top_level_qualifiers_p (to_type1, to_type2))
8663 int q1 = cp_type_quals (TREE_TYPE (ref_conv1->type));
8664 int q2 = cp_type_quals (TREE_TYPE (ref_conv2->type));
8665 if (ref_conv1->bad_p)
8667 /* Prefer the one that drops fewer cv-quals. */
8668 tree ftype = next_conversion (ref_conv1)->type;
8669 int fquals = cp_type_quals (ftype);
8670 q1 ^= fquals;
8671 q2 ^= fquals;
8673 return comp_cv_qualification (q2, q1);
8677 /* Neither conversion sequence is better than the other. */
8678 return 0;
8681 /* The source type for this standard conversion sequence. */
8683 static tree
8684 source_type (conversion *t)
8686 for (;; t = next_conversion (t))
8688 if (t->kind == ck_user
8689 || t->kind == ck_ambig
8690 || t->kind == ck_identity)
8691 return t->type;
8693 gcc_unreachable ();
8696 /* Note a warning about preferring WINNER to LOSER. We do this by storing
8697 a pointer to LOSER and re-running joust to produce the warning if WINNER
8698 is actually used. */
8700 static void
8701 add_warning (struct z_candidate *winner, struct z_candidate *loser)
8703 candidate_warning *cw = (candidate_warning *)
8704 conversion_obstack_alloc (sizeof (candidate_warning));
8705 cw->loser = loser;
8706 cw->next = winner->warnings;
8707 winner->warnings = cw;
8710 /* Compare two candidates for overloading as described in
8711 [over.match.best]. Return values:
8713 1: cand1 is better than cand2
8714 -1: cand2 is better than cand1
8715 0: cand1 and cand2 are indistinguishable */
8717 static int
8718 joust (struct z_candidate *cand1, struct z_candidate *cand2, bool warn,
8719 tsubst_flags_t complain)
8721 int winner = 0;
8722 int off1 = 0, off2 = 0;
8723 size_t i;
8724 size_t len;
8726 /* Candidates that involve bad conversions are always worse than those
8727 that don't. */
8728 if (cand1->viable > cand2->viable)
8729 return 1;
8730 if (cand1->viable < cand2->viable)
8731 return -1;
8733 /* If we have two pseudo-candidates for conversions to the same type,
8734 or two candidates for the same function, arbitrarily pick one. */
8735 if (cand1->fn == cand2->fn
8736 && (IS_TYPE_OR_DECL_P (cand1->fn)))
8737 return 1;
8739 /* Prefer a non-deleted function over an implicitly deleted move
8740 constructor or assignment operator. This differs slightly from the
8741 wording for issue 1402 (which says the move op is ignored by overload
8742 resolution), but this way produces better error messages. */
8743 if (TREE_CODE (cand1->fn) == FUNCTION_DECL
8744 && TREE_CODE (cand2->fn) == FUNCTION_DECL
8745 && DECL_DELETED_FN (cand1->fn) != DECL_DELETED_FN (cand2->fn))
8747 if (DECL_DELETED_FN (cand1->fn) && DECL_DEFAULTED_FN (cand1->fn)
8748 && move_fn_p (cand1->fn))
8749 return -1;
8750 if (DECL_DELETED_FN (cand2->fn) && DECL_DEFAULTED_FN (cand2->fn)
8751 && move_fn_p (cand2->fn))
8752 return 1;
8755 /* a viable function F1
8756 is defined to be a better function than another viable function F2 if
8757 for all arguments i, ICSi(F1) is not a worse conversion sequence than
8758 ICSi(F2), and then */
8760 /* for some argument j, ICSj(F1) is a better conversion sequence than
8761 ICSj(F2) */
8763 /* For comparing static and non-static member functions, we ignore
8764 the implicit object parameter of the non-static function. The
8765 standard says to pretend that the static function has an object
8766 parm, but that won't work with operator overloading. */
8767 len = cand1->num_convs;
8768 if (len != cand2->num_convs)
8770 int static_1 = DECL_STATIC_FUNCTION_P (cand1->fn);
8771 int static_2 = DECL_STATIC_FUNCTION_P (cand2->fn);
8773 if (DECL_CONSTRUCTOR_P (cand1->fn)
8774 && is_list_ctor (cand1->fn) != is_list_ctor (cand2->fn))
8775 /* We're comparing a near-match list constructor and a near-match
8776 non-list constructor. Just treat them as unordered. */
8777 return 0;
8779 gcc_assert (static_1 != static_2);
8781 if (static_1)
8782 off2 = 1;
8783 else
8785 off1 = 1;
8786 --len;
8790 for (i = 0; i < len; ++i)
8792 conversion *t1 = cand1->convs[i + off1];
8793 conversion *t2 = cand2->convs[i + off2];
8794 int comp = compare_ics (t1, t2);
8796 if (comp != 0)
8798 if ((complain & tf_warning)
8799 && warn_sign_promo
8800 && (CONVERSION_RANK (t1) + CONVERSION_RANK (t2)
8801 == cr_std + cr_promotion)
8802 && t1->kind == ck_std
8803 && t2->kind == ck_std
8804 && TREE_CODE (t1->type) == INTEGER_TYPE
8805 && TREE_CODE (t2->type) == INTEGER_TYPE
8806 && (TYPE_PRECISION (t1->type)
8807 == TYPE_PRECISION (t2->type))
8808 && (TYPE_UNSIGNED (next_conversion (t1)->type)
8809 || (TREE_CODE (next_conversion (t1)->type)
8810 == ENUMERAL_TYPE)))
8812 tree type = next_conversion (t1)->type;
8813 tree type1, type2;
8814 struct z_candidate *w, *l;
8815 if (comp > 0)
8816 type1 = t1->type, type2 = t2->type,
8817 w = cand1, l = cand2;
8818 else
8819 type1 = t2->type, type2 = t1->type,
8820 w = cand2, l = cand1;
8822 if (warn)
8824 warning (OPT_Wsign_promo, "passing %qT chooses %qT over %qT",
8825 type, type1, type2);
8826 warning (OPT_Wsign_promo, " in call to %qD", w->fn);
8828 else
8829 add_warning (w, l);
8832 if (winner && comp != winner)
8834 winner = 0;
8835 goto tweak;
8837 winner = comp;
8841 /* warn about confusing overload resolution for user-defined conversions,
8842 either between a constructor and a conversion op, or between two
8843 conversion ops. */
8844 if ((complain & tf_warning)
8845 && winner && warn_conversion && cand1->second_conv
8846 && (!DECL_CONSTRUCTOR_P (cand1->fn) || !DECL_CONSTRUCTOR_P (cand2->fn))
8847 && winner != compare_ics (cand1->second_conv, cand2->second_conv))
8849 struct z_candidate *w, *l;
8850 bool give_warning = false;
8852 if (winner == 1)
8853 w = cand1, l = cand2;
8854 else
8855 w = cand2, l = cand1;
8857 /* We don't want to complain about `X::operator T1 ()'
8858 beating `X::operator T2 () const', when T2 is a no less
8859 cv-qualified version of T1. */
8860 if (DECL_CONTEXT (w->fn) == DECL_CONTEXT (l->fn)
8861 && !DECL_CONSTRUCTOR_P (w->fn) && !DECL_CONSTRUCTOR_P (l->fn))
8863 tree t = TREE_TYPE (TREE_TYPE (l->fn));
8864 tree f = TREE_TYPE (TREE_TYPE (w->fn));
8866 if (TREE_CODE (t) == TREE_CODE (f) && POINTER_TYPE_P (t))
8868 t = TREE_TYPE (t);
8869 f = TREE_TYPE (f);
8871 if (!comp_ptr_ttypes (t, f))
8872 give_warning = true;
8874 else
8875 give_warning = true;
8877 if (!give_warning)
8878 /*NOP*/;
8879 else if (warn)
8881 tree source = source_type (w->convs[0]);
8882 if (! DECL_CONSTRUCTOR_P (w->fn))
8883 source = TREE_TYPE (source);
8884 if (warning (OPT_Wconversion, "choosing %qD over %qD", w->fn, l->fn)
8885 && warning (OPT_Wconversion, " for conversion from %qT to %qT",
8886 source, w->second_conv->type))
8888 inform (input_location, " because conversion sequence for the argument is better");
8891 else
8892 add_warning (w, l);
8895 if (winner)
8896 return winner;
8898 /* DR 495 moved this tiebreaker above the template ones. */
8899 /* or, if not that,
8900 the context is an initialization by user-defined conversion (see
8901 _dcl.init_ and _over.match.user_) and the standard conversion
8902 sequence from the return type of F1 to the destination type (i.e.,
8903 the type of the entity being initialized) is a better conversion
8904 sequence than the standard conversion sequence from the return type
8905 of F2 to the destination type. */
8907 if (cand1->second_conv)
8909 winner = compare_ics (cand1->second_conv, cand2->second_conv);
8910 if (winner)
8911 return winner;
8914 /* or, if not that,
8915 F1 is a non-template function and F2 is a template function
8916 specialization. */
8918 if (!cand1->template_decl && cand2->template_decl)
8919 return 1;
8920 else if (cand1->template_decl && !cand2->template_decl)
8921 return -1;
8923 /* or, if not that,
8924 F1 and F2 are template functions and the function template for F1 is
8925 more specialized than the template for F2 according to the partial
8926 ordering rules. */
8928 if (cand1->template_decl && cand2->template_decl)
8930 winner = more_specialized_fn
8931 (TI_TEMPLATE (cand1->template_decl),
8932 TI_TEMPLATE (cand2->template_decl),
8933 /* [temp.func.order]: The presence of unused ellipsis and default
8934 arguments has no effect on the partial ordering of function
8935 templates. add_function_candidate() will not have
8936 counted the "this" argument for constructors. */
8937 cand1->num_convs + DECL_CONSTRUCTOR_P (cand1->fn));
8938 if (winner)
8939 return winner;
8942 /* Check whether we can discard a builtin candidate, either because we
8943 have two identical ones or matching builtin and non-builtin candidates.
8945 (Pedantically in the latter case the builtin which matched the user
8946 function should not be added to the overload set, but we spot it here.
8948 [over.match.oper]
8949 ... the builtin candidates include ...
8950 - do not have the same parameter type list as any non-template
8951 non-member candidate. */
8953 if (identifier_p (cand1->fn) || identifier_p (cand2->fn))
8955 for (i = 0; i < len; ++i)
8956 if (!same_type_p (cand1->convs[i]->type,
8957 cand2->convs[i]->type))
8958 break;
8959 if (i == cand1->num_convs)
8961 if (cand1->fn == cand2->fn)
8962 /* Two built-in candidates; arbitrarily pick one. */
8963 return 1;
8964 else if (identifier_p (cand1->fn))
8965 /* cand1 is built-in; prefer cand2. */
8966 return -1;
8967 else
8968 /* cand2 is built-in; prefer cand1. */
8969 return 1;
8973 /* For candidates of a multi-versioned function, make the version with
8974 the highest priority win. This version will be checked for dispatching
8975 first. If this version can be inlined into the caller, the front-end
8976 will simply make a direct call to this function. */
8978 if (TREE_CODE (cand1->fn) == FUNCTION_DECL
8979 && DECL_FUNCTION_VERSIONED (cand1->fn)
8980 && TREE_CODE (cand2->fn) == FUNCTION_DECL
8981 && DECL_FUNCTION_VERSIONED (cand2->fn))
8983 tree f1 = TREE_TYPE (cand1->fn);
8984 tree f2 = TREE_TYPE (cand2->fn);
8985 tree p1 = TYPE_ARG_TYPES (f1);
8986 tree p2 = TYPE_ARG_TYPES (f2);
8988 /* Check if cand1->fn and cand2->fn are versions of the same function. It
8989 is possible that cand1->fn and cand2->fn are function versions but of
8990 different functions. Check types to see if they are versions of the same
8991 function. */
8992 if (compparms (p1, p2)
8993 && same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
8995 /* Always make the version with the higher priority, more
8996 specialized, win. */
8997 gcc_assert (targetm.compare_version_priority);
8998 if (targetm.compare_version_priority (cand1->fn, cand2->fn) >= 0)
8999 return 1;
9000 else
9001 return -1;
9005 /* If the two function declarations represent the same function (this can
9006 happen with declarations in multiple scopes and arg-dependent lookup),
9007 arbitrarily choose one. But first make sure the default args we're
9008 using match. */
9009 if (DECL_P (cand1->fn) && DECL_P (cand2->fn)
9010 && equal_functions (cand1->fn, cand2->fn))
9012 tree parms1 = TYPE_ARG_TYPES (TREE_TYPE (cand1->fn));
9013 tree parms2 = TYPE_ARG_TYPES (TREE_TYPE (cand2->fn));
9015 gcc_assert (!DECL_CONSTRUCTOR_P (cand1->fn));
9017 for (i = 0; i < len; ++i)
9019 /* Don't crash if the fn is variadic. */
9020 if (!parms1)
9021 break;
9022 parms1 = TREE_CHAIN (parms1);
9023 parms2 = TREE_CHAIN (parms2);
9026 if (off1)
9027 parms1 = TREE_CHAIN (parms1);
9028 else if (off2)
9029 parms2 = TREE_CHAIN (parms2);
9031 for (; parms1; ++i)
9033 if (!cp_tree_equal (TREE_PURPOSE (parms1),
9034 TREE_PURPOSE (parms2)))
9036 if (warn)
9038 if (complain & tf_error)
9040 if (permerror (input_location,
9041 "default argument mismatch in "
9042 "overload resolution"))
9044 inform (input_location,
9045 " candidate 1: %q+#F", cand1->fn);
9046 inform (input_location,
9047 " candidate 2: %q+#F", cand2->fn);
9050 else
9051 return 0;
9053 else
9054 add_warning (cand1, cand2);
9055 break;
9057 parms1 = TREE_CHAIN (parms1);
9058 parms2 = TREE_CHAIN (parms2);
9061 return 1;
9064 tweak:
9066 /* Extension: If the worst conversion for one candidate is worse than the
9067 worst conversion for the other, take the first. */
9068 if (!pedantic && (complain & tf_warning_or_error))
9070 conversion_rank rank1 = cr_identity, rank2 = cr_identity;
9071 struct z_candidate *w = 0, *l = 0;
9073 for (i = 0; i < len; ++i)
9075 if (CONVERSION_RANK (cand1->convs[i+off1]) > rank1)
9076 rank1 = CONVERSION_RANK (cand1->convs[i+off1]);
9077 if (CONVERSION_RANK (cand2->convs[i + off2]) > rank2)
9078 rank2 = CONVERSION_RANK (cand2->convs[i + off2]);
9080 if (rank1 < rank2)
9081 winner = 1, w = cand1, l = cand2;
9082 if (rank1 > rank2)
9083 winner = -1, w = cand2, l = cand1;
9084 if (winner)
9086 /* Don't choose a deleted function over ambiguity. */
9087 if (DECL_P (w->fn) && DECL_DELETED_FN (w->fn))
9088 return 0;
9089 if (warn)
9091 pedwarn (input_location, 0,
9092 "ISO C++ says that these are ambiguous, even "
9093 "though the worst conversion for the first is better than "
9094 "the worst conversion for the second:");
9095 print_z_candidate (input_location, _("candidate 1:"), w);
9096 print_z_candidate (input_location, _("candidate 2:"), l);
9098 else
9099 add_warning (w, l);
9100 return winner;
9104 gcc_assert (!winner);
9105 return 0;
9108 /* Given a list of candidates for overloading, find the best one, if any.
9109 This algorithm has a worst case of O(2n) (winner is last), and a best
9110 case of O(n/2) (totally ambiguous); much better than a sorting
9111 algorithm. */
9113 static struct z_candidate *
9114 tourney (struct z_candidate *candidates, tsubst_flags_t complain)
9116 struct z_candidate *champ = candidates, *challenger;
9117 int fate;
9118 int champ_compared_to_predecessor = 0;
9120 /* Walk through the list once, comparing each current champ to the next
9121 candidate, knocking out a candidate or two with each comparison. */
9123 for (challenger = champ->next; challenger; )
9125 fate = joust (champ, challenger, 0, complain);
9126 if (fate == 1)
9127 challenger = challenger->next;
9128 else
9130 if (fate == 0)
9132 champ = challenger->next;
9133 if (champ == 0)
9134 return NULL;
9135 champ_compared_to_predecessor = 0;
9137 else
9139 champ = challenger;
9140 champ_compared_to_predecessor = 1;
9143 challenger = champ->next;
9147 /* Make sure the champ is better than all the candidates it hasn't yet
9148 been compared to. */
9150 for (challenger = candidates;
9151 challenger != champ
9152 && !(champ_compared_to_predecessor && challenger->next == champ);
9153 challenger = challenger->next)
9155 fate = joust (champ, challenger, 0, complain);
9156 if (fate != 1)
9157 return NULL;
9160 return champ;
9163 /* Returns nonzero if things of type FROM can be converted to TO. */
9165 bool
9166 can_convert (tree to, tree from, tsubst_flags_t complain)
9168 tree arg = NULL_TREE;
9169 /* implicit_conversion only considers user-defined conversions
9170 if it has an expression for the call argument list. */
9171 if (CLASS_TYPE_P (from) || CLASS_TYPE_P (to))
9172 arg = build1 (CAST_EXPR, from, NULL_TREE);
9173 return can_convert_arg (to, from, arg, LOOKUP_IMPLICIT, complain);
9176 /* Returns nonzero if things of type FROM can be converted to TO with a
9177 standard conversion. */
9179 bool
9180 can_convert_standard (tree to, tree from, tsubst_flags_t complain)
9182 return can_convert_arg (to, from, NULL_TREE, LOOKUP_IMPLICIT, complain);
9185 /* Returns nonzero if ARG (of type FROM) can be converted to TO. */
9187 bool
9188 can_convert_arg (tree to, tree from, tree arg, int flags,
9189 tsubst_flags_t complain)
9191 conversion *t;
9192 void *p;
9193 bool ok_p;
9195 /* Get the high-water mark for the CONVERSION_OBSTACK. */
9196 p = conversion_obstack_alloc (0);
9197 /* We want to discard any access checks done for this test,
9198 as we might not be in the appropriate access context and
9199 we'll do the check again when we actually perform the
9200 conversion. */
9201 push_deferring_access_checks (dk_deferred);
9203 t = implicit_conversion (to, from, arg, /*c_cast_p=*/false,
9204 flags, complain);
9205 ok_p = (t && !t->bad_p);
9207 /* Discard the access checks now. */
9208 pop_deferring_access_checks ();
9209 /* Free all the conversions we allocated. */
9210 obstack_free (&conversion_obstack, p);
9212 return ok_p;
9215 /* Like can_convert_arg, but allows dubious conversions as well. */
9217 bool
9218 can_convert_arg_bad (tree to, tree from, tree arg, int flags,
9219 tsubst_flags_t complain)
9221 conversion *t;
9222 void *p;
9224 /* Get the high-water mark for the CONVERSION_OBSTACK. */
9225 p = conversion_obstack_alloc (0);
9226 /* Try to perform the conversion. */
9227 t = implicit_conversion (to, from, arg, /*c_cast_p=*/false,
9228 flags, complain);
9229 /* Free all the conversions we allocated. */
9230 obstack_free (&conversion_obstack, p);
9232 return t != NULL;
9235 /* Convert EXPR to TYPE. Return the converted expression.
9237 Note that we allow bad conversions here because by the time we get to
9238 this point we are committed to doing the conversion. If we end up
9239 doing a bad conversion, convert_like will complain. */
9241 tree
9242 perform_implicit_conversion_flags (tree type, tree expr,
9243 tsubst_flags_t complain, int flags)
9245 conversion *conv;
9246 void *p;
9247 location_t loc = EXPR_LOC_OR_LOC (expr, input_location);
9249 if (error_operand_p (expr))
9250 return error_mark_node;
9252 /* Get the high-water mark for the CONVERSION_OBSTACK. */
9253 p = conversion_obstack_alloc (0);
9255 conv = implicit_conversion (type, TREE_TYPE (expr), expr,
9256 /*c_cast_p=*/false,
9257 flags, complain);
9259 if (!conv)
9261 if (complain & tf_error)
9263 /* If expr has unknown type, then it is an overloaded function.
9264 Call instantiate_type to get good error messages. */
9265 if (TREE_TYPE (expr) == unknown_type_node)
9266 instantiate_type (type, expr, complain);
9267 else if (invalid_nonstatic_memfn_p (expr, complain))
9268 /* We gave an error. */;
9269 else
9270 error_at (loc, "could not convert %qE from %qT to %qT", expr,
9271 TREE_TYPE (expr), type);
9273 expr = error_mark_node;
9275 else if (processing_template_decl && conv->kind != ck_identity)
9277 /* In a template, we are only concerned about determining the
9278 type of non-dependent expressions, so we do not have to
9279 perform the actual conversion. But for initializers, we
9280 need to be able to perform it at instantiation
9281 (or fold_non_dependent_expr) time. */
9282 expr = build1 (IMPLICIT_CONV_EXPR, type, expr);
9283 if (!(flags & LOOKUP_ONLYCONVERTING))
9284 IMPLICIT_CONV_EXPR_DIRECT_INIT (expr) = true;
9286 else
9287 expr = convert_like (conv, expr, complain);
9289 /* Free all the conversions we allocated. */
9290 obstack_free (&conversion_obstack, p);
9292 return expr;
9295 tree
9296 perform_implicit_conversion (tree type, tree expr, tsubst_flags_t complain)
9298 return perform_implicit_conversion_flags (type, expr, complain,
9299 LOOKUP_IMPLICIT);
9302 /* Convert EXPR to TYPE (as a direct-initialization) if that is
9303 permitted. If the conversion is valid, the converted expression is
9304 returned. Otherwise, NULL_TREE is returned, except in the case
9305 that TYPE is a class type; in that case, an error is issued. If
9306 C_CAST_P is true, then this direct-initialization is taking
9307 place as part of a static_cast being attempted as part of a C-style
9308 cast. */
9310 tree
9311 perform_direct_initialization_if_possible (tree type,
9312 tree expr,
9313 bool c_cast_p,
9314 tsubst_flags_t complain)
9316 conversion *conv;
9317 void *p;
9319 if (type == error_mark_node || error_operand_p (expr))
9320 return error_mark_node;
9321 /* [dcl.init]
9323 If the destination type is a (possibly cv-qualified) class type:
9325 -- If the initialization is direct-initialization ...,
9326 constructors are considered. ... If no constructor applies, or
9327 the overload resolution is ambiguous, the initialization is
9328 ill-formed. */
9329 if (CLASS_TYPE_P (type))
9331 vec<tree, va_gc> *args = make_tree_vector_single (expr);
9332 expr = build_special_member_call (NULL_TREE, complete_ctor_identifier,
9333 &args, type, LOOKUP_NORMAL, complain);
9334 release_tree_vector (args);
9335 return build_cplus_new (type, expr, complain);
9338 /* Get the high-water mark for the CONVERSION_OBSTACK. */
9339 p = conversion_obstack_alloc (0);
9341 conv = implicit_conversion (type, TREE_TYPE (expr), expr,
9342 c_cast_p,
9343 LOOKUP_NORMAL, complain);
9344 if (!conv || conv->bad_p)
9345 expr = NULL_TREE;
9346 else
9347 expr = convert_like_real (conv, expr, NULL_TREE, 0, 0,
9348 /*issue_conversion_warnings=*/false,
9349 c_cast_p,
9350 complain);
9352 /* Free all the conversions we allocated. */
9353 obstack_free (&conversion_obstack, p);
9355 return expr;
9358 /* When initializing a reference that lasts longer than a full-expression,
9359 this special rule applies:
9361 [class.temporary]
9363 The temporary to which the reference is bound or the temporary
9364 that is the complete object to which the reference is bound
9365 persists for the lifetime of the reference.
9367 The temporaries created during the evaluation of the expression
9368 initializing the reference, except the temporary to which the
9369 reference is bound, are destroyed at the end of the
9370 full-expression in which they are created.
9372 In that case, we store the converted expression into a new
9373 VAR_DECL in a new scope.
9375 However, we want to be careful not to create temporaries when
9376 they are not required. For example, given:
9378 struct B {};
9379 struct D : public B {};
9380 D f();
9381 const B& b = f();
9383 there is no need to copy the return value from "f"; we can just
9384 extend its lifetime. Similarly, given:
9386 struct S {};
9387 struct T { operator S(); };
9388 T t;
9389 const S& s = t;
9391 we can extend the lifetime of the return value of the conversion
9392 operator.
9394 The next several functions are involved in this lifetime extension. */
9396 /* DECL is a VAR_DECL or FIELD_DECL whose type is a REFERENCE_TYPE. The
9397 reference is being bound to a temporary. Create and return a new
9398 VAR_DECL with the indicated TYPE; this variable will store the value to
9399 which the reference is bound. */
9401 tree
9402 make_temporary_var_for_ref_to_temp (tree decl, tree type)
9404 tree var;
9406 /* Create the variable. */
9407 var = create_temporary_var (type);
9409 /* Register the variable. */
9410 if (VAR_P (decl)
9411 && (TREE_STATIC (decl) || DECL_THREAD_LOCAL_P (decl)))
9413 /* Namespace-scope or local static; give it a mangled name. */
9414 /* FIXME share comdat with decl? */
9415 tree name;
9417 TREE_STATIC (var) = TREE_STATIC (decl);
9418 set_decl_tls_model (var, DECL_TLS_MODEL (decl));
9419 name = mangle_ref_init_variable (decl);
9420 DECL_NAME (var) = name;
9421 SET_DECL_ASSEMBLER_NAME (var, name);
9422 var = pushdecl_top_level (var);
9424 else
9425 /* Create a new cleanup level if necessary. */
9426 maybe_push_cleanup_level (type);
9428 return var;
9431 /* EXPR is the initializer for a variable DECL of reference or
9432 std::initializer_list type. Create, push and return a new VAR_DECL
9433 for the initializer so that it will live as long as DECL. Any
9434 cleanup for the new variable is returned through CLEANUP, and the
9435 code to initialize the new variable is returned through INITP. */
9437 static tree
9438 set_up_extended_ref_temp (tree decl, tree expr, vec<tree, va_gc> **cleanups,
9439 tree *initp)
9441 tree init;
9442 tree type;
9443 tree var;
9445 /* Create the temporary variable. */
9446 type = TREE_TYPE (expr);
9447 var = make_temporary_var_for_ref_to_temp (decl, type);
9448 layout_decl (var, 0);
9449 /* If the rvalue is the result of a function call it will be
9450 a TARGET_EXPR. If it is some other construct (such as a
9451 member access expression where the underlying object is
9452 itself the result of a function call), turn it into a
9453 TARGET_EXPR here. It is important that EXPR be a
9454 TARGET_EXPR below since otherwise the INIT_EXPR will
9455 attempt to make a bitwise copy of EXPR to initialize
9456 VAR. */
9457 if (TREE_CODE (expr) != TARGET_EXPR)
9458 expr = get_target_expr (expr);
9460 if (TREE_CODE (decl) == FIELD_DECL
9461 && extra_warnings && !TREE_NO_WARNING (decl))
9463 warning (OPT_Wextra, "a temporary bound to %qD only persists "
9464 "until the constructor exits", decl);
9465 TREE_NO_WARNING (decl) = true;
9468 /* Recursively extend temps in this initializer. */
9469 TARGET_EXPR_INITIAL (expr)
9470 = extend_ref_init_temps (decl, TARGET_EXPR_INITIAL (expr), cleanups);
9472 /* Any reference temp has a non-trivial initializer. */
9473 DECL_NONTRIVIALLY_INITIALIZED_P (var) = true;
9475 /* If the initializer is constant, put it in DECL_INITIAL so we get
9476 static initialization and use in constant expressions. */
9477 init = maybe_constant_init (expr);
9478 if (TREE_CONSTANT (init))
9480 if (literal_type_p (type) && CP_TYPE_CONST_NON_VOLATILE_P (type))
9482 /* 5.19 says that a constant expression can include an
9483 lvalue-rvalue conversion applied to "a glvalue of literal type
9484 that refers to a non-volatile temporary object initialized
9485 with a constant expression". Rather than try to communicate
9486 that this VAR_DECL is a temporary, just mark it constexpr.
9488 Currently this is only useful for initializer_list temporaries,
9489 since reference vars can't appear in constant expressions. */
9490 DECL_DECLARED_CONSTEXPR_P (var) = true;
9491 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (var) = true;
9492 TREE_CONSTANT (var) = true;
9494 DECL_INITIAL (var) = init;
9495 init = NULL_TREE;
9497 else
9498 /* Create the INIT_EXPR that will initialize the temporary
9499 variable. */
9500 init = build2 (INIT_EXPR, type, var, expr);
9501 if (at_function_scope_p ())
9503 add_decl_expr (var);
9505 if (TREE_STATIC (var))
9506 init = add_stmt_to_compound (init, register_dtor_fn (var));
9507 else
9509 tree cleanup = cxx_maybe_build_cleanup (var, tf_warning_or_error);
9510 if (cleanup)
9511 vec_safe_push (*cleanups, cleanup);
9514 /* We must be careful to destroy the temporary only
9515 after its initialization has taken place. If the
9516 initialization throws an exception, then the
9517 destructor should not be run. We cannot simply
9518 transform INIT into something like:
9520 (INIT, ({ CLEANUP_STMT; }))
9522 because emit_local_var always treats the
9523 initializer as a full-expression. Thus, the
9524 destructor would run too early; it would run at the
9525 end of initializing the reference variable, rather
9526 than at the end of the block enclosing the
9527 reference variable.
9529 The solution is to pass back a cleanup expression
9530 which the caller is responsible for attaching to
9531 the statement tree. */
9533 else
9535 rest_of_decl_compilation (var, /*toplev=*/1, at_eof);
9536 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
9538 if (DECL_THREAD_LOCAL_P (var))
9539 tls_aggregates = tree_cons (NULL_TREE, var,
9540 tls_aggregates);
9541 else
9542 static_aggregates = tree_cons (NULL_TREE, var,
9543 static_aggregates);
9545 else
9546 /* Check whether the dtor is callable. */
9547 cxx_maybe_build_cleanup (var, tf_warning_or_error);
9550 *initp = init;
9551 return var;
9554 /* Convert EXPR to the indicated reference TYPE, in a way suitable for
9555 initializing a variable of that TYPE. */
9557 tree
9558 initialize_reference (tree type, tree expr,
9559 int flags, tsubst_flags_t complain)
9561 conversion *conv;
9562 void *p;
9563 location_t loc = EXPR_LOC_OR_LOC (expr, input_location);
9565 if (type == error_mark_node || error_operand_p (expr))
9566 return error_mark_node;
9568 /* Get the high-water mark for the CONVERSION_OBSTACK. */
9569 p = conversion_obstack_alloc (0);
9571 conv = reference_binding (type, TREE_TYPE (expr), expr, /*c_cast_p=*/false,
9572 flags, complain);
9573 if (!conv || conv->bad_p)
9575 if (complain & tf_error)
9577 if (conv)
9578 convert_like (conv, expr, complain);
9579 else if (!CP_TYPE_CONST_P (TREE_TYPE (type))
9580 && !TYPE_REF_IS_RVALUE (type)
9581 && !real_lvalue_p (expr))
9582 error_at (loc, "invalid initialization of non-const reference of "
9583 "type %qT from an rvalue of type %qT",
9584 type, TREE_TYPE (expr));
9585 else
9586 error_at (loc, "invalid initialization of reference of type "
9587 "%qT from expression of type %qT", type,
9588 TREE_TYPE (expr));
9590 return error_mark_node;
9593 if (conv->kind == ck_ref_bind)
9594 /* Perform the conversion. */
9595 expr = convert_like (conv, expr, complain);
9596 else if (conv->kind == ck_ambig)
9597 /* We gave an error in build_user_type_conversion_1. */
9598 expr = error_mark_node;
9599 else
9600 gcc_unreachable ();
9602 /* Free all the conversions we allocated. */
9603 obstack_free (&conversion_obstack, p);
9605 return expr;
9608 /* Subroutine of extend_ref_init_temps. Possibly extend one initializer,
9609 which is bound either to a reference or a std::initializer_list. */
9611 static tree
9612 extend_ref_init_temps_1 (tree decl, tree init, vec<tree, va_gc> **cleanups)
9614 tree sub = init;
9615 tree *p;
9616 STRIP_NOPS (sub);
9617 if (TREE_CODE (sub) == COMPOUND_EXPR)
9619 TREE_OPERAND (sub, 1)
9620 = extend_ref_init_temps_1 (decl, TREE_OPERAND (sub, 1), cleanups);
9621 return init;
9623 if (TREE_CODE (sub) != ADDR_EXPR)
9624 return init;
9625 /* Deal with binding to a subobject. */
9626 for (p = &TREE_OPERAND (sub, 0); TREE_CODE (*p) == COMPONENT_REF; )
9627 p = &TREE_OPERAND (*p, 0);
9628 if (TREE_CODE (*p) == TARGET_EXPR)
9630 tree subinit = NULL_TREE;
9631 *p = set_up_extended_ref_temp (decl, *p, cleanups, &subinit);
9632 if (subinit)
9633 init = build2 (COMPOUND_EXPR, TREE_TYPE (init), subinit, init);
9634 recompute_tree_invariant_for_addr_expr (sub);
9636 return init;
9639 /* INIT is part of the initializer for DECL. If there are any
9640 reference or initializer lists being initialized, extend their
9641 lifetime to match that of DECL. */
9643 tree
9644 extend_ref_init_temps (tree decl, tree init, vec<tree, va_gc> **cleanups)
9646 tree type = TREE_TYPE (init);
9647 if (processing_template_decl)
9648 return init;
9649 if (TREE_CODE (type) == REFERENCE_TYPE)
9650 init = extend_ref_init_temps_1 (decl, init, cleanups);
9651 else if (is_std_init_list (type))
9653 /* The temporary array underlying a std::initializer_list
9654 is handled like a reference temporary. */
9655 tree ctor = init;
9656 if (TREE_CODE (ctor) == TARGET_EXPR)
9657 ctor = TARGET_EXPR_INITIAL (ctor);
9658 if (TREE_CODE (ctor) == CONSTRUCTOR)
9660 tree array = CONSTRUCTOR_ELT (ctor, 0)->value;
9661 array = extend_ref_init_temps_1 (decl, array, cleanups);
9662 CONSTRUCTOR_ELT (ctor, 0)->value = array;
9665 else if (TREE_CODE (init) == CONSTRUCTOR)
9667 unsigned i;
9668 constructor_elt *p;
9669 vec<constructor_elt, va_gc> *elts = CONSTRUCTOR_ELTS (init);
9670 FOR_EACH_VEC_SAFE_ELT (elts, i, p)
9671 p->value = extend_ref_init_temps (decl, p->value, cleanups);
9674 return init;
9677 /* Returns true iff an initializer for TYPE could contain temporaries that
9678 need to be extended because they are bound to references or
9679 std::initializer_list. */
9681 bool
9682 type_has_extended_temps (tree type)
9684 type = strip_array_types (type);
9685 if (TREE_CODE (type) == REFERENCE_TYPE)
9686 return true;
9687 if (CLASS_TYPE_P (type))
9689 if (is_std_init_list (type))
9690 return true;
9691 for (tree f = next_initializable_field (TYPE_FIELDS (type));
9692 f; f = next_initializable_field (DECL_CHAIN (f)))
9693 if (type_has_extended_temps (TREE_TYPE (f)))
9694 return true;
9696 return false;
9699 /* Returns true iff TYPE is some variant of std::initializer_list. */
9701 bool
9702 is_std_init_list (tree type)
9704 /* Look through typedefs. */
9705 if (!TYPE_P (type))
9706 return false;
9707 if (cxx_dialect == cxx98)
9708 return false;
9709 type = TYPE_MAIN_VARIANT (type);
9710 return (CLASS_TYPE_P (type)
9711 && CP_TYPE_CONTEXT (type) == std_node
9712 && strcmp (TYPE_NAME_STRING (type), "initializer_list") == 0);
9715 /* Returns true iff DECL is a list constructor: i.e. a constructor which
9716 will accept an argument list of a single std::initializer_list<T>. */
9718 bool
9719 is_list_ctor (tree decl)
9721 tree args = FUNCTION_FIRST_USER_PARMTYPE (decl);
9722 tree arg;
9724 if (!args || args == void_list_node)
9725 return false;
9727 arg = non_reference (TREE_VALUE (args));
9728 if (!is_std_init_list (arg))
9729 return false;
9731 args = TREE_CHAIN (args);
9733 if (args && args != void_list_node && !TREE_PURPOSE (args))
9734 /* There are more non-defaulted parms. */
9735 return false;
9737 return true;
9740 #include "gt-cp-call.h"