call.c (build_new_method_call_1): Use INDIRECT_REF_P.
[official-gcc.git] / gcc / cp / call.c
blob67d8b816ead992374e589a59f449522a9f68677a
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 (identifier_p (name))
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 (identifier_p (candidate->fn))
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 = fold_build2 (NE_EXPR, signed_type_for (arg1_type), arg1,
4441 build_zero_cst (arg1_type));
4442 return fold_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 + werrorcount, 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 + werrorcount > 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 /* When converting from an init list we consider explicit
5860 constructors, but actually trying to call one is an error. */
5861 if (DECL_NONCONVERTING_P (convfn) && DECL_CONSTRUCTOR_P (convfn)
5862 /* Unless this is for direct-list-initialization. */
5863 && !(BRACE_ENCLOSED_INITIALIZER_P (expr)
5864 && CONSTRUCTOR_IS_DIRECT_INIT (expr)))
5866 error ("converting to %qT from initializer list would use "
5867 "explicit constructor %qD", totype, convfn);
5870 /* If we're initializing from {}, it's value-initialization. */
5871 if (BRACE_ENCLOSED_INITIALIZER_P (expr)
5872 && CONSTRUCTOR_NELTS (expr) == 0
5873 && TYPE_HAS_DEFAULT_CONSTRUCTOR (totype))
5875 bool direct = CONSTRUCTOR_IS_DIRECT_INIT (expr);
5876 expr = build_value_init (totype, complain);
5877 expr = get_target_expr_sfinae (expr, complain);
5878 if (expr != error_mark_node)
5880 TARGET_EXPR_LIST_INIT_P (expr) = true;
5881 TARGET_EXPR_DIRECT_INIT_P (expr) = direct;
5883 return expr;
5886 expr = mark_rvalue_use (expr);
5888 /* Set user_conv_p on the argument conversions, so rvalue/base
5889 handling knows not to allow any more UDCs. */
5890 for (i = 0; i < cand->num_convs; ++i)
5891 cand->convs[i]->user_conv_p = true;
5893 expr = build_over_call (cand, LOOKUP_NORMAL, complain);
5895 /* If this is a constructor or a function returning an aggr type,
5896 we need to build up a TARGET_EXPR. */
5897 if (DECL_CONSTRUCTOR_P (convfn))
5899 expr = build_cplus_new (totype, expr, complain);
5901 /* Remember that this was list-initialization. */
5902 if (convs->check_narrowing && expr != error_mark_node)
5903 TARGET_EXPR_LIST_INIT_P (expr) = true;
5906 return expr;
5908 case ck_identity:
5909 expr = mark_rvalue_use (expr);
5910 if (BRACE_ENCLOSED_INITIALIZER_P (expr))
5912 int nelts = CONSTRUCTOR_NELTS (expr);
5913 if (nelts == 0)
5914 expr = build_value_init (totype, complain);
5915 else if (nelts == 1)
5916 expr = CONSTRUCTOR_ELT (expr, 0)->value;
5917 else
5918 gcc_unreachable ();
5921 if (type_unknown_p (expr))
5922 expr = instantiate_type (totype, expr, complain);
5923 /* Convert a constant to its underlying value, unless we are
5924 about to bind it to a reference, in which case we need to
5925 leave it as an lvalue. */
5926 if (inner >= 0)
5928 expr = decl_constant_value_safe (expr);
5929 if (expr == null_node && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (totype))
5930 /* If __null has been converted to an integer type, we do not
5931 want to warn about uses of EXPR as an integer, rather than
5932 as a pointer. */
5933 expr = build_int_cst (totype, 0);
5935 return expr;
5936 case ck_ambig:
5937 /* We leave bad_p off ck_ambig because overload resolution considers
5938 it valid, it just fails when we try to perform it. So we need to
5939 check complain here, too. */
5940 if (complain & tf_error)
5942 /* Call build_user_type_conversion again for the error. */
5943 build_user_type_conversion (totype, convs->u.expr, LOOKUP_NORMAL,
5944 complain);
5945 if (fn)
5946 error (" initializing argument %P of %q+D", argnum, fn);
5948 return error_mark_node;
5950 case ck_list:
5952 /* Conversion to std::initializer_list<T>. */
5953 tree elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (totype), 0);
5954 tree new_ctor = build_constructor (init_list_type_node, NULL);
5955 unsigned len = CONSTRUCTOR_NELTS (expr);
5956 tree array, val, field;
5957 vec<constructor_elt, va_gc> *vec = NULL;
5958 unsigned ix;
5960 /* Convert all the elements. */
5961 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expr), ix, val)
5963 tree sub = convert_like_real (convs->u.list[ix], val, fn, argnum,
5964 1, false, false, complain);
5965 if (sub == error_mark_node)
5966 return sub;
5967 if (!BRACE_ENCLOSED_INITIALIZER_P (val))
5968 check_narrowing (TREE_TYPE (sub), val);
5969 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_ctor), NULL_TREE, sub);
5970 if (!TREE_CONSTANT (sub))
5971 TREE_CONSTANT (new_ctor) = false;
5973 /* Build up the array. */
5974 elttype = cp_build_qualified_type
5975 (elttype, cp_type_quals (elttype) | TYPE_QUAL_CONST);
5976 array = build_array_of_n_type (elttype, len);
5977 array = finish_compound_literal (array, new_ctor, complain);
5978 /* Take the address explicitly rather than via decay_conversion
5979 to avoid the error about taking the address of a temporary. */
5980 array = cp_build_addr_expr (array, complain);
5981 array = cp_convert (build_pointer_type (elttype), array, complain);
5983 /* Build up the initializer_list object. */
5984 totype = complete_type (totype);
5985 field = next_initializable_field (TYPE_FIELDS (totype));
5986 CONSTRUCTOR_APPEND_ELT (vec, field, array);
5987 field = next_initializable_field (DECL_CHAIN (field));
5988 CONSTRUCTOR_APPEND_ELT (vec, field, size_int (len));
5989 new_ctor = build_constructor (totype, vec);
5990 return get_target_expr_sfinae (new_ctor, complain);
5993 case ck_aggr:
5994 if (TREE_CODE (totype) == COMPLEX_TYPE)
5996 tree real = CONSTRUCTOR_ELT (expr, 0)->value;
5997 tree imag = CONSTRUCTOR_ELT (expr, 1)->value;
5998 real = perform_implicit_conversion (TREE_TYPE (totype),
5999 real, complain);
6000 imag = perform_implicit_conversion (TREE_TYPE (totype),
6001 imag, complain);
6002 expr = build2 (COMPLEX_EXPR, totype, real, imag);
6003 return fold_if_not_in_template (expr);
6005 expr = reshape_init (totype, expr, complain);
6006 return get_target_expr_sfinae (digest_init (totype, expr, complain),
6007 complain);
6009 default:
6010 break;
6013 expr = convert_like_real (next_conversion (convs), expr, fn, argnum,
6014 convs->kind == ck_ref_bind ? -1 : 1,
6015 convs->kind == ck_ref_bind ? issue_conversion_warnings : false,
6016 c_cast_p,
6017 complain);
6018 if (expr == error_mark_node)
6019 return error_mark_node;
6021 switch (convs->kind)
6023 case ck_rvalue:
6024 expr = decay_conversion (expr, complain);
6025 if (expr == error_mark_node)
6026 return error_mark_node;
6028 if (! MAYBE_CLASS_TYPE_P (totype))
6029 return expr;
6030 /* Else fall through. */
6031 case ck_base:
6032 if (convs->kind == ck_base && !convs->need_temporary_p)
6034 /* We are going to bind a reference directly to a base-class
6035 subobject of EXPR. */
6036 /* Build an expression for `*((base*) &expr)'. */
6037 expr = cp_build_addr_expr (expr, complain);
6038 expr = convert_to_base (expr, build_pointer_type (totype),
6039 !c_cast_p, /*nonnull=*/true, complain);
6040 expr = cp_build_indirect_ref (expr, RO_IMPLICIT_CONVERSION, complain);
6041 return expr;
6044 /* Copy-initialization where the cv-unqualified version of the source
6045 type is the same class as, or a derived class of, the class of the
6046 destination [is treated as direct-initialization]. [dcl.init] */
6047 flags = LOOKUP_NORMAL|LOOKUP_ONLYCONVERTING;
6048 if (convs->user_conv_p)
6049 /* This conversion is being done in the context of a user-defined
6050 conversion (i.e. the second step of copy-initialization), so
6051 don't allow any more. */
6052 flags |= LOOKUP_NO_CONVERSION;
6053 if (convs->rvaluedness_matches_p)
6054 flags |= LOOKUP_PREFER_RVALUE;
6055 if (TREE_CODE (expr) == TARGET_EXPR
6056 && TARGET_EXPR_LIST_INIT_P (expr))
6057 /* Copy-list-initialization doesn't actually involve a copy. */
6058 return expr;
6059 expr = build_temp (expr, totype, flags, &diag_kind, complain);
6060 if (diag_kind && fn && complain)
6061 emit_diagnostic (diag_kind, DECL_SOURCE_LOCATION (fn), 0,
6062 " initializing argument %P of %qD", argnum, fn);
6063 return build_cplus_new (totype, expr, complain);
6065 case ck_ref_bind:
6067 tree ref_type = totype;
6069 if (convs->bad_p && !next_conversion (convs)->bad_p)
6071 gcc_assert (TYPE_REF_IS_RVALUE (ref_type)
6072 && real_lvalue_p (expr));
6074 error_at (loc, "cannot bind %qT lvalue to %qT",
6075 TREE_TYPE (expr), totype);
6076 if (fn)
6077 error (" initializing argument %P of %q+D", argnum, fn);
6078 return error_mark_node;
6081 /* If necessary, create a temporary.
6083 VA_ARG_EXPR and CONSTRUCTOR expressions are special cases
6084 that need temporaries, even when their types are reference
6085 compatible with the type of reference being bound, so the
6086 upcoming call to cp_build_addr_expr doesn't fail. */
6087 if (convs->need_temporary_p
6088 || TREE_CODE (expr) == CONSTRUCTOR
6089 || TREE_CODE (expr) == VA_ARG_EXPR)
6091 /* Otherwise, a temporary of type "cv1 T1" is created and
6092 initialized from the initializer expression using the rules
6093 for a non-reference copy-initialization (8.5). */
6095 tree type = TREE_TYPE (ref_type);
6096 cp_lvalue_kind lvalue = real_lvalue_p (expr);
6098 gcc_assert (same_type_ignoring_top_level_qualifiers_p
6099 (type, next_conversion (convs)->type));
6100 if (!CP_TYPE_CONST_NON_VOLATILE_P (type)
6101 && !TYPE_REF_IS_RVALUE (ref_type))
6103 /* If the reference is volatile or non-const, we
6104 cannot create a temporary. */
6105 if (lvalue & clk_bitfield)
6106 error_at (loc, "cannot bind bitfield %qE to %qT",
6107 expr, ref_type);
6108 else if (lvalue & clk_packed)
6109 error_at (loc, "cannot bind packed field %qE to %qT",
6110 expr, ref_type);
6111 else
6112 error_at (loc, "cannot bind rvalue %qE to %qT",
6113 expr, ref_type);
6114 return error_mark_node;
6116 /* If the source is a packed field, and we must use a copy
6117 constructor, then building the target expr will require
6118 binding the field to the reference parameter to the
6119 copy constructor, and we'll end up with an infinite
6120 loop. If we can use a bitwise copy, then we'll be
6121 OK. */
6122 if ((lvalue & clk_packed)
6123 && CLASS_TYPE_P (type)
6124 && type_has_nontrivial_copy_init (type))
6126 error_at (loc, "cannot bind packed field %qE to %qT",
6127 expr, ref_type);
6128 return error_mark_node;
6130 if (lvalue & clk_bitfield)
6132 expr = convert_bitfield_to_declared_type (expr);
6133 expr = fold_convert (type, expr);
6135 expr = build_target_expr_with_type (expr, type, complain);
6138 /* Take the address of the thing to which we will bind the
6139 reference. */
6140 expr = cp_build_addr_expr (expr, complain);
6141 if (expr == error_mark_node)
6142 return error_mark_node;
6144 /* Convert it to a pointer to the type referred to by the
6145 reference. This will adjust the pointer if a derived to
6146 base conversion is being performed. */
6147 expr = cp_convert (build_pointer_type (TREE_TYPE (ref_type)),
6148 expr, complain);
6149 /* Convert the pointer to the desired reference type. */
6150 return build_nop (ref_type, expr);
6153 case ck_lvalue:
6154 return decay_conversion (expr, complain);
6156 case ck_qual:
6157 /* Warn about deprecated conversion if appropriate. */
6158 string_conv_p (totype, expr, 1);
6159 break;
6161 case ck_ptr:
6162 if (convs->base_p)
6163 expr = convert_to_base (expr, totype, !c_cast_p,
6164 /*nonnull=*/false, complain);
6165 return build_nop (totype, expr);
6167 case ck_pmem:
6168 return convert_ptrmem (totype, expr, /*allow_inverse_p=*/false,
6169 c_cast_p, complain);
6171 default:
6172 break;
6175 if (convs->check_narrowing)
6176 check_narrowing (totype, expr);
6178 if (issue_conversion_warnings && (complain & tf_warning))
6179 expr = convert_and_check (totype, expr);
6180 else
6181 expr = convert (totype, expr);
6183 return expr;
6186 /* ARG is being passed to a varargs function. Perform any conversions
6187 required. Return the converted value. */
6189 tree
6190 convert_arg_to_ellipsis (tree arg, tsubst_flags_t complain)
6192 tree arg_type;
6193 location_t loc = EXPR_LOC_OR_HERE (arg);
6195 /* [expr.call]
6197 The lvalue-to-rvalue, array-to-pointer, and function-to-pointer
6198 standard conversions are performed. */
6199 arg = decay_conversion (arg, complain);
6200 arg_type = TREE_TYPE (arg);
6201 /* [expr.call]
6203 If the argument has integral or enumeration type that is subject
6204 to the integral promotions (_conv.prom_), or a floating point
6205 type that is subject to the floating point promotion
6206 (_conv.fpprom_), the value of the argument is converted to the
6207 promoted type before the call. */
6208 if (TREE_CODE (arg_type) == REAL_TYPE
6209 && (TYPE_PRECISION (arg_type)
6210 < TYPE_PRECISION (double_type_node))
6211 && !DECIMAL_FLOAT_MODE_P (TYPE_MODE (arg_type)))
6213 if ((complain & tf_warning)
6214 && warn_double_promotion && !c_inhibit_evaluation_warnings)
6215 warning_at (loc, OPT_Wdouble_promotion,
6216 "implicit conversion from %qT to %qT when passing "
6217 "argument to function",
6218 arg_type, double_type_node);
6219 arg = convert_to_real (double_type_node, arg);
6221 else if (NULLPTR_TYPE_P (arg_type))
6222 arg = null_pointer_node;
6223 else if (INTEGRAL_OR_ENUMERATION_TYPE_P (arg_type))
6225 if (SCOPED_ENUM_P (arg_type) && !abi_version_at_least (6))
6227 if (complain & tf_warning)
6228 warning_at (loc, OPT_Wabi, "scoped enum %qT will not promote to an "
6229 "integral type in a future version of GCC", arg_type);
6230 arg = cp_convert (ENUM_UNDERLYING_TYPE (arg_type), arg, complain);
6232 arg = cp_perform_integral_promotions (arg, complain);
6235 arg = require_complete_type_sfinae (arg, complain);
6236 arg_type = TREE_TYPE (arg);
6238 if (arg != error_mark_node
6239 /* In a template (or ill-formed code), we can have an incomplete type
6240 even after require_complete_type_sfinae, in which case we don't know
6241 whether it has trivial copy or not. */
6242 && COMPLETE_TYPE_P (arg_type))
6244 /* Build up a real lvalue-to-rvalue conversion in case the
6245 copy constructor is trivial but not callable. */
6246 if (!cp_unevaluated_operand && CLASS_TYPE_P (arg_type))
6247 force_rvalue (arg, complain);
6249 /* [expr.call] 5.2.2/7:
6250 Passing a potentially-evaluated argument of class type (Clause 9)
6251 with a non-trivial copy constructor or a non-trivial destructor
6252 with no corresponding parameter is conditionally-supported, with
6253 implementation-defined semantics.
6255 We used to just warn here and do a bitwise copy, but now
6256 cp_expr_size will abort if we try to do that.
6258 If the call appears in the context of a sizeof expression,
6259 it is not potentially-evaluated. */
6260 if (cp_unevaluated_operand == 0
6261 && (type_has_nontrivial_copy_init (arg_type)
6262 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (arg_type)))
6264 if (complain & tf_error)
6265 error_at (loc, "cannot pass objects of non-trivially-copyable "
6266 "type %q#T through %<...%>", arg_type);
6267 else
6268 return error_mark_node;
6272 return arg;
6275 /* va_arg (EXPR, TYPE) is a builtin. Make sure it is not abused. */
6277 tree
6278 build_x_va_arg (source_location loc, tree expr, tree type)
6280 if (processing_template_decl)
6281 return build_min (VA_ARG_EXPR, type, expr);
6283 type = complete_type_or_else (type, NULL_TREE);
6285 if (expr == error_mark_node || !type)
6286 return error_mark_node;
6288 expr = mark_lvalue_use (expr);
6290 if (type_has_nontrivial_copy_init (type)
6291 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
6292 || TREE_CODE (type) == REFERENCE_TYPE)
6294 /* Remove reference types so we don't ICE later on. */
6295 tree type1 = non_reference (type);
6296 /* conditionally-supported behavior [expr.call] 5.2.2/7. */
6297 error ("cannot receive objects of non-trivially-copyable type %q#T "
6298 "through %<...%>; ", type);
6299 expr = convert (build_pointer_type (type1), null_node);
6300 expr = cp_build_indirect_ref (expr, RO_NULL, tf_warning_or_error);
6301 return expr;
6304 return build_va_arg (loc, expr, type);
6307 /* TYPE has been given to va_arg. Apply the default conversions which
6308 would have happened when passed via ellipsis. Return the promoted
6309 type, or the passed type if there is no change. */
6311 tree
6312 cxx_type_promotes_to (tree type)
6314 tree promote;
6316 /* Perform the array-to-pointer and function-to-pointer
6317 conversions. */
6318 type = type_decays_to (type);
6320 promote = type_promotes_to (type);
6321 if (same_type_p (type, promote))
6322 promote = type;
6324 return promote;
6327 /* ARG is a default argument expression being passed to a parameter of
6328 the indicated TYPE, which is a parameter to FN. PARMNUM is the
6329 zero-based argument number. Do any required conversions. Return
6330 the converted value. */
6332 static GTY(()) vec<tree, va_gc> *default_arg_context;
6333 void
6334 push_defarg_context (tree fn)
6335 { vec_safe_push (default_arg_context, fn); }
6337 void
6338 pop_defarg_context (void)
6339 { default_arg_context->pop (); }
6341 tree
6342 convert_default_arg (tree type, tree arg, tree fn, int parmnum,
6343 tsubst_flags_t complain)
6345 int i;
6346 tree t;
6348 /* See through clones. */
6349 fn = DECL_ORIGIN (fn);
6351 /* Detect recursion. */
6352 FOR_EACH_VEC_SAFE_ELT (default_arg_context, i, t)
6353 if (t == fn)
6355 if (complain & tf_error)
6356 error ("recursive evaluation of default argument for %q#D", fn);
6357 return error_mark_node;
6360 /* If the ARG is an unparsed default argument expression, the
6361 conversion cannot be performed. */
6362 if (TREE_CODE (arg) == DEFAULT_ARG)
6364 if (complain & tf_error)
6365 error ("call to %qD uses the default argument for parameter %P, which "
6366 "is not yet defined", fn, parmnum);
6367 return error_mark_node;
6370 push_defarg_context (fn);
6372 if (fn && DECL_TEMPLATE_INFO (fn))
6373 arg = tsubst_default_argument (fn, type, arg);
6375 /* Due to:
6377 [dcl.fct.default]
6379 The names in the expression are bound, and the semantic
6380 constraints are checked, at the point where the default
6381 expressions appears.
6383 we must not perform access checks here. */
6384 push_deferring_access_checks (dk_no_check);
6385 /* We must make a copy of ARG, in case subsequent processing
6386 alters any part of it. */
6387 arg = break_out_target_exprs (arg);
6388 if (TREE_CODE (arg) == CONSTRUCTOR)
6390 arg = digest_init (type, arg, complain);
6391 arg = convert_for_initialization (0, type, arg, LOOKUP_IMPLICIT,
6392 ICR_DEFAULT_ARGUMENT, fn, parmnum,
6393 complain);
6395 else
6397 arg = convert_for_initialization (0, type, arg, LOOKUP_IMPLICIT,
6398 ICR_DEFAULT_ARGUMENT, fn, parmnum,
6399 complain);
6400 arg = convert_for_arg_passing (type, arg, complain);
6402 pop_deferring_access_checks();
6404 pop_defarg_context ();
6406 return arg;
6409 /* Returns the type which will really be used for passing an argument of
6410 type TYPE. */
6412 tree
6413 type_passed_as (tree type)
6415 /* Pass classes with copy ctors by invisible reference. */
6416 if (TREE_ADDRESSABLE (type))
6418 type = build_reference_type (type);
6419 /* There are no other pointers to this temporary. */
6420 type = cp_build_qualified_type (type, TYPE_QUAL_RESTRICT);
6422 else if (targetm.calls.promote_prototypes (type)
6423 && INTEGRAL_TYPE_P (type)
6424 && COMPLETE_TYPE_P (type)
6425 && INT_CST_LT_UNSIGNED (TYPE_SIZE (type),
6426 TYPE_SIZE (integer_type_node)))
6427 type = integer_type_node;
6429 return type;
6432 /* Actually perform the appropriate conversion. */
6434 tree
6435 convert_for_arg_passing (tree type, tree val, tsubst_flags_t complain)
6437 tree bitfield_type;
6439 /* If VAL is a bitfield, then -- since it has already been converted
6440 to TYPE -- it cannot have a precision greater than TYPE.
6442 If it has a smaller precision, we must widen it here. For
6443 example, passing "int f:3;" to a function expecting an "int" will
6444 not result in any conversion before this point.
6446 If the precision is the same we must not risk widening. For
6447 example, the COMPONENT_REF for a 32-bit "long long" bitfield will
6448 often have type "int", even though the C++ type for the field is
6449 "long long". If the value is being passed to a function
6450 expecting an "int", then no conversions will be required. But,
6451 if we call convert_bitfield_to_declared_type, the bitfield will
6452 be converted to "long long". */
6453 bitfield_type = is_bitfield_expr_with_lowered_type (val);
6454 if (bitfield_type
6455 && TYPE_PRECISION (TREE_TYPE (val)) < TYPE_PRECISION (type))
6456 val = convert_to_integer (TYPE_MAIN_VARIANT (bitfield_type), val);
6458 if (val == error_mark_node)
6460 /* Pass classes with copy ctors by invisible reference. */
6461 else if (TREE_ADDRESSABLE (type))
6462 val = build1 (ADDR_EXPR, build_reference_type (type), val);
6463 else if (targetm.calls.promote_prototypes (type)
6464 && INTEGRAL_TYPE_P (type)
6465 && COMPLETE_TYPE_P (type)
6466 && INT_CST_LT_UNSIGNED (TYPE_SIZE (type),
6467 TYPE_SIZE (integer_type_node)))
6468 val = cp_perform_integral_promotions (val, complain);
6469 if ((complain & tf_warning)
6470 && warn_suggest_attribute_format)
6472 tree rhstype = TREE_TYPE (val);
6473 const enum tree_code coder = TREE_CODE (rhstype);
6474 const enum tree_code codel = TREE_CODE (type);
6475 if ((codel == POINTER_TYPE || codel == REFERENCE_TYPE)
6476 && coder == codel
6477 && check_missing_format_attribute (type, rhstype))
6478 warning (OPT_Wsuggest_attribute_format,
6479 "argument of function call might be a candidate for a format attribute");
6481 return val;
6484 /* Returns true iff FN is a function with magic varargs, i.e. ones for
6485 which no conversions at all should be done. This is true for some
6486 builtins which don't act like normal functions. */
6488 static bool
6489 magic_varargs_p (tree fn)
6491 if (DECL_BUILT_IN (fn))
6492 switch (DECL_FUNCTION_CODE (fn))
6494 case BUILT_IN_CLASSIFY_TYPE:
6495 case BUILT_IN_CONSTANT_P:
6496 case BUILT_IN_NEXT_ARG:
6497 case BUILT_IN_VA_START:
6498 return true;
6500 default:;
6501 return lookup_attribute ("type generic",
6502 TYPE_ATTRIBUTES (TREE_TYPE (fn))) != 0;
6505 return false;
6508 /* Returns the decl of the dispatcher function if FN is a function version. */
6510 tree
6511 get_function_version_dispatcher (tree fn)
6513 tree dispatcher_decl = NULL;
6515 gcc_assert (TREE_CODE (fn) == FUNCTION_DECL
6516 && DECL_FUNCTION_VERSIONED (fn));
6518 gcc_assert (targetm.get_function_versions_dispatcher);
6519 dispatcher_decl = targetm.get_function_versions_dispatcher (fn);
6521 if (dispatcher_decl == NULL)
6523 error_at (input_location, "use of multiversioned function "
6524 "without a default");
6525 return NULL;
6528 retrofit_lang_decl (dispatcher_decl);
6529 gcc_assert (dispatcher_decl != NULL);
6530 return dispatcher_decl;
6533 /* fn is a function version dispatcher that is marked used. Mark all the
6534 semantically identical function versions it will dispatch as used. */
6536 void
6537 mark_versions_used (tree fn)
6539 struct cgraph_node *node;
6540 struct cgraph_function_version_info *node_v;
6541 struct cgraph_function_version_info *it_v;
6543 gcc_assert (TREE_CODE (fn) == FUNCTION_DECL);
6545 node = cgraph_get_node (fn);
6546 if (node == NULL)
6547 return;
6549 gcc_assert (node->dispatcher_function);
6551 node_v = get_cgraph_node_version (node);
6552 if (node_v == NULL)
6553 return;
6555 /* All semantically identical versions are chained. Traverse and mark each
6556 one of them as used. */
6557 it_v = node_v->next;
6558 while (it_v != NULL)
6560 mark_used (it_v->this_node->symbol.decl);
6561 it_v = it_v->next;
6565 /* Subroutine of the various build_*_call functions. Overload resolution
6566 has chosen a winning candidate CAND; build up a CALL_EXPR accordingly.
6567 ARGS is a TREE_LIST of the unconverted arguments to the call. FLAGS is a
6568 bitmask of various LOOKUP_* flags which apply to the call itself. */
6570 static tree
6571 build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain)
6573 tree fn = cand->fn;
6574 const vec<tree, va_gc> *args = cand->args;
6575 tree first_arg = cand->first_arg;
6576 conversion **convs = cand->convs;
6577 conversion *conv;
6578 tree parm = TYPE_ARG_TYPES (TREE_TYPE (fn));
6579 int parmlen;
6580 tree val;
6581 int i = 0;
6582 int j = 0;
6583 unsigned int arg_index = 0;
6584 int is_method = 0;
6585 int nargs;
6586 tree *argarray;
6587 bool already_used = false;
6589 /* In a template, there is no need to perform all of the work that
6590 is normally done. We are only interested in the type of the call
6591 expression, i.e., the return type of the function. Any semantic
6592 errors will be deferred until the template is instantiated. */
6593 if (processing_template_decl)
6595 tree expr, addr;
6596 tree return_type;
6597 const tree *argarray;
6598 unsigned int nargs;
6600 return_type = TREE_TYPE (TREE_TYPE (fn));
6601 nargs = vec_safe_length (args);
6602 if (first_arg == NULL_TREE)
6603 argarray = args->address ();
6604 else
6606 tree *alcarray;
6607 unsigned int ix;
6608 tree arg;
6610 ++nargs;
6611 alcarray = XALLOCAVEC (tree, nargs);
6612 alcarray[0] = first_arg;
6613 FOR_EACH_VEC_SAFE_ELT (args, ix, arg)
6614 alcarray[ix + 1] = arg;
6615 argarray = alcarray;
6618 addr = build_addr_func (fn, complain);
6619 if (addr == error_mark_node)
6620 return error_mark_node;
6621 expr = build_call_array_loc (input_location, return_type,
6622 addr, nargs, argarray);
6623 if (TREE_THIS_VOLATILE (fn) && cfun)
6624 current_function_returns_abnormally = 1;
6625 return convert_from_reference (expr);
6628 /* Give any warnings we noticed during overload resolution. */
6629 if (cand->warnings && (complain & tf_warning))
6631 struct candidate_warning *w;
6632 for (w = cand->warnings; w; w = w->next)
6633 joust (cand, w->loser, 1, complain);
6636 /* Make =delete work with SFINAE. */
6637 if (DECL_DELETED_FN (fn) && !(complain & tf_error))
6638 return error_mark_node;
6640 if (DECL_FUNCTION_MEMBER_P (fn))
6642 tree access_fn;
6643 /* If FN is a template function, two cases must be considered.
6644 For example:
6646 struct A {
6647 protected:
6648 template <class T> void f();
6650 template <class T> struct B {
6651 protected:
6652 void g();
6654 struct C : A, B<int> {
6655 using A::f; // #1
6656 using B<int>::g; // #2
6659 In case #1 where `A::f' is a member template, DECL_ACCESS is
6660 recorded in the primary template but not in its specialization.
6661 We check access of FN using its primary template.
6663 In case #2, where `B<int>::g' has a DECL_TEMPLATE_INFO simply
6664 because it is a member of class template B, DECL_ACCESS is
6665 recorded in the specialization `B<int>::g'. We cannot use its
6666 primary template because `B<T>::g' and `B<int>::g' may have
6667 different access. */
6668 if (DECL_TEMPLATE_INFO (fn)
6669 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (fn)))
6670 access_fn = DECL_TI_TEMPLATE (fn);
6671 else
6672 access_fn = fn;
6673 if (!perform_or_defer_access_check (cand->access_path, access_fn,
6674 fn, complain))
6675 return error_mark_node;
6678 /* If we're checking for implicit delete, don't bother with argument
6679 conversions. */
6680 if (flags & LOOKUP_SPECULATIVE)
6682 if (DECL_DELETED_FN (fn))
6684 if (complain & tf_error)
6685 mark_used (fn);
6686 return error_mark_node;
6688 if (cand->viable == 1)
6689 return fn;
6690 else if (!(complain & tf_error))
6691 /* Reject bad conversions now. */
6692 return error_mark_node;
6693 /* else continue to get conversion error. */
6696 /* N3276 magic doesn't apply to nested calls. */
6697 int decltype_flag = (complain & tf_decltype);
6698 complain &= ~tf_decltype;
6700 /* Find maximum size of vector to hold converted arguments. */
6701 parmlen = list_length (parm);
6702 nargs = vec_safe_length (args) + (first_arg != NULL_TREE ? 1 : 0);
6703 if (parmlen > nargs)
6704 nargs = parmlen;
6705 argarray = XALLOCAVEC (tree, nargs);
6707 /* The implicit parameters to a constructor are not considered by overload
6708 resolution, and must be of the proper type. */
6709 if (DECL_CONSTRUCTOR_P (fn))
6711 if (first_arg != NULL_TREE)
6713 argarray[j++] = first_arg;
6714 first_arg = NULL_TREE;
6716 else
6718 argarray[j++] = (*args)[arg_index];
6719 ++arg_index;
6721 parm = TREE_CHAIN (parm);
6722 /* We should never try to call the abstract constructor. */
6723 gcc_assert (!DECL_HAS_IN_CHARGE_PARM_P (fn));
6725 if (DECL_HAS_VTT_PARM_P (fn))
6727 argarray[j++] = (*args)[arg_index];
6728 ++arg_index;
6729 parm = TREE_CHAIN (parm);
6732 /* Bypass access control for 'this' parameter. */
6733 else if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
6735 tree parmtype = TREE_VALUE (parm);
6736 tree arg = (first_arg != NULL_TREE
6737 ? first_arg
6738 : (*args)[arg_index]);
6739 tree argtype = TREE_TYPE (arg);
6740 tree converted_arg;
6741 tree base_binfo;
6743 if (convs[i]->bad_p)
6745 if (complain & tf_error)
6746 permerror (input_location, "passing %qT as %<this%> argument of %q#D discards qualifiers",
6747 TREE_TYPE (argtype), fn);
6748 else
6749 return error_mark_node;
6752 /* See if the function member or the whole class type is declared
6753 final and the call can be devirtualized. */
6754 if (DECL_FINAL_P (fn)
6755 || CLASSTYPE_FINAL (TYPE_METHOD_BASETYPE (TREE_TYPE (fn))))
6756 flags |= LOOKUP_NONVIRTUAL;
6758 /* [class.mfct.nonstatic]: If a nonstatic member function of a class
6759 X is called for an object that is not of type X, or of a type
6760 derived from X, the behavior is undefined.
6762 So we can assume that anything passed as 'this' is non-null, and
6763 optimize accordingly. */
6764 gcc_assert (TREE_CODE (parmtype) == POINTER_TYPE);
6765 /* Convert to the base in which the function was declared. */
6766 gcc_assert (cand->conversion_path != NULL_TREE);
6767 converted_arg = build_base_path (PLUS_EXPR,
6768 arg,
6769 cand->conversion_path,
6770 1, complain);
6771 /* Check that the base class is accessible. */
6772 if (!accessible_base_p (TREE_TYPE (argtype),
6773 BINFO_TYPE (cand->conversion_path), true))
6774 error ("%qT is not an accessible base of %qT",
6775 BINFO_TYPE (cand->conversion_path),
6776 TREE_TYPE (argtype));
6777 /* If fn was found by a using declaration, the conversion path
6778 will be to the derived class, not the base declaring fn. We
6779 must convert from derived to base. */
6780 base_binfo = lookup_base (TREE_TYPE (TREE_TYPE (converted_arg)),
6781 TREE_TYPE (parmtype), ba_unique,
6782 NULL, complain);
6783 converted_arg = build_base_path (PLUS_EXPR, converted_arg,
6784 base_binfo, 1, complain);
6786 argarray[j++] = converted_arg;
6787 parm = TREE_CHAIN (parm);
6788 if (first_arg != NULL_TREE)
6789 first_arg = NULL_TREE;
6790 else
6791 ++arg_index;
6792 ++i;
6793 is_method = 1;
6796 gcc_assert (first_arg == NULL_TREE);
6797 for (; arg_index < vec_safe_length (args) && parm;
6798 parm = TREE_CHAIN (parm), ++arg_index, ++i)
6800 tree type = TREE_VALUE (parm);
6801 tree arg = (*args)[arg_index];
6802 bool conversion_warning = true;
6804 conv = convs[i];
6806 /* If the argument is NULL and used to (implicitly) instantiate a
6807 template function (and bind one of the template arguments to
6808 the type of 'long int'), we don't want to warn about passing NULL
6809 to non-pointer argument.
6810 For example, if we have this template function:
6812 template<typename T> void func(T x) {}
6814 we want to warn (when -Wconversion is enabled) in this case:
6816 void foo() {
6817 func<int>(NULL);
6820 but not in this case:
6822 void foo() {
6823 func(NULL);
6826 if (arg == null_node
6827 && DECL_TEMPLATE_INFO (fn)
6828 && cand->template_decl
6829 && !(flags & LOOKUP_EXPLICIT_TMPL_ARGS))
6830 conversion_warning = false;
6832 /* Warn about initializer_list deduction that isn't currently in the
6833 working draft. */
6834 if (cxx_dialect > cxx98
6835 && flag_deduce_init_list
6836 && cand->template_decl
6837 && is_std_init_list (non_reference (type))
6838 && BRACE_ENCLOSED_INITIALIZER_P (arg))
6840 tree tmpl = TI_TEMPLATE (cand->template_decl);
6841 tree realparm = chain_index (j, DECL_ARGUMENTS (cand->fn));
6842 tree patparm = get_pattern_parm (realparm, tmpl);
6843 tree pattype = TREE_TYPE (patparm);
6844 if (PACK_EXPANSION_P (pattype))
6845 pattype = PACK_EXPANSION_PATTERN (pattype);
6846 pattype = non_reference (pattype);
6848 if (TREE_CODE (pattype) == TEMPLATE_TYPE_PARM
6849 && (cand->explicit_targs == NULL_TREE
6850 || (TREE_VEC_LENGTH (cand->explicit_targs)
6851 <= TEMPLATE_TYPE_IDX (pattype))))
6853 pedwarn (input_location, 0, "deducing %qT as %qT",
6854 non_reference (TREE_TYPE (patparm)),
6855 non_reference (type));
6856 pedwarn (input_location, 0, " in call to %q+D", cand->fn);
6857 pedwarn (input_location, 0,
6858 " (you can disable this with -fno-deduce-init-list)");
6862 val = convert_like_with_context (conv, arg, fn, i-is_method,
6863 conversion_warning
6864 ? complain
6865 : complain & (~tf_warning));
6867 val = convert_for_arg_passing (type, val, complain);
6868 if (val == error_mark_node)
6869 return error_mark_node;
6870 else
6871 argarray[j++] = val;
6874 /* Default arguments */
6875 for (; parm && parm != void_list_node; parm = TREE_CHAIN (parm), i++)
6877 if (TREE_VALUE (parm) == error_mark_node)
6878 return error_mark_node;
6879 argarray[j++] = convert_default_arg (TREE_VALUE (parm),
6880 TREE_PURPOSE (parm),
6881 fn, i - is_method,
6882 complain);
6885 /* Ellipsis */
6886 for (; arg_index < vec_safe_length (args); ++arg_index)
6888 tree a = (*args)[arg_index];
6889 if (magic_varargs_p (fn))
6890 /* Do no conversions for magic varargs. */
6891 a = mark_type_use (a);
6892 else
6893 a = convert_arg_to_ellipsis (a, complain);
6894 argarray[j++] = a;
6897 gcc_assert (j <= nargs);
6898 nargs = j;
6900 check_function_arguments (TREE_TYPE (fn), nargs, argarray);
6902 /* Avoid actually calling copy constructors and copy assignment operators,
6903 if possible. */
6905 if (! flag_elide_constructors)
6906 /* Do things the hard way. */;
6907 else if (cand->num_convs == 1
6908 && (DECL_COPY_CONSTRUCTOR_P (fn)
6909 || DECL_MOVE_CONSTRUCTOR_P (fn)))
6911 tree targ;
6912 tree arg = argarray[num_artificial_parms_for (fn)];
6913 tree fa;
6914 bool trivial = trivial_fn_p (fn);
6916 /* Pull out the real argument, disregarding const-correctness. */
6917 targ = arg;
6918 while (CONVERT_EXPR_P (targ)
6919 || TREE_CODE (targ) == NON_LVALUE_EXPR)
6920 targ = TREE_OPERAND (targ, 0);
6921 if (TREE_CODE (targ) == ADDR_EXPR)
6923 targ = TREE_OPERAND (targ, 0);
6924 if (!same_type_ignoring_top_level_qualifiers_p
6925 (TREE_TYPE (TREE_TYPE (arg)), TREE_TYPE (targ)))
6926 targ = NULL_TREE;
6928 else
6929 targ = NULL_TREE;
6931 if (targ)
6932 arg = targ;
6933 else
6934 arg = cp_build_indirect_ref (arg, RO_NULL, complain);
6936 /* [class.copy]: the copy constructor is implicitly defined even if
6937 the implementation elided its use. */
6938 if (!trivial || DECL_DELETED_FN (fn))
6940 mark_used (fn);
6941 already_used = true;
6944 /* If we're creating a temp and we already have one, don't create a
6945 new one. If we're not creating a temp but we get one, use
6946 INIT_EXPR to collapse the temp into our target. Otherwise, if the
6947 ctor is trivial, do a bitwise copy with a simple TARGET_EXPR for a
6948 temp or an INIT_EXPR otherwise. */
6949 fa = argarray[0];
6950 if (integer_zerop (fa))
6952 if (TREE_CODE (arg) == TARGET_EXPR)
6953 return arg;
6954 else if (trivial)
6955 return force_target_expr (DECL_CONTEXT (fn), arg, complain);
6957 else if (TREE_CODE (arg) == TARGET_EXPR || trivial)
6959 tree to = stabilize_reference (cp_build_indirect_ref (fa, RO_NULL,
6960 complain));
6962 val = build2 (INIT_EXPR, DECL_CONTEXT (fn), to, arg);
6963 return val;
6966 else if (DECL_OVERLOADED_OPERATOR_P (fn) == NOP_EXPR
6967 && trivial_fn_p (fn)
6968 && !DECL_DELETED_FN (fn))
6970 tree to = stabilize_reference
6971 (cp_build_indirect_ref (argarray[0], RO_NULL, complain));
6972 tree type = TREE_TYPE (to);
6973 tree as_base = CLASSTYPE_AS_BASE (type);
6974 tree arg = argarray[1];
6976 if (is_really_empty_class (type))
6978 /* Avoid copying empty classes. */
6979 val = build2 (COMPOUND_EXPR, void_type_node, to, arg);
6980 TREE_NO_WARNING (val) = 1;
6981 val = build2 (COMPOUND_EXPR, type, val, to);
6982 TREE_NO_WARNING (val) = 1;
6984 else if (tree_int_cst_equal (TYPE_SIZE (type), TYPE_SIZE (as_base)))
6986 arg = cp_build_indirect_ref (arg, RO_NULL, complain);
6987 val = build2 (MODIFY_EXPR, TREE_TYPE (to), to, arg);
6989 else
6991 /* We must only copy the non-tail padding parts. */
6992 tree arg0, arg2, t;
6993 tree array_type, alias_set;
6995 arg2 = TYPE_SIZE_UNIT (as_base);
6996 arg0 = cp_build_addr_expr (to, complain);
6998 array_type = build_array_type (char_type_node,
6999 build_index_type
7000 (size_binop (MINUS_EXPR,
7001 arg2, size_int (1))));
7002 alias_set = build_int_cst (build_pointer_type (type), 0);
7003 t = build2 (MODIFY_EXPR, void_type_node,
7004 build2 (MEM_REF, array_type, arg0, alias_set),
7005 build2 (MEM_REF, array_type, arg, alias_set));
7006 val = build2 (COMPOUND_EXPR, TREE_TYPE (to), t, to);
7007 TREE_NO_WARNING (val) = 1;
7010 return val;
7012 else if (DECL_DESTRUCTOR_P (fn)
7013 && trivial_fn_p (fn)
7014 && !DECL_DELETED_FN (fn))
7015 return fold_convert (void_type_node, argarray[0]);
7016 /* FIXME handle trivial default constructor, too. */
7018 /* For calls to a multi-versioned function, overload resolution
7019 returns the function with the highest target priority, that is,
7020 the version that will checked for dispatching first. If this
7021 version is inlinable, a direct call to this version can be made
7022 otherwise the call should go through the dispatcher. */
7024 if (DECL_FUNCTION_VERSIONED (fn)
7025 && !targetm.target_option.can_inline_p (current_function_decl, fn))
7027 fn = get_function_version_dispatcher (fn);
7028 if (fn == NULL)
7029 return NULL;
7030 if (!already_used)
7031 mark_versions_used (fn);
7034 if (!already_used)
7035 mark_used (fn);
7037 if (DECL_VINDEX (fn) && (flags & LOOKUP_NONVIRTUAL) == 0
7038 /* Don't mess with virtual lookup in fold_non_dependent_expr; virtual
7039 functions can't be constexpr. */
7040 && !in_template_function ())
7042 tree t;
7043 tree binfo = lookup_base (TREE_TYPE (TREE_TYPE (argarray[0])),
7044 DECL_CONTEXT (fn),
7045 ba_any, NULL, complain);
7046 gcc_assert (binfo && binfo != error_mark_node);
7048 /* Warn about deprecated virtual functions now, since we're about
7049 to throw away the decl. */
7050 if (TREE_DEPRECATED (fn))
7051 warn_deprecated_use (fn, NULL_TREE);
7053 argarray[0] = build_base_path (PLUS_EXPR, argarray[0], binfo, 1,
7054 complain);
7055 if (TREE_SIDE_EFFECTS (argarray[0]))
7056 argarray[0] = save_expr (argarray[0]);
7057 t = build_pointer_type (TREE_TYPE (fn));
7058 if (DECL_CONTEXT (fn) && TYPE_JAVA_INTERFACE (DECL_CONTEXT (fn)))
7059 fn = build_java_interface_fn_ref (fn, argarray[0]);
7060 else
7061 fn = build_vfn_ref (argarray[0], DECL_VINDEX (fn));
7062 TREE_TYPE (fn) = t;
7064 else
7066 fn = build_addr_func (fn, complain);
7067 if (fn == error_mark_node)
7068 return error_mark_node;
7071 return build_cxx_call (fn, nargs, argarray, complain|decltype_flag);
7074 /* Build and return a call to FN, using NARGS arguments in ARGARRAY.
7075 This function performs no overload resolution, conversion, or other
7076 high-level operations. */
7078 tree
7079 build_cxx_call (tree fn, int nargs, tree *argarray,
7080 tsubst_flags_t complain)
7082 tree fndecl;
7083 int optimize_sav;
7085 /* Remember roughly where this call is. */
7086 location_t loc = EXPR_LOC_OR_HERE (fn);
7087 fn = build_call_a (fn, nargs, argarray);
7088 SET_EXPR_LOCATION (fn, loc);
7090 fndecl = get_callee_fndecl (fn);
7092 /* Check that arguments to builtin functions match the expectations. */
7093 if (fndecl
7094 && DECL_BUILT_IN (fndecl)
7095 && DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_NORMAL
7096 && !check_builtin_function_arguments (fndecl, nargs, argarray))
7097 return error_mark_node;
7099 /* Some built-in function calls will be evaluated at compile-time in
7100 fold (). Set optimize to 1 when folding __builtin_constant_p inside
7101 a constexpr function so that fold_builtin_1 doesn't fold it to 0. */
7102 optimize_sav = optimize;
7103 if (!optimize && fndecl && DECL_IS_BUILTIN_CONSTANT_P (fndecl)
7104 && current_function_decl
7105 && DECL_DECLARED_CONSTEXPR_P (current_function_decl))
7106 optimize = 1;
7107 fn = fold_if_not_in_template (fn);
7108 optimize = optimize_sav;
7110 if (VOID_TYPE_P (TREE_TYPE (fn)))
7111 return fn;
7113 /* 5.2.2/11: If a function call is a prvalue of object type: if the
7114 function call is either the operand of a decltype-specifier or the
7115 right operand of a comma operator that is the operand of a
7116 decltype-specifier, a temporary object is not introduced for the
7117 prvalue. The type of the prvalue may be incomplete. */
7118 if (!(complain & tf_decltype))
7120 fn = require_complete_type_sfinae (fn, complain);
7121 if (fn == error_mark_node)
7122 return error_mark_node;
7124 if (MAYBE_CLASS_TYPE_P (TREE_TYPE (fn)))
7125 fn = build_cplus_new (TREE_TYPE (fn), fn, complain);
7127 return convert_from_reference (fn);
7130 static GTY(()) tree java_iface_lookup_fn;
7132 /* Make an expression which yields the address of the Java interface
7133 method FN. This is achieved by generating a call to libjava's
7134 _Jv_LookupInterfaceMethodIdx(). */
7136 static tree
7137 build_java_interface_fn_ref (tree fn, tree instance)
7139 tree lookup_fn, method, idx;
7140 tree klass_ref, iface, iface_ref;
7141 int i;
7143 if (!java_iface_lookup_fn)
7145 tree ftype = build_function_type_list (ptr_type_node,
7146 ptr_type_node, ptr_type_node,
7147 java_int_type_node, NULL_TREE);
7148 java_iface_lookup_fn
7149 = add_builtin_function ("_Jv_LookupInterfaceMethodIdx", ftype,
7150 0, NOT_BUILT_IN, NULL, NULL_TREE);
7153 /* Look up the pointer to the runtime java.lang.Class object for `instance'.
7154 This is the first entry in the vtable. */
7155 klass_ref = build_vtbl_ref (cp_build_indirect_ref (instance, RO_NULL,
7156 tf_warning_or_error),
7157 integer_zero_node);
7159 /* Get the java.lang.Class pointer for the interface being called. */
7160 iface = DECL_CONTEXT (fn);
7161 iface_ref = lookup_field (iface, get_identifier ("class$"), 0, false);
7162 if (!iface_ref || TREE_CODE (iface_ref) != VAR_DECL
7163 || DECL_CONTEXT (iface_ref) != iface)
7165 error ("could not find class$ field in java interface type %qT",
7166 iface);
7167 return error_mark_node;
7169 iface_ref = build_address (iface_ref);
7170 iface_ref = convert (build_pointer_type (iface), iface_ref);
7172 /* Determine the itable index of FN. */
7173 i = 1;
7174 for (method = TYPE_METHODS (iface); method; method = DECL_CHAIN (method))
7176 if (!DECL_VIRTUAL_P (method))
7177 continue;
7178 if (fn == method)
7179 break;
7180 i++;
7182 idx = build_int_cst (NULL_TREE, i);
7184 lookup_fn = build1 (ADDR_EXPR,
7185 build_pointer_type (TREE_TYPE (java_iface_lookup_fn)),
7186 java_iface_lookup_fn);
7187 return build_call_nary (ptr_type_node, lookup_fn,
7188 3, klass_ref, iface_ref, idx);
7191 /* Returns the value to use for the in-charge parameter when making a
7192 call to a function with the indicated NAME.
7194 FIXME:Can't we find a neater way to do this mapping? */
7196 tree
7197 in_charge_arg_for_name (tree name)
7199 if (name == base_ctor_identifier
7200 || name == base_dtor_identifier)
7201 return integer_zero_node;
7202 else if (name == complete_ctor_identifier)
7203 return integer_one_node;
7204 else if (name == complete_dtor_identifier)
7205 return integer_two_node;
7206 else if (name == deleting_dtor_identifier)
7207 return integer_three_node;
7209 /* This function should only be called with one of the names listed
7210 above. */
7211 gcc_unreachable ();
7212 return NULL_TREE;
7215 /* Build a call to a constructor, destructor, or an assignment
7216 operator for INSTANCE, an expression with class type. NAME
7217 indicates the special member function to call; *ARGS are the
7218 arguments. ARGS may be NULL. This may change ARGS. BINFO
7219 indicates the base of INSTANCE that is to be passed as the `this'
7220 parameter to the member function called.
7222 FLAGS are the LOOKUP_* flags to use when processing the call.
7224 If NAME indicates a complete object constructor, INSTANCE may be
7225 NULL_TREE. In this case, the caller will call build_cplus_new to
7226 store the newly constructed object into a VAR_DECL. */
7228 tree
7229 build_special_member_call (tree instance, tree name, vec<tree, va_gc> **args,
7230 tree binfo, int flags, tsubst_flags_t complain)
7232 tree fns;
7233 /* The type of the subobject to be constructed or destroyed. */
7234 tree class_type;
7235 vec<tree, va_gc> *allocated = NULL;
7236 tree ret;
7238 gcc_assert (name == complete_ctor_identifier
7239 || name == base_ctor_identifier
7240 || name == complete_dtor_identifier
7241 || name == base_dtor_identifier
7242 || name == deleting_dtor_identifier
7243 || name == ansi_assopname (NOP_EXPR));
7244 if (TYPE_P (binfo))
7246 /* Resolve the name. */
7247 if (!complete_type_or_maybe_complain (binfo, NULL_TREE, complain))
7248 return error_mark_node;
7250 binfo = TYPE_BINFO (binfo);
7253 gcc_assert (binfo != NULL_TREE);
7255 class_type = BINFO_TYPE (binfo);
7257 /* Handle the special case where INSTANCE is NULL_TREE. */
7258 if (name == complete_ctor_identifier && !instance)
7260 instance = build_int_cst (build_pointer_type (class_type), 0);
7261 instance = build1 (INDIRECT_REF, class_type, instance);
7263 else
7265 if (name == complete_dtor_identifier
7266 || name == base_dtor_identifier
7267 || name == deleting_dtor_identifier)
7268 gcc_assert (args == NULL || vec_safe_is_empty (*args));
7270 /* Convert to the base class, if necessary. */
7271 if (!same_type_ignoring_top_level_qualifiers_p
7272 (TREE_TYPE (instance), BINFO_TYPE (binfo)))
7274 if (name != ansi_assopname (NOP_EXPR))
7275 /* For constructors and destructors, either the base is
7276 non-virtual, or it is virtual but we are doing the
7277 conversion from a constructor or destructor for the
7278 complete object. In either case, we can convert
7279 statically. */
7280 instance = convert_to_base_statically (instance, binfo);
7281 else
7282 /* However, for assignment operators, we must convert
7283 dynamically if the base is virtual. */
7284 instance = build_base_path (PLUS_EXPR, instance,
7285 binfo, /*nonnull=*/1, complain);
7289 gcc_assert (instance != NULL_TREE);
7291 fns = lookup_fnfields (binfo, name, 1);
7293 /* When making a call to a constructor or destructor for a subobject
7294 that uses virtual base classes, pass down a pointer to a VTT for
7295 the subobject. */
7296 if ((name == base_ctor_identifier
7297 || name == base_dtor_identifier)
7298 && CLASSTYPE_VBASECLASSES (class_type))
7300 tree vtt;
7301 tree sub_vtt;
7303 /* If the current function is a complete object constructor
7304 or destructor, then we fetch the VTT directly.
7305 Otherwise, we look it up using the VTT we were given. */
7306 vtt = DECL_CHAIN (CLASSTYPE_VTABLES (current_class_type));
7307 vtt = decay_conversion (vtt, complain);
7308 if (vtt == error_mark_node)
7309 return error_mark_node;
7310 vtt = build3 (COND_EXPR, TREE_TYPE (vtt),
7311 build2 (EQ_EXPR, boolean_type_node,
7312 current_in_charge_parm, integer_zero_node),
7313 current_vtt_parm,
7314 vtt);
7315 if (BINFO_SUBVTT_INDEX (binfo))
7316 sub_vtt = fold_build_pointer_plus (vtt, BINFO_SUBVTT_INDEX (binfo));
7317 else
7318 sub_vtt = vtt;
7320 if (args == NULL)
7322 allocated = make_tree_vector ();
7323 args = &allocated;
7326 vec_safe_insert (*args, 0, sub_vtt);
7329 ret = build_new_method_call (instance, fns, args,
7330 TYPE_BINFO (BINFO_TYPE (binfo)),
7331 flags, /*fn=*/NULL,
7332 complain);
7334 if (allocated != NULL)
7335 release_tree_vector (allocated);
7337 return ret;
7340 /* Return the NAME, as a C string. The NAME indicates a function that
7341 is a member of TYPE. *FREE_P is set to true if the caller must
7342 free the memory returned.
7344 Rather than go through all of this, we should simply set the names
7345 of constructors and destructors appropriately, and dispense with
7346 ctor_identifier, dtor_identifier, etc. */
7348 static char *
7349 name_as_c_string (tree name, tree type, bool *free_p)
7351 char *pretty_name;
7353 /* Assume that we will not allocate memory. */
7354 *free_p = false;
7355 /* Constructors and destructors are special. */
7356 if (IDENTIFIER_CTOR_OR_DTOR_P (name))
7358 pretty_name
7359 = CONST_CAST (char *, identifier_to_locale (IDENTIFIER_POINTER (constructor_name (type))));
7360 /* For a destructor, add the '~'. */
7361 if (name == complete_dtor_identifier
7362 || name == base_dtor_identifier
7363 || name == deleting_dtor_identifier)
7365 pretty_name = concat ("~", pretty_name, NULL);
7366 /* Remember that we need to free the memory allocated. */
7367 *free_p = true;
7370 else if (IDENTIFIER_TYPENAME_P (name))
7372 pretty_name = concat ("operator ",
7373 type_as_string_translate (TREE_TYPE (name),
7374 TFF_PLAIN_IDENTIFIER),
7375 NULL);
7376 /* Remember that we need to free the memory allocated. */
7377 *free_p = true;
7379 else
7380 pretty_name = CONST_CAST (char *, identifier_to_locale (IDENTIFIER_POINTER (name)));
7382 return pretty_name;
7385 /* Build a call to "INSTANCE.FN (ARGS)". If FN_P is non-NULL, it will
7386 be set, upon return, to the function called. ARGS may be NULL.
7387 This may change ARGS. */
7389 static tree
7390 build_new_method_call_1 (tree instance, tree fns, vec<tree, va_gc> **args,
7391 tree conversion_path, int flags,
7392 tree *fn_p, tsubst_flags_t complain)
7394 struct z_candidate *candidates = 0, *cand;
7395 tree explicit_targs = NULL_TREE;
7396 tree basetype = NULL_TREE;
7397 tree access_binfo;
7398 tree optype;
7399 tree first_mem_arg = NULL_TREE;
7400 tree instance_ptr;
7401 tree name;
7402 bool skip_first_for_error;
7403 vec<tree, va_gc> *user_args;
7404 tree call;
7405 tree fn;
7406 int template_only = 0;
7407 bool any_viable_p;
7408 tree orig_instance;
7409 tree orig_fns;
7410 vec<tree, va_gc> *orig_args = NULL;
7411 void *p;
7413 gcc_assert (instance != NULL_TREE);
7415 /* We don't know what function we're going to call, yet. */
7416 if (fn_p)
7417 *fn_p = NULL_TREE;
7419 if (error_operand_p (instance)
7420 || !fns || error_operand_p (fns))
7421 return error_mark_node;
7423 if (!BASELINK_P (fns))
7425 if (complain & tf_error)
7426 error ("call to non-function %qD", fns);
7427 return error_mark_node;
7430 orig_instance = instance;
7431 orig_fns = fns;
7433 /* Dismantle the baselink to collect all the information we need. */
7434 if (!conversion_path)
7435 conversion_path = BASELINK_BINFO (fns);
7436 access_binfo = BASELINK_ACCESS_BINFO (fns);
7437 optype = BASELINK_OPTYPE (fns);
7438 fns = BASELINK_FUNCTIONS (fns);
7439 if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
7441 explicit_targs = TREE_OPERAND (fns, 1);
7442 fns = TREE_OPERAND (fns, 0);
7443 template_only = 1;
7445 gcc_assert (TREE_CODE (fns) == FUNCTION_DECL
7446 || TREE_CODE (fns) == TEMPLATE_DECL
7447 || TREE_CODE (fns) == OVERLOAD);
7448 fn = get_first_fn (fns);
7449 name = DECL_NAME (fn);
7451 basetype = TYPE_MAIN_VARIANT (TREE_TYPE (instance));
7452 gcc_assert (CLASS_TYPE_P (basetype));
7454 if (processing_template_decl)
7456 orig_args = args == NULL ? NULL : make_tree_vector_copy (*args);
7457 instance = build_non_dependent_expr (instance);
7458 if (args != NULL)
7459 make_args_non_dependent (*args);
7462 user_args = args == NULL ? NULL : *args;
7463 /* Under DR 147 A::A() is an invalid constructor call,
7464 not a functional cast. */
7465 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (fn))
7467 if (! (complain & tf_error))
7468 return error_mark_node;
7470 permerror (input_location,
7471 "cannot call constructor %<%T::%D%> directly",
7472 basetype, name);
7473 permerror (input_location, " for a function-style cast, remove the "
7474 "redundant %<::%D%>", name);
7475 call = build_functional_cast (basetype, build_tree_list_vec (user_args),
7476 complain);
7477 return call;
7480 /* Figure out whether to skip the first argument for the error
7481 message we will display to users if an error occurs. We don't
7482 want to display any compiler-generated arguments. The "this"
7483 pointer hasn't been added yet. However, we must remove the VTT
7484 pointer if this is a call to a base-class constructor or
7485 destructor. */
7486 skip_first_for_error = false;
7487 if (IDENTIFIER_CTOR_OR_DTOR_P (name))
7489 /* Callers should explicitly indicate whether they want to construct
7490 the complete object or just the part without virtual bases. */
7491 gcc_assert (name != ctor_identifier);
7492 /* Similarly for destructors. */
7493 gcc_assert (name != dtor_identifier);
7494 /* Remove the VTT pointer, if present. */
7495 if ((name == base_ctor_identifier || name == base_dtor_identifier)
7496 && CLASSTYPE_VBASECLASSES (basetype))
7497 skip_first_for_error = true;
7500 /* Process the argument list. */
7501 if (args != NULL && *args != NULL)
7503 *args = resolve_args (*args, complain);
7504 if (*args == NULL)
7505 return error_mark_node;
7508 instance_ptr = build_this (instance);
7510 /* It's OK to call destructors and constructors on cv-qualified objects.
7511 Therefore, convert the INSTANCE_PTR to the unqualified type, if
7512 necessary. */
7513 if (DECL_DESTRUCTOR_P (fn)
7514 || DECL_CONSTRUCTOR_P (fn))
7516 tree type = build_pointer_type (basetype);
7517 if (!same_type_p (type, TREE_TYPE (instance_ptr)))
7518 instance_ptr = build_nop (type, instance_ptr);
7520 if (DECL_DESTRUCTOR_P (fn))
7521 name = complete_dtor_identifier;
7523 first_mem_arg = instance_ptr;
7525 /* Get the high-water mark for the CONVERSION_OBSTACK. */
7526 p = conversion_obstack_alloc (0);
7528 /* If CONSTRUCTOR_IS_DIRECT_INIT is set, this was a T{ } form
7529 initializer, not T({ }). */
7530 if (DECL_CONSTRUCTOR_P (fn) && args != NULL && !vec_safe_is_empty (*args)
7531 && BRACE_ENCLOSED_INITIALIZER_P ((**args)[0])
7532 && CONSTRUCTOR_IS_DIRECT_INIT ((**args)[0]))
7534 tree init_list = (**args)[0];
7535 tree init = NULL_TREE;
7537 gcc_assert ((*args)->length () == 1
7538 && !(flags & LOOKUP_ONLYCONVERTING));
7540 /* If the initializer list has no elements and T is a class type with
7541 a default constructor, the object is value-initialized. Handle
7542 this here so we don't need to handle it wherever we use
7543 build_special_member_call. */
7544 if (CONSTRUCTOR_NELTS (init_list) == 0
7545 && TYPE_HAS_DEFAULT_CONSTRUCTOR (basetype)
7546 /* For a user-provided default constructor, use the normal
7547 mechanisms so that protected access works. */
7548 && !type_has_user_provided_default_constructor (basetype)
7549 && !processing_template_decl)
7550 init = build_value_init (basetype, complain);
7552 /* If BASETYPE is an aggregate, we need to do aggregate
7553 initialization. */
7554 else if (CP_AGGREGATE_TYPE_P (basetype))
7555 init = digest_init (basetype, init_list, complain);
7557 if (init)
7559 tree ob;
7560 if (integer_zerop (instance_ptr))
7561 return get_target_expr_sfinae (init, complain);
7562 ob = build_fold_indirect_ref (instance_ptr);
7563 init = build2 (INIT_EXPR, TREE_TYPE (ob), ob, init);
7564 TREE_SIDE_EFFECTS (init) = true;
7565 return init;
7568 /* Otherwise go ahead with overload resolution. */
7569 add_list_candidates (fns, first_mem_arg, init_list,
7570 basetype, explicit_targs, template_only,
7571 conversion_path, access_binfo, flags,
7572 &candidates, complain);
7574 else
7576 add_candidates (fns, first_mem_arg, user_args, optype,
7577 explicit_targs, template_only, conversion_path,
7578 access_binfo, flags, &candidates, complain);
7580 any_viable_p = false;
7581 candidates = splice_viable (candidates, pedantic, &any_viable_p);
7583 if (!any_viable_p)
7585 if (complain & tf_error)
7587 if (!COMPLETE_OR_OPEN_TYPE_P (basetype))
7588 cxx_incomplete_type_error (instance_ptr, basetype);
7589 else if (optype)
7590 error ("no matching function for call to %<%T::operator %T(%A)%#V%>",
7591 basetype, optype, build_tree_list_vec (user_args),
7592 TREE_TYPE (TREE_TYPE (instance_ptr)));
7593 else
7595 char *pretty_name;
7596 bool free_p;
7597 tree arglist;
7599 pretty_name = name_as_c_string (name, basetype, &free_p);
7600 arglist = build_tree_list_vec (user_args);
7601 if (skip_first_for_error)
7602 arglist = TREE_CHAIN (arglist);
7603 error ("no matching function for call to %<%T::%s(%A)%#V%>",
7604 basetype, pretty_name, arglist,
7605 TREE_TYPE (TREE_TYPE (instance_ptr)));
7606 if (free_p)
7607 free (pretty_name);
7609 print_z_candidates (location_of (name), candidates);
7611 call = error_mark_node;
7613 else
7615 cand = tourney (candidates, complain);
7616 if (cand == 0)
7618 char *pretty_name;
7619 bool free_p;
7620 tree arglist;
7622 if (complain & tf_error)
7624 pretty_name = name_as_c_string (name, basetype, &free_p);
7625 arglist = build_tree_list_vec (user_args);
7626 if (skip_first_for_error)
7627 arglist = TREE_CHAIN (arglist);
7628 error ("call of overloaded %<%s(%A)%> is ambiguous", pretty_name,
7629 arglist);
7630 print_z_candidates (location_of (name), candidates);
7631 if (free_p)
7632 free (pretty_name);
7634 call = error_mark_node;
7636 else
7638 fn = cand->fn;
7639 call = NULL_TREE;
7641 if (!(flags & LOOKUP_NONVIRTUAL)
7642 && DECL_PURE_VIRTUAL_P (fn)
7643 && instance == current_class_ref
7644 && (DECL_CONSTRUCTOR_P (current_function_decl)
7645 || DECL_DESTRUCTOR_P (current_function_decl))
7646 && (complain & tf_warning))
7647 /* This is not an error, it is runtime undefined
7648 behavior. */
7649 warning (0, (DECL_CONSTRUCTOR_P (current_function_decl) ?
7650 "pure virtual %q#D called from constructor"
7651 : "pure virtual %q#D called from destructor"),
7652 fn);
7654 if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE
7655 && is_dummy_object (instance_ptr))
7657 instance = maybe_resolve_dummy (instance);
7658 if (instance == error_mark_node)
7659 call = error_mark_node;
7660 else if (!is_dummy_object (instance))
7662 /* We captured 'this' in the current lambda now that
7663 we know we really need it. */
7664 instance_ptr = build_this (instance);
7665 cand->first_arg = instance_ptr;
7667 else
7669 if (complain & tf_error)
7670 error ("cannot call member function %qD without object",
7671 fn);
7672 call = error_mark_node;
7676 if (call != error_mark_node)
7678 /* Optimize away vtable lookup if we know that this
7679 function can't be overridden. We need to check if
7680 the context and the instance type are the same,
7681 actually FN might be defined in a different class
7682 type because of a using-declaration. In this case, we
7683 do not want to perform a non-virtual call. */
7684 if (DECL_VINDEX (fn) && ! (flags & LOOKUP_NONVIRTUAL)
7685 && same_type_ignoring_top_level_qualifiers_p
7686 (DECL_CONTEXT (fn), TREE_TYPE (instance))
7687 && resolves_to_fixed_type_p (instance, 0))
7688 flags |= LOOKUP_NONVIRTUAL;
7689 if (explicit_targs)
7690 flags |= LOOKUP_EXPLICIT_TMPL_ARGS;
7691 /* Now we know what function is being called. */
7692 if (fn_p)
7693 *fn_p = fn;
7694 /* Build the actual CALL_EXPR. */
7695 call = build_over_call (cand, flags, complain);
7696 /* In an expression of the form `a->f()' where `f' turns
7697 out to be a static member function, `a' is
7698 none-the-less evaluated. */
7699 if (TREE_CODE (TREE_TYPE (fn)) != METHOD_TYPE
7700 && !is_dummy_object (instance_ptr)
7701 && TREE_SIDE_EFFECTS (instance_ptr))
7702 call = build2 (COMPOUND_EXPR, TREE_TYPE (call),
7703 instance_ptr, call);
7704 else if (call != error_mark_node
7705 && DECL_DESTRUCTOR_P (cand->fn)
7706 && !VOID_TYPE_P (TREE_TYPE (call)))
7707 /* An explicit call of the form "x->~X()" has type
7708 "void". However, on platforms where destructors
7709 return "this" (i.e., those where
7710 targetm.cxx.cdtor_returns_this is true), such calls
7711 will appear to have a return value of pointer type
7712 to the low-level call machinery. We do not want to
7713 change the low-level machinery, since we want to be
7714 able to optimize "delete f()" on such platforms as
7715 "operator delete(~X(f()))" (rather than generating
7716 "t = f(), ~X(t), operator delete (t)"). */
7717 call = build_nop (void_type_node, call);
7722 if (processing_template_decl && call != error_mark_node)
7724 bool cast_to_void = false;
7726 if (TREE_CODE (call) == COMPOUND_EXPR)
7727 call = TREE_OPERAND (call, 1);
7728 else if (TREE_CODE (call) == NOP_EXPR)
7730 cast_to_void = true;
7731 call = TREE_OPERAND (call, 0);
7733 if (INDIRECT_REF_P (call))
7734 call = TREE_OPERAND (call, 0);
7735 call = (build_min_non_dep_call_vec
7736 (call,
7737 build_min (COMPONENT_REF, TREE_TYPE (CALL_EXPR_FN (call)),
7738 orig_instance, orig_fns, NULL_TREE),
7739 orig_args));
7740 SET_EXPR_LOCATION (call, input_location);
7741 call = convert_from_reference (call);
7742 if (cast_to_void)
7743 call = build_nop (void_type_node, call);
7746 /* Free all the conversions we allocated. */
7747 obstack_free (&conversion_obstack, p);
7749 if (orig_args != NULL)
7750 release_tree_vector (orig_args);
7752 return call;
7755 /* Wrapper for above. */
7757 tree
7758 build_new_method_call (tree instance, tree fns, vec<tree, va_gc> **args,
7759 tree conversion_path, int flags,
7760 tree *fn_p, tsubst_flags_t complain)
7762 tree ret;
7763 bool subtime = timevar_cond_start (TV_OVERLOAD);
7764 ret = build_new_method_call_1 (instance, fns, args, conversion_path, flags,
7765 fn_p, complain);
7766 timevar_cond_stop (TV_OVERLOAD, subtime);
7767 return ret;
7770 /* Returns true iff standard conversion sequence ICS1 is a proper
7771 subsequence of ICS2. */
7773 static bool
7774 is_subseq (conversion *ics1, conversion *ics2)
7776 /* We can assume that a conversion of the same code
7777 between the same types indicates a subsequence since we only get
7778 here if the types we are converting from are the same. */
7780 while (ics1->kind == ck_rvalue
7781 || ics1->kind == ck_lvalue)
7782 ics1 = next_conversion (ics1);
7784 while (1)
7786 while (ics2->kind == ck_rvalue
7787 || ics2->kind == ck_lvalue)
7788 ics2 = next_conversion (ics2);
7790 if (ics2->kind == ck_user
7791 || ics2->kind == ck_ambig
7792 || ics2->kind == ck_aggr
7793 || ics2->kind == ck_list
7794 || ics2->kind == ck_identity)
7795 /* At this point, ICS1 cannot be a proper subsequence of
7796 ICS2. We can get a USER_CONV when we are comparing the
7797 second standard conversion sequence of two user conversion
7798 sequences. */
7799 return false;
7801 ics2 = next_conversion (ics2);
7803 if (ics2->kind == ics1->kind
7804 && same_type_p (ics2->type, ics1->type)
7805 && same_type_p (next_conversion (ics2)->type,
7806 next_conversion (ics1)->type))
7807 return true;
7811 /* Returns nonzero iff DERIVED is derived from BASE. The inputs may
7812 be any _TYPE nodes. */
7814 bool
7815 is_properly_derived_from (tree derived, tree base)
7817 if (!CLASS_TYPE_P (derived) || !CLASS_TYPE_P (base))
7818 return false;
7820 /* We only allow proper derivation here. The DERIVED_FROM_P macro
7821 considers every class derived from itself. */
7822 return (!same_type_ignoring_top_level_qualifiers_p (derived, base)
7823 && DERIVED_FROM_P (base, derived));
7826 /* We build the ICS for an implicit object parameter as a pointer
7827 conversion sequence. However, such a sequence should be compared
7828 as if it were a reference conversion sequence. If ICS is the
7829 implicit conversion sequence for an implicit object parameter,
7830 modify it accordingly. */
7832 static void
7833 maybe_handle_implicit_object (conversion **ics)
7835 if ((*ics)->this_p)
7837 /* [over.match.funcs]
7839 For non-static member functions, the type of the
7840 implicit object parameter is "reference to cv X"
7841 where X is the class of which the function is a
7842 member and cv is the cv-qualification on the member
7843 function declaration. */
7844 conversion *t = *ics;
7845 tree reference_type;
7847 /* The `this' parameter is a pointer to a class type. Make the
7848 implicit conversion talk about a reference to that same class
7849 type. */
7850 reference_type = TREE_TYPE (t->type);
7851 reference_type = build_reference_type (reference_type);
7853 if (t->kind == ck_qual)
7854 t = next_conversion (t);
7855 if (t->kind == ck_ptr)
7856 t = next_conversion (t);
7857 t = build_identity_conv (TREE_TYPE (t->type), NULL_TREE);
7858 t = direct_reference_binding (reference_type, t);
7859 t->this_p = 1;
7860 t->rvaluedness_matches_p = 0;
7861 *ics = t;
7865 /* If *ICS is a REF_BIND set *ICS to the remainder of the conversion,
7866 and return the initial reference binding conversion. Otherwise,
7867 leave *ICS unchanged and return NULL. */
7869 static conversion *
7870 maybe_handle_ref_bind (conversion **ics)
7872 if ((*ics)->kind == ck_ref_bind)
7874 conversion *old_ics = *ics;
7875 *ics = next_conversion (old_ics);
7876 (*ics)->user_conv_p = old_ics->user_conv_p;
7877 return old_ics;
7880 return NULL;
7883 /* Compare two implicit conversion sequences according to the rules set out in
7884 [over.ics.rank]. Return values:
7886 1: ics1 is better than ics2
7887 -1: ics2 is better than ics1
7888 0: ics1 and ics2 are indistinguishable */
7890 static int
7891 compare_ics (conversion *ics1, conversion *ics2)
7893 tree from_type1;
7894 tree from_type2;
7895 tree to_type1;
7896 tree to_type2;
7897 tree deref_from_type1 = NULL_TREE;
7898 tree deref_from_type2 = NULL_TREE;
7899 tree deref_to_type1 = NULL_TREE;
7900 tree deref_to_type2 = NULL_TREE;
7901 conversion_rank rank1, rank2;
7903 /* REF_BINDING is nonzero if the result of the conversion sequence
7904 is a reference type. In that case REF_CONV is the reference
7905 binding conversion. */
7906 conversion *ref_conv1;
7907 conversion *ref_conv2;
7909 /* Handle implicit object parameters. */
7910 maybe_handle_implicit_object (&ics1);
7911 maybe_handle_implicit_object (&ics2);
7913 /* Handle reference parameters. */
7914 ref_conv1 = maybe_handle_ref_bind (&ics1);
7915 ref_conv2 = maybe_handle_ref_bind (&ics2);
7917 /* List-initialization sequence L1 is a better conversion sequence than
7918 list-initialization sequence L2 if L1 converts to
7919 std::initializer_list<X> for some X and L2 does not. */
7920 if (ics1->kind == ck_list && ics2->kind != ck_list)
7921 return 1;
7922 if (ics2->kind == ck_list && ics1->kind != ck_list)
7923 return -1;
7925 /* [over.ics.rank]
7927 When comparing the basic forms of implicit conversion sequences (as
7928 defined in _over.best.ics_)
7930 --a standard conversion sequence (_over.ics.scs_) is a better
7931 conversion sequence than a user-defined conversion sequence
7932 or an ellipsis conversion sequence, and
7934 --a user-defined conversion sequence (_over.ics.user_) is a
7935 better conversion sequence than an ellipsis conversion sequence
7936 (_over.ics.ellipsis_). */
7937 rank1 = CONVERSION_RANK (ics1);
7938 rank2 = CONVERSION_RANK (ics2);
7940 if (rank1 > rank2)
7941 return -1;
7942 else if (rank1 < rank2)
7943 return 1;
7945 if (rank1 == cr_bad)
7947 /* Both ICS are bad. We try to make a decision based on what would
7948 have happened if they'd been good. This is not an extension,
7949 we'll still give an error when we build up the call; this just
7950 helps us give a more helpful error message. */
7951 rank1 = BAD_CONVERSION_RANK (ics1);
7952 rank2 = BAD_CONVERSION_RANK (ics2);
7954 if (rank1 > rank2)
7955 return -1;
7956 else if (rank1 < rank2)
7957 return 1;
7959 /* We couldn't make up our minds; try to figure it out below. */
7962 if (ics1->ellipsis_p)
7963 /* Both conversions are ellipsis conversions. */
7964 return 0;
7966 /* User-defined conversion sequence U1 is a better conversion sequence
7967 than another user-defined conversion sequence U2 if they contain the
7968 same user-defined conversion operator or constructor and if the sec-
7969 ond standard conversion sequence of U1 is better than the second
7970 standard conversion sequence of U2. */
7972 /* Handle list-conversion with the same code even though it isn't always
7973 ranked as a user-defined conversion and it doesn't have a second
7974 standard conversion sequence; it will still have the desired effect.
7975 Specifically, we need to do the reference binding comparison at the
7976 end of this function. */
7978 if (ics1->user_conv_p || ics1->kind == ck_list || ics1->kind == ck_aggr)
7980 conversion *t1;
7981 conversion *t2;
7983 for (t1 = ics1; t1->kind != ck_user; t1 = next_conversion (t1))
7984 if (t1->kind == ck_ambig || t1->kind == ck_aggr
7985 || t1->kind == ck_list)
7986 break;
7987 for (t2 = ics2; t2->kind != ck_user; t2 = next_conversion (t2))
7988 if (t2->kind == ck_ambig || t2->kind == ck_aggr
7989 || t2->kind == ck_list)
7990 break;
7992 if (t1->kind != t2->kind)
7993 return 0;
7994 else if (t1->kind == ck_user)
7996 if (t1->cand->fn != t2->cand->fn)
7997 return 0;
7999 else
8001 /* For ambiguous or aggregate conversions, use the target type as
8002 a proxy for the conversion function. */
8003 if (!same_type_ignoring_top_level_qualifiers_p (t1->type, t2->type))
8004 return 0;
8007 /* We can just fall through here, after setting up
8008 FROM_TYPE1 and FROM_TYPE2. */
8009 from_type1 = t1->type;
8010 from_type2 = t2->type;
8012 else
8014 conversion *t1;
8015 conversion *t2;
8017 /* We're dealing with two standard conversion sequences.
8019 [over.ics.rank]
8021 Standard conversion sequence S1 is a better conversion
8022 sequence than standard conversion sequence S2 if
8024 --S1 is a proper subsequence of S2 (comparing the conversion
8025 sequences in the canonical form defined by _over.ics.scs_,
8026 excluding any Lvalue Transformation; the identity
8027 conversion sequence is considered to be a subsequence of
8028 any non-identity conversion sequence */
8030 t1 = ics1;
8031 while (t1->kind != ck_identity)
8032 t1 = next_conversion (t1);
8033 from_type1 = t1->type;
8035 t2 = ics2;
8036 while (t2->kind != ck_identity)
8037 t2 = next_conversion (t2);
8038 from_type2 = t2->type;
8041 /* One sequence can only be a subsequence of the other if they start with
8042 the same type. They can start with different types when comparing the
8043 second standard conversion sequence in two user-defined conversion
8044 sequences. */
8045 if (same_type_p (from_type1, from_type2))
8047 if (is_subseq (ics1, ics2))
8048 return 1;
8049 if (is_subseq (ics2, ics1))
8050 return -1;
8053 /* [over.ics.rank]
8055 Or, if not that,
8057 --the rank of S1 is better than the rank of S2 (by the rules
8058 defined below):
8060 Standard conversion sequences are ordered by their ranks: an Exact
8061 Match is a better conversion than a Promotion, which is a better
8062 conversion than a Conversion.
8064 Two conversion sequences with the same rank are indistinguishable
8065 unless one of the following rules applies:
8067 --A conversion that does not a convert a pointer, pointer to member,
8068 or std::nullptr_t to bool is better than one that does.
8070 The ICS_STD_RANK automatically handles the pointer-to-bool rule,
8071 so that we do not have to check it explicitly. */
8072 if (ics1->rank < ics2->rank)
8073 return 1;
8074 else if (ics2->rank < ics1->rank)
8075 return -1;
8077 to_type1 = ics1->type;
8078 to_type2 = ics2->type;
8080 /* A conversion from scalar arithmetic type to complex is worse than a
8081 conversion between scalar arithmetic types. */
8082 if (same_type_p (from_type1, from_type2)
8083 && ARITHMETIC_TYPE_P (from_type1)
8084 && ARITHMETIC_TYPE_P (to_type1)
8085 && ARITHMETIC_TYPE_P (to_type2)
8086 && ((TREE_CODE (to_type1) == COMPLEX_TYPE)
8087 != (TREE_CODE (to_type2) == COMPLEX_TYPE)))
8089 if (TREE_CODE (to_type1) == COMPLEX_TYPE)
8090 return -1;
8091 else
8092 return 1;
8095 if (TYPE_PTR_P (from_type1)
8096 && TYPE_PTR_P (from_type2)
8097 && TYPE_PTR_P (to_type1)
8098 && TYPE_PTR_P (to_type2))
8100 deref_from_type1 = TREE_TYPE (from_type1);
8101 deref_from_type2 = TREE_TYPE (from_type2);
8102 deref_to_type1 = TREE_TYPE (to_type1);
8103 deref_to_type2 = TREE_TYPE (to_type2);
8105 /* The rules for pointers to members A::* are just like the rules
8106 for pointers A*, except opposite: if B is derived from A then
8107 A::* converts to B::*, not vice versa. For that reason, we
8108 switch the from_ and to_ variables here. */
8109 else if ((TYPE_PTRDATAMEM_P (from_type1) && TYPE_PTRDATAMEM_P (from_type2)
8110 && TYPE_PTRDATAMEM_P (to_type1) && TYPE_PTRDATAMEM_P (to_type2))
8111 || (TYPE_PTRMEMFUNC_P (from_type1)
8112 && TYPE_PTRMEMFUNC_P (from_type2)
8113 && TYPE_PTRMEMFUNC_P (to_type1)
8114 && TYPE_PTRMEMFUNC_P (to_type2)))
8116 deref_to_type1 = TYPE_PTRMEM_CLASS_TYPE (from_type1);
8117 deref_to_type2 = TYPE_PTRMEM_CLASS_TYPE (from_type2);
8118 deref_from_type1 = TYPE_PTRMEM_CLASS_TYPE (to_type1);
8119 deref_from_type2 = TYPE_PTRMEM_CLASS_TYPE (to_type2);
8122 if (deref_from_type1 != NULL_TREE
8123 && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_from_type1))
8124 && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_from_type2)))
8126 /* This was one of the pointer or pointer-like conversions.
8128 [over.ics.rank]
8130 --If class B is derived directly or indirectly from class A,
8131 conversion of B* to A* is better than conversion of B* to
8132 void*, and conversion of A* to void* is better than
8133 conversion of B* to void*. */
8134 if (TREE_CODE (deref_to_type1) == VOID_TYPE
8135 && TREE_CODE (deref_to_type2) == VOID_TYPE)
8137 if (is_properly_derived_from (deref_from_type1,
8138 deref_from_type2))
8139 return -1;
8140 else if (is_properly_derived_from (deref_from_type2,
8141 deref_from_type1))
8142 return 1;
8144 else if (TREE_CODE (deref_to_type1) == VOID_TYPE
8145 || TREE_CODE (deref_to_type2) == VOID_TYPE)
8147 if (same_type_p (deref_from_type1, deref_from_type2))
8149 if (TREE_CODE (deref_to_type2) == VOID_TYPE)
8151 if (is_properly_derived_from (deref_from_type1,
8152 deref_to_type1))
8153 return 1;
8155 /* We know that DEREF_TO_TYPE1 is `void' here. */
8156 else if (is_properly_derived_from (deref_from_type1,
8157 deref_to_type2))
8158 return -1;
8161 else if (RECORD_OR_UNION_CODE_P (TREE_CODE (deref_to_type1))
8162 && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_to_type2)))
8164 /* [over.ics.rank]
8166 --If class B is derived directly or indirectly from class A
8167 and class C is derived directly or indirectly from B,
8169 --conversion of C* to B* is better than conversion of C* to
8172 --conversion of B* to A* is better than conversion of C* to
8173 A* */
8174 if (same_type_p (deref_from_type1, deref_from_type2))
8176 if (is_properly_derived_from (deref_to_type1,
8177 deref_to_type2))
8178 return 1;
8179 else if (is_properly_derived_from (deref_to_type2,
8180 deref_to_type1))
8181 return -1;
8183 else if (same_type_p (deref_to_type1, deref_to_type2))
8185 if (is_properly_derived_from (deref_from_type2,
8186 deref_from_type1))
8187 return 1;
8188 else if (is_properly_derived_from (deref_from_type1,
8189 deref_from_type2))
8190 return -1;
8194 else if (CLASS_TYPE_P (non_reference (from_type1))
8195 && same_type_p (from_type1, from_type2))
8197 tree from = non_reference (from_type1);
8199 /* [over.ics.rank]
8201 --binding of an expression of type C to a reference of type
8202 B& is better than binding an expression of type C to a
8203 reference of type A&
8205 --conversion of C to B is better than conversion of C to A, */
8206 if (is_properly_derived_from (from, to_type1)
8207 && is_properly_derived_from (from, to_type2))
8209 if (is_properly_derived_from (to_type1, to_type2))
8210 return 1;
8211 else if (is_properly_derived_from (to_type2, to_type1))
8212 return -1;
8215 else if (CLASS_TYPE_P (non_reference (to_type1))
8216 && same_type_p (to_type1, to_type2))
8218 tree to = non_reference (to_type1);
8220 /* [over.ics.rank]
8222 --binding of an expression of type B to a reference of type
8223 A& is better than binding an expression of type C to a
8224 reference of type A&,
8226 --conversion of B to A is better than conversion of C to A */
8227 if (is_properly_derived_from (from_type1, to)
8228 && is_properly_derived_from (from_type2, to))
8230 if (is_properly_derived_from (from_type2, from_type1))
8231 return 1;
8232 else if (is_properly_derived_from (from_type1, from_type2))
8233 return -1;
8237 /* [over.ics.rank]
8239 --S1 and S2 differ only in their qualification conversion and yield
8240 similar types T1 and T2 (_conv.qual_), respectively, and the cv-
8241 qualification signature of type T1 is a proper subset of the cv-
8242 qualification signature of type T2 */
8243 if (ics1->kind == ck_qual
8244 && ics2->kind == ck_qual
8245 && same_type_p (from_type1, from_type2))
8247 int result = comp_cv_qual_signature (to_type1, to_type2);
8248 if (result != 0)
8249 return result;
8252 /* [over.ics.rank]
8254 --S1 and S2 are reference bindings (_dcl.init.ref_) and neither refers
8255 to an implicit object parameter, and either S1 binds an lvalue reference
8256 to an lvalue and S2 binds an rvalue reference or S1 binds an rvalue
8257 reference to an rvalue and S2 binds an lvalue reference
8258 (C++0x draft standard, 13.3.3.2)
8260 --S1 and S2 are reference bindings (_dcl.init.ref_), and the
8261 types to which the references refer are the same type except for
8262 top-level cv-qualifiers, and the type to which the reference
8263 initialized by S2 refers is more cv-qualified than the type to
8264 which the reference initialized by S1 refers.
8266 DR 1328 [over.match.best]: the context is an initialization by
8267 conversion function for direct reference binding (13.3.1.6) of a
8268 reference to function type, the return type of F1 is the same kind of
8269 reference (i.e. lvalue or rvalue) as the reference being initialized,
8270 and the return type of F2 is not. */
8272 if (ref_conv1 && ref_conv2)
8274 if (!ref_conv1->this_p && !ref_conv2->this_p
8275 && (ref_conv1->rvaluedness_matches_p
8276 != ref_conv2->rvaluedness_matches_p)
8277 && (same_type_p (ref_conv1->type, ref_conv2->type)
8278 || (TYPE_REF_IS_RVALUE (ref_conv1->type)
8279 != TYPE_REF_IS_RVALUE (ref_conv2->type))))
8281 return (ref_conv1->rvaluedness_matches_p
8282 - ref_conv2->rvaluedness_matches_p);
8285 if (same_type_ignoring_top_level_qualifiers_p (to_type1, to_type2))
8286 return comp_cv_qualification (TREE_TYPE (ref_conv2->type),
8287 TREE_TYPE (ref_conv1->type));
8290 /* Neither conversion sequence is better than the other. */
8291 return 0;
8294 /* The source type for this standard conversion sequence. */
8296 static tree
8297 source_type (conversion *t)
8299 for (;; t = next_conversion (t))
8301 if (t->kind == ck_user
8302 || t->kind == ck_ambig
8303 || t->kind == ck_identity)
8304 return t->type;
8306 gcc_unreachable ();
8309 /* Note a warning about preferring WINNER to LOSER. We do this by storing
8310 a pointer to LOSER and re-running joust to produce the warning if WINNER
8311 is actually used. */
8313 static void
8314 add_warning (struct z_candidate *winner, struct z_candidate *loser)
8316 candidate_warning *cw = (candidate_warning *)
8317 conversion_obstack_alloc (sizeof (candidate_warning));
8318 cw->loser = loser;
8319 cw->next = winner->warnings;
8320 winner->warnings = cw;
8323 /* Compare two candidates for overloading as described in
8324 [over.match.best]. Return values:
8326 1: cand1 is better than cand2
8327 -1: cand2 is better than cand1
8328 0: cand1 and cand2 are indistinguishable */
8330 static int
8331 joust (struct z_candidate *cand1, struct z_candidate *cand2, bool warn,
8332 tsubst_flags_t complain)
8334 int winner = 0;
8335 int off1 = 0, off2 = 0;
8336 size_t i;
8337 size_t len;
8339 /* Candidates that involve bad conversions are always worse than those
8340 that don't. */
8341 if (cand1->viable > cand2->viable)
8342 return 1;
8343 if (cand1->viable < cand2->viable)
8344 return -1;
8346 /* If we have two pseudo-candidates for conversions to the same type,
8347 or two candidates for the same function, arbitrarily pick one. */
8348 if (cand1->fn == cand2->fn
8349 && (IS_TYPE_OR_DECL_P (cand1->fn)))
8350 return 1;
8352 /* Prefer a non-deleted function over an implicitly deleted move
8353 constructor or assignment operator. This differs slightly from the
8354 wording for issue 1402 (which says the move op is ignored by overload
8355 resolution), but this way produces better error messages. */
8356 if (TREE_CODE (cand1->fn) == FUNCTION_DECL
8357 && TREE_CODE (cand2->fn) == FUNCTION_DECL
8358 && DECL_DELETED_FN (cand1->fn) != DECL_DELETED_FN (cand2->fn))
8360 if (DECL_DELETED_FN (cand1->fn) && DECL_DEFAULTED_FN (cand1->fn)
8361 && move_fn_p (cand1->fn))
8362 return -1;
8363 if (DECL_DELETED_FN (cand2->fn) && DECL_DEFAULTED_FN (cand2->fn)
8364 && move_fn_p (cand2->fn))
8365 return 1;
8368 /* a viable function F1
8369 is defined to be a better function than another viable function F2 if
8370 for all arguments i, ICSi(F1) is not a worse conversion sequence than
8371 ICSi(F2), and then */
8373 /* for some argument j, ICSj(F1) is a better conversion sequence than
8374 ICSj(F2) */
8376 /* For comparing static and non-static member functions, we ignore
8377 the implicit object parameter of the non-static function. The
8378 standard says to pretend that the static function has an object
8379 parm, but that won't work with operator overloading. */
8380 len = cand1->num_convs;
8381 if (len != cand2->num_convs)
8383 int static_1 = DECL_STATIC_FUNCTION_P (cand1->fn);
8384 int static_2 = DECL_STATIC_FUNCTION_P (cand2->fn);
8386 if (DECL_CONSTRUCTOR_P (cand1->fn)
8387 && is_list_ctor (cand1->fn) != is_list_ctor (cand2->fn))
8388 /* We're comparing a near-match list constructor and a near-match
8389 non-list constructor. Just treat them as unordered. */
8390 return 0;
8392 gcc_assert (static_1 != static_2);
8394 if (static_1)
8395 off2 = 1;
8396 else
8398 off1 = 1;
8399 --len;
8403 for (i = 0; i < len; ++i)
8405 conversion *t1 = cand1->convs[i + off1];
8406 conversion *t2 = cand2->convs[i + off2];
8407 int comp = compare_ics (t1, t2);
8409 if (comp != 0)
8411 if ((complain & tf_warning)
8412 && warn_sign_promo
8413 && (CONVERSION_RANK (t1) + CONVERSION_RANK (t2)
8414 == cr_std + cr_promotion)
8415 && t1->kind == ck_std
8416 && t2->kind == ck_std
8417 && TREE_CODE (t1->type) == INTEGER_TYPE
8418 && TREE_CODE (t2->type) == INTEGER_TYPE
8419 && (TYPE_PRECISION (t1->type)
8420 == TYPE_PRECISION (t2->type))
8421 && (TYPE_UNSIGNED (next_conversion (t1)->type)
8422 || (TREE_CODE (next_conversion (t1)->type)
8423 == ENUMERAL_TYPE)))
8425 tree type = next_conversion (t1)->type;
8426 tree type1, type2;
8427 struct z_candidate *w, *l;
8428 if (comp > 0)
8429 type1 = t1->type, type2 = t2->type,
8430 w = cand1, l = cand2;
8431 else
8432 type1 = t2->type, type2 = t1->type,
8433 w = cand2, l = cand1;
8435 if (warn)
8437 warning (OPT_Wsign_promo, "passing %qT chooses %qT over %qT",
8438 type, type1, type2);
8439 warning (OPT_Wsign_promo, " in call to %qD", w->fn);
8441 else
8442 add_warning (w, l);
8445 if (winner && comp != winner)
8447 winner = 0;
8448 goto tweak;
8450 winner = comp;
8454 /* warn about confusing overload resolution for user-defined conversions,
8455 either between a constructor and a conversion op, or between two
8456 conversion ops. */
8457 if ((complain & tf_warning)
8458 && winner && warn_conversion && cand1->second_conv
8459 && (!DECL_CONSTRUCTOR_P (cand1->fn) || !DECL_CONSTRUCTOR_P (cand2->fn))
8460 && winner != compare_ics (cand1->second_conv, cand2->second_conv))
8462 struct z_candidate *w, *l;
8463 bool give_warning = false;
8465 if (winner == 1)
8466 w = cand1, l = cand2;
8467 else
8468 w = cand2, l = cand1;
8470 /* We don't want to complain about `X::operator T1 ()'
8471 beating `X::operator T2 () const', when T2 is a no less
8472 cv-qualified version of T1. */
8473 if (DECL_CONTEXT (w->fn) == DECL_CONTEXT (l->fn)
8474 && !DECL_CONSTRUCTOR_P (w->fn) && !DECL_CONSTRUCTOR_P (l->fn))
8476 tree t = TREE_TYPE (TREE_TYPE (l->fn));
8477 tree f = TREE_TYPE (TREE_TYPE (w->fn));
8479 if (TREE_CODE (t) == TREE_CODE (f) && POINTER_TYPE_P (t))
8481 t = TREE_TYPE (t);
8482 f = TREE_TYPE (f);
8484 if (!comp_ptr_ttypes (t, f))
8485 give_warning = true;
8487 else
8488 give_warning = true;
8490 if (!give_warning)
8491 /*NOP*/;
8492 else if (warn)
8494 tree source = source_type (w->convs[0]);
8495 if (! DECL_CONSTRUCTOR_P (w->fn))
8496 source = TREE_TYPE (source);
8497 if (warning (OPT_Wconversion, "choosing %qD over %qD", w->fn, l->fn)
8498 && warning (OPT_Wconversion, " for conversion from %qT to %qT",
8499 source, w->second_conv->type))
8501 inform (input_location, " because conversion sequence for the argument is better");
8504 else
8505 add_warning (w, l);
8508 if (winner)
8509 return winner;
8511 /* DR 495 moved this tiebreaker above the template ones. */
8512 /* or, if not that,
8513 the context is an initialization by user-defined conversion (see
8514 _dcl.init_ and _over.match.user_) and the standard conversion
8515 sequence from the return type of F1 to the destination type (i.e.,
8516 the type of the entity being initialized) is a better conversion
8517 sequence than the standard conversion sequence from the return type
8518 of F2 to the destination type. */
8520 if (cand1->second_conv)
8522 winner = compare_ics (cand1->second_conv, cand2->second_conv);
8523 if (winner)
8524 return winner;
8527 /* or, if not that,
8528 F1 is a non-template function and F2 is a template function
8529 specialization. */
8531 if (!cand1->template_decl && cand2->template_decl)
8532 return 1;
8533 else if (cand1->template_decl && !cand2->template_decl)
8534 return -1;
8536 /* or, if not that,
8537 F1 and F2 are template functions and the function template for F1 is
8538 more specialized than the template for F2 according to the partial
8539 ordering rules. */
8541 if (cand1->template_decl && cand2->template_decl)
8543 winner = more_specialized_fn
8544 (TI_TEMPLATE (cand1->template_decl),
8545 TI_TEMPLATE (cand2->template_decl),
8546 /* [temp.func.order]: The presence of unused ellipsis and default
8547 arguments has no effect on the partial ordering of function
8548 templates. add_function_candidate() will not have
8549 counted the "this" argument for constructors. */
8550 cand1->num_convs + DECL_CONSTRUCTOR_P (cand1->fn));
8551 if (winner)
8552 return winner;
8555 /* Check whether we can discard a builtin candidate, either because we
8556 have two identical ones or matching builtin and non-builtin candidates.
8558 (Pedantically in the latter case the builtin which matched the user
8559 function should not be added to the overload set, but we spot it here.
8561 [over.match.oper]
8562 ... the builtin candidates include ...
8563 - do not have the same parameter type list as any non-template
8564 non-member candidate. */
8566 if (identifier_p (cand1->fn) || identifier_p (cand2->fn))
8568 for (i = 0; i < len; ++i)
8569 if (!same_type_p (cand1->convs[i]->type,
8570 cand2->convs[i]->type))
8571 break;
8572 if (i == cand1->num_convs)
8574 if (cand1->fn == cand2->fn)
8575 /* Two built-in candidates; arbitrarily pick one. */
8576 return 1;
8577 else if (identifier_p (cand1->fn))
8578 /* cand1 is built-in; prefer cand2. */
8579 return -1;
8580 else
8581 /* cand2 is built-in; prefer cand1. */
8582 return 1;
8586 /* For candidates of a multi-versioned function, make the version with
8587 the highest priority win. This version will be checked for dispatching
8588 first. If this version can be inlined into the caller, the front-end
8589 will simply make a direct call to this function. */
8591 if (TREE_CODE (cand1->fn) == FUNCTION_DECL
8592 && DECL_FUNCTION_VERSIONED (cand1->fn)
8593 && TREE_CODE (cand2->fn) == FUNCTION_DECL
8594 && DECL_FUNCTION_VERSIONED (cand2->fn))
8596 tree f1 = TREE_TYPE (cand1->fn);
8597 tree f2 = TREE_TYPE (cand2->fn);
8598 tree p1 = TYPE_ARG_TYPES (f1);
8599 tree p2 = TYPE_ARG_TYPES (f2);
8601 /* Check if cand1->fn and cand2->fn are versions of the same function. It
8602 is possible that cand1->fn and cand2->fn are function versions but of
8603 different functions. Check types to see if they are versions of the same
8604 function. */
8605 if (compparms (p1, p2)
8606 && same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
8608 /* Always make the version with the higher priority, more
8609 specialized, win. */
8610 gcc_assert (targetm.compare_version_priority);
8611 if (targetm.compare_version_priority (cand1->fn, cand2->fn) >= 0)
8612 return 1;
8613 else
8614 return -1;
8618 /* If the two function declarations represent the same function (this can
8619 happen with declarations in multiple scopes and arg-dependent lookup),
8620 arbitrarily choose one. But first make sure the default args we're
8621 using match. */
8622 if (DECL_P (cand1->fn) && DECL_P (cand2->fn)
8623 && equal_functions (cand1->fn, cand2->fn))
8625 tree parms1 = TYPE_ARG_TYPES (TREE_TYPE (cand1->fn));
8626 tree parms2 = TYPE_ARG_TYPES (TREE_TYPE (cand2->fn));
8628 gcc_assert (!DECL_CONSTRUCTOR_P (cand1->fn));
8630 for (i = 0; i < len; ++i)
8632 /* Don't crash if the fn is variadic. */
8633 if (!parms1)
8634 break;
8635 parms1 = TREE_CHAIN (parms1);
8636 parms2 = TREE_CHAIN (parms2);
8639 if (off1)
8640 parms1 = TREE_CHAIN (parms1);
8641 else if (off2)
8642 parms2 = TREE_CHAIN (parms2);
8644 for (; parms1; ++i)
8646 if (!cp_tree_equal (TREE_PURPOSE (parms1),
8647 TREE_PURPOSE (parms2)))
8649 if (warn)
8651 if (complain & tf_error)
8653 permerror (input_location,
8654 "default argument mismatch in "
8655 "overload resolution");
8656 inform (input_location,
8657 " candidate 1: %q+#F", cand1->fn);
8658 inform (input_location,
8659 " candidate 2: %q+#F", cand2->fn);
8661 else
8662 return 0;
8664 else
8665 add_warning (cand1, cand2);
8666 break;
8668 parms1 = TREE_CHAIN (parms1);
8669 parms2 = TREE_CHAIN (parms2);
8672 return 1;
8675 tweak:
8677 /* Extension: If the worst conversion for one candidate is worse than the
8678 worst conversion for the other, take the first. */
8679 if (!pedantic && (complain & tf_warning_or_error))
8681 conversion_rank rank1 = cr_identity, rank2 = cr_identity;
8682 struct z_candidate *w = 0, *l = 0;
8684 for (i = 0; i < len; ++i)
8686 if (CONVERSION_RANK (cand1->convs[i+off1]) > rank1)
8687 rank1 = CONVERSION_RANK (cand1->convs[i+off1]);
8688 if (CONVERSION_RANK (cand2->convs[i + off2]) > rank2)
8689 rank2 = CONVERSION_RANK (cand2->convs[i + off2]);
8691 if (rank1 < rank2)
8692 winner = 1, w = cand1, l = cand2;
8693 if (rank1 > rank2)
8694 winner = -1, w = cand2, l = cand1;
8695 if (winner)
8697 /* Don't choose a deleted function over ambiguity. */
8698 if (DECL_P (w->fn) && DECL_DELETED_FN (w->fn))
8699 return 0;
8700 if (warn)
8702 pedwarn (input_location, 0,
8703 "ISO C++ says that these are ambiguous, even "
8704 "though the worst conversion for the first is better than "
8705 "the worst conversion for the second:");
8706 print_z_candidate (input_location, _("candidate 1:"), w);
8707 print_z_candidate (input_location, _("candidate 2:"), l);
8709 else
8710 add_warning (w, l);
8711 return winner;
8715 gcc_assert (!winner);
8716 return 0;
8719 /* Given a list of candidates for overloading, find the best one, if any.
8720 This algorithm has a worst case of O(2n) (winner is last), and a best
8721 case of O(n/2) (totally ambiguous); much better than a sorting
8722 algorithm. */
8724 static struct z_candidate *
8725 tourney (struct z_candidate *candidates, tsubst_flags_t complain)
8727 struct z_candidate *champ = candidates, *challenger;
8728 int fate;
8729 int champ_compared_to_predecessor = 0;
8731 /* Walk through the list once, comparing each current champ to the next
8732 candidate, knocking out a candidate or two with each comparison. */
8734 for (challenger = champ->next; challenger; )
8736 fate = joust (champ, challenger, 0, complain);
8737 if (fate == 1)
8738 challenger = challenger->next;
8739 else
8741 if (fate == 0)
8743 champ = challenger->next;
8744 if (champ == 0)
8745 return NULL;
8746 champ_compared_to_predecessor = 0;
8748 else
8750 champ = challenger;
8751 champ_compared_to_predecessor = 1;
8754 challenger = champ->next;
8758 /* Make sure the champ is better than all the candidates it hasn't yet
8759 been compared to. */
8761 for (challenger = candidates;
8762 challenger != champ
8763 && !(champ_compared_to_predecessor && challenger->next == champ);
8764 challenger = challenger->next)
8766 fate = joust (champ, challenger, 0, complain);
8767 if (fate != 1)
8768 return NULL;
8771 return champ;
8774 /* Returns nonzero if things of type FROM can be converted to TO. */
8776 bool
8777 can_convert (tree to, tree from, tsubst_flags_t complain)
8779 return can_convert_arg (to, from, NULL_TREE, LOOKUP_IMPLICIT, complain);
8782 /* Returns nonzero if ARG (of type FROM) can be converted to TO. */
8784 bool
8785 can_convert_arg (tree to, tree from, tree arg, int flags,
8786 tsubst_flags_t complain)
8788 conversion *t;
8789 void *p;
8790 bool ok_p;
8792 /* Get the high-water mark for the CONVERSION_OBSTACK. */
8793 p = conversion_obstack_alloc (0);
8794 /* We want to discard any access checks done for this test,
8795 as we might not be in the appropriate access context and
8796 we'll do the check again when we actually perform the
8797 conversion. */
8798 push_deferring_access_checks (dk_deferred);
8800 t = implicit_conversion (to, from, arg, /*c_cast_p=*/false,
8801 flags, complain);
8802 ok_p = (t && !t->bad_p);
8804 /* Discard the access checks now. */
8805 pop_deferring_access_checks ();
8806 /* Free all the conversions we allocated. */
8807 obstack_free (&conversion_obstack, p);
8809 return ok_p;
8812 /* Like can_convert_arg, but allows dubious conversions as well. */
8814 bool
8815 can_convert_arg_bad (tree to, tree from, tree arg, int flags,
8816 tsubst_flags_t complain)
8818 conversion *t;
8819 void *p;
8821 /* Get the high-water mark for the CONVERSION_OBSTACK. */
8822 p = conversion_obstack_alloc (0);
8823 /* Try to perform the conversion. */
8824 t = implicit_conversion (to, from, arg, /*c_cast_p=*/false,
8825 flags, complain);
8826 /* Free all the conversions we allocated. */
8827 obstack_free (&conversion_obstack, p);
8829 return t != NULL;
8832 /* Convert EXPR to TYPE. Return the converted expression.
8834 Note that we allow bad conversions here because by the time we get to
8835 this point we are committed to doing the conversion. If we end up
8836 doing a bad conversion, convert_like will complain. */
8838 tree
8839 perform_implicit_conversion_flags (tree type, tree expr,
8840 tsubst_flags_t complain, int flags)
8842 conversion *conv;
8843 void *p;
8844 location_t loc = EXPR_LOC_OR_HERE (expr);
8846 if (error_operand_p (expr))
8847 return error_mark_node;
8849 /* Get the high-water mark for the CONVERSION_OBSTACK. */
8850 p = conversion_obstack_alloc (0);
8852 conv = implicit_conversion (type, TREE_TYPE (expr), expr,
8853 /*c_cast_p=*/false,
8854 flags, complain);
8856 if (!conv)
8858 if (complain & tf_error)
8860 /* If expr has unknown type, then it is an overloaded function.
8861 Call instantiate_type to get good error messages. */
8862 if (TREE_TYPE (expr) == unknown_type_node)
8863 instantiate_type (type, expr, complain);
8864 else if (invalid_nonstatic_memfn_p (expr, complain))
8865 /* We gave an error. */;
8866 else
8867 error_at (loc, "could not convert %qE from %qT to %qT", expr,
8868 TREE_TYPE (expr), type);
8870 expr = error_mark_node;
8872 else if (processing_template_decl && conv->kind != ck_identity)
8874 /* In a template, we are only concerned about determining the
8875 type of non-dependent expressions, so we do not have to
8876 perform the actual conversion. But for initializers, we
8877 need to be able to perform it at instantiation
8878 (or fold_non_dependent_expr) time. */
8879 expr = build1 (IMPLICIT_CONV_EXPR, type, expr);
8880 if (!(flags & LOOKUP_ONLYCONVERTING))
8881 IMPLICIT_CONV_EXPR_DIRECT_INIT (expr) = true;
8883 else
8884 expr = convert_like (conv, expr, complain);
8886 /* Free all the conversions we allocated. */
8887 obstack_free (&conversion_obstack, p);
8889 return expr;
8892 tree
8893 perform_implicit_conversion (tree type, tree expr, tsubst_flags_t complain)
8895 return perform_implicit_conversion_flags (type, expr, complain,
8896 LOOKUP_IMPLICIT);
8899 /* Convert EXPR to TYPE (as a direct-initialization) if that is
8900 permitted. If the conversion is valid, the converted expression is
8901 returned. Otherwise, NULL_TREE is returned, except in the case
8902 that TYPE is a class type; in that case, an error is issued. If
8903 C_CAST_P is true, then this direct-initialization is taking
8904 place as part of a static_cast being attempted as part of a C-style
8905 cast. */
8907 tree
8908 perform_direct_initialization_if_possible (tree type,
8909 tree expr,
8910 bool c_cast_p,
8911 tsubst_flags_t complain)
8913 conversion *conv;
8914 void *p;
8916 if (type == error_mark_node || error_operand_p (expr))
8917 return error_mark_node;
8918 /* [dcl.init]
8920 If the destination type is a (possibly cv-qualified) class type:
8922 -- If the initialization is direct-initialization ...,
8923 constructors are considered. ... If no constructor applies, or
8924 the overload resolution is ambiguous, the initialization is
8925 ill-formed. */
8926 if (CLASS_TYPE_P (type))
8928 vec<tree, va_gc> *args = make_tree_vector_single (expr);
8929 expr = build_special_member_call (NULL_TREE, complete_ctor_identifier,
8930 &args, type, LOOKUP_NORMAL, complain);
8931 release_tree_vector (args);
8932 return build_cplus_new (type, expr, complain);
8935 /* Get the high-water mark for the CONVERSION_OBSTACK. */
8936 p = conversion_obstack_alloc (0);
8938 conv = implicit_conversion (type, TREE_TYPE (expr), expr,
8939 c_cast_p,
8940 LOOKUP_NORMAL, complain);
8941 if (!conv || conv->bad_p)
8942 expr = NULL_TREE;
8943 else
8944 expr = convert_like_real (conv, expr, NULL_TREE, 0, 0,
8945 /*issue_conversion_warnings=*/false,
8946 c_cast_p,
8947 complain);
8949 /* Free all the conversions we allocated. */
8950 obstack_free (&conversion_obstack, p);
8952 return expr;
8955 /* When initializing a reference that lasts longer than a full-expression,
8956 this special rule applies:
8958 [class.temporary]
8960 The temporary to which the reference is bound or the temporary
8961 that is the complete object to which the reference is bound
8962 persists for the lifetime of the reference.
8964 The temporaries created during the evaluation of the expression
8965 initializing the reference, except the temporary to which the
8966 reference is bound, are destroyed at the end of the
8967 full-expression in which they are created.
8969 In that case, we store the converted expression into a new
8970 VAR_DECL in a new scope.
8972 However, we want to be careful not to create temporaries when
8973 they are not required. For example, given:
8975 struct B {};
8976 struct D : public B {};
8977 D f();
8978 const B& b = f();
8980 there is no need to copy the return value from "f"; we can just
8981 extend its lifetime. Similarly, given:
8983 struct S {};
8984 struct T { operator S(); };
8985 T t;
8986 const S& s = t;
8988 we can extend the lifetime of the return value of the conversion
8989 operator.
8991 The next several functions are involved in this lifetime extension. */
8993 /* DECL is a VAR_DECL or FIELD_DECL whose type is a REFERENCE_TYPE. The
8994 reference is being bound to a temporary. Create and return a new
8995 VAR_DECL with the indicated TYPE; this variable will store the value to
8996 which the reference is bound. */
8998 tree
8999 make_temporary_var_for_ref_to_temp (tree decl, tree type)
9001 tree var;
9003 /* Create the variable. */
9004 var = create_temporary_var (type);
9006 /* Register the variable. */
9007 if (TREE_CODE (decl) == VAR_DECL
9008 && (TREE_STATIC (decl) || DECL_THREAD_LOCAL_P (decl)))
9010 /* Namespace-scope or local static; give it a mangled name. */
9011 /* FIXME share comdat with decl? */
9012 tree name;
9014 TREE_STATIC (var) = TREE_STATIC (decl);
9015 DECL_TLS_MODEL (var) = DECL_TLS_MODEL (decl);
9016 name = mangle_ref_init_variable (decl);
9017 DECL_NAME (var) = name;
9018 SET_DECL_ASSEMBLER_NAME (var, name);
9019 var = pushdecl_top_level (var);
9021 else
9022 /* Create a new cleanup level if necessary. */
9023 maybe_push_cleanup_level (type);
9025 return var;
9028 /* EXPR is the initializer for a variable DECL of reference or
9029 std::initializer_list type. Create, push and return a new VAR_DECL
9030 for the initializer so that it will live as long as DECL. Any
9031 cleanup for the new variable is returned through CLEANUP, and the
9032 code to initialize the new variable is returned through INITP. */
9034 static tree
9035 set_up_extended_ref_temp (tree decl, tree expr, vec<tree, va_gc> **cleanups,
9036 tree *initp)
9038 tree init;
9039 tree type;
9040 tree var;
9042 /* Create the temporary variable. */
9043 type = TREE_TYPE (expr);
9044 var = make_temporary_var_for_ref_to_temp (decl, type);
9045 layout_decl (var, 0);
9046 /* If the rvalue is the result of a function call it will be
9047 a TARGET_EXPR. If it is some other construct (such as a
9048 member access expression where the underlying object is
9049 itself the result of a function call), turn it into a
9050 TARGET_EXPR here. It is important that EXPR be a
9051 TARGET_EXPR below since otherwise the INIT_EXPR will
9052 attempt to make a bitwise copy of EXPR to initialize
9053 VAR. */
9054 if (TREE_CODE (expr) != TARGET_EXPR)
9055 expr = get_target_expr (expr);
9057 if (TREE_CODE (decl) == FIELD_DECL
9058 && extra_warnings && !TREE_NO_WARNING (decl))
9060 warning (OPT_Wextra, "a temporary bound to %qD only persists "
9061 "until the constructor exits", decl);
9062 TREE_NO_WARNING (decl) = true;
9065 /* Recursively extend temps in this initializer. */
9066 TARGET_EXPR_INITIAL (expr)
9067 = extend_ref_init_temps (decl, TARGET_EXPR_INITIAL (expr), cleanups);
9069 /* Any reference temp has a non-trivial initializer. */
9070 DECL_NONTRIVIALLY_INITIALIZED_P (var) = true;
9072 /* If the initializer is constant, put it in DECL_INITIAL so we get
9073 static initialization and use in constant expressions. */
9074 init = maybe_constant_init (expr);
9075 if (TREE_CONSTANT (init))
9077 if (literal_type_p (type) && CP_TYPE_CONST_NON_VOLATILE_P (type))
9079 /* 5.19 says that a constant expression can include an
9080 lvalue-rvalue conversion applied to "a glvalue of literal type
9081 that refers to a non-volatile temporary object initialized
9082 with a constant expression". Rather than try to communicate
9083 that this VAR_DECL is a temporary, just mark it constexpr.
9085 Currently this is only useful for initializer_list temporaries,
9086 since reference vars can't appear in constant expressions. */
9087 DECL_DECLARED_CONSTEXPR_P (var) = true;
9088 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (var) = true;
9089 TREE_CONSTANT (var) = true;
9091 DECL_INITIAL (var) = init;
9092 init = NULL_TREE;
9094 else
9095 /* Create the INIT_EXPR that will initialize the temporary
9096 variable. */
9097 init = build2 (INIT_EXPR, type, var, expr);
9098 if (at_function_scope_p ())
9100 add_decl_expr (var);
9102 if (TREE_STATIC (var))
9103 init = add_stmt_to_compound (init, register_dtor_fn (var));
9104 else
9106 tree cleanup = cxx_maybe_build_cleanup (var, tf_warning_or_error);
9107 if (cleanup)
9108 vec_safe_push (*cleanups, cleanup);
9111 /* We must be careful to destroy the temporary only
9112 after its initialization has taken place. If the
9113 initialization throws an exception, then the
9114 destructor should not be run. We cannot simply
9115 transform INIT into something like:
9117 (INIT, ({ CLEANUP_STMT; }))
9119 because emit_local_var always treats the
9120 initializer as a full-expression. Thus, the
9121 destructor would run too early; it would run at the
9122 end of initializing the reference variable, rather
9123 than at the end of the block enclosing the
9124 reference variable.
9126 The solution is to pass back a cleanup expression
9127 which the caller is responsible for attaching to
9128 the statement tree. */
9130 else
9132 rest_of_decl_compilation (var, /*toplev=*/1, at_eof);
9133 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
9135 if (DECL_THREAD_LOCAL_P (var))
9136 tls_aggregates = tree_cons (NULL_TREE, var,
9137 tls_aggregates);
9138 else
9139 static_aggregates = tree_cons (NULL_TREE, var,
9140 static_aggregates);
9144 *initp = init;
9145 return var;
9148 /* Convert EXPR to the indicated reference TYPE, in a way suitable for
9149 initializing a variable of that TYPE. */
9151 tree
9152 initialize_reference (tree type, tree expr,
9153 int flags, tsubst_flags_t complain)
9155 conversion *conv;
9156 void *p;
9157 location_t loc = EXPR_LOC_OR_HERE (expr);
9159 if (type == error_mark_node || error_operand_p (expr))
9160 return error_mark_node;
9162 /* Get the high-water mark for the CONVERSION_OBSTACK. */
9163 p = conversion_obstack_alloc (0);
9165 conv = reference_binding (type, TREE_TYPE (expr), expr, /*c_cast_p=*/false,
9166 flags, complain);
9167 if (!conv || conv->bad_p)
9169 if (complain & tf_error)
9171 if (conv)
9172 convert_like (conv, expr, complain);
9173 else if (!CP_TYPE_CONST_P (TREE_TYPE (type))
9174 && !TYPE_REF_IS_RVALUE (type)
9175 && !real_lvalue_p (expr))
9176 error_at (loc, "invalid initialization of non-const reference of "
9177 "type %qT from an rvalue of type %qT",
9178 type, TREE_TYPE (expr));
9179 else
9180 error_at (loc, "invalid initialization of reference of type "
9181 "%qT from expression of type %qT", type,
9182 TREE_TYPE (expr));
9184 return error_mark_node;
9187 gcc_assert (conv->kind == ck_ref_bind);
9189 /* Perform the conversion. */
9190 expr = convert_like (conv, expr, complain);
9192 /* Free all the conversions we allocated. */
9193 obstack_free (&conversion_obstack, p);
9195 return expr;
9198 /* Subroutine of extend_ref_init_temps. Possibly extend one initializer,
9199 which is bound either to a reference or a std::initializer_list. */
9201 static tree
9202 extend_ref_init_temps_1 (tree decl, tree init, vec<tree, va_gc> **cleanups)
9204 tree sub = init;
9205 tree *p;
9206 STRIP_NOPS (sub);
9207 if (TREE_CODE (sub) == COMPOUND_EXPR)
9209 TREE_OPERAND (sub, 1)
9210 = extend_ref_init_temps_1 (decl, TREE_OPERAND (sub, 1), cleanups);
9211 return init;
9213 if (TREE_CODE (sub) != ADDR_EXPR)
9214 return init;
9215 /* Deal with binding to a subobject. */
9216 for (p = &TREE_OPERAND (sub, 0); TREE_CODE (*p) == COMPONENT_REF; )
9217 p = &TREE_OPERAND (*p, 0);
9218 if (TREE_CODE (*p) == TARGET_EXPR)
9220 tree subinit = NULL_TREE;
9221 *p = set_up_extended_ref_temp (decl, *p, cleanups, &subinit);
9222 if (subinit)
9223 init = build2 (COMPOUND_EXPR, TREE_TYPE (init), subinit, init);
9224 recompute_tree_invariant_for_addr_expr (sub);
9226 return init;
9229 /* INIT is part of the initializer for DECL. If there are any
9230 reference or initializer lists being initialized, extend their
9231 lifetime to match that of DECL. */
9233 tree
9234 extend_ref_init_temps (tree decl, tree init, vec<tree, va_gc> **cleanups)
9236 tree type = TREE_TYPE (init);
9237 if (processing_template_decl)
9238 return init;
9239 if (TREE_CODE (type) == REFERENCE_TYPE)
9240 init = extend_ref_init_temps_1 (decl, init, cleanups);
9241 else if (is_std_init_list (type))
9243 /* The temporary array underlying a std::initializer_list
9244 is handled like a reference temporary. */
9245 tree ctor = init;
9246 if (TREE_CODE (ctor) == TARGET_EXPR)
9247 ctor = TARGET_EXPR_INITIAL (ctor);
9248 if (TREE_CODE (ctor) == CONSTRUCTOR)
9250 tree array = CONSTRUCTOR_ELT (ctor, 0)->value;
9251 array = extend_ref_init_temps_1 (decl, array, cleanups);
9252 CONSTRUCTOR_ELT (ctor, 0)->value = array;
9255 else if (TREE_CODE (init) == CONSTRUCTOR)
9257 unsigned i;
9258 constructor_elt *p;
9259 vec<constructor_elt, va_gc> *elts = CONSTRUCTOR_ELTS (init);
9260 FOR_EACH_VEC_SAFE_ELT (elts, i, p)
9261 p->value = extend_ref_init_temps (decl, p->value, cleanups);
9264 return init;
9267 /* Returns true iff an initializer for TYPE could contain temporaries that
9268 need to be extended because they are bound to references or
9269 std::initializer_list. */
9271 bool
9272 type_has_extended_temps (tree type)
9274 type = strip_array_types (type);
9275 if (TREE_CODE (type) == REFERENCE_TYPE)
9276 return true;
9277 if (CLASS_TYPE_P (type))
9279 if (is_std_init_list (type))
9280 return true;
9281 for (tree f = next_initializable_field (TYPE_FIELDS (type));
9282 f; f = next_initializable_field (DECL_CHAIN (f)))
9283 if (type_has_extended_temps (TREE_TYPE (f)))
9284 return true;
9286 return false;
9289 /* Returns true iff TYPE is some variant of std::initializer_list. */
9291 bool
9292 is_std_init_list (tree type)
9294 /* Look through typedefs. */
9295 if (!TYPE_P (type))
9296 return false;
9297 type = TYPE_MAIN_VARIANT (type);
9298 return (CLASS_TYPE_P (type)
9299 && CP_TYPE_CONTEXT (type) == std_node
9300 && strcmp (TYPE_NAME_STRING (type), "initializer_list") == 0);
9303 /* Returns true iff DECL is a list constructor: i.e. a constructor which
9304 will accept an argument list of a single std::initializer_list<T>. */
9306 bool
9307 is_list_ctor (tree decl)
9309 tree args = FUNCTION_FIRST_USER_PARMTYPE (decl);
9310 tree arg;
9312 if (!args || args == void_list_node)
9313 return false;
9315 arg = non_reference (TREE_VALUE (args));
9316 if (!is_std_init_list (arg))
9317 return false;
9319 args = TREE_CHAIN (args);
9321 if (args && args != void_list_node && !TREE_PURPOSE (args))
9322 /* There are more non-defaulted parms. */
9323 return false;
9325 return true;
9328 #include "gt-cp-call.h"