Partial implementation of C++11 thread_local.
[official-gcc.git] / gcc / cp / call.c
blob9c8de39e92deaac6816202154b0f2706db719220
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 = maybe_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_sfinae (result, complain);
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_sfinae (new_ctor, complain);
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_sfinae (digest_init (totype, expr, complain),
5903 complain);
5905 default:
5906 break;
5909 expr = convert_like_real (next_conversion (convs), expr, fn, argnum,
5910 convs->kind == ck_ref_bind ? -1 : 1,
5911 convs->kind == ck_ref_bind ? issue_conversion_warnings : false,
5912 c_cast_p,
5913 complain);
5914 if (expr == error_mark_node)
5915 return error_mark_node;
5917 switch (convs->kind)
5919 case ck_rvalue:
5920 expr = decay_conversion (expr, complain);
5921 if (expr == error_mark_node)
5922 return error_mark_node;
5924 if (! MAYBE_CLASS_TYPE_P (totype))
5925 return expr;
5926 /* Else fall through. */
5927 case ck_base:
5928 if (convs->kind == ck_base && !convs->need_temporary_p)
5930 /* We are going to bind a reference directly to a base-class
5931 subobject of EXPR. */
5932 /* Build an expression for `*((base*) &expr)'. */
5933 expr = cp_build_addr_expr (expr, complain);
5934 expr = convert_to_base (expr, build_pointer_type (totype),
5935 !c_cast_p, /*nonnull=*/true, complain);
5936 expr = cp_build_indirect_ref (expr, RO_IMPLICIT_CONVERSION, complain);
5937 return expr;
5940 /* Copy-initialization where the cv-unqualified version of the source
5941 type is the same class as, or a derived class of, the class of the
5942 destination [is treated as direct-initialization]. [dcl.init] */
5943 flags = LOOKUP_NORMAL|LOOKUP_ONLYCONVERTING;
5944 if (convs->user_conv_p)
5945 /* This conversion is being done in the context of a user-defined
5946 conversion (i.e. the second step of copy-initialization), so
5947 don't allow any more. */
5948 flags |= LOOKUP_NO_CONVERSION;
5949 if (convs->rvaluedness_matches_p)
5950 flags |= LOOKUP_PREFER_RVALUE;
5951 if (TREE_CODE (expr) == TARGET_EXPR
5952 && TARGET_EXPR_LIST_INIT_P (expr))
5953 /* Copy-list-initialization doesn't actually involve a copy. */
5954 return expr;
5955 expr = build_temp (expr, totype, flags, &diag_kind, complain);
5956 if (diag_kind && fn && complain)
5957 emit_diagnostic (diag_kind, DECL_SOURCE_LOCATION (fn), 0,
5958 " initializing argument %P of %qD", argnum, fn);
5959 return build_cplus_new (totype, expr, complain);
5961 case ck_ref_bind:
5963 tree ref_type = totype;
5965 if (convs->bad_p && !next_conversion (convs)->bad_p)
5967 gcc_assert (TYPE_REF_IS_RVALUE (ref_type)
5968 && real_lvalue_p (expr));
5970 error_at (loc, "cannot bind %qT lvalue to %qT",
5971 TREE_TYPE (expr), totype);
5972 if (fn)
5973 error (" initializing argument %P of %q+D", argnum, fn);
5974 return error_mark_node;
5977 /* If necessary, create a temporary.
5979 VA_ARG_EXPR and CONSTRUCTOR expressions are special cases
5980 that need temporaries, even when their types are reference
5981 compatible with the type of reference being bound, so the
5982 upcoming call to cp_build_addr_expr doesn't fail. */
5983 if (convs->need_temporary_p
5984 || TREE_CODE (expr) == CONSTRUCTOR
5985 || TREE_CODE (expr) == VA_ARG_EXPR)
5987 /* Otherwise, a temporary of type "cv1 T1" is created and
5988 initialized from the initializer expression using the rules
5989 for a non-reference copy-initialization (8.5). */
5991 tree type = TREE_TYPE (ref_type);
5992 cp_lvalue_kind lvalue = real_lvalue_p (expr);
5994 gcc_assert (same_type_ignoring_top_level_qualifiers_p
5995 (type, next_conversion (convs)->type));
5996 if (!CP_TYPE_CONST_NON_VOLATILE_P (type)
5997 && !TYPE_REF_IS_RVALUE (ref_type))
5999 /* If the reference is volatile or non-const, we
6000 cannot create a temporary. */
6001 if (lvalue & clk_bitfield)
6002 error_at (loc, "cannot bind bitfield %qE to %qT",
6003 expr, ref_type);
6004 else if (lvalue & clk_packed)
6005 error_at (loc, "cannot bind packed field %qE to %qT",
6006 expr, ref_type);
6007 else
6008 error_at (loc, "cannot bind rvalue %qE to %qT",
6009 expr, ref_type);
6010 return error_mark_node;
6012 /* If the source is a packed field, and we must use a copy
6013 constructor, then building the target expr will require
6014 binding the field to the reference parameter to the
6015 copy constructor, and we'll end up with an infinite
6016 loop. If we can use a bitwise copy, then we'll be
6017 OK. */
6018 if ((lvalue & clk_packed)
6019 && CLASS_TYPE_P (type)
6020 && type_has_nontrivial_copy_init (type))
6022 error_at (loc, "cannot bind packed field %qE to %qT",
6023 expr, ref_type);
6024 return error_mark_node;
6026 if (lvalue & clk_bitfield)
6028 expr = convert_bitfield_to_declared_type (expr);
6029 expr = fold_convert (type, expr);
6031 expr = build_target_expr_with_type (expr, type, complain);
6034 /* Take the address of the thing to which we will bind the
6035 reference. */
6036 expr = cp_build_addr_expr (expr, complain);
6037 if (expr == error_mark_node)
6038 return error_mark_node;
6040 /* Convert it to a pointer to the type referred to by the
6041 reference. This will adjust the pointer if a derived to
6042 base conversion is being performed. */
6043 expr = cp_convert (build_pointer_type (TREE_TYPE (ref_type)),
6044 expr, complain);
6045 /* Convert the pointer to the desired reference type. */
6046 return build_nop (ref_type, expr);
6049 case ck_lvalue:
6050 return decay_conversion (expr, complain);
6052 case ck_qual:
6053 /* Warn about deprecated conversion if appropriate. */
6054 string_conv_p (totype, expr, 1);
6055 break;
6057 case ck_ptr:
6058 if (convs->base_p)
6059 expr = convert_to_base (expr, totype, !c_cast_p,
6060 /*nonnull=*/false, complain);
6061 return build_nop (totype, expr);
6063 case ck_pmem:
6064 return convert_ptrmem (totype, expr, /*allow_inverse_p=*/false,
6065 c_cast_p, complain);
6067 default:
6068 break;
6071 if (convs->check_narrowing)
6072 check_narrowing (totype, expr);
6074 if (issue_conversion_warnings && (complain & tf_warning))
6075 expr = convert_and_check (totype, expr);
6076 else
6077 expr = convert (totype, expr);
6079 return expr;
6082 /* ARG is being passed to a varargs function. Perform any conversions
6083 required. Return the converted value. */
6085 tree
6086 convert_arg_to_ellipsis (tree arg, tsubst_flags_t complain)
6088 tree arg_type;
6089 location_t loc = EXPR_LOC_OR_HERE (arg);
6091 /* [expr.call]
6093 The lvalue-to-rvalue, array-to-pointer, and function-to-pointer
6094 standard conversions are performed. */
6095 arg = decay_conversion (arg, complain);
6096 arg_type = TREE_TYPE (arg);
6097 /* [expr.call]
6099 If the argument has integral or enumeration type that is subject
6100 to the integral promotions (_conv.prom_), or a floating point
6101 type that is subject to the floating point promotion
6102 (_conv.fpprom_), the value of the argument is converted to the
6103 promoted type before the call. */
6104 if (TREE_CODE (arg_type) == REAL_TYPE
6105 && (TYPE_PRECISION (arg_type)
6106 < TYPE_PRECISION (double_type_node))
6107 && !DECIMAL_FLOAT_MODE_P (TYPE_MODE (arg_type)))
6109 if ((complain & tf_warning)
6110 && warn_double_promotion && !c_inhibit_evaluation_warnings)
6111 warning_at (loc, OPT_Wdouble_promotion,
6112 "implicit conversion from %qT to %qT when passing "
6113 "argument to function",
6114 arg_type, double_type_node);
6115 arg = convert_to_real (double_type_node, arg);
6117 else if (NULLPTR_TYPE_P (arg_type))
6118 arg = null_pointer_node;
6119 else if (INTEGRAL_OR_ENUMERATION_TYPE_P (arg_type))
6121 if (SCOPED_ENUM_P (arg_type) && !abi_version_at_least (6))
6123 if (complain & tf_warning)
6124 warning_at (loc, OPT_Wabi, "scoped enum %qT will not promote to an "
6125 "integral type in a future version of GCC", arg_type);
6126 arg = cp_convert (ENUM_UNDERLYING_TYPE (arg_type), arg, complain);
6128 arg = cp_perform_integral_promotions (arg, complain);
6131 arg = require_complete_type_sfinae (arg, complain);
6132 arg_type = TREE_TYPE (arg);
6134 if (arg != error_mark_node
6135 /* In a template (or ill-formed code), we can have an incomplete type
6136 even after require_complete_type_sfinae, in which case we don't know
6137 whether it has trivial copy or not. */
6138 && COMPLETE_TYPE_P (arg_type))
6140 /* Build up a real lvalue-to-rvalue conversion in case the
6141 copy constructor is trivial but not callable. */
6142 if (!cp_unevaluated_operand && CLASS_TYPE_P (arg_type))
6143 force_rvalue (arg, complain);
6145 /* [expr.call] 5.2.2/7:
6146 Passing a potentially-evaluated argument of class type (Clause 9)
6147 with a non-trivial copy constructor or a non-trivial destructor
6148 with no corresponding parameter is conditionally-supported, with
6149 implementation-defined semantics.
6151 We used to just warn here and do a bitwise copy, but now
6152 cp_expr_size will abort if we try to do that.
6154 If the call appears in the context of a sizeof expression,
6155 it is not potentially-evaluated. */
6156 if (cp_unevaluated_operand == 0
6157 && (type_has_nontrivial_copy_init (arg_type)
6158 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (arg_type)))
6160 if (complain & tf_error)
6161 error_at (loc, "cannot pass objects of non-trivially-copyable "
6162 "type %q#T through %<...%>", arg_type);
6163 else
6164 return error_mark_node;
6168 return arg;
6171 /* va_arg (EXPR, TYPE) is a builtin. Make sure it is not abused. */
6173 tree
6174 build_x_va_arg (source_location loc, tree expr, tree type)
6176 if (processing_template_decl)
6177 return build_min (VA_ARG_EXPR, type, expr);
6179 type = complete_type_or_else (type, NULL_TREE);
6181 if (expr == error_mark_node || !type)
6182 return error_mark_node;
6184 expr = mark_lvalue_use (expr);
6186 if (type_has_nontrivial_copy_init (type)
6187 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
6188 || TREE_CODE (type) == REFERENCE_TYPE)
6190 /* Remove reference types so we don't ICE later on. */
6191 tree type1 = non_reference (type);
6192 /* conditionally-supported behavior [expr.call] 5.2.2/7. */
6193 error ("cannot receive objects of non-trivially-copyable type %q#T "
6194 "through %<...%>; ", type);
6195 expr = convert (build_pointer_type (type1), null_node);
6196 expr = cp_build_indirect_ref (expr, RO_NULL, tf_warning_or_error);
6197 return expr;
6200 return build_va_arg (loc, expr, type);
6203 /* TYPE has been given to va_arg. Apply the default conversions which
6204 would have happened when passed via ellipsis. Return the promoted
6205 type, or the passed type if there is no change. */
6207 tree
6208 cxx_type_promotes_to (tree type)
6210 tree promote;
6212 /* Perform the array-to-pointer and function-to-pointer
6213 conversions. */
6214 type = type_decays_to (type);
6216 promote = type_promotes_to (type);
6217 if (same_type_p (type, promote))
6218 promote = type;
6220 return promote;
6223 /* ARG is a default argument expression being passed to a parameter of
6224 the indicated TYPE, which is a parameter to FN. PARMNUM is the
6225 zero-based argument number. Do any required conversions. Return
6226 the converted value. */
6228 static GTY(()) VEC(tree,gc) *default_arg_context;
6229 void
6230 push_defarg_context (tree fn)
6231 { VEC_safe_push (tree, gc, default_arg_context, fn); }
6232 void
6233 pop_defarg_context (void)
6234 { VEC_pop (tree, default_arg_context); }
6236 tree
6237 convert_default_arg (tree type, tree arg, tree fn, int parmnum,
6238 tsubst_flags_t complain)
6240 int i;
6241 tree t;
6243 /* See through clones. */
6244 fn = DECL_ORIGIN (fn);
6246 /* Detect recursion. */
6247 FOR_EACH_VEC_ELT (tree, default_arg_context, i, t)
6248 if (t == fn)
6250 if (complain & tf_error)
6251 error ("recursive evaluation of default argument for %q#D", fn);
6252 return error_mark_node;
6255 /* If the ARG is an unparsed default argument expression, the
6256 conversion cannot be performed. */
6257 if (TREE_CODE (arg) == DEFAULT_ARG)
6259 if (complain & tf_error)
6260 error ("call to %qD uses the default argument for parameter %P, which "
6261 "is not yet defined", fn, parmnum);
6262 return error_mark_node;
6265 push_defarg_context (fn);
6267 if (fn && DECL_TEMPLATE_INFO (fn))
6268 arg = tsubst_default_argument (fn, type, arg);
6270 /* Due to:
6272 [dcl.fct.default]
6274 The names in the expression are bound, and the semantic
6275 constraints are checked, at the point where the default
6276 expressions appears.
6278 we must not perform access checks here. */
6279 push_deferring_access_checks (dk_no_check);
6280 /* We must make a copy of ARG, in case subsequent processing
6281 alters any part of it. */
6282 arg = break_out_target_exprs (arg);
6283 if (TREE_CODE (arg) == CONSTRUCTOR)
6285 arg = digest_init (type, arg, complain);
6286 arg = convert_for_initialization (0, type, arg, LOOKUP_IMPLICIT,
6287 ICR_DEFAULT_ARGUMENT, fn, parmnum,
6288 complain);
6290 else
6292 arg = convert_for_initialization (0, type, arg, LOOKUP_IMPLICIT,
6293 ICR_DEFAULT_ARGUMENT, fn, parmnum,
6294 complain);
6295 arg = convert_for_arg_passing (type, arg, complain);
6297 pop_deferring_access_checks();
6299 pop_defarg_context ();
6301 return arg;
6304 /* Returns the type which will really be used for passing an argument of
6305 type TYPE. */
6307 tree
6308 type_passed_as (tree type)
6310 /* Pass classes with copy ctors by invisible reference. */
6311 if (TREE_ADDRESSABLE (type))
6313 type = build_reference_type (type);
6314 /* There are no other pointers to this temporary. */
6315 type = cp_build_qualified_type (type, TYPE_QUAL_RESTRICT);
6317 else if (targetm.calls.promote_prototypes (type)
6318 && INTEGRAL_TYPE_P (type)
6319 && COMPLETE_TYPE_P (type)
6320 && INT_CST_LT_UNSIGNED (TYPE_SIZE (type),
6321 TYPE_SIZE (integer_type_node)))
6322 type = integer_type_node;
6324 return type;
6327 /* Actually perform the appropriate conversion. */
6329 tree
6330 convert_for_arg_passing (tree type, tree val, tsubst_flags_t complain)
6332 tree bitfield_type;
6334 /* If VAL is a bitfield, then -- since it has already been converted
6335 to TYPE -- it cannot have a precision greater than TYPE.
6337 If it has a smaller precision, we must widen it here. For
6338 example, passing "int f:3;" to a function expecting an "int" will
6339 not result in any conversion before this point.
6341 If the precision is the same we must not risk widening. For
6342 example, the COMPONENT_REF for a 32-bit "long long" bitfield will
6343 often have type "int", even though the C++ type for the field is
6344 "long long". If the value is being passed to a function
6345 expecting an "int", then no conversions will be required. But,
6346 if we call convert_bitfield_to_declared_type, the bitfield will
6347 be converted to "long long". */
6348 bitfield_type = is_bitfield_expr_with_lowered_type (val);
6349 if (bitfield_type
6350 && TYPE_PRECISION (TREE_TYPE (val)) < TYPE_PRECISION (type))
6351 val = convert_to_integer (TYPE_MAIN_VARIANT (bitfield_type), val);
6353 if (val == error_mark_node)
6355 /* Pass classes with copy ctors by invisible reference. */
6356 else if (TREE_ADDRESSABLE (type))
6357 val = build1 (ADDR_EXPR, build_reference_type (type), val);
6358 else if (targetm.calls.promote_prototypes (type)
6359 && INTEGRAL_TYPE_P (type)
6360 && COMPLETE_TYPE_P (type)
6361 && INT_CST_LT_UNSIGNED (TYPE_SIZE (type),
6362 TYPE_SIZE (integer_type_node)))
6363 val = cp_perform_integral_promotions (val, complain);
6364 if ((complain & tf_warning)
6365 && warn_suggest_attribute_format)
6367 tree rhstype = TREE_TYPE (val);
6368 const enum tree_code coder = TREE_CODE (rhstype);
6369 const enum tree_code codel = TREE_CODE (type);
6370 if ((codel == POINTER_TYPE || codel == REFERENCE_TYPE)
6371 && coder == codel
6372 && check_missing_format_attribute (type, rhstype))
6373 warning (OPT_Wsuggest_attribute_format,
6374 "argument of function call might be a candidate for a format attribute");
6376 return val;
6379 /* Returns true iff FN is a function with magic varargs, i.e. ones for
6380 which no conversions at all should be done. This is true for some
6381 builtins which don't act like normal functions. */
6383 static bool
6384 magic_varargs_p (tree fn)
6386 if (DECL_BUILT_IN (fn))
6387 switch (DECL_FUNCTION_CODE (fn))
6389 case BUILT_IN_CLASSIFY_TYPE:
6390 case BUILT_IN_CONSTANT_P:
6391 case BUILT_IN_NEXT_ARG:
6392 case BUILT_IN_VA_START:
6393 return true;
6395 default:;
6396 return lookup_attribute ("type generic",
6397 TYPE_ATTRIBUTES (TREE_TYPE (fn))) != 0;
6400 return false;
6403 /* Subroutine of the various build_*_call functions. Overload resolution
6404 has chosen a winning candidate CAND; build up a CALL_EXPR accordingly.
6405 ARGS is a TREE_LIST of the unconverted arguments to the call. FLAGS is a
6406 bitmask of various LOOKUP_* flags which apply to the call itself. */
6408 static tree
6409 build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain)
6411 tree fn = cand->fn;
6412 const VEC(tree,gc) *args = cand->args;
6413 tree first_arg = cand->first_arg;
6414 conversion **convs = cand->convs;
6415 conversion *conv;
6416 tree parm = TYPE_ARG_TYPES (TREE_TYPE (fn));
6417 int parmlen;
6418 tree val;
6419 int i = 0;
6420 int j = 0;
6421 unsigned int arg_index = 0;
6422 int is_method = 0;
6423 int nargs;
6424 tree *argarray;
6425 bool already_used = false;
6427 /* In a template, there is no need to perform all of the work that
6428 is normally done. We are only interested in the type of the call
6429 expression, i.e., the return type of the function. Any semantic
6430 errors will be deferred until the template is instantiated. */
6431 if (processing_template_decl)
6433 tree expr, addr;
6434 tree return_type;
6435 const tree *argarray;
6436 unsigned int nargs;
6438 return_type = TREE_TYPE (TREE_TYPE (fn));
6439 nargs = VEC_length (tree, args);
6440 if (first_arg == NULL_TREE)
6441 argarray = VEC_address (tree, CONST_CAST (VEC(tree,gc) *, args));
6442 else
6444 tree *alcarray;
6445 unsigned int ix;
6446 tree arg;
6448 ++nargs;
6449 alcarray = XALLOCAVEC (tree, nargs);
6450 alcarray[0] = first_arg;
6451 FOR_EACH_VEC_ELT (tree, args, ix, arg)
6452 alcarray[ix + 1] = arg;
6453 argarray = alcarray;
6456 addr = build_addr_func (fn, complain);
6457 if (addr == error_mark_node)
6458 return error_mark_node;
6459 expr = build_call_array_loc (input_location, return_type,
6460 addr, nargs, argarray);
6461 if (TREE_THIS_VOLATILE (fn) && cfun)
6462 current_function_returns_abnormally = 1;
6463 return convert_from_reference (expr);
6466 /* Give any warnings we noticed during overload resolution. */
6467 if (cand->warnings && (complain & tf_warning))
6469 struct candidate_warning *w;
6470 for (w = cand->warnings; w; w = w->next)
6471 joust (cand, w->loser, 1, complain);
6474 /* Make =delete work with SFINAE. */
6475 if (DECL_DELETED_FN (fn) && !(complain & tf_error))
6476 return error_mark_node;
6478 if (DECL_FUNCTION_MEMBER_P (fn))
6480 tree access_fn;
6481 /* If FN is a template function, two cases must be considered.
6482 For example:
6484 struct A {
6485 protected:
6486 template <class T> void f();
6488 template <class T> struct B {
6489 protected:
6490 void g();
6492 struct C : A, B<int> {
6493 using A::f; // #1
6494 using B<int>::g; // #2
6497 In case #1 where `A::f' is a member template, DECL_ACCESS is
6498 recorded in the primary template but not in its specialization.
6499 We check access of FN using its primary template.
6501 In case #2, where `B<int>::g' has a DECL_TEMPLATE_INFO simply
6502 because it is a member of class template B, DECL_ACCESS is
6503 recorded in the specialization `B<int>::g'. We cannot use its
6504 primary template because `B<T>::g' and `B<int>::g' may have
6505 different access. */
6506 if (DECL_TEMPLATE_INFO (fn)
6507 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (fn)))
6508 access_fn = DECL_TI_TEMPLATE (fn);
6509 else
6510 access_fn = fn;
6511 if (!perform_or_defer_access_check (cand->access_path, access_fn,
6512 fn, complain))
6513 return error_mark_node;
6516 /* If we're checking for implicit delete, don't bother with argument
6517 conversions. */
6518 if (flags & LOOKUP_SPECULATIVE)
6520 if (DECL_DELETED_FN (fn))
6522 if (complain & tf_error)
6523 mark_used (fn);
6524 return error_mark_node;
6526 if (cand->viable == 1)
6527 return fn;
6528 else if (!(complain & tf_error))
6529 /* Reject bad conversions now. */
6530 return error_mark_node;
6531 /* else continue to get conversion error. */
6534 /* Find maximum size of vector to hold converted arguments. */
6535 parmlen = list_length (parm);
6536 nargs = VEC_length (tree, args) + (first_arg != NULL_TREE ? 1 : 0);
6537 if (parmlen > nargs)
6538 nargs = parmlen;
6539 argarray = XALLOCAVEC (tree, nargs);
6541 /* The implicit parameters to a constructor are not considered by overload
6542 resolution, and must be of the proper type. */
6543 if (DECL_CONSTRUCTOR_P (fn))
6545 if (first_arg != NULL_TREE)
6547 argarray[j++] = first_arg;
6548 first_arg = NULL_TREE;
6550 else
6552 argarray[j++] = VEC_index (tree, args, arg_index);
6553 ++arg_index;
6555 parm = TREE_CHAIN (parm);
6556 /* We should never try to call the abstract constructor. */
6557 gcc_assert (!DECL_HAS_IN_CHARGE_PARM_P (fn));
6559 if (DECL_HAS_VTT_PARM_P (fn))
6561 argarray[j++] = VEC_index (tree, args, arg_index);
6562 ++arg_index;
6563 parm = TREE_CHAIN (parm);
6566 /* Bypass access control for 'this' parameter. */
6567 else if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
6569 tree parmtype = TREE_VALUE (parm);
6570 tree arg = (first_arg != NULL_TREE
6571 ? first_arg
6572 : VEC_index (tree, args, arg_index));
6573 tree argtype = TREE_TYPE (arg);
6574 tree converted_arg;
6575 tree base_binfo;
6577 if (convs[i]->bad_p)
6579 if (complain & tf_error)
6580 permerror (input_location, "passing %qT as %<this%> argument of %q#D discards qualifiers",
6581 TREE_TYPE (argtype), fn);
6582 else
6583 return error_mark_node;
6586 /* See if the function member or the whole class type is declared
6587 final and the call can be devirtualized. */
6588 if (DECL_FINAL_P (fn)
6589 || CLASSTYPE_FINAL (TYPE_METHOD_BASETYPE (TREE_TYPE (fn))))
6590 flags |= LOOKUP_NONVIRTUAL;
6592 /* [class.mfct.nonstatic]: If a nonstatic member function of a class
6593 X is called for an object that is not of type X, or of a type
6594 derived from X, the behavior is undefined.
6596 So we can assume that anything passed as 'this' is non-null, and
6597 optimize accordingly. */
6598 gcc_assert (TREE_CODE (parmtype) == POINTER_TYPE);
6599 /* Convert to the base in which the function was declared. */
6600 gcc_assert (cand->conversion_path != NULL_TREE);
6601 converted_arg = build_base_path (PLUS_EXPR,
6602 arg,
6603 cand->conversion_path,
6604 1, complain);
6605 /* Check that the base class is accessible. */
6606 if (!accessible_base_p (TREE_TYPE (argtype),
6607 BINFO_TYPE (cand->conversion_path), true))
6608 error ("%qT is not an accessible base of %qT",
6609 BINFO_TYPE (cand->conversion_path),
6610 TREE_TYPE (argtype));
6611 /* If fn was found by a using declaration, the conversion path
6612 will be to the derived class, not the base declaring fn. We
6613 must convert from derived to base. */
6614 base_binfo = lookup_base (TREE_TYPE (TREE_TYPE (converted_arg)),
6615 TREE_TYPE (parmtype), ba_unique,
6616 NULL, complain);
6617 converted_arg = build_base_path (PLUS_EXPR, converted_arg,
6618 base_binfo, 1, complain);
6620 argarray[j++] = converted_arg;
6621 parm = TREE_CHAIN (parm);
6622 if (first_arg != NULL_TREE)
6623 first_arg = NULL_TREE;
6624 else
6625 ++arg_index;
6626 ++i;
6627 is_method = 1;
6630 gcc_assert (first_arg == NULL_TREE);
6631 for (; arg_index < VEC_length (tree, args) && parm;
6632 parm = TREE_CHAIN (parm), ++arg_index, ++i)
6634 tree type = TREE_VALUE (parm);
6635 tree arg = VEC_index (tree, args, arg_index);
6636 bool conversion_warning = true;
6638 conv = convs[i];
6640 /* If the argument is NULL and used to (implicitly) instantiate a
6641 template function (and bind one of the template arguments to
6642 the type of 'long int'), we don't want to warn about passing NULL
6643 to non-pointer argument.
6644 For example, if we have this template function:
6646 template<typename T> void func(T x) {}
6648 we want to warn (when -Wconversion is enabled) in this case:
6650 void foo() {
6651 func<int>(NULL);
6654 but not in this case:
6656 void foo() {
6657 func(NULL);
6660 if (arg == null_node
6661 && DECL_TEMPLATE_INFO (fn)
6662 && cand->template_decl
6663 && !(flags & LOOKUP_EXPLICIT_TMPL_ARGS))
6664 conversion_warning = false;
6666 /* Warn about initializer_list deduction that isn't currently in the
6667 working draft. */
6668 if (cxx_dialect > cxx98
6669 && flag_deduce_init_list
6670 && cand->template_decl
6671 && is_std_init_list (non_reference (type))
6672 && BRACE_ENCLOSED_INITIALIZER_P (arg))
6674 tree tmpl = TI_TEMPLATE (cand->template_decl);
6675 tree realparm = chain_index (j, DECL_ARGUMENTS (cand->fn));
6676 tree patparm = get_pattern_parm (realparm, tmpl);
6677 tree pattype = TREE_TYPE (patparm);
6678 if (PACK_EXPANSION_P (pattype))
6679 pattype = PACK_EXPANSION_PATTERN (pattype);
6680 pattype = non_reference (pattype);
6682 if (TREE_CODE (pattype) == TEMPLATE_TYPE_PARM
6683 && (cand->explicit_targs == NULL_TREE
6684 || (TREE_VEC_LENGTH (cand->explicit_targs)
6685 <= TEMPLATE_TYPE_IDX (pattype))))
6687 pedwarn (input_location, 0, "deducing %qT as %qT",
6688 non_reference (TREE_TYPE (patparm)),
6689 non_reference (type));
6690 pedwarn (input_location, 0, " in call to %q+D", cand->fn);
6691 pedwarn (input_location, 0,
6692 " (you can disable this with -fno-deduce-init-list)");
6696 val = convert_like_with_context (conv, arg, fn, i-is_method,
6697 conversion_warning
6698 ? complain
6699 : complain & (~tf_warning));
6701 val = convert_for_arg_passing (type, val, complain);
6702 if (val == error_mark_node)
6703 return error_mark_node;
6704 else
6705 argarray[j++] = val;
6708 /* Default arguments */
6709 for (; parm && parm != void_list_node; parm = TREE_CHAIN (parm), i++)
6711 if (TREE_VALUE (parm) == error_mark_node)
6712 return error_mark_node;
6713 argarray[j++] = convert_default_arg (TREE_VALUE (parm),
6714 TREE_PURPOSE (parm),
6715 fn, i - is_method,
6716 complain);
6719 /* Ellipsis */
6720 for (; arg_index < VEC_length (tree, args); ++arg_index)
6722 tree a = VEC_index (tree, args, arg_index);
6723 if (magic_varargs_p (fn))
6724 /* Do no conversions for magic varargs. */
6725 a = mark_type_use (a);
6726 else
6727 a = convert_arg_to_ellipsis (a, complain);
6728 argarray[j++] = a;
6731 gcc_assert (j <= nargs);
6732 nargs = j;
6734 check_function_arguments (TREE_TYPE (fn), nargs, argarray);
6736 /* Avoid actually calling copy constructors and copy assignment operators,
6737 if possible. */
6739 if (! flag_elide_constructors)
6740 /* Do things the hard way. */;
6741 else if (cand->num_convs == 1
6742 && (DECL_COPY_CONSTRUCTOR_P (fn)
6743 || DECL_MOVE_CONSTRUCTOR_P (fn)))
6745 tree targ;
6746 tree arg = argarray[num_artificial_parms_for (fn)];
6747 tree fa;
6748 bool trivial = trivial_fn_p (fn);
6750 /* Pull out the real argument, disregarding const-correctness. */
6751 targ = arg;
6752 while (CONVERT_EXPR_P (targ)
6753 || TREE_CODE (targ) == NON_LVALUE_EXPR)
6754 targ = TREE_OPERAND (targ, 0);
6755 if (TREE_CODE (targ) == ADDR_EXPR)
6757 targ = TREE_OPERAND (targ, 0);
6758 if (!same_type_ignoring_top_level_qualifiers_p
6759 (TREE_TYPE (TREE_TYPE (arg)), TREE_TYPE (targ)))
6760 targ = NULL_TREE;
6762 else
6763 targ = NULL_TREE;
6765 if (targ)
6766 arg = targ;
6767 else
6768 arg = cp_build_indirect_ref (arg, RO_NULL, complain);
6770 /* [class.copy]: the copy constructor is implicitly defined even if
6771 the implementation elided its use. */
6772 if (!trivial || DECL_DELETED_FN (fn))
6774 mark_used (fn);
6775 already_used = true;
6778 /* If we're creating a temp and we already have one, don't create a
6779 new one. If we're not creating a temp but we get one, use
6780 INIT_EXPR to collapse the temp into our target. Otherwise, if the
6781 ctor is trivial, do a bitwise copy with a simple TARGET_EXPR for a
6782 temp or an INIT_EXPR otherwise. */
6783 fa = argarray[0];
6784 if (integer_zerop (fa))
6786 if (TREE_CODE (arg) == TARGET_EXPR)
6787 return arg;
6788 else if (trivial)
6789 return force_target_expr (DECL_CONTEXT (fn), arg, complain);
6791 else if (TREE_CODE (arg) == TARGET_EXPR || trivial)
6793 tree to = stabilize_reference (cp_build_indirect_ref (fa, RO_NULL,
6794 complain));
6796 val = build2 (INIT_EXPR, DECL_CONTEXT (fn), to, arg);
6797 return val;
6800 else if (DECL_OVERLOADED_OPERATOR_P (fn) == NOP_EXPR
6801 && trivial_fn_p (fn)
6802 && !DECL_DELETED_FN (fn))
6804 tree to = stabilize_reference
6805 (cp_build_indirect_ref (argarray[0], RO_NULL, complain));
6806 tree type = TREE_TYPE (to);
6807 tree as_base = CLASSTYPE_AS_BASE (type);
6808 tree arg = argarray[1];
6810 if (is_really_empty_class (type))
6812 /* Avoid copying empty classes. */
6813 val = build2 (COMPOUND_EXPR, void_type_node, to, arg);
6814 TREE_NO_WARNING (val) = 1;
6815 val = build2 (COMPOUND_EXPR, type, val, to);
6816 TREE_NO_WARNING (val) = 1;
6818 else if (tree_int_cst_equal (TYPE_SIZE (type), TYPE_SIZE (as_base)))
6820 arg = cp_build_indirect_ref (arg, RO_NULL, complain);
6821 val = build2 (MODIFY_EXPR, TREE_TYPE (to), to, arg);
6823 else
6825 /* We must only copy the non-tail padding parts. */
6826 tree arg0, arg2, t;
6827 tree array_type, alias_set;
6829 arg2 = TYPE_SIZE_UNIT (as_base);
6830 arg0 = cp_build_addr_expr (to, complain);
6832 array_type = build_array_type (char_type_node,
6833 build_index_type
6834 (size_binop (MINUS_EXPR,
6835 arg2, size_int (1))));
6836 alias_set = build_int_cst (build_pointer_type (type), 0);
6837 t = build2 (MODIFY_EXPR, void_type_node,
6838 build2 (MEM_REF, array_type, arg0, alias_set),
6839 build2 (MEM_REF, array_type, arg, alias_set));
6840 val = build2 (COMPOUND_EXPR, TREE_TYPE (to), t, to);
6841 TREE_NO_WARNING (val) = 1;
6844 return val;
6846 else if (DECL_DESTRUCTOR_P (fn)
6847 && trivial_fn_p (fn)
6848 && !DECL_DELETED_FN (fn))
6849 return fold_convert (void_type_node, argarray[0]);
6850 /* FIXME handle trivial default constructor, too. */
6852 if (!already_used)
6853 mark_used (fn);
6855 if (DECL_VINDEX (fn) && (flags & LOOKUP_NONVIRTUAL) == 0)
6857 tree t;
6858 tree binfo = lookup_base (TREE_TYPE (TREE_TYPE (argarray[0])),
6859 DECL_CONTEXT (fn),
6860 ba_any, NULL, complain);
6861 gcc_assert (binfo && binfo != error_mark_node);
6863 /* Warn about deprecated virtual functions now, since we're about
6864 to throw away the decl. */
6865 if (TREE_DEPRECATED (fn))
6866 warn_deprecated_use (fn, NULL_TREE);
6868 argarray[0] = build_base_path (PLUS_EXPR, argarray[0], binfo, 1,
6869 complain);
6870 if (TREE_SIDE_EFFECTS (argarray[0]))
6871 argarray[0] = save_expr (argarray[0]);
6872 t = build_pointer_type (TREE_TYPE (fn));
6873 if (DECL_CONTEXT (fn) && TYPE_JAVA_INTERFACE (DECL_CONTEXT (fn)))
6874 fn = build_java_interface_fn_ref (fn, argarray[0]);
6875 else
6876 fn = build_vfn_ref (argarray[0], DECL_VINDEX (fn));
6877 TREE_TYPE (fn) = t;
6879 else
6881 fn = build_addr_func (fn, complain);
6882 if (fn == error_mark_node)
6883 return error_mark_node;
6886 return build_cxx_call (fn, nargs, argarray, complain);
6889 /* Build and return a call to FN, using NARGS arguments in ARGARRAY.
6890 This function performs no overload resolution, conversion, or other
6891 high-level operations. */
6893 tree
6894 build_cxx_call (tree fn, int nargs, tree *argarray,
6895 tsubst_flags_t complain)
6897 tree fndecl;
6898 int optimize_sav;
6900 /* Remember roughly where this call is. */
6901 location_t loc = EXPR_LOC_OR_HERE (fn);
6902 fn = build_call_a (fn, nargs, argarray);
6903 SET_EXPR_LOCATION (fn, loc);
6905 fndecl = get_callee_fndecl (fn);
6907 /* Check that arguments to builtin functions match the expectations. */
6908 if (fndecl
6909 && DECL_BUILT_IN (fndecl)
6910 && DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_NORMAL
6911 && !check_builtin_function_arguments (fndecl, nargs, argarray))
6912 return error_mark_node;
6914 /* Some built-in function calls will be evaluated at compile-time in
6915 fold (). Set optimize to 1 when folding __builtin_constant_p inside
6916 a constexpr function so that fold_builtin_1 doesn't fold it to 0. */
6917 optimize_sav = optimize;
6918 if (!optimize && fndecl && DECL_IS_BUILTIN_CONSTANT_P (fndecl)
6919 && current_function_decl
6920 && DECL_DECLARED_CONSTEXPR_P (current_function_decl))
6921 optimize = 1;
6922 fn = fold_if_not_in_template (fn);
6923 optimize = optimize_sav;
6925 if (VOID_TYPE_P (TREE_TYPE (fn)))
6926 return fn;
6928 fn = require_complete_type_sfinae (fn, complain);
6929 if (fn == error_mark_node)
6930 return error_mark_node;
6932 if (MAYBE_CLASS_TYPE_P (TREE_TYPE (fn)))
6933 fn = build_cplus_new (TREE_TYPE (fn), fn, complain);
6934 return convert_from_reference (fn);
6937 static GTY(()) tree java_iface_lookup_fn;
6939 /* Make an expression which yields the address of the Java interface
6940 method FN. This is achieved by generating a call to libjava's
6941 _Jv_LookupInterfaceMethodIdx(). */
6943 static tree
6944 build_java_interface_fn_ref (tree fn, tree instance)
6946 tree lookup_fn, method, idx;
6947 tree klass_ref, iface, iface_ref;
6948 int i;
6950 if (!java_iface_lookup_fn)
6952 tree ftype = build_function_type_list (ptr_type_node,
6953 ptr_type_node, ptr_type_node,
6954 java_int_type_node, NULL_TREE);
6955 java_iface_lookup_fn
6956 = add_builtin_function ("_Jv_LookupInterfaceMethodIdx", ftype,
6957 0, NOT_BUILT_IN, NULL, NULL_TREE);
6960 /* Look up the pointer to the runtime java.lang.Class object for `instance'.
6961 This is the first entry in the vtable. */
6962 klass_ref = build_vtbl_ref (cp_build_indirect_ref (instance, RO_NULL,
6963 tf_warning_or_error),
6964 integer_zero_node);
6966 /* Get the java.lang.Class pointer for the interface being called. */
6967 iface = DECL_CONTEXT (fn);
6968 iface_ref = lookup_field (iface, get_identifier ("class$"), 0, false);
6969 if (!iface_ref || TREE_CODE (iface_ref) != VAR_DECL
6970 || DECL_CONTEXT (iface_ref) != iface)
6972 error ("could not find class$ field in java interface type %qT",
6973 iface);
6974 return error_mark_node;
6976 iface_ref = build_address (iface_ref);
6977 iface_ref = convert (build_pointer_type (iface), iface_ref);
6979 /* Determine the itable index of FN. */
6980 i = 1;
6981 for (method = TYPE_METHODS (iface); method; method = DECL_CHAIN (method))
6983 if (!DECL_VIRTUAL_P (method))
6984 continue;
6985 if (fn == method)
6986 break;
6987 i++;
6989 idx = build_int_cst (NULL_TREE, i);
6991 lookup_fn = build1 (ADDR_EXPR,
6992 build_pointer_type (TREE_TYPE (java_iface_lookup_fn)),
6993 java_iface_lookup_fn);
6994 return build_call_nary (ptr_type_node, lookup_fn,
6995 3, klass_ref, iface_ref, idx);
6998 /* Returns the value to use for the in-charge parameter when making a
6999 call to a function with the indicated NAME.
7001 FIXME:Can't we find a neater way to do this mapping? */
7003 tree
7004 in_charge_arg_for_name (tree name)
7006 if (name == base_ctor_identifier
7007 || name == base_dtor_identifier)
7008 return integer_zero_node;
7009 else if (name == complete_ctor_identifier)
7010 return integer_one_node;
7011 else if (name == complete_dtor_identifier)
7012 return integer_two_node;
7013 else if (name == deleting_dtor_identifier)
7014 return integer_three_node;
7016 /* This function should only be called with one of the names listed
7017 above. */
7018 gcc_unreachable ();
7019 return NULL_TREE;
7022 /* Build a call to a constructor, destructor, or an assignment
7023 operator for INSTANCE, an expression with class type. NAME
7024 indicates the special member function to call; *ARGS are the
7025 arguments. ARGS may be NULL. This may change ARGS. BINFO
7026 indicates the base of INSTANCE that is to be passed as the `this'
7027 parameter to the member function called.
7029 FLAGS are the LOOKUP_* flags to use when processing the call.
7031 If NAME indicates a complete object constructor, INSTANCE may be
7032 NULL_TREE. In this case, the caller will call build_cplus_new to
7033 store the newly constructed object into a VAR_DECL. */
7035 tree
7036 build_special_member_call (tree instance, tree name, VEC(tree,gc) **args,
7037 tree binfo, int flags, tsubst_flags_t complain)
7039 tree fns;
7040 /* The type of the subobject to be constructed or destroyed. */
7041 tree class_type;
7042 VEC(tree,gc) *allocated = NULL;
7043 tree ret;
7045 gcc_assert (name == complete_ctor_identifier
7046 || name == base_ctor_identifier
7047 || name == complete_dtor_identifier
7048 || name == base_dtor_identifier
7049 || name == deleting_dtor_identifier
7050 || name == ansi_assopname (NOP_EXPR));
7051 if (TYPE_P (binfo))
7053 /* Resolve the name. */
7054 if (!complete_type_or_maybe_complain (binfo, NULL_TREE, complain))
7055 return error_mark_node;
7057 binfo = TYPE_BINFO (binfo);
7060 gcc_assert (binfo != NULL_TREE);
7062 class_type = BINFO_TYPE (binfo);
7064 /* Handle the special case where INSTANCE is NULL_TREE. */
7065 if (name == complete_ctor_identifier && !instance)
7067 instance = build_int_cst (build_pointer_type (class_type), 0);
7068 instance = build1 (INDIRECT_REF, class_type, instance);
7070 else
7072 if (name == complete_dtor_identifier
7073 || name == base_dtor_identifier
7074 || name == deleting_dtor_identifier)
7075 gcc_assert (args == NULL || VEC_empty (tree, *args));
7077 /* Convert to the base class, if necessary. */
7078 if (!same_type_ignoring_top_level_qualifiers_p
7079 (TREE_TYPE (instance), BINFO_TYPE (binfo)))
7081 if (name != ansi_assopname (NOP_EXPR))
7082 /* For constructors and destructors, either the base is
7083 non-virtual, or it is virtual but we are doing the
7084 conversion from a constructor or destructor for the
7085 complete object. In either case, we can convert
7086 statically. */
7087 instance = convert_to_base_statically (instance, binfo);
7088 else
7089 /* However, for assignment operators, we must convert
7090 dynamically if the base is virtual. */
7091 instance = build_base_path (PLUS_EXPR, instance,
7092 binfo, /*nonnull=*/1, complain);
7096 gcc_assert (instance != NULL_TREE);
7098 fns = lookup_fnfields (binfo, name, 1);
7100 /* When making a call to a constructor or destructor for a subobject
7101 that uses virtual base classes, pass down a pointer to a VTT for
7102 the subobject. */
7103 if ((name == base_ctor_identifier
7104 || name == base_dtor_identifier)
7105 && CLASSTYPE_VBASECLASSES (class_type))
7107 tree vtt;
7108 tree sub_vtt;
7110 /* If the current function is a complete object constructor
7111 or destructor, then we fetch the VTT directly.
7112 Otherwise, we look it up using the VTT we were given. */
7113 vtt = DECL_CHAIN (CLASSTYPE_VTABLES (current_class_type));
7114 vtt = decay_conversion (vtt, complain);
7115 if (vtt == error_mark_node)
7116 return error_mark_node;
7117 vtt = build3 (COND_EXPR, TREE_TYPE (vtt),
7118 build2 (EQ_EXPR, boolean_type_node,
7119 current_in_charge_parm, integer_zero_node),
7120 current_vtt_parm,
7121 vtt);
7122 if (BINFO_SUBVTT_INDEX (binfo))
7123 sub_vtt = fold_build_pointer_plus (vtt, BINFO_SUBVTT_INDEX (binfo));
7124 else
7125 sub_vtt = vtt;
7127 if (args == NULL)
7129 allocated = make_tree_vector ();
7130 args = &allocated;
7133 VEC_safe_insert (tree, gc, *args, 0, sub_vtt);
7136 ret = build_new_method_call (instance, fns, args,
7137 TYPE_BINFO (BINFO_TYPE (binfo)),
7138 flags, /*fn=*/NULL,
7139 complain);
7141 if (allocated != NULL)
7142 release_tree_vector (allocated);
7144 return ret;
7147 /* Return the NAME, as a C string. The NAME indicates a function that
7148 is a member of TYPE. *FREE_P is set to true if the caller must
7149 free the memory returned.
7151 Rather than go through all of this, we should simply set the names
7152 of constructors and destructors appropriately, and dispense with
7153 ctor_identifier, dtor_identifier, etc. */
7155 static char *
7156 name_as_c_string (tree name, tree type, bool *free_p)
7158 char *pretty_name;
7160 /* Assume that we will not allocate memory. */
7161 *free_p = false;
7162 /* Constructors and destructors are special. */
7163 if (IDENTIFIER_CTOR_OR_DTOR_P (name))
7165 pretty_name
7166 = CONST_CAST (char *, identifier_to_locale (IDENTIFIER_POINTER (constructor_name (type))));
7167 /* For a destructor, add the '~'. */
7168 if (name == complete_dtor_identifier
7169 || name == base_dtor_identifier
7170 || name == deleting_dtor_identifier)
7172 pretty_name = concat ("~", pretty_name, NULL);
7173 /* Remember that we need to free the memory allocated. */
7174 *free_p = true;
7177 else if (IDENTIFIER_TYPENAME_P (name))
7179 pretty_name = concat ("operator ",
7180 type_as_string_translate (TREE_TYPE (name),
7181 TFF_PLAIN_IDENTIFIER),
7182 NULL);
7183 /* Remember that we need to free the memory allocated. */
7184 *free_p = true;
7186 else
7187 pretty_name = CONST_CAST (char *, identifier_to_locale (IDENTIFIER_POINTER (name)));
7189 return pretty_name;
7192 /* Build a call to "INSTANCE.FN (ARGS)". If FN_P is non-NULL, it will
7193 be set, upon return, to the function called. ARGS may be NULL.
7194 This may change ARGS. */
7196 static tree
7197 build_new_method_call_1 (tree instance, tree fns, VEC(tree,gc) **args,
7198 tree conversion_path, int flags,
7199 tree *fn_p, tsubst_flags_t complain)
7201 struct z_candidate *candidates = 0, *cand;
7202 tree explicit_targs = NULL_TREE;
7203 tree basetype = NULL_TREE;
7204 tree access_binfo;
7205 tree optype;
7206 tree first_mem_arg = NULL_TREE;
7207 tree instance_ptr;
7208 tree name;
7209 bool skip_first_for_error;
7210 VEC(tree,gc) *user_args;
7211 tree call;
7212 tree fn;
7213 int template_only = 0;
7214 bool any_viable_p;
7215 tree orig_instance;
7216 tree orig_fns;
7217 VEC(tree,gc) *orig_args = NULL;
7218 void *p;
7220 gcc_assert (instance != NULL_TREE);
7222 /* We don't know what function we're going to call, yet. */
7223 if (fn_p)
7224 *fn_p = NULL_TREE;
7226 if (error_operand_p (instance)
7227 || !fns || error_operand_p (fns))
7228 return error_mark_node;
7230 if (!BASELINK_P (fns))
7232 if (complain & tf_error)
7233 error ("call to non-function %qD", fns);
7234 return error_mark_node;
7237 orig_instance = instance;
7238 orig_fns = fns;
7240 /* Dismantle the baselink to collect all the information we need. */
7241 if (!conversion_path)
7242 conversion_path = BASELINK_BINFO (fns);
7243 access_binfo = BASELINK_ACCESS_BINFO (fns);
7244 optype = BASELINK_OPTYPE (fns);
7245 fns = BASELINK_FUNCTIONS (fns);
7246 if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
7248 explicit_targs = TREE_OPERAND (fns, 1);
7249 fns = TREE_OPERAND (fns, 0);
7250 template_only = 1;
7252 gcc_assert (TREE_CODE (fns) == FUNCTION_DECL
7253 || TREE_CODE (fns) == TEMPLATE_DECL
7254 || TREE_CODE (fns) == OVERLOAD);
7255 fn = get_first_fn (fns);
7256 name = DECL_NAME (fn);
7258 basetype = TYPE_MAIN_VARIANT (TREE_TYPE (instance));
7259 gcc_assert (CLASS_TYPE_P (basetype));
7261 if (processing_template_decl)
7263 orig_args = args == NULL ? NULL : make_tree_vector_copy (*args);
7264 instance = build_non_dependent_expr (instance);
7265 if (args != NULL)
7266 make_args_non_dependent (*args);
7269 user_args = args == NULL ? NULL : *args;
7270 /* Under DR 147 A::A() is an invalid constructor call,
7271 not a functional cast. */
7272 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (fn))
7274 if (! (complain & tf_error))
7275 return error_mark_node;
7277 permerror (input_location,
7278 "cannot call constructor %<%T::%D%> directly",
7279 basetype, name);
7280 permerror (input_location, " for a function-style cast, remove the "
7281 "redundant %<::%D%>", name);
7282 call = build_functional_cast (basetype, build_tree_list_vec (user_args),
7283 complain);
7284 return call;
7287 /* Figure out whether to skip the first argument for the error
7288 message we will display to users if an error occurs. We don't
7289 want to display any compiler-generated arguments. The "this"
7290 pointer hasn't been added yet. However, we must remove the VTT
7291 pointer if this is a call to a base-class constructor or
7292 destructor. */
7293 skip_first_for_error = false;
7294 if (IDENTIFIER_CTOR_OR_DTOR_P (name))
7296 /* Callers should explicitly indicate whether they want to construct
7297 the complete object or just the part without virtual bases. */
7298 gcc_assert (name != ctor_identifier);
7299 /* Similarly for destructors. */
7300 gcc_assert (name != dtor_identifier);
7301 /* Remove the VTT pointer, if present. */
7302 if ((name == base_ctor_identifier || name == base_dtor_identifier)
7303 && CLASSTYPE_VBASECLASSES (basetype))
7304 skip_first_for_error = true;
7307 /* Process the argument list. */
7308 if (args != NULL && *args != NULL)
7310 *args = resolve_args (*args, complain);
7311 if (*args == NULL)
7312 return error_mark_node;
7315 instance_ptr = build_this (instance);
7317 /* It's OK to call destructors and constructors on cv-qualified objects.
7318 Therefore, convert the INSTANCE_PTR to the unqualified type, if
7319 necessary. */
7320 if (DECL_DESTRUCTOR_P (fn)
7321 || DECL_CONSTRUCTOR_P (fn))
7323 tree type = build_pointer_type (basetype);
7324 if (!same_type_p (type, TREE_TYPE (instance_ptr)))
7325 instance_ptr = build_nop (type, instance_ptr);
7327 if (DECL_DESTRUCTOR_P (fn))
7328 name = complete_dtor_identifier;
7330 first_mem_arg = instance_ptr;
7332 /* Get the high-water mark for the CONVERSION_OBSTACK. */
7333 p = conversion_obstack_alloc (0);
7335 /* If CONSTRUCTOR_IS_DIRECT_INIT is set, this was a T{ } form
7336 initializer, not T({ }). */
7337 if (DECL_CONSTRUCTOR_P (fn) && args != NULL && !VEC_empty (tree, *args)
7338 && BRACE_ENCLOSED_INITIALIZER_P (VEC_index (tree, *args, 0))
7339 && CONSTRUCTOR_IS_DIRECT_INIT (VEC_index (tree, *args, 0)))
7341 tree init_list = VEC_index (tree, *args, 0);
7342 tree init = NULL_TREE;
7344 gcc_assert (VEC_length (tree, *args) == 1
7345 && !(flags & LOOKUP_ONLYCONVERTING));
7347 /* If the initializer list has no elements and T is a class type with
7348 a default constructor, the object is value-initialized. Handle
7349 this here so we don't need to handle it wherever we use
7350 build_special_member_call. */
7351 if (CONSTRUCTOR_NELTS (init_list) == 0
7352 && TYPE_HAS_DEFAULT_CONSTRUCTOR (basetype)
7353 && !processing_template_decl)
7354 init = build_value_init (basetype, complain);
7356 /* If BASETYPE is an aggregate, we need to do aggregate
7357 initialization. */
7358 else if (CP_AGGREGATE_TYPE_P (basetype))
7359 init = digest_init (basetype, init_list, complain);
7361 if (init)
7363 tree ob;
7364 if (integer_zerop (instance_ptr))
7365 return get_target_expr_sfinae (init, complain);
7366 ob = build_fold_indirect_ref (instance_ptr);
7367 init = build2 (INIT_EXPR, TREE_TYPE (ob), ob, init);
7368 TREE_SIDE_EFFECTS (init) = true;
7369 return init;
7372 /* Otherwise go ahead with overload resolution. */
7373 add_list_candidates (fns, first_mem_arg, init_list,
7374 basetype, explicit_targs, template_only,
7375 conversion_path, access_binfo, flags,
7376 &candidates, complain);
7378 else
7380 add_candidates (fns, first_mem_arg, user_args, optype,
7381 explicit_targs, template_only, conversion_path,
7382 access_binfo, flags, &candidates, complain);
7384 any_viable_p = false;
7385 candidates = splice_viable (candidates, pedantic, &any_viable_p);
7387 if (!any_viable_p)
7389 if (complain & tf_error)
7391 if (!COMPLETE_OR_OPEN_TYPE_P (basetype))
7392 cxx_incomplete_type_error (instance_ptr, basetype);
7393 else if (optype)
7394 error ("no matching function for call to %<%T::operator %T(%A)%#V%>",
7395 basetype, optype, build_tree_list_vec (user_args),
7396 TREE_TYPE (TREE_TYPE (instance_ptr)));
7397 else
7399 char *pretty_name;
7400 bool free_p;
7401 tree arglist;
7403 pretty_name = name_as_c_string (name, basetype, &free_p);
7404 arglist = build_tree_list_vec (user_args);
7405 if (skip_first_for_error)
7406 arglist = TREE_CHAIN (arglist);
7407 error ("no matching function for call to %<%T::%s(%A)%#V%>",
7408 basetype, pretty_name, arglist,
7409 TREE_TYPE (TREE_TYPE (instance_ptr)));
7410 if (free_p)
7411 free (pretty_name);
7413 print_z_candidates (location_of (name), candidates);
7415 call = error_mark_node;
7417 else
7419 cand = tourney (candidates, complain);
7420 if (cand == 0)
7422 char *pretty_name;
7423 bool free_p;
7424 tree arglist;
7426 if (complain & tf_error)
7428 pretty_name = name_as_c_string (name, basetype, &free_p);
7429 arglist = build_tree_list_vec (user_args);
7430 if (skip_first_for_error)
7431 arglist = TREE_CHAIN (arglist);
7432 error ("call of overloaded %<%s(%A)%> is ambiguous", pretty_name,
7433 arglist);
7434 print_z_candidates (location_of (name), candidates);
7435 if (free_p)
7436 free (pretty_name);
7438 call = error_mark_node;
7440 else
7442 fn = cand->fn;
7444 if (!(flags & LOOKUP_NONVIRTUAL)
7445 && DECL_PURE_VIRTUAL_P (fn)
7446 && instance == current_class_ref
7447 && (DECL_CONSTRUCTOR_P (current_function_decl)
7448 || DECL_DESTRUCTOR_P (current_function_decl))
7449 && (complain & tf_warning))
7450 /* This is not an error, it is runtime undefined
7451 behavior. */
7452 warning (0, (DECL_CONSTRUCTOR_P (current_function_decl) ?
7453 "pure virtual %q#D called from constructor"
7454 : "pure virtual %q#D called from destructor"),
7455 fn);
7457 if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE
7458 && is_dummy_object (instance_ptr))
7460 if (complain & tf_error)
7461 error ("cannot call member function %qD without object",
7462 fn);
7463 call = error_mark_node;
7465 else
7467 /* Optimize away vtable lookup if we know that this function
7468 can't be overridden. */
7469 if (DECL_VINDEX (fn) && ! (flags & LOOKUP_NONVIRTUAL)
7470 && resolves_to_fixed_type_p (instance, 0))
7471 flags |= LOOKUP_NONVIRTUAL;
7472 if (explicit_targs)
7473 flags |= LOOKUP_EXPLICIT_TMPL_ARGS;
7474 /* Now we know what function is being called. */
7475 if (fn_p)
7476 *fn_p = fn;
7477 /* Build the actual CALL_EXPR. */
7478 call = build_over_call (cand, flags, complain);
7479 /* In an expression of the form `a->f()' where `f' turns
7480 out to be a static member function, `a' is
7481 none-the-less evaluated. */
7482 if (TREE_CODE (TREE_TYPE (fn)) != METHOD_TYPE
7483 && !is_dummy_object (instance_ptr)
7484 && TREE_SIDE_EFFECTS (instance_ptr))
7485 call = build2 (COMPOUND_EXPR, TREE_TYPE (call),
7486 instance_ptr, call);
7487 else if (call != error_mark_node
7488 && DECL_DESTRUCTOR_P (cand->fn)
7489 && !VOID_TYPE_P (TREE_TYPE (call)))
7490 /* An explicit call of the form "x->~X()" has type
7491 "void". However, on platforms where destructors
7492 return "this" (i.e., those where
7493 targetm.cxx.cdtor_returns_this is true), such calls
7494 will appear to have a return value of pointer type
7495 to the low-level call machinery. We do not want to
7496 change the low-level machinery, since we want to be
7497 able to optimize "delete f()" on such platforms as
7498 "operator delete(~X(f()))" (rather than generating
7499 "t = f(), ~X(t), operator delete (t)"). */
7500 call = build_nop (void_type_node, call);
7505 if (processing_template_decl && call != error_mark_node)
7507 bool cast_to_void = false;
7509 if (TREE_CODE (call) == COMPOUND_EXPR)
7510 call = TREE_OPERAND (call, 1);
7511 else if (TREE_CODE (call) == NOP_EXPR)
7513 cast_to_void = true;
7514 call = TREE_OPERAND (call, 0);
7516 if (TREE_CODE (call) == INDIRECT_REF)
7517 call = TREE_OPERAND (call, 0);
7518 call = (build_min_non_dep_call_vec
7519 (call,
7520 build_min (COMPONENT_REF, TREE_TYPE (CALL_EXPR_FN (call)),
7521 orig_instance, orig_fns, NULL_TREE),
7522 orig_args));
7523 SET_EXPR_LOCATION (call, input_location);
7524 call = convert_from_reference (call);
7525 if (cast_to_void)
7526 call = build_nop (void_type_node, call);
7529 /* Free all the conversions we allocated. */
7530 obstack_free (&conversion_obstack, p);
7532 if (orig_args != NULL)
7533 release_tree_vector (orig_args);
7535 return call;
7538 /* Wrapper for above. */
7540 tree
7541 build_new_method_call (tree instance, tree fns, VEC(tree,gc) **args,
7542 tree conversion_path, int flags,
7543 tree *fn_p, tsubst_flags_t complain)
7545 tree ret;
7546 bool subtime = timevar_cond_start (TV_OVERLOAD);
7547 ret = build_new_method_call_1 (instance, fns, args, conversion_path, flags,
7548 fn_p, complain);
7549 timevar_cond_stop (TV_OVERLOAD, subtime);
7550 return ret;
7553 /* Returns true iff standard conversion sequence ICS1 is a proper
7554 subsequence of ICS2. */
7556 static bool
7557 is_subseq (conversion *ics1, conversion *ics2)
7559 /* We can assume that a conversion of the same code
7560 between the same types indicates a subsequence since we only get
7561 here if the types we are converting from are the same. */
7563 while (ics1->kind == ck_rvalue
7564 || ics1->kind == ck_lvalue)
7565 ics1 = next_conversion (ics1);
7567 while (1)
7569 while (ics2->kind == ck_rvalue
7570 || ics2->kind == ck_lvalue)
7571 ics2 = next_conversion (ics2);
7573 if (ics2->kind == ck_user
7574 || ics2->kind == ck_ambig
7575 || ics2->kind == ck_aggr
7576 || ics2->kind == ck_list
7577 || ics2->kind == ck_identity)
7578 /* At this point, ICS1 cannot be a proper subsequence of
7579 ICS2. We can get a USER_CONV when we are comparing the
7580 second standard conversion sequence of two user conversion
7581 sequences. */
7582 return false;
7584 ics2 = next_conversion (ics2);
7586 if (ics2->kind == ics1->kind
7587 && same_type_p (ics2->type, ics1->type)
7588 && same_type_p (next_conversion (ics2)->type,
7589 next_conversion (ics1)->type))
7590 return true;
7594 /* Returns nonzero iff DERIVED is derived from BASE. The inputs may
7595 be any _TYPE nodes. */
7597 bool
7598 is_properly_derived_from (tree derived, tree base)
7600 if (!CLASS_TYPE_P (derived) || !CLASS_TYPE_P (base))
7601 return false;
7603 /* We only allow proper derivation here. The DERIVED_FROM_P macro
7604 considers every class derived from itself. */
7605 return (!same_type_ignoring_top_level_qualifiers_p (derived, base)
7606 && DERIVED_FROM_P (base, derived));
7609 /* We build the ICS for an implicit object parameter as a pointer
7610 conversion sequence. However, such a sequence should be compared
7611 as if it were a reference conversion sequence. If ICS is the
7612 implicit conversion sequence for an implicit object parameter,
7613 modify it accordingly. */
7615 static void
7616 maybe_handle_implicit_object (conversion **ics)
7618 if ((*ics)->this_p)
7620 /* [over.match.funcs]
7622 For non-static member functions, the type of the
7623 implicit object parameter is "reference to cv X"
7624 where X is the class of which the function is a
7625 member and cv is the cv-qualification on the member
7626 function declaration. */
7627 conversion *t = *ics;
7628 tree reference_type;
7630 /* The `this' parameter is a pointer to a class type. Make the
7631 implicit conversion talk about a reference to that same class
7632 type. */
7633 reference_type = TREE_TYPE (t->type);
7634 reference_type = build_reference_type (reference_type);
7636 if (t->kind == ck_qual)
7637 t = next_conversion (t);
7638 if (t->kind == ck_ptr)
7639 t = next_conversion (t);
7640 t = build_identity_conv (TREE_TYPE (t->type), NULL_TREE);
7641 t = direct_reference_binding (reference_type, t);
7642 t->this_p = 1;
7643 t->rvaluedness_matches_p = 0;
7644 *ics = t;
7648 /* If *ICS is a REF_BIND set *ICS to the remainder of the conversion,
7649 and return the initial reference binding conversion. Otherwise,
7650 leave *ICS unchanged and return NULL. */
7652 static conversion *
7653 maybe_handle_ref_bind (conversion **ics)
7655 if ((*ics)->kind == ck_ref_bind)
7657 conversion *old_ics = *ics;
7658 *ics = next_conversion (old_ics);
7659 (*ics)->user_conv_p = old_ics->user_conv_p;
7660 return old_ics;
7663 return NULL;
7666 /* Compare two implicit conversion sequences according to the rules set out in
7667 [over.ics.rank]. Return values:
7669 1: ics1 is better than ics2
7670 -1: ics2 is better than ics1
7671 0: ics1 and ics2 are indistinguishable */
7673 static int
7674 compare_ics (conversion *ics1, conversion *ics2)
7676 tree from_type1;
7677 tree from_type2;
7678 tree to_type1;
7679 tree to_type2;
7680 tree deref_from_type1 = NULL_TREE;
7681 tree deref_from_type2 = NULL_TREE;
7682 tree deref_to_type1 = NULL_TREE;
7683 tree deref_to_type2 = NULL_TREE;
7684 conversion_rank rank1, rank2;
7686 /* REF_BINDING is nonzero if the result of the conversion sequence
7687 is a reference type. In that case REF_CONV is the reference
7688 binding conversion. */
7689 conversion *ref_conv1;
7690 conversion *ref_conv2;
7692 /* Handle implicit object parameters. */
7693 maybe_handle_implicit_object (&ics1);
7694 maybe_handle_implicit_object (&ics2);
7696 /* Handle reference parameters. */
7697 ref_conv1 = maybe_handle_ref_bind (&ics1);
7698 ref_conv2 = maybe_handle_ref_bind (&ics2);
7700 /* List-initialization sequence L1 is a better conversion sequence than
7701 list-initialization sequence L2 if L1 converts to
7702 std::initializer_list<X> for some X and L2 does not. */
7703 if (ics1->kind == ck_list && ics2->kind != ck_list)
7704 return 1;
7705 if (ics2->kind == ck_list && ics1->kind != ck_list)
7706 return -1;
7708 /* [over.ics.rank]
7710 When comparing the basic forms of implicit conversion sequences (as
7711 defined in _over.best.ics_)
7713 --a standard conversion sequence (_over.ics.scs_) is a better
7714 conversion sequence than a user-defined conversion sequence
7715 or an ellipsis conversion sequence, and
7717 --a user-defined conversion sequence (_over.ics.user_) is a
7718 better conversion sequence than an ellipsis conversion sequence
7719 (_over.ics.ellipsis_). */
7720 rank1 = CONVERSION_RANK (ics1);
7721 rank2 = CONVERSION_RANK (ics2);
7723 if (rank1 > rank2)
7724 return -1;
7725 else if (rank1 < rank2)
7726 return 1;
7728 if (rank1 == cr_bad)
7730 /* Both ICS are bad. We try to make a decision based on what would
7731 have happened if they'd been good. This is not an extension,
7732 we'll still give an error when we build up the call; this just
7733 helps us give a more helpful error message. */
7734 rank1 = BAD_CONVERSION_RANK (ics1);
7735 rank2 = BAD_CONVERSION_RANK (ics2);
7737 if (rank1 > rank2)
7738 return -1;
7739 else if (rank1 < rank2)
7740 return 1;
7742 /* We couldn't make up our minds; try to figure it out below. */
7745 if (ics1->ellipsis_p)
7746 /* Both conversions are ellipsis conversions. */
7747 return 0;
7749 /* User-defined conversion sequence U1 is a better conversion sequence
7750 than another user-defined conversion sequence U2 if they contain the
7751 same user-defined conversion operator or constructor and if the sec-
7752 ond standard conversion sequence of U1 is better than the second
7753 standard conversion sequence of U2. */
7755 /* Handle list-conversion with the same code even though it isn't always
7756 ranked as a user-defined conversion and it doesn't have a second
7757 standard conversion sequence; it will still have the desired effect.
7758 Specifically, we need to do the reference binding comparison at the
7759 end of this function. */
7761 if (ics1->user_conv_p || ics1->kind == ck_list || ics1->kind == ck_aggr)
7763 conversion *t1;
7764 conversion *t2;
7766 for (t1 = ics1; t1->kind != ck_user; t1 = next_conversion (t1))
7767 if (t1->kind == ck_ambig || t1->kind == ck_aggr
7768 || t1->kind == ck_list)
7769 break;
7770 for (t2 = ics2; t2->kind != ck_user; t2 = next_conversion (t2))
7771 if (t2->kind == ck_ambig || t2->kind == ck_aggr
7772 || t2->kind == ck_list)
7773 break;
7775 if (t1->kind != t2->kind)
7776 return 0;
7777 else if (t1->kind == ck_user)
7779 if (t1->cand->fn != t2->cand->fn)
7780 return 0;
7782 else
7784 /* For ambiguous or aggregate conversions, use the target type as
7785 a proxy for the conversion function. */
7786 if (!same_type_ignoring_top_level_qualifiers_p (t1->type, t2->type))
7787 return 0;
7790 /* We can just fall through here, after setting up
7791 FROM_TYPE1 and FROM_TYPE2. */
7792 from_type1 = t1->type;
7793 from_type2 = t2->type;
7795 else
7797 conversion *t1;
7798 conversion *t2;
7800 /* We're dealing with two standard conversion sequences.
7802 [over.ics.rank]
7804 Standard conversion sequence S1 is a better conversion
7805 sequence than standard conversion sequence S2 if
7807 --S1 is a proper subsequence of S2 (comparing the conversion
7808 sequences in the canonical form defined by _over.ics.scs_,
7809 excluding any Lvalue Transformation; the identity
7810 conversion sequence is considered to be a subsequence of
7811 any non-identity conversion sequence */
7813 t1 = ics1;
7814 while (t1->kind != ck_identity)
7815 t1 = next_conversion (t1);
7816 from_type1 = t1->type;
7818 t2 = ics2;
7819 while (t2->kind != ck_identity)
7820 t2 = next_conversion (t2);
7821 from_type2 = t2->type;
7824 /* One sequence can only be a subsequence of the other if they start with
7825 the same type. They can start with different types when comparing the
7826 second standard conversion sequence in two user-defined conversion
7827 sequences. */
7828 if (same_type_p (from_type1, from_type2))
7830 if (is_subseq (ics1, ics2))
7831 return 1;
7832 if (is_subseq (ics2, ics1))
7833 return -1;
7836 /* [over.ics.rank]
7838 Or, if not that,
7840 --the rank of S1 is better than the rank of S2 (by the rules
7841 defined below):
7843 Standard conversion sequences are ordered by their ranks: an Exact
7844 Match is a better conversion than a Promotion, which is a better
7845 conversion than a Conversion.
7847 Two conversion sequences with the same rank are indistinguishable
7848 unless one of the following rules applies:
7850 --A conversion that does not a convert a pointer, pointer to member,
7851 or std::nullptr_t to bool is better than one that does.
7853 The ICS_STD_RANK automatically handles the pointer-to-bool rule,
7854 so that we do not have to check it explicitly. */
7855 if (ics1->rank < ics2->rank)
7856 return 1;
7857 else if (ics2->rank < ics1->rank)
7858 return -1;
7860 to_type1 = ics1->type;
7861 to_type2 = ics2->type;
7863 /* A conversion from scalar arithmetic type to complex is worse than a
7864 conversion between scalar arithmetic types. */
7865 if (same_type_p (from_type1, from_type2)
7866 && ARITHMETIC_TYPE_P (from_type1)
7867 && ARITHMETIC_TYPE_P (to_type1)
7868 && ARITHMETIC_TYPE_P (to_type2)
7869 && ((TREE_CODE (to_type1) == COMPLEX_TYPE)
7870 != (TREE_CODE (to_type2) == COMPLEX_TYPE)))
7872 if (TREE_CODE (to_type1) == COMPLEX_TYPE)
7873 return -1;
7874 else
7875 return 1;
7878 if (TYPE_PTR_P (from_type1)
7879 && TYPE_PTR_P (from_type2)
7880 && TYPE_PTR_P (to_type1)
7881 && TYPE_PTR_P (to_type2))
7883 deref_from_type1 = TREE_TYPE (from_type1);
7884 deref_from_type2 = TREE_TYPE (from_type2);
7885 deref_to_type1 = TREE_TYPE (to_type1);
7886 deref_to_type2 = TREE_TYPE (to_type2);
7888 /* The rules for pointers to members A::* are just like the rules
7889 for pointers A*, except opposite: if B is derived from A then
7890 A::* converts to B::*, not vice versa. For that reason, we
7891 switch the from_ and to_ variables here. */
7892 else if ((TYPE_PTRDATAMEM_P (from_type1) && TYPE_PTRDATAMEM_P (from_type2)
7893 && TYPE_PTRDATAMEM_P (to_type1) && TYPE_PTRDATAMEM_P (to_type2))
7894 || (TYPE_PTRMEMFUNC_P (from_type1)
7895 && TYPE_PTRMEMFUNC_P (from_type2)
7896 && TYPE_PTRMEMFUNC_P (to_type1)
7897 && TYPE_PTRMEMFUNC_P (to_type2)))
7899 deref_to_type1 = TYPE_PTRMEM_CLASS_TYPE (from_type1);
7900 deref_to_type2 = TYPE_PTRMEM_CLASS_TYPE (from_type2);
7901 deref_from_type1 = TYPE_PTRMEM_CLASS_TYPE (to_type1);
7902 deref_from_type2 = TYPE_PTRMEM_CLASS_TYPE (to_type2);
7905 if (deref_from_type1 != NULL_TREE
7906 && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_from_type1))
7907 && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_from_type2)))
7909 /* This was one of the pointer or pointer-like conversions.
7911 [over.ics.rank]
7913 --If class B is derived directly or indirectly from class A,
7914 conversion of B* to A* is better than conversion of B* to
7915 void*, and conversion of A* to void* is better than
7916 conversion of B* to void*. */
7917 if (TREE_CODE (deref_to_type1) == VOID_TYPE
7918 && TREE_CODE (deref_to_type2) == VOID_TYPE)
7920 if (is_properly_derived_from (deref_from_type1,
7921 deref_from_type2))
7922 return -1;
7923 else if (is_properly_derived_from (deref_from_type2,
7924 deref_from_type1))
7925 return 1;
7927 else if (TREE_CODE (deref_to_type1) == VOID_TYPE
7928 || TREE_CODE (deref_to_type2) == VOID_TYPE)
7930 if (same_type_p (deref_from_type1, deref_from_type2))
7932 if (TREE_CODE (deref_to_type2) == VOID_TYPE)
7934 if (is_properly_derived_from (deref_from_type1,
7935 deref_to_type1))
7936 return 1;
7938 /* We know that DEREF_TO_TYPE1 is `void' here. */
7939 else if (is_properly_derived_from (deref_from_type1,
7940 deref_to_type2))
7941 return -1;
7944 else if (RECORD_OR_UNION_CODE_P (TREE_CODE (deref_to_type1))
7945 && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_to_type2)))
7947 /* [over.ics.rank]
7949 --If class B is derived directly or indirectly from class A
7950 and class C is derived directly or indirectly from B,
7952 --conversion of C* to B* is better than conversion of C* to
7955 --conversion of B* to A* is better than conversion of C* to
7956 A* */
7957 if (same_type_p (deref_from_type1, deref_from_type2))
7959 if (is_properly_derived_from (deref_to_type1,
7960 deref_to_type2))
7961 return 1;
7962 else if (is_properly_derived_from (deref_to_type2,
7963 deref_to_type1))
7964 return -1;
7966 else if (same_type_p (deref_to_type1, deref_to_type2))
7968 if (is_properly_derived_from (deref_from_type2,
7969 deref_from_type1))
7970 return 1;
7971 else if (is_properly_derived_from (deref_from_type1,
7972 deref_from_type2))
7973 return -1;
7977 else if (CLASS_TYPE_P (non_reference (from_type1))
7978 && same_type_p (from_type1, from_type2))
7980 tree from = non_reference (from_type1);
7982 /* [over.ics.rank]
7984 --binding of an expression of type C to a reference of type
7985 B& is better than binding an expression of type C to a
7986 reference of type A&
7988 --conversion of C to B is better than conversion of C to A, */
7989 if (is_properly_derived_from (from, to_type1)
7990 && is_properly_derived_from (from, to_type2))
7992 if (is_properly_derived_from (to_type1, to_type2))
7993 return 1;
7994 else if (is_properly_derived_from (to_type2, to_type1))
7995 return -1;
7998 else if (CLASS_TYPE_P (non_reference (to_type1))
7999 && same_type_p (to_type1, to_type2))
8001 tree to = non_reference (to_type1);
8003 /* [over.ics.rank]
8005 --binding of an expression of type B to a reference of type
8006 A& is better than binding an expression of type C to a
8007 reference of type A&,
8009 --conversion of B to A is better than conversion of C to A */
8010 if (is_properly_derived_from (from_type1, to)
8011 && is_properly_derived_from (from_type2, to))
8013 if (is_properly_derived_from (from_type2, from_type1))
8014 return 1;
8015 else if (is_properly_derived_from (from_type1, from_type2))
8016 return -1;
8020 /* [over.ics.rank]
8022 --S1 and S2 differ only in their qualification conversion and yield
8023 similar types T1 and T2 (_conv.qual_), respectively, and the cv-
8024 qualification signature of type T1 is a proper subset of the cv-
8025 qualification signature of type T2 */
8026 if (ics1->kind == ck_qual
8027 && ics2->kind == ck_qual
8028 && same_type_p (from_type1, from_type2))
8030 int result = comp_cv_qual_signature (to_type1, to_type2);
8031 if (result != 0)
8032 return result;
8035 /* [over.ics.rank]
8037 --S1 and S2 are reference bindings (_dcl.init.ref_) and neither refers
8038 to an implicit object parameter, and either S1 binds an lvalue reference
8039 to an lvalue and S2 binds an rvalue reference or S1 binds an rvalue
8040 reference to an rvalue and S2 binds an lvalue reference
8041 (C++0x draft standard, 13.3.3.2)
8043 --S1 and S2 are reference bindings (_dcl.init.ref_), and the
8044 types to which the references refer are the same type except for
8045 top-level cv-qualifiers, and the type to which the reference
8046 initialized by S2 refers is more cv-qualified than the type to
8047 which the reference initialized by S1 refers.
8049 DR 1328 [over.match.best]: the context is an initialization by
8050 conversion function for direct reference binding (13.3.1.6) of a
8051 reference to function type, the return type of F1 is the same kind of
8052 reference (i.e. lvalue or rvalue) as the reference being initialized,
8053 and the return type of F2 is not. */
8055 if (ref_conv1 && ref_conv2)
8057 if (!ref_conv1->this_p && !ref_conv2->this_p
8058 && (ref_conv1->rvaluedness_matches_p
8059 != ref_conv2->rvaluedness_matches_p)
8060 && (same_type_p (ref_conv1->type, ref_conv2->type)
8061 || (TYPE_REF_IS_RVALUE (ref_conv1->type)
8062 != TYPE_REF_IS_RVALUE (ref_conv2->type))))
8064 return (ref_conv1->rvaluedness_matches_p
8065 - ref_conv2->rvaluedness_matches_p);
8068 if (same_type_ignoring_top_level_qualifiers_p (to_type1, to_type2))
8069 return comp_cv_qualification (TREE_TYPE (ref_conv2->type),
8070 TREE_TYPE (ref_conv1->type));
8073 /* Neither conversion sequence is better than the other. */
8074 return 0;
8077 /* The source type for this standard conversion sequence. */
8079 static tree
8080 source_type (conversion *t)
8082 for (;; t = next_conversion (t))
8084 if (t->kind == ck_user
8085 || t->kind == ck_ambig
8086 || t->kind == ck_identity)
8087 return t->type;
8089 gcc_unreachable ();
8092 /* Note a warning about preferring WINNER to LOSER. We do this by storing
8093 a pointer to LOSER and re-running joust to produce the warning if WINNER
8094 is actually used. */
8096 static void
8097 add_warning (struct z_candidate *winner, struct z_candidate *loser)
8099 candidate_warning *cw = (candidate_warning *)
8100 conversion_obstack_alloc (sizeof (candidate_warning));
8101 cw->loser = loser;
8102 cw->next = winner->warnings;
8103 winner->warnings = cw;
8106 /* Compare two candidates for overloading as described in
8107 [over.match.best]. Return values:
8109 1: cand1 is better than cand2
8110 -1: cand2 is better than cand1
8111 0: cand1 and cand2 are indistinguishable */
8113 static int
8114 joust (struct z_candidate *cand1, struct z_candidate *cand2, bool warn,
8115 tsubst_flags_t complain)
8117 int winner = 0;
8118 int off1 = 0, off2 = 0;
8119 size_t i;
8120 size_t len;
8122 /* Candidates that involve bad conversions are always worse than those
8123 that don't. */
8124 if (cand1->viable > cand2->viable)
8125 return 1;
8126 if (cand1->viable < cand2->viable)
8127 return -1;
8129 /* If we have two pseudo-candidates for conversions to the same type,
8130 or two candidates for the same function, arbitrarily pick one. */
8131 if (cand1->fn == cand2->fn
8132 && (IS_TYPE_OR_DECL_P (cand1->fn)))
8133 return 1;
8135 /* a viable function F1
8136 is defined to be a better function than another viable function F2 if
8137 for all arguments i, ICSi(F1) is not a worse conversion sequence than
8138 ICSi(F2), and then */
8140 /* for some argument j, ICSj(F1) is a better conversion sequence than
8141 ICSj(F2) */
8143 /* For comparing static and non-static member functions, we ignore
8144 the implicit object parameter of the non-static function. The
8145 standard says to pretend that the static function has an object
8146 parm, but that won't work with operator overloading. */
8147 len = cand1->num_convs;
8148 if (len != cand2->num_convs)
8150 int static_1 = DECL_STATIC_FUNCTION_P (cand1->fn);
8151 int static_2 = DECL_STATIC_FUNCTION_P (cand2->fn);
8153 if (DECL_CONSTRUCTOR_P (cand1->fn)
8154 && is_list_ctor (cand1->fn) != is_list_ctor (cand2->fn))
8155 /* We're comparing a near-match list constructor and a near-match
8156 non-list constructor. Just treat them as unordered. */
8157 return 0;
8159 gcc_assert (static_1 != static_2);
8161 if (static_1)
8162 off2 = 1;
8163 else
8165 off1 = 1;
8166 --len;
8170 for (i = 0; i < len; ++i)
8172 conversion *t1 = cand1->convs[i + off1];
8173 conversion *t2 = cand2->convs[i + off2];
8174 int comp = compare_ics (t1, t2);
8176 if (comp != 0)
8178 if ((complain & tf_warning)
8179 && warn_sign_promo
8180 && (CONVERSION_RANK (t1) + CONVERSION_RANK (t2)
8181 == cr_std + cr_promotion)
8182 && t1->kind == ck_std
8183 && t2->kind == ck_std
8184 && TREE_CODE (t1->type) == INTEGER_TYPE
8185 && TREE_CODE (t2->type) == INTEGER_TYPE
8186 && (TYPE_PRECISION (t1->type)
8187 == TYPE_PRECISION (t2->type))
8188 && (TYPE_UNSIGNED (next_conversion (t1)->type)
8189 || (TREE_CODE (next_conversion (t1)->type)
8190 == ENUMERAL_TYPE)))
8192 tree type = next_conversion (t1)->type;
8193 tree type1, type2;
8194 struct z_candidate *w, *l;
8195 if (comp > 0)
8196 type1 = t1->type, type2 = t2->type,
8197 w = cand1, l = cand2;
8198 else
8199 type1 = t2->type, type2 = t1->type,
8200 w = cand2, l = cand1;
8202 if (warn)
8204 warning (OPT_Wsign_promo, "passing %qT chooses %qT over %qT",
8205 type, type1, type2);
8206 warning (OPT_Wsign_promo, " in call to %qD", w->fn);
8208 else
8209 add_warning (w, l);
8212 if (winner && comp != winner)
8214 winner = 0;
8215 goto tweak;
8217 winner = comp;
8221 /* warn about confusing overload resolution for user-defined conversions,
8222 either between a constructor and a conversion op, or between two
8223 conversion ops. */
8224 if ((complain & tf_warning)
8225 && winner && warn_conversion && cand1->second_conv
8226 && (!DECL_CONSTRUCTOR_P (cand1->fn) || !DECL_CONSTRUCTOR_P (cand2->fn))
8227 && winner != compare_ics (cand1->second_conv, cand2->second_conv))
8229 struct z_candidate *w, *l;
8230 bool give_warning = false;
8232 if (winner == 1)
8233 w = cand1, l = cand2;
8234 else
8235 w = cand2, l = cand1;
8237 /* We don't want to complain about `X::operator T1 ()'
8238 beating `X::operator T2 () const', when T2 is a no less
8239 cv-qualified version of T1. */
8240 if (DECL_CONTEXT (w->fn) == DECL_CONTEXT (l->fn)
8241 && !DECL_CONSTRUCTOR_P (w->fn) && !DECL_CONSTRUCTOR_P (l->fn))
8243 tree t = TREE_TYPE (TREE_TYPE (l->fn));
8244 tree f = TREE_TYPE (TREE_TYPE (w->fn));
8246 if (TREE_CODE (t) == TREE_CODE (f) && POINTER_TYPE_P (t))
8248 t = TREE_TYPE (t);
8249 f = TREE_TYPE (f);
8251 if (!comp_ptr_ttypes (t, f))
8252 give_warning = true;
8254 else
8255 give_warning = true;
8257 if (!give_warning)
8258 /*NOP*/;
8259 else if (warn)
8261 tree source = source_type (w->convs[0]);
8262 if (! DECL_CONSTRUCTOR_P (w->fn))
8263 source = TREE_TYPE (source);
8264 if (warning (OPT_Wconversion, "choosing %qD over %qD", w->fn, l->fn)
8265 && warning (OPT_Wconversion, " for conversion from %qT to %qT",
8266 source, w->second_conv->type))
8268 inform (input_location, " because conversion sequence for the argument is better");
8271 else
8272 add_warning (w, l);
8275 if (winner)
8276 return winner;
8278 /* DR 495 moved this tiebreaker above the template ones. */
8279 /* or, if not that,
8280 the context is an initialization by user-defined conversion (see
8281 _dcl.init_ and _over.match.user_) and the standard conversion
8282 sequence from the return type of F1 to the destination type (i.e.,
8283 the type of the entity being initialized) is a better conversion
8284 sequence than the standard conversion sequence from the return type
8285 of F2 to the destination type. */
8287 if (cand1->second_conv)
8289 winner = compare_ics (cand1->second_conv, cand2->second_conv);
8290 if (winner)
8291 return winner;
8294 /* or, if not that,
8295 F1 is a non-template function and F2 is a template function
8296 specialization. */
8298 if (!cand1->template_decl && cand2->template_decl)
8299 return 1;
8300 else if (cand1->template_decl && !cand2->template_decl)
8301 return -1;
8303 /* or, if not that,
8304 F1 and F2 are template functions and the function template for F1 is
8305 more specialized than the template for F2 according to the partial
8306 ordering rules. */
8308 if (cand1->template_decl && cand2->template_decl)
8310 winner = more_specialized_fn
8311 (TI_TEMPLATE (cand1->template_decl),
8312 TI_TEMPLATE (cand2->template_decl),
8313 /* [temp.func.order]: The presence of unused ellipsis and default
8314 arguments has no effect on the partial ordering of function
8315 templates. add_function_candidate() will not have
8316 counted the "this" argument for constructors. */
8317 cand1->num_convs + DECL_CONSTRUCTOR_P (cand1->fn));
8318 if (winner)
8319 return winner;
8322 /* Check whether we can discard a builtin candidate, either because we
8323 have two identical ones or matching builtin and non-builtin candidates.
8325 (Pedantically in the latter case the builtin which matched the user
8326 function should not be added to the overload set, but we spot it here.
8328 [over.match.oper]
8329 ... the builtin candidates include ...
8330 - do not have the same parameter type list as any non-template
8331 non-member candidate. */
8333 if (TREE_CODE (cand1->fn) == IDENTIFIER_NODE
8334 || TREE_CODE (cand2->fn) == IDENTIFIER_NODE)
8336 for (i = 0; i < len; ++i)
8337 if (!same_type_p (cand1->convs[i]->type,
8338 cand2->convs[i]->type))
8339 break;
8340 if (i == cand1->num_convs)
8342 if (cand1->fn == cand2->fn)
8343 /* Two built-in candidates; arbitrarily pick one. */
8344 return 1;
8345 else if (TREE_CODE (cand1->fn) == IDENTIFIER_NODE)
8346 /* cand1 is built-in; prefer cand2. */
8347 return -1;
8348 else
8349 /* cand2 is built-in; prefer cand1. */
8350 return 1;
8354 /* If the two function declarations represent the same function (this can
8355 happen with declarations in multiple scopes and arg-dependent lookup),
8356 arbitrarily choose one. But first make sure the default args we're
8357 using match. */
8358 if (DECL_P (cand1->fn) && DECL_P (cand2->fn)
8359 && equal_functions (cand1->fn, cand2->fn))
8361 tree parms1 = TYPE_ARG_TYPES (TREE_TYPE (cand1->fn));
8362 tree parms2 = TYPE_ARG_TYPES (TREE_TYPE (cand2->fn));
8364 gcc_assert (!DECL_CONSTRUCTOR_P (cand1->fn));
8366 for (i = 0; i < len; ++i)
8368 /* Don't crash if the fn is variadic. */
8369 if (!parms1)
8370 break;
8371 parms1 = TREE_CHAIN (parms1);
8372 parms2 = TREE_CHAIN (parms2);
8375 if (off1)
8376 parms1 = TREE_CHAIN (parms1);
8377 else if (off2)
8378 parms2 = TREE_CHAIN (parms2);
8380 for (; parms1; ++i)
8382 if (!cp_tree_equal (TREE_PURPOSE (parms1),
8383 TREE_PURPOSE (parms2)))
8385 if (warn)
8387 if (complain & tf_error)
8389 permerror (input_location,
8390 "default argument mismatch in "
8391 "overload resolution");
8392 inform (input_location,
8393 " candidate 1: %q+#F", cand1->fn);
8394 inform (input_location,
8395 " candidate 2: %q+#F", cand2->fn);
8397 else
8398 return 0;
8400 else
8401 add_warning (cand1, cand2);
8402 break;
8404 parms1 = TREE_CHAIN (parms1);
8405 parms2 = TREE_CHAIN (parms2);
8408 return 1;
8411 tweak:
8413 /* Extension: If the worst conversion for one candidate is worse than the
8414 worst conversion for the other, take the first. */
8415 if (!pedantic && (complain & tf_warning_or_error))
8417 conversion_rank rank1 = cr_identity, rank2 = cr_identity;
8418 struct z_candidate *w = 0, *l = 0;
8420 for (i = 0; i < len; ++i)
8422 if (CONVERSION_RANK (cand1->convs[i+off1]) > rank1)
8423 rank1 = CONVERSION_RANK (cand1->convs[i+off1]);
8424 if (CONVERSION_RANK (cand2->convs[i + off2]) > rank2)
8425 rank2 = CONVERSION_RANK (cand2->convs[i + off2]);
8427 if (rank1 < rank2)
8428 winner = 1, w = cand1, l = cand2;
8429 if (rank1 > rank2)
8430 winner = -1, w = cand2, l = cand1;
8431 if (winner)
8433 /* Don't choose a deleted function over ambiguity. */
8434 if (DECL_P (w->fn) && DECL_DELETED_FN (w->fn))
8435 return 0;
8436 if (warn)
8438 pedwarn (input_location, 0,
8439 "ISO C++ says that these are ambiguous, even "
8440 "though the worst conversion for the first is better than "
8441 "the worst conversion for the second:");
8442 print_z_candidate (input_location, _("candidate 1:"), w);
8443 print_z_candidate (input_location, _("candidate 2:"), l);
8445 else
8446 add_warning (w, l);
8447 return winner;
8451 gcc_assert (!winner);
8452 return 0;
8455 /* Given a list of candidates for overloading, find the best one, if any.
8456 This algorithm has a worst case of O(2n) (winner is last), and a best
8457 case of O(n/2) (totally ambiguous); much better than a sorting
8458 algorithm. */
8460 static struct z_candidate *
8461 tourney (struct z_candidate *candidates, tsubst_flags_t complain)
8463 struct z_candidate *champ = candidates, *challenger;
8464 int fate;
8465 int champ_compared_to_predecessor = 0;
8467 /* Walk through the list once, comparing each current champ to the next
8468 candidate, knocking out a candidate or two with each comparison. */
8470 for (challenger = champ->next; challenger; )
8472 fate = joust (champ, challenger, 0, complain);
8473 if (fate == 1)
8474 challenger = challenger->next;
8475 else
8477 if (fate == 0)
8479 champ = challenger->next;
8480 if (champ == 0)
8481 return NULL;
8482 champ_compared_to_predecessor = 0;
8484 else
8486 champ = challenger;
8487 champ_compared_to_predecessor = 1;
8490 challenger = champ->next;
8494 /* Make sure the champ is better than all the candidates it hasn't yet
8495 been compared to. */
8497 for (challenger = candidates;
8498 challenger != champ
8499 && !(champ_compared_to_predecessor && challenger->next == champ);
8500 challenger = challenger->next)
8502 fate = joust (champ, challenger, 0, complain);
8503 if (fate != 1)
8504 return NULL;
8507 return champ;
8510 /* Returns nonzero if things of type FROM can be converted to TO. */
8512 bool
8513 can_convert (tree to, tree from, tsubst_flags_t complain)
8515 return can_convert_arg (to, from, NULL_TREE, LOOKUP_IMPLICIT, complain);
8518 /* Returns nonzero if ARG (of type FROM) can be converted to TO. */
8520 bool
8521 can_convert_arg (tree to, tree from, tree arg, int flags,
8522 tsubst_flags_t complain)
8524 conversion *t;
8525 void *p;
8526 bool ok_p;
8528 /* Get the high-water mark for the CONVERSION_OBSTACK. */
8529 p = conversion_obstack_alloc (0);
8531 t = implicit_conversion (to, from, arg, /*c_cast_p=*/false,
8532 flags, complain);
8533 ok_p = (t && !t->bad_p);
8535 /* Free all the conversions we allocated. */
8536 obstack_free (&conversion_obstack, p);
8538 return ok_p;
8541 /* Like can_convert_arg, but allows dubious conversions as well. */
8543 bool
8544 can_convert_arg_bad (tree to, tree from, tree arg, int flags,
8545 tsubst_flags_t complain)
8547 conversion *t;
8548 void *p;
8550 /* Get the high-water mark for the CONVERSION_OBSTACK. */
8551 p = conversion_obstack_alloc (0);
8552 /* Try to perform the conversion. */
8553 t = implicit_conversion (to, from, arg, /*c_cast_p=*/false,
8554 flags, complain);
8555 /* Free all the conversions we allocated. */
8556 obstack_free (&conversion_obstack, p);
8558 return t != NULL;
8561 /* Convert EXPR to TYPE. Return the converted expression.
8563 Note that we allow bad conversions here because by the time we get to
8564 this point we are committed to doing the conversion. If we end up
8565 doing a bad conversion, convert_like will complain. */
8567 tree
8568 perform_implicit_conversion_flags (tree type, tree expr,
8569 tsubst_flags_t complain, int flags)
8571 conversion *conv;
8572 void *p;
8573 location_t loc = EXPR_LOC_OR_HERE (expr);
8575 if (error_operand_p (expr))
8576 return error_mark_node;
8578 /* Get the high-water mark for the CONVERSION_OBSTACK. */
8579 p = conversion_obstack_alloc (0);
8581 conv = implicit_conversion (type, TREE_TYPE (expr), expr,
8582 /*c_cast_p=*/false,
8583 flags, complain);
8585 if (!conv)
8587 if (complain & tf_error)
8589 /* If expr has unknown type, then it is an overloaded function.
8590 Call instantiate_type to get good error messages. */
8591 if (TREE_TYPE (expr) == unknown_type_node)
8592 instantiate_type (type, expr, complain);
8593 else if (invalid_nonstatic_memfn_p (expr, complain))
8594 /* We gave an error. */;
8595 else
8596 error_at (loc, "could not convert %qE from %qT to %qT", expr,
8597 TREE_TYPE (expr), type);
8599 expr = error_mark_node;
8601 else if (processing_template_decl && conv->kind != ck_identity)
8603 /* In a template, we are only concerned about determining the
8604 type of non-dependent expressions, so we do not have to
8605 perform the actual conversion. But for initializers, we
8606 need to be able to perform it at instantiation
8607 (or fold_non_dependent_expr) time. */
8608 expr = build1 (IMPLICIT_CONV_EXPR, type, expr);
8609 if (!(flags & LOOKUP_ONLYCONVERTING))
8610 IMPLICIT_CONV_EXPR_DIRECT_INIT (expr) = true;
8612 else
8613 expr = convert_like (conv, expr, complain);
8615 /* Free all the conversions we allocated. */
8616 obstack_free (&conversion_obstack, p);
8618 return expr;
8621 tree
8622 perform_implicit_conversion (tree type, tree expr, tsubst_flags_t complain)
8624 return perform_implicit_conversion_flags (type, expr, complain,
8625 LOOKUP_IMPLICIT);
8628 /* Convert EXPR to TYPE (as a direct-initialization) if that is
8629 permitted. If the conversion is valid, the converted expression is
8630 returned. Otherwise, NULL_TREE is returned, except in the case
8631 that TYPE is a class type; in that case, an error is issued. If
8632 C_CAST_P is true, then this direct-initialization is taking
8633 place as part of a static_cast being attempted as part of a C-style
8634 cast. */
8636 tree
8637 perform_direct_initialization_if_possible (tree type,
8638 tree expr,
8639 bool c_cast_p,
8640 tsubst_flags_t complain)
8642 conversion *conv;
8643 void *p;
8645 if (type == error_mark_node || error_operand_p (expr))
8646 return error_mark_node;
8647 /* [dcl.init]
8649 If the destination type is a (possibly cv-qualified) class type:
8651 -- If the initialization is direct-initialization ...,
8652 constructors are considered. ... If no constructor applies, or
8653 the overload resolution is ambiguous, the initialization is
8654 ill-formed. */
8655 if (CLASS_TYPE_P (type))
8657 VEC(tree,gc) *args = make_tree_vector_single (expr);
8658 expr = build_special_member_call (NULL_TREE, complete_ctor_identifier,
8659 &args, type, LOOKUP_NORMAL, complain);
8660 release_tree_vector (args);
8661 return build_cplus_new (type, expr, complain);
8664 /* Get the high-water mark for the CONVERSION_OBSTACK. */
8665 p = conversion_obstack_alloc (0);
8667 conv = implicit_conversion (type, TREE_TYPE (expr), expr,
8668 c_cast_p,
8669 LOOKUP_NORMAL, complain);
8670 if (!conv || conv->bad_p)
8671 expr = NULL_TREE;
8672 else
8673 expr = convert_like_real (conv, expr, NULL_TREE, 0, 0,
8674 /*issue_conversion_warnings=*/false,
8675 c_cast_p,
8676 complain);
8678 /* Free all the conversions we allocated. */
8679 obstack_free (&conversion_obstack, p);
8681 return expr;
8684 /* When initializing a reference that lasts longer than a full-expression,
8685 this special rule applies:
8687 [class.temporary]
8689 The temporary to which the reference is bound or the temporary
8690 that is the complete object to which the reference is bound
8691 persists for the lifetime of the reference.
8693 The temporaries created during the evaluation of the expression
8694 initializing the reference, except the temporary to which the
8695 reference is bound, are destroyed at the end of the
8696 full-expression in which they are created.
8698 In that case, we store the converted expression into a new
8699 VAR_DECL in a new scope.
8701 However, we want to be careful not to create temporaries when
8702 they are not required. For example, given:
8704 struct B {};
8705 struct D : public B {};
8706 D f();
8707 const B& b = f();
8709 there is no need to copy the return value from "f"; we can just
8710 extend its lifetime. Similarly, given:
8712 struct S {};
8713 struct T { operator S(); };
8714 T t;
8715 const S& s = t;
8717 we can extend the lifetime of the return value of the conversion
8718 operator.
8720 The next several functions are involved in this lifetime extension. */
8722 /* DECL is a VAR_DECL or FIELD_DECL whose type is a REFERENCE_TYPE. The
8723 reference is being bound to a temporary. Create and return a new
8724 VAR_DECL with the indicated TYPE; this variable will store the value to
8725 which the reference is bound. */
8727 tree
8728 make_temporary_var_for_ref_to_temp (tree decl, tree type)
8730 tree var;
8732 /* Create the variable. */
8733 var = create_temporary_var (type);
8735 /* Register the variable. */
8736 if (TREE_CODE (decl) == VAR_DECL
8737 && (TREE_STATIC (decl) || DECL_THREAD_LOCAL_P (decl)))
8739 /* Namespace-scope or local static; give it a mangled name. */
8740 /* FIXME share comdat with decl? */
8741 tree name;
8743 TREE_STATIC (var) = TREE_STATIC (decl);
8744 DECL_TLS_MODEL (var) = DECL_TLS_MODEL (decl);
8745 name = mangle_ref_init_variable (decl);
8746 DECL_NAME (var) = name;
8747 SET_DECL_ASSEMBLER_NAME (var, name);
8748 var = pushdecl_top_level (var);
8750 else
8751 /* Create a new cleanup level if necessary. */
8752 maybe_push_cleanup_level (type);
8754 return var;
8757 /* EXPR is the initializer for a variable DECL of reference or
8758 std::initializer_list type. Create, push and return a new VAR_DECL
8759 for the initializer so that it will live as long as DECL. Any
8760 cleanup for the new variable is returned through CLEANUP, and the
8761 code to initialize the new variable is returned through INITP. */
8763 static tree
8764 set_up_extended_ref_temp (tree decl, tree expr, VEC(tree,gc) **cleanups,
8765 tree *initp)
8767 tree init;
8768 tree type;
8769 tree var;
8771 /* Create the temporary variable. */
8772 type = TREE_TYPE (expr);
8773 var = make_temporary_var_for_ref_to_temp (decl, type);
8774 layout_decl (var, 0);
8775 /* If the rvalue is the result of a function call it will be
8776 a TARGET_EXPR. If it is some other construct (such as a
8777 member access expression where the underlying object is
8778 itself the result of a function call), turn it into a
8779 TARGET_EXPR here. It is important that EXPR be a
8780 TARGET_EXPR below since otherwise the INIT_EXPR will
8781 attempt to make a bitwise copy of EXPR to initialize
8782 VAR. */
8783 if (TREE_CODE (expr) != TARGET_EXPR)
8784 expr = get_target_expr (expr);
8786 if (TREE_CODE (decl) == FIELD_DECL
8787 && extra_warnings && !TREE_NO_WARNING (decl))
8789 warning (OPT_Wextra, "a temporary bound to %qD only persists "
8790 "until the constructor exits", decl);
8791 TREE_NO_WARNING (decl) = true;
8794 /* Recursively extend temps in this initializer. */
8795 TARGET_EXPR_INITIAL (expr)
8796 = extend_ref_init_temps (decl, TARGET_EXPR_INITIAL (expr), cleanups);
8798 /* Any reference temp has a non-trivial initializer. */
8799 DECL_NONTRIVIALLY_INITIALIZED_P (var) = true;
8801 /* If the initializer is constant, put it in DECL_INITIAL so we get
8802 static initialization and use in constant expressions. */
8803 init = maybe_constant_init (expr);
8804 if (TREE_CONSTANT (init))
8806 if (literal_type_p (type) && CP_TYPE_CONST_NON_VOLATILE_P (type))
8808 /* 5.19 says that a constant expression can include an
8809 lvalue-rvalue conversion applied to "a glvalue of literal type
8810 that refers to a non-volatile temporary object initialized
8811 with a constant expression". Rather than try to communicate
8812 that this VAR_DECL is a temporary, just mark it constexpr.
8814 Currently this is only useful for initializer_list temporaries,
8815 since reference vars can't appear in constant expressions. */
8816 DECL_DECLARED_CONSTEXPR_P (var) = true;
8817 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (var) = true;
8818 TREE_CONSTANT (var) = true;
8820 DECL_INITIAL (var) = init;
8821 init = NULL_TREE;
8823 else
8824 /* Create the INIT_EXPR that will initialize the temporary
8825 variable. */
8826 init = build2 (INIT_EXPR, type, var, expr);
8827 if (at_function_scope_p ())
8829 add_decl_expr (var);
8831 if (TREE_STATIC (var))
8832 init = add_stmt_to_compound (init, register_dtor_fn (var));
8833 else
8835 tree cleanup = cxx_maybe_build_cleanup (var, tf_warning_or_error);
8836 if (cleanup)
8837 VEC_safe_push (tree, gc, *cleanups, cleanup);
8840 /* We must be careful to destroy the temporary only
8841 after its initialization has taken place. If the
8842 initialization throws an exception, then the
8843 destructor should not be run. We cannot simply
8844 transform INIT into something like:
8846 (INIT, ({ CLEANUP_STMT; }))
8848 because emit_local_var always treats the
8849 initializer as a full-expression. Thus, the
8850 destructor would run too early; it would run at the
8851 end of initializing the reference variable, rather
8852 than at the end of the block enclosing the
8853 reference variable.
8855 The solution is to pass back a cleanup expression
8856 which the caller is responsible for attaching to
8857 the statement tree. */
8859 else
8861 rest_of_decl_compilation (var, /*toplev=*/1, at_eof);
8862 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
8863 static_aggregates = tree_cons (NULL_TREE, var,
8864 static_aggregates);
8867 *initp = init;
8868 return var;
8871 /* Convert EXPR to the indicated reference TYPE, in a way suitable for
8872 initializing a variable of that TYPE. */
8874 tree
8875 initialize_reference (tree type, tree expr,
8876 int flags, tsubst_flags_t complain)
8878 conversion *conv;
8879 void *p;
8880 location_t loc = EXPR_LOC_OR_HERE (expr);
8882 if (type == error_mark_node || error_operand_p (expr))
8883 return error_mark_node;
8885 /* Get the high-water mark for the CONVERSION_OBSTACK. */
8886 p = conversion_obstack_alloc (0);
8888 conv = reference_binding (type, TREE_TYPE (expr), expr, /*c_cast_p=*/false,
8889 flags, complain);
8890 if (!conv || conv->bad_p)
8892 if (complain & tf_error)
8894 if (conv)
8895 convert_like (conv, expr, complain);
8896 else if (!CP_TYPE_CONST_P (TREE_TYPE (type))
8897 && !TYPE_REF_IS_RVALUE (type)
8898 && !real_lvalue_p (expr))
8899 error_at (loc, "invalid initialization of non-const reference of "
8900 "type %qT from an rvalue of type %qT",
8901 type, TREE_TYPE (expr));
8902 else
8903 error_at (loc, "invalid initialization of reference of type "
8904 "%qT from expression of type %qT", type,
8905 TREE_TYPE (expr));
8907 return error_mark_node;
8910 gcc_assert (conv->kind == ck_ref_bind);
8912 /* Perform the conversion. */
8913 expr = convert_like (conv, expr, complain);
8915 /* Free all the conversions we allocated. */
8916 obstack_free (&conversion_obstack, p);
8918 return expr;
8921 /* Subroutine of extend_ref_init_temps. Possibly extend one initializer,
8922 which is bound either to a reference or a std::initializer_list. */
8924 static tree
8925 extend_ref_init_temps_1 (tree decl, tree init, VEC(tree,gc) **cleanups)
8927 tree sub = init;
8928 tree *p;
8929 STRIP_NOPS (sub);
8930 if (TREE_CODE (sub) == COMPOUND_EXPR)
8932 TREE_OPERAND (sub, 1)
8933 = extend_ref_init_temps_1 (decl, TREE_OPERAND (sub, 1), cleanups);
8934 return init;
8936 if (TREE_CODE (sub) != ADDR_EXPR)
8937 return init;
8938 /* Deal with binding to a subobject. */
8939 for (p = &TREE_OPERAND (sub, 0); TREE_CODE (*p) == COMPONENT_REF; )
8940 p = &TREE_OPERAND (*p, 0);
8941 if (TREE_CODE (*p) == TARGET_EXPR)
8943 tree subinit = NULL_TREE;
8944 *p = set_up_extended_ref_temp (decl, *p, cleanups, &subinit);
8945 if (subinit)
8946 init = build2 (COMPOUND_EXPR, TREE_TYPE (init), subinit, init);
8948 return init;
8951 /* INIT is part of the initializer for DECL. If there are any
8952 reference or initializer lists being initialized, extend their
8953 lifetime to match that of DECL. */
8955 tree
8956 extend_ref_init_temps (tree decl, tree init, VEC(tree,gc) **cleanups)
8958 tree type = TREE_TYPE (init);
8959 if (processing_template_decl)
8960 return init;
8961 if (TREE_CODE (type) == REFERENCE_TYPE)
8962 init = extend_ref_init_temps_1 (decl, init, cleanups);
8963 else if (is_std_init_list (type))
8965 /* The temporary array underlying a std::initializer_list
8966 is handled like a reference temporary. */
8967 tree ctor = init;
8968 if (TREE_CODE (ctor) == TARGET_EXPR)
8969 ctor = TARGET_EXPR_INITIAL (ctor);
8970 if (TREE_CODE (ctor) == CONSTRUCTOR)
8972 tree array = CONSTRUCTOR_ELT (ctor, 0)->value;
8973 array = extend_ref_init_temps_1 (decl, array, cleanups);
8974 CONSTRUCTOR_ELT (ctor, 0)->value = array;
8977 else if (TREE_CODE (init) == CONSTRUCTOR)
8979 unsigned i;
8980 constructor_elt *p;
8981 VEC(constructor_elt,gc) *elts = CONSTRUCTOR_ELTS (init);
8982 FOR_EACH_VEC_ELT (constructor_elt, elts, i, p)
8983 p->value = extend_ref_init_temps (decl, p->value, cleanups);
8986 return init;
8989 /* Returns true iff TYPE is some variant of std::initializer_list. */
8991 bool
8992 is_std_init_list (tree type)
8994 /* Look through typedefs. */
8995 if (!TYPE_P (type))
8996 return false;
8997 type = TYPE_MAIN_VARIANT (type);
8998 return (CLASS_TYPE_P (type)
8999 && CP_TYPE_CONTEXT (type) == std_node
9000 && strcmp (TYPE_NAME_STRING (type), "initializer_list") == 0);
9003 /* Returns true iff DECL is a list constructor: i.e. a constructor which
9004 will accept an argument list of a single std::initializer_list<T>. */
9006 bool
9007 is_list_ctor (tree decl)
9009 tree args = FUNCTION_FIRST_USER_PARMTYPE (decl);
9010 tree arg;
9012 if (!args || args == void_list_node)
9013 return false;
9015 arg = non_reference (TREE_VALUE (args));
9016 if (!is_std_init_list (arg))
9017 return false;
9019 args = TREE_CHAIN (args);
9021 if (args && args != void_list_node && !TREE_PURPOSE (args))
9022 /* There are more non-defaulted parms. */
9023 return false;
9025 return true;
9028 #include "gt-cp-call.h"