* config/avr/avr.md: Fix indentations of insn C snippets.
[official-gcc.git] / gcc / cp / call.c
blobd0492d8deef007a37c013155175c0adbcd65331e
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"
44 /* The various kinds of conversion. */
46 typedef enum conversion_kind {
47 ck_identity,
48 ck_lvalue,
49 ck_qual,
50 ck_std,
51 ck_ptr,
52 ck_pmem,
53 ck_base,
54 ck_ref_bind,
55 ck_user,
56 ck_ambig,
57 ck_list,
58 ck_aggr,
59 ck_rvalue
60 } conversion_kind;
62 /* The rank of the conversion. Order of the enumerals matters; better
63 conversions should come earlier in the list. */
65 typedef enum conversion_rank {
66 cr_identity,
67 cr_exact,
68 cr_promotion,
69 cr_std,
70 cr_pbool,
71 cr_user,
72 cr_ellipsis,
73 cr_bad
74 } conversion_rank;
76 /* An implicit conversion sequence, in the sense of [over.best.ics].
77 The first conversion to be performed is at the end of the chain.
78 That conversion is always a cr_identity conversion. */
80 typedef struct conversion conversion;
81 struct conversion {
82 /* The kind of conversion represented by this step. */
83 conversion_kind kind;
84 /* The rank of this conversion. */
85 conversion_rank rank;
86 BOOL_BITFIELD user_conv_p : 1;
87 BOOL_BITFIELD ellipsis_p : 1;
88 BOOL_BITFIELD this_p : 1;
89 /* True if this conversion would be permitted with a bending of
90 language standards, e.g. disregarding pointer qualifiers or
91 converting integers to pointers. */
92 BOOL_BITFIELD bad_p : 1;
93 /* If KIND is ck_ref_bind ck_base_conv, true to indicate that a
94 temporary should be created to hold the result of the
95 conversion. */
96 BOOL_BITFIELD need_temporary_p : 1;
97 /* If KIND is ck_ptr or ck_pmem, true to indicate that a conversion
98 from a pointer-to-derived to pointer-to-base is being performed. */
99 BOOL_BITFIELD base_p : 1;
100 /* If KIND is ck_ref_bind, true when either an lvalue reference is
101 being bound to an lvalue expression or an rvalue reference is
102 being bound to an rvalue expression. If KIND is ck_rvalue,
103 true when we should treat an lvalue as an rvalue (12.8p33). If
104 KIND is ck_base, always false. */
105 BOOL_BITFIELD rvaluedness_matches_p: 1;
106 BOOL_BITFIELD check_narrowing: 1;
107 /* The type of the expression resulting from the conversion. */
108 tree type;
109 union {
110 /* The next conversion in the chain. Since the conversions are
111 arranged from outermost to innermost, the NEXT conversion will
112 actually be performed before this conversion. This variant is
113 used only when KIND is neither ck_identity, ck_ambig nor
114 ck_list. Please use the next_conversion function instead
115 of using this field directly. */
116 conversion *next;
117 /* The expression at the beginning of the conversion chain. This
118 variant is used only if KIND is ck_identity or ck_ambig. */
119 tree expr;
120 /* The array of conversions for an initializer_list, so this
121 variant is used only when KIN D is ck_list. */
122 conversion **list;
123 } u;
124 /* The function candidate corresponding to this conversion
125 sequence. This field is only used if KIND is ck_user. */
126 struct z_candidate *cand;
129 #define CONVERSION_RANK(NODE) \
130 ((NODE)->bad_p ? cr_bad \
131 : (NODE)->ellipsis_p ? cr_ellipsis \
132 : (NODE)->user_conv_p ? cr_user \
133 : (NODE)->rank)
135 #define BAD_CONVERSION_RANK(NODE) \
136 ((NODE)->ellipsis_p ? cr_ellipsis \
137 : (NODE)->user_conv_p ? cr_user \
138 : (NODE)->rank)
140 static struct obstack conversion_obstack;
141 static bool conversion_obstack_initialized;
142 struct rejection_reason;
144 static struct z_candidate * tourney (struct z_candidate *, tsubst_flags_t);
145 static int equal_functions (tree, tree);
146 static int joust (struct z_candidate *, struct z_candidate *, bool,
147 tsubst_flags_t);
148 static int compare_ics (conversion *, conversion *);
149 static tree build_over_call (struct z_candidate *, int, tsubst_flags_t);
150 static tree build_java_interface_fn_ref (tree, tree);
151 #define convert_like(CONV, EXPR, COMPLAIN) \
152 convert_like_real ((CONV), (EXPR), NULL_TREE, 0, 0, \
153 /*issue_conversion_warnings=*/true, \
154 /*c_cast_p=*/false, (COMPLAIN))
155 #define convert_like_with_context(CONV, EXPR, FN, ARGNO, COMPLAIN ) \
156 convert_like_real ((CONV), (EXPR), (FN), (ARGNO), 0, \
157 /*issue_conversion_warnings=*/true, \
158 /*c_cast_p=*/false, (COMPLAIN))
159 static tree convert_like_real (conversion *, tree, tree, int, int, bool,
160 bool, tsubst_flags_t);
161 static void op_error (location_t, enum tree_code, enum tree_code, tree,
162 tree, tree, bool);
163 static struct z_candidate *build_user_type_conversion_1 (tree, tree, int,
164 tsubst_flags_t);
165 static void print_z_candidate (location_t, const char *, struct z_candidate *);
166 static void print_z_candidates (location_t, struct z_candidate *);
167 static tree build_this (tree);
168 static struct z_candidate *splice_viable (struct z_candidate *, bool, bool *);
169 static bool any_strictly_viable (struct z_candidate *);
170 static struct z_candidate *add_template_candidate
171 (struct z_candidate **, tree, tree, tree, tree, const VEC(tree,gc) *,
172 tree, tree, tree, int, unification_kind_t, tsubst_flags_t);
173 static struct z_candidate *add_template_candidate_real
174 (struct z_candidate **, tree, tree, tree, tree, const VEC(tree,gc) *,
175 tree, tree, tree, int, tree, unification_kind_t, tsubst_flags_t);
176 static struct z_candidate *add_template_conv_candidate
177 (struct z_candidate **, tree, tree, tree, const VEC(tree,gc) *, tree,
178 tree, tree, tsubst_flags_t);
179 static void add_builtin_candidates
180 (struct z_candidate **, enum tree_code, enum tree_code,
181 tree, tree *, int, tsubst_flags_t);
182 static void add_builtin_candidate
183 (struct z_candidate **, enum tree_code, enum tree_code,
184 tree, tree, tree, tree *, tree *, int, tsubst_flags_t);
185 static bool is_complete (tree);
186 static void build_builtin_candidate
187 (struct z_candidate **, tree, tree, tree, tree *, tree *,
188 int, tsubst_flags_t);
189 static struct z_candidate *add_conv_candidate
190 (struct z_candidate **, tree, tree, tree, const VEC(tree,gc) *, tree,
191 tree, tsubst_flags_t);
192 static struct z_candidate *add_function_candidate
193 (struct z_candidate **, tree, tree, tree, const VEC(tree,gc) *, tree,
194 tree, int, tsubst_flags_t);
195 static conversion *implicit_conversion (tree, tree, tree, bool, int,
196 tsubst_flags_t);
197 static conversion *standard_conversion (tree, tree, tree, bool, int);
198 static conversion *reference_binding (tree, tree, tree, bool, int,
199 tsubst_flags_t);
200 static conversion *build_conv (conversion_kind, tree, conversion *);
201 static conversion *build_list_conv (tree, tree, int, tsubst_flags_t);
202 static conversion *next_conversion (conversion *);
203 static bool is_subseq (conversion *, conversion *);
204 static conversion *maybe_handle_ref_bind (conversion **);
205 static void maybe_handle_implicit_object (conversion **);
206 static struct z_candidate *add_candidate
207 (struct z_candidate **, tree, tree, const VEC(tree,gc) *, size_t,
208 conversion **, tree, tree, int, struct rejection_reason *);
209 static tree source_type (conversion *);
210 static void add_warning (struct z_candidate *, struct z_candidate *);
211 static bool reference_compatible_p (tree, tree);
212 static conversion *direct_reference_binding (tree, conversion *);
213 static bool promoted_arithmetic_type_p (tree);
214 static conversion *conditional_conversion (tree, tree, tsubst_flags_t);
215 static char *name_as_c_string (tree, tree, bool *);
216 static tree prep_operand (tree);
217 static void add_candidates (tree, tree, const VEC(tree,gc) *, tree, tree, bool,
218 tree, tree, int, struct z_candidate **,
219 tsubst_flags_t);
220 static conversion *merge_conversion_sequences (conversion *, conversion *);
221 static bool magic_varargs_p (tree);
222 static tree build_temp (tree, tree, int, diagnostic_t *, tsubst_flags_t);
224 /* Returns nonzero iff the destructor name specified in NAME matches BASETYPE.
225 NAME can take many forms... */
227 bool
228 check_dtor_name (tree basetype, tree name)
230 /* Just accept something we've already complained about. */
231 if (name == error_mark_node)
232 return true;
234 if (TREE_CODE (name) == TYPE_DECL)
235 name = TREE_TYPE (name);
236 else if (TYPE_P (name))
237 /* OK */;
238 else if (TREE_CODE (name) == IDENTIFIER_NODE)
240 if ((MAYBE_CLASS_TYPE_P (basetype)
241 && name == constructor_name (basetype))
242 || (TREE_CODE (basetype) == ENUMERAL_TYPE
243 && name == TYPE_IDENTIFIER (basetype)))
244 return true;
245 else
246 name = get_type_value (name);
248 else
250 /* In the case of:
252 template <class T> struct S { ~S(); };
253 int i;
254 i.~S();
256 NAME will be a class template. */
257 gcc_assert (DECL_CLASS_TEMPLATE_P (name));
258 return false;
261 if (!name || name == error_mark_node)
262 return false;
263 return same_type_p (TYPE_MAIN_VARIANT (basetype), TYPE_MAIN_VARIANT (name));
266 /* We want the address of a function or method. We avoid creating a
267 pointer-to-member function. */
269 tree
270 build_addr_func (tree function, tsubst_flags_t complain)
272 tree type = TREE_TYPE (function);
274 /* We have to do these by hand to avoid real pointer to member
275 functions. */
276 if (TREE_CODE (type) == METHOD_TYPE)
278 if (TREE_CODE (function) == OFFSET_REF)
280 tree object = build_address (TREE_OPERAND (function, 0));
281 return get_member_function_from_ptrfunc (&object,
282 TREE_OPERAND (function, 1),
283 complain);
285 function = build_address (function);
287 else
288 function = decay_conversion (function, complain);
290 return function;
293 /* Build a CALL_EXPR, we can handle FUNCTION_TYPEs, METHOD_TYPEs, or
294 POINTER_TYPE to those. Note, pointer to member function types
295 (TYPE_PTRMEMFUNC_P) must be handled by our callers. There are
296 two variants. build_call_a is the primitive taking an array of
297 arguments, while build_call_n is a wrapper that handles varargs. */
299 tree
300 build_call_n (tree function, int n, ...)
302 if (n == 0)
303 return build_call_a (function, 0, NULL);
304 else
306 tree *argarray = XALLOCAVEC (tree, n);
307 va_list ap;
308 int i;
310 va_start (ap, n);
311 for (i = 0; i < n; i++)
312 argarray[i] = va_arg (ap, tree);
313 va_end (ap);
314 return build_call_a (function, n, argarray);
318 /* Update various flags in cfun and the call itself based on what is being
319 called. Split out of build_call_a so that bot_manip can use it too. */
321 void
322 set_flags_from_callee (tree call)
324 int nothrow;
325 tree decl = get_callee_fndecl (call);
327 /* We check both the decl and the type; a function may be known not to
328 throw without being declared throw(). */
329 nothrow = ((decl && TREE_NOTHROW (decl))
330 || TYPE_NOTHROW_P (TREE_TYPE (TREE_TYPE (CALL_EXPR_FN (call)))));
332 if (!nothrow && at_function_scope_p () && cfun && cp_function_chain)
333 cp_function_chain->can_throw = 1;
335 if (decl && TREE_THIS_VOLATILE (decl) && cfun && cp_function_chain)
336 current_function_returns_abnormally = 1;
338 TREE_NOTHROW (call) = nothrow;
341 tree
342 build_call_a (tree function, int n, tree *argarray)
344 tree decl;
345 tree result_type;
346 tree fntype;
347 int i;
349 function = build_addr_func (function, tf_warning_or_error);
351 gcc_assert (TYPE_PTR_P (TREE_TYPE (function)));
352 fntype = TREE_TYPE (TREE_TYPE (function));
353 gcc_assert (TREE_CODE (fntype) == FUNCTION_TYPE
354 || TREE_CODE (fntype) == METHOD_TYPE);
355 result_type = TREE_TYPE (fntype);
356 /* An rvalue has no cv-qualifiers. */
357 if (SCALAR_TYPE_P (result_type) || VOID_TYPE_P (result_type))
358 result_type = cv_unqualified (result_type);
360 function = build_call_array_loc (input_location,
361 result_type, function, n, argarray);
362 set_flags_from_callee (function);
364 decl = get_callee_fndecl (function);
366 if (decl && !TREE_USED (decl))
368 /* We invoke build_call directly for several library
369 functions. These may have been declared normally if
370 we're building libgcc, so we can't just check
371 DECL_ARTIFICIAL. */
372 gcc_assert (DECL_ARTIFICIAL (decl)
373 || !strncmp (IDENTIFIER_POINTER (DECL_NAME (decl)),
374 "__", 2));
375 mark_used (decl);
378 if (decl && TREE_DEPRECATED (decl))
379 warn_deprecated_use (decl, NULL_TREE);
380 require_complete_eh_spec_types (fntype, decl);
382 TREE_HAS_CONSTRUCTOR (function) = (decl && DECL_CONSTRUCTOR_P (decl));
384 /* Don't pass empty class objects by value. This is useful
385 for tags in STL, which are used to control overload resolution.
386 We don't need to handle other cases of copying empty classes. */
387 if (! decl || ! DECL_BUILT_IN (decl))
388 for (i = 0; i < n; i++)
390 tree arg = CALL_EXPR_ARG (function, i);
391 if (is_empty_class (TREE_TYPE (arg))
392 && ! TREE_ADDRESSABLE (TREE_TYPE (arg)))
394 tree t = build0 (EMPTY_CLASS_EXPR, TREE_TYPE (arg));
395 arg = build2 (COMPOUND_EXPR, TREE_TYPE (t), arg, t);
396 CALL_EXPR_ARG (function, i) = arg;
400 return function;
403 /* Build something of the form ptr->method (args)
404 or object.method (args). This can also build
405 calls to constructors, and find friends.
407 Member functions always take their class variable
408 as a pointer.
410 INSTANCE is a class instance.
412 NAME is the name of the method desired, usually an IDENTIFIER_NODE.
414 PARMS help to figure out what that NAME really refers to.
416 BASETYPE_PATH, if non-NULL, contains a chain from the type of INSTANCE
417 down to the real instance type to use for access checking. We need this
418 information to get protected accesses correct.
420 FLAGS is the logical disjunction of zero or more LOOKUP_
421 flags. See cp-tree.h for more info.
423 If this is all OK, calls build_function_call with the resolved
424 member function.
426 This function must also handle being called to perform
427 initialization, promotion/coercion of arguments, and
428 instantiation of default parameters.
430 Note that NAME may refer to an instance variable name. If
431 `operator()()' is defined for the type of that field, then we return
432 that result. */
434 /* New overloading code. */
436 typedef struct z_candidate z_candidate;
438 typedef struct candidate_warning candidate_warning;
439 struct candidate_warning {
440 z_candidate *loser;
441 candidate_warning *next;
444 /* Information for providing diagnostics about why overloading failed. */
446 enum rejection_reason_code {
447 rr_none,
448 rr_arity,
449 rr_explicit_conversion,
450 rr_template_conversion,
451 rr_arg_conversion,
452 rr_bad_arg_conversion,
453 rr_template_unification,
454 rr_invalid_copy
457 struct conversion_info {
458 /* The index of the argument, 0-based. */
459 int n_arg;
460 /* The type of the actual argument. */
461 tree from_type;
462 /* The type of the formal argument. */
463 tree to_type;
466 struct rejection_reason {
467 enum rejection_reason_code code;
468 union {
469 /* Information about an arity mismatch. */
470 struct {
471 /* The expected number of arguments. */
472 int expected;
473 /* The actual number of arguments in the call. */
474 int actual;
475 /* Whether the call was a varargs call. */
476 bool call_varargs_p;
477 } arity;
478 /* Information about an argument conversion mismatch. */
479 struct conversion_info conversion;
480 /* Same, but for bad argument conversions. */
481 struct conversion_info bad_conversion;
482 /* Information about template unification failures. These are the
483 parameters passed to fn_type_unification. */
484 struct {
485 tree tmpl;
486 tree explicit_targs;
487 int num_targs;
488 const tree *args;
489 unsigned int nargs;
490 tree return_type;
491 unification_kind_t strict;
492 int flags;
493 } template_unification;
494 /* Information about template instantiation failures. These are the
495 parameters passed to instantiate_template. */
496 struct {
497 tree tmpl;
498 tree targs;
499 } template_instantiation;
500 } u;
503 struct z_candidate {
504 /* The FUNCTION_DECL that will be called if this candidate is
505 selected by overload resolution. */
506 tree fn;
507 /* If not NULL_TREE, the first argument to use when calling this
508 function. */
509 tree first_arg;
510 /* The rest of the arguments to use when calling this function. If
511 there are no further arguments this may be NULL or it may be an
512 empty vector. */
513 const VEC(tree,gc) *args;
514 /* The implicit conversion sequences for each of the arguments to
515 FN. */
516 conversion **convs;
517 /* The number of implicit conversion sequences. */
518 size_t num_convs;
519 /* If FN is a user-defined conversion, the standard conversion
520 sequence from the type returned by FN to the desired destination
521 type. */
522 conversion *second_conv;
523 int viable;
524 struct rejection_reason *reason;
525 /* If FN is a member function, the binfo indicating the path used to
526 qualify the name of FN at the call site. This path is used to
527 determine whether or not FN is accessible if it is selected by
528 overload resolution. The DECL_CONTEXT of FN will always be a
529 (possibly improper) base of this binfo. */
530 tree access_path;
531 /* If FN is a non-static member function, the binfo indicating the
532 subobject to which the `this' pointer should be converted if FN
533 is selected by overload resolution. The type pointed to by
534 the `this' pointer must correspond to the most derived class
535 indicated by the CONVERSION_PATH. */
536 tree conversion_path;
537 tree template_decl;
538 tree explicit_targs;
539 candidate_warning *warnings;
540 z_candidate *next;
543 /* Returns true iff T is a null pointer constant in the sense of
544 [conv.ptr]. */
546 bool
547 null_ptr_cst_p (tree t)
549 /* [conv.ptr]
551 A null pointer constant is an integral constant expression
552 (_expr.const_) rvalue of integer type that evaluates to zero or
553 an rvalue of type std::nullptr_t. */
554 if (NULLPTR_TYPE_P (TREE_TYPE (t)))
555 return true;
556 if (CP_INTEGRAL_TYPE_P (TREE_TYPE (t)))
558 /* Core issue 903 says only literal 0 is a null pointer constant. */
559 if (cxx_dialect < cxx0x)
560 t = integral_constant_value (t);
561 STRIP_NOPS (t);
562 if (integer_zerop (t) && !TREE_OVERFLOW (t))
563 return true;
565 return false;
568 /* Returns true iff T is a null member pointer value (4.11). */
570 bool
571 null_member_pointer_value_p (tree t)
573 tree type = TREE_TYPE (t);
574 if (!type)
575 return false;
576 else if (TYPE_PTRMEMFUNC_P (type))
577 return (TREE_CODE (t) == CONSTRUCTOR
578 && integer_zerop (CONSTRUCTOR_ELT (t, 0)->value));
579 else if (TYPE_PTRDATAMEM_P (type))
580 return integer_all_onesp (t);
581 else
582 return false;
585 /* Returns nonzero if PARMLIST consists of only default parms,
586 ellipsis, and/or undeduced parameter packs. */
588 bool
589 sufficient_parms_p (const_tree parmlist)
591 for (; parmlist && parmlist != void_list_node;
592 parmlist = TREE_CHAIN (parmlist))
593 if (!TREE_PURPOSE (parmlist)
594 && !PACK_EXPANSION_P (TREE_VALUE (parmlist)))
595 return false;
596 return true;
599 /* Allocate N bytes of memory from the conversion obstack. The memory
600 is zeroed before being returned. */
602 static void *
603 conversion_obstack_alloc (size_t n)
605 void *p;
606 if (!conversion_obstack_initialized)
608 gcc_obstack_init (&conversion_obstack);
609 conversion_obstack_initialized = true;
611 p = obstack_alloc (&conversion_obstack, n);
612 memset (p, 0, n);
613 return p;
616 /* Allocate rejection reasons. */
618 static struct rejection_reason *
619 alloc_rejection (enum rejection_reason_code code)
621 struct rejection_reason *p;
622 p = (struct rejection_reason *) conversion_obstack_alloc (sizeof *p);
623 p->code = code;
624 return p;
627 static struct rejection_reason *
628 arity_rejection (tree first_arg, int expected, int actual)
630 struct rejection_reason *r = alloc_rejection (rr_arity);
631 int adjust = first_arg != NULL_TREE;
632 r->u.arity.expected = expected - adjust;
633 r->u.arity.actual = actual - adjust;
634 return r;
637 static struct rejection_reason *
638 arg_conversion_rejection (tree first_arg, int n_arg, tree from, tree to)
640 struct rejection_reason *r = alloc_rejection (rr_arg_conversion);
641 int adjust = first_arg != NULL_TREE;
642 r->u.conversion.n_arg = n_arg - adjust;
643 r->u.conversion.from_type = from;
644 r->u.conversion.to_type = to;
645 return r;
648 static struct rejection_reason *
649 bad_arg_conversion_rejection (tree first_arg, int n_arg, tree from, tree to)
651 struct rejection_reason *r = alloc_rejection (rr_bad_arg_conversion);
652 int adjust = first_arg != NULL_TREE;
653 r->u.bad_conversion.n_arg = n_arg - adjust;
654 r->u.bad_conversion.from_type = from;
655 r->u.bad_conversion.to_type = to;
656 return r;
659 static struct rejection_reason *
660 explicit_conversion_rejection (tree from, tree to)
662 struct rejection_reason *r = alloc_rejection (rr_explicit_conversion);
663 r->u.conversion.n_arg = 0;
664 r->u.conversion.from_type = from;
665 r->u.conversion.to_type = to;
666 return r;
669 static struct rejection_reason *
670 template_conversion_rejection (tree from, tree to)
672 struct rejection_reason *r = alloc_rejection (rr_template_conversion);
673 r->u.conversion.n_arg = 0;
674 r->u.conversion.from_type = from;
675 r->u.conversion.to_type = to;
676 return r;
679 static struct rejection_reason *
680 template_unification_rejection (tree tmpl, tree explicit_targs, tree targs,
681 const tree *args, unsigned int nargs,
682 tree return_type, unification_kind_t strict,
683 int flags)
685 size_t args_n_bytes = sizeof (*args) * nargs;
686 tree *args1 = (tree *) conversion_obstack_alloc (args_n_bytes);
687 struct rejection_reason *r = alloc_rejection (rr_template_unification);
688 r->u.template_unification.tmpl = tmpl;
689 r->u.template_unification.explicit_targs = explicit_targs;
690 r->u.template_unification.num_targs = TREE_VEC_LENGTH (targs);
691 /* Copy args to our own storage. */
692 memcpy (args1, args, args_n_bytes);
693 r->u.template_unification.args = args1;
694 r->u.template_unification.nargs = nargs;
695 r->u.template_unification.return_type = return_type;
696 r->u.template_unification.strict = strict;
697 r->u.template_unification.flags = flags;
698 return r;
701 static struct rejection_reason *
702 template_unification_error_rejection (void)
704 return alloc_rejection (rr_template_unification);
707 static struct rejection_reason *
708 invalid_copy_with_fn_template_rejection (void)
710 struct rejection_reason *r = alloc_rejection (rr_invalid_copy);
711 return r;
714 /* Dynamically allocate a conversion. */
716 static conversion *
717 alloc_conversion (conversion_kind kind)
719 conversion *c;
720 c = (conversion *) conversion_obstack_alloc (sizeof (conversion));
721 c->kind = kind;
722 return c;
725 #ifdef ENABLE_CHECKING
727 /* Make sure that all memory on the conversion obstack has been
728 freed. */
730 void
731 validate_conversion_obstack (void)
733 if (conversion_obstack_initialized)
734 gcc_assert ((obstack_next_free (&conversion_obstack)
735 == obstack_base (&conversion_obstack)));
738 #endif /* ENABLE_CHECKING */
740 /* Dynamically allocate an array of N conversions. */
742 static conversion **
743 alloc_conversions (size_t n)
745 return (conversion **) conversion_obstack_alloc (n * sizeof (conversion *));
748 static conversion *
749 build_conv (conversion_kind code, tree type, conversion *from)
751 conversion *t;
752 conversion_rank rank = CONVERSION_RANK (from);
754 /* Note that the caller is responsible for filling in t->cand for
755 user-defined conversions. */
756 t = alloc_conversion (code);
757 t->type = type;
758 t->u.next = from;
760 switch (code)
762 case ck_ptr:
763 case ck_pmem:
764 case ck_base:
765 case ck_std:
766 if (rank < cr_std)
767 rank = cr_std;
768 break;
770 case ck_qual:
771 if (rank < cr_exact)
772 rank = cr_exact;
773 break;
775 default:
776 break;
778 t->rank = rank;
779 t->user_conv_p = (code == ck_user || from->user_conv_p);
780 t->bad_p = from->bad_p;
781 t->base_p = false;
782 return t;
785 /* Represent a conversion from CTOR, a braced-init-list, to TYPE, a
786 specialization of std::initializer_list<T>, if such a conversion is
787 possible. */
789 static conversion *
790 build_list_conv (tree type, tree ctor, int flags, tsubst_flags_t complain)
792 tree elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (type), 0);
793 unsigned len = CONSTRUCTOR_NELTS (ctor);
794 conversion **subconvs = alloc_conversions (len);
795 conversion *t;
796 unsigned i;
797 tree val;
799 /* Within a list-initialization we can have more user-defined
800 conversions. */
801 flags &= ~LOOKUP_NO_CONVERSION;
802 /* But no narrowing conversions. */
803 flags |= LOOKUP_NO_NARROWING;
805 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor), i, val)
807 conversion *sub
808 = implicit_conversion (elttype, TREE_TYPE (val), val,
809 false, flags, complain);
810 if (sub == NULL)
811 return NULL;
813 subconvs[i] = sub;
816 t = alloc_conversion (ck_list);
817 t->type = type;
818 t->u.list = subconvs;
819 t->rank = cr_exact;
821 for (i = 0; i < len; ++i)
823 conversion *sub = subconvs[i];
824 if (sub->rank > t->rank)
825 t->rank = sub->rank;
826 if (sub->user_conv_p)
827 t->user_conv_p = true;
828 if (sub->bad_p)
829 t->bad_p = true;
832 return t;
835 /* Return the next conversion of the conversion chain (if applicable),
836 or NULL otherwise. Please use this function instead of directly
837 accessing fields of struct conversion. */
839 static conversion *
840 next_conversion (conversion *conv)
842 if (conv == NULL
843 || conv->kind == ck_identity
844 || conv->kind == ck_ambig
845 || conv->kind == ck_list)
846 return NULL;
847 return conv->u.next;
850 /* Subroutine of build_aggr_conv: check whether CTOR, a braced-init-list,
851 is a valid aggregate initializer for array type ATYPE. */
853 static bool
854 can_convert_array (tree atype, tree ctor, int flags, tsubst_flags_t complain)
856 unsigned i;
857 tree elttype = TREE_TYPE (atype);
858 for (i = 0; i < CONSTRUCTOR_NELTS (ctor); ++i)
860 tree val = CONSTRUCTOR_ELT (ctor, i)->value;
861 bool ok;
862 if (TREE_CODE (elttype) == ARRAY_TYPE
863 && TREE_CODE (val) == CONSTRUCTOR)
864 ok = can_convert_array (elttype, val, flags, complain);
865 else
866 ok = can_convert_arg (elttype, TREE_TYPE (val), val, flags,
867 complain);
868 if (!ok)
869 return false;
871 return true;
874 /* Represent a conversion from CTOR, a braced-init-list, to TYPE, an
875 aggregate class, if such a conversion is possible. */
877 static conversion *
878 build_aggr_conv (tree type, tree ctor, int flags, tsubst_flags_t complain)
880 unsigned HOST_WIDE_INT i = 0;
881 conversion *c;
882 tree field = next_initializable_field (TYPE_FIELDS (type));
883 tree empty_ctor = NULL_TREE;
885 ctor = reshape_init (type, ctor, tf_none);
886 if (ctor == error_mark_node)
887 return NULL;
889 for (; field; field = next_initializable_field (DECL_CHAIN (field)))
891 tree ftype = TREE_TYPE (field);
892 tree val;
893 bool ok;
895 if (i < CONSTRUCTOR_NELTS (ctor))
896 val = CONSTRUCTOR_ELT (ctor, i)->value;
897 else
899 if (empty_ctor == NULL_TREE)
900 empty_ctor = build_constructor (init_list_type_node, NULL);
901 val = empty_ctor;
903 ++i;
905 if (TREE_CODE (ftype) == ARRAY_TYPE
906 && TREE_CODE (val) == CONSTRUCTOR)
907 ok = can_convert_array (ftype, val, flags, complain);
908 else
909 ok = can_convert_arg (ftype, TREE_TYPE (val), val, flags,
910 complain);
912 if (!ok)
913 return NULL;
915 if (TREE_CODE (type) == UNION_TYPE)
916 break;
919 if (i < CONSTRUCTOR_NELTS (ctor))
920 return NULL;
922 c = alloc_conversion (ck_aggr);
923 c->type = type;
924 c->rank = cr_exact;
925 c->user_conv_p = true;
926 c->u.next = NULL;
927 return c;
930 /* Represent a conversion from CTOR, a braced-init-list, to TYPE, an
931 array type, if such a conversion is possible. */
933 static conversion *
934 build_array_conv (tree type, tree ctor, int flags, tsubst_flags_t complain)
936 conversion *c;
937 unsigned HOST_WIDE_INT len = CONSTRUCTOR_NELTS (ctor);
938 tree elttype = TREE_TYPE (type);
939 unsigned i;
940 tree val;
941 bool bad = false;
942 bool user = false;
943 enum conversion_rank rank = cr_exact;
945 if (TYPE_DOMAIN (type))
947 unsigned HOST_WIDE_INT alen = tree_low_cst (array_type_nelts_top (type), 1);
948 if (alen < len)
949 return NULL;
952 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor), i, val)
954 conversion *sub
955 = implicit_conversion (elttype, TREE_TYPE (val), val,
956 false, flags, complain);
957 if (sub == NULL)
958 return NULL;
960 if (sub->rank > rank)
961 rank = sub->rank;
962 if (sub->user_conv_p)
963 user = true;
964 if (sub->bad_p)
965 bad = true;
968 c = alloc_conversion (ck_aggr);
969 c->type = type;
970 c->rank = rank;
971 c->user_conv_p = user;
972 c->bad_p = bad;
973 c->u.next = NULL;
974 return c;
977 /* Represent a conversion from CTOR, a braced-init-list, to TYPE, a
978 complex type, if such a conversion is possible. */
980 static conversion *
981 build_complex_conv (tree type, tree ctor, int flags,
982 tsubst_flags_t complain)
984 conversion *c;
985 unsigned HOST_WIDE_INT len = CONSTRUCTOR_NELTS (ctor);
986 tree elttype = TREE_TYPE (type);
987 unsigned i;
988 tree val;
989 bool bad = false;
990 bool user = false;
991 enum conversion_rank rank = cr_exact;
993 if (len != 2)
994 return NULL;
996 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor), i, val)
998 conversion *sub
999 = implicit_conversion (elttype, TREE_TYPE (val), val,
1000 false, flags, complain);
1001 if (sub == NULL)
1002 return NULL;
1004 if (sub->rank > rank)
1005 rank = sub->rank;
1006 if (sub->user_conv_p)
1007 user = true;
1008 if (sub->bad_p)
1009 bad = true;
1012 c = alloc_conversion (ck_aggr);
1013 c->type = type;
1014 c->rank = rank;
1015 c->user_conv_p = user;
1016 c->bad_p = bad;
1017 c->u.next = NULL;
1018 return c;
1021 /* Build a representation of the identity conversion from EXPR to
1022 itself. The TYPE should match the type of EXPR, if EXPR is non-NULL. */
1024 static conversion *
1025 build_identity_conv (tree type, tree expr)
1027 conversion *c;
1029 c = alloc_conversion (ck_identity);
1030 c->type = type;
1031 c->u.expr = expr;
1033 return c;
1036 /* Converting from EXPR to TYPE was ambiguous in the sense that there
1037 were multiple user-defined conversions to accomplish the job.
1038 Build a conversion that indicates that ambiguity. */
1040 static conversion *
1041 build_ambiguous_conv (tree type, tree expr)
1043 conversion *c;
1045 c = alloc_conversion (ck_ambig);
1046 c->type = type;
1047 c->u.expr = expr;
1049 return c;
1052 tree
1053 strip_top_quals (tree t)
1055 if (TREE_CODE (t) == ARRAY_TYPE)
1056 return t;
1057 return cp_build_qualified_type (t, 0);
1060 /* Returns the standard conversion path (see [conv]) from type FROM to type
1061 TO, if any. For proper handling of null pointer constants, you must
1062 also pass the expression EXPR to convert from. If C_CAST_P is true,
1063 this conversion is coming from a C-style cast. */
1065 static conversion *
1066 standard_conversion (tree to, tree from, tree expr, bool c_cast_p,
1067 int flags)
1069 enum tree_code fcode, tcode;
1070 conversion *conv;
1071 bool fromref = false;
1072 tree qualified_to;
1074 to = non_reference (to);
1075 if (TREE_CODE (from) == REFERENCE_TYPE)
1077 fromref = true;
1078 from = TREE_TYPE (from);
1080 qualified_to = to;
1081 to = strip_top_quals (to);
1082 from = strip_top_quals (from);
1084 if ((TYPE_PTRFN_P (to) || TYPE_PTRMEMFUNC_P (to))
1085 && expr && type_unknown_p (expr))
1087 tsubst_flags_t tflags = tf_conv;
1088 expr = instantiate_type (to, expr, tflags);
1089 if (expr == error_mark_node)
1090 return NULL;
1091 from = TREE_TYPE (expr);
1094 fcode = TREE_CODE (from);
1095 tcode = TREE_CODE (to);
1097 conv = build_identity_conv (from, expr);
1098 if (fcode == FUNCTION_TYPE || fcode == ARRAY_TYPE)
1100 from = type_decays_to (from);
1101 fcode = TREE_CODE (from);
1102 conv = build_conv (ck_lvalue, from, conv);
1104 else if (fromref || (expr && lvalue_p (expr)))
1106 if (expr)
1108 tree bitfield_type;
1109 bitfield_type = is_bitfield_expr_with_lowered_type (expr);
1110 if (bitfield_type)
1112 from = strip_top_quals (bitfield_type);
1113 fcode = TREE_CODE (from);
1116 conv = build_conv (ck_rvalue, from, conv);
1117 if (flags & LOOKUP_PREFER_RVALUE)
1118 conv->rvaluedness_matches_p = true;
1121 /* Allow conversion between `__complex__' data types. */
1122 if (tcode == COMPLEX_TYPE && fcode == COMPLEX_TYPE)
1124 /* The standard conversion sequence to convert FROM to TO is
1125 the standard conversion sequence to perform componentwise
1126 conversion. */
1127 conversion *part_conv = standard_conversion
1128 (TREE_TYPE (to), TREE_TYPE (from), NULL_TREE, c_cast_p, flags);
1130 if (part_conv)
1132 conv = build_conv (part_conv->kind, to, conv);
1133 conv->rank = part_conv->rank;
1135 else
1136 conv = NULL;
1138 return conv;
1141 if (same_type_p (from, to))
1143 if (CLASS_TYPE_P (to) && conv->kind == ck_rvalue)
1144 conv->type = qualified_to;
1145 return conv;
1148 /* [conv.ptr]
1149 A null pointer constant can be converted to a pointer type; ... A
1150 null pointer constant of integral type can be converted to an
1151 rvalue of type std::nullptr_t. */
1152 if ((tcode == POINTER_TYPE || TYPE_PTRMEM_P (to)
1153 || NULLPTR_TYPE_P (to))
1154 && expr && null_ptr_cst_p (expr))
1155 conv = build_conv (ck_std, to, conv);
1156 else if ((tcode == INTEGER_TYPE && fcode == POINTER_TYPE)
1157 || (tcode == POINTER_TYPE && fcode == INTEGER_TYPE))
1159 /* For backwards brain damage compatibility, allow interconversion of
1160 pointers and integers with a pedwarn. */
1161 conv = build_conv (ck_std, to, conv);
1162 conv->bad_p = true;
1164 else if (UNSCOPED_ENUM_P (to) && fcode == INTEGER_TYPE)
1166 /* For backwards brain damage compatibility, allow interconversion of
1167 enums and integers with a pedwarn. */
1168 conv = build_conv (ck_std, to, conv);
1169 conv->bad_p = true;
1171 else if ((tcode == POINTER_TYPE && fcode == POINTER_TYPE)
1172 || (TYPE_PTRDATAMEM_P (to) && TYPE_PTRDATAMEM_P (from)))
1174 tree to_pointee;
1175 tree from_pointee;
1177 if (tcode == POINTER_TYPE
1178 && same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (from),
1179 TREE_TYPE (to)))
1181 else if (VOID_TYPE_P (TREE_TYPE (to))
1182 && !TYPE_PTRDATAMEM_P (from)
1183 && TREE_CODE (TREE_TYPE (from)) != FUNCTION_TYPE)
1185 tree nfrom = TREE_TYPE (from);
1186 from = build_pointer_type
1187 (cp_build_qualified_type (void_type_node,
1188 cp_type_quals (nfrom)));
1189 conv = build_conv (ck_ptr, from, conv);
1191 else if (TYPE_PTRDATAMEM_P (from))
1193 tree fbase = TYPE_PTRMEM_CLASS_TYPE (from);
1194 tree tbase = TYPE_PTRMEM_CLASS_TYPE (to);
1196 if (DERIVED_FROM_P (fbase, tbase)
1197 && (same_type_ignoring_top_level_qualifiers_p
1198 (TYPE_PTRMEM_POINTED_TO_TYPE (from),
1199 TYPE_PTRMEM_POINTED_TO_TYPE (to))))
1201 from = build_ptrmem_type (tbase,
1202 TYPE_PTRMEM_POINTED_TO_TYPE (from));
1203 conv = build_conv (ck_pmem, from, conv);
1205 else if (!same_type_p (fbase, tbase))
1206 return NULL;
1208 else if (CLASS_TYPE_P (TREE_TYPE (from))
1209 && CLASS_TYPE_P (TREE_TYPE (to))
1210 /* [conv.ptr]
1212 An rvalue of type "pointer to cv D," where D is a
1213 class type, can be converted to an rvalue of type
1214 "pointer to cv B," where B is a base class (clause
1215 _class.derived_) of D. If B is an inaccessible
1216 (clause _class.access_) or ambiguous
1217 (_class.member.lookup_) base class of D, a program
1218 that necessitates this conversion is ill-formed.
1219 Therefore, we use DERIVED_FROM_P, and do not check
1220 access or uniqueness. */
1221 && DERIVED_FROM_P (TREE_TYPE (to), TREE_TYPE (from)))
1223 from =
1224 cp_build_qualified_type (TREE_TYPE (to),
1225 cp_type_quals (TREE_TYPE (from)));
1226 from = build_pointer_type (from);
1227 conv = build_conv (ck_ptr, from, conv);
1228 conv->base_p = true;
1231 if (tcode == POINTER_TYPE)
1233 to_pointee = TREE_TYPE (to);
1234 from_pointee = TREE_TYPE (from);
1236 else
1238 to_pointee = TYPE_PTRMEM_POINTED_TO_TYPE (to);
1239 from_pointee = TYPE_PTRMEM_POINTED_TO_TYPE (from);
1242 if (same_type_p (from, to))
1243 /* OK */;
1244 else if (c_cast_p && comp_ptr_ttypes_const (to, from))
1245 /* In a C-style cast, we ignore CV-qualification because we
1246 are allowed to perform a static_cast followed by a
1247 const_cast. */
1248 conv = build_conv (ck_qual, to, conv);
1249 else if (!c_cast_p && comp_ptr_ttypes (to_pointee, from_pointee))
1250 conv = build_conv (ck_qual, to, conv);
1251 else if (expr && string_conv_p (to, expr, 0))
1252 /* converting from string constant to char *. */
1253 conv = build_conv (ck_qual, to, conv);
1254 /* Allow conversions among compatible ObjC pointer types (base
1255 conversions have been already handled above). */
1256 else if (c_dialect_objc ()
1257 && objc_compare_types (to, from, -4, NULL_TREE))
1258 conv = build_conv (ck_ptr, to, conv);
1259 else if (ptr_reasonably_similar (to_pointee, from_pointee))
1261 conv = build_conv (ck_ptr, to, conv);
1262 conv->bad_p = true;
1264 else
1265 return NULL;
1267 from = to;
1269 else if (TYPE_PTRMEMFUNC_P (to) && TYPE_PTRMEMFUNC_P (from))
1271 tree fromfn = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (from));
1272 tree tofn = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (to));
1273 tree fbase = class_of_this_parm (fromfn);
1274 tree tbase = class_of_this_parm (tofn);
1276 if (!DERIVED_FROM_P (fbase, tbase)
1277 || !same_type_p (static_fn_type (fromfn),
1278 static_fn_type (tofn)))
1279 return NULL;
1281 from = build_memfn_type (fromfn, tbase, cp_type_quals (tbase));
1282 from = build_ptrmemfunc_type (build_pointer_type (from));
1283 conv = build_conv (ck_pmem, from, conv);
1284 conv->base_p = true;
1286 else if (tcode == BOOLEAN_TYPE)
1288 /* [conv.bool]
1290 An rvalue of arithmetic, unscoped enumeration, pointer, or
1291 pointer to member type can be converted to an rvalue of type
1292 bool. ... An rvalue of type std::nullptr_t can be converted
1293 to an rvalue of type bool; */
1294 if (ARITHMETIC_TYPE_P (from)
1295 || UNSCOPED_ENUM_P (from)
1296 || fcode == POINTER_TYPE
1297 || TYPE_PTRMEM_P (from)
1298 || NULLPTR_TYPE_P (from))
1300 conv = build_conv (ck_std, to, conv);
1301 if (fcode == POINTER_TYPE
1302 || TYPE_PTRDATAMEM_P (from)
1303 || (TYPE_PTRMEMFUNC_P (from)
1304 && conv->rank < cr_pbool)
1305 || NULLPTR_TYPE_P (from))
1306 conv->rank = cr_pbool;
1307 return conv;
1310 return NULL;
1312 /* We don't check for ENUMERAL_TYPE here because there are no standard
1313 conversions to enum type. */
1314 /* As an extension, allow conversion to complex type. */
1315 else if (ARITHMETIC_TYPE_P (to))
1317 if (! (INTEGRAL_CODE_P (fcode) || fcode == REAL_TYPE)
1318 || SCOPED_ENUM_P (from))
1319 return NULL;
1320 conv = build_conv (ck_std, to, conv);
1322 /* Give this a better rank if it's a promotion. */
1323 if (same_type_p (to, type_promotes_to (from))
1324 && next_conversion (conv)->rank <= cr_promotion)
1325 conv->rank = cr_promotion;
1327 else if (fcode == VECTOR_TYPE && tcode == VECTOR_TYPE
1328 && vector_types_convertible_p (from, to, false))
1329 return build_conv (ck_std, to, conv);
1330 else if (MAYBE_CLASS_TYPE_P (to) && MAYBE_CLASS_TYPE_P (from)
1331 && is_properly_derived_from (from, to))
1333 if (conv->kind == ck_rvalue)
1334 conv = next_conversion (conv);
1335 conv = build_conv (ck_base, to, conv);
1336 /* The derived-to-base conversion indicates the initialization
1337 of a parameter with base type from an object of a derived
1338 type. A temporary object is created to hold the result of
1339 the conversion unless we're binding directly to a reference. */
1340 conv->need_temporary_p = !(flags & LOOKUP_NO_TEMP_BIND);
1342 else
1343 return NULL;
1345 if (flags & LOOKUP_NO_NARROWING)
1346 conv->check_narrowing = true;
1348 return conv;
1351 /* Returns nonzero if T1 is reference-related to T2. */
1353 bool
1354 reference_related_p (tree t1, tree t2)
1356 if (t1 == error_mark_node || t2 == error_mark_node)
1357 return false;
1359 t1 = TYPE_MAIN_VARIANT (t1);
1360 t2 = TYPE_MAIN_VARIANT (t2);
1362 /* [dcl.init.ref]
1364 Given types "cv1 T1" and "cv2 T2," "cv1 T1" is reference-related
1365 to "cv2 T2" if T1 is the same type as T2, or T1 is a base class
1366 of T2. */
1367 return (same_type_p (t1, t2)
1368 || (CLASS_TYPE_P (t1) && CLASS_TYPE_P (t2)
1369 && DERIVED_FROM_P (t1, t2)));
1372 /* Returns nonzero if T1 is reference-compatible with T2. */
1374 static bool
1375 reference_compatible_p (tree t1, tree t2)
1377 /* [dcl.init.ref]
1379 "cv1 T1" is reference compatible with "cv2 T2" if T1 is
1380 reference-related to T2 and cv1 is the same cv-qualification as,
1381 or greater cv-qualification than, cv2. */
1382 return (reference_related_p (t1, t2)
1383 && at_least_as_qualified_p (t1, t2));
1386 /* A reference of the indicated TYPE is being bound directly to the
1387 expression represented by the implicit conversion sequence CONV.
1388 Return a conversion sequence for this binding. */
1390 static conversion *
1391 direct_reference_binding (tree type, conversion *conv)
1393 tree t;
1395 gcc_assert (TREE_CODE (type) == REFERENCE_TYPE);
1396 gcc_assert (TREE_CODE (conv->type) != REFERENCE_TYPE);
1398 t = TREE_TYPE (type);
1400 /* [over.ics.rank]
1402 When a parameter of reference type binds directly
1403 (_dcl.init.ref_) to an argument expression, the implicit
1404 conversion sequence is the identity conversion, unless the
1405 argument expression has a type that is a derived class of the
1406 parameter type, in which case the implicit conversion sequence is
1407 a derived-to-base Conversion.
1409 If the parameter binds directly to the result of applying a
1410 conversion function to the argument expression, the implicit
1411 conversion sequence is a user-defined conversion sequence
1412 (_over.ics.user_), with the second standard conversion sequence
1413 either an identity conversion or, if the conversion function
1414 returns an entity of a type that is a derived class of the
1415 parameter type, a derived-to-base conversion. */
1416 if (!same_type_ignoring_top_level_qualifiers_p (t, conv->type))
1418 /* Represent the derived-to-base conversion. */
1419 conv = build_conv (ck_base, t, conv);
1420 /* We will actually be binding to the base-class subobject in
1421 the derived class, so we mark this conversion appropriately.
1422 That way, convert_like knows not to generate a temporary. */
1423 conv->need_temporary_p = false;
1425 return build_conv (ck_ref_bind, type, conv);
1428 /* Returns the conversion path from type FROM to reference type TO for
1429 purposes of reference binding. For lvalue binding, either pass a
1430 reference type to FROM or an lvalue expression to EXPR. If the
1431 reference will be bound to a temporary, NEED_TEMPORARY_P is set for
1432 the conversion returned. If C_CAST_P is true, this
1433 conversion is coming from a C-style cast. */
1435 static conversion *
1436 reference_binding (tree rto, tree rfrom, tree expr, bool c_cast_p, int flags,
1437 tsubst_flags_t complain)
1439 conversion *conv = NULL;
1440 tree to = TREE_TYPE (rto);
1441 tree from = rfrom;
1442 tree tfrom;
1443 bool related_p;
1444 bool compatible_p;
1445 cp_lvalue_kind gl_kind;
1446 bool is_lvalue;
1448 if (TREE_CODE (to) == FUNCTION_TYPE && expr && type_unknown_p (expr))
1450 expr = instantiate_type (to, expr, tf_none);
1451 if (expr == error_mark_node)
1452 return NULL;
1453 from = TREE_TYPE (expr);
1456 if (expr && BRACE_ENCLOSED_INITIALIZER_P (expr))
1458 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
1459 conv = implicit_conversion (to, from, expr, c_cast_p,
1460 flags, complain);
1461 if (!CLASS_TYPE_P (to)
1462 && CONSTRUCTOR_NELTS (expr) == 1)
1464 expr = CONSTRUCTOR_ELT (expr, 0)->value;
1465 if (error_operand_p (expr))
1466 return NULL;
1467 from = TREE_TYPE (expr);
1471 if (TREE_CODE (from) == REFERENCE_TYPE)
1473 from = TREE_TYPE (from);
1474 if (!TYPE_REF_IS_RVALUE (rfrom)
1475 || TREE_CODE (from) == FUNCTION_TYPE)
1476 gl_kind = clk_ordinary;
1477 else
1478 gl_kind = clk_rvalueref;
1480 else if (expr)
1482 gl_kind = lvalue_kind (expr);
1483 if (gl_kind & clk_class)
1484 /* A class prvalue is not a glvalue. */
1485 gl_kind = clk_none;
1487 else
1488 gl_kind = clk_none;
1489 is_lvalue = gl_kind && !(gl_kind & clk_rvalueref);
1491 tfrom = from;
1492 if ((gl_kind & clk_bitfield) != 0)
1493 tfrom = unlowered_expr_type (expr);
1495 /* Figure out whether or not the types are reference-related and
1496 reference compatible. We have do do this after stripping
1497 references from FROM. */
1498 related_p = reference_related_p (to, tfrom);
1499 /* If this is a C cast, first convert to an appropriately qualified
1500 type, so that we can later do a const_cast to the desired type. */
1501 if (related_p && c_cast_p
1502 && !at_least_as_qualified_p (to, tfrom))
1503 to = cp_build_qualified_type (to, cp_type_quals (tfrom));
1504 compatible_p = reference_compatible_p (to, tfrom);
1506 /* Directly bind reference when target expression's type is compatible with
1507 the reference and expression is an lvalue. In DR391, the wording in
1508 [8.5.3/5 dcl.init.ref] is changed to also require direct bindings for
1509 const and rvalue references to rvalues of compatible class type.
1510 We should also do direct bindings for non-class xvalues. */
1511 if (compatible_p
1512 && (is_lvalue
1513 || (((CP_TYPE_CONST_NON_VOLATILE_P (to)
1514 && !(flags & LOOKUP_NO_RVAL_BIND))
1515 || TYPE_REF_IS_RVALUE (rto))
1516 && (gl_kind
1517 || (!(flags & LOOKUP_NO_TEMP_BIND)
1518 && (CLASS_TYPE_P (from)
1519 || TREE_CODE (from) == ARRAY_TYPE))))))
1521 /* [dcl.init.ref]
1523 If the initializer expression
1525 -- is an lvalue (but not an lvalue for a bit-field), and "cv1 T1"
1526 is reference-compatible with "cv2 T2,"
1528 the reference is bound directly to the initializer expression
1529 lvalue.
1531 [...]
1532 If the initializer expression is an rvalue, with T2 a class type,
1533 and "cv1 T1" is reference-compatible with "cv2 T2", the reference
1534 is bound to the object represented by the rvalue or to a sub-object
1535 within that object. */
1537 conv = build_identity_conv (tfrom, expr);
1538 conv = direct_reference_binding (rto, conv);
1540 if (flags & LOOKUP_PREFER_RVALUE)
1541 /* The top-level caller requested that we pretend that the lvalue
1542 be treated as an rvalue. */
1543 conv->rvaluedness_matches_p = TYPE_REF_IS_RVALUE (rto);
1544 else if (TREE_CODE (rfrom) == REFERENCE_TYPE)
1545 /* Handle rvalue reference to function properly. */
1546 conv->rvaluedness_matches_p
1547 = (TYPE_REF_IS_RVALUE (rto) == TYPE_REF_IS_RVALUE (rfrom));
1548 else
1549 conv->rvaluedness_matches_p
1550 = (TYPE_REF_IS_RVALUE (rto) == !is_lvalue);
1552 if ((gl_kind & clk_bitfield) != 0
1553 || ((gl_kind & clk_packed) != 0 && !TYPE_PACKED (to)))
1554 /* For the purposes of overload resolution, we ignore the fact
1555 this expression is a bitfield or packed field. (In particular,
1556 [over.ics.ref] says specifically that a function with a
1557 non-const reference parameter is viable even if the
1558 argument is a bitfield.)
1560 However, when we actually call the function we must create
1561 a temporary to which to bind the reference. If the
1562 reference is volatile, or isn't const, then we cannot make
1563 a temporary, so we just issue an error when the conversion
1564 actually occurs. */
1565 conv->need_temporary_p = true;
1567 /* Don't allow binding of lvalues (other than function lvalues) to
1568 rvalue references. */
1569 if (is_lvalue && TYPE_REF_IS_RVALUE (rto)
1570 && TREE_CODE (to) != FUNCTION_TYPE
1571 && !(flags & LOOKUP_PREFER_RVALUE))
1572 conv->bad_p = true;
1574 return conv;
1576 /* [class.conv.fct] A conversion function is never used to convert a
1577 (possibly cv-qualified) object to the (possibly cv-qualified) same
1578 object type (or a reference to it), to a (possibly cv-qualified) base
1579 class of that type (or a reference to it).... */
1580 else if (CLASS_TYPE_P (from) && !related_p
1581 && !(flags & LOOKUP_NO_CONVERSION))
1583 /* [dcl.init.ref]
1585 If the initializer expression
1587 -- has a class type (i.e., T2 is a class type) can be
1588 implicitly converted to an lvalue of type "cv3 T3," where
1589 "cv1 T1" is reference-compatible with "cv3 T3". (this
1590 conversion is selected by enumerating the applicable
1591 conversion functions (_over.match.ref_) and choosing the
1592 best one through overload resolution. (_over.match_).
1594 the reference is bound to the lvalue result of the conversion
1595 in the second case. */
1596 z_candidate *cand = build_user_type_conversion_1 (rto, expr, flags,
1597 complain);
1598 if (cand)
1599 return cand->second_conv;
1602 /* From this point on, we conceptually need temporaries, even if we
1603 elide them. Only the cases above are "direct bindings". */
1604 if (flags & LOOKUP_NO_TEMP_BIND)
1605 return NULL;
1607 /* [over.ics.rank]
1609 When a parameter of reference type is not bound directly to an
1610 argument expression, the conversion sequence is the one required
1611 to convert the argument expression to the underlying type of the
1612 reference according to _over.best.ics_. Conceptually, this
1613 conversion sequence corresponds to copy-initializing a temporary
1614 of the underlying type with the argument expression. Any
1615 difference in top-level cv-qualification is subsumed by the
1616 initialization itself and does not constitute a conversion. */
1618 /* [dcl.init.ref]
1620 Otherwise, the reference shall be to a non-volatile const type.
1622 Under C++0x, [8.5.3/5 dcl.init.ref] it may also be an rvalue reference */
1623 if (!CP_TYPE_CONST_NON_VOLATILE_P (to) && !TYPE_REF_IS_RVALUE (rto))
1624 return NULL;
1626 /* [dcl.init.ref]
1628 Otherwise, a temporary of type "cv1 T1" is created and
1629 initialized from the initializer expression using the rules for a
1630 non-reference copy initialization. If T1 is reference-related to
1631 T2, cv1 must be the same cv-qualification as, or greater
1632 cv-qualification than, cv2; otherwise, the program is ill-formed. */
1633 if (related_p && !at_least_as_qualified_p (to, from))
1634 return NULL;
1636 /* We're generating a temporary now, but don't bind any more in the
1637 conversion (specifically, don't slice the temporary returned by a
1638 conversion operator). */
1639 flags |= LOOKUP_NO_TEMP_BIND;
1641 /* Core issue 899: When [copy-]initializing a temporary to be bound
1642 to the first parameter of a copy constructor (12.8) called with
1643 a single argument in the context of direct-initialization,
1644 explicit conversion functions are also considered.
1646 So don't set LOOKUP_ONLYCONVERTING in that case. */
1647 if (!(flags & LOOKUP_COPY_PARM))
1648 flags |= LOOKUP_ONLYCONVERTING;
1650 if (!conv)
1651 conv = implicit_conversion (to, from, expr, c_cast_p,
1652 flags, complain);
1653 if (!conv)
1654 return NULL;
1656 conv = build_conv (ck_ref_bind, rto, conv);
1657 /* This reference binding, unlike those above, requires the
1658 creation of a temporary. */
1659 conv->need_temporary_p = true;
1660 conv->rvaluedness_matches_p = TYPE_REF_IS_RVALUE (rto);
1662 return conv;
1665 /* Returns the implicit conversion sequence (see [over.ics]) from type
1666 FROM to type TO. The optional expression EXPR may affect the
1667 conversion. FLAGS are the usual overloading flags. If C_CAST_P is
1668 true, this conversion is coming from a C-style cast. */
1670 static conversion *
1671 implicit_conversion (tree to, tree from, tree expr, bool c_cast_p,
1672 int flags, tsubst_flags_t complain)
1674 conversion *conv;
1676 if (from == error_mark_node || to == error_mark_node
1677 || expr == error_mark_node)
1678 return NULL;
1680 /* Other flags only apply to the primary function in overload
1681 resolution, or after we've chosen one. */
1682 flags &= (LOOKUP_ONLYCONVERTING|LOOKUP_NO_CONVERSION|LOOKUP_COPY_PARM
1683 |LOOKUP_NO_TEMP_BIND|LOOKUP_NO_RVAL_BIND|LOOKUP_PREFER_RVALUE
1684 |LOOKUP_NO_NARROWING|LOOKUP_PROTECT);
1686 /* FIXME: actually we don't want warnings either, but we can't just
1687 have 'complain &= ~(tf_warning|tf_error)' because it would cause
1688 the regression of, eg, g++.old-deja/g++.benjamin/16077.C.
1689 We really ought not to issue that warning until we've committed
1690 to that conversion. */
1691 complain &= ~tf_error;
1693 if (TREE_CODE (to) == REFERENCE_TYPE)
1694 conv = reference_binding (to, from, expr, c_cast_p, flags, complain);
1695 else
1696 conv = standard_conversion (to, from, expr, c_cast_p, flags);
1698 if (conv)
1699 return conv;
1701 if (expr && BRACE_ENCLOSED_INITIALIZER_P (expr))
1703 if (is_std_init_list (to))
1704 return build_list_conv (to, expr, flags, complain);
1706 /* As an extension, allow list-initialization of _Complex. */
1707 if (TREE_CODE (to) == COMPLEX_TYPE)
1709 conv = build_complex_conv (to, expr, flags, complain);
1710 if (conv)
1711 return conv;
1714 /* Allow conversion from an initializer-list with one element to a
1715 scalar type. */
1716 if (SCALAR_TYPE_P (to))
1718 int nelts = CONSTRUCTOR_NELTS (expr);
1719 tree elt;
1721 if (nelts == 0)
1722 elt = build_value_init (to, tf_none);
1723 else if (nelts == 1)
1724 elt = CONSTRUCTOR_ELT (expr, 0)->value;
1725 else
1726 elt = error_mark_node;
1728 conv = implicit_conversion (to, TREE_TYPE (elt), elt,
1729 c_cast_p, flags, complain);
1730 if (conv)
1732 conv->check_narrowing = true;
1733 if (BRACE_ENCLOSED_INITIALIZER_P (elt))
1734 /* Too many levels of braces, i.e. '{{1}}'. */
1735 conv->bad_p = true;
1736 return conv;
1739 else if (TREE_CODE (to) == ARRAY_TYPE)
1740 return build_array_conv (to, expr, flags, complain);
1743 if (expr != NULL_TREE
1744 && (MAYBE_CLASS_TYPE_P (from)
1745 || MAYBE_CLASS_TYPE_P (to))
1746 && (flags & LOOKUP_NO_CONVERSION) == 0)
1748 struct z_candidate *cand;
1750 if (CLASS_TYPE_P (to)
1751 && BRACE_ENCLOSED_INITIALIZER_P (expr)
1752 && !CLASSTYPE_NON_AGGREGATE (complete_type (to)))
1753 return build_aggr_conv (to, expr, flags, complain);
1755 cand = build_user_type_conversion_1 (to, expr, flags, complain);
1756 if (cand)
1757 conv = cand->second_conv;
1759 /* We used to try to bind a reference to a temporary here, but that
1760 is now handled after the recursive call to this function at the end
1761 of reference_binding. */
1762 return conv;
1765 return NULL;
1768 /* Add a new entry to the list of candidates. Used by the add_*_candidate
1769 functions. ARGS will not be changed until a single candidate is
1770 selected. */
1772 static struct z_candidate *
1773 add_candidate (struct z_candidate **candidates,
1774 tree fn, tree first_arg, const VEC(tree,gc) *args,
1775 size_t num_convs, conversion **convs,
1776 tree access_path, tree conversion_path,
1777 int viable, struct rejection_reason *reason)
1779 struct z_candidate *cand = (struct z_candidate *)
1780 conversion_obstack_alloc (sizeof (struct z_candidate));
1782 cand->fn = fn;
1783 cand->first_arg = first_arg;
1784 cand->args = args;
1785 cand->convs = convs;
1786 cand->num_convs = num_convs;
1787 cand->access_path = access_path;
1788 cand->conversion_path = conversion_path;
1789 cand->viable = viable;
1790 cand->reason = reason;
1791 cand->next = *candidates;
1792 *candidates = cand;
1794 return cand;
1797 /* Return the number of remaining arguments in the parameter list
1798 beginning with ARG. */
1800 static int
1801 remaining_arguments (tree arg)
1803 int n;
1805 for (n = 0; arg != NULL_TREE && arg != void_list_node;
1806 arg = TREE_CHAIN (arg))
1807 n++;
1809 return n;
1812 /* Create an overload candidate for the function or method FN called
1813 with the argument list FIRST_ARG/ARGS and add it to CANDIDATES.
1814 FLAGS is passed on to implicit_conversion.
1816 This does not change ARGS.
1818 CTYPE, if non-NULL, is the type we want to pretend this function
1819 comes from for purposes of overload resolution. */
1821 static struct z_candidate *
1822 add_function_candidate (struct z_candidate **candidates,
1823 tree fn, tree ctype, tree first_arg,
1824 const VEC(tree,gc) *args, tree access_path,
1825 tree conversion_path, int flags,
1826 tsubst_flags_t complain)
1828 tree parmlist = TYPE_ARG_TYPES (TREE_TYPE (fn));
1829 int i, len;
1830 conversion **convs;
1831 tree parmnode;
1832 tree orig_first_arg = first_arg;
1833 int skip;
1834 int viable = 1;
1835 struct rejection_reason *reason = NULL;
1837 /* At this point we should not see any functions which haven't been
1838 explicitly declared, except for friend functions which will have
1839 been found using argument dependent lookup. */
1840 gcc_assert (!DECL_ANTICIPATED (fn) || DECL_HIDDEN_FRIEND_P (fn));
1842 /* The `this', `in_chrg' and VTT arguments to constructors are not
1843 considered in overload resolution. */
1844 if (DECL_CONSTRUCTOR_P (fn))
1846 parmlist = skip_artificial_parms_for (fn, parmlist);
1847 skip = num_artificial_parms_for (fn);
1848 if (skip > 0 && first_arg != NULL_TREE)
1850 --skip;
1851 first_arg = NULL_TREE;
1854 else
1855 skip = 0;
1857 len = VEC_length (tree, args) - skip + (first_arg != NULL_TREE ? 1 : 0);
1858 convs = alloc_conversions (len);
1860 /* 13.3.2 - Viable functions [over.match.viable]
1861 First, to be a viable function, a candidate function shall have enough
1862 parameters to agree in number with the arguments in the list.
1864 We need to check this first; otherwise, checking the ICSes might cause
1865 us to produce an ill-formed template instantiation. */
1867 parmnode = parmlist;
1868 for (i = 0; i < len; ++i)
1870 if (parmnode == NULL_TREE || parmnode == void_list_node)
1871 break;
1872 parmnode = TREE_CHAIN (parmnode);
1875 if ((i < len && parmnode)
1876 || !sufficient_parms_p (parmnode))
1878 int remaining = remaining_arguments (parmnode);
1879 viable = 0;
1880 reason = arity_rejection (first_arg, i + remaining, len);
1882 /* When looking for a function from a subobject from an implicit
1883 copy/move constructor/operator=, don't consider anything that takes (a
1884 reference to) an unrelated type. See c++/44909 and core 1092. */
1885 else if (parmlist && (flags & LOOKUP_DEFAULTED))
1887 if (DECL_CONSTRUCTOR_P (fn))
1888 i = 1;
1889 else if (DECL_ASSIGNMENT_OPERATOR_P (fn)
1890 && DECL_OVERLOADED_OPERATOR_P (fn) == NOP_EXPR)
1891 i = 2;
1892 else
1893 i = 0;
1894 if (i && len == i)
1896 parmnode = chain_index (i-1, parmlist);
1897 if (!reference_related_p (non_reference (TREE_VALUE (parmnode)),
1898 ctype))
1899 viable = 0;
1902 /* This only applies at the top level. */
1903 flags &= ~LOOKUP_DEFAULTED;
1906 if (! viable)
1907 goto out;
1909 /* Second, for F to be a viable function, there shall exist for each
1910 argument an implicit conversion sequence that converts that argument
1911 to the corresponding parameter of F. */
1913 parmnode = parmlist;
1915 for (i = 0; i < len; ++i)
1917 tree argtype, to_type;
1918 tree arg;
1919 conversion *t;
1920 int is_this;
1922 if (parmnode == void_list_node)
1923 break;
1925 if (i == 0 && first_arg != NULL_TREE)
1926 arg = first_arg;
1927 else
1928 arg = CONST_CAST_TREE (
1929 VEC_index (tree, args,
1930 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,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_length (tree, 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 = VEC_index (tree, arglist,
2070 i - (first_arg != NULL_TREE ? 1 : 0) - 1);
2071 argtype = lvalue_type (arg);
2073 if (i == 0)
2075 t = implicit_conversion (totype, argtype, arg, /*c_cast_p=*/false,
2076 flags, complain);
2077 convert_type = totype;
2079 else if (parmnode == void_list_node)
2080 break;
2081 else if (parmnode)
2083 t = implicit_conversion (TREE_VALUE (parmnode), argtype, arg,
2084 /*c_cast_p=*/false, flags, complain);
2085 convert_type = TREE_VALUE (parmnode);
2087 else
2089 t = build_identity_conv (argtype, arg);
2090 t->ellipsis_p = true;
2091 convert_type = argtype;
2094 convs[i] = t;
2095 if (! t)
2096 break;
2098 if (t->bad_p)
2100 viable = -1;
2101 reason = bad_arg_conversion_rejection (NULL_TREE, i, argtype, convert_type);
2104 if (i == 0)
2105 continue;
2107 if (parmnode)
2108 parmnode = TREE_CHAIN (parmnode);
2111 if (i < len
2112 || ! sufficient_parms_p (parmnode))
2114 int remaining = remaining_arguments (parmnode);
2115 viable = 0;
2116 reason = arity_rejection (NULL_TREE, i + remaining, len);
2119 return add_candidate (candidates, totype, first_arg, arglist, len, convs,
2120 access_path, conversion_path, viable, reason);
2123 static void
2124 build_builtin_candidate (struct z_candidate **candidates, tree fnname,
2125 tree type1, tree type2, tree *args, tree *argtypes,
2126 int flags, tsubst_flags_t complain)
2128 conversion *t;
2129 conversion **convs;
2130 size_t num_convs;
2131 int viable = 1, i;
2132 tree types[2];
2133 struct rejection_reason *reason = NULL;
2135 types[0] = type1;
2136 types[1] = type2;
2138 num_convs = args[2] ? 3 : (args[1] ? 2 : 1);
2139 convs = alloc_conversions (num_convs);
2141 /* TRUTH_*_EXPR do "contextual conversion to bool", which means explicit
2142 conversion ops are allowed. We handle that here by just checking for
2143 boolean_type_node because other operators don't ask for it. COND_EXPR
2144 also does contextual conversion to bool for the first operand, but we
2145 handle that in build_conditional_expr, and type1 here is operand 2. */
2146 if (type1 != boolean_type_node)
2147 flags |= LOOKUP_ONLYCONVERTING;
2149 for (i = 0; i < 2; ++i)
2151 if (! args[i])
2152 break;
2154 t = implicit_conversion (types[i], argtypes[i], args[i],
2155 /*c_cast_p=*/false, flags, complain);
2156 if (! t)
2158 viable = 0;
2159 /* We need something for printing the candidate. */
2160 t = build_identity_conv (types[i], NULL_TREE);
2161 reason = arg_conversion_rejection (NULL_TREE, i, argtypes[i],
2162 types[i]);
2164 else if (t->bad_p)
2166 viable = 0;
2167 reason = bad_arg_conversion_rejection (NULL_TREE, i, argtypes[i],
2168 types[i]);
2170 convs[i] = t;
2173 /* For COND_EXPR we rearranged the arguments; undo that now. */
2174 if (args[2])
2176 convs[2] = convs[1];
2177 convs[1] = convs[0];
2178 t = implicit_conversion (boolean_type_node, argtypes[2], args[2],
2179 /*c_cast_p=*/false, flags,
2180 complain);
2181 if (t)
2182 convs[0] = t;
2183 else
2185 viable = 0;
2186 reason = arg_conversion_rejection (NULL_TREE, 0, argtypes[2],
2187 boolean_type_node);
2191 add_candidate (candidates, fnname, /*first_arg=*/NULL_TREE, /*args=*/NULL,
2192 num_convs, convs,
2193 /*access_path=*/NULL_TREE,
2194 /*conversion_path=*/NULL_TREE,
2195 viable, reason);
2198 static bool
2199 is_complete (tree t)
2201 return COMPLETE_TYPE_P (complete_type (t));
2204 /* Returns nonzero if TYPE is a promoted arithmetic type. */
2206 static bool
2207 promoted_arithmetic_type_p (tree type)
2209 /* [over.built]
2211 In this section, the term promoted integral type is used to refer
2212 to those integral types which are preserved by integral promotion
2213 (including e.g. int and long but excluding e.g. char).
2214 Similarly, the term promoted arithmetic type refers to promoted
2215 integral types plus floating types. */
2216 return ((CP_INTEGRAL_TYPE_P (type)
2217 && same_type_p (type_promotes_to (type), type))
2218 || TREE_CODE (type) == REAL_TYPE);
2221 /* Create any builtin operator overload candidates for the operator in
2222 question given the converted operand types TYPE1 and TYPE2. The other
2223 args are passed through from add_builtin_candidates to
2224 build_builtin_candidate.
2226 TYPE1 and TYPE2 may not be permissible, and we must filter them.
2227 If CODE is requires candidates operands of the same type of the kind
2228 of which TYPE1 and TYPE2 are, we add both candidates
2229 CODE (TYPE1, TYPE1) and CODE (TYPE2, TYPE2). */
2231 static void
2232 add_builtin_candidate (struct z_candidate **candidates, enum tree_code code,
2233 enum tree_code code2, tree fnname, tree type1,
2234 tree type2, tree *args, tree *argtypes, int flags,
2235 tsubst_flags_t complain)
2237 switch (code)
2239 case POSTINCREMENT_EXPR:
2240 case POSTDECREMENT_EXPR:
2241 args[1] = integer_zero_node;
2242 type2 = integer_type_node;
2243 break;
2244 default:
2245 break;
2248 switch (code)
2251 /* 4 For every pair T, VQ), where T is an arithmetic or enumeration type,
2252 and VQ is either volatile or empty, there exist candidate operator
2253 functions of the form
2254 VQ T& operator++(VQ T&);
2255 T operator++(VQ T&, int);
2256 5 For every pair T, VQ), where T is an enumeration type or an arithmetic
2257 type other than bool, and VQ is either volatile or empty, there exist
2258 candidate operator functions of the form
2259 VQ T& operator--(VQ T&);
2260 T operator--(VQ T&, int);
2261 6 For every pair T, VQ), where T is a cv-qualified or cv-unqualified
2262 complete object type, and VQ is either volatile or empty, there exist
2263 candidate operator functions of the form
2264 T*VQ& operator++(T*VQ&);
2265 T*VQ& operator--(T*VQ&);
2266 T* operator++(T*VQ&, int);
2267 T* operator--(T*VQ&, int); */
2269 case POSTDECREMENT_EXPR:
2270 case PREDECREMENT_EXPR:
2271 if (TREE_CODE (type1) == BOOLEAN_TYPE)
2272 return;
2273 case POSTINCREMENT_EXPR:
2274 case PREINCREMENT_EXPR:
2275 if (ARITHMETIC_TYPE_P (type1) || TYPE_PTROB_P (type1))
2277 type1 = build_reference_type (type1);
2278 break;
2280 return;
2282 /* 7 For every cv-qualified or cv-unqualified object type T, there
2283 exist candidate operator functions of the form
2285 T& operator*(T*);
2287 8 For every function type T, there exist candidate operator functions of
2288 the form
2289 T& operator*(T*); */
2291 case INDIRECT_REF:
2292 if (TREE_CODE (type1) == POINTER_TYPE
2293 && !uses_template_parms (TREE_TYPE (type1))
2294 && (TYPE_PTROB_P (type1)
2295 || TREE_CODE (TREE_TYPE (type1)) == FUNCTION_TYPE))
2296 break;
2297 return;
2299 /* 9 For every type T, there exist candidate operator functions of the form
2300 T* operator+(T*);
2302 10For every promoted arithmetic type T, there exist candidate operator
2303 functions of the form
2304 T operator+(T);
2305 T operator-(T); */
2307 case UNARY_PLUS_EXPR: /* unary + */
2308 if (TREE_CODE (type1) == POINTER_TYPE)
2309 break;
2310 case NEGATE_EXPR:
2311 if (ARITHMETIC_TYPE_P (type1))
2312 break;
2313 return;
2315 /* 11For every promoted integral type T, there exist candidate operator
2316 functions of the form
2317 T operator~(T); */
2319 case BIT_NOT_EXPR:
2320 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1))
2321 break;
2322 return;
2324 /* 12For every quintuple C1, C2, T, CV1, CV2), where C2 is a class type, C1
2325 is the same type as C2 or is a derived class of C2, T is a complete
2326 object type or a function type, and CV1 and CV2 are cv-qualifier-seqs,
2327 there exist candidate operator functions of the form
2328 CV12 T& operator->*(CV1 C1*, CV2 T C2::*);
2329 where CV12 is the union of CV1 and CV2. */
2331 case MEMBER_REF:
2332 if (TREE_CODE (type1) == POINTER_TYPE
2333 && TYPE_PTRMEM_P (type2))
2335 tree c1 = TREE_TYPE (type1);
2336 tree c2 = TYPE_PTRMEM_CLASS_TYPE (type2);
2338 if (MAYBE_CLASS_TYPE_P (c1) && DERIVED_FROM_P (c2, c1)
2339 && (TYPE_PTRMEMFUNC_P (type2)
2340 || is_complete (TYPE_PTRMEM_POINTED_TO_TYPE (type2))))
2341 break;
2343 return;
2345 /* 13For every pair of promoted arithmetic types L and R, there exist can-
2346 didate operator functions of the form
2347 LR operator*(L, R);
2348 LR operator/(L, R);
2349 LR operator+(L, R);
2350 LR 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 bool operator!=(L, R);
2357 where LR is the result of the usual arithmetic conversions between
2358 types L and R.
2360 14For every pair of types T and I, where T is a cv-qualified or cv-
2361 unqualified complete object type and I is a promoted integral type,
2362 there exist candidate operator functions of the form
2363 T* operator+(T*, I);
2364 T& operator[](T*, I);
2365 T* operator-(T*, I);
2366 T* operator+(I, T*);
2367 T& operator[](I, T*);
2369 15For every T, where T is a pointer to complete object type, there exist
2370 candidate operator functions of the form112)
2371 ptrdiff_t operator-(T, T);
2373 16For every pointer or enumeration type T, there exist candidate operator
2374 functions of the form
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);
2380 bool operator!=(T, T);
2382 17For every pointer to member type T, there exist candidate operator
2383 functions of the form
2384 bool operator==(T, T);
2385 bool operator!=(T, T); */
2387 case MINUS_EXPR:
2388 if (TYPE_PTROB_P (type1) && TYPE_PTROB_P (type2))
2389 break;
2390 if (TYPE_PTROB_P (type1)
2391 && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2393 type2 = ptrdiff_type_node;
2394 break;
2396 case MULT_EXPR:
2397 case TRUNC_DIV_EXPR:
2398 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2399 break;
2400 return;
2402 case EQ_EXPR:
2403 case NE_EXPR:
2404 if ((TYPE_PTRMEMFUNC_P (type1) && TYPE_PTRMEMFUNC_P (type2))
2405 || (TYPE_PTRDATAMEM_P (type1) && TYPE_PTRDATAMEM_P (type2)))
2406 break;
2407 if (TYPE_PTRMEM_P (type1) && null_ptr_cst_p (args[1]))
2409 type2 = type1;
2410 break;
2412 if (TYPE_PTRMEM_P (type2) && null_ptr_cst_p (args[0]))
2414 type1 = type2;
2415 break;
2417 /* Fall through. */
2418 case LT_EXPR:
2419 case GT_EXPR:
2420 case LE_EXPR:
2421 case GE_EXPR:
2422 case MAX_EXPR:
2423 case MIN_EXPR:
2424 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2425 break;
2426 if (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
2427 break;
2428 if (TREE_CODE (type1) == ENUMERAL_TYPE
2429 && TREE_CODE (type2) == ENUMERAL_TYPE)
2430 break;
2431 if (TYPE_PTR_P (type1)
2432 && null_ptr_cst_p (args[1])
2433 && !uses_template_parms (type1))
2435 type2 = type1;
2436 break;
2438 if (null_ptr_cst_p (args[0])
2439 && TYPE_PTR_P (type2)
2440 && !uses_template_parms (type2))
2442 type1 = type2;
2443 break;
2445 return;
2447 case PLUS_EXPR:
2448 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2449 break;
2450 case ARRAY_REF:
2451 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1) && TYPE_PTROB_P (type2))
2453 type1 = ptrdiff_type_node;
2454 break;
2456 if (TYPE_PTROB_P (type1) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2458 type2 = ptrdiff_type_node;
2459 break;
2461 return;
2463 /* 18For every pair of promoted integral types L and R, there exist candi-
2464 date operator functions of the form
2465 LR operator%(L, R);
2466 LR operator&(L, R);
2467 LR operator^(L, R);
2468 LR operator|(L, R);
2469 L operator<<(L, R);
2470 L operator>>(L, R);
2471 where LR is the result of the usual arithmetic conversions between
2472 types L and R. */
2474 case TRUNC_MOD_EXPR:
2475 case BIT_AND_EXPR:
2476 case BIT_IOR_EXPR:
2477 case BIT_XOR_EXPR:
2478 case LSHIFT_EXPR:
2479 case RSHIFT_EXPR:
2480 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2481 break;
2482 return;
2484 /* 19For every triple L, VQ, R), where L is an arithmetic or enumeration
2485 type, VQ is either volatile or empty, and R is a promoted arithmetic
2486 type, there exist candidate operator functions of the form
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);
2491 VQ L& operator-=(VQ L&, R);
2493 20For every pair T, VQ), where T is any type and VQ is either volatile
2494 or empty, there exist candidate operator functions of the form
2495 T*VQ& operator=(T*VQ&, T*);
2497 21For every pair T, VQ), where T is a pointer to member type and VQ is
2498 either volatile or empty, there exist candidate operator functions of
2499 the form
2500 VQ T& operator=(VQ T&, T);
2502 22For every triple T, VQ, I), where T is a cv-qualified or cv-
2503 unqualified complete object type, VQ is either volatile or empty, and
2504 I is a promoted integral type, there exist candidate operator func-
2505 tions of the form
2506 T*VQ& operator+=(T*VQ&, I);
2507 T*VQ& operator-=(T*VQ&, I);
2509 23For every triple L, VQ, R), where L is an integral or enumeration
2510 type, VQ is either volatile or empty, and R is a promoted integral
2511 type, there exist candidate operator functions of the form
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);
2518 VQ L& operator|=(VQ L&, R); */
2520 case MODIFY_EXPR:
2521 switch (code2)
2523 case PLUS_EXPR:
2524 case MINUS_EXPR:
2525 if (TYPE_PTROB_P (type1) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2527 type2 = ptrdiff_type_node;
2528 break;
2530 case MULT_EXPR:
2531 case TRUNC_DIV_EXPR:
2532 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2533 break;
2534 return;
2536 case TRUNC_MOD_EXPR:
2537 case BIT_AND_EXPR:
2538 case BIT_IOR_EXPR:
2539 case BIT_XOR_EXPR:
2540 case LSHIFT_EXPR:
2541 case RSHIFT_EXPR:
2542 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2543 break;
2544 return;
2546 case NOP_EXPR:
2547 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2548 break;
2549 if ((TYPE_PTRMEMFUNC_P (type1) && TYPE_PTRMEMFUNC_P (type2))
2550 || (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
2551 || (TYPE_PTRDATAMEM_P (type1) && TYPE_PTRDATAMEM_P (type2))
2552 || ((TYPE_PTRMEMFUNC_P (type1)
2553 || TREE_CODE (type1) == POINTER_TYPE)
2554 && null_ptr_cst_p (args[1])))
2556 type2 = type1;
2557 break;
2559 return;
2561 default:
2562 gcc_unreachable ();
2564 type1 = build_reference_type (type1);
2565 break;
2567 case COND_EXPR:
2568 /* [over.built]
2570 For every pair of promoted arithmetic types L and R, there
2571 exist candidate operator functions of the form
2573 LR operator?(bool, L, R);
2575 where LR is the result of the usual arithmetic conversions
2576 between types L and R.
2578 For every type T, where T is a pointer or pointer-to-member
2579 type, there exist candidate operator functions of the form T
2580 operator?(bool, T, T); */
2582 if (promoted_arithmetic_type_p (type1)
2583 && promoted_arithmetic_type_p (type2))
2584 /* That's OK. */
2585 break;
2587 /* Otherwise, the types should be pointers. */
2588 if (!TYPE_PTR_OR_PTRMEM_P (type1) || !TYPE_PTR_OR_PTRMEM_P (type2))
2589 return;
2591 /* We don't check that the two types are the same; the logic
2592 below will actually create two candidates; one in which both
2593 parameter types are TYPE1, and one in which both parameter
2594 types are TYPE2. */
2595 break;
2597 case REALPART_EXPR:
2598 case IMAGPART_EXPR:
2599 if (ARITHMETIC_TYPE_P (type1))
2600 break;
2601 return;
2603 default:
2604 gcc_unreachable ();
2607 /* If we're dealing with two pointer types or two enumeral types,
2608 we need candidates for both of them. */
2609 if (type2 && !same_type_p (type1, type2)
2610 && TREE_CODE (type1) == TREE_CODE (type2)
2611 && (TREE_CODE (type1) == REFERENCE_TYPE
2612 || (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
2613 || (TYPE_PTRDATAMEM_P (type1) && TYPE_PTRDATAMEM_P (type2))
2614 || TYPE_PTRMEMFUNC_P (type1)
2615 || MAYBE_CLASS_TYPE_P (type1)
2616 || TREE_CODE (type1) == ENUMERAL_TYPE))
2618 if (TYPE_PTR_OR_PTRMEM_P (type1))
2620 tree cptype = composite_pointer_type (type1, type2,
2621 error_mark_node,
2622 error_mark_node,
2623 CPO_CONVERSION,
2624 tf_none);
2625 if (cptype != error_mark_node)
2627 build_builtin_candidate
2628 (candidates, fnname, cptype, cptype, args, argtypes,
2629 flags, complain);
2630 return;
2634 build_builtin_candidate
2635 (candidates, fnname, type1, type1, args, argtypes, flags, complain);
2636 build_builtin_candidate
2637 (candidates, fnname, type2, type2, args, argtypes, flags, complain);
2638 return;
2641 build_builtin_candidate
2642 (candidates, fnname, type1, type2, args, argtypes, flags, complain);
2645 tree
2646 type_decays_to (tree type)
2648 if (TREE_CODE (type) == ARRAY_TYPE)
2649 return build_pointer_type (TREE_TYPE (type));
2650 if (TREE_CODE (type) == FUNCTION_TYPE)
2651 return build_pointer_type (type);
2652 return type;
2655 /* There are three conditions of builtin candidates:
2657 1) bool-taking candidates. These are the same regardless of the input.
2658 2) pointer-pair taking candidates. These are generated for each type
2659 one of the input types converts to.
2660 3) arithmetic candidates. According to the standard, we should generate
2661 all of these, but I'm trying not to...
2663 Here we generate a superset of the possible candidates for this particular
2664 case. That is a subset of the full set the standard defines, plus some
2665 other cases which the standard disallows. add_builtin_candidate will
2666 filter out the invalid set. */
2668 static void
2669 add_builtin_candidates (struct z_candidate **candidates, enum tree_code code,
2670 enum tree_code code2, tree fnname, tree *args,
2671 int flags, tsubst_flags_t complain)
2673 int ref1, i;
2674 int enum_p = 0;
2675 tree type, argtypes[3], t;
2676 /* TYPES[i] is the set of possible builtin-operator parameter types
2677 we will consider for the Ith argument. */
2678 VEC(tree,gc) *types[2];
2679 unsigned ix;
2681 for (i = 0; i < 3; ++i)
2683 if (args[i])
2684 argtypes[i] = unlowered_expr_type (args[i]);
2685 else
2686 argtypes[i] = NULL_TREE;
2689 switch (code)
2691 /* 4 For every pair T, VQ), where T is an arithmetic or enumeration type,
2692 and VQ is either volatile or empty, there exist candidate operator
2693 functions of the form
2694 VQ T& operator++(VQ T&); */
2696 case POSTINCREMENT_EXPR:
2697 case PREINCREMENT_EXPR:
2698 case POSTDECREMENT_EXPR:
2699 case PREDECREMENT_EXPR:
2700 case MODIFY_EXPR:
2701 ref1 = 1;
2702 break;
2704 /* 24There also exist candidate operator functions of the form
2705 bool operator!(bool);
2706 bool operator&&(bool, bool);
2707 bool operator||(bool, bool); */
2709 case TRUTH_NOT_EXPR:
2710 build_builtin_candidate
2711 (candidates, fnname, boolean_type_node,
2712 NULL_TREE, args, argtypes, flags, complain);
2713 return;
2715 case TRUTH_ORIF_EXPR:
2716 case TRUTH_ANDIF_EXPR:
2717 build_builtin_candidate
2718 (candidates, fnname, boolean_type_node,
2719 boolean_type_node, args, argtypes, flags, complain);
2720 return;
2722 case ADDR_EXPR:
2723 case COMPOUND_EXPR:
2724 case COMPONENT_REF:
2725 return;
2727 case COND_EXPR:
2728 case EQ_EXPR:
2729 case NE_EXPR:
2730 case LT_EXPR:
2731 case LE_EXPR:
2732 case GT_EXPR:
2733 case GE_EXPR:
2734 enum_p = 1;
2735 /* Fall through. */
2737 default:
2738 ref1 = 0;
2741 types[0] = make_tree_vector ();
2742 types[1] = make_tree_vector ();
2744 for (i = 0; i < 2; ++i)
2746 if (! args[i])
2748 else if (MAYBE_CLASS_TYPE_P (argtypes[i]))
2750 tree convs;
2752 if (i == 0 && code == MODIFY_EXPR && code2 == NOP_EXPR)
2753 return;
2755 convs = lookup_conversions (argtypes[i]);
2757 if (code == COND_EXPR)
2759 if (real_lvalue_p (args[i]))
2760 VEC_safe_push (tree, gc, types[i],
2761 build_reference_type (argtypes[i]));
2763 VEC_safe_push (tree, gc, types[i],
2764 TYPE_MAIN_VARIANT (argtypes[i]));
2767 else if (! convs)
2768 return;
2770 for (; convs; convs = TREE_CHAIN (convs))
2772 type = TREE_TYPE (convs);
2774 if (i == 0 && ref1
2775 && (TREE_CODE (type) != REFERENCE_TYPE
2776 || CP_TYPE_CONST_P (TREE_TYPE (type))))
2777 continue;
2779 if (code == COND_EXPR && TREE_CODE (type) == REFERENCE_TYPE)
2780 VEC_safe_push (tree, gc, types[i], type);
2782 type = non_reference (type);
2783 if (i != 0 || ! ref1)
2785 type = cv_unqualified (type_decays_to (type));
2786 if (enum_p && TREE_CODE (type) == ENUMERAL_TYPE)
2787 VEC_safe_push (tree, gc, types[i], type);
2788 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
2789 type = type_promotes_to (type);
2792 if (! vec_member (type, types[i]))
2793 VEC_safe_push (tree, gc, types[i], type);
2796 else
2798 if (code == COND_EXPR && real_lvalue_p (args[i]))
2799 VEC_safe_push (tree, gc, types[i],
2800 build_reference_type (argtypes[i]));
2801 type = non_reference (argtypes[i]);
2802 if (i != 0 || ! ref1)
2804 type = cv_unqualified (type_decays_to (type));
2805 if (enum_p && UNSCOPED_ENUM_P (type))
2806 VEC_safe_push (tree, gc, types[i], type);
2807 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
2808 type = type_promotes_to (type);
2810 VEC_safe_push (tree, gc, types[i], type);
2814 /* Run through the possible parameter types of both arguments,
2815 creating candidates with those parameter types. */
2816 FOR_EACH_VEC_ELT_REVERSE (tree, types[0], ix, t)
2818 unsigned jx;
2819 tree u;
2821 if (!VEC_empty (tree, types[1]))
2822 FOR_EACH_VEC_ELT_REVERSE (tree, types[1], jx, u)
2823 add_builtin_candidate
2824 (candidates, code, code2, fnname, t,
2825 u, args, argtypes, flags, complain);
2826 else
2827 add_builtin_candidate
2828 (candidates, code, code2, fnname, t,
2829 NULL_TREE, args, argtypes, flags, complain);
2832 release_tree_vector (types[0]);
2833 release_tree_vector (types[1]);
2837 /* If TMPL can be successfully instantiated as indicated by
2838 EXPLICIT_TARGS and ARGLIST, adds the instantiation to CANDIDATES.
2840 TMPL is the template. EXPLICIT_TARGS are any explicit template
2841 arguments. ARGLIST is the arguments provided at the call-site.
2842 This does not change ARGLIST. The RETURN_TYPE is the desired type
2843 for conversion operators. If OBJ is NULL_TREE, FLAGS and CTYPE are
2844 as for add_function_candidate. If an OBJ is supplied, FLAGS and
2845 CTYPE are ignored, and OBJ is as for add_conv_candidate. */
2847 static struct z_candidate*
2848 add_template_candidate_real (struct z_candidate **candidates, tree tmpl,
2849 tree ctype, tree explicit_targs, tree first_arg,
2850 const VEC(tree,gc) *arglist, tree return_type,
2851 tree access_path, tree conversion_path,
2852 int flags, tree obj, unification_kind_t strict,
2853 tsubst_flags_t complain)
2855 int ntparms = DECL_NTPARMS (tmpl);
2856 tree targs = make_tree_vec (ntparms);
2857 unsigned int len = VEC_length (tree, arglist);
2858 unsigned int nargs = (first_arg == NULL_TREE ? 0 : 1) + len;
2859 unsigned int skip_without_in_chrg = 0;
2860 tree first_arg_without_in_chrg = first_arg;
2861 tree *args_without_in_chrg;
2862 unsigned int nargs_without_in_chrg;
2863 unsigned int ia, ix;
2864 tree arg;
2865 struct z_candidate *cand;
2866 tree fn;
2867 struct rejection_reason *reason = NULL;
2868 int errs;
2870 /* We don't do deduction on the in-charge parameter, the VTT
2871 parameter or 'this'. */
2872 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (tmpl))
2874 if (first_arg_without_in_chrg != NULL_TREE)
2875 first_arg_without_in_chrg = NULL_TREE;
2876 else
2877 ++skip_without_in_chrg;
2880 if ((DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (tmpl)
2881 || DECL_BASE_CONSTRUCTOR_P (tmpl))
2882 && CLASSTYPE_VBASECLASSES (DECL_CONTEXT (tmpl)))
2884 if (first_arg_without_in_chrg != NULL_TREE)
2885 first_arg_without_in_chrg = NULL_TREE;
2886 else
2887 ++skip_without_in_chrg;
2890 if (len < skip_without_in_chrg)
2891 return NULL;
2893 nargs_without_in_chrg = ((first_arg_without_in_chrg != NULL_TREE ? 1 : 0)
2894 + (len - skip_without_in_chrg));
2895 args_without_in_chrg = XALLOCAVEC (tree, nargs_without_in_chrg);
2896 ia = 0;
2897 if (first_arg_without_in_chrg != NULL_TREE)
2899 args_without_in_chrg[ia] = first_arg_without_in_chrg;
2900 ++ia;
2902 for (ix = skip_without_in_chrg;
2903 VEC_iterate (tree, arglist, ix, arg);
2904 ++ix)
2906 args_without_in_chrg[ia] = arg;
2907 ++ia;
2909 gcc_assert (ia == nargs_without_in_chrg);
2911 errs = errorcount+sorrycount;
2912 fn = fn_type_unification (tmpl, explicit_targs, targs,
2913 args_without_in_chrg,
2914 nargs_without_in_chrg,
2915 return_type, strict, flags, false);
2917 if (fn == error_mark_node)
2919 /* Don't repeat unification later if it already resulted in errors. */
2920 if (errorcount+sorrycount == errs)
2921 reason = template_unification_rejection (tmpl, explicit_targs,
2922 targs, args_without_in_chrg,
2923 nargs_without_in_chrg,
2924 return_type, strict, flags);
2925 else
2926 reason = template_unification_error_rejection ();
2927 goto fail;
2930 /* In [class.copy]:
2932 A member function template is never instantiated to perform the
2933 copy of a class object to an object of its class type.
2935 It's a little unclear what this means; the standard explicitly
2936 does allow a template to be used to copy a class. For example,
2939 struct A {
2940 A(A&);
2941 template <class T> A(const T&);
2943 const A f ();
2944 void g () { A a (f ()); }
2946 the member template will be used to make the copy. The section
2947 quoted above appears in the paragraph that forbids constructors
2948 whose only parameter is (a possibly cv-qualified variant of) the
2949 class type, and a logical interpretation is that the intent was
2950 to forbid the instantiation of member templates which would then
2951 have that form. */
2952 if (DECL_CONSTRUCTOR_P (fn) && nargs == 2)
2954 tree arg_types = FUNCTION_FIRST_USER_PARMTYPE (fn);
2955 if (arg_types && same_type_p (TYPE_MAIN_VARIANT (TREE_VALUE (arg_types)),
2956 ctype))
2958 reason = invalid_copy_with_fn_template_rejection ();
2959 goto fail;
2963 if (obj != NULL_TREE)
2964 /* Aha, this is a conversion function. */
2965 cand = add_conv_candidate (candidates, fn, obj, first_arg, arglist,
2966 access_path, conversion_path, complain);
2967 else
2968 cand = add_function_candidate (candidates, fn, ctype,
2969 first_arg, arglist, access_path,
2970 conversion_path, flags, complain);
2971 if (DECL_TI_TEMPLATE (fn) != tmpl)
2972 /* This situation can occur if a member template of a template
2973 class is specialized. Then, instantiate_template might return
2974 an instantiation of the specialization, in which case the
2975 DECL_TI_TEMPLATE field will point at the original
2976 specialization. For example:
2978 template <class T> struct S { template <class U> void f(U);
2979 template <> void f(int) {}; };
2980 S<double> sd;
2981 sd.f(3);
2983 Here, TMPL will be template <class U> S<double>::f(U).
2984 And, instantiate template will give us the specialization
2985 template <> S<double>::f(int). But, the DECL_TI_TEMPLATE field
2986 for this will point at template <class T> template <> S<T>::f(int),
2987 so that we can find the definition. For the purposes of
2988 overload resolution, however, we want the original TMPL. */
2989 cand->template_decl = build_template_info (tmpl, targs);
2990 else
2991 cand->template_decl = DECL_TEMPLATE_INFO (fn);
2992 cand->explicit_targs = explicit_targs;
2994 return cand;
2995 fail:
2996 return add_candidate (candidates, tmpl, first_arg, arglist, nargs, NULL,
2997 access_path, conversion_path, 0, reason);
3001 static struct z_candidate *
3002 add_template_candidate (struct z_candidate **candidates, tree tmpl, tree ctype,
3003 tree explicit_targs, tree first_arg,
3004 const VEC(tree,gc) *arglist, tree return_type,
3005 tree access_path, tree conversion_path, int flags,
3006 unification_kind_t strict, tsubst_flags_t complain)
3008 return
3009 add_template_candidate_real (candidates, tmpl, ctype,
3010 explicit_targs, first_arg, arglist,
3011 return_type, access_path, conversion_path,
3012 flags, NULL_TREE, strict, complain);
3016 static struct z_candidate *
3017 add_template_conv_candidate (struct z_candidate **candidates, tree tmpl,
3018 tree obj, tree first_arg,
3019 const VEC(tree,gc) *arglist,
3020 tree return_type, tree access_path,
3021 tree conversion_path, tsubst_flags_t complain)
3023 return
3024 add_template_candidate_real (candidates, tmpl, NULL_TREE, NULL_TREE,
3025 first_arg, arglist, return_type, access_path,
3026 conversion_path, 0, obj, DEDUCE_CONV,
3027 complain);
3030 /* The CANDS are the set of candidates that were considered for
3031 overload resolution. Return the set of viable candidates, or CANDS
3032 if none are viable. If any of the candidates were viable, set
3033 *ANY_VIABLE_P to true. STRICT_P is true if a candidate should be
3034 considered viable only if it is strictly viable. */
3036 static struct z_candidate*
3037 splice_viable (struct z_candidate *cands,
3038 bool strict_p,
3039 bool *any_viable_p)
3041 struct z_candidate *viable;
3042 struct z_candidate **last_viable;
3043 struct z_candidate **cand;
3045 /* Be strict inside templates, since build_over_call won't actually
3046 do the conversions to get pedwarns. */
3047 if (processing_template_decl)
3048 strict_p = true;
3050 viable = NULL;
3051 last_viable = &viable;
3052 *any_viable_p = false;
3054 cand = &cands;
3055 while (*cand)
3057 struct z_candidate *c = *cand;
3058 if (strict_p ? c->viable == 1 : c->viable)
3060 *last_viable = c;
3061 *cand = c->next;
3062 c->next = NULL;
3063 last_viable = &c->next;
3064 *any_viable_p = true;
3066 else
3067 cand = &c->next;
3070 return viable ? viable : cands;
3073 static bool
3074 any_strictly_viable (struct z_candidate *cands)
3076 for (; cands; cands = cands->next)
3077 if (cands->viable == 1)
3078 return true;
3079 return false;
3082 /* OBJ is being used in an expression like "OBJ.f (...)". In other
3083 words, it is about to become the "this" pointer for a member
3084 function call. Take the address of the object. */
3086 static tree
3087 build_this (tree obj)
3089 /* In a template, we are only concerned about the type of the
3090 expression, so we can take a shortcut. */
3091 if (processing_template_decl)
3092 return build_address (obj);
3094 return cp_build_addr_expr (obj, tf_warning_or_error);
3097 /* Returns true iff functions are equivalent. Equivalent functions are
3098 not '==' only if one is a function-local extern function or if
3099 both are extern "C". */
3101 static inline int
3102 equal_functions (tree fn1, tree fn2)
3104 if (TREE_CODE (fn1) != TREE_CODE (fn2))
3105 return 0;
3106 if (TREE_CODE (fn1) == TEMPLATE_DECL)
3107 return fn1 == fn2;
3108 if (DECL_LOCAL_FUNCTION_P (fn1) || DECL_LOCAL_FUNCTION_P (fn2)
3109 || DECL_EXTERN_C_FUNCTION_P (fn1))
3110 return decls_match (fn1, fn2);
3111 return fn1 == fn2;
3114 /* Print information about a candidate being rejected due to INFO. */
3116 static void
3117 print_conversion_rejection (location_t loc, struct conversion_info *info)
3119 if (info->n_arg == -1)
3120 /* Conversion of implicit `this' argument failed. */
3121 inform (loc, " no known conversion for implicit "
3122 "%<this%> parameter from %qT to %qT",
3123 info->from_type, info->to_type);
3124 else
3125 inform (loc, " no known conversion for argument %d from %qT to %qT",
3126 info->n_arg+1, info->from_type, info->to_type);
3129 /* Print information about a candidate with WANT parameters and we found
3130 HAVE. */
3132 static void
3133 print_arity_information (location_t loc, unsigned int have, unsigned int want)
3135 inform_n (loc, want,
3136 " candidate expects %d argument, %d provided",
3137 " candidate expects %d arguments, %d provided",
3138 want, have);
3141 /* Print information about one overload candidate CANDIDATE. MSGSTR
3142 is the text to print before the candidate itself.
3144 NOTE: Unlike most diagnostic functions in GCC, MSGSTR is expected
3145 to have been run through gettext by the caller. This wart makes
3146 life simpler in print_z_candidates and for the translators. */
3148 static void
3149 print_z_candidate (location_t loc, const char *msgstr,
3150 struct z_candidate *candidate)
3152 const char *msg = (msgstr == NULL
3153 ? ""
3154 : ACONCAT ((msgstr, " ", NULL)));
3155 location_t cloc = location_of (candidate->fn);
3157 if (TREE_CODE (candidate->fn) == IDENTIFIER_NODE)
3159 cloc = loc;
3160 if (candidate->num_convs == 3)
3161 inform (cloc, "%s%D(%T, %T, %T) <built-in>", msg, candidate->fn,
3162 candidate->convs[0]->type,
3163 candidate->convs[1]->type,
3164 candidate->convs[2]->type);
3165 else if (candidate->num_convs == 2)
3166 inform (cloc, "%s%D(%T, %T) <built-in>", msg, candidate->fn,
3167 candidate->convs[0]->type,
3168 candidate->convs[1]->type);
3169 else
3170 inform (cloc, "%s%D(%T) <built-in>", msg, candidate->fn,
3171 candidate->convs[0]->type);
3173 else if (TYPE_P (candidate->fn))
3174 inform (cloc, "%s%T <conversion>", msg, candidate->fn);
3175 else if (candidate->viable == -1)
3176 inform (cloc, "%s%#D <near match>", msg, candidate->fn);
3177 else if (DECL_DELETED_FN (STRIP_TEMPLATE (candidate->fn)))
3178 inform (cloc, "%s%#D <deleted>", msg, candidate->fn);
3179 else
3180 inform (cloc, "%s%#D", msg, candidate->fn);
3181 /* Give the user some information about why this candidate failed. */
3182 if (candidate->reason != NULL)
3184 struct rejection_reason *r = candidate->reason;
3186 switch (r->code)
3188 case rr_arity:
3189 print_arity_information (cloc, r->u.arity.actual,
3190 r->u.arity.expected);
3191 break;
3192 case rr_arg_conversion:
3193 print_conversion_rejection (cloc, &r->u.conversion);
3194 break;
3195 case rr_bad_arg_conversion:
3196 print_conversion_rejection (cloc, &r->u.bad_conversion);
3197 break;
3198 case rr_explicit_conversion:
3199 inform (cloc, " return type %qT of explicit conversion function "
3200 "cannot be converted to %qT with a qualification "
3201 "conversion", r->u.conversion.from_type,
3202 r->u.conversion.to_type);
3203 break;
3204 case rr_template_conversion:
3205 inform (cloc, " conversion from return type %qT of template "
3206 "conversion function specialization to %qT is not an "
3207 "exact match", r->u.conversion.from_type,
3208 r->u.conversion.to_type);
3209 break;
3210 case rr_template_unification:
3211 /* We use template_unification_error_rejection if unification caused
3212 actual non-SFINAE errors, in which case we don't need to repeat
3213 them here. */
3214 if (r->u.template_unification.tmpl == NULL_TREE)
3216 inform (cloc, " substitution of deduced template arguments "
3217 "resulted in errors seen above");
3218 break;
3220 /* Re-run template unification with diagnostics. */
3221 inform (cloc, " template argument deduction/substitution failed:");
3222 fn_type_unification (r->u.template_unification.tmpl,
3223 r->u.template_unification.explicit_targs,
3224 (make_tree_vec
3225 (r->u.template_unification.num_targs)),
3226 r->u.template_unification.args,
3227 r->u.template_unification.nargs,
3228 r->u.template_unification.return_type,
3229 r->u.template_unification.strict,
3230 r->u.template_unification.flags,
3231 true);
3232 break;
3233 case rr_invalid_copy:
3234 inform (cloc,
3235 " a constructor taking a single argument of its own "
3236 "class type is invalid");
3237 break;
3238 case rr_none:
3239 default:
3240 /* This candidate didn't have any issues or we failed to
3241 handle a particular code. Either way... */
3242 gcc_unreachable ();
3247 static void
3248 print_z_candidates (location_t loc, struct z_candidate *candidates)
3250 struct z_candidate *cand1;
3251 struct z_candidate **cand2;
3252 int n_candidates;
3254 if (!candidates)
3255 return;
3257 /* Remove non-viable deleted candidates. */
3258 cand1 = candidates;
3259 for (cand2 = &cand1; *cand2; )
3261 if (TREE_CODE ((*cand2)->fn) == FUNCTION_DECL
3262 && !(*cand2)->viable
3263 && DECL_DELETED_FN ((*cand2)->fn))
3264 *cand2 = (*cand2)->next;
3265 else
3266 cand2 = &(*cand2)->next;
3268 /* ...if there are any non-deleted ones. */
3269 if (cand1)
3270 candidates = cand1;
3272 /* There may be duplicates in the set of candidates. We put off
3273 checking this condition as long as possible, since we have no way
3274 to eliminate duplicates from a set of functions in less than n^2
3275 time. Now we are about to emit an error message, so it is more
3276 permissible to go slowly. */
3277 for (cand1 = candidates; cand1; cand1 = cand1->next)
3279 tree fn = cand1->fn;
3280 /* Skip builtin candidates and conversion functions. */
3281 if (!DECL_P (fn))
3282 continue;
3283 cand2 = &cand1->next;
3284 while (*cand2)
3286 if (DECL_P ((*cand2)->fn)
3287 && equal_functions (fn, (*cand2)->fn))
3288 *cand2 = (*cand2)->next;
3289 else
3290 cand2 = &(*cand2)->next;
3294 for (n_candidates = 0, cand1 = candidates; cand1; cand1 = cand1->next)
3295 n_candidates++;
3297 inform_n (loc, n_candidates, "candidate is:", "candidates are:");
3298 for (; candidates; candidates = candidates->next)
3299 print_z_candidate (loc, NULL, candidates);
3302 /* USER_SEQ is a user-defined conversion sequence, beginning with a
3303 USER_CONV. STD_SEQ is the standard conversion sequence applied to
3304 the result of the conversion function to convert it to the final
3305 desired type. Merge the two sequences into a single sequence,
3306 and return the merged sequence. */
3308 static conversion *
3309 merge_conversion_sequences (conversion *user_seq, conversion *std_seq)
3311 conversion **t;
3312 bool bad = user_seq->bad_p;
3314 gcc_assert (user_seq->kind == ck_user);
3316 /* Find the end of the second conversion sequence. */
3317 for (t = &std_seq; (*t)->kind != ck_identity; t = &((*t)->u.next))
3319 /* The entire sequence is a user-conversion sequence. */
3320 (*t)->user_conv_p = true;
3321 if (bad)
3322 (*t)->bad_p = true;
3325 /* Replace the identity conversion with the user conversion
3326 sequence. */
3327 *t = user_seq;
3329 return std_seq;
3332 /* Handle overload resolution for initializing an object of class type from
3333 an initializer list. First we look for a suitable constructor that
3334 takes a std::initializer_list; if we don't find one, we then look for a
3335 non-list constructor.
3337 Parameters are as for add_candidates, except that the arguments are in
3338 the form of a CONSTRUCTOR (the initializer list) rather than a VEC, and
3339 the RETURN_TYPE parameter is replaced by TOTYPE, the desired type. */
3341 static void
3342 add_list_candidates (tree fns, tree first_arg,
3343 tree init_list, tree totype,
3344 tree explicit_targs, bool template_only,
3345 tree conversion_path, tree access_path,
3346 int flags,
3347 struct z_candidate **candidates,
3348 tsubst_flags_t complain)
3350 VEC(tree,gc) *args;
3352 gcc_assert (*candidates == NULL);
3354 /* We're looking for a ctor for list-initialization. */
3355 flags |= LOOKUP_LIST_INIT_CTOR;
3356 /* And we don't allow narrowing conversions. We also use this flag to
3357 avoid the copy constructor call for copy-list-initialization. */
3358 flags |= LOOKUP_NO_NARROWING;
3360 /* Always use the default constructor if the list is empty (DR 990). */
3361 if (CONSTRUCTOR_NELTS (init_list) == 0
3362 && TYPE_HAS_DEFAULT_CONSTRUCTOR (totype))
3364 /* If the class has a list ctor, try passing the list as a single
3365 argument first, but only consider list ctors. */
3366 else if (TYPE_HAS_LIST_CTOR (totype))
3368 flags |= LOOKUP_LIST_ONLY;
3369 args = make_tree_vector_single (init_list);
3370 add_candidates (fns, first_arg, args, NULL_TREE,
3371 explicit_targs, template_only, conversion_path,
3372 access_path, flags, candidates, complain);
3373 if (any_strictly_viable (*candidates))
3374 return;
3377 args = ctor_to_vec (init_list);
3379 /* We aren't looking for list-ctors anymore. */
3380 flags &= ~LOOKUP_LIST_ONLY;
3381 /* We allow more user-defined conversions within an init-list. */
3382 flags &= ~LOOKUP_NO_CONVERSION;
3384 add_candidates (fns, first_arg, args, NULL_TREE,
3385 explicit_targs, template_only, conversion_path,
3386 access_path, flags, candidates, complain);
3389 /* Returns the best overload candidate to perform the requested
3390 conversion. This function is used for three the overloading situations
3391 described in [over.match.copy], [over.match.conv], and [over.match.ref].
3392 If TOTYPE is a REFERENCE_TYPE, we're trying to find a direct binding as
3393 per [dcl.init.ref], so we ignore temporary bindings. */
3395 static struct z_candidate *
3396 build_user_type_conversion_1 (tree totype, tree expr, int flags,
3397 tsubst_flags_t complain)
3399 struct z_candidate *candidates, *cand;
3400 tree fromtype;
3401 tree ctors = NULL_TREE;
3402 tree conv_fns = NULL_TREE;
3403 conversion *conv = NULL;
3404 tree first_arg = NULL_TREE;
3405 VEC(tree,gc) *args = NULL;
3406 bool any_viable_p;
3407 int convflags;
3409 if (!expr)
3410 return NULL;
3412 fromtype = TREE_TYPE (expr);
3414 /* We represent conversion within a hierarchy using RVALUE_CONV and
3415 BASE_CONV, as specified by [over.best.ics]; these become plain
3416 constructor calls, as specified in [dcl.init]. */
3417 gcc_assert (!MAYBE_CLASS_TYPE_P (fromtype) || !MAYBE_CLASS_TYPE_P (totype)
3418 || !DERIVED_FROM_P (totype, fromtype));
3420 if (MAYBE_CLASS_TYPE_P (totype))
3421 /* Use lookup_fnfields_slot instead of lookup_fnfields to avoid
3422 creating a garbage BASELINK; constructors can't be inherited. */
3423 ctors = lookup_fnfields_slot (totype, complete_ctor_identifier);
3425 if (MAYBE_CLASS_TYPE_P (fromtype))
3427 tree to_nonref = non_reference (totype);
3428 if (same_type_ignoring_top_level_qualifiers_p (to_nonref, fromtype) ||
3429 (CLASS_TYPE_P (to_nonref) && CLASS_TYPE_P (fromtype)
3430 && DERIVED_FROM_P (to_nonref, fromtype)))
3432 /* [class.conv.fct] A conversion function is never used to
3433 convert a (possibly cv-qualified) object to the (possibly
3434 cv-qualified) same object type (or a reference to it), to a
3435 (possibly cv-qualified) base class of that type (or a
3436 reference to it)... */
3438 else
3439 conv_fns = lookup_conversions (fromtype);
3442 candidates = 0;
3443 flags |= LOOKUP_NO_CONVERSION;
3444 if (BRACE_ENCLOSED_INITIALIZER_P (expr))
3445 flags |= LOOKUP_NO_NARROWING;
3447 /* It's OK to bind a temporary for converting constructor arguments, but
3448 not in converting the return value of a conversion operator. */
3449 convflags = ((flags & LOOKUP_NO_TEMP_BIND) | LOOKUP_NO_CONVERSION);
3450 flags &= ~LOOKUP_NO_TEMP_BIND;
3452 if (ctors)
3454 int ctorflags = flags;
3456 first_arg = build_int_cst (build_pointer_type (totype), 0);
3458 /* We should never try to call the abstract or base constructor
3459 from here. */
3460 gcc_assert (!DECL_HAS_IN_CHARGE_PARM_P (OVL_CURRENT (ctors))
3461 && !DECL_HAS_VTT_PARM_P (OVL_CURRENT (ctors)));
3463 if (BRACE_ENCLOSED_INITIALIZER_P (expr))
3465 /* List-initialization. */
3466 add_list_candidates (ctors, first_arg, expr, totype, NULL_TREE,
3467 false, TYPE_BINFO (totype), TYPE_BINFO (totype),
3468 ctorflags, &candidates, complain);
3470 else
3472 args = make_tree_vector_single (expr);
3473 add_candidates (ctors, first_arg, args, NULL_TREE, NULL_TREE, false,
3474 TYPE_BINFO (totype), TYPE_BINFO (totype),
3475 ctorflags, &candidates, complain);
3478 for (cand = candidates; cand; cand = cand->next)
3480 cand->second_conv = build_identity_conv (totype, NULL_TREE);
3482 /* If totype isn't a reference, and LOOKUP_NO_TEMP_BIND isn't
3483 set, then this is copy-initialization. In that case, "The
3484 result of the call is then used to direct-initialize the
3485 object that is the destination of the copy-initialization."
3486 [dcl.init]
3488 We represent this in the conversion sequence with an
3489 rvalue conversion, which means a constructor call. */
3490 if (TREE_CODE (totype) != REFERENCE_TYPE
3491 && !(convflags & LOOKUP_NO_TEMP_BIND))
3492 cand->second_conv
3493 = build_conv (ck_rvalue, totype, cand->second_conv);
3497 if (conv_fns)
3498 first_arg = build_this (expr);
3500 for (; conv_fns; conv_fns = TREE_CHAIN (conv_fns))
3502 tree conversion_path = TREE_PURPOSE (conv_fns);
3503 struct z_candidate *old_candidates;
3505 /* If we are called to convert to a reference type, we are trying to
3506 find a direct binding, so don't even consider temporaries. If
3507 we don't find a direct binding, the caller will try again to
3508 look for a temporary binding. */
3509 if (TREE_CODE (totype) == REFERENCE_TYPE)
3510 convflags |= LOOKUP_NO_TEMP_BIND;
3512 old_candidates = candidates;
3513 add_candidates (TREE_VALUE (conv_fns), first_arg, NULL, totype,
3514 NULL_TREE, false,
3515 conversion_path, TYPE_BINFO (fromtype),
3516 flags, &candidates, complain);
3518 for (cand = candidates; cand != old_candidates; cand = cand->next)
3520 tree rettype = TREE_TYPE (TREE_TYPE (cand->fn));
3521 conversion *ics
3522 = implicit_conversion (totype,
3523 rettype,
3525 /*c_cast_p=*/false, convflags,
3526 complain);
3528 /* If LOOKUP_NO_TEMP_BIND isn't set, then this is
3529 copy-initialization. In that case, "The result of the
3530 call is then used to direct-initialize the object that is
3531 the destination of the copy-initialization." [dcl.init]
3533 We represent this in the conversion sequence with an
3534 rvalue conversion, which means a constructor call. But
3535 don't add a second rvalue conversion if there's already
3536 one there. Which there really shouldn't be, but it's
3537 harmless since we'd add it here anyway. */
3538 if (ics && MAYBE_CLASS_TYPE_P (totype) && ics->kind != ck_rvalue
3539 && !(convflags & LOOKUP_NO_TEMP_BIND))
3540 ics = build_conv (ck_rvalue, totype, ics);
3542 cand->second_conv = ics;
3544 if (!ics)
3546 cand->viable = 0;
3547 cand->reason = arg_conversion_rejection (NULL_TREE, -1,
3548 rettype, totype);
3550 else if (DECL_NONCONVERTING_P (cand->fn)
3551 && ics->rank > cr_exact)
3553 /* 13.3.1.5: For direct-initialization, those explicit
3554 conversion functions that are not hidden within S and
3555 yield type T or a type that can be converted to type T
3556 with a qualification conversion (4.4) are also candidate
3557 functions. */
3558 /* 13.3.1.6 doesn't have a parallel restriction, but it should;
3559 I've raised this issue with the committee. --jason 9/2011 */
3560 cand->viable = -1;
3561 cand->reason = explicit_conversion_rejection (rettype, totype);
3563 else if (cand->viable == 1 && ics->bad_p)
3565 cand->viable = -1;
3566 cand->reason
3567 = bad_arg_conversion_rejection (NULL_TREE, -1,
3568 rettype, totype);
3570 else if (primary_template_instantiation_p (cand->fn)
3571 && ics->rank > cr_exact)
3573 /* 13.3.3.1.2: If the user-defined conversion is specified by
3574 a specialization of a conversion function template, the
3575 second standard conversion sequence shall have exact match
3576 rank. */
3577 cand->viable = -1;
3578 cand->reason = template_conversion_rejection (rettype, totype);
3583 candidates = splice_viable (candidates, pedantic, &any_viable_p);
3584 if (!any_viable_p)
3586 if (args)
3587 release_tree_vector (args);
3588 return NULL;
3591 cand = tourney (candidates, complain);
3592 if (cand == 0)
3594 if (complain & tf_error)
3596 error ("conversion from %qT to %qT is ambiguous",
3597 fromtype, totype);
3598 print_z_candidates (location_of (expr), candidates);
3601 cand = candidates; /* any one will do */
3602 cand->second_conv = build_ambiguous_conv (totype, expr);
3603 cand->second_conv->user_conv_p = true;
3604 if (!any_strictly_viable (candidates))
3605 cand->second_conv->bad_p = true;
3606 /* If there are viable candidates, don't set ICS_BAD_FLAG; an
3607 ambiguous conversion is no worse than another user-defined
3608 conversion. */
3610 return cand;
3613 /* Build the user conversion sequence. */
3614 conv = build_conv
3615 (ck_user,
3616 (DECL_CONSTRUCTOR_P (cand->fn)
3617 ? totype : non_reference (TREE_TYPE (TREE_TYPE (cand->fn)))),
3618 build_identity_conv (TREE_TYPE (expr), expr));
3619 conv->cand = cand;
3620 if (cand->viable == -1)
3621 conv->bad_p = true;
3623 /* Remember that this was a list-initialization. */
3624 if (flags & LOOKUP_NO_NARROWING)
3625 conv->check_narrowing = true;
3627 /* Combine it with the second conversion sequence. */
3628 cand->second_conv = merge_conversion_sequences (conv,
3629 cand->second_conv);
3631 return cand;
3634 /* Wrapper for above. */
3636 tree
3637 build_user_type_conversion (tree totype, tree expr, int flags,
3638 tsubst_flags_t complain)
3640 struct z_candidate *cand;
3641 tree ret;
3643 bool subtime = timevar_cond_start (TV_OVERLOAD);
3644 cand = build_user_type_conversion_1 (totype, expr, flags, complain);
3646 if (cand)
3648 if (cand->second_conv->kind == ck_ambig)
3649 ret = error_mark_node;
3650 else
3652 expr = convert_like (cand->second_conv, expr, complain);
3653 ret = convert_from_reference (expr);
3656 else
3657 ret = NULL_TREE;
3659 timevar_cond_stop (TV_OVERLOAD, subtime);
3660 return ret;
3663 /* Subroutine of convert_nontype_argument.
3665 EXPR is an argument for a template non-type parameter of integral or
3666 enumeration type. Do any necessary conversions (that are permitted for
3667 non-type arguments) to convert it to the parameter type.
3669 If conversion is successful, returns the converted expression;
3670 otherwise, returns error_mark_node. */
3672 tree
3673 build_integral_nontype_arg_conv (tree type, tree expr, tsubst_flags_t complain)
3675 conversion *conv;
3676 void *p;
3677 tree t;
3678 location_t loc = EXPR_LOC_OR_HERE (expr);
3680 if (error_operand_p (expr))
3681 return error_mark_node;
3683 gcc_assert (INTEGRAL_OR_ENUMERATION_TYPE_P (type));
3685 /* Get the high-water mark for the CONVERSION_OBSTACK. */
3686 p = conversion_obstack_alloc (0);
3688 conv = implicit_conversion (type, TREE_TYPE (expr), expr,
3689 /*c_cast_p=*/false,
3690 LOOKUP_IMPLICIT, complain);
3692 /* for a non-type template-parameter of integral or
3693 enumeration type, integral promotions (4.5) and integral
3694 conversions (4.7) are applied. */
3695 /* It should be sufficient to check the outermost conversion step, since
3696 there are no qualification conversions to integer type. */
3697 if (conv)
3698 switch (conv->kind)
3700 /* A conversion function is OK. If it isn't constexpr, we'll
3701 complain later that the argument isn't constant. */
3702 case ck_user:
3703 /* The lvalue-to-rvalue conversion is OK. */
3704 case ck_rvalue:
3705 case ck_identity:
3706 break;
3708 case ck_std:
3709 t = next_conversion (conv)->type;
3710 if (INTEGRAL_OR_ENUMERATION_TYPE_P (t))
3711 break;
3713 if (complain & tf_error)
3714 error_at (loc, "conversion from %qT to %qT not considered for "
3715 "non-type template argument", t, type);
3716 /* and fall through. */
3718 default:
3719 conv = NULL;
3720 break;
3723 if (conv)
3724 expr = convert_like (conv, expr, complain);
3725 else
3726 expr = error_mark_node;
3728 /* Free all the conversions we allocated. */
3729 obstack_free (&conversion_obstack, p);
3731 return expr;
3734 /* Do any initial processing on the arguments to a function call. */
3736 static VEC(tree,gc) *
3737 resolve_args (VEC(tree,gc) *args, tsubst_flags_t complain)
3739 unsigned int ix;
3740 tree arg;
3742 FOR_EACH_VEC_ELT (tree, args, ix, arg)
3744 if (error_operand_p (arg))
3745 return NULL;
3746 else if (VOID_TYPE_P (TREE_TYPE (arg)))
3748 if (complain & tf_error)
3749 error ("invalid use of void expression");
3750 return NULL;
3752 else if (invalid_nonstatic_memfn_p (arg, complain))
3753 return NULL;
3755 return args;
3758 /* Perform overload resolution on FN, which is called with the ARGS.
3760 Return the candidate function selected by overload resolution, or
3761 NULL if the event that overload resolution failed. In the case
3762 that overload resolution fails, *CANDIDATES will be the set of
3763 candidates considered, and ANY_VIABLE_P will be set to true or
3764 false to indicate whether or not any of the candidates were
3765 viable.
3767 The ARGS should already have gone through RESOLVE_ARGS before this
3768 function is called. */
3770 static struct z_candidate *
3771 perform_overload_resolution (tree fn,
3772 const VEC(tree,gc) *args,
3773 struct z_candidate **candidates,
3774 bool *any_viable_p, tsubst_flags_t complain)
3776 struct z_candidate *cand;
3777 tree explicit_targs;
3778 int template_only;
3780 bool subtime = timevar_cond_start (TV_OVERLOAD);
3782 explicit_targs = NULL_TREE;
3783 template_only = 0;
3785 *candidates = NULL;
3786 *any_viable_p = true;
3788 /* Check FN. */
3789 gcc_assert (TREE_CODE (fn) == FUNCTION_DECL
3790 || TREE_CODE (fn) == TEMPLATE_DECL
3791 || TREE_CODE (fn) == OVERLOAD
3792 || TREE_CODE (fn) == TEMPLATE_ID_EXPR);
3794 if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
3796 explicit_targs = TREE_OPERAND (fn, 1);
3797 fn = TREE_OPERAND (fn, 0);
3798 template_only = 1;
3801 /* Add the various candidate functions. */
3802 add_candidates (fn, NULL_TREE, args, NULL_TREE,
3803 explicit_targs, template_only,
3804 /*conversion_path=*/NULL_TREE,
3805 /*access_path=*/NULL_TREE,
3806 LOOKUP_NORMAL,
3807 candidates, complain);
3809 *candidates = splice_viable (*candidates, pedantic, any_viable_p);
3810 if (*any_viable_p)
3811 cand = tourney (*candidates, complain);
3812 else
3813 cand = NULL;
3815 timevar_cond_stop (TV_OVERLOAD, subtime);
3816 return cand;
3819 /* Print an error message about being unable to build a call to FN with
3820 ARGS. ANY_VIABLE_P indicates whether any candidate functions could
3821 be located; CANDIDATES is a possibly empty list of such
3822 functions. */
3824 static void
3825 print_error_for_call_failure (tree fn, VEC(tree,gc) *args, bool any_viable_p,
3826 struct z_candidate *candidates)
3828 tree name = DECL_NAME (OVL_CURRENT (fn));
3829 location_t loc = location_of (name);
3831 if (!any_viable_p)
3832 error_at (loc, "no matching function for call to %<%D(%A)%>",
3833 name, build_tree_list_vec (args));
3834 else
3835 error_at (loc, "call of overloaded %<%D(%A)%> is ambiguous",
3836 name, build_tree_list_vec (args));
3837 if (candidates)
3838 print_z_candidates (loc, candidates);
3841 /* Return an expression for a call to FN (a namespace-scope function,
3842 or a static member function) with the ARGS. This may change
3843 ARGS. */
3845 tree
3846 build_new_function_call (tree fn, VEC(tree,gc) **args, bool koenig_p,
3847 tsubst_flags_t complain)
3849 struct z_candidate *candidates, *cand;
3850 bool any_viable_p;
3851 void *p;
3852 tree result;
3854 if (args != NULL && *args != NULL)
3856 *args = resolve_args (*args, complain);
3857 if (*args == NULL)
3858 return error_mark_node;
3861 if (flag_tm)
3862 tm_malloc_replacement (fn);
3864 /* If this function was found without using argument dependent
3865 lookup, then we want to ignore any undeclared friend
3866 functions. */
3867 if (!koenig_p)
3869 tree orig_fn = fn;
3871 fn = remove_hidden_names (fn);
3872 if (!fn)
3874 if (complain & tf_error)
3875 print_error_for_call_failure (orig_fn, *args, false, NULL);
3876 return error_mark_node;
3880 /* Get the high-water mark for the CONVERSION_OBSTACK. */
3881 p = conversion_obstack_alloc (0);
3883 cand = perform_overload_resolution (fn, *args, &candidates, &any_viable_p,
3884 complain);
3886 if (!cand)
3888 if (complain & tf_error)
3890 if (!any_viable_p && candidates && ! candidates->next
3891 && (TREE_CODE (candidates->fn) == FUNCTION_DECL))
3892 return cp_build_function_call_vec (candidates->fn, args, complain);
3893 if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
3894 fn = TREE_OPERAND (fn, 0);
3895 print_error_for_call_failure (fn, *args, any_viable_p, candidates);
3897 result = error_mark_node;
3899 else
3901 int flags = LOOKUP_NORMAL;
3902 /* If fn is template_id_expr, the call has explicit template arguments
3903 (e.g. func<int>(5)), communicate this info to build_over_call
3904 through flags so that later we can use it to decide whether to warn
3905 about peculiar null pointer conversion. */
3906 if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
3907 flags |= LOOKUP_EXPLICIT_TMPL_ARGS;
3908 result = build_over_call (cand, flags, complain);
3911 /* Free all the conversions we allocated. */
3912 obstack_free (&conversion_obstack, p);
3914 return result;
3917 /* Build a call to a global operator new. FNNAME is the name of the
3918 operator (either "operator new" or "operator new[]") and ARGS are
3919 the arguments provided. This may change ARGS. *SIZE points to the
3920 total number of bytes required by the allocation, and is updated if
3921 that is changed here. *COOKIE_SIZE is non-NULL if a cookie should
3922 be used. If this function determines that no cookie should be
3923 used, after all, *COOKIE_SIZE is set to NULL_TREE. If SIZE_CHECK
3924 is not NULL_TREE, it is evaluated before calculating the final
3925 array size, and if it fails, the array size is replaced with
3926 (size_t)-1 (usually triggering a std::bad_alloc exception). If FN
3927 is non-NULL, it will be set, upon return, to the allocation
3928 function called. */
3930 tree
3931 build_operator_new_call (tree fnname, VEC(tree,gc) **args,
3932 tree *size, tree *cookie_size, tree size_check,
3933 tree *fn, tsubst_flags_t complain)
3935 tree original_size = *size;
3936 tree fns;
3937 struct z_candidate *candidates;
3938 struct z_candidate *cand;
3939 bool any_viable_p;
3941 if (fn)
3942 *fn = NULL_TREE;
3943 /* Set to (size_t)-1 if the size check fails. */
3944 if (size_check != NULL_TREE)
3945 *size = fold_build3 (COND_EXPR, sizetype, size_check,
3946 original_size, TYPE_MAX_VALUE (sizetype));
3947 VEC_safe_insert (tree, gc, *args, 0, *size);
3948 *args = resolve_args (*args, complain);
3949 if (*args == NULL)
3950 return error_mark_node;
3952 /* Based on:
3954 [expr.new]
3956 If this lookup fails to find the name, or if the allocated type
3957 is not a class type, the allocation function's name is looked
3958 up in the global scope.
3960 we disregard block-scope declarations of "operator new". */
3961 fns = lookup_function_nonclass (fnname, *args, /*block_p=*/false);
3963 /* Figure out what function is being called. */
3964 cand = perform_overload_resolution (fns, *args, &candidates, &any_viable_p,
3965 complain);
3967 /* If no suitable function could be found, issue an error message
3968 and give up. */
3969 if (!cand)
3971 if (complain & tf_error)
3972 print_error_for_call_failure (fns, *args, any_viable_p, candidates);
3973 return error_mark_node;
3976 /* If a cookie is required, add some extra space. Whether
3977 or not a cookie is required cannot be determined until
3978 after we know which function was called. */
3979 if (*cookie_size)
3981 bool use_cookie = true;
3982 if (!abi_version_at_least (2))
3984 /* In G++ 3.2, the check was implemented incorrectly; it
3985 looked at the placement expression, rather than the
3986 type of the function. */
3987 if (VEC_length (tree, *args) == 2
3988 && same_type_p (TREE_TYPE (VEC_index (tree, *args, 1)),
3989 ptr_type_node))
3990 use_cookie = false;
3992 else
3994 tree arg_types;
3996 arg_types = TYPE_ARG_TYPES (TREE_TYPE (cand->fn));
3997 /* Skip the size_t parameter. */
3998 arg_types = TREE_CHAIN (arg_types);
3999 /* Check the remaining parameters (if any). */
4000 if (arg_types
4001 && TREE_CHAIN (arg_types) == void_list_node
4002 && same_type_p (TREE_VALUE (arg_types),
4003 ptr_type_node))
4004 use_cookie = false;
4006 /* If we need a cookie, adjust the number of bytes allocated. */
4007 if (use_cookie)
4009 /* Update the total size. */
4010 *size = size_binop (PLUS_EXPR, original_size, *cookie_size);
4011 /* Set to (size_t)-1 if the size check fails. */
4012 gcc_assert (size_check != NULL_TREE);
4013 *size = fold_build3 (COND_EXPR, sizetype, size_check,
4014 *size, TYPE_MAX_VALUE (sizetype));
4015 /* Update the argument list to reflect the adjusted size. */
4016 VEC_replace (tree, *args, 0, *size);
4018 else
4019 *cookie_size = NULL_TREE;
4022 /* Tell our caller which function we decided to call. */
4023 if (fn)
4024 *fn = cand->fn;
4026 /* Build the CALL_EXPR. */
4027 return build_over_call (cand, LOOKUP_NORMAL, complain);
4030 /* Build a new call to operator(). This may change ARGS. */
4032 static tree
4033 build_op_call_1 (tree obj, VEC(tree,gc) **args, tsubst_flags_t complain)
4035 struct z_candidate *candidates = 0, *cand;
4036 tree fns, convs, first_mem_arg = NULL_TREE;
4037 tree type = TREE_TYPE (obj);
4038 bool any_viable_p;
4039 tree result = NULL_TREE;
4040 void *p;
4042 if (error_operand_p (obj))
4043 return error_mark_node;
4045 obj = prep_operand (obj);
4047 if (TYPE_PTRMEMFUNC_P (type))
4049 if (complain & tf_error)
4050 /* It's no good looking for an overloaded operator() on a
4051 pointer-to-member-function. */
4052 error ("pointer-to-member function %E cannot be called without an object; consider using .* or ->*", obj);
4053 return error_mark_node;
4056 if (TYPE_BINFO (type))
4058 fns = lookup_fnfields (TYPE_BINFO (type), ansi_opname (CALL_EXPR), 1);
4059 if (fns == error_mark_node)
4060 return error_mark_node;
4062 else
4063 fns = NULL_TREE;
4065 if (args != NULL && *args != NULL)
4067 *args = resolve_args (*args, complain);
4068 if (*args == NULL)
4069 return error_mark_node;
4072 /* Get the high-water mark for the CONVERSION_OBSTACK. */
4073 p = conversion_obstack_alloc (0);
4075 if (fns)
4077 first_mem_arg = build_this (obj);
4079 add_candidates (BASELINK_FUNCTIONS (fns),
4080 first_mem_arg, *args, NULL_TREE,
4081 NULL_TREE, false,
4082 BASELINK_BINFO (fns), BASELINK_ACCESS_BINFO (fns),
4083 LOOKUP_NORMAL, &candidates, complain);
4086 convs = lookup_conversions (type);
4088 for (; convs; convs = TREE_CHAIN (convs))
4090 tree fns = TREE_VALUE (convs);
4091 tree totype = TREE_TYPE (convs);
4093 if ((TREE_CODE (totype) == POINTER_TYPE
4094 && TREE_CODE (TREE_TYPE (totype)) == FUNCTION_TYPE)
4095 || (TREE_CODE (totype) == REFERENCE_TYPE
4096 && TREE_CODE (TREE_TYPE (totype)) == FUNCTION_TYPE)
4097 || (TREE_CODE (totype) == REFERENCE_TYPE
4098 && TREE_CODE (TREE_TYPE (totype)) == POINTER_TYPE
4099 && TREE_CODE (TREE_TYPE (TREE_TYPE (totype))) == FUNCTION_TYPE))
4100 for (; fns; fns = OVL_NEXT (fns))
4102 tree fn = OVL_CURRENT (fns);
4104 if (DECL_NONCONVERTING_P (fn))
4105 continue;
4107 if (TREE_CODE (fn) == TEMPLATE_DECL)
4108 add_template_conv_candidate
4109 (&candidates, fn, obj, NULL_TREE, *args, totype,
4110 /*access_path=*/NULL_TREE,
4111 /*conversion_path=*/NULL_TREE, complain);
4112 else
4113 add_conv_candidate (&candidates, fn, obj, NULL_TREE,
4114 *args, /*conversion_path=*/NULL_TREE,
4115 /*access_path=*/NULL_TREE, complain);
4119 candidates = splice_viable (candidates, pedantic, &any_viable_p);
4120 if (!any_viable_p)
4122 if (complain & tf_error)
4124 error ("no match for call to %<(%T) (%A)%>", TREE_TYPE (obj),
4125 build_tree_list_vec (*args));
4126 print_z_candidates (location_of (TREE_TYPE (obj)), candidates);
4128 result = error_mark_node;
4130 else
4132 cand = tourney (candidates, complain);
4133 if (cand == 0)
4135 if (complain & tf_error)
4137 error ("call of %<(%T) (%A)%> is ambiguous",
4138 TREE_TYPE (obj), build_tree_list_vec (*args));
4139 print_z_candidates (location_of (TREE_TYPE (obj)), candidates);
4141 result = error_mark_node;
4143 /* Since cand->fn will be a type, not a function, for a conversion
4144 function, we must be careful not to unconditionally look at
4145 DECL_NAME here. */
4146 else if (TREE_CODE (cand->fn) == FUNCTION_DECL
4147 && DECL_OVERLOADED_OPERATOR_P (cand->fn) == CALL_EXPR)
4148 result = build_over_call (cand, LOOKUP_NORMAL, complain);
4149 else
4151 obj = convert_like_with_context (cand->convs[0], obj, cand->fn, -1,
4152 complain);
4153 obj = convert_from_reference (obj);
4154 result = cp_build_function_call_vec (obj, args, complain);
4158 /* Free all the conversions we allocated. */
4159 obstack_free (&conversion_obstack, p);
4161 return result;
4164 /* Wrapper for above. */
4166 tree
4167 build_op_call (tree obj, VEC(tree,gc) **args, tsubst_flags_t complain)
4169 tree ret;
4170 bool subtime = timevar_cond_start (TV_OVERLOAD);
4171 ret = build_op_call_1 (obj, args, complain);
4172 timevar_cond_stop (TV_OVERLOAD, subtime);
4173 return ret;
4176 /* Called by op_error to prepare format strings suitable for the error
4177 function. It concatenates a prefix (controlled by MATCH), ERRMSG,
4178 and a suffix (controlled by NTYPES). */
4180 static const char *
4181 op_error_string (const char *errmsg, int ntypes, bool match)
4183 const char *msg;
4185 const char *msgp = concat (match ? G_("ambiguous overload for ")
4186 : G_("no match for "), errmsg, NULL);
4188 if (ntypes == 3)
4189 msg = concat (msgp, G_(" (operand types are %qT, %qT, and %qT)"), NULL);
4190 else if (ntypes == 2)
4191 msg = concat (msgp, G_(" (operand types are %qT and %qT)"), NULL);
4192 else
4193 msg = concat (msgp, G_(" (operand type is %qT)"), NULL);
4195 return msg;
4198 static void
4199 op_error (location_t loc, enum tree_code code, enum tree_code code2,
4200 tree arg1, tree arg2, tree arg3, bool match)
4202 const char *opname;
4204 if (code == MODIFY_EXPR)
4205 opname = assignment_operator_name_info[code2].name;
4206 else
4207 opname = operator_name_info[code].name;
4209 switch (code)
4211 case COND_EXPR:
4212 if (flag_diagnostics_show_caret)
4213 error_at (loc, op_error_string (G_("ternary %<operator?:%>"),
4214 3, match),
4215 TREE_TYPE (arg1), TREE_TYPE (arg2), TREE_TYPE (arg3));
4216 else
4217 error_at (loc, op_error_string (G_("ternary %<operator?:%> "
4218 "in %<%E ? %E : %E%>"), 3, match),
4219 arg1, arg2, arg3,
4220 TREE_TYPE (arg1), TREE_TYPE (arg2), TREE_TYPE (arg3));
4221 break;
4223 case POSTINCREMENT_EXPR:
4224 case POSTDECREMENT_EXPR:
4225 if (flag_diagnostics_show_caret)
4226 error_at (loc, op_error_string (G_("%<operator%s%>"), 1, match),
4227 opname, TREE_TYPE (arg1));
4228 else
4229 error_at (loc, op_error_string (G_("%<operator%s%> in %<%E%s%>"),
4230 1, match),
4231 opname, arg1, opname, TREE_TYPE (arg1));
4232 break;
4234 case ARRAY_REF:
4235 if (flag_diagnostics_show_caret)
4236 error_at (loc, op_error_string (G_("%<operator[]%>"), 2, match),
4237 TREE_TYPE (arg1), TREE_TYPE (arg2));
4238 else
4239 error_at (loc, op_error_string (G_("%<operator[]%> in %<%E[%E]%>"),
4240 2, match),
4241 arg1, arg2, TREE_TYPE (arg1), TREE_TYPE (arg2));
4242 break;
4244 case REALPART_EXPR:
4245 case IMAGPART_EXPR:
4246 if (flag_diagnostics_show_caret)
4247 error_at (loc, op_error_string (G_("%qs"), 1, match),
4248 opname, TREE_TYPE (arg1));
4249 else
4250 error_at (loc, op_error_string (G_("%qs in %<%s %E%>"), 1, match),
4251 opname, opname, arg1, TREE_TYPE (arg1));
4252 break;
4254 default:
4255 if (arg2)
4256 if (flag_diagnostics_show_caret)
4257 error_at (loc, op_error_string (G_("%<operator%s%>"), 2, match),
4258 opname, TREE_TYPE (arg1), TREE_TYPE (arg2));
4259 else
4260 error_at (loc, op_error_string (G_("%<operator%s%> in %<%E %s %E%>"),
4261 2, match),
4262 opname, arg1, opname, arg2,
4263 TREE_TYPE (arg1), TREE_TYPE (arg2));
4264 else
4265 if (flag_diagnostics_show_caret)
4266 error_at (loc, op_error_string (G_("%<operator%s%>"), 1, match),
4267 opname, TREE_TYPE (arg1));
4268 else
4269 error_at (loc, op_error_string (G_("%<operator%s%> in %<%s%E%>"),
4270 1, match),
4271 opname, opname, arg1, TREE_TYPE (arg1));
4272 break;
4276 /* Return the implicit conversion sequence that could be used to
4277 convert E1 to E2 in [expr.cond]. */
4279 static conversion *
4280 conditional_conversion (tree e1, tree e2, tsubst_flags_t complain)
4282 tree t1 = non_reference (TREE_TYPE (e1));
4283 tree t2 = non_reference (TREE_TYPE (e2));
4284 conversion *conv;
4285 bool good_base;
4287 /* [expr.cond]
4289 If E2 is an lvalue: E1 can be converted to match E2 if E1 can be
4290 implicitly converted (clause _conv_) to the type "lvalue reference to
4291 T2", subject to the constraint that in the conversion the
4292 reference must bind directly (_dcl.init.ref_) to an lvalue. */
4293 if (real_lvalue_p (e2))
4295 conv = implicit_conversion (build_reference_type (t2),
4298 /*c_cast_p=*/false,
4299 LOOKUP_NO_TEMP_BIND|LOOKUP_NO_RVAL_BIND
4300 |LOOKUP_ONLYCONVERTING,
4301 complain);
4302 if (conv)
4303 return conv;
4306 /* [expr.cond]
4308 If E1 and E2 have class type, and the underlying class types are
4309 the same or one is a base class of the other: E1 can be converted
4310 to match E2 if the class of T2 is the same type as, or a base
4311 class of, the class of T1, and the cv-qualification of T2 is the
4312 same cv-qualification as, or a greater cv-qualification than, the
4313 cv-qualification of T1. If the conversion is applied, E1 is
4314 changed to an rvalue of type T2 that still refers to the original
4315 source class object (or the appropriate subobject thereof). */
4316 if (CLASS_TYPE_P (t1) && CLASS_TYPE_P (t2)
4317 && ((good_base = DERIVED_FROM_P (t2, t1)) || DERIVED_FROM_P (t1, t2)))
4319 if (good_base && at_least_as_qualified_p (t2, t1))
4321 conv = build_identity_conv (t1, e1);
4322 if (!same_type_p (TYPE_MAIN_VARIANT (t1),
4323 TYPE_MAIN_VARIANT (t2)))
4324 conv = build_conv (ck_base, t2, conv);
4325 else
4326 conv = build_conv (ck_rvalue, t2, conv);
4327 return conv;
4329 else
4330 return NULL;
4332 else
4333 /* [expr.cond]
4335 Otherwise: E1 can be converted to match E2 if E1 can be implicitly
4336 converted to the type that expression E2 would have if E2 were
4337 converted to an rvalue (or the type it has, if E2 is an rvalue). */
4338 return implicit_conversion (t2, t1, e1, /*c_cast_p=*/false,
4339 LOOKUP_IMPLICIT, complain);
4342 /* Implement [expr.cond]. ARG1, ARG2, and ARG3 are the three
4343 arguments to the conditional expression. */
4345 static tree
4346 build_conditional_expr_1 (tree arg1, tree arg2, tree arg3,
4347 tsubst_flags_t complain)
4349 tree arg2_type;
4350 tree arg3_type;
4351 tree result = NULL_TREE;
4352 tree result_type = NULL_TREE;
4353 bool lvalue_p = true;
4354 struct z_candidate *candidates = 0;
4355 struct z_candidate *cand;
4356 void *p;
4357 tree orig_arg2, orig_arg3;
4359 /* As a G++ extension, the second argument to the conditional can be
4360 omitted. (So that `a ? : c' is roughly equivalent to `a ? a :
4361 c'.) If the second operand is omitted, make sure it is
4362 calculated only once. */
4363 if (!arg2)
4365 if (complain & tf_error)
4366 pedwarn (input_location, OPT_Wpedantic,
4367 "ISO C++ forbids omitting the middle term of a ?: expression");
4369 /* Make sure that lvalues remain lvalues. See g++.oliva/ext1.C. */
4370 if (real_lvalue_p (arg1))
4371 arg2 = arg1 = stabilize_reference (arg1);
4372 else
4373 arg2 = arg1 = save_expr (arg1);
4376 /* [expr.cond]
4378 The first expression is implicitly converted to bool (clause
4379 _conv_). */
4380 arg1 = perform_implicit_conversion_flags (boolean_type_node, arg1, complain,
4381 LOOKUP_NORMAL);
4383 /* If something has already gone wrong, just pass that fact up the
4384 tree. */
4385 if (error_operand_p (arg1)
4386 || error_operand_p (arg2)
4387 || error_operand_p (arg3))
4388 return error_mark_node;
4390 /* [expr.cond]
4392 If either the second or the third operand has type (possibly
4393 cv-qualified) void, then the lvalue-to-rvalue (_conv.lval_),
4394 array-to-pointer (_conv.array_), and function-to-pointer
4395 (_conv.func_) standard conversions are performed on the second
4396 and third operands. */
4397 orig_arg2 = arg2;
4398 orig_arg3 = arg3;
4399 arg2_type = unlowered_expr_type (arg2);
4400 arg3_type = unlowered_expr_type (arg3);
4401 if (VOID_TYPE_P (arg2_type) || VOID_TYPE_P (arg3_type))
4403 /* Do the conversions. We don't these for `void' type arguments
4404 since it can't have any effect and since decay_conversion
4405 does not handle that case gracefully. */
4406 if (!VOID_TYPE_P (arg2_type))
4407 arg2 = decay_conversion (arg2, complain);
4408 if (!VOID_TYPE_P (arg3_type))
4409 arg3 = decay_conversion (arg3, complain);
4410 arg2_type = TREE_TYPE (arg2);
4411 arg3_type = TREE_TYPE (arg3);
4413 /* [expr.cond]
4415 One of the following shall hold:
4417 --The second or the third operand (but not both) is a
4418 throw-expression (_except.throw_); the result is of the
4419 type of the other and is an rvalue.
4421 --Both the second and the third operands have type void; the
4422 result is of type void and is an rvalue.
4424 We must avoid calling force_rvalue for expressions of type
4425 "void" because it will complain that their value is being
4426 used. */
4427 if (TREE_CODE (arg2) == THROW_EXPR
4428 && TREE_CODE (arg3) != THROW_EXPR)
4430 if (!VOID_TYPE_P (arg3_type))
4432 arg3 = force_rvalue (arg3, complain);
4433 if (arg3 == error_mark_node)
4434 return error_mark_node;
4436 arg3_type = TREE_TYPE (arg3);
4437 result_type = arg3_type;
4439 else if (TREE_CODE (arg2) != THROW_EXPR
4440 && TREE_CODE (arg3) == THROW_EXPR)
4442 if (!VOID_TYPE_P (arg2_type))
4444 arg2 = force_rvalue (arg2, complain);
4445 if (arg2 == error_mark_node)
4446 return error_mark_node;
4448 arg2_type = TREE_TYPE (arg2);
4449 result_type = arg2_type;
4451 else if (VOID_TYPE_P (arg2_type) && VOID_TYPE_P (arg3_type))
4452 result_type = void_type_node;
4453 else
4455 if (complain & tf_error)
4457 if (VOID_TYPE_P (arg2_type))
4458 error ("second operand to the conditional operator "
4459 "is of type %<void%>, "
4460 "but the third operand is neither a throw-expression "
4461 "nor of type %<void%>");
4462 else
4463 error ("third operand to the conditional operator "
4464 "is of type %<void%>, "
4465 "but the second operand is neither a throw-expression "
4466 "nor of type %<void%>");
4468 return error_mark_node;
4471 lvalue_p = false;
4472 goto valid_operands;
4474 /* [expr.cond]
4476 Otherwise, if the second and third operand have different types,
4477 and either has (possibly cv-qualified) class type, an attempt is
4478 made to convert each of those operands to the type of the other. */
4479 else if (!same_type_p (arg2_type, arg3_type)
4480 && (CLASS_TYPE_P (arg2_type) || CLASS_TYPE_P (arg3_type)))
4482 conversion *conv2;
4483 conversion *conv3;
4485 /* Get the high-water mark for the CONVERSION_OBSTACK. */
4486 p = conversion_obstack_alloc (0);
4488 conv2 = conditional_conversion (arg2, arg3, complain);
4489 conv3 = conditional_conversion (arg3, arg2, complain);
4491 /* [expr.cond]
4493 If both can be converted, or one can be converted but the
4494 conversion is ambiguous, the program is ill-formed. If
4495 neither can be converted, the operands are left unchanged and
4496 further checking is performed as described below. If exactly
4497 one conversion is possible, that conversion is applied to the
4498 chosen operand and the converted operand is used in place of
4499 the original operand for the remainder of this section. */
4500 if ((conv2 && !conv2->bad_p
4501 && conv3 && !conv3->bad_p)
4502 || (conv2 && conv2->kind == ck_ambig)
4503 || (conv3 && conv3->kind == ck_ambig))
4505 error ("operands to ?: have different types %qT and %qT",
4506 arg2_type, arg3_type);
4507 result = error_mark_node;
4509 else if (conv2 && (!conv2->bad_p || !conv3))
4511 arg2 = convert_like (conv2, arg2, complain);
4512 arg2 = convert_from_reference (arg2);
4513 arg2_type = TREE_TYPE (arg2);
4514 /* Even if CONV2 is a valid conversion, the result of the
4515 conversion may be invalid. For example, if ARG3 has type
4516 "volatile X", and X does not have a copy constructor
4517 accepting a "volatile X&", then even if ARG2 can be
4518 converted to X, the conversion will fail. */
4519 if (error_operand_p (arg2))
4520 result = error_mark_node;
4522 else if (conv3 && (!conv3->bad_p || !conv2))
4524 arg3 = convert_like (conv3, arg3, complain);
4525 arg3 = convert_from_reference (arg3);
4526 arg3_type = TREE_TYPE (arg3);
4527 if (error_operand_p (arg3))
4528 result = error_mark_node;
4531 /* Free all the conversions we allocated. */
4532 obstack_free (&conversion_obstack, p);
4534 if (result)
4535 return result;
4537 /* If, after the conversion, both operands have class type,
4538 treat the cv-qualification of both operands as if it were the
4539 union of the cv-qualification of the operands.
4541 The standard is not clear about what to do in this
4542 circumstance. For example, if the first operand has type
4543 "const X" and the second operand has a user-defined
4544 conversion to "volatile X", what is the type of the second
4545 operand after this step? Making it be "const X" (matching
4546 the first operand) seems wrong, as that discards the
4547 qualification without actually performing a copy. Leaving it
4548 as "volatile X" seems wrong as that will result in the
4549 conditional expression failing altogether, even though,
4550 according to this step, the one operand could be converted to
4551 the type of the other. */
4552 if ((conv2 || conv3)
4553 && CLASS_TYPE_P (arg2_type)
4554 && cp_type_quals (arg2_type) != cp_type_quals (arg3_type))
4555 arg2_type = arg3_type =
4556 cp_build_qualified_type (arg2_type,
4557 cp_type_quals (arg2_type)
4558 | cp_type_quals (arg3_type));
4561 /* [expr.cond]
4563 If the second and third operands are lvalues and have the same
4564 type, the result is of that type and is an lvalue. */
4565 if (real_lvalue_p (arg2)
4566 && real_lvalue_p (arg3)
4567 && same_type_p (arg2_type, arg3_type))
4569 result_type = arg2_type;
4570 arg2 = mark_lvalue_use (arg2);
4571 arg3 = mark_lvalue_use (arg3);
4572 goto valid_operands;
4575 /* [expr.cond]
4577 Otherwise, the result is an rvalue. If the second and third
4578 operand do not have the same type, and either has (possibly
4579 cv-qualified) class type, overload resolution is used to
4580 determine the conversions (if any) to be applied to the operands
4581 (_over.match.oper_, _over.built_). */
4582 lvalue_p = false;
4583 if (!same_type_p (arg2_type, arg3_type)
4584 && (CLASS_TYPE_P (arg2_type) || CLASS_TYPE_P (arg3_type)))
4586 tree args[3];
4587 conversion *conv;
4588 bool any_viable_p;
4590 /* Rearrange the arguments so that add_builtin_candidate only has
4591 to know about two args. In build_builtin_candidate, the
4592 arguments are unscrambled. */
4593 args[0] = arg2;
4594 args[1] = arg3;
4595 args[2] = arg1;
4596 add_builtin_candidates (&candidates,
4597 COND_EXPR,
4598 NOP_EXPR,
4599 ansi_opname (COND_EXPR),
4600 args,
4601 LOOKUP_NORMAL, complain);
4603 /* [expr.cond]
4605 If the overload resolution fails, the program is
4606 ill-formed. */
4607 candidates = splice_viable (candidates, pedantic, &any_viable_p);
4608 if (!any_viable_p)
4610 if (complain & tf_error)
4612 op_error (input_location, COND_EXPR, NOP_EXPR,
4613 arg1, arg2, arg3, FALSE);
4614 print_z_candidates (location_of (arg1), candidates);
4616 return error_mark_node;
4618 cand = tourney (candidates, complain);
4619 if (!cand)
4621 if (complain & tf_error)
4623 op_error (input_location, COND_EXPR, NOP_EXPR,
4624 arg1, arg2, arg3, FALSE);
4625 print_z_candidates (location_of (arg1), candidates);
4627 return error_mark_node;
4630 /* [expr.cond]
4632 Otherwise, the conversions thus determined are applied, and
4633 the converted operands are used in place of the original
4634 operands for the remainder of this section. */
4635 conv = cand->convs[0];
4636 arg1 = convert_like (conv, arg1, complain);
4637 conv = cand->convs[1];
4638 arg2 = convert_like (conv, arg2, complain);
4639 arg2_type = TREE_TYPE (arg2);
4640 conv = cand->convs[2];
4641 arg3 = convert_like (conv, arg3, complain);
4642 arg3_type = TREE_TYPE (arg3);
4645 /* [expr.cond]
4647 Lvalue-to-rvalue (_conv.lval_), array-to-pointer (_conv.array_),
4648 and function-to-pointer (_conv.func_) standard conversions are
4649 performed on the second and third operands.
4651 We need to force the lvalue-to-rvalue conversion here for class types,
4652 so we get TARGET_EXPRs; trying to deal with a COND_EXPR of class rvalues
4653 that isn't wrapped with a TARGET_EXPR plays havoc with exception
4654 regions. */
4656 arg2 = force_rvalue (arg2, complain);
4657 if (!CLASS_TYPE_P (arg2_type))
4658 arg2_type = TREE_TYPE (arg2);
4660 arg3 = force_rvalue (arg3, complain);
4661 if (!CLASS_TYPE_P (arg3_type))
4662 arg3_type = TREE_TYPE (arg3);
4664 if (arg2 == error_mark_node || arg3 == error_mark_node)
4665 return error_mark_node;
4667 /* [expr.cond]
4669 After those conversions, one of the following shall hold:
4671 --The second and third operands have the same type; the result is of
4672 that type. */
4673 if (same_type_p (arg2_type, arg3_type))
4674 result_type = arg2_type;
4675 /* [expr.cond]
4677 --The second and third operands have arithmetic or enumeration
4678 type; the usual arithmetic conversions are performed to bring
4679 them to a common type, and the result is of that type. */
4680 else if ((ARITHMETIC_TYPE_P (arg2_type)
4681 || UNSCOPED_ENUM_P (arg2_type))
4682 && (ARITHMETIC_TYPE_P (arg3_type)
4683 || UNSCOPED_ENUM_P (arg3_type)))
4685 /* In this case, there is always a common type. */
4686 result_type = type_after_usual_arithmetic_conversions (arg2_type,
4687 arg3_type);
4688 do_warn_double_promotion (result_type, arg2_type, arg3_type,
4689 "implicit conversion from %qT to %qT to "
4690 "match other result of conditional",
4691 input_location);
4693 if (TREE_CODE (arg2_type) == ENUMERAL_TYPE
4694 && TREE_CODE (arg3_type) == ENUMERAL_TYPE)
4696 if (TREE_CODE (orig_arg2) == CONST_DECL
4697 && TREE_CODE (orig_arg3) == CONST_DECL
4698 && DECL_CONTEXT (orig_arg2) == DECL_CONTEXT (orig_arg3))
4699 /* Two enumerators from the same enumeration can have different
4700 types when the enumeration is still being defined. */;
4701 else if (complain & tf_warning)
4702 warning (OPT_Wenum_compare,
4703 "enumeral mismatch in conditional expression: %qT vs %qT",
4704 arg2_type, arg3_type);
4706 else if (extra_warnings
4707 && ((TREE_CODE (arg2_type) == ENUMERAL_TYPE
4708 && !same_type_p (arg3_type, type_promotes_to (arg2_type)))
4709 || (TREE_CODE (arg3_type) == ENUMERAL_TYPE
4710 && !same_type_p (arg2_type, type_promotes_to (arg3_type)))))
4712 if (complain & tf_warning)
4713 warning (0,
4714 "enumeral and non-enumeral type in conditional expression");
4717 arg2 = perform_implicit_conversion (result_type, arg2, complain);
4718 arg3 = perform_implicit_conversion (result_type, arg3, complain);
4720 /* [expr.cond]
4722 --The second and third operands have pointer type, or one has
4723 pointer type and the other is a null pointer constant; pointer
4724 conversions (_conv.ptr_) and qualification conversions
4725 (_conv.qual_) are performed to bring them to their composite
4726 pointer type (_expr.rel_). The result is of the composite
4727 pointer type.
4729 --The second and third operands have pointer to member type, or
4730 one has pointer to member type and the other is a null pointer
4731 constant; pointer to member conversions (_conv.mem_) and
4732 qualification conversions (_conv.qual_) are performed to bring
4733 them to a common type, whose cv-qualification shall match the
4734 cv-qualification of either the second or the third operand.
4735 The result is of the common type. */
4736 else if ((null_ptr_cst_p (arg2)
4737 && TYPE_PTR_OR_PTRMEM_P (arg3_type))
4738 || (null_ptr_cst_p (arg3)
4739 && TYPE_PTR_OR_PTRMEM_P (arg2_type))
4740 || (TYPE_PTR_P (arg2_type) && TYPE_PTR_P (arg3_type))
4741 || (TYPE_PTRDATAMEM_P (arg2_type) && TYPE_PTRDATAMEM_P (arg3_type))
4742 || (TYPE_PTRMEMFUNC_P (arg2_type) && TYPE_PTRMEMFUNC_P (arg3_type)))
4744 result_type = composite_pointer_type (arg2_type, arg3_type, arg2,
4745 arg3, CPO_CONDITIONAL_EXPR,
4746 complain);
4747 if (result_type == error_mark_node)
4748 return error_mark_node;
4749 arg2 = perform_implicit_conversion (result_type, arg2, complain);
4750 arg3 = perform_implicit_conversion (result_type, arg3, complain);
4753 if (!result_type)
4755 if (complain & tf_error)
4756 error ("operands to ?: have different types %qT and %qT",
4757 arg2_type, arg3_type);
4758 return error_mark_node;
4761 if (arg2 == error_mark_node || arg3 == error_mark_node)
4762 return error_mark_node;
4764 valid_operands:
4765 result = build3 (COND_EXPR, result_type, arg1, arg2, arg3);
4766 if (!cp_unevaluated_operand)
4767 /* Avoid folding within decltype (c++/42013) and noexcept. */
4768 result = fold_if_not_in_template (result);
4770 /* We can't use result_type below, as fold might have returned a
4771 throw_expr. */
4773 if (!lvalue_p)
4775 /* Expand both sides into the same slot, hopefully the target of
4776 the ?: expression. We used to check for TARGET_EXPRs here,
4777 but now we sometimes wrap them in NOP_EXPRs so the test would
4778 fail. */
4779 if (CLASS_TYPE_P (TREE_TYPE (result)))
4780 result = get_target_expr (result);
4781 /* If this expression is an rvalue, but might be mistaken for an
4782 lvalue, we must add a NON_LVALUE_EXPR. */
4783 result = rvalue (result);
4786 return result;
4789 /* Wrapper for above. */
4791 tree
4792 build_conditional_expr (tree arg1, tree arg2, tree arg3,
4793 tsubst_flags_t complain)
4795 tree ret;
4796 bool subtime = timevar_cond_start (TV_OVERLOAD);
4797 ret = build_conditional_expr_1 (arg1, arg2, arg3, complain);
4798 timevar_cond_stop (TV_OVERLOAD, subtime);
4799 return ret;
4802 /* OPERAND is an operand to an expression. Perform necessary steps
4803 required before using it. If OPERAND is NULL_TREE, NULL_TREE is
4804 returned. */
4806 static tree
4807 prep_operand (tree operand)
4809 if (operand)
4811 if (CLASS_TYPE_P (TREE_TYPE (operand))
4812 && CLASSTYPE_TEMPLATE_INSTANTIATION (TREE_TYPE (operand)))
4813 /* Make sure the template type is instantiated now. */
4814 instantiate_class_template (TYPE_MAIN_VARIANT (TREE_TYPE (operand)));
4817 return operand;
4820 /* Add each of the viable functions in FNS (a FUNCTION_DECL or
4821 OVERLOAD) to the CANDIDATES, returning an updated list of
4822 CANDIDATES. The ARGS are the arguments provided to the call;
4823 if FIRST_ARG is non-null it is the implicit object argument,
4824 otherwise the first element of ARGS is used if needed. The
4825 EXPLICIT_TARGS are explicit template arguments provided.
4826 TEMPLATE_ONLY is true if only template functions should be
4827 considered. CONVERSION_PATH, ACCESS_PATH, and FLAGS are as for
4828 add_function_candidate. */
4830 static void
4831 add_candidates (tree fns, tree first_arg, const VEC(tree,gc) *args,
4832 tree return_type,
4833 tree explicit_targs, bool template_only,
4834 tree conversion_path, tree access_path,
4835 int flags,
4836 struct z_candidate **candidates,
4837 tsubst_flags_t complain)
4839 tree ctype;
4840 const VEC(tree,gc) *non_static_args;
4841 bool check_list_ctor;
4842 bool check_converting;
4843 unification_kind_t strict;
4844 tree fn;
4846 if (!fns)
4847 return;
4849 /* Precalculate special handling of constructors and conversion ops. */
4850 fn = OVL_CURRENT (fns);
4851 if (DECL_CONV_FN_P (fn))
4853 check_list_ctor = false;
4854 check_converting = !!(flags & LOOKUP_ONLYCONVERTING);
4855 if (flags & LOOKUP_NO_CONVERSION)
4856 /* We're doing return_type(x). */
4857 strict = DEDUCE_CONV;
4858 else
4859 /* We're doing x.operator return_type(). */
4860 strict = DEDUCE_EXACT;
4861 /* [over.match.funcs] For conversion functions, the function
4862 is considered to be a member of the class of the implicit
4863 object argument for the purpose of defining the type of
4864 the implicit object parameter. */
4865 ctype = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (first_arg)));
4867 else
4869 if (DECL_CONSTRUCTOR_P (fn))
4871 check_list_ctor = !!(flags & LOOKUP_LIST_ONLY);
4872 /* For list-initialization we consider explicit constructors
4873 and complain if one is chosen. */
4874 check_converting
4875 = ((flags & (LOOKUP_ONLYCONVERTING|LOOKUP_LIST_INIT_CTOR))
4876 == LOOKUP_ONLYCONVERTING);
4878 else
4880 check_list_ctor = false;
4881 check_converting = false;
4883 strict = DEDUCE_CALL;
4884 ctype = conversion_path ? BINFO_TYPE (conversion_path) : NULL_TREE;
4887 if (first_arg)
4888 non_static_args = args;
4889 else
4890 /* Delay creating the implicit this parameter until it is needed. */
4891 non_static_args = NULL;
4893 for (; fns; fns = OVL_NEXT (fns))
4895 tree fn_first_arg;
4896 const VEC(tree,gc) *fn_args;
4898 fn = OVL_CURRENT (fns);
4900 if (check_converting && DECL_NONCONVERTING_P (fn))
4901 continue;
4902 if (check_list_ctor && !is_list_ctor (fn))
4903 continue;
4905 /* Figure out which set of arguments to use. */
4906 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
4908 /* If this function is a non-static member and we didn't get an
4909 implicit object argument, move it out of args. */
4910 if (first_arg == NULL_TREE)
4912 unsigned int ix;
4913 tree arg;
4914 VEC(tree,gc) *tempvec
4915 = VEC_alloc (tree, gc, VEC_length (tree, args) - 1);
4916 for (ix = 1; VEC_iterate (tree, args, ix, arg); ++ix)
4917 VEC_quick_push (tree, tempvec, arg);
4918 non_static_args = tempvec;
4919 first_arg = build_this (VEC_index (tree, args, 0));
4922 fn_first_arg = first_arg;
4923 fn_args = non_static_args;
4925 else
4927 /* Otherwise, just use the list of arguments provided. */
4928 fn_first_arg = NULL_TREE;
4929 fn_args = args;
4932 if (TREE_CODE (fn) == TEMPLATE_DECL)
4933 add_template_candidate (candidates,
4935 ctype,
4936 explicit_targs,
4937 fn_first_arg,
4938 fn_args,
4939 return_type,
4940 access_path,
4941 conversion_path,
4942 flags,
4943 strict,
4944 complain);
4945 else if (!template_only)
4946 add_function_candidate (candidates,
4948 ctype,
4949 fn_first_arg,
4950 fn_args,
4951 access_path,
4952 conversion_path,
4953 flags,
4954 complain);
4958 static tree
4959 build_new_op_1 (location_t loc, enum tree_code code, int flags, tree arg1,
4960 tree arg2, tree arg3, tree *overload, tsubst_flags_t complain)
4962 struct z_candidate *candidates = 0, *cand;
4963 VEC(tree,gc) *arglist;
4964 tree fnname;
4965 tree args[3];
4966 tree result = NULL_TREE;
4967 bool result_valid_p = false;
4968 enum tree_code code2 = NOP_EXPR;
4969 enum tree_code code_orig_arg1 = ERROR_MARK;
4970 enum tree_code code_orig_arg2 = ERROR_MARK;
4971 conversion *conv;
4972 void *p;
4973 bool strict_p;
4974 bool any_viable_p;
4976 if (error_operand_p (arg1)
4977 || error_operand_p (arg2)
4978 || error_operand_p (arg3))
4979 return error_mark_node;
4981 if (code == MODIFY_EXPR)
4983 code2 = TREE_CODE (arg3);
4984 arg3 = NULL_TREE;
4985 fnname = ansi_assopname (code2);
4987 else
4988 fnname = ansi_opname (code);
4990 arg1 = prep_operand (arg1);
4992 switch (code)
4994 case NEW_EXPR:
4995 case VEC_NEW_EXPR:
4996 case VEC_DELETE_EXPR:
4997 case DELETE_EXPR:
4998 /* Use build_op_new_call and build_op_delete_call instead. */
4999 gcc_unreachable ();
5001 case CALL_EXPR:
5002 /* Use build_op_call instead. */
5003 gcc_unreachable ();
5005 case TRUTH_ORIF_EXPR:
5006 case TRUTH_ANDIF_EXPR:
5007 case TRUTH_AND_EXPR:
5008 case TRUTH_OR_EXPR:
5009 /* These are saved for the sake of warn_logical_operator. */
5010 code_orig_arg1 = TREE_CODE (arg1);
5011 code_orig_arg2 = TREE_CODE (arg2);
5013 default:
5014 break;
5017 arg2 = prep_operand (arg2);
5018 arg3 = prep_operand (arg3);
5020 if (code == COND_EXPR)
5021 /* Use build_conditional_expr instead. */
5022 gcc_unreachable ();
5023 else if (! IS_OVERLOAD_TYPE (TREE_TYPE (arg1))
5024 && (! arg2 || ! IS_OVERLOAD_TYPE (TREE_TYPE (arg2))))
5025 goto builtin;
5027 if (code == POSTINCREMENT_EXPR || code == POSTDECREMENT_EXPR)
5028 arg2 = integer_zero_node;
5030 arglist = VEC_alloc (tree, gc, 3);
5031 VEC_quick_push (tree, arglist, arg1);
5032 if (arg2 != NULL_TREE)
5033 VEC_quick_push (tree, arglist, arg2);
5034 if (arg3 != NULL_TREE)
5035 VEC_quick_push (tree, arglist, arg3);
5037 /* Get the high-water mark for the CONVERSION_OBSTACK. */
5038 p = conversion_obstack_alloc (0);
5040 /* Add namespace-scope operators to the list of functions to
5041 consider. */
5042 add_candidates (lookup_function_nonclass (fnname, arglist, /*block_p=*/true),
5043 NULL_TREE, arglist, NULL_TREE,
5044 NULL_TREE, false, NULL_TREE, NULL_TREE,
5045 flags, &candidates, complain);
5046 /* Add class-member operators to the candidate set. */
5047 if (CLASS_TYPE_P (TREE_TYPE (arg1)))
5049 tree fns;
5051 fns = lookup_fnfields (TREE_TYPE (arg1), fnname, 1);
5052 if (fns == error_mark_node)
5054 result = error_mark_node;
5055 goto user_defined_result_ready;
5057 if (fns)
5058 add_candidates (BASELINK_FUNCTIONS (fns),
5059 NULL_TREE, arglist, NULL_TREE,
5060 NULL_TREE, false,
5061 BASELINK_BINFO (fns),
5062 BASELINK_ACCESS_BINFO (fns),
5063 flags, &candidates, complain);
5066 args[0] = arg1;
5067 args[1] = arg2;
5068 args[2] = NULL_TREE;
5070 add_builtin_candidates (&candidates, code, code2, fnname, args,
5071 flags, complain);
5073 switch (code)
5075 case COMPOUND_EXPR:
5076 case ADDR_EXPR:
5077 /* For these, the built-in candidates set is empty
5078 [over.match.oper]/3. We don't want non-strict matches
5079 because exact matches are always possible with built-in
5080 operators. The built-in candidate set for COMPONENT_REF
5081 would be empty too, but since there are no such built-in
5082 operators, we accept non-strict matches for them. */
5083 strict_p = true;
5084 break;
5086 default:
5087 strict_p = pedantic;
5088 break;
5091 candidates = splice_viable (candidates, strict_p, &any_viable_p);
5092 if (!any_viable_p)
5094 switch (code)
5096 case POSTINCREMENT_EXPR:
5097 case POSTDECREMENT_EXPR:
5098 /* Don't try anything fancy if we're not allowed to produce
5099 errors. */
5100 if (!(complain & tf_error))
5101 return error_mark_node;
5103 /* Look for an `operator++ (int)'. Pre-1985 C++ didn't
5104 distinguish between prefix and postfix ++ and
5105 operator++() was used for both, so we allow this with
5106 -fpermissive. */
5107 else
5109 const char *msg = (flag_permissive)
5110 ? G_("no %<%D(int)%> declared for postfix %qs,"
5111 " trying prefix operator instead")
5112 : G_("no %<%D(int)%> declared for postfix %qs");
5113 permerror (loc, msg, fnname, operator_name_info[code].name);
5116 if (!flag_permissive)
5117 return error_mark_node;
5119 if (code == POSTINCREMENT_EXPR)
5120 code = PREINCREMENT_EXPR;
5121 else
5122 code = PREDECREMENT_EXPR;
5123 result = build_new_op_1 (loc, code, flags, arg1, NULL_TREE,
5124 NULL_TREE, overload, complain);
5125 break;
5127 /* The caller will deal with these. */
5128 case ADDR_EXPR:
5129 case COMPOUND_EXPR:
5130 case COMPONENT_REF:
5131 result = NULL_TREE;
5132 result_valid_p = true;
5133 break;
5135 default:
5136 if (complain & tf_error)
5138 /* If one of the arguments of the operator represents
5139 an invalid use of member function pointer, try to report
5140 a meaningful error ... */
5141 if (invalid_nonstatic_memfn_p (arg1, tf_error)
5142 || invalid_nonstatic_memfn_p (arg2, tf_error)
5143 || invalid_nonstatic_memfn_p (arg3, tf_error))
5144 /* We displayed the error message. */;
5145 else
5147 /* ... Otherwise, report the more generic
5148 "no matching operator found" error */
5149 op_error (loc, code, code2, arg1, arg2, arg3, FALSE);
5150 print_z_candidates (loc, candidates);
5153 result = error_mark_node;
5154 break;
5157 else
5159 cand = tourney (candidates, complain);
5160 if (cand == 0)
5162 if (complain & tf_error)
5164 op_error (loc, code, code2, arg1, arg2, arg3, TRUE);
5165 print_z_candidates (loc, candidates);
5167 result = error_mark_node;
5169 else if (TREE_CODE (cand->fn) == FUNCTION_DECL)
5171 if (overload)
5172 *overload = cand->fn;
5174 if (resolve_args (arglist, complain) == NULL)
5175 result = error_mark_node;
5176 else
5177 result = build_over_call (cand, LOOKUP_NORMAL, complain);
5179 else
5181 /* Give any warnings we noticed during overload resolution. */
5182 if (cand->warnings && (complain & tf_warning))
5184 struct candidate_warning *w;
5185 for (w = cand->warnings; w; w = w->next)
5186 joust (cand, w->loser, 1, complain);
5189 /* Check for comparison of different enum types. */
5190 switch (code)
5192 case GT_EXPR:
5193 case LT_EXPR:
5194 case GE_EXPR:
5195 case LE_EXPR:
5196 case EQ_EXPR:
5197 case NE_EXPR:
5198 if (TREE_CODE (TREE_TYPE (arg1)) == ENUMERAL_TYPE
5199 && TREE_CODE (TREE_TYPE (arg2)) == ENUMERAL_TYPE
5200 && (TYPE_MAIN_VARIANT (TREE_TYPE (arg1))
5201 != TYPE_MAIN_VARIANT (TREE_TYPE (arg2)))
5202 && (complain & tf_warning))
5204 warning (OPT_Wenum_compare,
5205 "comparison between %q#T and %q#T",
5206 TREE_TYPE (arg1), TREE_TYPE (arg2));
5208 break;
5209 default:
5210 break;
5213 /* We need to strip any leading REF_BIND so that bitfields
5214 don't cause errors. This should not remove any important
5215 conversions, because builtins don't apply to class
5216 objects directly. */
5217 conv = cand->convs[0];
5218 if (conv->kind == ck_ref_bind)
5219 conv = next_conversion (conv);
5220 arg1 = convert_like (conv, arg1, complain);
5222 if (arg2)
5224 conv = cand->convs[1];
5225 if (conv->kind == ck_ref_bind)
5226 conv = next_conversion (conv);
5227 else
5228 arg2 = decay_conversion (arg2, complain);
5230 /* We need to call warn_logical_operator before
5231 converting arg2 to a boolean_type, but after
5232 decaying an enumerator to its value. */
5233 if (complain & tf_warning)
5234 warn_logical_operator (loc, code, boolean_type_node,
5235 code_orig_arg1, arg1,
5236 code_orig_arg2, arg2);
5238 arg2 = convert_like (conv, arg2, complain);
5240 if (arg3)
5242 conv = cand->convs[2];
5243 if (conv->kind == ck_ref_bind)
5244 conv = next_conversion (conv);
5245 arg3 = convert_like (conv, arg3, complain);
5251 user_defined_result_ready:
5253 /* Free all the conversions we allocated. */
5254 obstack_free (&conversion_obstack, p);
5256 if (result || result_valid_p)
5257 return result;
5259 builtin:
5260 switch (code)
5262 case MODIFY_EXPR:
5263 return cp_build_modify_expr (arg1, code2, arg2, complain);
5265 case INDIRECT_REF:
5266 return cp_build_indirect_ref (arg1, RO_UNARY_STAR, complain);
5268 case TRUTH_ANDIF_EXPR:
5269 case TRUTH_ORIF_EXPR:
5270 case TRUTH_AND_EXPR:
5271 case TRUTH_OR_EXPR:
5272 warn_logical_operator (loc, code, boolean_type_node,
5273 code_orig_arg1, arg1, code_orig_arg2, arg2);
5274 /* Fall through. */
5275 case PLUS_EXPR:
5276 case MINUS_EXPR:
5277 case MULT_EXPR:
5278 case TRUNC_DIV_EXPR:
5279 case GT_EXPR:
5280 case LT_EXPR:
5281 case GE_EXPR:
5282 case LE_EXPR:
5283 case EQ_EXPR:
5284 case NE_EXPR:
5285 case MAX_EXPR:
5286 case MIN_EXPR:
5287 case LSHIFT_EXPR:
5288 case RSHIFT_EXPR:
5289 case TRUNC_MOD_EXPR:
5290 case BIT_AND_EXPR:
5291 case BIT_IOR_EXPR:
5292 case BIT_XOR_EXPR:
5293 return cp_build_binary_op (input_location, code, arg1, arg2, complain);
5295 case UNARY_PLUS_EXPR:
5296 case NEGATE_EXPR:
5297 case BIT_NOT_EXPR:
5298 case TRUTH_NOT_EXPR:
5299 case PREINCREMENT_EXPR:
5300 case POSTINCREMENT_EXPR:
5301 case PREDECREMENT_EXPR:
5302 case POSTDECREMENT_EXPR:
5303 case REALPART_EXPR:
5304 case IMAGPART_EXPR:
5305 case ABS_EXPR:
5306 return cp_build_unary_op (code, arg1, candidates != 0, complain);
5308 case ARRAY_REF:
5309 return cp_build_array_ref (input_location, arg1, arg2, complain);
5311 case MEMBER_REF:
5312 return build_m_component_ref (cp_build_indirect_ref (arg1, RO_NULL,
5313 complain),
5314 arg2, complain);
5316 /* The caller will deal with these. */
5317 case ADDR_EXPR:
5318 case COMPONENT_REF:
5319 case COMPOUND_EXPR:
5320 return NULL_TREE;
5322 default:
5323 gcc_unreachable ();
5325 return NULL_TREE;
5328 /* Wrapper for above. */
5330 tree
5331 build_new_op (location_t loc, enum tree_code code, int flags,
5332 tree arg1, tree arg2, tree arg3,
5333 tree *overload, tsubst_flags_t complain)
5335 tree ret;
5336 bool subtime = timevar_cond_start (TV_OVERLOAD);
5337 ret = build_new_op_1 (loc, code, flags, arg1, arg2, arg3,
5338 overload, complain);
5339 timevar_cond_stop (TV_OVERLOAD, subtime);
5340 return ret;
5343 /* Returns true iff T, an element of an OVERLOAD chain, is a usual
5344 deallocation function (3.7.4.2 [basic.stc.dynamic.deallocation]). */
5346 static bool
5347 non_placement_deallocation_fn_p (tree t)
5349 /* A template instance is never a usual deallocation function,
5350 regardless of its signature. */
5351 if (TREE_CODE (t) == TEMPLATE_DECL
5352 || primary_template_instantiation_p (t))
5353 return false;
5355 /* If a class T has a member deallocation function named operator delete
5356 with exactly one parameter, then that function is a usual
5357 (non-placement) deallocation function. If class T does not declare
5358 such an operator delete but does declare a member deallocation
5359 function named operator delete with exactly two parameters, the second
5360 of which has type std::size_t (18.2), then this function is a usual
5361 deallocation function. */
5362 t = FUNCTION_ARG_CHAIN (t);
5363 if (t == void_list_node
5364 || (t && same_type_p (TREE_VALUE (t), size_type_node)
5365 && TREE_CHAIN (t) == void_list_node))
5366 return true;
5367 return false;
5370 /* Build a call to operator delete. This has to be handled very specially,
5371 because the restrictions on what signatures match are different from all
5372 other call instances. For a normal delete, only a delete taking (void *)
5373 or (void *, size_t) is accepted. For a placement delete, only an exact
5374 match with the placement new is accepted.
5376 CODE is either DELETE_EXPR or VEC_DELETE_EXPR.
5377 ADDR is the pointer to be deleted.
5378 SIZE is the size of the memory block to be deleted.
5379 GLOBAL_P is true if the delete-expression should not consider
5380 class-specific delete operators.
5381 PLACEMENT is the corresponding placement new call, or NULL_TREE.
5383 If this call to "operator delete" is being generated as part to
5384 deallocate memory allocated via a new-expression (as per [expr.new]
5385 which requires that if the initialization throws an exception then
5386 we call a deallocation function), then ALLOC_FN is the allocation
5387 function. */
5389 tree
5390 build_op_delete_call (enum tree_code code, tree addr, tree size,
5391 bool global_p, tree placement,
5392 tree alloc_fn, tsubst_flags_t complain)
5394 tree fn = NULL_TREE;
5395 tree fns, fnname, type, t;
5397 if (addr == error_mark_node)
5398 return error_mark_node;
5400 type = strip_array_types (TREE_TYPE (TREE_TYPE (addr)));
5402 fnname = ansi_opname (code);
5404 if (CLASS_TYPE_P (type)
5405 && COMPLETE_TYPE_P (complete_type (type))
5406 && !global_p)
5407 /* In [class.free]
5409 If the result of the lookup is ambiguous or inaccessible, or if
5410 the lookup selects a placement deallocation function, the
5411 program is ill-formed.
5413 Therefore, we ask lookup_fnfields to complain about ambiguity. */
5415 fns = lookup_fnfields (TYPE_BINFO (type), fnname, 1);
5416 if (fns == error_mark_node)
5417 return error_mark_node;
5419 else
5420 fns = NULL_TREE;
5422 if (fns == NULL_TREE)
5423 fns = lookup_name_nonclass (fnname);
5425 /* Strip const and volatile from addr. */
5426 addr = cp_convert (ptr_type_node, addr, complain);
5428 if (placement)
5430 /* "A declaration of a placement deallocation function matches the
5431 declaration of a placement allocation function if it has the same
5432 number of parameters and, after parameter transformations (8.3.5),
5433 all parameter types except the first are identical."
5435 So we build up the function type we want and ask instantiate_type
5436 to get it for us. */
5437 t = FUNCTION_ARG_CHAIN (alloc_fn);
5438 t = tree_cons (NULL_TREE, ptr_type_node, t);
5439 t = build_function_type (void_type_node, t);
5441 fn = instantiate_type (t, fns, tf_none);
5442 if (fn == error_mark_node)
5443 return NULL_TREE;
5445 if (BASELINK_P (fn))
5446 fn = BASELINK_FUNCTIONS (fn);
5448 /* "If the lookup finds the two-parameter form of a usual deallocation
5449 function (3.7.4.2) and that function, considered as a placement
5450 deallocation function, would have been selected as a match for the
5451 allocation function, the program is ill-formed." */
5452 if (non_placement_deallocation_fn_p (fn))
5454 /* But if the class has an operator delete (void *), then that is
5455 the usual deallocation function, so we shouldn't complain
5456 about using the operator delete (void *, size_t). */
5457 for (t = BASELINK_P (fns) ? BASELINK_FUNCTIONS (fns) : fns;
5458 t; t = OVL_NEXT (t))
5460 tree elt = OVL_CURRENT (t);
5461 if (non_placement_deallocation_fn_p (elt)
5462 && FUNCTION_ARG_CHAIN (elt) == void_list_node)
5463 goto ok;
5465 if (complain & tf_error)
5467 permerror (0, "non-placement deallocation function %q+D", fn);
5468 permerror (input_location, "selected for placement delete");
5470 else
5471 return error_mark_node;
5472 ok:;
5475 else
5476 /* "Any non-placement deallocation function matches a non-placement
5477 allocation function. If the lookup finds a single matching
5478 deallocation function, that function will be called; otherwise, no
5479 deallocation function will be called." */
5480 for (t = BASELINK_P (fns) ? BASELINK_FUNCTIONS (fns) : fns;
5481 t; t = OVL_NEXT (t))
5483 tree elt = OVL_CURRENT (t);
5484 if (non_placement_deallocation_fn_p (elt))
5486 fn = elt;
5487 /* "If a class T has a member deallocation function named
5488 operator delete with exactly one parameter, then that
5489 function is a usual (non-placement) deallocation
5490 function. If class T does not declare such an operator
5491 delete but does declare a member deallocation function named
5492 operator delete with exactly two parameters, the second of
5493 which has type std::size_t (18.2), then this function is a
5494 usual deallocation function."
5496 So (void*) beats (void*, size_t). */
5497 if (FUNCTION_ARG_CHAIN (fn) == void_list_node)
5498 break;
5502 /* If we have a matching function, call it. */
5503 if (fn)
5505 gcc_assert (TREE_CODE (fn) == FUNCTION_DECL);
5507 /* If the FN is a member function, make sure that it is
5508 accessible. */
5509 if (BASELINK_P (fns))
5510 perform_or_defer_access_check (BASELINK_BINFO (fns), fn, fn,
5511 complain);
5513 /* Core issue 901: It's ok to new a type with deleted delete. */
5514 if (DECL_DELETED_FN (fn) && alloc_fn)
5515 return NULL_TREE;
5517 if (placement)
5519 /* The placement args might not be suitable for overload
5520 resolution at this point, so build the call directly. */
5521 int nargs = call_expr_nargs (placement);
5522 tree *argarray = XALLOCAVEC (tree, nargs);
5523 int i;
5524 argarray[0] = addr;
5525 for (i = 1; i < nargs; i++)
5526 argarray[i] = CALL_EXPR_ARG (placement, i);
5527 mark_used (fn);
5528 return build_cxx_call (fn, nargs, argarray, complain);
5530 else
5532 tree ret;
5533 VEC(tree,gc) *args = VEC_alloc (tree, gc, 2);
5534 VEC_quick_push (tree, args, addr);
5535 if (FUNCTION_ARG_CHAIN (fn) != void_list_node)
5536 VEC_quick_push (tree, args, size);
5537 ret = cp_build_function_call_vec (fn, &args, complain);
5538 VEC_free (tree, gc, args);
5539 return ret;
5543 /* [expr.new]
5545 If no unambiguous matching deallocation function can be found,
5546 propagating the exception does not cause the object's memory to
5547 be freed. */
5548 if (alloc_fn)
5550 if ((complain & tf_warning)
5551 && !placement)
5552 warning (0, "no corresponding deallocation function for %qD",
5553 alloc_fn);
5554 return NULL_TREE;
5557 if (complain & tf_error)
5558 error ("no suitable %<operator %s%> for %qT",
5559 operator_name_info[(int)code].name, type);
5560 return error_mark_node;
5563 /* If the current scope isn't allowed to access DECL along
5564 BASETYPE_PATH, give an error. The most derived class in
5565 BASETYPE_PATH is the one used to qualify DECL. DIAG_DECL is
5566 the declaration to use in the error diagnostic. */
5568 bool
5569 enforce_access (tree basetype_path, tree decl, tree diag_decl,
5570 tsubst_flags_t complain)
5572 gcc_assert (TREE_CODE (basetype_path) == TREE_BINFO);
5574 if (!accessible_p (basetype_path, decl, true))
5576 if (complain & tf_error)
5578 if (TREE_PRIVATE (decl))
5579 error ("%q+#D is private", diag_decl);
5580 else if (TREE_PROTECTED (decl))
5581 error ("%q+#D is protected", diag_decl);
5582 else
5583 error ("%q+#D is inaccessible", diag_decl);
5584 error ("within this context");
5586 return false;
5589 return true;
5592 /* Initialize a temporary of type TYPE with EXPR. The FLAGS are a
5593 bitwise or of LOOKUP_* values. If any errors are warnings are
5594 generated, set *DIAGNOSTIC_FN to "error" or "warning",
5595 respectively. If no diagnostics are generated, set *DIAGNOSTIC_FN
5596 to NULL. */
5598 static tree
5599 build_temp (tree expr, tree type, int flags,
5600 diagnostic_t *diagnostic_kind, tsubst_flags_t complain)
5602 int savew, savee;
5603 VEC(tree,gc) *args;
5605 savew = warningcount, savee = errorcount;
5606 args = make_tree_vector_single (expr);
5607 expr = build_special_member_call (NULL_TREE, complete_ctor_identifier,
5608 &args, type, flags, complain);
5609 release_tree_vector (args);
5610 if (warningcount > savew)
5611 *diagnostic_kind = DK_WARNING;
5612 else if (errorcount > savee)
5613 *diagnostic_kind = DK_ERROR;
5614 else
5615 *diagnostic_kind = DK_UNSPECIFIED;
5616 return expr;
5619 /* Perform warnings about peculiar, but valid, conversions from/to NULL.
5620 EXPR is implicitly converted to type TOTYPE.
5621 FN and ARGNUM are used for diagnostics. */
5623 static void
5624 conversion_null_warnings (tree totype, tree expr, tree fn, int argnum)
5626 /* Issue warnings about peculiar, but valid, uses of NULL. */
5627 if (expr == null_node && TREE_CODE (totype) != BOOLEAN_TYPE
5628 && ARITHMETIC_TYPE_P (totype))
5630 source_location loc =
5631 expansion_point_location_if_in_system_header (input_location);
5633 if (fn)
5634 warning_at (loc, OPT_Wconversion_null,
5635 "passing NULL to non-pointer argument %P of %qD",
5636 argnum, fn);
5637 else
5638 warning_at (loc, OPT_Wconversion_null,
5639 "converting to non-pointer type %qT from NULL", totype);
5642 /* Issue warnings if "false" is converted to a NULL pointer */
5643 else if (TREE_CODE (TREE_TYPE (expr)) == BOOLEAN_TYPE
5644 && TYPE_PTR_P (totype))
5646 if (fn)
5647 warning_at (input_location, OPT_Wconversion_null,
5648 "converting %<false%> to pointer type for argument %P "
5649 "of %qD", argnum, fn);
5650 else
5651 warning_at (input_location, OPT_Wconversion_null,
5652 "converting %<false%> to pointer type %qT", totype);
5656 /* Perform the conversions in CONVS on the expression EXPR. FN and
5657 ARGNUM are used for diagnostics. ARGNUM is zero based, -1
5658 indicates the `this' argument of a method. INNER is nonzero when
5659 being called to continue a conversion chain. It is negative when a
5660 reference binding will be applied, positive otherwise. If
5661 ISSUE_CONVERSION_WARNINGS is true, warnings about suspicious
5662 conversions will be emitted if appropriate. If C_CAST_P is true,
5663 this conversion is coming from a C-style cast; in that case,
5664 conversions to inaccessible bases are permitted. */
5666 static tree
5667 convert_like_real (conversion *convs, tree expr, tree fn, int argnum,
5668 int inner, bool issue_conversion_warnings,
5669 bool c_cast_p, tsubst_flags_t complain)
5671 tree totype = convs->type;
5672 diagnostic_t diag_kind;
5673 int flags;
5674 location_t loc = EXPR_LOC_OR_HERE (expr);
5676 if (convs->bad_p && !(complain & tf_error))
5677 return error_mark_node;
5679 if (convs->bad_p
5680 && convs->kind != ck_user
5681 && convs->kind != ck_list
5682 && convs->kind != ck_ambig
5683 && (convs->kind != ck_ref_bind
5684 || convs->user_conv_p)
5685 && convs->kind != ck_rvalue
5686 && convs->kind != ck_base)
5688 conversion *t = convs;
5690 /* Give a helpful error if this is bad because of excess braces. */
5691 if (BRACE_ENCLOSED_INITIALIZER_P (expr)
5692 && SCALAR_TYPE_P (totype)
5693 && CONSTRUCTOR_NELTS (expr) > 0
5694 && BRACE_ENCLOSED_INITIALIZER_P (CONSTRUCTOR_ELT (expr, 0)->value))
5695 permerror (loc, "too many braces around initializer for %qT", totype);
5697 for (; t ; t = next_conversion (t))
5699 if (t->kind == ck_user && t->cand->reason)
5701 permerror (loc, "invalid user-defined conversion "
5702 "from %qT to %qT", TREE_TYPE (expr), totype);
5703 print_z_candidate (loc, "candidate is:", t->cand);
5704 expr = convert_like_real (t, expr, fn, argnum, 1,
5705 /*issue_conversion_warnings=*/false,
5706 /*c_cast_p=*/false,
5707 complain);
5708 if (convs->kind == ck_ref_bind)
5709 return convert_to_reference (totype, expr, CONV_IMPLICIT,
5710 LOOKUP_NORMAL, NULL_TREE,
5711 complain);
5712 else
5713 return cp_convert (totype, expr, complain);
5715 else if (t->kind == ck_user || !t->bad_p)
5717 expr = convert_like_real (t, expr, fn, argnum, 1,
5718 /*issue_conversion_warnings=*/false,
5719 /*c_cast_p=*/false,
5720 complain);
5721 break;
5723 else if (t->kind == ck_ambig)
5724 return convert_like_real (t, expr, fn, argnum, 1,
5725 /*issue_conversion_warnings=*/false,
5726 /*c_cast_p=*/false,
5727 complain);
5728 else if (t->kind == ck_identity)
5729 break;
5732 permerror (loc, "invalid conversion from %qT to %qT",
5733 TREE_TYPE (expr), totype);
5734 if (fn)
5735 permerror (DECL_SOURCE_LOCATION (fn),
5736 " initializing argument %P of %qD", argnum, fn);
5738 return cp_convert (totype, expr, complain);
5741 if (issue_conversion_warnings && (complain & tf_warning))
5742 conversion_null_warnings (totype, expr, fn, argnum);
5744 switch (convs->kind)
5746 case ck_user:
5748 struct z_candidate *cand = convs->cand;
5749 tree convfn = cand->fn;
5750 unsigned i;
5752 /* If we're initializing from {}, it's value-initialization. */
5753 if (BRACE_ENCLOSED_INITIALIZER_P (expr)
5754 && CONSTRUCTOR_NELTS (expr) == 0
5755 && TYPE_HAS_DEFAULT_CONSTRUCTOR (totype))
5757 bool direct = CONSTRUCTOR_IS_DIRECT_INIT (expr);
5758 expr = build_value_init (totype, complain);
5759 expr = get_target_expr_sfinae (expr, complain);
5760 if (expr != error_mark_node)
5762 TARGET_EXPR_LIST_INIT_P (expr) = true;
5763 TARGET_EXPR_DIRECT_INIT_P (expr) = direct;
5765 return expr;
5768 expr = mark_rvalue_use (expr);
5770 /* When converting from an init list we consider explicit
5771 constructors, but actually trying to call one is an error. */
5772 if (DECL_NONCONVERTING_P (convfn) && DECL_CONSTRUCTOR_P (convfn)
5773 /* Unless this is for direct-list-initialization. */
5774 && !(BRACE_ENCLOSED_INITIALIZER_P (expr)
5775 && CONSTRUCTOR_IS_DIRECT_INIT (expr))
5776 /* Unless we're calling it for value-initialization from an
5777 empty list, since that is handled separately in 8.5.4. */
5778 && cand->num_convs > 0)
5780 error ("converting to %qT from initializer list would use "
5781 "explicit constructor %qD", totype, convfn);
5784 /* Set user_conv_p on the argument conversions, so rvalue/base
5785 handling knows not to allow any more UDCs. */
5786 for (i = 0; i < cand->num_convs; ++i)
5787 cand->convs[i]->user_conv_p = true;
5789 expr = build_over_call (cand, LOOKUP_NORMAL, complain);
5791 /* If this is a constructor or a function returning an aggr type,
5792 we need to build up a TARGET_EXPR. */
5793 if (DECL_CONSTRUCTOR_P (convfn))
5795 expr = build_cplus_new (totype, expr, complain);
5797 /* Remember that this was list-initialization. */
5798 if (convs->check_narrowing && expr != error_mark_node)
5799 TARGET_EXPR_LIST_INIT_P (expr) = true;
5802 return expr;
5804 case ck_identity:
5805 expr = mark_rvalue_use (expr);
5806 if (BRACE_ENCLOSED_INITIALIZER_P (expr))
5808 int nelts = CONSTRUCTOR_NELTS (expr);
5809 if (nelts == 0)
5810 expr = build_value_init (totype, complain);
5811 else if (nelts == 1)
5812 expr = CONSTRUCTOR_ELT (expr, 0)->value;
5813 else
5814 gcc_unreachable ();
5817 if (type_unknown_p (expr))
5818 expr = instantiate_type (totype, expr, complain);
5819 /* Convert a constant to its underlying value, unless we are
5820 about to bind it to a reference, in which case we need to
5821 leave it as an lvalue. */
5822 if (inner >= 0)
5824 expr = decl_constant_value_safe (expr);
5825 if (expr == null_node && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (totype))
5826 /* If __null has been converted to an integer type, we do not
5827 want to warn about uses of EXPR as an integer, rather than
5828 as a pointer. */
5829 expr = build_int_cst (totype, 0);
5831 return expr;
5832 case ck_ambig:
5833 /* We leave bad_p off ck_ambig because overload resolution considers
5834 it valid, it just fails when we try to perform it. So we need to
5835 check complain here, too. */
5836 if (complain & tf_error)
5838 /* Call build_user_type_conversion again for the error. */
5839 build_user_type_conversion (totype, convs->u.expr, LOOKUP_NORMAL,
5840 complain);
5841 if (fn)
5842 error (" initializing argument %P of %q+D", argnum, fn);
5844 return error_mark_node;
5846 case ck_list:
5848 /* Conversion to std::initializer_list<T>. */
5849 tree elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (totype), 0);
5850 tree new_ctor = build_constructor (init_list_type_node, NULL);
5851 unsigned len = CONSTRUCTOR_NELTS (expr);
5852 tree array, val, field;
5853 VEC(constructor_elt,gc) *vec = NULL;
5854 unsigned ix;
5856 /* Convert all the elements. */
5857 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expr), ix, val)
5859 tree sub = convert_like_real (convs->u.list[ix], val, fn, argnum,
5860 1, false, false, complain);
5861 if (sub == error_mark_node)
5862 return sub;
5863 if (!BRACE_ENCLOSED_INITIALIZER_P (val))
5864 check_narrowing (TREE_TYPE (sub), val);
5865 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_ctor), NULL_TREE, sub);
5866 if (!TREE_CONSTANT (sub))
5867 TREE_CONSTANT (new_ctor) = false;
5869 /* Build up the array. */
5870 elttype = cp_build_qualified_type
5871 (elttype, cp_type_quals (elttype) | TYPE_QUAL_CONST);
5872 array = build_array_of_n_type (elttype, len);
5873 array = finish_compound_literal (array, new_ctor, complain);
5874 /* Take the address explicitly rather than via decay_conversion
5875 to avoid the error about taking the address of a temporary. */
5876 array = cp_build_addr_expr (array, complain);
5877 array = cp_convert (build_pointer_type (elttype), array, complain);
5879 /* Build up the initializer_list object. */
5880 totype = complete_type (totype);
5881 field = next_initializable_field (TYPE_FIELDS (totype));
5882 CONSTRUCTOR_APPEND_ELT (vec, field, array);
5883 field = next_initializable_field (DECL_CHAIN (field));
5884 CONSTRUCTOR_APPEND_ELT (vec, field, size_int (len));
5885 new_ctor = build_constructor (totype, vec);
5886 return get_target_expr (new_ctor);
5889 case ck_aggr:
5890 if (TREE_CODE (totype) == COMPLEX_TYPE)
5892 tree real = CONSTRUCTOR_ELT (expr, 0)->value;
5893 tree imag = CONSTRUCTOR_ELT (expr, 1)->value;
5894 real = perform_implicit_conversion (TREE_TYPE (totype),
5895 real, complain);
5896 imag = perform_implicit_conversion (TREE_TYPE (totype),
5897 imag, complain);
5898 expr = build2 (COMPLEX_EXPR, totype, real, imag);
5899 return fold_if_not_in_template (expr);
5901 expr = reshape_init (totype, expr, complain);
5902 return get_target_expr (digest_init (totype, expr, complain));
5904 default:
5905 break;
5908 expr = convert_like_real (next_conversion (convs), expr, fn, argnum,
5909 convs->kind == ck_ref_bind ? -1 : 1,
5910 convs->kind == ck_ref_bind ? issue_conversion_warnings : false,
5911 c_cast_p,
5912 complain);
5913 if (expr == error_mark_node)
5914 return error_mark_node;
5916 switch (convs->kind)
5918 case ck_rvalue:
5919 expr = decay_conversion (expr, complain);
5920 if (expr == error_mark_node)
5921 return error_mark_node;
5923 if (! MAYBE_CLASS_TYPE_P (totype))
5924 return expr;
5925 /* Else fall through. */
5926 case ck_base:
5927 if (convs->kind == ck_base && !convs->need_temporary_p)
5929 /* We are going to bind a reference directly to a base-class
5930 subobject of EXPR. */
5931 /* Build an expression for `*((base*) &expr)'. */
5932 expr = cp_build_addr_expr (expr, complain);
5933 expr = convert_to_base (expr, build_pointer_type (totype),
5934 !c_cast_p, /*nonnull=*/true, complain);
5935 expr = cp_build_indirect_ref (expr, RO_IMPLICIT_CONVERSION, complain);
5936 return expr;
5939 /* Copy-initialization where the cv-unqualified version of the source
5940 type is the same class as, or a derived class of, the class of the
5941 destination [is treated as direct-initialization]. [dcl.init] */
5942 flags = LOOKUP_NORMAL|LOOKUP_ONLYCONVERTING;
5943 if (convs->user_conv_p)
5944 /* This conversion is being done in the context of a user-defined
5945 conversion (i.e. the second step of copy-initialization), so
5946 don't allow any more. */
5947 flags |= LOOKUP_NO_CONVERSION;
5948 if (convs->rvaluedness_matches_p)
5949 flags |= LOOKUP_PREFER_RVALUE;
5950 if (TREE_CODE (expr) == TARGET_EXPR
5951 && TARGET_EXPR_LIST_INIT_P (expr))
5952 /* Copy-list-initialization doesn't actually involve a copy. */
5953 return expr;
5954 expr = build_temp (expr, totype, flags, &diag_kind, complain);
5955 if (diag_kind && fn && complain)
5956 emit_diagnostic (diag_kind, DECL_SOURCE_LOCATION (fn), 0,
5957 " initializing argument %P of %qD", argnum, fn);
5958 return build_cplus_new (totype, expr, complain);
5960 case ck_ref_bind:
5962 tree ref_type = totype;
5964 if (convs->bad_p && !next_conversion (convs)->bad_p)
5966 gcc_assert (TYPE_REF_IS_RVALUE (ref_type)
5967 && real_lvalue_p (expr));
5969 error_at (loc, "cannot bind %qT lvalue to %qT",
5970 TREE_TYPE (expr), totype);
5971 if (fn)
5972 error (" initializing argument %P of %q+D", argnum, fn);
5973 return error_mark_node;
5976 /* If necessary, create a temporary.
5978 VA_ARG_EXPR and CONSTRUCTOR expressions are special cases
5979 that need temporaries, even when their types are reference
5980 compatible with the type of reference being bound, so the
5981 upcoming call to cp_build_addr_expr doesn't fail. */
5982 if (convs->need_temporary_p
5983 || TREE_CODE (expr) == CONSTRUCTOR
5984 || TREE_CODE (expr) == VA_ARG_EXPR)
5986 /* Otherwise, a temporary of type "cv1 T1" is created and
5987 initialized from the initializer expression using the rules
5988 for a non-reference copy-initialization (8.5). */
5990 tree type = TREE_TYPE (ref_type);
5991 cp_lvalue_kind lvalue = real_lvalue_p (expr);
5993 gcc_assert (same_type_ignoring_top_level_qualifiers_p
5994 (type, next_conversion (convs)->type));
5995 if (!CP_TYPE_CONST_NON_VOLATILE_P (type)
5996 && !TYPE_REF_IS_RVALUE (ref_type))
5998 /* If the reference is volatile or non-const, we
5999 cannot create a temporary. */
6000 if (lvalue & clk_bitfield)
6001 error_at (loc, "cannot bind bitfield %qE to %qT",
6002 expr, ref_type);
6003 else if (lvalue & clk_packed)
6004 error_at (loc, "cannot bind packed field %qE to %qT",
6005 expr, ref_type);
6006 else
6007 error_at (loc, "cannot bind rvalue %qE to %qT",
6008 expr, ref_type);
6009 return error_mark_node;
6011 /* If the source is a packed field, and we must use a copy
6012 constructor, then building the target expr will require
6013 binding the field to the reference parameter to the
6014 copy constructor, and we'll end up with an infinite
6015 loop. If we can use a bitwise copy, then we'll be
6016 OK. */
6017 if ((lvalue & clk_packed)
6018 && CLASS_TYPE_P (type)
6019 && type_has_nontrivial_copy_init (type))
6021 error_at (loc, "cannot bind packed field %qE to %qT",
6022 expr, ref_type);
6023 return error_mark_node;
6025 if (lvalue & clk_bitfield)
6027 expr = convert_bitfield_to_declared_type (expr);
6028 expr = fold_convert (type, expr);
6030 expr = build_target_expr_with_type (expr, type, complain);
6033 /* Take the address of the thing to which we will bind the
6034 reference. */
6035 expr = cp_build_addr_expr (expr, complain);
6036 if (expr == error_mark_node)
6037 return error_mark_node;
6039 /* Convert it to a pointer to the type referred to by the
6040 reference. This will adjust the pointer if a derived to
6041 base conversion is being performed. */
6042 expr = cp_convert (build_pointer_type (TREE_TYPE (ref_type)),
6043 expr, complain);
6044 /* Convert the pointer to the desired reference type. */
6045 return build_nop (ref_type, expr);
6048 case ck_lvalue:
6049 return decay_conversion (expr, complain);
6051 case ck_qual:
6052 /* Warn about deprecated conversion if appropriate. */
6053 string_conv_p (totype, expr, 1);
6054 break;
6056 case ck_ptr:
6057 if (convs->base_p)
6058 expr = convert_to_base (expr, totype, !c_cast_p,
6059 /*nonnull=*/false, complain);
6060 return build_nop (totype, expr);
6062 case ck_pmem:
6063 return convert_ptrmem (totype, expr, /*allow_inverse_p=*/false,
6064 c_cast_p, complain);
6066 default:
6067 break;
6070 if (convs->check_narrowing)
6071 check_narrowing (totype, expr);
6073 if (issue_conversion_warnings && (complain & tf_warning))
6074 expr = convert_and_check (totype, expr);
6075 else
6076 expr = convert (totype, expr);
6078 return expr;
6081 /* ARG is being passed to a varargs function. Perform any conversions
6082 required. Return the converted value. */
6084 tree
6085 convert_arg_to_ellipsis (tree arg, tsubst_flags_t complain)
6087 tree arg_type;
6088 location_t loc = EXPR_LOC_OR_HERE (arg);
6090 /* [expr.call]
6092 The lvalue-to-rvalue, array-to-pointer, and function-to-pointer
6093 standard conversions are performed. */
6094 arg = decay_conversion (arg, complain);
6095 arg_type = TREE_TYPE (arg);
6096 /* [expr.call]
6098 If the argument has integral or enumeration type that is subject
6099 to the integral promotions (_conv.prom_), or a floating point
6100 type that is subject to the floating point promotion
6101 (_conv.fpprom_), the value of the argument is converted to the
6102 promoted type before the call. */
6103 if (TREE_CODE (arg_type) == REAL_TYPE
6104 && (TYPE_PRECISION (arg_type)
6105 < TYPE_PRECISION (double_type_node))
6106 && !DECIMAL_FLOAT_MODE_P (TYPE_MODE (arg_type)))
6108 if ((complain & tf_warning)
6109 && warn_double_promotion && !c_inhibit_evaluation_warnings)
6110 warning_at (loc, OPT_Wdouble_promotion,
6111 "implicit conversion from %qT to %qT when passing "
6112 "argument to function",
6113 arg_type, double_type_node);
6114 arg = convert_to_real (double_type_node, arg);
6116 else if (NULLPTR_TYPE_P (arg_type))
6117 arg = null_pointer_node;
6118 else if (INTEGRAL_OR_ENUMERATION_TYPE_P (arg_type))
6120 if (SCOPED_ENUM_P (arg_type) && !abi_version_at_least (6))
6122 if (complain & tf_warning)
6123 warning_at (loc, OPT_Wabi, "scoped enum %qT will not promote to an "
6124 "integral type in a future version of GCC", arg_type);
6125 arg = cp_convert (ENUM_UNDERLYING_TYPE (arg_type), arg, complain);
6127 arg = cp_perform_integral_promotions (arg, complain);
6130 arg = require_complete_type_sfinae (arg, complain);
6131 arg_type = TREE_TYPE (arg);
6133 if (arg != error_mark_node
6134 /* In a template (or ill-formed code), we can have an incomplete type
6135 even after require_complete_type_sfinae, in which case we don't know
6136 whether it has trivial copy or not. */
6137 && COMPLETE_TYPE_P (arg_type))
6139 /* Build up a real lvalue-to-rvalue conversion in case the
6140 copy constructor is trivial but not callable. */
6141 if (!cp_unevaluated_operand && CLASS_TYPE_P (arg_type))
6142 force_rvalue (arg, complain);
6144 /* [expr.call] 5.2.2/7:
6145 Passing a potentially-evaluated argument of class type (Clause 9)
6146 with a non-trivial copy constructor or a non-trivial destructor
6147 with no corresponding parameter is conditionally-supported, with
6148 implementation-defined semantics.
6150 We used to just warn here and do a bitwise copy, but now
6151 cp_expr_size will abort if we try to do that.
6153 If the call appears in the context of a sizeof expression,
6154 it is not potentially-evaluated. */
6155 if (cp_unevaluated_operand == 0
6156 && (type_has_nontrivial_copy_init (arg_type)
6157 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (arg_type)))
6159 if (complain & tf_error)
6160 error_at (loc, "cannot pass objects of non-trivially-copyable "
6161 "type %q#T through %<...%>", arg_type);
6162 else
6163 return error_mark_node;
6167 return arg;
6170 /* va_arg (EXPR, TYPE) is a builtin. Make sure it is not abused. */
6172 tree
6173 build_x_va_arg (source_location loc, tree expr, tree type)
6175 if (processing_template_decl)
6176 return build_min (VA_ARG_EXPR, type, expr);
6178 type = complete_type_or_else (type, NULL_TREE);
6180 if (expr == error_mark_node || !type)
6181 return error_mark_node;
6183 expr = mark_lvalue_use (expr);
6185 if (type_has_nontrivial_copy_init (type)
6186 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
6187 || TREE_CODE (type) == REFERENCE_TYPE)
6189 /* Remove reference types so we don't ICE later on. */
6190 tree type1 = non_reference (type);
6191 /* conditionally-supported behavior [expr.call] 5.2.2/7. */
6192 error ("cannot receive objects of non-trivially-copyable type %q#T "
6193 "through %<...%>; ", type);
6194 expr = convert (build_pointer_type (type1), null_node);
6195 expr = cp_build_indirect_ref (expr, RO_NULL, tf_warning_or_error);
6196 return expr;
6199 return build_va_arg (loc, expr, type);
6202 /* TYPE has been given to va_arg. Apply the default conversions which
6203 would have happened when passed via ellipsis. Return the promoted
6204 type, or the passed type if there is no change. */
6206 tree
6207 cxx_type_promotes_to (tree type)
6209 tree promote;
6211 /* Perform the array-to-pointer and function-to-pointer
6212 conversions. */
6213 type = type_decays_to (type);
6215 promote = type_promotes_to (type);
6216 if (same_type_p (type, promote))
6217 promote = type;
6219 return promote;
6222 /* ARG is a default argument expression being passed to a parameter of
6223 the indicated TYPE, which is a parameter to FN. PARMNUM is the
6224 zero-based argument number. Do any required conversions. Return
6225 the converted value. */
6227 static GTY(()) VEC(tree,gc) *default_arg_context;
6228 void
6229 push_defarg_context (tree fn)
6230 { VEC_safe_push (tree, gc, default_arg_context, fn); }
6231 void
6232 pop_defarg_context (void)
6233 { VEC_pop (tree, default_arg_context); }
6235 tree
6236 convert_default_arg (tree type, tree arg, tree fn, int parmnum,
6237 tsubst_flags_t complain)
6239 int i;
6240 tree t;
6242 /* See through clones. */
6243 fn = DECL_ORIGIN (fn);
6245 /* Detect recursion. */
6246 FOR_EACH_VEC_ELT (tree, default_arg_context, i, t)
6247 if (t == fn)
6249 if (complain & tf_error)
6250 error ("recursive evaluation of default argument for %q#D", fn);
6251 return error_mark_node;
6254 /* If the ARG is an unparsed default argument expression, the
6255 conversion cannot be performed. */
6256 if (TREE_CODE (arg) == DEFAULT_ARG)
6258 if (complain & tf_error)
6259 error ("call to %qD uses the default argument for parameter %P, which "
6260 "is not yet defined", fn, parmnum);
6261 return error_mark_node;
6264 push_defarg_context (fn);
6266 if (fn && DECL_TEMPLATE_INFO (fn))
6267 arg = tsubst_default_argument (fn, type, arg);
6269 /* Due to:
6271 [dcl.fct.default]
6273 The names in the expression are bound, and the semantic
6274 constraints are checked, at the point where the default
6275 expressions appears.
6277 we must not perform access checks here. */
6278 push_deferring_access_checks (dk_no_check);
6279 /* We must make a copy of ARG, in case subsequent processing
6280 alters any part of it. */
6281 arg = break_out_target_exprs (arg);
6282 if (TREE_CODE (arg) == CONSTRUCTOR)
6284 arg = digest_init (type, arg, complain);
6285 arg = convert_for_initialization (0, type, arg, LOOKUP_IMPLICIT,
6286 ICR_DEFAULT_ARGUMENT, fn, parmnum,
6287 complain);
6289 else
6291 arg = convert_for_initialization (0, type, arg, LOOKUP_IMPLICIT,
6292 ICR_DEFAULT_ARGUMENT, fn, parmnum,
6293 complain);
6294 arg = convert_for_arg_passing (type, arg, complain);
6296 pop_deferring_access_checks();
6298 pop_defarg_context ();
6300 return arg;
6303 /* Returns the type which will really be used for passing an argument of
6304 type TYPE. */
6306 tree
6307 type_passed_as (tree type)
6309 /* Pass classes with copy ctors by invisible reference. */
6310 if (TREE_ADDRESSABLE (type))
6312 type = build_reference_type (type);
6313 /* There are no other pointers to this temporary. */
6314 type = cp_build_qualified_type (type, TYPE_QUAL_RESTRICT);
6316 else if (targetm.calls.promote_prototypes (type)
6317 && INTEGRAL_TYPE_P (type)
6318 && COMPLETE_TYPE_P (type)
6319 && INT_CST_LT_UNSIGNED (TYPE_SIZE (type),
6320 TYPE_SIZE (integer_type_node)))
6321 type = integer_type_node;
6323 return type;
6326 /* Actually perform the appropriate conversion. */
6328 tree
6329 convert_for_arg_passing (tree type, tree val, tsubst_flags_t complain)
6331 tree bitfield_type;
6333 /* If VAL is a bitfield, then -- since it has already been converted
6334 to TYPE -- it cannot have a precision greater than TYPE.
6336 If it has a smaller precision, we must widen it here. For
6337 example, passing "int f:3;" to a function expecting an "int" will
6338 not result in any conversion before this point.
6340 If the precision is the same we must not risk widening. For
6341 example, the COMPONENT_REF for a 32-bit "long long" bitfield will
6342 often have type "int", even though the C++ type for the field is
6343 "long long". If the value is being passed to a function
6344 expecting an "int", then no conversions will be required. But,
6345 if we call convert_bitfield_to_declared_type, the bitfield will
6346 be converted to "long long". */
6347 bitfield_type = is_bitfield_expr_with_lowered_type (val);
6348 if (bitfield_type
6349 && TYPE_PRECISION (TREE_TYPE (val)) < TYPE_PRECISION (type))
6350 val = convert_to_integer (TYPE_MAIN_VARIANT (bitfield_type), val);
6352 if (val == error_mark_node)
6354 /* Pass classes with copy ctors by invisible reference. */
6355 else if (TREE_ADDRESSABLE (type))
6356 val = build1 (ADDR_EXPR, build_reference_type (type), val);
6357 else if (targetm.calls.promote_prototypes (type)
6358 && INTEGRAL_TYPE_P (type)
6359 && COMPLETE_TYPE_P (type)
6360 && INT_CST_LT_UNSIGNED (TYPE_SIZE (type),
6361 TYPE_SIZE (integer_type_node)))
6362 val = cp_perform_integral_promotions (val, complain);
6363 if ((complain & tf_warning)
6364 && warn_suggest_attribute_format)
6366 tree rhstype = TREE_TYPE (val);
6367 const enum tree_code coder = TREE_CODE (rhstype);
6368 const enum tree_code codel = TREE_CODE (type);
6369 if ((codel == POINTER_TYPE || codel == REFERENCE_TYPE)
6370 && coder == codel
6371 && check_missing_format_attribute (type, rhstype))
6372 warning (OPT_Wsuggest_attribute_format,
6373 "argument of function call might be a candidate for a format attribute");
6375 return val;
6378 /* Returns true iff FN is a function with magic varargs, i.e. ones for
6379 which no conversions at all should be done. This is true for some
6380 builtins which don't act like normal functions. */
6382 static bool
6383 magic_varargs_p (tree fn)
6385 if (DECL_BUILT_IN (fn))
6386 switch (DECL_FUNCTION_CODE (fn))
6388 case BUILT_IN_CLASSIFY_TYPE:
6389 case BUILT_IN_CONSTANT_P:
6390 case BUILT_IN_NEXT_ARG:
6391 case BUILT_IN_VA_START:
6392 return true;
6394 default:;
6395 return lookup_attribute ("type generic",
6396 TYPE_ATTRIBUTES (TREE_TYPE (fn))) != 0;
6399 return false;
6402 /* Subroutine of the various build_*_call functions. Overload resolution
6403 has chosen a winning candidate CAND; build up a CALL_EXPR accordingly.
6404 ARGS is a TREE_LIST of the unconverted arguments to the call. FLAGS is a
6405 bitmask of various LOOKUP_* flags which apply to the call itself. */
6407 static tree
6408 build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain)
6410 tree fn = cand->fn;
6411 const VEC(tree,gc) *args = cand->args;
6412 tree first_arg = cand->first_arg;
6413 conversion **convs = cand->convs;
6414 conversion *conv;
6415 tree parm = TYPE_ARG_TYPES (TREE_TYPE (fn));
6416 int parmlen;
6417 tree val;
6418 int i = 0;
6419 int j = 0;
6420 unsigned int arg_index = 0;
6421 int is_method = 0;
6422 int nargs;
6423 tree *argarray;
6424 bool already_used = false;
6426 /* In a template, there is no need to perform all of the work that
6427 is normally done. We are only interested in the type of the call
6428 expression, i.e., the return type of the function. Any semantic
6429 errors will be deferred until the template is instantiated. */
6430 if (processing_template_decl)
6432 tree expr, addr;
6433 tree return_type;
6434 const tree *argarray;
6435 unsigned int nargs;
6437 return_type = TREE_TYPE (TREE_TYPE (fn));
6438 nargs = VEC_length (tree, args);
6439 if (first_arg == NULL_TREE)
6440 argarray = VEC_address (tree, CONST_CAST (VEC(tree,gc) *, args));
6441 else
6443 tree *alcarray;
6444 unsigned int ix;
6445 tree arg;
6447 ++nargs;
6448 alcarray = XALLOCAVEC (tree, nargs);
6449 alcarray[0] = first_arg;
6450 FOR_EACH_VEC_ELT (tree, args, ix, arg)
6451 alcarray[ix + 1] = arg;
6452 argarray = alcarray;
6455 addr = build_addr_func (fn, complain);
6456 if (addr == error_mark_node)
6457 return error_mark_node;
6458 expr = build_call_array_loc (input_location, return_type,
6459 addr, nargs, argarray);
6460 if (TREE_THIS_VOLATILE (fn) && cfun)
6461 current_function_returns_abnormally = 1;
6462 return convert_from_reference (expr);
6465 /* Give any warnings we noticed during overload resolution. */
6466 if (cand->warnings && (complain & tf_warning))
6468 struct candidate_warning *w;
6469 for (w = cand->warnings; w; w = w->next)
6470 joust (cand, w->loser, 1, complain);
6473 /* Make =delete work with SFINAE. */
6474 if (DECL_DELETED_FN (fn) && !(complain & tf_error))
6475 return error_mark_node;
6477 if (DECL_FUNCTION_MEMBER_P (fn))
6479 tree access_fn;
6480 /* If FN is a template function, two cases must be considered.
6481 For example:
6483 struct A {
6484 protected:
6485 template <class T> void f();
6487 template <class T> struct B {
6488 protected:
6489 void g();
6491 struct C : A, B<int> {
6492 using A::f; // #1
6493 using B<int>::g; // #2
6496 In case #1 where `A::f' is a member template, DECL_ACCESS is
6497 recorded in the primary template but not in its specialization.
6498 We check access of FN using its primary template.
6500 In case #2, where `B<int>::g' has a DECL_TEMPLATE_INFO simply
6501 because it is a member of class template B, DECL_ACCESS is
6502 recorded in the specialization `B<int>::g'. We cannot use its
6503 primary template because `B<T>::g' and `B<int>::g' may have
6504 different access. */
6505 if (DECL_TEMPLATE_INFO (fn)
6506 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (fn)))
6507 access_fn = DECL_TI_TEMPLATE (fn);
6508 else
6509 access_fn = fn;
6510 if (!perform_or_defer_access_check (cand->access_path, access_fn,
6511 fn, complain))
6512 return error_mark_node;
6515 /* If we're checking for implicit delete, don't bother with argument
6516 conversions. */
6517 if (flags & LOOKUP_SPECULATIVE)
6519 if (DECL_DELETED_FN (fn))
6521 if (complain & tf_error)
6522 mark_used (fn);
6523 return error_mark_node;
6525 if (cand->viable == 1)
6526 return fn;
6527 else if (!(complain & tf_error))
6528 /* Reject bad conversions now. */
6529 return error_mark_node;
6530 /* else continue to get conversion error. */
6533 /* Find maximum size of vector to hold converted arguments. */
6534 parmlen = list_length (parm);
6535 nargs = VEC_length (tree, args) + (first_arg != NULL_TREE ? 1 : 0);
6536 if (parmlen > nargs)
6537 nargs = parmlen;
6538 argarray = XALLOCAVEC (tree, nargs);
6540 /* The implicit parameters to a constructor are not considered by overload
6541 resolution, and must be of the proper type. */
6542 if (DECL_CONSTRUCTOR_P (fn))
6544 if (first_arg != NULL_TREE)
6546 argarray[j++] = first_arg;
6547 first_arg = NULL_TREE;
6549 else
6551 argarray[j++] = VEC_index (tree, args, arg_index);
6552 ++arg_index;
6554 parm = TREE_CHAIN (parm);
6555 /* We should never try to call the abstract constructor. */
6556 gcc_assert (!DECL_HAS_IN_CHARGE_PARM_P (fn));
6558 if (DECL_HAS_VTT_PARM_P (fn))
6560 argarray[j++] = VEC_index (tree, args, arg_index);
6561 ++arg_index;
6562 parm = TREE_CHAIN (parm);
6565 /* Bypass access control for 'this' parameter. */
6566 else if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
6568 tree parmtype = TREE_VALUE (parm);
6569 tree arg = (first_arg != NULL_TREE
6570 ? first_arg
6571 : VEC_index (tree, args, arg_index));
6572 tree argtype = TREE_TYPE (arg);
6573 tree converted_arg;
6574 tree base_binfo;
6576 if (convs[i]->bad_p)
6578 if (complain & tf_error)
6579 permerror (input_location, "passing %qT as %<this%> argument of %q#D discards qualifiers",
6580 TREE_TYPE (argtype), fn);
6581 else
6582 return error_mark_node;
6585 /* See if the function member or the whole class type is declared
6586 final and the call can be devirtualized. */
6587 if (DECL_FINAL_P (fn)
6588 || CLASSTYPE_FINAL (TYPE_METHOD_BASETYPE (TREE_TYPE (fn))))
6589 flags |= LOOKUP_NONVIRTUAL;
6591 /* [class.mfct.nonstatic]: If a nonstatic member function of a class
6592 X is called for an object that is not of type X, or of a type
6593 derived from X, the behavior is undefined.
6595 So we can assume that anything passed as 'this' is non-null, and
6596 optimize accordingly. */
6597 gcc_assert (TREE_CODE (parmtype) == POINTER_TYPE);
6598 /* Convert to the base in which the function was declared. */
6599 gcc_assert (cand->conversion_path != NULL_TREE);
6600 converted_arg = build_base_path (PLUS_EXPR,
6601 arg,
6602 cand->conversion_path,
6603 1, complain);
6604 /* Check that the base class is accessible. */
6605 if (!accessible_base_p (TREE_TYPE (argtype),
6606 BINFO_TYPE (cand->conversion_path), true))
6607 error ("%qT is not an accessible base of %qT",
6608 BINFO_TYPE (cand->conversion_path),
6609 TREE_TYPE (argtype));
6610 /* If fn was found by a using declaration, the conversion path
6611 will be to the derived class, not the base declaring fn. We
6612 must convert from derived to base. */
6613 base_binfo = lookup_base (TREE_TYPE (TREE_TYPE (converted_arg)),
6614 TREE_TYPE (parmtype), ba_unique,
6615 NULL, complain);
6616 converted_arg = build_base_path (PLUS_EXPR, converted_arg,
6617 base_binfo, 1, complain);
6619 argarray[j++] = converted_arg;
6620 parm = TREE_CHAIN (parm);
6621 if (first_arg != NULL_TREE)
6622 first_arg = NULL_TREE;
6623 else
6624 ++arg_index;
6625 ++i;
6626 is_method = 1;
6629 gcc_assert (first_arg == NULL_TREE);
6630 for (; arg_index < VEC_length (tree, args) && parm;
6631 parm = TREE_CHAIN (parm), ++arg_index, ++i)
6633 tree type = TREE_VALUE (parm);
6634 tree arg = VEC_index (tree, args, arg_index);
6635 bool conversion_warning = true;
6637 conv = convs[i];
6639 /* If the argument is NULL and used to (implicitly) instantiate a
6640 template function (and bind one of the template arguments to
6641 the type of 'long int'), we don't want to warn about passing NULL
6642 to non-pointer argument.
6643 For example, if we have this template function:
6645 template<typename T> void func(T x) {}
6647 we want to warn (when -Wconversion is enabled) in this case:
6649 void foo() {
6650 func<int>(NULL);
6653 but not in this case:
6655 void foo() {
6656 func(NULL);
6659 if (arg == null_node
6660 && DECL_TEMPLATE_INFO (fn)
6661 && cand->template_decl
6662 && !(flags & LOOKUP_EXPLICIT_TMPL_ARGS))
6663 conversion_warning = false;
6665 /* Warn about initializer_list deduction that isn't currently in the
6666 working draft. */
6667 if (cxx_dialect > cxx98
6668 && flag_deduce_init_list
6669 && cand->template_decl
6670 && is_std_init_list (non_reference (type))
6671 && BRACE_ENCLOSED_INITIALIZER_P (arg))
6673 tree tmpl = TI_TEMPLATE (cand->template_decl);
6674 tree realparm = chain_index (j, DECL_ARGUMENTS (cand->fn));
6675 tree patparm = get_pattern_parm (realparm, tmpl);
6676 tree pattype = TREE_TYPE (patparm);
6677 if (PACK_EXPANSION_P (pattype))
6678 pattype = PACK_EXPANSION_PATTERN (pattype);
6679 pattype = non_reference (pattype);
6681 if (TREE_CODE (pattype) == TEMPLATE_TYPE_PARM
6682 && (cand->explicit_targs == NULL_TREE
6683 || (TREE_VEC_LENGTH (cand->explicit_targs)
6684 <= TEMPLATE_TYPE_IDX (pattype))))
6686 pedwarn (input_location, 0, "deducing %qT as %qT",
6687 non_reference (TREE_TYPE (patparm)),
6688 non_reference (type));
6689 pedwarn (input_location, 0, " in call to %q+D", cand->fn);
6690 pedwarn (input_location, 0,
6691 " (you can disable this with -fno-deduce-init-list)");
6695 val = convert_like_with_context (conv, arg, fn, i-is_method,
6696 conversion_warning
6697 ? complain
6698 : complain & (~tf_warning));
6700 val = convert_for_arg_passing (type, val, complain);
6701 if (val == error_mark_node)
6702 return error_mark_node;
6703 else
6704 argarray[j++] = val;
6707 /* Default arguments */
6708 for (; parm && parm != void_list_node; parm = TREE_CHAIN (parm), i++)
6710 if (TREE_VALUE (parm) == error_mark_node)
6711 return error_mark_node;
6712 argarray[j++] = convert_default_arg (TREE_VALUE (parm),
6713 TREE_PURPOSE (parm),
6714 fn, i - is_method,
6715 complain);
6718 /* Ellipsis */
6719 for (; arg_index < VEC_length (tree, args); ++arg_index)
6721 tree a = VEC_index (tree, args, arg_index);
6722 if (magic_varargs_p (fn))
6723 /* Do no conversions for magic varargs. */
6724 a = mark_type_use (a);
6725 else
6726 a = convert_arg_to_ellipsis (a, complain);
6727 argarray[j++] = a;
6730 gcc_assert (j <= nargs);
6731 nargs = j;
6733 check_function_arguments (TREE_TYPE (fn), nargs, argarray);
6735 /* Avoid actually calling copy constructors and copy assignment operators,
6736 if possible. */
6738 if (! flag_elide_constructors)
6739 /* Do things the hard way. */;
6740 else if (cand->num_convs == 1
6741 && (DECL_COPY_CONSTRUCTOR_P (fn)
6742 || DECL_MOVE_CONSTRUCTOR_P (fn)))
6744 tree targ;
6745 tree arg = argarray[num_artificial_parms_for (fn)];
6746 tree fa;
6747 bool trivial = trivial_fn_p (fn);
6749 /* Pull out the real argument, disregarding const-correctness. */
6750 targ = arg;
6751 while (CONVERT_EXPR_P (targ)
6752 || TREE_CODE (targ) == NON_LVALUE_EXPR)
6753 targ = TREE_OPERAND (targ, 0);
6754 if (TREE_CODE (targ) == ADDR_EXPR)
6756 targ = TREE_OPERAND (targ, 0);
6757 if (!same_type_ignoring_top_level_qualifiers_p
6758 (TREE_TYPE (TREE_TYPE (arg)), TREE_TYPE (targ)))
6759 targ = NULL_TREE;
6761 else
6762 targ = NULL_TREE;
6764 if (targ)
6765 arg = targ;
6766 else
6767 arg = cp_build_indirect_ref (arg, RO_NULL, complain);
6769 /* [class.copy]: the copy constructor is implicitly defined even if
6770 the implementation elided its use. */
6771 if (!trivial || DECL_DELETED_FN (fn))
6773 mark_used (fn);
6774 already_used = true;
6777 /* If we're creating a temp and we already have one, don't create a
6778 new one. If we're not creating a temp but we get one, use
6779 INIT_EXPR to collapse the temp into our target. Otherwise, if the
6780 ctor is trivial, do a bitwise copy with a simple TARGET_EXPR for a
6781 temp or an INIT_EXPR otherwise. */
6782 fa = argarray[0];
6783 if (integer_zerop (fa))
6785 if (TREE_CODE (arg) == TARGET_EXPR)
6786 return arg;
6787 else if (trivial)
6788 return force_target_expr (DECL_CONTEXT (fn), arg, complain);
6790 else if (TREE_CODE (arg) == TARGET_EXPR || trivial)
6792 tree to = stabilize_reference (cp_build_indirect_ref (fa, RO_NULL,
6793 complain));
6795 val = build2 (INIT_EXPR, DECL_CONTEXT (fn), to, arg);
6796 return val;
6799 else if (DECL_OVERLOADED_OPERATOR_P (fn) == NOP_EXPR
6800 && trivial_fn_p (fn)
6801 && !DECL_DELETED_FN (fn))
6803 tree to = stabilize_reference
6804 (cp_build_indirect_ref (argarray[0], RO_NULL, complain));
6805 tree type = TREE_TYPE (to);
6806 tree as_base = CLASSTYPE_AS_BASE (type);
6807 tree arg = argarray[1];
6809 if (is_really_empty_class (type))
6811 /* Avoid copying empty classes. */
6812 val = build2 (COMPOUND_EXPR, void_type_node, to, arg);
6813 TREE_NO_WARNING (val) = 1;
6814 val = build2 (COMPOUND_EXPR, type, val, to);
6815 TREE_NO_WARNING (val) = 1;
6817 else if (tree_int_cst_equal (TYPE_SIZE (type), TYPE_SIZE (as_base)))
6819 arg = cp_build_indirect_ref (arg, RO_NULL, complain);
6820 val = build2 (MODIFY_EXPR, TREE_TYPE (to), to, arg);
6822 else
6824 /* We must only copy the non-tail padding parts. */
6825 tree arg0, arg2, t;
6826 tree array_type, alias_set;
6828 arg2 = TYPE_SIZE_UNIT (as_base);
6829 arg0 = cp_build_addr_expr (to, complain);
6831 array_type = build_array_type (char_type_node,
6832 build_index_type
6833 (size_binop (MINUS_EXPR,
6834 arg2, size_int (1))));
6835 alias_set = build_int_cst (build_pointer_type (type), 0);
6836 t = build2 (MODIFY_EXPR, void_type_node,
6837 build2 (MEM_REF, array_type, arg0, alias_set),
6838 build2 (MEM_REF, array_type, arg, alias_set));
6839 val = build2 (COMPOUND_EXPR, TREE_TYPE (to), t, to);
6840 TREE_NO_WARNING (val) = 1;
6843 return val;
6845 else if (DECL_DESTRUCTOR_P (fn)
6846 && trivial_fn_p (fn)
6847 && !DECL_DELETED_FN (fn))
6848 return fold_convert (void_type_node, argarray[0]);
6849 /* FIXME handle trivial default constructor, too. */
6851 if (!already_used)
6852 mark_used (fn);
6854 if (DECL_VINDEX (fn) && (flags & LOOKUP_NONVIRTUAL) == 0)
6856 tree t;
6857 tree binfo = lookup_base (TREE_TYPE (TREE_TYPE (argarray[0])),
6858 DECL_CONTEXT (fn),
6859 ba_any, NULL, complain);
6860 gcc_assert (binfo && binfo != error_mark_node);
6862 /* Warn about deprecated virtual functions now, since we're about
6863 to throw away the decl. */
6864 if (TREE_DEPRECATED (fn))
6865 warn_deprecated_use (fn, NULL_TREE);
6867 argarray[0] = build_base_path (PLUS_EXPR, argarray[0], binfo, 1,
6868 complain);
6869 if (TREE_SIDE_EFFECTS (argarray[0]))
6870 argarray[0] = save_expr (argarray[0]);
6871 t = build_pointer_type (TREE_TYPE (fn));
6872 if (DECL_CONTEXT (fn) && TYPE_JAVA_INTERFACE (DECL_CONTEXT (fn)))
6873 fn = build_java_interface_fn_ref (fn, argarray[0]);
6874 else
6875 fn = build_vfn_ref (argarray[0], DECL_VINDEX (fn));
6876 TREE_TYPE (fn) = t;
6878 else
6880 fn = build_addr_func (fn, complain);
6881 if (fn == error_mark_node)
6882 return error_mark_node;
6885 return build_cxx_call (fn, nargs, argarray, complain);
6888 /* Build and return a call to FN, using NARGS arguments in ARGARRAY.
6889 This function performs no overload resolution, conversion, or other
6890 high-level operations. */
6892 tree
6893 build_cxx_call (tree fn, int nargs, tree *argarray,
6894 tsubst_flags_t complain)
6896 tree fndecl;
6897 int optimize_sav;
6899 /* Remember roughly where this call is. */
6900 location_t loc = EXPR_LOC_OR_HERE (fn);
6901 fn = build_call_a (fn, nargs, argarray);
6902 SET_EXPR_LOCATION (fn, loc);
6904 fndecl = get_callee_fndecl (fn);
6906 /* Check that arguments to builtin functions match the expectations. */
6907 if (fndecl
6908 && DECL_BUILT_IN (fndecl)
6909 && DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_NORMAL
6910 && !check_builtin_function_arguments (fndecl, nargs, argarray))
6911 return error_mark_node;
6913 /* Some built-in function calls will be evaluated at compile-time in
6914 fold (). Set optimize to 1 when folding __builtin_constant_p inside
6915 a constexpr function so that fold_builtin_1 doesn't fold it to 0. */
6916 optimize_sav = optimize;
6917 if (!optimize && fndecl && DECL_IS_BUILTIN_CONSTANT_P (fndecl)
6918 && current_function_decl
6919 && DECL_DECLARED_CONSTEXPR_P (current_function_decl))
6920 optimize = 1;
6921 fn = fold_if_not_in_template (fn);
6922 optimize = optimize_sav;
6924 if (VOID_TYPE_P (TREE_TYPE (fn)))
6925 return fn;
6927 fn = require_complete_type_sfinae (fn, complain);
6928 if (fn == error_mark_node)
6929 return error_mark_node;
6931 if (MAYBE_CLASS_TYPE_P (TREE_TYPE (fn)))
6932 fn = build_cplus_new (TREE_TYPE (fn), fn, complain);
6933 return convert_from_reference (fn);
6936 static GTY(()) tree java_iface_lookup_fn;
6938 /* Make an expression which yields the address of the Java interface
6939 method FN. This is achieved by generating a call to libjava's
6940 _Jv_LookupInterfaceMethodIdx(). */
6942 static tree
6943 build_java_interface_fn_ref (tree fn, tree instance)
6945 tree lookup_fn, method, idx;
6946 tree klass_ref, iface, iface_ref;
6947 int i;
6949 if (!java_iface_lookup_fn)
6951 tree ftype = build_function_type_list (ptr_type_node,
6952 ptr_type_node, ptr_type_node,
6953 java_int_type_node, NULL_TREE);
6954 java_iface_lookup_fn
6955 = add_builtin_function ("_Jv_LookupInterfaceMethodIdx", ftype,
6956 0, NOT_BUILT_IN, NULL, NULL_TREE);
6959 /* Look up the pointer to the runtime java.lang.Class object for `instance'.
6960 This is the first entry in the vtable. */
6961 klass_ref = build_vtbl_ref (cp_build_indirect_ref (instance, RO_NULL,
6962 tf_warning_or_error),
6963 integer_zero_node);
6965 /* Get the java.lang.Class pointer for the interface being called. */
6966 iface = DECL_CONTEXT (fn);
6967 iface_ref = lookup_field (iface, get_identifier ("class$"), 0, false);
6968 if (!iface_ref || TREE_CODE (iface_ref) != VAR_DECL
6969 || DECL_CONTEXT (iface_ref) != iface)
6971 error ("could not find class$ field in java interface type %qT",
6972 iface);
6973 return error_mark_node;
6975 iface_ref = build_address (iface_ref);
6976 iface_ref = convert (build_pointer_type (iface), iface_ref);
6978 /* Determine the itable index of FN. */
6979 i = 1;
6980 for (method = TYPE_METHODS (iface); method; method = DECL_CHAIN (method))
6982 if (!DECL_VIRTUAL_P (method))
6983 continue;
6984 if (fn == method)
6985 break;
6986 i++;
6988 idx = build_int_cst (NULL_TREE, i);
6990 lookup_fn = build1 (ADDR_EXPR,
6991 build_pointer_type (TREE_TYPE (java_iface_lookup_fn)),
6992 java_iface_lookup_fn);
6993 return build_call_nary (ptr_type_node, lookup_fn,
6994 3, klass_ref, iface_ref, idx);
6997 /* Returns the value to use for the in-charge parameter when making a
6998 call to a function with the indicated NAME.
7000 FIXME:Can't we find a neater way to do this mapping? */
7002 tree
7003 in_charge_arg_for_name (tree name)
7005 if (name == base_ctor_identifier
7006 || name == base_dtor_identifier)
7007 return integer_zero_node;
7008 else if (name == complete_ctor_identifier)
7009 return integer_one_node;
7010 else if (name == complete_dtor_identifier)
7011 return integer_two_node;
7012 else if (name == deleting_dtor_identifier)
7013 return integer_three_node;
7015 /* This function should only be called with one of the names listed
7016 above. */
7017 gcc_unreachable ();
7018 return NULL_TREE;
7021 /* Build a call to a constructor, destructor, or an assignment
7022 operator for INSTANCE, an expression with class type. NAME
7023 indicates the special member function to call; *ARGS are the
7024 arguments. ARGS may be NULL. This may change ARGS. BINFO
7025 indicates the base of INSTANCE that is to be passed as the `this'
7026 parameter to the member function called.
7028 FLAGS are the LOOKUP_* flags to use when processing the call.
7030 If NAME indicates a complete object constructor, INSTANCE may be
7031 NULL_TREE. In this case, the caller will call build_cplus_new to
7032 store the newly constructed object into a VAR_DECL. */
7034 tree
7035 build_special_member_call (tree instance, tree name, VEC(tree,gc) **args,
7036 tree binfo, int flags, tsubst_flags_t complain)
7038 tree fns;
7039 /* The type of the subobject to be constructed or destroyed. */
7040 tree class_type;
7041 VEC(tree,gc) *allocated = NULL;
7042 tree ret;
7044 gcc_assert (name == complete_ctor_identifier
7045 || name == base_ctor_identifier
7046 || name == complete_dtor_identifier
7047 || name == base_dtor_identifier
7048 || name == deleting_dtor_identifier
7049 || name == ansi_assopname (NOP_EXPR));
7050 if (TYPE_P (binfo))
7052 /* Resolve the name. */
7053 if (!complete_type_or_maybe_complain (binfo, NULL_TREE, complain))
7054 return error_mark_node;
7056 binfo = TYPE_BINFO (binfo);
7059 gcc_assert (binfo != NULL_TREE);
7061 class_type = BINFO_TYPE (binfo);
7063 /* Handle the special case where INSTANCE is NULL_TREE. */
7064 if (name == complete_ctor_identifier && !instance)
7066 instance = build_int_cst (build_pointer_type (class_type), 0);
7067 instance = build1 (INDIRECT_REF, class_type, instance);
7069 else
7071 if (name == complete_dtor_identifier
7072 || name == base_dtor_identifier
7073 || name == deleting_dtor_identifier)
7074 gcc_assert (args == NULL || VEC_empty (tree, *args));
7076 /* Convert to the base class, if necessary. */
7077 if (!same_type_ignoring_top_level_qualifiers_p
7078 (TREE_TYPE (instance), BINFO_TYPE (binfo)))
7080 if (name != ansi_assopname (NOP_EXPR))
7081 /* For constructors and destructors, either the base is
7082 non-virtual, or it is virtual but we are doing the
7083 conversion from a constructor or destructor for the
7084 complete object. In either case, we can convert
7085 statically. */
7086 instance = convert_to_base_statically (instance, binfo);
7087 else
7088 /* However, for assignment operators, we must convert
7089 dynamically if the base is virtual. */
7090 instance = build_base_path (PLUS_EXPR, instance,
7091 binfo, /*nonnull=*/1, complain);
7095 gcc_assert (instance != NULL_TREE);
7097 fns = lookup_fnfields (binfo, name, 1);
7099 /* When making a call to a constructor or destructor for a subobject
7100 that uses virtual base classes, pass down a pointer to a VTT for
7101 the subobject. */
7102 if ((name == base_ctor_identifier
7103 || name == base_dtor_identifier)
7104 && CLASSTYPE_VBASECLASSES (class_type))
7106 tree vtt;
7107 tree sub_vtt;
7109 /* If the current function is a complete object constructor
7110 or destructor, then we fetch the VTT directly.
7111 Otherwise, we look it up using the VTT we were given. */
7112 vtt = DECL_CHAIN (CLASSTYPE_VTABLES (current_class_type));
7113 vtt = decay_conversion (vtt, complain);
7114 if (vtt == error_mark_node)
7115 return error_mark_node;
7116 vtt = build3 (COND_EXPR, TREE_TYPE (vtt),
7117 build2 (EQ_EXPR, boolean_type_node,
7118 current_in_charge_parm, integer_zero_node),
7119 current_vtt_parm,
7120 vtt);
7121 if (BINFO_SUBVTT_INDEX (binfo))
7122 sub_vtt = fold_build_pointer_plus (vtt, BINFO_SUBVTT_INDEX (binfo));
7123 else
7124 sub_vtt = vtt;
7126 if (args == NULL)
7128 allocated = make_tree_vector ();
7129 args = &allocated;
7132 VEC_safe_insert (tree, gc, *args, 0, sub_vtt);
7135 ret = build_new_method_call (instance, fns, args,
7136 TYPE_BINFO (BINFO_TYPE (binfo)),
7137 flags, /*fn=*/NULL,
7138 complain);
7140 if (allocated != NULL)
7141 release_tree_vector (allocated);
7143 return ret;
7146 /* Return the NAME, as a C string. The NAME indicates a function that
7147 is a member of TYPE. *FREE_P is set to true if the caller must
7148 free the memory returned.
7150 Rather than go through all of this, we should simply set the names
7151 of constructors and destructors appropriately, and dispense with
7152 ctor_identifier, dtor_identifier, etc. */
7154 static char *
7155 name_as_c_string (tree name, tree type, bool *free_p)
7157 char *pretty_name;
7159 /* Assume that we will not allocate memory. */
7160 *free_p = false;
7161 /* Constructors and destructors are special. */
7162 if (IDENTIFIER_CTOR_OR_DTOR_P (name))
7164 pretty_name
7165 = CONST_CAST (char *, identifier_to_locale (IDENTIFIER_POINTER (constructor_name (type))));
7166 /* For a destructor, add the '~'. */
7167 if (name == complete_dtor_identifier
7168 || name == base_dtor_identifier
7169 || name == deleting_dtor_identifier)
7171 pretty_name = concat ("~", pretty_name, NULL);
7172 /* Remember that we need to free the memory allocated. */
7173 *free_p = true;
7176 else if (IDENTIFIER_TYPENAME_P (name))
7178 pretty_name = concat ("operator ",
7179 type_as_string_translate (TREE_TYPE (name),
7180 TFF_PLAIN_IDENTIFIER),
7181 NULL);
7182 /* Remember that we need to free the memory allocated. */
7183 *free_p = true;
7185 else
7186 pretty_name = CONST_CAST (char *, identifier_to_locale (IDENTIFIER_POINTER (name)));
7188 return pretty_name;
7191 /* Build a call to "INSTANCE.FN (ARGS)". If FN_P is non-NULL, it will
7192 be set, upon return, to the function called. ARGS may be NULL.
7193 This may change ARGS. */
7195 static tree
7196 build_new_method_call_1 (tree instance, tree fns, VEC(tree,gc) **args,
7197 tree conversion_path, int flags,
7198 tree *fn_p, tsubst_flags_t complain)
7200 struct z_candidate *candidates = 0, *cand;
7201 tree explicit_targs = NULL_TREE;
7202 tree basetype = NULL_TREE;
7203 tree access_binfo;
7204 tree optype;
7205 tree first_mem_arg = NULL_TREE;
7206 tree instance_ptr;
7207 tree name;
7208 bool skip_first_for_error;
7209 VEC(tree,gc) *user_args;
7210 tree call;
7211 tree fn;
7212 int template_only = 0;
7213 bool any_viable_p;
7214 tree orig_instance;
7215 tree orig_fns;
7216 VEC(tree,gc) *orig_args = NULL;
7217 void *p;
7219 gcc_assert (instance != NULL_TREE);
7221 /* We don't know what function we're going to call, yet. */
7222 if (fn_p)
7223 *fn_p = NULL_TREE;
7225 if (error_operand_p (instance)
7226 || !fns || error_operand_p (fns))
7227 return error_mark_node;
7229 if (!BASELINK_P (fns))
7231 if (complain & tf_error)
7232 error ("call to non-function %qD", fns);
7233 return error_mark_node;
7236 orig_instance = instance;
7237 orig_fns = fns;
7239 /* Dismantle the baselink to collect all the information we need. */
7240 if (!conversion_path)
7241 conversion_path = BASELINK_BINFO (fns);
7242 access_binfo = BASELINK_ACCESS_BINFO (fns);
7243 optype = BASELINK_OPTYPE (fns);
7244 fns = BASELINK_FUNCTIONS (fns);
7245 if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
7247 explicit_targs = TREE_OPERAND (fns, 1);
7248 fns = TREE_OPERAND (fns, 0);
7249 template_only = 1;
7251 gcc_assert (TREE_CODE (fns) == FUNCTION_DECL
7252 || TREE_CODE (fns) == TEMPLATE_DECL
7253 || TREE_CODE (fns) == OVERLOAD);
7254 fn = get_first_fn (fns);
7255 name = DECL_NAME (fn);
7257 basetype = TYPE_MAIN_VARIANT (TREE_TYPE (instance));
7258 gcc_assert (CLASS_TYPE_P (basetype));
7260 if (processing_template_decl)
7262 orig_args = args == NULL ? NULL : make_tree_vector_copy (*args);
7263 instance = build_non_dependent_expr (instance);
7264 if (args != NULL)
7265 make_args_non_dependent (*args);
7268 user_args = args == NULL ? NULL : *args;
7269 /* Under DR 147 A::A() is an invalid constructor call,
7270 not a functional cast. */
7271 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (fn))
7273 if (! (complain & tf_error))
7274 return error_mark_node;
7276 permerror (input_location,
7277 "cannot call constructor %<%T::%D%> directly",
7278 basetype, name);
7279 permerror (input_location, " for a function-style cast, remove the "
7280 "redundant %<::%D%>", name);
7281 call = build_functional_cast (basetype, build_tree_list_vec (user_args),
7282 complain);
7283 return call;
7286 /* Figure out whether to skip the first argument for the error
7287 message we will display to users if an error occurs. We don't
7288 want to display any compiler-generated arguments. The "this"
7289 pointer hasn't been added yet. However, we must remove the VTT
7290 pointer if this is a call to a base-class constructor or
7291 destructor. */
7292 skip_first_for_error = false;
7293 if (IDENTIFIER_CTOR_OR_DTOR_P (name))
7295 /* Callers should explicitly indicate whether they want to construct
7296 the complete object or just the part without virtual bases. */
7297 gcc_assert (name != ctor_identifier);
7298 /* Similarly for destructors. */
7299 gcc_assert (name != dtor_identifier);
7300 /* Remove the VTT pointer, if present. */
7301 if ((name == base_ctor_identifier || name == base_dtor_identifier)
7302 && CLASSTYPE_VBASECLASSES (basetype))
7303 skip_first_for_error = true;
7306 /* Process the argument list. */
7307 if (args != NULL && *args != NULL)
7309 *args = resolve_args (*args, complain);
7310 if (*args == NULL)
7311 return error_mark_node;
7314 instance_ptr = build_this (instance);
7316 /* It's OK to call destructors and constructors on cv-qualified objects.
7317 Therefore, convert the INSTANCE_PTR to the unqualified type, if
7318 necessary. */
7319 if (DECL_DESTRUCTOR_P (fn)
7320 || DECL_CONSTRUCTOR_P (fn))
7322 tree type = build_pointer_type (basetype);
7323 if (!same_type_p (type, TREE_TYPE (instance_ptr)))
7324 instance_ptr = build_nop (type, instance_ptr);
7326 if (DECL_DESTRUCTOR_P (fn))
7327 name = complete_dtor_identifier;
7329 first_mem_arg = instance_ptr;
7331 /* Get the high-water mark for the CONVERSION_OBSTACK. */
7332 p = conversion_obstack_alloc (0);
7334 /* If CONSTRUCTOR_IS_DIRECT_INIT is set, this was a T{ } form
7335 initializer, not T({ }). */
7336 if (DECL_CONSTRUCTOR_P (fn) && args != NULL && !VEC_empty (tree, *args)
7337 && BRACE_ENCLOSED_INITIALIZER_P (VEC_index (tree, *args, 0))
7338 && CONSTRUCTOR_IS_DIRECT_INIT (VEC_index (tree, *args, 0)))
7340 tree init_list = VEC_index (tree, *args, 0);
7341 tree init = NULL_TREE;
7343 gcc_assert (VEC_length (tree, *args) == 1
7344 && !(flags & LOOKUP_ONLYCONVERTING));
7346 /* If the initializer list has no elements and T is a class type with
7347 a default constructor, the object is value-initialized. Handle
7348 this here so we don't need to handle it wherever we use
7349 build_special_member_call. */
7350 if (CONSTRUCTOR_NELTS (init_list) == 0
7351 && TYPE_HAS_DEFAULT_CONSTRUCTOR (basetype)
7352 && !processing_template_decl)
7353 init = build_value_init (basetype, complain);
7355 /* If BASETYPE is an aggregate, we need to do aggregate
7356 initialization. */
7357 else if (CP_AGGREGATE_TYPE_P (basetype))
7358 init = digest_init (basetype, init_list, complain);
7360 if (init)
7362 tree ob;
7363 if (integer_zerop (instance_ptr))
7364 return get_target_expr_sfinae (init, complain);
7365 ob = build_fold_indirect_ref (instance_ptr);
7366 init = build2 (INIT_EXPR, TREE_TYPE (ob), ob, init);
7367 TREE_SIDE_EFFECTS (init) = true;
7368 return init;
7371 /* Otherwise go ahead with overload resolution. */
7372 add_list_candidates (fns, first_mem_arg, init_list,
7373 basetype, explicit_targs, template_only,
7374 conversion_path, access_binfo, flags,
7375 &candidates, complain);
7377 else
7379 add_candidates (fns, first_mem_arg, user_args, optype,
7380 explicit_targs, template_only, conversion_path,
7381 access_binfo, flags, &candidates, complain);
7383 any_viable_p = false;
7384 candidates = splice_viable (candidates, pedantic, &any_viable_p);
7386 if (!any_viable_p)
7388 if (complain & tf_error)
7390 if (!COMPLETE_OR_OPEN_TYPE_P (basetype))
7391 cxx_incomplete_type_error (instance_ptr, basetype);
7392 else if (optype)
7393 error ("no matching function for call to %<%T::operator %T(%A)%#V%>",
7394 basetype, optype, build_tree_list_vec (user_args),
7395 TREE_TYPE (TREE_TYPE (instance_ptr)));
7396 else
7398 char *pretty_name;
7399 bool free_p;
7400 tree arglist;
7402 pretty_name = name_as_c_string (name, basetype, &free_p);
7403 arglist = build_tree_list_vec (user_args);
7404 if (skip_first_for_error)
7405 arglist = TREE_CHAIN (arglist);
7406 error ("no matching function for call to %<%T::%s(%A)%#V%>",
7407 basetype, pretty_name, arglist,
7408 TREE_TYPE (TREE_TYPE (instance_ptr)));
7409 if (free_p)
7410 free (pretty_name);
7412 print_z_candidates (location_of (name), candidates);
7414 call = error_mark_node;
7416 else
7418 cand = tourney (candidates, complain);
7419 if (cand == 0)
7421 char *pretty_name;
7422 bool free_p;
7423 tree arglist;
7425 if (complain & tf_error)
7427 pretty_name = name_as_c_string (name, basetype, &free_p);
7428 arglist = build_tree_list_vec (user_args);
7429 if (skip_first_for_error)
7430 arglist = TREE_CHAIN (arglist);
7431 error ("call of overloaded %<%s(%A)%> is ambiguous", pretty_name,
7432 arglist);
7433 print_z_candidates (location_of (name), candidates);
7434 if (free_p)
7435 free (pretty_name);
7437 call = error_mark_node;
7439 else
7441 fn = cand->fn;
7443 if (!(flags & LOOKUP_NONVIRTUAL)
7444 && DECL_PURE_VIRTUAL_P (fn)
7445 && instance == current_class_ref
7446 && (DECL_CONSTRUCTOR_P (current_function_decl)
7447 || DECL_DESTRUCTOR_P (current_function_decl))
7448 && (complain & tf_warning))
7449 /* This is not an error, it is runtime undefined
7450 behavior. */
7451 warning (0, (DECL_CONSTRUCTOR_P (current_function_decl) ?
7452 "pure virtual %q#D called from constructor"
7453 : "pure virtual %q#D called from destructor"),
7454 fn);
7456 if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE
7457 && is_dummy_object (instance_ptr))
7459 if (complain & tf_error)
7460 error ("cannot call member function %qD without object",
7461 fn);
7462 call = error_mark_node;
7464 else
7466 /* Optimize away vtable lookup if we know that this function
7467 can't be overridden. */
7468 if (DECL_VINDEX (fn) && ! (flags & LOOKUP_NONVIRTUAL)
7469 && resolves_to_fixed_type_p (instance, 0))
7470 flags |= LOOKUP_NONVIRTUAL;
7471 if (explicit_targs)
7472 flags |= LOOKUP_EXPLICIT_TMPL_ARGS;
7473 /* Now we know what function is being called. */
7474 if (fn_p)
7475 *fn_p = fn;
7476 /* Build the actual CALL_EXPR. */
7477 call = build_over_call (cand, flags, complain);
7478 /* In an expression of the form `a->f()' where `f' turns
7479 out to be a static member function, `a' is
7480 none-the-less evaluated. */
7481 if (TREE_CODE (TREE_TYPE (fn)) != METHOD_TYPE
7482 && !is_dummy_object (instance_ptr)
7483 && TREE_SIDE_EFFECTS (instance_ptr))
7484 call = build2 (COMPOUND_EXPR, TREE_TYPE (call),
7485 instance_ptr, call);
7486 else if (call != error_mark_node
7487 && DECL_DESTRUCTOR_P (cand->fn)
7488 && !VOID_TYPE_P (TREE_TYPE (call)))
7489 /* An explicit call of the form "x->~X()" has type
7490 "void". However, on platforms where destructors
7491 return "this" (i.e., those where
7492 targetm.cxx.cdtor_returns_this is true), such calls
7493 will appear to have a return value of pointer type
7494 to the low-level call machinery. We do not want to
7495 change the low-level machinery, since we want to be
7496 able to optimize "delete f()" on such platforms as
7497 "operator delete(~X(f()))" (rather than generating
7498 "t = f(), ~X(t), operator delete (t)"). */
7499 call = build_nop (void_type_node, call);
7504 if (processing_template_decl && call != error_mark_node)
7506 bool cast_to_void = false;
7508 if (TREE_CODE (call) == COMPOUND_EXPR)
7509 call = TREE_OPERAND (call, 1);
7510 else if (TREE_CODE (call) == NOP_EXPR)
7512 cast_to_void = true;
7513 call = TREE_OPERAND (call, 0);
7515 if (TREE_CODE (call) == INDIRECT_REF)
7516 call = TREE_OPERAND (call, 0);
7517 call = (build_min_non_dep_call_vec
7518 (call,
7519 build_min (COMPONENT_REF, TREE_TYPE (CALL_EXPR_FN (call)),
7520 orig_instance, orig_fns, NULL_TREE),
7521 orig_args));
7522 SET_EXPR_LOCATION (call, input_location);
7523 call = convert_from_reference (call);
7524 if (cast_to_void)
7525 call = build_nop (void_type_node, call);
7528 /* Free all the conversions we allocated. */
7529 obstack_free (&conversion_obstack, p);
7531 if (orig_args != NULL)
7532 release_tree_vector (orig_args);
7534 return call;
7537 /* Wrapper for above. */
7539 tree
7540 build_new_method_call (tree instance, tree fns, VEC(tree,gc) **args,
7541 tree conversion_path, int flags,
7542 tree *fn_p, tsubst_flags_t complain)
7544 tree ret;
7545 bool subtime = timevar_cond_start (TV_OVERLOAD);
7546 ret = build_new_method_call_1 (instance, fns, args, conversion_path, flags,
7547 fn_p, complain);
7548 timevar_cond_stop (TV_OVERLOAD, subtime);
7549 return ret;
7552 /* Returns true iff standard conversion sequence ICS1 is a proper
7553 subsequence of ICS2. */
7555 static bool
7556 is_subseq (conversion *ics1, conversion *ics2)
7558 /* We can assume that a conversion of the same code
7559 between the same types indicates a subsequence since we only get
7560 here if the types we are converting from are the same. */
7562 while (ics1->kind == ck_rvalue
7563 || ics1->kind == ck_lvalue)
7564 ics1 = next_conversion (ics1);
7566 while (1)
7568 while (ics2->kind == ck_rvalue
7569 || ics2->kind == ck_lvalue)
7570 ics2 = next_conversion (ics2);
7572 if (ics2->kind == ck_user
7573 || ics2->kind == ck_ambig
7574 || ics2->kind == ck_aggr
7575 || ics2->kind == ck_list
7576 || ics2->kind == ck_identity)
7577 /* At this point, ICS1 cannot be a proper subsequence of
7578 ICS2. We can get a USER_CONV when we are comparing the
7579 second standard conversion sequence of two user conversion
7580 sequences. */
7581 return false;
7583 ics2 = next_conversion (ics2);
7585 if (ics2->kind == ics1->kind
7586 && same_type_p (ics2->type, ics1->type)
7587 && same_type_p (next_conversion (ics2)->type,
7588 next_conversion (ics1)->type))
7589 return true;
7593 /* Returns nonzero iff DERIVED is derived from BASE. The inputs may
7594 be any _TYPE nodes. */
7596 bool
7597 is_properly_derived_from (tree derived, tree base)
7599 if (!CLASS_TYPE_P (derived) || !CLASS_TYPE_P (base))
7600 return false;
7602 /* We only allow proper derivation here. The DERIVED_FROM_P macro
7603 considers every class derived from itself. */
7604 return (!same_type_ignoring_top_level_qualifiers_p (derived, base)
7605 && DERIVED_FROM_P (base, derived));
7608 /* We build the ICS for an implicit object parameter as a pointer
7609 conversion sequence. However, such a sequence should be compared
7610 as if it were a reference conversion sequence. If ICS is the
7611 implicit conversion sequence for an implicit object parameter,
7612 modify it accordingly. */
7614 static void
7615 maybe_handle_implicit_object (conversion **ics)
7617 if ((*ics)->this_p)
7619 /* [over.match.funcs]
7621 For non-static member functions, the type of the
7622 implicit object parameter is "reference to cv X"
7623 where X is the class of which the function is a
7624 member and cv is the cv-qualification on the member
7625 function declaration. */
7626 conversion *t = *ics;
7627 tree reference_type;
7629 /* The `this' parameter is a pointer to a class type. Make the
7630 implicit conversion talk about a reference to that same class
7631 type. */
7632 reference_type = TREE_TYPE (t->type);
7633 reference_type = build_reference_type (reference_type);
7635 if (t->kind == ck_qual)
7636 t = next_conversion (t);
7637 if (t->kind == ck_ptr)
7638 t = next_conversion (t);
7639 t = build_identity_conv (TREE_TYPE (t->type), NULL_TREE);
7640 t = direct_reference_binding (reference_type, t);
7641 t->this_p = 1;
7642 t->rvaluedness_matches_p = 0;
7643 *ics = t;
7647 /* If *ICS is a REF_BIND set *ICS to the remainder of the conversion,
7648 and return the initial reference binding conversion. Otherwise,
7649 leave *ICS unchanged and return NULL. */
7651 static conversion *
7652 maybe_handle_ref_bind (conversion **ics)
7654 if ((*ics)->kind == ck_ref_bind)
7656 conversion *old_ics = *ics;
7657 *ics = next_conversion (old_ics);
7658 (*ics)->user_conv_p = old_ics->user_conv_p;
7659 return old_ics;
7662 return NULL;
7665 /* Compare two implicit conversion sequences according to the rules set out in
7666 [over.ics.rank]. Return values:
7668 1: ics1 is better than ics2
7669 -1: ics2 is better than ics1
7670 0: ics1 and ics2 are indistinguishable */
7672 static int
7673 compare_ics (conversion *ics1, conversion *ics2)
7675 tree from_type1;
7676 tree from_type2;
7677 tree to_type1;
7678 tree to_type2;
7679 tree deref_from_type1 = NULL_TREE;
7680 tree deref_from_type2 = NULL_TREE;
7681 tree deref_to_type1 = NULL_TREE;
7682 tree deref_to_type2 = NULL_TREE;
7683 conversion_rank rank1, rank2;
7685 /* REF_BINDING is nonzero if the result of the conversion sequence
7686 is a reference type. In that case REF_CONV is the reference
7687 binding conversion. */
7688 conversion *ref_conv1;
7689 conversion *ref_conv2;
7691 /* Handle implicit object parameters. */
7692 maybe_handle_implicit_object (&ics1);
7693 maybe_handle_implicit_object (&ics2);
7695 /* Handle reference parameters. */
7696 ref_conv1 = maybe_handle_ref_bind (&ics1);
7697 ref_conv2 = maybe_handle_ref_bind (&ics2);
7699 /* List-initialization sequence L1 is a better conversion sequence than
7700 list-initialization sequence L2 if L1 converts to
7701 std::initializer_list<X> for some X and L2 does not. */
7702 if (ics1->kind == ck_list && ics2->kind != ck_list)
7703 return 1;
7704 if (ics2->kind == ck_list && ics1->kind != ck_list)
7705 return -1;
7707 /* [over.ics.rank]
7709 When comparing the basic forms of implicit conversion sequences (as
7710 defined in _over.best.ics_)
7712 --a standard conversion sequence (_over.ics.scs_) is a better
7713 conversion sequence than a user-defined conversion sequence
7714 or an ellipsis conversion sequence, and
7716 --a user-defined conversion sequence (_over.ics.user_) is a
7717 better conversion sequence than an ellipsis conversion sequence
7718 (_over.ics.ellipsis_). */
7719 rank1 = CONVERSION_RANK (ics1);
7720 rank2 = CONVERSION_RANK (ics2);
7722 if (rank1 > rank2)
7723 return -1;
7724 else if (rank1 < rank2)
7725 return 1;
7727 if (rank1 == cr_bad)
7729 /* Both ICS are bad. We try to make a decision based on what would
7730 have happened if they'd been good. This is not an extension,
7731 we'll still give an error when we build up the call; this just
7732 helps us give a more helpful error message. */
7733 rank1 = BAD_CONVERSION_RANK (ics1);
7734 rank2 = BAD_CONVERSION_RANK (ics2);
7736 if (rank1 > rank2)
7737 return -1;
7738 else if (rank1 < rank2)
7739 return 1;
7741 /* We couldn't make up our minds; try to figure it out below. */
7744 if (ics1->ellipsis_p)
7745 /* Both conversions are ellipsis conversions. */
7746 return 0;
7748 /* User-defined conversion sequence U1 is a better conversion sequence
7749 than another user-defined conversion sequence U2 if they contain the
7750 same user-defined conversion operator or constructor and if the sec-
7751 ond standard conversion sequence of U1 is better than the second
7752 standard conversion sequence of U2. */
7754 /* Handle list-conversion with the same code even though it isn't always
7755 ranked as a user-defined conversion and it doesn't have a second
7756 standard conversion sequence; it will still have the desired effect.
7757 Specifically, we need to do the reference binding comparison at the
7758 end of this function. */
7760 if (ics1->user_conv_p || ics1->kind == ck_list || ics1->kind == ck_aggr)
7762 conversion *t1;
7763 conversion *t2;
7765 for (t1 = ics1; t1->kind != ck_user; t1 = next_conversion (t1))
7766 if (t1->kind == ck_ambig || t1->kind == ck_aggr
7767 || t1->kind == ck_list)
7768 break;
7769 for (t2 = ics2; t2->kind != ck_user; t2 = next_conversion (t2))
7770 if (t2->kind == ck_ambig || t2->kind == ck_aggr
7771 || t2->kind == ck_list)
7772 break;
7774 if (t1->kind != t2->kind)
7775 return 0;
7776 else if (t1->kind == ck_user)
7778 if (t1->cand->fn != t2->cand->fn)
7779 return 0;
7781 else
7783 /* For ambiguous or aggregate conversions, use the target type as
7784 a proxy for the conversion function. */
7785 if (!same_type_ignoring_top_level_qualifiers_p (t1->type, t2->type))
7786 return 0;
7789 /* We can just fall through here, after setting up
7790 FROM_TYPE1 and FROM_TYPE2. */
7791 from_type1 = t1->type;
7792 from_type2 = t2->type;
7794 else
7796 conversion *t1;
7797 conversion *t2;
7799 /* We're dealing with two standard conversion sequences.
7801 [over.ics.rank]
7803 Standard conversion sequence S1 is a better conversion
7804 sequence than standard conversion sequence S2 if
7806 --S1 is a proper subsequence of S2 (comparing the conversion
7807 sequences in the canonical form defined by _over.ics.scs_,
7808 excluding any Lvalue Transformation; the identity
7809 conversion sequence is considered to be a subsequence of
7810 any non-identity conversion sequence */
7812 t1 = ics1;
7813 while (t1->kind != ck_identity)
7814 t1 = next_conversion (t1);
7815 from_type1 = t1->type;
7817 t2 = ics2;
7818 while (t2->kind != ck_identity)
7819 t2 = next_conversion (t2);
7820 from_type2 = t2->type;
7823 /* One sequence can only be a subsequence of the other if they start with
7824 the same type. They can start with different types when comparing the
7825 second standard conversion sequence in two user-defined conversion
7826 sequences. */
7827 if (same_type_p (from_type1, from_type2))
7829 if (is_subseq (ics1, ics2))
7830 return 1;
7831 if (is_subseq (ics2, ics1))
7832 return -1;
7835 /* [over.ics.rank]
7837 Or, if not that,
7839 --the rank of S1 is better than the rank of S2 (by the rules
7840 defined below):
7842 Standard conversion sequences are ordered by their ranks: an Exact
7843 Match is a better conversion than a Promotion, which is a better
7844 conversion than a Conversion.
7846 Two conversion sequences with the same rank are indistinguishable
7847 unless one of the following rules applies:
7849 --A conversion that does not a convert a pointer, pointer to member,
7850 or std::nullptr_t to bool is better than one that does.
7852 The ICS_STD_RANK automatically handles the pointer-to-bool rule,
7853 so that we do not have to check it explicitly. */
7854 if (ics1->rank < ics2->rank)
7855 return 1;
7856 else if (ics2->rank < ics1->rank)
7857 return -1;
7859 to_type1 = ics1->type;
7860 to_type2 = ics2->type;
7862 /* A conversion from scalar arithmetic type to complex is worse than a
7863 conversion between scalar arithmetic types. */
7864 if (same_type_p (from_type1, from_type2)
7865 && ARITHMETIC_TYPE_P (from_type1)
7866 && ARITHMETIC_TYPE_P (to_type1)
7867 && ARITHMETIC_TYPE_P (to_type2)
7868 && ((TREE_CODE (to_type1) == COMPLEX_TYPE)
7869 != (TREE_CODE (to_type2) == COMPLEX_TYPE)))
7871 if (TREE_CODE (to_type1) == COMPLEX_TYPE)
7872 return -1;
7873 else
7874 return 1;
7877 if (TYPE_PTR_P (from_type1)
7878 && TYPE_PTR_P (from_type2)
7879 && TYPE_PTR_P (to_type1)
7880 && TYPE_PTR_P (to_type2))
7882 deref_from_type1 = TREE_TYPE (from_type1);
7883 deref_from_type2 = TREE_TYPE (from_type2);
7884 deref_to_type1 = TREE_TYPE (to_type1);
7885 deref_to_type2 = TREE_TYPE (to_type2);
7887 /* The rules for pointers to members A::* are just like the rules
7888 for pointers A*, except opposite: if B is derived from A then
7889 A::* converts to B::*, not vice versa. For that reason, we
7890 switch the from_ and to_ variables here. */
7891 else if ((TYPE_PTRDATAMEM_P (from_type1) && TYPE_PTRDATAMEM_P (from_type2)
7892 && TYPE_PTRDATAMEM_P (to_type1) && TYPE_PTRDATAMEM_P (to_type2))
7893 || (TYPE_PTRMEMFUNC_P (from_type1)
7894 && TYPE_PTRMEMFUNC_P (from_type2)
7895 && TYPE_PTRMEMFUNC_P (to_type1)
7896 && TYPE_PTRMEMFUNC_P (to_type2)))
7898 deref_to_type1 = TYPE_PTRMEM_CLASS_TYPE (from_type1);
7899 deref_to_type2 = TYPE_PTRMEM_CLASS_TYPE (from_type2);
7900 deref_from_type1 = TYPE_PTRMEM_CLASS_TYPE (to_type1);
7901 deref_from_type2 = TYPE_PTRMEM_CLASS_TYPE (to_type2);
7904 if (deref_from_type1 != NULL_TREE
7905 && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_from_type1))
7906 && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_from_type2)))
7908 /* This was one of the pointer or pointer-like conversions.
7910 [over.ics.rank]
7912 --If class B is derived directly or indirectly from class A,
7913 conversion of B* to A* is better than conversion of B* to
7914 void*, and conversion of A* to void* is better than
7915 conversion of B* to void*. */
7916 if (TREE_CODE (deref_to_type1) == VOID_TYPE
7917 && TREE_CODE (deref_to_type2) == VOID_TYPE)
7919 if (is_properly_derived_from (deref_from_type1,
7920 deref_from_type2))
7921 return -1;
7922 else if (is_properly_derived_from (deref_from_type2,
7923 deref_from_type1))
7924 return 1;
7926 else if (TREE_CODE (deref_to_type1) == VOID_TYPE
7927 || TREE_CODE (deref_to_type2) == VOID_TYPE)
7929 if (same_type_p (deref_from_type1, deref_from_type2))
7931 if (TREE_CODE (deref_to_type2) == VOID_TYPE)
7933 if (is_properly_derived_from (deref_from_type1,
7934 deref_to_type1))
7935 return 1;
7937 /* We know that DEREF_TO_TYPE1 is `void' here. */
7938 else if (is_properly_derived_from (deref_from_type1,
7939 deref_to_type2))
7940 return -1;
7943 else if (RECORD_OR_UNION_CODE_P (TREE_CODE (deref_to_type1))
7944 && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_to_type2)))
7946 /* [over.ics.rank]
7948 --If class B is derived directly or indirectly from class A
7949 and class C is derived directly or indirectly from B,
7951 --conversion of C* to B* is better than conversion of C* to
7954 --conversion of B* to A* is better than conversion of C* to
7955 A* */
7956 if (same_type_p (deref_from_type1, deref_from_type2))
7958 if (is_properly_derived_from (deref_to_type1,
7959 deref_to_type2))
7960 return 1;
7961 else if (is_properly_derived_from (deref_to_type2,
7962 deref_to_type1))
7963 return -1;
7965 else if (same_type_p (deref_to_type1, deref_to_type2))
7967 if (is_properly_derived_from (deref_from_type2,
7968 deref_from_type1))
7969 return 1;
7970 else if (is_properly_derived_from (deref_from_type1,
7971 deref_from_type2))
7972 return -1;
7976 else if (CLASS_TYPE_P (non_reference (from_type1))
7977 && same_type_p (from_type1, from_type2))
7979 tree from = non_reference (from_type1);
7981 /* [over.ics.rank]
7983 --binding of an expression of type C to a reference of type
7984 B& is better than binding an expression of type C to a
7985 reference of type A&
7987 --conversion of C to B is better than conversion of C to A, */
7988 if (is_properly_derived_from (from, to_type1)
7989 && is_properly_derived_from (from, to_type2))
7991 if (is_properly_derived_from (to_type1, to_type2))
7992 return 1;
7993 else if (is_properly_derived_from (to_type2, to_type1))
7994 return -1;
7997 else if (CLASS_TYPE_P (non_reference (to_type1))
7998 && same_type_p (to_type1, to_type2))
8000 tree to = non_reference (to_type1);
8002 /* [over.ics.rank]
8004 --binding of an expression of type B to a reference of type
8005 A& is better than binding an expression of type C to a
8006 reference of type A&,
8008 --conversion of B to A is better than conversion of C to A */
8009 if (is_properly_derived_from (from_type1, to)
8010 && is_properly_derived_from (from_type2, to))
8012 if (is_properly_derived_from (from_type2, from_type1))
8013 return 1;
8014 else if (is_properly_derived_from (from_type1, from_type2))
8015 return -1;
8019 /* [over.ics.rank]
8021 --S1 and S2 differ only in their qualification conversion and yield
8022 similar types T1 and T2 (_conv.qual_), respectively, and the cv-
8023 qualification signature of type T1 is a proper subset of the cv-
8024 qualification signature of type T2 */
8025 if (ics1->kind == ck_qual
8026 && ics2->kind == ck_qual
8027 && same_type_p (from_type1, from_type2))
8029 int result = comp_cv_qual_signature (to_type1, to_type2);
8030 if (result != 0)
8031 return result;
8034 /* [over.ics.rank]
8036 --S1 and S2 are reference bindings (_dcl.init.ref_) and neither refers
8037 to an implicit object parameter, and either S1 binds an lvalue reference
8038 to an lvalue and S2 binds an rvalue reference or S1 binds an rvalue
8039 reference to an rvalue and S2 binds an lvalue reference
8040 (C++0x draft standard, 13.3.3.2)
8042 --S1 and S2 are reference bindings (_dcl.init.ref_), and the
8043 types to which the references refer are the same type except for
8044 top-level cv-qualifiers, and the type to which the reference
8045 initialized by S2 refers is more cv-qualified than the type to
8046 which the reference initialized by S1 refers.
8048 DR 1328 [over.match.best]: the context is an initialization by
8049 conversion function for direct reference binding (13.3.1.6) of a
8050 reference to function type, the return type of F1 is the same kind of
8051 reference (i.e. lvalue or rvalue) as the reference being initialized,
8052 and the return type of F2 is not. */
8054 if (ref_conv1 && ref_conv2)
8056 if (!ref_conv1->this_p && !ref_conv2->this_p
8057 && (ref_conv1->rvaluedness_matches_p
8058 != ref_conv2->rvaluedness_matches_p)
8059 && (same_type_p (ref_conv1->type, ref_conv2->type)
8060 || (TYPE_REF_IS_RVALUE (ref_conv1->type)
8061 != TYPE_REF_IS_RVALUE (ref_conv2->type))))
8063 return (ref_conv1->rvaluedness_matches_p
8064 - ref_conv2->rvaluedness_matches_p);
8067 if (same_type_ignoring_top_level_qualifiers_p (to_type1, to_type2))
8068 return comp_cv_qualification (TREE_TYPE (ref_conv2->type),
8069 TREE_TYPE (ref_conv1->type));
8072 /* Neither conversion sequence is better than the other. */
8073 return 0;
8076 /* The source type for this standard conversion sequence. */
8078 static tree
8079 source_type (conversion *t)
8081 for (;; t = next_conversion (t))
8083 if (t->kind == ck_user
8084 || t->kind == ck_ambig
8085 || t->kind == ck_identity)
8086 return t->type;
8088 gcc_unreachable ();
8091 /* Note a warning about preferring WINNER to LOSER. We do this by storing
8092 a pointer to LOSER and re-running joust to produce the warning if WINNER
8093 is actually used. */
8095 static void
8096 add_warning (struct z_candidate *winner, struct z_candidate *loser)
8098 candidate_warning *cw = (candidate_warning *)
8099 conversion_obstack_alloc (sizeof (candidate_warning));
8100 cw->loser = loser;
8101 cw->next = winner->warnings;
8102 winner->warnings = cw;
8105 /* Compare two candidates for overloading as described in
8106 [over.match.best]. Return values:
8108 1: cand1 is better than cand2
8109 -1: cand2 is better than cand1
8110 0: cand1 and cand2 are indistinguishable */
8112 static int
8113 joust (struct z_candidate *cand1, struct z_candidate *cand2, bool warn,
8114 tsubst_flags_t complain)
8116 int winner = 0;
8117 int off1 = 0, off2 = 0;
8118 size_t i;
8119 size_t len;
8121 /* Candidates that involve bad conversions are always worse than those
8122 that don't. */
8123 if (cand1->viable > cand2->viable)
8124 return 1;
8125 if (cand1->viable < cand2->viable)
8126 return -1;
8128 /* If we have two pseudo-candidates for conversions to the same type,
8129 or two candidates for the same function, arbitrarily pick one. */
8130 if (cand1->fn == cand2->fn
8131 && (IS_TYPE_OR_DECL_P (cand1->fn)))
8132 return 1;
8134 /* a viable function F1
8135 is defined to be a better function than another viable function F2 if
8136 for all arguments i, ICSi(F1) is not a worse conversion sequence than
8137 ICSi(F2), and then */
8139 /* for some argument j, ICSj(F1) is a better conversion sequence than
8140 ICSj(F2) */
8142 /* For comparing static and non-static member functions, we ignore
8143 the implicit object parameter of the non-static function. The
8144 standard says to pretend that the static function has an object
8145 parm, but that won't work with operator overloading. */
8146 len = cand1->num_convs;
8147 if (len != cand2->num_convs)
8149 int static_1 = DECL_STATIC_FUNCTION_P (cand1->fn);
8150 int static_2 = DECL_STATIC_FUNCTION_P (cand2->fn);
8152 if (DECL_CONSTRUCTOR_P (cand1->fn)
8153 && is_list_ctor (cand1->fn) != is_list_ctor (cand2->fn))
8154 /* We're comparing a near-match list constructor and a near-match
8155 non-list constructor. Just treat them as unordered. */
8156 return 0;
8158 gcc_assert (static_1 != static_2);
8160 if (static_1)
8161 off2 = 1;
8162 else
8164 off1 = 1;
8165 --len;
8169 for (i = 0; i < len; ++i)
8171 conversion *t1 = cand1->convs[i + off1];
8172 conversion *t2 = cand2->convs[i + off2];
8173 int comp = compare_ics (t1, t2);
8175 if (comp != 0)
8177 if ((complain & tf_warning)
8178 && warn_sign_promo
8179 && (CONVERSION_RANK (t1) + CONVERSION_RANK (t2)
8180 == cr_std + cr_promotion)
8181 && t1->kind == ck_std
8182 && t2->kind == ck_std
8183 && TREE_CODE (t1->type) == INTEGER_TYPE
8184 && TREE_CODE (t2->type) == INTEGER_TYPE
8185 && (TYPE_PRECISION (t1->type)
8186 == TYPE_PRECISION (t2->type))
8187 && (TYPE_UNSIGNED (next_conversion (t1)->type)
8188 || (TREE_CODE (next_conversion (t1)->type)
8189 == ENUMERAL_TYPE)))
8191 tree type = next_conversion (t1)->type;
8192 tree type1, type2;
8193 struct z_candidate *w, *l;
8194 if (comp > 0)
8195 type1 = t1->type, type2 = t2->type,
8196 w = cand1, l = cand2;
8197 else
8198 type1 = t2->type, type2 = t1->type,
8199 w = cand2, l = cand1;
8201 if (warn)
8203 warning (OPT_Wsign_promo, "passing %qT chooses %qT over %qT",
8204 type, type1, type2);
8205 warning (OPT_Wsign_promo, " in call to %qD", w->fn);
8207 else
8208 add_warning (w, l);
8211 if (winner && comp != winner)
8213 winner = 0;
8214 goto tweak;
8216 winner = comp;
8220 /* warn about confusing overload resolution for user-defined conversions,
8221 either between a constructor and a conversion op, or between two
8222 conversion ops. */
8223 if ((complain & tf_warning)
8224 && winner && warn_conversion && cand1->second_conv
8225 && (!DECL_CONSTRUCTOR_P (cand1->fn) || !DECL_CONSTRUCTOR_P (cand2->fn))
8226 && winner != compare_ics (cand1->second_conv, cand2->second_conv))
8228 struct z_candidate *w, *l;
8229 bool give_warning = false;
8231 if (winner == 1)
8232 w = cand1, l = cand2;
8233 else
8234 w = cand2, l = cand1;
8236 /* We don't want to complain about `X::operator T1 ()'
8237 beating `X::operator T2 () const', when T2 is a no less
8238 cv-qualified version of T1. */
8239 if (DECL_CONTEXT (w->fn) == DECL_CONTEXT (l->fn)
8240 && !DECL_CONSTRUCTOR_P (w->fn) && !DECL_CONSTRUCTOR_P (l->fn))
8242 tree t = TREE_TYPE (TREE_TYPE (l->fn));
8243 tree f = TREE_TYPE (TREE_TYPE (w->fn));
8245 if (TREE_CODE (t) == TREE_CODE (f) && POINTER_TYPE_P (t))
8247 t = TREE_TYPE (t);
8248 f = TREE_TYPE (f);
8250 if (!comp_ptr_ttypes (t, f))
8251 give_warning = true;
8253 else
8254 give_warning = true;
8256 if (!give_warning)
8257 /*NOP*/;
8258 else if (warn)
8260 tree source = source_type (w->convs[0]);
8261 if (! DECL_CONSTRUCTOR_P (w->fn))
8262 source = TREE_TYPE (source);
8263 if (warning (OPT_Wconversion, "choosing %qD over %qD", w->fn, l->fn)
8264 && warning (OPT_Wconversion, " for conversion from %qT to %qT",
8265 source, w->second_conv->type))
8267 inform (input_location, " because conversion sequence for the argument is better");
8270 else
8271 add_warning (w, l);
8274 if (winner)
8275 return winner;
8277 /* DR 495 moved this tiebreaker above the template ones. */
8278 /* or, if not that,
8279 the context is an initialization by user-defined conversion (see
8280 _dcl.init_ and _over.match.user_) and the standard conversion
8281 sequence from the return type of F1 to the destination type (i.e.,
8282 the type of the entity being initialized) is a better conversion
8283 sequence than the standard conversion sequence from the return type
8284 of F2 to the destination type. */
8286 if (cand1->second_conv)
8288 winner = compare_ics (cand1->second_conv, cand2->second_conv);
8289 if (winner)
8290 return winner;
8293 /* or, if not that,
8294 F1 is a non-template function and F2 is a template function
8295 specialization. */
8297 if (!cand1->template_decl && cand2->template_decl)
8298 return 1;
8299 else if (cand1->template_decl && !cand2->template_decl)
8300 return -1;
8302 /* or, if not that,
8303 F1 and F2 are template functions and the function template for F1 is
8304 more specialized than the template for F2 according to the partial
8305 ordering rules. */
8307 if (cand1->template_decl && cand2->template_decl)
8309 winner = more_specialized_fn
8310 (TI_TEMPLATE (cand1->template_decl),
8311 TI_TEMPLATE (cand2->template_decl),
8312 /* [temp.func.order]: The presence of unused ellipsis and default
8313 arguments has no effect on the partial ordering of function
8314 templates. add_function_candidate() will not have
8315 counted the "this" argument for constructors. */
8316 cand1->num_convs + DECL_CONSTRUCTOR_P (cand1->fn));
8317 if (winner)
8318 return winner;
8321 /* Check whether we can discard a builtin candidate, either because we
8322 have two identical ones or matching builtin and non-builtin candidates.
8324 (Pedantically in the latter case the builtin which matched the user
8325 function should not be added to the overload set, but we spot it here.
8327 [over.match.oper]
8328 ... the builtin candidates include ...
8329 - do not have the same parameter type list as any non-template
8330 non-member candidate. */
8332 if (TREE_CODE (cand1->fn) == IDENTIFIER_NODE
8333 || TREE_CODE (cand2->fn) == IDENTIFIER_NODE)
8335 for (i = 0; i < len; ++i)
8336 if (!same_type_p (cand1->convs[i]->type,
8337 cand2->convs[i]->type))
8338 break;
8339 if (i == cand1->num_convs)
8341 if (cand1->fn == cand2->fn)
8342 /* Two built-in candidates; arbitrarily pick one. */
8343 return 1;
8344 else if (TREE_CODE (cand1->fn) == IDENTIFIER_NODE)
8345 /* cand1 is built-in; prefer cand2. */
8346 return -1;
8347 else
8348 /* cand2 is built-in; prefer cand1. */
8349 return 1;
8353 /* If the two function declarations represent the same function (this can
8354 happen with declarations in multiple scopes and arg-dependent lookup),
8355 arbitrarily choose one. But first make sure the default args we're
8356 using match. */
8357 if (DECL_P (cand1->fn) && DECL_P (cand2->fn)
8358 && equal_functions (cand1->fn, cand2->fn))
8360 tree parms1 = TYPE_ARG_TYPES (TREE_TYPE (cand1->fn));
8361 tree parms2 = TYPE_ARG_TYPES (TREE_TYPE (cand2->fn));
8363 gcc_assert (!DECL_CONSTRUCTOR_P (cand1->fn));
8365 for (i = 0; i < len; ++i)
8367 /* Don't crash if the fn is variadic. */
8368 if (!parms1)
8369 break;
8370 parms1 = TREE_CHAIN (parms1);
8371 parms2 = TREE_CHAIN (parms2);
8374 if (off1)
8375 parms1 = TREE_CHAIN (parms1);
8376 else if (off2)
8377 parms2 = TREE_CHAIN (parms2);
8379 for (; parms1; ++i)
8381 if (!cp_tree_equal (TREE_PURPOSE (parms1),
8382 TREE_PURPOSE (parms2)))
8384 if (warn)
8386 if (complain & tf_error)
8388 permerror (input_location,
8389 "default argument mismatch in "
8390 "overload resolution");
8391 inform (input_location,
8392 " candidate 1: %q+#F", cand1->fn);
8393 inform (input_location,
8394 " candidate 2: %q+#F", cand2->fn);
8396 else
8397 return 0;
8399 else
8400 add_warning (cand1, cand2);
8401 break;
8403 parms1 = TREE_CHAIN (parms1);
8404 parms2 = TREE_CHAIN (parms2);
8407 return 1;
8410 tweak:
8412 /* Extension: If the worst conversion for one candidate is worse than the
8413 worst conversion for the other, take the first. */
8414 if (!pedantic && (complain & tf_warning_or_error))
8416 conversion_rank rank1 = cr_identity, rank2 = cr_identity;
8417 struct z_candidate *w = 0, *l = 0;
8419 for (i = 0; i < len; ++i)
8421 if (CONVERSION_RANK (cand1->convs[i+off1]) > rank1)
8422 rank1 = CONVERSION_RANK (cand1->convs[i+off1]);
8423 if (CONVERSION_RANK (cand2->convs[i + off2]) > rank2)
8424 rank2 = CONVERSION_RANK (cand2->convs[i + off2]);
8426 if (rank1 < rank2)
8427 winner = 1, w = cand1, l = cand2;
8428 if (rank1 > rank2)
8429 winner = -1, w = cand2, l = cand1;
8430 if (winner)
8432 /* Don't choose a deleted function over ambiguity. */
8433 if (DECL_P (w->fn) && DECL_DELETED_FN (w->fn))
8434 return 0;
8435 if (warn)
8437 pedwarn (input_location, 0,
8438 "ISO C++ says that these are ambiguous, even "
8439 "though the worst conversion for the first is better than "
8440 "the worst conversion for the second:");
8441 print_z_candidate (input_location, _("candidate 1:"), w);
8442 print_z_candidate (input_location, _("candidate 2:"), l);
8444 else
8445 add_warning (w, l);
8446 return winner;
8450 gcc_assert (!winner);
8451 return 0;
8454 /* Given a list of candidates for overloading, find the best one, if any.
8455 This algorithm has a worst case of O(2n) (winner is last), and a best
8456 case of O(n/2) (totally ambiguous); much better than a sorting
8457 algorithm. */
8459 static struct z_candidate *
8460 tourney (struct z_candidate *candidates, tsubst_flags_t complain)
8462 struct z_candidate *champ = candidates, *challenger;
8463 int fate;
8464 int champ_compared_to_predecessor = 0;
8466 /* Walk through the list once, comparing each current champ to the next
8467 candidate, knocking out a candidate or two with each comparison. */
8469 for (challenger = champ->next; challenger; )
8471 fate = joust (champ, challenger, 0, complain);
8472 if (fate == 1)
8473 challenger = challenger->next;
8474 else
8476 if (fate == 0)
8478 champ = challenger->next;
8479 if (champ == 0)
8480 return NULL;
8481 champ_compared_to_predecessor = 0;
8483 else
8485 champ = challenger;
8486 champ_compared_to_predecessor = 1;
8489 challenger = champ->next;
8493 /* Make sure the champ is better than all the candidates it hasn't yet
8494 been compared to. */
8496 for (challenger = candidates;
8497 challenger != champ
8498 && !(champ_compared_to_predecessor && challenger->next == champ);
8499 challenger = challenger->next)
8501 fate = joust (champ, challenger, 0, complain);
8502 if (fate != 1)
8503 return NULL;
8506 return champ;
8509 /* Returns nonzero if things of type FROM can be converted to TO. */
8511 bool
8512 can_convert (tree to, tree from, tsubst_flags_t complain)
8514 return can_convert_arg (to, from, NULL_TREE, LOOKUP_IMPLICIT, complain);
8517 /* Returns nonzero if ARG (of type FROM) can be converted to TO. */
8519 bool
8520 can_convert_arg (tree to, tree from, tree arg, int flags,
8521 tsubst_flags_t complain)
8523 conversion *t;
8524 void *p;
8525 bool ok_p;
8527 /* Get the high-water mark for the CONVERSION_OBSTACK. */
8528 p = conversion_obstack_alloc (0);
8530 t = implicit_conversion (to, from, arg, /*c_cast_p=*/false,
8531 flags, complain);
8532 ok_p = (t && !t->bad_p);
8534 /* Free all the conversions we allocated. */
8535 obstack_free (&conversion_obstack, p);
8537 return ok_p;
8540 /* Like can_convert_arg, but allows dubious conversions as well. */
8542 bool
8543 can_convert_arg_bad (tree to, tree from, tree arg, int flags,
8544 tsubst_flags_t complain)
8546 conversion *t;
8547 void *p;
8549 /* Get the high-water mark for the CONVERSION_OBSTACK. */
8550 p = conversion_obstack_alloc (0);
8551 /* Try to perform the conversion. */
8552 t = implicit_conversion (to, from, arg, /*c_cast_p=*/false,
8553 flags, complain);
8554 /* Free all the conversions we allocated. */
8555 obstack_free (&conversion_obstack, p);
8557 return t != NULL;
8560 /* Convert EXPR to TYPE. Return the converted expression.
8562 Note that we allow bad conversions here because by the time we get to
8563 this point we are committed to doing the conversion. If we end up
8564 doing a bad conversion, convert_like will complain. */
8566 tree
8567 perform_implicit_conversion_flags (tree type, tree expr,
8568 tsubst_flags_t complain, int flags)
8570 conversion *conv;
8571 void *p;
8572 location_t loc = EXPR_LOC_OR_HERE (expr);
8574 if (error_operand_p (expr))
8575 return error_mark_node;
8577 /* Get the high-water mark for the CONVERSION_OBSTACK. */
8578 p = conversion_obstack_alloc (0);
8580 conv = implicit_conversion (type, TREE_TYPE (expr), expr,
8581 /*c_cast_p=*/false,
8582 flags, complain);
8584 if (!conv)
8586 if (complain & tf_error)
8588 /* If expr has unknown type, then it is an overloaded function.
8589 Call instantiate_type to get good error messages. */
8590 if (TREE_TYPE (expr) == unknown_type_node)
8591 instantiate_type (type, expr, complain);
8592 else if (invalid_nonstatic_memfn_p (expr, complain))
8593 /* We gave an error. */;
8594 else
8595 error_at (loc, "could not convert %qE from %qT to %qT", expr,
8596 TREE_TYPE (expr), type);
8598 expr = error_mark_node;
8600 else if (processing_template_decl && conv->kind != ck_identity)
8602 /* In a template, we are only concerned about determining the
8603 type of non-dependent expressions, so we do not have to
8604 perform the actual conversion. But for initializers, we
8605 need to be able to perform it at instantiation
8606 (or fold_non_dependent_expr) time. */
8607 expr = build1 (IMPLICIT_CONV_EXPR, type, expr);
8608 if (!(flags & LOOKUP_ONLYCONVERTING))
8609 IMPLICIT_CONV_EXPR_DIRECT_INIT (expr) = true;
8611 else
8612 expr = convert_like (conv, expr, complain);
8614 /* Free all the conversions we allocated. */
8615 obstack_free (&conversion_obstack, p);
8617 return expr;
8620 tree
8621 perform_implicit_conversion (tree type, tree expr, tsubst_flags_t complain)
8623 return perform_implicit_conversion_flags (type, expr, complain,
8624 LOOKUP_IMPLICIT);
8627 /* Convert EXPR to TYPE (as a direct-initialization) if that is
8628 permitted. If the conversion is valid, the converted expression is
8629 returned. Otherwise, NULL_TREE is returned, except in the case
8630 that TYPE is a class type; in that case, an error is issued. If
8631 C_CAST_P is true, then this direct-initialization is taking
8632 place as part of a static_cast being attempted as part of a C-style
8633 cast. */
8635 tree
8636 perform_direct_initialization_if_possible (tree type,
8637 tree expr,
8638 bool c_cast_p,
8639 tsubst_flags_t complain)
8641 conversion *conv;
8642 void *p;
8644 if (type == error_mark_node || error_operand_p (expr))
8645 return error_mark_node;
8646 /* [dcl.init]
8648 If the destination type is a (possibly cv-qualified) class type:
8650 -- If the initialization is direct-initialization ...,
8651 constructors are considered. ... If no constructor applies, or
8652 the overload resolution is ambiguous, the initialization is
8653 ill-formed. */
8654 if (CLASS_TYPE_P (type))
8656 VEC(tree,gc) *args = make_tree_vector_single (expr);
8657 expr = build_special_member_call (NULL_TREE, complete_ctor_identifier,
8658 &args, type, LOOKUP_NORMAL, complain);
8659 release_tree_vector (args);
8660 return build_cplus_new (type, expr, complain);
8663 /* Get the high-water mark for the CONVERSION_OBSTACK. */
8664 p = conversion_obstack_alloc (0);
8666 conv = implicit_conversion (type, TREE_TYPE (expr), expr,
8667 c_cast_p,
8668 LOOKUP_NORMAL, complain);
8669 if (!conv || conv->bad_p)
8670 expr = NULL_TREE;
8671 else
8672 expr = convert_like_real (conv, expr, NULL_TREE, 0, 0,
8673 /*issue_conversion_warnings=*/false,
8674 c_cast_p,
8675 complain);
8677 /* Free all the conversions we allocated. */
8678 obstack_free (&conversion_obstack, p);
8680 return expr;
8683 /* When initializing a reference that lasts longer than a full-expression,
8684 this special rule applies:
8686 [class.temporary]
8688 The temporary to which the reference is bound or the temporary
8689 that is the complete object to which the reference is bound
8690 persists for the lifetime of the reference.
8692 The temporaries created during the evaluation of the expression
8693 initializing the reference, except the temporary to which the
8694 reference is bound, are destroyed at the end of the
8695 full-expression in which they are created.
8697 In that case, we store the converted expression into a new
8698 VAR_DECL in a new scope.
8700 However, we want to be careful not to create temporaries when
8701 they are not required. For example, given:
8703 struct B {};
8704 struct D : public B {};
8705 D f();
8706 const B& b = f();
8708 there is no need to copy the return value from "f"; we can just
8709 extend its lifetime. Similarly, given:
8711 struct S {};
8712 struct T { operator S(); };
8713 T t;
8714 const S& s = t;
8716 we can extend the lifetime of the return value of the conversion
8717 operator.
8719 The next several functions are involved in this lifetime extension. */
8721 /* DECL is a VAR_DECL whose type is a REFERENCE_TYPE. The reference
8722 is being bound to a temporary. Create and return a new VAR_DECL
8723 with the indicated TYPE; this variable will store the value to
8724 which the reference is bound. */
8726 tree
8727 make_temporary_var_for_ref_to_temp (tree decl, tree type)
8729 tree var;
8731 /* Create the variable. */
8732 var = create_temporary_var (type);
8734 /* Register the variable. */
8735 if (TREE_STATIC (decl))
8737 /* Namespace-scope or local static; give it a mangled name. */
8738 /* FIXME share comdat with decl? */
8739 tree name;
8741 TREE_STATIC (var) = 1;
8742 name = mangle_ref_init_variable (decl);
8743 DECL_NAME (var) = name;
8744 SET_DECL_ASSEMBLER_NAME (var, name);
8745 var = pushdecl_top_level (var);
8747 else
8748 /* Create a new cleanup level if necessary. */
8749 maybe_push_cleanup_level (type);
8751 return var;
8754 /* EXPR is the initializer for a variable DECL of reference or
8755 std::initializer_list type. Create, push and return a new VAR_DECL
8756 for the initializer so that it will live as long as DECL. Any
8757 cleanup for the new variable is returned through CLEANUP, and the
8758 code to initialize the new variable is returned through INITP. */
8760 static tree
8761 set_up_extended_ref_temp (tree decl, tree expr, VEC(tree,gc) **cleanups,
8762 tree *initp)
8764 tree init;
8765 tree type;
8766 tree var;
8768 /* Create the temporary variable. */
8769 type = TREE_TYPE (expr);
8770 var = make_temporary_var_for_ref_to_temp (decl, type);
8771 layout_decl (var, 0);
8772 /* If the rvalue is the result of a function call it will be
8773 a TARGET_EXPR. If it is some other construct (such as a
8774 member access expression where the underlying object is
8775 itself the result of a function call), turn it into a
8776 TARGET_EXPR here. It is important that EXPR be a
8777 TARGET_EXPR below since otherwise the INIT_EXPR will
8778 attempt to make a bitwise copy of EXPR to initialize
8779 VAR. */
8780 if (TREE_CODE (expr) != TARGET_EXPR)
8781 expr = get_target_expr (expr);
8783 if (TREE_CODE (decl) == FIELD_DECL
8784 && extra_warnings && !TREE_NO_WARNING (decl))
8786 warning (OPT_Wextra, "a temporary bound to %qD only persists "
8787 "until the constructor exits", decl);
8788 TREE_NO_WARNING (decl) = true;
8791 /* Recursively extend temps in this initializer. */
8792 TARGET_EXPR_INITIAL (expr)
8793 = extend_ref_init_temps (decl, TARGET_EXPR_INITIAL (expr), cleanups);
8795 /* Any reference temp has a non-trivial initializer. */
8796 DECL_NONTRIVIALLY_INITIALIZED_P (var) = true;
8798 /* If the initializer is constant, put it in DECL_INITIAL so we get
8799 static initialization and use in constant expressions. */
8800 init = maybe_constant_init (expr);
8801 if (TREE_CONSTANT (init))
8803 if (literal_type_p (type) && CP_TYPE_CONST_NON_VOLATILE_P (type))
8805 /* 5.19 says that a constant expression can include an
8806 lvalue-rvalue conversion applied to "a glvalue of literal type
8807 that refers to a non-volatile temporary object initialized
8808 with a constant expression". Rather than try to communicate
8809 that this VAR_DECL is a temporary, just mark it constexpr.
8811 Currently this is only useful for initializer_list temporaries,
8812 since reference vars can't appear in constant expressions. */
8813 DECL_DECLARED_CONSTEXPR_P (var) = true;
8814 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (var) = true;
8815 TREE_CONSTANT (var) = true;
8817 DECL_INITIAL (var) = init;
8818 init = NULL_TREE;
8820 else
8821 /* Create the INIT_EXPR that will initialize the temporary
8822 variable. */
8823 init = build2 (INIT_EXPR, type, var, expr);
8824 if (at_function_scope_p ())
8826 add_decl_expr (var);
8828 if (TREE_STATIC (var))
8829 init = add_stmt_to_compound (init, register_dtor_fn (var));
8830 else
8832 tree cleanup = cxx_maybe_build_cleanup (var, tf_warning_or_error);
8833 if (cleanup)
8834 VEC_safe_push (tree, gc, *cleanups, cleanup);
8837 /* We must be careful to destroy the temporary only
8838 after its initialization has taken place. If the
8839 initialization throws an exception, then the
8840 destructor should not be run. We cannot simply
8841 transform INIT into something like:
8843 (INIT, ({ CLEANUP_STMT; }))
8845 because emit_local_var always treats the
8846 initializer as a full-expression. Thus, the
8847 destructor would run too early; it would run at the
8848 end of initializing the reference variable, rather
8849 than at the end of the block enclosing the
8850 reference variable.
8852 The solution is to pass back a cleanup expression
8853 which the caller is responsible for attaching to
8854 the statement tree. */
8856 else
8858 rest_of_decl_compilation (var, /*toplev=*/1, at_eof);
8859 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
8860 static_aggregates = tree_cons (NULL_TREE, var,
8861 static_aggregates);
8864 *initp = init;
8865 return var;
8868 /* Convert EXPR to the indicated reference TYPE, in a way suitable for
8869 initializing a variable of that TYPE. */
8871 tree
8872 initialize_reference (tree type, tree expr,
8873 int flags, tsubst_flags_t complain)
8875 conversion *conv;
8876 void *p;
8877 location_t loc = EXPR_LOC_OR_HERE (expr);
8879 if (type == error_mark_node || error_operand_p (expr))
8880 return error_mark_node;
8882 /* Get the high-water mark for the CONVERSION_OBSTACK. */
8883 p = conversion_obstack_alloc (0);
8885 conv = reference_binding (type, TREE_TYPE (expr), expr, /*c_cast_p=*/false,
8886 flags, complain);
8887 if (!conv || conv->bad_p)
8889 if (complain & tf_error)
8891 if (conv)
8892 convert_like (conv, expr, complain);
8893 else if (!CP_TYPE_CONST_P (TREE_TYPE (type))
8894 && !TYPE_REF_IS_RVALUE (type)
8895 && !real_lvalue_p (expr))
8896 error_at (loc, "invalid initialization of non-const reference of "
8897 "type %qT from an rvalue of type %qT",
8898 type, TREE_TYPE (expr));
8899 else
8900 error_at (loc, "invalid initialization of reference of type "
8901 "%qT from expression of type %qT", type,
8902 TREE_TYPE (expr));
8904 return error_mark_node;
8907 gcc_assert (conv->kind == ck_ref_bind);
8909 /* Perform the conversion. */
8910 expr = convert_like (conv, expr, complain);
8912 /* Free all the conversions we allocated. */
8913 obstack_free (&conversion_obstack, p);
8915 return expr;
8918 /* Subroutine of extend_ref_init_temps. Possibly extend one initializer,
8919 which is bound either to a reference or a std::initializer_list. */
8921 static tree
8922 extend_ref_init_temps_1 (tree decl, tree init, VEC(tree,gc) **cleanups)
8924 tree sub = init;
8925 tree *p;
8926 STRIP_NOPS (sub);
8927 if (TREE_CODE (sub) == COMPOUND_EXPR)
8929 TREE_OPERAND (sub, 1)
8930 = extend_ref_init_temps_1 (decl, TREE_OPERAND (sub, 1), cleanups);
8931 return init;
8933 if (TREE_CODE (sub) != ADDR_EXPR)
8934 return init;
8935 /* Deal with binding to a subobject. */
8936 for (p = &TREE_OPERAND (sub, 0); TREE_CODE (*p) == COMPONENT_REF; )
8937 p = &TREE_OPERAND (*p, 0);
8938 if (TREE_CODE (*p) == TARGET_EXPR)
8940 tree subinit = NULL_TREE;
8941 *p = set_up_extended_ref_temp (decl, *p, cleanups, &subinit);
8942 if (subinit)
8943 init = build2 (COMPOUND_EXPR, TREE_TYPE (init), subinit, init);
8945 return init;
8948 /* INIT is part of the initializer for DECL. If there are any
8949 reference or initializer lists being initialized, extend their
8950 lifetime to match that of DECL. */
8952 tree
8953 extend_ref_init_temps (tree decl, tree init, VEC(tree,gc) **cleanups)
8955 tree type = TREE_TYPE (init);
8956 if (processing_template_decl)
8957 return init;
8958 if (TREE_CODE (type) == REFERENCE_TYPE)
8959 init = extend_ref_init_temps_1 (decl, init, cleanups);
8960 else if (is_std_init_list (type))
8962 /* The temporary array underlying a std::initializer_list
8963 is handled like a reference temporary. */
8964 tree ctor = init;
8965 if (TREE_CODE (ctor) == TARGET_EXPR)
8966 ctor = TARGET_EXPR_INITIAL (ctor);
8967 if (TREE_CODE (ctor) == CONSTRUCTOR)
8969 tree array = CONSTRUCTOR_ELT (ctor, 0)->value;
8970 array = extend_ref_init_temps_1 (decl, array, cleanups);
8971 CONSTRUCTOR_ELT (ctor, 0)->value = array;
8974 else if (TREE_CODE (init) == CONSTRUCTOR)
8976 unsigned i;
8977 constructor_elt *p;
8978 VEC(constructor_elt,gc) *elts = CONSTRUCTOR_ELTS (init);
8979 FOR_EACH_VEC_ELT (constructor_elt, elts, i, p)
8980 p->value = extend_ref_init_temps (decl, p->value, cleanups);
8983 return init;
8986 /* Returns true iff TYPE is some variant of std::initializer_list. */
8988 bool
8989 is_std_init_list (tree type)
8991 /* Look through typedefs. */
8992 if (!TYPE_P (type))
8993 return false;
8994 type = TYPE_MAIN_VARIANT (type);
8995 return (CLASS_TYPE_P (type)
8996 && CP_TYPE_CONTEXT (type) == std_node
8997 && strcmp (TYPE_NAME_STRING (type), "initializer_list") == 0);
9000 /* Returns true iff DECL is a list constructor: i.e. a constructor which
9001 will accept an argument list of a single std::initializer_list<T>. */
9003 bool
9004 is_list_ctor (tree decl)
9006 tree args = FUNCTION_FIRST_USER_PARMTYPE (decl);
9007 tree arg;
9009 if (!args || args == void_list_node)
9010 return false;
9012 arg = non_reference (TREE_VALUE (args));
9013 if (!is_std_init_list (arg))
9014 return false;
9016 args = TREE_CHAIN (args);
9018 if (args && args != void_list_node && !TREE_PURPOSE (args))
9019 /* There are more non-defaulted parms. */
9020 return false;
9022 return true;
9025 #include "gt-cp-call.h"