2013-02-12 Richard Biener <rguenther@suse.de>
[official-gcc.git] / gcc / cp / call.c
blob25dfd51c4f96de8f60237cf546b063561e7d2e1e
1 /* Functions related to invoking methods and overloaded functions.
2 Copyright (C) 1987-2013 Free Software Foundation, Inc.
3 Contributed by Michael Tiemann (tiemann@cygnus.com) and
4 modified by Brendan Kehoe (brendan@cygnus.com).
6 This file is part of GCC.
8 GCC is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 3, or (at your option)
11 any later version.
13 GCC is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3. If not see
20 <http://www.gnu.org/licenses/>. */
23 /* High-level class interface. */
25 #include "config.h"
26 #include "system.h"
27 #include "coretypes.h"
28 #include "tm.h"
29 #include "tree.h"
30 #include "cp-tree.h"
31 #include "flags.h"
32 #include "toplev.h"
33 #include "diagnostic-core.h"
34 #include "intl.h"
35 #include "target.h"
36 #include "convert.h"
37 #include "langhooks.h"
38 #include "c-family/c-objc.h"
39 #include "timevar.h"
40 #include "cgraph.h"
42 /* The various kinds of conversion. */
44 typedef enum conversion_kind {
45 ck_identity,
46 ck_lvalue,
47 ck_qual,
48 ck_std,
49 ck_ptr,
50 ck_pmem,
51 ck_base,
52 ck_ref_bind,
53 ck_user,
54 ck_ambig,
55 ck_list,
56 ck_aggr,
57 ck_rvalue
58 } conversion_kind;
60 /* The rank of the conversion. Order of the enumerals matters; better
61 conversions should come earlier in the list. */
63 typedef enum conversion_rank {
64 cr_identity,
65 cr_exact,
66 cr_promotion,
67 cr_std,
68 cr_pbool,
69 cr_user,
70 cr_ellipsis,
71 cr_bad
72 } conversion_rank;
74 /* An implicit conversion sequence, in the sense of [over.best.ics].
75 The first conversion to be performed is at the end of the chain.
76 That conversion is always a cr_identity conversion. */
78 typedef struct conversion conversion;
79 struct conversion {
80 /* The kind of conversion represented by this step. */
81 conversion_kind kind;
82 /* The rank of this conversion. */
83 conversion_rank rank;
84 BOOL_BITFIELD user_conv_p : 1;
85 BOOL_BITFIELD ellipsis_p : 1;
86 BOOL_BITFIELD this_p : 1;
87 /* True if this conversion would be permitted with a bending of
88 language standards, e.g. disregarding pointer qualifiers or
89 converting integers to pointers. */
90 BOOL_BITFIELD bad_p : 1;
91 /* If KIND is ck_ref_bind ck_base_conv, true to indicate that a
92 temporary should be created to hold the result of the
93 conversion. */
94 BOOL_BITFIELD need_temporary_p : 1;
95 /* If KIND is ck_ptr or ck_pmem, true to indicate that a conversion
96 from a pointer-to-derived to pointer-to-base is being performed. */
97 BOOL_BITFIELD base_p : 1;
98 /* If KIND is ck_ref_bind, true when either an lvalue reference is
99 being bound to an lvalue expression or an rvalue reference is
100 being bound to an rvalue expression. If KIND is ck_rvalue,
101 true when we should treat an lvalue as an rvalue (12.8p33). If
102 KIND is ck_base, always false. */
103 BOOL_BITFIELD rvaluedness_matches_p: 1;
104 BOOL_BITFIELD check_narrowing: 1;
105 /* The type of the expression resulting from the conversion. */
106 tree type;
107 union {
108 /* The next conversion in the chain. Since the conversions are
109 arranged from outermost to innermost, the NEXT conversion will
110 actually be performed before this conversion. This variant is
111 used only when KIND is neither ck_identity, ck_ambig nor
112 ck_list. Please use the next_conversion function instead
113 of using this field directly. */
114 conversion *next;
115 /* The expression at the beginning of the conversion chain. This
116 variant is used only if KIND is ck_identity or ck_ambig. */
117 tree expr;
118 /* The array of conversions for an initializer_list, so this
119 variant is used only when KIN D is ck_list. */
120 conversion **list;
121 } u;
122 /* The function candidate corresponding to this conversion
123 sequence. This field is only used if KIND is ck_user. */
124 struct z_candidate *cand;
127 #define CONVERSION_RANK(NODE) \
128 ((NODE)->bad_p ? cr_bad \
129 : (NODE)->ellipsis_p ? cr_ellipsis \
130 : (NODE)->user_conv_p ? cr_user \
131 : (NODE)->rank)
133 #define BAD_CONVERSION_RANK(NODE) \
134 ((NODE)->ellipsis_p ? cr_ellipsis \
135 : (NODE)->user_conv_p ? cr_user \
136 : (NODE)->rank)
138 static struct obstack conversion_obstack;
139 static bool conversion_obstack_initialized;
140 struct rejection_reason;
142 static struct z_candidate * tourney (struct z_candidate *, tsubst_flags_t);
143 static int equal_functions (tree, tree);
144 static int joust (struct z_candidate *, struct z_candidate *, bool,
145 tsubst_flags_t);
146 static int compare_ics (conversion *, conversion *);
147 static tree build_over_call (struct z_candidate *, int, tsubst_flags_t);
148 static tree build_java_interface_fn_ref (tree, tree);
149 #define convert_like(CONV, EXPR, COMPLAIN) \
150 convert_like_real ((CONV), (EXPR), NULL_TREE, 0, 0, \
151 /*issue_conversion_warnings=*/true, \
152 /*c_cast_p=*/false, (COMPLAIN))
153 #define convert_like_with_context(CONV, EXPR, FN, ARGNO, COMPLAIN ) \
154 convert_like_real ((CONV), (EXPR), (FN), (ARGNO), 0, \
155 /*issue_conversion_warnings=*/true, \
156 /*c_cast_p=*/false, (COMPLAIN))
157 static tree convert_like_real (conversion *, tree, tree, int, int, bool,
158 bool, tsubst_flags_t);
159 static void op_error (location_t, enum tree_code, enum tree_code, tree,
160 tree, tree, bool);
161 static struct z_candidate *build_user_type_conversion_1 (tree, tree, int,
162 tsubst_flags_t);
163 static void print_z_candidate (location_t, const char *, struct z_candidate *);
164 static void print_z_candidates (location_t, struct z_candidate *);
165 static tree build_this (tree);
166 static struct z_candidate *splice_viable (struct z_candidate *, bool, bool *);
167 static bool any_strictly_viable (struct z_candidate *);
168 static struct z_candidate *add_template_candidate
169 (struct z_candidate **, tree, tree, tree, tree, const vec<tree, va_gc> *,
170 tree, tree, tree, int, unification_kind_t, tsubst_flags_t);
171 static struct z_candidate *add_template_candidate_real
172 (struct z_candidate **, tree, tree, tree, tree, const vec<tree, va_gc> *,
173 tree, tree, tree, int, tree, unification_kind_t, tsubst_flags_t);
174 static struct z_candidate *add_template_conv_candidate
175 (struct z_candidate **, tree, tree, tree, const vec<tree, va_gc> *,
176 tree, tree, tree, tsubst_flags_t);
177 static void add_builtin_candidates
178 (struct z_candidate **, enum tree_code, enum tree_code,
179 tree, tree *, int, tsubst_flags_t);
180 static void add_builtin_candidate
181 (struct z_candidate **, enum tree_code, enum tree_code,
182 tree, tree, tree, tree *, tree *, int, tsubst_flags_t);
183 static bool is_complete (tree);
184 static void build_builtin_candidate
185 (struct z_candidate **, tree, tree, tree, tree *, tree *,
186 int, tsubst_flags_t);
187 static struct z_candidate *add_conv_candidate
188 (struct z_candidate **, tree, tree, tree, const vec<tree, va_gc> *, tree,
189 tree, tsubst_flags_t);
190 static struct z_candidate *add_function_candidate
191 (struct z_candidate **, tree, tree, tree, const vec<tree, va_gc> *, tree,
192 tree, int, tsubst_flags_t);
193 static conversion *implicit_conversion (tree, tree, tree, bool, int,
194 tsubst_flags_t);
195 static conversion *standard_conversion (tree, tree, tree, bool, int);
196 static conversion *reference_binding (tree, tree, tree, bool, int,
197 tsubst_flags_t);
198 static conversion *build_conv (conversion_kind, tree, conversion *);
199 static conversion *build_list_conv (tree, tree, int, tsubst_flags_t);
200 static conversion *next_conversion (conversion *);
201 static bool is_subseq (conversion *, conversion *);
202 static conversion *maybe_handle_ref_bind (conversion **);
203 static void maybe_handle_implicit_object (conversion **);
204 static struct z_candidate *add_candidate
205 (struct z_candidate **, tree, tree, const vec<tree, va_gc> *, size_t,
206 conversion **, tree, tree, int, struct rejection_reason *);
207 static tree source_type (conversion *);
208 static void add_warning (struct z_candidate *, struct z_candidate *);
209 static bool reference_compatible_p (tree, tree);
210 static conversion *direct_reference_binding (tree, conversion *);
211 static bool promoted_arithmetic_type_p (tree);
212 static conversion *conditional_conversion (tree, tree, tsubst_flags_t);
213 static char *name_as_c_string (tree, tree, bool *);
214 static tree prep_operand (tree);
215 static void add_candidates (tree, tree, const vec<tree, va_gc> *, tree, tree,
216 bool, tree, tree, int, struct z_candidate **,
217 tsubst_flags_t);
218 static conversion *merge_conversion_sequences (conversion *, conversion *);
219 static bool magic_varargs_p (tree);
220 static tree build_temp (tree, tree, int, diagnostic_t *, tsubst_flags_t);
222 /* Returns nonzero iff the destructor name specified in NAME matches BASETYPE.
223 NAME can take many forms... */
225 bool
226 check_dtor_name (tree basetype, tree name)
228 /* Just accept something we've already complained about. */
229 if (name == error_mark_node)
230 return true;
232 if (TREE_CODE (name) == TYPE_DECL)
233 name = TREE_TYPE (name);
234 else if (TYPE_P (name))
235 /* OK */;
236 else if (TREE_CODE (name) == IDENTIFIER_NODE)
238 if ((MAYBE_CLASS_TYPE_P (basetype)
239 && name == constructor_name (basetype))
240 || (TREE_CODE (basetype) == ENUMERAL_TYPE
241 && name == TYPE_IDENTIFIER (basetype)))
242 return true;
243 else
244 name = get_type_value (name);
246 else
248 /* In the case of:
250 template <class T> struct S { ~S(); };
251 int i;
252 i.~S();
254 NAME will be a class template. */
255 gcc_assert (DECL_CLASS_TEMPLATE_P (name));
256 return false;
259 if (!name || name == error_mark_node)
260 return false;
261 return same_type_p (TYPE_MAIN_VARIANT (basetype), TYPE_MAIN_VARIANT (name));
264 /* We want the address of a function or method. We avoid creating a
265 pointer-to-member function. */
267 tree
268 build_addr_func (tree function, tsubst_flags_t complain)
270 tree type = TREE_TYPE (function);
272 /* We have to do these by hand to avoid real pointer to member
273 functions. */
274 if (TREE_CODE (type) == METHOD_TYPE)
276 if (TREE_CODE (function) == OFFSET_REF)
278 tree object = build_address (TREE_OPERAND (function, 0));
279 return get_member_function_from_ptrfunc (&object,
280 TREE_OPERAND (function, 1),
281 complain);
283 function = build_address (function);
285 else
286 function = decay_conversion (function, complain);
288 return function;
291 /* Build a CALL_EXPR, we can handle FUNCTION_TYPEs, METHOD_TYPEs, or
292 POINTER_TYPE to those. Note, pointer to member function types
293 (TYPE_PTRMEMFUNC_P) must be handled by our callers. There are
294 two variants. build_call_a is the primitive taking an array of
295 arguments, while build_call_n is a wrapper that handles varargs. */
297 tree
298 build_call_n (tree function, int n, ...)
300 if (n == 0)
301 return build_call_a (function, 0, NULL);
302 else
304 tree *argarray = XALLOCAVEC (tree, n);
305 va_list ap;
306 int i;
308 va_start (ap, n);
309 for (i = 0; i < n; i++)
310 argarray[i] = va_arg (ap, tree);
311 va_end (ap);
312 return build_call_a (function, n, argarray);
316 /* Update various flags in cfun and the call itself based on what is being
317 called. Split out of build_call_a so that bot_manip can use it too. */
319 void
320 set_flags_from_callee (tree call)
322 int nothrow;
323 tree decl = get_callee_fndecl (call);
325 /* We check both the decl and the type; a function may be known not to
326 throw without being declared throw(). */
327 nothrow = ((decl && TREE_NOTHROW (decl))
328 || TYPE_NOTHROW_P (TREE_TYPE (TREE_TYPE (CALL_EXPR_FN (call)))));
330 if (!nothrow && at_function_scope_p () && cfun && cp_function_chain)
331 cp_function_chain->can_throw = 1;
333 if (decl && TREE_THIS_VOLATILE (decl) && cfun && cp_function_chain)
334 current_function_returns_abnormally = 1;
336 TREE_NOTHROW (call) = nothrow;
339 tree
340 build_call_a (tree function, int n, tree *argarray)
342 tree decl;
343 tree result_type;
344 tree fntype;
345 int i;
347 function = build_addr_func (function, tf_warning_or_error);
349 gcc_assert (TYPE_PTR_P (TREE_TYPE (function)));
350 fntype = TREE_TYPE (TREE_TYPE (function));
351 gcc_assert (TREE_CODE (fntype) == FUNCTION_TYPE
352 || TREE_CODE (fntype) == METHOD_TYPE);
353 result_type = TREE_TYPE (fntype);
354 /* An rvalue has no cv-qualifiers. */
355 if (SCALAR_TYPE_P (result_type) || VOID_TYPE_P (result_type))
356 result_type = cv_unqualified (result_type);
358 function = build_call_array_loc (input_location,
359 result_type, function, n, argarray);
360 set_flags_from_callee (function);
362 decl = get_callee_fndecl (function);
364 if (decl && !TREE_USED (decl))
366 /* We invoke build_call directly for several library
367 functions. These may have been declared normally if
368 we're building libgcc, so we can't just check
369 DECL_ARTIFICIAL. */
370 gcc_assert (DECL_ARTIFICIAL (decl)
371 || !strncmp (IDENTIFIER_POINTER (DECL_NAME (decl)),
372 "__", 2));
373 mark_used (decl);
376 if (decl && TREE_DEPRECATED (decl))
377 warn_deprecated_use (decl, NULL_TREE);
378 require_complete_eh_spec_types (fntype, decl);
380 TREE_HAS_CONSTRUCTOR (function) = (decl && DECL_CONSTRUCTOR_P (decl));
382 /* Don't pass empty class objects by value. This is useful
383 for tags in STL, which are used to control overload resolution.
384 We don't need to handle other cases of copying empty classes. */
385 if (! decl || ! DECL_BUILT_IN (decl))
386 for (i = 0; i < n; i++)
388 tree arg = CALL_EXPR_ARG (function, i);
389 if (is_empty_class (TREE_TYPE (arg))
390 && ! TREE_ADDRESSABLE (TREE_TYPE (arg)))
392 tree t = build0 (EMPTY_CLASS_EXPR, TREE_TYPE (arg));
393 arg = build2 (COMPOUND_EXPR, TREE_TYPE (t), arg, t);
394 CALL_EXPR_ARG (function, i) = arg;
398 return function;
401 /* Build something of the form ptr->method (args)
402 or object.method (args). This can also build
403 calls to constructors, and find friends.
405 Member functions always take their class variable
406 as a pointer.
408 INSTANCE is a class instance.
410 NAME is the name of the method desired, usually an IDENTIFIER_NODE.
412 PARMS help to figure out what that NAME really refers to.
414 BASETYPE_PATH, if non-NULL, contains a chain from the type of INSTANCE
415 down to the real instance type to use for access checking. We need this
416 information to get protected accesses correct.
418 FLAGS is the logical disjunction of zero or more LOOKUP_
419 flags. See cp-tree.h for more info.
421 If this is all OK, calls build_function_call with the resolved
422 member function.
424 This function must also handle being called to perform
425 initialization, promotion/coercion of arguments, and
426 instantiation of default parameters.
428 Note that NAME may refer to an instance variable name. If
429 `operator()()' is defined for the type of that field, then we return
430 that result. */
432 /* New overloading code. */
434 typedef struct z_candidate z_candidate;
436 typedef struct candidate_warning candidate_warning;
437 struct candidate_warning {
438 z_candidate *loser;
439 candidate_warning *next;
442 /* Information for providing diagnostics about why overloading failed. */
444 enum rejection_reason_code {
445 rr_none,
446 rr_arity,
447 rr_explicit_conversion,
448 rr_template_conversion,
449 rr_arg_conversion,
450 rr_bad_arg_conversion,
451 rr_template_unification,
452 rr_invalid_copy
455 struct conversion_info {
456 /* The index of the argument, 0-based. */
457 int n_arg;
458 /* The type of the actual argument. */
459 tree from_type;
460 /* The type of the formal argument. */
461 tree to_type;
464 struct rejection_reason {
465 enum rejection_reason_code code;
466 union {
467 /* Information about an arity mismatch. */
468 struct {
469 /* The expected number of arguments. */
470 int expected;
471 /* The actual number of arguments in the call. */
472 int actual;
473 /* Whether the call was a varargs call. */
474 bool call_varargs_p;
475 } arity;
476 /* Information about an argument conversion mismatch. */
477 struct conversion_info conversion;
478 /* Same, but for bad argument conversions. */
479 struct conversion_info bad_conversion;
480 /* Information about template unification failures. These are the
481 parameters passed to fn_type_unification. */
482 struct {
483 tree tmpl;
484 tree explicit_targs;
485 int num_targs;
486 const tree *args;
487 unsigned int nargs;
488 tree return_type;
489 unification_kind_t strict;
490 int flags;
491 } template_unification;
492 /* Information about template instantiation failures. These are the
493 parameters passed to instantiate_template. */
494 struct {
495 tree tmpl;
496 tree targs;
497 } template_instantiation;
498 } u;
501 struct z_candidate {
502 /* The FUNCTION_DECL that will be called if this candidate is
503 selected by overload resolution. */
504 tree fn;
505 /* If not NULL_TREE, the first argument to use when calling this
506 function. */
507 tree first_arg;
508 /* The rest of the arguments to use when calling this function. If
509 there are no further arguments this may be NULL or it may be an
510 empty vector. */
511 const vec<tree, va_gc> *args;
512 /* The implicit conversion sequences for each of the arguments to
513 FN. */
514 conversion **convs;
515 /* The number of implicit conversion sequences. */
516 size_t num_convs;
517 /* If FN is a user-defined conversion, the standard conversion
518 sequence from the type returned by FN to the desired destination
519 type. */
520 conversion *second_conv;
521 int viable;
522 struct rejection_reason *reason;
523 /* If FN is a member function, the binfo indicating the path used to
524 qualify the name of FN at the call site. This path is used to
525 determine whether or not FN is accessible if it is selected by
526 overload resolution. The DECL_CONTEXT of FN will always be a
527 (possibly improper) base of this binfo. */
528 tree access_path;
529 /* If FN is a non-static member function, the binfo indicating the
530 subobject to which the `this' pointer should be converted if FN
531 is selected by overload resolution. The type pointed to by
532 the `this' pointer must correspond to the most derived class
533 indicated by the CONVERSION_PATH. */
534 tree conversion_path;
535 tree template_decl;
536 tree explicit_targs;
537 candidate_warning *warnings;
538 z_candidate *next;
541 /* Returns true iff T is a null pointer constant in the sense of
542 [conv.ptr]. */
544 bool
545 null_ptr_cst_p (tree t)
547 /* [conv.ptr]
549 A null pointer constant is an integral constant expression
550 (_expr.const_) rvalue of integer type that evaluates to zero or
551 an rvalue of type std::nullptr_t. */
552 if (NULLPTR_TYPE_P (TREE_TYPE (t)))
553 return true;
554 if (CP_INTEGRAL_TYPE_P (TREE_TYPE (t)))
556 /* Core issue 903 says only literal 0 is a null pointer constant. */
557 if (cxx_dialect < cxx0x)
558 t = maybe_constant_value (t);
559 STRIP_NOPS (t);
560 if (integer_zerop (t) && !TREE_OVERFLOW (t))
561 return true;
563 return false;
566 /* Returns true iff T is a null member pointer value (4.11). */
568 bool
569 null_member_pointer_value_p (tree t)
571 tree type = TREE_TYPE (t);
572 if (!type)
573 return false;
574 else if (TYPE_PTRMEMFUNC_P (type))
575 return (TREE_CODE (t) == CONSTRUCTOR
576 && integer_zerop (CONSTRUCTOR_ELT (t, 0)->value));
577 else if (TYPE_PTRDATAMEM_P (type))
578 return integer_all_onesp (t);
579 else
580 return false;
583 /* Returns nonzero if PARMLIST consists of only default parms,
584 ellipsis, and/or undeduced parameter packs. */
586 bool
587 sufficient_parms_p (const_tree parmlist)
589 for (; parmlist && parmlist != void_list_node;
590 parmlist = TREE_CHAIN (parmlist))
591 if (!TREE_PURPOSE (parmlist)
592 && !PACK_EXPANSION_P (TREE_VALUE (parmlist)))
593 return false;
594 return true;
597 /* Allocate N bytes of memory from the conversion obstack. The memory
598 is zeroed before being returned. */
600 static void *
601 conversion_obstack_alloc (size_t n)
603 void *p;
604 if (!conversion_obstack_initialized)
606 gcc_obstack_init (&conversion_obstack);
607 conversion_obstack_initialized = true;
609 p = obstack_alloc (&conversion_obstack, n);
610 memset (p, 0, n);
611 return p;
614 /* Allocate rejection reasons. */
616 static struct rejection_reason *
617 alloc_rejection (enum rejection_reason_code code)
619 struct rejection_reason *p;
620 p = (struct rejection_reason *) conversion_obstack_alloc (sizeof *p);
621 p->code = code;
622 return p;
625 static struct rejection_reason *
626 arity_rejection (tree first_arg, int expected, int actual)
628 struct rejection_reason *r = alloc_rejection (rr_arity);
629 int adjust = first_arg != NULL_TREE;
630 r->u.arity.expected = expected - adjust;
631 r->u.arity.actual = actual - adjust;
632 return r;
635 static struct rejection_reason *
636 arg_conversion_rejection (tree first_arg, int n_arg, tree from, tree to)
638 struct rejection_reason *r = alloc_rejection (rr_arg_conversion);
639 int adjust = first_arg != NULL_TREE;
640 r->u.conversion.n_arg = n_arg - adjust;
641 r->u.conversion.from_type = from;
642 r->u.conversion.to_type = to;
643 return r;
646 static struct rejection_reason *
647 bad_arg_conversion_rejection (tree first_arg, int n_arg, tree from, tree to)
649 struct rejection_reason *r = alloc_rejection (rr_bad_arg_conversion);
650 int adjust = first_arg != NULL_TREE;
651 r->u.bad_conversion.n_arg = n_arg - adjust;
652 r->u.bad_conversion.from_type = from;
653 r->u.bad_conversion.to_type = to;
654 return r;
657 static struct rejection_reason *
658 explicit_conversion_rejection (tree from, tree to)
660 struct rejection_reason *r = alloc_rejection (rr_explicit_conversion);
661 r->u.conversion.n_arg = 0;
662 r->u.conversion.from_type = from;
663 r->u.conversion.to_type = to;
664 return r;
667 static struct rejection_reason *
668 template_conversion_rejection (tree from, tree to)
670 struct rejection_reason *r = alloc_rejection (rr_template_conversion);
671 r->u.conversion.n_arg = 0;
672 r->u.conversion.from_type = from;
673 r->u.conversion.to_type = to;
674 return r;
677 static struct rejection_reason *
678 template_unification_rejection (tree tmpl, tree explicit_targs, tree targs,
679 const tree *args, unsigned int nargs,
680 tree return_type, unification_kind_t strict,
681 int flags)
683 size_t args_n_bytes = sizeof (*args) * nargs;
684 tree *args1 = (tree *) conversion_obstack_alloc (args_n_bytes);
685 struct rejection_reason *r = alloc_rejection (rr_template_unification);
686 r->u.template_unification.tmpl = tmpl;
687 r->u.template_unification.explicit_targs = explicit_targs;
688 r->u.template_unification.num_targs = TREE_VEC_LENGTH (targs);
689 /* Copy args to our own storage. */
690 memcpy (args1, args, args_n_bytes);
691 r->u.template_unification.args = args1;
692 r->u.template_unification.nargs = nargs;
693 r->u.template_unification.return_type = return_type;
694 r->u.template_unification.strict = strict;
695 r->u.template_unification.flags = flags;
696 return r;
699 static struct rejection_reason *
700 template_unification_error_rejection (void)
702 return alloc_rejection (rr_template_unification);
705 static struct rejection_reason *
706 invalid_copy_with_fn_template_rejection (void)
708 struct rejection_reason *r = alloc_rejection (rr_invalid_copy);
709 return r;
712 /* Dynamically allocate a conversion. */
714 static conversion *
715 alloc_conversion (conversion_kind kind)
717 conversion *c;
718 c = (conversion *) conversion_obstack_alloc (sizeof (conversion));
719 c->kind = kind;
720 return c;
723 #ifdef ENABLE_CHECKING
725 /* Make sure that all memory on the conversion obstack has been
726 freed. */
728 void
729 validate_conversion_obstack (void)
731 if (conversion_obstack_initialized)
732 gcc_assert ((obstack_next_free (&conversion_obstack)
733 == obstack_base (&conversion_obstack)));
736 #endif /* ENABLE_CHECKING */
738 /* Dynamically allocate an array of N conversions. */
740 static conversion **
741 alloc_conversions (size_t n)
743 return (conversion **) conversion_obstack_alloc (n * sizeof (conversion *));
746 static conversion *
747 build_conv (conversion_kind code, tree type, conversion *from)
749 conversion *t;
750 conversion_rank rank = CONVERSION_RANK (from);
752 /* Note that the caller is responsible for filling in t->cand for
753 user-defined conversions. */
754 t = alloc_conversion (code);
755 t->type = type;
756 t->u.next = from;
758 switch (code)
760 case ck_ptr:
761 case ck_pmem:
762 case ck_base:
763 case ck_std:
764 if (rank < cr_std)
765 rank = cr_std;
766 break;
768 case ck_qual:
769 if (rank < cr_exact)
770 rank = cr_exact;
771 break;
773 default:
774 break;
776 t->rank = rank;
777 t->user_conv_p = (code == ck_user || from->user_conv_p);
778 t->bad_p = from->bad_p;
779 t->base_p = false;
780 return t;
783 /* Represent a conversion from CTOR, a braced-init-list, to TYPE, a
784 specialization of std::initializer_list<T>, if such a conversion is
785 possible. */
787 static conversion *
788 build_list_conv (tree type, tree ctor, int flags, tsubst_flags_t complain)
790 tree elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (type), 0);
791 unsigned len = CONSTRUCTOR_NELTS (ctor);
792 conversion **subconvs = alloc_conversions (len);
793 conversion *t;
794 unsigned i;
795 tree val;
797 /* Within a list-initialization we can have more user-defined
798 conversions. */
799 flags &= ~LOOKUP_NO_CONVERSION;
800 /* But no narrowing conversions. */
801 flags |= LOOKUP_NO_NARROWING;
803 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor), i, val)
805 conversion *sub
806 = implicit_conversion (elttype, TREE_TYPE (val), val,
807 false, flags, complain);
808 if (sub == NULL)
809 return NULL;
811 subconvs[i] = sub;
814 t = alloc_conversion (ck_list);
815 t->type = type;
816 t->u.list = subconvs;
817 t->rank = cr_exact;
819 for (i = 0; i < len; ++i)
821 conversion *sub = subconvs[i];
822 if (sub->rank > t->rank)
823 t->rank = sub->rank;
824 if (sub->user_conv_p)
825 t->user_conv_p = true;
826 if (sub->bad_p)
827 t->bad_p = true;
830 return t;
833 /* Return the next conversion of the conversion chain (if applicable),
834 or NULL otherwise. Please use this function instead of directly
835 accessing fields of struct conversion. */
837 static conversion *
838 next_conversion (conversion *conv)
840 if (conv == NULL
841 || conv->kind == ck_identity
842 || conv->kind == ck_ambig
843 || conv->kind == ck_list)
844 return NULL;
845 return conv->u.next;
848 /* Subroutine of build_aggr_conv: check whether CTOR, a braced-init-list,
849 is a valid aggregate initializer for array type ATYPE. */
851 static bool
852 can_convert_array (tree atype, tree ctor, int flags, tsubst_flags_t complain)
854 unsigned i;
855 tree elttype = TREE_TYPE (atype);
856 for (i = 0; i < CONSTRUCTOR_NELTS (ctor); ++i)
858 tree val = CONSTRUCTOR_ELT (ctor, i)->value;
859 bool ok;
860 if (TREE_CODE (elttype) == ARRAY_TYPE
861 && TREE_CODE (val) == CONSTRUCTOR)
862 ok = can_convert_array (elttype, val, flags, complain);
863 else
864 ok = can_convert_arg (elttype, TREE_TYPE (val), val, flags,
865 complain);
866 if (!ok)
867 return false;
869 return true;
872 /* Represent a conversion from CTOR, a braced-init-list, to TYPE, an
873 aggregate class, if such a conversion is possible. */
875 static conversion *
876 build_aggr_conv (tree type, tree ctor, int flags, tsubst_flags_t complain)
878 unsigned HOST_WIDE_INT i = 0;
879 conversion *c;
880 tree field = next_initializable_field (TYPE_FIELDS (type));
881 tree empty_ctor = NULL_TREE;
883 ctor = reshape_init (type, ctor, tf_none);
884 if (ctor == error_mark_node)
885 return NULL;
887 for (; field; field = next_initializable_field (DECL_CHAIN (field)))
889 tree ftype = TREE_TYPE (field);
890 tree val;
891 bool ok;
893 if (i < CONSTRUCTOR_NELTS (ctor))
894 val = CONSTRUCTOR_ELT (ctor, i)->value;
895 else
897 if (empty_ctor == NULL_TREE)
898 empty_ctor = build_constructor (init_list_type_node, NULL);
899 val = empty_ctor;
901 ++i;
903 if (TREE_CODE (ftype) == ARRAY_TYPE
904 && TREE_CODE (val) == CONSTRUCTOR)
905 ok = can_convert_array (ftype, val, flags, complain);
906 else
907 ok = can_convert_arg (ftype, TREE_TYPE (val), val, flags,
908 complain);
910 if (!ok)
911 return NULL;
913 if (TREE_CODE (type) == UNION_TYPE)
914 break;
917 if (i < CONSTRUCTOR_NELTS (ctor))
918 return NULL;
920 c = alloc_conversion (ck_aggr);
921 c->type = type;
922 c->rank = cr_exact;
923 c->user_conv_p = true;
924 c->u.next = NULL;
925 return c;
928 /* Represent a conversion from CTOR, a braced-init-list, to TYPE, an
929 array type, if such a conversion is possible. */
931 static conversion *
932 build_array_conv (tree type, tree ctor, int flags, tsubst_flags_t complain)
934 conversion *c;
935 unsigned HOST_WIDE_INT len = CONSTRUCTOR_NELTS (ctor);
936 tree elttype = TREE_TYPE (type);
937 unsigned i;
938 tree val;
939 bool bad = false;
940 bool user = false;
941 enum conversion_rank rank = cr_exact;
943 if (TYPE_DOMAIN (type))
945 unsigned HOST_WIDE_INT alen = tree_low_cst (array_type_nelts_top (type), 1);
946 if (alen < len)
947 return NULL;
950 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor), i, val)
952 conversion *sub
953 = implicit_conversion (elttype, TREE_TYPE (val), val,
954 false, flags, complain);
955 if (sub == NULL)
956 return NULL;
958 if (sub->rank > rank)
959 rank = sub->rank;
960 if (sub->user_conv_p)
961 user = true;
962 if (sub->bad_p)
963 bad = true;
966 c = alloc_conversion (ck_aggr);
967 c->type = type;
968 c->rank = rank;
969 c->user_conv_p = user;
970 c->bad_p = bad;
971 c->u.next = NULL;
972 return c;
975 /* Represent a conversion from CTOR, a braced-init-list, to TYPE, a
976 complex type, if such a conversion is possible. */
978 static conversion *
979 build_complex_conv (tree type, tree ctor, int flags,
980 tsubst_flags_t complain)
982 conversion *c;
983 unsigned HOST_WIDE_INT len = CONSTRUCTOR_NELTS (ctor);
984 tree elttype = TREE_TYPE (type);
985 unsigned i;
986 tree val;
987 bool bad = false;
988 bool user = false;
989 enum conversion_rank rank = cr_exact;
991 if (len != 2)
992 return NULL;
994 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor), i, val)
996 conversion *sub
997 = implicit_conversion (elttype, TREE_TYPE (val), val,
998 false, flags, complain);
999 if (sub == NULL)
1000 return NULL;
1002 if (sub->rank > rank)
1003 rank = sub->rank;
1004 if (sub->user_conv_p)
1005 user = true;
1006 if (sub->bad_p)
1007 bad = true;
1010 c = alloc_conversion (ck_aggr);
1011 c->type = type;
1012 c->rank = rank;
1013 c->user_conv_p = user;
1014 c->bad_p = bad;
1015 c->u.next = NULL;
1016 return c;
1019 /* Build a representation of the identity conversion from EXPR to
1020 itself. The TYPE should match the type of EXPR, if EXPR is non-NULL. */
1022 static conversion *
1023 build_identity_conv (tree type, tree expr)
1025 conversion *c;
1027 c = alloc_conversion (ck_identity);
1028 c->type = type;
1029 c->u.expr = expr;
1031 return c;
1034 /* Converting from EXPR to TYPE was ambiguous in the sense that there
1035 were multiple user-defined conversions to accomplish the job.
1036 Build a conversion that indicates that ambiguity. */
1038 static conversion *
1039 build_ambiguous_conv (tree type, tree expr)
1041 conversion *c;
1043 c = alloc_conversion (ck_ambig);
1044 c->type = type;
1045 c->u.expr = expr;
1047 return c;
1050 tree
1051 strip_top_quals (tree t)
1053 if (TREE_CODE (t) == ARRAY_TYPE)
1054 return t;
1055 return cp_build_qualified_type (t, 0);
1058 /* Returns the standard conversion path (see [conv]) from type FROM to type
1059 TO, if any. For proper handling of null pointer constants, you must
1060 also pass the expression EXPR to convert from. If C_CAST_P is true,
1061 this conversion is coming from a C-style cast. */
1063 static conversion *
1064 standard_conversion (tree to, tree from, tree expr, bool c_cast_p,
1065 int flags)
1067 enum tree_code fcode, tcode;
1068 conversion *conv;
1069 bool fromref = false;
1070 tree qualified_to;
1072 to = non_reference (to);
1073 if (TREE_CODE (from) == REFERENCE_TYPE)
1075 fromref = true;
1076 from = TREE_TYPE (from);
1078 qualified_to = to;
1079 to = strip_top_quals (to);
1080 from = strip_top_quals (from);
1082 if ((TYPE_PTRFN_P (to) || TYPE_PTRMEMFUNC_P (to))
1083 && expr && type_unknown_p (expr))
1085 tsubst_flags_t tflags = tf_conv;
1086 expr = instantiate_type (to, expr, tflags);
1087 if (expr == error_mark_node)
1088 return NULL;
1089 from = TREE_TYPE (expr);
1092 fcode = TREE_CODE (from);
1093 tcode = TREE_CODE (to);
1095 conv = build_identity_conv (from, expr);
1096 if (fcode == FUNCTION_TYPE || fcode == ARRAY_TYPE)
1098 from = type_decays_to (from);
1099 fcode = TREE_CODE (from);
1100 conv = build_conv (ck_lvalue, from, conv);
1102 else if (fromref || (expr && lvalue_p (expr)))
1104 if (expr)
1106 tree bitfield_type;
1107 bitfield_type = is_bitfield_expr_with_lowered_type (expr);
1108 if (bitfield_type)
1110 from = strip_top_quals (bitfield_type);
1111 fcode = TREE_CODE (from);
1114 conv = build_conv (ck_rvalue, from, conv);
1115 if (flags & LOOKUP_PREFER_RVALUE)
1116 conv->rvaluedness_matches_p = true;
1119 /* Allow conversion between `__complex__' data types. */
1120 if (tcode == COMPLEX_TYPE && fcode == COMPLEX_TYPE)
1122 /* The standard conversion sequence to convert FROM to TO is
1123 the standard conversion sequence to perform componentwise
1124 conversion. */
1125 conversion *part_conv = standard_conversion
1126 (TREE_TYPE (to), TREE_TYPE (from), NULL_TREE, c_cast_p, flags);
1128 if (part_conv)
1130 conv = build_conv (part_conv->kind, to, conv);
1131 conv->rank = part_conv->rank;
1133 else
1134 conv = NULL;
1136 return conv;
1139 if (same_type_p (from, to))
1141 if (CLASS_TYPE_P (to) && conv->kind == ck_rvalue)
1142 conv->type = qualified_to;
1143 return conv;
1146 /* [conv.ptr]
1147 A null pointer constant can be converted to a pointer type; ... A
1148 null pointer constant of integral type can be converted to an
1149 rvalue of type std::nullptr_t. */
1150 if ((tcode == POINTER_TYPE || TYPE_PTRMEM_P (to)
1151 || NULLPTR_TYPE_P (to))
1152 && expr && null_ptr_cst_p (expr))
1153 conv = build_conv (ck_std, to, conv);
1154 else if ((tcode == INTEGER_TYPE && fcode == POINTER_TYPE)
1155 || (tcode == POINTER_TYPE && fcode == INTEGER_TYPE))
1157 /* For backwards brain damage compatibility, allow interconversion of
1158 pointers and integers with a pedwarn. */
1159 conv = build_conv (ck_std, to, conv);
1160 conv->bad_p = true;
1162 else if (UNSCOPED_ENUM_P (to) && fcode == INTEGER_TYPE)
1164 /* For backwards brain damage compatibility, allow interconversion of
1165 enums and integers with a pedwarn. */
1166 conv = build_conv (ck_std, to, conv);
1167 conv->bad_p = true;
1169 else if ((tcode == POINTER_TYPE && fcode == POINTER_TYPE)
1170 || (TYPE_PTRDATAMEM_P (to) && TYPE_PTRDATAMEM_P (from)))
1172 tree to_pointee;
1173 tree from_pointee;
1175 if (tcode == POINTER_TYPE
1176 && same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (from),
1177 TREE_TYPE (to)))
1179 else if (VOID_TYPE_P (TREE_TYPE (to))
1180 && !TYPE_PTRDATAMEM_P (from)
1181 && TREE_CODE (TREE_TYPE (from)) != FUNCTION_TYPE)
1183 tree nfrom = TREE_TYPE (from);
1184 from = build_pointer_type
1185 (cp_build_qualified_type (void_type_node,
1186 cp_type_quals (nfrom)));
1187 conv = build_conv (ck_ptr, from, conv);
1189 else if (TYPE_PTRDATAMEM_P (from))
1191 tree fbase = TYPE_PTRMEM_CLASS_TYPE (from);
1192 tree tbase = TYPE_PTRMEM_CLASS_TYPE (to);
1194 if (DERIVED_FROM_P (fbase, tbase)
1195 && (same_type_ignoring_top_level_qualifiers_p
1196 (TYPE_PTRMEM_POINTED_TO_TYPE (from),
1197 TYPE_PTRMEM_POINTED_TO_TYPE (to))))
1199 from = build_ptrmem_type (tbase,
1200 TYPE_PTRMEM_POINTED_TO_TYPE (from));
1201 conv = build_conv (ck_pmem, from, conv);
1203 else if (!same_type_p (fbase, tbase))
1204 return NULL;
1206 else if (CLASS_TYPE_P (TREE_TYPE (from))
1207 && CLASS_TYPE_P (TREE_TYPE (to))
1208 /* [conv.ptr]
1210 An rvalue of type "pointer to cv D," where D is a
1211 class type, can be converted to an rvalue of type
1212 "pointer to cv B," where B is a base class (clause
1213 _class.derived_) of D. If B is an inaccessible
1214 (clause _class.access_) or ambiguous
1215 (_class.member.lookup_) base class of D, a program
1216 that necessitates this conversion is ill-formed.
1217 Therefore, we use DERIVED_FROM_P, and do not check
1218 access or uniqueness. */
1219 && DERIVED_FROM_P (TREE_TYPE (to), TREE_TYPE (from)))
1221 from =
1222 cp_build_qualified_type (TREE_TYPE (to),
1223 cp_type_quals (TREE_TYPE (from)));
1224 from = build_pointer_type (from);
1225 conv = build_conv (ck_ptr, from, conv);
1226 conv->base_p = true;
1229 if (tcode == POINTER_TYPE)
1231 to_pointee = TREE_TYPE (to);
1232 from_pointee = TREE_TYPE (from);
1234 else
1236 to_pointee = TYPE_PTRMEM_POINTED_TO_TYPE (to);
1237 from_pointee = TYPE_PTRMEM_POINTED_TO_TYPE (from);
1240 if (same_type_p (from, to))
1241 /* OK */;
1242 else if (c_cast_p && comp_ptr_ttypes_const (to, from))
1243 /* In a C-style cast, we ignore CV-qualification because we
1244 are allowed to perform a static_cast followed by a
1245 const_cast. */
1246 conv = build_conv (ck_qual, to, conv);
1247 else if (!c_cast_p && comp_ptr_ttypes (to_pointee, from_pointee))
1248 conv = build_conv (ck_qual, to, conv);
1249 else if (expr && string_conv_p (to, expr, 0))
1250 /* converting from string constant to char *. */
1251 conv = build_conv (ck_qual, to, conv);
1252 /* Allow conversions among compatible ObjC pointer types (base
1253 conversions have been already handled above). */
1254 else if (c_dialect_objc ()
1255 && objc_compare_types (to, from, -4, NULL_TREE))
1256 conv = build_conv (ck_ptr, to, conv);
1257 else if (ptr_reasonably_similar (to_pointee, from_pointee))
1259 conv = build_conv (ck_ptr, to, conv);
1260 conv->bad_p = true;
1262 else
1263 return NULL;
1265 from = to;
1267 else if (TYPE_PTRMEMFUNC_P (to) && TYPE_PTRMEMFUNC_P (from))
1269 tree fromfn = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (from));
1270 tree tofn = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (to));
1271 tree fbase = class_of_this_parm (fromfn);
1272 tree tbase = class_of_this_parm (tofn);
1274 if (!DERIVED_FROM_P (fbase, tbase)
1275 || !same_type_p (static_fn_type (fromfn),
1276 static_fn_type (tofn)))
1277 return NULL;
1279 from = build_memfn_type (fromfn, tbase, cp_type_quals (tbase));
1280 from = build_ptrmemfunc_type (build_pointer_type (from));
1281 conv = build_conv (ck_pmem, from, conv);
1282 conv->base_p = true;
1284 else if (tcode == BOOLEAN_TYPE)
1286 /* [conv.bool]
1288 An rvalue of arithmetic, unscoped enumeration, pointer, or
1289 pointer to member type can be converted to an rvalue of type
1290 bool. ... An rvalue of type std::nullptr_t can be converted
1291 to an rvalue of type bool; */
1292 if (ARITHMETIC_TYPE_P (from)
1293 || UNSCOPED_ENUM_P (from)
1294 || fcode == POINTER_TYPE
1295 || TYPE_PTRMEM_P (from)
1296 || NULLPTR_TYPE_P (from))
1298 conv = build_conv (ck_std, to, conv);
1299 if (fcode == POINTER_TYPE
1300 || TYPE_PTRDATAMEM_P (from)
1301 || (TYPE_PTRMEMFUNC_P (from)
1302 && conv->rank < cr_pbool)
1303 || NULLPTR_TYPE_P (from))
1304 conv->rank = cr_pbool;
1305 return conv;
1308 return NULL;
1310 /* We don't check for ENUMERAL_TYPE here because there are no standard
1311 conversions to enum type. */
1312 /* As an extension, allow conversion to complex type. */
1313 else if (ARITHMETIC_TYPE_P (to))
1315 if (! (INTEGRAL_CODE_P (fcode) || fcode == REAL_TYPE)
1316 || SCOPED_ENUM_P (from))
1317 return NULL;
1318 conv = build_conv (ck_std, to, conv);
1320 /* Give this a better rank if it's a promotion. */
1321 if (same_type_p (to, type_promotes_to (from))
1322 && next_conversion (conv)->rank <= cr_promotion)
1323 conv->rank = cr_promotion;
1325 else if (fcode == VECTOR_TYPE && tcode == VECTOR_TYPE
1326 && vector_types_convertible_p (from, to, false))
1327 return build_conv (ck_std, to, conv);
1328 else if (MAYBE_CLASS_TYPE_P (to) && MAYBE_CLASS_TYPE_P (from)
1329 && is_properly_derived_from (from, to))
1331 if (conv->kind == ck_rvalue)
1332 conv = next_conversion (conv);
1333 conv = build_conv (ck_base, to, conv);
1334 /* The derived-to-base conversion indicates the initialization
1335 of a parameter with base type from an object of a derived
1336 type. A temporary object is created to hold the result of
1337 the conversion unless we're binding directly to a reference. */
1338 conv->need_temporary_p = !(flags & LOOKUP_NO_TEMP_BIND);
1340 else
1341 return NULL;
1343 if (flags & LOOKUP_NO_NARROWING)
1344 conv->check_narrowing = true;
1346 return conv;
1349 /* Returns nonzero if T1 is reference-related to T2. */
1351 bool
1352 reference_related_p (tree t1, tree t2)
1354 if (t1 == error_mark_node || t2 == error_mark_node)
1355 return false;
1357 t1 = TYPE_MAIN_VARIANT (t1);
1358 t2 = TYPE_MAIN_VARIANT (t2);
1360 /* [dcl.init.ref]
1362 Given types "cv1 T1" and "cv2 T2," "cv1 T1" is reference-related
1363 to "cv2 T2" if T1 is the same type as T2, or T1 is a base class
1364 of T2. */
1365 return (same_type_p (t1, t2)
1366 || (CLASS_TYPE_P (t1) && CLASS_TYPE_P (t2)
1367 && DERIVED_FROM_P (t1, t2)));
1370 /* Returns nonzero if T1 is reference-compatible with T2. */
1372 static bool
1373 reference_compatible_p (tree t1, tree t2)
1375 /* [dcl.init.ref]
1377 "cv1 T1" is reference compatible with "cv2 T2" if T1 is
1378 reference-related to T2 and cv1 is the same cv-qualification as,
1379 or greater cv-qualification than, cv2. */
1380 return (reference_related_p (t1, t2)
1381 && at_least_as_qualified_p (t1, t2));
1384 /* A reference of the indicated TYPE is being bound directly to the
1385 expression represented by the implicit conversion sequence CONV.
1386 Return a conversion sequence for this binding. */
1388 static conversion *
1389 direct_reference_binding (tree type, conversion *conv)
1391 tree t;
1393 gcc_assert (TREE_CODE (type) == REFERENCE_TYPE);
1394 gcc_assert (TREE_CODE (conv->type) != REFERENCE_TYPE);
1396 t = TREE_TYPE (type);
1398 /* [over.ics.rank]
1400 When a parameter of reference type binds directly
1401 (_dcl.init.ref_) to an argument expression, the implicit
1402 conversion sequence is the identity conversion, unless the
1403 argument expression has a type that is a derived class of the
1404 parameter type, in which case the implicit conversion sequence is
1405 a derived-to-base Conversion.
1407 If the parameter binds directly to the result of applying a
1408 conversion function to the argument expression, the implicit
1409 conversion sequence is a user-defined conversion sequence
1410 (_over.ics.user_), with the second standard conversion sequence
1411 either an identity conversion or, if the conversion function
1412 returns an entity of a type that is a derived class of the
1413 parameter type, a derived-to-base conversion. */
1414 if (!same_type_ignoring_top_level_qualifiers_p (t, conv->type))
1416 /* Represent the derived-to-base conversion. */
1417 conv = build_conv (ck_base, t, conv);
1418 /* We will actually be binding to the base-class subobject in
1419 the derived class, so we mark this conversion appropriately.
1420 That way, convert_like knows not to generate a temporary. */
1421 conv->need_temporary_p = false;
1423 return build_conv (ck_ref_bind, type, conv);
1426 /* Returns the conversion path from type FROM to reference type TO for
1427 purposes of reference binding. For lvalue binding, either pass a
1428 reference type to FROM or an lvalue expression to EXPR. If the
1429 reference will be bound to a temporary, NEED_TEMPORARY_P is set for
1430 the conversion returned. If C_CAST_P is true, this
1431 conversion is coming from a C-style cast. */
1433 static conversion *
1434 reference_binding (tree rto, tree rfrom, tree expr, bool c_cast_p, int flags,
1435 tsubst_flags_t complain)
1437 conversion *conv = NULL;
1438 tree to = TREE_TYPE (rto);
1439 tree from = rfrom;
1440 tree tfrom;
1441 bool related_p;
1442 bool compatible_p;
1443 cp_lvalue_kind gl_kind;
1444 bool is_lvalue;
1446 if (TREE_CODE (to) == FUNCTION_TYPE && expr && type_unknown_p (expr))
1448 expr = instantiate_type (to, expr, tf_none);
1449 if (expr == error_mark_node)
1450 return NULL;
1451 from = TREE_TYPE (expr);
1454 if (expr && BRACE_ENCLOSED_INITIALIZER_P (expr))
1456 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
1457 conv = implicit_conversion (to, from, expr, c_cast_p,
1458 flags, complain);
1459 if (!CLASS_TYPE_P (to)
1460 && CONSTRUCTOR_NELTS (expr) == 1)
1462 expr = CONSTRUCTOR_ELT (expr, 0)->value;
1463 if (error_operand_p (expr))
1464 return NULL;
1465 from = TREE_TYPE (expr);
1469 if (TREE_CODE (from) == REFERENCE_TYPE)
1471 from = TREE_TYPE (from);
1472 if (!TYPE_REF_IS_RVALUE (rfrom)
1473 || TREE_CODE (from) == FUNCTION_TYPE)
1474 gl_kind = clk_ordinary;
1475 else
1476 gl_kind = clk_rvalueref;
1478 else if (expr)
1480 gl_kind = lvalue_kind (expr);
1481 if (gl_kind & clk_class)
1482 /* A class prvalue is not a glvalue. */
1483 gl_kind = clk_none;
1485 else
1486 gl_kind = clk_none;
1487 is_lvalue = gl_kind && !(gl_kind & clk_rvalueref);
1489 tfrom = from;
1490 if ((gl_kind & clk_bitfield) != 0)
1491 tfrom = unlowered_expr_type (expr);
1493 /* Figure out whether or not the types are reference-related and
1494 reference compatible. We have do do this after stripping
1495 references from FROM. */
1496 related_p = reference_related_p (to, tfrom);
1497 /* If this is a C cast, first convert to an appropriately qualified
1498 type, so that we can later do a const_cast to the desired type. */
1499 if (related_p && c_cast_p
1500 && !at_least_as_qualified_p (to, tfrom))
1501 to = cp_build_qualified_type (to, cp_type_quals (tfrom));
1502 compatible_p = reference_compatible_p (to, tfrom);
1504 /* Directly bind reference when target expression's type is compatible with
1505 the reference and expression is an lvalue. In DR391, the wording in
1506 [8.5.3/5 dcl.init.ref] is changed to also require direct bindings for
1507 const and rvalue references to rvalues of compatible class type.
1508 We should also do direct bindings for non-class xvalues. */
1509 if (compatible_p
1510 && (is_lvalue
1511 || (((CP_TYPE_CONST_NON_VOLATILE_P (to)
1512 && !(flags & LOOKUP_NO_RVAL_BIND))
1513 || TYPE_REF_IS_RVALUE (rto))
1514 && (gl_kind
1515 || (!(flags & LOOKUP_NO_TEMP_BIND)
1516 && (CLASS_TYPE_P (from)
1517 || TREE_CODE (from) == ARRAY_TYPE))))))
1519 /* [dcl.init.ref]
1521 If the initializer expression
1523 -- is an lvalue (but not an lvalue for a bit-field), and "cv1 T1"
1524 is reference-compatible with "cv2 T2,"
1526 the reference is bound directly to the initializer expression
1527 lvalue.
1529 [...]
1530 If the initializer expression is an rvalue, with T2 a class type,
1531 and "cv1 T1" is reference-compatible with "cv2 T2", the reference
1532 is bound to the object represented by the rvalue or to a sub-object
1533 within that object. */
1535 conv = build_identity_conv (tfrom, expr);
1536 conv = direct_reference_binding (rto, conv);
1538 if (flags & LOOKUP_PREFER_RVALUE)
1539 /* The top-level caller requested that we pretend that the lvalue
1540 be treated as an rvalue. */
1541 conv->rvaluedness_matches_p = TYPE_REF_IS_RVALUE (rto);
1542 else if (TREE_CODE (rfrom) == REFERENCE_TYPE)
1543 /* Handle rvalue reference to function properly. */
1544 conv->rvaluedness_matches_p
1545 = (TYPE_REF_IS_RVALUE (rto) == TYPE_REF_IS_RVALUE (rfrom));
1546 else
1547 conv->rvaluedness_matches_p
1548 = (TYPE_REF_IS_RVALUE (rto) == !is_lvalue);
1550 if ((gl_kind & clk_bitfield) != 0
1551 || ((gl_kind & clk_packed) != 0 && !TYPE_PACKED (to)))
1552 /* For the purposes of overload resolution, we ignore the fact
1553 this expression is a bitfield or packed field. (In particular,
1554 [over.ics.ref] says specifically that a function with a
1555 non-const reference parameter is viable even if the
1556 argument is a bitfield.)
1558 However, when we actually call the function we must create
1559 a temporary to which to bind the reference. If the
1560 reference is volatile, or isn't const, then we cannot make
1561 a temporary, so we just issue an error when the conversion
1562 actually occurs. */
1563 conv->need_temporary_p = true;
1565 /* Don't allow binding of lvalues (other than function lvalues) to
1566 rvalue references. */
1567 if (is_lvalue && TYPE_REF_IS_RVALUE (rto)
1568 && TREE_CODE (to) != FUNCTION_TYPE
1569 && !(flags & LOOKUP_PREFER_RVALUE))
1570 conv->bad_p = true;
1572 return conv;
1574 /* [class.conv.fct] A conversion function is never used to convert a
1575 (possibly cv-qualified) object to the (possibly cv-qualified) same
1576 object type (or a reference to it), to a (possibly cv-qualified) base
1577 class of that type (or a reference to it).... */
1578 else if (CLASS_TYPE_P (from) && !related_p
1579 && !(flags & LOOKUP_NO_CONVERSION))
1581 /* [dcl.init.ref]
1583 If the initializer expression
1585 -- has a class type (i.e., T2 is a class type) can be
1586 implicitly converted to an lvalue of type "cv3 T3," where
1587 "cv1 T1" is reference-compatible with "cv3 T3". (this
1588 conversion is selected by enumerating the applicable
1589 conversion functions (_over.match.ref_) and choosing the
1590 best one through overload resolution. (_over.match_).
1592 the reference is bound to the lvalue result of the conversion
1593 in the second case. */
1594 z_candidate *cand = build_user_type_conversion_1 (rto, expr, flags,
1595 complain);
1596 if (cand)
1597 return cand->second_conv;
1600 /* From this point on, we conceptually need temporaries, even if we
1601 elide them. Only the cases above are "direct bindings". */
1602 if (flags & LOOKUP_NO_TEMP_BIND)
1603 return NULL;
1605 /* [over.ics.rank]
1607 When a parameter of reference type is not bound directly to an
1608 argument expression, the conversion sequence is the one required
1609 to convert the argument expression to the underlying type of the
1610 reference according to _over.best.ics_. Conceptually, this
1611 conversion sequence corresponds to copy-initializing a temporary
1612 of the underlying type with the argument expression. Any
1613 difference in top-level cv-qualification is subsumed by the
1614 initialization itself and does not constitute a conversion. */
1616 /* [dcl.init.ref]
1618 Otherwise, the reference shall be to a non-volatile const type.
1620 Under C++0x, [8.5.3/5 dcl.init.ref] it may also be an rvalue reference */
1621 if (!CP_TYPE_CONST_NON_VOLATILE_P (to) && !TYPE_REF_IS_RVALUE (rto))
1622 return NULL;
1624 /* [dcl.init.ref]
1626 Otherwise, a temporary of type "cv1 T1" is created and
1627 initialized from the initializer expression using the rules for a
1628 non-reference copy initialization. If T1 is reference-related to
1629 T2, cv1 must be the same cv-qualification as, or greater
1630 cv-qualification than, cv2; otherwise, the program is ill-formed. */
1631 if (related_p && !at_least_as_qualified_p (to, from))
1632 return NULL;
1634 /* We're generating a temporary now, but don't bind any more in the
1635 conversion (specifically, don't slice the temporary returned by a
1636 conversion operator). */
1637 flags |= LOOKUP_NO_TEMP_BIND;
1639 /* Core issue 899: When [copy-]initializing a temporary to be bound
1640 to the first parameter of a copy constructor (12.8) called with
1641 a single argument in the context of direct-initialization,
1642 explicit conversion functions are also considered.
1644 So don't set LOOKUP_ONLYCONVERTING in that case. */
1645 if (!(flags & LOOKUP_COPY_PARM))
1646 flags |= LOOKUP_ONLYCONVERTING;
1648 if (!conv)
1649 conv = implicit_conversion (to, from, expr, c_cast_p,
1650 flags, complain);
1651 if (!conv)
1652 return NULL;
1654 conv = build_conv (ck_ref_bind, rto, conv);
1655 /* This reference binding, unlike those above, requires the
1656 creation of a temporary. */
1657 conv->need_temporary_p = true;
1658 conv->rvaluedness_matches_p = TYPE_REF_IS_RVALUE (rto);
1660 return conv;
1663 /* Returns the implicit conversion sequence (see [over.ics]) from type
1664 FROM to type TO. The optional expression EXPR may affect the
1665 conversion. FLAGS are the usual overloading flags. If C_CAST_P is
1666 true, this conversion is coming from a C-style cast. */
1668 static conversion *
1669 implicit_conversion (tree to, tree from, tree expr, bool c_cast_p,
1670 int flags, tsubst_flags_t complain)
1672 conversion *conv;
1674 if (from == error_mark_node || to == error_mark_node
1675 || expr == error_mark_node)
1676 return NULL;
1678 /* Other flags only apply to the primary function in overload
1679 resolution, or after we've chosen one. */
1680 flags &= (LOOKUP_ONLYCONVERTING|LOOKUP_NO_CONVERSION|LOOKUP_COPY_PARM
1681 |LOOKUP_NO_TEMP_BIND|LOOKUP_NO_RVAL_BIND|LOOKUP_PREFER_RVALUE
1682 |LOOKUP_NO_NARROWING|LOOKUP_PROTECT);
1684 /* FIXME: actually we don't want warnings either, but we can't just
1685 have 'complain &= ~(tf_warning|tf_error)' because it would cause
1686 the regression of, eg, g++.old-deja/g++.benjamin/16077.C.
1687 We really ought not to issue that warning until we've committed
1688 to that conversion. */
1689 complain &= ~tf_error;
1691 if (TREE_CODE (to) == REFERENCE_TYPE)
1692 conv = reference_binding (to, from, expr, c_cast_p, flags, complain);
1693 else
1694 conv = standard_conversion (to, from, expr, c_cast_p, flags);
1696 if (conv)
1697 return conv;
1699 if (expr && BRACE_ENCLOSED_INITIALIZER_P (expr))
1701 if (is_std_init_list (to))
1702 return build_list_conv (to, expr, flags, complain);
1704 /* As an extension, allow list-initialization of _Complex. */
1705 if (TREE_CODE (to) == COMPLEX_TYPE)
1707 conv = build_complex_conv (to, expr, flags, complain);
1708 if (conv)
1709 return conv;
1712 /* Allow conversion from an initializer-list with one element to a
1713 scalar type. */
1714 if (SCALAR_TYPE_P (to))
1716 int nelts = CONSTRUCTOR_NELTS (expr);
1717 tree elt;
1719 if (nelts == 0)
1720 elt = build_value_init (to, tf_none);
1721 else if (nelts == 1)
1722 elt = CONSTRUCTOR_ELT (expr, 0)->value;
1723 else
1724 elt = error_mark_node;
1726 conv = implicit_conversion (to, TREE_TYPE (elt), elt,
1727 c_cast_p, flags, complain);
1728 if (conv)
1730 conv->check_narrowing = true;
1731 if (BRACE_ENCLOSED_INITIALIZER_P (elt))
1732 /* Too many levels of braces, i.e. '{{1}}'. */
1733 conv->bad_p = true;
1734 return conv;
1737 else if (TREE_CODE (to) == ARRAY_TYPE)
1738 return build_array_conv (to, expr, flags, complain);
1741 if (expr != NULL_TREE
1742 && (MAYBE_CLASS_TYPE_P (from)
1743 || MAYBE_CLASS_TYPE_P (to))
1744 && (flags & LOOKUP_NO_CONVERSION) == 0)
1746 struct z_candidate *cand;
1748 if (CLASS_TYPE_P (to)
1749 && BRACE_ENCLOSED_INITIALIZER_P (expr)
1750 && !CLASSTYPE_NON_AGGREGATE (complete_type (to)))
1751 return build_aggr_conv (to, expr, flags, complain);
1753 cand = build_user_type_conversion_1 (to, expr, flags, complain);
1754 if (cand)
1755 conv = cand->second_conv;
1757 /* We used to try to bind a reference to a temporary here, but that
1758 is now handled after the recursive call to this function at the end
1759 of reference_binding. */
1760 return conv;
1763 return NULL;
1766 /* Add a new entry to the list of candidates. Used by the add_*_candidate
1767 functions. ARGS will not be changed until a single candidate is
1768 selected. */
1770 static struct z_candidate *
1771 add_candidate (struct z_candidate **candidates,
1772 tree fn, tree first_arg, const vec<tree, va_gc> *args,
1773 size_t num_convs, conversion **convs,
1774 tree access_path, tree conversion_path,
1775 int viable, struct rejection_reason *reason)
1777 struct z_candidate *cand = (struct z_candidate *)
1778 conversion_obstack_alloc (sizeof (struct z_candidate));
1780 cand->fn = fn;
1781 cand->first_arg = first_arg;
1782 cand->args = args;
1783 cand->convs = convs;
1784 cand->num_convs = num_convs;
1785 cand->access_path = access_path;
1786 cand->conversion_path = conversion_path;
1787 cand->viable = viable;
1788 cand->reason = reason;
1789 cand->next = *candidates;
1790 *candidates = cand;
1792 return cand;
1795 /* Return the number of remaining arguments in the parameter list
1796 beginning with ARG. */
1798 static int
1799 remaining_arguments (tree arg)
1801 int n;
1803 for (n = 0; arg != NULL_TREE && arg != void_list_node;
1804 arg = TREE_CHAIN (arg))
1805 n++;
1807 return n;
1810 /* Create an overload candidate for the function or method FN called
1811 with the argument list FIRST_ARG/ARGS and add it to CANDIDATES.
1812 FLAGS is passed on to implicit_conversion.
1814 This does not change ARGS.
1816 CTYPE, if non-NULL, is the type we want to pretend this function
1817 comes from for purposes of overload resolution. */
1819 static struct z_candidate *
1820 add_function_candidate (struct z_candidate **candidates,
1821 tree fn, tree ctype, tree first_arg,
1822 const vec<tree, va_gc> *args, tree access_path,
1823 tree conversion_path, int flags,
1824 tsubst_flags_t complain)
1826 tree parmlist = TYPE_ARG_TYPES (TREE_TYPE (fn));
1827 int i, len;
1828 conversion **convs;
1829 tree parmnode;
1830 tree orig_first_arg = first_arg;
1831 int skip;
1832 int viable = 1;
1833 struct rejection_reason *reason = NULL;
1835 /* At this point we should not see any functions which haven't been
1836 explicitly declared, except for friend functions which will have
1837 been found using argument dependent lookup. */
1838 gcc_assert (!DECL_ANTICIPATED (fn) || DECL_HIDDEN_FRIEND_P (fn));
1840 /* The `this', `in_chrg' and VTT arguments to constructors are not
1841 considered in overload resolution. */
1842 if (DECL_CONSTRUCTOR_P (fn))
1844 parmlist = skip_artificial_parms_for (fn, parmlist);
1845 skip = num_artificial_parms_for (fn);
1846 if (skip > 0 && first_arg != NULL_TREE)
1848 --skip;
1849 first_arg = NULL_TREE;
1852 else
1853 skip = 0;
1855 len = vec_safe_length (args) - skip + (first_arg != NULL_TREE ? 1 : 0);
1856 convs = alloc_conversions (len);
1858 /* 13.3.2 - Viable functions [over.match.viable]
1859 First, to be a viable function, a candidate function shall have enough
1860 parameters to agree in number with the arguments in the list.
1862 We need to check this first; otherwise, checking the ICSes might cause
1863 us to produce an ill-formed template instantiation. */
1865 parmnode = parmlist;
1866 for (i = 0; i < len; ++i)
1868 if (parmnode == NULL_TREE || parmnode == void_list_node)
1869 break;
1870 parmnode = TREE_CHAIN (parmnode);
1873 if ((i < len && parmnode)
1874 || !sufficient_parms_p (parmnode))
1876 int remaining = remaining_arguments (parmnode);
1877 viable = 0;
1878 reason = arity_rejection (first_arg, i + remaining, len);
1880 /* When looking for a function from a subobject from an implicit
1881 copy/move constructor/operator=, don't consider anything that takes (a
1882 reference to) an unrelated type. See c++/44909 and core 1092. */
1883 else if (parmlist && (flags & LOOKUP_DEFAULTED))
1885 if (DECL_CONSTRUCTOR_P (fn))
1886 i = 1;
1887 else if (DECL_ASSIGNMENT_OPERATOR_P (fn)
1888 && DECL_OVERLOADED_OPERATOR_P (fn) == NOP_EXPR)
1889 i = 2;
1890 else
1891 i = 0;
1892 if (i && len == i)
1894 parmnode = chain_index (i-1, parmlist);
1895 if (!reference_related_p (non_reference (TREE_VALUE (parmnode)),
1896 ctype))
1897 viable = 0;
1900 /* This only applies at the top level. */
1901 flags &= ~LOOKUP_DEFAULTED;
1904 if (! viable)
1905 goto out;
1907 /* Second, for F to be a viable function, there shall exist for each
1908 argument an implicit conversion sequence that converts that argument
1909 to the corresponding parameter of F. */
1911 parmnode = parmlist;
1913 for (i = 0; i < len; ++i)
1915 tree argtype, to_type;
1916 tree arg;
1917 conversion *t;
1918 int is_this;
1920 if (parmnode == void_list_node)
1921 break;
1923 if (i == 0 && first_arg != NULL_TREE)
1924 arg = first_arg;
1925 else
1926 arg = CONST_CAST_TREE (
1927 (*args)[i + skip - (first_arg != NULL_TREE ? 1 : 0)]);
1928 argtype = lvalue_type (arg);
1930 is_this = (i == 0 && DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
1931 && ! DECL_CONSTRUCTOR_P (fn));
1933 if (parmnode)
1935 tree parmtype = TREE_VALUE (parmnode);
1936 int lflags = flags;
1938 parmnode = TREE_CHAIN (parmnode);
1940 /* The type of the implicit object parameter ('this') for
1941 overload resolution is not always the same as for the
1942 function itself; conversion functions are considered to
1943 be members of the class being converted, and functions
1944 introduced by a using-declaration are considered to be
1945 members of the class that uses them.
1947 Since build_over_call ignores the ICS for the `this'
1948 parameter, we can just change the parm type. */
1949 if (ctype && is_this)
1951 parmtype = cp_build_qualified_type
1952 (ctype, cp_type_quals (TREE_TYPE (parmtype)));
1953 parmtype = build_pointer_type (parmtype);
1956 /* Core issue 899: When [copy-]initializing a temporary to be bound
1957 to the first parameter of a copy constructor (12.8) called with
1958 a single argument in the context of direct-initialization,
1959 explicit conversion functions are also considered.
1961 So set LOOKUP_COPY_PARM to let reference_binding know that
1962 it's being called in that context. We generalize the above
1963 to handle move constructors and template constructors as well;
1964 the standardese should soon be updated similarly. */
1965 if (ctype && i == 0 && (len-skip == 1)
1966 && DECL_CONSTRUCTOR_P (fn)
1967 && parmtype != error_mark_node
1968 && (same_type_ignoring_top_level_qualifiers_p
1969 (non_reference (parmtype), ctype)))
1971 if (!(flags & LOOKUP_ONLYCONVERTING))
1972 lflags |= LOOKUP_COPY_PARM;
1973 /* We allow user-defined conversions within init-lists, but
1974 don't list-initialize the copy parm, as that would mean
1975 using two levels of braces for the same type. */
1976 if ((flags & LOOKUP_LIST_INIT_CTOR)
1977 && BRACE_ENCLOSED_INITIALIZER_P (arg))
1978 lflags |= LOOKUP_NO_CONVERSION;
1980 else
1981 lflags |= LOOKUP_ONLYCONVERTING;
1983 t = implicit_conversion (parmtype, argtype, arg,
1984 /*c_cast_p=*/false, lflags, complain);
1985 to_type = parmtype;
1987 else
1989 t = build_identity_conv (argtype, arg);
1990 t->ellipsis_p = true;
1991 to_type = argtype;
1994 if (t && is_this)
1995 t->this_p = true;
1997 convs[i] = t;
1998 if (! t)
2000 viable = 0;
2001 reason = arg_conversion_rejection (first_arg, i, argtype, to_type);
2002 break;
2005 if (t->bad_p)
2007 viable = -1;
2008 reason = bad_arg_conversion_rejection (first_arg, i, argtype, to_type);
2012 out:
2013 return add_candidate (candidates, fn, orig_first_arg, args, len, convs,
2014 access_path, conversion_path, viable, reason);
2017 /* Create an overload candidate for the conversion function FN which will
2018 be invoked for expression OBJ, producing a pointer-to-function which
2019 will in turn be called with the argument list FIRST_ARG/ARGLIST,
2020 and add it to CANDIDATES. This does not change ARGLIST. FLAGS is
2021 passed on to implicit_conversion.
2023 Actually, we don't really care about FN; we care about the type it
2024 converts to. There may be multiple conversion functions that will
2025 convert to that type, and we rely on build_user_type_conversion_1 to
2026 choose the best one; so when we create our candidate, we record the type
2027 instead of the function. */
2029 static struct z_candidate *
2030 add_conv_candidate (struct z_candidate **candidates, tree fn, tree obj,
2031 tree first_arg, const vec<tree, va_gc> *arglist,
2032 tree access_path, tree conversion_path,
2033 tsubst_flags_t complain)
2035 tree totype = TREE_TYPE (TREE_TYPE (fn));
2036 int i, len, viable, flags;
2037 tree parmlist, parmnode;
2038 conversion **convs;
2039 struct rejection_reason *reason;
2041 for (parmlist = totype; TREE_CODE (parmlist) != FUNCTION_TYPE; )
2042 parmlist = TREE_TYPE (parmlist);
2043 parmlist = TYPE_ARG_TYPES (parmlist);
2045 len = vec_safe_length (arglist) + (first_arg != NULL_TREE ? 1 : 0) + 1;
2046 convs = alloc_conversions (len);
2047 parmnode = parmlist;
2048 viable = 1;
2049 flags = LOOKUP_IMPLICIT;
2050 reason = NULL;
2052 /* Don't bother looking up the same type twice. */
2053 if (*candidates && (*candidates)->fn == totype)
2054 return NULL;
2056 for (i = 0; i < len; ++i)
2058 tree arg, argtype, convert_type = NULL_TREE;
2059 conversion *t;
2061 if (i == 0)
2062 arg = obj;
2063 else if (i == 1 && first_arg != NULL_TREE)
2064 arg = first_arg;
2065 else
2066 arg = (*arglist)[i - (first_arg != NULL_TREE ? 1 : 0) - 1];
2067 argtype = lvalue_type (arg);
2069 if (i == 0)
2071 t = implicit_conversion (totype, argtype, arg, /*c_cast_p=*/false,
2072 flags, complain);
2073 convert_type = totype;
2075 else if (parmnode == void_list_node)
2076 break;
2077 else if (parmnode)
2079 t = implicit_conversion (TREE_VALUE (parmnode), argtype, arg,
2080 /*c_cast_p=*/false, flags, complain);
2081 convert_type = TREE_VALUE (parmnode);
2083 else
2085 t = build_identity_conv (argtype, arg);
2086 t->ellipsis_p = true;
2087 convert_type = argtype;
2090 convs[i] = t;
2091 if (! t)
2092 break;
2094 if (t->bad_p)
2096 viable = -1;
2097 reason = bad_arg_conversion_rejection (NULL_TREE, i, argtype, convert_type);
2100 if (i == 0)
2101 continue;
2103 if (parmnode)
2104 parmnode = TREE_CHAIN (parmnode);
2107 if (i < len
2108 || ! sufficient_parms_p (parmnode))
2110 int remaining = remaining_arguments (parmnode);
2111 viable = 0;
2112 reason = arity_rejection (NULL_TREE, i + remaining, len);
2115 return add_candidate (candidates, totype, first_arg, arglist, len, convs,
2116 access_path, conversion_path, viable, reason);
2119 static void
2120 build_builtin_candidate (struct z_candidate **candidates, tree fnname,
2121 tree type1, tree type2, tree *args, tree *argtypes,
2122 int flags, tsubst_flags_t complain)
2124 conversion *t;
2125 conversion **convs;
2126 size_t num_convs;
2127 int viable = 1, i;
2128 tree types[2];
2129 struct rejection_reason *reason = NULL;
2131 types[0] = type1;
2132 types[1] = type2;
2134 num_convs = args[2] ? 3 : (args[1] ? 2 : 1);
2135 convs = alloc_conversions (num_convs);
2137 /* TRUTH_*_EXPR do "contextual conversion to bool", which means explicit
2138 conversion ops are allowed. We handle that here by just checking for
2139 boolean_type_node because other operators don't ask for it. COND_EXPR
2140 also does contextual conversion to bool for the first operand, but we
2141 handle that in build_conditional_expr, and type1 here is operand 2. */
2142 if (type1 != boolean_type_node)
2143 flags |= LOOKUP_ONLYCONVERTING;
2145 for (i = 0; i < 2; ++i)
2147 if (! args[i])
2148 break;
2150 t = implicit_conversion (types[i], argtypes[i], args[i],
2151 /*c_cast_p=*/false, flags, complain);
2152 if (! t)
2154 viable = 0;
2155 /* We need something for printing the candidate. */
2156 t = build_identity_conv (types[i], NULL_TREE);
2157 reason = arg_conversion_rejection (NULL_TREE, i, argtypes[i],
2158 types[i]);
2160 else if (t->bad_p)
2162 viable = 0;
2163 reason = bad_arg_conversion_rejection (NULL_TREE, i, argtypes[i],
2164 types[i]);
2166 convs[i] = t;
2169 /* For COND_EXPR we rearranged the arguments; undo that now. */
2170 if (args[2])
2172 convs[2] = convs[1];
2173 convs[1] = convs[0];
2174 t = implicit_conversion (boolean_type_node, argtypes[2], args[2],
2175 /*c_cast_p=*/false, flags,
2176 complain);
2177 if (t)
2178 convs[0] = t;
2179 else
2181 viable = 0;
2182 reason = arg_conversion_rejection (NULL_TREE, 0, argtypes[2],
2183 boolean_type_node);
2187 add_candidate (candidates, fnname, /*first_arg=*/NULL_TREE, /*args=*/NULL,
2188 num_convs, convs,
2189 /*access_path=*/NULL_TREE,
2190 /*conversion_path=*/NULL_TREE,
2191 viable, reason);
2194 static bool
2195 is_complete (tree t)
2197 return COMPLETE_TYPE_P (complete_type (t));
2200 /* Returns nonzero if TYPE is a promoted arithmetic type. */
2202 static bool
2203 promoted_arithmetic_type_p (tree type)
2205 /* [over.built]
2207 In this section, the term promoted integral type is used to refer
2208 to those integral types which are preserved by integral promotion
2209 (including e.g. int and long but excluding e.g. char).
2210 Similarly, the term promoted arithmetic type refers to promoted
2211 integral types plus floating types. */
2212 return ((CP_INTEGRAL_TYPE_P (type)
2213 && same_type_p (type_promotes_to (type), type))
2214 || TREE_CODE (type) == REAL_TYPE);
2217 /* Create any builtin operator overload candidates for the operator in
2218 question given the converted operand types TYPE1 and TYPE2. The other
2219 args are passed through from add_builtin_candidates to
2220 build_builtin_candidate.
2222 TYPE1 and TYPE2 may not be permissible, and we must filter them.
2223 If CODE is requires candidates operands of the same type of the kind
2224 of which TYPE1 and TYPE2 are, we add both candidates
2225 CODE (TYPE1, TYPE1) and CODE (TYPE2, TYPE2). */
2227 static void
2228 add_builtin_candidate (struct z_candidate **candidates, enum tree_code code,
2229 enum tree_code code2, tree fnname, tree type1,
2230 tree type2, tree *args, tree *argtypes, int flags,
2231 tsubst_flags_t complain)
2233 switch (code)
2235 case POSTINCREMENT_EXPR:
2236 case POSTDECREMENT_EXPR:
2237 args[1] = integer_zero_node;
2238 type2 = integer_type_node;
2239 break;
2240 default:
2241 break;
2244 switch (code)
2247 /* 4 For every pair T, VQ), where T is an arithmetic or enumeration type,
2248 and VQ is either volatile or empty, there exist candidate operator
2249 functions of the form
2250 VQ T& operator++(VQ T&);
2251 T operator++(VQ T&, int);
2252 5 For every pair T, VQ), where T is an enumeration type or an arithmetic
2253 type other than bool, and VQ is either volatile or empty, there exist
2254 candidate operator functions of the form
2255 VQ T& operator--(VQ T&);
2256 T operator--(VQ T&, int);
2257 6 For every pair T, VQ), where T is a cv-qualified or cv-unqualified
2258 complete object type, and VQ is either volatile or empty, there exist
2259 candidate operator functions of the form
2260 T*VQ& operator++(T*VQ&);
2261 T*VQ& operator--(T*VQ&);
2262 T* operator++(T*VQ&, int);
2263 T* operator--(T*VQ&, int); */
2265 case POSTDECREMENT_EXPR:
2266 case PREDECREMENT_EXPR:
2267 if (TREE_CODE (type1) == BOOLEAN_TYPE)
2268 return;
2269 case POSTINCREMENT_EXPR:
2270 case PREINCREMENT_EXPR:
2271 if (ARITHMETIC_TYPE_P (type1) || TYPE_PTROB_P (type1))
2273 type1 = build_reference_type (type1);
2274 break;
2276 return;
2278 /* 7 For every cv-qualified or cv-unqualified object type T, there
2279 exist candidate operator functions of the form
2281 T& operator*(T*);
2283 8 For every function type T, there exist candidate operator functions of
2284 the form
2285 T& operator*(T*); */
2287 case INDIRECT_REF:
2288 if (TREE_CODE (type1) == POINTER_TYPE
2289 && !uses_template_parms (TREE_TYPE (type1))
2290 && (TYPE_PTROB_P (type1)
2291 || TREE_CODE (TREE_TYPE (type1)) == FUNCTION_TYPE))
2292 break;
2293 return;
2295 /* 9 For every type T, there exist candidate operator functions of the form
2296 T* operator+(T*);
2298 10For every promoted arithmetic type T, there exist candidate operator
2299 functions of the form
2300 T operator+(T);
2301 T operator-(T); */
2303 case UNARY_PLUS_EXPR: /* unary + */
2304 if (TREE_CODE (type1) == POINTER_TYPE)
2305 break;
2306 case NEGATE_EXPR:
2307 if (ARITHMETIC_TYPE_P (type1))
2308 break;
2309 return;
2311 /* 11For every promoted integral type T, there exist candidate operator
2312 functions of the form
2313 T operator~(T); */
2315 case BIT_NOT_EXPR:
2316 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1))
2317 break;
2318 return;
2320 /* 12For every quintuple C1, C2, T, CV1, CV2), where C2 is a class type, C1
2321 is the same type as C2 or is a derived class of C2, T is a complete
2322 object type or a function type, and CV1 and CV2 are cv-qualifier-seqs,
2323 there exist candidate operator functions of the form
2324 CV12 T& operator->*(CV1 C1*, CV2 T C2::*);
2325 where CV12 is the union of CV1 and CV2. */
2327 case MEMBER_REF:
2328 if (TREE_CODE (type1) == POINTER_TYPE
2329 && TYPE_PTRMEM_P (type2))
2331 tree c1 = TREE_TYPE (type1);
2332 tree c2 = TYPE_PTRMEM_CLASS_TYPE (type2);
2334 if (MAYBE_CLASS_TYPE_P (c1) && DERIVED_FROM_P (c2, c1)
2335 && (TYPE_PTRMEMFUNC_P (type2)
2336 || is_complete (TYPE_PTRMEM_POINTED_TO_TYPE (type2))))
2337 break;
2339 return;
2341 /* 13For every pair of promoted arithmetic types L and R, there exist can-
2342 didate operator functions of the form
2343 LR operator*(L, R);
2344 LR operator/(L, R);
2345 LR operator+(L, R);
2346 LR operator-(L, R);
2347 bool operator<(L, R);
2348 bool operator>(L, R);
2349 bool operator<=(L, R);
2350 bool operator>=(L, R);
2351 bool operator==(L, R);
2352 bool operator!=(L, R);
2353 where LR is the result of the usual arithmetic conversions between
2354 types L and R.
2356 14For every pair of types T and I, where T is a cv-qualified or cv-
2357 unqualified complete object type and I is a promoted integral type,
2358 there exist candidate operator functions of the form
2359 T* operator+(T*, I);
2360 T& operator[](T*, I);
2361 T* operator-(T*, I);
2362 T* operator+(I, T*);
2363 T& operator[](I, T*);
2365 15For every T, where T is a pointer to complete object type, there exist
2366 candidate operator functions of the form112)
2367 ptrdiff_t operator-(T, T);
2369 16For every pointer or enumeration type T, there exist candidate operator
2370 functions of the form
2371 bool operator<(T, T);
2372 bool operator>(T, T);
2373 bool operator<=(T, T);
2374 bool operator>=(T, T);
2375 bool operator==(T, T);
2376 bool operator!=(T, T);
2378 17For every pointer to member type T, there exist candidate operator
2379 functions of the form
2380 bool operator==(T, T);
2381 bool operator!=(T, T); */
2383 case MINUS_EXPR:
2384 if (TYPE_PTROB_P (type1) && TYPE_PTROB_P (type2))
2385 break;
2386 if (TYPE_PTROB_P (type1)
2387 && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2389 type2 = ptrdiff_type_node;
2390 break;
2392 case MULT_EXPR:
2393 case TRUNC_DIV_EXPR:
2394 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2395 break;
2396 return;
2398 case EQ_EXPR:
2399 case NE_EXPR:
2400 if ((TYPE_PTRMEMFUNC_P (type1) && TYPE_PTRMEMFUNC_P (type2))
2401 || (TYPE_PTRDATAMEM_P (type1) && TYPE_PTRDATAMEM_P (type2)))
2402 break;
2403 if (TYPE_PTRMEM_P (type1) && null_ptr_cst_p (args[1]))
2405 type2 = type1;
2406 break;
2408 if (TYPE_PTRMEM_P (type2) && null_ptr_cst_p (args[0]))
2410 type1 = type2;
2411 break;
2413 /* Fall through. */
2414 case LT_EXPR:
2415 case GT_EXPR:
2416 case LE_EXPR:
2417 case GE_EXPR:
2418 case MAX_EXPR:
2419 case MIN_EXPR:
2420 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2421 break;
2422 if (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
2423 break;
2424 if (TREE_CODE (type1) == ENUMERAL_TYPE
2425 && TREE_CODE (type2) == ENUMERAL_TYPE)
2426 break;
2427 if (TYPE_PTR_P (type1)
2428 && null_ptr_cst_p (args[1])
2429 && !uses_template_parms (type1))
2431 type2 = type1;
2432 break;
2434 if (null_ptr_cst_p (args[0])
2435 && TYPE_PTR_P (type2)
2436 && !uses_template_parms (type2))
2438 type1 = type2;
2439 break;
2441 return;
2443 case PLUS_EXPR:
2444 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2445 break;
2446 case ARRAY_REF:
2447 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1) && TYPE_PTROB_P (type2))
2449 type1 = ptrdiff_type_node;
2450 break;
2452 if (TYPE_PTROB_P (type1) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2454 type2 = ptrdiff_type_node;
2455 break;
2457 return;
2459 /* 18For every pair of promoted integral types L and R, there exist candi-
2460 date operator functions of the form
2461 LR operator%(L, R);
2462 LR operator&(L, R);
2463 LR operator^(L, R);
2464 LR operator|(L, R);
2465 L operator<<(L, R);
2466 L operator>>(L, R);
2467 where LR is the result of the usual arithmetic conversions between
2468 types L and R. */
2470 case TRUNC_MOD_EXPR:
2471 case BIT_AND_EXPR:
2472 case BIT_IOR_EXPR:
2473 case BIT_XOR_EXPR:
2474 case LSHIFT_EXPR:
2475 case RSHIFT_EXPR:
2476 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2477 break;
2478 return;
2480 /* 19For every triple L, VQ, R), where L is an arithmetic or enumeration
2481 type, VQ is either volatile or empty, and R is a promoted arithmetic
2482 type, there exist candidate operator functions of the form
2483 VQ L& operator=(VQ L&, R);
2484 VQ L& operator*=(VQ L&, R);
2485 VQ L& operator/=(VQ L&, R);
2486 VQ L& operator+=(VQ L&, R);
2487 VQ L& operator-=(VQ L&, R);
2489 20For every pair T, VQ), where T is any type and VQ is either volatile
2490 or empty, there exist candidate operator functions of the form
2491 T*VQ& operator=(T*VQ&, T*);
2493 21For every pair T, VQ), where T is a pointer to member type and VQ is
2494 either volatile or empty, there exist candidate operator functions of
2495 the form
2496 VQ T& operator=(VQ T&, T);
2498 22For every triple T, VQ, I), where T is a cv-qualified or cv-
2499 unqualified complete object type, VQ is either volatile or empty, and
2500 I is a promoted integral type, there exist candidate operator func-
2501 tions of the form
2502 T*VQ& operator+=(T*VQ&, I);
2503 T*VQ& operator-=(T*VQ&, I);
2505 23For every triple L, VQ, R), where L is an integral or enumeration
2506 type, VQ is either volatile or empty, and R is a promoted integral
2507 type, there exist candidate operator functions of the form
2509 VQ L& operator%=(VQ L&, R);
2510 VQ L& operator<<=(VQ L&, R);
2511 VQ L& operator>>=(VQ L&, R);
2512 VQ L& operator&=(VQ L&, R);
2513 VQ L& operator^=(VQ L&, R);
2514 VQ L& operator|=(VQ L&, R); */
2516 case MODIFY_EXPR:
2517 switch (code2)
2519 case PLUS_EXPR:
2520 case MINUS_EXPR:
2521 if (TYPE_PTROB_P (type1) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2523 type2 = ptrdiff_type_node;
2524 break;
2526 case MULT_EXPR:
2527 case TRUNC_DIV_EXPR:
2528 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2529 break;
2530 return;
2532 case TRUNC_MOD_EXPR:
2533 case BIT_AND_EXPR:
2534 case BIT_IOR_EXPR:
2535 case BIT_XOR_EXPR:
2536 case LSHIFT_EXPR:
2537 case RSHIFT_EXPR:
2538 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2539 break;
2540 return;
2542 case NOP_EXPR:
2543 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2544 break;
2545 if ((TYPE_PTRMEMFUNC_P (type1) && TYPE_PTRMEMFUNC_P (type2))
2546 || (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
2547 || (TYPE_PTRDATAMEM_P (type1) && TYPE_PTRDATAMEM_P (type2))
2548 || ((TYPE_PTRMEMFUNC_P (type1)
2549 || TREE_CODE (type1) == POINTER_TYPE)
2550 && null_ptr_cst_p (args[1])))
2552 type2 = type1;
2553 break;
2555 return;
2557 default:
2558 gcc_unreachable ();
2560 type1 = build_reference_type (type1);
2561 break;
2563 case COND_EXPR:
2564 /* [over.built]
2566 For every pair of promoted arithmetic types L and R, there
2567 exist candidate operator functions of the form
2569 LR operator?(bool, L, R);
2571 where LR is the result of the usual arithmetic conversions
2572 between types L and R.
2574 For every type T, where T is a pointer or pointer-to-member
2575 type, there exist candidate operator functions of the form T
2576 operator?(bool, T, T); */
2578 if (promoted_arithmetic_type_p (type1)
2579 && promoted_arithmetic_type_p (type2))
2580 /* That's OK. */
2581 break;
2583 /* Otherwise, the types should be pointers. */
2584 if (!TYPE_PTR_OR_PTRMEM_P (type1) || !TYPE_PTR_OR_PTRMEM_P (type2))
2585 return;
2587 /* We don't check that the two types are the same; the logic
2588 below will actually create two candidates; one in which both
2589 parameter types are TYPE1, and one in which both parameter
2590 types are TYPE2. */
2591 break;
2593 case REALPART_EXPR:
2594 case IMAGPART_EXPR:
2595 if (ARITHMETIC_TYPE_P (type1))
2596 break;
2597 return;
2599 default:
2600 gcc_unreachable ();
2603 /* If we're dealing with two pointer types or two enumeral types,
2604 we need candidates for both of them. */
2605 if (type2 && !same_type_p (type1, type2)
2606 && TREE_CODE (type1) == TREE_CODE (type2)
2607 && (TREE_CODE (type1) == REFERENCE_TYPE
2608 || (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
2609 || (TYPE_PTRDATAMEM_P (type1) && TYPE_PTRDATAMEM_P (type2))
2610 || TYPE_PTRMEMFUNC_P (type1)
2611 || MAYBE_CLASS_TYPE_P (type1)
2612 || TREE_CODE (type1) == ENUMERAL_TYPE))
2614 if (TYPE_PTR_OR_PTRMEM_P (type1))
2616 tree cptype = composite_pointer_type (type1, type2,
2617 error_mark_node,
2618 error_mark_node,
2619 CPO_CONVERSION,
2620 tf_none);
2621 if (cptype != error_mark_node)
2623 build_builtin_candidate
2624 (candidates, fnname, cptype, cptype, args, argtypes,
2625 flags, complain);
2626 return;
2630 build_builtin_candidate
2631 (candidates, fnname, type1, type1, args, argtypes, flags, complain);
2632 build_builtin_candidate
2633 (candidates, fnname, type2, type2, args, argtypes, flags, complain);
2634 return;
2637 build_builtin_candidate
2638 (candidates, fnname, type1, type2, args, argtypes, flags, complain);
2641 tree
2642 type_decays_to (tree type)
2644 if (TREE_CODE (type) == ARRAY_TYPE)
2645 return build_pointer_type (TREE_TYPE (type));
2646 if (TREE_CODE (type) == FUNCTION_TYPE)
2647 return build_pointer_type (type);
2648 return type;
2651 /* There are three conditions of builtin candidates:
2653 1) bool-taking candidates. These are the same regardless of the input.
2654 2) pointer-pair taking candidates. These are generated for each type
2655 one of the input types converts to.
2656 3) arithmetic candidates. According to the standard, we should generate
2657 all of these, but I'm trying not to...
2659 Here we generate a superset of the possible candidates for this particular
2660 case. That is a subset of the full set the standard defines, plus some
2661 other cases which the standard disallows. add_builtin_candidate will
2662 filter out the invalid set. */
2664 static void
2665 add_builtin_candidates (struct z_candidate **candidates, enum tree_code code,
2666 enum tree_code code2, tree fnname, tree *args,
2667 int flags, tsubst_flags_t complain)
2669 int ref1, i;
2670 int enum_p = 0;
2671 tree type, argtypes[3], t;
2672 /* TYPES[i] is the set of possible builtin-operator parameter types
2673 we will consider for the Ith argument. */
2674 vec<tree, va_gc> *types[2];
2675 unsigned ix;
2677 for (i = 0; i < 3; ++i)
2679 if (args[i])
2680 argtypes[i] = unlowered_expr_type (args[i]);
2681 else
2682 argtypes[i] = NULL_TREE;
2685 switch (code)
2687 /* 4 For every pair T, VQ), where T is an arithmetic or enumeration type,
2688 and VQ is either volatile or empty, there exist candidate operator
2689 functions of the form
2690 VQ T& operator++(VQ T&); */
2692 case POSTINCREMENT_EXPR:
2693 case PREINCREMENT_EXPR:
2694 case POSTDECREMENT_EXPR:
2695 case PREDECREMENT_EXPR:
2696 case MODIFY_EXPR:
2697 ref1 = 1;
2698 break;
2700 /* 24There also exist candidate operator functions of the form
2701 bool operator!(bool);
2702 bool operator&&(bool, bool);
2703 bool operator||(bool, bool); */
2705 case TRUTH_NOT_EXPR:
2706 build_builtin_candidate
2707 (candidates, fnname, boolean_type_node,
2708 NULL_TREE, args, argtypes, flags, complain);
2709 return;
2711 case TRUTH_ORIF_EXPR:
2712 case TRUTH_ANDIF_EXPR:
2713 build_builtin_candidate
2714 (candidates, fnname, boolean_type_node,
2715 boolean_type_node, args, argtypes, flags, complain);
2716 return;
2718 case ADDR_EXPR:
2719 case COMPOUND_EXPR:
2720 case COMPONENT_REF:
2721 return;
2723 case COND_EXPR:
2724 case EQ_EXPR:
2725 case NE_EXPR:
2726 case LT_EXPR:
2727 case LE_EXPR:
2728 case GT_EXPR:
2729 case GE_EXPR:
2730 enum_p = 1;
2731 /* Fall through. */
2733 default:
2734 ref1 = 0;
2737 types[0] = make_tree_vector ();
2738 types[1] = make_tree_vector ();
2740 for (i = 0; i < 2; ++i)
2742 if (! args[i])
2744 else if (MAYBE_CLASS_TYPE_P (argtypes[i]))
2746 tree convs;
2748 if (i == 0 && code == MODIFY_EXPR && code2 == NOP_EXPR)
2749 return;
2751 convs = lookup_conversions (argtypes[i]);
2753 if (code == COND_EXPR)
2755 if (real_lvalue_p (args[i]))
2756 vec_safe_push (types[i], build_reference_type (argtypes[i]));
2758 vec_safe_push (types[i], TYPE_MAIN_VARIANT (argtypes[i]));
2761 else if (! convs)
2762 return;
2764 for (; convs; convs = TREE_CHAIN (convs))
2766 type = TREE_TYPE (convs);
2768 if (i == 0 && ref1
2769 && (TREE_CODE (type) != REFERENCE_TYPE
2770 || CP_TYPE_CONST_P (TREE_TYPE (type))))
2771 continue;
2773 if (code == COND_EXPR && TREE_CODE (type) == REFERENCE_TYPE)
2774 vec_safe_push (types[i], type);
2776 type = non_reference (type);
2777 if (i != 0 || ! ref1)
2779 type = cv_unqualified (type_decays_to (type));
2780 if (enum_p && TREE_CODE (type) == ENUMERAL_TYPE)
2781 vec_safe_push (types[i], type);
2782 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
2783 type = type_promotes_to (type);
2786 if (! vec_member (type, types[i]))
2787 vec_safe_push (types[i], type);
2790 else
2792 if (code == COND_EXPR && real_lvalue_p (args[i]))
2793 vec_safe_push (types[i], build_reference_type (argtypes[i]));
2794 type = non_reference (argtypes[i]);
2795 if (i != 0 || ! ref1)
2797 type = cv_unqualified (type_decays_to (type));
2798 if (enum_p && UNSCOPED_ENUM_P (type))
2799 vec_safe_push (types[i], type);
2800 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
2801 type = type_promotes_to (type);
2803 vec_safe_push (types[i], type);
2807 /* Run through the possible parameter types of both arguments,
2808 creating candidates with those parameter types. */
2809 FOR_EACH_VEC_ELT_REVERSE (*(types[0]), ix, t)
2811 unsigned jx;
2812 tree u;
2814 if (!types[1]->is_empty ())
2815 FOR_EACH_VEC_ELT_REVERSE (*(types[1]), jx, u)
2816 add_builtin_candidate
2817 (candidates, code, code2, fnname, t,
2818 u, args, argtypes, flags, complain);
2819 else
2820 add_builtin_candidate
2821 (candidates, code, code2, fnname, t,
2822 NULL_TREE, args, argtypes, flags, complain);
2825 release_tree_vector (types[0]);
2826 release_tree_vector (types[1]);
2830 /* If TMPL can be successfully instantiated as indicated by
2831 EXPLICIT_TARGS and ARGLIST, adds the instantiation to CANDIDATES.
2833 TMPL is the template. EXPLICIT_TARGS are any explicit template
2834 arguments. ARGLIST is the arguments provided at the call-site.
2835 This does not change ARGLIST. The RETURN_TYPE is the desired type
2836 for conversion operators. If OBJ is NULL_TREE, FLAGS and CTYPE are
2837 as for add_function_candidate. If an OBJ is supplied, FLAGS and
2838 CTYPE are ignored, and OBJ is as for add_conv_candidate. */
2840 static struct z_candidate*
2841 add_template_candidate_real (struct z_candidate **candidates, tree tmpl,
2842 tree ctype, tree explicit_targs, tree first_arg,
2843 const vec<tree, va_gc> *arglist, tree return_type,
2844 tree access_path, tree conversion_path,
2845 int flags, tree obj, unification_kind_t strict,
2846 tsubst_flags_t complain)
2848 int ntparms = DECL_NTPARMS (tmpl);
2849 tree targs = make_tree_vec (ntparms);
2850 unsigned int len = vec_safe_length (arglist);
2851 unsigned int nargs = (first_arg == NULL_TREE ? 0 : 1) + len;
2852 unsigned int skip_without_in_chrg = 0;
2853 tree first_arg_without_in_chrg = first_arg;
2854 tree *args_without_in_chrg;
2855 unsigned int nargs_without_in_chrg;
2856 unsigned int ia, ix;
2857 tree arg;
2858 struct z_candidate *cand;
2859 tree fn;
2860 struct rejection_reason *reason = NULL;
2861 int errs;
2863 /* We don't do deduction on the in-charge parameter, the VTT
2864 parameter or 'this'. */
2865 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (tmpl))
2867 if (first_arg_without_in_chrg != NULL_TREE)
2868 first_arg_without_in_chrg = NULL_TREE;
2869 else
2870 ++skip_without_in_chrg;
2873 if ((DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (tmpl)
2874 || DECL_BASE_CONSTRUCTOR_P (tmpl))
2875 && CLASSTYPE_VBASECLASSES (DECL_CONTEXT (tmpl)))
2877 if (first_arg_without_in_chrg != NULL_TREE)
2878 first_arg_without_in_chrg = NULL_TREE;
2879 else
2880 ++skip_without_in_chrg;
2883 if (len < skip_without_in_chrg)
2884 return NULL;
2886 nargs_without_in_chrg = ((first_arg_without_in_chrg != NULL_TREE ? 1 : 0)
2887 + (len - skip_without_in_chrg));
2888 args_without_in_chrg = XALLOCAVEC (tree, nargs_without_in_chrg);
2889 ia = 0;
2890 if (first_arg_without_in_chrg != NULL_TREE)
2892 args_without_in_chrg[ia] = first_arg_without_in_chrg;
2893 ++ia;
2895 for (ix = skip_without_in_chrg;
2896 vec_safe_iterate (arglist, ix, &arg);
2897 ++ix)
2899 args_without_in_chrg[ia] = arg;
2900 ++ia;
2902 gcc_assert (ia == nargs_without_in_chrg);
2904 errs = errorcount+sorrycount;
2905 fn = fn_type_unification (tmpl, explicit_targs, targs,
2906 args_without_in_chrg,
2907 nargs_without_in_chrg,
2908 return_type, strict, flags, false);
2910 if (fn == error_mark_node)
2912 /* Don't repeat unification later if it already resulted in errors. */
2913 if (errorcount+sorrycount == errs)
2914 reason = template_unification_rejection (tmpl, explicit_targs,
2915 targs, args_without_in_chrg,
2916 nargs_without_in_chrg,
2917 return_type, strict, flags);
2918 else
2919 reason = template_unification_error_rejection ();
2920 goto fail;
2923 /* In [class.copy]:
2925 A member function template is never instantiated to perform the
2926 copy of a class object to an object of its class type.
2928 It's a little unclear what this means; the standard explicitly
2929 does allow a template to be used to copy a class. For example,
2932 struct A {
2933 A(A&);
2934 template <class T> A(const T&);
2936 const A f ();
2937 void g () { A a (f ()); }
2939 the member template will be used to make the copy. The section
2940 quoted above appears in the paragraph that forbids constructors
2941 whose only parameter is (a possibly cv-qualified variant of) the
2942 class type, and a logical interpretation is that the intent was
2943 to forbid the instantiation of member templates which would then
2944 have that form. */
2945 if (DECL_CONSTRUCTOR_P (fn) && nargs == 2)
2947 tree arg_types = FUNCTION_FIRST_USER_PARMTYPE (fn);
2948 if (arg_types && same_type_p (TYPE_MAIN_VARIANT (TREE_VALUE (arg_types)),
2949 ctype))
2951 reason = invalid_copy_with_fn_template_rejection ();
2952 goto fail;
2956 if (obj != NULL_TREE)
2957 /* Aha, this is a conversion function. */
2958 cand = add_conv_candidate (candidates, fn, obj, first_arg, arglist,
2959 access_path, conversion_path, complain);
2960 else
2961 cand = add_function_candidate (candidates, fn, ctype,
2962 first_arg, arglist, access_path,
2963 conversion_path, flags, complain);
2964 if (DECL_TI_TEMPLATE (fn) != tmpl)
2965 /* This situation can occur if a member template of a template
2966 class is specialized. Then, instantiate_template might return
2967 an instantiation of the specialization, in which case the
2968 DECL_TI_TEMPLATE field will point at the original
2969 specialization. For example:
2971 template <class T> struct S { template <class U> void f(U);
2972 template <> void f(int) {}; };
2973 S<double> sd;
2974 sd.f(3);
2976 Here, TMPL will be template <class U> S<double>::f(U).
2977 And, instantiate template will give us the specialization
2978 template <> S<double>::f(int). But, the DECL_TI_TEMPLATE field
2979 for this will point at template <class T> template <> S<T>::f(int),
2980 so that we can find the definition. For the purposes of
2981 overload resolution, however, we want the original TMPL. */
2982 cand->template_decl = build_template_info (tmpl, targs);
2983 else
2984 cand->template_decl = DECL_TEMPLATE_INFO (fn);
2985 cand->explicit_targs = explicit_targs;
2987 return cand;
2988 fail:
2989 return add_candidate (candidates, tmpl, first_arg, arglist, nargs, NULL,
2990 access_path, conversion_path, 0, reason);
2994 static struct z_candidate *
2995 add_template_candidate (struct z_candidate **candidates, tree tmpl, tree ctype,
2996 tree explicit_targs, tree first_arg,
2997 const vec<tree, va_gc> *arglist, tree return_type,
2998 tree access_path, tree conversion_path, int flags,
2999 unification_kind_t strict, tsubst_flags_t complain)
3001 return
3002 add_template_candidate_real (candidates, tmpl, ctype,
3003 explicit_targs, first_arg, arglist,
3004 return_type, access_path, conversion_path,
3005 flags, NULL_TREE, strict, complain);
3009 static struct z_candidate *
3010 add_template_conv_candidate (struct z_candidate **candidates, tree tmpl,
3011 tree obj, tree first_arg,
3012 const vec<tree, va_gc> *arglist,
3013 tree return_type, tree access_path,
3014 tree conversion_path, tsubst_flags_t complain)
3016 return
3017 add_template_candidate_real (candidates, tmpl, NULL_TREE, NULL_TREE,
3018 first_arg, arglist, return_type, access_path,
3019 conversion_path, 0, obj, DEDUCE_CONV,
3020 complain);
3023 /* The CANDS are the set of candidates that were considered for
3024 overload resolution. Return the set of viable candidates, or CANDS
3025 if none are viable. If any of the candidates were viable, set
3026 *ANY_VIABLE_P to true. STRICT_P is true if a candidate should be
3027 considered viable only if it is strictly viable. */
3029 static struct z_candidate*
3030 splice_viable (struct z_candidate *cands,
3031 bool strict_p,
3032 bool *any_viable_p)
3034 struct z_candidate *viable;
3035 struct z_candidate **last_viable;
3036 struct z_candidate **cand;
3038 /* Be strict inside templates, since build_over_call won't actually
3039 do the conversions to get pedwarns. */
3040 if (processing_template_decl)
3041 strict_p = true;
3043 viable = NULL;
3044 last_viable = &viable;
3045 *any_viable_p = false;
3047 cand = &cands;
3048 while (*cand)
3050 struct z_candidate *c = *cand;
3051 if (strict_p ? c->viable == 1 : c->viable)
3053 *last_viable = c;
3054 *cand = c->next;
3055 c->next = NULL;
3056 last_viable = &c->next;
3057 *any_viable_p = true;
3059 else
3060 cand = &c->next;
3063 return viable ? viable : cands;
3066 static bool
3067 any_strictly_viable (struct z_candidate *cands)
3069 for (; cands; cands = cands->next)
3070 if (cands->viable == 1)
3071 return true;
3072 return false;
3075 /* OBJ is being used in an expression like "OBJ.f (...)". In other
3076 words, it is about to become the "this" pointer for a member
3077 function call. Take the address of the object. */
3079 static tree
3080 build_this (tree obj)
3082 /* In a template, we are only concerned about the type of the
3083 expression, so we can take a shortcut. */
3084 if (processing_template_decl)
3085 return build_address (obj);
3087 return cp_build_addr_expr (obj, tf_warning_or_error);
3090 /* Returns true iff functions are equivalent. Equivalent functions are
3091 not '==' only if one is a function-local extern function or if
3092 both are extern "C". */
3094 static inline int
3095 equal_functions (tree fn1, tree fn2)
3097 if (TREE_CODE (fn1) != TREE_CODE (fn2))
3098 return 0;
3099 if (TREE_CODE (fn1) == TEMPLATE_DECL)
3100 return fn1 == fn2;
3101 if (DECL_LOCAL_FUNCTION_P (fn1) || DECL_LOCAL_FUNCTION_P (fn2)
3102 || DECL_EXTERN_C_FUNCTION_P (fn1))
3103 return decls_match (fn1, fn2);
3104 return fn1 == fn2;
3107 /* Print information about a candidate being rejected due to INFO. */
3109 static void
3110 print_conversion_rejection (location_t loc, struct conversion_info *info)
3112 if (info->n_arg == -1)
3113 /* Conversion of implicit `this' argument failed. */
3114 inform (loc, " no known conversion for implicit "
3115 "%<this%> parameter from %qT to %qT",
3116 info->from_type, info->to_type);
3117 else
3118 inform (loc, " no known conversion for argument %d from %qT to %qT",
3119 info->n_arg+1, info->from_type, info->to_type);
3122 /* Print information about a candidate with WANT parameters and we found
3123 HAVE. */
3125 static void
3126 print_arity_information (location_t loc, unsigned int have, unsigned int want)
3128 inform_n (loc, want,
3129 " candidate expects %d argument, %d provided",
3130 " candidate expects %d arguments, %d provided",
3131 want, have);
3134 /* Print information about one overload candidate CANDIDATE. MSGSTR
3135 is the text to print before the candidate itself.
3137 NOTE: Unlike most diagnostic functions in GCC, MSGSTR is expected
3138 to have been run through gettext by the caller. This wart makes
3139 life simpler in print_z_candidates and for the translators. */
3141 static void
3142 print_z_candidate (location_t loc, const char *msgstr,
3143 struct z_candidate *candidate)
3145 const char *msg = (msgstr == NULL
3146 ? ""
3147 : ACONCAT ((msgstr, " ", NULL)));
3148 location_t cloc = location_of (candidate->fn);
3150 if (TREE_CODE (candidate->fn) == IDENTIFIER_NODE)
3152 cloc = loc;
3153 if (candidate->num_convs == 3)
3154 inform (cloc, "%s%D(%T, %T, %T) <built-in>", msg, candidate->fn,
3155 candidate->convs[0]->type,
3156 candidate->convs[1]->type,
3157 candidate->convs[2]->type);
3158 else if (candidate->num_convs == 2)
3159 inform (cloc, "%s%D(%T, %T) <built-in>", msg, candidate->fn,
3160 candidate->convs[0]->type,
3161 candidate->convs[1]->type);
3162 else
3163 inform (cloc, "%s%D(%T) <built-in>", msg, candidate->fn,
3164 candidate->convs[0]->type);
3166 else if (TYPE_P (candidate->fn))
3167 inform (cloc, "%s%T <conversion>", msg, candidate->fn);
3168 else if (candidate->viable == -1)
3169 inform (cloc, "%s%#D <near match>", msg, candidate->fn);
3170 else if (DECL_DELETED_FN (STRIP_TEMPLATE (candidate->fn)))
3171 inform (cloc, "%s%#D <deleted>", msg, candidate->fn);
3172 else
3173 inform (cloc, "%s%#D", msg, candidate->fn);
3174 /* Give the user some information about why this candidate failed. */
3175 if (candidate->reason != NULL)
3177 struct rejection_reason *r = candidate->reason;
3179 switch (r->code)
3181 case rr_arity:
3182 print_arity_information (cloc, r->u.arity.actual,
3183 r->u.arity.expected);
3184 break;
3185 case rr_arg_conversion:
3186 print_conversion_rejection (cloc, &r->u.conversion);
3187 break;
3188 case rr_bad_arg_conversion:
3189 print_conversion_rejection (cloc, &r->u.bad_conversion);
3190 break;
3191 case rr_explicit_conversion:
3192 inform (cloc, " return type %qT of explicit conversion function "
3193 "cannot be converted to %qT with a qualification "
3194 "conversion", r->u.conversion.from_type,
3195 r->u.conversion.to_type);
3196 break;
3197 case rr_template_conversion:
3198 inform (cloc, " conversion from return type %qT of template "
3199 "conversion function specialization to %qT is not an "
3200 "exact match", r->u.conversion.from_type,
3201 r->u.conversion.to_type);
3202 break;
3203 case rr_template_unification:
3204 /* We use template_unification_error_rejection if unification caused
3205 actual non-SFINAE errors, in which case we don't need to repeat
3206 them here. */
3207 if (r->u.template_unification.tmpl == NULL_TREE)
3209 inform (cloc, " substitution of deduced template arguments "
3210 "resulted in errors seen above");
3211 break;
3213 /* Re-run template unification with diagnostics. */
3214 inform (cloc, " template argument deduction/substitution failed:");
3215 fn_type_unification (r->u.template_unification.tmpl,
3216 r->u.template_unification.explicit_targs,
3217 (make_tree_vec
3218 (r->u.template_unification.num_targs)),
3219 r->u.template_unification.args,
3220 r->u.template_unification.nargs,
3221 r->u.template_unification.return_type,
3222 r->u.template_unification.strict,
3223 r->u.template_unification.flags,
3224 true);
3225 break;
3226 case rr_invalid_copy:
3227 inform (cloc,
3228 " a constructor taking a single argument of its own "
3229 "class type is invalid");
3230 break;
3231 case rr_none:
3232 default:
3233 /* This candidate didn't have any issues or we failed to
3234 handle a particular code. Either way... */
3235 gcc_unreachable ();
3240 static void
3241 print_z_candidates (location_t loc, struct z_candidate *candidates)
3243 struct z_candidate *cand1;
3244 struct z_candidate **cand2;
3245 int n_candidates;
3247 if (!candidates)
3248 return;
3250 /* Remove non-viable deleted candidates. */
3251 cand1 = candidates;
3252 for (cand2 = &cand1; *cand2; )
3254 if (TREE_CODE ((*cand2)->fn) == FUNCTION_DECL
3255 && !(*cand2)->viable
3256 && DECL_DELETED_FN ((*cand2)->fn))
3257 *cand2 = (*cand2)->next;
3258 else
3259 cand2 = &(*cand2)->next;
3261 /* ...if there are any non-deleted ones. */
3262 if (cand1)
3263 candidates = cand1;
3265 /* There may be duplicates in the set of candidates. We put off
3266 checking this condition as long as possible, since we have no way
3267 to eliminate duplicates from a set of functions in less than n^2
3268 time. Now we are about to emit an error message, so it is more
3269 permissible to go slowly. */
3270 for (cand1 = candidates; cand1; cand1 = cand1->next)
3272 tree fn = cand1->fn;
3273 /* Skip builtin candidates and conversion functions. */
3274 if (!DECL_P (fn))
3275 continue;
3276 cand2 = &cand1->next;
3277 while (*cand2)
3279 if (DECL_P ((*cand2)->fn)
3280 && equal_functions (fn, (*cand2)->fn))
3281 *cand2 = (*cand2)->next;
3282 else
3283 cand2 = &(*cand2)->next;
3287 for (n_candidates = 0, cand1 = candidates; cand1; cand1 = cand1->next)
3288 n_candidates++;
3290 inform_n (loc, n_candidates, "candidate is:", "candidates are:");
3291 for (; candidates; candidates = candidates->next)
3292 print_z_candidate (loc, NULL, candidates);
3295 /* USER_SEQ is a user-defined conversion sequence, beginning with a
3296 USER_CONV. STD_SEQ is the standard conversion sequence applied to
3297 the result of the conversion function to convert it to the final
3298 desired type. Merge the two sequences into a single sequence,
3299 and return the merged sequence. */
3301 static conversion *
3302 merge_conversion_sequences (conversion *user_seq, conversion *std_seq)
3304 conversion **t;
3305 bool bad = user_seq->bad_p;
3307 gcc_assert (user_seq->kind == ck_user);
3309 /* Find the end of the second conversion sequence. */
3310 for (t = &std_seq; (*t)->kind != ck_identity; t = &((*t)->u.next))
3312 /* The entire sequence is a user-conversion sequence. */
3313 (*t)->user_conv_p = true;
3314 if (bad)
3315 (*t)->bad_p = true;
3318 /* Replace the identity conversion with the user conversion
3319 sequence. */
3320 *t = user_seq;
3322 return std_seq;
3325 /* Handle overload resolution for initializing an object of class type from
3326 an initializer list. First we look for a suitable constructor that
3327 takes a std::initializer_list; if we don't find one, we then look for a
3328 non-list constructor.
3330 Parameters are as for add_candidates, except that the arguments are in
3331 the form of a CONSTRUCTOR (the initializer list) rather than a vector, and
3332 the RETURN_TYPE parameter is replaced by TOTYPE, the desired type. */
3334 static void
3335 add_list_candidates (tree fns, tree first_arg,
3336 tree init_list, tree totype,
3337 tree explicit_targs, bool template_only,
3338 tree conversion_path, tree access_path,
3339 int flags,
3340 struct z_candidate **candidates,
3341 tsubst_flags_t complain)
3343 vec<tree, va_gc> *args;
3345 gcc_assert (*candidates == NULL);
3347 /* We're looking for a ctor for list-initialization. */
3348 flags |= LOOKUP_LIST_INIT_CTOR;
3349 /* And we don't allow narrowing conversions. We also use this flag to
3350 avoid the copy constructor call for copy-list-initialization. */
3351 flags |= LOOKUP_NO_NARROWING;
3353 /* Always use the default constructor if the list is empty (DR 990). */
3354 if (CONSTRUCTOR_NELTS (init_list) == 0
3355 && TYPE_HAS_DEFAULT_CONSTRUCTOR (totype))
3357 /* If the class has a list ctor, try passing the list as a single
3358 argument first, but only consider list ctors. */
3359 else if (TYPE_HAS_LIST_CTOR (totype))
3361 flags |= LOOKUP_LIST_ONLY;
3362 args = make_tree_vector_single (init_list);
3363 add_candidates (fns, first_arg, args, NULL_TREE,
3364 explicit_targs, template_only, conversion_path,
3365 access_path, flags, candidates, complain);
3366 if (any_strictly_viable (*candidates))
3367 return;
3370 args = ctor_to_vec (init_list);
3372 /* We aren't looking for list-ctors anymore. */
3373 flags &= ~LOOKUP_LIST_ONLY;
3374 /* We allow more user-defined conversions within an init-list. */
3375 flags &= ~LOOKUP_NO_CONVERSION;
3377 add_candidates (fns, first_arg, args, NULL_TREE,
3378 explicit_targs, template_only, conversion_path,
3379 access_path, flags, candidates, complain);
3382 /* Returns the best overload candidate to perform the requested
3383 conversion. This function is used for three the overloading situations
3384 described in [over.match.copy], [over.match.conv], and [over.match.ref].
3385 If TOTYPE is a REFERENCE_TYPE, we're trying to find a direct binding as
3386 per [dcl.init.ref], so we ignore temporary bindings. */
3388 static struct z_candidate *
3389 build_user_type_conversion_1 (tree totype, tree expr, int flags,
3390 tsubst_flags_t complain)
3392 struct z_candidate *candidates, *cand;
3393 tree fromtype;
3394 tree ctors = NULL_TREE;
3395 tree conv_fns = NULL_TREE;
3396 conversion *conv = NULL;
3397 tree first_arg = NULL_TREE;
3398 vec<tree, va_gc> *args = NULL;
3399 bool any_viable_p;
3400 int convflags;
3402 if (!expr)
3403 return NULL;
3405 fromtype = TREE_TYPE (expr);
3407 /* We represent conversion within a hierarchy using RVALUE_CONV and
3408 BASE_CONV, as specified by [over.best.ics]; these become plain
3409 constructor calls, as specified in [dcl.init]. */
3410 gcc_assert (!MAYBE_CLASS_TYPE_P (fromtype) || !MAYBE_CLASS_TYPE_P (totype)
3411 || !DERIVED_FROM_P (totype, fromtype));
3413 if (MAYBE_CLASS_TYPE_P (totype))
3414 /* Use lookup_fnfields_slot instead of lookup_fnfields to avoid
3415 creating a garbage BASELINK; constructors can't be inherited. */
3416 ctors = lookup_fnfields_slot (totype, complete_ctor_identifier);
3418 if (MAYBE_CLASS_TYPE_P (fromtype))
3420 tree to_nonref = non_reference (totype);
3421 if (same_type_ignoring_top_level_qualifiers_p (to_nonref, fromtype) ||
3422 (CLASS_TYPE_P (to_nonref) && CLASS_TYPE_P (fromtype)
3423 && DERIVED_FROM_P (to_nonref, fromtype)))
3425 /* [class.conv.fct] A conversion function is never used to
3426 convert a (possibly cv-qualified) object to the (possibly
3427 cv-qualified) same object type (or a reference to it), to a
3428 (possibly cv-qualified) base class of that type (or a
3429 reference to it)... */
3431 else
3432 conv_fns = lookup_conversions (fromtype);
3435 candidates = 0;
3436 flags |= LOOKUP_NO_CONVERSION;
3437 if (BRACE_ENCLOSED_INITIALIZER_P (expr))
3438 flags |= LOOKUP_NO_NARROWING;
3440 /* It's OK to bind a temporary for converting constructor arguments, but
3441 not in converting the return value of a conversion operator. */
3442 convflags = ((flags & LOOKUP_NO_TEMP_BIND) | LOOKUP_NO_CONVERSION);
3443 flags &= ~LOOKUP_NO_TEMP_BIND;
3445 if (ctors)
3447 int ctorflags = flags;
3449 first_arg = build_int_cst (build_pointer_type (totype), 0);
3451 /* We should never try to call the abstract or base constructor
3452 from here. */
3453 gcc_assert (!DECL_HAS_IN_CHARGE_PARM_P (OVL_CURRENT (ctors))
3454 && !DECL_HAS_VTT_PARM_P (OVL_CURRENT (ctors)));
3456 if (BRACE_ENCLOSED_INITIALIZER_P (expr))
3458 /* List-initialization. */
3459 add_list_candidates (ctors, first_arg, expr, totype, NULL_TREE,
3460 false, TYPE_BINFO (totype), TYPE_BINFO (totype),
3461 ctorflags, &candidates, complain);
3463 else
3465 args = make_tree_vector_single (expr);
3466 add_candidates (ctors, first_arg, args, NULL_TREE, NULL_TREE, false,
3467 TYPE_BINFO (totype), TYPE_BINFO (totype),
3468 ctorflags, &candidates, complain);
3471 for (cand = candidates; cand; cand = cand->next)
3473 cand->second_conv = build_identity_conv (totype, NULL_TREE);
3475 /* If totype isn't a reference, and LOOKUP_NO_TEMP_BIND isn't
3476 set, then this is copy-initialization. In that case, "The
3477 result of the call is then used to direct-initialize the
3478 object that is the destination of the copy-initialization."
3479 [dcl.init]
3481 We represent this in the conversion sequence with an
3482 rvalue conversion, which means a constructor call. */
3483 if (TREE_CODE (totype) != REFERENCE_TYPE
3484 && !(convflags & LOOKUP_NO_TEMP_BIND))
3485 cand->second_conv
3486 = build_conv (ck_rvalue, totype, cand->second_conv);
3490 if (conv_fns)
3491 first_arg = build_this (expr);
3493 for (; conv_fns; conv_fns = TREE_CHAIN (conv_fns))
3495 tree conversion_path = TREE_PURPOSE (conv_fns);
3496 struct z_candidate *old_candidates;
3498 /* If we are called to convert to a reference type, we are trying to
3499 find a direct binding, so don't even consider temporaries. If
3500 we don't find a direct binding, the caller will try again to
3501 look for a temporary binding. */
3502 if (TREE_CODE (totype) == REFERENCE_TYPE)
3503 convflags |= LOOKUP_NO_TEMP_BIND;
3505 old_candidates = candidates;
3506 add_candidates (TREE_VALUE (conv_fns), first_arg, NULL, totype,
3507 NULL_TREE, false,
3508 conversion_path, TYPE_BINFO (fromtype),
3509 flags, &candidates, complain);
3511 for (cand = candidates; cand != old_candidates; cand = cand->next)
3513 tree rettype = TREE_TYPE (TREE_TYPE (cand->fn));
3514 conversion *ics
3515 = implicit_conversion (totype,
3516 rettype,
3518 /*c_cast_p=*/false, convflags,
3519 complain);
3521 /* If LOOKUP_NO_TEMP_BIND isn't set, then this is
3522 copy-initialization. In that case, "The result of the
3523 call is then used to direct-initialize the object that is
3524 the destination of the copy-initialization." [dcl.init]
3526 We represent this in the conversion sequence with an
3527 rvalue conversion, which means a constructor call. But
3528 don't add a second rvalue conversion if there's already
3529 one there. Which there really shouldn't be, but it's
3530 harmless since we'd add it here anyway. */
3531 if (ics && MAYBE_CLASS_TYPE_P (totype) && ics->kind != ck_rvalue
3532 && !(convflags & LOOKUP_NO_TEMP_BIND))
3533 ics = build_conv (ck_rvalue, totype, ics);
3535 cand->second_conv = ics;
3537 if (!ics)
3539 cand->viable = 0;
3540 cand->reason = arg_conversion_rejection (NULL_TREE, -1,
3541 rettype, totype);
3543 else if (DECL_NONCONVERTING_P (cand->fn)
3544 && ics->rank > cr_exact)
3546 /* 13.3.1.5: For direct-initialization, those explicit
3547 conversion functions that are not hidden within S and
3548 yield type T or a type that can be converted to type T
3549 with a qualification conversion (4.4) are also candidate
3550 functions. */
3551 /* 13.3.1.6 doesn't have a parallel restriction, but it should;
3552 I've raised this issue with the committee. --jason 9/2011 */
3553 cand->viable = -1;
3554 cand->reason = explicit_conversion_rejection (rettype, totype);
3556 else if (cand->viable == 1 && ics->bad_p)
3558 cand->viable = -1;
3559 cand->reason
3560 = bad_arg_conversion_rejection (NULL_TREE, -1,
3561 rettype, totype);
3563 else if (primary_template_instantiation_p (cand->fn)
3564 && ics->rank > cr_exact)
3566 /* 13.3.3.1.2: If the user-defined conversion is specified by
3567 a specialization of a conversion function template, the
3568 second standard conversion sequence shall have exact match
3569 rank. */
3570 cand->viable = -1;
3571 cand->reason = template_conversion_rejection (rettype, totype);
3576 candidates = splice_viable (candidates, pedantic, &any_viable_p);
3577 if (!any_viable_p)
3579 if (args)
3580 release_tree_vector (args);
3581 return NULL;
3584 cand = tourney (candidates, complain);
3585 if (cand == 0)
3587 if (complain & tf_error)
3589 error ("conversion from %qT to %qT is ambiguous",
3590 fromtype, totype);
3591 print_z_candidates (location_of (expr), candidates);
3594 cand = candidates; /* any one will do */
3595 cand->second_conv = build_ambiguous_conv (totype, expr);
3596 cand->second_conv->user_conv_p = true;
3597 if (!any_strictly_viable (candidates))
3598 cand->second_conv->bad_p = true;
3599 /* If there are viable candidates, don't set ICS_BAD_FLAG; an
3600 ambiguous conversion is no worse than another user-defined
3601 conversion. */
3603 return cand;
3606 /* Build the user conversion sequence. */
3607 conv = build_conv
3608 (ck_user,
3609 (DECL_CONSTRUCTOR_P (cand->fn)
3610 ? totype : non_reference (TREE_TYPE (TREE_TYPE (cand->fn)))),
3611 build_identity_conv (TREE_TYPE (expr), expr));
3612 conv->cand = cand;
3613 if (cand->viable == -1)
3614 conv->bad_p = true;
3616 /* Remember that this was a list-initialization. */
3617 if (flags & LOOKUP_NO_NARROWING)
3618 conv->check_narrowing = true;
3620 /* Combine it with the second conversion sequence. */
3621 cand->second_conv = merge_conversion_sequences (conv,
3622 cand->second_conv);
3624 return cand;
3627 /* Wrapper for above. */
3629 tree
3630 build_user_type_conversion (tree totype, tree expr, int flags,
3631 tsubst_flags_t complain)
3633 struct z_candidate *cand;
3634 tree ret;
3636 bool subtime = timevar_cond_start (TV_OVERLOAD);
3637 cand = build_user_type_conversion_1 (totype, expr, flags, complain);
3639 if (cand)
3641 if (cand->second_conv->kind == ck_ambig)
3642 ret = error_mark_node;
3643 else
3645 expr = convert_like (cand->second_conv, expr, complain);
3646 ret = convert_from_reference (expr);
3649 else
3650 ret = NULL_TREE;
3652 timevar_cond_stop (TV_OVERLOAD, subtime);
3653 return ret;
3656 /* Subroutine of convert_nontype_argument.
3658 EXPR is an argument for a template non-type parameter of integral or
3659 enumeration type. Do any necessary conversions (that are permitted for
3660 non-type arguments) to convert it to the parameter type.
3662 If conversion is successful, returns the converted expression;
3663 otherwise, returns error_mark_node. */
3665 tree
3666 build_integral_nontype_arg_conv (tree type, tree expr, tsubst_flags_t complain)
3668 conversion *conv;
3669 void *p;
3670 tree t;
3671 location_t loc = EXPR_LOC_OR_HERE (expr);
3673 if (error_operand_p (expr))
3674 return error_mark_node;
3676 gcc_assert (INTEGRAL_OR_ENUMERATION_TYPE_P (type));
3678 /* Get the high-water mark for the CONVERSION_OBSTACK. */
3679 p = conversion_obstack_alloc (0);
3681 conv = implicit_conversion (type, TREE_TYPE (expr), expr,
3682 /*c_cast_p=*/false,
3683 LOOKUP_IMPLICIT, complain);
3685 /* for a non-type template-parameter of integral or
3686 enumeration type, integral promotions (4.5) and integral
3687 conversions (4.7) are applied. */
3688 /* It should be sufficient to check the outermost conversion step, since
3689 there are no qualification conversions to integer type. */
3690 if (conv)
3691 switch (conv->kind)
3693 /* A conversion function is OK. If it isn't constexpr, we'll
3694 complain later that the argument isn't constant. */
3695 case ck_user:
3696 /* The lvalue-to-rvalue conversion is OK. */
3697 case ck_rvalue:
3698 case ck_identity:
3699 break;
3701 case ck_std:
3702 t = next_conversion (conv)->type;
3703 if (INTEGRAL_OR_ENUMERATION_TYPE_P (t))
3704 break;
3706 if (complain & tf_error)
3707 error_at (loc, "conversion from %qT to %qT not considered for "
3708 "non-type template argument", t, type);
3709 /* and fall through. */
3711 default:
3712 conv = NULL;
3713 break;
3716 if (conv)
3717 expr = convert_like (conv, expr, complain);
3718 else
3719 expr = error_mark_node;
3721 /* Free all the conversions we allocated. */
3722 obstack_free (&conversion_obstack, p);
3724 return expr;
3727 /* Do any initial processing on the arguments to a function call. */
3729 static vec<tree, va_gc> *
3730 resolve_args (vec<tree, va_gc> *args, tsubst_flags_t complain)
3732 unsigned int ix;
3733 tree arg;
3735 FOR_EACH_VEC_SAFE_ELT (args, ix, arg)
3737 if (error_operand_p (arg))
3738 return NULL;
3739 else if (VOID_TYPE_P (TREE_TYPE (arg)))
3741 if (complain & tf_error)
3742 error ("invalid use of void expression");
3743 return NULL;
3745 else if (invalid_nonstatic_memfn_p (arg, complain))
3746 return NULL;
3748 return args;
3751 /* Perform overload resolution on FN, which is called with the ARGS.
3753 Return the candidate function selected by overload resolution, or
3754 NULL if the event that overload resolution failed. In the case
3755 that overload resolution fails, *CANDIDATES will be the set of
3756 candidates considered, and ANY_VIABLE_P will be set to true or
3757 false to indicate whether or not any of the candidates were
3758 viable.
3760 The ARGS should already have gone through RESOLVE_ARGS before this
3761 function is called. */
3763 static struct z_candidate *
3764 perform_overload_resolution (tree fn,
3765 const vec<tree, va_gc> *args,
3766 struct z_candidate **candidates,
3767 bool *any_viable_p, tsubst_flags_t complain)
3769 struct z_candidate *cand;
3770 tree explicit_targs;
3771 int template_only;
3773 bool subtime = timevar_cond_start (TV_OVERLOAD);
3775 explicit_targs = NULL_TREE;
3776 template_only = 0;
3778 *candidates = NULL;
3779 *any_viable_p = true;
3781 /* Check FN. */
3782 gcc_assert (TREE_CODE (fn) == FUNCTION_DECL
3783 || TREE_CODE (fn) == TEMPLATE_DECL
3784 || TREE_CODE (fn) == OVERLOAD
3785 || TREE_CODE (fn) == TEMPLATE_ID_EXPR);
3787 if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
3789 explicit_targs = TREE_OPERAND (fn, 1);
3790 fn = TREE_OPERAND (fn, 0);
3791 template_only = 1;
3794 /* Add the various candidate functions. */
3795 add_candidates (fn, NULL_TREE, args, NULL_TREE,
3796 explicit_targs, template_only,
3797 /*conversion_path=*/NULL_TREE,
3798 /*access_path=*/NULL_TREE,
3799 LOOKUP_NORMAL,
3800 candidates, complain);
3802 *candidates = splice_viable (*candidates, pedantic, any_viable_p);
3803 if (*any_viable_p)
3804 cand = tourney (*candidates, complain);
3805 else
3806 cand = NULL;
3808 timevar_cond_stop (TV_OVERLOAD, subtime);
3809 return cand;
3812 /* Print an error message about being unable to build a call to FN with
3813 ARGS. ANY_VIABLE_P indicates whether any candidate functions could
3814 be located; CANDIDATES is a possibly empty list of such
3815 functions. */
3817 static void
3818 print_error_for_call_failure (tree fn, vec<tree, va_gc> *args, bool any_viable_p,
3819 struct z_candidate *candidates)
3821 tree name = DECL_NAME (OVL_CURRENT (fn));
3822 location_t loc = location_of (name);
3824 if (!any_viable_p)
3825 error_at (loc, "no matching function for call to %<%D(%A)%>",
3826 name, build_tree_list_vec (args));
3827 else
3828 error_at (loc, "call of overloaded %<%D(%A)%> is ambiguous",
3829 name, build_tree_list_vec (args));
3830 if (candidates)
3831 print_z_candidates (loc, candidates);
3834 /* Return an expression for a call to FN (a namespace-scope function,
3835 or a static member function) with the ARGS. This may change
3836 ARGS. */
3838 tree
3839 build_new_function_call (tree fn, vec<tree, va_gc> **args, bool koenig_p,
3840 tsubst_flags_t complain)
3842 struct z_candidate *candidates, *cand;
3843 bool any_viable_p;
3844 void *p;
3845 tree result;
3847 if (args != NULL && *args != NULL)
3849 *args = resolve_args (*args, complain);
3850 if (*args == NULL)
3851 return error_mark_node;
3854 if (flag_tm)
3855 tm_malloc_replacement (fn);
3857 /* If this function was found without using argument dependent
3858 lookup, then we want to ignore any undeclared friend
3859 functions. */
3860 if (!koenig_p)
3862 tree orig_fn = fn;
3864 fn = remove_hidden_names (fn);
3865 if (!fn)
3867 if (complain & tf_error)
3868 print_error_for_call_failure (orig_fn, *args, false, NULL);
3869 return error_mark_node;
3873 /* Get the high-water mark for the CONVERSION_OBSTACK. */
3874 p = conversion_obstack_alloc (0);
3876 cand = perform_overload_resolution (fn, *args, &candidates, &any_viable_p,
3877 complain);
3879 if (!cand)
3881 if (complain & tf_error)
3883 if (!any_viable_p && candidates && ! candidates->next
3884 && (TREE_CODE (candidates->fn) == FUNCTION_DECL))
3885 return cp_build_function_call_vec (candidates->fn, args, complain);
3886 if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
3887 fn = TREE_OPERAND (fn, 0);
3888 print_error_for_call_failure (fn, *args, any_viable_p, candidates);
3890 result = error_mark_node;
3892 else
3894 int flags = LOOKUP_NORMAL;
3895 /* If fn is template_id_expr, the call has explicit template arguments
3896 (e.g. func<int>(5)), communicate this info to build_over_call
3897 through flags so that later we can use it to decide whether to warn
3898 about peculiar null pointer conversion. */
3899 if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
3900 flags |= LOOKUP_EXPLICIT_TMPL_ARGS;
3901 result = build_over_call (cand, flags, complain);
3904 /* Free all the conversions we allocated. */
3905 obstack_free (&conversion_obstack, p);
3907 return result;
3910 /* Build a call to a global operator new. FNNAME is the name of the
3911 operator (either "operator new" or "operator new[]") and ARGS are
3912 the arguments provided. This may change ARGS. *SIZE points to the
3913 total number of bytes required by the allocation, and is updated if
3914 that is changed here. *COOKIE_SIZE is non-NULL if a cookie should
3915 be used. If this function determines that no cookie should be
3916 used, after all, *COOKIE_SIZE is set to NULL_TREE. If SIZE_CHECK
3917 is not NULL_TREE, it is evaluated before calculating the final
3918 array size, and if it fails, the array size is replaced with
3919 (size_t)-1 (usually triggering a std::bad_alloc exception). If FN
3920 is non-NULL, it will be set, upon return, to the allocation
3921 function called. */
3923 tree
3924 build_operator_new_call (tree fnname, vec<tree, va_gc> **args,
3925 tree *size, tree *cookie_size, tree size_check,
3926 tree *fn, tsubst_flags_t complain)
3928 tree original_size = *size;
3929 tree fns;
3930 struct z_candidate *candidates;
3931 struct z_candidate *cand;
3932 bool any_viable_p;
3934 if (fn)
3935 *fn = NULL_TREE;
3936 /* Set to (size_t)-1 if the size check fails. */
3937 if (size_check != NULL_TREE)
3938 *size = fold_build3 (COND_EXPR, sizetype, size_check,
3939 original_size, TYPE_MAX_VALUE (sizetype));
3940 vec_safe_insert (*args, 0, *size);
3941 *args = resolve_args (*args, complain);
3942 if (*args == NULL)
3943 return error_mark_node;
3945 /* Based on:
3947 [expr.new]
3949 If this lookup fails to find the name, or if the allocated type
3950 is not a class type, the allocation function's name is looked
3951 up in the global scope.
3953 we disregard block-scope declarations of "operator new". */
3954 fns = lookup_function_nonclass (fnname, *args, /*block_p=*/false);
3956 /* Figure out what function is being called. */
3957 cand = perform_overload_resolution (fns, *args, &candidates, &any_viable_p,
3958 complain);
3960 /* If no suitable function could be found, issue an error message
3961 and give up. */
3962 if (!cand)
3964 if (complain & tf_error)
3965 print_error_for_call_failure (fns, *args, any_viable_p, candidates);
3966 return error_mark_node;
3969 /* If a cookie is required, add some extra space. Whether
3970 or not a cookie is required cannot be determined until
3971 after we know which function was called. */
3972 if (*cookie_size)
3974 bool use_cookie = true;
3975 if (!abi_version_at_least (2))
3977 /* In G++ 3.2, the check was implemented incorrectly; it
3978 looked at the placement expression, rather than the
3979 type of the function. */
3980 if ((*args)->length () == 2
3981 && same_type_p (TREE_TYPE ((**args)[1]), ptr_type_node))
3982 use_cookie = false;
3984 else
3986 tree arg_types;
3988 arg_types = TYPE_ARG_TYPES (TREE_TYPE (cand->fn));
3989 /* Skip the size_t parameter. */
3990 arg_types = TREE_CHAIN (arg_types);
3991 /* Check the remaining parameters (if any). */
3992 if (arg_types
3993 && TREE_CHAIN (arg_types) == void_list_node
3994 && same_type_p (TREE_VALUE (arg_types),
3995 ptr_type_node))
3996 use_cookie = false;
3998 /* If we need a cookie, adjust the number of bytes allocated. */
3999 if (use_cookie)
4001 /* Update the total size. */
4002 *size = size_binop (PLUS_EXPR, original_size, *cookie_size);
4003 /* Set to (size_t)-1 if the size check fails. */
4004 gcc_assert (size_check != NULL_TREE);
4005 *size = fold_build3 (COND_EXPR, sizetype, size_check,
4006 *size, TYPE_MAX_VALUE (sizetype));
4007 /* Update the argument list to reflect the adjusted size. */
4008 (**args)[0] = *size;
4010 else
4011 *cookie_size = NULL_TREE;
4014 /* Tell our caller which function we decided to call. */
4015 if (fn)
4016 *fn = cand->fn;
4018 /* Build the CALL_EXPR. */
4019 return build_over_call (cand, LOOKUP_NORMAL, complain);
4022 /* Build a new call to operator(). This may change ARGS. */
4024 static tree
4025 build_op_call_1 (tree obj, vec<tree, va_gc> **args, tsubst_flags_t complain)
4027 struct z_candidate *candidates = 0, *cand;
4028 tree fns, convs, first_mem_arg = NULL_TREE;
4029 tree type = TREE_TYPE (obj);
4030 bool any_viable_p;
4031 tree result = NULL_TREE;
4032 void *p;
4034 if (error_operand_p (obj))
4035 return error_mark_node;
4037 obj = prep_operand (obj);
4039 if (TYPE_PTRMEMFUNC_P (type))
4041 if (complain & tf_error)
4042 /* It's no good looking for an overloaded operator() on a
4043 pointer-to-member-function. */
4044 error ("pointer-to-member function %E cannot be called without an object; consider using .* or ->*", obj);
4045 return error_mark_node;
4048 if (TYPE_BINFO (type))
4050 fns = lookup_fnfields (TYPE_BINFO (type), ansi_opname (CALL_EXPR), 1);
4051 if (fns == error_mark_node)
4052 return error_mark_node;
4054 else
4055 fns = NULL_TREE;
4057 if (args != NULL && *args != NULL)
4059 *args = resolve_args (*args, complain);
4060 if (*args == NULL)
4061 return error_mark_node;
4064 /* Get the high-water mark for the CONVERSION_OBSTACK. */
4065 p = conversion_obstack_alloc (0);
4067 if (fns)
4069 first_mem_arg = build_this (obj);
4071 add_candidates (BASELINK_FUNCTIONS (fns),
4072 first_mem_arg, *args, NULL_TREE,
4073 NULL_TREE, false,
4074 BASELINK_BINFO (fns), BASELINK_ACCESS_BINFO (fns),
4075 LOOKUP_NORMAL, &candidates, complain);
4078 convs = lookup_conversions (type);
4080 for (; convs; convs = TREE_CHAIN (convs))
4082 tree fns = TREE_VALUE (convs);
4083 tree totype = TREE_TYPE (convs);
4085 if ((TREE_CODE (totype) == POINTER_TYPE
4086 && TREE_CODE (TREE_TYPE (totype)) == FUNCTION_TYPE)
4087 || (TREE_CODE (totype) == REFERENCE_TYPE
4088 && TREE_CODE (TREE_TYPE (totype)) == FUNCTION_TYPE)
4089 || (TREE_CODE (totype) == REFERENCE_TYPE
4090 && TREE_CODE (TREE_TYPE (totype)) == POINTER_TYPE
4091 && TREE_CODE (TREE_TYPE (TREE_TYPE (totype))) == FUNCTION_TYPE))
4092 for (; fns; fns = OVL_NEXT (fns))
4094 tree fn = OVL_CURRENT (fns);
4096 if (DECL_NONCONVERTING_P (fn))
4097 continue;
4099 if (TREE_CODE (fn) == TEMPLATE_DECL)
4100 add_template_conv_candidate
4101 (&candidates, fn, obj, NULL_TREE, *args, totype,
4102 /*access_path=*/NULL_TREE,
4103 /*conversion_path=*/NULL_TREE, complain);
4104 else
4105 add_conv_candidate (&candidates, fn, obj, NULL_TREE,
4106 *args, /*conversion_path=*/NULL_TREE,
4107 /*access_path=*/NULL_TREE, complain);
4111 candidates = splice_viable (candidates, pedantic, &any_viable_p);
4112 if (!any_viable_p)
4114 if (complain & tf_error)
4116 error ("no match for call to %<(%T) (%A)%>", TREE_TYPE (obj),
4117 build_tree_list_vec (*args));
4118 print_z_candidates (location_of (TREE_TYPE (obj)), candidates);
4120 result = error_mark_node;
4122 else
4124 cand = tourney (candidates, complain);
4125 if (cand == 0)
4127 if (complain & tf_error)
4129 error ("call of %<(%T) (%A)%> is ambiguous",
4130 TREE_TYPE (obj), build_tree_list_vec (*args));
4131 print_z_candidates (location_of (TREE_TYPE (obj)), candidates);
4133 result = error_mark_node;
4135 /* Since cand->fn will be a type, not a function, for a conversion
4136 function, we must be careful not to unconditionally look at
4137 DECL_NAME here. */
4138 else if (TREE_CODE (cand->fn) == FUNCTION_DECL
4139 && DECL_OVERLOADED_OPERATOR_P (cand->fn) == CALL_EXPR)
4140 result = build_over_call (cand, LOOKUP_NORMAL, complain);
4141 else
4143 obj = convert_like_with_context (cand->convs[0], obj, cand->fn, -1,
4144 complain);
4145 obj = convert_from_reference (obj);
4146 result = cp_build_function_call_vec (obj, args, complain);
4150 /* Free all the conversions we allocated. */
4151 obstack_free (&conversion_obstack, p);
4153 return result;
4156 /* Wrapper for above. */
4158 tree
4159 build_op_call (tree obj, vec<tree, va_gc> **args, tsubst_flags_t complain)
4161 tree ret;
4162 bool subtime = timevar_cond_start (TV_OVERLOAD);
4163 ret = build_op_call_1 (obj, args, complain);
4164 timevar_cond_stop (TV_OVERLOAD, subtime);
4165 return ret;
4168 /* Called by op_error to prepare format strings suitable for the error
4169 function. It concatenates a prefix (controlled by MATCH), ERRMSG,
4170 and a suffix (controlled by NTYPES). */
4172 static const char *
4173 op_error_string (const char *errmsg, int ntypes, bool match)
4175 const char *msg;
4177 const char *msgp = concat (match ? G_("ambiguous overload for ")
4178 : G_("no match for "), errmsg, NULL);
4180 if (ntypes == 3)
4181 msg = concat (msgp, G_(" (operand types are %qT, %qT, and %qT)"), NULL);
4182 else if (ntypes == 2)
4183 msg = concat (msgp, G_(" (operand types are %qT and %qT)"), NULL);
4184 else
4185 msg = concat (msgp, G_(" (operand type is %qT)"), NULL);
4187 return msg;
4190 static void
4191 op_error (location_t loc, enum tree_code code, enum tree_code code2,
4192 tree arg1, tree arg2, tree arg3, bool match)
4194 const char *opname;
4196 if (code == MODIFY_EXPR)
4197 opname = assignment_operator_name_info[code2].name;
4198 else
4199 opname = operator_name_info[code].name;
4201 switch (code)
4203 case COND_EXPR:
4204 if (flag_diagnostics_show_caret)
4205 error_at (loc, op_error_string (G_("ternary %<operator?:%>"),
4206 3, match),
4207 TREE_TYPE (arg1), TREE_TYPE (arg2), TREE_TYPE (arg3));
4208 else
4209 error_at (loc, op_error_string (G_("ternary %<operator?:%> "
4210 "in %<%E ? %E : %E%>"), 3, match),
4211 arg1, arg2, arg3,
4212 TREE_TYPE (arg1), TREE_TYPE (arg2), TREE_TYPE (arg3));
4213 break;
4215 case POSTINCREMENT_EXPR:
4216 case POSTDECREMENT_EXPR:
4217 if (flag_diagnostics_show_caret)
4218 error_at (loc, op_error_string (G_("%<operator%s%>"), 1, match),
4219 opname, TREE_TYPE (arg1));
4220 else
4221 error_at (loc, op_error_string (G_("%<operator%s%> in %<%E%s%>"),
4222 1, match),
4223 opname, arg1, opname, TREE_TYPE (arg1));
4224 break;
4226 case ARRAY_REF:
4227 if (flag_diagnostics_show_caret)
4228 error_at (loc, op_error_string (G_("%<operator[]%>"), 2, match),
4229 TREE_TYPE (arg1), TREE_TYPE (arg2));
4230 else
4231 error_at (loc, op_error_string (G_("%<operator[]%> in %<%E[%E]%>"),
4232 2, match),
4233 arg1, arg2, TREE_TYPE (arg1), TREE_TYPE (arg2));
4234 break;
4236 case REALPART_EXPR:
4237 case IMAGPART_EXPR:
4238 if (flag_diagnostics_show_caret)
4239 error_at (loc, op_error_string (G_("%qs"), 1, match),
4240 opname, TREE_TYPE (arg1));
4241 else
4242 error_at (loc, op_error_string (G_("%qs in %<%s %E%>"), 1, match),
4243 opname, opname, arg1, TREE_TYPE (arg1));
4244 break;
4246 default:
4247 if (arg2)
4248 if (flag_diagnostics_show_caret)
4249 error_at (loc, op_error_string (G_("%<operator%s%>"), 2, match),
4250 opname, TREE_TYPE (arg1), TREE_TYPE (arg2));
4251 else
4252 error_at (loc, op_error_string (G_("%<operator%s%> in %<%E %s %E%>"),
4253 2, match),
4254 opname, arg1, opname, arg2,
4255 TREE_TYPE (arg1), TREE_TYPE (arg2));
4256 else
4257 if (flag_diagnostics_show_caret)
4258 error_at (loc, op_error_string (G_("%<operator%s%>"), 1, match),
4259 opname, TREE_TYPE (arg1));
4260 else
4261 error_at (loc, op_error_string (G_("%<operator%s%> in %<%s%E%>"),
4262 1, match),
4263 opname, opname, arg1, TREE_TYPE (arg1));
4264 break;
4268 /* Return the implicit conversion sequence that could be used to
4269 convert E1 to E2 in [expr.cond]. */
4271 static conversion *
4272 conditional_conversion (tree e1, tree e2, tsubst_flags_t complain)
4274 tree t1 = non_reference (TREE_TYPE (e1));
4275 tree t2 = non_reference (TREE_TYPE (e2));
4276 conversion *conv;
4277 bool good_base;
4279 /* [expr.cond]
4281 If E2 is an lvalue: E1 can be converted to match E2 if E1 can be
4282 implicitly converted (clause _conv_) to the type "lvalue reference to
4283 T2", subject to the constraint that in the conversion the
4284 reference must bind directly (_dcl.init.ref_) to an lvalue. */
4285 if (real_lvalue_p (e2))
4287 conv = implicit_conversion (build_reference_type (t2),
4290 /*c_cast_p=*/false,
4291 LOOKUP_NO_TEMP_BIND|LOOKUP_NO_RVAL_BIND
4292 |LOOKUP_ONLYCONVERTING,
4293 complain);
4294 if (conv)
4295 return conv;
4298 /* [expr.cond]
4300 If E1 and E2 have class type, and the underlying class types are
4301 the same or one is a base class of the other: E1 can be converted
4302 to match E2 if the class of T2 is the same type as, or a base
4303 class of, the class of T1, and the cv-qualification of T2 is the
4304 same cv-qualification as, or a greater cv-qualification than, the
4305 cv-qualification of T1. If the conversion is applied, E1 is
4306 changed to an rvalue of type T2 that still refers to the original
4307 source class object (or the appropriate subobject thereof). */
4308 if (CLASS_TYPE_P (t1) && CLASS_TYPE_P (t2)
4309 && ((good_base = DERIVED_FROM_P (t2, t1)) || DERIVED_FROM_P (t1, t2)))
4311 if (good_base && at_least_as_qualified_p (t2, t1))
4313 conv = build_identity_conv (t1, e1);
4314 if (!same_type_p (TYPE_MAIN_VARIANT (t1),
4315 TYPE_MAIN_VARIANT (t2)))
4316 conv = build_conv (ck_base, t2, conv);
4317 else
4318 conv = build_conv (ck_rvalue, t2, conv);
4319 return conv;
4321 else
4322 return NULL;
4324 else
4325 /* [expr.cond]
4327 Otherwise: E1 can be converted to match E2 if E1 can be implicitly
4328 converted to the type that expression E2 would have if E2 were
4329 converted to an rvalue (or the type it has, if E2 is an rvalue). */
4330 return implicit_conversion (t2, t1, e1, /*c_cast_p=*/false,
4331 LOOKUP_IMPLICIT, complain);
4334 /* Implement [expr.cond]. ARG1, ARG2, and ARG3 are the three
4335 arguments to the conditional expression. */
4337 static tree
4338 build_conditional_expr_1 (tree arg1, tree arg2, tree arg3,
4339 tsubst_flags_t complain)
4341 tree arg2_type;
4342 tree arg3_type;
4343 tree result = NULL_TREE;
4344 tree result_type = NULL_TREE;
4345 bool lvalue_p = true;
4346 struct z_candidate *candidates = 0;
4347 struct z_candidate *cand;
4348 void *p;
4349 tree orig_arg2, orig_arg3;
4351 /* As a G++ extension, the second argument to the conditional can be
4352 omitted. (So that `a ? : c' is roughly equivalent to `a ? a :
4353 c'.) If the second operand is omitted, make sure it is
4354 calculated only once. */
4355 if (!arg2)
4357 if (complain & tf_error)
4358 pedwarn (input_location, OPT_Wpedantic,
4359 "ISO C++ forbids omitting the middle term of a ?: expression");
4361 /* Make sure that lvalues remain lvalues. See g++.oliva/ext1.C. */
4362 if (real_lvalue_p (arg1))
4363 arg2 = arg1 = stabilize_reference (arg1);
4364 else
4365 arg2 = arg1 = save_expr (arg1);
4368 /* If something has already gone wrong, just pass that fact up the
4369 tree. */
4370 if (error_operand_p (arg1)
4371 || error_operand_p (arg2)
4372 || error_operand_p (arg3))
4373 return error_mark_node;
4375 orig_arg2 = arg2;
4376 orig_arg3 = arg3;
4378 if (VECTOR_INTEGER_TYPE_P (TREE_TYPE (arg1)))
4380 arg1 = force_rvalue (arg1, complain);
4381 arg2 = force_rvalue (arg2, complain);
4382 arg3 = force_rvalue (arg3, complain);
4384 tree arg1_type = TREE_TYPE (arg1);
4385 arg2_type = TREE_TYPE (arg2);
4386 arg3_type = TREE_TYPE (arg3);
4388 if (TREE_CODE (arg2_type) != VECTOR_TYPE
4389 && TREE_CODE (arg3_type) != VECTOR_TYPE)
4391 if (complain & tf_error)
4392 error ("at least one operand of a vector conditional operator "
4393 "must be a vector");
4394 return error_mark_node;
4397 if ((TREE_CODE (arg2_type) == VECTOR_TYPE)
4398 != (TREE_CODE (arg3_type) == VECTOR_TYPE))
4400 enum stv_conv convert_flag =
4401 scalar_to_vector (input_location, VEC_COND_EXPR, arg2, arg3,
4402 complain & tf_error);
4404 switch (convert_flag)
4406 case stv_error:
4407 return error_mark_node;
4408 case stv_firstarg:
4410 arg2 = convert (TREE_TYPE (arg3_type), arg2);
4411 arg2 = build_vector_from_val (arg3_type, arg2);
4412 arg2_type = TREE_TYPE (arg2);
4413 break;
4415 case stv_secondarg:
4417 arg3 = convert (TREE_TYPE (arg2_type), arg3);
4418 arg3 = build_vector_from_val (arg2_type, arg3);
4419 arg3_type = TREE_TYPE (arg3);
4420 break;
4422 default:
4423 break;
4427 if (!same_type_p (arg2_type, arg3_type)
4428 || TYPE_VECTOR_SUBPARTS (arg1_type)
4429 != TYPE_VECTOR_SUBPARTS (arg2_type)
4430 || TYPE_SIZE (arg1_type) != TYPE_SIZE (arg2_type))
4432 if (complain & tf_error)
4433 error ("incompatible vector types in conditional expression: "
4434 "%qT, %qT and %qT", TREE_TYPE (arg1), TREE_TYPE (orig_arg2),
4435 TREE_TYPE (orig_arg3));
4436 return error_mark_node;
4439 if (!COMPARISON_CLASS_P (arg1))
4440 arg1 = build2 (NE_EXPR, signed_type_for (arg1_type), arg1,
4441 build_zero_cst (arg1_type));
4442 return build3 (VEC_COND_EXPR, arg2_type, arg1, arg2, arg3);
4445 /* [expr.cond]
4447 The first expression is implicitly converted to bool (clause
4448 _conv_). */
4449 arg1 = perform_implicit_conversion_flags (boolean_type_node, arg1, complain,
4450 LOOKUP_NORMAL);
4451 if (error_operand_p (arg1))
4452 return error_mark_node;
4454 /* [expr.cond]
4456 If either the second or the third operand has type (possibly
4457 cv-qualified) void, then the lvalue-to-rvalue (_conv.lval_),
4458 array-to-pointer (_conv.array_), and function-to-pointer
4459 (_conv.func_) standard conversions are performed on the second
4460 and third operands. */
4461 arg2_type = unlowered_expr_type (arg2);
4462 arg3_type = unlowered_expr_type (arg3);
4463 if (VOID_TYPE_P (arg2_type) || VOID_TYPE_P (arg3_type))
4465 /* Do the conversions. We don't these for `void' type arguments
4466 since it can't have any effect and since decay_conversion
4467 does not handle that case gracefully. */
4468 if (!VOID_TYPE_P (arg2_type))
4469 arg2 = decay_conversion (arg2, complain);
4470 if (!VOID_TYPE_P (arg3_type))
4471 arg3 = decay_conversion (arg3, complain);
4472 arg2_type = TREE_TYPE (arg2);
4473 arg3_type = TREE_TYPE (arg3);
4475 /* [expr.cond]
4477 One of the following shall hold:
4479 --The second or the third operand (but not both) is a
4480 throw-expression (_except.throw_); the result is of the
4481 type of the other and is an rvalue.
4483 --Both the second and the third operands have type void; the
4484 result is of type void and is an rvalue.
4486 We must avoid calling force_rvalue for expressions of type
4487 "void" because it will complain that their value is being
4488 used. */
4489 if (TREE_CODE (arg2) == THROW_EXPR
4490 && TREE_CODE (arg3) != THROW_EXPR)
4492 if (!VOID_TYPE_P (arg3_type))
4494 arg3 = force_rvalue (arg3, complain);
4495 if (arg3 == error_mark_node)
4496 return error_mark_node;
4498 arg3_type = TREE_TYPE (arg3);
4499 result_type = arg3_type;
4501 else if (TREE_CODE (arg2) != THROW_EXPR
4502 && TREE_CODE (arg3) == THROW_EXPR)
4504 if (!VOID_TYPE_P (arg2_type))
4506 arg2 = force_rvalue (arg2, complain);
4507 if (arg2 == error_mark_node)
4508 return error_mark_node;
4510 arg2_type = TREE_TYPE (arg2);
4511 result_type = arg2_type;
4513 else if (VOID_TYPE_P (arg2_type) && VOID_TYPE_P (arg3_type))
4514 result_type = void_type_node;
4515 else
4517 if (complain & tf_error)
4519 if (VOID_TYPE_P (arg2_type))
4520 error ("second operand to the conditional operator "
4521 "is of type %<void%>, "
4522 "but the third operand is neither a throw-expression "
4523 "nor of type %<void%>");
4524 else
4525 error ("third operand to the conditional operator "
4526 "is of type %<void%>, "
4527 "but the second operand is neither a throw-expression "
4528 "nor of type %<void%>");
4530 return error_mark_node;
4533 lvalue_p = false;
4534 goto valid_operands;
4536 /* [expr.cond]
4538 Otherwise, if the second and third operand have different types,
4539 and either has (possibly cv-qualified) class type, an attempt is
4540 made to convert each of those operands to the type of the other. */
4541 else if (!same_type_p (arg2_type, arg3_type)
4542 && (CLASS_TYPE_P (arg2_type) || CLASS_TYPE_P (arg3_type)))
4544 conversion *conv2;
4545 conversion *conv3;
4547 /* Get the high-water mark for the CONVERSION_OBSTACK. */
4548 p = conversion_obstack_alloc (0);
4550 conv2 = conditional_conversion (arg2, arg3, complain);
4551 conv3 = conditional_conversion (arg3, arg2, complain);
4553 /* [expr.cond]
4555 If both can be converted, or one can be converted but the
4556 conversion is ambiguous, the program is ill-formed. If
4557 neither can be converted, the operands are left unchanged and
4558 further checking is performed as described below. If exactly
4559 one conversion is possible, that conversion is applied to the
4560 chosen operand and the converted operand is used in place of
4561 the original operand for the remainder of this section. */
4562 if ((conv2 && !conv2->bad_p
4563 && conv3 && !conv3->bad_p)
4564 || (conv2 && conv2->kind == ck_ambig)
4565 || (conv3 && conv3->kind == ck_ambig))
4567 error ("operands to ?: have different types %qT and %qT",
4568 arg2_type, arg3_type);
4569 result = error_mark_node;
4571 else if (conv2 && (!conv2->bad_p || !conv3))
4573 arg2 = convert_like (conv2, arg2, complain);
4574 arg2 = convert_from_reference (arg2);
4575 arg2_type = TREE_TYPE (arg2);
4576 /* Even if CONV2 is a valid conversion, the result of the
4577 conversion may be invalid. For example, if ARG3 has type
4578 "volatile X", and X does not have a copy constructor
4579 accepting a "volatile X&", then even if ARG2 can be
4580 converted to X, the conversion will fail. */
4581 if (error_operand_p (arg2))
4582 result = error_mark_node;
4584 else if (conv3 && (!conv3->bad_p || !conv2))
4586 arg3 = convert_like (conv3, arg3, complain);
4587 arg3 = convert_from_reference (arg3);
4588 arg3_type = TREE_TYPE (arg3);
4589 if (error_operand_p (arg3))
4590 result = error_mark_node;
4593 /* Free all the conversions we allocated. */
4594 obstack_free (&conversion_obstack, p);
4596 if (result)
4597 return result;
4599 /* If, after the conversion, both operands have class type,
4600 treat the cv-qualification of both operands as if it were the
4601 union of the cv-qualification of the operands.
4603 The standard is not clear about what to do in this
4604 circumstance. For example, if the first operand has type
4605 "const X" and the second operand has a user-defined
4606 conversion to "volatile X", what is the type of the second
4607 operand after this step? Making it be "const X" (matching
4608 the first operand) seems wrong, as that discards the
4609 qualification without actually performing a copy. Leaving it
4610 as "volatile X" seems wrong as that will result in the
4611 conditional expression failing altogether, even though,
4612 according to this step, the one operand could be converted to
4613 the type of the other. */
4614 if ((conv2 || conv3)
4615 && CLASS_TYPE_P (arg2_type)
4616 && cp_type_quals (arg2_type) != cp_type_quals (arg3_type))
4617 arg2_type = arg3_type =
4618 cp_build_qualified_type (arg2_type,
4619 cp_type_quals (arg2_type)
4620 | cp_type_quals (arg3_type));
4623 /* [expr.cond]
4625 If the second and third operands are lvalues and have the same
4626 type, the result is of that type and is an lvalue. */
4627 if (real_lvalue_p (arg2)
4628 && real_lvalue_p (arg3)
4629 && same_type_p (arg2_type, arg3_type))
4631 result_type = arg2_type;
4632 arg2 = mark_lvalue_use (arg2);
4633 arg3 = mark_lvalue_use (arg3);
4634 goto valid_operands;
4637 /* [expr.cond]
4639 Otherwise, the result is an rvalue. If the second and third
4640 operand do not have the same type, and either has (possibly
4641 cv-qualified) class type, overload resolution is used to
4642 determine the conversions (if any) to be applied to the operands
4643 (_over.match.oper_, _over.built_). */
4644 lvalue_p = false;
4645 if (!same_type_p (arg2_type, arg3_type)
4646 && (CLASS_TYPE_P (arg2_type) || CLASS_TYPE_P (arg3_type)))
4648 tree args[3];
4649 conversion *conv;
4650 bool any_viable_p;
4652 /* Rearrange the arguments so that add_builtin_candidate only has
4653 to know about two args. In build_builtin_candidate, the
4654 arguments are unscrambled. */
4655 args[0] = arg2;
4656 args[1] = arg3;
4657 args[2] = arg1;
4658 add_builtin_candidates (&candidates,
4659 COND_EXPR,
4660 NOP_EXPR,
4661 ansi_opname (COND_EXPR),
4662 args,
4663 LOOKUP_NORMAL, complain);
4665 /* [expr.cond]
4667 If the overload resolution fails, the program is
4668 ill-formed. */
4669 candidates = splice_viable (candidates, pedantic, &any_viable_p);
4670 if (!any_viable_p)
4672 if (complain & tf_error)
4674 op_error (input_location, COND_EXPR, NOP_EXPR,
4675 arg1, arg2, arg3, FALSE);
4676 print_z_candidates (location_of (arg1), candidates);
4678 return error_mark_node;
4680 cand = tourney (candidates, complain);
4681 if (!cand)
4683 if (complain & tf_error)
4685 op_error (input_location, COND_EXPR, NOP_EXPR,
4686 arg1, arg2, arg3, FALSE);
4687 print_z_candidates (location_of (arg1), candidates);
4689 return error_mark_node;
4692 /* [expr.cond]
4694 Otherwise, the conversions thus determined are applied, and
4695 the converted operands are used in place of the original
4696 operands for the remainder of this section. */
4697 conv = cand->convs[0];
4698 arg1 = convert_like (conv, arg1, complain);
4699 conv = cand->convs[1];
4700 arg2 = convert_like (conv, arg2, complain);
4701 arg2_type = TREE_TYPE (arg2);
4702 conv = cand->convs[2];
4703 arg3 = convert_like (conv, arg3, complain);
4704 arg3_type = TREE_TYPE (arg3);
4707 /* [expr.cond]
4709 Lvalue-to-rvalue (_conv.lval_), array-to-pointer (_conv.array_),
4710 and function-to-pointer (_conv.func_) standard conversions are
4711 performed on the second and third operands.
4713 We need to force the lvalue-to-rvalue conversion here for class types,
4714 so we get TARGET_EXPRs; trying to deal with a COND_EXPR of class rvalues
4715 that isn't wrapped with a TARGET_EXPR plays havoc with exception
4716 regions. */
4718 arg2 = force_rvalue (arg2, complain);
4719 if (!CLASS_TYPE_P (arg2_type))
4720 arg2_type = TREE_TYPE (arg2);
4722 arg3 = force_rvalue (arg3, complain);
4723 if (!CLASS_TYPE_P (arg3_type))
4724 arg3_type = TREE_TYPE (arg3);
4726 if (arg2 == error_mark_node || arg3 == error_mark_node)
4727 return error_mark_node;
4729 /* [expr.cond]
4731 After those conversions, one of the following shall hold:
4733 --The second and third operands have the same type; the result is of
4734 that type. */
4735 if (same_type_p (arg2_type, arg3_type))
4736 result_type = arg2_type;
4737 /* [expr.cond]
4739 --The second and third operands have arithmetic or enumeration
4740 type; the usual arithmetic conversions are performed to bring
4741 them to a common type, and the result is of that type. */
4742 else if ((ARITHMETIC_TYPE_P (arg2_type)
4743 || UNSCOPED_ENUM_P (arg2_type))
4744 && (ARITHMETIC_TYPE_P (arg3_type)
4745 || UNSCOPED_ENUM_P (arg3_type)))
4747 /* In this case, there is always a common type. */
4748 result_type = type_after_usual_arithmetic_conversions (arg2_type,
4749 arg3_type);
4750 do_warn_double_promotion (result_type, arg2_type, arg3_type,
4751 "implicit conversion from %qT to %qT to "
4752 "match other result of conditional",
4753 input_location);
4755 if (TREE_CODE (arg2_type) == ENUMERAL_TYPE
4756 && TREE_CODE (arg3_type) == ENUMERAL_TYPE)
4758 if (TREE_CODE (orig_arg2) == CONST_DECL
4759 && TREE_CODE (orig_arg3) == CONST_DECL
4760 && DECL_CONTEXT (orig_arg2) == DECL_CONTEXT (orig_arg3))
4761 /* Two enumerators from the same enumeration can have different
4762 types when the enumeration is still being defined. */;
4763 else if (complain & tf_warning)
4764 warning (OPT_Wenum_compare,
4765 "enumeral mismatch in conditional expression: %qT vs %qT",
4766 arg2_type, arg3_type);
4768 else if (extra_warnings
4769 && ((TREE_CODE (arg2_type) == ENUMERAL_TYPE
4770 && !same_type_p (arg3_type, type_promotes_to (arg2_type)))
4771 || (TREE_CODE (arg3_type) == ENUMERAL_TYPE
4772 && !same_type_p (arg2_type, type_promotes_to (arg3_type)))))
4774 if (complain & tf_warning)
4775 warning (0,
4776 "enumeral and non-enumeral type in conditional expression");
4779 arg2 = perform_implicit_conversion (result_type, arg2, complain);
4780 arg3 = perform_implicit_conversion (result_type, arg3, complain);
4782 /* [expr.cond]
4784 --The second and third operands have pointer type, or one has
4785 pointer type and the other is a null pointer constant; pointer
4786 conversions (_conv.ptr_) and qualification conversions
4787 (_conv.qual_) are performed to bring them to their composite
4788 pointer type (_expr.rel_). The result is of the composite
4789 pointer type.
4791 --The second and third operands have pointer to member type, or
4792 one has pointer to member type and the other is a null pointer
4793 constant; pointer to member conversions (_conv.mem_) and
4794 qualification conversions (_conv.qual_) are performed to bring
4795 them to a common type, whose cv-qualification shall match the
4796 cv-qualification of either the second or the third operand.
4797 The result is of the common type. */
4798 else if ((null_ptr_cst_p (arg2)
4799 && TYPE_PTR_OR_PTRMEM_P (arg3_type))
4800 || (null_ptr_cst_p (arg3)
4801 && TYPE_PTR_OR_PTRMEM_P (arg2_type))
4802 || (TYPE_PTR_P (arg2_type) && TYPE_PTR_P (arg3_type))
4803 || (TYPE_PTRDATAMEM_P (arg2_type) && TYPE_PTRDATAMEM_P (arg3_type))
4804 || (TYPE_PTRMEMFUNC_P (arg2_type) && TYPE_PTRMEMFUNC_P (arg3_type)))
4806 result_type = composite_pointer_type (arg2_type, arg3_type, arg2,
4807 arg3, CPO_CONDITIONAL_EXPR,
4808 complain);
4809 if (result_type == error_mark_node)
4810 return error_mark_node;
4811 arg2 = perform_implicit_conversion (result_type, arg2, complain);
4812 arg3 = perform_implicit_conversion (result_type, arg3, complain);
4815 if (!result_type)
4817 if (complain & tf_error)
4818 error ("operands to ?: have different types %qT and %qT",
4819 arg2_type, arg3_type);
4820 return error_mark_node;
4823 if (arg2 == error_mark_node || arg3 == error_mark_node)
4824 return error_mark_node;
4826 valid_operands:
4827 result = build3 (COND_EXPR, result_type, arg1, arg2, arg3);
4828 if (!cp_unevaluated_operand)
4829 /* Avoid folding within decltype (c++/42013) and noexcept. */
4830 result = fold_if_not_in_template (result);
4832 /* We can't use result_type below, as fold might have returned a
4833 throw_expr. */
4835 if (!lvalue_p)
4837 /* Expand both sides into the same slot, hopefully the target of
4838 the ?: expression. We used to check for TARGET_EXPRs here,
4839 but now we sometimes wrap them in NOP_EXPRs so the test would
4840 fail. */
4841 if (CLASS_TYPE_P (TREE_TYPE (result)))
4842 result = get_target_expr_sfinae (result, complain);
4843 /* If this expression is an rvalue, but might be mistaken for an
4844 lvalue, we must add a NON_LVALUE_EXPR. */
4845 result = rvalue (result);
4848 return result;
4851 /* Wrapper for above. */
4853 tree
4854 build_conditional_expr (tree arg1, tree arg2, tree arg3,
4855 tsubst_flags_t complain)
4857 tree ret;
4858 bool subtime = timevar_cond_start (TV_OVERLOAD);
4859 ret = build_conditional_expr_1 (arg1, arg2, arg3, complain);
4860 timevar_cond_stop (TV_OVERLOAD, subtime);
4861 return ret;
4864 /* OPERAND is an operand to an expression. Perform necessary steps
4865 required before using it. If OPERAND is NULL_TREE, NULL_TREE is
4866 returned. */
4868 static tree
4869 prep_operand (tree operand)
4871 if (operand)
4873 if (CLASS_TYPE_P (TREE_TYPE (operand))
4874 && CLASSTYPE_TEMPLATE_INSTANTIATION (TREE_TYPE (operand)))
4875 /* Make sure the template type is instantiated now. */
4876 instantiate_class_template (TYPE_MAIN_VARIANT (TREE_TYPE (operand)));
4879 return operand;
4882 /* Add each of the viable functions in FNS (a FUNCTION_DECL or
4883 OVERLOAD) to the CANDIDATES, returning an updated list of
4884 CANDIDATES. The ARGS are the arguments provided to the call;
4885 if FIRST_ARG is non-null it is the implicit object argument,
4886 otherwise the first element of ARGS is used if needed. The
4887 EXPLICIT_TARGS are explicit template arguments provided.
4888 TEMPLATE_ONLY is true if only template functions should be
4889 considered. CONVERSION_PATH, ACCESS_PATH, and FLAGS are as for
4890 add_function_candidate. */
4892 static void
4893 add_candidates (tree fns, tree first_arg, const vec<tree, va_gc> *args,
4894 tree return_type,
4895 tree explicit_targs, bool template_only,
4896 tree conversion_path, tree access_path,
4897 int flags,
4898 struct z_candidate **candidates,
4899 tsubst_flags_t complain)
4901 tree ctype;
4902 const vec<tree, va_gc> *non_static_args;
4903 bool check_list_ctor;
4904 bool check_converting;
4905 unification_kind_t strict;
4906 tree fn;
4908 if (!fns)
4909 return;
4911 /* Precalculate special handling of constructors and conversion ops. */
4912 fn = OVL_CURRENT (fns);
4913 if (DECL_CONV_FN_P (fn))
4915 check_list_ctor = false;
4916 check_converting = !!(flags & LOOKUP_ONLYCONVERTING);
4917 if (flags & LOOKUP_NO_CONVERSION)
4918 /* We're doing return_type(x). */
4919 strict = DEDUCE_CONV;
4920 else
4921 /* We're doing x.operator return_type(). */
4922 strict = DEDUCE_EXACT;
4923 /* [over.match.funcs] For conversion functions, the function
4924 is considered to be a member of the class of the implicit
4925 object argument for the purpose of defining the type of
4926 the implicit object parameter. */
4927 ctype = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (first_arg)));
4929 else
4931 if (DECL_CONSTRUCTOR_P (fn))
4933 check_list_ctor = !!(flags & LOOKUP_LIST_ONLY);
4934 /* For list-initialization we consider explicit constructors
4935 and complain if one is chosen. */
4936 check_converting
4937 = ((flags & (LOOKUP_ONLYCONVERTING|LOOKUP_LIST_INIT_CTOR))
4938 == LOOKUP_ONLYCONVERTING);
4940 else
4942 check_list_ctor = false;
4943 check_converting = false;
4945 strict = DEDUCE_CALL;
4946 ctype = conversion_path ? BINFO_TYPE (conversion_path) : NULL_TREE;
4949 if (first_arg)
4950 non_static_args = args;
4951 else
4952 /* Delay creating the implicit this parameter until it is needed. */
4953 non_static_args = NULL;
4955 for (; fns; fns = OVL_NEXT (fns))
4957 tree fn_first_arg;
4958 const vec<tree, va_gc> *fn_args;
4960 fn = OVL_CURRENT (fns);
4962 if (check_converting && DECL_NONCONVERTING_P (fn))
4963 continue;
4964 if (check_list_ctor && !is_list_ctor (fn))
4965 continue;
4967 /* Figure out which set of arguments to use. */
4968 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
4970 /* If this function is a non-static member and we didn't get an
4971 implicit object argument, move it out of args. */
4972 if (first_arg == NULL_TREE)
4974 unsigned int ix;
4975 tree arg;
4976 vec<tree, va_gc> *tempvec;
4977 vec_alloc (tempvec, args->length () - 1);
4978 for (ix = 1; args->iterate (ix, &arg); ++ix)
4979 tempvec->quick_push (arg);
4980 non_static_args = tempvec;
4981 first_arg = build_this ((*args)[0]);
4984 fn_first_arg = first_arg;
4985 fn_args = non_static_args;
4987 else
4989 /* Otherwise, just use the list of arguments provided. */
4990 fn_first_arg = NULL_TREE;
4991 fn_args = args;
4994 if (TREE_CODE (fn) == TEMPLATE_DECL)
4995 add_template_candidate (candidates,
4997 ctype,
4998 explicit_targs,
4999 fn_first_arg,
5000 fn_args,
5001 return_type,
5002 access_path,
5003 conversion_path,
5004 flags,
5005 strict,
5006 complain);
5007 else if (!template_only)
5008 add_function_candidate (candidates,
5010 ctype,
5011 fn_first_arg,
5012 fn_args,
5013 access_path,
5014 conversion_path,
5015 flags,
5016 complain);
5020 static tree
5021 build_new_op_1 (location_t loc, enum tree_code code, int flags, tree arg1,
5022 tree arg2, tree arg3, tree *overload, tsubst_flags_t complain)
5024 struct z_candidate *candidates = 0, *cand;
5025 vec<tree, va_gc> *arglist;
5026 tree fnname;
5027 tree args[3];
5028 tree result = NULL_TREE;
5029 bool result_valid_p = false;
5030 enum tree_code code2 = NOP_EXPR;
5031 enum tree_code code_orig_arg1 = ERROR_MARK;
5032 enum tree_code code_orig_arg2 = ERROR_MARK;
5033 conversion *conv;
5034 void *p;
5035 bool strict_p;
5036 bool any_viable_p;
5038 if (error_operand_p (arg1)
5039 || error_operand_p (arg2)
5040 || error_operand_p (arg3))
5041 return error_mark_node;
5043 if (code == MODIFY_EXPR)
5045 code2 = TREE_CODE (arg3);
5046 arg3 = NULL_TREE;
5047 fnname = ansi_assopname (code2);
5049 else
5050 fnname = ansi_opname (code);
5052 arg1 = prep_operand (arg1);
5054 switch (code)
5056 case NEW_EXPR:
5057 case VEC_NEW_EXPR:
5058 case VEC_DELETE_EXPR:
5059 case DELETE_EXPR:
5060 /* Use build_op_new_call and build_op_delete_call instead. */
5061 gcc_unreachable ();
5063 case CALL_EXPR:
5064 /* Use build_op_call instead. */
5065 gcc_unreachable ();
5067 case TRUTH_ORIF_EXPR:
5068 case TRUTH_ANDIF_EXPR:
5069 case TRUTH_AND_EXPR:
5070 case TRUTH_OR_EXPR:
5071 /* These are saved for the sake of warn_logical_operator. */
5072 code_orig_arg1 = TREE_CODE (arg1);
5073 code_orig_arg2 = TREE_CODE (arg2);
5075 default:
5076 break;
5079 arg2 = prep_operand (arg2);
5080 arg3 = prep_operand (arg3);
5082 if (code == COND_EXPR)
5083 /* Use build_conditional_expr instead. */
5084 gcc_unreachable ();
5085 else if (! IS_OVERLOAD_TYPE (TREE_TYPE (arg1))
5086 && (! arg2 || ! IS_OVERLOAD_TYPE (TREE_TYPE (arg2))))
5087 goto builtin;
5089 if (code == POSTINCREMENT_EXPR || code == POSTDECREMENT_EXPR)
5090 arg2 = integer_zero_node;
5092 vec_alloc (arglist, 3);
5093 arglist->quick_push (arg1);
5094 if (arg2 != NULL_TREE)
5095 arglist->quick_push (arg2);
5096 if (arg3 != NULL_TREE)
5097 arglist->quick_push (arg3);
5099 /* Get the high-water mark for the CONVERSION_OBSTACK. */
5100 p = conversion_obstack_alloc (0);
5102 /* Add namespace-scope operators to the list of functions to
5103 consider. */
5104 add_candidates (lookup_function_nonclass (fnname, arglist, /*block_p=*/true),
5105 NULL_TREE, arglist, NULL_TREE,
5106 NULL_TREE, false, NULL_TREE, NULL_TREE,
5107 flags, &candidates, complain);
5109 args[0] = arg1;
5110 args[1] = arg2;
5111 args[2] = NULL_TREE;
5113 /* Add class-member operators to the candidate set. */
5114 if (CLASS_TYPE_P (TREE_TYPE (arg1)))
5116 tree fns;
5118 fns = lookup_fnfields (TREE_TYPE (arg1), fnname, 1);
5119 if (fns == error_mark_node)
5121 result = error_mark_node;
5122 goto user_defined_result_ready;
5124 if (fns)
5125 add_candidates (BASELINK_FUNCTIONS (fns),
5126 NULL_TREE, arglist, NULL_TREE,
5127 NULL_TREE, false,
5128 BASELINK_BINFO (fns),
5129 BASELINK_ACCESS_BINFO (fns),
5130 flags, &candidates, complain);
5132 /* Per 13.3.1.2/3, 2nd bullet, if no operand has a class type, then
5133 only non-member functions that have type T1 or reference to
5134 cv-qualified-opt T1 for the first argument, if the first argument
5135 has an enumeration type, or T2 or reference to cv-qualified-opt
5136 T2 for the second argument, if the the second argument has an
5137 enumeration type. Filter out those that don't match. */
5138 else if (! arg2 || ! CLASS_TYPE_P (TREE_TYPE (arg2)))
5140 struct z_candidate **candp, **next;
5142 for (candp = &candidates; *candp; candp = next)
5144 tree parmlist, parmtype;
5145 int i, nargs = (arg2 ? 2 : 1);
5147 cand = *candp;
5148 next = &cand->next;
5150 parmlist = TYPE_ARG_TYPES (TREE_TYPE (cand->fn));
5152 for (i = 0; i < nargs; ++i)
5154 parmtype = TREE_VALUE (parmlist);
5156 if (TREE_CODE (parmtype) == REFERENCE_TYPE)
5157 parmtype = TREE_TYPE (parmtype);
5158 if (TREE_CODE (TREE_TYPE (args[i])) == ENUMERAL_TYPE
5159 && (same_type_ignoring_top_level_qualifiers_p
5160 (TREE_TYPE (args[i]), parmtype)))
5161 break;
5163 parmlist = TREE_CHAIN (parmlist);
5166 /* No argument has an appropriate type, so remove this
5167 candidate function from the list. */
5168 if (i == nargs)
5170 *candp = cand->next;
5171 next = candp;
5176 add_builtin_candidates (&candidates, code, code2, fnname, args,
5177 flags, complain);
5179 switch (code)
5181 case COMPOUND_EXPR:
5182 case ADDR_EXPR:
5183 /* For these, the built-in candidates set is empty
5184 [over.match.oper]/3. We don't want non-strict matches
5185 because exact matches are always possible with built-in
5186 operators. The built-in candidate set for COMPONENT_REF
5187 would be empty too, but since there are no such built-in
5188 operators, we accept non-strict matches for them. */
5189 strict_p = true;
5190 break;
5192 default:
5193 strict_p = pedantic;
5194 break;
5197 candidates = splice_viable (candidates, strict_p, &any_viable_p);
5198 if (!any_viable_p)
5200 switch (code)
5202 case POSTINCREMENT_EXPR:
5203 case POSTDECREMENT_EXPR:
5204 /* Don't try anything fancy if we're not allowed to produce
5205 errors. */
5206 if (!(complain & tf_error))
5207 return error_mark_node;
5209 /* Look for an `operator++ (int)'. Pre-1985 C++ didn't
5210 distinguish between prefix and postfix ++ and
5211 operator++() was used for both, so we allow this with
5212 -fpermissive. */
5213 else
5215 const char *msg = (flag_permissive)
5216 ? G_("no %<%D(int)%> declared for postfix %qs,"
5217 " trying prefix operator instead")
5218 : G_("no %<%D(int)%> declared for postfix %qs");
5219 permerror (loc, msg, fnname, operator_name_info[code].name);
5222 if (!flag_permissive)
5223 return error_mark_node;
5225 if (code == POSTINCREMENT_EXPR)
5226 code = PREINCREMENT_EXPR;
5227 else
5228 code = PREDECREMENT_EXPR;
5229 result = build_new_op_1 (loc, code, flags, arg1, NULL_TREE,
5230 NULL_TREE, overload, complain);
5231 break;
5233 /* The caller will deal with these. */
5234 case ADDR_EXPR:
5235 case COMPOUND_EXPR:
5236 case COMPONENT_REF:
5237 result = NULL_TREE;
5238 result_valid_p = true;
5239 break;
5241 default:
5242 if (complain & tf_error)
5244 /* If one of the arguments of the operator represents
5245 an invalid use of member function pointer, try to report
5246 a meaningful error ... */
5247 if (invalid_nonstatic_memfn_p (arg1, tf_error)
5248 || invalid_nonstatic_memfn_p (arg2, tf_error)
5249 || invalid_nonstatic_memfn_p (arg3, tf_error))
5250 /* We displayed the error message. */;
5251 else
5253 /* ... Otherwise, report the more generic
5254 "no matching operator found" error */
5255 op_error (loc, code, code2, arg1, arg2, arg3, FALSE);
5256 print_z_candidates (loc, candidates);
5259 result = error_mark_node;
5260 break;
5263 else
5265 cand = tourney (candidates, complain);
5266 if (cand == 0)
5268 if (complain & tf_error)
5270 op_error (loc, code, code2, arg1, arg2, arg3, TRUE);
5271 print_z_candidates (loc, candidates);
5273 result = error_mark_node;
5275 else if (TREE_CODE (cand->fn) == FUNCTION_DECL)
5277 if (overload)
5278 *overload = cand->fn;
5280 if (resolve_args (arglist, complain) == NULL)
5281 result = error_mark_node;
5282 else
5283 result = build_over_call (cand, LOOKUP_NORMAL, complain);
5285 else
5287 /* Give any warnings we noticed during overload resolution. */
5288 if (cand->warnings && (complain & tf_warning))
5290 struct candidate_warning *w;
5291 for (w = cand->warnings; w; w = w->next)
5292 joust (cand, w->loser, 1, complain);
5295 /* Check for comparison of different enum types. */
5296 switch (code)
5298 case GT_EXPR:
5299 case LT_EXPR:
5300 case GE_EXPR:
5301 case LE_EXPR:
5302 case EQ_EXPR:
5303 case NE_EXPR:
5304 if (TREE_CODE (TREE_TYPE (arg1)) == ENUMERAL_TYPE
5305 && TREE_CODE (TREE_TYPE (arg2)) == ENUMERAL_TYPE
5306 && (TYPE_MAIN_VARIANT (TREE_TYPE (arg1))
5307 != TYPE_MAIN_VARIANT (TREE_TYPE (arg2)))
5308 && (complain & tf_warning))
5310 warning (OPT_Wenum_compare,
5311 "comparison between %q#T and %q#T",
5312 TREE_TYPE (arg1), TREE_TYPE (arg2));
5314 break;
5315 default:
5316 break;
5319 /* We need to strip any leading REF_BIND so that bitfields
5320 don't cause errors. This should not remove any important
5321 conversions, because builtins don't apply to class
5322 objects directly. */
5323 conv = cand->convs[0];
5324 if (conv->kind == ck_ref_bind)
5325 conv = next_conversion (conv);
5326 arg1 = convert_like (conv, arg1, complain);
5328 if (arg2)
5330 conv = cand->convs[1];
5331 if (conv->kind == ck_ref_bind)
5332 conv = next_conversion (conv);
5333 else
5334 arg2 = decay_conversion (arg2, complain);
5336 /* We need to call warn_logical_operator before
5337 converting arg2 to a boolean_type, but after
5338 decaying an enumerator to its value. */
5339 if (complain & tf_warning)
5340 warn_logical_operator (loc, code, boolean_type_node,
5341 code_orig_arg1, arg1,
5342 code_orig_arg2, arg2);
5344 arg2 = convert_like (conv, arg2, complain);
5346 if (arg3)
5348 conv = cand->convs[2];
5349 if (conv->kind == ck_ref_bind)
5350 conv = next_conversion (conv);
5351 arg3 = convert_like (conv, arg3, complain);
5357 user_defined_result_ready:
5359 /* Free all the conversions we allocated. */
5360 obstack_free (&conversion_obstack, p);
5362 if (result || result_valid_p)
5363 return result;
5365 builtin:
5366 switch (code)
5368 case MODIFY_EXPR:
5369 return cp_build_modify_expr (arg1, code2, arg2, complain);
5371 case INDIRECT_REF:
5372 return cp_build_indirect_ref (arg1, RO_UNARY_STAR, complain);
5374 case TRUTH_ANDIF_EXPR:
5375 case TRUTH_ORIF_EXPR:
5376 case TRUTH_AND_EXPR:
5377 case TRUTH_OR_EXPR:
5378 warn_logical_operator (loc, code, boolean_type_node,
5379 code_orig_arg1, arg1, code_orig_arg2, arg2);
5380 /* Fall through. */
5381 case PLUS_EXPR:
5382 case MINUS_EXPR:
5383 case MULT_EXPR:
5384 case TRUNC_DIV_EXPR:
5385 case GT_EXPR:
5386 case LT_EXPR:
5387 case GE_EXPR:
5388 case LE_EXPR:
5389 case EQ_EXPR:
5390 case NE_EXPR:
5391 case MAX_EXPR:
5392 case MIN_EXPR:
5393 case LSHIFT_EXPR:
5394 case RSHIFT_EXPR:
5395 case TRUNC_MOD_EXPR:
5396 case BIT_AND_EXPR:
5397 case BIT_IOR_EXPR:
5398 case BIT_XOR_EXPR:
5399 return cp_build_binary_op (input_location, code, arg1, arg2, complain);
5401 case UNARY_PLUS_EXPR:
5402 case NEGATE_EXPR:
5403 case BIT_NOT_EXPR:
5404 case TRUTH_NOT_EXPR:
5405 case PREINCREMENT_EXPR:
5406 case POSTINCREMENT_EXPR:
5407 case PREDECREMENT_EXPR:
5408 case POSTDECREMENT_EXPR:
5409 case REALPART_EXPR:
5410 case IMAGPART_EXPR:
5411 case ABS_EXPR:
5412 return cp_build_unary_op (code, arg1, candidates != 0, complain);
5414 case ARRAY_REF:
5415 return cp_build_array_ref (input_location, arg1, arg2, complain);
5417 case MEMBER_REF:
5418 return build_m_component_ref (cp_build_indirect_ref (arg1, RO_ARROW_STAR,
5419 complain),
5420 arg2, complain);
5422 /* The caller will deal with these. */
5423 case ADDR_EXPR:
5424 case COMPONENT_REF:
5425 case COMPOUND_EXPR:
5426 return NULL_TREE;
5428 default:
5429 gcc_unreachable ();
5431 return NULL_TREE;
5434 /* Wrapper for above. */
5436 tree
5437 build_new_op (location_t loc, enum tree_code code, int flags,
5438 tree arg1, tree arg2, tree arg3,
5439 tree *overload, tsubst_flags_t complain)
5441 tree ret;
5442 bool subtime = timevar_cond_start (TV_OVERLOAD);
5443 ret = build_new_op_1 (loc, code, flags, arg1, arg2, arg3,
5444 overload, complain);
5445 timevar_cond_stop (TV_OVERLOAD, subtime);
5446 return ret;
5449 /* Returns true iff T, an element of an OVERLOAD chain, is a usual
5450 deallocation function (3.7.4.2 [basic.stc.dynamic.deallocation]). */
5452 static bool
5453 non_placement_deallocation_fn_p (tree t)
5455 /* A template instance is never a usual deallocation function,
5456 regardless of its signature. */
5457 if (TREE_CODE (t) == TEMPLATE_DECL
5458 || primary_template_instantiation_p (t))
5459 return false;
5461 /* If a class T has a member deallocation function named operator delete
5462 with exactly one parameter, then that function is a usual
5463 (non-placement) deallocation function. If class T does not declare
5464 such an operator delete but does declare a member deallocation
5465 function named operator delete with exactly two parameters, the second
5466 of which has type std::size_t (18.2), then this function is a usual
5467 deallocation function. */
5468 t = FUNCTION_ARG_CHAIN (t);
5469 if (t == void_list_node
5470 || (t && same_type_p (TREE_VALUE (t), size_type_node)
5471 && TREE_CHAIN (t) == void_list_node))
5472 return true;
5473 return false;
5476 /* Build a call to operator delete. This has to be handled very specially,
5477 because the restrictions on what signatures match are different from all
5478 other call instances. For a normal delete, only a delete taking (void *)
5479 or (void *, size_t) is accepted. For a placement delete, only an exact
5480 match with the placement new is accepted.
5482 CODE is either DELETE_EXPR or VEC_DELETE_EXPR.
5483 ADDR is the pointer to be deleted.
5484 SIZE is the size of the memory block to be deleted.
5485 GLOBAL_P is true if the delete-expression should not consider
5486 class-specific delete operators.
5487 PLACEMENT is the corresponding placement new call, or NULL_TREE.
5489 If this call to "operator delete" is being generated as part to
5490 deallocate memory allocated via a new-expression (as per [expr.new]
5491 which requires that if the initialization throws an exception then
5492 we call a deallocation function), then ALLOC_FN is the allocation
5493 function. */
5495 tree
5496 build_op_delete_call (enum tree_code code, tree addr, tree size,
5497 bool global_p, tree placement,
5498 tree alloc_fn, tsubst_flags_t complain)
5500 tree fn = NULL_TREE;
5501 tree fns, fnname, type, t;
5503 if (addr == error_mark_node)
5504 return error_mark_node;
5506 type = strip_array_types (TREE_TYPE (TREE_TYPE (addr)));
5508 fnname = ansi_opname (code);
5510 if (CLASS_TYPE_P (type)
5511 && COMPLETE_TYPE_P (complete_type (type))
5512 && !global_p)
5513 /* In [class.free]
5515 If the result of the lookup is ambiguous or inaccessible, or if
5516 the lookup selects a placement deallocation function, the
5517 program is ill-formed.
5519 Therefore, we ask lookup_fnfields to complain about ambiguity. */
5521 fns = lookup_fnfields (TYPE_BINFO (type), fnname, 1);
5522 if (fns == error_mark_node)
5523 return error_mark_node;
5525 else
5526 fns = NULL_TREE;
5528 if (fns == NULL_TREE)
5529 fns = lookup_name_nonclass (fnname);
5531 /* Strip const and volatile from addr. */
5532 addr = cp_convert (ptr_type_node, addr, complain);
5534 if (placement)
5536 /* "A declaration of a placement deallocation function matches the
5537 declaration of a placement allocation function if it has the same
5538 number of parameters and, after parameter transformations (8.3.5),
5539 all parameter types except the first are identical."
5541 So we build up the function type we want and ask instantiate_type
5542 to get it for us. */
5543 t = FUNCTION_ARG_CHAIN (alloc_fn);
5544 t = tree_cons (NULL_TREE, ptr_type_node, t);
5545 t = build_function_type (void_type_node, t);
5547 fn = instantiate_type (t, fns, tf_none);
5548 if (fn == error_mark_node)
5549 return NULL_TREE;
5551 if (BASELINK_P (fn))
5552 fn = BASELINK_FUNCTIONS (fn);
5554 /* "If the lookup finds the two-parameter form of a usual deallocation
5555 function (3.7.4.2) and that function, considered as a placement
5556 deallocation function, would have been selected as a match for the
5557 allocation function, the program is ill-formed." */
5558 if (non_placement_deallocation_fn_p (fn))
5560 /* But if the class has an operator delete (void *), then that is
5561 the usual deallocation function, so we shouldn't complain
5562 about using the operator delete (void *, size_t). */
5563 for (t = BASELINK_P (fns) ? BASELINK_FUNCTIONS (fns) : fns;
5564 t; t = OVL_NEXT (t))
5566 tree elt = OVL_CURRENT (t);
5567 if (non_placement_deallocation_fn_p (elt)
5568 && FUNCTION_ARG_CHAIN (elt) == void_list_node)
5569 goto ok;
5571 if (complain & tf_error)
5573 permerror (0, "non-placement deallocation function %q+D", fn);
5574 permerror (input_location, "selected for placement delete");
5576 else
5577 return error_mark_node;
5578 ok:;
5581 else
5582 /* "Any non-placement deallocation function matches a non-placement
5583 allocation function. If the lookup finds a single matching
5584 deallocation function, that function will be called; otherwise, no
5585 deallocation function will be called." */
5586 for (t = BASELINK_P (fns) ? BASELINK_FUNCTIONS (fns) : fns;
5587 t; t = OVL_NEXT (t))
5589 tree elt = OVL_CURRENT (t);
5590 if (non_placement_deallocation_fn_p (elt))
5592 fn = elt;
5593 /* "If a class T has a member deallocation function named
5594 operator delete with exactly one parameter, then that
5595 function is a usual (non-placement) deallocation
5596 function. If class T does not declare such an operator
5597 delete but does declare a member deallocation function named
5598 operator delete with exactly two parameters, the second of
5599 which has type std::size_t (18.2), then this function is a
5600 usual deallocation function."
5602 So (void*) beats (void*, size_t). */
5603 if (FUNCTION_ARG_CHAIN (fn) == void_list_node)
5604 break;
5608 /* If we have a matching function, call it. */
5609 if (fn)
5611 gcc_assert (TREE_CODE (fn) == FUNCTION_DECL);
5613 /* If the FN is a member function, make sure that it is
5614 accessible. */
5615 if (BASELINK_P (fns))
5616 perform_or_defer_access_check (BASELINK_BINFO (fns), fn, fn,
5617 complain);
5619 /* Core issue 901: It's ok to new a type with deleted delete. */
5620 if (DECL_DELETED_FN (fn) && alloc_fn)
5621 return NULL_TREE;
5623 if (placement)
5625 /* The placement args might not be suitable for overload
5626 resolution at this point, so build the call directly. */
5627 int nargs = call_expr_nargs (placement);
5628 tree *argarray = XALLOCAVEC (tree, nargs);
5629 int i;
5630 argarray[0] = addr;
5631 for (i = 1; i < nargs; i++)
5632 argarray[i] = CALL_EXPR_ARG (placement, i);
5633 mark_used (fn);
5634 return build_cxx_call (fn, nargs, argarray, complain);
5636 else
5638 tree ret;
5639 vec<tree, va_gc> *args;
5640 vec_alloc (args, 2);
5641 args->quick_push (addr);
5642 if (FUNCTION_ARG_CHAIN (fn) != void_list_node)
5643 args->quick_push (size);
5644 ret = cp_build_function_call_vec (fn, &args, complain);
5645 vec_free (args);
5646 return ret;
5650 /* [expr.new]
5652 If no unambiguous matching deallocation function can be found,
5653 propagating the exception does not cause the object's memory to
5654 be freed. */
5655 if (alloc_fn)
5657 if ((complain & tf_warning)
5658 && !placement)
5659 warning (0, "no corresponding deallocation function for %qD",
5660 alloc_fn);
5661 return NULL_TREE;
5664 if (complain & tf_error)
5665 error ("no suitable %<operator %s%> for %qT",
5666 operator_name_info[(int)code].name, type);
5667 return error_mark_node;
5670 /* If the current scope isn't allowed to access DECL along
5671 BASETYPE_PATH, give an error. The most derived class in
5672 BASETYPE_PATH is the one used to qualify DECL. DIAG_DECL is
5673 the declaration to use in the error diagnostic. */
5675 bool
5676 enforce_access (tree basetype_path, tree decl, tree diag_decl,
5677 tsubst_flags_t complain)
5679 gcc_assert (TREE_CODE (basetype_path) == TREE_BINFO);
5681 if (!accessible_p (basetype_path, decl, true))
5683 if (complain & tf_error)
5685 if (TREE_PRIVATE (decl))
5686 error ("%q+#D is private", diag_decl);
5687 else if (TREE_PROTECTED (decl))
5688 error ("%q+#D is protected", diag_decl);
5689 else
5690 error ("%q+#D is inaccessible", diag_decl);
5691 error ("within this context");
5693 return false;
5696 return true;
5699 /* Initialize a temporary of type TYPE with EXPR. The FLAGS are a
5700 bitwise or of LOOKUP_* values. If any errors are warnings are
5701 generated, set *DIAGNOSTIC_FN to "error" or "warning",
5702 respectively. If no diagnostics are generated, set *DIAGNOSTIC_FN
5703 to NULL. */
5705 static tree
5706 build_temp (tree expr, tree type, int flags,
5707 diagnostic_t *diagnostic_kind, tsubst_flags_t complain)
5709 int savew, savee;
5710 vec<tree, va_gc> *args;
5712 savew = warningcount, savee = errorcount;
5713 args = make_tree_vector_single (expr);
5714 expr = build_special_member_call (NULL_TREE, complete_ctor_identifier,
5715 &args, type, flags, complain);
5716 release_tree_vector (args);
5717 if (warningcount > savew)
5718 *diagnostic_kind = DK_WARNING;
5719 else if (errorcount > savee)
5720 *diagnostic_kind = DK_ERROR;
5721 else
5722 *diagnostic_kind = DK_UNSPECIFIED;
5723 return expr;
5726 /* Perform warnings about peculiar, but valid, conversions from/to NULL.
5727 EXPR is implicitly converted to type TOTYPE.
5728 FN and ARGNUM are used for diagnostics. */
5730 static void
5731 conversion_null_warnings (tree totype, tree expr, tree fn, int argnum)
5733 /* Issue warnings about peculiar, but valid, uses of NULL. */
5734 if (expr == null_node && TREE_CODE (totype) != BOOLEAN_TYPE
5735 && ARITHMETIC_TYPE_P (totype))
5737 source_location loc =
5738 expansion_point_location_if_in_system_header (input_location);
5740 if (fn)
5741 warning_at (loc, OPT_Wconversion_null,
5742 "passing NULL to non-pointer argument %P of %qD",
5743 argnum, fn);
5744 else
5745 warning_at (loc, OPT_Wconversion_null,
5746 "converting to non-pointer type %qT from NULL", totype);
5749 /* Issue warnings if "false" is converted to a NULL pointer */
5750 else if (TREE_CODE (TREE_TYPE (expr)) == BOOLEAN_TYPE
5751 && TYPE_PTR_P (totype))
5753 if (fn)
5754 warning_at (input_location, OPT_Wconversion_null,
5755 "converting %<false%> to pointer type for argument %P "
5756 "of %qD", argnum, fn);
5757 else
5758 warning_at (input_location, OPT_Wconversion_null,
5759 "converting %<false%> to pointer type %qT", totype);
5763 /* Perform the conversions in CONVS on the expression EXPR. FN and
5764 ARGNUM are used for diagnostics. ARGNUM is zero based, -1
5765 indicates the `this' argument of a method. INNER is nonzero when
5766 being called to continue a conversion chain. It is negative when a
5767 reference binding will be applied, positive otherwise. If
5768 ISSUE_CONVERSION_WARNINGS is true, warnings about suspicious
5769 conversions will be emitted if appropriate. If C_CAST_P is true,
5770 this conversion is coming from a C-style cast; in that case,
5771 conversions to inaccessible bases are permitted. */
5773 static tree
5774 convert_like_real (conversion *convs, tree expr, tree fn, int argnum,
5775 int inner, bool issue_conversion_warnings,
5776 bool c_cast_p, tsubst_flags_t complain)
5778 tree totype = convs->type;
5779 diagnostic_t diag_kind;
5780 int flags;
5781 location_t loc = EXPR_LOC_OR_HERE (expr);
5783 if (convs->bad_p && !(complain & tf_error))
5784 return error_mark_node;
5786 if (convs->bad_p
5787 && convs->kind != ck_user
5788 && convs->kind != ck_list
5789 && convs->kind != ck_ambig
5790 && (convs->kind != ck_ref_bind
5791 || convs->user_conv_p)
5792 && convs->kind != ck_rvalue
5793 && convs->kind != ck_base)
5795 conversion *t = convs;
5797 /* Give a helpful error if this is bad because of excess braces. */
5798 if (BRACE_ENCLOSED_INITIALIZER_P (expr)
5799 && SCALAR_TYPE_P (totype)
5800 && CONSTRUCTOR_NELTS (expr) > 0
5801 && BRACE_ENCLOSED_INITIALIZER_P (CONSTRUCTOR_ELT (expr, 0)->value))
5802 permerror (loc, "too many braces around initializer for %qT", totype);
5804 for (; t ; t = next_conversion (t))
5806 if (t->kind == ck_user && t->cand->reason)
5808 permerror (loc, "invalid user-defined conversion "
5809 "from %qT to %qT", TREE_TYPE (expr), totype);
5810 print_z_candidate (loc, "candidate is:", t->cand);
5811 expr = convert_like_real (t, expr, fn, argnum, 1,
5812 /*issue_conversion_warnings=*/false,
5813 /*c_cast_p=*/false,
5814 complain);
5815 if (convs->kind == ck_ref_bind)
5816 return convert_to_reference (totype, expr, CONV_IMPLICIT,
5817 LOOKUP_NORMAL, NULL_TREE,
5818 complain);
5819 else
5820 return cp_convert (totype, expr, complain);
5822 else if (t->kind == ck_user || !t->bad_p)
5824 expr = convert_like_real (t, expr, fn, argnum, 1,
5825 /*issue_conversion_warnings=*/false,
5826 /*c_cast_p=*/false,
5827 complain);
5828 break;
5830 else if (t->kind == ck_ambig)
5831 return convert_like_real (t, expr, fn, argnum, 1,
5832 /*issue_conversion_warnings=*/false,
5833 /*c_cast_p=*/false,
5834 complain);
5835 else if (t->kind == ck_identity)
5836 break;
5839 permerror (loc, "invalid conversion from %qT to %qT",
5840 TREE_TYPE (expr), totype);
5841 if (fn)
5842 permerror (DECL_SOURCE_LOCATION (fn),
5843 " initializing argument %P of %qD", argnum, fn);
5845 return cp_convert (totype, expr, complain);
5848 if (issue_conversion_warnings && (complain & tf_warning))
5849 conversion_null_warnings (totype, expr, fn, argnum);
5851 switch (convs->kind)
5853 case ck_user:
5855 struct z_candidate *cand = convs->cand;
5856 tree convfn = cand->fn;
5857 unsigned i;
5859 /* If we're initializing from {}, it's value-initialization. */
5860 if (BRACE_ENCLOSED_INITIALIZER_P (expr)
5861 && CONSTRUCTOR_NELTS (expr) == 0
5862 && TYPE_HAS_DEFAULT_CONSTRUCTOR (totype))
5864 bool direct = CONSTRUCTOR_IS_DIRECT_INIT (expr);
5865 expr = build_value_init (totype, complain);
5866 expr = get_target_expr_sfinae (expr, complain);
5867 if (expr != error_mark_node)
5869 TARGET_EXPR_LIST_INIT_P (expr) = true;
5870 TARGET_EXPR_DIRECT_INIT_P (expr) = direct;
5872 return expr;
5875 expr = mark_rvalue_use (expr);
5877 /* When converting from an init list we consider explicit
5878 constructors, but actually trying to call one is an error. */
5879 if (DECL_NONCONVERTING_P (convfn) && DECL_CONSTRUCTOR_P (convfn)
5880 /* Unless this is for direct-list-initialization. */
5881 && !(BRACE_ENCLOSED_INITIALIZER_P (expr)
5882 && CONSTRUCTOR_IS_DIRECT_INIT (expr))
5883 /* Unless we're calling it for value-initialization from an
5884 empty list, since that is handled separately in 8.5.4. */
5885 && cand->num_convs > 0)
5887 error ("converting to %qT from initializer list would use "
5888 "explicit constructor %qD", totype, convfn);
5891 /* Set user_conv_p on the argument conversions, so rvalue/base
5892 handling knows not to allow any more UDCs. */
5893 for (i = 0; i < cand->num_convs; ++i)
5894 cand->convs[i]->user_conv_p = true;
5896 expr = build_over_call (cand, LOOKUP_NORMAL, complain);
5898 /* If this is a constructor or a function returning an aggr type,
5899 we need to build up a TARGET_EXPR. */
5900 if (DECL_CONSTRUCTOR_P (convfn))
5902 expr = build_cplus_new (totype, expr, complain);
5904 /* Remember that this was list-initialization. */
5905 if (convs->check_narrowing && expr != error_mark_node)
5906 TARGET_EXPR_LIST_INIT_P (expr) = true;
5909 return expr;
5911 case ck_identity:
5912 expr = mark_rvalue_use (expr);
5913 if (BRACE_ENCLOSED_INITIALIZER_P (expr))
5915 int nelts = CONSTRUCTOR_NELTS (expr);
5916 if (nelts == 0)
5917 expr = build_value_init (totype, complain);
5918 else if (nelts == 1)
5919 expr = CONSTRUCTOR_ELT (expr, 0)->value;
5920 else
5921 gcc_unreachable ();
5924 if (type_unknown_p (expr))
5925 expr = instantiate_type (totype, expr, complain);
5926 /* Convert a constant to its underlying value, unless we are
5927 about to bind it to a reference, in which case we need to
5928 leave it as an lvalue. */
5929 if (inner >= 0)
5931 expr = decl_constant_value_safe (expr);
5932 if (expr == null_node && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (totype))
5933 /* If __null has been converted to an integer type, we do not
5934 want to warn about uses of EXPR as an integer, rather than
5935 as a pointer. */
5936 expr = build_int_cst (totype, 0);
5938 return expr;
5939 case ck_ambig:
5940 /* We leave bad_p off ck_ambig because overload resolution considers
5941 it valid, it just fails when we try to perform it. So we need to
5942 check complain here, too. */
5943 if (complain & tf_error)
5945 /* Call build_user_type_conversion again for the error. */
5946 build_user_type_conversion (totype, convs->u.expr, LOOKUP_NORMAL,
5947 complain);
5948 if (fn)
5949 error (" initializing argument %P of %q+D", argnum, fn);
5951 return error_mark_node;
5953 case ck_list:
5955 /* Conversion to std::initializer_list<T>. */
5956 tree elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (totype), 0);
5957 tree new_ctor = build_constructor (init_list_type_node, NULL);
5958 unsigned len = CONSTRUCTOR_NELTS (expr);
5959 tree array, val, field;
5960 vec<constructor_elt, va_gc> *vec = NULL;
5961 unsigned ix;
5963 /* Convert all the elements. */
5964 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expr), ix, val)
5966 tree sub = convert_like_real (convs->u.list[ix], val, fn, argnum,
5967 1, false, false, complain);
5968 if (sub == error_mark_node)
5969 return sub;
5970 if (!BRACE_ENCLOSED_INITIALIZER_P (val))
5971 check_narrowing (TREE_TYPE (sub), val);
5972 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_ctor), NULL_TREE, sub);
5973 if (!TREE_CONSTANT (sub))
5974 TREE_CONSTANT (new_ctor) = false;
5976 /* Build up the array. */
5977 elttype = cp_build_qualified_type
5978 (elttype, cp_type_quals (elttype) | TYPE_QUAL_CONST);
5979 array = build_array_of_n_type (elttype, len);
5980 array = finish_compound_literal (array, new_ctor, complain);
5981 /* Take the address explicitly rather than via decay_conversion
5982 to avoid the error about taking the address of a temporary. */
5983 array = cp_build_addr_expr (array, complain);
5984 array = cp_convert (build_pointer_type (elttype), array, complain);
5986 /* Build up the initializer_list object. */
5987 totype = complete_type (totype);
5988 field = next_initializable_field (TYPE_FIELDS (totype));
5989 CONSTRUCTOR_APPEND_ELT (vec, field, array);
5990 field = next_initializable_field (DECL_CHAIN (field));
5991 CONSTRUCTOR_APPEND_ELT (vec, field, size_int (len));
5992 new_ctor = build_constructor (totype, vec);
5993 return get_target_expr_sfinae (new_ctor, complain);
5996 case ck_aggr:
5997 if (TREE_CODE (totype) == COMPLEX_TYPE)
5999 tree real = CONSTRUCTOR_ELT (expr, 0)->value;
6000 tree imag = CONSTRUCTOR_ELT (expr, 1)->value;
6001 real = perform_implicit_conversion (TREE_TYPE (totype),
6002 real, complain);
6003 imag = perform_implicit_conversion (TREE_TYPE (totype),
6004 imag, complain);
6005 expr = build2 (COMPLEX_EXPR, totype, real, imag);
6006 return fold_if_not_in_template (expr);
6008 expr = reshape_init (totype, expr, complain);
6009 return get_target_expr_sfinae (digest_init (totype, expr, complain),
6010 complain);
6012 default:
6013 break;
6016 expr = convert_like_real (next_conversion (convs), expr, fn, argnum,
6017 convs->kind == ck_ref_bind ? -1 : 1,
6018 convs->kind == ck_ref_bind ? issue_conversion_warnings : false,
6019 c_cast_p,
6020 complain);
6021 if (expr == error_mark_node)
6022 return error_mark_node;
6024 switch (convs->kind)
6026 case ck_rvalue:
6027 expr = decay_conversion (expr, complain);
6028 if (expr == error_mark_node)
6029 return error_mark_node;
6031 if (! MAYBE_CLASS_TYPE_P (totype))
6032 return expr;
6033 /* Else fall through. */
6034 case ck_base:
6035 if (convs->kind == ck_base && !convs->need_temporary_p)
6037 /* We are going to bind a reference directly to a base-class
6038 subobject of EXPR. */
6039 /* Build an expression for `*((base*) &expr)'. */
6040 expr = cp_build_addr_expr (expr, complain);
6041 expr = convert_to_base (expr, build_pointer_type (totype),
6042 !c_cast_p, /*nonnull=*/true, complain);
6043 expr = cp_build_indirect_ref (expr, RO_IMPLICIT_CONVERSION, complain);
6044 return expr;
6047 /* Copy-initialization where the cv-unqualified version of the source
6048 type is the same class as, or a derived class of, the class of the
6049 destination [is treated as direct-initialization]. [dcl.init] */
6050 flags = LOOKUP_NORMAL|LOOKUP_ONLYCONVERTING;
6051 if (convs->user_conv_p)
6052 /* This conversion is being done in the context of a user-defined
6053 conversion (i.e. the second step of copy-initialization), so
6054 don't allow any more. */
6055 flags |= LOOKUP_NO_CONVERSION;
6056 if (convs->rvaluedness_matches_p)
6057 flags |= LOOKUP_PREFER_RVALUE;
6058 if (TREE_CODE (expr) == TARGET_EXPR
6059 && TARGET_EXPR_LIST_INIT_P (expr))
6060 /* Copy-list-initialization doesn't actually involve a copy. */
6061 return expr;
6062 expr = build_temp (expr, totype, flags, &diag_kind, complain);
6063 if (diag_kind && fn && complain)
6064 emit_diagnostic (diag_kind, DECL_SOURCE_LOCATION (fn), 0,
6065 " initializing argument %P of %qD", argnum, fn);
6066 return build_cplus_new (totype, expr, complain);
6068 case ck_ref_bind:
6070 tree ref_type = totype;
6072 if (convs->bad_p && !next_conversion (convs)->bad_p)
6074 gcc_assert (TYPE_REF_IS_RVALUE (ref_type)
6075 && real_lvalue_p (expr));
6077 error_at (loc, "cannot bind %qT lvalue to %qT",
6078 TREE_TYPE (expr), totype);
6079 if (fn)
6080 error (" initializing argument %P of %q+D", argnum, fn);
6081 return error_mark_node;
6084 /* If necessary, create a temporary.
6086 VA_ARG_EXPR and CONSTRUCTOR expressions are special cases
6087 that need temporaries, even when their types are reference
6088 compatible with the type of reference being bound, so the
6089 upcoming call to cp_build_addr_expr doesn't fail. */
6090 if (convs->need_temporary_p
6091 || TREE_CODE (expr) == CONSTRUCTOR
6092 || TREE_CODE (expr) == VA_ARG_EXPR)
6094 /* Otherwise, a temporary of type "cv1 T1" is created and
6095 initialized from the initializer expression using the rules
6096 for a non-reference copy-initialization (8.5). */
6098 tree type = TREE_TYPE (ref_type);
6099 cp_lvalue_kind lvalue = real_lvalue_p (expr);
6101 gcc_assert (same_type_ignoring_top_level_qualifiers_p
6102 (type, next_conversion (convs)->type));
6103 if (!CP_TYPE_CONST_NON_VOLATILE_P (type)
6104 && !TYPE_REF_IS_RVALUE (ref_type))
6106 /* If the reference is volatile or non-const, we
6107 cannot create a temporary. */
6108 if (lvalue & clk_bitfield)
6109 error_at (loc, "cannot bind bitfield %qE to %qT",
6110 expr, ref_type);
6111 else if (lvalue & clk_packed)
6112 error_at (loc, "cannot bind packed field %qE to %qT",
6113 expr, ref_type);
6114 else
6115 error_at (loc, "cannot bind rvalue %qE to %qT",
6116 expr, ref_type);
6117 return error_mark_node;
6119 /* If the source is a packed field, and we must use a copy
6120 constructor, then building the target expr will require
6121 binding the field to the reference parameter to the
6122 copy constructor, and we'll end up with an infinite
6123 loop. If we can use a bitwise copy, then we'll be
6124 OK. */
6125 if ((lvalue & clk_packed)
6126 && CLASS_TYPE_P (type)
6127 && type_has_nontrivial_copy_init (type))
6129 error_at (loc, "cannot bind packed field %qE to %qT",
6130 expr, ref_type);
6131 return error_mark_node;
6133 if (lvalue & clk_bitfield)
6135 expr = convert_bitfield_to_declared_type (expr);
6136 expr = fold_convert (type, expr);
6138 expr = build_target_expr_with_type (expr, type, complain);
6141 /* Take the address of the thing to which we will bind the
6142 reference. */
6143 expr = cp_build_addr_expr (expr, complain);
6144 if (expr == error_mark_node)
6145 return error_mark_node;
6147 /* Convert it to a pointer to the type referred to by the
6148 reference. This will adjust the pointer if a derived to
6149 base conversion is being performed. */
6150 expr = cp_convert (build_pointer_type (TREE_TYPE (ref_type)),
6151 expr, complain);
6152 /* Convert the pointer to the desired reference type. */
6153 return build_nop (ref_type, expr);
6156 case ck_lvalue:
6157 return decay_conversion (expr, complain);
6159 case ck_qual:
6160 /* Warn about deprecated conversion if appropriate. */
6161 string_conv_p (totype, expr, 1);
6162 break;
6164 case ck_ptr:
6165 if (convs->base_p)
6166 expr = convert_to_base (expr, totype, !c_cast_p,
6167 /*nonnull=*/false, complain);
6168 return build_nop (totype, expr);
6170 case ck_pmem:
6171 return convert_ptrmem (totype, expr, /*allow_inverse_p=*/false,
6172 c_cast_p, complain);
6174 default:
6175 break;
6178 if (convs->check_narrowing)
6179 check_narrowing (totype, expr);
6181 if (issue_conversion_warnings && (complain & tf_warning))
6182 expr = convert_and_check (totype, expr);
6183 else
6184 expr = convert (totype, expr);
6186 return expr;
6189 /* ARG is being passed to a varargs function. Perform any conversions
6190 required. Return the converted value. */
6192 tree
6193 convert_arg_to_ellipsis (tree arg, tsubst_flags_t complain)
6195 tree arg_type;
6196 location_t loc = EXPR_LOC_OR_HERE (arg);
6198 /* [expr.call]
6200 The lvalue-to-rvalue, array-to-pointer, and function-to-pointer
6201 standard conversions are performed. */
6202 arg = decay_conversion (arg, complain);
6203 arg_type = TREE_TYPE (arg);
6204 /* [expr.call]
6206 If the argument has integral or enumeration type that is subject
6207 to the integral promotions (_conv.prom_), or a floating point
6208 type that is subject to the floating point promotion
6209 (_conv.fpprom_), the value of the argument is converted to the
6210 promoted type before the call. */
6211 if (TREE_CODE (arg_type) == REAL_TYPE
6212 && (TYPE_PRECISION (arg_type)
6213 < TYPE_PRECISION (double_type_node))
6214 && !DECIMAL_FLOAT_MODE_P (TYPE_MODE (arg_type)))
6216 if ((complain & tf_warning)
6217 && warn_double_promotion && !c_inhibit_evaluation_warnings)
6218 warning_at (loc, OPT_Wdouble_promotion,
6219 "implicit conversion from %qT to %qT when passing "
6220 "argument to function",
6221 arg_type, double_type_node);
6222 arg = convert_to_real (double_type_node, arg);
6224 else if (NULLPTR_TYPE_P (arg_type))
6225 arg = null_pointer_node;
6226 else if (INTEGRAL_OR_ENUMERATION_TYPE_P (arg_type))
6228 if (SCOPED_ENUM_P (arg_type) && !abi_version_at_least (6))
6230 if (complain & tf_warning)
6231 warning_at (loc, OPT_Wabi, "scoped enum %qT will not promote to an "
6232 "integral type in a future version of GCC", arg_type);
6233 arg = cp_convert (ENUM_UNDERLYING_TYPE (arg_type), arg, complain);
6235 arg = cp_perform_integral_promotions (arg, complain);
6238 arg = require_complete_type_sfinae (arg, complain);
6239 arg_type = TREE_TYPE (arg);
6241 if (arg != error_mark_node
6242 /* In a template (or ill-formed code), we can have an incomplete type
6243 even after require_complete_type_sfinae, in which case we don't know
6244 whether it has trivial copy or not. */
6245 && COMPLETE_TYPE_P (arg_type))
6247 /* Build up a real lvalue-to-rvalue conversion in case the
6248 copy constructor is trivial but not callable. */
6249 if (!cp_unevaluated_operand && CLASS_TYPE_P (arg_type))
6250 force_rvalue (arg, complain);
6252 /* [expr.call] 5.2.2/7:
6253 Passing a potentially-evaluated argument of class type (Clause 9)
6254 with a non-trivial copy constructor or a non-trivial destructor
6255 with no corresponding parameter is conditionally-supported, with
6256 implementation-defined semantics.
6258 We used to just warn here and do a bitwise copy, but now
6259 cp_expr_size will abort if we try to do that.
6261 If the call appears in the context of a sizeof expression,
6262 it is not potentially-evaluated. */
6263 if (cp_unevaluated_operand == 0
6264 && (type_has_nontrivial_copy_init (arg_type)
6265 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (arg_type)))
6267 if (complain & tf_error)
6268 error_at (loc, "cannot pass objects of non-trivially-copyable "
6269 "type %q#T through %<...%>", arg_type);
6270 else
6271 return error_mark_node;
6275 return arg;
6278 /* va_arg (EXPR, TYPE) is a builtin. Make sure it is not abused. */
6280 tree
6281 build_x_va_arg (source_location loc, tree expr, tree type)
6283 if (processing_template_decl)
6284 return build_min (VA_ARG_EXPR, type, expr);
6286 type = complete_type_or_else (type, NULL_TREE);
6288 if (expr == error_mark_node || !type)
6289 return error_mark_node;
6291 expr = mark_lvalue_use (expr);
6293 if (type_has_nontrivial_copy_init (type)
6294 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
6295 || TREE_CODE (type) == REFERENCE_TYPE)
6297 /* Remove reference types so we don't ICE later on. */
6298 tree type1 = non_reference (type);
6299 /* conditionally-supported behavior [expr.call] 5.2.2/7. */
6300 error ("cannot receive objects of non-trivially-copyable type %q#T "
6301 "through %<...%>; ", type);
6302 expr = convert (build_pointer_type (type1), null_node);
6303 expr = cp_build_indirect_ref (expr, RO_NULL, tf_warning_or_error);
6304 return expr;
6307 return build_va_arg (loc, expr, type);
6310 /* TYPE has been given to va_arg. Apply the default conversions which
6311 would have happened when passed via ellipsis. Return the promoted
6312 type, or the passed type if there is no change. */
6314 tree
6315 cxx_type_promotes_to (tree type)
6317 tree promote;
6319 /* Perform the array-to-pointer and function-to-pointer
6320 conversions. */
6321 type = type_decays_to (type);
6323 promote = type_promotes_to (type);
6324 if (same_type_p (type, promote))
6325 promote = type;
6327 return promote;
6330 /* ARG is a default argument expression being passed to a parameter of
6331 the indicated TYPE, which is a parameter to FN. PARMNUM is the
6332 zero-based argument number. Do any required conversions. Return
6333 the converted value. */
6335 static GTY(()) vec<tree, va_gc> *default_arg_context;
6336 void
6337 push_defarg_context (tree fn)
6338 { vec_safe_push (default_arg_context, fn); }
6340 void
6341 pop_defarg_context (void)
6342 { default_arg_context->pop (); }
6344 tree
6345 convert_default_arg (tree type, tree arg, tree fn, int parmnum,
6346 tsubst_flags_t complain)
6348 int i;
6349 tree t;
6351 /* See through clones. */
6352 fn = DECL_ORIGIN (fn);
6354 /* Detect recursion. */
6355 FOR_EACH_VEC_SAFE_ELT (default_arg_context, i, t)
6356 if (t == fn)
6358 if (complain & tf_error)
6359 error ("recursive evaluation of default argument for %q#D", fn);
6360 return error_mark_node;
6363 /* If the ARG is an unparsed default argument expression, the
6364 conversion cannot be performed. */
6365 if (TREE_CODE (arg) == DEFAULT_ARG)
6367 if (complain & tf_error)
6368 error ("call to %qD uses the default argument for parameter %P, which "
6369 "is not yet defined", fn, parmnum);
6370 return error_mark_node;
6373 push_defarg_context (fn);
6375 if (fn && DECL_TEMPLATE_INFO (fn))
6376 arg = tsubst_default_argument (fn, type, arg);
6378 /* Due to:
6380 [dcl.fct.default]
6382 The names in the expression are bound, and the semantic
6383 constraints are checked, at the point where the default
6384 expressions appears.
6386 we must not perform access checks here. */
6387 push_deferring_access_checks (dk_no_check);
6388 /* We must make a copy of ARG, in case subsequent processing
6389 alters any part of it. */
6390 arg = break_out_target_exprs (arg);
6391 if (TREE_CODE (arg) == CONSTRUCTOR)
6393 arg = digest_init (type, arg, complain);
6394 arg = convert_for_initialization (0, type, arg, LOOKUP_IMPLICIT,
6395 ICR_DEFAULT_ARGUMENT, fn, parmnum,
6396 complain);
6398 else
6400 arg = convert_for_initialization (0, type, arg, LOOKUP_IMPLICIT,
6401 ICR_DEFAULT_ARGUMENT, fn, parmnum,
6402 complain);
6403 arg = convert_for_arg_passing (type, arg, complain);
6405 pop_deferring_access_checks();
6407 pop_defarg_context ();
6409 return arg;
6412 /* Returns the type which will really be used for passing an argument of
6413 type TYPE. */
6415 tree
6416 type_passed_as (tree type)
6418 /* Pass classes with copy ctors by invisible reference. */
6419 if (TREE_ADDRESSABLE (type))
6421 type = build_reference_type (type);
6422 /* There are no other pointers to this temporary. */
6423 type = cp_build_qualified_type (type, TYPE_QUAL_RESTRICT);
6425 else if (targetm.calls.promote_prototypes (type)
6426 && INTEGRAL_TYPE_P (type)
6427 && COMPLETE_TYPE_P (type)
6428 && INT_CST_LT_UNSIGNED (TYPE_SIZE (type),
6429 TYPE_SIZE (integer_type_node)))
6430 type = integer_type_node;
6432 return type;
6435 /* Actually perform the appropriate conversion. */
6437 tree
6438 convert_for_arg_passing (tree type, tree val, tsubst_flags_t complain)
6440 tree bitfield_type;
6442 /* If VAL is a bitfield, then -- since it has already been converted
6443 to TYPE -- it cannot have a precision greater than TYPE.
6445 If it has a smaller precision, we must widen it here. For
6446 example, passing "int f:3;" to a function expecting an "int" will
6447 not result in any conversion before this point.
6449 If the precision is the same we must not risk widening. For
6450 example, the COMPONENT_REF for a 32-bit "long long" bitfield will
6451 often have type "int", even though the C++ type for the field is
6452 "long long". If the value is being passed to a function
6453 expecting an "int", then no conversions will be required. But,
6454 if we call convert_bitfield_to_declared_type, the bitfield will
6455 be converted to "long long". */
6456 bitfield_type = is_bitfield_expr_with_lowered_type (val);
6457 if (bitfield_type
6458 && TYPE_PRECISION (TREE_TYPE (val)) < TYPE_PRECISION (type))
6459 val = convert_to_integer (TYPE_MAIN_VARIANT (bitfield_type), val);
6461 if (val == error_mark_node)
6463 /* Pass classes with copy ctors by invisible reference. */
6464 else if (TREE_ADDRESSABLE (type))
6465 val = build1 (ADDR_EXPR, build_reference_type (type), val);
6466 else if (targetm.calls.promote_prototypes (type)
6467 && INTEGRAL_TYPE_P (type)
6468 && COMPLETE_TYPE_P (type)
6469 && INT_CST_LT_UNSIGNED (TYPE_SIZE (type),
6470 TYPE_SIZE (integer_type_node)))
6471 val = cp_perform_integral_promotions (val, complain);
6472 if ((complain & tf_warning)
6473 && warn_suggest_attribute_format)
6475 tree rhstype = TREE_TYPE (val);
6476 const enum tree_code coder = TREE_CODE (rhstype);
6477 const enum tree_code codel = TREE_CODE (type);
6478 if ((codel == POINTER_TYPE || codel == REFERENCE_TYPE)
6479 && coder == codel
6480 && check_missing_format_attribute (type, rhstype))
6481 warning (OPT_Wsuggest_attribute_format,
6482 "argument of function call might be a candidate for a format attribute");
6484 return val;
6487 /* Returns true iff FN is a function with magic varargs, i.e. ones for
6488 which no conversions at all should be done. This is true for some
6489 builtins which don't act like normal functions. */
6491 static bool
6492 magic_varargs_p (tree fn)
6494 if (DECL_BUILT_IN (fn))
6495 switch (DECL_FUNCTION_CODE (fn))
6497 case BUILT_IN_CLASSIFY_TYPE:
6498 case BUILT_IN_CONSTANT_P:
6499 case BUILT_IN_NEXT_ARG:
6500 case BUILT_IN_VA_START:
6501 return true;
6503 default:;
6504 return lookup_attribute ("type generic",
6505 TYPE_ATTRIBUTES (TREE_TYPE (fn))) != 0;
6508 return false;
6511 /* Returns the decl of the dispatcher function if FN is a function version. */
6513 tree
6514 get_function_version_dispatcher (tree fn)
6516 tree dispatcher_decl = NULL;
6518 gcc_assert (TREE_CODE (fn) == FUNCTION_DECL
6519 && DECL_FUNCTION_VERSIONED (fn));
6521 gcc_assert (targetm.get_function_versions_dispatcher);
6522 dispatcher_decl = targetm.get_function_versions_dispatcher (fn);
6524 if (dispatcher_decl == NULL)
6526 error_at (input_location, "use of multiversioned function "
6527 "without a default");
6528 return NULL;
6531 retrofit_lang_decl (dispatcher_decl);
6532 gcc_assert (dispatcher_decl != NULL);
6533 return dispatcher_decl;
6536 /* fn is a function version dispatcher that is marked used. Mark all the
6537 semantically identical function versions it will dispatch as used. */
6539 void
6540 mark_versions_used (tree fn)
6542 struct cgraph_node *node;
6543 struct cgraph_function_version_info *node_v;
6544 struct cgraph_function_version_info *it_v;
6546 gcc_assert (TREE_CODE (fn) == FUNCTION_DECL);
6548 node = cgraph_get_node (fn);
6549 if (node == NULL)
6550 return;
6552 gcc_assert (node->dispatcher_function);
6554 node_v = get_cgraph_node_version (node);
6555 if (node_v == NULL)
6556 return;
6558 /* All semantically identical versions are chained. Traverse and mark each
6559 one of them as used. */
6560 it_v = node_v->next;
6561 while (it_v != NULL)
6563 mark_used (it_v->this_node->symbol.decl);
6564 it_v = it_v->next;
6568 /* Subroutine of the various build_*_call functions. Overload resolution
6569 has chosen a winning candidate CAND; build up a CALL_EXPR accordingly.
6570 ARGS is a TREE_LIST of the unconverted arguments to the call. FLAGS is a
6571 bitmask of various LOOKUP_* flags which apply to the call itself. */
6573 static tree
6574 build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain)
6576 tree fn = cand->fn;
6577 const vec<tree, va_gc> *args = cand->args;
6578 tree first_arg = cand->first_arg;
6579 conversion **convs = cand->convs;
6580 conversion *conv;
6581 tree parm = TYPE_ARG_TYPES (TREE_TYPE (fn));
6582 int parmlen;
6583 tree val;
6584 int i = 0;
6585 int j = 0;
6586 unsigned int arg_index = 0;
6587 int is_method = 0;
6588 int nargs;
6589 tree *argarray;
6590 bool already_used = false;
6592 /* In a template, there is no need to perform all of the work that
6593 is normally done. We are only interested in the type of the call
6594 expression, i.e., the return type of the function. Any semantic
6595 errors will be deferred until the template is instantiated. */
6596 if (processing_template_decl)
6598 tree expr, addr;
6599 tree return_type;
6600 const tree *argarray;
6601 unsigned int nargs;
6603 return_type = TREE_TYPE (TREE_TYPE (fn));
6604 nargs = vec_safe_length (args);
6605 if (first_arg == NULL_TREE)
6606 argarray = args->address ();
6607 else
6609 tree *alcarray;
6610 unsigned int ix;
6611 tree arg;
6613 ++nargs;
6614 alcarray = XALLOCAVEC (tree, nargs);
6615 alcarray[0] = first_arg;
6616 FOR_EACH_VEC_SAFE_ELT (args, ix, arg)
6617 alcarray[ix + 1] = arg;
6618 argarray = alcarray;
6621 addr = build_addr_func (fn, complain);
6622 if (addr == error_mark_node)
6623 return error_mark_node;
6624 expr = build_call_array_loc (input_location, return_type,
6625 addr, nargs, argarray);
6626 if (TREE_THIS_VOLATILE (fn) && cfun)
6627 current_function_returns_abnormally = 1;
6628 return convert_from_reference (expr);
6631 /* Give any warnings we noticed during overload resolution. */
6632 if (cand->warnings && (complain & tf_warning))
6634 struct candidate_warning *w;
6635 for (w = cand->warnings; w; w = w->next)
6636 joust (cand, w->loser, 1, complain);
6639 /* Make =delete work with SFINAE. */
6640 if (DECL_DELETED_FN (fn) && !(complain & tf_error))
6641 return error_mark_node;
6643 if (DECL_FUNCTION_MEMBER_P (fn))
6645 tree access_fn;
6646 /* If FN is a template function, two cases must be considered.
6647 For example:
6649 struct A {
6650 protected:
6651 template <class T> void f();
6653 template <class T> struct B {
6654 protected:
6655 void g();
6657 struct C : A, B<int> {
6658 using A::f; // #1
6659 using B<int>::g; // #2
6662 In case #1 where `A::f' is a member template, DECL_ACCESS is
6663 recorded in the primary template but not in its specialization.
6664 We check access of FN using its primary template.
6666 In case #2, where `B<int>::g' has a DECL_TEMPLATE_INFO simply
6667 because it is a member of class template B, DECL_ACCESS is
6668 recorded in the specialization `B<int>::g'. We cannot use its
6669 primary template because `B<T>::g' and `B<int>::g' may have
6670 different access. */
6671 if (DECL_TEMPLATE_INFO (fn)
6672 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (fn)))
6673 access_fn = DECL_TI_TEMPLATE (fn);
6674 else
6675 access_fn = fn;
6676 if (!perform_or_defer_access_check (cand->access_path, access_fn,
6677 fn, complain))
6678 return error_mark_node;
6681 /* If we're checking for implicit delete, don't bother with argument
6682 conversions. */
6683 if (flags & LOOKUP_SPECULATIVE)
6685 if (DECL_DELETED_FN (fn))
6687 if (complain & tf_error)
6688 mark_used (fn);
6689 return error_mark_node;
6691 if (cand->viable == 1)
6692 return fn;
6693 else if (!(complain & tf_error))
6694 /* Reject bad conversions now. */
6695 return error_mark_node;
6696 /* else continue to get conversion error. */
6699 /* Find maximum size of vector to hold converted arguments. */
6700 parmlen = list_length (parm);
6701 nargs = vec_safe_length (args) + (first_arg != NULL_TREE ? 1 : 0);
6702 if (parmlen > nargs)
6703 nargs = parmlen;
6704 argarray = XALLOCAVEC (tree, nargs);
6706 /* The implicit parameters to a constructor are not considered by overload
6707 resolution, and must be of the proper type. */
6708 if (DECL_CONSTRUCTOR_P (fn))
6710 if (first_arg != NULL_TREE)
6712 argarray[j++] = first_arg;
6713 first_arg = NULL_TREE;
6715 else
6717 argarray[j++] = (*args)[arg_index];
6718 ++arg_index;
6720 parm = TREE_CHAIN (parm);
6721 /* We should never try to call the abstract constructor. */
6722 gcc_assert (!DECL_HAS_IN_CHARGE_PARM_P (fn));
6724 if (DECL_HAS_VTT_PARM_P (fn))
6726 argarray[j++] = (*args)[arg_index];
6727 ++arg_index;
6728 parm = TREE_CHAIN (parm);
6731 /* Bypass access control for 'this' parameter. */
6732 else if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
6734 tree parmtype = TREE_VALUE (parm);
6735 tree arg = (first_arg != NULL_TREE
6736 ? first_arg
6737 : (*args)[arg_index]);
6738 tree argtype = TREE_TYPE (arg);
6739 tree converted_arg;
6740 tree base_binfo;
6742 if (convs[i]->bad_p)
6744 if (complain & tf_error)
6745 permerror (input_location, "passing %qT as %<this%> argument of %q#D discards qualifiers",
6746 TREE_TYPE (argtype), fn);
6747 else
6748 return error_mark_node;
6751 /* See if the function member or the whole class type is declared
6752 final and the call can be devirtualized. */
6753 if (DECL_FINAL_P (fn)
6754 || CLASSTYPE_FINAL (TYPE_METHOD_BASETYPE (TREE_TYPE (fn))))
6755 flags |= LOOKUP_NONVIRTUAL;
6757 /* [class.mfct.nonstatic]: If a nonstatic member function of a class
6758 X is called for an object that is not of type X, or of a type
6759 derived from X, the behavior is undefined.
6761 So we can assume that anything passed as 'this' is non-null, and
6762 optimize accordingly. */
6763 gcc_assert (TREE_CODE (parmtype) == POINTER_TYPE);
6764 /* Convert to the base in which the function was declared. */
6765 gcc_assert (cand->conversion_path != NULL_TREE);
6766 converted_arg = build_base_path (PLUS_EXPR,
6767 arg,
6768 cand->conversion_path,
6769 1, complain);
6770 /* Check that the base class is accessible. */
6771 if (!accessible_base_p (TREE_TYPE (argtype),
6772 BINFO_TYPE (cand->conversion_path), true))
6773 error ("%qT is not an accessible base of %qT",
6774 BINFO_TYPE (cand->conversion_path),
6775 TREE_TYPE (argtype));
6776 /* If fn was found by a using declaration, the conversion path
6777 will be to the derived class, not the base declaring fn. We
6778 must convert from derived to base. */
6779 base_binfo = lookup_base (TREE_TYPE (TREE_TYPE (converted_arg)),
6780 TREE_TYPE (parmtype), ba_unique,
6781 NULL, complain);
6782 converted_arg = build_base_path (PLUS_EXPR, converted_arg,
6783 base_binfo, 1, complain);
6785 argarray[j++] = converted_arg;
6786 parm = TREE_CHAIN (parm);
6787 if (first_arg != NULL_TREE)
6788 first_arg = NULL_TREE;
6789 else
6790 ++arg_index;
6791 ++i;
6792 is_method = 1;
6795 gcc_assert (first_arg == NULL_TREE);
6796 for (; arg_index < vec_safe_length (args) && parm;
6797 parm = TREE_CHAIN (parm), ++arg_index, ++i)
6799 tree type = TREE_VALUE (parm);
6800 tree arg = (*args)[arg_index];
6801 bool conversion_warning = true;
6803 conv = convs[i];
6805 /* If the argument is NULL and used to (implicitly) instantiate a
6806 template function (and bind one of the template arguments to
6807 the type of 'long int'), we don't want to warn about passing NULL
6808 to non-pointer argument.
6809 For example, if we have this template function:
6811 template<typename T> void func(T x) {}
6813 we want to warn (when -Wconversion is enabled) in this case:
6815 void foo() {
6816 func<int>(NULL);
6819 but not in this case:
6821 void foo() {
6822 func(NULL);
6825 if (arg == null_node
6826 && DECL_TEMPLATE_INFO (fn)
6827 && cand->template_decl
6828 && !(flags & LOOKUP_EXPLICIT_TMPL_ARGS))
6829 conversion_warning = false;
6831 /* Warn about initializer_list deduction that isn't currently in the
6832 working draft. */
6833 if (cxx_dialect > cxx98
6834 && flag_deduce_init_list
6835 && cand->template_decl
6836 && is_std_init_list (non_reference (type))
6837 && BRACE_ENCLOSED_INITIALIZER_P (arg))
6839 tree tmpl = TI_TEMPLATE (cand->template_decl);
6840 tree realparm = chain_index (j, DECL_ARGUMENTS (cand->fn));
6841 tree patparm = get_pattern_parm (realparm, tmpl);
6842 tree pattype = TREE_TYPE (patparm);
6843 if (PACK_EXPANSION_P (pattype))
6844 pattype = PACK_EXPANSION_PATTERN (pattype);
6845 pattype = non_reference (pattype);
6847 if (TREE_CODE (pattype) == TEMPLATE_TYPE_PARM
6848 && (cand->explicit_targs == NULL_TREE
6849 || (TREE_VEC_LENGTH (cand->explicit_targs)
6850 <= TEMPLATE_TYPE_IDX (pattype))))
6852 pedwarn (input_location, 0, "deducing %qT as %qT",
6853 non_reference (TREE_TYPE (patparm)),
6854 non_reference (type));
6855 pedwarn (input_location, 0, " in call to %q+D", cand->fn);
6856 pedwarn (input_location, 0,
6857 " (you can disable this with -fno-deduce-init-list)");
6861 val = convert_like_with_context (conv, arg, fn, i-is_method,
6862 conversion_warning
6863 ? complain
6864 : complain & (~tf_warning));
6866 val = convert_for_arg_passing (type, val, complain);
6867 if (val == error_mark_node)
6868 return error_mark_node;
6869 else
6870 argarray[j++] = val;
6873 /* Default arguments */
6874 for (; parm && parm != void_list_node; parm = TREE_CHAIN (parm), i++)
6876 if (TREE_VALUE (parm) == error_mark_node)
6877 return error_mark_node;
6878 argarray[j++] = convert_default_arg (TREE_VALUE (parm),
6879 TREE_PURPOSE (parm),
6880 fn, i - is_method,
6881 complain);
6884 /* Ellipsis */
6885 for (; arg_index < vec_safe_length (args); ++arg_index)
6887 tree a = (*args)[arg_index];
6888 if (magic_varargs_p (fn))
6889 /* Do no conversions for magic varargs. */
6890 a = mark_type_use (a);
6891 else
6892 a = convert_arg_to_ellipsis (a, complain);
6893 argarray[j++] = a;
6896 gcc_assert (j <= nargs);
6897 nargs = j;
6899 check_function_arguments (TREE_TYPE (fn), nargs, argarray);
6901 /* Avoid actually calling copy constructors and copy assignment operators,
6902 if possible. */
6904 if (! flag_elide_constructors)
6905 /* Do things the hard way. */;
6906 else if (cand->num_convs == 1
6907 && (DECL_COPY_CONSTRUCTOR_P (fn)
6908 || DECL_MOVE_CONSTRUCTOR_P (fn)))
6910 tree targ;
6911 tree arg = argarray[num_artificial_parms_for (fn)];
6912 tree fa;
6913 bool trivial = trivial_fn_p (fn);
6915 /* Pull out the real argument, disregarding const-correctness. */
6916 targ = arg;
6917 while (CONVERT_EXPR_P (targ)
6918 || TREE_CODE (targ) == NON_LVALUE_EXPR)
6919 targ = TREE_OPERAND (targ, 0);
6920 if (TREE_CODE (targ) == ADDR_EXPR)
6922 targ = TREE_OPERAND (targ, 0);
6923 if (!same_type_ignoring_top_level_qualifiers_p
6924 (TREE_TYPE (TREE_TYPE (arg)), TREE_TYPE (targ)))
6925 targ = NULL_TREE;
6927 else
6928 targ = NULL_TREE;
6930 if (targ)
6931 arg = targ;
6932 else
6933 arg = cp_build_indirect_ref (arg, RO_NULL, complain);
6935 /* [class.copy]: the copy constructor is implicitly defined even if
6936 the implementation elided its use. */
6937 if (!trivial || DECL_DELETED_FN (fn))
6939 mark_used (fn);
6940 already_used = true;
6943 /* If we're creating a temp and we already have one, don't create a
6944 new one. If we're not creating a temp but we get one, use
6945 INIT_EXPR to collapse the temp into our target. Otherwise, if the
6946 ctor is trivial, do a bitwise copy with a simple TARGET_EXPR for a
6947 temp or an INIT_EXPR otherwise. */
6948 fa = argarray[0];
6949 if (integer_zerop (fa))
6951 if (TREE_CODE (arg) == TARGET_EXPR)
6952 return arg;
6953 else if (trivial)
6954 return force_target_expr (DECL_CONTEXT (fn), arg, complain);
6956 else if (TREE_CODE (arg) == TARGET_EXPR || trivial)
6958 tree to = stabilize_reference (cp_build_indirect_ref (fa, RO_NULL,
6959 complain));
6961 val = build2 (INIT_EXPR, DECL_CONTEXT (fn), to, arg);
6962 return val;
6965 else if (DECL_OVERLOADED_OPERATOR_P (fn) == NOP_EXPR
6966 && trivial_fn_p (fn)
6967 && !DECL_DELETED_FN (fn))
6969 tree to = stabilize_reference
6970 (cp_build_indirect_ref (argarray[0], RO_NULL, complain));
6971 tree type = TREE_TYPE (to);
6972 tree as_base = CLASSTYPE_AS_BASE (type);
6973 tree arg = argarray[1];
6975 if (is_really_empty_class (type))
6977 /* Avoid copying empty classes. */
6978 val = build2 (COMPOUND_EXPR, void_type_node, to, arg);
6979 TREE_NO_WARNING (val) = 1;
6980 val = build2 (COMPOUND_EXPR, type, val, to);
6981 TREE_NO_WARNING (val) = 1;
6983 else if (tree_int_cst_equal (TYPE_SIZE (type), TYPE_SIZE (as_base)))
6985 arg = cp_build_indirect_ref (arg, RO_NULL, complain);
6986 val = build2 (MODIFY_EXPR, TREE_TYPE (to), to, arg);
6988 else
6990 /* We must only copy the non-tail padding parts. */
6991 tree arg0, arg2, t;
6992 tree array_type, alias_set;
6994 arg2 = TYPE_SIZE_UNIT (as_base);
6995 arg0 = cp_build_addr_expr (to, complain);
6997 array_type = build_array_type (char_type_node,
6998 build_index_type
6999 (size_binop (MINUS_EXPR,
7000 arg2, size_int (1))));
7001 alias_set = build_int_cst (build_pointer_type (type), 0);
7002 t = build2 (MODIFY_EXPR, void_type_node,
7003 build2 (MEM_REF, array_type, arg0, alias_set),
7004 build2 (MEM_REF, array_type, arg, alias_set));
7005 val = build2 (COMPOUND_EXPR, TREE_TYPE (to), t, to);
7006 TREE_NO_WARNING (val) = 1;
7009 return val;
7011 else if (DECL_DESTRUCTOR_P (fn)
7012 && trivial_fn_p (fn)
7013 && !DECL_DELETED_FN (fn))
7014 return fold_convert (void_type_node, argarray[0]);
7015 /* FIXME handle trivial default constructor, too. */
7017 /* For calls to a multi-versioned function, overload resolution
7018 returns the function with the highest target priority, that is,
7019 the version that will checked for dispatching first. If this
7020 version is inlinable, a direct call to this version can be made
7021 otherwise the call should go through the dispatcher. */
7023 if (DECL_FUNCTION_VERSIONED (fn)
7024 && !targetm.target_option.can_inline_p (current_function_decl, fn))
7026 fn = get_function_version_dispatcher (fn);
7027 if (fn == NULL)
7028 return NULL;
7029 if (!already_used)
7030 mark_versions_used (fn);
7033 if (!already_used)
7034 mark_used (fn);
7036 if (DECL_VINDEX (fn) && (flags & LOOKUP_NONVIRTUAL) == 0)
7038 tree t;
7039 tree binfo = lookup_base (TREE_TYPE (TREE_TYPE (argarray[0])),
7040 DECL_CONTEXT (fn),
7041 ba_any, NULL, complain);
7042 gcc_assert (binfo && binfo != error_mark_node);
7044 /* Warn about deprecated virtual functions now, since we're about
7045 to throw away the decl. */
7046 if (TREE_DEPRECATED (fn))
7047 warn_deprecated_use (fn, NULL_TREE);
7049 argarray[0] = build_base_path (PLUS_EXPR, argarray[0], binfo, 1,
7050 complain);
7051 if (TREE_SIDE_EFFECTS (argarray[0]))
7052 argarray[0] = save_expr (argarray[0]);
7053 t = build_pointer_type (TREE_TYPE (fn));
7054 if (DECL_CONTEXT (fn) && TYPE_JAVA_INTERFACE (DECL_CONTEXT (fn)))
7055 fn = build_java_interface_fn_ref (fn, argarray[0]);
7056 else
7057 fn = build_vfn_ref (argarray[0], DECL_VINDEX (fn));
7058 TREE_TYPE (fn) = t;
7060 else
7062 fn = build_addr_func (fn, complain);
7063 if (fn == error_mark_node)
7064 return error_mark_node;
7067 return build_cxx_call (fn, nargs, argarray, complain);
7070 /* Build and return a call to FN, using NARGS arguments in ARGARRAY.
7071 This function performs no overload resolution, conversion, or other
7072 high-level operations. */
7074 tree
7075 build_cxx_call (tree fn, int nargs, tree *argarray,
7076 tsubst_flags_t complain)
7078 tree fndecl;
7079 int optimize_sav;
7081 /* Remember roughly where this call is. */
7082 location_t loc = EXPR_LOC_OR_HERE (fn);
7083 fn = build_call_a (fn, nargs, argarray);
7084 SET_EXPR_LOCATION (fn, loc);
7086 fndecl = get_callee_fndecl (fn);
7088 /* Check that arguments to builtin functions match the expectations. */
7089 if (fndecl
7090 && DECL_BUILT_IN (fndecl)
7091 && DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_NORMAL
7092 && !check_builtin_function_arguments (fndecl, nargs, argarray))
7093 return error_mark_node;
7095 /* Some built-in function calls will be evaluated at compile-time in
7096 fold (). Set optimize to 1 when folding __builtin_constant_p inside
7097 a constexpr function so that fold_builtin_1 doesn't fold it to 0. */
7098 optimize_sav = optimize;
7099 if (!optimize && fndecl && DECL_IS_BUILTIN_CONSTANT_P (fndecl)
7100 && current_function_decl
7101 && DECL_DECLARED_CONSTEXPR_P (current_function_decl))
7102 optimize = 1;
7103 fn = fold_if_not_in_template (fn);
7104 optimize = optimize_sav;
7106 if (VOID_TYPE_P (TREE_TYPE (fn)))
7107 return fn;
7109 fn = require_complete_type_sfinae (fn, complain);
7110 if (fn == error_mark_node)
7111 return error_mark_node;
7113 if (MAYBE_CLASS_TYPE_P (TREE_TYPE (fn)))
7114 fn = build_cplus_new (TREE_TYPE (fn), fn, complain);
7115 return convert_from_reference (fn);
7118 static GTY(()) tree java_iface_lookup_fn;
7120 /* Make an expression which yields the address of the Java interface
7121 method FN. This is achieved by generating a call to libjava's
7122 _Jv_LookupInterfaceMethodIdx(). */
7124 static tree
7125 build_java_interface_fn_ref (tree fn, tree instance)
7127 tree lookup_fn, method, idx;
7128 tree klass_ref, iface, iface_ref;
7129 int i;
7131 if (!java_iface_lookup_fn)
7133 tree ftype = build_function_type_list (ptr_type_node,
7134 ptr_type_node, ptr_type_node,
7135 java_int_type_node, NULL_TREE);
7136 java_iface_lookup_fn
7137 = add_builtin_function ("_Jv_LookupInterfaceMethodIdx", ftype,
7138 0, NOT_BUILT_IN, NULL, NULL_TREE);
7141 /* Look up the pointer to the runtime java.lang.Class object for `instance'.
7142 This is the first entry in the vtable. */
7143 klass_ref = build_vtbl_ref (cp_build_indirect_ref (instance, RO_NULL,
7144 tf_warning_or_error),
7145 integer_zero_node);
7147 /* Get the java.lang.Class pointer for the interface being called. */
7148 iface = DECL_CONTEXT (fn);
7149 iface_ref = lookup_field (iface, get_identifier ("class$"), 0, false);
7150 if (!iface_ref || TREE_CODE (iface_ref) != VAR_DECL
7151 || DECL_CONTEXT (iface_ref) != iface)
7153 error ("could not find class$ field in java interface type %qT",
7154 iface);
7155 return error_mark_node;
7157 iface_ref = build_address (iface_ref);
7158 iface_ref = convert (build_pointer_type (iface), iface_ref);
7160 /* Determine the itable index of FN. */
7161 i = 1;
7162 for (method = TYPE_METHODS (iface); method; method = DECL_CHAIN (method))
7164 if (!DECL_VIRTUAL_P (method))
7165 continue;
7166 if (fn == method)
7167 break;
7168 i++;
7170 idx = build_int_cst (NULL_TREE, i);
7172 lookup_fn = build1 (ADDR_EXPR,
7173 build_pointer_type (TREE_TYPE (java_iface_lookup_fn)),
7174 java_iface_lookup_fn);
7175 return build_call_nary (ptr_type_node, lookup_fn,
7176 3, klass_ref, iface_ref, idx);
7179 /* Returns the value to use for the in-charge parameter when making a
7180 call to a function with the indicated NAME.
7182 FIXME:Can't we find a neater way to do this mapping? */
7184 tree
7185 in_charge_arg_for_name (tree name)
7187 if (name == base_ctor_identifier
7188 || name == base_dtor_identifier)
7189 return integer_zero_node;
7190 else if (name == complete_ctor_identifier)
7191 return integer_one_node;
7192 else if (name == complete_dtor_identifier)
7193 return integer_two_node;
7194 else if (name == deleting_dtor_identifier)
7195 return integer_three_node;
7197 /* This function should only be called with one of the names listed
7198 above. */
7199 gcc_unreachable ();
7200 return NULL_TREE;
7203 /* Build a call to a constructor, destructor, or an assignment
7204 operator for INSTANCE, an expression with class type. NAME
7205 indicates the special member function to call; *ARGS are the
7206 arguments. ARGS may be NULL. This may change ARGS. BINFO
7207 indicates the base of INSTANCE that is to be passed as the `this'
7208 parameter to the member function called.
7210 FLAGS are the LOOKUP_* flags to use when processing the call.
7212 If NAME indicates a complete object constructor, INSTANCE may be
7213 NULL_TREE. In this case, the caller will call build_cplus_new to
7214 store the newly constructed object into a VAR_DECL. */
7216 tree
7217 build_special_member_call (tree instance, tree name, vec<tree, va_gc> **args,
7218 tree binfo, int flags, tsubst_flags_t complain)
7220 tree fns;
7221 /* The type of the subobject to be constructed or destroyed. */
7222 tree class_type;
7223 vec<tree, va_gc> *allocated = NULL;
7224 tree ret;
7226 gcc_assert (name == complete_ctor_identifier
7227 || name == base_ctor_identifier
7228 || name == complete_dtor_identifier
7229 || name == base_dtor_identifier
7230 || name == deleting_dtor_identifier
7231 || name == ansi_assopname (NOP_EXPR));
7232 if (TYPE_P (binfo))
7234 /* Resolve the name. */
7235 if (!complete_type_or_maybe_complain (binfo, NULL_TREE, complain))
7236 return error_mark_node;
7238 binfo = TYPE_BINFO (binfo);
7241 gcc_assert (binfo != NULL_TREE);
7243 class_type = BINFO_TYPE (binfo);
7245 /* Handle the special case where INSTANCE is NULL_TREE. */
7246 if (name == complete_ctor_identifier && !instance)
7248 instance = build_int_cst (build_pointer_type (class_type), 0);
7249 instance = build1 (INDIRECT_REF, class_type, instance);
7251 else
7253 if (name == complete_dtor_identifier
7254 || name == base_dtor_identifier
7255 || name == deleting_dtor_identifier)
7256 gcc_assert (args == NULL || vec_safe_is_empty (*args));
7258 /* Convert to the base class, if necessary. */
7259 if (!same_type_ignoring_top_level_qualifiers_p
7260 (TREE_TYPE (instance), BINFO_TYPE (binfo)))
7262 if (name != ansi_assopname (NOP_EXPR))
7263 /* For constructors and destructors, either the base is
7264 non-virtual, or it is virtual but we are doing the
7265 conversion from a constructor or destructor for the
7266 complete object. In either case, we can convert
7267 statically. */
7268 instance = convert_to_base_statically (instance, binfo);
7269 else
7270 /* However, for assignment operators, we must convert
7271 dynamically if the base is virtual. */
7272 instance = build_base_path (PLUS_EXPR, instance,
7273 binfo, /*nonnull=*/1, complain);
7277 gcc_assert (instance != NULL_TREE);
7279 fns = lookup_fnfields (binfo, name, 1);
7281 /* When making a call to a constructor or destructor for a subobject
7282 that uses virtual base classes, pass down a pointer to a VTT for
7283 the subobject. */
7284 if ((name == base_ctor_identifier
7285 || name == base_dtor_identifier)
7286 && CLASSTYPE_VBASECLASSES (class_type))
7288 tree vtt;
7289 tree sub_vtt;
7291 /* If the current function is a complete object constructor
7292 or destructor, then we fetch the VTT directly.
7293 Otherwise, we look it up using the VTT we were given. */
7294 vtt = DECL_CHAIN (CLASSTYPE_VTABLES (current_class_type));
7295 vtt = decay_conversion (vtt, complain);
7296 if (vtt == error_mark_node)
7297 return error_mark_node;
7298 vtt = build3 (COND_EXPR, TREE_TYPE (vtt),
7299 build2 (EQ_EXPR, boolean_type_node,
7300 current_in_charge_parm, integer_zero_node),
7301 current_vtt_parm,
7302 vtt);
7303 if (BINFO_SUBVTT_INDEX (binfo))
7304 sub_vtt = fold_build_pointer_plus (vtt, BINFO_SUBVTT_INDEX (binfo));
7305 else
7306 sub_vtt = vtt;
7308 if (args == NULL)
7310 allocated = make_tree_vector ();
7311 args = &allocated;
7314 vec_safe_insert (*args, 0, sub_vtt);
7317 ret = build_new_method_call (instance, fns, args,
7318 TYPE_BINFO (BINFO_TYPE (binfo)),
7319 flags, /*fn=*/NULL,
7320 complain);
7322 if (allocated != NULL)
7323 release_tree_vector (allocated);
7325 return ret;
7328 /* Return the NAME, as a C string. The NAME indicates a function that
7329 is a member of TYPE. *FREE_P is set to true if the caller must
7330 free the memory returned.
7332 Rather than go through all of this, we should simply set the names
7333 of constructors and destructors appropriately, and dispense with
7334 ctor_identifier, dtor_identifier, etc. */
7336 static char *
7337 name_as_c_string (tree name, tree type, bool *free_p)
7339 char *pretty_name;
7341 /* Assume that we will not allocate memory. */
7342 *free_p = false;
7343 /* Constructors and destructors are special. */
7344 if (IDENTIFIER_CTOR_OR_DTOR_P (name))
7346 pretty_name
7347 = CONST_CAST (char *, identifier_to_locale (IDENTIFIER_POINTER (constructor_name (type))));
7348 /* For a destructor, add the '~'. */
7349 if (name == complete_dtor_identifier
7350 || name == base_dtor_identifier
7351 || name == deleting_dtor_identifier)
7353 pretty_name = concat ("~", pretty_name, NULL);
7354 /* Remember that we need to free the memory allocated. */
7355 *free_p = true;
7358 else if (IDENTIFIER_TYPENAME_P (name))
7360 pretty_name = concat ("operator ",
7361 type_as_string_translate (TREE_TYPE (name),
7362 TFF_PLAIN_IDENTIFIER),
7363 NULL);
7364 /* Remember that we need to free the memory allocated. */
7365 *free_p = true;
7367 else
7368 pretty_name = CONST_CAST (char *, identifier_to_locale (IDENTIFIER_POINTER (name)));
7370 return pretty_name;
7373 /* Build a call to "INSTANCE.FN (ARGS)". If FN_P is non-NULL, it will
7374 be set, upon return, to the function called. ARGS may be NULL.
7375 This may change ARGS. */
7377 static tree
7378 build_new_method_call_1 (tree instance, tree fns, vec<tree, va_gc> **args,
7379 tree conversion_path, int flags,
7380 tree *fn_p, tsubst_flags_t complain)
7382 struct z_candidate *candidates = 0, *cand;
7383 tree explicit_targs = NULL_TREE;
7384 tree basetype = NULL_TREE;
7385 tree access_binfo;
7386 tree optype;
7387 tree first_mem_arg = NULL_TREE;
7388 tree instance_ptr;
7389 tree name;
7390 bool skip_first_for_error;
7391 vec<tree, va_gc> *user_args;
7392 tree call;
7393 tree fn;
7394 int template_only = 0;
7395 bool any_viable_p;
7396 tree orig_instance;
7397 tree orig_fns;
7398 vec<tree, va_gc> *orig_args = NULL;
7399 void *p;
7401 gcc_assert (instance != NULL_TREE);
7403 /* We don't know what function we're going to call, yet. */
7404 if (fn_p)
7405 *fn_p = NULL_TREE;
7407 if (error_operand_p (instance)
7408 || !fns || error_operand_p (fns))
7409 return error_mark_node;
7411 if (!BASELINK_P (fns))
7413 if (complain & tf_error)
7414 error ("call to non-function %qD", fns);
7415 return error_mark_node;
7418 orig_instance = instance;
7419 orig_fns = fns;
7421 /* Dismantle the baselink to collect all the information we need. */
7422 if (!conversion_path)
7423 conversion_path = BASELINK_BINFO (fns);
7424 access_binfo = BASELINK_ACCESS_BINFO (fns);
7425 optype = BASELINK_OPTYPE (fns);
7426 fns = BASELINK_FUNCTIONS (fns);
7427 if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
7429 explicit_targs = TREE_OPERAND (fns, 1);
7430 fns = TREE_OPERAND (fns, 0);
7431 template_only = 1;
7433 gcc_assert (TREE_CODE (fns) == FUNCTION_DECL
7434 || TREE_CODE (fns) == TEMPLATE_DECL
7435 || TREE_CODE (fns) == OVERLOAD);
7436 fn = get_first_fn (fns);
7437 name = DECL_NAME (fn);
7439 basetype = TYPE_MAIN_VARIANT (TREE_TYPE (instance));
7440 gcc_assert (CLASS_TYPE_P (basetype));
7442 if (processing_template_decl)
7444 orig_args = args == NULL ? NULL : make_tree_vector_copy (*args);
7445 instance = build_non_dependent_expr (instance);
7446 if (args != NULL)
7447 make_args_non_dependent (*args);
7450 user_args = args == NULL ? NULL : *args;
7451 /* Under DR 147 A::A() is an invalid constructor call,
7452 not a functional cast. */
7453 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (fn))
7455 if (! (complain & tf_error))
7456 return error_mark_node;
7458 permerror (input_location,
7459 "cannot call constructor %<%T::%D%> directly",
7460 basetype, name);
7461 permerror (input_location, " for a function-style cast, remove the "
7462 "redundant %<::%D%>", name);
7463 call = build_functional_cast (basetype, build_tree_list_vec (user_args),
7464 complain);
7465 return call;
7468 /* Figure out whether to skip the first argument for the error
7469 message we will display to users if an error occurs. We don't
7470 want to display any compiler-generated arguments. The "this"
7471 pointer hasn't been added yet. However, we must remove the VTT
7472 pointer if this is a call to a base-class constructor or
7473 destructor. */
7474 skip_first_for_error = false;
7475 if (IDENTIFIER_CTOR_OR_DTOR_P (name))
7477 /* Callers should explicitly indicate whether they want to construct
7478 the complete object or just the part without virtual bases. */
7479 gcc_assert (name != ctor_identifier);
7480 /* Similarly for destructors. */
7481 gcc_assert (name != dtor_identifier);
7482 /* Remove the VTT pointer, if present. */
7483 if ((name == base_ctor_identifier || name == base_dtor_identifier)
7484 && CLASSTYPE_VBASECLASSES (basetype))
7485 skip_first_for_error = true;
7488 /* Process the argument list. */
7489 if (args != NULL && *args != NULL)
7491 *args = resolve_args (*args, complain);
7492 if (*args == NULL)
7493 return error_mark_node;
7496 instance_ptr = build_this (instance);
7498 /* It's OK to call destructors and constructors on cv-qualified objects.
7499 Therefore, convert the INSTANCE_PTR to the unqualified type, if
7500 necessary. */
7501 if (DECL_DESTRUCTOR_P (fn)
7502 || DECL_CONSTRUCTOR_P (fn))
7504 tree type = build_pointer_type (basetype);
7505 if (!same_type_p (type, TREE_TYPE (instance_ptr)))
7506 instance_ptr = build_nop (type, instance_ptr);
7508 if (DECL_DESTRUCTOR_P (fn))
7509 name = complete_dtor_identifier;
7511 first_mem_arg = instance_ptr;
7513 /* Get the high-water mark for the CONVERSION_OBSTACK. */
7514 p = conversion_obstack_alloc (0);
7516 /* If CONSTRUCTOR_IS_DIRECT_INIT is set, this was a T{ } form
7517 initializer, not T({ }). */
7518 if (DECL_CONSTRUCTOR_P (fn) && args != NULL && !vec_safe_is_empty (*args)
7519 && BRACE_ENCLOSED_INITIALIZER_P ((**args)[0])
7520 && CONSTRUCTOR_IS_DIRECT_INIT ((**args)[0]))
7522 tree init_list = (**args)[0];
7523 tree init = NULL_TREE;
7525 gcc_assert ((*args)->length () == 1
7526 && !(flags & LOOKUP_ONLYCONVERTING));
7528 /* If the initializer list has no elements and T is a class type with
7529 a default constructor, the object is value-initialized. Handle
7530 this here so we don't need to handle it wherever we use
7531 build_special_member_call. */
7532 if (CONSTRUCTOR_NELTS (init_list) == 0
7533 && TYPE_HAS_DEFAULT_CONSTRUCTOR (basetype)
7534 /* For a user-provided default constructor, use the normal
7535 mechanisms so that protected access works. */
7536 && !type_has_user_provided_default_constructor (basetype)
7537 && !processing_template_decl)
7538 init = build_value_init (basetype, complain);
7540 /* If BASETYPE is an aggregate, we need to do aggregate
7541 initialization. */
7542 else if (CP_AGGREGATE_TYPE_P (basetype))
7543 init = digest_init (basetype, init_list, complain);
7545 if (init)
7547 tree ob;
7548 if (integer_zerop (instance_ptr))
7549 return get_target_expr_sfinae (init, complain);
7550 ob = build_fold_indirect_ref (instance_ptr);
7551 init = build2 (INIT_EXPR, TREE_TYPE (ob), ob, init);
7552 TREE_SIDE_EFFECTS (init) = true;
7553 return init;
7556 /* Otherwise go ahead with overload resolution. */
7557 add_list_candidates (fns, first_mem_arg, init_list,
7558 basetype, explicit_targs, template_only,
7559 conversion_path, access_binfo, flags,
7560 &candidates, complain);
7562 else
7564 add_candidates (fns, first_mem_arg, user_args, optype,
7565 explicit_targs, template_only, conversion_path,
7566 access_binfo, flags, &candidates, complain);
7568 any_viable_p = false;
7569 candidates = splice_viable (candidates, pedantic, &any_viable_p);
7571 if (!any_viable_p)
7573 if (complain & tf_error)
7575 if (!COMPLETE_OR_OPEN_TYPE_P (basetype))
7576 cxx_incomplete_type_error (instance_ptr, basetype);
7577 else if (optype)
7578 error ("no matching function for call to %<%T::operator %T(%A)%#V%>",
7579 basetype, optype, build_tree_list_vec (user_args),
7580 TREE_TYPE (TREE_TYPE (instance_ptr)));
7581 else
7583 char *pretty_name;
7584 bool free_p;
7585 tree arglist;
7587 pretty_name = name_as_c_string (name, basetype, &free_p);
7588 arglist = build_tree_list_vec (user_args);
7589 if (skip_first_for_error)
7590 arglist = TREE_CHAIN (arglist);
7591 error ("no matching function for call to %<%T::%s(%A)%#V%>",
7592 basetype, pretty_name, arglist,
7593 TREE_TYPE (TREE_TYPE (instance_ptr)));
7594 if (free_p)
7595 free (pretty_name);
7597 print_z_candidates (location_of (name), candidates);
7599 call = error_mark_node;
7601 else
7603 cand = tourney (candidates, complain);
7604 if (cand == 0)
7606 char *pretty_name;
7607 bool free_p;
7608 tree arglist;
7610 if (complain & tf_error)
7612 pretty_name = name_as_c_string (name, basetype, &free_p);
7613 arglist = build_tree_list_vec (user_args);
7614 if (skip_first_for_error)
7615 arglist = TREE_CHAIN (arglist);
7616 error ("call of overloaded %<%s(%A)%> is ambiguous", pretty_name,
7617 arglist);
7618 print_z_candidates (location_of (name), candidates);
7619 if (free_p)
7620 free (pretty_name);
7622 call = error_mark_node;
7624 else
7626 fn = cand->fn;
7628 if (!(flags & LOOKUP_NONVIRTUAL)
7629 && DECL_PURE_VIRTUAL_P (fn)
7630 && instance == current_class_ref
7631 && (DECL_CONSTRUCTOR_P (current_function_decl)
7632 || DECL_DESTRUCTOR_P (current_function_decl))
7633 && (complain & tf_warning))
7634 /* This is not an error, it is runtime undefined
7635 behavior. */
7636 warning (0, (DECL_CONSTRUCTOR_P (current_function_decl) ?
7637 "pure virtual %q#D called from constructor"
7638 : "pure virtual %q#D called from destructor"),
7639 fn);
7641 if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE
7642 && is_dummy_object (instance_ptr))
7644 if (complain & tf_error)
7645 error ("cannot call member function %qD without object",
7646 fn);
7647 call = error_mark_node;
7649 else
7651 /* Optimize away vtable lookup if we know that this
7652 function can't be overridden. We need to check if
7653 the context and the instance type are the same,
7654 actually FN might be defined in a different class
7655 type because of a using-declaration. In this case, we
7656 do not want to perform a non-virtual call. */
7657 if (DECL_VINDEX (fn) && ! (flags & LOOKUP_NONVIRTUAL)
7658 && same_type_ignoring_top_level_qualifiers_p
7659 (DECL_CONTEXT (fn), TREE_TYPE (instance))
7660 && resolves_to_fixed_type_p (instance, 0))
7661 flags |= LOOKUP_NONVIRTUAL;
7662 if (explicit_targs)
7663 flags |= LOOKUP_EXPLICIT_TMPL_ARGS;
7664 /* Now we know what function is being called. */
7665 if (fn_p)
7666 *fn_p = fn;
7667 /* Build the actual CALL_EXPR. */
7668 call = build_over_call (cand, flags, complain);
7669 /* In an expression of the form `a->f()' where `f' turns
7670 out to be a static member function, `a' is
7671 none-the-less evaluated. */
7672 if (TREE_CODE (TREE_TYPE (fn)) != METHOD_TYPE
7673 && !is_dummy_object (instance_ptr)
7674 && TREE_SIDE_EFFECTS (instance_ptr))
7675 call = build2 (COMPOUND_EXPR, TREE_TYPE (call),
7676 instance_ptr, call);
7677 else if (call != error_mark_node
7678 && DECL_DESTRUCTOR_P (cand->fn)
7679 && !VOID_TYPE_P (TREE_TYPE (call)))
7680 /* An explicit call of the form "x->~X()" has type
7681 "void". However, on platforms where destructors
7682 return "this" (i.e., those where
7683 targetm.cxx.cdtor_returns_this is true), such calls
7684 will appear to have a return value of pointer type
7685 to the low-level call machinery. We do not want to
7686 change the low-level machinery, since we want to be
7687 able to optimize "delete f()" on such platforms as
7688 "operator delete(~X(f()))" (rather than generating
7689 "t = f(), ~X(t), operator delete (t)"). */
7690 call = build_nop (void_type_node, call);
7695 if (processing_template_decl && call != error_mark_node)
7697 bool cast_to_void = false;
7699 if (TREE_CODE (call) == COMPOUND_EXPR)
7700 call = TREE_OPERAND (call, 1);
7701 else if (TREE_CODE (call) == NOP_EXPR)
7703 cast_to_void = true;
7704 call = TREE_OPERAND (call, 0);
7706 if (TREE_CODE (call) == INDIRECT_REF)
7707 call = TREE_OPERAND (call, 0);
7708 call = (build_min_non_dep_call_vec
7709 (call,
7710 build_min (COMPONENT_REF, TREE_TYPE (CALL_EXPR_FN (call)),
7711 orig_instance, orig_fns, NULL_TREE),
7712 orig_args));
7713 SET_EXPR_LOCATION (call, input_location);
7714 call = convert_from_reference (call);
7715 if (cast_to_void)
7716 call = build_nop (void_type_node, call);
7719 /* Free all the conversions we allocated. */
7720 obstack_free (&conversion_obstack, p);
7722 if (orig_args != NULL)
7723 release_tree_vector (orig_args);
7725 return call;
7728 /* Wrapper for above. */
7730 tree
7731 build_new_method_call (tree instance, tree fns, vec<tree, va_gc> **args,
7732 tree conversion_path, int flags,
7733 tree *fn_p, tsubst_flags_t complain)
7735 tree ret;
7736 bool subtime = timevar_cond_start (TV_OVERLOAD);
7737 ret = build_new_method_call_1 (instance, fns, args, conversion_path, flags,
7738 fn_p, complain);
7739 timevar_cond_stop (TV_OVERLOAD, subtime);
7740 return ret;
7743 /* Returns true iff standard conversion sequence ICS1 is a proper
7744 subsequence of ICS2. */
7746 static bool
7747 is_subseq (conversion *ics1, conversion *ics2)
7749 /* We can assume that a conversion of the same code
7750 between the same types indicates a subsequence since we only get
7751 here if the types we are converting from are the same. */
7753 while (ics1->kind == ck_rvalue
7754 || ics1->kind == ck_lvalue)
7755 ics1 = next_conversion (ics1);
7757 while (1)
7759 while (ics2->kind == ck_rvalue
7760 || ics2->kind == ck_lvalue)
7761 ics2 = next_conversion (ics2);
7763 if (ics2->kind == ck_user
7764 || ics2->kind == ck_ambig
7765 || ics2->kind == ck_aggr
7766 || ics2->kind == ck_list
7767 || ics2->kind == ck_identity)
7768 /* At this point, ICS1 cannot be a proper subsequence of
7769 ICS2. We can get a USER_CONV when we are comparing the
7770 second standard conversion sequence of two user conversion
7771 sequences. */
7772 return false;
7774 ics2 = next_conversion (ics2);
7776 if (ics2->kind == ics1->kind
7777 && same_type_p (ics2->type, ics1->type)
7778 && same_type_p (next_conversion (ics2)->type,
7779 next_conversion (ics1)->type))
7780 return true;
7784 /* Returns nonzero iff DERIVED is derived from BASE. The inputs may
7785 be any _TYPE nodes. */
7787 bool
7788 is_properly_derived_from (tree derived, tree base)
7790 if (!CLASS_TYPE_P (derived) || !CLASS_TYPE_P (base))
7791 return false;
7793 /* We only allow proper derivation here. The DERIVED_FROM_P macro
7794 considers every class derived from itself. */
7795 return (!same_type_ignoring_top_level_qualifiers_p (derived, base)
7796 && DERIVED_FROM_P (base, derived));
7799 /* We build the ICS for an implicit object parameter as a pointer
7800 conversion sequence. However, such a sequence should be compared
7801 as if it were a reference conversion sequence. If ICS is the
7802 implicit conversion sequence for an implicit object parameter,
7803 modify it accordingly. */
7805 static void
7806 maybe_handle_implicit_object (conversion **ics)
7808 if ((*ics)->this_p)
7810 /* [over.match.funcs]
7812 For non-static member functions, the type of the
7813 implicit object parameter is "reference to cv X"
7814 where X is the class of which the function is a
7815 member and cv is the cv-qualification on the member
7816 function declaration. */
7817 conversion *t = *ics;
7818 tree reference_type;
7820 /* The `this' parameter is a pointer to a class type. Make the
7821 implicit conversion talk about a reference to that same class
7822 type. */
7823 reference_type = TREE_TYPE (t->type);
7824 reference_type = build_reference_type (reference_type);
7826 if (t->kind == ck_qual)
7827 t = next_conversion (t);
7828 if (t->kind == ck_ptr)
7829 t = next_conversion (t);
7830 t = build_identity_conv (TREE_TYPE (t->type), NULL_TREE);
7831 t = direct_reference_binding (reference_type, t);
7832 t->this_p = 1;
7833 t->rvaluedness_matches_p = 0;
7834 *ics = t;
7838 /* If *ICS is a REF_BIND set *ICS to the remainder of the conversion,
7839 and return the initial reference binding conversion. Otherwise,
7840 leave *ICS unchanged and return NULL. */
7842 static conversion *
7843 maybe_handle_ref_bind (conversion **ics)
7845 if ((*ics)->kind == ck_ref_bind)
7847 conversion *old_ics = *ics;
7848 *ics = next_conversion (old_ics);
7849 (*ics)->user_conv_p = old_ics->user_conv_p;
7850 return old_ics;
7853 return NULL;
7856 /* Compare two implicit conversion sequences according to the rules set out in
7857 [over.ics.rank]. Return values:
7859 1: ics1 is better than ics2
7860 -1: ics2 is better than ics1
7861 0: ics1 and ics2 are indistinguishable */
7863 static int
7864 compare_ics (conversion *ics1, conversion *ics2)
7866 tree from_type1;
7867 tree from_type2;
7868 tree to_type1;
7869 tree to_type2;
7870 tree deref_from_type1 = NULL_TREE;
7871 tree deref_from_type2 = NULL_TREE;
7872 tree deref_to_type1 = NULL_TREE;
7873 tree deref_to_type2 = NULL_TREE;
7874 conversion_rank rank1, rank2;
7876 /* REF_BINDING is nonzero if the result of the conversion sequence
7877 is a reference type. In that case REF_CONV is the reference
7878 binding conversion. */
7879 conversion *ref_conv1;
7880 conversion *ref_conv2;
7882 /* Handle implicit object parameters. */
7883 maybe_handle_implicit_object (&ics1);
7884 maybe_handle_implicit_object (&ics2);
7886 /* Handle reference parameters. */
7887 ref_conv1 = maybe_handle_ref_bind (&ics1);
7888 ref_conv2 = maybe_handle_ref_bind (&ics2);
7890 /* List-initialization sequence L1 is a better conversion sequence than
7891 list-initialization sequence L2 if L1 converts to
7892 std::initializer_list<X> for some X and L2 does not. */
7893 if (ics1->kind == ck_list && ics2->kind != ck_list)
7894 return 1;
7895 if (ics2->kind == ck_list && ics1->kind != ck_list)
7896 return -1;
7898 /* [over.ics.rank]
7900 When comparing the basic forms of implicit conversion sequences (as
7901 defined in _over.best.ics_)
7903 --a standard conversion sequence (_over.ics.scs_) is a better
7904 conversion sequence than a user-defined conversion sequence
7905 or an ellipsis conversion sequence, and
7907 --a user-defined conversion sequence (_over.ics.user_) is a
7908 better conversion sequence than an ellipsis conversion sequence
7909 (_over.ics.ellipsis_). */
7910 rank1 = CONVERSION_RANK (ics1);
7911 rank2 = CONVERSION_RANK (ics2);
7913 if (rank1 > rank2)
7914 return -1;
7915 else if (rank1 < rank2)
7916 return 1;
7918 if (rank1 == cr_bad)
7920 /* Both ICS are bad. We try to make a decision based on what would
7921 have happened if they'd been good. This is not an extension,
7922 we'll still give an error when we build up the call; this just
7923 helps us give a more helpful error message. */
7924 rank1 = BAD_CONVERSION_RANK (ics1);
7925 rank2 = BAD_CONVERSION_RANK (ics2);
7927 if (rank1 > rank2)
7928 return -1;
7929 else if (rank1 < rank2)
7930 return 1;
7932 /* We couldn't make up our minds; try to figure it out below. */
7935 if (ics1->ellipsis_p)
7936 /* Both conversions are ellipsis conversions. */
7937 return 0;
7939 /* User-defined conversion sequence U1 is a better conversion sequence
7940 than another user-defined conversion sequence U2 if they contain the
7941 same user-defined conversion operator or constructor and if the sec-
7942 ond standard conversion sequence of U1 is better than the second
7943 standard conversion sequence of U2. */
7945 /* Handle list-conversion with the same code even though it isn't always
7946 ranked as a user-defined conversion and it doesn't have a second
7947 standard conversion sequence; it will still have the desired effect.
7948 Specifically, we need to do the reference binding comparison at the
7949 end of this function. */
7951 if (ics1->user_conv_p || ics1->kind == ck_list || ics1->kind == ck_aggr)
7953 conversion *t1;
7954 conversion *t2;
7956 for (t1 = ics1; t1->kind != ck_user; t1 = next_conversion (t1))
7957 if (t1->kind == ck_ambig || t1->kind == ck_aggr
7958 || t1->kind == ck_list)
7959 break;
7960 for (t2 = ics2; t2->kind != ck_user; t2 = next_conversion (t2))
7961 if (t2->kind == ck_ambig || t2->kind == ck_aggr
7962 || t2->kind == ck_list)
7963 break;
7965 if (t1->kind != t2->kind)
7966 return 0;
7967 else if (t1->kind == ck_user)
7969 if (t1->cand->fn != t2->cand->fn)
7970 return 0;
7972 else
7974 /* For ambiguous or aggregate conversions, use the target type as
7975 a proxy for the conversion function. */
7976 if (!same_type_ignoring_top_level_qualifiers_p (t1->type, t2->type))
7977 return 0;
7980 /* We can just fall through here, after setting up
7981 FROM_TYPE1 and FROM_TYPE2. */
7982 from_type1 = t1->type;
7983 from_type2 = t2->type;
7985 else
7987 conversion *t1;
7988 conversion *t2;
7990 /* We're dealing with two standard conversion sequences.
7992 [over.ics.rank]
7994 Standard conversion sequence S1 is a better conversion
7995 sequence than standard conversion sequence S2 if
7997 --S1 is a proper subsequence of S2 (comparing the conversion
7998 sequences in the canonical form defined by _over.ics.scs_,
7999 excluding any Lvalue Transformation; the identity
8000 conversion sequence is considered to be a subsequence of
8001 any non-identity conversion sequence */
8003 t1 = ics1;
8004 while (t1->kind != ck_identity)
8005 t1 = next_conversion (t1);
8006 from_type1 = t1->type;
8008 t2 = ics2;
8009 while (t2->kind != ck_identity)
8010 t2 = next_conversion (t2);
8011 from_type2 = t2->type;
8014 /* One sequence can only be a subsequence of the other if they start with
8015 the same type. They can start with different types when comparing the
8016 second standard conversion sequence in two user-defined conversion
8017 sequences. */
8018 if (same_type_p (from_type1, from_type2))
8020 if (is_subseq (ics1, ics2))
8021 return 1;
8022 if (is_subseq (ics2, ics1))
8023 return -1;
8026 /* [over.ics.rank]
8028 Or, if not that,
8030 --the rank of S1 is better than the rank of S2 (by the rules
8031 defined below):
8033 Standard conversion sequences are ordered by their ranks: an Exact
8034 Match is a better conversion than a Promotion, which is a better
8035 conversion than a Conversion.
8037 Two conversion sequences with the same rank are indistinguishable
8038 unless one of the following rules applies:
8040 --A conversion that does not a convert a pointer, pointer to member,
8041 or std::nullptr_t to bool is better than one that does.
8043 The ICS_STD_RANK automatically handles the pointer-to-bool rule,
8044 so that we do not have to check it explicitly. */
8045 if (ics1->rank < ics2->rank)
8046 return 1;
8047 else if (ics2->rank < ics1->rank)
8048 return -1;
8050 to_type1 = ics1->type;
8051 to_type2 = ics2->type;
8053 /* A conversion from scalar arithmetic type to complex is worse than a
8054 conversion between scalar arithmetic types. */
8055 if (same_type_p (from_type1, from_type2)
8056 && ARITHMETIC_TYPE_P (from_type1)
8057 && ARITHMETIC_TYPE_P (to_type1)
8058 && ARITHMETIC_TYPE_P (to_type2)
8059 && ((TREE_CODE (to_type1) == COMPLEX_TYPE)
8060 != (TREE_CODE (to_type2) == COMPLEX_TYPE)))
8062 if (TREE_CODE (to_type1) == COMPLEX_TYPE)
8063 return -1;
8064 else
8065 return 1;
8068 if (TYPE_PTR_P (from_type1)
8069 && TYPE_PTR_P (from_type2)
8070 && TYPE_PTR_P (to_type1)
8071 && TYPE_PTR_P (to_type2))
8073 deref_from_type1 = TREE_TYPE (from_type1);
8074 deref_from_type2 = TREE_TYPE (from_type2);
8075 deref_to_type1 = TREE_TYPE (to_type1);
8076 deref_to_type2 = TREE_TYPE (to_type2);
8078 /* The rules for pointers to members A::* are just like the rules
8079 for pointers A*, except opposite: if B is derived from A then
8080 A::* converts to B::*, not vice versa. For that reason, we
8081 switch the from_ and to_ variables here. */
8082 else if ((TYPE_PTRDATAMEM_P (from_type1) && TYPE_PTRDATAMEM_P (from_type2)
8083 && TYPE_PTRDATAMEM_P (to_type1) && TYPE_PTRDATAMEM_P (to_type2))
8084 || (TYPE_PTRMEMFUNC_P (from_type1)
8085 && TYPE_PTRMEMFUNC_P (from_type2)
8086 && TYPE_PTRMEMFUNC_P (to_type1)
8087 && TYPE_PTRMEMFUNC_P (to_type2)))
8089 deref_to_type1 = TYPE_PTRMEM_CLASS_TYPE (from_type1);
8090 deref_to_type2 = TYPE_PTRMEM_CLASS_TYPE (from_type2);
8091 deref_from_type1 = TYPE_PTRMEM_CLASS_TYPE (to_type1);
8092 deref_from_type2 = TYPE_PTRMEM_CLASS_TYPE (to_type2);
8095 if (deref_from_type1 != NULL_TREE
8096 && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_from_type1))
8097 && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_from_type2)))
8099 /* This was one of the pointer or pointer-like conversions.
8101 [over.ics.rank]
8103 --If class B is derived directly or indirectly from class A,
8104 conversion of B* to A* is better than conversion of B* to
8105 void*, and conversion of A* to void* is better than
8106 conversion of B* to void*. */
8107 if (TREE_CODE (deref_to_type1) == VOID_TYPE
8108 && TREE_CODE (deref_to_type2) == VOID_TYPE)
8110 if (is_properly_derived_from (deref_from_type1,
8111 deref_from_type2))
8112 return -1;
8113 else if (is_properly_derived_from (deref_from_type2,
8114 deref_from_type1))
8115 return 1;
8117 else if (TREE_CODE (deref_to_type1) == VOID_TYPE
8118 || TREE_CODE (deref_to_type2) == VOID_TYPE)
8120 if (same_type_p (deref_from_type1, deref_from_type2))
8122 if (TREE_CODE (deref_to_type2) == VOID_TYPE)
8124 if (is_properly_derived_from (deref_from_type1,
8125 deref_to_type1))
8126 return 1;
8128 /* We know that DEREF_TO_TYPE1 is `void' here. */
8129 else if (is_properly_derived_from (deref_from_type1,
8130 deref_to_type2))
8131 return -1;
8134 else if (RECORD_OR_UNION_CODE_P (TREE_CODE (deref_to_type1))
8135 && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_to_type2)))
8137 /* [over.ics.rank]
8139 --If class B is derived directly or indirectly from class A
8140 and class C is derived directly or indirectly from B,
8142 --conversion of C* to B* is better than conversion of C* to
8145 --conversion of B* to A* is better than conversion of C* to
8146 A* */
8147 if (same_type_p (deref_from_type1, deref_from_type2))
8149 if (is_properly_derived_from (deref_to_type1,
8150 deref_to_type2))
8151 return 1;
8152 else if (is_properly_derived_from (deref_to_type2,
8153 deref_to_type1))
8154 return -1;
8156 else if (same_type_p (deref_to_type1, deref_to_type2))
8158 if (is_properly_derived_from (deref_from_type2,
8159 deref_from_type1))
8160 return 1;
8161 else if (is_properly_derived_from (deref_from_type1,
8162 deref_from_type2))
8163 return -1;
8167 else if (CLASS_TYPE_P (non_reference (from_type1))
8168 && same_type_p (from_type1, from_type2))
8170 tree from = non_reference (from_type1);
8172 /* [over.ics.rank]
8174 --binding of an expression of type C to a reference of type
8175 B& is better than binding an expression of type C to a
8176 reference of type A&
8178 --conversion of C to B is better than conversion of C to A, */
8179 if (is_properly_derived_from (from, to_type1)
8180 && is_properly_derived_from (from, to_type2))
8182 if (is_properly_derived_from (to_type1, to_type2))
8183 return 1;
8184 else if (is_properly_derived_from (to_type2, to_type1))
8185 return -1;
8188 else if (CLASS_TYPE_P (non_reference (to_type1))
8189 && same_type_p (to_type1, to_type2))
8191 tree to = non_reference (to_type1);
8193 /* [over.ics.rank]
8195 --binding of an expression of type B to a reference of type
8196 A& is better than binding an expression of type C to a
8197 reference of type A&,
8199 --conversion of B to A is better than conversion of C to A */
8200 if (is_properly_derived_from (from_type1, to)
8201 && is_properly_derived_from (from_type2, to))
8203 if (is_properly_derived_from (from_type2, from_type1))
8204 return 1;
8205 else if (is_properly_derived_from (from_type1, from_type2))
8206 return -1;
8210 /* [over.ics.rank]
8212 --S1 and S2 differ only in their qualification conversion and yield
8213 similar types T1 and T2 (_conv.qual_), respectively, and the cv-
8214 qualification signature of type T1 is a proper subset of the cv-
8215 qualification signature of type T2 */
8216 if (ics1->kind == ck_qual
8217 && ics2->kind == ck_qual
8218 && same_type_p (from_type1, from_type2))
8220 int result = comp_cv_qual_signature (to_type1, to_type2);
8221 if (result != 0)
8222 return result;
8225 /* [over.ics.rank]
8227 --S1 and S2 are reference bindings (_dcl.init.ref_) and neither refers
8228 to an implicit object parameter, and either S1 binds an lvalue reference
8229 to an lvalue and S2 binds an rvalue reference or S1 binds an rvalue
8230 reference to an rvalue and S2 binds an lvalue reference
8231 (C++0x draft standard, 13.3.3.2)
8233 --S1 and S2 are reference bindings (_dcl.init.ref_), and the
8234 types to which the references refer are the same type except for
8235 top-level cv-qualifiers, and the type to which the reference
8236 initialized by S2 refers is more cv-qualified than the type to
8237 which the reference initialized by S1 refers.
8239 DR 1328 [over.match.best]: the context is an initialization by
8240 conversion function for direct reference binding (13.3.1.6) of a
8241 reference to function type, the return type of F1 is the same kind of
8242 reference (i.e. lvalue or rvalue) as the reference being initialized,
8243 and the return type of F2 is not. */
8245 if (ref_conv1 && ref_conv2)
8247 if (!ref_conv1->this_p && !ref_conv2->this_p
8248 && (ref_conv1->rvaluedness_matches_p
8249 != ref_conv2->rvaluedness_matches_p)
8250 && (same_type_p (ref_conv1->type, ref_conv2->type)
8251 || (TYPE_REF_IS_RVALUE (ref_conv1->type)
8252 != TYPE_REF_IS_RVALUE (ref_conv2->type))))
8254 return (ref_conv1->rvaluedness_matches_p
8255 - ref_conv2->rvaluedness_matches_p);
8258 if (same_type_ignoring_top_level_qualifiers_p (to_type1, to_type2))
8259 return comp_cv_qualification (TREE_TYPE (ref_conv2->type),
8260 TREE_TYPE (ref_conv1->type));
8263 /* Neither conversion sequence is better than the other. */
8264 return 0;
8267 /* The source type for this standard conversion sequence. */
8269 static tree
8270 source_type (conversion *t)
8272 for (;; t = next_conversion (t))
8274 if (t->kind == ck_user
8275 || t->kind == ck_ambig
8276 || t->kind == ck_identity)
8277 return t->type;
8279 gcc_unreachable ();
8282 /* Note a warning about preferring WINNER to LOSER. We do this by storing
8283 a pointer to LOSER and re-running joust to produce the warning if WINNER
8284 is actually used. */
8286 static void
8287 add_warning (struct z_candidate *winner, struct z_candidate *loser)
8289 candidate_warning *cw = (candidate_warning *)
8290 conversion_obstack_alloc (sizeof (candidate_warning));
8291 cw->loser = loser;
8292 cw->next = winner->warnings;
8293 winner->warnings = cw;
8296 /* Compare two candidates for overloading as described in
8297 [over.match.best]. Return values:
8299 1: cand1 is better than cand2
8300 -1: cand2 is better than cand1
8301 0: cand1 and cand2 are indistinguishable */
8303 static int
8304 joust (struct z_candidate *cand1, struct z_candidate *cand2, bool warn,
8305 tsubst_flags_t complain)
8307 int winner = 0;
8308 int off1 = 0, off2 = 0;
8309 size_t i;
8310 size_t len;
8312 /* Candidates that involve bad conversions are always worse than those
8313 that don't. */
8314 if (cand1->viable > cand2->viable)
8315 return 1;
8316 if (cand1->viable < cand2->viable)
8317 return -1;
8319 /* If we have two pseudo-candidates for conversions to the same type,
8320 or two candidates for the same function, arbitrarily pick one. */
8321 if (cand1->fn == cand2->fn
8322 && (IS_TYPE_OR_DECL_P (cand1->fn)))
8323 return 1;
8325 /* Prefer a non-deleted function over an implicitly deleted move
8326 constructor or assignment operator. This differs slightly from the
8327 wording for issue 1402 (which says the move op is ignored by overload
8328 resolution), but this way produces better error messages. */
8329 if (TREE_CODE (cand1->fn) == FUNCTION_DECL
8330 && TREE_CODE (cand2->fn) == FUNCTION_DECL
8331 && DECL_DELETED_FN (cand1->fn) != DECL_DELETED_FN (cand2->fn))
8333 if (DECL_DELETED_FN (cand1->fn) && DECL_DEFAULTED_FN (cand1->fn)
8334 && move_fn_p (cand1->fn))
8335 return -1;
8336 if (DECL_DELETED_FN (cand2->fn) && DECL_DEFAULTED_FN (cand2->fn)
8337 && move_fn_p (cand2->fn))
8338 return 1;
8341 /* a viable function F1
8342 is defined to be a better function than another viable function F2 if
8343 for all arguments i, ICSi(F1) is not a worse conversion sequence than
8344 ICSi(F2), and then */
8346 /* for some argument j, ICSj(F1) is a better conversion sequence than
8347 ICSj(F2) */
8349 /* For comparing static and non-static member functions, we ignore
8350 the implicit object parameter of the non-static function. The
8351 standard says to pretend that the static function has an object
8352 parm, but that won't work with operator overloading. */
8353 len = cand1->num_convs;
8354 if (len != cand2->num_convs)
8356 int static_1 = DECL_STATIC_FUNCTION_P (cand1->fn);
8357 int static_2 = DECL_STATIC_FUNCTION_P (cand2->fn);
8359 if (DECL_CONSTRUCTOR_P (cand1->fn)
8360 && is_list_ctor (cand1->fn) != is_list_ctor (cand2->fn))
8361 /* We're comparing a near-match list constructor and a near-match
8362 non-list constructor. Just treat them as unordered. */
8363 return 0;
8365 gcc_assert (static_1 != static_2);
8367 if (static_1)
8368 off2 = 1;
8369 else
8371 off1 = 1;
8372 --len;
8376 for (i = 0; i < len; ++i)
8378 conversion *t1 = cand1->convs[i + off1];
8379 conversion *t2 = cand2->convs[i + off2];
8380 int comp = compare_ics (t1, t2);
8382 if (comp != 0)
8384 if ((complain & tf_warning)
8385 && warn_sign_promo
8386 && (CONVERSION_RANK (t1) + CONVERSION_RANK (t2)
8387 == cr_std + cr_promotion)
8388 && t1->kind == ck_std
8389 && t2->kind == ck_std
8390 && TREE_CODE (t1->type) == INTEGER_TYPE
8391 && TREE_CODE (t2->type) == INTEGER_TYPE
8392 && (TYPE_PRECISION (t1->type)
8393 == TYPE_PRECISION (t2->type))
8394 && (TYPE_UNSIGNED (next_conversion (t1)->type)
8395 || (TREE_CODE (next_conversion (t1)->type)
8396 == ENUMERAL_TYPE)))
8398 tree type = next_conversion (t1)->type;
8399 tree type1, type2;
8400 struct z_candidate *w, *l;
8401 if (comp > 0)
8402 type1 = t1->type, type2 = t2->type,
8403 w = cand1, l = cand2;
8404 else
8405 type1 = t2->type, type2 = t1->type,
8406 w = cand2, l = cand1;
8408 if (warn)
8410 warning (OPT_Wsign_promo, "passing %qT chooses %qT over %qT",
8411 type, type1, type2);
8412 warning (OPT_Wsign_promo, " in call to %qD", w->fn);
8414 else
8415 add_warning (w, l);
8418 if (winner && comp != winner)
8420 winner = 0;
8421 goto tweak;
8423 winner = comp;
8427 /* warn about confusing overload resolution for user-defined conversions,
8428 either between a constructor and a conversion op, or between two
8429 conversion ops. */
8430 if ((complain & tf_warning)
8431 && winner && warn_conversion && cand1->second_conv
8432 && (!DECL_CONSTRUCTOR_P (cand1->fn) || !DECL_CONSTRUCTOR_P (cand2->fn))
8433 && winner != compare_ics (cand1->second_conv, cand2->second_conv))
8435 struct z_candidate *w, *l;
8436 bool give_warning = false;
8438 if (winner == 1)
8439 w = cand1, l = cand2;
8440 else
8441 w = cand2, l = cand1;
8443 /* We don't want to complain about `X::operator T1 ()'
8444 beating `X::operator T2 () const', when T2 is a no less
8445 cv-qualified version of T1. */
8446 if (DECL_CONTEXT (w->fn) == DECL_CONTEXT (l->fn)
8447 && !DECL_CONSTRUCTOR_P (w->fn) && !DECL_CONSTRUCTOR_P (l->fn))
8449 tree t = TREE_TYPE (TREE_TYPE (l->fn));
8450 tree f = TREE_TYPE (TREE_TYPE (w->fn));
8452 if (TREE_CODE (t) == TREE_CODE (f) && POINTER_TYPE_P (t))
8454 t = TREE_TYPE (t);
8455 f = TREE_TYPE (f);
8457 if (!comp_ptr_ttypes (t, f))
8458 give_warning = true;
8460 else
8461 give_warning = true;
8463 if (!give_warning)
8464 /*NOP*/;
8465 else if (warn)
8467 tree source = source_type (w->convs[0]);
8468 if (! DECL_CONSTRUCTOR_P (w->fn))
8469 source = TREE_TYPE (source);
8470 if (warning (OPT_Wconversion, "choosing %qD over %qD", w->fn, l->fn)
8471 && warning (OPT_Wconversion, " for conversion from %qT to %qT",
8472 source, w->second_conv->type))
8474 inform (input_location, " because conversion sequence for the argument is better");
8477 else
8478 add_warning (w, l);
8481 if (winner)
8482 return winner;
8484 /* DR 495 moved this tiebreaker above the template ones. */
8485 /* or, if not that,
8486 the context is an initialization by user-defined conversion (see
8487 _dcl.init_ and _over.match.user_) and the standard conversion
8488 sequence from the return type of F1 to the destination type (i.e.,
8489 the type of the entity being initialized) is a better conversion
8490 sequence than the standard conversion sequence from the return type
8491 of F2 to the destination type. */
8493 if (cand1->second_conv)
8495 winner = compare_ics (cand1->second_conv, cand2->second_conv);
8496 if (winner)
8497 return winner;
8500 /* or, if not that,
8501 F1 is a non-template function and F2 is a template function
8502 specialization. */
8504 if (!cand1->template_decl && cand2->template_decl)
8505 return 1;
8506 else if (cand1->template_decl && !cand2->template_decl)
8507 return -1;
8509 /* or, if not that,
8510 F1 and F2 are template functions and the function template for F1 is
8511 more specialized than the template for F2 according to the partial
8512 ordering rules. */
8514 if (cand1->template_decl && cand2->template_decl)
8516 winner = more_specialized_fn
8517 (TI_TEMPLATE (cand1->template_decl),
8518 TI_TEMPLATE (cand2->template_decl),
8519 /* [temp.func.order]: The presence of unused ellipsis and default
8520 arguments has no effect on the partial ordering of function
8521 templates. add_function_candidate() will not have
8522 counted the "this" argument for constructors. */
8523 cand1->num_convs + DECL_CONSTRUCTOR_P (cand1->fn));
8524 if (winner)
8525 return winner;
8528 /* Check whether we can discard a builtin candidate, either because we
8529 have two identical ones or matching builtin and non-builtin candidates.
8531 (Pedantically in the latter case the builtin which matched the user
8532 function should not be added to the overload set, but we spot it here.
8534 [over.match.oper]
8535 ... the builtin candidates include ...
8536 - do not have the same parameter type list as any non-template
8537 non-member candidate. */
8539 if (TREE_CODE (cand1->fn) == IDENTIFIER_NODE
8540 || TREE_CODE (cand2->fn) == IDENTIFIER_NODE)
8542 for (i = 0; i < len; ++i)
8543 if (!same_type_p (cand1->convs[i]->type,
8544 cand2->convs[i]->type))
8545 break;
8546 if (i == cand1->num_convs)
8548 if (cand1->fn == cand2->fn)
8549 /* Two built-in candidates; arbitrarily pick one. */
8550 return 1;
8551 else if (TREE_CODE (cand1->fn) == IDENTIFIER_NODE)
8552 /* cand1 is built-in; prefer cand2. */
8553 return -1;
8554 else
8555 /* cand2 is built-in; prefer cand1. */
8556 return 1;
8560 /* For candidates of a multi-versioned function, make the version with
8561 the highest priority win. This version will be checked for dispatching
8562 first. If this version can be inlined into the caller, the front-end
8563 will simply make a direct call to this function. */
8565 if (TREE_CODE (cand1->fn) == FUNCTION_DECL
8566 && DECL_FUNCTION_VERSIONED (cand1->fn)
8567 && TREE_CODE (cand2->fn) == FUNCTION_DECL
8568 && DECL_FUNCTION_VERSIONED (cand2->fn))
8570 tree f1 = TREE_TYPE (cand1->fn);
8571 tree f2 = TREE_TYPE (cand2->fn);
8572 tree p1 = TYPE_ARG_TYPES (f1);
8573 tree p2 = TYPE_ARG_TYPES (f2);
8575 /* Check if cand1->fn and cand2->fn are versions of the same function. It
8576 is possible that cand1->fn and cand2->fn are function versions but of
8577 different functions. Check types to see if they are versions of the same
8578 function. */
8579 if (compparms (p1, p2)
8580 && same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
8582 /* Always make the version with the higher priority, more
8583 specialized, win. */
8584 gcc_assert (targetm.compare_version_priority);
8585 if (targetm.compare_version_priority (cand1->fn, cand2->fn) >= 0)
8586 return 1;
8587 else
8588 return -1;
8592 /* If the two function declarations represent the same function (this can
8593 happen with declarations in multiple scopes and arg-dependent lookup),
8594 arbitrarily choose one. But first make sure the default args we're
8595 using match. */
8596 if (DECL_P (cand1->fn) && DECL_P (cand2->fn)
8597 && equal_functions (cand1->fn, cand2->fn))
8599 tree parms1 = TYPE_ARG_TYPES (TREE_TYPE (cand1->fn));
8600 tree parms2 = TYPE_ARG_TYPES (TREE_TYPE (cand2->fn));
8602 gcc_assert (!DECL_CONSTRUCTOR_P (cand1->fn));
8604 for (i = 0; i < len; ++i)
8606 /* Don't crash if the fn is variadic. */
8607 if (!parms1)
8608 break;
8609 parms1 = TREE_CHAIN (parms1);
8610 parms2 = TREE_CHAIN (parms2);
8613 if (off1)
8614 parms1 = TREE_CHAIN (parms1);
8615 else if (off2)
8616 parms2 = TREE_CHAIN (parms2);
8618 for (; parms1; ++i)
8620 if (!cp_tree_equal (TREE_PURPOSE (parms1),
8621 TREE_PURPOSE (parms2)))
8623 if (warn)
8625 if (complain & tf_error)
8627 permerror (input_location,
8628 "default argument mismatch in "
8629 "overload resolution");
8630 inform (input_location,
8631 " candidate 1: %q+#F", cand1->fn);
8632 inform (input_location,
8633 " candidate 2: %q+#F", cand2->fn);
8635 else
8636 return 0;
8638 else
8639 add_warning (cand1, cand2);
8640 break;
8642 parms1 = TREE_CHAIN (parms1);
8643 parms2 = TREE_CHAIN (parms2);
8646 return 1;
8649 tweak:
8651 /* Extension: If the worst conversion for one candidate is worse than the
8652 worst conversion for the other, take the first. */
8653 if (!pedantic && (complain & tf_warning_or_error))
8655 conversion_rank rank1 = cr_identity, rank2 = cr_identity;
8656 struct z_candidate *w = 0, *l = 0;
8658 for (i = 0; i < len; ++i)
8660 if (CONVERSION_RANK (cand1->convs[i+off1]) > rank1)
8661 rank1 = CONVERSION_RANK (cand1->convs[i+off1]);
8662 if (CONVERSION_RANK (cand2->convs[i + off2]) > rank2)
8663 rank2 = CONVERSION_RANK (cand2->convs[i + off2]);
8665 if (rank1 < rank2)
8666 winner = 1, w = cand1, l = cand2;
8667 if (rank1 > rank2)
8668 winner = -1, w = cand2, l = cand1;
8669 if (winner)
8671 /* Don't choose a deleted function over ambiguity. */
8672 if (DECL_P (w->fn) && DECL_DELETED_FN (w->fn))
8673 return 0;
8674 if (warn)
8676 pedwarn (input_location, 0,
8677 "ISO C++ says that these are ambiguous, even "
8678 "though the worst conversion for the first is better than "
8679 "the worst conversion for the second:");
8680 print_z_candidate (input_location, _("candidate 1:"), w);
8681 print_z_candidate (input_location, _("candidate 2:"), l);
8683 else
8684 add_warning (w, l);
8685 return winner;
8689 gcc_assert (!winner);
8690 return 0;
8693 /* Given a list of candidates for overloading, find the best one, if any.
8694 This algorithm has a worst case of O(2n) (winner is last), and a best
8695 case of O(n/2) (totally ambiguous); much better than a sorting
8696 algorithm. */
8698 static struct z_candidate *
8699 tourney (struct z_candidate *candidates, tsubst_flags_t complain)
8701 struct z_candidate *champ = candidates, *challenger;
8702 int fate;
8703 int champ_compared_to_predecessor = 0;
8705 /* Walk through the list once, comparing each current champ to the next
8706 candidate, knocking out a candidate or two with each comparison. */
8708 for (challenger = champ->next; challenger; )
8710 fate = joust (champ, challenger, 0, complain);
8711 if (fate == 1)
8712 challenger = challenger->next;
8713 else
8715 if (fate == 0)
8717 champ = challenger->next;
8718 if (champ == 0)
8719 return NULL;
8720 champ_compared_to_predecessor = 0;
8722 else
8724 champ = challenger;
8725 champ_compared_to_predecessor = 1;
8728 challenger = champ->next;
8732 /* Make sure the champ is better than all the candidates it hasn't yet
8733 been compared to. */
8735 for (challenger = candidates;
8736 challenger != champ
8737 && !(champ_compared_to_predecessor && challenger->next == champ);
8738 challenger = challenger->next)
8740 fate = joust (champ, challenger, 0, complain);
8741 if (fate != 1)
8742 return NULL;
8745 return champ;
8748 /* Returns nonzero if things of type FROM can be converted to TO. */
8750 bool
8751 can_convert (tree to, tree from, tsubst_flags_t complain)
8753 return can_convert_arg (to, from, NULL_TREE, LOOKUP_IMPLICIT, complain);
8756 /* Returns nonzero if ARG (of type FROM) can be converted to TO. */
8758 bool
8759 can_convert_arg (tree to, tree from, tree arg, int flags,
8760 tsubst_flags_t complain)
8762 conversion *t;
8763 void *p;
8764 bool ok_p;
8766 /* Get the high-water mark for the CONVERSION_OBSTACK. */
8767 p = conversion_obstack_alloc (0);
8769 t = implicit_conversion (to, from, arg, /*c_cast_p=*/false,
8770 flags, complain);
8771 ok_p = (t && !t->bad_p);
8773 /* Free all the conversions we allocated. */
8774 obstack_free (&conversion_obstack, p);
8776 return ok_p;
8779 /* Like can_convert_arg, but allows dubious conversions as well. */
8781 bool
8782 can_convert_arg_bad (tree to, tree from, tree arg, int flags,
8783 tsubst_flags_t complain)
8785 conversion *t;
8786 void *p;
8788 /* Get the high-water mark for the CONVERSION_OBSTACK. */
8789 p = conversion_obstack_alloc (0);
8790 /* Try to perform the conversion. */
8791 t = implicit_conversion (to, from, arg, /*c_cast_p=*/false,
8792 flags, complain);
8793 /* Free all the conversions we allocated. */
8794 obstack_free (&conversion_obstack, p);
8796 return t != NULL;
8799 /* Convert EXPR to TYPE. Return the converted expression.
8801 Note that we allow bad conversions here because by the time we get to
8802 this point we are committed to doing the conversion. If we end up
8803 doing a bad conversion, convert_like will complain. */
8805 tree
8806 perform_implicit_conversion_flags (tree type, tree expr,
8807 tsubst_flags_t complain, int flags)
8809 conversion *conv;
8810 void *p;
8811 location_t loc = EXPR_LOC_OR_HERE (expr);
8813 if (error_operand_p (expr))
8814 return error_mark_node;
8816 /* Get the high-water mark for the CONVERSION_OBSTACK. */
8817 p = conversion_obstack_alloc (0);
8819 conv = implicit_conversion (type, TREE_TYPE (expr), expr,
8820 /*c_cast_p=*/false,
8821 flags, complain);
8823 if (!conv)
8825 if (complain & tf_error)
8827 /* If expr has unknown type, then it is an overloaded function.
8828 Call instantiate_type to get good error messages. */
8829 if (TREE_TYPE (expr) == unknown_type_node)
8830 instantiate_type (type, expr, complain);
8831 else if (invalid_nonstatic_memfn_p (expr, complain))
8832 /* We gave an error. */;
8833 else
8834 error_at (loc, "could not convert %qE from %qT to %qT", expr,
8835 TREE_TYPE (expr), type);
8837 expr = error_mark_node;
8839 else if (processing_template_decl && conv->kind != ck_identity)
8841 /* In a template, we are only concerned about determining the
8842 type of non-dependent expressions, so we do not have to
8843 perform the actual conversion. But for initializers, we
8844 need to be able to perform it at instantiation
8845 (or fold_non_dependent_expr) time. */
8846 expr = build1 (IMPLICIT_CONV_EXPR, type, expr);
8847 if (!(flags & LOOKUP_ONLYCONVERTING))
8848 IMPLICIT_CONV_EXPR_DIRECT_INIT (expr) = true;
8850 else
8851 expr = convert_like (conv, expr, complain);
8853 /* Free all the conversions we allocated. */
8854 obstack_free (&conversion_obstack, p);
8856 return expr;
8859 tree
8860 perform_implicit_conversion (tree type, tree expr, tsubst_flags_t complain)
8862 return perform_implicit_conversion_flags (type, expr, complain,
8863 LOOKUP_IMPLICIT);
8866 /* Convert EXPR to TYPE (as a direct-initialization) if that is
8867 permitted. If the conversion is valid, the converted expression is
8868 returned. Otherwise, NULL_TREE is returned, except in the case
8869 that TYPE is a class type; in that case, an error is issued. If
8870 C_CAST_P is true, then this direct-initialization is taking
8871 place as part of a static_cast being attempted as part of a C-style
8872 cast. */
8874 tree
8875 perform_direct_initialization_if_possible (tree type,
8876 tree expr,
8877 bool c_cast_p,
8878 tsubst_flags_t complain)
8880 conversion *conv;
8881 void *p;
8883 if (type == error_mark_node || error_operand_p (expr))
8884 return error_mark_node;
8885 /* [dcl.init]
8887 If the destination type is a (possibly cv-qualified) class type:
8889 -- If the initialization is direct-initialization ...,
8890 constructors are considered. ... If no constructor applies, or
8891 the overload resolution is ambiguous, the initialization is
8892 ill-formed. */
8893 if (CLASS_TYPE_P (type))
8895 vec<tree, va_gc> *args = make_tree_vector_single (expr);
8896 expr = build_special_member_call (NULL_TREE, complete_ctor_identifier,
8897 &args, type, LOOKUP_NORMAL, complain);
8898 release_tree_vector (args);
8899 return build_cplus_new (type, expr, complain);
8902 /* Get the high-water mark for the CONVERSION_OBSTACK. */
8903 p = conversion_obstack_alloc (0);
8905 conv = implicit_conversion (type, TREE_TYPE (expr), expr,
8906 c_cast_p,
8907 LOOKUP_NORMAL, complain);
8908 if (!conv || conv->bad_p)
8909 expr = NULL_TREE;
8910 else
8911 expr = convert_like_real (conv, expr, NULL_TREE, 0, 0,
8912 /*issue_conversion_warnings=*/false,
8913 c_cast_p,
8914 complain);
8916 /* Free all the conversions we allocated. */
8917 obstack_free (&conversion_obstack, p);
8919 return expr;
8922 /* When initializing a reference that lasts longer than a full-expression,
8923 this special rule applies:
8925 [class.temporary]
8927 The temporary to which the reference is bound or the temporary
8928 that is the complete object to which the reference is bound
8929 persists for the lifetime of the reference.
8931 The temporaries created during the evaluation of the expression
8932 initializing the reference, except the temporary to which the
8933 reference is bound, are destroyed at the end of the
8934 full-expression in which they are created.
8936 In that case, we store the converted expression into a new
8937 VAR_DECL in a new scope.
8939 However, we want to be careful not to create temporaries when
8940 they are not required. For example, given:
8942 struct B {};
8943 struct D : public B {};
8944 D f();
8945 const B& b = f();
8947 there is no need to copy the return value from "f"; we can just
8948 extend its lifetime. Similarly, given:
8950 struct S {};
8951 struct T { operator S(); };
8952 T t;
8953 const S& s = t;
8955 we can extend the lifetime of the return value of the conversion
8956 operator.
8958 The next several functions are involved in this lifetime extension. */
8960 /* DECL is a VAR_DECL or FIELD_DECL whose type is a REFERENCE_TYPE. The
8961 reference is being bound to a temporary. Create and return a new
8962 VAR_DECL with the indicated TYPE; this variable will store the value to
8963 which the reference is bound. */
8965 tree
8966 make_temporary_var_for_ref_to_temp (tree decl, tree type)
8968 tree var;
8970 /* Create the variable. */
8971 var = create_temporary_var (type);
8973 /* Register the variable. */
8974 if (TREE_CODE (decl) == VAR_DECL
8975 && (TREE_STATIC (decl) || DECL_THREAD_LOCAL_P (decl)))
8977 /* Namespace-scope or local static; give it a mangled name. */
8978 /* FIXME share comdat with decl? */
8979 tree name;
8981 TREE_STATIC (var) = TREE_STATIC (decl);
8982 DECL_TLS_MODEL (var) = DECL_TLS_MODEL (decl);
8983 name = mangle_ref_init_variable (decl);
8984 DECL_NAME (var) = name;
8985 SET_DECL_ASSEMBLER_NAME (var, name);
8986 var = pushdecl_top_level (var);
8988 else
8989 /* Create a new cleanup level if necessary. */
8990 maybe_push_cleanup_level (type);
8992 return var;
8995 /* EXPR is the initializer for a variable DECL of reference or
8996 std::initializer_list type. Create, push and return a new VAR_DECL
8997 for the initializer so that it will live as long as DECL. Any
8998 cleanup for the new variable is returned through CLEANUP, and the
8999 code to initialize the new variable is returned through INITP. */
9001 static tree
9002 set_up_extended_ref_temp (tree decl, tree expr, vec<tree, va_gc> **cleanups,
9003 tree *initp)
9005 tree init;
9006 tree type;
9007 tree var;
9009 /* Create the temporary variable. */
9010 type = TREE_TYPE (expr);
9011 var = make_temporary_var_for_ref_to_temp (decl, type);
9012 layout_decl (var, 0);
9013 /* If the rvalue is the result of a function call it will be
9014 a TARGET_EXPR. If it is some other construct (such as a
9015 member access expression where the underlying object is
9016 itself the result of a function call), turn it into a
9017 TARGET_EXPR here. It is important that EXPR be a
9018 TARGET_EXPR below since otherwise the INIT_EXPR will
9019 attempt to make a bitwise copy of EXPR to initialize
9020 VAR. */
9021 if (TREE_CODE (expr) != TARGET_EXPR)
9022 expr = get_target_expr (expr);
9024 if (TREE_CODE (decl) == FIELD_DECL
9025 && extra_warnings && !TREE_NO_WARNING (decl))
9027 warning (OPT_Wextra, "a temporary bound to %qD only persists "
9028 "until the constructor exits", decl);
9029 TREE_NO_WARNING (decl) = true;
9032 /* Recursively extend temps in this initializer. */
9033 TARGET_EXPR_INITIAL (expr)
9034 = extend_ref_init_temps (decl, TARGET_EXPR_INITIAL (expr), cleanups);
9036 /* Any reference temp has a non-trivial initializer. */
9037 DECL_NONTRIVIALLY_INITIALIZED_P (var) = true;
9039 /* If the initializer is constant, put it in DECL_INITIAL so we get
9040 static initialization and use in constant expressions. */
9041 init = maybe_constant_init (expr);
9042 if (TREE_CONSTANT (init))
9044 if (literal_type_p (type) && CP_TYPE_CONST_NON_VOLATILE_P (type))
9046 /* 5.19 says that a constant expression can include an
9047 lvalue-rvalue conversion applied to "a glvalue of literal type
9048 that refers to a non-volatile temporary object initialized
9049 with a constant expression". Rather than try to communicate
9050 that this VAR_DECL is a temporary, just mark it constexpr.
9052 Currently this is only useful for initializer_list temporaries,
9053 since reference vars can't appear in constant expressions. */
9054 DECL_DECLARED_CONSTEXPR_P (var) = true;
9055 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (var) = true;
9056 TREE_CONSTANT (var) = true;
9058 DECL_INITIAL (var) = init;
9059 init = NULL_TREE;
9061 else
9062 /* Create the INIT_EXPR that will initialize the temporary
9063 variable. */
9064 init = build2 (INIT_EXPR, type, var, expr);
9065 if (at_function_scope_p ())
9067 add_decl_expr (var);
9069 if (TREE_STATIC (var))
9070 init = add_stmt_to_compound (init, register_dtor_fn (var));
9071 else
9073 tree cleanup = cxx_maybe_build_cleanup (var, tf_warning_or_error);
9074 if (cleanup)
9075 vec_safe_push (*cleanups, cleanup);
9078 /* We must be careful to destroy the temporary only
9079 after its initialization has taken place. If the
9080 initialization throws an exception, then the
9081 destructor should not be run. We cannot simply
9082 transform INIT into something like:
9084 (INIT, ({ CLEANUP_STMT; }))
9086 because emit_local_var always treats the
9087 initializer as a full-expression. Thus, the
9088 destructor would run too early; it would run at the
9089 end of initializing the reference variable, rather
9090 than at the end of the block enclosing the
9091 reference variable.
9093 The solution is to pass back a cleanup expression
9094 which the caller is responsible for attaching to
9095 the statement tree. */
9097 else
9099 rest_of_decl_compilation (var, /*toplev=*/1, at_eof);
9100 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
9102 if (DECL_THREAD_LOCAL_P (var))
9103 tls_aggregates = tree_cons (NULL_TREE, var,
9104 tls_aggregates);
9105 else
9106 static_aggregates = tree_cons (NULL_TREE, var,
9107 static_aggregates);
9111 *initp = init;
9112 return var;
9115 /* Convert EXPR to the indicated reference TYPE, in a way suitable for
9116 initializing a variable of that TYPE. */
9118 tree
9119 initialize_reference (tree type, tree expr,
9120 int flags, tsubst_flags_t complain)
9122 conversion *conv;
9123 void *p;
9124 location_t loc = EXPR_LOC_OR_HERE (expr);
9126 if (type == error_mark_node || error_operand_p (expr))
9127 return error_mark_node;
9129 /* Get the high-water mark for the CONVERSION_OBSTACK. */
9130 p = conversion_obstack_alloc (0);
9132 conv = reference_binding (type, TREE_TYPE (expr), expr, /*c_cast_p=*/false,
9133 flags, complain);
9134 if (!conv || conv->bad_p)
9136 if (complain & tf_error)
9138 if (conv)
9139 convert_like (conv, expr, complain);
9140 else if (!CP_TYPE_CONST_P (TREE_TYPE (type))
9141 && !TYPE_REF_IS_RVALUE (type)
9142 && !real_lvalue_p (expr))
9143 error_at (loc, "invalid initialization of non-const reference of "
9144 "type %qT from an rvalue of type %qT",
9145 type, TREE_TYPE (expr));
9146 else
9147 error_at (loc, "invalid initialization of reference of type "
9148 "%qT from expression of type %qT", type,
9149 TREE_TYPE (expr));
9151 return error_mark_node;
9154 gcc_assert (conv->kind == ck_ref_bind);
9156 /* Perform the conversion. */
9157 expr = convert_like (conv, expr, complain);
9159 /* Free all the conversions we allocated. */
9160 obstack_free (&conversion_obstack, p);
9162 return expr;
9165 /* Subroutine of extend_ref_init_temps. Possibly extend one initializer,
9166 which is bound either to a reference or a std::initializer_list. */
9168 static tree
9169 extend_ref_init_temps_1 (tree decl, tree init, vec<tree, va_gc> **cleanups)
9171 tree sub = init;
9172 tree *p;
9173 STRIP_NOPS (sub);
9174 if (TREE_CODE (sub) == COMPOUND_EXPR)
9176 TREE_OPERAND (sub, 1)
9177 = extend_ref_init_temps_1 (decl, TREE_OPERAND (sub, 1), cleanups);
9178 return init;
9180 if (TREE_CODE (sub) != ADDR_EXPR)
9181 return init;
9182 /* Deal with binding to a subobject. */
9183 for (p = &TREE_OPERAND (sub, 0); TREE_CODE (*p) == COMPONENT_REF; )
9184 p = &TREE_OPERAND (*p, 0);
9185 if (TREE_CODE (*p) == TARGET_EXPR)
9187 tree subinit = NULL_TREE;
9188 *p = set_up_extended_ref_temp (decl, *p, cleanups, &subinit);
9189 if (subinit)
9190 init = build2 (COMPOUND_EXPR, TREE_TYPE (init), subinit, init);
9191 recompute_tree_invariant_for_addr_expr (sub);
9193 return init;
9196 /* INIT is part of the initializer for DECL. If there are any
9197 reference or initializer lists being initialized, extend their
9198 lifetime to match that of DECL. */
9200 tree
9201 extend_ref_init_temps (tree decl, tree init, vec<tree, va_gc> **cleanups)
9203 tree type = TREE_TYPE (init);
9204 if (processing_template_decl)
9205 return init;
9206 if (TREE_CODE (type) == REFERENCE_TYPE)
9207 init = extend_ref_init_temps_1 (decl, init, cleanups);
9208 else if (is_std_init_list (type))
9210 /* The temporary array underlying a std::initializer_list
9211 is handled like a reference temporary. */
9212 tree ctor = init;
9213 if (TREE_CODE (ctor) == TARGET_EXPR)
9214 ctor = TARGET_EXPR_INITIAL (ctor);
9215 if (TREE_CODE (ctor) == CONSTRUCTOR)
9217 tree array = CONSTRUCTOR_ELT (ctor, 0)->value;
9218 array = extend_ref_init_temps_1 (decl, array, cleanups);
9219 CONSTRUCTOR_ELT (ctor, 0)->value = array;
9222 else if (TREE_CODE (init) == CONSTRUCTOR)
9224 unsigned i;
9225 constructor_elt *p;
9226 vec<constructor_elt, va_gc> *elts = CONSTRUCTOR_ELTS (init);
9227 FOR_EACH_VEC_SAFE_ELT (elts, i, p)
9228 p->value = extend_ref_init_temps (decl, p->value, cleanups);
9231 return init;
9234 /* Returns true iff an initializer for TYPE could contain temporaries that
9235 need to be extended because they are bound to references or
9236 std::initializer_list. */
9238 bool
9239 type_has_extended_temps (tree type)
9241 type = strip_array_types (type);
9242 if (TREE_CODE (type) == REFERENCE_TYPE)
9243 return true;
9244 if (CLASS_TYPE_P (type))
9246 if (is_std_init_list (type))
9247 return true;
9248 for (tree f = next_initializable_field (TYPE_FIELDS (type));
9249 f; f = next_initializable_field (DECL_CHAIN (f)))
9250 if (type_has_extended_temps (TREE_TYPE (f)))
9251 return true;
9253 return false;
9256 /* Returns true iff TYPE is some variant of std::initializer_list. */
9258 bool
9259 is_std_init_list (tree type)
9261 /* Look through typedefs. */
9262 if (!TYPE_P (type))
9263 return false;
9264 type = TYPE_MAIN_VARIANT (type);
9265 return (CLASS_TYPE_P (type)
9266 && CP_TYPE_CONTEXT (type) == std_node
9267 && strcmp (TYPE_NAME_STRING (type), "initializer_list") == 0);
9270 /* Returns true iff DECL is a list constructor: i.e. a constructor which
9271 will accept an argument list of a single std::initializer_list<T>. */
9273 bool
9274 is_list_ctor (tree decl)
9276 tree args = FUNCTION_FIRST_USER_PARMTYPE (decl);
9277 tree arg;
9279 if (!args || args == void_list_node)
9280 return false;
9282 arg = non_reference (TREE_VALUE (args));
9283 if (!is_std_init_list (arg))
9284 return false;
9286 args = TREE_CHAIN (args);
9288 if (args && args != void_list_node && !TREE_PURPOSE (args))
9289 /* There are more non-defaulted parms. */
9290 return false;
9292 return true;
9295 #include "gt-cp-call.h"