* call.c (extend_ref_init_temps_1): Recompute TREE_CONSTANT for
[official-gcc.git] / gcc / cp / call.c
blobbba5d9fdba542f2d23f670b76e38d79ac8814d59
1 /* Functions related to invoking methods and overloaded functions.
2 Copyright (C) 1987, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
4 2010, 2011, 2012
5 Free Software Foundation, Inc.
6 Contributed by Michael Tiemann (tiemann@cygnus.com) and
7 modified by Brendan Kehoe (brendan@cygnus.com).
9 This file is part of GCC.
11 GCC is free software; you can redistribute it and/or modify
12 it under the terms of the GNU General Public License as published by
13 the Free Software Foundation; either version 3, or (at your option)
14 any later version.
16 GCC is distributed in the hope that it will be useful,
17 but WITHOUT ANY WARRANTY; without even the implied warranty of
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 GNU General Public License for more details.
21 You should have received a copy of the GNU General Public License
22 along with GCC; see the file COPYING3. If not see
23 <http://www.gnu.org/licenses/>. */
26 /* High-level class interface. */
28 #include "config.h"
29 #include "system.h"
30 #include "coretypes.h"
31 #include "tm.h"
32 #include "tree.h"
33 #include "cp-tree.h"
34 #include "flags.h"
35 #include "toplev.h"
36 #include "diagnostic-core.h"
37 #include "intl.h"
38 #include "target.h"
39 #include "convert.h"
40 #include "langhooks.h"
41 #include "c-family/c-objc.h"
42 #include "timevar.h"
43 #include "cgraph.h"
45 /* The various kinds of conversion. */
47 typedef enum conversion_kind {
48 ck_identity,
49 ck_lvalue,
50 ck_qual,
51 ck_std,
52 ck_ptr,
53 ck_pmem,
54 ck_base,
55 ck_ref_bind,
56 ck_user,
57 ck_ambig,
58 ck_list,
59 ck_aggr,
60 ck_rvalue
61 } conversion_kind;
63 /* The rank of the conversion. Order of the enumerals matters; better
64 conversions should come earlier in the list. */
66 typedef enum conversion_rank {
67 cr_identity,
68 cr_exact,
69 cr_promotion,
70 cr_std,
71 cr_pbool,
72 cr_user,
73 cr_ellipsis,
74 cr_bad
75 } conversion_rank;
77 /* An implicit conversion sequence, in the sense of [over.best.ics].
78 The first conversion to be performed is at the end of the chain.
79 That conversion is always a cr_identity conversion. */
81 typedef struct conversion conversion;
82 struct conversion {
83 /* The kind of conversion represented by this step. */
84 conversion_kind kind;
85 /* The rank of this conversion. */
86 conversion_rank rank;
87 BOOL_BITFIELD user_conv_p : 1;
88 BOOL_BITFIELD ellipsis_p : 1;
89 BOOL_BITFIELD this_p : 1;
90 /* True if this conversion would be permitted with a bending of
91 language standards, e.g. disregarding pointer qualifiers or
92 converting integers to pointers. */
93 BOOL_BITFIELD bad_p : 1;
94 /* If KIND is ck_ref_bind ck_base_conv, true to indicate that a
95 temporary should be created to hold the result of the
96 conversion. */
97 BOOL_BITFIELD need_temporary_p : 1;
98 /* If KIND is ck_ptr or ck_pmem, true to indicate that a conversion
99 from a pointer-to-derived to pointer-to-base is being performed. */
100 BOOL_BITFIELD base_p : 1;
101 /* If KIND is ck_ref_bind, true when either an lvalue reference is
102 being bound to an lvalue expression or an rvalue reference is
103 being bound to an rvalue expression. If KIND is ck_rvalue,
104 true when we should treat an lvalue as an rvalue (12.8p33). If
105 KIND is ck_base, always false. */
106 BOOL_BITFIELD rvaluedness_matches_p: 1;
107 BOOL_BITFIELD check_narrowing: 1;
108 /* The type of the expression resulting from the conversion. */
109 tree type;
110 union {
111 /* The next conversion in the chain. Since the conversions are
112 arranged from outermost to innermost, the NEXT conversion will
113 actually be performed before this conversion. This variant is
114 used only when KIND is neither ck_identity, ck_ambig nor
115 ck_list. Please use the next_conversion function instead
116 of using this field directly. */
117 conversion *next;
118 /* The expression at the beginning of the conversion chain. This
119 variant is used only if KIND is ck_identity or ck_ambig. */
120 tree expr;
121 /* The array of conversions for an initializer_list, so this
122 variant is used only when KIN D is ck_list. */
123 conversion **list;
124 } u;
125 /* The function candidate corresponding to this conversion
126 sequence. This field is only used if KIND is ck_user. */
127 struct z_candidate *cand;
130 #define CONVERSION_RANK(NODE) \
131 ((NODE)->bad_p ? cr_bad \
132 : (NODE)->ellipsis_p ? cr_ellipsis \
133 : (NODE)->user_conv_p ? cr_user \
134 : (NODE)->rank)
136 #define BAD_CONVERSION_RANK(NODE) \
137 ((NODE)->ellipsis_p ? cr_ellipsis \
138 : (NODE)->user_conv_p ? cr_user \
139 : (NODE)->rank)
141 static struct obstack conversion_obstack;
142 static bool conversion_obstack_initialized;
143 struct rejection_reason;
145 static struct z_candidate * tourney (struct z_candidate *, tsubst_flags_t);
146 static int equal_functions (tree, tree);
147 static int joust (struct z_candidate *, struct z_candidate *, bool,
148 tsubst_flags_t);
149 static int compare_ics (conversion *, conversion *);
150 static tree build_over_call (struct z_candidate *, int, tsubst_flags_t);
151 static tree build_java_interface_fn_ref (tree, tree);
152 #define convert_like(CONV, EXPR, COMPLAIN) \
153 convert_like_real ((CONV), (EXPR), NULL_TREE, 0, 0, \
154 /*issue_conversion_warnings=*/true, \
155 /*c_cast_p=*/false, (COMPLAIN))
156 #define convert_like_with_context(CONV, EXPR, FN, ARGNO, COMPLAIN ) \
157 convert_like_real ((CONV), (EXPR), (FN), (ARGNO), 0, \
158 /*issue_conversion_warnings=*/true, \
159 /*c_cast_p=*/false, (COMPLAIN))
160 static tree convert_like_real (conversion *, tree, tree, int, int, bool,
161 bool, tsubst_flags_t);
162 static void op_error (location_t, enum tree_code, enum tree_code, tree,
163 tree, tree, bool);
164 static struct z_candidate *build_user_type_conversion_1 (tree, tree, int,
165 tsubst_flags_t);
166 static void print_z_candidate (location_t, const char *, struct z_candidate *);
167 static void print_z_candidates (location_t, struct z_candidate *);
168 static tree build_this (tree);
169 static struct z_candidate *splice_viable (struct z_candidate *, bool, bool *);
170 static bool any_strictly_viable (struct z_candidate *);
171 static struct z_candidate *add_template_candidate
172 (struct z_candidate **, tree, tree, tree, tree, const vec<tree, va_gc> *,
173 tree, tree, tree, int, unification_kind_t, tsubst_flags_t);
174 static struct z_candidate *add_template_candidate_real
175 (struct z_candidate **, tree, tree, tree, tree, const vec<tree, va_gc> *,
176 tree, tree, tree, int, tree, unification_kind_t, tsubst_flags_t);
177 static struct z_candidate *add_template_conv_candidate
178 (struct z_candidate **, tree, tree, tree, const vec<tree, va_gc> *,
179 tree, tree, tree, tsubst_flags_t);
180 static void add_builtin_candidates
181 (struct z_candidate **, enum tree_code, enum tree_code,
182 tree, tree *, int, tsubst_flags_t);
183 static void add_builtin_candidate
184 (struct z_candidate **, enum tree_code, enum tree_code,
185 tree, tree, tree, tree *, tree *, int, tsubst_flags_t);
186 static bool is_complete (tree);
187 static void build_builtin_candidate
188 (struct z_candidate **, tree, tree, tree, tree *, tree *,
189 int, tsubst_flags_t);
190 static struct z_candidate *add_conv_candidate
191 (struct z_candidate **, tree, tree, tree, const vec<tree, va_gc> *, tree,
192 tree, tsubst_flags_t);
193 static struct z_candidate *add_function_candidate
194 (struct z_candidate **, tree, tree, tree, const vec<tree, va_gc> *, tree,
195 tree, int, tsubst_flags_t);
196 static conversion *implicit_conversion (tree, tree, tree, bool, int,
197 tsubst_flags_t);
198 static conversion *standard_conversion (tree, tree, tree, bool, int);
199 static conversion *reference_binding (tree, tree, tree, bool, int,
200 tsubst_flags_t);
201 static conversion *build_conv (conversion_kind, tree, conversion *);
202 static conversion *build_list_conv (tree, tree, int, tsubst_flags_t);
203 static conversion *next_conversion (conversion *);
204 static bool is_subseq (conversion *, conversion *);
205 static conversion *maybe_handle_ref_bind (conversion **);
206 static void maybe_handle_implicit_object (conversion **);
207 static struct z_candidate *add_candidate
208 (struct z_candidate **, tree, tree, const vec<tree, va_gc> *, size_t,
209 conversion **, tree, tree, int, struct rejection_reason *);
210 static tree source_type (conversion *);
211 static void add_warning (struct z_candidate *, struct z_candidate *);
212 static bool reference_compatible_p (tree, tree);
213 static conversion *direct_reference_binding (tree, conversion *);
214 static bool promoted_arithmetic_type_p (tree);
215 static conversion *conditional_conversion (tree, tree, tsubst_flags_t);
216 static char *name_as_c_string (tree, tree, bool *);
217 static tree prep_operand (tree);
218 static void add_candidates (tree, tree, const vec<tree, va_gc> *, tree, tree,
219 bool, tree, tree, int, struct z_candidate **,
220 tsubst_flags_t);
221 static conversion *merge_conversion_sequences (conversion *, conversion *);
222 static bool magic_varargs_p (tree);
223 static tree build_temp (tree, tree, int, diagnostic_t *, tsubst_flags_t);
225 /* Returns nonzero iff the destructor name specified in NAME matches BASETYPE.
226 NAME can take many forms... */
228 bool
229 check_dtor_name (tree basetype, tree name)
231 /* Just accept something we've already complained about. */
232 if (name == error_mark_node)
233 return true;
235 if (TREE_CODE (name) == TYPE_DECL)
236 name = TREE_TYPE (name);
237 else if (TYPE_P (name))
238 /* OK */;
239 else if (TREE_CODE (name) == IDENTIFIER_NODE)
241 if ((MAYBE_CLASS_TYPE_P (basetype)
242 && name == constructor_name (basetype))
243 || (TREE_CODE (basetype) == ENUMERAL_TYPE
244 && name == TYPE_IDENTIFIER (basetype)))
245 return true;
246 else
247 name = get_type_value (name);
249 else
251 /* In the case of:
253 template <class T> struct S { ~S(); };
254 int i;
255 i.~S();
257 NAME will be a class template. */
258 gcc_assert (DECL_CLASS_TEMPLATE_P (name));
259 return false;
262 if (!name || name == error_mark_node)
263 return false;
264 return same_type_p (TYPE_MAIN_VARIANT (basetype), TYPE_MAIN_VARIANT (name));
267 /* We want the address of a function or method. We avoid creating a
268 pointer-to-member function. */
270 tree
271 build_addr_func (tree function, tsubst_flags_t complain)
273 tree type = TREE_TYPE (function);
275 /* We have to do these by hand to avoid real pointer to member
276 functions. */
277 if (TREE_CODE (type) == METHOD_TYPE)
279 if (TREE_CODE (function) == OFFSET_REF)
281 tree object = build_address (TREE_OPERAND (function, 0));
282 return get_member_function_from_ptrfunc (&object,
283 TREE_OPERAND (function, 1),
284 complain);
286 function = build_address (function);
288 else
289 function = decay_conversion (function, complain);
291 return function;
294 /* Build a CALL_EXPR, we can handle FUNCTION_TYPEs, METHOD_TYPEs, or
295 POINTER_TYPE to those. Note, pointer to member function types
296 (TYPE_PTRMEMFUNC_P) must be handled by our callers. There are
297 two variants. build_call_a is the primitive taking an array of
298 arguments, while build_call_n is a wrapper that handles varargs. */
300 tree
301 build_call_n (tree function, int n, ...)
303 if (n == 0)
304 return build_call_a (function, 0, NULL);
305 else
307 tree *argarray = XALLOCAVEC (tree, n);
308 va_list ap;
309 int i;
311 va_start (ap, n);
312 for (i = 0; i < n; i++)
313 argarray[i] = va_arg (ap, tree);
314 va_end (ap);
315 return build_call_a (function, n, argarray);
319 /* Update various flags in cfun and the call itself based on what is being
320 called. Split out of build_call_a so that bot_manip can use it too. */
322 void
323 set_flags_from_callee (tree call)
325 int nothrow;
326 tree decl = get_callee_fndecl (call);
328 /* We check both the decl and the type; a function may be known not to
329 throw without being declared throw(). */
330 nothrow = ((decl && TREE_NOTHROW (decl))
331 || TYPE_NOTHROW_P (TREE_TYPE (TREE_TYPE (CALL_EXPR_FN (call)))));
333 if (!nothrow && at_function_scope_p () && cfun && cp_function_chain)
334 cp_function_chain->can_throw = 1;
336 if (decl && TREE_THIS_VOLATILE (decl) && cfun && cp_function_chain)
337 current_function_returns_abnormally = 1;
339 TREE_NOTHROW (call) = nothrow;
342 tree
343 build_call_a (tree function, int n, tree *argarray)
345 tree decl;
346 tree result_type;
347 tree fntype;
348 int i;
350 function = build_addr_func (function, tf_warning_or_error);
352 gcc_assert (TYPE_PTR_P (TREE_TYPE (function)));
353 fntype = TREE_TYPE (TREE_TYPE (function));
354 gcc_assert (TREE_CODE (fntype) == FUNCTION_TYPE
355 || TREE_CODE (fntype) == METHOD_TYPE);
356 result_type = TREE_TYPE (fntype);
357 /* An rvalue has no cv-qualifiers. */
358 if (SCALAR_TYPE_P (result_type) || VOID_TYPE_P (result_type))
359 result_type = cv_unqualified (result_type);
361 function = build_call_array_loc (input_location,
362 result_type, function, n, argarray);
363 set_flags_from_callee (function);
365 decl = get_callee_fndecl (function);
367 if (decl && !TREE_USED (decl))
369 /* We invoke build_call directly for several library
370 functions. These may have been declared normally if
371 we're building libgcc, so we can't just check
372 DECL_ARTIFICIAL. */
373 gcc_assert (DECL_ARTIFICIAL (decl)
374 || !strncmp (IDENTIFIER_POINTER (DECL_NAME (decl)),
375 "__", 2));
376 mark_used (decl);
379 if (decl && TREE_DEPRECATED (decl))
380 warn_deprecated_use (decl, NULL_TREE);
381 require_complete_eh_spec_types (fntype, decl);
383 TREE_HAS_CONSTRUCTOR (function) = (decl && DECL_CONSTRUCTOR_P (decl));
385 /* Don't pass empty class objects by value. This is useful
386 for tags in STL, which are used to control overload resolution.
387 We don't need to handle other cases of copying empty classes. */
388 if (! decl || ! DECL_BUILT_IN (decl))
389 for (i = 0; i < n; i++)
391 tree arg = CALL_EXPR_ARG (function, i);
392 if (is_empty_class (TREE_TYPE (arg))
393 && ! TREE_ADDRESSABLE (TREE_TYPE (arg)))
395 tree t = build0 (EMPTY_CLASS_EXPR, TREE_TYPE (arg));
396 arg = build2 (COMPOUND_EXPR, TREE_TYPE (t), arg, t);
397 CALL_EXPR_ARG (function, i) = arg;
401 return function;
404 /* Build something of the form ptr->method (args)
405 or object.method (args). This can also build
406 calls to constructors, and find friends.
408 Member functions always take their class variable
409 as a pointer.
411 INSTANCE is a class instance.
413 NAME is the name of the method desired, usually an IDENTIFIER_NODE.
415 PARMS help to figure out what that NAME really refers to.
417 BASETYPE_PATH, if non-NULL, contains a chain from the type of INSTANCE
418 down to the real instance type to use for access checking. We need this
419 information to get protected accesses correct.
421 FLAGS is the logical disjunction of zero or more LOOKUP_
422 flags. See cp-tree.h for more info.
424 If this is all OK, calls build_function_call with the resolved
425 member function.
427 This function must also handle being called to perform
428 initialization, promotion/coercion of arguments, and
429 instantiation of default parameters.
431 Note that NAME may refer to an instance variable name. If
432 `operator()()' is defined for the type of that field, then we return
433 that result. */
435 /* New overloading code. */
437 typedef struct z_candidate z_candidate;
439 typedef struct candidate_warning candidate_warning;
440 struct candidate_warning {
441 z_candidate *loser;
442 candidate_warning *next;
445 /* Information for providing diagnostics about why overloading failed. */
447 enum rejection_reason_code {
448 rr_none,
449 rr_arity,
450 rr_explicit_conversion,
451 rr_template_conversion,
452 rr_arg_conversion,
453 rr_bad_arg_conversion,
454 rr_template_unification,
455 rr_invalid_copy
458 struct conversion_info {
459 /* The index of the argument, 0-based. */
460 int n_arg;
461 /* The type of the actual argument. */
462 tree from_type;
463 /* The type of the formal argument. */
464 tree to_type;
467 struct rejection_reason {
468 enum rejection_reason_code code;
469 union {
470 /* Information about an arity mismatch. */
471 struct {
472 /* The expected number of arguments. */
473 int expected;
474 /* The actual number of arguments in the call. */
475 int actual;
476 /* Whether the call was a varargs call. */
477 bool call_varargs_p;
478 } arity;
479 /* Information about an argument conversion mismatch. */
480 struct conversion_info conversion;
481 /* Same, but for bad argument conversions. */
482 struct conversion_info bad_conversion;
483 /* Information about template unification failures. These are the
484 parameters passed to fn_type_unification. */
485 struct {
486 tree tmpl;
487 tree explicit_targs;
488 int num_targs;
489 const tree *args;
490 unsigned int nargs;
491 tree return_type;
492 unification_kind_t strict;
493 int flags;
494 } template_unification;
495 /* Information about template instantiation failures. These are the
496 parameters passed to instantiate_template. */
497 struct {
498 tree tmpl;
499 tree targs;
500 } template_instantiation;
501 } u;
504 struct z_candidate {
505 /* The FUNCTION_DECL that will be called if this candidate is
506 selected by overload resolution. */
507 tree fn;
508 /* If not NULL_TREE, the first argument to use when calling this
509 function. */
510 tree first_arg;
511 /* The rest of the arguments to use when calling this function. If
512 there are no further arguments this may be NULL or it may be an
513 empty vector. */
514 const vec<tree, va_gc> *args;
515 /* The implicit conversion sequences for each of the arguments to
516 FN. */
517 conversion **convs;
518 /* The number of implicit conversion sequences. */
519 size_t num_convs;
520 /* If FN is a user-defined conversion, the standard conversion
521 sequence from the type returned by FN to the desired destination
522 type. */
523 conversion *second_conv;
524 int viable;
525 struct rejection_reason *reason;
526 /* If FN is a member function, the binfo indicating the path used to
527 qualify the name of FN at the call site. This path is used to
528 determine whether or not FN is accessible if it is selected by
529 overload resolution. The DECL_CONTEXT of FN will always be a
530 (possibly improper) base of this binfo. */
531 tree access_path;
532 /* If FN is a non-static member function, the binfo indicating the
533 subobject to which the `this' pointer should be converted if FN
534 is selected by overload resolution. The type pointed to by
535 the `this' pointer must correspond to the most derived class
536 indicated by the CONVERSION_PATH. */
537 tree conversion_path;
538 tree template_decl;
539 tree explicit_targs;
540 candidate_warning *warnings;
541 z_candidate *next;
544 /* Returns true iff T is a null pointer constant in the sense of
545 [conv.ptr]. */
547 bool
548 null_ptr_cst_p (tree t)
550 /* [conv.ptr]
552 A null pointer constant is an integral constant expression
553 (_expr.const_) rvalue of integer type that evaluates to zero or
554 an rvalue of type std::nullptr_t. */
555 if (NULLPTR_TYPE_P (TREE_TYPE (t)))
556 return true;
557 if (CP_INTEGRAL_TYPE_P (TREE_TYPE (t)))
559 /* Core issue 903 says only literal 0 is a null pointer constant. */
560 if (cxx_dialect < cxx0x)
561 t = maybe_constant_value (t);
562 STRIP_NOPS (t);
563 if (integer_zerop (t) && !TREE_OVERFLOW (t))
564 return true;
566 return false;
569 /* Returns true iff T is a null member pointer value (4.11). */
571 bool
572 null_member_pointer_value_p (tree t)
574 tree type = TREE_TYPE (t);
575 if (!type)
576 return false;
577 else if (TYPE_PTRMEMFUNC_P (type))
578 return (TREE_CODE (t) == CONSTRUCTOR
579 && integer_zerop (CONSTRUCTOR_ELT (t, 0)->value));
580 else if (TYPE_PTRDATAMEM_P (type))
581 return integer_all_onesp (t);
582 else
583 return false;
586 /* Returns nonzero if PARMLIST consists of only default parms,
587 ellipsis, and/or undeduced parameter packs. */
589 bool
590 sufficient_parms_p (const_tree parmlist)
592 for (; parmlist && parmlist != void_list_node;
593 parmlist = TREE_CHAIN (parmlist))
594 if (!TREE_PURPOSE (parmlist)
595 && !PACK_EXPANSION_P (TREE_VALUE (parmlist)))
596 return false;
597 return true;
600 /* Allocate N bytes of memory from the conversion obstack. The memory
601 is zeroed before being returned. */
603 static void *
604 conversion_obstack_alloc (size_t n)
606 void *p;
607 if (!conversion_obstack_initialized)
609 gcc_obstack_init (&conversion_obstack);
610 conversion_obstack_initialized = true;
612 p = obstack_alloc (&conversion_obstack, n);
613 memset (p, 0, n);
614 return p;
617 /* Allocate rejection reasons. */
619 static struct rejection_reason *
620 alloc_rejection (enum rejection_reason_code code)
622 struct rejection_reason *p;
623 p = (struct rejection_reason *) conversion_obstack_alloc (sizeof *p);
624 p->code = code;
625 return p;
628 static struct rejection_reason *
629 arity_rejection (tree first_arg, int expected, int actual)
631 struct rejection_reason *r = alloc_rejection (rr_arity);
632 int adjust = first_arg != NULL_TREE;
633 r->u.arity.expected = expected - adjust;
634 r->u.arity.actual = actual - adjust;
635 return r;
638 static struct rejection_reason *
639 arg_conversion_rejection (tree first_arg, int n_arg, tree from, tree to)
641 struct rejection_reason *r = alloc_rejection (rr_arg_conversion);
642 int adjust = first_arg != NULL_TREE;
643 r->u.conversion.n_arg = n_arg - adjust;
644 r->u.conversion.from_type = from;
645 r->u.conversion.to_type = to;
646 return r;
649 static struct rejection_reason *
650 bad_arg_conversion_rejection (tree first_arg, int n_arg, tree from, tree to)
652 struct rejection_reason *r = alloc_rejection (rr_bad_arg_conversion);
653 int adjust = first_arg != NULL_TREE;
654 r->u.bad_conversion.n_arg = n_arg - adjust;
655 r->u.bad_conversion.from_type = from;
656 r->u.bad_conversion.to_type = to;
657 return r;
660 static struct rejection_reason *
661 explicit_conversion_rejection (tree from, tree to)
663 struct rejection_reason *r = alloc_rejection (rr_explicit_conversion);
664 r->u.conversion.n_arg = 0;
665 r->u.conversion.from_type = from;
666 r->u.conversion.to_type = to;
667 return r;
670 static struct rejection_reason *
671 template_conversion_rejection (tree from, tree to)
673 struct rejection_reason *r = alloc_rejection (rr_template_conversion);
674 r->u.conversion.n_arg = 0;
675 r->u.conversion.from_type = from;
676 r->u.conversion.to_type = to;
677 return r;
680 static struct rejection_reason *
681 template_unification_rejection (tree tmpl, tree explicit_targs, tree targs,
682 const tree *args, unsigned int nargs,
683 tree return_type, unification_kind_t strict,
684 int flags)
686 size_t args_n_bytes = sizeof (*args) * nargs;
687 tree *args1 = (tree *) conversion_obstack_alloc (args_n_bytes);
688 struct rejection_reason *r = alloc_rejection (rr_template_unification);
689 r->u.template_unification.tmpl = tmpl;
690 r->u.template_unification.explicit_targs = explicit_targs;
691 r->u.template_unification.num_targs = TREE_VEC_LENGTH (targs);
692 /* Copy args to our own storage. */
693 memcpy (args1, args, args_n_bytes);
694 r->u.template_unification.args = args1;
695 r->u.template_unification.nargs = nargs;
696 r->u.template_unification.return_type = return_type;
697 r->u.template_unification.strict = strict;
698 r->u.template_unification.flags = flags;
699 return r;
702 static struct rejection_reason *
703 template_unification_error_rejection (void)
705 return alloc_rejection (rr_template_unification);
708 static struct rejection_reason *
709 invalid_copy_with_fn_template_rejection (void)
711 struct rejection_reason *r = alloc_rejection (rr_invalid_copy);
712 return r;
715 /* Dynamically allocate a conversion. */
717 static conversion *
718 alloc_conversion (conversion_kind kind)
720 conversion *c;
721 c = (conversion *) conversion_obstack_alloc (sizeof (conversion));
722 c->kind = kind;
723 return c;
726 #ifdef ENABLE_CHECKING
728 /* Make sure that all memory on the conversion obstack has been
729 freed. */
731 void
732 validate_conversion_obstack (void)
734 if (conversion_obstack_initialized)
735 gcc_assert ((obstack_next_free (&conversion_obstack)
736 == obstack_base (&conversion_obstack)));
739 #endif /* ENABLE_CHECKING */
741 /* Dynamically allocate an array of N conversions. */
743 static conversion **
744 alloc_conversions (size_t n)
746 return (conversion **) conversion_obstack_alloc (n * sizeof (conversion *));
749 static conversion *
750 build_conv (conversion_kind code, tree type, conversion *from)
752 conversion *t;
753 conversion_rank rank = CONVERSION_RANK (from);
755 /* Note that the caller is responsible for filling in t->cand for
756 user-defined conversions. */
757 t = alloc_conversion (code);
758 t->type = type;
759 t->u.next = from;
761 switch (code)
763 case ck_ptr:
764 case ck_pmem:
765 case ck_base:
766 case ck_std:
767 if (rank < cr_std)
768 rank = cr_std;
769 break;
771 case ck_qual:
772 if (rank < cr_exact)
773 rank = cr_exact;
774 break;
776 default:
777 break;
779 t->rank = rank;
780 t->user_conv_p = (code == ck_user || from->user_conv_p);
781 t->bad_p = from->bad_p;
782 t->base_p = false;
783 return t;
786 /* Represent a conversion from CTOR, a braced-init-list, to TYPE, a
787 specialization of std::initializer_list<T>, if such a conversion is
788 possible. */
790 static conversion *
791 build_list_conv (tree type, tree ctor, int flags, tsubst_flags_t complain)
793 tree elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (type), 0);
794 unsigned len = CONSTRUCTOR_NELTS (ctor);
795 conversion **subconvs = alloc_conversions (len);
796 conversion *t;
797 unsigned i;
798 tree val;
800 /* Within a list-initialization we can have more user-defined
801 conversions. */
802 flags &= ~LOOKUP_NO_CONVERSION;
803 /* But no narrowing conversions. */
804 flags |= LOOKUP_NO_NARROWING;
806 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor), i, val)
808 conversion *sub
809 = implicit_conversion (elttype, TREE_TYPE (val), val,
810 false, flags, complain);
811 if (sub == NULL)
812 return NULL;
814 subconvs[i] = sub;
817 t = alloc_conversion (ck_list);
818 t->type = type;
819 t->u.list = subconvs;
820 t->rank = cr_exact;
822 for (i = 0; i < len; ++i)
824 conversion *sub = subconvs[i];
825 if (sub->rank > t->rank)
826 t->rank = sub->rank;
827 if (sub->user_conv_p)
828 t->user_conv_p = true;
829 if (sub->bad_p)
830 t->bad_p = true;
833 return t;
836 /* Return the next conversion of the conversion chain (if applicable),
837 or NULL otherwise. Please use this function instead of directly
838 accessing fields of struct conversion. */
840 static conversion *
841 next_conversion (conversion *conv)
843 if (conv == NULL
844 || conv->kind == ck_identity
845 || conv->kind == ck_ambig
846 || conv->kind == ck_list)
847 return NULL;
848 return conv->u.next;
851 /* Subroutine of build_aggr_conv: check whether CTOR, a braced-init-list,
852 is a valid aggregate initializer for array type ATYPE. */
854 static bool
855 can_convert_array (tree atype, tree ctor, int flags, tsubst_flags_t complain)
857 unsigned i;
858 tree elttype = TREE_TYPE (atype);
859 for (i = 0; i < CONSTRUCTOR_NELTS (ctor); ++i)
861 tree val = CONSTRUCTOR_ELT (ctor, i)->value;
862 bool ok;
863 if (TREE_CODE (elttype) == ARRAY_TYPE
864 && TREE_CODE (val) == CONSTRUCTOR)
865 ok = can_convert_array (elttype, val, flags, complain);
866 else
867 ok = can_convert_arg (elttype, TREE_TYPE (val), val, flags,
868 complain);
869 if (!ok)
870 return false;
872 return true;
875 /* Represent a conversion from CTOR, a braced-init-list, to TYPE, an
876 aggregate class, if such a conversion is possible. */
878 static conversion *
879 build_aggr_conv (tree type, tree ctor, int flags, tsubst_flags_t complain)
881 unsigned HOST_WIDE_INT i = 0;
882 conversion *c;
883 tree field = next_initializable_field (TYPE_FIELDS (type));
884 tree empty_ctor = NULL_TREE;
886 ctor = reshape_init (type, ctor, tf_none);
887 if (ctor == error_mark_node)
888 return NULL;
890 for (; field; field = next_initializable_field (DECL_CHAIN (field)))
892 tree ftype = TREE_TYPE (field);
893 tree val;
894 bool ok;
896 if (i < CONSTRUCTOR_NELTS (ctor))
897 val = CONSTRUCTOR_ELT (ctor, i)->value;
898 else
900 if (empty_ctor == NULL_TREE)
901 empty_ctor = build_constructor (init_list_type_node, NULL);
902 val = empty_ctor;
904 ++i;
906 if (TREE_CODE (ftype) == ARRAY_TYPE
907 && TREE_CODE (val) == CONSTRUCTOR)
908 ok = can_convert_array (ftype, val, flags, complain);
909 else
910 ok = can_convert_arg (ftype, TREE_TYPE (val), val, flags,
911 complain);
913 if (!ok)
914 return NULL;
916 if (TREE_CODE (type) == UNION_TYPE)
917 break;
920 if (i < CONSTRUCTOR_NELTS (ctor))
921 return NULL;
923 c = alloc_conversion (ck_aggr);
924 c->type = type;
925 c->rank = cr_exact;
926 c->user_conv_p = true;
927 c->u.next = NULL;
928 return c;
931 /* Represent a conversion from CTOR, a braced-init-list, to TYPE, an
932 array type, if such a conversion is possible. */
934 static conversion *
935 build_array_conv (tree type, tree ctor, int flags, tsubst_flags_t complain)
937 conversion *c;
938 unsigned HOST_WIDE_INT len = CONSTRUCTOR_NELTS (ctor);
939 tree elttype = TREE_TYPE (type);
940 unsigned i;
941 tree val;
942 bool bad = false;
943 bool user = false;
944 enum conversion_rank rank = cr_exact;
946 if (TYPE_DOMAIN (type))
948 unsigned HOST_WIDE_INT alen = tree_low_cst (array_type_nelts_top (type), 1);
949 if (alen < len)
950 return NULL;
953 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor), i, val)
955 conversion *sub
956 = implicit_conversion (elttype, TREE_TYPE (val), val,
957 false, flags, complain);
958 if (sub == NULL)
959 return NULL;
961 if (sub->rank > rank)
962 rank = sub->rank;
963 if (sub->user_conv_p)
964 user = true;
965 if (sub->bad_p)
966 bad = true;
969 c = alloc_conversion (ck_aggr);
970 c->type = type;
971 c->rank = rank;
972 c->user_conv_p = user;
973 c->bad_p = bad;
974 c->u.next = NULL;
975 return c;
978 /* Represent a conversion from CTOR, a braced-init-list, to TYPE, a
979 complex type, if such a conversion is possible. */
981 static conversion *
982 build_complex_conv (tree type, tree ctor, int flags,
983 tsubst_flags_t complain)
985 conversion *c;
986 unsigned HOST_WIDE_INT len = CONSTRUCTOR_NELTS (ctor);
987 tree elttype = TREE_TYPE (type);
988 unsigned i;
989 tree val;
990 bool bad = false;
991 bool user = false;
992 enum conversion_rank rank = cr_exact;
994 if (len != 2)
995 return NULL;
997 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor), i, val)
999 conversion *sub
1000 = implicit_conversion (elttype, TREE_TYPE (val), val,
1001 false, flags, complain);
1002 if (sub == NULL)
1003 return NULL;
1005 if (sub->rank > rank)
1006 rank = sub->rank;
1007 if (sub->user_conv_p)
1008 user = true;
1009 if (sub->bad_p)
1010 bad = true;
1013 c = alloc_conversion (ck_aggr);
1014 c->type = type;
1015 c->rank = rank;
1016 c->user_conv_p = user;
1017 c->bad_p = bad;
1018 c->u.next = NULL;
1019 return c;
1022 /* Build a representation of the identity conversion from EXPR to
1023 itself. The TYPE should match the type of EXPR, if EXPR is non-NULL. */
1025 static conversion *
1026 build_identity_conv (tree type, tree expr)
1028 conversion *c;
1030 c = alloc_conversion (ck_identity);
1031 c->type = type;
1032 c->u.expr = expr;
1034 return c;
1037 /* Converting from EXPR to TYPE was ambiguous in the sense that there
1038 were multiple user-defined conversions to accomplish the job.
1039 Build a conversion that indicates that ambiguity. */
1041 static conversion *
1042 build_ambiguous_conv (tree type, tree expr)
1044 conversion *c;
1046 c = alloc_conversion (ck_ambig);
1047 c->type = type;
1048 c->u.expr = expr;
1050 return c;
1053 tree
1054 strip_top_quals (tree t)
1056 if (TREE_CODE (t) == ARRAY_TYPE)
1057 return t;
1058 return cp_build_qualified_type (t, 0);
1061 /* Returns the standard conversion path (see [conv]) from type FROM to type
1062 TO, if any. For proper handling of null pointer constants, you must
1063 also pass the expression EXPR to convert from. If C_CAST_P is true,
1064 this conversion is coming from a C-style cast. */
1066 static conversion *
1067 standard_conversion (tree to, tree from, tree expr, bool c_cast_p,
1068 int flags)
1070 enum tree_code fcode, tcode;
1071 conversion *conv;
1072 bool fromref = false;
1073 tree qualified_to;
1075 to = non_reference (to);
1076 if (TREE_CODE (from) == REFERENCE_TYPE)
1078 fromref = true;
1079 from = TREE_TYPE (from);
1081 qualified_to = to;
1082 to = strip_top_quals (to);
1083 from = strip_top_quals (from);
1085 if ((TYPE_PTRFN_P (to) || TYPE_PTRMEMFUNC_P (to))
1086 && expr && type_unknown_p (expr))
1088 tsubst_flags_t tflags = tf_conv;
1089 expr = instantiate_type (to, expr, tflags);
1090 if (expr == error_mark_node)
1091 return NULL;
1092 from = TREE_TYPE (expr);
1095 fcode = TREE_CODE (from);
1096 tcode = TREE_CODE (to);
1098 conv = build_identity_conv (from, expr);
1099 if (fcode == FUNCTION_TYPE || fcode == ARRAY_TYPE)
1101 from = type_decays_to (from);
1102 fcode = TREE_CODE (from);
1103 conv = build_conv (ck_lvalue, from, conv);
1105 else if (fromref || (expr && lvalue_p (expr)))
1107 if (expr)
1109 tree bitfield_type;
1110 bitfield_type = is_bitfield_expr_with_lowered_type (expr);
1111 if (bitfield_type)
1113 from = strip_top_quals (bitfield_type);
1114 fcode = TREE_CODE (from);
1117 conv = build_conv (ck_rvalue, from, conv);
1118 if (flags & LOOKUP_PREFER_RVALUE)
1119 conv->rvaluedness_matches_p = true;
1122 /* Allow conversion between `__complex__' data types. */
1123 if (tcode == COMPLEX_TYPE && fcode == COMPLEX_TYPE)
1125 /* The standard conversion sequence to convert FROM to TO is
1126 the standard conversion sequence to perform componentwise
1127 conversion. */
1128 conversion *part_conv = standard_conversion
1129 (TREE_TYPE (to), TREE_TYPE (from), NULL_TREE, c_cast_p, flags);
1131 if (part_conv)
1133 conv = build_conv (part_conv->kind, to, conv);
1134 conv->rank = part_conv->rank;
1136 else
1137 conv = NULL;
1139 return conv;
1142 if (same_type_p (from, to))
1144 if (CLASS_TYPE_P (to) && conv->kind == ck_rvalue)
1145 conv->type = qualified_to;
1146 return conv;
1149 /* [conv.ptr]
1150 A null pointer constant can be converted to a pointer type; ... A
1151 null pointer constant of integral type can be converted to an
1152 rvalue of type std::nullptr_t. */
1153 if ((tcode == POINTER_TYPE || TYPE_PTRMEM_P (to)
1154 || NULLPTR_TYPE_P (to))
1155 && expr && null_ptr_cst_p (expr))
1156 conv = build_conv (ck_std, to, conv);
1157 else if ((tcode == INTEGER_TYPE && fcode == POINTER_TYPE)
1158 || (tcode == POINTER_TYPE && fcode == INTEGER_TYPE))
1160 /* For backwards brain damage compatibility, allow interconversion of
1161 pointers and integers with a pedwarn. */
1162 conv = build_conv (ck_std, to, conv);
1163 conv->bad_p = true;
1165 else if (UNSCOPED_ENUM_P (to) && fcode == INTEGER_TYPE)
1167 /* For backwards brain damage compatibility, allow interconversion of
1168 enums and integers with a pedwarn. */
1169 conv = build_conv (ck_std, to, conv);
1170 conv->bad_p = true;
1172 else if ((tcode == POINTER_TYPE && fcode == POINTER_TYPE)
1173 || (TYPE_PTRDATAMEM_P (to) && TYPE_PTRDATAMEM_P (from)))
1175 tree to_pointee;
1176 tree from_pointee;
1178 if (tcode == POINTER_TYPE
1179 && same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (from),
1180 TREE_TYPE (to)))
1182 else if (VOID_TYPE_P (TREE_TYPE (to))
1183 && !TYPE_PTRDATAMEM_P (from)
1184 && TREE_CODE (TREE_TYPE (from)) != FUNCTION_TYPE)
1186 tree nfrom = TREE_TYPE (from);
1187 from = build_pointer_type
1188 (cp_build_qualified_type (void_type_node,
1189 cp_type_quals (nfrom)));
1190 conv = build_conv (ck_ptr, from, conv);
1192 else if (TYPE_PTRDATAMEM_P (from))
1194 tree fbase = TYPE_PTRMEM_CLASS_TYPE (from);
1195 tree tbase = TYPE_PTRMEM_CLASS_TYPE (to);
1197 if (DERIVED_FROM_P (fbase, tbase)
1198 && (same_type_ignoring_top_level_qualifiers_p
1199 (TYPE_PTRMEM_POINTED_TO_TYPE (from),
1200 TYPE_PTRMEM_POINTED_TO_TYPE (to))))
1202 from = build_ptrmem_type (tbase,
1203 TYPE_PTRMEM_POINTED_TO_TYPE (from));
1204 conv = build_conv (ck_pmem, from, conv);
1206 else if (!same_type_p (fbase, tbase))
1207 return NULL;
1209 else if (CLASS_TYPE_P (TREE_TYPE (from))
1210 && CLASS_TYPE_P (TREE_TYPE (to))
1211 /* [conv.ptr]
1213 An rvalue of type "pointer to cv D," where D is a
1214 class type, can be converted to an rvalue of type
1215 "pointer to cv B," where B is a base class (clause
1216 _class.derived_) of D. If B is an inaccessible
1217 (clause _class.access_) or ambiguous
1218 (_class.member.lookup_) base class of D, a program
1219 that necessitates this conversion is ill-formed.
1220 Therefore, we use DERIVED_FROM_P, and do not check
1221 access or uniqueness. */
1222 && DERIVED_FROM_P (TREE_TYPE (to), TREE_TYPE (from)))
1224 from =
1225 cp_build_qualified_type (TREE_TYPE (to),
1226 cp_type_quals (TREE_TYPE (from)));
1227 from = build_pointer_type (from);
1228 conv = build_conv (ck_ptr, from, conv);
1229 conv->base_p = true;
1232 if (tcode == POINTER_TYPE)
1234 to_pointee = TREE_TYPE (to);
1235 from_pointee = TREE_TYPE (from);
1237 else
1239 to_pointee = TYPE_PTRMEM_POINTED_TO_TYPE (to);
1240 from_pointee = TYPE_PTRMEM_POINTED_TO_TYPE (from);
1243 if (same_type_p (from, to))
1244 /* OK */;
1245 else if (c_cast_p && comp_ptr_ttypes_const (to, from))
1246 /* In a C-style cast, we ignore CV-qualification because we
1247 are allowed to perform a static_cast followed by a
1248 const_cast. */
1249 conv = build_conv (ck_qual, to, conv);
1250 else if (!c_cast_p && comp_ptr_ttypes (to_pointee, from_pointee))
1251 conv = build_conv (ck_qual, to, conv);
1252 else if (expr && string_conv_p (to, expr, 0))
1253 /* converting from string constant to char *. */
1254 conv = build_conv (ck_qual, to, conv);
1255 /* Allow conversions among compatible ObjC pointer types (base
1256 conversions have been already handled above). */
1257 else if (c_dialect_objc ()
1258 && objc_compare_types (to, from, -4, NULL_TREE))
1259 conv = build_conv (ck_ptr, to, conv);
1260 else if (ptr_reasonably_similar (to_pointee, from_pointee))
1262 conv = build_conv (ck_ptr, to, conv);
1263 conv->bad_p = true;
1265 else
1266 return NULL;
1268 from = to;
1270 else if (TYPE_PTRMEMFUNC_P (to) && TYPE_PTRMEMFUNC_P (from))
1272 tree fromfn = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (from));
1273 tree tofn = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (to));
1274 tree fbase = class_of_this_parm (fromfn);
1275 tree tbase = class_of_this_parm (tofn);
1277 if (!DERIVED_FROM_P (fbase, tbase)
1278 || !same_type_p (static_fn_type (fromfn),
1279 static_fn_type (tofn)))
1280 return NULL;
1282 from = build_memfn_type (fromfn, tbase, cp_type_quals (tbase));
1283 from = build_ptrmemfunc_type (build_pointer_type (from));
1284 conv = build_conv (ck_pmem, from, conv);
1285 conv->base_p = true;
1287 else if (tcode == BOOLEAN_TYPE)
1289 /* [conv.bool]
1291 An rvalue of arithmetic, unscoped enumeration, pointer, or
1292 pointer to member type can be converted to an rvalue of type
1293 bool. ... An rvalue of type std::nullptr_t can be converted
1294 to an rvalue of type bool; */
1295 if (ARITHMETIC_TYPE_P (from)
1296 || UNSCOPED_ENUM_P (from)
1297 || fcode == POINTER_TYPE
1298 || TYPE_PTRMEM_P (from)
1299 || NULLPTR_TYPE_P (from))
1301 conv = build_conv (ck_std, to, conv);
1302 if (fcode == POINTER_TYPE
1303 || TYPE_PTRDATAMEM_P (from)
1304 || (TYPE_PTRMEMFUNC_P (from)
1305 && conv->rank < cr_pbool)
1306 || NULLPTR_TYPE_P (from))
1307 conv->rank = cr_pbool;
1308 return conv;
1311 return NULL;
1313 /* We don't check for ENUMERAL_TYPE here because there are no standard
1314 conversions to enum type. */
1315 /* As an extension, allow conversion to complex type. */
1316 else if (ARITHMETIC_TYPE_P (to))
1318 if (! (INTEGRAL_CODE_P (fcode) || fcode == REAL_TYPE)
1319 || SCOPED_ENUM_P (from))
1320 return NULL;
1321 conv = build_conv (ck_std, to, conv);
1323 /* Give this a better rank if it's a promotion. */
1324 if (same_type_p (to, type_promotes_to (from))
1325 && next_conversion (conv)->rank <= cr_promotion)
1326 conv->rank = cr_promotion;
1328 else if (fcode == VECTOR_TYPE && tcode == VECTOR_TYPE
1329 && vector_types_convertible_p (from, to, false))
1330 return build_conv (ck_std, to, conv);
1331 else if (MAYBE_CLASS_TYPE_P (to) && MAYBE_CLASS_TYPE_P (from)
1332 && is_properly_derived_from (from, to))
1334 if (conv->kind == ck_rvalue)
1335 conv = next_conversion (conv);
1336 conv = build_conv (ck_base, to, conv);
1337 /* The derived-to-base conversion indicates the initialization
1338 of a parameter with base type from an object of a derived
1339 type. A temporary object is created to hold the result of
1340 the conversion unless we're binding directly to a reference. */
1341 conv->need_temporary_p = !(flags & LOOKUP_NO_TEMP_BIND);
1343 else
1344 return NULL;
1346 if (flags & LOOKUP_NO_NARROWING)
1347 conv->check_narrowing = true;
1349 return conv;
1352 /* Returns nonzero if T1 is reference-related to T2. */
1354 bool
1355 reference_related_p (tree t1, tree t2)
1357 if (t1 == error_mark_node || t2 == error_mark_node)
1358 return false;
1360 t1 = TYPE_MAIN_VARIANT (t1);
1361 t2 = TYPE_MAIN_VARIANT (t2);
1363 /* [dcl.init.ref]
1365 Given types "cv1 T1" and "cv2 T2," "cv1 T1" is reference-related
1366 to "cv2 T2" if T1 is the same type as T2, or T1 is a base class
1367 of T2. */
1368 return (same_type_p (t1, t2)
1369 || (CLASS_TYPE_P (t1) && CLASS_TYPE_P (t2)
1370 && DERIVED_FROM_P (t1, t2)));
1373 /* Returns nonzero if T1 is reference-compatible with T2. */
1375 static bool
1376 reference_compatible_p (tree t1, tree t2)
1378 /* [dcl.init.ref]
1380 "cv1 T1" is reference compatible with "cv2 T2" if T1 is
1381 reference-related to T2 and cv1 is the same cv-qualification as,
1382 or greater cv-qualification than, cv2. */
1383 return (reference_related_p (t1, t2)
1384 && at_least_as_qualified_p (t1, t2));
1387 /* A reference of the indicated TYPE is being bound directly to the
1388 expression represented by the implicit conversion sequence CONV.
1389 Return a conversion sequence for this binding. */
1391 static conversion *
1392 direct_reference_binding (tree type, conversion *conv)
1394 tree t;
1396 gcc_assert (TREE_CODE (type) == REFERENCE_TYPE);
1397 gcc_assert (TREE_CODE (conv->type) != REFERENCE_TYPE);
1399 t = TREE_TYPE (type);
1401 /* [over.ics.rank]
1403 When a parameter of reference type binds directly
1404 (_dcl.init.ref_) to an argument expression, the implicit
1405 conversion sequence is the identity conversion, unless the
1406 argument expression has a type that is a derived class of the
1407 parameter type, in which case the implicit conversion sequence is
1408 a derived-to-base Conversion.
1410 If the parameter binds directly to the result of applying a
1411 conversion function to the argument expression, the implicit
1412 conversion sequence is a user-defined conversion sequence
1413 (_over.ics.user_), with the second standard conversion sequence
1414 either an identity conversion or, if the conversion function
1415 returns an entity of a type that is a derived class of the
1416 parameter type, a derived-to-base conversion. */
1417 if (!same_type_ignoring_top_level_qualifiers_p (t, conv->type))
1419 /* Represent the derived-to-base conversion. */
1420 conv = build_conv (ck_base, t, conv);
1421 /* We will actually be binding to the base-class subobject in
1422 the derived class, so we mark this conversion appropriately.
1423 That way, convert_like knows not to generate a temporary. */
1424 conv->need_temporary_p = false;
1426 return build_conv (ck_ref_bind, type, conv);
1429 /* Returns the conversion path from type FROM to reference type TO for
1430 purposes of reference binding. For lvalue binding, either pass a
1431 reference type to FROM or an lvalue expression to EXPR. If the
1432 reference will be bound to a temporary, NEED_TEMPORARY_P is set for
1433 the conversion returned. If C_CAST_P is true, this
1434 conversion is coming from a C-style cast. */
1436 static conversion *
1437 reference_binding (tree rto, tree rfrom, tree expr, bool c_cast_p, int flags,
1438 tsubst_flags_t complain)
1440 conversion *conv = NULL;
1441 tree to = TREE_TYPE (rto);
1442 tree from = rfrom;
1443 tree tfrom;
1444 bool related_p;
1445 bool compatible_p;
1446 cp_lvalue_kind gl_kind;
1447 bool is_lvalue;
1449 if (TREE_CODE (to) == FUNCTION_TYPE && expr && type_unknown_p (expr))
1451 expr = instantiate_type (to, expr, tf_none);
1452 if (expr == error_mark_node)
1453 return NULL;
1454 from = TREE_TYPE (expr);
1457 if (expr && BRACE_ENCLOSED_INITIALIZER_P (expr))
1459 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
1460 conv = implicit_conversion (to, from, expr, c_cast_p,
1461 flags, complain);
1462 if (!CLASS_TYPE_P (to)
1463 && CONSTRUCTOR_NELTS (expr) == 1)
1465 expr = CONSTRUCTOR_ELT (expr, 0)->value;
1466 if (error_operand_p (expr))
1467 return NULL;
1468 from = TREE_TYPE (expr);
1472 if (TREE_CODE (from) == REFERENCE_TYPE)
1474 from = TREE_TYPE (from);
1475 if (!TYPE_REF_IS_RVALUE (rfrom)
1476 || TREE_CODE (from) == FUNCTION_TYPE)
1477 gl_kind = clk_ordinary;
1478 else
1479 gl_kind = clk_rvalueref;
1481 else if (expr)
1483 gl_kind = lvalue_kind (expr);
1484 if (gl_kind & clk_class)
1485 /* A class prvalue is not a glvalue. */
1486 gl_kind = clk_none;
1488 else
1489 gl_kind = clk_none;
1490 is_lvalue = gl_kind && !(gl_kind & clk_rvalueref);
1492 tfrom = from;
1493 if ((gl_kind & clk_bitfield) != 0)
1494 tfrom = unlowered_expr_type (expr);
1496 /* Figure out whether or not the types are reference-related and
1497 reference compatible. We have do do this after stripping
1498 references from FROM. */
1499 related_p = reference_related_p (to, tfrom);
1500 /* If this is a C cast, first convert to an appropriately qualified
1501 type, so that we can later do a const_cast to the desired type. */
1502 if (related_p && c_cast_p
1503 && !at_least_as_qualified_p (to, tfrom))
1504 to = cp_build_qualified_type (to, cp_type_quals (tfrom));
1505 compatible_p = reference_compatible_p (to, tfrom);
1507 /* Directly bind reference when target expression's type is compatible with
1508 the reference and expression is an lvalue. In DR391, the wording in
1509 [8.5.3/5 dcl.init.ref] is changed to also require direct bindings for
1510 const and rvalue references to rvalues of compatible class type.
1511 We should also do direct bindings for non-class xvalues. */
1512 if (compatible_p
1513 && (is_lvalue
1514 || (((CP_TYPE_CONST_NON_VOLATILE_P (to)
1515 && !(flags & LOOKUP_NO_RVAL_BIND))
1516 || TYPE_REF_IS_RVALUE (rto))
1517 && (gl_kind
1518 || (!(flags & LOOKUP_NO_TEMP_BIND)
1519 && (CLASS_TYPE_P (from)
1520 || TREE_CODE (from) == ARRAY_TYPE))))))
1522 /* [dcl.init.ref]
1524 If the initializer expression
1526 -- is an lvalue (but not an lvalue for a bit-field), and "cv1 T1"
1527 is reference-compatible with "cv2 T2,"
1529 the reference is bound directly to the initializer expression
1530 lvalue.
1532 [...]
1533 If the initializer expression is an rvalue, with T2 a class type,
1534 and "cv1 T1" is reference-compatible with "cv2 T2", the reference
1535 is bound to the object represented by the rvalue or to a sub-object
1536 within that object. */
1538 conv = build_identity_conv (tfrom, expr);
1539 conv = direct_reference_binding (rto, conv);
1541 if (flags & LOOKUP_PREFER_RVALUE)
1542 /* The top-level caller requested that we pretend that the lvalue
1543 be treated as an rvalue. */
1544 conv->rvaluedness_matches_p = TYPE_REF_IS_RVALUE (rto);
1545 else if (TREE_CODE (rfrom) == REFERENCE_TYPE)
1546 /* Handle rvalue reference to function properly. */
1547 conv->rvaluedness_matches_p
1548 = (TYPE_REF_IS_RVALUE (rto) == TYPE_REF_IS_RVALUE (rfrom));
1549 else
1550 conv->rvaluedness_matches_p
1551 = (TYPE_REF_IS_RVALUE (rto) == !is_lvalue);
1553 if ((gl_kind & clk_bitfield) != 0
1554 || ((gl_kind & clk_packed) != 0 && !TYPE_PACKED (to)))
1555 /* For the purposes of overload resolution, we ignore the fact
1556 this expression is a bitfield or packed field. (In particular,
1557 [over.ics.ref] says specifically that a function with a
1558 non-const reference parameter is viable even if the
1559 argument is a bitfield.)
1561 However, when we actually call the function we must create
1562 a temporary to which to bind the reference. If the
1563 reference is volatile, or isn't const, then we cannot make
1564 a temporary, so we just issue an error when the conversion
1565 actually occurs. */
1566 conv->need_temporary_p = true;
1568 /* Don't allow binding of lvalues (other than function lvalues) to
1569 rvalue references. */
1570 if (is_lvalue && TYPE_REF_IS_RVALUE (rto)
1571 && TREE_CODE (to) != FUNCTION_TYPE
1572 && !(flags & LOOKUP_PREFER_RVALUE))
1573 conv->bad_p = true;
1575 return conv;
1577 /* [class.conv.fct] A conversion function is never used to convert a
1578 (possibly cv-qualified) object to the (possibly cv-qualified) same
1579 object type (or a reference to it), to a (possibly cv-qualified) base
1580 class of that type (or a reference to it).... */
1581 else if (CLASS_TYPE_P (from) && !related_p
1582 && !(flags & LOOKUP_NO_CONVERSION))
1584 /* [dcl.init.ref]
1586 If the initializer expression
1588 -- has a class type (i.e., T2 is a class type) can be
1589 implicitly converted to an lvalue of type "cv3 T3," where
1590 "cv1 T1" is reference-compatible with "cv3 T3". (this
1591 conversion is selected by enumerating the applicable
1592 conversion functions (_over.match.ref_) and choosing the
1593 best one through overload resolution. (_over.match_).
1595 the reference is bound to the lvalue result of the conversion
1596 in the second case. */
1597 z_candidate *cand = build_user_type_conversion_1 (rto, expr, flags,
1598 complain);
1599 if (cand)
1600 return cand->second_conv;
1603 /* From this point on, we conceptually need temporaries, even if we
1604 elide them. Only the cases above are "direct bindings". */
1605 if (flags & LOOKUP_NO_TEMP_BIND)
1606 return NULL;
1608 /* [over.ics.rank]
1610 When a parameter of reference type is not bound directly to an
1611 argument expression, the conversion sequence is the one required
1612 to convert the argument expression to the underlying type of the
1613 reference according to _over.best.ics_. Conceptually, this
1614 conversion sequence corresponds to copy-initializing a temporary
1615 of the underlying type with the argument expression. Any
1616 difference in top-level cv-qualification is subsumed by the
1617 initialization itself and does not constitute a conversion. */
1619 /* [dcl.init.ref]
1621 Otherwise, the reference shall be to a non-volatile const type.
1623 Under C++0x, [8.5.3/5 dcl.init.ref] it may also be an rvalue reference */
1624 if (!CP_TYPE_CONST_NON_VOLATILE_P (to) && !TYPE_REF_IS_RVALUE (rto))
1625 return NULL;
1627 /* [dcl.init.ref]
1629 Otherwise, a temporary of type "cv1 T1" is created and
1630 initialized from the initializer expression using the rules for a
1631 non-reference copy initialization. If T1 is reference-related to
1632 T2, cv1 must be the same cv-qualification as, or greater
1633 cv-qualification than, cv2; otherwise, the program is ill-formed. */
1634 if (related_p && !at_least_as_qualified_p (to, from))
1635 return NULL;
1637 /* We're generating a temporary now, but don't bind any more in the
1638 conversion (specifically, don't slice the temporary returned by a
1639 conversion operator). */
1640 flags |= LOOKUP_NO_TEMP_BIND;
1642 /* Core issue 899: When [copy-]initializing a temporary to be bound
1643 to the first parameter of a copy constructor (12.8) called with
1644 a single argument in the context of direct-initialization,
1645 explicit conversion functions are also considered.
1647 So don't set LOOKUP_ONLYCONVERTING in that case. */
1648 if (!(flags & LOOKUP_COPY_PARM))
1649 flags |= LOOKUP_ONLYCONVERTING;
1651 if (!conv)
1652 conv = implicit_conversion (to, from, expr, c_cast_p,
1653 flags, complain);
1654 if (!conv)
1655 return NULL;
1657 conv = build_conv (ck_ref_bind, rto, conv);
1658 /* This reference binding, unlike those above, requires the
1659 creation of a temporary. */
1660 conv->need_temporary_p = true;
1661 conv->rvaluedness_matches_p = TYPE_REF_IS_RVALUE (rto);
1663 return conv;
1666 /* Returns the implicit conversion sequence (see [over.ics]) from type
1667 FROM to type TO. The optional expression EXPR may affect the
1668 conversion. FLAGS are the usual overloading flags. If C_CAST_P is
1669 true, this conversion is coming from a C-style cast. */
1671 static conversion *
1672 implicit_conversion (tree to, tree from, tree expr, bool c_cast_p,
1673 int flags, tsubst_flags_t complain)
1675 conversion *conv;
1677 if (from == error_mark_node || to == error_mark_node
1678 || expr == error_mark_node)
1679 return NULL;
1681 /* Other flags only apply to the primary function in overload
1682 resolution, or after we've chosen one. */
1683 flags &= (LOOKUP_ONLYCONVERTING|LOOKUP_NO_CONVERSION|LOOKUP_COPY_PARM
1684 |LOOKUP_NO_TEMP_BIND|LOOKUP_NO_RVAL_BIND|LOOKUP_PREFER_RVALUE
1685 |LOOKUP_NO_NARROWING|LOOKUP_PROTECT);
1687 /* FIXME: actually we don't want warnings either, but we can't just
1688 have 'complain &= ~(tf_warning|tf_error)' because it would cause
1689 the regression of, eg, g++.old-deja/g++.benjamin/16077.C.
1690 We really ought not to issue that warning until we've committed
1691 to that conversion. */
1692 complain &= ~tf_error;
1694 if (TREE_CODE (to) == REFERENCE_TYPE)
1695 conv = reference_binding (to, from, expr, c_cast_p, flags, complain);
1696 else
1697 conv = standard_conversion (to, from, expr, c_cast_p, flags);
1699 if (conv)
1700 return conv;
1702 if (expr && BRACE_ENCLOSED_INITIALIZER_P (expr))
1704 if (is_std_init_list (to))
1705 return build_list_conv (to, expr, flags, complain);
1707 /* As an extension, allow list-initialization of _Complex. */
1708 if (TREE_CODE (to) == COMPLEX_TYPE)
1710 conv = build_complex_conv (to, expr, flags, complain);
1711 if (conv)
1712 return conv;
1715 /* Allow conversion from an initializer-list with one element to a
1716 scalar type. */
1717 if (SCALAR_TYPE_P (to))
1719 int nelts = CONSTRUCTOR_NELTS (expr);
1720 tree elt;
1722 if (nelts == 0)
1723 elt = build_value_init (to, tf_none);
1724 else if (nelts == 1)
1725 elt = CONSTRUCTOR_ELT (expr, 0)->value;
1726 else
1727 elt = error_mark_node;
1729 conv = implicit_conversion (to, TREE_TYPE (elt), elt,
1730 c_cast_p, flags, complain);
1731 if (conv)
1733 conv->check_narrowing = true;
1734 if (BRACE_ENCLOSED_INITIALIZER_P (elt))
1735 /* Too many levels of braces, i.e. '{{1}}'. */
1736 conv->bad_p = true;
1737 return conv;
1740 else if (TREE_CODE (to) == ARRAY_TYPE)
1741 return build_array_conv (to, expr, flags, complain);
1744 if (expr != NULL_TREE
1745 && (MAYBE_CLASS_TYPE_P (from)
1746 || MAYBE_CLASS_TYPE_P (to))
1747 && (flags & LOOKUP_NO_CONVERSION) == 0)
1749 struct z_candidate *cand;
1751 if (CLASS_TYPE_P (to)
1752 && BRACE_ENCLOSED_INITIALIZER_P (expr)
1753 && !CLASSTYPE_NON_AGGREGATE (complete_type (to)))
1754 return build_aggr_conv (to, expr, flags, complain);
1756 cand = build_user_type_conversion_1 (to, expr, flags, complain);
1757 if (cand)
1758 conv = cand->second_conv;
1760 /* We used to try to bind a reference to a temporary here, but that
1761 is now handled after the recursive call to this function at the end
1762 of reference_binding. */
1763 return conv;
1766 return NULL;
1769 /* Add a new entry to the list of candidates. Used by the add_*_candidate
1770 functions. ARGS will not be changed until a single candidate is
1771 selected. */
1773 static struct z_candidate *
1774 add_candidate (struct z_candidate **candidates,
1775 tree fn, tree first_arg, const vec<tree, va_gc> *args,
1776 size_t num_convs, conversion **convs,
1777 tree access_path, tree conversion_path,
1778 int viable, struct rejection_reason *reason)
1780 struct z_candidate *cand = (struct z_candidate *)
1781 conversion_obstack_alloc (sizeof (struct z_candidate));
1783 cand->fn = fn;
1784 cand->first_arg = first_arg;
1785 cand->args = args;
1786 cand->convs = convs;
1787 cand->num_convs = num_convs;
1788 cand->access_path = access_path;
1789 cand->conversion_path = conversion_path;
1790 cand->viable = viable;
1791 cand->reason = reason;
1792 cand->next = *candidates;
1793 *candidates = cand;
1795 return cand;
1798 /* Return the number of remaining arguments in the parameter list
1799 beginning with ARG. */
1801 static int
1802 remaining_arguments (tree arg)
1804 int n;
1806 for (n = 0; arg != NULL_TREE && arg != void_list_node;
1807 arg = TREE_CHAIN (arg))
1808 n++;
1810 return n;
1813 /* Create an overload candidate for the function or method FN called
1814 with the argument list FIRST_ARG/ARGS and add it to CANDIDATES.
1815 FLAGS is passed on to implicit_conversion.
1817 This does not change ARGS.
1819 CTYPE, if non-NULL, is the type we want to pretend this function
1820 comes from for purposes of overload resolution. */
1822 static struct z_candidate *
1823 add_function_candidate (struct z_candidate **candidates,
1824 tree fn, tree ctype, tree first_arg,
1825 const vec<tree, va_gc> *args, tree access_path,
1826 tree conversion_path, int flags,
1827 tsubst_flags_t complain)
1829 tree parmlist = TYPE_ARG_TYPES (TREE_TYPE (fn));
1830 int i, len;
1831 conversion **convs;
1832 tree parmnode;
1833 tree orig_first_arg = first_arg;
1834 int skip;
1835 int viable = 1;
1836 struct rejection_reason *reason = NULL;
1838 /* At this point we should not see any functions which haven't been
1839 explicitly declared, except for friend functions which will have
1840 been found using argument dependent lookup. */
1841 gcc_assert (!DECL_ANTICIPATED (fn) || DECL_HIDDEN_FRIEND_P (fn));
1843 /* The `this', `in_chrg' and VTT arguments to constructors are not
1844 considered in overload resolution. */
1845 if (DECL_CONSTRUCTOR_P (fn))
1847 parmlist = skip_artificial_parms_for (fn, parmlist);
1848 skip = num_artificial_parms_for (fn);
1849 if (skip > 0 && first_arg != NULL_TREE)
1851 --skip;
1852 first_arg = NULL_TREE;
1855 else
1856 skip = 0;
1858 len = vec_safe_length (args) - skip + (first_arg != NULL_TREE ? 1 : 0);
1859 convs = alloc_conversions (len);
1861 /* 13.3.2 - Viable functions [over.match.viable]
1862 First, to be a viable function, a candidate function shall have enough
1863 parameters to agree in number with the arguments in the list.
1865 We need to check this first; otherwise, checking the ICSes might cause
1866 us to produce an ill-formed template instantiation. */
1868 parmnode = parmlist;
1869 for (i = 0; i < len; ++i)
1871 if (parmnode == NULL_TREE || parmnode == void_list_node)
1872 break;
1873 parmnode = TREE_CHAIN (parmnode);
1876 if ((i < len && parmnode)
1877 || !sufficient_parms_p (parmnode))
1879 int remaining = remaining_arguments (parmnode);
1880 viable = 0;
1881 reason = arity_rejection (first_arg, i + remaining, len);
1883 /* When looking for a function from a subobject from an implicit
1884 copy/move constructor/operator=, don't consider anything that takes (a
1885 reference to) an unrelated type. See c++/44909 and core 1092. */
1886 else if (parmlist && (flags & LOOKUP_DEFAULTED))
1888 if (DECL_CONSTRUCTOR_P (fn))
1889 i = 1;
1890 else if (DECL_ASSIGNMENT_OPERATOR_P (fn)
1891 && DECL_OVERLOADED_OPERATOR_P (fn) == NOP_EXPR)
1892 i = 2;
1893 else
1894 i = 0;
1895 if (i && len == i)
1897 parmnode = chain_index (i-1, parmlist);
1898 if (!reference_related_p (non_reference (TREE_VALUE (parmnode)),
1899 ctype))
1900 viable = 0;
1903 /* This only applies at the top level. */
1904 flags &= ~LOOKUP_DEFAULTED;
1907 if (! viable)
1908 goto out;
1910 /* Second, for F to be a viable function, there shall exist for each
1911 argument an implicit conversion sequence that converts that argument
1912 to the corresponding parameter of F. */
1914 parmnode = parmlist;
1916 for (i = 0; i < len; ++i)
1918 tree argtype, to_type;
1919 tree arg;
1920 conversion *t;
1921 int is_this;
1923 if (parmnode == void_list_node)
1924 break;
1926 if (i == 0 && first_arg != NULL_TREE)
1927 arg = first_arg;
1928 else
1929 arg = CONST_CAST_TREE (
1930 (*args)[i + skip - (first_arg != NULL_TREE ? 1 : 0)]);
1931 argtype = lvalue_type (arg);
1933 is_this = (i == 0 && DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
1934 && ! DECL_CONSTRUCTOR_P (fn));
1936 if (parmnode)
1938 tree parmtype = TREE_VALUE (parmnode);
1939 int lflags = flags;
1941 parmnode = TREE_CHAIN (parmnode);
1943 /* The type of the implicit object parameter ('this') for
1944 overload resolution is not always the same as for the
1945 function itself; conversion functions are considered to
1946 be members of the class being converted, and functions
1947 introduced by a using-declaration are considered to be
1948 members of the class that uses them.
1950 Since build_over_call ignores the ICS for the `this'
1951 parameter, we can just change the parm type. */
1952 if (ctype && is_this)
1954 parmtype = cp_build_qualified_type
1955 (ctype, cp_type_quals (TREE_TYPE (parmtype)));
1956 parmtype = build_pointer_type (parmtype);
1959 /* Core issue 899: When [copy-]initializing a temporary to be bound
1960 to the first parameter of a copy constructor (12.8) called with
1961 a single argument in the context of direct-initialization,
1962 explicit conversion functions are also considered.
1964 So set LOOKUP_COPY_PARM to let reference_binding know that
1965 it's being called in that context. We generalize the above
1966 to handle move constructors and template constructors as well;
1967 the standardese should soon be updated similarly. */
1968 if (ctype && i == 0 && (len-skip == 1)
1969 && DECL_CONSTRUCTOR_P (fn)
1970 && parmtype != error_mark_node
1971 && (same_type_ignoring_top_level_qualifiers_p
1972 (non_reference (parmtype), ctype)))
1974 if (!(flags & LOOKUP_ONLYCONVERTING))
1975 lflags |= LOOKUP_COPY_PARM;
1976 /* We allow user-defined conversions within init-lists, but
1977 don't list-initialize the copy parm, as that would mean
1978 using two levels of braces for the same type. */
1979 if ((flags & LOOKUP_LIST_INIT_CTOR)
1980 && BRACE_ENCLOSED_INITIALIZER_P (arg))
1981 lflags |= LOOKUP_NO_CONVERSION;
1983 else
1984 lflags |= LOOKUP_ONLYCONVERTING;
1986 t = implicit_conversion (parmtype, argtype, arg,
1987 /*c_cast_p=*/false, lflags, complain);
1988 to_type = parmtype;
1990 else
1992 t = build_identity_conv (argtype, arg);
1993 t->ellipsis_p = true;
1994 to_type = argtype;
1997 if (t && is_this)
1998 t->this_p = true;
2000 convs[i] = t;
2001 if (! t)
2003 viable = 0;
2004 reason = arg_conversion_rejection (first_arg, i, argtype, to_type);
2005 break;
2008 if (t->bad_p)
2010 viable = -1;
2011 reason = bad_arg_conversion_rejection (first_arg, i, argtype, to_type);
2015 out:
2016 return add_candidate (candidates, fn, orig_first_arg, args, len, convs,
2017 access_path, conversion_path, viable, reason);
2020 /* Create an overload candidate for the conversion function FN which will
2021 be invoked for expression OBJ, producing a pointer-to-function which
2022 will in turn be called with the argument list FIRST_ARG/ARGLIST,
2023 and add it to CANDIDATES. This does not change ARGLIST. FLAGS is
2024 passed on to implicit_conversion.
2026 Actually, we don't really care about FN; we care about the type it
2027 converts to. There may be multiple conversion functions that will
2028 convert to that type, and we rely on build_user_type_conversion_1 to
2029 choose the best one; so when we create our candidate, we record the type
2030 instead of the function. */
2032 static struct z_candidate *
2033 add_conv_candidate (struct z_candidate **candidates, tree fn, tree obj,
2034 tree first_arg, const vec<tree, va_gc> *arglist,
2035 tree access_path, tree conversion_path,
2036 tsubst_flags_t complain)
2038 tree totype = TREE_TYPE (TREE_TYPE (fn));
2039 int i, len, viable, flags;
2040 tree parmlist, parmnode;
2041 conversion **convs;
2042 struct rejection_reason *reason;
2044 for (parmlist = totype; TREE_CODE (parmlist) != FUNCTION_TYPE; )
2045 parmlist = TREE_TYPE (parmlist);
2046 parmlist = TYPE_ARG_TYPES (parmlist);
2048 len = vec_safe_length (arglist) + (first_arg != NULL_TREE ? 1 : 0) + 1;
2049 convs = alloc_conversions (len);
2050 parmnode = parmlist;
2051 viable = 1;
2052 flags = LOOKUP_IMPLICIT;
2053 reason = NULL;
2055 /* Don't bother looking up the same type twice. */
2056 if (*candidates && (*candidates)->fn == totype)
2057 return NULL;
2059 for (i = 0; i < len; ++i)
2061 tree arg, argtype, convert_type = NULL_TREE;
2062 conversion *t;
2064 if (i == 0)
2065 arg = obj;
2066 else if (i == 1 && first_arg != NULL_TREE)
2067 arg = first_arg;
2068 else
2069 arg = (*arglist)[i - (first_arg != NULL_TREE ? 1 : 0) - 1];
2070 argtype = lvalue_type (arg);
2072 if (i == 0)
2074 t = implicit_conversion (totype, argtype, arg, /*c_cast_p=*/false,
2075 flags, complain);
2076 convert_type = totype;
2078 else if (parmnode == void_list_node)
2079 break;
2080 else if (parmnode)
2082 t = implicit_conversion (TREE_VALUE (parmnode), argtype, arg,
2083 /*c_cast_p=*/false, flags, complain);
2084 convert_type = TREE_VALUE (parmnode);
2086 else
2088 t = build_identity_conv (argtype, arg);
2089 t->ellipsis_p = true;
2090 convert_type = argtype;
2093 convs[i] = t;
2094 if (! t)
2095 break;
2097 if (t->bad_p)
2099 viable = -1;
2100 reason = bad_arg_conversion_rejection (NULL_TREE, i, argtype, convert_type);
2103 if (i == 0)
2104 continue;
2106 if (parmnode)
2107 parmnode = TREE_CHAIN (parmnode);
2110 if (i < len
2111 || ! sufficient_parms_p (parmnode))
2113 int remaining = remaining_arguments (parmnode);
2114 viable = 0;
2115 reason = arity_rejection (NULL_TREE, i + remaining, len);
2118 return add_candidate (candidates, totype, first_arg, arglist, len, convs,
2119 access_path, conversion_path, viable, reason);
2122 static void
2123 build_builtin_candidate (struct z_candidate **candidates, tree fnname,
2124 tree type1, tree type2, tree *args, tree *argtypes,
2125 int flags, tsubst_flags_t complain)
2127 conversion *t;
2128 conversion **convs;
2129 size_t num_convs;
2130 int viable = 1, i;
2131 tree types[2];
2132 struct rejection_reason *reason = NULL;
2134 types[0] = type1;
2135 types[1] = type2;
2137 num_convs = args[2] ? 3 : (args[1] ? 2 : 1);
2138 convs = alloc_conversions (num_convs);
2140 /* TRUTH_*_EXPR do "contextual conversion to bool", which means explicit
2141 conversion ops are allowed. We handle that here by just checking for
2142 boolean_type_node because other operators don't ask for it. COND_EXPR
2143 also does contextual conversion to bool for the first operand, but we
2144 handle that in build_conditional_expr, and type1 here is operand 2. */
2145 if (type1 != boolean_type_node)
2146 flags |= LOOKUP_ONLYCONVERTING;
2148 for (i = 0; i < 2; ++i)
2150 if (! args[i])
2151 break;
2153 t = implicit_conversion (types[i], argtypes[i], args[i],
2154 /*c_cast_p=*/false, flags, complain);
2155 if (! t)
2157 viable = 0;
2158 /* We need something for printing the candidate. */
2159 t = build_identity_conv (types[i], NULL_TREE);
2160 reason = arg_conversion_rejection (NULL_TREE, i, argtypes[i],
2161 types[i]);
2163 else if (t->bad_p)
2165 viable = 0;
2166 reason = bad_arg_conversion_rejection (NULL_TREE, i, argtypes[i],
2167 types[i]);
2169 convs[i] = t;
2172 /* For COND_EXPR we rearranged the arguments; undo that now. */
2173 if (args[2])
2175 convs[2] = convs[1];
2176 convs[1] = convs[0];
2177 t = implicit_conversion (boolean_type_node, argtypes[2], args[2],
2178 /*c_cast_p=*/false, flags,
2179 complain);
2180 if (t)
2181 convs[0] = t;
2182 else
2184 viable = 0;
2185 reason = arg_conversion_rejection (NULL_TREE, 0, argtypes[2],
2186 boolean_type_node);
2190 add_candidate (candidates, fnname, /*first_arg=*/NULL_TREE, /*args=*/NULL,
2191 num_convs, convs,
2192 /*access_path=*/NULL_TREE,
2193 /*conversion_path=*/NULL_TREE,
2194 viable, reason);
2197 static bool
2198 is_complete (tree t)
2200 return COMPLETE_TYPE_P (complete_type (t));
2203 /* Returns nonzero if TYPE is a promoted arithmetic type. */
2205 static bool
2206 promoted_arithmetic_type_p (tree type)
2208 /* [over.built]
2210 In this section, the term promoted integral type is used to refer
2211 to those integral types which are preserved by integral promotion
2212 (including e.g. int and long but excluding e.g. char).
2213 Similarly, the term promoted arithmetic type refers to promoted
2214 integral types plus floating types. */
2215 return ((CP_INTEGRAL_TYPE_P (type)
2216 && same_type_p (type_promotes_to (type), type))
2217 || TREE_CODE (type) == REAL_TYPE);
2220 /* Create any builtin operator overload candidates for the operator in
2221 question given the converted operand types TYPE1 and TYPE2. The other
2222 args are passed through from add_builtin_candidates to
2223 build_builtin_candidate.
2225 TYPE1 and TYPE2 may not be permissible, and we must filter them.
2226 If CODE is requires candidates operands of the same type of the kind
2227 of which TYPE1 and TYPE2 are, we add both candidates
2228 CODE (TYPE1, TYPE1) and CODE (TYPE2, TYPE2). */
2230 static void
2231 add_builtin_candidate (struct z_candidate **candidates, enum tree_code code,
2232 enum tree_code code2, tree fnname, tree type1,
2233 tree type2, tree *args, tree *argtypes, int flags,
2234 tsubst_flags_t complain)
2236 switch (code)
2238 case POSTINCREMENT_EXPR:
2239 case POSTDECREMENT_EXPR:
2240 args[1] = integer_zero_node;
2241 type2 = integer_type_node;
2242 break;
2243 default:
2244 break;
2247 switch (code)
2250 /* 4 For every pair T, VQ), where T is an arithmetic or enumeration type,
2251 and VQ is either volatile or empty, there exist candidate operator
2252 functions of the form
2253 VQ T& operator++(VQ T&);
2254 T operator++(VQ T&, int);
2255 5 For every pair T, VQ), where T is an enumeration type or an arithmetic
2256 type other than bool, and VQ is either volatile or empty, there exist
2257 candidate operator functions of the form
2258 VQ T& operator--(VQ T&);
2259 T operator--(VQ T&, int);
2260 6 For every pair T, VQ), where T is a cv-qualified or cv-unqualified
2261 complete object type, and VQ is either volatile or empty, there exist
2262 candidate operator functions of the form
2263 T*VQ& operator++(T*VQ&);
2264 T*VQ& operator--(T*VQ&);
2265 T* operator++(T*VQ&, int);
2266 T* operator--(T*VQ&, int); */
2268 case POSTDECREMENT_EXPR:
2269 case PREDECREMENT_EXPR:
2270 if (TREE_CODE (type1) == BOOLEAN_TYPE)
2271 return;
2272 case POSTINCREMENT_EXPR:
2273 case PREINCREMENT_EXPR:
2274 if (ARITHMETIC_TYPE_P (type1) || TYPE_PTROB_P (type1))
2276 type1 = build_reference_type (type1);
2277 break;
2279 return;
2281 /* 7 For every cv-qualified or cv-unqualified object type T, there
2282 exist candidate operator functions of the form
2284 T& operator*(T*);
2286 8 For every function type T, there exist candidate operator functions of
2287 the form
2288 T& operator*(T*); */
2290 case INDIRECT_REF:
2291 if (TREE_CODE (type1) == POINTER_TYPE
2292 && !uses_template_parms (TREE_TYPE (type1))
2293 && (TYPE_PTROB_P (type1)
2294 || TREE_CODE (TREE_TYPE (type1)) == FUNCTION_TYPE))
2295 break;
2296 return;
2298 /* 9 For every type T, there exist candidate operator functions of the form
2299 T* operator+(T*);
2301 10For every promoted arithmetic type T, there exist candidate operator
2302 functions of the form
2303 T operator+(T);
2304 T operator-(T); */
2306 case UNARY_PLUS_EXPR: /* unary + */
2307 if (TREE_CODE (type1) == POINTER_TYPE)
2308 break;
2309 case NEGATE_EXPR:
2310 if (ARITHMETIC_TYPE_P (type1))
2311 break;
2312 return;
2314 /* 11For every promoted integral type T, there exist candidate operator
2315 functions of the form
2316 T operator~(T); */
2318 case BIT_NOT_EXPR:
2319 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1))
2320 break;
2321 return;
2323 /* 12For every quintuple C1, C2, T, CV1, CV2), where C2 is a class type, C1
2324 is the same type as C2 or is a derived class of C2, T is a complete
2325 object type or a function type, and CV1 and CV2 are cv-qualifier-seqs,
2326 there exist candidate operator functions of the form
2327 CV12 T& operator->*(CV1 C1*, CV2 T C2::*);
2328 where CV12 is the union of CV1 and CV2. */
2330 case MEMBER_REF:
2331 if (TREE_CODE (type1) == POINTER_TYPE
2332 && TYPE_PTRMEM_P (type2))
2334 tree c1 = TREE_TYPE (type1);
2335 tree c2 = TYPE_PTRMEM_CLASS_TYPE (type2);
2337 if (MAYBE_CLASS_TYPE_P (c1) && DERIVED_FROM_P (c2, c1)
2338 && (TYPE_PTRMEMFUNC_P (type2)
2339 || is_complete (TYPE_PTRMEM_POINTED_TO_TYPE (type2))))
2340 break;
2342 return;
2344 /* 13For every pair of promoted arithmetic types L and R, there exist can-
2345 didate operator functions of the form
2346 LR operator*(L, R);
2347 LR operator/(L, R);
2348 LR operator+(L, R);
2349 LR operator-(L, R);
2350 bool operator<(L, R);
2351 bool operator>(L, R);
2352 bool operator<=(L, R);
2353 bool operator>=(L, R);
2354 bool operator==(L, R);
2355 bool operator!=(L, R);
2356 where LR is the result of the usual arithmetic conversions between
2357 types L and R.
2359 14For every pair of types T and I, where T is a cv-qualified or cv-
2360 unqualified complete object type and I is a promoted integral type,
2361 there exist candidate operator functions of the form
2362 T* operator+(T*, I);
2363 T& operator[](T*, I);
2364 T* operator-(T*, I);
2365 T* operator+(I, T*);
2366 T& operator[](I, T*);
2368 15For every T, where T is a pointer to complete object type, there exist
2369 candidate operator functions of the form112)
2370 ptrdiff_t operator-(T, T);
2372 16For every pointer or enumeration type T, there exist candidate operator
2373 functions of the form
2374 bool operator<(T, T);
2375 bool operator>(T, T);
2376 bool operator<=(T, T);
2377 bool operator>=(T, T);
2378 bool operator==(T, T);
2379 bool operator!=(T, T);
2381 17For every pointer to member type T, there exist candidate operator
2382 functions of the form
2383 bool operator==(T, T);
2384 bool operator!=(T, T); */
2386 case MINUS_EXPR:
2387 if (TYPE_PTROB_P (type1) && TYPE_PTROB_P (type2))
2388 break;
2389 if (TYPE_PTROB_P (type1)
2390 && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2392 type2 = ptrdiff_type_node;
2393 break;
2395 case MULT_EXPR:
2396 case TRUNC_DIV_EXPR:
2397 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2398 break;
2399 return;
2401 case EQ_EXPR:
2402 case NE_EXPR:
2403 if ((TYPE_PTRMEMFUNC_P (type1) && TYPE_PTRMEMFUNC_P (type2))
2404 || (TYPE_PTRDATAMEM_P (type1) && TYPE_PTRDATAMEM_P (type2)))
2405 break;
2406 if (TYPE_PTRMEM_P (type1) && null_ptr_cst_p (args[1]))
2408 type2 = type1;
2409 break;
2411 if (TYPE_PTRMEM_P (type2) && null_ptr_cst_p (args[0]))
2413 type1 = type2;
2414 break;
2416 /* Fall through. */
2417 case LT_EXPR:
2418 case GT_EXPR:
2419 case LE_EXPR:
2420 case GE_EXPR:
2421 case MAX_EXPR:
2422 case MIN_EXPR:
2423 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2424 break;
2425 if (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
2426 break;
2427 if (TREE_CODE (type1) == ENUMERAL_TYPE
2428 && TREE_CODE (type2) == ENUMERAL_TYPE)
2429 break;
2430 if (TYPE_PTR_P (type1)
2431 && null_ptr_cst_p (args[1])
2432 && !uses_template_parms (type1))
2434 type2 = type1;
2435 break;
2437 if (null_ptr_cst_p (args[0])
2438 && TYPE_PTR_P (type2)
2439 && !uses_template_parms (type2))
2441 type1 = type2;
2442 break;
2444 return;
2446 case PLUS_EXPR:
2447 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2448 break;
2449 case ARRAY_REF:
2450 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1) && TYPE_PTROB_P (type2))
2452 type1 = ptrdiff_type_node;
2453 break;
2455 if (TYPE_PTROB_P (type1) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2457 type2 = ptrdiff_type_node;
2458 break;
2460 return;
2462 /* 18For every pair of promoted integral types L and R, there exist candi-
2463 date operator functions of the form
2464 LR operator%(L, R);
2465 LR operator&(L, R);
2466 LR operator^(L, R);
2467 LR operator|(L, R);
2468 L operator<<(L, R);
2469 L operator>>(L, R);
2470 where LR is the result of the usual arithmetic conversions between
2471 types L and R. */
2473 case TRUNC_MOD_EXPR:
2474 case BIT_AND_EXPR:
2475 case BIT_IOR_EXPR:
2476 case BIT_XOR_EXPR:
2477 case LSHIFT_EXPR:
2478 case RSHIFT_EXPR:
2479 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2480 break;
2481 return;
2483 /* 19For every triple L, VQ, R), where L is an arithmetic or enumeration
2484 type, VQ is either volatile or empty, and R is a promoted arithmetic
2485 type, there exist candidate operator functions of the form
2486 VQ L& operator=(VQ L&, R);
2487 VQ L& operator*=(VQ L&, R);
2488 VQ L& operator/=(VQ L&, R);
2489 VQ L& operator+=(VQ L&, R);
2490 VQ L& operator-=(VQ L&, R);
2492 20For every pair T, VQ), where T is any type and VQ is either volatile
2493 or empty, there exist candidate operator functions of the form
2494 T*VQ& operator=(T*VQ&, T*);
2496 21For every pair T, VQ), where T is a pointer to member type and VQ is
2497 either volatile or empty, there exist candidate operator functions of
2498 the form
2499 VQ T& operator=(VQ T&, T);
2501 22For every triple T, VQ, I), where T is a cv-qualified or cv-
2502 unqualified complete object type, VQ is either volatile or empty, and
2503 I is a promoted integral type, there exist candidate operator func-
2504 tions of the form
2505 T*VQ& operator+=(T*VQ&, I);
2506 T*VQ& operator-=(T*VQ&, I);
2508 23For every triple L, VQ, R), where L is an integral or enumeration
2509 type, VQ is either volatile or empty, and R is a promoted integral
2510 type, there exist candidate operator functions of the form
2512 VQ L& operator%=(VQ L&, R);
2513 VQ L& operator<<=(VQ L&, R);
2514 VQ L& operator>>=(VQ L&, R);
2515 VQ L& operator&=(VQ L&, R);
2516 VQ L& operator^=(VQ L&, R);
2517 VQ L& operator|=(VQ L&, R); */
2519 case MODIFY_EXPR:
2520 switch (code2)
2522 case PLUS_EXPR:
2523 case MINUS_EXPR:
2524 if (TYPE_PTROB_P (type1) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2526 type2 = ptrdiff_type_node;
2527 break;
2529 case MULT_EXPR:
2530 case TRUNC_DIV_EXPR:
2531 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2532 break;
2533 return;
2535 case TRUNC_MOD_EXPR:
2536 case BIT_AND_EXPR:
2537 case BIT_IOR_EXPR:
2538 case BIT_XOR_EXPR:
2539 case LSHIFT_EXPR:
2540 case RSHIFT_EXPR:
2541 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2542 break;
2543 return;
2545 case NOP_EXPR:
2546 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2547 break;
2548 if ((TYPE_PTRMEMFUNC_P (type1) && TYPE_PTRMEMFUNC_P (type2))
2549 || (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
2550 || (TYPE_PTRDATAMEM_P (type1) && TYPE_PTRDATAMEM_P (type2))
2551 || ((TYPE_PTRMEMFUNC_P (type1)
2552 || TREE_CODE (type1) == POINTER_TYPE)
2553 && null_ptr_cst_p (args[1])))
2555 type2 = type1;
2556 break;
2558 return;
2560 default:
2561 gcc_unreachable ();
2563 type1 = build_reference_type (type1);
2564 break;
2566 case COND_EXPR:
2567 /* [over.built]
2569 For every pair of promoted arithmetic types L and R, there
2570 exist candidate operator functions of the form
2572 LR operator?(bool, L, R);
2574 where LR is the result of the usual arithmetic conversions
2575 between types L and R.
2577 For every type T, where T is a pointer or pointer-to-member
2578 type, there exist candidate operator functions of the form T
2579 operator?(bool, T, T); */
2581 if (promoted_arithmetic_type_p (type1)
2582 && promoted_arithmetic_type_p (type2))
2583 /* That's OK. */
2584 break;
2586 /* Otherwise, the types should be pointers. */
2587 if (!TYPE_PTR_OR_PTRMEM_P (type1) || !TYPE_PTR_OR_PTRMEM_P (type2))
2588 return;
2590 /* We don't check that the two types are the same; the logic
2591 below will actually create two candidates; one in which both
2592 parameter types are TYPE1, and one in which both parameter
2593 types are TYPE2. */
2594 break;
2596 case REALPART_EXPR:
2597 case IMAGPART_EXPR:
2598 if (ARITHMETIC_TYPE_P (type1))
2599 break;
2600 return;
2602 default:
2603 gcc_unreachable ();
2606 /* If we're dealing with two pointer types or two enumeral types,
2607 we need candidates for both of them. */
2608 if (type2 && !same_type_p (type1, type2)
2609 && TREE_CODE (type1) == TREE_CODE (type2)
2610 && (TREE_CODE (type1) == REFERENCE_TYPE
2611 || (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
2612 || (TYPE_PTRDATAMEM_P (type1) && TYPE_PTRDATAMEM_P (type2))
2613 || TYPE_PTRMEMFUNC_P (type1)
2614 || MAYBE_CLASS_TYPE_P (type1)
2615 || TREE_CODE (type1) == ENUMERAL_TYPE))
2617 if (TYPE_PTR_OR_PTRMEM_P (type1))
2619 tree cptype = composite_pointer_type (type1, type2,
2620 error_mark_node,
2621 error_mark_node,
2622 CPO_CONVERSION,
2623 tf_none);
2624 if (cptype != error_mark_node)
2626 build_builtin_candidate
2627 (candidates, fnname, cptype, cptype, args, argtypes,
2628 flags, complain);
2629 return;
2633 build_builtin_candidate
2634 (candidates, fnname, type1, type1, args, argtypes, flags, complain);
2635 build_builtin_candidate
2636 (candidates, fnname, type2, type2, args, argtypes, flags, complain);
2637 return;
2640 build_builtin_candidate
2641 (candidates, fnname, type1, type2, args, argtypes, flags, complain);
2644 tree
2645 type_decays_to (tree type)
2647 if (TREE_CODE (type) == ARRAY_TYPE)
2648 return build_pointer_type (TREE_TYPE (type));
2649 if (TREE_CODE (type) == FUNCTION_TYPE)
2650 return build_pointer_type (type);
2651 return type;
2654 /* There are three conditions of builtin candidates:
2656 1) bool-taking candidates. These are the same regardless of the input.
2657 2) pointer-pair taking candidates. These are generated for each type
2658 one of the input types converts to.
2659 3) arithmetic candidates. According to the standard, we should generate
2660 all of these, but I'm trying not to...
2662 Here we generate a superset of the possible candidates for this particular
2663 case. That is a subset of the full set the standard defines, plus some
2664 other cases which the standard disallows. add_builtin_candidate will
2665 filter out the invalid set. */
2667 static void
2668 add_builtin_candidates (struct z_candidate **candidates, enum tree_code code,
2669 enum tree_code code2, tree fnname, tree *args,
2670 int flags, tsubst_flags_t complain)
2672 int ref1, i;
2673 int enum_p = 0;
2674 tree type, argtypes[3], t;
2675 /* TYPES[i] is the set of possible builtin-operator parameter types
2676 we will consider for the Ith argument. */
2677 vec<tree, va_gc> *types[2];
2678 unsigned ix;
2680 for (i = 0; i < 3; ++i)
2682 if (args[i])
2683 argtypes[i] = unlowered_expr_type (args[i]);
2684 else
2685 argtypes[i] = NULL_TREE;
2688 switch (code)
2690 /* 4 For every pair T, VQ), where T is an arithmetic or enumeration type,
2691 and VQ is either volatile or empty, there exist candidate operator
2692 functions of the form
2693 VQ T& operator++(VQ T&); */
2695 case POSTINCREMENT_EXPR:
2696 case PREINCREMENT_EXPR:
2697 case POSTDECREMENT_EXPR:
2698 case PREDECREMENT_EXPR:
2699 case MODIFY_EXPR:
2700 ref1 = 1;
2701 break;
2703 /* 24There also exist candidate operator functions of the form
2704 bool operator!(bool);
2705 bool operator&&(bool, bool);
2706 bool operator||(bool, bool); */
2708 case TRUTH_NOT_EXPR:
2709 build_builtin_candidate
2710 (candidates, fnname, boolean_type_node,
2711 NULL_TREE, args, argtypes, flags, complain);
2712 return;
2714 case TRUTH_ORIF_EXPR:
2715 case TRUTH_ANDIF_EXPR:
2716 build_builtin_candidate
2717 (candidates, fnname, boolean_type_node,
2718 boolean_type_node, args, argtypes, flags, complain);
2719 return;
2721 case ADDR_EXPR:
2722 case COMPOUND_EXPR:
2723 case COMPONENT_REF:
2724 return;
2726 case COND_EXPR:
2727 case EQ_EXPR:
2728 case NE_EXPR:
2729 case LT_EXPR:
2730 case LE_EXPR:
2731 case GT_EXPR:
2732 case GE_EXPR:
2733 enum_p = 1;
2734 /* Fall through. */
2736 default:
2737 ref1 = 0;
2740 types[0] = make_tree_vector ();
2741 types[1] = make_tree_vector ();
2743 for (i = 0; i < 2; ++i)
2745 if (! args[i])
2747 else if (MAYBE_CLASS_TYPE_P (argtypes[i]))
2749 tree convs;
2751 if (i == 0 && code == MODIFY_EXPR && code2 == NOP_EXPR)
2752 return;
2754 convs = lookup_conversions (argtypes[i]);
2756 if (code == COND_EXPR)
2758 if (real_lvalue_p (args[i]))
2759 vec_safe_push (types[i], build_reference_type (argtypes[i]));
2761 vec_safe_push (types[i], TYPE_MAIN_VARIANT (argtypes[i]));
2764 else if (! convs)
2765 return;
2767 for (; convs; convs = TREE_CHAIN (convs))
2769 type = TREE_TYPE (convs);
2771 if (i == 0 && ref1
2772 && (TREE_CODE (type) != REFERENCE_TYPE
2773 || CP_TYPE_CONST_P (TREE_TYPE (type))))
2774 continue;
2776 if (code == COND_EXPR && TREE_CODE (type) == REFERENCE_TYPE)
2777 vec_safe_push (types[i], type);
2779 type = non_reference (type);
2780 if (i != 0 || ! ref1)
2782 type = cv_unqualified (type_decays_to (type));
2783 if (enum_p && TREE_CODE (type) == ENUMERAL_TYPE)
2784 vec_safe_push (types[i], type);
2785 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
2786 type = type_promotes_to (type);
2789 if (! vec_member (type, types[i]))
2790 vec_safe_push (types[i], type);
2793 else
2795 if (code == COND_EXPR && real_lvalue_p (args[i]))
2796 vec_safe_push (types[i], build_reference_type (argtypes[i]));
2797 type = non_reference (argtypes[i]);
2798 if (i != 0 || ! ref1)
2800 type = cv_unqualified (type_decays_to (type));
2801 if (enum_p && UNSCOPED_ENUM_P (type))
2802 vec_safe_push (types[i], type);
2803 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
2804 type = type_promotes_to (type);
2806 vec_safe_push (types[i], type);
2810 /* Run through the possible parameter types of both arguments,
2811 creating candidates with those parameter types. */
2812 FOR_EACH_VEC_ELT_REVERSE (*(types[0]), ix, t)
2814 unsigned jx;
2815 tree u;
2817 if (!types[1]->is_empty ())
2818 FOR_EACH_VEC_ELT_REVERSE (*(types[1]), jx, u)
2819 add_builtin_candidate
2820 (candidates, code, code2, fnname, t,
2821 u, args, argtypes, flags, complain);
2822 else
2823 add_builtin_candidate
2824 (candidates, code, code2, fnname, t,
2825 NULL_TREE, args, argtypes, flags, complain);
2828 release_tree_vector (types[0]);
2829 release_tree_vector (types[1]);
2833 /* If TMPL can be successfully instantiated as indicated by
2834 EXPLICIT_TARGS and ARGLIST, adds the instantiation to CANDIDATES.
2836 TMPL is the template. EXPLICIT_TARGS are any explicit template
2837 arguments. ARGLIST is the arguments provided at the call-site.
2838 This does not change ARGLIST. The RETURN_TYPE is the desired type
2839 for conversion operators. If OBJ is NULL_TREE, FLAGS and CTYPE are
2840 as for add_function_candidate. If an OBJ is supplied, FLAGS and
2841 CTYPE are ignored, and OBJ is as for add_conv_candidate. */
2843 static struct z_candidate*
2844 add_template_candidate_real (struct z_candidate **candidates, tree tmpl,
2845 tree ctype, tree explicit_targs, tree first_arg,
2846 const vec<tree, va_gc> *arglist, tree return_type,
2847 tree access_path, tree conversion_path,
2848 int flags, tree obj, unification_kind_t strict,
2849 tsubst_flags_t complain)
2851 int ntparms = DECL_NTPARMS (tmpl);
2852 tree targs = make_tree_vec (ntparms);
2853 unsigned int len = vec_safe_length (arglist);
2854 unsigned int nargs = (first_arg == NULL_TREE ? 0 : 1) + len;
2855 unsigned int skip_without_in_chrg = 0;
2856 tree first_arg_without_in_chrg = first_arg;
2857 tree *args_without_in_chrg;
2858 unsigned int nargs_without_in_chrg;
2859 unsigned int ia, ix;
2860 tree arg;
2861 struct z_candidate *cand;
2862 tree fn;
2863 struct rejection_reason *reason = NULL;
2864 int errs;
2866 /* We don't do deduction on the in-charge parameter, the VTT
2867 parameter or 'this'. */
2868 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (tmpl))
2870 if (first_arg_without_in_chrg != NULL_TREE)
2871 first_arg_without_in_chrg = NULL_TREE;
2872 else
2873 ++skip_without_in_chrg;
2876 if ((DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (tmpl)
2877 || DECL_BASE_CONSTRUCTOR_P (tmpl))
2878 && CLASSTYPE_VBASECLASSES (DECL_CONTEXT (tmpl)))
2880 if (first_arg_without_in_chrg != NULL_TREE)
2881 first_arg_without_in_chrg = NULL_TREE;
2882 else
2883 ++skip_without_in_chrg;
2886 if (len < skip_without_in_chrg)
2887 return NULL;
2889 nargs_without_in_chrg = ((first_arg_without_in_chrg != NULL_TREE ? 1 : 0)
2890 + (len - skip_without_in_chrg));
2891 args_without_in_chrg = XALLOCAVEC (tree, nargs_without_in_chrg);
2892 ia = 0;
2893 if (first_arg_without_in_chrg != NULL_TREE)
2895 args_without_in_chrg[ia] = first_arg_without_in_chrg;
2896 ++ia;
2898 for (ix = skip_without_in_chrg;
2899 vec_safe_iterate (arglist, ix, &arg);
2900 ++ix)
2902 args_without_in_chrg[ia] = arg;
2903 ++ia;
2905 gcc_assert (ia == nargs_without_in_chrg);
2907 errs = errorcount+sorrycount;
2908 fn = fn_type_unification (tmpl, explicit_targs, targs,
2909 args_without_in_chrg,
2910 nargs_without_in_chrg,
2911 return_type, strict, flags, false);
2913 if (fn == error_mark_node)
2915 /* Don't repeat unification later if it already resulted in errors. */
2916 if (errorcount+sorrycount == errs)
2917 reason = template_unification_rejection (tmpl, explicit_targs,
2918 targs, args_without_in_chrg,
2919 nargs_without_in_chrg,
2920 return_type, strict, flags);
2921 else
2922 reason = template_unification_error_rejection ();
2923 goto fail;
2926 /* In [class.copy]:
2928 A member function template is never instantiated to perform the
2929 copy of a class object to an object of its class type.
2931 It's a little unclear what this means; the standard explicitly
2932 does allow a template to be used to copy a class. For example,
2935 struct A {
2936 A(A&);
2937 template <class T> A(const T&);
2939 const A f ();
2940 void g () { A a (f ()); }
2942 the member template will be used to make the copy. The section
2943 quoted above appears in the paragraph that forbids constructors
2944 whose only parameter is (a possibly cv-qualified variant of) the
2945 class type, and a logical interpretation is that the intent was
2946 to forbid the instantiation of member templates which would then
2947 have that form. */
2948 if (DECL_CONSTRUCTOR_P (fn) && nargs == 2)
2950 tree arg_types = FUNCTION_FIRST_USER_PARMTYPE (fn);
2951 if (arg_types && same_type_p (TYPE_MAIN_VARIANT (TREE_VALUE (arg_types)),
2952 ctype))
2954 reason = invalid_copy_with_fn_template_rejection ();
2955 goto fail;
2959 if (obj != NULL_TREE)
2960 /* Aha, this is a conversion function. */
2961 cand = add_conv_candidate (candidates, fn, obj, first_arg, arglist,
2962 access_path, conversion_path, complain);
2963 else
2964 cand = add_function_candidate (candidates, fn, ctype,
2965 first_arg, arglist, access_path,
2966 conversion_path, flags, complain);
2967 if (DECL_TI_TEMPLATE (fn) != tmpl)
2968 /* This situation can occur if a member template of a template
2969 class is specialized. Then, instantiate_template might return
2970 an instantiation of the specialization, in which case the
2971 DECL_TI_TEMPLATE field will point at the original
2972 specialization. For example:
2974 template <class T> struct S { template <class U> void f(U);
2975 template <> void f(int) {}; };
2976 S<double> sd;
2977 sd.f(3);
2979 Here, TMPL will be template <class U> S<double>::f(U).
2980 And, instantiate template will give us the specialization
2981 template <> S<double>::f(int). But, the DECL_TI_TEMPLATE field
2982 for this will point at template <class T> template <> S<T>::f(int),
2983 so that we can find the definition. For the purposes of
2984 overload resolution, however, we want the original TMPL. */
2985 cand->template_decl = build_template_info (tmpl, targs);
2986 else
2987 cand->template_decl = DECL_TEMPLATE_INFO (fn);
2988 cand->explicit_targs = explicit_targs;
2990 return cand;
2991 fail:
2992 return add_candidate (candidates, tmpl, first_arg, arglist, nargs, NULL,
2993 access_path, conversion_path, 0, reason);
2997 static struct z_candidate *
2998 add_template_candidate (struct z_candidate **candidates, tree tmpl, tree ctype,
2999 tree explicit_targs, tree first_arg,
3000 const vec<tree, va_gc> *arglist, tree return_type,
3001 tree access_path, tree conversion_path, int flags,
3002 unification_kind_t strict, tsubst_flags_t complain)
3004 return
3005 add_template_candidate_real (candidates, tmpl, ctype,
3006 explicit_targs, first_arg, arglist,
3007 return_type, access_path, conversion_path,
3008 flags, NULL_TREE, strict, complain);
3012 static struct z_candidate *
3013 add_template_conv_candidate (struct z_candidate **candidates, tree tmpl,
3014 tree obj, tree first_arg,
3015 const vec<tree, va_gc> *arglist,
3016 tree return_type, tree access_path,
3017 tree conversion_path, tsubst_flags_t complain)
3019 return
3020 add_template_candidate_real (candidates, tmpl, NULL_TREE, NULL_TREE,
3021 first_arg, arglist, return_type, access_path,
3022 conversion_path, 0, obj, DEDUCE_CONV,
3023 complain);
3026 /* The CANDS are the set of candidates that were considered for
3027 overload resolution. Return the set of viable candidates, or CANDS
3028 if none are viable. If any of the candidates were viable, set
3029 *ANY_VIABLE_P to true. STRICT_P is true if a candidate should be
3030 considered viable only if it is strictly viable. */
3032 static struct z_candidate*
3033 splice_viable (struct z_candidate *cands,
3034 bool strict_p,
3035 bool *any_viable_p)
3037 struct z_candidate *viable;
3038 struct z_candidate **last_viable;
3039 struct z_candidate **cand;
3041 /* Be strict inside templates, since build_over_call won't actually
3042 do the conversions to get pedwarns. */
3043 if (processing_template_decl)
3044 strict_p = true;
3046 viable = NULL;
3047 last_viable = &viable;
3048 *any_viable_p = false;
3050 cand = &cands;
3051 while (*cand)
3053 struct z_candidate *c = *cand;
3054 if (strict_p ? c->viable == 1 : c->viable)
3056 *last_viable = c;
3057 *cand = c->next;
3058 c->next = NULL;
3059 last_viable = &c->next;
3060 *any_viable_p = true;
3062 else
3063 cand = &c->next;
3066 return viable ? viable : cands;
3069 static bool
3070 any_strictly_viable (struct z_candidate *cands)
3072 for (; cands; cands = cands->next)
3073 if (cands->viable == 1)
3074 return true;
3075 return false;
3078 /* OBJ is being used in an expression like "OBJ.f (...)". In other
3079 words, it is about to become the "this" pointer for a member
3080 function call. Take the address of the object. */
3082 static tree
3083 build_this (tree obj)
3085 /* In a template, we are only concerned about the type of the
3086 expression, so we can take a shortcut. */
3087 if (processing_template_decl)
3088 return build_address (obj);
3090 return cp_build_addr_expr (obj, tf_warning_or_error);
3093 /* Returns true iff functions are equivalent. Equivalent functions are
3094 not '==' only if one is a function-local extern function or if
3095 both are extern "C". */
3097 static inline int
3098 equal_functions (tree fn1, tree fn2)
3100 if (TREE_CODE (fn1) != TREE_CODE (fn2))
3101 return 0;
3102 if (TREE_CODE (fn1) == TEMPLATE_DECL)
3103 return fn1 == fn2;
3104 if (DECL_LOCAL_FUNCTION_P (fn1) || DECL_LOCAL_FUNCTION_P (fn2)
3105 || DECL_EXTERN_C_FUNCTION_P (fn1))
3106 return decls_match (fn1, fn2);
3107 return fn1 == fn2;
3110 /* Print information about a candidate being rejected due to INFO. */
3112 static void
3113 print_conversion_rejection (location_t loc, struct conversion_info *info)
3115 if (info->n_arg == -1)
3116 /* Conversion of implicit `this' argument failed. */
3117 inform (loc, " no known conversion for implicit "
3118 "%<this%> parameter from %qT to %qT",
3119 info->from_type, info->to_type);
3120 else
3121 inform (loc, " no known conversion for argument %d from %qT to %qT",
3122 info->n_arg+1, info->from_type, info->to_type);
3125 /* Print information about a candidate with WANT parameters and we found
3126 HAVE. */
3128 static void
3129 print_arity_information (location_t loc, unsigned int have, unsigned int want)
3131 inform_n (loc, want,
3132 " candidate expects %d argument, %d provided",
3133 " candidate expects %d arguments, %d provided",
3134 want, have);
3137 /* Print information about one overload candidate CANDIDATE. MSGSTR
3138 is the text to print before the candidate itself.
3140 NOTE: Unlike most diagnostic functions in GCC, MSGSTR is expected
3141 to have been run through gettext by the caller. This wart makes
3142 life simpler in print_z_candidates and for the translators. */
3144 static void
3145 print_z_candidate (location_t loc, const char *msgstr,
3146 struct z_candidate *candidate)
3148 const char *msg = (msgstr == NULL
3149 ? ""
3150 : ACONCAT ((msgstr, " ", NULL)));
3151 location_t cloc = location_of (candidate->fn);
3153 if (TREE_CODE (candidate->fn) == IDENTIFIER_NODE)
3155 cloc = loc;
3156 if (candidate->num_convs == 3)
3157 inform (cloc, "%s%D(%T, %T, %T) <built-in>", msg, candidate->fn,
3158 candidate->convs[0]->type,
3159 candidate->convs[1]->type,
3160 candidate->convs[2]->type);
3161 else if (candidate->num_convs == 2)
3162 inform (cloc, "%s%D(%T, %T) <built-in>", msg, candidate->fn,
3163 candidate->convs[0]->type,
3164 candidate->convs[1]->type);
3165 else
3166 inform (cloc, "%s%D(%T) <built-in>", msg, candidate->fn,
3167 candidate->convs[0]->type);
3169 else if (TYPE_P (candidate->fn))
3170 inform (cloc, "%s%T <conversion>", msg, candidate->fn);
3171 else if (candidate->viable == -1)
3172 inform (cloc, "%s%#D <near match>", msg, candidate->fn);
3173 else if (DECL_DELETED_FN (STRIP_TEMPLATE (candidate->fn)))
3174 inform (cloc, "%s%#D <deleted>", msg, candidate->fn);
3175 else
3176 inform (cloc, "%s%#D", msg, candidate->fn);
3177 /* Give the user some information about why this candidate failed. */
3178 if (candidate->reason != NULL)
3180 struct rejection_reason *r = candidate->reason;
3182 switch (r->code)
3184 case rr_arity:
3185 print_arity_information (cloc, r->u.arity.actual,
3186 r->u.arity.expected);
3187 break;
3188 case rr_arg_conversion:
3189 print_conversion_rejection (cloc, &r->u.conversion);
3190 break;
3191 case rr_bad_arg_conversion:
3192 print_conversion_rejection (cloc, &r->u.bad_conversion);
3193 break;
3194 case rr_explicit_conversion:
3195 inform (cloc, " return type %qT of explicit conversion function "
3196 "cannot be converted to %qT with a qualification "
3197 "conversion", r->u.conversion.from_type,
3198 r->u.conversion.to_type);
3199 break;
3200 case rr_template_conversion:
3201 inform (cloc, " conversion from return type %qT of template "
3202 "conversion function specialization to %qT is not an "
3203 "exact match", r->u.conversion.from_type,
3204 r->u.conversion.to_type);
3205 break;
3206 case rr_template_unification:
3207 /* We use template_unification_error_rejection if unification caused
3208 actual non-SFINAE errors, in which case we don't need to repeat
3209 them here. */
3210 if (r->u.template_unification.tmpl == NULL_TREE)
3212 inform (cloc, " substitution of deduced template arguments "
3213 "resulted in errors seen above");
3214 break;
3216 /* Re-run template unification with diagnostics. */
3217 inform (cloc, " template argument deduction/substitution failed:");
3218 fn_type_unification (r->u.template_unification.tmpl,
3219 r->u.template_unification.explicit_targs,
3220 (make_tree_vec
3221 (r->u.template_unification.num_targs)),
3222 r->u.template_unification.args,
3223 r->u.template_unification.nargs,
3224 r->u.template_unification.return_type,
3225 r->u.template_unification.strict,
3226 r->u.template_unification.flags,
3227 true);
3228 break;
3229 case rr_invalid_copy:
3230 inform (cloc,
3231 " a constructor taking a single argument of its own "
3232 "class type is invalid");
3233 break;
3234 case rr_none:
3235 default:
3236 /* This candidate didn't have any issues or we failed to
3237 handle a particular code. Either way... */
3238 gcc_unreachable ();
3243 static void
3244 print_z_candidates (location_t loc, struct z_candidate *candidates)
3246 struct z_candidate *cand1;
3247 struct z_candidate **cand2;
3248 int n_candidates;
3250 if (!candidates)
3251 return;
3253 /* Remove non-viable deleted candidates. */
3254 cand1 = candidates;
3255 for (cand2 = &cand1; *cand2; )
3257 if (TREE_CODE ((*cand2)->fn) == FUNCTION_DECL
3258 && !(*cand2)->viable
3259 && DECL_DELETED_FN ((*cand2)->fn))
3260 *cand2 = (*cand2)->next;
3261 else
3262 cand2 = &(*cand2)->next;
3264 /* ...if there are any non-deleted ones. */
3265 if (cand1)
3266 candidates = cand1;
3268 /* There may be duplicates in the set of candidates. We put off
3269 checking this condition as long as possible, since we have no way
3270 to eliminate duplicates from a set of functions in less than n^2
3271 time. Now we are about to emit an error message, so it is more
3272 permissible to go slowly. */
3273 for (cand1 = candidates; cand1; cand1 = cand1->next)
3275 tree fn = cand1->fn;
3276 /* Skip builtin candidates and conversion functions. */
3277 if (!DECL_P (fn))
3278 continue;
3279 cand2 = &cand1->next;
3280 while (*cand2)
3282 if (DECL_P ((*cand2)->fn)
3283 && equal_functions (fn, (*cand2)->fn))
3284 *cand2 = (*cand2)->next;
3285 else
3286 cand2 = &(*cand2)->next;
3290 for (n_candidates = 0, cand1 = candidates; cand1; cand1 = cand1->next)
3291 n_candidates++;
3293 inform_n (loc, n_candidates, "candidate is:", "candidates are:");
3294 for (; candidates; candidates = candidates->next)
3295 print_z_candidate (loc, NULL, candidates);
3298 /* USER_SEQ is a user-defined conversion sequence, beginning with a
3299 USER_CONV. STD_SEQ is the standard conversion sequence applied to
3300 the result of the conversion function to convert it to the final
3301 desired type. Merge the two sequences into a single sequence,
3302 and return the merged sequence. */
3304 static conversion *
3305 merge_conversion_sequences (conversion *user_seq, conversion *std_seq)
3307 conversion **t;
3308 bool bad = user_seq->bad_p;
3310 gcc_assert (user_seq->kind == ck_user);
3312 /* Find the end of the second conversion sequence. */
3313 for (t = &std_seq; (*t)->kind != ck_identity; t = &((*t)->u.next))
3315 /* The entire sequence is a user-conversion sequence. */
3316 (*t)->user_conv_p = true;
3317 if (bad)
3318 (*t)->bad_p = true;
3321 /* Replace the identity conversion with the user conversion
3322 sequence. */
3323 *t = user_seq;
3325 return std_seq;
3328 /* Handle overload resolution for initializing an object of class type from
3329 an initializer list. First we look for a suitable constructor that
3330 takes a std::initializer_list; if we don't find one, we then look for a
3331 non-list constructor.
3333 Parameters are as for add_candidates, except that the arguments are in
3334 the form of a CONSTRUCTOR (the initializer list) rather than a vector, and
3335 the RETURN_TYPE parameter is replaced by TOTYPE, the desired type. */
3337 static void
3338 add_list_candidates (tree fns, tree first_arg,
3339 tree init_list, tree totype,
3340 tree explicit_targs, bool template_only,
3341 tree conversion_path, tree access_path,
3342 int flags,
3343 struct z_candidate **candidates,
3344 tsubst_flags_t complain)
3346 vec<tree, va_gc> *args;
3348 gcc_assert (*candidates == NULL);
3350 /* We're looking for a ctor for list-initialization. */
3351 flags |= LOOKUP_LIST_INIT_CTOR;
3352 /* And we don't allow narrowing conversions. We also use this flag to
3353 avoid the copy constructor call for copy-list-initialization. */
3354 flags |= LOOKUP_NO_NARROWING;
3356 /* Always use the default constructor if the list is empty (DR 990). */
3357 if (CONSTRUCTOR_NELTS (init_list) == 0
3358 && TYPE_HAS_DEFAULT_CONSTRUCTOR (totype))
3360 /* If the class has a list ctor, try passing the list as a single
3361 argument first, but only consider list ctors. */
3362 else if (TYPE_HAS_LIST_CTOR (totype))
3364 flags |= LOOKUP_LIST_ONLY;
3365 args = make_tree_vector_single (init_list);
3366 add_candidates (fns, first_arg, args, NULL_TREE,
3367 explicit_targs, template_only, conversion_path,
3368 access_path, flags, candidates, complain);
3369 if (any_strictly_viable (*candidates))
3370 return;
3373 args = ctor_to_vec (init_list);
3375 /* We aren't looking for list-ctors anymore. */
3376 flags &= ~LOOKUP_LIST_ONLY;
3377 /* We allow more user-defined conversions within an init-list. */
3378 flags &= ~LOOKUP_NO_CONVERSION;
3380 add_candidates (fns, first_arg, args, NULL_TREE,
3381 explicit_targs, template_only, conversion_path,
3382 access_path, flags, candidates, complain);
3385 /* Returns the best overload candidate to perform the requested
3386 conversion. This function is used for three the overloading situations
3387 described in [over.match.copy], [over.match.conv], and [over.match.ref].
3388 If TOTYPE is a REFERENCE_TYPE, we're trying to find a direct binding as
3389 per [dcl.init.ref], so we ignore temporary bindings. */
3391 static struct z_candidate *
3392 build_user_type_conversion_1 (tree totype, tree expr, int flags,
3393 tsubst_flags_t complain)
3395 struct z_candidate *candidates, *cand;
3396 tree fromtype;
3397 tree ctors = NULL_TREE;
3398 tree conv_fns = NULL_TREE;
3399 conversion *conv = NULL;
3400 tree first_arg = NULL_TREE;
3401 vec<tree, va_gc> *args = NULL;
3402 bool any_viable_p;
3403 int convflags;
3405 if (!expr)
3406 return NULL;
3408 fromtype = TREE_TYPE (expr);
3410 /* We represent conversion within a hierarchy using RVALUE_CONV and
3411 BASE_CONV, as specified by [over.best.ics]; these become plain
3412 constructor calls, as specified in [dcl.init]. */
3413 gcc_assert (!MAYBE_CLASS_TYPE_P (fromtype) || !MAYBE_CLASS_TYPE_P (totype)
3414 || !DERIVED_FROM_P (totype, fromtype));
3416 if (MAYBE_CLASS_TYPE_P (totype))
3417 /* Use lookup_fnfields_slot instead of lookup_fnfields to avoid
3418 creating a garbage BASELINK; constructors can't be inherited. */
3419 ctors = lookup_fnfields_slot (totype, complete_ctor_identifier);
3421 if (MAYBE_CLASS_TYPE_P (fromtype))
3423 tree to_nonref = non_reference (totype);
3424 if (same_type_ignoring_top_level_qualifiers_p (to_nonref, fromtype) ||
3425 (CLASS_TYPE_P (to_nonref) && CLASS_TYPE_P (fromtype)
3426 && DERIVED_FROM_P (to_nonref, fromtype)))
3428 /* [class.conv.fct] A conversion function is never used to
3429 convert a (possibly cv-qualified) object to the (possibly
3430 cv-qualified) same object type (or a reference to it), to a
3431 (possibly cv-qualified) base class of that type (or a
3432 reference to it)... */
3434 else
3435 conv_fns = lookup_conversions (fromtype);
3438 candidates = 0;
3439 flags |= LOOKUP_NO_CONVERSION;
3440 if (BRACE_ENCLOSED_INITIALIZER_P (expr))
3441 flags |= LOOKUP_NO_NARROWING;
3443 /* It's OK to bind a temporary for converting constructor arguments, but
3444 not in converting the return value of a conversion operator. */
3445 convflags = ((flags & LOOKUP_NO_TEMP_BIND) | LOOKUP_NO_CONVERSION);
3446 flags &= ~LOOKUP_NO_TEMP_BIND;
3448 if (ctors)
3450 int ctorflags = flags;
3452 first_arg = build_int_cst (build_pointer_type (totype), 0);
3454 /* We should never try to call the abstract or base constructor
3455 from here. */
3456 gcc_assert (!DECL_HAS_IN_CHARGE_PARM_P (OVL_CURRENT (ctors))
3457 && !DECL_HAS_VTT_PARM_P (OVL_CURRENT (ctors)));
3459 if (BRACE_ENCLOSED_INITIALIZER_P (expr))
3461 /* List-initialization. */
3462 add_list_candidates (ctors, first_arg, expr, totype, NULL_TREE,
3463 false, TYPE_BINFO (totype), TYPE_BINFO (totype),
3464 ctorflags, &candidates, complain);
3466 else
3468 args = make_tree_vector_single (expr);
3469 add_candidates (ctors, first_arg, args, NULL_TREE, NULL_TREE, false,
3470 TYPE_BINFO (totype), TYPE_BINFO (totype),
3471 ctorflags, &candidates, complain);
3474 for (cand = candidates; cand; cand = cand->next)
3476 cand->second_conv = build_identity_conv (totype, NULL_TREE);
3478 /* If totype isn't a reference, and LOOKUP_NO_TEMP_BIND isn't
3479 set, then this is copy-initialization. In that case, "The
3480 result of the call is then used to direct-initialize the
3481 object that is the destination of the copy-initialization."
3482 [dcl.init]
3484 We represent this in the conversion sequence with an
3485 rvalue conversion, which means a constructor call. */
3486 if (TREE_CODE (totype) != REFERENCE_TYPE
3487 && !(convflags & LOOKUP_NO_TEMP_BIND))
3488 cand->second_conv
3489 = build_conv (ck_rvalue, totype, cand->second_conv);
3493 if (conv_fns)
3494 first_arg = build_this (expr);
3496 for (; conv_fns; conv_fns = TREE_CHAIN (conv_fns))
3498 tree conversion_path = TREE_PURPOSE (conv_fns);
3499 struct z_candidate *old_candidates;
3501 /* If we are called to convert to a reference type, we are trying to
3502 find a direct binding, so don't even consider temporaries. If
3503 we don't find a direct binding, the caller will try again to
3504 look for a temporary binding. */
3505 if (TREE_CODE (totype) == REFERENCE_TYPE)
3506 convflags |= LOOKUP_NO_TEMP_BIND;
3508 old_candidates = candidates;
3509 add_candidates (TREE_VALUE (conv_fns), first_arg, NULL, totype,
3510 NULL_TREE, false,
3511 conversion_path, TYPE_BINFO (fromtype),
3512 flags, &candidates, complain);
3514 for (cand = candidates; cand != old_candidates; cand = cand->next)
3516 tree rettype = TREE_TYPE (TREE_TYPE (cand->fn));
3517 conversion *ics
3518 = implicit_conversion (totype,
3519 rettype,
3521 /*c_cast_p=*/false, convflags,
3522 complain);
3524 /* If LOOKUP_NO_TEMP_BIND isn't set, then this is
3525 copy-initialization. In that case, "The result of the
3526 call is then used to direct-initialize the object that is
3527 the destination of the copy-initialization." [dcl.init]
3529 We represent this in the conversion sequence with an
3530 rvalue conversion, which means a constructor call. But
3531 don't add a second rvalue conversion if there's already
3532 one there. Which there really shouldn't be, but it's
3533 harmless since we'd add it here anyway. */
3534 if (ics && MAYBE_CLASS_TYPE_P (totype) && ics->kind != ck_rvalue
3535 && !(convflags & LOOKUP_NO_TEMP_BIND))
3536 ics = build_conv (ck_rvalue, totype, ics);
3538 cand->second_conv = ics;
3540 if (!ics)
3542 cand->viable = 0;
3543 cand->reason = arg_conversion_rejection (NULL_TREE, -1,
3544 rettype, totype);
3546 else if (DECL_NONCONVERTING_P (cand->fn)
3547 && ics->rank > cr_exact)
3549 /* 13.3.1.5: For direct-initialization, those explicit
3550 conversion functions that are not hidden within S and
3551 yield type T or a type that can be converted to type T
3552 with a qualification conversion (4.4) are also candidate
3553 functions. */
3554 /* 13.3.1.6 doesn't have a parallel restriction, but it should;
3555 I've raised this issue with the committee. --jason 9/2011 */
3556 cand->viable = -1;
3557 cand->reason = explicit_conversion_rejection (rettype, totype);
3559 else if (cand->viable == 1 && ics->bad_p)
3561 cand->viable = -1;
3562 cand->reason
3563 = bad_arg_conversion_rejection (NULL_TREE, -1,
3564 rettype, totype);
3566 else if (primary_template_instantiation_p (cand->fn)
3567 && ics->rank > cr_exact)
3569 /* 13.3.3.1.2: If the user-defined conversion is specified by
3570 a specialization of a conversion function template, the
3571 second standard conversion sequence shall have exact match
3572 rank. */
3573 cand->viable = -1;
3574 cand->reason = template_conversion_rejection (rettype, totype);
3579 candidates = splice_viable (candidates, pedantic, &any_viable_p);
3580 if (!any_viable_p)
3582 if (args)
3583 release_tree_vector (args);
3584 return NULL;
3587 cand = tourney (candidates, complain);
3588 if (cand == 0)
3590 if (complain & tf_error)
3592 error ("conversion from %qT to %qT is ambiguous",
3593 fromtype, totype);
3594 print_z_candidates (location_of (expr), candidates);
3597 cand = candidates; /* any one will do */
3598 cand->second_conv = build_ambiguous_conv (totype, expr);
3599 cand->second_conv->user_conv_p = true;
3600 if (!any_strictly_viable (candidates))
3601 cand->second_conv->bad_p = true;
3602 /* If there are viable candidates, don't set ICS_BAD_FLAG; an
3603 ambiguous conversion is no worse than another user-defined
3604 conversion. */
3606 return cand;
3609 /* Build the user conversion sequence. */
3610 conv = build_conv
3611 (ck_user,
3612 (DECL_CONSTRUCTOR_P (cand->fn)
3613 ? totype : non_reference (TREE_TYPE (TREE_TYPE (cand->fn)))),
3614 build_identity_conv (TREE_TYPE (expr), expr));
3615 conv->cand = cand;
3616 if (cand->viable == -1)
3617 conv->bad_p = true;
3619 /* Remember that this was a list-initialization. */
3620 if (flags & LOOKUP_NO_NARROWING)
3621 conv->check_narrowing = true;
3623 /* Combine it with the second conversion sequence. */
3624 cand->second_conv = merge_conversion_sequences (conv,
3625 cand->second_conv);
3627 return cand;
3630 /* Wrapper for above. */
3632 tree
3633 build_user_type_conversion (tree totype, tree expr, int flags,
3634 tsubst_flags_t complain)
3636 struct z_candidate *cand;
3637 tree ret;
3639 bool subtime = timevar_cond_start (TV_OVERLOAD);
3640 cand = build_user_type_conversion_1 (totype, expr, flags, complain);
3642 if (cand)
3644 if (cand->second_conv->kind == ck_ambig)
3645 ret = error_mark_node;
3646 else
3648 expr = convert_like (cand->second_conv, expr, complain);
3649 ret = convert_from_reference (expr);
3652 else
3653 ret = NULL_TREE;
3655 timevar_cond_stop (TV_OVERLOAD, subtime);
3656 return ret;
3659 /* Subroutine of convert_nontype_argument.
3661 EXPR is an argument for a template non-type parameter of integral or
3662 enumeration type. Do any necessary conversions (that are permitted for
3663 non-type arguments) to convert it to the parameter type.
3665 If conversion is successful, returns the converted expression;
3666 otherwise, returns error_mark_node. */
3668 tree
3669 build_integral_nontype_arg_conv (tree type, tree expr, tsubst_flags_t complain)
3671 conversion *conv;
3672 void *p;
3673 tree t;
3674 location_t loc = EXPR_LOC_OR_HERE (expr);
3676 if (error_operand_p (expr))
3677 return error_mark_node;
3679 gcc_assert (INTEGRAL_OR_ENUMERATION_TYPE_P (type));
3681 /* Get the high-water mark for the CONVERSION_OBSTACK. */
3682 p = conversion_obstack_alloc (0);
3684 conv = implicit_conversion (type, TREE_TYPE (expr), expr,
3685 /*c_cast_p=*/false,
3686 LOOKUP_IMPLICIT, complain);
3688 /* for a non-type template-parameter of integral or
3689 enumeration type, integral promotions (4.5) and integral
3690 conversions (4.7) are applied. */
3691 /* It should be sufficient to check the outermost conversion step, since
3692 there are no qualification conversions to integer type. */
3693 if (conv)
3694 switch (conv->kind)
3696 /* A conversion function is OK. If it isn't constexpr, we'll
3697 complain later that the argument isn't constant. */
3698 case ck_user:
3699 /* The lvalue-to-rvalue conversion is OK. */
3700 case ck_rvalue:
3701 case ck_identity:
3702 break;
3704 case ck_std:
3705 t = next_conversion (conv)->type;
3706 if (INTEGRAL_OR_ENUMERATION_TYPE_P (t))
3707 break;
3709 if (complain & tf_error)
3710 error_at (loc, "conversion from %qT to %qT not considered for "
3711 "non-type template argument", t, type);
3712 /* and fall through. */
3714 default:
3715 conv = NULL;
3716 break;
3719 if (conv)
3720 expr = convert_like (conv, expr, complain);
3721 else
3722 expr = error_mark_node;
3724 /* Free all the conversions we allocated. */
3725 obstack_free (&conversion_obstack, p);
3727 return expr;
3730 /* Do any initial processing on the arguments to a function call. */
3732 static vec<tree, va_gc> *
3733 resolve_args (vec<tree, va_gc> *args, tsubst_flags_t complain)
3735 unsigned int ix;
3736 tree arg;
3738 FOR_EACH_VEC_SAFE_ELT (args, ix, arg)
3740 if (error_operand_p (arg))
3741 return NULL;
3742 else if (VOID_TYPE_P (TREE_TYPE (arg)))
3744 if (complain & tf_error)
3745 error ("invalid use of void expression");
3746 return NULL;
3748 else if (invalid_nonstatic_memfn_p (arg, complain))
3749 return NULL;
3751 return args;
3754 /* Perform overload resolution on FN, which is called with the ARGS.
3756 Return the candidate function selected by overload resolution, or
3757 NULL if the event that overload resolution failed. In the case
3758 that overload resolution fails, *CANDIDATES will be the set of
3759 candidates considered, and ANY_VIABLE_P will be set to true or
3760 false to indicate whether or not any of the candidates were
3761 viable.
3763 The ARGS should already have gone through RESOLVE_ARGS before this
3764 function is called. */
3766 static struct z_candidate *
3767 perform_overload_resolution (tree fn,
3768 const vec<tree, va_gc> *args,
3769 struct z_candidate **candidates,
3770 bool *any_viable_p, tsubst_flags_t complain)
3772 struct z_candidate *cand;
3773 tree explicit_targs;
3774 int template_only;
3776 bool subtime = timevar_cond_start (TV_OVERLOAD);
3778 explicit_targs = NULL_TREE;
3779 template_only = 0;
3781 *candidates = NULL;
3782 *any_viable_p = true;
3784 /* Check FN. */
3785 gcc_assert (TREE_CODE (fn) == FUNCTION_DECL
3786 || TREE_CODE (fn) == TEMPLATE_DECL
3787 || TREE_CODE (fn) == OVERLOAD
3788 || TREE_CODE (fn) == TEMPLATE_ID_EXPR);
3790 if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
3792 explicit_targs = TREE_OPERAND (fn, 1);
3793 fn = TREE_OPERAND (fn, 0);
3794 template_only = 1;
3797 /* Add the various candidate functions. */
3798 add_candidates (fn, NULL_TREE, args, NULL_TREE,
3799 explicit_targs, template_only,
3800 /*conversion_path=*/NULL_TREE,
3801 /*access_path=*/NULL_TREE,
3802 LOOKUP_NORMAL,
3803 candidates, complain);
3805 *candidates = splice_viable (*candidates, pedantic, any_viable_p);
3806 if (*any_viable_p)
3807 cand = tourney (*candidates, complain);
3808 else
3809 cand = NULL;
3811 timevar_cond_stop (TV_OVERLOAD, subtime);
3812 return cand;
3815 /* Print an error message about being unable to build a call to FN with
3816 ARGS. ANY_VIABLE_P indicates whether any candidate functions could
3817 be located; CANDIDATES is a possibly empty list of such
3818 functions. */
3820 static void
3821 print_error_for_call_failure (tree fn, vec<tree, va_gc> *args, bool any_viable_p,
3822 struct z_candidate *candidates)
3824 tree name = DECL_NAME (OVL_CURRENT (fn));
3825 location_t loc = location_of (name);
3827 if (!any_viable_p)
3828 error_at (loc, "no matching function for call to %<%D(%A)%>",
3829 name, build_tree_list_vec (args));
3830 else
3831 error_at (loc, "call of overloaded %<%D(%A)%> is ambiguous",
3832 name, build_tree_list_vec (args));
3833 if (candidates)
3834 print_z_candidates (loc, candidates);
3837 /* Return an expression for a call to FN (a namespace-scope function,
3838 or a static member function) with the ARGS. This may change
3839 ARGS. */
3841 tree
3842 build_new_function_call (tree fn, vec<tree, va_gc> **args, bool koenig_p,
3843 tsubst_flags_t complain)
3845 struct z_candidate *candidates, *cand;
3846 bool any_viable_p;
3847 void *p;
3848 tree result;
3850 if (args != NULL && *args != NULL)
3852 *args = resolve_args (*args, complain);
3853 if (*args == NULL)
3854 return error_mark_node;
3857 if (flag_tm)
3858 tm_malloc_replacement (fn);
3860 /* If this function was found without using argument dependent
3861 lookup, then we want to ignore any undeclared friend
3862 functions. */
3863 if (!koenig_p)
3865 tree orig_fn = fn;
3867 fn = remove_hidden_names (fn);
3868 if (!fn)
3870 if (complain & tf_error)
3871 print_error_for_call_failure (orig_fn, *args, false, NULL);
3872 return error_mark_node;
3876 /* Get the high-water mark for the CONVERSION_OBSTACK. */
3877 p = conversion_obstack_alloc (0);
3879 cand = perform_overload_resolution (fn, *args, &candidates, &any_viable_p,
3880 complain);
3882 if (!cand)
3884 if (complain & tf_error)
3886 if (!any_viable_p && candidates && ! candidates->next
3887 && (TREE_CODE (candidates->fn) == FUNCTION_DECL))
3888 return cp_build_function_call_vec (candidates->fn, args, complain);
3889 if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
3890 fn = TREE_OPERAND (fn, 0);
3891 print_error_for_call_failure (fn, *args, any_viable_p, candidates);
3893 result = error_mark_node;
3895 else
3897 int flags = LOOKUP_NORMAL;
3898 /* If fn is template_id_expr, the call has explicit template arguments
3899 (e.g. func<int>(5)), communicate this info to build_over_call
3900 through flags so that later we can use it to decide whether to warn
3901 about peculiar null pointer conversion. */
3902 if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
3903 flags |= LOOKUP_EXPLICIT_TMPL_ARGS;
3904 result = build_over_call (cand, flags, complain);
3907 /* Free all the conversions we allocated. */
3908 obstack_free (&conversion_obstack, p);
3910 return result;
3913 /* Build a call to a global operator new. FNNAME is the name of the
3914 operator (either "operator new" or "operator new[]") and ARGS are
3915 the arguments provided. This may change ARGS. *SIZE points to the
3916 total number of bytes required by the allocation, and is updated if
3917 that is changed here. *COOKIE_SIZE is non-NULL if a cookie should
3918 be used. If this function determines that no cookie should be
3919 used, after all, *COOKIE_SIZE is set to NULL_TREE. If SIZE_CHECK
3920 is not NULL_TREE, it is evaluated before calculating the final
3921 array size, and if it fails, the array size is replaced with
3922 (size_t)-1 (usually triggering a std::bad_alloc exception). If FN
3923 is non-NULL, it will be set, upon return, to the allocation
3924 function called. */
3926 tree
3927 build_operator_new_call (tree fnname, vec<tree, va_gc> **args,
3928 tree *size, tree *cookie_size, tree size_check,
3929 tree *fn, tsubst_flags_t complain)
3931 tree original_size = *size;
3932 tree fns;
3933 struct z_candidate *candidates;
3934 struct z_candidate *cand;
3935 bool any_viable_p;
3937 if (fn)
3938 *fn = NULL_TREE;
3939 /* Set to (size_t)-1 if the size check fails. */
3940 if (size_check != NULL_TREE)
3941 *size = fold_build3 (COND_EXPR, sizetype, size_check,
3942 original_size, TYPE_MAX_VALUE (sizetype));
3943 vec_safe_insert (*args, 0, *size);
3944 *args = resolve_args (*args, complain);
3945 if (*args == NULL)
3946 return error_mark_node;
3948 /* Based on:
3950 [expr.new]
3952 If this lookup fails to find the name, or if the allocated type
3953 is not a class type, the allocation function's name is looked
3954 up in the global scope.
3956 we disregard block-scope declarations of "operator new". */
3957 fns = lookup_function_nonclass (fnname, *args, /*block_p=*/false);
3959 /* Figure out what function is being called. */
3960 cand = perform_overload_resolution (fns, *args, &candidates, &any_viable_p,
3961 complain);
3963 /* If no suitable function could be found, issue an error message
3964 and give up. */
3965 if (!cand)
3967 if (complain & tf_error)
3968 print_error_for_call_failure (fns, *args, any_viable_p, candidates);
3969 return error_mark_node;
3972 /* If a cookie is required, add some extra space. Whether
3973 or not a cookie is required cannot be determined until
3974 after we know which function was called. */
3975 if (*cookie_size)
3977 bool use_cookie = true;
3978 if (!abi_version_at_least (2))
3980 /* In G++ 3.2, the check was implemented incorrectly; it
3981 looked at the placement expression, rather than the
3982 type of the function. */
3983 if ((*args)->length () == 2
3984 && same_type_p (TREE_TYPE ((**args)[1]), ptr_type_node))
3985 use_cookie = false;
3987 else
3989 tree arg_types;
3991 arg_types = TYPE_ARG_TYPES (TREE_TYPE (cand->fn));
3992 /* Skip the size_t parameter. */
3993 arg_types = TREE_CHAIN (arg_types);
3994 /* Check the remaining parameters (if any). */
3995 if (arg_types
3996 && TREE_CHAIN (arg_types) == void_list_node
3997 && same_type_p (TREE_VALUE (arg_types),
3998 ptr_type_node))
3999 use_cookie = false;
4001 /* If we need a cookie, adjust the number of bytes allocated. */
4002 if (use_cookie)
4004 /* Update the total size. */
4005 *size = size_binop (PLUS_EXPR, original_size, *cookie_size);
4006 /* Set to (size_t)-1 if the size check fails. */
4007 gcc_assert (size_check != NULL_TREE);
4008 *size = fold_build3 (COND_EXPR, sizetype, size_check,
4009 *size, TYPE_MAX_VALUE (sizetype));
4010 /* Update the argument list to reflect the adjusted size. */
4011 (**args)[0] = *size;
4013 else
4014 *cookie_size = NULL_TREE;
4017 /* Tell our caller which function we decided to call. */
4018 if (fn)
4019 *fn = cand->fn;
4021 /* Build the CALL_EXPR. */
4022 return build_over_call (cand, LOOKUP_NORMAL, complain);
4025 /* Build a new call to operator(). This may change ARGS. */
4027 static tree
4028 build_op_call_1 (tree obj, vec<tree, va_gc> **args, tsubst_flags_t complain)
4030 struct z_candidate *candidates = 0, *cand;
4031 tree fns, convs, first_mem_arg = NULL_TREE;
4032 tree type = TREE_TYPE (obj);
4033 bool any_viable_p;
4034 tree result = NULL_TREE;
4035 void *p;
4037 if (error_operand_p (obj))
4038 return error_mark_node;
4040 obj = prep_operand (obj);
4042 if (TYPE_PTRMEMFUNC_P (type))
4044 if (complain & tf_error)
4045 /* It's no good looking for an overloaded operator() on a
4046 pointer-to-member-function. */
4047 error ("pointer-to-member function %E cannot be called without an object; consider using .* or ->*", obj);
4048 return error_mark_node;
4051 if (TYPE_BINFO (type))
4053 fns = lookup_fnfields (TYPE_BINFO (type), ansi_opname (CALL_EXPR), 1);
4054 if (fns == error_mark_node)
4055 return error_mark_node;
4057 else
4058 fns = NULL_TREE;
4060 if (args != NULL && *args != NULL)
4062 *args = resolve_args (*args, complain);
4063 if (*args == NULL)
4064 return error_mark_node;
4067 /* Get the high-water mark for the CONVERSION_OBSTACK. */
4068 p = conversion_obstack_alloc (0);
4070 if (fns)
4072 first_mem_arg = build_this (obj);
4074 add_candidates (BASELINK_FUNCTIONS (fns),
4075 first_mem_arg, *args, NULL_TREE,
4076 NULL_TREE, false,
4077 BASELINK_BINFO (fns), BASELINK_ACCESS_BINFO (fns),
4078 LOOKUP_NORMAL, &candidates, complain);
4081 convs = lookup_conversions (type);
4083 for (; convs; convs = TREE_CHAIN (convs))
4085 tree fns = TREE_VALUE (convs);
4086 tree totype = TREE_TYPE (convs);
4088 if ((TREE_CODE (totype) == POINTER_TYPE
4089 && TREE_CODE (TREE_TYPE (totype)) == FUNCTION_TYPE)
4090 || (TREE_CODE (totype) == REFERENCE_TYPE
4091 && TREE_CODE (TREE_TYPE (totype)) == FUNCTION_TYPE)
4092 || (TREE_CODE (totype) == REFERENCE_TYPE
4093 && TREE_CODE (TREE_TYPE (totype)) == POINTER_TYPE
4094 && TREE_CODE (TREE_TYPE (TREE_TYPE (totype))) == FUNCTION_TYPE))
4095 for (; fns; fns = OVL_NEXT (fns))
4097 tree fn = OVL_CURRENT (fns);
4099 if (DECL_NONCONVERTING_P (fn))
4100 continue;
4102 if (TREE_CODE (fn) == TEMPLATE_DECL)
4103 add_template_conv_candidate
4104 (&candidates, fn, obj, NULL_TREE, *args, totype,
4105 /*access_path=*/NULL_TREE,
4106 /*conversion_path=*/NULL_TREE, complain);
4107 else
4108 add_conv_candidate (&candidates, fn, obj, NULL_TREE,
4109 *args, /*conversion_path=*/NULL_TREE,
4110 /*access_path=*/NULL_TREE, complain);
4114 candidates = splice_viable (candidates, pedantic, &any_viable_p);
4115 if (!any_viable_p)
4117 if (complain & tf_error)
4119 error ("no match for call to %<(%T) (%A)%>", TREE_TYPE (obj),
4120 build_tree_list_vec (*args));
4121 print_z_candidates (location_of (TREE_TYPE (obj)), candidates);
4123 result = error_mark_node;
4125 else
4127 cand = tourney (candidates, complain);
4128 if (cand == 0)
4130 if (complain & tf_error)
4132 error ("call of %<(%T) (%A)%> is ambiguous",
4133 TREE_TYPE (obj), build_tree_list_vec (*args));
4134 print_z_candidates (location_of (TREE_TYPE (obj)), candidates);
4136 result = error_mark_node;
4138 /* Since cand->fn will be a type, not a function, for a conversion
4139 function, we must be careful not to unconditionally look at
4140 DECL_NAME here. */
4141 else if (TREE_CODE (cand->fn) == FUNCTION_DECL
4142 && DECL_OVERLOADED_OPERATOR_P (cand->fn) == CALL_EXPR)
4143 result = build_over_call (cand, LOOKUP_NORMAL, complain);
4144 else
4146 obj = convert_like_with_context (cand->convs[0], obj, cand->fn, -1,
4147 complain);
4148 obj = convert_from_reference (obj);
4149 result = cp_build_function_call_vec (obj, args, complain);
4153 /* Free all the conversions we allocated. */
4154 obstack_free (&conversion_obstack, p);
4156 return result;
4159 /* Wrapper for above. */
4161 tree
4162 build_op_call (tree obj, vec<tree, va_gc> **args, tsubst_flags_t complain)
4164 tree ret;
4165 bool subtime = timevar_cond_start (TV_OVERLOAD);
4166 ret = build_op_call_1 (obj, args, complain);
4167 timevar_cond_stop (TV_OVERLOAD, subtime);
4168 return ret;
4171 /* Called by op_error to prepare format strings suitable for the error
4172 function. It concatenates a prefix (controlled by MATCH), ERRMSG,
4173 and a suffix (controlled by NTYPES). */
4175 static const char *
4176 op_error_string (const char *errmsg, int ntypes, bool match)
4178 const char *msg;
4180 const char *msgp = concat (match ? G_("ambiguous overload for ")
4181 : G_("no match for "), errmsg, NULL);
4183 if (ntypes == 3)
4184 msg = concat (msgp, G_(" (operand types are %qT, %qT, and %qT)"), NULL);
4185 else if (ntypes == 2)
4186 msg = concat (msgp, G_(" (operand types are %qT and %qT)"), NULL);
4187 else
4188 msg = concat (msgp, G_(" (operand type is %qT)"), NULL);
4190 return msg;
4193 static void
4194 op_error (location_t loc, enum tree_code code, enum tree_code code2,
4195 tree arg1, tree arg2, tree arg3, bool match)
4197 const char *opname;
4199 if (code == MODIFY_EXPR)
4200 opname = assignment_operator_name_info[code2].name;
4201 else
4202 opname = operator_name_info[code].name;
4204 switch (code)
4206 case COND_EXPR:
4207 if (flag_diagnostics_show_caret)
4208 error_at (loc, op_error_string (G_("ternary %<operator?:%>"),
4209 3, match),
4210 TREE_TYPE (arg1), TREE_TYPE (arg2), TREE_TYPE (arg3));
4211 else
4212 error_at (loc, op_error_string (G_("ternary %<operator?:%> "
4213 "in %<%E ? %E : %E%>"), 3, match),
4214 arg1, arg2, arg3,
4215 TREE_TYPE (arg1), TREE_TYPE (arg2), TREE_TYPE (arg3));
4216 break;
4218 case POSTINCREMENT_EXPR:
4219 case POSTDECREMENT_EXPR:
4220 if (flag_diagnostics_show_caret)
4221 error_at (loc, op_error_string (G_("%<operator%s%>"), 1, match),
4222 opname, TREE_TYPE (arg1));
4223 else
4224 error_at (loc, op_error_string (G_("%<operator%s%> in %<%E%s%>"),
4225 1, match),
4226 opname, arg1, opname, TREE_TYPE (arg1));
4227 break;
4229 case ARRAY_REF:
4230 if (flag_diagnostics_show_caret)
4231 error_at (loc, op_error_string (G_("%<operator[]%>"), 2, match),
4232 TREE_TYPE (arg1), TREE_TYPE (arg2));
4233 else
4234 error_at (loc, op_error_string (G_("%<operator[]%> in %<%E[%E]%>"),
4235 2, match),
4236 arg1, arg2, TREE_TYPE (arg1), TREE_TYPE (arg2));
4237 break;
4239 case REALPART_EXPR:
4240 case IMAGPART_EXPR:
4241 if (flag_diagnostics_show_caret)
4242 error_at (loc, op_error_string (G_("%qs"), 1, match),
4243 opname, TREE_TYPE (arg1));
4244 else
4245 error_at (loc, op_error_string (G_("%qs in %<%s %E%>"), 1, match),
4246 opname, opname, arg1, TREE_TYPE (arg1));
4247 break;
4249 default:
4250 if (arg2)
4251 if (flag_diagnostics_show_caret)
4252 error_at (loc, op_error_string (G_("%<operator%s%>"), 2, match),
4253 opname, TREE_TYPE (arg1), TREE_TYPE (arg2));
4254 else
4255 error_at (loc, op_error_string (G_("%<operator%s%> in %<%E %s %E%>"),
4256 2, match),
4257 opname, arg1, opname, arg2,
4258 TREE_TYPE (arg1), TREE_TYPE (arg2));
4259 else
4260 if (flag_diagnostics_show_caret)
4261 error_at (loc, op_error_string (G_("%<operator%s%>"), 1, match),
4262 opname, TREE_TYPE (arg1));
4263 else
4264 error_at (loc, op_error_string (G_("%<operator%s%> in %<%s%E%>"),
4265 1, match),
4266 opname, opname, arg1, TREE_TYPE (arg1));
4267 break;
4271 /* Return the implicit conversion sequence that could be used to
4272 convert E1 to E2 in [expr.cond]. */
4274 static conversion *
4275 conditional_conversion (tree e1, tree e2, tsubst_flags_t complain)
4277 tree t1 = non_reference (TREE_TYPE (e1));
4278 tree t2 = non_reference (TREE_TYPE (e2));
4279 conversion *conv;
4280 bool good_base;
4282 /* [expr.cond]
4284 If E2 is an lvalue: E1 can be converted to match E2 if E1 can be
4285 implicitly converted (clause _conv_) to the type "lvalue reference to
4286 T2", subject to the constraint that in the conversion the
4287 reference must bind directly (_dcl.init.ref_) to an lvalue. */
4288 if (real_lvalue_p (e2))
4290 conv = implicit_conversion (build_reference_type (t2),
4293 /*c_cast_p=*/false,
4294 LOOKUP_NO_TEMP_BIND|LOOKUP_NO_RVAL_BIND
4295 |LOOKUP_ONLYCONVERTING,
4296 complain);
4297 if (conv)
4298 return conv;
4301 /* [expr.cond]
4303 If E1 and E2 have class type, and the underlying class types are
4304 the same or one is a base class of the other: E1 can be converted
4305 to match E2 if the class of T2 is the same type as, or a base
4306 class of, the class of T1, and the cv-qualification of T2 is the
4307 same cv-qualification as, or a greater cv-qualification than, the
4308 cv-qualification of T1. If the conversion is applied, E1 is
4309 changed to an rvalue of type T2 that still refers to the original
4310 source class object (or the appropriate subobject thereof). */
4311 if (CLASS_TYPE_P (t1) && CLASS_TYPE_P (t2)
4312 && ((good_base = DERIVED_FROM_P (t2, t1)) || DERIVED_FROM_P (t1, t2)))
4314 if (good_base && at_least_as_qualified_p (t2, t1))
4316 conv = build_identity_conv (t1, e1);
4317 if (!same_type_p (TYPE_MAIN_VARIANT (t1),
4318 TYPE_MAIN_VARIANT (t2)))
4319 conv = build_conv (ck_base, t2, conv);
4320 else
4321 conv = build_conv (ck_rvalue, t2, conv);
4322 return conv;
4324 else
4325 return NULL;
4327 else
4328 /* [expr.cond]
4330 Otherwise: E1 can be converted to match E2 if E1 can be implicitly
4331 converted to the type that expression E2 would have if E2 were
4332 converted to an rvalue (or the type it has, if E2 is an rvalue). */
4333 return implicit_conversion (t2, t1, e1, /*c_cast_p=*/false,
4334 LOOKUP_IMPLICIT, complain);
4337 /* Implement [expr.cond]. ARG1, ARG2, and ARG3 are the three
4338 arguments to the conditional expression. */
4340 static tree
4341 build_conditional_expr_1 (tree arg1, tree arg2, tree arg3,
4342 tsubst_flags_t complain)
4344 tree arg2_type;
4345 tree arg3_type;
4346 tree result = NULL_TREE;
4347 tree result_type = NULL_TREE;
4348 bool lvalue_p = true;
4349 struct z_candidate *candidates = 0;
4350 struct z_candidate *cand;
4351 void *p;
4352 tree orig_arg2, orig_arg3;
4354 /* As a G++ extension, the second argument to the conditional can be
4355 omitted. (So that `a ? : c' is roughly equivalent to `a ? a :
4356 c'.) If the second operand is omitted, make sure it is
4357 calculated only once. */
4358 if (!arg2)
4360 if (complain & tf_error)
4361 pedwarn (input_location, OPT_Wpedantic,
4362 "ISO C++ forbids omitting the middle term of a ?: expression");
4364 /* Make sure that lvalues remain lvalues. See g++.oliva/ext1.C. */
4365 if (real_lvalue_p (arg1))
4366 arg2 = arg1 = stabilize_reference (arg1);
4367 else
4368 arg2 = arg1 = save_expr (arg1);
4371 /* If something has already gone wrong, just pass that fact up the
4372 tree. */
4373 if (error_operand_p (arg1)
4374 || error_operand_p (arg2)
4375 || error_operand_p (arg3))
4376 return error_mark_node;
4378 orig_arg2 = arg2;
4379 orig_arg3 = arg3;
4381 if (VECTOR_INTEGER_TYPE_P (TREE_TYPE (arg1)))
4383 arg1 = force_rvalue (arg1, complain);
4384 arg2 = force_rvalue (arg2, complain);
4385 arg3 = force_rvalue (arg3, complain);
4387 tree arg1_type = TREE_TYPE (arg1);
4388 arg2_type = TREE_TYPE (arg2);
4389 arg3_type = TREE_TYPE (arg3);
4391 if (TREE_CODE (arg2_type) != VECTOR_TYPE
4392 && TREE_CODE (arg3_type) != VECTOR_TYPE)
4394 if (complain & tf_error)
4395 error ("at least one operand of a vector conditional operator "
4396 "must be a vector");
4397 return error_mark_node;
4400 if ((TREE_CODE (arg2_type) == VECTOR_TYPE)
4401 != (TREE_CODE (arg3_type) == VECTOR_TYPE))
4403 enum stv_conv convert_flag =
4404 scalar_to_vector (input_location, VEC_COND_EXPR, arg2, arg3,
4405 complain & tf_error);
4407 switch (convert_flag)
4409 case stv_error:
4410 return error_mark_node;
4411 case stv_firstarg:
4413 arg2 = convert (TREE_TYPE (arg3_type), arg2);
4414 arg2 = build_vector_from_val (arg3_type, arg2);
4415 arg2_type = TREE_TYPE (arg2);
4416 break;
4418 case stv_secondarg:
4420 arg3 = convert (TREE_TYPE (arg2_type), arg3);
4421 arg3 = build_vector_from_val (arg2_type, arg3);
4422 arg3_type = TREE_TYPE (arg3);
4423 break;
4425 default:
4426 break;
4430 if (!same_type_p (arg2_type, arg3_type)
4431 || TYPE_VECTOR_SUBPARTS (arg1_type)
4432 != TYPE_VECTOR_SUBPARTS (arg2_type)
4433 || TYPE_SIZE (arg1_type) != TYPE_SIZE (arg2_type))
4435 if (complain & tf_error)
4436 error ("incompatible vector types in conditional expression: "
4437 "%qT, %qT and %qT", TREE_TYPE (arg1), TREE_TYPE (orig_arg2),
4438 TREE_TYPE (orig_arg3));
4439 return error_mark_node;
4442 if (!COMPARISON_CLASS_P (arg1))
4443 arg1 = build2 (NE_EXPR, signed_type_for (arg1_type), arg1,
4444 build_zero_cst (arg1_type));
4445 return build3 (VEC_COND_EXPR, arg2_type, arg1, arg2, arg3);
4448 /* [expr.cond]
4450 The first expression is implicitly converted to bool (clause
4451 _conv_). */
4452 arg1 = perform_implicit_conversion_flags (boolean_type_node, arg1, complain,
4453 LOOKUP_NORMAL);
4454 if (error_operand_p (arg1))
4455 return error_mark_node;
4457 /* [expr.cond]
4459 If either the second or the third operand has type (possibly
4460 cv-qualified) void, then the lvalue-to-rvalue (_conv.lval_),
4461 array-to-pointer (_conv.array_), and function-to-pointer
4462 (_conv.func_) standard conversions are performed on the second
4463 and third operands. */
4464 arg2_type = unlowered_expr_type (arg2);
4465 arg3_type = unlowered_expr_type (arg3);
4466 if (VOID_TYPE_P (arg2_type) || VOID_TYPE_P (arg3_type))
4468 /* Do the conversions. We don't these for `void' type arguments
4469 since it can't have any effect and since decay_conversion
4470 does not handle that case gracefully. */
4471 if (!VOID_TYPE_P (arg2_type))
4472 arg2 = decay_conversion (arg2, complain);
4473 if (!VOID_TYPE_P (arg3_type))
4474 arg3 = decay_conversion (arg3, complain);
4475 arg2_type = TREE_TYPE (arg2);
4476 arg3_type = TREE_TYPE (arg3);
4478 /* [expr.cond]
4480 One of the following shall hold:
4482 --The second or the third operand (but not both) is a
4483 throw-expression (_except.throw_); the result is of the
4484 type of the other and is an rvalue.
4486 --Both the second and the third operands have type void; the
4487 result is of type void and is an rvalue.
4489 We must avoid calling force_rvalue for expressions of type
4490 "void" because it will complain that their value is being
4491 used. */
4492 if (TREE_CODE (arg2) == THROW_EXPR
4493 && TREE_CODE (arg3) != THROW_EXPR)
4495 if (!VOID_TYPE_P (arg3_type))
4497 arg3 = force_rvalue (arg3, complain);
4498 if (arg3 == error_mark_node)
4499 return error_mark_node;
4501 arg3_type = TREE_TYPE (arg3);
4502 result_type = arg3_type;
4504 else if (TREE_CODE (arg2) != THROW_EXPR
4505 && TREE_CODE (arg3) == THROW_EXPR)
4507 if (!VOID_TYPE_P (arg2_type))
4509 arg2 = force_rvalue (arg2, complain);
4510 if (arg2 == error_mark_node)
4511 return error_mark_node;
4513 arg2_type = TREE_TYPE (arg2);
4514 result_type = arg2_type;
4516 else if (VOID_TYPE_P (arg2_type) && VOID_TYPE_P (arg3_type))
4517 result_type = void_type_node;
4518 else
4520 if (complain & tf_error)
4522 if (VOID_TYPE_P (arg2_type))
4523 error ("second operand to the conditional operator "
4524 "is of type %<void%>, "
4525 "but the third operand is neither a throw-expression "
4526 "nor of type %<void%>");
4527 else
4528 error ("third operand to the conditional operator "
4529 "is of type %<void%>, "
4530 "but the second operand is neither a throw-expression "
4531 "nor of type %<void%>");
4533 return error_mark_node;
4536 lvalue_p = false;
4537 goto valid_operands;
4539 /* [expr.cond]
4541 Otherwise, if the second and third operand have different types,
4542 and either has (possibly cv-qualified) class type, an attempt is
4543 made to convert each of those operands to the type of the other. */
4544 else if (!same_type_p (arg2_type, arg3_type)
4545 && (CLASS_TYPE_P (arg2_type) || CLASS_TYPE_P (arg3_type)))
4547 conversion *conv2;
4548 conversion *conv3;
4550 /* Get the high-water mark for the CONVERSION_OBSTACK. */
4551 p = conversion_obstack_alloc (0);
4553 conv2 = conditional_conversion (arg2, arg3, complain);
4554 conv3 = conditional_conversion (arg3, arg2, complain);
4556 /* [expr.cond]
4558 If both can be converted, or one can be converted but the
4559 conversion is ambiguous, the program is ill-formed. If
4560 neither can be converted, the operands are left unchanged and
4561 further checking is performed as described below. If exactly
4562 one conversion is possible, that conversion is applied to the
4563 chosen operand and the converted operand is used in place of
4564 the original operand for the remainder of this section. */
4565 if ((conv2 && !conv2->bad_p
4566 && conv3 && !conv3->bad_p)
4567 || (conv2 && conv2->kind == ck_ambig)
4568 || (conv3 && conv3->kind == ck_ambig))
4570 error ("operands to ?: have different types %qT and %qT",
4571 arg2_type, arg3_type);
4572 result = error_mark_node;
4574 else if (conv2 && (!conv2->bad_p || !conv3))
4576 arg2 = convert_like (conv2, arg2, complain);
4577 arg2 = convert_from_reference (arg2);
4578 arg2_type = TREE_TYPE (arg2);
4579 /* Even if CONV2 is a valid conversion, the result of the
4580 conversion may be invalid. For example, if ARG3 has type
4581 "volatile X", and X does not have a copy constructor
4582 accepting a "volatile X&", then even if ARG2 can be
4583 converted to X, the conversion will fail. */
4584 if (error_operand_p (arg2))
4585 result = error_mark_node;
4587 else if (conv3 && (!conv3->bad_p || !conv2))
4589 arg3 = convert_like (conv3, arg3, complain);
4590 arg3 = convert_from_reference (arg3);
4591 arg3_type = TREE_TYPE (arg3);
4592 if (error_operand_p (arg3))
4593 result = error_mark_node;
4596 /* Free all the conversions we allocated. */
4597 obstack_free (&conversion_obstack, p);
4599 if (result)
4600 return result;
4602 /* If, after the conversion, both operands have class type,
4603 treat the cv-qualification of both operands as if it were the
4604 union of the cv-qualification of the operands.
4606 The standard is not clear about what to do in this
4607 circumstance. For example, if the first operand has type
4608 "const X" and the second operand has a user-defined
4609 conversion to "volatile X", what is the type of the second
4610 operand after this step? Making it be "const X" (matching
4611 the first operand) seems wrong, as that discards the
4612 qualification without actually performing a copy. Leaving it
4613 as "volatile X" seems wrong as that will result in the
4614 conditional expression failing altogether, even though,
4615 according to this step, the one operand could be converted to
4616 the type of the other. */
4617 if ((conv2 || conv3)
4618 && CLASS_TYPE_P (arg2_type)
4619 && cp_type_quals (arg2_type) != cp_type_quals (arg3_type))
4620 arg2_type = arg3_type =
4621 cp_build_qualified_type (arg2_type,
4622 cp_type_quals (arg2_type)
4623 | cp_type_quals (arg3_type));
4626 /* [expr.cond]
4628 If the second and third operands are lvalues and have the same
4629 type, the result is of that type and is an lvalue. */
4630 if (real_lvalue_p (arg2)
4631 && real_lvalue_p (arg3)
4632 && same_type_p (arg2_type, arg3_type))
4634 result_type = arg2_type;
4635 arg2 = mark_lvalue_use (arg2);
4636 arg3 = mark_lvalue_use (arg3);
4637 goto valid_operands;
4640 /* [expr.cond]
4642 Otherwise, the result is an rvalue. If the second and third
4643 operand do not have the same type, and either has (possibly
4644 cv-qualified) class type, overload resolution is used to
4645 determine the conversions (if any) to be applied to the operands
4646 (_over.match.oper_, _over.built_). */
4647 lvalue_p = false;
4648 if (!same_type_p (arg2_type, arg3_type)
4649 && (CLASS_TYPE_P (arg2_type) || CLASS_TYPE_P (arg3_type)))
4651 tree args[3];
4652 conversion *conv;
4653 bool any_viable_p;
4655 /* Rearrange the arguments so that add_builtin_candidate only has
4656 to know about two args. In build_builtin_candidate, the
4657 arguments are unscrambled. */
4658 args[0] = arg2;
4659 args[1] = arg3;
4660 args[2] = arg1;
4661 add_builtin_candidates (&candidates,
4662 COND_EXPR,
4663 NOP_EXPR,
4664 ansi_opname (COND_EXPR),
4665 args,
4666 LOOKUP_NORMAL, complain);
4668 /* [expr.cond]
4670 If the overload resolution fails, the program is
4671 ill-formed. */
4672 candidates = splice_viable (candidates, pedantic, &any_viable_p);
4673 if (!any_viable_p)
4675 if (complain & tf_error)
4677 op_error (input_location, COND_EXPR, NOP_EXPR,
4678 arg1, arg2, arg3, FALSE);
4679 print_z_candidates (location_of (arg1), candidates);
4681 return error_mark_node;
4683 cand = tourney (candidates, complain);
4684 if (!cand)
4686 if (complain & tf_error)
4688 op_error (input_location, COND_EXPR, NOP_EXPR,
4689 arg1, arg2, arg3, FALSE);
4690 print_z_candidates (location_of (arg1), candidates);
4692 return error_mark_node;
4695 /* [expr.cond]
4697 Otherwise, the conversions thus determined are applied, and
4698 the converted operands are used in place of the original
4699 operands for the remainder of this section. */
4700 conv = cand->convs[0];
4701 arg1 = convert_like (conv, arg1, complain);
4702 conv = cand->convs[1];
4703 arg2 = convert_like (conv, arg2, complain);
4704 arg2_type = TREE_TYPE (arg2);
4705 conv = cand->convs[2];
4706 arg3 = convert_like (conv, arg3, complain);
4707 arg3_type = TREE_TYPE (arg3);
4710 /* [expr.cond]
4712 Lvalue-to-rvalue (_conv.lval_), array-to-pointer (_conv.array_),
4713 and function-to-pointer (_conv.func_) standard conversions are
4714 performed on the second and third operands.
4716 We need to force the lvalue-to-rvalue conversion here for class types,
4717 so we get TARGET_EXPRs; trying to deal with a COND_EXPR of class rvalues
4718 that isn't wrapped with a TARGET_EXPR plays havoc with exception
4719 regions. */
4721 arg2 = force_rvalue (arg2, complain);
4722 if (!CLASS_TYPE_P (arg2_type))
4723 arg2_type = TREE_TYPE (arg2);
4725 arg3 = force_rvalue (arg3, complain);
4726 if (!CLASS_TYPE_P (arg3_type))
4727 arg3_type = TREE_TYPE (arg3);
4729 if (arg2 == error_mark_node || arg3 == error_mark_node)
4730 return error_mark_node;
4732 /* [expr.cond]
4734 After those conversions, one of the following shall hold:
4736 --The second and third operands have the same type; the result is of
4737 that type. */
4738 if (same_type_p (arg2_type, arg3_type))
4739 result_type = arg2_type;
4740 /* [expr.cond]
4742 --The second and third operands have arithmetic or enumeration
4743 type; the usual arithmetic conversions are performed to bring
4744 them to a common type, and the result is of that type. */
4745 else if ((ARITHMETIC_TYPE_P (arg2_type)
4746 || UNSCOPED_ENUM_P (arg2_type))
4747 && (ARITHMETIC_TYPE_P (arg3_type)
4748 || UNSCOPED_ENUM_P (arg3_type)))
4750 /* In this case, there is always a common type. */
4751 result_type = type_after_usual_arithmetic_conversions (arg2_type,
4752 arg3_type);
4753 do_warn_double_promotion (result_type, arg2_type, arg3_type,
4754 "implicit conversion from %qT to %qT to "
4755 "match other result of conditional",
4756 input_location);
4758 if (TREE_CODE (arg2_type) == ENUMERAL_TYPE
4759 && TREE_CODE (arg3_type) == ENUMERAL_TYPE)
4761 if (TREE_CODE (orig_arg2) == CONST_DECL
4762 && TREE_CODE (orig_arg3) == CONST_DECL
4763 && DECL_CONTEXT (orig_arg2) == DECL_CONTEXT (orig_arg3))
4764 /* Two enumerators from the same enumeration can have different
4765 types when the enumeration is still being defined. */;
4766 else if (complain & tf_warning)
4767 warning (OPT_Wenum_compare,
4768 "enumeral mismatch in conditional expression: %qT vs %qT",
4769 arg2_type, arg3_type);
4771 else if (extra_warnings
4772 && ((TREE_CODE (arg2_type) == ENUMERAL_TYPE
4773 && !same_type_p (arg3_type, type_promotes_to (arg2_type)))
4774 || (TREE_CODE (arg3_type) == ENUMERAL_TYPE
4775 && !same_type_p (arg2_type, type_promotes_to (arg3_type)))))
4777 if (complain & tf_warning)
4778 warning (0,
4779 "enumeral and non-enumeral type in conditional expression");
4782 arg2 = perform_implicit_conversion (result_type, arg2, complain);
4783 arg3 = perform_implicit_conversion (result_type, arg3, complain);
4785 /* [expr.cond]
4787 --The second and third operands have pointer type, or one has
4788 pointer type and the other is a null pointer constant; pointer
4789 conversions (_conv.ptr_) and qualification conversions
4790 (_conv.qual_) are performed to bring them to their composite
4791 pointer type (_expr.rel_). The result is of the composite
4792 pointer type.
4794 --The second and third operands have pointer to member type, or
4795 one has pointer to member type and the other is a null pointer
4796 constant; pointer to member conversions (_conv.mem_) and
4797 qualification conversions (_conv.qual_) are performed to bring
4798 them to a common type, whose cv-qualification shall match the
4799 cv-qualification of either the second or the third operand.
4800 The result is of the common type. */
4801 else if ((null_ptr_cst_p (arg2)
4802 && TYPE_PTR_OR_PTRMEM_P (arg3_type))
4803 || (null_ptr_cst_p (arg3)
4804 && TYPE_PTR_OR_PTRMEM_P (arg2_type))
4805 || (TYPE_PTR_P (arg2_type) && TYPE_PTR_P (arg3_type))
4806 || (TYPE_PTRDATAMEM_P (arg2_type) && TYPE_PTRDATAMEM_P (arg3_type))
4807 || (TYPE_PTRMEMFUNC_P (arg2_type) && TYPE_PTRMEMFUNC_P (arg3_type)))
4809 result_type = composite_pointer_type (arg2_type, arg3_type, arg2,
4810 arg3, CPO_CONDITIONAL_EXPR,
4811 complain);
4812 if (result_type == error_mark_node)
4813 return error_mark_node;
4814 arg2 = perform_implicit_conversion (result_type, arg2, complain);
4815 arg3 = perform_implicit_conversion (result_type, arg3, complain);
4818 if (!result_type)
4820 if (complain & tf_error)
4821 error ("operands to ?: have different types %qT and %qT",
4822 arg2_type, arg3_type);
4823 return error_mark_node;
4826 if (arg2 == error_mark_node || arg3 == error_mark_node)
4827 return error_mark_node;
4829 valid_operands:
4830 result = build3 (COND_EXPR, result_type, arg1, arg2, arg3);
4831 if (!cp_unevaluated_operand)
4832 /* Avoid folding within decltype (c++/42013) and noexcept. */
4833 result = fold_if_not_in_template (result);
4835 /* We can't use result_type below, as fold might have returned a
4836 throw_expr. */
4838 if (!lvalue_p)
4840 /* Expand both sides into the same slot, hopefully the target of
4841 the ?: expression. We used to check for TARGET_EXPRs here,
4842 but now we sometimes wrap them in NOP_EXPRs so the test would
4843 fail. */
4844 if (CLASS_TYPE_P (TREE_TYPE (result)))
4845 result = get_target_expr_sfinae (result, complain);
4846 /* If this expression is an rvalue, but might be mistaken for an
4847 lvalue, we must add a NON_LVALUE_EXPR. */
4848 result = rvalue (result);
4851 return result;
4854 /* Wrapper for above. */
4856 tree
4857 build_conditional_expr (tree arg1, tree arg2, tree arg3,
4858 tsubst_flags_t complain)
4860 tree ret;
4861 bool subtime = timevar_cond_start (TV_OVERLOAD);
4862 ret = build_conditional_expr_1 (arg1, arg2, arg3, complain);
4863 timevar_cond_stop (TV_OVERLOAD, subtime);
4864 return ret;
4867 /* OPERAND is an operand to an expression. Perform necessary steps
4868 required before using it. If OPERAND is NULL_TREE, NULL_TREE is
4869 returned. */
4871 static tree
4872 prep_operand (tree operand)
4874 if (operand)
4876 if (CLASS_TYPE_P (TREE_TYPE (operand))
4877 && CLASSTYPE_TEMPLATE_INSTANTIATION (TREE_TYPE (operand)))
4878 /* Make sure the template type is instantiated now. */
4879 instantiate_class_template (TYPE_MAIN_VARIANT (TREE_TYPE (operand)));
4882 return operand;
4885 /* Add each of the viable functions in FNS (a FUNCTION_DECL or
4886 OVERLOAD) to the CANDIDATES, returning an updated list of
4887 CANDIDATES. The ARGS are the arguments provided to the call;
4888 if FIRST_ARG is non-null it is the implicit object argument,
4889 otherwise the first element of ARGS is used if needed. The
4890 EXPLICIT_TARGS are explicit template arguments provided.
4891 TEMPLATE_ONLY is true if only template functions should be
4892 considered. CONVERSION_PATH, ACCESS_PATH, and FLAGS are as for
4893 add_function_candidate. */
4895 static void
4896 add_candidates (tree fns, tree first_arg, const vec<tree, va_gc> *args,
4897 tree return_type,
4898 tree explicit_targs, bool template_only,
4899 tree conversion_path, tree access_path,
4900 int flags,
4901 struct z_candidate **candidates,
4902 tsubst_flags_t complain)
4904 tree ctype;
4905 const vec<tree, va_gc> *non_static_args;
4906 bool check_list_ctor;
4907 bool check_converting;
4908 unification_kind_t strict;
4909 tree fn;
4911 if (!fns)
4912 return;
4914 /* Precalculate special handling of constructors and conversion ops. */
4915 fn = OVL_CURRENT (fns);
4916 if (DECL_CONV_FN_P (fn))
4918 check_list_ctor = false;
4919 check_converting = !!(flags & LOOKUP_ONLYCONVERTING);
4920 if (flags & LOOKUP_NO_CONVERSION)
4921 /* We're doing return_type(x). */
4922 strict = DEDUCE_CONV;
4923 else
4924 /* We're doing x.operator return_type(). */
4925 strict = DEDUCE_EXACT;
4926 /* [over.match.funcs] For conversion functions, the function
4927 is considered to be a member of the class of the implicit
4928 object argument for the purpose of defining the type of
4929 the implicit object parameter. */
4930 ctype = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (first_arg)));
4932 else
4934 if (DECL_CONSTRUCTOR_P (fn))
4936 check_list_ctor = !!(flags & LOOKUP_LIST_ONLY);
4937 /* For list-initialization we consider explicit constructors
4938 and complain if one is chosen. */
4939 check_converting
4940 = ((flags & (LOOKUP_ONLYCONVERTING|LOOKUP_LIST_INIT_CTOR))
4941 == LOOKUP_ONLYCONVERTING);
4943 else
4945 check_list_ctor = false;
4946 check_converting = false;
4948 strict = DEDUCE_CALL;
4949 ctype = conversion_path ? BINFO_TYPE (conversion_path) : NULL_TREE;
4952 if (first_arg)
4953 non_static_args = args;
4954 else
4955 /* Delay creating the implicit this parameter until it is needed. */
4956 non_static_args = NULL;
4958 for (; fns; fns = OVL_NEXT (fns))
4960 tree fn_first_arg;
4961 const vec<tree, va_gc> *fn_args;
4963 fn = OVL_CURRENT (fns);
4965 if (check_converting && DECL_NONCONVERTING_P (fn))
4966 continue;
4967 if (check_list_ctor && !is_list_ctor (fn))
4968 continue;
4970 /* Figure out which set of arguments to use. */
4971 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
4973 /* If this function is a non-static member and we didn't get an
4974 implicit object argument, move it out of args. */
4975 if (first_arg == NULL_TREE)
4977 unsigned int ix;
4978 tree arg;
4979 vec<tree, va_gc> *tempvec;
4980 vec_alloc (tempvec, args->length () - 1);
4981 for (ix = 1; args->iterate (ix, &arg); ++ix)
4982 tempvec->quick_push (arg);
4983 non_static_args = tempvec;
4984 first_arg = build_this ((*args)[0]);
4987 fn_first_arg = first_arg;
4988 fn_args = non_static_args;
4990 else
4992 /* Otherwise, just use the list of arguments provided. */
4993 fn_first_arg = NULL_TREE;
4994 fn_args = args;
4997 if (TREE_CODE (fn) == TEMPLATE_DECL)
4998 add_template_candidate (candidates,
5000 ctype,
5001 explicit_targs,
5002 fn_first_arg,
5003 fn_args,
5004 return_type,
5005 access_path,
5006 conversion_path,
5007 flags,
5008 strict,
5009 complain);
5010 else if (!template_only)
5011 add_function_candidate (candidates,
5013 ctype,
5014 fn_first_arg,
5015 fn_args,
5016 access_path,
5017 conversion_path,
5018 flags,
5019 complain);
5023 static tree
5024 build_new_op_1 (location_t loc, enum tree_code code, int flags, tree arg1,
5025 tree arg2, tree arg3, tree *overload, tsubst_flags_t complain)
5027 struct z_candidate *candidates = 0, *cand;
5028 vec<tree, va_gc> *arglist;
5029 tree fnname;
5030 tree args[3];
5031 tree result = NULL_TREE;
5032 bool result_valid_p = false;
5033 enum tree_code code2 = NOP_EXPR;
5034 enum tree_code code_orig_arg1 = ERROR_MARK;
5035 enum tree_code code_orig_arg2 = ERROR_MARK;
5036 conversion *conv;
5037 void *p;
5038 bool strict_p;
5039 bool any_viable_p;
5041 if (error_operand_p (arg1)
5042 || error_operand_p (arg2)
5043 || error_operand_p (arg3))
5044 return error_mark_node;
5046 if (code == MODIFY_EXPR)
5048 code2 = TREE_CODE (arg3);
5049 arg3 = NULL_TREE;
5050 fnname = ansi_assopname (code2);
5052 else
5053 fnname = ansi_opname (code);
5055 arg1 = prep_operand (arg1);
5057 switch (code)
5059 case NEW_EXPR:
5060 case VEC_NEW_EXPR:
5061 case VEC_DELETE_EXPR:
5062 case DELETE_EXPR:
5063 /* Use build_op_new_call and build_op_delete_call instead. */
5064 gcc_unreachable ();
5066 case CALL_EXPR:
5067 /* Use build_op_call instead. */
5068 gcc_unreachable ();
5070 case TRUTH_ORIF_EXPR:
5071 case TRUTH_ANDIF_EXPR:
5072 case TRUTH_AND_EXPR:
5073 case TRUTH_OR_EXPR:
5074 /* These are saved for the sake of warn_logical_operator. */
5075 code_orig_arg1 = TREE_CODE (arg1);
5076 code_orig_arg2 = TREE_CODE (arg2);
5078 default:
5079 break;
5082 arg2 = prep_operand (arg2);
5083 arg3 = prep_operand (arg3);
5085 if (code == COND_EXPR)
5086 /* Use build_conditional_expr instead. */
5087 gcc_unreachable ();
5088 else if (! IS_OVERLOAD_TYPE (TREE_TYPE (arg1))
5089 && (! arg2 || ! IS_OVERLOAD_TYPE (TREE_TYPE (arg2))))
5090 goto builtin;
5092 if (code == POSTINCREMENT_EXPR || code == POSTDECREMENT_EXPR)
5093 arg2 = integer_zero_node;
5095 vec_alloc (arglist, 3);
5096 arglist->quick_push (arg1);
5097 if (arg2 != NULL_TREE)
5098 arglist->quick_push (arg2);
5099 if (arg3 != NULL_TREE)
5100 arglist->quick_push (arg3);
5102 /* Get the high-water mark for the CONVERSION_OBSTACK. */
5103 p = conversion_obstack_alloc (0);
5105 /* Add namespace-scope operators to the list of functions to
5106 consider. */
5107 add_candidates (lookup_function_nonclass (fnname, arglist, /*block_p=*/true),
5108 NULL_TREE, arglist, NULL_TREE,
5109 NULL_TREE, false, NULL_TREE, NULL_TREE,
5110 flags, &candidates, complain);
5112 args[0] = arg1;
5113 args[1] = arg2;
5114 args[2] = NULL_TREE;
5116 /* Add class-member operators to the candidate set. */
5117 if (CLASS_TYPE_P (TREE_TYPE (arg1)))
5119 tree fns;
5121 fns = lookup_fnfields (TREE_TYPE (arg1), fnname, 1);
5122 if (fns == error_mark_node)
5124 result = error_mark_node;
5125 goto user_defined_result_ready;
5127 if (fns)
5128 add_candidates (BASELINK_FUNCTIONS (fns),
5129 NULL_TREE, arglist, NULL_TREE,
5130 NULL_TREE, false,
5131 BASELINK_BINFO (fns),
5132 BASELINK_ACCESS_BINFO (fns),
5133 flags, &candidates, complain);
5135 /* Per 13.3.1.2/3, 2nd bullet, if no operand has a class type, then
5136 only non-member functions that have type T1 or reference to
5137 cv-qualified-opt T1 for the first argument, if the first argument
5138 has an enumeration type, or T2 or reference to cv-qualified-opt
5139 T2 for the second argument, if the the second argument has an
5140 enumeration type. Filter out those that don't match. */
5141 else if (! arg2 || ! CLASS_TYPE_P (TREE_TYPE (arg2)))
5143 struct z_candidate **candp, **next;
5145 for (candp = &candidates; *candp; candp = next)
5147 tree parmlist, parmtype;
5148 int i, nargs = (arg2 ? 2 : 1);
5150 cand = *candp;
5151 next = &cand->next;
5153 parmlist = TYPE_ARG_TYPES (TREE_TYPE (cand->fn));
5155 for (i = 0; i < nargs; ++i)
5157 parmtype = TREE_VALUE (parmlist);
5159 if (TREE_CODE (parmtype) == REFERENCE_TYPE)
5160 parmtype = TREE_TYPE (parmtype);
5161 if (TREE_CODE (TREE_TYPE (args[i])) == ENUMERAL_TYPE
5162 && (same_type_ignoring_top_level_qualifiers_p
5163 (TREE_TYPE (args[i]), parmtype)))
5164 break;
5166 parmlist = TREE_CHAIN (parmlist);
5169 /* No argument has an appropriate type, so remove this
5170 candidate function from the list. */
5171 if (i == nargs)
5173 *candp = cand->next;
5174 next = candp;
5179 add_builtin_candidates (&candidates, code, code2, fnname, args,
5180 flags, complain);
5182 switch (code)
5184 case COMPOUND_EXPR:
5185 case ADDR_EXPR:
5186 /* For these, the built-in candidates set is empty
5187 [over.match.oper]/3. We don't want non-strict matches
5188 because exact matches are always possible with built-in
5189 operators. The built-in candidate set for COMPONENT_REF
5190 would be empty too, but since there are no such built-in
5191 operators, we accept non-strict matches for them. */
5192 strict_p = true;
5193 break;
5195 default:
5196 strict_p = pedantic;
5197 break;
5200 candidates = splice_viable (candidates, strict_p, &any_viable_p);
5201 if (!any_viable_p)
5203 switch (code)
5205 case POSTINCREMENT_EXPR:
5206 case POSTDECREMENT_EXPR:
5207 /* Don't try anything fancy if we're not allowed to produce
5208 errors. */
5209 if (!(complain & tf_error))
5210 return error_mark_node;
5212 /* Look for an `operator++ (int)'. Pre-1985 C++ didn't
5213 distinguish between prefix and postfix ++ and
5214 operator++() was used for both, so we allow this with
5215 -fpermissive. */
5216 else
5218 const char *msg = (flag_permissive)
5219 ? G_("no %<%D(int)%> declared for postfix %qs,"
5220 " trying prefix operator instead")
5221 : G_("no %<%D(int)%> declared for postfix %qs");
5222 permerror (loc, msg, fnname, operator_name_info[code].name);
5225 if (!flag_permissive)
5226 return error_mark_node;
5228 if (code == POSTINCREMENT_EXPR)
5229 code = PREINCREMENT_EXPR;
5230 else
5231 code = PREDECREMENT_EXPR;
5232 result = build_new_op_1 (loc, code, flags, arg1, NULL_TREE,
5233 NULL_TREE, overload, complain);
5234 break;
5236 /* The caller will deal with these. */
5237 case ADDR_EXPR:
5238 case COMPOUND_EXPR:
5239 case COMPONENT_REF:
5240 result = NULL_TREE;
5241 result_valid_p = true;
5242 break;
5244 default:
5245 if (complain & tf_error)
5247 /* If one of the arguments of the operator represents
5248 an invalid use of member function pointer, try to report
5249 a meaningful error ... */
5250 if (invalid_nonstatic_memfn_p (arg1, tf_error)
5251 || invalid_nonstatic_memfn_p (arg2, tf_error)
5252 || invalid_nonstatic_memfn_p (arg3, tf_error))
5253 /* We displayed the error message. */;
5254 else
5256 /* ... Otherwise, report the more generic
5257 "no matching operator found" error */
5258 op_error (loc, code, code2, arg1, arg2, arg3, FALSE);
5259 print_z_candidates (loc, candidates);
5262 result = error_mark_node;
5263 break;
5266 else
5268 cand = tourney (candidates, complain);
5269 if (cand == 0)
5271 if (complain & tf_error)
5273 op_error (loc, code, code2, arg1, arg2, arg3, TRUE);
5274 print_z_candidates (loc, candidates);
5276 result = error_mark_node;
5278 else if (TREE_CODE (cand->fn) == FUNCTION_DECL)
5280 if (overload)
5281 *overload = cand->fn;
5283 if (resolve_args (arglist, complain) == NULL)
5284 result = error_mark_node;
5285 else
5286 result = build_over_call (cand, LOOKUP_NORMAL, complain);
5288 else
5290 /* Give any warnings we noticed during overload resolution. */
5291 if (cand->warnings && (complain & tf_warning))
5293 struct candidate_warning *w;
5294 for (w = cand->warnings; w; w = w->next)
5295 joust (cand, w->loser, 1, complain);
5298 /* Check for comparison of different enum types. */
5299 switch (code)
5301 case GT_EXPR:
5302 case LT_EXPR:
5303 case GE_EXPR:
5304 case LE_EXPR:
5305 case EQ_EXPR:
5306 case NE_EXPR:
5307 if (TREE_CODE (TREE_TYPE (arg1)) == ENUMERAL_TYPE
5308 && TREE_CODE (TREE_TYPE (arg2)) == ENUMERAL_TYPE
5309 && (TYPE_MAIN_VARIANT (TREE_TYPE (arg1))
5310 != TYPE_MAIN_VARIANT (TREE_TYPE (arg2)))
5311 && (complain & tf_warning))
5313 warning (OPT_Wenum_compare,
5314 "comparison between %q#T and %q#T",
5315 TREE_TYPE (arg1), TREE_TYPE (arg2));
5317 break;
5318 default:
5319 break;
5322 /* We need to strip any leading REF_BIND so that bitfields
5323 don't cause errors. This should not remove any important
5324 conversions, because builtins don't apply to class
5325 objects directly. */
5326 conv = cand->convs[0];
5327 if (conv->kind == ck_ref_bind)
5328 conv = next_conversion (conv);
5329 arg1 = convert_like (conv, arg1, complain);
5331 if (arg2)
5333 conv = cand->convs[1];
5334 if (conv->kind == ck_ref_bind)
5335 conv = next_conversion (conv);
5336 else
5337 arg2 = decay_conversion (arg2, complain);
5339 /* We need to call warn_logical_operator before
5340 converting arg2 to a boolean_type, but after
5341 decaying an enumerator to its value. */
5342 if (complain & tf_warning)
5343 warn_logical_operator (loc, code, boolean_type_node,
5344 code_orig_arg1, arg1,
5345 code_orig_arg2, arg2);
5347 arg2 = convert_like (conv, arg2, complain);
5349 if (arg3)
5351 conv = cand->convs[2];
5352 if (conv->kind == ck_ref_bind)
5353 conv = next_conversion (conv);
5354 arg3 = convert_like (conv, arg3, complain);
5360 user_defined_result_ready:
5362 /* Free all the conversions we allocated. */
5363 obstack_free (&conversion_obstack, p);
5365 if (result || result_valid_p)
5366 return result;
5368 builtin:
5369 switch (code)
5371 case MODIFY_EXPR:
5372 return cp_build_modify_expr (arg1, code2, arg2, complain);
5374 case INDIRECT_REF:
5375 return cp_build_indirect_ref (arg1, RO_UNARY_STAR, complain);
5377 case TRUTH_ANDIF_EXPR:
5378 case TRUTH_ORIF_EXPR:
5379 case TRUTH_AND_EXPR:
5380 case TRUTH_OR_EXPR:
5381 warn_logical_operator (loc, code, boolean_type_node,
5382 code_orig_arg1, arg1, code_orig_arg2, arg2);
5383 /* Fall through. */
5384 case PLUS_EXPR:
5385 case MINUS_EXPR:
5386 case MULT_EXPR:
5387 case TRUNC_DIV_EXPR:
5388 case GT_EXPR:
5389 case LT_EXPR:
5390 case GE_EXPR:
5391 case LE_EXPR:
5392 case EQ_EXPR:
5393 case NE_EXPR:
5394 case MAX_EXPR:
5395 case MIN_EXPR:
5396 case LSHIFT_EXPR:
5397 case RSHIFT_EXPR:
5398 case TRUNC_MOD_EXPR:
5399 case BIT_AND_EXPR:
5400 case BIT_IOR_EXPR:
5401 case BIT_XOR_EXPR:
5402 return cp_build_binary_op (input_location, code, arg1, arg2, complain);
5404 case UNARY_PLUS_EXPR:
5405 case NEGATE_EXPR:
5406 case BIT_NOT_EXPR:
5407 case TRUTH_NOT_EXPR:
5408 case PREINCREMENT_EXPR:
5409 case POSTINCREMENT_EXPR:
5410 case PREDECREMENT_EXPR:
5411 case POSTDECREMENT_EXPR:
5412 case REALPART_EXPR:
5413 case IMAGPART_EXPR:
5414 case ABS_EXPR:
5415 return cp_build_unary_op (code, arg1, candidates != 0, complain);
5417 case ARRAY_REF:
5418 return cp_build_array_ref (input_location, arg1, arg2, complain);
5420 case MEMBER_REF:
5421 return build_m_component_ref (cp_build_indirect_ref (arg1, RO_ARROW_STAR,
5422 complain),
5423 arg2, complain);
5425 /* The caller will deal with these. */
5426 case ADDR_EXPR:
5427 case COMPONENT_REF:
5428 case COMPOUND_EXPR:
5429 return NULL_TREE;
5431 default:
5432 gcc_unreachable ();
5434 return NULL_TREE;
5437 /* Wrapper for above. */
5439 tree
5440 build_new_op (location_t loc, enum tree_code code, int flags,
5441 tree arg1, tree arg2, tree arg3,
5442 tree *overload, tsubst_flags_t complain)
5444 tree ret;
5445 bool subtime = timevar_cond_start (TV_OVERLOAD);
5446 ret = build_new_op_1 (loc, code, flags, arg1, arg2, arg3,
5447 overload, complain);
5448 timevar_cond_stop (TV_OVERLOAD, subtime);
5449 return ret;
5452 /* Returns true iff T, an element of an OVERLOAD chain, is a usual
5453 deallocation function (3.7.4.2 [basic.stc.dynamic.deallocation]). */
5455 static bool
5456 non_placement_deallocation_fn_p (tree t)
5458 /* A template instance is never a usual deallocation function,
5459 regardless of its signature. */
5460 if (TREE_CODE (t) == TEMPLATE_DECL
5461 || primary_template_instantiation_p (t))
5462 return false;
5464 /* If a class T has a member deallocation function named operator delete
5465 with exactly one parameter, then that function is a usual
5466 (non-placement) deallocation function. If class T does not declare
5467 such an operator delete but does declare a member deallocation
5468 function named operator delete with exactly two parameters, the second
5469 of which has type std::size_t (18.2), then this function is a usual
5470 deallocation function. */
5471 t = FUNCTION_ARG_CHAIN (t);
5472 if (t == void_list_node
5473 || (t && same_type_p (TREE_VALUE (t), size_type_node)
5474 && TREE_CHAIN (t) == void_list_node))
5475 return true;
5476 return false;
5479 /* Build a call to operator delete. This has to be handled very specially,
5480 because the restrictions on what signatures match are different from all
5481 other call instances. For a normal delete, only a delete taking (void *)
5482 or (void *, size_t) is accepted. For a placement delete, only an exact
5483 match with the placement new is accepted.
5485 CODE is either DELETE_EXPR or VEC_DELETE_EXPR.
5486 ADDR is the pointer to be deleted.
5487 SIZE is the size of the memory block to be deleted.
5488 GLOBAL_P is true if the delete-expression should not consider
5489 class-specific delete operators.
5490 PLACEMENT is the corresponding placement new call, or NULL_TREE.
5492 If this call to "operator delete" is being generated as part to
5493 deallocate memory allocated via a new-expression (as per [expr.new]
5494 which requires that if the initialization throws an exception then
5495 we call a deallocation function), then ALLOC_FN is the allocation
5496 function. */
5498 tree
5499 build_op_delete_call (enum tree_code code, tree addr, tree size,
5500 bool global_p, tree placement,
5501 tree alloc_fn, tsubst_flags_t complain)
5503 tree fn = NULL_TREE;
5504 tree fns, fnname, type, t;
5506 if (addr == error_mark_node)
5507 return error_mark_node;
5509 type = strip_array_types (TREE_TYPE (TREE_TYPE (addr)));
5511 fnname = ansi_opname (code);
5513 if (CLASS_TYPE_P (type)
5514 && COMPLETE_TYPE_P (complete_type (type))
5515 && !global_p)
5516 /* In [class.free]
5518 If the result of the lookup is ambiguous or inaccessible, or if
5519 the lookup selects a placement deallocation function, the
5520 program is ill-formed.
5522 Therefore, we ask lookup_fnfields to complain about ambiguity. */
5524 fns = lookup_fnfields (TYPE_BINFO (type), fnname, 1);
5525 if (fns == error_mark_node)
5526 return error_mark_node;
5528 else
5529 fns = NULL_TREE;
5531 if (fns == NULL_TREE)
5532 fns = lookup_name_nonclass (fnname);
5534 /* Strip const and volatile from addr. */
5535 addr = cp_convert (ptr_type_node, addr, complain);
5537 if (placement)
5539 /* "A declaration of a placement deallocation function matches the
5540 declaration of a placement allocation function if it has the same
5541 number of parameters and, after parameter transformations (8.3.5),
5542 all parameter types except the first are identical."
5544 So we build up the function type we want and ask instantiate_type
5545 to get it for us. */
5546 t = FUNCTION_ARG_CHAIN (alloc_fn);
5547 t = tree_cons (NULL_TREE, ptr_type_node, t);
5548 t = build_function_type (void_type_node, t);
5550 fn = instantiate_type (t, fns, tf_none);
5551 if (fn == error_mark_node)
5552 return NULL_TREE;
5554 if (BASELINK_P (fn))
5555 fn = BASELINK_FUNCTIONS (fn);
5557 /* "If the lookup finds the two-parameter form of a usual deallocation
5558 function (3.7.4.2) and that function, considered as a placement
5559 deallocation function, would have been selected as a match for the
5560 allocation function, the program is ill-formed." */
5561 if (non_placement_deallocation_fn_p (fn))
5563 /* But if the class has an operator delete (void *), then that is
5564 the usual deallocation function, so we shouldn't complain
5565 about using the operator delete (void *, size_t). */
5566 for (t = BASELINK_P (fns) ? BASELINK_FUNCTIONS (fns) : fns;
5567 t; t = OVL_NEXT (t))
5569 tree elt = OVL_CURRENT (t);
5570 if (non_placement_deallocation_fn_p (elt)
5571 && FUNCTION_ARG_CHAIN (elt) == void_list_node)
5572 goto ok;
5574 if (complain & tf_error)
5576 permerror (0, "non-placement deallocation function %q+D", fn);
5577 permerror (input_location, "selected for placement delete");
5579 else
5580 return error_mark_node;
5581 ok:;
5584 else
5585 /* "Any non-placement deallocation function matches a non-placement
5586 allocation function. If the lookup finds a single matching
5587 deallocation function, that function will be called; otherwise, no
5588 deallocation function will be called." */
5589 for (t = BASELINK_P (fns) ? BASELINK_FUNCTIONS (fns) : fns;
5590 t; t = OVL_NEXT (t))
5592 tree elt = OVL_CURRENT (t);
5593 if (non_placement_deallocation_fn_p (elt))
5595 fn = elt;
5596 /* "If a class T has a member deallocation function named
5597 operator delete with exactly one parameter, then that
5598 function is a usual (non-placement) deallocation
5599 function. If class T does not declare such an operator
5600 delete but does declare a member deallocation function named
5601 operator delete with exactly two parameters, the second of
5602 which has type std::size_t (18.2), then this function is a
5603 usual deallocation function."
5605 So (void*) beats (void*, size_t). */
5606 if (FUNCTION_ARG_CHAIN (fn) == void_list_node)
5607 break;
5611 /* If we have a matching function, call it. */
5612 if (fn)
5614 gcc_assert (TREE_CODE (fn) == FUNCTION_DECL);
5616 /* If the FN is a member function, make sure that it is
5617 accessible. */
5618 if (BASELINK_P (fns))
5619 perform_or_defer_access_check (BASELINK_BINFO (fns), fn, fn,
5620 complain);
5622 /* Core issue 901: It's ok to new a type with deleted delete. */
5623 if (DECL_DELETED_FN (fn) && alloc_fn)
5624 return NULL_TREE;
5626 if (placement)
5628 /* The placement args might not be suitable for overload
5629 resolution at this point, so build the call directly. */
5630 int nargs = call_expr_nargs (placement);
5631 tree *argarray = XALLOCAVEC (tree, nargs);
5632 int i;
5633 argarray[0] = addr;
5634 for (i = 1; i < nargs; i++)
5635 argarray[i] = CALL_EXPR_ARG (placement, i);
5636 mark_used (fn);
5637 return build_cxx_call (fn, nargs, argarray, complain);
5639 else
5641 tree ret;
5642 vec<tree, va_gc> *args;
5643 vec_alloc (args, 2);
5644 args->quick_push (addr);
5645 if (FUNCTION_ARG_CHAIN (fn) != void_list_node)
5646 args->quick_push (size);
5647 ret = cp_build_function_call_vec (fn, &args, complain);
5648 vec_free (args);
5649 return ret;
5653 /* [expr.new]
5655 If no unambiguous matching deallocation function can be found,
5656 propagating the exception does not cause the object's memory to
5657 be freed. */
5658 if (alloc_fn)
5660 if ((complain & tf_warning)
5661 && !placement)
5662 warning (0, "no corresponding deallocation function for %qD",
5663 alloc_fn);
5664 return NULL_TREE;
5667 if (complain & tf_error)
5668 error ("no suitable %<operator %s%> for %qT",
5669 operator_name_info[(int)code].name, type);
5670 return error_mark_node;
5673 /* If the current scope isn't allowed to access DECL along
5674 BASETYPE_PATH, give an error. The most derived class in
5675 BASETYPE_PATH is the one used to qualify DECL. DIAG_DECL is
5676 the declaration to use in the error diagnostic. */
5678 bool
5679 enforce_access (tree basetype_path, tree decl, tree diag_decl,
5680 tsubst_flags_t complain)
5682 gcc_assert (TREE_CODE (basetype_path) == TREE_BINFO);
5684 if (!accessible_p (basetype_path, decl, true))
5686 if (complain & tf_error)
5688 if (TREE_PRIVATE (decl))
5689 error ("%q+#D is private", diag_decl);
5690 else if (TREE_PROTECTED (decl))
5691 error ("%q+#D is protected", diag_decl);
5692 else
5693 error ("%q+#D is inaccessible", diag_decl);
5694 error ("within this context");
5696 return false;
5699 return true;
5702 /* Initialize a temporary of type TYPE with EXPR. The FLAGS are a
5703 bitwise or of LOOKUP_* values. If any errors are warnings are
5704 generated, set *DIAGNOSTIC_FN to "error" or "warning",
5705 respectively. If no diagnostics are generated, set *DIAGNOSTIC_FN
5706 to NULL. */
5708 static tree
5709 build_temp (tree expr, tree type, int flags,
5710 diagnostic_t *diagnostic_kind, tsubst_flags_t complain)
5712 int savew, savee;
5713 vec<tree, va_gc> *args;
5715 savew = warningcount, savee = errorcount;
5716 args = make_tree_vector_single (expr);
5717 expr = build_special_member_call (NULL_TREE, complete_ctor_identifier,
5718 &args, type, flags, complain);
5719 release_tree_vector (args);
5720 if (warningcount > savew)
5721 *diagnostic_kind = DK_WARNING;
5722 else if (errorcount > savee)
5723 *diagnostic_kind = DK_ERROR;
5724 else
5725 *diagnostic_kind = DK_UNSPECIFIED;
5726 return expr;
5729 /* Perform warnings about peculiar, but valid, conversions from/to NULL.
5730 EXPR is implicitly converted to type TOTYPE.
5731 FN and ARGNUM are used for diagnostics. */
5733 static void
5734 conversion_null_warnings (tree totype, tree expr, tree fn, int argnum)
5736 /* Issue warnings about peculiar, but valid, uses of NULL. */
5737 if (expr == null_node && TREE_CODE (totype) != BOOLEAN_TYPE
5738 && ARITHMETIC_TYPE_P (totype))
5740 source_location loc =
5741 expansion_point_location_if_in_system_header (input_location);
5743 if (fn)
5744 warning_at (loc, OPT_Wconversion_null,
5745 "passing NULL to non-pointer argument %P of %qD",
5746 argnum, fn);
5747 else
5748 warning_at (loc, OPT_Wconversion_null,
5749 "converting to non-pointer type %qT from NULL", totype);
5752 /* Issue warnings if "false" is converted to a NULL pointer */
5753 else if (TREE_CODE (TREE_TYPE (expr)) == BOOLEAN_TYPE
5754 && TYPE_PTR_P (totype))
5756 if (fn)
5757 warning_at (input_location, OPT_Wconversion_null,
5758 "converting %<false%> to pointer type for argument %P "
5759 "of %qD", argnum, fn);
5760 else
5761 warning_at (input_location, OPT_Wconversion_null,
5762 "converting %<false%> to pointer type %qT", totype);
5766 /* Perform the conversions in CONVS on the expression EXPR. FN and
5767 ARGNUM are used for diagnostics. ARGNUM is zero based, -1
5768 indicates the `this' argument of a method. INNER is nonzero when
5769 being called to continue a conversion chain. It is negative when a
5770 reference binding will be applied, positive otherwise. If
5771 ISSUE_CONVERSION_WARNINGS is true, warnings about suspicious
5772 conversions will be emitted if appropriate. If C_CAST_P is true,
5773 this conversion is coming from a C-style cast; in that case,
5774 conversions to inaccessible bases are permitted. */
5776 static tree
5777 convert_like_real (conversion *convs, tree expr, tree fn, int argnum,
5778 int inner, bool issue_conversion_warnings,
5779 bool c_cast_p, tsubst_flags_t complain)
5781 tree totype = convs->type;
5782 diagnostic_t diag_kind;
5783 int flags;
5784 location_t loc = EXPR_LOC_OR_HERE (expr);
5786 if (convs->bad_p && !(complain & tf_error))
5787 return error_mark_node;
5789 if (convs->bad_p
5790 && convs->kind != ck_user
5791 && convs->kind != ck_list
5792 && convs->kind != ck_ambig
5793 && (convs->kind != ck_ref_bind
5794 || convs->user_conv_p)
5795 && convs->kind != ck_rvalue
5796 && convs->kind != ck_base)
5798 conversion *t = convs;
5800 /* Give a helpful error if this is bad because of excess braces. */
5801 if (BRACE_ENCLOSED_INITIALIZER_P (expr)
5802 && SCALAR_TYPE_P (totype)
5803 && CONSTRUCTOR_NELTS (expr) > 0
5804 && BRACE_ENCLOSED_INITIALIZER_P (CONSTRUCTOR_ELT (expr, 0)->value))
5805 permerror (loc, "too many braces around initializer for %qT", totype);
5807 for (; t ; t = next_conversion (t))
5809 if (t->kind == ck_user && t->cand->reason)
5811 permerror (loc, "invalid user-defined conversion "
5812 "from %qT to %qT", TREE_TYPE (expr), totype);
5813 print_z_candidate (loc, "candidate is:", t->cand);
5814 expr = convert_like_real (t, expr, fn, argnum, 1,
5815 /*issue_conversion_warnings=*/false,
5816 /*c_cast_p=*/false,
5817 complain);
5818 if (convs->kind == ck_ref_bind)
5819 return convert_to_reference (totype, expr, CONV_IMPLICIT,
5820 LOOKUP_NORMAL, NULL_TREE,
5821 complain);
5822 else
5823 return cp_convert (totype, expr, complain);
5825 else if (t->kind == ck_user || !t->bad_p)
5827 expr = convert_like_real (t, expr, fn, argnum, 1,
5828 /*issue_conversion_warnings=*/false,
5829 /*c_cast_p=*/false,
5830 complain);
5831 break;
5833 else if (t->kind == ck_ambig)
5834 return convert_like_real (t, expr, fn, argnum, 1,
5835 /*issue_conversion_warnings=*/false,
5836 /*c_cast_p=*/false,
5837 complain);
5838 else if (t->kind == ck_identity)
5839 break;
5842 permerror (loc, "invalid conversion from %qT to %qT",
5843 TREE_TYPE (expr), totype);
5844 if (fn)
5845 permerror (DECL_SOURCE_LOCATION (fn),
5846 " initializing argument %P of %qD", argnum, fn);
5848 return cp_convert (totype, expr, complain);
5851 if (issue_conversion_warnings && (complain & tf_warning))
5852 conversion_null_warnings (totype, expr, fn, argnum);
5854 switch (convs->kind)
5856 case ck_user:
5858 struct z_candidate *cand = convs->cand;
5859 tree convfn = cand->fn;
5860 unsigned i;
5862 /* If we're initializing from {}, it's value-initialization. */
5863 if (BRACE_ENCLOSED_INITIALIZER_P (expr)
5864 && CONSTRUCTOR_NELTS (expr) == 0
5865 && TYPE_HAS_DEFAULT_CONSTRUCTOR (totype))
5867 bool direct = CONSTRUCTOR_IS_DIRECT_INIT (expr);
5868 expr = build_value_init (totype, complain);
5869 expr = get_target_expr_sfinae (expr, complain);
5870 if (expr != error_mark_node)
5872 TARGET_EXPR_LIST_INIT_P (expr) = true;
5873 TARGET_EXPR_DIRECT_INIT_P (expr) = direct;
5875 return expr;
5878 expr = mark_rvalue_use (expr);
5880 /* When converting from an init list we consider explicit
5881 constructors, but actually trying to call one is an error. */
5882 if (DECL_NONCONVERTING_P (convfn) && DECL_CONSTRUCTOR_P (convfn)
5883 /* Unless this is for direct-list-initialization. */
5884 && !(BRACE_ENCLOSED_INITIALIZER_P (expr)
5885 && CONSTRUCTOR_IS_DIRECT_INIT (expr))
5886 /* Unless we're calling it for value-initialization from an
5887 empty list, since that is handled separately in 8.5.4. */
5888 && cand->num_convs > 0)
5890 error ("converting to %qT from initializer list would use "
5891 "explicit constructor %qD", totype, convfn);
5894 /* Set user_conv_p on the argument conversions, so rvalue/base
5895 handling knows not to allow any more UDCs. */
5896 for (i = 0; i < cand->num_convs; ++i)
5897 cand->convs[i]->user_conv_p = true;
5899 expr = build_over_call (cand, LOOKUP_NORMAL, complain);
5901 /* If this is a constructor or a function returning an aggr type,
5902 we need to build up a TARGET_EXPR. */
5903 if (DECL_CONSTRUCTOR_P (convfn))
5905 expr = build_cplus_new (totype, expr, complain);
5907 /* Remember that this was list-initialization. */
5908 if (convs->check_narrowing && expr != error_mark_node)
5909 TARGET_EXPR_LIST_INIT_P (expr) = true;
5912 return expr;
5914 case ck_identity:
5915 expr = mark_rvalue_use (expr);
5916 if (BRACE_ENCLOSED_INITIALIZER_P (expr))
5918 int nelts = CONSTRUCTOR_NELTS (expr);
5919 if (nelts == 0)
5920 expr = build_value_init (totype, complain);
5921 else if (nelts == 1)
5922 expr = CONSTRUCTOR_ELT (expr, 0)->value;
5923 else
5924 gcc_unreachable ();
5927 if (type_unknown_p (expr))
5928 expr = instantiate_type (totype, expr, complain);
5929 /* Convert a constant to its underlying value, unless we are
5930 about to bind it to a reference, in which case we need to
5931 leave it as an lvalue. */
5932 if (inner >= 0)
5934 expr = decl_constant_value_safe (expr);
5935 if (expr == null_node && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (totype))
5936 /* If __null has been converted to an integer type, we do not
5937 want to warn about uses of EXPR as an integer, rather than
5938 as a pointer. */
5939 expr = build_int_cst (totype, 0);
5941 return expr;
5942 case ck_ambig:
5943 /* We leave bad_p off ck_ambig because overload resolution considers
5944 it valid, it just fails when we try to perform it. So we need to
5945 check complain here, too. */
5946 if (complain & tf_error)
5948 /* Call build_user_type_conversion again for the error. */
5949 build_user_type_conversion (totype, convs->u.expr, LOOKUP_NORMAL,
5950 complain);
5951 if (fn)
5952 error (" initializing argument %P of %q+D", argnum, fn);
5954 return error_mark_node;
5956 case ck_list:
5958 /* Conversion to std::initializer_list<T>. */
5959 tree elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (totype), 0);
5960 tree new_ctor = build_constructor (init_list_type_node, NULL);
5961 unsigned len = CONSTRUCTOR_NELTS (expr);
5962 tree array, val, field;
5963 vec<constructor_elt, va_gc> *vec = NULL;
5964 unsigned ix;
5966 /* Convert all the elements. */
5967 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expr), ix, val)
5969 tree sub = convert_like_real (convs->u.list[ix], val, fn, argnum,
5970 1, false, false, complain);
5971 if (sub == error_mark_node)
5972 return sub;
5973 if (!BRACE_ENCLOSED_INITIALIZER_P (val))
5974 check_narrowing (TREE_TYPE (sub), val);
5975 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_ctor), NULL_TREE, sub);
5976 if (!TREE_CONSTANT (sub))
5977 TREE_CONSTANT (new_ctor) = false;
5979 /* Build up the array. */
5980 elttype = cp_build_qualified_type
5981 (elttype, cp_type_quals (elttype) | TYPE_QUAL_CONST);
5982 array = build_array_of_n_type (elttype, len);
5983 array = finish_compound_literal (array, new_ctor, complain);
5984 /* Take the address explicitly rather than via decay_conversion
5985 to avoid the error about taking the address of a temporary. */
5986 array = cp_build_addr_expr (array, complain);
5987 array = cp_convert (build_pointer_type (elttype), array, complain);
5989 /* Build up the initializer_list object. */
5990 totype = complete_type (totype);
5991 field = next_initializable_field (TYPE_FIELDS (totype));
5992 CONSTRUCTOR_APPEND_ELT (vec, field, array);
5993 field = next_initializable_field (DECL_CHAIN (field));
5994 CONSTRUCTOR_APPEND_ELT (vec, field, size_int (len));
5995 new_ctor = build_constructor (totype, vec);
5996 return get_target_expr_sfinae (new_ctor, complain);
5999 case ck_aggr:
6000 if (TREE_CODE (totype) == COMPLEX_TYPE)
6002 tree real = CONSTRUCTOR_ELT (expr, 0)->value;
6003 tree imag = CONSTRUCTOR_ELT (expr, 1)->value;
6004 real = perform_implicit_conversion (TREE_TYPE (totype),
6005 real, complain);
6006 imag = perform_implicit_conversion (TREE_TYPE (totype),
6007 imag, complain);
6008 expr = build2 (COMPLEX_EXPR, totype, real, imag);
6009 return fold_if_not_in_template (expr);
6011 expr = reshape_init (totype, expr, complain);
6012 return get_target_expr_sfinae (digest_init (totype, expr, complain),
6013 complain);
6015 default:
6016 break;
6019 expr = convert_like_real (next_conversion (convs), expr, fn, argnum,
6020 convs->kind == ck_ref_bind ? -1 : 1,
6021 convs->kind == ck_ref_bind ? issue_conversion_warnings : false,
6022 c_cast_p,
6023 complain);
6024 if (expr == error_mark_node)
6025 return error_mark_node;
6027 switch (convs->kind)
6029 case ck_rvalue:
6030 expr = decay_conversion (expr, complain);
6031 if (expr == error_mark_node)
6032 return error_mark_node;
6034 if (! MAYBE_CLASS_TYPE_P (totype))
6035 return expr;
6036 /* Else fall through. */
6037 case ck_base:
6038 if (convs->kind == ck_base && !convs->need_temporary_p)
6040 /* We are going to bind a reference directly to a base-class
6041 subobject of EXPR. */
6042 /* Build an expression for `*((base*) &expr)'. */
6043 expr = cp_build_addr_expr (expr, complain);
6044 expr = convert_to_base (expr, build_pointer_type (totype),
6045 !c_cast_p, /*nonnull=*/true, complain);
6046 expr = cp_build_indirect_ref (expr, RO_IMPLICIT_CONVERSION, complain);
6047 return expr;
6050 /* Copy-initialization where the cv-unqualified version of the source
6051 type is the same class as, or a derived class of, the class of the
6052 destination [is treated as direct-initialization]. [dcl.init] */
6053 flags = LOOKUP_NORMAL|LOOKUP_ONLYCONVERTING;
6054 if (convs->user_conv_p)
6055 /* This conversion is being done in the context of a user-defined
6056 conversion (i.e. the second step of copy-initialization), so
6057 don't allow any more. */
6058 flags |= LOOKUP_NO_CONVERSION;
6059 if (convs->rvaluedness_matches_p)
6060 flags |= LOOKUP_PREFER_RVALUE;
6061 if (TREE_CODE (expr) == TARGET_EXPR
6062 && TARGET_EXPR_LIST_INIT_P (expr))
6063 /* Copy-list-initialization doesn't actually involve a copy. */
6064 return expr;
6065 expr = build_temp (expr, totype, flags, &diag_kind, complain);
6066 if (diag_kind && fn && complain)
6067 emit_diagnostic (diag_kind, DECL_SOURCE_LOCATION (fn), 0,
6068 " initializing argument %P of %qD", argnum, fn);
6069 return build_cplus_new (totype, expr, complain);
6071 case ck_ref_bind:
6073 tree ref_type = totype;
6075 if (convs->bad_p && !next_conversion (convs)->bad_p)
6077 gcc_assert (TYPE_REF_IS_RVALUE (ref_type)
6078 && real_lvalue_p (expr));
6080 error_at (loc, "cannot bind %qT lvalue to %qT",
6081 TREE_TYPE (expr), totype);
6082 if (fn)
6083 error (" initializing argument %P of %q+D", argnum, fn);
6084 return error_mark_node;
6087 /* If necessary, create a temporary.
6089 VA_ARG_EXPR and CONSTRUCTOR expressions are special cases
6090 that need temporaries, even when their types are reference
6091 compatible with the type of reference being bound, so the
6092 upcoming call to cp_build_addr_expr doesn't fail. */
6093 if (convs->need_temporary_p
6094 || TREE_CODE (expr) == CONSTRUCTOR
6095 || TREE_CODE (expr) == VA_ARG_EXPR)
6097 /* Otherwise, a temporary of type "cv1 T1" is created and
6098 initialized from the initializer expression using the rules
6099 for a non-reference copy-initialization (8.5). */
6101 tree type = TREE_TYPE (ref_type);
6102 cp_lvalue_kind lvalue = real_lvalue_p (expr);
6104 gcc_assert (same_type_ignoring_top_level_qualifiers_p
6105 (type, next_conversion (convs)->type));
6106 if (!CP_TYPE_CONST_NON_VOLATILE_P (type)
6107 && !TYPE_REF_IS_RVALUE (ref_type))
6109 /* If the reference is volatile or non-const, we
6110 cannot create a temporary. */
6111 if (lvalue & clk_bitfield)
6112 error_at (loc, "cannot bind bitfield %qE to %qT",
6113 expr, ref_type);
6114 else if (lvalue & clk_packed)
6115 error_at (loc, "cannot bind packed field %qE to %qT",
6116 expr, ref_type);
6117 else
6118 error_at (loc, "cannot bind rvalue %qE to %qT",
6119 expr, ref_type);
6120 return error_mark_node;
6122 /* If the source is a packed field, and we must use a copy
6123 constructor, then building the target expr will require
6124 binding the field to the reference parameter to the
6125 copy constructor, and we'll end up with an infinite
6126 loop. If we can use a bitwise copy, then we'll be
6127 OK. */
6128 if ((lvalue & clk_packed)
6129 && CLASS_TYPE_P (type)
6130 && type_has_nontrivial_copy_init (type))
6132 error_at (loc, "cannot bind packed field %qE to %qT",
6133 expr, ref_type);
6134 return error_mark_node;
6136 if (lvalue & clk_bitfield)
6138 expr = convert_bitfield_to_declared_type (expr);
6139 expr = fold_convert (type, expr);
6141 expr = build_target_expr_with_type (expr, type, complain);
6144 /* Take the address of the thing to which we will bind the
6145 reference. */
6146 expr = cp_build_addr_expr (expr, complain);
6147 if (expr == error_mark_node)
6148 return error_mark_node;
6150 /* Convert it to a pointer to the type referred to by the
6151 reference. This will adjust the pointer if a derived to
6152 base conversion is being performed. */
6153 expr = cp_convert (build_pointer_type (TREE_TYPE (ref_type)),
6154 expr, complain);
6155 /* Convert the pointer to the desired reference type. */
6156 return build_nop (ref_type, expr);
6159 case ck_lvalue:
6160 return decay_conversion (expr, complain);
6162 case ck_qual:
6163 /* Warn about deprecated conversion if appropriate. */
6164 string_conv_p (totype, expr, 1);
6165 break;
6167 case ck_ptr:
6168 if (convs->base_p)
6169 expr = convert_to_base (expr, totype, !c_cast_p,
6170 /*nonnull=*/false, complain);
6171 return build_nop (totype, expr);
6173 case ck_pmem:
6174 return convert_ptrmem (totype, expr, /*allow_inverse_p=*/false,
6175 c_cast_p, complain);
6177 default:
6178 break;
6181 if (convs->check_narrowing)
6182 check_narrowing (totype, expr);
6184 if (issue_conversion_warnings && (complain & tf_warning))
6185 expr = convert_and_check (totype, expr);
6186 else
6187 expr = convert (totype, expr);
6189 return expr;
6192 /* ARG is being passed to a varargs function. Perform any conversions
6193 required. Return the converted value. */
6195 tree
6196 convert_arg_to_ellipsis (tree arg, tsubst_flags_t complain)
6198 tree arg_type;
6199 location_t loc = EXPR_LOC_OR_HERE (arg);
6201 /* [expr.call]
6203 The lvalue-to-rvalue, array-to-pointer, and function-to-pointer
6204 standard conversions are performed. */
6205 arg = decay_conversion (arg, complain);
6206 arg_type = TREE_TYPE (arg);
6207 /* [expr.call]
6209 If the argument has integral or enumeration type that is subject
6210 to the integral promotions (_conv.prom_), or a floating point
6211 type that is subject to the floating point promotion
6212 (_conv.fpprom_), the value of the argument is converted to the
6213 promoted type before the call. */
6214 if (TREE_CODE (arg_type) == REAL_TYPE
6215 && (TYPE_PRECISION (arg_type)
6216 < TYPE_PRECISION (double_type_node))
6217 && !DECIMAL_FLOAT_MODE_P (TYPE_MODE (arg_type)))
6219 if ((complain & tf_warning)
6220 && warn_double_promotion && !c_inhibit_evaluation_warnings)
6221 warning_at (loc, OPT_Wdouble_promotion,
6222 "implicit conversion from %qT to %qT when passing "
6223 "argument to function",
6224 arg_type, double_type_node);
6225 arg = convert_to_real (double_type_node, arg);
6227 else if (NULLPTR_TYPE_P (arg_type))
6228 arg = null_pointer_node;
6229 else if (INTEGRAL_OR_ENUMERATION_TYPE_P (arg_type))
6231 if (SCOPED_ENUM_P (arg_type) && !abi_version_at_least (6))
6233 if (complain & tf_warning)
6234 warning_at (loc, OPT_Wabi, "scoped enum %qT will not promote to an "
6235 "integral type in a future version of GCC", arg_type);
6236 arg = cp_convert (ENUM_UNDERLYING_TYPE (arg_type), arg, complain);
6238 arg = cp_perform_integral_promotions (arg, complain);
6241 arg = require_complete_type_sfinae (arg, complain);
6242 arg_type = TREE_TYPE (arg);
6244 if (arg != error_mark_node
6245 /* In a template (or ill-formed code), we can have an incomplete type
6246 even after require_complete_type_sfinae, in which case we don't know
6247 whether it has trivial copy or not. */
6248 && COMPLETE_TYPE_P (arg_type))
6250 /* Build up a real lvalue-to-rvalue conversion in case the
6251 copy constructor is trivial but not callable. */
6252 if (!cp_unevaluated_operand && CLASS_TYPE_P (arg_type))
6253 force_rvalue (arg, complain);
6255 /* [expr.call] 5.2.2/7:
6256 Passing a potentially-evaluated argument of class type (Clause 9)
6257 with a non-trivial copy constructor or a non-trivial destructor
6258 with no corresponding parameter is conditionally-supported, with
6259 implementation-defined semantics.
6261 We used to just warn here and do a bitwise copy, but now
6262 cp_expr_size will abort if we try to do that.
6264 If the call appears in the context of a sizeof expression,
6265 it is not potentially-evaluated. */
6266 if (cp_unevaluated_operand == 0
6267 && (type_has_nontrivial_copy_init (arg_type)
6268 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (arg_type)))
6270 if (complain & tf_error)
6271 error_at (loc, "cannot pass objects of non-trivially-copyable "
6272 "type %q#T through %<...%>", arg_type);
6273 else
6274 return error_mark_node;
6278 return arg;
6281 /* va_arg (EXPR, TYPE) is a builtin. Make sure it is not abused. */
6283 tree
6284 build_x_va_arg (source_location loc, tree expr, tree type)
6286 if (processing_template_decl)
6287 return build_min (VA_ARG_EXPR, type, expr);
6289 type = complete_type_or_else (type, NULL_TREE);
6291 if (expr == error_mark_node || !type)
6292 return error_mark_node;
6294 expr = mark_lvalue_use (expr);
6296 if (type_has_nontrivial_copy_init (type)
6297 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
6298 || TREE_CODE (type) == REFERENCE_TYPE)
6300 /* Remove reference types so we don't ICE later on. */
6301 tree type1 = non_reference (type);
6302 /* conditionally-supported behavior [expr.call] 5.2.2/7. */
6303 error ("cannot receive objects of non-trivially-copyable type %q#T "
6304 "through %<...%>; ", type);
6305 expr = convert (build_pointer_type (type1), null_node);
6306 expr = cp_build_indirect_ref (expr, RO_NULL, tf_warning_or_error);
6307 return expr;
6310 return build_va_arg (loc, expr, type);
6313 /* TYPE has been given to va_arg. Apply the default conversions which
6314 would have happened when passed via ellipsis. Return the promoted
6315 type, or the passed type if there is no change. */
6317 tree
6318 cxx_type_promotes_to (tree type)
6320 tree promote;
6322 /* Perform the array-to-pointer and function-to-pointer
6323 conversions. */
6324 type = type_decays_to (type);
6326 promote = type_promotes_to (type);
6327 if (same_type_p (type, promote))
6328 promote = type;
6330 return promote;
6333 /* ARG is a default argument expression being passed to a parameter of
6334 the indicated TYPE, which is a parameter to FN. PARMNUM is the
6335 zero-based argument number. Do any required conversions. Return
6336 the converted value. */
6338 static GTY(()) vec<tree, va_gc> *default_arg_context;
6339 void
6340 push_defarg_context (tree fn)
6341 { vec_safe_push (default_arg_context, fn); }
6343 void
6344 pop_defarg_context (void)
6345 { default_arg_context->pop (); }
6347 tree
6348 convert_default_arg (tree type, tree arg, tree fn, int parmnum,
6349 tsubst_flags_t complain)
6351 int i;
6352 tree t;
6354 /* See through clones. */
6355 fn = DECL_ORIGIN (fn);
6357 /* Detect recursion. */
6358 FOR_EACH_VEC_SAFE_ELT (default_arg_context, i, t)
6359 if (t == fn)
6361 if (complain & tf_error)
6362 error ("recursive evaluation of default argument for %q#D", fn);
6363 return error_mark_node;
6366 /* If the ARG is an unparsed default argument expression, the
6367 conversion cannot be performed. */
6368 if (TREE_CODE (arg) == DEFAULT_ARG)
6370 if (complain & tf_error)
6371 error ("call to %qD uses the default argument for parameter %P, which "
6372 "is not yet defined", fn, parmnum);
6373 return error_mark_node;
6376 push_defarg_context (fn);
6378 if (fn && DECL_TEMPLATE_INFO (fn))
6379 arg = tsubst_default_argument (fn, type, arg);
6381 /* Due to:
6383 [dcl.fct.default]
6385 The names in the expression are bound, and the semantic
6386 constraints are checked, at the point where the default
6387 expressions appears.
6389 we must not perform access checks here. */
6390 push_deferring_access_checks (dk_no_check);
6391 /* We must make a copy of ARG, in case subsequent processing
6392 alters any part of it. */
6393 arg = break_out_target_exprs (arg);
6394 if (TREE_CODE (arg) == CONSTRUCTOR)
6396 arg = digest_init (type, arg, complain);
6397 arg = convert_for_initialization (0, type, arg, LOOKUP_IMPLICIT,
6398 ICR_DEFAULT_ARGUMENT, fn, parmnum,
6399 complain);
6401 else
6403 arg = convert_for_initialization (0, type, arg, LOOKUP_IMPLICIT,
6404 ICR_DEFAULT_ARGUMENT, fn, parmnum,
6405 complain);
6406 arg = convert_for_arg_passing (type, arg, complain);
6408 pop_deferring_access_checks();
6410 pop_defarg_context ();
6412 return arg;
6415 /* Returns the type which will really be used for passing an argument of
6416 type TYPE. */
6418 tree
6419 type_passed_as (tree type)
6421 /* Pass classes with copy ctors by invisible reference. */
6422 if (TREE_ADDRESSABLE (type))
6424 type = build_reference_type (type);
6425 /* There are no other pointers to this temporary. */
6426 type = cp_build_qualified_type (type, TYPE_QUAL_RESTRICT);
6428 else if (targetm.calls.promote_prototypes (type)
6429 && INTEGRAL_TYPE_P (type)
6430 && COMPLETE_TYPE_P (type)
6431 && INT_CST_LT_UNSIGNED (TYPE_SIZE (type),
6432 TYPE_SIZE (integer_type_node)))
6433 type = integer_type_node;
6435 return type;
6438 /* Actually perform the appropriate conversion. */
6440 tree
6441 convert_for_arg_passing (tree type, tree val, tsubst_flags_t complain)
6443 tree bitfield_type;
6445 /* If VAL is a bitfield, then -- since it has already been converted
6446 to TYPE -- it cannot have a precision greater than TYPE.
6448 If it has a smaller precision, we must widen it here. For
6449 example, passing "int f:3;" to a function expecting an "int" will
6450 not result in any conversion before this point.
6452 If the precision is the same we must not risk widening. For
6453 example, the COMPONENT_REF for a 32-bit "long long" bitfield will
6454 often have type "int", even though the C++ type for the field is
6455 "long long". If the value is being passed to a function
6456 expecting an "int", then no conversions will be required. But,
6457 if we call convert_bitfield_to_declared_type, the bitfield will
6458 be converted to "long long". */
6459 bitfield_type = is_bitfield_expr_with_lowered_type (val);
6460 if (bitfield_type
6461 && TYPE_PRECISION (TREE_TYPE (val)) < TYPE_PRECISION (type))
6462 val = convert_to_integer (TYPE_MAIN_VARIANT (bitfield_type), val);
6464 if (val == error_mark_node)
6466 /* Pass classes with copy ctors by invisible reference. */
6467 else if (TREE_ADDRESSABLE (type))
6468 val = build1 (ADDR_EXPR, build_reference_type (type), val);
6469 else if (targetm.calls.promote_prototypes (type)
6470 && INTEGRAL_TYPE_P (type)
6471 && COMPLETE_TYPE_P (type)
6472 && INT_CST_LT_UNSIGNED (TYPE_SIZE (type),
6473 TYPE_SIZE (integer_type_node)))
6474 val = cp_perform_integral_promotions (val, complain);
6475 if ((complain & tf_warning)
6476 && warn_suggest_attribute_format)
6478 tree rhstype = TREE_TYPE (val);
6479 const enum tree_code coder = TREE_CODE (rhstype);
6480 const enum tree_code codel = TREE_CODE (type);
6481 if ((codel == POINTER_TYPE || codel == REFERENCE_TYPE)
6482 && coder == codel
6483 && check_missing_format_attribute (type, rhstype))
6484 warning (OPT_Wsuggest_attribute_format,
6485 "argument of function call might be a candidate for a format attribute");
6487 return val;
6490 /* Returns true iff FN is a function with magic varargs, i.e. ones for
6491 which no conversions at all should be done. This is true for some
6492 builtins which don't act like normal functions. */
6494 static bool
6495 magic_varargs_p (tree fn)
6497 if (DECL_BUILT_IN (fn))
6498 switch (DECL_FUNCTION_CODE (fn))
6500 case BUILT_IN_CLASSIFY_TYPE:
6501 case BUILT_IN_CONSTANT_P:
6502 case BUILT_IN_NEXT_ARG:
6503 case BUILT_IN_VA_START:
6504 return true;
6506 default:;
6507 return lookup_attribute ("type generic",
6508 TYPE_ATTRIBUTES (TREE_TYPE (fn))) != 0;
6511 return false;
6514 /* Returns the decl of the dispatcher function if FN is a function version. */
6516 tree
6517 get_function_version_dispatcher (tree fn)
6519 tree dispatcher_decl = NULL;
6521 gcc_assert (TREE_CODE (fn) == FUNCTION_DECL
6522 && DECL_FUNCTION_VERSIONED (fn));
6524 gcc_assert (targetm.get_function_versions_dispatcher);
6525 dispatcher_decl = targetm.get_function_versions_dispatcher (fn);
6527 if (dispatcher_decl == NULL)
6529 error_at (input_location, "use of multiversioned function "
6530 "without a default");
6531 return NULL;
6534 retrofit_lang_decl (dispatcher_decl);
6535 gcc_assert (dispatcher_decl != NULL);
6536 return dispatcher_decl;
6539 /* fn is a function version dispatcher that is marked used. Mark all the
6540 semantically identical function versions it will dispatch as used. */
6542 void
6543 mark_versions_used (tree fn)
6545 struct cgraph_node *node;
6546 struct cgraph_function_version_info *node_v;
6547 struct cgraph_function_version_info *it_v;
6549 gcc_assert (TREE_CODE (fn) == FUNCTION_DECL);
6551 node = cgraph_get_node (fn);
6552 if (node == NULL)
6553 return;
6555 gcc_assert (node->dispatcher_function);
6557 node_v = get_cgraph_node_version (node);
6558 if (node_v == NULL)
6559 return;
6561 /* All semantically identical versions are chained. Traverse and mark each
6562 one of them as used. */
6563 it_v = node_v->next;
6564 while (it_v != NULL)
6566 mark_used (it_v->this_node->symbol.decl);
6567 it_v = it_v->next;
6571 /* Subroutine of the various build_*_call functions. Overload resolution
6572 has chosen a winning candidate CAND; build up a CALL_EXPR accordingly.
6573 ARGS is a TREE_LIST of the unconverted arguments to the call. FLAGS is a
6574 bitmask of various LOOKUP_* flags which apply to the call itself. */
6576 static tree
6577 build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain)
6579 tree fn = cand->fn;
6580 const vec<tree, va_gc> *args = cand->args;
6581 tree first_arg = cand->first_arg;
6582 conversion **convs = cand->convs;
6583 conversion *conv;
6584 tree parm = TYPE_ARG_TYPES (TREE_TYPE (fn));
6585 int parmlen;
6586 tree val;
6587 int i = 0;
6588 int j = 0;
6589 unsigned int arg_index = 0;
6590 int is_method = 0;
6591 int nargs;
6592 tree *argarray;
6593 bool already_used = false;
6595 /* In a template, there is no need to perform all of the work that
6596 is normally done. We are only interested in the type of the call
6597 expression, i.e., the return type of the function. Any semantic
6598 errors will be deferred until the template is instantiated. */
6599 if (processing_template_decl)
6601 tree expr, addr;
6602 tree return_type;
6603 const tree *argarray;
6604 unsigned int nargs;
6606 return_type = TREE_TYPE (TREE_TYPE (fn));
6607 nargs = vec_safe_length (args);
6608 if (first_arg == NULL_TREE)
6609 argarray = args->address ();
6610 else
6612 tree *alcarray;
6613 unsigned int ix;
6614 tree arg;
6616 ++nargs;
6617 alcarray = XALLOCAVEC (tree, nargs);
6618 alcarray[0] = first_arg;
6619 FOR_EACH_VEC_SAFE_ELT (args, ix, arg)
6620 alcarray[ix + 1] = arg;
6621 argarray = alcarray;
6624 addr = build_addr_func (fn, complain);
6625 if (addr == error_mark_node)
6626 return error_mark_node;
6627 expr = build_call_array_loc (input_location, return_type,
6628 addr, nargs, argarray);
6629 if (TREE_THIS_VOLATILE (fn) && cfun)
6630 current_function_returns_abnormally = 1;
6631 return convert_from_reference (expr);
6634 /* Give any warnings we noticed during overload resolution. */
6635 if (cand->warnings && (complain & tf_warning))
6637 struct candidate_warning *w;
6638 for (w = cand->warnings; w; w = w->next)
6639 joust (cand, w->loser, 1, complain);
6642 /* Make =delete work with SFINAE. */
6643 if (DECL_DELETED_FN (fn) && !(complain & tf_error))
6644 return error_mark_node;
6646 if (DECL_FUNCTION_MEMBER_P (fn))
6648 tree access_fn;
6649 /* If FN is a template function, two cases must be considered.
6650 For example:
6652 struct A {
6653 protected:
6654 template <class T> void f();
6656 template <class T> struct B {
6657 protected:
6658 void g();
6660 struct C : A, B<int> {
6661 using A::f; // #1
6662 using B<int>::g; // #2
6665 In case #1 where `A::f' is a member template, DECL_ACCESS is
6666 recorded in the primary template but not in its specialization.
6667 We check access of FN using its primary template.
6669 In case #2, where `B<int>::g' has a DECL_TEMPLATE_INFO simply
6670 because it is a member of class template B, DECL_ACCESS is
6671 recorded in the specialization `B<int>::g'. We cannot use its
6672 primary template because `B<T>::g' and `B<int>::g' may have
6673 different access. */
6674 if (DECL_TEMPLATE_INFO (fn)
6675 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (fn)))
6676 access_fn = DECL_TI_TEMPLATE (fn);
6677 else
6678 access_fn = fn;
6679 if (!perform_or_defer_access_check (cand->access_path, access_fn,
6680 fn, complain))
6681 return error_mark_node;
6684 /* If we're checking for implicit delete, don't bother with argument
6685 conversions. */
6686 if (flags & LOOKUP_SPECULATIVE)
6688 if (DECL_DELETED_FN (fn))
6690 if (complain & tf_error)
6691 mark_used (fn);
6692 return error_mark_node;
6694 if (cand->viable == 1)
6695 return fn;
6696 else if (!(complain & tf_error))
6697 /* Reject bad conversions now. */
6698 return error_mark_node;
6699 /* else continue to get conversion error. */
6702 /* Find maximum size of vector to hold converted arguments. */
6703 parmlen = list_length (parm);
6704 nargs = vec_safe_length (args) + (first_arg != NULL_TREE ? 1 : 0);
6705 if (parmlen > nargs)
6706 nargs = parmlen;
6707 argarray = XALLOCAVEC (tree, nargs);
6709 /* The implicit parameters to a constructor are not considered by overload
6710 resolution, and must be of the proper type. */
6711 if (DECL_CONSTRUCTOR_P (fn))
6713 if (first_arg != NULL_TREE)
6715 argarray[j++] = first_arg;
6716 first_arg = NULL_TREE;
6718 else
6720 argarray[j++] = (*args)[arg_index];
6721 ++arg_index;
6723 parm = TREE_CHAIN (parm);
6724 /* We should never try to call the abstract constructor. */
6725 gcc_assert (!DECL_HAS_IN_CHARGE_PARM_P (fn));
6727 if (DECL_HAS_VTT_PARM_P (fn))
6729 argarray[j++] = (*args)[arg_index];
6730 ++arg_index;
6731 parm = TREE_CHAIN (parm);
6734 /* Bypass access control for 'this' parameter. */
6735 else if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
6737 tree parmtype = TREE_VALUE (parm);
6738 tree arg = (first_arg != NULL_TREE
6739 ? first_arg
6740 : (*args)[arg_index]);
6741 tree argtype = TREE_TYPE (arg);
6742 tree converted_arg;
6743 tree base_binfo;
6745 if (convs[i]->bad_p)
6747 if (complain & tf_error)
6748 permerror (input_location, "passing %qT as %<this%> argument of %q#D discards qualifiers",
6749 TREE_TYPE (argtype), fn);
6750 else
6751 return error_mark_node;
6754 /* See if the function member or the whole class type is declared
6755 final and the call can be devirtualized. */
6756 if (DECL_FINAL_P (fn)
6757 || CLASSTYPE_FINAL (TYPE_METHOD_BASETYPE (TREE_TYPE (fn))))
6758 flags |= LOOKUP_NONVIRTUAL;
6760 /* [class.mfct.nonstatic]: If a nonstatic member function of a class
6761 X is called for an object that is not of type X, or of a type
6762 derived from X, the behavior is undefined.
6764 So we can assume that anything passed as 'this' is non-null, and
6765 optimize accordingly. */
6766 gcc_assert (TREE_CODE (parmtype) == POINTER_TYPE);
6767 /* Convert to the base in which the function was declared. */
6768 gcc_assert (cand->conversion_path != NULL_TREE);
6769 converted_arg = build_base_path (PLUS_EXPR,
6770 arg,
6771 cand->conversion_path,
6772 1, complain);
6773 /* Check that the base class is accessible. */
6774 if (!accessible_base_p (TREE_TYPE (argtype),
6775 BINFO_TYPE (cand->conversion_path), true))
6776 error ("%qT is not an accessible base of %qT",
6777 BINFO_TYPE (cand->conversion_path),
6778 TREE_TYPE (argtype));
6779 /* If fn was found by a using declaration, the conversion path
6780 will be to the derived class, not the base declaring fn. We
6781 must convert from derived to base. */
6782 base_binfo = lookup_base (TREE_TYPE (TREE_TYPE (converted_arg)),
6783 TREE_TYPE (parmtype), ba_unique,
6784 NULL, complain);
6785 converted_arg = build_base_path (PLUS_EXPR, converted_arg,
6786 base_binfo, 1, complain);
6788 argarray[j++] = converted_arg;
6789 parm = TREE_CHAIN (parm);
6790 if (first_arg != NULL_TREE)
6791 first_arg = NULL_TREE;
6792 else
6793 ++arg_index;
6794 ++i;
6795 is_method = 1;
6798 gcc_assert (first_arg == NULL_TREE);
6799 for (; arg_index < vec_safe_length (args) && parm;
6800 parm = TREE_CHAIN (parm), ++arg_index, ++i)
6802 tree type = TREE_VALUE (parm);
6803 tree arg = (*args)[arg_index];
6804 bool conversion_warning = true;
6806 conv = convs[i];
6808 /* If the argument is NULL and used to (implicitly) instantiate a
6809 template function (and bind one of the template arguments to
6810 the type of 'long int'), we don't want to warn about passing NULL
6811 to non-pointer argument.
6812 For example, if we have this template function:
6814 template<typename T> void func(T x) {}
6816 we want to warn (when -Wconversion is enabled) in this case:
6818 void foo() {
6819 func<int>(NULL);
6822 but not in this case:
6824 void foo() {
6825 func(NULL);
6828 if (arg == null_node
6829 && DECL_TEMPLATE_INFO (fn)
6830 && cand->template_decl
6831 && !(flags & LOOKUP_EXPLICIT_TMPL_ARGS))
6832 conversion_warning = false;
6834 /* Warn about initializer_list deduction that isn't currently in the
6835 working draft. */
6836 if (cxx_dialect > cxx98
6837 && flag_deduce_init_list
6838 && cand->template_decl
6839 && is_std_init_list (non_reference (type))
6840 && BRACE_ENCLOSED_INITIALIZER_P (arg))
6842 tree tmpl = TI_TEMPLATE (cand->template_decl);
6843 tree realparm = chain_index (j, DECL_ARGUMENTS (cand->fn));
6844 tree patparm = get_pattern_parm (realparm, tmpl);
6845 tree pattype = TREE_TYPE (patparm);
6846 if (PACK_EXPANSION_P (pattype))
6847 pattype = PACK_EXPANSION_PATTERN (pattype);
6848 pattype = non_reference (pattype);
6850 if (TREE_CODE (pattype) == TEMPLATE_TYPE_PARM
6851 && (cand->explicit_targs == NULL_TREE
6852 || (TREE_VEC_LENGTH (cand->explicit_targs)
6853 <= TEMPLATE_TYPE_IDX (pattype))))
6855 pedwarn (input_location, 0, "deducing %qT as %qT",
6856 non_reference (TREE_TYPE (patparm)),
6857 non_reference (type));
6858 pedwarn (input_location, 0, " in call to %q+D", cand->fn);
6859 pedwarn (input_location, 0,
6860 " (you can disable this with -fno-deduce-init-list)");
6864 val = convert_like_with_context (conv, arg, fn, i-is_method,
6865 conversion_warning
6866 ? complain
6867 : complain & (~tf_warning));
6869 val = convert_for_arg_passing (type, val, complain);
6870 if (val == error_mark_node)
6871 return error_mark_node;
6872 else
6873 argarray[j++] = val;
6876 /* Default arguments */
6877 for (; parm && parm != void_list_node; parm = TREE_CHAIN (parm), i++)
6879 if (TREE_VALUE (parm) == error_mark_node)
6880 return error_mark_node;
6881 argarray[j++] = convert_default_arg (TREE_VALUE (parm),
6882 TREE_PURPOSE (parm),
6883 fn, i - is_method,
6884 complain);
6887 /* Ellipsis */
6888 for (; arg_index < vec_safe_length (args); ++arg_index)
6890 tree a = (*args)[arg_index];
6891 if (magic_varargs_p (fn))
6892 /* Do no conversions for magic varargs. */
6893 a = mark_type_use (a);
6894 else
6895 a = convert_arg_to_ellipsis (a, complain);
6896 argarray[j++] = a;
6899 gcc_assert (j <= nargs);
6900 nargs = j;
6902 check_function_arguments (TREE_TYPE (fn), nargs, argarray);
6904 /* Avoid actually calling copy constructors and copy assignment operators,
6905 if possible. */
6907 if (! flag_elide_constructors)
6908 /* Do things the hard way. */;
6909 else if (cand->num_convs == 1
6910 && (DECL_COPY_CONSTRUCTOR_P (fn)
6911 || DECL_MOVE_CONSTRUCTOR_P (fn)))
6913 tree targ;
6914 tree arg = argarray[num_artificial_parms_for (fn)];
6915 tree fa;
6916 bool trivial = trivial_fn_p (fn);
6918 /* Pull out the real argument, disregarding const-correctness. */
6919 targ = arg;
6920 while (CONVERT_EXPR_P (targ)
6921 || TREE_CODE (targ) == NON_LVALUE_EXPR)
6922 targ = TREE_OPERAND (targ, 0);
6923 if (TREE_CODE (targ) == ADDR_EXPR)
6925 targ = TREE_OPERAND (targ, 0);
6926 if (!same_type_ignoring_top_level_qualifiers_p
6927 (TREE_TYPE (TREE_TYPE (arg)), TREE_TYPE (targ)))
6928 targ = NULL_TREE;
6930 else
6931 targ = NULL_TREE;
6933 if (targ)
6934 arg = targ;
6935 else
6936 arg = cp_build_indirect_ref (arg, RO_NULL, complain);
6938 /* [class.copy]: the copy constructor is implicitly defined even if
6939 the implementation elided its use. */
6940 if (!trivial || DECL_DELETED_FN (fn))
6942 mark_used (fn);
6943 already_used = true;
6946 /* If we're creating a temp and we already have one, don't create a
6947 new one. If we're not creating a temp but we get one, use
6948 INIT_EXPR to collapse the temp into our target. Otherwise, if the
6949 ctor is trivial, do a bitwise copy with a simple TARGET_EXPR for a
6950 temp or an INIT_EXPR otherwise. */
6951 fa = argarray[0];
6952 if (integer_zerop (fa))
6954 if (TREE_CODE (arg) == TARGET_EXPR)
6955 return arg;
6956 else if (trivial)
6957 return force_target_expr (DECL_CONTEXT (fn), arg, complain);
6959 else if (TREE_CODE (arg) == TARGET_EXPR || trivial)
6961 tree to = stabilize_reference (cp_build_indirect_ref (fa, RO_NULL,
6962 complain));
6964 val = build2 (INIT_EXPR, DECL_CONTEXT (fn), to, arg);
6965 return val;
6968 else if (DECL_OVERLOADED_OPERATOR_P (fn) == NOP_EXPR
6969 && trivial_fn_p (fn)
6970 && !DECL_DELETED_FN (fn))
6972 tree to = stabilize_reference
6973 (cp_build_indirect_ref (argarray[0], RO_NULL, complain));
6974 tree type = TREE_TYPE (to);
6975 tree as_base = CLASSTYPE_AS_BASE (type);
6976 tree arg = argarray[1];
6978 if (is_really_empty_class (type))
6980 /* Avoid copying empty classes. */
6981 val = build2 (COMPOUND_EXPR, void_type_node, to, arg);
6982 TREE_NO_WARNING (val) = 1;
6983 val = build2 (COMPOUND_EXPR, type, val, to);
6984 TREE_NO_WARNING (val) = 1;
6986 else if (tree_int_cst_equal (TYPE_SIZE (type), TYPE_SIZE (as_base)))
6988 arg = cp_build_indirect_ref (arg, RO_NULL, complain);
6989 val = build2 (MODIFY_EXPR, TREE_TYPE (to), to, arg);
6991 else
6993 /* We must only copy the non-tail padding parts. */
6994 tree arg0, arg2, t;
6995 tree array_type, alias_set;
6997 arg2 = TYPE_SIZE_UNIT (as_base);
6998 arg0 = cp_build_addr_expr (to, complain);
7000 array_type = build_array_type (char_type_node,
7001 build_index_type
7002 (size_binop (MINUS_EXPR,
7003 arg2, size_int (1))));
7004 alias_set = build_int_cst (build_pointer_type (type), 0);
7005 t = build2 (MODIFY_EXPR, void_type_node,
7006 build2 (MEM_REF, array_type, arg0, alias_set),
7007 build2 (MEM_REF, array_type, arg, alias_set));
7008 val = build2 (COMPOUND_EXPR, TREE_TYPE (to), t, to);
7009 TREE_NO_WARNING (val) = 1;
7012 return val;
7014 else if (DECL_DESTRUCTOR_P (fn)
7015 && trivial_fn_p (fn)
7016 && !DECL_DELETED_FN (fn))
7017 return fold_convert (void_type_node, argarray[0]);
7018 /* FIXME handle trivial default constructor, too. */
7020 /* For calls to a multi-versioned function, overload resolution
7021 returns the function with the highest target priority, that is,
7022 the version that will checked for dispatching first. If this
7023 version is inlinable, a direct call to this version can be made
7024 otherwise the call should go through the dispatcher. */
7026 if (DECL_FUNCTION_VERSIONED (fn)
7027 && !targetm.target_option.can_inline_p (current_function_decl, fn))
7029 fn = get_function_version_dispatcher (fn);
7030 if (fn == NULL)
7031 return NULL;
7032 if (!already_used)
7033 mark_versions_used (fn);
7036 if (!already_used)
7037 mark_used (fn);
7039 if (DECL_VINDEX (fn) && (flags & LOOKUP_NONVIRTUAL) == 0)
7041 tree t;
7042 tree binfo = lookup_base (TREE_TYPE (TREE_TYPE (argarray[0])),
7043 DECL_CONTEXT (fn),
7044 ba_any, NULL, complain);
7045 gcc_assert (binfo && binfo != error_mark_node);
7047 /* Warn about deprecated virtual functions now, since we're about
7048 to throw away the decl. */
7049 if (TREE_DEPRECATED (fn))
7050 warn_deprecated_use (fn, NULL_TREE);
7052 argarray[0] = build_base_path (PLUS_EXPR, argarray[0], binfo, 1,
7053 complain);
7054 if (TREE_SIDE_EFFECTS (argarray[0]))
7055 argarray[0] = save_expr (argarray[0]);
7056 t = build_pointer_type (TREE_TYPE (fn));
7057 if (DECL_CONTEXT (fn) && TYPE_JAVA_INTERFACE (DECL_CONTEXT (fn)))
7058 fn = build_java_interface_fn_ref (fn, argarray[0]);
7059 else
7060 fn = build_vfn_ref (argarray[0], DECL_VINDEX (fn));
7061 TREE_TYPE (fn) = t;
7063 else
7065 fn = build_addr_func (fn, complain);
7066 if (fn == error_mark_node)
7067 return error_mark_node;
7070 return build_cxx_call (fn, nargs, argarray, complain);
7073 /* Build and return a call to FN, using NARGS arguments in ARGARRAY.
7074 This function performs no overload resolution, conversion, or other
7075 high-level operations. */
7077 tree
7078 build_cxx_call (tree fn, int nargs, tree *argarray,
7079 tsubst_flags_t complain)
7081 tree fndecl;
7082 int optimize_sav;
7084 /* Remember roughly where this call is. */
7085 location_t loc = EXPR_LOC_OR_HERE (fn);
7086 fn = build_call_a (fn, nargs, argarray);
7087 SET_EXPR_LOCATION (fn, loc);
7089 fndecl = get_callee_fndecl (fn);
7091 /* Check that arguments to builtin functions match the expectations. */
7092 if (fndecl
7093 && DECL_BUILT_IN (fndecl)
7094 && DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_NORMAL
7095 && !check_builtin_function_arguments (fndecl, nargs, argarray))
7096 return error_mark_node;
7098 /* Some built-in function calls will be evaluated at compile-time in
7099 fold (). Set optimize to 1 when folding __builtin_constant_p inside
7100 a constexpr function so that fold_builtin_1 doesn't fold it to 0. */
7101 optimize_sav = optimize;
7102 if (!optimize && fndecl && DECL_IS_BUILTIN_CONSTANT_P (fndecl)
7103 && current_function_decl
7104 && DECL_DECLARED_CONSTEXPR_P (current_function_decl))
7105 optimize = 1;
7106 fn = fold_if_not_in_template (fn);
7107 optimize = optimize_sav;
7109 if (VOID_TYPE_P (TREE_TYPE (fn)))
7110 return fn;
7112 fn = require_complete_type_sfinae (fn, complain);
7113 if (fn == error_mark_node)
7114 return error_mark_node;
7116 if (MAYBE_CLASS_TYPE_P (TREE_TYPE (fn)))
7117 fn = build_cplus_new (TREE_TYPE (fn), fn, complain);
7118 return convert_from_reference (fn);
7121 static GTY(()) tree java_iface_lookup_fn;
7123 /* Make an expression which yields the address of the Java interface
7124 method FN. This is achieved by generating a call to libjava's
7125 _Jv_LookupInterfaceMethodIdx(). */
7127 static tree
7128 build_java_interface_fn_ref (tree fn, tree instance)
7130 tree lookup_fn, method, idx;
7131 tree klass_ref, iface, iface_ref;
7132 int i;
7134 if (!java_iface_lookup_fn)
7136 tree ftype = build_function_type_list (ptr_type_node,
7137 ptr_type_node, ptr_type_node,
7138 java_int_type_node, NULL_TREE);
7139 java_iface_lookup_fn
7140 = add_builtin_function ("_Jv_LookupInterfaceMethodIdx", ftype,
7141 0, NOT_BUILT_IN, NULL, NULL_TREE);
7144 /* Look up the pointer to the runtime java.lang.Class object for `instance'.
7145 This is the first entry in the vtable. */
7146 klass_ref = build_vtbl_ref (cp_build_indirect_ref (instance, RO_NULL,
7147 tf_warning_or_error),
7148 integer_zero_node);
7150 /* Get the java.lang.Class pointer for the interface being called. */
7151 iface = DECL_CONTEXT (fn);
7152 iface_ref = lookup_field (iface, get_identifier ("class$"), 0, false);
7153 if (!iface_ref || TREE_CODE (iface_ref) != VAR_DECL
7154 || DECL_CONTEXT (iface_ref) != iface)
7156 error ("could not find class$ field in java interface type %qT",
7157 iface);
7158 return error_mark_node;
7160 iface_ref = build_address (iface_ref);
7161 iface_ref = convert (build_pointer_type (iface), iface_ref);
7163 /* Determine the itable index of FN. */
7164 i = 1;
7165 for (method = TYPE_METHODS (iface); method; method = DECL_CHAIN (method))
7167 if (!DECL_VIRTUAL_P (method))
7168 continue;
7169 if (fn == method)
7170 break;
7171 i++;
7173 idx = build_int_cst (NULL_TREE, i);
7175 lookup_fn = build1 (ADDR_EXPR,
7176 build_pointer_type (TREE_TYPE (java_iface_lookup_fn)),
7177 java_iface_lookup_fn);
7178 return build_call_nary (ptr_type_node, lookup_fn,
7179 3, klass_ref, iface_ref, idx);
7182 /* Returns the value to use for the in-charge parameter when making a
7183 call to a function with the indicated NAME.
7185 FIXME:Can't we find a neater way to do this mapping? */
7187 tree
7188 in_charge_arg_for_name (tree name)
7190 if (name == base_ctor_identifier
7191 || name == base_dtor_identifier)
7192 return integer_zero_node;
7193 else if (name == complete_ctor_identifier)
7194 return integer_one_node;
7195 else if (name == complete_dtor_identifier)
7196 return integer_two_node;
7197 else if (name == deleting_dtor_identifier)
7198 return integer_three_node;
7200 /* This function should only be called with one of the names listed
7201 above. */
7202 gcc_unreachable ();
7203 return NULL_TREE;
7206 /* Build a call to a constructor, destructor, or an assignment
7207 operator for INSTANCE, an expression with class type. NAME
7208 indicates the special member function to call; *ARGS are the
7209 arguments. ARGS may be NULL. This may change ARGS. BINFO
7210 indicates the base of INSTANCE that is to be passed as the `this'
7211 parameter to the member function called.
7213 FLAGS are the LOOKUP_* flags to use when processing the call.
7215 If NAME indicates a complete object constructor, INSTANCE may be
7216 NULL_TREE. In this case, the caller will call build_cplus_new to
7217 store the newly constructed object into a VAR_DECL. */
7219 tree
7220 build_special_member_call (tree instance, tree name, vec<tree, va_gc> **args,
7221 tree binfo, int flags, tsubst_flags_t complain)
7223 tree fns;
7224 /* The type of the subobject to be constructed or destroyed. */
7225 tree class_type;
7226 vec<tree, va_gc> *allocated = NULL;
7227 tree ret;
7229 gcc_assert (name == complete_ctor_identifier
7230 || name == base_ctor_identifier
7231 || name == complete_dtor_identifier
7232 || name == base_dtor_identifier
7233 || name == deleting_dtor_identifier
7234 || name == ansi_assopname (NOP_EXPR));
7235 if (TYPE_P (binfo))
7237 /* Resolve the name. */
7238 if (!complete_type_or_maybe_complain (binfo, NULL_TREE, complain))
7239 return error_mark_node;
7241 binfo = TYPE_BINFO (binfo);
7244 gcc_assert (binfo != NULL_TREE);
7246 class_type = BINFO_TYPE (binfo);
7248 /* Handle the special case where INSTANCE is NULL_TREE. */
7249 if (name == complete_ctor_identifier && !instance)
7251 instance = build_int_cst (build_pointer_type (class_type), 0);
7252 instance = build1 (INDIRECT_REF, class_type, instance);
7254 else
7256 if (name == complete_dtor_identifier
7257 || name == base_dtor_identifier
7258 || name == deleting_dtor_identifier)
7259 gcc_assert (args == NULL || vec_safe_is_empty (*args));
7261 /* Convert to the base class, if necessary. */
7262 if (!same_type_ignoring_top_level_qualifiers_p
7263 (TREE_TYPE (instance), BINFO_TYPE (binfo)))
7265 if (name != ansi_assopname (NOP_EXPR))
7266 /* For constructors and destructors, either the base is
7267 non-virtual, or it is virtual but we are doing the
7268 conversion from a constructor or destructor for the
7269 complete object. In either case, we can convert
7270 statically. */
7271 instance = convert_to_base_statically (instance, binfo);
7272 else
7273 /* However, for assignment operators, we must convert
7274 dynamically if the base is virtual. */
7275 instance = build_base_path (PLUS_EXPR, instance,
7276 binfo, /*nonnull=*/1, complain);
7280 gcc_assert (instance != NULL_TREE);
7282 fns = lookup_fnfields (binfo, name, 1);
7284 /* When making a call to a constructor or destructor for a subobject
7285 that uses virtual base classes, pass down a pointer to a VTT for
7286 the subobject. */
7287 if ((name == base_ctor_identifier
7288 || name == base_dtor_identifier)
7289 && CLASSTYPE_VBASECLASSES (class_type))
7291 tree vtt;
7292 tree sub_vtt;
7294 /* If the current function is a complete object constructor
7295 or destructor, then we fetch the VTT directly.
7296 Otherwise, we look it up using the VTT we were given. */
7297 vtt = DECL_CHAIN (CLASSTYPE_VTABLES (current_class_type));
7298 vtt = decay_conversion (vtt, complain);
7299 if (vtt == error_mark_node)
7300 return error_mark_node;
7301 vtt = build3 (COND_EXPR, TREE_TYPE (vtt),
7302 build2 (EQ_EXPR, boolean_type_node,
7303 current_in_charge_parm, integer_zero_node),
7304 current_vtt_parm,
7305 vtt);
7306 if (BINFO_SUBVTT_INDEX (binfo))
7307 sub_vtt = fold_build_pointer_plus (vtt, BINFO_SUBVTT_INDEX (binfo));
7308 else
7309 sub_vtt = vtt;
7311 if (args == NULL)
7313 allocated = make_tree_vector ();
7314 args = &allocated;
7317 vec_safe_insert (*args, 0, sub_vtt);
7320 ret = build_new_method_call (instance, fns, args,
7321 TYPE_BINFO (BINFO_TYPE (binfo)),
7322 flags, /*fn=*/NULL,
7323 complain);
7325 if (allocated != NULL)
7326 release_tree_vector (allocated);
7328 return ret;
7331 /* Return the NAME, as a C string. The NAME indicates a function that
7332 is a member of TYPE. *FREE_P is set to true if the caller must
7333 free the memory returned.
7335 Rather than go through all of this, we should simply set the names
7336 of constructors and destructors appropriately, and dispense with
7337 ctor_identifier, dtor_identifier, etc. */
7339 static char *
7340 name_as_c_string (tree name, tree type, bool *free_p)
7342 char *pretty_name;
7344 /* Assume that we will not allocate memory. */
7345 *free_p = false;
7346 /* Constructors and destructors are special. */
7347 if (IDENTIFIER_CTOR_OR_DTOR_P (name))
7349 pretty_name
7350 = CONST_CAST (char *, identifier_to_locale (IDENTIFIER_POINTER (constructor_name (type))));
7351 /* For a destructor, add the '~'. */
7352 if (name == complete_dtor_identifier
7353 || name == base_dtor_identifier
7354 || name == deleting_dtor_identifier)
7356 pretty_name = concat ("~", pretty_name, NULL);
7357 /* Remember that we need to free the memory allocated. */
7358 *free_p = true;
7361 else if (IDENTIFIER_TYPENAME_P (name))
7363 pretty_name = concat ("operator ",
7364 type_as_string_translate (TREE_TYPE (name),
7365 TFF_PLAIN_IDENTIFIER),
7366 NULL);
7367 /* Remember that we need to free the memory allocated. */
7368 *free_p = true;
7370 else
7371 pretty_name = CONST_CAST (char *, identifier_to_locale (IDENTIFIER_POINTER (name)));
7373 return pretty_name;
7376 /* Build a call to "INSTANCE.FN (ARGS)". If FN_P is non-NULL, it will
7377 be set, upon return, to the function called. ARGS may be NULL.
7378 This may change ARGS. */
7380 static tree
7381 build_new_method_call_1 (tree instance, tree fns, vec<tree, va_gc> **args,
7382 tree conversion_path, int flags,
7383 tree *fn_p, tsubst_flags_t complain)
7385 struct z_candidate *candidates = 0, *cand;
7386 tree explicit_targs = NULL_TREE;
7387 tree basetype = NULL_TREE;
7388 tree access_binfo;
7389 tree optype;
7390 tree first_mem_arg = NULL_TREE;
7391 tree instance_ptr;
7392 tree name;
7393 bool skip_first_for_error;
7394 vec<tree, va_gc> *user_args;
7395 tree call;
7396 tree fn;
7397 int template_only = 0;
7398 bool any_viable_p;
7399 tree orig_instance;
7400 tree orig_fns;
7401 vec<tree, va_gc> *orig_args = NULL;
7402 void *p;
7404 gcc_assert (instance != NULL_TREE);
7406 /* We don't know what function we're going to call, yet. */
7407 if (fn_p)
7408 *fn_p = NULL_TREE;
7410 if (error_operand_p (instance)
7411 || !fns || error_operand_p (fns))
7412 return error_mark_node;
7414 if (!BASELINK_P (fns))
7416 if (complain & tf_error)
7417 error ("call to non-function %qD", fns);
7418 return error_mark_node;
7421 orig_instance = instance;
7422 orig_fns = fns;
7424 /* Dismantle the baselink to collect all the information we need. */
7425 if (!conversion_path)
7426 conversion_path = BASELINK_BINFO (fns);
7427 access_binfo = BASELINK_ACCESS_BINFO (fns);
7428 optype = BASELINK_OPTYPE (fns);
7429 fns = BASELINK_FUNCTIONS (fns);
7430 if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
7432 explicit_targs = TREE_OPERAND (fns, 1);
7433 fns = TREE_OPERAND (fns, 0);
7434 template_only = 1;
7436 gcc_assert (TREE_CODE (fns) == FUNCTION_DECL
7437 || TREE_CODE (fns) == TEMPLATE_DECL
7438 || TREE_CODE (fns) == OVERLOAD);
7439 fn = get_first_fn (fns);
7440 name = DECL_NAME (fn);
7442 basetype = TYPE_MAIN_VARIANT (TREE_TYPE (instance));
7443 gcc_assert (CLASS_TYPE_P (basetype));
7445 if (processing_template_decl)
7447 orig_args = args == NULL ? NULL : make_tree_vector_copy (*args);
7448 instance = build_non_dependent_expr (instance);
7449 if (args != NULL)
7450 make_args_non_dependent (*args);
7453 user_args = args == NULL ? NULL : *args;
7454 /* Under DR 147 A::A() is an invalid constructor call,
7455 not a functional cast. */
7456 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (fn))
7458 if (! (complain & tf_error))
7459 return error_mark_node;
7461 permerror (input_location,
7462 "cannot call constructor %<%T::%D%> directly",
7463 basetype, name);
7464 permerror (input_location, " for a function-style cast, remove the "
7465 "redundant %<::%D%>", name);
7466 call = build_functional_cast (basetype, build_tree_list_vec (user_args),
7467 complain);
7468 return call;
7471 /* Figure out whether to skip the first argument for the error
7472 message we will display to users if an error occurs. We don't
7473 want to display any compiler-generated arguments. The "this"
7474 pointer hasn't been added yet. However, we must remove the VTT
7475 pointer if this is a call to a base-class constructor or
7476 destructor. */
7477 skip_first_for_error = false;
7478 if (IDENTIFIER_CTOR_OR_DTOR_P (name))
7480 /* Callers should explicitly indicate whether they want to construct
7481 the complete object or just the part without virtual bases. */
7482 gcc_assert (name != ctor_identifier);
7483 /* Similarly for destructors. */
7484 gcc_assert (name != dtor_identifier);
7485 /* Remove the VTT pointer, if present. */
7486 if ((name == base_ctor_identifier || name == base_dtor_identifier)
7487 && CLASSTYPE_VBASECLASSES (basetype))
7488 skip_first_for_error = true;
7491 /* Process the argument list. */
7492 if (args != NULL && *args != NULL)
7494 *args = resolve_args (*args, complain);
7495 if (*args == NULL)
7496 return error_mark_node;
7499 instance_ptr = build_this (instance);
7501 /* It's OK to call destructors and constructors on cv-qualified objects.
7502 Therefore, convert the INSTANCE_PTR to the unqualified type, if
7503 necessary. */
7504 if (DECL_DESTRUCTOR_P (fn)
7505 || DECL_CONSTRUCTOR_P (fn))
7507 tree type = build_pointer_type (basetype);
7508 if (!same_type_p (type, TREE_TYPE (instance_ptr)))
7509 instance_ptr = build_nop (type, instance_ptr);
7511 if (DECL_DESTRUCTOR_P (fn))
7512 name = complete_dtor_identifier;
7514 first_mem_arg = instance_ptr;
7516 /* Get the high-water mark for the CONVERSION_OBSTACK. */
7517 p = conversion_obstack_alloc (0);
7519 /* If CONSTRUCTOR_IS_DIRECT_INIT is set, this was a T{ } form
7520 initializer, not T({ }). */
7521 if (DECL_CONSTRUCTOR_P (fn) && args != NULL && !vec_safe_is_empty (*args)
7522 && BRACE_ENCLOSED_INITIALIZER_P ((**args)[0])
7523 && CONSTRUCTOR_IS_DIRECT_INIT ((**args)[0]))
7525 tree init_list = (**args)[0];
7526 tree init = NULL_TREE;
7528 gcc_assert ((*args)->length () == 1
7529 && !(flags & LOOKUP_ONLYCONVERTING));
7531 /* If the initializer list has no elements and T is a class type with
7532 a default constructor, the object is value-initialized. Handle
7533 this here so we don't need to handle it wherever we use
7534 build_special_member_call. */
7535 if (CONSTRUCTOR_NELTS (init_list) == 0
7536 && TYPE_HAS_DEFAULT_CONSTRUCTOR (basetype)
7537 && !processing_template_decl)
7538 init = build_value_init (basetype, complain);
7540 /* If BASETYPE is an aggregate, we need to do aggregate
7541 initialization. */
7542 else if (CP_AGGREGATE_TYPE_P (basetype))
7543 init = digest_init (basetype, init_list, complain);
7545 if (init)
7547 tree ob;
7548 if (integer_zerop (instance_ptr))
7549 return get_target_expr_sfinae (init, complain);
7550 ob = build_fold_indirect_ref (instance_ptr);
7551 init = build2 (INIT_EXPR, TREE_TYPE (ob), ob, init);
7552 TREE_SIDE_EFFECTS (init) = true;
7553 return init;
7556 /* Otherwise go ahead with overload resolution. */
7557 add_list_candidates (fns, first_mem_arg, init_list,
7558 basetype, explicit_targs, template_only,
7559 conversion_path, access_binfo, flags,
7560 &candidates, complain);
7562 else
7564 add_candidates (fns, first_mem_arg, user_args, optype,
7565 explicit_targs, template_only, conversion_path,
7566 access_binfo, flags, &candidates, complain);
7568 any_viable_p = false;
7569 candidates = splice_viable (candidates, pedantic, &any_viable_p);
7571 if (!any_viable_p)
7573 if (complain & tf_error)
7575 if (!COMPLETE_OR_OPEN_TYPE_P (basetype))
7576 cxx_incomplete_type_error (instance_ptr, basetype);
7577 else if (optype)
7578 error ("no matching function for call to %<%T::operator %T(%A)%#V%>",
7579 basetype, optype, build_tree_list_vec (user_args),
7580 TREE_TYPE (TREE_TYPE (instance_ptr)));
7581 else
7583 char *pretty_name;
7584 bool free_p;
7585 tree arglist;
7587 pretty_name = name_as_c_string (name, basetype, &free_p);
7588 arglist = build_tree_list_vec (user_args);
7589 if (skip_first_for_error)
7590 arglist = TREE_CHAIN (arglist);
7591 error ("no matching function for call to %<%T::%s(%A)%#V%>",
7592 basetype, pretty_name, arglist,
7593 TREE_TYPE (TREE_TYPE (instance_ptr)));
7594 if (free_p)
7595 free (pretty_name);
7597 print_z_candidates (location_of (name), candidates);
7599 call = error_mark_node;
7601 else
7603 cand = tourney (candidates, complain);
7604 if (cand == 0)
7606 char *pretty_name;
7607 bool free_p;
7608 tree arglist;
7610 if (complain & tf_error)
7612 pretty_name = name_as_c_string (name, basetype, &free_p);
7613 arglist = build_tree_list_vec (user_args);
7614 if (skip_first_for_error)
7615 arglist = TREE_CHAIN (arglist);
7616 error ("call of overloaded %<%s(%A)%> is ambiguous", pretty_name,
7617 arglist);
7618 print_z_candidates (location_of (name), candidates);
7619 if (free_p)
7620 free (pretty_name);
7622 call = error_mark_node;
7624 else
7626 fn = cand->fn;
7628 if (!(flags & LOOKUP_NONVIRTUAL)
7629 && DECL_PURE_VIRTUAL_P (fn)
7630 && instance == current_class_ref
7631 && (DECL_CONSTRUCTOR_P (current_function_decl)
7632 || DECL_DESTRUCTOR_P (current_function_decl))
7633 && (complain & tf_warning))
7634 /* This is not an error, it is runtime undefined
7635 behavior. */
7636 warning (0, (DECL_CONSTRUCTOR_P (current_function_decl) ?
7637 "pure virtual %q#D called from constructor"
7638 : "pure virtual %q#D called from destructor"),
7639 fn);
7641 if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE
7642 && is_dummy_object (instance_ptr))
7644 if (complain & tf_error)
7645 error ("cannot call member function %qD without object",
7646 fn);
7647 call = error_mark_node;
7649 else
7651 /* Optimize away vtable lookup if we know that this
7652 function can't be overridden. We need to check if
7653 the context and the instance type are the same,
7654 actually FN might be defined in a different class
7655 type because of a using-declaration. In this case, we
7656 do not want to perform a non-virtual call. */
7657 if (DECL_VINDEX (fn) && ! (flags & LOOKUP_NONVIRTUAL)
7658 && same_type_ignoring_top_level_qualifiers_p
7659 (DECL_CONTEXT (fn), TREE_TYPE (instance))
7660 && resolves_to_fixed_type_p (instance, 0))
7661 flags |= LOOKUP_NONVIRTUAL;
7662 if (explicit_targs)
7663 flags |= LOOKUP_EXPLICIT_TMPL_ARGS;
7664 /* Now we know what function is being called. */
7665 if (fn_p)
7666 *fn_p = fn;
7667 /* Build the actual CALL_EXPR. */
7668 call = build_over_call (cand, flags, complain);
7669 /* In an expression of the form `a->f()' where `f' turns
7670 out to be a static member function, `a' is
7671 none-the-less evaluated. */
7672 if (TREE_CODE (TREE_TYPE (fn)) != METHOD_TYPE
7673 && !is_dummy_object (instance_ptr)
7674 && TREE_SIDE_EFFECTS (instance_ptr))
7675 call = build2 (COMPOUND_EXPR, TREE_TYPE (call),
7676 instance_ptr, call);
7677 else if (call != error_mark_node
7678 && DECL_DESTRUCTOR_P (cand->fn)
7679 && !VOID_TYPE_P (TREE_TYPE (call)))
7680 /* An explicit call of the form "x->~X()" has type
7681 "void". However, on platforms where destructors
7682 return "this" (i.e., those where
7683 targetm.cxx.cdtor_returns_this is true), such calls
7684 will appear to have a return value of pointer type
7685 to the low-level call machinery. We do not want to
7686 change the low-level machinery, since we want to be
7687 able to optimize "delete f()" on such platforms as
7688 "operator delete(~X(f()))" (rather than generating
7689 "t = f(), ~X(t), operator delete (t)"). */
7690 call = build_nop (void_type_node, call);
7695 if (processing_template_decl && call != error_mark_node)
7697 bool cast_to_void = false;
7699 if (TREE_CODE (call) == COMPOUND_EXPR)
7700 call = TREE_OPERAND (call, 1);
7701 else if (TREE_CODE (call) == NOP_EXPR)
7703 cast_to_void = true;
7704 call = TREE_OPERAND (call, 0);
7706 if (TREE_CODE (call) == INDIRECT_REF)
7707 call = TREE_OPERAND (call, 0);
7708 call = (build_min_non_dep_call_vec
7709 (call,
7710 build_min (COMPONENT_REF, TREE_TYPE (CALL_EXPR_FN (call)),
7711 orig_instance, orig_fns, NULL_TREE),
7712 orig_args));
7713 SET_EXPR_LOCATION (call, input_location);
7714 call = convert_from_reference (call);
7715 if (cast_to_void)
7716 call = build_nop (void_type_node, call);
7719 /* Free all the conversions we allocated. */
7720 obstack_free (&conversion_obstack, p);
7722 if (orig_args != NULL)
7723 release_tree_vector (orig_args);
7725 return call;
7728 /* Wrapper for above. */
7730 tree
7731 build_new_method_call (tree instance, tree fns, vec<tree, va_gc> **args,
7732 tree conversion_path, int flags,
7733 tree *fn_p, tsubst_flags_t complain)
7735 tree ret;
7736 bool subtime = timevar_cond_start (TV_OVERLOAD);
7737 ret = build_new_method_call_1 (instance, fns, args, conversion_path, flags,
7738 fn_p, complain);
7739 timevar_cond_stop (TV_OVERLOAD, subtime);
7740 return ret;
7743 /* Returns true iff standard conversion sequence ICS1 is a proper
7744 subsequence of ICS2. */
7746 static bool
7747 is_subseq (conversion *ics1, conversion *ics2)
7749 /* We can assume that a conversion of the same code
7750 between the same types indicates a subsequence since we only get
7751 here if the types we are converting from are the same. */
7753 while (ics1->kind == ck_rvalue
7754 || ics1->kind == ck_lvalue)
7755 ics1 = next_conversion (ics1);
7757 while (1)
7759 while (ics2->kind == ck_rvalue
7760 || ics2->kind == ck_lvalue)
7761 ics2 = next_conversion (ics2);
7763 if (ics2->kind == ck_user
7764 || ics2->kind == ck_ambig
7765 || ics2->kind == ck_aggr
7766 || ics2->kind == ck_list
7767 || ics2->kind == ck_identity)
7768 /* At this point, ICS1 cannot be a proper subsequence of
7769 ICS2. We can get a USER_CONV when we are comparing the
7770 second standard conversion sequence of two user conversion
7771 sequences. */
7772 return false;
7774 ics2 = next_conversion (ics2);
7776 if (ics2->kind == ics1->kind
7777 && same_type_p (ics2->type, ics1->type)
7778 && same_type_p (next_conversion (ics2)->type,
7779 next_conversion (ics1)->type))
7780 return true;
7784 /* Returns nonzero iff DERIVED is derived from BASE. The inputs may
7785 be any _TYPE nodes. */
7787 bool
7788 is_properly_derived_from (tree derived, tree base)
7790 if (!CLASS_TYPE_P (derived) || !CLASS_TYPE_P (base))
7791 return false;
7793 /* We only allow proper derivation here. The DERIVED_FROM_P macro
7794 considers every class derived from itself. */
7795 return (!same_type_ignoring_top_level_qualifiers_p (derived, base)
7796 && DERIVED_FROM_P (base, derived));
7799 /* We build the ICS for an implicit object parameter as a pointer
7800 conversion sequence. However, such a sequence should be compared
7801 as if it were a reference conversion sequence. If ICS is the
7802 implicit conversion sequence for an implicit object parameter,
7803 modify it accordingly. */
7805 static void
7806 maybe_handle_implicit_object (conversion **ics)
7808 if ((*ics)->this_p)
7810 /* [over.match.funcs]
7812 For non-static member functions, the type of the
7813 implicit object parameter is "reference to cv X"
7814 where X is the class of which the function is a
7815 member and cv is the cv-qualification on the member
7816 function declaration. */
7817 conversion *t = *ics;
7818 tree reference_type;
7820 /* The `this' parameter is a pointer to a class type. Make the
7821 implicit conversion talk about a reference to that same class
7822 type. */
7823 reference_type = TREE_TYPE (t->type);
7824 reference_type = build_reference_type (reference_type);
7826 if (t->kind == ck_qual)
7827 t = next_conversion (t);
7828 if (t->kind == ck_ptr)
7829 t = next_conversion (t);
7830 t = build_identity_conv (TREE_TYPE (t->type), NULL_TREE);
7831 t = direct_reference_binding (reference_type, t);
7832 t->this_p = 1;
7833 t->rvaluedness_matches_p = 0;
7834 *ics = t;
7838 /* If *ICS is a REF_BIND set *ICS to the remainder of the conversion,
7839 and return the initial reference binding conversion. Otherwise,
7840 leave *ICS unchanged and return NULL. */
7842 static conversion *
7843 maybe_handle_ref_bind (conversion **ics)
7845 if ((*ics)->kind == ck_ref_bind)
7847 conversion *old_ics = *ics;
7848 *ics = next_conversion (old_ics);
7849 (*ics)->user_conv_p = old_ics->user_conv_p;
7850 return old_ics;
7853 return NULL;
7856 /* Compare two implicit conversion sequences according to the rules set out in
7857 [over.ics.rank]. Return values:
7859 1: ics1 is better than ics2
7860 -1: ics2 is better than ics1
7861 0: ics1 and ics2 are indistinguishable */
7863 static int
7864 compare_ics (conversion *ics1, conversion *ics2)
7866 tree from_type1;
7867 tree from_type2;
7868 tree to_type1;
7869 tree to_type2;
7870 tree deref_from_type1 = NULL_TREE;
7871 tree deref_from_type2 = NULL_TREE;
7872 tree deref_to_type1 = NULL_TREE;
7873 tree deref_to_type2 = NULL_TREE;
7874 conversion_rank rank1, rank2;
7876 /* REF_BINDING is nonzero if the result of the conversion sequence
7877 is a reference type. In that case REF_CONV is the reference
7878 binding conversion. */
7879 conversion *ref_conv1;
7880 conversion *ref_conv2;
7882 /* Handle implicit object parameters. */
7883 maybe_handle_implicit_object (&ics1);
7884 maybe_handle_implicit_object (&ics2);
7886 /* Handle reference parameters. */
7887 ref_conv1 = maybe_handle_ref_bind (&ics1);
7888 ref_conv2 = maybe_handle_ref_bind (&ics2);
7890 /* List-initialization sequence L1 is a better conversion sequence than
7891 list-initialization sequence L2 if L1 converts to
7892 std::initializer_list<X> for some X and L2 does not. */
7893 if (ics1->kind == ck_list && ics2->kind != ck_list)
7894 return 1;
7895 if (ics2->kind == ck_list && ics1->kind != ck_list)
7896 return -1;
7898 /* [over.ics.rank]
7900 When comparing the basic forms of implicit conversion sequences (as
7901 defined in _over.best.ics_)
7903 --a standard conversion sequence (_over.ics.scs_) is a better
7904 conversion sequence than a user-defined conversion sequence
7905 or an ellipsis conversion sequence, and
7907 --a user-defined conversion sequence (_over.ics.user_) is a
7908 better conversion sequence than an ellipsis conversion sequence
7909 (_over.ics.ellipsis_). */
7910 rank1 = CONVERSION_RANK (ics1);
7911 rank2 = CONVERSION_RANK (ics2);
7913 if (rank1 > rank2)
7914 return -1;
7915 else if (rank1 < rank2)
7916 return 1;
7918 if (rank1 == cr_bad)
7920 /* Both ICS are bad. We try to make a decision based on what would
7921 have happened if they'd been good. This is not an extension,
7922 we'll still give an error when we build up the call; this just
7923 helps us give a more helpful error message. */
7924 rank1 = BAD_CONVERSION_RANK (ics1);
7925 rank2 = BAD_CONVERSION_RANK (ics2);
7927 if (rank1 > rank2)
7928 return -1;
7929 else if (rank1 < rank2)
7930 return 1;
7932 /* We couldn't make up our minds; try to figure it out below. */
7935 if (ics1->ellipsis_p)
7936 /* Both conversions are ellipsis conversions. */
7937 return 0;
7939 /* User-defined conversion sequence U1 is a better conversion sequence
7940 than another user-defined conversion sequence U2 if they contain the
7941 same user-defined conversion operator or constructor and if the sec-
7942 ond standard conversion sequence of U1 is better than the second
7943 standard conversion sequence of U2. */
7945 /* Handle list-conversion with the same code even though it isn't always
7946 ranked as a user-defined conversion and it doesn't have a second
7947 standard conversion sequence; it will still have the desired effect.
7948 Specifically, we need to do the reference binding comparison at the
7949 end of this function. */
7951 if (ics1->user_conv_p || ics1->kind == ck_list || ics1->kind == ck_aggr)
7953 conversion *t1;
7954 conversion *t2;
7956 for (t1 = ics1; t1->kind != ck_user; t1 = next_conversion (t1))
7957 if (t1->kind == ck_ambig || t1->kind == ck_aggr
7958 || t1->kind == ck_list)
7959 break;
7960 for (t2 = ics2; t2->kind != ck_user; t2 = next_conversion (t2))
7961 if (t2->kind == ck_ambig || t2->kind == ck_aggr
7962 || t2->kind == ck_list)
7963 break;
7965 if (t1->kind != t2->kind)
7966 return 0;
7967 else if (t1->kind == ck_user)
7969 if (t1->cand->fn != t2->cand->fn)
7970 return 0;
7972 else
7974 /* For ambiguous or aggregate conversions, use the target type as
7975 a proxy for the conversion function. */
7976 if (!same_type_ignoring_top_level_qualifiers_p (t1->type, t2->type))
7977 return 0;
7980 /* We can just fall through here, after setting up
7981 FROM_TYPE1 and FROM_TYPE2. */
7982 from_type1 = t1->type;
7983 from_type2 = t2->type;
7985 else
7987 conversion *t1;
7988 conversion *t2;
7990 /* We're dealing with two standard conversion sequences.
7992 [over.ics.rank]
7994 Standard conversion sequence S1 is a better conversion
7995 sequence than standard conversion sequence S2 if
7997 --S1 is a proper subsequence of S2 (comparing the conversion
7998 sequences in the canonical form defined by _over.ics.scs_,
7999 excluding any Lvalue Transformation; the identity
8000 conversion sequence is considered to be a subsequence of
8001 any non-identity conversion sequence */
8003 t1 = ics1;
8004 while (t1->kind != ck_identity)
8005 t1 = next_conversion (t1);
8006 from_type1 = t1->type;
8008 t2 = ics2;
8009 while (t2->kind != ck_identity)
8010 t2 = next_conversion (t2);
8011 from_type2 = t2->type;
8014 /* One sequence can only be a subsequence of the other if they start with
8015 the same type. They can start with different types when comparing the
8016 second standard conversion sequence in two user-defined conversion
8017 sequences. */
8018 if (same_type_p (from_type1, from_type2))
8020 if (is_subseq (ics1, ics2))
8021 return 1;
8022 if (is_subseq (ics2, ics1))
8023 return -1;
8026 /* [over.ics.rank]
8028 Or, if not that,
8030 --the rank of S1 is better than the rank of S2 (by the rules
8031 defined below):
8033 Standard conversion sequences are ordered by their ranks: an Exact
8034 Match is a better conversion than a Promotion, which is a better
8035 conversion than a Conversion.
8037 Two conversion sequences with the same rank are indistinguishable
8038 unless one of the following rules applies:
8040 --A conversion that does not a convert a pointer, pointer to member,
8041 or std::nullptr_t to bool is better than one that does.
8043 The ICS_STD_RANK automatically handles the pointer-to-bool rule,
8044 so that we do not have to check it explicitly. */
8045 if (ics1->rank < ics2->rank)
8046 return 1;
8047 else if (ics2->rank < ics1->rank)
8048 return -1;
8050 to_type1 = ics1->type;
8051 to_type2 = ics2->type;
8053 /* A conversion from scalar arithmetic type to complex is worse than a
8054 conversion between scalar arithmetic types. */
8055 if (same_type_p (from_type1, from_type2)
8056 && ARITHMETIC_TYPE_P (from_type1)
8057 && ARITHMETIC_TYPE_P (to_type1)
8058 && ARITHMETIC_TYPE_P (to_type2)
8059 && ((TREE_CODE (to_type1) == COMPLEX_TYPE)
8060 != (TREE_CODE (to_type2) == COMPLEX_TYPE)))
8062 if (TREE_CODE (to_type1) == COMPLEX_TYPE)
8063 return -1;
8064 else
8065 return 1;
8068 if (TYPE_PTR_P (from_type1)
8069 && TYPE_PTR_P (from_type2)
8070 && TYPE_PTR_P (to_type1)
8071 && TYPE_PTR_P (to_type2))
8073 deref_from_type1 = TREE_TYPE (from_type1);
8074 deref_from_type2 = TREE_TYPE (from_type2);
8075 deref_to_type1 = TREE_TYPE (to_type1);
8076 deref_to_type2 = TREE_TYPE (to_type2);
8078 /* The rules for pointers to members A::* are just like the rules
8079 for pointers A*, except opposite: if B is derived from A then
8080 A::* converts to B::*, not vice versa. For that reason, we
8081 switch the from_ and to_ variables here. */
8082 else if ((TYPE_PTRDATAMEM_P (from_type1) && TYPE_PTRDATAMEM_P (from_type2)
8083 && TYPE_PTRDATAMEM_P (to_type1) && TYPE_PTRDATAMEM_P (to_type2))
8084 || (TYPE_PTRMEMFUNC_P (from_type1)
8085 && TYPE_PTRMEMFUNC_P (from_type2)
8086 && TYPE_PTRMEMFUNC_P (to_type1)
8087 && TYPE_PTRMEMFUNC_P (to_type2)))
8089 deref_to_type1 = TYPE_PTRMEM_CLASS_TYPE (from_type1);
8090 deref_to_type2 = TYPE_PTRMEM_CLASS_TYPE (from_type2);
8091 deref_from_type1 = TYPE_PTRMEM_CLASS_TYPE (to_type1);
8092 deref_from_type2 = TYPE_PTRMEM_CLASS_TYPE (to_type2);
8095 if (deref_from_type1 != NULL_TREE
8096 && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_from_type1))
8097 && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_from_type2)))
8099 /* This was one of the pointer or pointer-like conversions.
8101 [over.ics.rank]
8103 --If class B is derived directly or indirectly from class A,
8104 conversion of B* to A* is better than conversion of B* to
8105 void*, and conversion of A* to void* is better than
8106 conversion of B* to void*. */
8107 if (TREE_CODE (deref_to_type1) == VOID_TYPE
8108 && TREE_CODE (deref_to_type2) == VOID_TYPE)
8110 if (is_properly_derived_from (deref_from_type1,
8111 deref_from_type2))
8112 return -1;
8113 else if (is_properly_derived_from (deref_from_type2,
8114 deref_from_type1))
8115 return 1;
8117 else if (TREE_CODE (deref_to_type1) == VOID_TYPE
8118 || TREE_CODE (deref_to_type2) == VOID_TYPE)
8120 if (same_type_p (deref_from_type1, deref_from_type2))
8122 if (TREE_CODE (deref_to_type2) == VOID_TYPE)
8124 if (is_properly_derived_from (deref_from_type1,
8125 deref_to_type1))
8126 return 1;
8128 /* We know that DEREF_TO_TYPE1 is `void' here. */
8129 else if (is_properly_derived_from (deref_from_type1,
8130 deref_to_type2))
8131 return -1;
8134 else if (RECORD_OR_UNION_CODE_P (TREE_CODE (deref_to_type1))
8135 && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_to_type2)))
8137 /* [over.ics.rank]
8139 --If class B is derived directly or indirectly from class A
8140 and class C is derived directly or indirectly from B,
8142 --conversion of C* to B* is better than conversion of C* to
8145 --conversion of B* to A* is better than conversion of C* to
8146 A* */
8147 if (same_type_p (deref_from_type1, deref_from_type2))
8149 if (is_properly_derived_from (deref_to_type1,
8150 deref_to_type2))
8151 return 1;
8152 else if (is_properly_derived_from (deref_to_type2,
8153 deref_to_type1))
8154 return -1;
8156 else if (same_type_p (deref_to_type1, deref_to_type2))
8158 if (is_properly_derived_from (deref_from_type2,
8159 deref_from_type1))
8160 return 1;
8161 else if (is_properly_derived_from (deref_from_type1,
8162 deref_from_type2))
8163 return -1;
8167 else if (CLASS_TYPE_P (non_reference (from_type1))
8168 && same_type_p (from_type1, from_type2))
8170 tree from = non_reference (from_type1);
8172 /* [over.ics.rank]
8174 --binding of an expression of type C to a reference of type
8175 B& is better than binding an expression of type C to a
8176 reference of type A&
8178 --conversion of C to B is better than conversion of C to A, */
8179 if (is_properly_derived_from (from, to_type1)
8180 && is_properly_derived_from (from, to_type2))
8182 if (is_properly_derived_from (to_type1, to_type2))
8183 return 1;
8184 else if (is_properly_derived_from (to_type2, to_type1))
8185 return -1;
8188 else if (CLASS_TYPE_P (non_reference (to_type1))
8189 && same_type_p (to_type1, to_type2))
8191 tree to = non_reference (to_type1);
8193 /* [over.ics.rank]
8195 --binding of an expression of type B to a reference of type
8196 A& is better than binding an expression of type C to a
8197 reference of type A&,
8199 --conversion of B to A is better than conversion of C to A */
8200 if (is_properly_derived_from (from_type1, to)
8201 && is_properly_derived_from (from_type2, to))
8203 if (is_properly_derived_from (from_type2, from_type1))
8204 return 1;
8205 else if (is_properly_derived_from (from_type1, from_type2))
8206 return -1;
8210 /* [over.ics.rank]
8212 --S1 and S2 differ only in their qualification conversion and yield
8213 similar types T1 and T2 (_conv.qual_), respectively, and the cv-
8214 qualification signature of type T1 is a proper subset of the cv-
8215 qualification signature of type T2 */
8216 if (ics1->kind == ck_qual
8217 && ics2->kind == ck_qual
8218 && same_type_p (from_type1, from_type2))
8220 int result = comp_cv_qual_signature (to_type1, to_type2);
8221 if (result != 0)
8222 return result;
8225 /* [over.ics.rank]
8227 --S1 and S2 are reference bindings (_dcl.init.ref_) and neither refers
8228 to an implicit object parameter, and either S1 binds an lvalue reference
8229 to an lvalue and S2 binds an rvalue reference or S1 binds an rvalue
8230 reference to an rvalue and S2 binds an lvalue reference
8231 (C++0x draft standard, 13.3.3.2)
8233 --S1 and S2 are reference bindings (_dcl.init.ref_), and the
8234 types to which the references refer are the same type except for
8235 top-level cv-qualifiers, and the type to which the reference
8236 initialized by S2 refers is more cv-qualified than the type to
8237 which the reference initialized by S1 refers.
8239 DR 1328 [over.match.best]: the context is an initialization by
8240 conversion function for direct reference binding (13.3.1.6) of a
8241 reference to function type, the return type of F1 is the same kind of
8242 reference (i.e. lvalue or rvalue) as the reference being initialized,
8243 and the return type of F2 is not. */
8245 if (ref_conv1 && ref_conv2)
8247 if (!ref_conv1->this_p && !ref_conv2->this_p
8248 && (ref_conv1->rvaluedness_matches_p
8249 != ref_conv2->rvaluedness_matches_p)
8250 && (same_type_p (ref_conv1->type, ref_conv2->type)
8251 || (TYPE_REF_IS_RVALUE (ref_conv1->type)
8252 != TYPE_REF_IS_RVALUE (ref_conv2->type))))
8254 return (ref_conv1->rvaluedness_matches_p
8255 - ref_conv2->rvaluedness_matches_p);
8258 if (same_type_ignoring_top_level_qualifiers_p (to_type1, to_type2))
8259 return comp_cv_qualification (TREE_TYPE (ref_conv2->type),
8260 TREE_TYPE (ref_conv1->type));
8263 /* Neither conversion sequence is better than the other. */
8264 return 0;
8267 /* The source type for this standard conversion sequence. */
8269 static tree
8270 source_type (conversion *t)
8272 for (;; t = next_conversion (t))
8274 if (t->kind == ck_user
8275 || t->kind == ck_ambig
8276 || t->kind == ck_identity)
8277 return t->type;
8279 gcc_unreachable ();
8282 /* Note a warning about preferring WINNER to LOSER. We do this by storing
8283 a pointer to LOSER and re-running joust to produce the warning if WINNER
8284 is actually used. */
8286 static void
8287 add_warning (struct z_candidate *winner, struct z_candidate *loser)
8289 candidate_warning *cw = (candidate_warning *)
8290 conversion_obstack_alloc (sizeof (candidate_warning));
8291 cw->loser = loser;
8292 cw->next = winner->warnings;
8293 winner->warnings = cw;
8296 /* Compare two candidates for overloading as described in
8297 [over.match.best]. Return values:
8299 1: cand1 is better than cand2
8300 -1: cand2 is better than cand1
8301 0: cand1 and cand2 are indistinguishable */
8303 static int
8304 joust (struct z_candidate *cand1, struct z_candidate *cand2, bool warn,
8305 tsubst_flags_t complain)
8307 int winner = 0;
8308 int off1 = 0, off2 = 0;
8309 size_t i;
8310 size_t len;
8312 /* Candidates that involve bad conversions are always worse than those
8313 that don't. */
8314 if (cand1->viable > cand2->viable)
8315 return 1;
8316 if (cand1->viable < cand2->viable)
8317 return -1;
8319 /* If we have two pseudo-candidates for conversions to the same type,
8320 or two candidates for the same function, arbitrarily pick one. */
8321 if (cand1->fn == cand2->fn
8322 && (IS_TYPE_OR_DECL_P (cand1->fn)))
8323 return 1;
8325 /* Prefer a non-deleted function over an implicitly deleted move
8326 constructor or assignment operator. This differs slightly from the
8327 wording for issue 1402 (which says the move op is ignored by overload
8328 resolution), but this way produces better error messages. */
8329 if (TREE_CODE (cand1->fn) == FUNCTION_DECL
8330 && TREE_CODE (cand2->fn) == FUNCTION_DECL
8331 && DECL_DELETED_FN (cand1->fn) != DECL_DELETED_FN (cand2->fn))
8333 if (DECL_DELETED_FN (cand1->fn) && DECL_DEFAULTED_FN (cand1->fn)
8334 && move_fn_p (cand1->fn))
8335 return -1;
8336 if (DECL_DELETED_FN (cand2->fn) && DECL_DEFAULTED_FN (cand2->fn)
8337 && move_fn_p (cand2->fn))
8338 return 1;
8341 /* a viable function F1
8342 is defined to be a better function than another viable function F2 if
8343 for all arguments i, ICSi(F1) is not a worse conversion sequence than
8344 ICSi(F2), and then */
8346 /* for some argument j, ICSj(F1) is a better conversion sequence than
8347 ICSj(F2) */
8349 /* For comparing static and non-static member functions, we ignore
8350 the implicit object parameter of the non-static function. The
8351 standard says to pretend that the static function has an object
8352 parm, but that won't work with operator overloading. */
8353 len = cand1->num_convs;
8354 if (len != cand2->num_convs)
8356 int static_1 = DECL_STATIC_FUNCTION_P (cand1->fn);
8357 int static_2 = DECL_STATIC_FUNCTION_P (cand2->fn);
8359 if (DECL_CONSTRUCTOR_P (cand1->fn)
8360 && is_list_ctor (cand1->fn) != is_list_ctor (cand2->fn))
8361 /* We're comparing a near-match list constructor and a near-match
8362 non-list constructor. Just treat them as unordered. */
8363 return 0;
8365 gcc_assert (static_1 != static_2);
8367 if (static_1)
8368 off2 = 1;
8369 else
8371 off1 = 1;
8372 --len;
8376 for (i = 0; i < len; ++i)
8378 conversion *t1 = cand1->convs[i + off1];
8379 conversion *t2 = cand2->convs[i + off2];
8380 int comp = compare_ics (t1, t2);
8382 if (comp != 0)
8384 if ((complain & tf_warning)
8385 && warn_sign_promo
8386 && (CONVERSION_RANK (t1) + CONVERSION_RANK (t2)
8387 == cr_std + cr_promotion)
8388 && t1->kind == ck_std
8389 && t2->kind == ck_std
8390 && TREE_CODE (t1->type) == INTEGER_TYPE
8391 && TREE_CODE (t2->type) == INTEGER_TYPE
8392 && (TYPE_PRECISION (t1->type)
8393 == TYPE_PRECISION (t2->type))
8394 && (TYPE_UNSIGNED (next_conversion (t1)->type)
8395 || (TREE_CODE (next_conversion (t1)->type)
8396 == ENUMERAL_TYPE)))
8398 tree type = next_conversion (t1)->type;
8399 tree type1, type2;
8400 struct z_candidate *w, *l;
8401 if (comp > 0)
8402 type1 = t1->type, type2 = t2->type,
8403 w = cand1, l = cand2;
8404 else
8405 type1 = t2->type, type2 = t1->type,
8406 w = cand2, l = cand1;
8408 if (warn)
8410 warning (OPT_Wsign_promo, "passing %qT chooses %qT over %qT",
8411 type, type1, type2);
8412 warning (OPT_Wsign_promo, " in call to %qD", w->fn);
8414 else
8415 add_warning (w, l);
8418 if (winner && comp != winner)
8420 winner = 0;
8421 goto tweak;
8423 winner = comp;
8427 /* warn about confusing overload resolution for user-defined conversions,
8428 either between a constructor and a conversion op, or between two
8429 conversion ops. */
8430 if ((complain & tf_warning)
8431 && winner && warn_conversion && cand1->second_conv
8432 && (!DECL_CONSTRUCTOR_P (cand1->fn) || !DECL_CONSTRUCTOR_P (cand2->fn))
8433 && winner != compare_ics (cand1->second_conv, cand2->second_conv))
8435 struct z_candidate *w, *l;
8436 bool give_warning = false;
8438 if (winner == 1)
8439 w = cand1, l = cand2;
8440 else
8441 w = cand2, l = cand1;
8443 /* We don't want to complain about `X::operator T1 ()'
8444 beating `X::operator T2 () const', when T2 is a no less
8445 cv-qualified version of T1. */
8446 if (DECL_CONTEXT (w->fn) == DECL_CONTEXT (l->fn)
8447 && !DECL_CONSTRUCTOR_P (w->fn) && !DECL_CONSTRUCTOR_P (l->fn))
8449 tree t = TREE_TYPE (TREE_TYPE (l->fn));
8450 tree f = TREE_TYPE (TREE_TYPE (w->fn));
8452 if (TREE_CODE (t) == TREE_CODE (f) && POINTER_TYPE_P (t))
8454 t = TREE_TYPE (t);
8455 f = TREE_TYPE (f);
8457 if (!comp_ptr_ttypes (t, f))
8458 give_warning = true;
8460 else
8461 give_warning = true;
8463 if (!give_warning)
8464 /*NOP*/;
8465 else if (warn)
8467 tree source = source_type (w->convs[0]);
8468 if (! DECL_CONSTRUCTOR_P (w->fn))
8469 source = TREE_TYPE (source);
8470 if (warning (OPT_Wconversion, "choosing %qD over %qD", w->fn, l->fn)
8471 && warning (OPT_Wconversion, " for conversion from %qT to %qT",
8472 source, w->second_conv->type))
8474 inform (input_location, " because conversion sequence for the argument is better");
8477 else
8478 add_warning (w, l);
8481 if (winner)
8482 return winner;
8484 /* DR 495 moved this tiebreaker above the template ones. */
8485 /* or, if not that,
8486 the context is an initialization by user-defined conversion (see
8487 _dcl.init_ and _over.match.user_) and the standard conversion
8488 sequence from the return type of F1 to the destination type (i.e.,
8489 the type of the entity being initialized) is a better conversion
8490 sequence than the standard conversion sequence from the return type
8491 of F2 to the destination type. */
8493 if (cand1->second_conv)
8495 winner = compare_ics (cand1->second_conv, cand2->second_conv);
8496 if (winner)
8497 return winner;
8500 /* or, if not that,
8501 F1 is a non-template function and F2 is a template function
8502 specialization. */
8504 if (!cand1->template_decl && cand2->template_decl)
8505 return 1;
8506 else if (cand1->template_decl && !cand2->template_decl)
8507 return -1;
8509 /* or, if not that,
8510 F1 and F2 are template functions and the function template for F1 is
8511 more specialized than the template for F2 according to the partial
8512 ordering rules. */
8514 if (cand1->template_decl && cand2->template_decl)
8516 winner = more_specialized_fn
8517 (TI_TEMPLATE (cand1->template_decl),
8518 TI_TEMPLATE (cand2->template_decl),
8519 /* [temp.func.order]: The presence of unused ellipsis and default
8520 arguments has no effect on the partial ordering of function
8521 templates. add_function_candidate() will not have
8522 counted the "this" argument for constructors. */
8523 cand1->num_convs + DECL_CONSTRUCTOR_P (cand1->fn));
8524 if (winner)
8525 return winner;
8528 /* Check whether we can discard a builtin candidate, either because we
8529 have two identical ones or matching builtin and non-builtin candidates.
8531 (Pedantically in the latter case the builtin which matched the user
8532 function should not be added to the overload set, but we spot it here.
8534 [over.match.oper]
8535 ... the builtin candidates include ...
8536 - do not have the same parameter type list as any non-template
8537 non-member candidate. */
8539 if (TREE_CODE (cand1->fn) == IDENTIFIER_NODE
8540 || TREE_CODE (cand2->fn) == IDENTIFIER_NODE)
8542 for (i = 0; i < len; ++i)
8543 if (!same_type_p (cand1->convs[i]->type,
8544 cand2->convs[i]->type))
8545 break;
8546 if (i == cand1->num_convs)
8548 if (cand1->fn == cand2->fn)
8549 /* Two built-in candidates; arbitrarily pick one. */
8550 return 1;
8551 else if (TREE_CODE (cand1->fn) == IDENTIFIER_NODE)
8552 /* cand1 is built-in; prefer cand2. */
8553 return -1;
8554 else
8555 /* cand2 is built-in; prefer cand1. */
8556 return 1;
8560 /* For candidates of a multi-versioned function, make the version with
8561 the highest priority win. This version will be checked for dispatching
8562 first. If this version can be inlined into the caller, the front-end
8563 will simply make a direct call to this function. */
8565 if (TREE_CODE (cand1->fn) == FUNCTION_DECL
8566 && DECL_FUNCTION_VERSIONED (cand1->fn)
8567 && TREE_CODE (cand2->fn) == FUNCTION_DECL
8568 && DECL_FUNCTION_VERSIONED (cand2->fn))
8570 tree f1 = TREE_TYPE (cand1->fn);
8571 tree f2 = TREE_TYPE (cand2->fn);
8572 tree p1 = TYPE_ARG_TYPES (f1);
8573 tree p2 = TYPE_ARG_TYPES (f2);
8575 /* Check if cand1->fn and cand2->fn are versions of the same function. It
8576 is possible that cand1->fn and cand2->fn are function versions but of
8577 different functions. Check types to see if they are versions of the same
8578 function. */
8579 if (compparms (p1, p2)
8580 && same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
8582 /* Always make the version with the higher priority, more
8583 specialized, win. */
8584 gcc_assert (targetm.compare_version_priority);
8585 if (targetm.compare_version_priority (cand1->fn, cand2->fn) >= 0)
8586 return 1;
8587 else
8588 return -1;
8592 /* If the two function declarations represent the same function (this can
8593 happen with declarations in multiple scopes and arg-dependent lookup),
8594 arbitrarily choose one. But first make sure the default args we're
8595 using match. */
8596 if (DECL_P (cand1->fn) && DECL_P (cand2->fn)
8597 && equal_functions (cand1->fn, cand2->fn))
8599 tree parms1 = TYPE_ARG_TYPES (TREE_TYPE (cand1->fn));
8600 tree parms2 = TYPE_ARG_TYPES (TREE_TYPE (cand2->fn));
8602 gcc_assert (!DECL_CONSTRUCTOR_P (cand1->fn));
8604 for (i = 0; i < len; ++i)
8606 /* Don't crash if the fn is variadic. */
8607 if (!parms1)
8608 break;
8609 parms1 = TREE_CHAIN (parms1);
8610 parms2 = TREE_CHAIN (parms2);
8613 if (off1)
8614 parms1 = TREE_CHAIN (parms1);
8615 else if (off2)
8616 parms2 = TREE_CHAIN (parms2);
8618 for (; parms1; ++i)
8620 if (!cp_tree_equal (TREE_PURPOSE (parms1),
8621 TREE_PURPOSE (parms2)))
8623 if (warn)
8625 if (complain & tf_error)
8627 permerror (input_location,
8628 "default argument mismatch in "
8629 "overload resolution");
8630 inform (input_location,
8631 " candidate 1: %q+#F", cand1->fn);
8632 inform (input_location,
8633 " candidate 2: %q+#F", cand2->fn);
8635 else
8636 return 0;
8638 else
8639 add_warning (cand1, cand2);
8640 break;
8642 parms1 = TREE_CHAIN (parms1);
8643 parms2 = TREE_CHAIN (parms2);
8646 return 1;
8649 tweak:
8651 /* Extension: If the worst conversion for one candidate is worse than the
8652 worst conversion for the other, take the first. */
8653 if (!pedantic && (complain & tf_warning_or_error))
8655 conversion_rank rank1 = cr_identity, rank2 = cr_identity;
8656 struct z_candidate *w = 0, *l = 0;
8658 for (i = 0; i < len; ++i)
8660 if (CONVERSION_RANK (cand1->convs[i+off1]) > rank1)
8661 rank1 = CONVERSION_RANK (cand1->convs[i+off1]);
8662 if (CONVERSION_RANK (cand2->convs[i + off2]) > rank2)
8663 rank2 = CONVERSION_RANK (cand2->convs[i + off2]);
8665 if (rank1 < rank2)
8666 winner = 1, w = cand1, l = cand2;
8667 if (rank1 > rank2)
8668 winner = -1, w = cand2, l = cand1;
8669 if (winner)
8671 /* Don't choose a deleted function over ambiguity. */
8672 if (DECL_P (w->fn) && DECL_DELETED_FN (w->fn))
8673 return 0;
8674 if (warn)
8676 pedwarn (input_location, 0,
8677 "ISO C++ says that these are ambiguous, even "
8678 "though the worst conversion for the first is better than "
8679 "the worst conversion for the second:");
8680 print_z_candidate (input_location, _("candidate 1:"), w);
8681 print_z_candidate (input_location, _("candidate 2:"), l);
8683 else
8684 add_warning (w, l);
8685 return winner;
8689 gcc_assert (!winner);
8690 return 0;
8693 /* Given a list of candidates for overloading, find the best one, if any.
8694 This algorithm has a worst case of O(2n) (winner is last), and a best
8695 case of O(n/2) (totally ambiguous); much better than a sorting
8696 algorithm. */
8698 static struct z_candidate *
8699 tourney (struct z_candidate *candidates, tsubst_flags_t complain)
8701 struct z_candidate *champ = candidates, *challenger;
8702 int fate;
8703 int champ_compared_to_predecessor = 0;
8705 /* Walk through the list once, comparing each current champ to the next
8706 candidate, knocking out a candidate or two with each comparison. */
8708 for (challenger = champ->next; challenger; )
8710 fate = joust (champ, challenger, 0, complain);
8711 if (fate == 1)
8712 challenger = challenger->next;
8713 else
8715 if (fate == 0)
8717 champ = challenger->next;
8718 if (champ == 0)
8719 return NULL;
8720 champ_compared_to_predecessor = 0;
8722 else
8724 champ = challenger;
8725 champ_compared_to_predecessor = 1;
8728 challenger = champ->next;
8732 /* Make sure the champ is better than all the candidates it hasn't yet
8733 been compared to. */
8735 for (challenger = candidates;
8736 challenger != champ
8737 && !(champ_compared_to_predecessor && challenger->next == champ);
8738 challenger = challenger->next)
8740 fate = joust (champ, challenger, 0, complain);
8741 if (fate != 1)
8742 return NULL;
8745 return champ;
8748 /* Returns nonzero if things of type FROM can be converted to TO. */
8750 bool
8751 can_convert (tree to, tree from, tsubst_flags_t complain)
8753 return can_convert_arg (to, from, NULL_TREE, LOOKUP_IMPLICIT, complain);
8756 /* Returns nonzero if ARG (of type FROM) can be converted to TO. */
8758 bool
8759 can_convert_arg (tree to, tree from, tree arg, int flags,
8760 tsubst_flags_t complain)
8762 conversion *t;
8763 void *p;
8764 bool ok_p;
8766 /* Get the high-water mark for the CONVERSION_OBSTACK. */
8767 p = conversion_obstack_alloc (0);
8769 t = implicit_conversion (to, from, arg, /*c_cast_p=*/false,
8770 flags, complain);
8771 ok_p = (t && !t->bad_p);
8773 /* Free all the conversions we allocated. */
8774 obstack_free (&conversion_obstack, p);
8776 return ok_p;
8779 /* Like can_convert_arg, but allows dubious conversions as well. */
8781 bool
8782 can_convert_arg_bad (tree to, tree from, tree arg, int flags,
8783 tsubst_flags_t complain)
8785 conversion *t;
8786 void *p;
8788 /* Get the high-water mark for the CONVERSION_OBSTACK. */
8789 p = conversion_obstack_alloc (0);
8790 /* Try to perform the conversion. */
8791 t = implicit_conversion (to, from, arg, /*c_cast_p=*/false,
8792 flags, complain);
8793 /* Free all the conversions we allocated. */
8794 obstack_free (&conversion_obstack, p);
8796 return t != NULL;
8799 /* Convert EXPR to TYPE. Return the converted expression.
8801 Note that we allow bad conversions here because by the time we get to
8802 this point we are committed to doing the conversion. If we end up
8803 doing a bad conversion, convert_like will complain. */
8805 tree
8806 perform_implicit_conversion_flags (tree type, tree expr,
8807 tsubst_flags_t complain, int flags)
8809 conversion *conv;
8810 void *p;
8811 location_t loc = EXPR_LOC_OR_HERE (expr);
8813 if (error_operand_p (expr))
8814 return error_mark_node;
8816 /* Get the high-water mark for the CONVERSION_OBSTACK. */
8817 p = conversion_obstack_alloc (0);
8819 conv = implicit_conversion (type, TREE_TYPE (expr), expr,
8820 /*c_cast_p=*/false,
8821 flags, complain);
8823 if (!conv)
8825 if (complain & tf_error)
8827 /* If expr has unknown type, then it is an overloaded function.
8828 Call instantiate_type to get good error messages. */
8829 if (TREE_TYPE (expr) == unknown_type_node)
8830 instantiate_type (type, expr, complain);
8831 else if (invalid_nonstatic_memfn_p (expr, complain))
8832 /* We gave an error. */;
8833 else
8834 error_at (loc, "could not convert %qE from %qT to %qT", expr,
8835 TREE_TYPE (expr), type);
8837 expr = error_mark_node;
8839 else if (processing_template_decl && conv->kind != ck_identity)
8841 /* In a template, we are only concerned about determining the
8842 type of non-dependent expressions, so we do not have to
8843 perform the actual conversion. But for initializers, we
8844 need to be able to perform it at instantiation
8845 (or fold_non_dependent_expr) time. */
8846 expr = build1 (IMPLICIT_CONV_EXPR, type, expr);
8847 if (!(flags & LOOKUP_ONLYCONVERTING))
8848 IMPLICIT_CONV_EXPR_DIRECT_INIT (expr) = true;
8850 else
8851 expr = convert_like (conv, expr, complain);
8853 /* Free all the conversions we allocated. */
8854 obstack_free (&conversion_obstack, p);
8856 return expr;
8859 tree
8860 perform_implicit_conversion (tree type, tree expr, tsubst_flags_t complain)
8862 return perform_implicit_conversion_flags (type, expr, complain,
8863 LOOKUP_IMPLICIT);
8866 /* Convert EXPR to TYPE (as a direct-initialization) if that is
8867 permitted. If the conversion is valid, the converted expression is
8868 returned. Otherwise, NULL_TREE is returned, except in the case
8869 that TYPE is a class type; in that case, an error is issued. If
8870 C_CAST_P is true, then this direct-initialization is taking
8871 place as part of a static_cast being attempted as part of a C-style
8872 cast. */
8874 tree
8875 perform_direct_initialization_if_possible (tree type,
8876 tree expr,
8877 bool c_cast_p,
8878 tsubst_flags_t complain)
8880 conversion *conv;
8881 void *p;
8883 if (type == error_mark_node || error_operand_p (expr))
8884 return error_mark_node;
8885 /* [dcl.init]
8887 If the destination type is a (possibly cv-qualified) class type:
8889 -- If the initialization is direct-initialization ...,
8890 constructors are considered. ... If no constructor applies, or
8891 the overload resolution is ambiguous, the initialization is
8892 ill-formed. */
8893 if (CLASS_TYPE_P (type))
8895 vec<tree, va_gc> *args = make_tree_vector_single (expr);
8896 expr = build_special_member_call (NULL_TREE, complete_ctor_identifier,
8897 &args, type, LOOKUP_NORMAL, complain);
8898 release_tree_vector (args);
8899 return build_cplus_new (type, expr, complain);
8902 /* Get the high-water mark for the CONVERSION_OBSTACK. */
8903 p = conversion_obstack_alloc (0);
8905 conv = implicit_conversion (type, TREE_TYPE (expr), expr,
8906 c_cast_p,
8907 LOOKUP_NORMAL, complain);
8908 if (!conv || conv->bad_p)
8909 expr = NULL_TREE;
8910 else
8911 expr = convert_like_real (conv, expr, NULL_TREE, 0, 0,
8912 /*issue_conversion_warnings=*/false,
8913 c_cast_p,
8914 complain);
8916 /* Free all the conversions we allocated. */
8917 obstack_free (&conversion_obstack, p);
8919 return expr;
8922 /* When initializing a reference that lasts longer than a full-expression,
8923 this special rule applies:
8925 [class.temporary]
8927 The temporary to which the reference is bound or the temporary
8928 that is the complete object to which the reference is bound
8929 persists for the lifetime of the reference.
8931 The temporaries created during the evaluation of the expression
8932 initializing the reference, except the temporary to which the
8933 reference is bound, are destroyed at the end of the
8934 full-expression in which they are created.
8936 In that case, we store the converted expression into a new
8937 VAR_DECL in a new scope.
8939 However, we want to be careful not to create temporaries when
8940 they are not required. For example, given:
8942 struct B {};
8943 struct D : public B {};
8944 D f();
8945 const B& b = f();
8947 there is no need to copy the return value from "f"; we can just
8948 extend its lifetime. Similarly, given:
8950 struct S {};
8951 struct T { operator S(); };
8952 T t;
8953 const S& s = t;
8955 we can extend the lifetime of the return value of the conversion
8956 operator.
8958 The next several functions are involved in this lifetime extension. */
8960 /* DECL is a VAR_DECL or FIELD_DECL whose type is a REFERENCE_TYPE. The
8961 reference is being bound to a temporary. Create and return a new
8962 VAR_DECL with the indicated TYPE; this variable will store the value to
8963 which the reference is bound. */
8965 tree
8966 make_temporary_var_for_ref_to_temp (tree decl, tree type)
8968 tree var;
8970 /* Create the variable. */
8971 var = create_temporary_var (type);
8973 /* Register the variable. */
8974 if (TREE_CODE (decl) == VAR_DECL
8975 && (TREE_STATIC (decl) || DECL_THREAD_LOCAL_P (decl)))
8977 /* Namespace-scope or local static; give it a mangled name. */
8978 /* FIXME share comdat with decl? */
8979 tree name;
8981 TREE_STATIC (var) = TREE_STATIC (decl);
8982 DECL_TLS_MODEL (var) = DECL_TLS_MODEL (decl);
8983 name = mangle_ref_init_variable (decl);
8984 DECL_NAME (var) = name;
8985 SET_DECL_ASSEMBLER_NAME (var, name);
8986 var = pushdecl_top_level (var);
8988 else
8989 /* Create a new cleanup level if necessary. */
8990 maybe_push_cleanup_level (type);
8992 return var;
8995 /* EXPR is the initializer for a variable DECL of reference or
8996 std::initializer_list type. Create, push and return a new VAR_DECL
8997 for the initializer so that it will live as long as DECL. Any
8998 cleanup for the new variable is returned through CLEANUP, and the
8999 code to initialize the new variable is returned through INITP. */
9001 static tree
9002 set_up_extended_ref_temp (tree decl, tree expr, vec<tree, va_gc> **cleanups,
9003 tree *initp)
9005 tree init;
9006 tree type;
9007 tree var;
9009 /* Create the temporary variable. */
9010 type = TREE_TYPE (expr);
9011 var = make_temporary_var_for_ref_to_temp (decl, type);
9012 layout_decl (var, 0);
9013 /* If the rvalue is the result of a function call it will be
9014 a TARGET_EXPR. If it is some other construct (such as a
9015 member access expression where the underlying object is
9016 itself the result of a function call), turn it into a
9017 TARGET_EXPR here. It is important that EXPR be a
9018 TARGET_EXPR below since otherwise the INIT_EXPR will
9019 attempt to make a bitwise copy of EXPR to initialize
9020 VAR. */
9021 if (TREE_CODE (expr) != TARGET_EXPR)
9022 expr = get_target_expr (expr);
9024 if (TREE_CODE (decl) == FIELD_DECL
9025 && extra_warnings && !TREE_NO_WARNING (decl))
9027 warning (OPT_Wextra, "a temporary bound to %qD only persists "
9028 "until the constructor exits", decl);
9029 TREE_NO_WARNING (decl) = true;
9032 /* Recursively extend temps in this initializer. */
9033 TARGET_EXPR_INITIAL (expr)
9034 = extend_ref_init_temps (decl, TARGET_EXPR_INITIAL (expr), cleanups);
9036 /* Any reference temp has a non-trivial initializer. */
9037 DECL_NONTRIVIALLY_INITIALIZED_P (var) = true;
9039 /* If the initializer is constant, put it in DECL_INITIAL so we get
9040 static initialization and use in constant expressions. */
9041 init = maybe_constant_init (expr);
9042 if (TREE_CONSTANT (init))
9044 if (literal_type_p (type) && CP_TYPE_CONST_NON_VOLATILE_P (type))
9046 /* 5.19 says that a constant expression can include an
9047 lvalue-rvalue conversion applied to "a glvalue of literal type
9048 that refers to a non-volatile temporary object initialized
9049 with a constant expression". Rather than try to communicate
9050 that this VAR_DECL is a temporary, just mark it constexpr.
9052 Currently this is only useful for initializer_list temporaries,
9053 since reference vars can't appear in constant expressions. */
9054 DECL_DECLARED_CONSTEXPR_P (var) = true;
9055 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (var) = true;
9056 TREE_CONSTANT (var) = true;
9058 DECL_INITIAL (var) = init;
9059 init = NULL_TREE;
9061 else
9062 /* Create the INIT_EXPR that will initialize the temporary
9063 variable. */
9064 init = build2 (INIT_EXPR, type, var, expr);
9065 if (at_function_scope_p ())
9067 add_decl_expr (var);
9069 if (TREE_STATIC (var))
9070 init = add_stmt_to_compound (init, register_dtor_fn (var));
9071 else
9073 tree cleanup = cxx_maybe_build_cleanup (var, tf_warning_or_error);
9074 if (cleanup)
9075 vec_safe_push (*cleanups, cleanup);
9078 /* We must be careful to destroy the temporary only
9079 after its initialization has taken place. If the
9080 initialization throws an exception, then the
9081 destructor should not be run. We cannot simply
9082 transform INIT into something like:
9084 (INIT, ({ CLEANUP_STMT; }))
9086 because emit_local_var always treats the
9087 initializer as a full-expression. Thus, the
9088 destructor would run too early; it would run at the
9089 end of initializing the reference variable, rather
9090 than at the end of the block enclosing the
9091 reference variable.
9093 The solution is to pass back a cleanup expression
9094 which the caller is responsible for attaching to
9095 the statement tree. */
9097 else
9099 rest_of_decl_compilation (var, /*toplev=*/1, at_eof);
9100 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
9102 if (DECL_THREAD_LOCAL_P (var))
9103 tls_aggregates = tree_cons (NULL_TREE, var,
9104 tls_aggregates);
9105 else
9106 static_aggregates = tree_cons (NULL_TREE, var,
9107 static_aggregates);
9111 *initp = init;
9112 return var;
9115 /* Convert EXPR to the indicated reference TYPE, in a way suitable for
9116 initializing a variable of that TYPE. */
9118 tree
9119 initialize_reference (tree type, tree expr,
9120 int flags, tsubst_flags_t complain)
9122 conversion *conv;
9123 void *p;
9124 location_t loc = EXPR_LOC_OR_HERE (expr);
9126 if (type == error_mark_node || error_operand_p (expr))
9127 return error_mark_node;
9129 /* Get the high-water mark for the CONVERSION_OBSTACK. */
9130 p = conversion_obstack_alloc (0);
9132 conv = reference_binding (type, TREE_TYPE (expr), expr, /*c_cast_p=*/false,
9133 flags, complain);
9134 if (!conv || conv->bad_p)
9136 if (complain & tf_error)
9138 if (conv)
9139 convert_like (conv, expr, complain);
9140 else if (!CP_TYPE_CONST_P (TREE_TYPE (type))
9141 && !TYPE_REF_IS_RVALUE (type)
9142 && !real_lvalue_p (expr))
9143 error_at (loc, "invalid initialization of non-const reference of "
9144 "type %qT from an rvalue of type %qT",
9145 type, TREE_TYPE (expr));
9146 else
9147 error_at (loc, "invalid initialization of reference of type "
9148 "%qT from expression of type %qT", type,
9149 TREE_TYPE (expr));
9151 return error_mark_node;
9154 gcc_assert (conv->kind == ck_ref_bind);
9156 /* Perform the conversion. */
9157 expr = convert_like (conv, expr, complain);
9159 /* Free all the conversions we allocated. */
9160 obstack_free (&conversion_obstack, p);
9162 return expr;
9165 /* Subroutine of extend_ref_init_temps. Possibly extend one initializer,
9166 which is bound either to a reference or a std::initializer_list. */
9168 static tree
9169 extend_ref_init_temps_1 (tree decl, tree init, vec<tree, va_gc> **cleanups)
9171 tree sub = init;
9172 tree *p;
9173 STRIP_NOPS (sub);
9174 if (TREE_CODE (sub) == COMPOUND_EXPR)
9176 TREE_OPERAND (sub, 1)
9177 = extend_ref_init_temps_1 (decl, TREE_OPERAND (sub, 1), cleanups);
9178 return init;
9180 if (TREE_CODE (sub) != ADDR_EXPR)
9181 return init;
9182 /* Deal with binding to a subobject. */
9183 for (p = &TREE_OPERAND (sub, 0); TREE_CODE (*p) == COMPONENT_REF; )
9184 p = &TREE_OPERAND (*p, 0);
9185 if (TREE_CODE (*p) == TARGET_EXPR)
9187 tree subinit = NULL_TREE;
9188 *p = set_up_extended_ref_temp (decl, *p, cleanups, &subinit);
9189 if (subinit)
9190 init = build2 (COMPOUND_EXPR, TREE_TYPE (init), subinit, init);
9191 recompute_tree_invariant_for_addr_expr (sub);
9193 return init;
9196 /* INIT is part of the initializer for DECL. If there are any
9197 reference or initializer lists being initialized, extend their
9198 lifetime to match that of DECL. */
9200 tree
9201 extend_ref_init_temps (tree decl, tree init, vec<tree, va_gc> **cleanups)
9203 tree type = TREE_TYPE (init);
9204 if (processing_template_decl)
9205 return init;
9206 if (TREE_CODE (type) == REFERENCE_TYPE)
9207 init = extend_ref_init_temps_1 (decl, init, cleanups);
9208 else if (is_std_init_list (type))
9210 /* The temporary array underlying a std::initializer_list
9211 is handled like a reference temporary. */
9212 tree ctor = init;
9213 if (TREE_CODE (ctor) == TARGET_EXPR)
9214 ctor = TARGET_EXPR_INITIAL (ctor);
9215 if (TREE_CODE (ctor) == CONSTRUCTOR)
9217 tree array = CONSTRUCTOR_ELT (ctor, 0)->value;
9218 array = extend_ref_init_temps_1 (decl, array, cleanups);
9219 CONSTRUCTOR_ELT (ctor, 0)->value = array;
9222 else if (TREE_CODE (init) == CONSTRUCTOR)
9224 unsigned i;
9225 constructor_elt *p;
9226 vec<constructor_elt, va_gc> *elts = CONSTRUCTOR_ELTS (init);
9227 FOR_EACH_VEC_SAFE_ELT (elts, i, p)
9228 p->value = extend_ref_init_temps (decl, p->value, cleanups);
9231 return init;
9234 /* Returns true iff TYPE is some variant of std::initializer_list. */
9236 bool
9237 is_std_init_list (tree type)
9239 /* Look through typedefs. */
9240 if (!TYPE_P (type))
9241 return false;
9242 type = TYPE_MAIN_VARIANT (type);
9243 return (CLASS_TYPE_P (type)
9244 && CP_TYPE_CONTEXT (type) == std_node
9245 && strcmp (TYPE_NAME_STRING (type), "initializer_list") == 0);
9248 /* Returns true iff DECL is a list constructor: i.e. a constructor which
9249 will accept an argument list of a single std::initializer_list<T>. */
9251 bool
9252 is_list_ctor (tree decl)
9254 tree args = FUNCTION_FIRST_USER_PARMTYPE (decl);
9255 tree arg;
9257 if (!args || args == void_list_node)
9258 return false;
9260 arg = non_reference (TREE_VALUE (args));
9261 if (!is_std_init_list (arg))
9262 return false;
9264 args = TREE_CHAIN (args);
9266 if (args && args != void_list_node && !TREE_PURPOSE (args))
9267 /* There are more non-defaulted parms. */
9268 return false;
9270 return true;
9273 #include "gt-cp-call.h"