2015-01-20 Jeff Law <law@redhat.com>
[official-gcc.git] / gcc / cp / call.c
blobf2076c67aee090368fee08ab72fcee35470d9ead
1 /* Functions related to invoking methods and overloaded functions.
2 Copyright (C) 1987-2015 Free Software Foundation, Inc.
3 Contributed by Michael Tiemann (tiemann@cygnus.com) and
4 modified by Brendan Kehoe (brendan@cygnus.com).
6 This file is part of GCC.
8 GCC is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 3, or (at your option)
11 any later version.
13 GCC is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3. If not see
20 <http://www.gnu.org/licenses/>. */
23 /* High-level class interface. */
25 #include "config.h"
26 #include "system.h"
27 #include "coretypes.h"
28 #include "tm.h"
29 #include "hash-set.h"
30 #include "machmode.h"
31 #include "vec.h"
32 #include "double-int.h"
33 #include "input.h"
34 #include "alias.h"
35 #include "symtab.h"
36 #include "wide-int.h"
37 #include "inchash.h"
38 #include "tree.h"
39 #include "stor-layout.h"
40 #include "trans-mem.h"
41 #include "stringpool.h"
42 #include "cp-tree.h"
43 #include "flags.h"
44 #include "toplev.h"
45 #include "diagnostic-core.h"
46 #include "intl.h"
47 #include "target.h"
48 #include "convert.h"
49 #include "langhooks.h"
50 #include "c-family/c-objc.h"
51 #include "timevar.h"
52 #include "hash-map.h"
53 #include "is-a.h"
54 #include "plugin-api.h"
55 #include "hard-reg-set.h"
56 #include "input.h"
57 #include "function.h"
58 #include "ipa-ref.h"
59 #include "cgraph.h"
60 #include "wide-int.h"
61 #include "internal-fn.h"
63 /* The various kinds of conversion. */
65 typedef enum conversion_kind {
66 ck_identity,
67 ck_lvalue,
68 ck_qual,
69 ck_std,
70 ck_ptr,
71 ck_pmem,
72 ck_base,
73 ck_ref_bind,
74 ck_user,
75 ck_ambig,
76 ck_list,
77 ck_aggr,
78 ck_rvalue
79 } conversion_kind;
81 /* The rank of the conversion. Order of the enumerals matters; better
82 conversions should come earlier in the list. */
84 typedef enum conversion_rank {
85 cr_identity,
86 cr_exact,
87 cr_promotion,
88 cr_std,
89 cr_pbool,
90 cr_user,
91 cr_ellipsis,
92 cr_bad
93 } conversion_rank;
95 /* An implicit conversion sequence, in the sense of [over.best.ics].
96 The first conversion to be performed is at the end of the chain.
97 That conversion is always a cr_identity conversion. */
99 typedef struct conversion conversion;
100 struct conversion {
101 /* The kind of conversion represented by this step. */
102 conversion_kind kind;
103 /* The rank of this conversion. */
104 conversion_rank rank;
105 BOOL_BITFIELD user_conv_p : 1;
106 BOOL_BITFIELD ellipsis_p : 1;
107 BOOL_BITFIELD this_p : 1;
108 /* True if this conversion would be permitted with a bending of
109 language standards, e.g. disregarding pointer qualifiers or
110 converting integers to pointers. */
111 BOOL_BITFIELD bad_p : 1;
112 /* If KIND is ck_ref_bind ck_base_conv, true to indicate that a
113 temporary should be created to hold the result of the
114 conversion. */
115 BOOL_BITFIELD need_temporary_p : 1;
116 /* If KIND is ck_ptr or ck_pmem, true to indicate that a conversion
117 from a pointer-to-derived to pointer-to-base is being performed. */
118 BOOL_BITFIELD base_p : 1;
119 /* If KIND is ck_ref_bind, true when either an lvalue reference is
120 being bound to an lvalue expression or an rvalue reference is
121 being bound to an rvalue expression. If KIND is ck_rvalue,
122 true when we should treat an lvalue as an rvalue (12.8p33). If
123 KIND is ck_base, always false. */
124 BOOL_BITFIELD rvaluedness_matches_p: 1;
125 BOOL_BITFIELD check_narrowing: 1;
126 /* The type of the expression resulting from the conversion. */
127 tree type;
128 union {
129 /* The next conversion in the chain. Since the conversions are
130 arranged from outermost to innermost, the NEXT conversion will
131 actually be performed before this conversion. This variant is
132 used only when KIND is neither ck_identity, ck_ambig nor
133 ck_list. Please use the next_conversion function instead
134 of using this field directly. */
135 conversion *next;
136 /* The expression at the beginning of the conversion chain. This
137 variant is used only if KIND is ck_identity or ck_ambig. */
138 tree expr;
139 /* The array of conversions for an initializer_list, so this
140 variant is used only when KIN D is ck_list. */
141 conversion **list;
142 } u;
143 /* The function candidate corresponding to this conversion
144 sequence. This field is only used if KIND is ck_user. */
145 struct z_candidate *cand;
148 #define CONVERSION_RANK(NODE) \
149 ((NODE)->bad_p ? cr_bad \
150 : (NODE)->ellipsis_p ? cr_ellipsis \
151 : (NODE)->user_conv_p ? cr_user \
152 : (NODE)->rank)
154 #define BAD_CONVERSION_RANK(NODE) \
155 ((NODE)->ellipsis_p ? cr_ellipsis \
156 : (NODE)->user_conv_p ? cr_user \
157 : (NODE)->rank)
159 static struct obstack conversion_obstack;
160 static bool conversion_obstack_initialized;
161 struct rejection_reason;
163 static struct z_candidate * tourney (struct z_candidate *, tsubst_flags_t);
164 static int equal_functions (tree, tree);
165 static int joust (struct z_candidate *, struct z_candidate *, bool,
166 tsubst_flags_t);
167 static int compare_ics (conversion *, conversion *);
168 static tree build_over_call (struct z_candidate *, int, tsubst_flags_t);
169 static tree build_java_interface_fn_ref (tree, tree);
170 #define convert_like(CONV, EXPR, COMPLAIN) \
171 convert_like_real ((CONV), (EXPR), NULL_TREE, 0, 0, \
172 /*issue_conversion_warnings=*/true, \
173 /*c_cast_p=*/false, (COMPLAIN))
174 #define convert_like_with_context(CONV, EXPR, FN, ARGNO, COMPLAIN ) \
175 convert_like_real ((CONV), (EXPR), (FN), (ARGNO), 0, \
176 /*issue_conversion_warnings=*/true, \
177 /*c_cast_p=*/false, (COMPLAIN))
178 static tree convert_like_real (conversion *, tree, tree, int, int, bool,
179 bool, tsubst_flags_t);
180 static void op_error (location_t, enum tree_code, enum tree_code, tree,
181 tree, tree, bool);
182 static struct z_candidate *build_user_type_conversion_1 (tree, tree, int,
183 tsubst_flags_t);
184 static void print_z_candidate (location_t, const char *, struct z_candidate *);
185 static void print_z_candidates (location_t, struct z_candidate *);
186 static tree build_this (tree);
187 static struct z_candidate *splice_viable (struct z_candidate *, bool, bool *);
188 static bool any_strictly_viable (struct z_candidate *);
189 static struct z_candidate *add_template_candidate
190 (struct z_candidate **, tree, tree, tree, tree, const vec<tree, va_gc> *,
191 tree, tree, tree, int, unification_kind_t, tsubst_flags_t);
192 static struct z_candidate *add_template_candidate_real
193 (struct z_candidate **, tree, tree, tree, tree, const vec<tree, va_gc> *,
194 tree, tree, tree, int, tree, unification_kind_t, tsubst_flags_t);
195 static struct z_candidate *add_template_conv_candidate
196 (struct z_candidate **, tree, tree, tree, const vec<tree, va_gc> *,
197 tree, tree, tree, tsubst_flags_t);
198 static void add_builtin_candidates
199 (struct z_candidate **, enum tree_code, enum tree_code,
200 tree, tree *, int, tsubst_flags_t);
201 static void add_builtin_candidate
202 (struct z_candidate **, enum tree_code, enum tree_code,
203 tree, tree, tree, tree *, tree *, int, tsubst_flags_t);
204 static bool is_complete (tree);
205 static void build_builtin_candidate
206 (struct z_candidate **, tree, tree, tree, tree *, tree *,
207 int, tsubst_flags_t);
208 static struct z_candidate *add_conv_candidate
209 (struct z_candidate **, tree, tree, tree, const vec<tree, va_gc> *, tree,
210 tree, tsubst_flags_t);
211 static struct z_candidate *add_function_candidate
212 (struct z_candidate **, tree, tree, tree, const vec<tree, va_gc> *, tree,
213 tree, int, tsubst_flags_t);
214 static conversion *implicit_conversion (tree, tree, tree, bool, int,
215 tsubst_flags_t);
216 static conversion *standard_conversion (tree, tree, tree, bool, int);
217 static conversion *reference_binding (tree, tree, tree, bool, int,
218 tsubst_flags_t);
219 static conversion *build_conv (conversion_kind, tree, conversion *);
220 static conversion *build_list_conv (tree, tree, int, tsubst_flags_t);
221 static conversion *next_conversion (conversion *);
222 static bool is_subseq (conversion *, conversion *);
223 static conversion *maybe_handle_ref_bind (conversion **);
224 static void maybe_handle_implicit_object (conversion **);
225 static struct z_candidate *add_candidate
226 (struct z_candidate **, tree, tree, const vec<tree, va_gc> *, size_t,
227 conversion **, tree, tree, int, struct rejection_reason *, int);
228 static tree source_type (conversion *);
229 static void add_warning (struct z_candidate *, struct z_candidate *);
230 static bool reference_compatible_p (tree, tree);
231 static conversion *direct_reference_binding (tree, conversion *);
232 static bool promoted_arithmetic_type_p (tree);
233 static conversion *conditional_conversion (tree, tree, tsubst_flags_t);
234 static char *name_as_c_string (tree, tree, bool *);
235 static tree prep_operand (tree);
236 static void add_candidates (tree, tree, const vec<tree, va_gc> *, tree, tree,
237 bool, tree, tree, int, struct z_candidate **,
238 tsubst_flags_t);
239 static conversion *merge_conversion_sequences (conversion *, conversion *);
240 static tree build_temp (tree, tree, int, diagnostic_t *, tsubst_flags_t);
242 /* Returns nonzero iff the destructor name specified in NAME matches BASETYPE.
243 NAME can take many forms... */
245 bool
246 check_dtor_name (tree basetype, tree name)
248 /* Just accept something we've already complained about. */
249 if (name == error_mark_node)
250 return true;
252 if (TREE_CODE (name) == TYPE_DECL)
253 name = TREE_TYPE (name);
254 else if (TYPE_P (name))
255 /* OK */;
256 else if (identifier_p (name))
258 if ((MAYBE_CLASS_TYPE_P (basetype)
259 && name == constructor_name (basetype))
260 || (TREE_CODE (basetype) == ENUMERAL_TYPE
261 && name == TYPE_IDENTIFIER (basetype)))
262 return true;
263 else
264 name = get_type_value (name);
266 else
268 /* In the case of:
270 template <class T> struct S { ~S(); };
271 int i;
272 i.~S();
274 NAME will be a class template. */
275 gcc_assert (DECL_CLASS_TEMPLATE_P (name));
276 return false;
279 if (!name || name == error_mark_node)
280 return false;
281 return same_type_p (TYPE_MAIN_VARIANT (basetype), TYPE_MAIN_VARIANT (name));
284 /* We want the address of a function or method. We avoid creating a
285 pointer-to-member function. */
287 tree
288 build_addr_func (tree function, tsubst_flags_t complain)
290 tree type = TREE_TYPE (function);
292 /* We have to do these by hand to avoid real pointer to member
293 functions. */
294 if (TREE_CODE (type) == METHOD_TYPE)
296 if (TREE_CODE (function) == OFFSET_REF)
298 tree object = build_address (TREE_OPERAND (function, 0));
299 return get_member_function_from_ptrfunc (&object,
300 TREE_OPERAND (function, 1),
301 complain);
303 function = build_address (function);
305 else
306 function = decay_conversion (function, complain);
308 return function;
311 /* Build a CALL_EXPR, we can handle FUNCTION_TYPEs, METHOD_TYPEs, or
312 POINTER_TYPE to those. Note, pointer to member function types
313 (TYPE_PTRMEMFUNC_P) must be handled by our callers. There are
314 two variants. build_call_a is the primitive taking an array of
315 arguments, while build_call_n is a wrapper that handles varargs. */
317 tree
318 build_call_n (tree function, int n, ...)
320 if (n == 0)
321 return build_call_a (function, 0, NULL);
322 else
324 tree *argarray = XALLOCAVEC (tree, n);
325 va_list ap;
326 int i;
328 va_start (ap, n);
329 for (i = 0; i < n; i++)
330 argarray[i] = va_arg (ap, tree);
331 va_end (ap);
332 return build_call_a (function, n, argarray);
336 /* Update various flags in cfun and the call itself based on what is being
337 called. Split out of build_call_a so that bot_manip can use it too. */
339 void
340 set_flags_from_callee (tree call)
342 bool nothrow;
343 tree decl = get_callee_fndecl (call);
345 /* We check both the decl and the type; a function may be known not to
346 throw without being declared throw(). */
347 nothrow = decl && TREE_NOTHROW (decl);
348 if (CALL_EXPR_FN (call))
349 nothrow |= TYPE_NOTHROW_P (TREE_TYPE (TREE_TYPE (CALL_EXPR_FN (call))));
350 else if (internal_fn_flags (CALL_EXPR_IFN (call)) & ECF_NOTHROW)
351 nothrow = true;
353 if (!nothrow && at_function_scope_p () && cfun && cp_function_chain)
354 cp_function_chain->can_throw = 1;
356 if (decl && TREE_THIS_VOLATILE (decl) && cfun && cp_function_chain)
357 current_function_returns_abnormally = 1;
359 TREE_NOTHROW (call) = nothrow;
362 tree
363 build_call_a (tree function, int n, tree *argarray)
365 tree decl;
366 tree result_type;
367 tree fntype;
368 int i;
370 function = build_addr_func (function, tf_warning_or_error);
372 gcc_assert (TYPE_PTR_P (TREE_TYPE (function)));
373 fntype = TREE_TYPE (TREE_TYPE (function));
374 gcc_assert (TREE_CODE (fntype) == FUNCTION_TYPE
375 || TREE_CODE (fntype) == METHOD_TYPE);
376 result_type = TREE_TYPE (fntype);
377 /* An rvalue has no cv-qualifiers. */
378 if (SCALAR_TYPE_P (result_type) || VOID_TYPE_P (result_type))
379 result_type = cv_unqualified (result_type);
381 function = build_call_array_loc (input_location,
382 result_type, function, n, argarray);
383 set_flags_from_callee (function);
385 decl = get_callee_fndecl (function);
387 if (decl && !TREE_USED (decl))
389 /* We invoke build_call directly for several library
390 functions. These may have been declared normally if
391 we're building libgcc, so we can't just check
392 DECL_ARTIFICIAL. */
393 gcc_assert (DECL_ARTIFICIAL (decl)
394 || !strncmp (IDENTIFIER_POINTER (DECL_NAME (decl)),
395 "__", 2));
396 mark_used (decl);
399 require_complete_eh_spec_types (fntype, decl);
401 TREE_HAS_CONSTRUCTOR (function) = (decl && DECL_CONSTRUCTOR_P (decl));
403 /* Don't pass empty class objects by value. This is useful
404 for tags in STL, which are used to control overload resolution.
405 We don't need to handle other cases of copying empty classes. */
406 if (! decl || ! DECL_BUILT_IN (decl))
407 for (i = 0; i < n; i++)
409 tree arg = CALL_EXPR_ARG (function, i);
410 if (is_empty_class (TREE_TYPE (arg))
411 && ! TREE_ADDRESSABLE (TREE_TYPE (arg)))
413 tree t = build0 (EMPTY_CLASS_EXPR, TREE_TYPE (arg));
414 arg = build2 (COMPOUND_EXPR, TREE_TYPE (t), arg, t);
415 CALL_EXPR_ARG (function, i) = arg;
419 return function;
422 /* Build something of the form ptr->method (args)
423 or object.method (args). This can also build
424 calls to constructors, and find friends.
426 Member functions always take their class variable
427 as a pointer.
429 INSTANCE is a class instance.
431 NAME is the name of the method desired, usually an IDENTIFIER_NODE.
433 PARMS help to figure out what that NAME really refers to.
435 BASETYPE_PATH, if non-NULL, contains a chain from the type of INSTANCE
436 down to the real instance type to use for access checking. We need this
437 information to get protected accesses correct.
439 FLAGS is the logical disjunction of zero or more LOOKUP_
440 flags. See cp-tree.h for more info.
442 If this is all OK, calls build_function_call with the resolved
443 member function.
445 This function must also handle being called to perform
446 initialization, promotion/coercion of arguments, and
447 instantiation of default parameters.
449 Note that NAME may refer to an instance variable name. If
450 `operator()()' is defined for the type of that field, then we return
451 that result. */
453 /* New overloading code. */
455 typedef struct z_candidate z_candidate;
457 typedef struct candidate_warning candidate_warning;
458 struct candidate_warning {
459 z_candidate *loser;
460 candidate_warning *next;
463 /* Information for providing diagnostics about why overloading failed. */
465 enum rejection_reason_code {
466 rr_none,
467 rr_arity,
468 rr_explicit_conversion,
469 rr_template_conversion,
470 rr_arg_conversion,
471 rr_bad_arg_conversion,
472 rr_template_unification,
473 rr_invalid_copy
476 struct conversion_info {
477 /* The index of the argument, 0-based. */
478 int n_arg;
479 /* The actual argument or its type. */
480 tree from;
481 /* The type of the parameter. */
482 tree to_type;
485 struct rejection_reason {
486 enum rejection_reason_code code;
487 union {
488 /* Information about an arity mismatch. */
489 struct {
490 /* The expected number of arguments. */
491 int expected;
492 /* The actual number of arguments in the call. */
493 int actual;
494 /* Whether the call was a varargs call. */
495 bool call_varargs_p;
496 } arity;
497 /* Information about an argument conversion mismatch. */
498 struct conversion_info conversion;
499 /* Same, but for bad argument conversions. */
500 struct conversion_info bad_conversion;
501 /* Information about template unification failures. These are the
502 parameters passed to fn_type_unification. */
503 struct {
504 tree tmpl;
505 tree explicit_targs;
506 int num_targs;
507 const tree *args;
508 unsigned int nargs;
509 tree return_type;
510 unification_kind_t strict;
511 int flags;
512 } template_unification;
513 /* Information about template instantiation failures. These are the
514 parameters passed to instantiate_template. */
515 struct {
516 tree tmpl;
517 tree targs;
518 } template_instantiation;
519 } u;
522 struct z_candidate {
523 /* The FUNCTION_DECL that will be called if this candidate is
524 selected by overload resolution. */
525 tree fn;
526 /* If not NULL_TREE, the first argument to use when calling this
527 function. */
528 tree first_arg;
529 /* The rest of the arguments to use when calling this function. If
530 there are no further arguments this may be NULL or it may be an
531 empty vector. */
532 const vec<tree, va_gc> *args;
533 /* The implicit conversion sequences for each of the arguments to
534 FN. */
535 conversion **convs;
536 /* The number of implicit conversion sequences. */
537 size_t num_convs;
538 /* If FN is a user-defined conversion, the standard conversion
539 sequence from the type returned by FN to the desired destination
540 type. */
541 conversion *second_conv;
542 struct rejection_reason *reason;
543 /* If FN is a member function, the binfo indicating the path used to
544 qualify the name of FN at the call site. This path is used to
545 determine whether or not FN is accessible if it is selected by
546 overload resolution. The DECL_CONTEXT of FN will always be a
547 (possibly improper) base of this binfo. */
548 tree access_path;
549 /* If FN is a non-static member function, the binfo indicating the
550 subobject to which the `this' pointer should be converted if FN
551 is selected by overload resolution. The type pointed to by
552 the `this' pointer must correspond to the most derived class
553 indicated by the CONVERSION_PATH. */
554 tree conversion_path;
555 tree template_decl;
556 tree explicit_targs;
557 candidate_warning *warnings;
558 z_candidate *next;
559 int viable;
561 /* The flags active in add_candidate. */
562 int flags;
565 /* Returns true iff T is a null pointer constant in the sense of
566 [conv.ptr]. */
568 bool
569 null_ptr_cst_p (tree t)
571 /* [conv.ptr]
573 A null pointer constant is an integral constant expression
574 (_expr.const_) rvalue of integer type that evaluates to zero or
575 an rvalue of type std::nullptr_t. */
576 if (NULLPTR_TYPE_P (TREE_TYPE (t)))
577 return true;
578 if (CP_INTEGRAL_TYPE_P (TREE_TYPE (t)))
580 /* Core issue 903 says only literal 0 is a null pointer constant. */
581 if (cxx_dialect < cxx11)
582 t = fold_non_dependent_expr (t);
583 STRIP_NOPS (t);
584 if (integer_zerop (t) && !TREE_OVERFLOW (t))
585 return true;
587 return false;
590 /* Returns true iff T is a null member pointer value (4.11). */
592 bool
593 null_member_pointer_value_p (tree t)
595 tree type = TREE_TYPE (t);
596 if (!type)
597 return false;
598 else if (TYPE_PTRMEMFUNC_P (type))
599 return (TREE_CODE (t) == CONSTRUCTOR
600 && integer_zerop (CONSTRUCTOR_ELT (t, 0)->value));
601 else if (TYPE_PTRDATAMEM_P (type))
602 return integer_all_onesp (t);
603 else
604 return false;
607 /* Returns nonzero if PARMLIST consists of only default parms,
608 ellipsis, and/or undeduced parameter packs. */
610 bool
611 sufficient_parms_p (const_tree parmlist)
613 for (; parmlist && parmlist != void_list_node;
614 parmlist = TREE_CHAIN (parmlist))
615 if (!TREE_PURPOSE (parmlist)
616 && !PACK_EXPANSION_P (TREE_VALUE (parmlist)))
617 return false;
618 return true;
621 /* Allocate N bytes of memory from the conversion obstack. The memory
622 is zeroed before being returned. */
624 static void *
625 conversion_obstack_alloc (size_t n)
627 void *p;
628 if (!conversion_obstack_initialized)
630 gcc_obstack_init (&conversion_obstack);
631 conversion_obstack_initialized = true;
633 p = obstack_alloc (&conversion_obstack, n);
634 memset (p, 0, n);
635 return p;
638 /* Allocate rejection reasons. */
640 static struct rejection_reason *
641 alloc_rejection (enum rejection_reason_code code)
643 struct rejection_reason *p;
644 p = (struct rejection_reason *) conversion_obstack_alloc (sizeof *p);
645 p->code = code;
646 return p;
649 static struct rejection_reason *
650 arity_rejection (tree first_arg, int expected, int actual)
652 struct rejection_reason *r = alloc_rejection (rr_arity);
653 int adjust = first_arg != NULL_TREE;
654 r->u.arity.expected = expected - adjust;
655 r->u.arity.actual = actual - adjust;
656 return r;
659 static struct rejection_reason *
660 arg_conversion_rejection (tree first_arg, int n_arg, tree from, tree to)
662 struct rejection_reason *r = alloc_rejection (rr_arg_conversion);
663 int adjust = first_arg != NULL_TREE;
664 r->u.conversion.n_arg = n_arg - adjust;
665 r->u.conversion.from = from;
666 r->u.conversion.to_type = to;
667 return r;
670 static struct rejection_reason *
671 bad_arg_conversion_rejection (tree first_arg, int n_arg, tree from, tree to)
673 struct rejection_reason *r = alloc_rejection (rr_bad_arg_conversion);
674 int adjust = first_arg != NULL_TREE;
675 r->u.bad_conversion.n_arg = n_arg - adjust;
676 r->u.bad_conversion.from = from;
677 r->u.bad_conversion.to_type = to;
678 return r;
681 static struct rejection_reason *
682 explicit_conversion_rejection (tree from, tree to)
684 struct rejection_reason *r = alloc_rejection (rr_explicit_conversion);
685 r->u.conversion.n_arg = 0;
686 r->u.conversion.from = from;
687 r->u.conversion.to_type = to;
688 return r;
691 static struct rejection_reason *
692 template_conversion_rejection (tree from, tree to)
694 struct rejection_reason *r = alloc_rejection (rr_template_conversion);
695 r->u.conversion.n_arg = 0;
696 r->u.conversion.from = from;
697 r->u.conversion.to_type = to;
698 return r;
701 static struct rejection_reason *
702 template_unification_rejection (tree tmpl, tree explicit_targs, tree targs,
703 const tree *args, unsigned int nargs,
704 tree return_type, unification_kind_t strict,
705 int flags)
707 size_t args_n_bytes = sizeof (*args) * nargs;
708 tree *args1 = (tree *) conversion_obstack_alloc (args_n_bytes);
709 struct rejection_reason *r = alloc_rejection (rr_template_unification);
710 r->u.template_unification.tmpl = tmpl;
711 r->u.template_unification.explicit_targs = explicit_targs;
712 r->u.template_unification.num_targs = TREE_VEC_LENGTH (targs);
713 /* Copy args to our own storage. */
714 memcpy (args1, args, args_n_bytes);
715 r->u.template_unification.args = args1;
716 r->u.template_unification.nargs = nargs;
717 r->u.template_unification.return_type = return_type;
718 r->u.template_unification.strict = strict;
719 r->u.template_unification.flags = flags;
720 return r;
723 static struct rejection_reason *
724 template_unification_error_rejection (void)
726 return alloc_rejection (rr_template_unification);
729 static struct rejection_reason *
730 invalid_copy_with_fn_template_rejection (void)
732 struct rejection_reason *r = alloc_rejection (rr_invalid_copy);
733 return r;
736 /* Dynamically allocate a conversion. */
738 static conversion *
739 alloc_conversion (conversion_kind kind)
741 conversion *c;
742 c = (conversion *) conversion_obstack_alloc (sizeof (conversion));
743 c->kind = kind;
744 return c;
747 #ifdef ENABLE_CHECKING
749 /* Make sure that all memory on the conversion obstack has been
750 freed. */
752 void
753 validate_conversion_obstack (void)
755 if (conversion_obstack_initialized)
756 gcc_assert ((obstack_next_free (&conversion_obstack)
757 == obstack_base (&conversion_obstack)));
760 #endif /* ENABLE_CHECKING */
762 /* Dynamically allocate an array of N conversions. */
764 static conversion **
765 alloc_conversions (size_t n)
767 return (conversion **) conversion_obstack_alloc (n * sizeof (conversion *));
770 static conversion *
771 build_conv (conversion_kind code, tree type, conversion *from)
773 conversion *t;
774 conversion_rank rank = CONVERSION_RANK (from);
776 /* Note that the caller is responsible for filling in t->cand for
777 user-defined conversions. */
778 t = alloc_conversion (code);
779 t->type = type;
780 t->u.next = from;
782 switch (code)
784 case ck_ptr:
785 case ck_pmem:
786 case ck_base:
787 case ck_std:
788 if (rank < cr_std)
789 rank = cr_std;
790 break;
792 case ck_qual:
793 if (rank < cr_exact)
794 rank = cr_exact;
795 break;
797 default:
798 break;
800 t->rank = rank;
801 t->user_conv_p = (code == ck_user || from->user_conv_p);
802 t->bad_p = from->bad_p;
803 t->base_p = false;
804 return t;
807 /* Represent a conversion from CTOR, a braced-init-list, to TYPE, a
808 specialization of std::initializer_list<T>, if such a conversion is
809 possible. */
811 static conversion *
812 build_list_conv (tree type, tree ctor, int flags, tsubst_flags_t complain)
814 tree elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (type), 0);
815 unsigned len = CONSTRUCTOR_NELTS (ctor);
816 conversion **subconvs = alloc_conversions (len);
817 conversion *t;
818 unsigned i;
819 tree val;
821 /* Within a list-initialization we can have more user-defined
822 conversions. */
823 flags &= ~LOOKUP_NO_CONVERSION;
824 /* But no narrowing conversions. */
825 flags |= LOOKUP_NO_NARROWING;
827 /* Can't make an array of these types. */
828 if (TREE_CODE (elttype) == REFERENCE_TYPE
829 || TREE_CODE (elttype) == FUNCTION_TYPE
830 || VOID_TYPE_P (elttype))
831 return NULL;
833 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor), i, val)
835 conversion *sub
836 = implicit_conversion (elttype, TREE_TYPE (val), val,
837 false, flags, complain);
838 if (sub == NULL)
839 return NULL;
841 subconvs[i] = sub;
844 t = alloc_conversion (ck_list);
845 t->type = type;
846 t->u.list = subconvs;
847 t->rank = cr_exact;
849 for (i = 0; i < len; ++i)
851 conversion *sub = subconvs[i];
852 if (sub->rank > t->rank)
853 t->rank = sub->rank;
854 if (sub->user_conv_p)
855 t->user_conv_p = true;
856 if (sub->bad_p)
857 t->bad_p = true;
860 return t;
863 /* Return the next conversion of the conversion chain (if applicable),
864 or NULL otherwise. Please use this function instead of directly
865 accessing fields of struct conversion. */
867 static conversion *
868 next_conversion (conversion *conv)
870 if (conv == NULL
871 || conv->kind == ck_identity
872 || conv->kind == ck_ambig
873 || conv->kind == ck_list)
874 return NULL;
875 return conv->u.next;
878 /* Subroutine of build_aggr_conv: check whether CTOR, a braced-init-list,
879 is a valid aggregate initializer for array type ATYPE. */
881 static bool
882 can_convert_array (tree atype, tree ctor, int flags, tsubst_flags_t complain)
884 unsigned i;
885 tree elttype = TREE_TYPE (atype);
886 for (i = 0; i < CONSTRUCTOR_NELTS (ctor); ++i)
888 tree val = CONSTRUCTOR_ELT (ctor, i)->value;
889 bool ok;
890 if (TREE_CODE (elttype) == ARRAY_TYPE
891 && TREE_CODE (val) == CONSTRUCTOR)
892 ok = can_convert_array (elttype, val, flags, complain);
893 else
894 ok = can_convert_arg (elttype, TREE_TYPE (val), val, flags,
895 complain);
896 if (!ok)
897 return false;
899 return true;
902 /* Represent a conversion from CTOR, a braced-init-list, to TYPE, an
903 aggregate class, if such a conversion is possible. */
905 static conversion *
906 build_aggr_conv (tree type, tree ctor, int flags, tsubst_flags_t complain)
908 unsigned HOST_WIDE_INT i = 0;
909 conversion *c;
910 tree field = next_initializable_field (TYPE_FIELDS (type));
911 tree empty_ctor = NULL_TREE;
913 ctor = reshape_init (type, ctor, tf_none);
914 if (ctor == error_mark_node)
915 return NULL;
917 /* The conversions within the init-list aren't affected by the enclosing
918 context; they're always simple copy-initialization. */
919 flags = LOOKUP_IMPLICIT|LOOKUP_NO_NARROWING;
921 for (; field; field = next_initializable_field (DECL_CHAIN (field)))
923 tree ftype = TREE_TYPE (field);
924 tree val;
925 bool ok;
927 if (i < CONSTRUCTOR_NELTS (ctor))
928 val = CONSTRUCTOR_ELT (ctor, i)->value;
929 else if (TREE_CODE (ftype) == REFERENCE_TYPE)
930 /* Value-initialization of reference is ill-formed. */
931 return NULL;
932 else
934 if (empty_ctor == NULL_TREE)
935 empty_ctor = build_constructor (init_list_type_node, NULL);
936 val = empty_ctor;
938 ++i;
940 if (TREE_CODE (ftype) == ARRAY_TYPE
941 && TREE_CODE (val) == CONSTRUCTOR)
942 ok = can_convert_array (ftype, val, flags, complain);
943 else
944 ok = can_convert_arg (ftype, TREE_TYPE (val), val, flags,
945 complain);
947 if (!ok)
948 return NULL;
950 if (TREE_CODE (type) == UNION_TYPE)
951 break;
954 if (i < CONSTRUCTOR_NELTS (ctor))
955 return NULL;
957 c = alloc_conversion (ck_aggr);
958 c->type = type;
959 c->rank = cr_exact;
960 c->user_conv_p = true;
961 c->check_narrowing = true;
962 c->u.next = NULL;
963 return c;
966 /* Represent a conversion from CTOR, a braced-init-list, to TYPE, an
967 array type, if such a conversion is possible. */
969 static conversion *
970 build_array_conv (tree type, tree ctor, int flags, tsubst_flags_t complain)
972 conversion *c;
973 unsigned HOST_WIDE_INT len = CONSTRUCTOR_NELTS (ctor);
974 tree elttype = TREE_TYPE (type);
975 unsigned i;
976 tree val;
977 bool bad = false;
978 bool user = false;
979 enum conversion_rank rank = cr_exact;
981 /* We might need to propagate the size from the element to the array. */
982 complete_type (type);
984 if (TYPE_DOMAIN (type)
985 && !variably_modified_type_p (TYPE_DOMAIN (type), NULL_TREE))
987 unsigned HOST_WIDE_INT alen = tree_to_uhwi (array_type_nelts_top (type));
988 if (alen < len)
989 return NULL;
992 flags = LOOKUP_IMPLICIT|LOOKUP_NO_NARROWING;
994 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor), i, val)
996 conversion *sub
997 = implicit_conversion (elttype, TREE_TYPE (val), val,
998 false, flags, complain);
999 if (sub == NULL)
1000 return NULL;
1002 if (sub->rank > rank)
1003 rank = sub->rank;
1004 if (sub->user_conv_p)
1005 user = true;
1006 if (sub->bad_p)
1007 bad = true;
1010 c = alloc_conversion (ck_aggr);
1011 c->type = type;
1012 c->rank = rank;
1013 c->user_conv_p = user;
1014 c->bad_p = bad;
1015 c->u.next = NULL;
1016 return c;
1019 /* Represent a conversion from CTOR, a braced-init-list, to TYPE, a
1020 complex type, if such a conversion is possible. */
1022 static conversion *
1023 build_complex_conv (tree type, tree ctor, int flags,
1024 tsubst_flags_t complain)
1026 conversion *c;
1027 unsigned HOST_WIDE_INT len = CONSTRUCTOR_NELTS (ctor);
1028 tree elttype = TREE_TYPE (type);
1029 unsigned i;
1030 tree val;
1031 bool bad = false;
1032 bool user = false;
1033 enum conversion_rank rank = cr_exact;
1035 if (len != 2)
1036 return NULL;
1038 flags = LOOKUP_IMPLICIT|LOOKUP_NO_NARROWING;
1040 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor), i, val)
1042 conversion *sub
1043 = implicit_conversion (elttype, TREE_TYPE (val), val,
1044 false, flags, complain);
1045 if (sub == NULL)
1046 return NULL;
1048 if (sub->rank > rank)
1049 rank = sub->rank;
1050 if (sub->user_conv_p)
1051 user = true;
1052 if (sub->bad_p)
1053 bad = true;
1056 c = alloc_conversion (ck_aggr);
1057 c->type = type;
1058 c->rank = rank;
1059 c->user_conv_p = user;
1060 c->bad_p = bad;
1061 c->u.next = NULL;
1062 return c;
1065 /* Build a representation of the identity conversion from EXPR to
1066 itself. The TYPE should match the type of EXPR, if EXPR is non-NULL. */
1068 static conversion *
1069 build_identity_conv (tree type, tree expr)
1071 conversion *c;
1073 c = alloc_conversion (ck_identity);
1074 c->type = type;
1075 c->u.expr = expr;
1077 return c;
1080 /* Converting from EXPR to TYPE was ambiguous in the sense that there
1081 were multiple user-defined conversions to accomplish the job.
1082 Build a conversion that indicates that ambiguity. */
1084 static conversion *
1085 build_ambiguous_conv (tree type, tree expr)
1087 conversion *c;
1089 c = alloc_conversion (ck_ambig);
1090 c->type = type;
1091 c->u.expr = expr;
1093 return c;
1096 tree
1097 strip_top_quals (tree t)
1099 if (TREE_CODE (t) == ARRAY_TYPE)
1100 return t;
1101 return cp_build_qualified_type (t, 0);
1104 /* Returns the standard conversion path (see [conv]) from type FROM to type
1105 TO, if any. For proper handling of null pointer constants, you must
1106 also pass the expression EXPR to convert from. If C_CAST_P is true,
1107 this conversion is coming from a C-style cast. */
1109 static conversion *
1110 standard_conversion (tree to, tree from, tree expr, bool c_cast_p,
1111 int flags)
1113 enum tree_code fcode, tcode;
1114 conversion *conv;
1115 bool fromref = false;
1116 tree qualified_to;
1118 to = non_reference (to);
1119 if (TREE_CODE (from) == REFERENCE_TYPE)
1121 fromref = true;
1122 from = TREE_TYPE (from);
1124 qualified_to = to;
1125 to = strip_top_quals (to);
1126 from = strip_top_quals (from);
1128 if (expr && type_unknown_p (expr))
1130 if (TYPE_PTRFN_P (to) || TYPE_PTRMEMFUNC_P (to))
1132 tsubst_flags_t tflags = tf_conv;
1133 expr = instantiate_type (to, expr, tflags);
1134 if (expr == error_mark_node)
1135 return NULL;
1136 from = TREE_TYPE (expr);
1138 else if (TREE_CODE (to) == BOOLEAN_TYPE)
1140 /* Necessary for eg, TEMPLATE_ID_EXPRs (c++/50961). */
1141 expr = resolve_nondeduced_context (expr);
1142 from = TREE_TYPE (expr);
1146 fcode = TREE_CODE (from);
1147 tcode = TREE_CODE (to);
1149 conv = build_identity_conv (from, expr);
1150 if (fcode == FUNCTION_TYPE || fcode == ARRAY_TYPE)
1152 from = type_decays_to (from);
1153 fcode = TREE_CODE (from);
1154 conv = build_conv (ck_lvalue, from, conv);
1156 else if (fromref || (expr && lvalue_p (expr)))
1158 if (expr)
1160 tree bitfield_type;
1161 bitfield_type = is_bitfield_expr_with_lowered_type (expr);
1162 if (bitfield_type)
1164 from = strip_top_quals (bitfield_type);
1165 fcode = TREE_CODE (from);
1168 conv = build_conv (ck_rvalue, from, conv);
1169 if (flags & LOOKUP_PREFER_RVALUE)
1170 conv->rvaluedness_matches_p = true;
1173 /* Allow conversion between `__complex__' data types. */
1174 if (tcode == COMPLEX_TYPE && fcode == COMPLEX_TYPE)
1176 /* The standard conversion sequence to convert FROM to TO is
1177 the standard conversion sequence to perform componentwise
1178 conversion. */
1179 conversion *part_conv = standard_conversion
1180 (TREE_TYPE (to), TREE_TYPE (from), NULL_TREE, c_cast_p, flags);
1182 if (part_conv)
1184 conv = build_conv (part_conv->kind, to, conv);
1185 conv->rank = part_conv->rank;
1187 else
1188 conv = NULL;
1190 return conv;
1193 if (same_type_p (from, to))
1195 if (CLASS_TYPE_P (to) && conv->kind == ck_rvalue)
1196 conv->type = qualified_to;
1197 return conv;
1200 /* [conv.ptr]
1201 A null pointer constant can be converted to a pointer type; ... A
1202 null pointer constant of integral type can be converted to an
1203 rvalue of type std::nullptr_t. */
1204 if ((tcode == POINTER_TYPE || TYPE_PTRMEM_P (to)
1205 || NULLPTR_TYPE_P (to))
1206 && ((expr && null_ptr_cst_p (expr))
1207 || NULLPTR_TYPE_P (from)))
1208 conv = build_conv (ck_std, to, conv);
1209 else if ((tcode == INTEGER_TYPE && fcode == POINTER_TYPE)
1210 || (tcode == POINTER_TYPE && fcode == INTEGER_TYPE))
1212 /* For backwards brain damage compatibility, allow interconversion of
1213 pointers and integers with a pedwarn. */
1214 conv = build_conv (ck_std, to, conv);
1215 conv->bad_p = true;
1217 else if (UNSCOPED_ENUM_P (to) && fcode == INTEGER_TYPE)
1219 /* For backwards brain damage compatibility, allow interconversion of
1220 enums and integers with a pedwarn. */
1221 conv = build_conv (ck_std, to, conv);
1222 conv->bad_p = true;
1224 else if ((tcode == POINTER_TYPE && fcode == POINTER_TYPE)
1225 || (TYPE_PTRDATAMEM_P (to) && TYPE_PTRDATAMEM_P (from)))
1227 tree to_pointee;
1228 tree from_pointee;
1230 if (tcode == POINTER_TYPE
1231 && same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (from),
1232 TREE_TYPE (to)))
1234 else if (VOID_TYPE_P (TREE_TYPE (to))
1235 && !TYPE_PTRDATAMEM_P (from)
1236 && TREE_CODE (TREE_TYPE (from)) != FUNCTION_TYPE)
1238 tree nfrom = TREE_TYPE (from);
1239 /* Don't try to apply restrict to void. */
1240 int quals = cp_type_quals (nfrom) & ~TYPE_QUAL_RESTRICT;
1241 from = build_pointer_type
1242 (cp_build_qualified_type (void_type_node, quals));
1243 conv = build_conv (ck_ptr, from, conv);
1245 else if (TYPE_PTRDATAMEM_P (from))
1247 tree fbase = TYPE_PTRMEM_CLASS_TYPE (from);
1248 tree tbase = TYPE_PTRMEM_CLASS_TYPE (to);
1250 if (DERIVED_FROM_P (fbase, tbase)
1251 && (same_type_ignoring_top_level_qualifiers_p
1252 (TYPE_PTRMEM_POINTED_TO_TYPE (from),
1253 TYPE_PTRMEM_POINTED_TO_TYPE (to))))
1255 from = build_ptrmem_type (tbase,
1256 TYPE_PTRMEM_POINTED_TO_TYPE (from));
1257 conv = build_conv (ck_pmem, from, conv);
1259 else if (!same_type_p (fbase, tbase))
1260 return NULL;
1262 else if (CLASS_TYPE_P (TREE_TYPE (from))
1263 && CLASS_TYPE_P (TREE_TYPE (to))
1264 /* [conv.ptr]
1266 An rvalue of type "pointer to cv D," where D is a
1267 class type, can be converted to an rvalue of type
1268 "pointer to cv B," where B is a base class (clause
1269 _class.derived_) of D. If B is an inaccessible
1270 (clause _class.access_) or ambiguous
1271 (_class.member.lookup_) base class of D, a program
1272 that necessitates this conversion is ill-formed.
1273 Therefore, we use DERIVED_FROM_P, and do not check
1274 access or uniqueness. */
1275 && DERIVED_FROM_P (TREE_TYPE (to), TREE_TYPE (from)))
1277 from =
1278 cp_build_qualified_type (TREE_TYPE (to),
1279 cp_type_quals (TREE_TYPE (from)));
1280 from = build_pointer_type (from);
1281 conv = build_conv (ck_ptr, from, conv);
1282 conv->base_p = true;
1285 if (tcode == POINTER_TYPE)
1287 to_pointee = TREE_TYPE (to);
1288 from_pointee = TREE_TYPE (from);
1290 else
1292 to_pointee = TYPE_PTRMEM_POINTED_TO_TYPE (to);
1293 from_pointee = TYPE_PTRMEM_POINTED_TO_TYPE (from);
1296 if (same_type_p (from, to))
1297 /* OK */;
1298 else if (c_cast_p && comp_ptr_ttypes_const (to, from))
1299 /* In a C-style cast, we ignore CV-qualification because we
1300 are allowed to perform a static_cast followed by a
1301 const_cast. */
1302 conv = build_conv (ck_qual, to, conv);
1303 else if (!c_cast_p && comp_ptr_ttypes (to_pointee, from_pointee))
1304 conv = build_conv (ck_qual, to, conv);
1305 else if (expr && string_conv_p (to, expr, 0))
1306 /* converting from string constant to char *. */
1307 conv = build_conv (ck_qual, to, conv);
1308 /* Allow conversions among compatible ObjC pointer types (base
1309 conversions have been already handled above). */
1310 else if (c_dialect_objc ()
1311 && objc_compare_types (to, from, -4, NULL_TREE))
1312 conv = build_conv (ck_ptr, to, conv);
1313 else if (ptr_reasonably_similar (to_pointee, from_pointee))
1315 conv = build_conv (ck_ptr, to, conv);
1316 conv->bad_p = true;
1318 else
1319 return NULL;
1321 from = to;
1323 else if (TYPE_PTRMEMFUNC_P (to) && TYPE_PTRMEMFUNC_P (from))
1325 tree fromfn = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (from));
1326 tree tofn = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (to));
1327 tree fbase = class_of_this_parm (fromfn);
1328 tree tbase = class_of_this_parm (tofn);
1330 if (!DERIVED_FROM_P (fbase, tbase)
1331 || !same_type_p (static_fn_type (fromfn),
1332 static_fn_type (tofn)))
1333 return NULL;
1335 from = build_memfn_type (fromfn,
1336 tbase,
1337 cp_type_quals (tbase),
1338 type_memfn_rqual (tofn));
1339 from = build_ptrmemfunc_type (build_pointer_type (from));
1340 conv = build_conv (ck_pmem, from, conv);
1341 conv->base_p = true;
1343 else if (tcode == BOOLEAN_TYPE)
1345 /* [conv.bool]
1347 A prvalue of arithmetic, unscoped enumeration, pointer, or pointer
1348 to member type can be converted to a prvalue of type bool. ...
1349 For direct-initialization (8.5 [dcl.init]), a prvalue of type
1350 std::nullptr_t can be converted to a prvalue of type bool; */
1351 if (ARITHMETIC_TYPE_P (from)
1352 || UNSCOPED_ENUM_P (from)
1353 || fcode == POINTER_TYPE
1354 || TYPE_PTRMEM_P (from)
1355 || NULLPTR_TYPE_P (from))
1357 conv = build_conv (ck_std, to, conv);
1358 if (fcode == POINTER_TYPE
1359 || TYPE_PTRDATAMEM_P (from)
1360 || (TYPE_PTRMEMFUNC_P (from)
1361 && conv->rank < cr_pbool)
1362 || NULLPTR_TYPE_P (from))
1363 conv->rank = cr_pbool;
1364 if (NULLPTR_TYPE_P (from) && (flags & LOOKUP_ONLYCONVERTING))
1365 conv->bad_p = true;
1366 return conv;
1369 return NULL;
1371 /* We don't check for ENUMERAL_TYPE here because there are no standard
1372 conversions to enum type. */
1373 /* As an extension, allow conversion to complex type. */
1374 else if (ARITHMETIC_TYPE_P (to))
1376 if (! (INTEGRAL_CODE_P (fcode)
1377 || (fcode == REAL_TYPE && !(flags & LOOKUP_NO_NON_INTEGRAL)))
1378 || SCOPED_ENUM_P (from))
1379 return NULL;
1380 conv = build_conv (ck_std, to, conv);
1382 /* Give this a better rank if it's a promotion. */
1383 if (same_type_p (to, type_promotes_to (from))
1384 && next_conversion (conv)->rank <= cr_promotion)
1385 conv->rank = cr_promotion;
1387 else if (fcode == VECTOR_TYPE && tcode == VECTOR_TYPE
1388 && vector_types_convertible_p (from, to, false))
1389 return build_conv (ck_std, to, conv);
1390 else if (MAYBE_CLASS_TYPE_P (to) && MAYBE_CLASS_TYPE_P (from)
1391 && is_properly_derived_from (from, to))
1393 if (conv->kind == ck_rvalue)
1394 conv = next_conversion (conv);
1395 conv = build_conv (ck_base, to, conv);
1396 /* The derived-to-base conversion indicates the initialization
1397 of a parameter with base type from an object of a derived
1398 type. A temporary object is created to hold the result of
1399 the conversion unless we're binding directly to a reference. */
1400 conv->need_temporary_p = !(flags & LOOKUP_NO_TEMP_BIND);
1402 else
1403 return NULL;
1405 if (flags & LOOKUP_NO_NARROWING)
1406 conv->check_narrowing = true;
1408 return conv;
1411 /* Returns nonzero if T1 is reference-related to T2. */
1413 bool
1414 reference_related_p (tree t1, tree t2)
1416 if (t1 == error_mark_node || t2 == error_mark_node)
1417 return false;
1419 t1 = TYPE_MAIN_VARIANT (t1);
1420 t2 = TYPE_MAIN_VARIANT (t2);
1422 /* [dcl.init.ref]
1424 Given types "cv1 T1" and "cv2 T2," "cv1 T1" is reference-related
1425 to "cv2 T2" if T1 is the same type as T2, or T1 is a base class
1426 of T2. */
1427 return (same_type_p (t1, t2)
1428 || (CLASS_TYPE_P (t1) && CLASS_TYPE_P (t2)
1429 && DERIVED_FROM_P (t1, t2)));
1432 /* Returns nonzero if T1 is reference-compatible with T2. */
1434 static bool
1435 reference_compatible_p (tree t1, tree t2)
1437 /* [dcl.init.ref]
1439 "cv1 T1" is reference compatible with "cv2 T2" if T1 is
1440 reference-related to T2 and cv1 is the same cv-qualification as,
1441 or greater cv-qualification than, cv2. */
1442 return (reference_related_p (t1, t2)
1443 && at_least_as_qualified_p (t1, t2));
1446 /* A reference of the indicated TYPE is being bound directly to the
1447 expression represented by the implicit conversion sequence CONV.
1448 Return a conversion sequence for this binding. */
1450 static conversion *
1451 direct_reference_binding (tree type, conversion *conv)
1453 tree t;
1455 gcc_assert (TREE_CODE (type) == REFERENCE_TYPE);
1456 gcc_assert (TREE_CODE (conv->type) != REFERENCE_TYPE);
1458 t = TREE_TYPE (type);
1460 /* [over.ics.rank]
1462 When a parameter of reference type binds directly
1463 (_dcl.init.ref_) to an argument expression, the implicit
1464 conversion sequence is the identity conversion, unless the
1465 argument expression has a type that is a derived class of the
1466 parameter type, in which case the implicit conversion sequence is
1467 a derived-to-base Conversion.
1469 If the parameter binds directly to the result of applying a
1470 conversion function to the argument expression, the implicit
1471 conversion sequence is a user-defined conversion sequence
1472 (_over.ics.user_), with the second standard conversion sequence
1473 either an identity conversion or, if the conversion function
1474 returns an entity of a type that is a derived class of the
1475 parameter type, a derived-to-base conversion. */
1476 if (!same_type_ignoring_top_level_qualifiers_p (t, conv->type))
1478 /* Represent the derived-to-base conversion. */
1479 conv = build_conv (ck_base, t, conv);
1480 /* We will actually be binding to the base-class subobject in
1481 the derived class, so we mark this conversion appropriately.
1482 That way, convert_like knows not to generate a temporary. */
1483 conv->need_temporary_p = false;
1485 return build_conv (ck_ref_bind, type, conv);
1488 /* Returns the conversion path from type FROM to reference type TO for
1489 purposes of reference binding. For lvalue binding, either pass a
1490 reference type to FROM or an lvalue expression to EXPR. If the
1491 reference will be bound to a temporary, NEED_TEMPORARY_P is set for
1492 the conversion returned. If C_CAST_P is true, this
1493 conversion is coming from a C-style cast. */
1495 static conversion *
1496 reference_binding (tree rto, tree rfrom, tree expr, bool c_cast_p, int flags,
1497 tsubst_flags_t complain)
1499 conversion *conv = NULL;
1500 tree to = TREE_TYPE (rto);
1501 tree from = rfrom;
1502 tree tfrom;
1503 bool related_p;
1504 bool compatible_p;
1505 cp_lvalue_kind gl_kind;
1506 bool is_lvalue;
1508 if (TREE_CODE (to) == FUNCTION_TYPE && expr && type_unknown_p (expr))
1510 expr = instantiate_type (to, expr, tf_none);
1511 if (expr == error_mark_node)
1512 return NULL;
1513 from = TREE_TYPE (expr);
1516 if (expr && BRACE_ENCLOSED_INITIALIZER_P (expr))
1518 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
1519 /* DR 1288: Otherwise, if the initializer list has a single element
1520 of type E and ... [T's] referenced type is reference-related to E,
1521 the object or reference is initialized from that element... */
1522 if (CONSTRUCTOR_NELTS (expr) == 1)
1524 tree elt = CONSTRUCTOR_ELT (expr, 0)->value;
1525 if (error_operand_p (elt))
1526 return NULL;
1527 tree etype = TREE_TYPE (elt);
1528 if (reference_related_p (to, etype))
1530 expr = elt;
1531 from = etype;
1532 goto skip;
1535 /* Otherwise, if T is a reference type, a prvalue temporary of the
1536 type referenced by T is copy-list-initialized or
1537 direct-list-initialized, depending on the kind of initialization
1538 for the reference, and the reference is bound to that temporary. */
1539 conv = implicit_conversion (to, from, expr, c_cast_p,
1540 flags|LOOKUP_NO_TEMP_BIND, complain);
1541 skip:;
1544 if (TREE_CODE (from) == REFERENCE_TYPE)
1546 from = TREE_TYPE (from);
1547 if (!TYPE_REF_IS_RVALUE (rfrom)
1548 || TREE_CODE (from) == FUNCTION_TYPE)
1549 gl_kind = clk_ordinary;
1550 else
1551 gl_kind = clk_rvalueref;
1553 else if (expr)
1555 gl_kind = lvalue_kind (expr);
1556 if (gl_kind & clk_class)
1557 /* A class prvalue is not a glvalue. */
1558 gl_kind = clk_none;
1560 else
1561 gl_kind = clk_none;
1562 is_lvalue = gl_kind && !(gl_kind & clk_rvalueref);
1564 tfrom = from;
1565 if ((gl_kind & clk_bitfield) != 0)
1566 tfrom = unlowered_expr_type (expr);
1568 /* Figure out whether or not the types are reference-related and
1569 reference compatible. We have do do this after stripping
1570 references from FROM. */
1571 related_p = reference_related_p (to, tfrom);
1572 /* If this is a C cast, first convert to an appropriately qualified
1573 type, so that we can later do a const_cast to the desired type. */
1574 if (related_p && c_cast_p
1575 && !at_least_as_qualified_p (to, tfrom))
1576 to = cp_build_qualified_type (to, cp_type_quals (tfrom));
1577 compatible_p = reference_compatible_p (to, tfrom);
1579 /* Directly bind reference when target expression's type is compatible with
1580 the reference and expression is an lvalue. In DR391, the wording in
1581 [8.5.3/5 dcl.init.ref] is changed to also require direct bindings for
1582 const and rvalue references to rvalues of compatible class type.
1583 We should also do direct bindings for non-class xvalues. */
1584 if (related_p
1585 && (gl_kind
1586 || (!(flags & LOOKUP_NO_TEMP_BIND)
1587 && (CLASS_TYPE_P (from)
1588 || TREE_CODE (from) == ARRAY_TYPE))))
1590 /* [dcl.init.ref]
1592 If the initializer expression
1594 -- is an lvalue (but not an lvalue for a bit-field), and "cv1 T1"
1595 is reference-compatible with "cv2 T2,"
1597 the reference is bound directly to the initializer expression
1598 lvalue.
1600 [...]
1601 If the initializer expression is an rvalue, with T2 a class type,
1602 and "cv1 T1" is reference-compatible with "cv2 T2", the reference
1603 is bound to the object represented by the rvalue or to a sub-object
1604 within that object. */
1606 conv = build_identity_conv (tfrom, expr);
1607 conv = direct_reference_binding (rto, conv);
1609 if (flags & LOOKUP_PREFER_RVALUE)
1610 /* The top-level caller requested that we pretend that the lvalue
1611 be treated as an rvalue. */
1612 conv->rvaluedness_matches_p = TYPE_REF_IS_RVALUE (rto);
1613 else if (TREE_CODE (rfrom) == REFERENCE_TYPE)
1614 /* Handle rvalue reference to function properly. */
1615 conv->rvaluedness_matches_p
1616 = (TYPE_REF_IS_RVALUE (rto) == TYPE_REF_IS_RVALUE (rfrom));
1617 else
1618 conv->rvaluedness_matches_p
1619 = (TYPE_REF_IS_RVALUE (rto) == !is_lvalue);
1621 if ((gl_kind & clk_bitfield) != 0
1622 || ((gl_kind & clk_packed) != 0 && !TYPE_PACKED (to)))
1623 /* For the purposes of overload resolution, we ignore the fact
1624 this expression is a bitfield or packed field. (In particular,
1625 [over.ics.ref] says specifically that a function with a
1626 non-const reference parameter is viable even if the
1627 argument is a bitfield.)
1629 However, when we actually call the function we must create
1630 a temporary to which to bind the reference. If the
1631 reference is volatile, or isn't const, then we cannot make
1632 a temporary, so we just issue an error when the conversion
1633 actually occurs. */
1634 conv->need_temporary_p = true;
1636 /* Don't allow binding of lvalues (other than function lvalues) to
1637 rvalue references. */
1638 if (is_lvalue && TYPE_REF_IS_RVALUE (rto)
1639 && TREE_CODE (to) != FUNCTION_TYPE
1640 && !(flags & LOOKUP_PREFER_RVALUE))
1641 conv->bad_p = true;
1643 /* Nor the reverse. */
1644 if (!is_lvalue && !TYPE_REF_IS_RVALUE (rto)
1645 && (!CP_TYPE_CONST_NON_VOLATILE_P (to)
1646 || (flags & LOOKUP_NO_RVAL_BIND))
1647 && TREE_CODE (to) != FUNCTION_TYPE)
1648 conv->bad_p = true;
1650 if (!compatible_p)
1651 conv->bad_p = true;
1653 return conv;
1655 /* [class.conv.fct] A conversion function is never used to convert a
1656 (possibly cv-qualified) object to the (possibly cv-qualified) same
1657 object type (or a reference to it), to a (possibly cv-qualified) base
1658 class of that type (or a reference to it).... */
1659 else if (CLASS_TYPE_P (from) && !related_p
1660 && !(flags & LOOKUP_NO_CONVERSION))
1662 /* [dcl.init.ref]
1664 If the initializer expression
1666 -- has a class type (i.e., T2 is a class type) can be
1667 implicitly converted to an lvalue of type "cv3 T3," where
1668 "cv1 T1" is reference-compatible with "cv3 T3". (this
1669 conversion is selected by enumerating the applicable
1670 conversion functions (_over.match.ref_) and choosing the
1671 best one through overload resolution. (_over.match_).
1673 the reference is bound to the lvalue result of the conversion
1674 in the second case. */
1675 z_candidate *cand = build_user_type_conversion_1 (rto, expr, flags,
1676 complain);
1677 if (cand)
1678 return cand->second_conv;
1681 /* From this point on, we conceptually need temporaries, even if we
1682 elide them. Only the cases above are "direct bindings". */
1683 if (flags & LOOKUP_NO_TEMP_BIND)
1684 return NULL;
1686 /* [over.ics.rank]
1688 When a parameter of reference type is not bound directly to an
1689 argument expression, the conversion sequence is the one required
1690 to convert the argument expression to the underlying type of the
1691 reference according to _over.best.ics_. Conceptually, this
1692 conversion sequence corresponds to copy-initializing a temporary
1693 of the underlying type with the argument expression. Any
1694 difference in top-level cv-qualification is subsumed by the
1695 initialization itself and does not constitute a conversion. */
1697 /* We're generating a temporary now, but don't bind any more in the
1698 conversion (specifically, don't slice the temporary returned by a
1699 conversion operator). */
1700 flags |= LOOKUP_NO_TEMP_BIND;
1702 /* Core issue 899: When [copy-]initializing a temporary to be bound
1703 to the first parameter of a copy constructor (12.8) called with
1704 a single argument in the context of direct-initialization,
1705 explicit conversion functions are also considered.
1707 So don't set LOOKUP_ONLYCONVERTING in that case. */
1708 if (!(flags & LOOKUP_COPY_PARM))
1709 flags |= LOOKUP_ONLYCONVERTING;
1711 if (!conv)
1712 conv = implicit_conversion (to, from, expr, c_cast_p,
1713 flags, complain);
1714 if (!conv)
1715 return NULL;
1717 if (conv->user_conv_p)
1719 /* If initializing the temporary used a conversion function,
1720 recalculate the second conversion sequence. */
1721 for (conversion *t = conv; t; t = next_conversion (t))
1722 if (t->kind == ck_user
1723 && DECL_CONV_FN_P (t->cand->fn))
1725 tree ftype = TREE_TYPE (TREE_TYPE (t->cand->fn));
1726 int sflags = (flags|LOOKUP_NO_CONVERSION)&~LOOKUP_NO_TEMP_BIND;
1727 conversion *new_second
1728 = reference_binding (rto, ftype, NULL_TREE, c_cast_p,
1729 sflags, complain);
1730 if (!new_second)
1731 return NULL;
1732 return merge_conversion_sequences (t, new_second);
1736 conv = build_conv (ck_ref_bind, rto, conv);
1737 /* This reference binding, unlike those above, requires the
1738 creation of a temporary. */
1739 conv->need_temporary_p = true;
1740 conv->rvaluedness_matches_p = TYPE_REF_IS_RVALUE (rto);
1742 /* [dcl.init.ref]
1744 Otherwise, the reference shall be an lvalue reference to a
1745 non-volatile const type, or the reference shall be an rvalue
1746 reference. */
1747 if (!CP_TYPE_CONST_NON_VOLATILE_P (to) && !TYPE_REF_IS_RVALUE (rto))
1748 conv->bad_p = true;
1750 /* [dcl.init.ref]
1752 Otherwise, a temporary of type "cv1 T1" is created and
1753 initialized from the initializer expression using the rules for a
1754 non-reference copy initialization. If T1 is reference-related to
1755 T2, cv1 must be the same cv-qualification as, or greater
1756 cv-qualification than, cv2; otherwise, the program is ill-formed. */
1757 if (related_p && !at_least_as_qualified_p (to, from))
1758 conv->bad_p = true;
1760 return conv;
1763 /* Returns the implicit conversion sequence (see [over.ics]) from type
1764 FROM to type TO. The optional expression EXPR may affect the
1765 conversion. FLAGS are the usual overloading flags. If C_CAST_P is
1766 true, this conversion is coming from a C-style cast. */
1768 static conversion *
1769 implicit_conversion (tree to, tree from, tree expr, bool c_cast_p,
1770 int flags, tsubst_flags_t complain)
1772 conversion *conv;
1774 if (from == error_mark_node || to == error_mark_node
1775 || expr == error_mark_node)
1776 return NULL;
1778 /* Other flags only apply to the primary function in overload
1779 resolution, or after we've chosen one. */
1780 flags &= (LOOKUP_ONLYCONVERTING|LOOKUP_NO_CONVERSION|LOOKUP_COPY_PARM
1781 |LOOKUP_NO_TEMP_BIND|LOOKUP_NO_RVAL_BIND|LOOKUP_PREFER_RVALUE
1782 |LOOKUP_NO_NARROWING|LOOKUP_PROTECT|LOOKUP_NO_NON_INTEGRAL);
1784 /* FIXME: actually we don't want warnings either, but we can't just
1785 have 'complain &= ~(tf_warning|tf_error)' because it would cause
1786 the regression of, eg, g++.old-deja/g++.benjamin/16077.C.
1787 We really ought not to issue that warning until we've committed
1788 to that conversion. */
1789 complain &= ~tf_error;
1791 if (TREE_CODE (to) == REFERENCE_TYPE)
1792 conv = reference_binding (to, from, expr, c_cast_p, flags, complain);
1793 else
1794 conv = standard_conversion (to, from, expr, c_cast_p, flags);
1796 if (conv)
1797 return conv;
1799 if (expr && BRACE_ENCLOSED_INITIALIZER_P (expr))
1801 if (is_std_init_list (to))
1802 return build_list_conv (to, expr, flags, complain);
1804 /* As an extension, allow list-initialization of _Complex. */
1805 if (TREE_CODE (to) == COMPLEX_TYPE)
1807 conv = build_complex_conv (to, expr, flags, complain);
1808 if (conv)
1809 return conv;
1812 /* Allow conversion from an initializer-list with one element to a
1813 scalar type. */
1814 if (SCALAR_TYPE_P (to))
1816 int nelts = CONSTRUCTOR_NELTS (expr);
1817 tree elt;
1819 if (nelts == 0)
1820 elt = build_value_init (to, tf_none);
1821 else if (nelts == 1)
1822 elt = CONSTRUCTOR_ELT (expr, 0)->value;
1823 else
1824 elt = error_mark_node;
1826 conv = implicit_conversion (to, TREE_TYPE (elt), elt,
1827 c_cast_p, flags, complain);
1828 if (conv)
1830 conv->check_narrowing = true;
1831 if (BRACE_ENCLOSED_INITIALIZER_P (elt))
1832 /* Too many levels of braces, i.e. '{{1}}'. */
1833 conv->bad_p = true;
1834 return conv;
1837 else if (TREE_CODE (to) == ARRAY_TYPE)
1838 return build_array_conv (to, expr, flags, complain);
1841 if (expr != NULL_TREE
1842 && (MAYBE_CLASS_TYPE_P (from)
1843 || MAYBE_CLASS_TYPE_P (to))
1844 && (flags & LOOKUP_NO_CONVERSION) == 0)
1846 struct z_candidate *cand;
1848 if (CLASS_TYPE_P (to)
1849 && BRACE_ENCLOSED_INITIALIZER_P (expr)
1850 && !CLASSTYPE_NON_AGGREGATE (complete_type (to)))
1851 return build_aggr_conv (to, expr, flags, complain);
1853 cand = build_user_type_conversion_1 (to, expr, flags, complain);
1854 if (cand)
1855 conv = cand->second_conv;
1857 /* We used to try to bind a reference to a temporary here, but that
1858 is now handled after the recursive call to this function at the end
1859 of reference_binding. */
1860 return conv;
1863 return NULL;
1866 /* Add a new entry to the list of candidates. Used by the add_*_candidate
1867 functions. ARGS will not be changed until a single candidate is
1868 selected. */
1870 static struct z_candidate *
1871 add_candidate (struct z_candidate **candidates,
1872 tree fn, tree first_arg, const vec<tree, va_gc> *args,
1873 size_t num_convs, conversion **convs,
1874 tree access_path, tree conversion_path,
1875 int viable, struct rejection_reason *reason,
1876 int flags)
1878 struct z_candidate *cand = (struct z_candidate *)
1879 conversion_obstack_alloc (sizeof (struct z_candidate));
1881 cand->fn = fn;
1882 cand->first_arg = first_arg;
1883 cand->args = args;
1884 cand->convs = convs;
1885 cand->num_convs = num_convs;
1886 cand->access_path = access_path;
1887 cand->conversion_path = conversion_path;
1888 cand->viable = viable;
1889 cand->reason = reason;
1890 cand->next = *candidates;
1891 cand->flags = flags;
1892 *candidates = cand;
1894 return cand;
1897 /* Return the number of remaining arguments in the parameter list
1898 beginning with ARG. */
1900 static int
1901 remaining_arguments (tree arg)
1903 int n;
1905 for (n = 0; arg != NULL_TREE && arg != void_list_node;
1906 arg = TREE_CHAIN (arg))
1907 n++;
1909 return n;
1912 /* Create an overload candidate for the function or method FN called
1913 with the argument list FIRST_ARG/ARGS and add it to CANDIDATES.
1914 FLAGS is passed on to implicit_conversion.
1916 This does not change ARGS.
1918 CTYPE, if non-NULL, is the type we want to pretend this function
1919 comes from for purposes of overload resolution. */
1921 static struct z_candidate *
1922 add_function_candidate (struct z_candidate **candidates,
1923 tree fn, tree ctype, tree first_arg,
1924 const vec<tree, va_gc> *args, tree access_path,
1925 tree conversion_path, int flags,
1926 tsubst_flags_t complain)
1928 tree parmlist = TYPE_ARG_TYPES (TREE_TYPE (fn));
1929 int i, len;
1930 conversion **convs;
1931 tree parmnode;
1932 tree orig_first_arg = first_arg;
1933 int skip;
1934 int viable = 1;
1935 struct rejection_reason *reason = NULL;
1937 /* At this point we should not see any functions which haven't been
1938 explicitly declared, except for friend functions which will have
1939 been found using argument dependent lookup. */
1940 gcc_assert (!DECL_ANTICIPATED (fn) || DECL_HIDDEN_FRIEND_P (fn));
1942 /* The `this', `in_chrg' and VTT arguments to constructors are not
1943 considered in overload resolution. */
1944 if (DECL_CONSTRUCTOR_P (fn))
1946 parmlist = skip_artificial_parms_for (fn, parmlist);
1947 skip = num_artificial_parms_for (fn);
1948 if (skip > 0 && first_arg != NULL_TREE)
1950 --skip;
1951 first_arg = NULL_TREE;
1954 else
1955 skip = 0;
1957 len = vec_safe_length (args) - skip + (first_arg != NULL_TREE ? 1 : 0);
1958 convs = alloc_conversions (len);
1960 /* 13.3.2 - Viable functions [over.match.viable]
1961 First, to be a viable function, a candidate function shall have enough
1962 parameters to agree in number with the arguments in the list.
1964 We need to check this first; otherwise, checking the ICSes might cause
1965 us to produce an ill-formed template instantiation. */
1967 parmnode = parmlist;
1968 for (i = 0; i < len; ++i)
1970 if (parmnode == NULL_TREE || parmnode == void_list_node)
1971 break;
1972 parmnode = TREE_CHAIN (parmnode);
1975 if ((i < len && parmnode)
1976 || !sufficient_parms_p (parmnode))
1978 int remaining = remaining_arguments (parmnode);
1979 viable = 0;
1980 reason = arity_rejection (first_arg, i + remaining, len);
1982 /* When looking for a function from a subobject from an implicit
1983 copy/move constructor/operator=, don't consider anything that takes (a
1984 reference to) an unrelated type. See c++/44909 and core 1092. */
1985 else if (parmlist && (flags & LOOKUP_DEFAULTED))
1987 if (DECL_CONSTRUCTOR_P (fn))
1988 i = 1;
1989 else if (DECL_ASSIGNMENT_OPERATOR_P (fn)
1990 && DECL_OVERLOADED_OPERATOR_P (fn) == NOP_EXPR)
1991 i = 2;
1992 else
1993 i = 0;
1994 if (i && len == i)
1996 parmnode = chain_index (i-1, parmlist);
1997 if (!reference_related_p (non_reference (TREE_VALUE (parmnode)),
1998 ctype))
1999 viable = 0;
2002 /* This only applies at the top level. */
2003 flags &= ~LOOKUP_DEFAULTED;
2006 if (! viable)
2007 goto out;
2009 /* Second, for F to be a viable function, there shall exist for each
2010 argument an implicit conversion sequence that converts that argument
2011 to the corresponding parameter of F. */
2013 parmnode = parmlist;
2015 for (i = 0; i < len; ++i)
2017 tree argtype, to_type;
2018 tree arg;
2019 conversion *t;
2020 int is_this;
2022 if (parmnode == void_list_node)
2023 break;
2025 if (i == 0 && first_arg != NULL_TREE)
2026 arg = first_arg;
2027 else
2028 arg = CONST_CAST_TREE (
2029 (*args)[i + skip - (first_arg != NULL_TREE ? 1 : 0)]);
2030 argtype = lvalue_type (arg);
2032 is_this = (i == 0 && DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
2033 && ! DECL_CONSTRUCTOR_P (fn));
2035 if (parmnode)
2037 tree parmtype = TREE_VALUE (parmnode);
2038 int lflags = flags;
2040 parmnode = TREE_CHAIN (parmnode);
2042 /* The type of the implicit object parameter ('this') for
2043 overload resolution is not always the same as for the
2044 function itself; conversion functions are considered to
2045 be members of the class being converted, and functions
2046 introduced by a using-declaration are considered to be
2047 members of the class that uses them.
2049 Since build_over_call ignores the ICS for the `this'
2050 parameter, we can just change the parm type. */
2051 if (ctype && is_this)
2053 parmtype = cp_build_qualified_type
2054 (ctype, cp_type_quals (TREE_TYPE (parmtype)));
2055 if (FUNCTION_REF_QUALIFIED (TREE_TYPE (fn)))
2057 /* If the function has a ref-qualifier, the implicit
2058 object parameter has reference type. */
2059 bool rv = FUNCTION_RVALUE_QUALIFIED (TREE_TYPE (fn));
2060 parmtype = cp_build_reference_type (parmtype, rv);
2061 /* The special handling of 'this' conversions in compare_ics
2062 does not apply if there is a ref-qualifier. */
2063 is_this = false;
2065 else
2067 parmtype = build_pointer_type (parmtype);
2068 arg = build_this (arg);
2069 argtype = lvalue_type (arg);
2073 /* Core issue 899: When [copy-]initializing a temporary to be bound
2074 to the first parameter of a copy constructor (12.8) called with
2075 a single argument in the context of direct-initialization,
2076 explicit conversion functions are also considered.
2078 So set LOOKUP_COPY_PARM to let reference_binding know that
2079 it's being called in that context. We generalize the above
2080 to handle move constructors and template constructors as well;
2081 the standardese should soon be updated similarly. */
2082 if (ctype && i == 0 && (len-skip == 1)
2083 && DECL_CONSTRUCTOR_P (fn)
2084 && parmtype != error_mark_node
2085 && (same_type_ignoring_top_level_qualifiers_p
2086 (non_reference (parmtype), ctype)))
2088 if (!(flags & LOOKUP_ONLYCONVERTING))
2089 lflags |= LOOKUP_COPY_PARM;
2090 /* We allow user-defined conversions within init-lists, but
2091 don't list-initialize the copy parm, as that would mean
2092 using two levels of braces for the same type. */
2093 if ((flags & LOOKUP_LIST_INIT_CTOR)
2094 && BRACE_ENCLOSED_INITIALIZER_P (arg))
2095 lflags |= LOOKUP_NO_CONVERSION;
2097 else
2098 lflags |= LOOKUP_ONLYCONVERTING;
2100 t = implicit_conversion (parmtype, argtype, arg,
2101 /*c_cast_p=*/false, lflags, complain);
2102 to_type = parmtype;
2104 else
2106 t = build_identity_conv (argtype, arg);
2107 t->ellipsis_p = true;
2108 to_type = argtype;
2111 if (t && is_this)
2112 t->this_p = true;
2114 convs[i] = t;
2115 if (! t)
2117 viable = 0;
2118 reason = arg_conversion_rejection (first_arg, i, argtype, to_type);
2119 break;
2122 if (t->bad_p)
2124 viable = -1;
2125 reason = bad_arg_conversion_rejection (first_arg, i, arg, to_type);
2129 out:
2130 return add_candidate (candidates, fn, orig_first_arg, args, len, convs,
2131 access_path, conversion_path, viable, reason, flags);
2134 /* Create an overload candidate for the conversion function FN which will
2135 be invoked for expression OBJ, producing a pointer-to-function which
2136 will in turn be called with the argument list FIRST_ARG/ARGLIST,
2137 and add it to CANDIDATES. This does not change ARGLIST. FLAGS is
2138 passed on to implicit_conversion.
2140 Actually, we don't really care about FN; we care about the type it
2141 converts to. There may be multiple conversion functions that will
2142 convert to that type, and we rely on build_user_type_conversion_1 to
2143 choose the best one; so when we create our candidate, we record the type
2144 instead of the function. */
2146 static struct z_candidate *
2147 add_conv_candidate (struct z_candidate **candidates, tree fn, tree obj,
2148 tree first_arg, const vec<tree, va_gc> *arglist,
2149 tree access_path, tree conversion_path,
2150 tsubst_flags_t complain)
2152 tree totype = TREE_TYPE (TREE_TYPE (fn));
2153 int i, len, viable, flags;
2154 tree parmlist, parmnode;
2155 conversion **convs;
2156 struct rejection_reason *reason;
2158 for (parmlist = totype; TREE_CODE (parmlist) != FUNCTION_TYPE; )
2159 parmlist = TREE_TYPE (parmlist);
2160 parmlist = TYPE_ARG_TYPES (parmlist);
2162 len = vec_safe_length (arglist) + (first_arg != NULL_TREE ? 1 : 0) + 1;
2163 convs = alloc_conversions (len);
2164 parmnode = parmlist;
2165 viable = 1;
2166 flags = LOOKUP_IMPLICIT;
2167 reason = NULL;
2169 /* Don't bother looking up the same type twice. */
2170 if (*candidates && (*candidates)->fn == totype)
2171 return NULL;
2173 for (i = 0; i < len; ++i)
2175 tree arg, argtype, convert_type = NULL_TREE;
2176 conversion *t;
2178 if (i == 0)
2179 arg = obj;
2180 else if (i == 1 && first_arg != NULL_TREE)
2181 arg = first_arg;
2182 else
2183 arg = (*arglist)[i - (first_arg != NULL_TREE ? 1 : 0) - 1];
2184 argtype = lvalue_type (arg);
2186 if (i == 0)
2188 t = implicit_conversion (totype, argtype, arg, /*c_cast_p=*/false,
2189 flags, complain);
2190 convert_type = totype;
2192 else if (parmnode == void_list_node)
2193 break;
2194 else if (parmnode)
2196 t = implicit_conversion (TREE_VALUE (parmnode), argtype, arg,
2197 /*c_cast_p=*/false, flags, complain);
2198 convert_type = TREE_VALUE (parmnode);
2200 else
2202 t = build_identity_conv (argtype, arg);
2203 t->ellipsis_p = true;
2204 convert_type = argtype;
2207 convs[i] = t;
2208 if (! t)
2209 break;
2211 if (t->bad_p)
2213 viable = -1;
2214 reason = bad_arg_conversion_rejection (NULL_TREE, i, arg, convert_type);
2217 if (i == 0)
2218 continue;
2220 if (parmnode)
2221 parmnode = TREE_CHAIN (parmnode);
2224 if (i < len
2225 || ! sufficient_parms_p (parmnode))
2227 int remaining = remaining_arguments (parmnode);
2228 viable = 0;
2229 reason = arity_rejection (NULL_TREE, i + remaining, len);
2232 return add_candidate (candidates, totype, first_arg, arglist, len, convs,
2233 access_path, conversion_path, viable, reason, flags);
2236 static void
2237 build_builtin_candidate (struct z_candidate **candidates, tree fnname,
2238 tree type1, tree type2, tree *args, tree *argtypes,
2239 int flags, tsubst_flags_t complain)
2241 conversion *t;
2242 conversion **convs;
2243 size_t num_convs;
2244 int viable = 1, i;
2245 tree types[2];
2246 struct rejection_reason *reason = NULL;
2248 types[0] = type1;
2249 types[1] = type2;
2251 num_convs = args[2] ? 3 : (args[1] ? 2 : 1);
2252 convs = alloc_conversions (num_convs);
2254 /* TRUTH_*_EXPR do "contextual conversion to bool", which means explicit
2255 conversion ops are allowed. We handle that here by just checking for
2256 boolean_type_node because other operators don't ask for it. COND_EXPR
2257 also does contextual conversion to bool for the first operand, but we
2258 handle that in build_conditional_expr, and type1 here is operand 2. */
2259 if (type1 != boolean_type_node)
2260 flags |= LOOKUP_ONLYCONVERTING;
2262 for (i = 0; i < 2; ++i)
2264 if (! args[i])
2265 break;
2267 t = implicit_conversion (types[i], argtypes[i], args[i],
2268 /*c_cast_p=*/false, flags, complain);
2269 if (! t)
2271 viable = 0;
2272 /* We need something for printing the candidate. */
2273 t = build_identity_conv (types[i], NULL_TREE);
2274 reason = arg_conversion_rejection (NULL_TREE, i, argtypes[i],
2275 types[i]);
2277 else if (t->bad_p)
2279 viable = 0;
2280 reason = bad_arg_conversion_rejection (NULL_TREE, i, args[i],
2281 types[i]);
2283 convs[i] = t;
2286 /* For COND_EXPR we rearranged the arguments; undo that now. */
2287 if (args[2])
2289 convs[2] = convs[1];
2290 convs[1] = convs[0];
2291 t = implicit_conversion (boolean_type_node, argtypes[2], args[2],
2292 /*c_cast_p=*/false, flags,
2293 complain);
2294 if (t)
2295 convs[0] = t;
2296 else
2298 viable = 0;
2299 reason = arg_conversion_rejection (NULL_TREE, 0, argtypes[2],
2300 boolean_type_node);
2304 add_candidate (candidates, fnname, /*first_arg=*/NULL_TREE, /*args=*/NULL,
2305 num_convs, convs,
2306 /*access_path=*/NULL_TREE,
2307 /*conversion_path=*/NULL_TREE,
2308 viable, reason, flags);
2311 static bool
2312 is_complete (tree t)
2314 return COMPLETE_TYPE_P (complete_type (t));
2317 /* Returns nonzero if TYPE is a promoted arithmetic type. */
2319 static bool
2320 promoted_arithmetic_type_p (tree type)
2322 /* [over.built]
2324 In this section, the term promoted integral type is used to refer
2325 to those integral types which are preserved by integral promotion
2326 (including e.g. int and long but excluding e.g. char).
2327 Similarly, the term promoted arithmetic type refers to promoted
2328 integral types plus floating types. */
2329 return ((CP_INTEGRAL_TYPE_P (type)
2330 && same_type_p (type_promotes_to (type), type))
2331 || TREE_CODE (type) == REAL_TYPE);
2334 /* Create any builtin operator overload candidates for the operator in
2335 question given the converted operand types TYPE1 and TYPE2. The other
2336 args are passed through from add_builtin_candidates to
2337 build_builtin_candidate.
2339 TYPE1 and TYPE2 may not be permissible, and we must filter them.
2340 If CODE is requires candidates operands of the same type of the kind
2341 of which TYPE1 and TYPE2 are, we add both candidates
2342 CODE (TYPE1, TYPE1) and CODE (TYPE2, TYPE2). */
2344 static void
2345 add_builtin_candidate (struct z_candidate **candidates, enum tree_code code,
2346 enum tree_code code2, tree fnname, tree type1,
2347 tree type2, tree *args, tree *argtypes, int flags,
2348 tsubst_flags_t complain)
2350 switch (code)
2352 case POSTINCREMENT_EXPR:
2353 case POSTDECREMENT_EXPR:
2354 args[1] = integer_zero_node;
2355 type2 = integer_type_node;
2356 break;
2357 default:
2358 break;
2361 switch (code)
2364 /* 4 For every pair T, VQ), where T is an arithmetic or enumeration type,
2365 and VQ is either volatile or empty, there exist candidate operator
2366 functions of the form
2367 VQ T& operator++(VQ T&);
2368 T operator++(VQ T&, int);
2369 5 For every pair T, VQ), where T is an enumeration type or an arithmetic
2370 type other than bool, and VQ is either volatile or empty, there exist
2371 candidate operator functions of the form
2372 VQ T& operator--(VQ T&);
2373 T operator--(VQ T&, int);
2374 6 For every pair T, VQ), where T is a cv-qualified or cv-unqualified
2375 complete object type, and VQ is either volatile or empty, there exist
2376 candidate operator functions of the form
2377 T*VQ& operator++(T*VQ&);
2378 T*VQ& operator--(T*VQ&);
2379 T* operator++(T*VQ&, int);
2380 T* operator--(T*VQ&, int); */
2382 case POSTDECREMENT_EXPR:
2383 case PREDECREMENT_EXPR:
2384 if (TREE_CODE (type1) == BOOLEAN_TYPE)
2385 return;
2386 case POSTINCREMENT_EXPR:
2387 case PREINCREMENT_EXPR:
2388 if (ARITHMETIC_TYPE_P (type1) || TYPE_PTROB_P (type1))
2390 type1 = build_reference_type (type1);
2391 break;
2393 return;
2395 /* 7 For every cv-qualified or cv-unqualified object type T, there
2396 exist candidate operator functions of the form
2398 T& operator*(T*);
2400 8 For every function type T, there exist candidate operator functions of
2401 the form
2402 T& operator*(T*); */
2404 case INDIRECT_REF:
2405 if (TYPE_PTR_P (type1)
2406 && (TYPE_PTROB_P (type1)
2407 || TREE_CODE (TREE_TYPE (type1)) == FUNCTION_TYPE))
2408 break;
2409 return;
2411 /* 9 For every type T, there exist candidate operator functions of the form
2412 T* operator+(T*);
2414 10For every promoted arithmetic type T, there exist candidate operator
2415 functions of the form
2416 T operator+(T);
2417 T operator-(T); */
2419 case UNARY_PLUS_EXPR: /* unary + */
2420 if (TYPE_PTR_P (type1))
2421 break;
2422 case NEGATE_EXPR:
2423 if (ARITHMETIC_TYPE_P (type1))
2424 break;
2425 return;
2427 /* 11For every promoted integral type T, there exist candidate operator
2428 functions of the form
2429 T operator~(T); */
2431 case BIT_NOT_EXPR:
2432 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1))
2433 break;
2434 return;
2436 /* 12For every quintuple C1, C2, T, CV1, CV2), where C2 is a class type, C1
2437 is the same type as C2 or is a derived class of C2, T is a complete
2438 object type or a function type, and CV1 and CV2 are cv-qualifier-seqs,
2439 there exist candidate operator functions of the form
2440 CV12 T& operator->*(CV1 C1*, CV2 T C2::*);
2441 where CV12 is the union of CV1 and CV2. */
2443 case MEMBER_REF:
2444 if (TYPE_PTR_P (type1) && TYPE_PTRMEM_P (type2))
2446 tree c1 = TREE_TYPE (type1);
2447 tree c2 = TYPE_PTRMEM_CLASS_TYPE (type2);
2449 if (MAYBE_CLASS_TYPE_P (c1) && DERIVED_FROM_P (c2, c1)
2450 && (TYPE_PTRMEMFUNC_P (type2)
2451 || is_complete (TYPE_PTRMEM_POINTED_TO_TYPE (type2))))
2452 break;
2454 return;
2456 /* 13For every pair of promoted arithmetic types L and R, there exist can-
2457 didate operator functions of the form
2458 LR operator*(L, R);
2459 LR operator/(L, R);
2460 LR operator+(L, R);
2461 LR operator-(L, R);
2462 bool operator<(L, R);
2463 bool operator>(L, R);
2464 bool operator<=(L, R);
2465 bool operator>=(L, R);
2466 bool operator==(L, R);
2467 bool operator!=(L, R);
2468 where LR is the result of the usual arithmetic conversions between
2469 types L and R.
2471 14For every pair of types T and I, where T is a cv-qualified or cv-
2472 unqualified complete object type and I is a promoted integral type,
2473 there exist candidate operator functions of the form
2474 T* operator+(T*, I);
2475 T& operator[](T*, I);
2476 T* operator-(T*, I);
2477 T* operator+(I, T*);
2478 T& operator[](I, T*);
2480 15For every T, where T is a pointer to complete object type, there exist
2481 candidate operator functions of the form112)
2482 ptrdiff_t operator-(T, T);
2484 16For every pointer or enumeration type T, there exist candidate operator
2485 functions of the form
2486 bool operator<(T, T);
2487 bool operator>(T, T);
2488 bool operator<=(T, T);
2489 bool operator>=(T, T);
2490 bool operator==(T, T);
2491 bool operator!=(T, T);
2493 17For every pointer to member type T, there exist candidate operator
2494 functions of the form
2495 bool operator==(T, T);
2496 bool operator!=(T, T); */
2498 case MINUS_EXPR:
2499 if (TYPE_PTROB_P (type1) && TYPE_PTROB_P (type2))
2500 break;
2501 if (TYPE_PTROB_P (type1)
2502 && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2504 type2 = ptrdiff_type_node;
2505 break;
2507 case MULT_EXPR:
2508 case TRUNC_DIV_EXPR:
2509 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2510 break;
2511 return;
2513 case EQ_EXPR:
2514 case NE_EXPR:
2515 if ((TYPE_PTRMEMFUNC_P (type1) && TYPE_PTRMEMFUNC_P (type2))
2516 || (TYPE_PTRDATAMEM_P (type1) && TYPE_PTRDATAMEM_P (type2)))
2517 break;
2518 if (TYPE_PTRMEM_P (type1) && null_ptr_cst_p (args[1]))
2520 type2 = type1;
2521 break;
2523 if (TYPE_PTRMEM_P (type2) && null_ptr_cst_p (args[0]))
2525 type1 = type2;
2526 break;
2528 /* Fall through. */
2529 case LT_EXPR:
2530 case GT_EXPR:
2531 case LE_EXPR:
2532 case GE_EXPR:
2533 case MAX_EXPR:
2534 case MIN_EXPR:
2535 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2536 break;
2537 if (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
2538 break;
2539 if (TREE_CODE (type1) == ENUMERAL_TYPE
2540 && TREE_CODE (type2) == ENUMERAL_TYPE)
2541 break;
2542 if (TYPE_PTR_P (type1)
2543 && null_ptr_cst_p (args[1]))
2545 type2 = type1;
2546 break;
2548 if (null_ptr_cst_p (args[0])
2549 && TYPE_PTR_P (type2))
2551 type1 = type2;
2552 break;
2554 return;
2556 case PLUS_EXPR:
2557 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2558 break;
2559 case ARRAY_REF:
2560 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1) && TYPE_PTROB_P (type2))
2562 type1 = ptrdiff_type_node;
2563 break;
2565 if (TYPE_PTROB_P (type1) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2567 type2 = ptrdiff_type_node;
2568 break;
2570 return;
2572 /* 18For every pair of promoted integral types L and R, there exist candi-
2573 date operator functions of the form
2574 LR operator%(L, R);
2575 LR operator&(L, R);
2576 LR operator^(L, R);
2577 LR operator|(L, R);
2578 L operator<<(L, R);
2579 L operator>>(L, R);
2580 where LR is the result of the usual arithmetic conversions between
2581 types L and R. */
2583 case TRUNC_MOD_EXPR:
2584 case BIT_AND_EXPR:
2585 case BIT_IOR_EXPR:
2586 case BIT_XOR_EXPR:
2587 case LSHIFT_EXPR:
2588 case RSHIFT_EXPR:
2589 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2590 break;
2591 return;
2593 /* 19For every triple L, VQ, R), where L is an arithmetic or enumeration
2594 type, VQ is either volatile or empty, and R is a promoted arithmetic
2595 type, there exist candidate operator functions of the form
2596 VQ L& operator=(VQ L&, R);
2597 VQ L& operator*=(VQ L&, R);
2598 VQ L& operator/=(VQ L&, R);
2599 VQ L& operator+=(VQ L&, R);
2600 VQ L& operator-=(VQ L&, R);
2602 20For every pair T, VQ), where T is any type and VQ is either volatile
2603 or empty, there exist candidate operator functions of the form
2604 T*VQ& operator=(T*VQ&, T*);
2606 21For every pair T, VQ), where T is a pointer to member type and VQ is
2607 either volatile or empty, there exist candidate operator functions of
2608 the form
2609 VQ T& operator=(VQ T&, T);
2611 22For every triple T, VQ, I), where T is a cv-qualified or cv-
2612 unqualified complete object type, VQ is either volatile or empty, and
2613 I is a promoted integral type, there exist candidate operator func-
2614 tions of the form
2615 T*VQ& operator+=(T*VQ&, I);
2616 T*VQ& operator-=(T*VQ&, I);
2618 23For every triple L, VQ, R), where L is an integral or enumeration
2619 type, VQ is either volatile or empty, and R is a promoted integral
2620 type, there exist candidate operator functions of the form
2622 VQ L& operator%=(VQ L&, R);
2623 VQ L& operator<<=(VQ L&, R);
2624 VQ L& operator>>=(VQ L&, R);
2625 VQ L& operator&=(VQ L&, R);
2626 VQ L& operator^=(VQ L&, R);
2627 VQ L& operator|=(VQ L&, R); */
2629 case MODIFY_EXPR:
2630 switch (code2)
2632 case PLUS_EXPR:
2633 case MINUS_EXPR:
2634 if (TYPE_PTROB_P (type1) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2636 type2 = ptrdiff_type_node;
2637 break;
2639 case MULT_EXPR:
2640 case TRUNC_DIV_EXPR:
2641 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2642 break;
2643 return;
2645 case TRUNC_MOD_EXPR:
2646 case BIT_AND_EXPR:
2647 case BIT_IOR_EXPR:
2648 case BIT_XOR_EXPR:
2649 case LSHIFT_EXPR:
2650 case RSHIFT_EXPR:
2651 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type1) && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type2))
2652 break;
2653 return;
2655 case NOP_EXPR:
2656 if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
2657 break;
2658 if ((TYPE_PTRMEMFUNC_P (type1) && TYPE_PTRMEMFUNC_P (type2))
2659 || (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
2660 || (TYPE_PTRDATAMEM_P (type1) && TYPE_PTRDATAMEM_P (type2))
2661 || ((TYPE_PTRMEMFUNC_P (type1)
2662 || TYPE_PTR_P (type1))
2663 && null_ptr_cst_p (args[1])))
2665 type2 = type1;
2666 break;
2668 return;
2670 default:
2671 gcc_unreachable ();
2673 type1 = build_reference_type (type1);
2674 break;
2676 case COND_EXPR:
2677 /* [over.built]
2679 For every pair of promoted arithmetic types L and R, there
2680 exist candidate operator functions of the form
2682 LR operator?(bool, L, R);
2684 where LR is the result of the usual arithmetic conversions
2685 between types L and R.
2687 For every type T, where T is a pointer or pointer-to-member
2688 type, there exist candidate operator functions of the form T
2689 operator?(bool, T, T); */
2691 if (promoted_arithmetic_type_p (type1)
2692 && promoted_arithmetic_type_p (type2))
2693 /* That's OK. */
2694 break;
2696 /* Otherwise, the types should be pointers. */
2697 if (!TYPE_PTR_OR_PTRMEM_P (type1) || !TYPE_PTR_OR_PTRMEM_P (type2))
2698 return;
2700 /* We don't check that the two types are the same; the logic
2701 below will actually create two candidates; one in which both
2702 parameter types are TYPE1, and one in which both parameter
2703 types are TYPE2. */
2704 break;
2706 case REALPART_EXPR:
2707 case IMAGPART_EXPR:
2708 if (ARITHMETIC_TYPE_P (type1))
2709 break;
2710 return;
2712 default:
2713 gcc_unreachable ();
2716 /* Make sure we don't create builtin candidates with dependent types. */
2717 bool u1 = uses_template_parms (type1);
2718 bool u2 = type2 ? uses_template_parms (type2) : false;
2719 if (u1 || u2)
2721 /* Try to recover if one of the types is non-dependent. But if
2722 there's only one type, there's nothing we can do. */
2723 if (!type2)
2724 return;
2725 /* And we lose if both are dependent. */
2726 if (u1 && u2)
2727 return;
2728 /* Or if they have different forms. */
2729 if (TREE_CODE (type1) != TREE_CODE (type2))
2730 return;
2732 if (u1 && !u2)
2733 type1 = type2;
2734 else if (u2 && !u1)
2735 type2 = type1;
2738 /* If we're dealing with two pointer types or two enumeral types,
2739 we need candidates for both of them. */
2740 if (type2 && !same_type_p (type1, type2)
2741 && TREE_CODE (type1) == TREE_CODE (type2)
2742 && (TREE_CODE (type1) == REFERENCE_TYPE
2743 || (TYPE_PTR_P (type1) && TYPE_PTR_P (type2))
2744 || (TYPE_PTRDATAMEM_P (type1) && TYPE_PTRDATAMEM_P (type2))
2745 || TYPE_PTRMEMFUNC_P (type1)
2746 || MAYBE_CLASS_TYPE_P (type1)
2747 || TREE_CODE (type1) == ENUMERAL_TYPE))
2749 if (TYPE_PTR_OR_PTRMEM_P (type1))
2751 tree cptype = composite_pointer_type (type1, type2,
2752 error_mark_node,
2753 error_mark_node,
2754 CPO_CONVERSION,
2755 tf_none);
2756 if (cptype != error_mark_node)
2758 build_builtin_candidate
2759 (candidates, fnname, cptype, cptype, args, argtypes,
2760 flags, complain);
2761 return;
2765 build_builtin_candidate
2766 (candidates, fnname, type1, type1, args, argtypes, flags, complain);
2767 build_builtin_candidate
2768 (candidates, fnname, type2, type2, args, argtypes, flags, complain);
2769 return;
2772 build_builtin_candidate
2773 (candidates, fnname, type1, type2, args, argtypes, flags, complain);
2776 tree
2777 type_decays_to (tree type)
2779 if (TREE_CODE (type) == ARRAY_TYPE)
2780 return build_pointer_type (TREE_TYPE (type));
2781 if (TREE_CODE (type) == FUNCTION_TYPE)
2782 return build_pointer_type (type);
2783 return type;
2786 /* There are three conditions of builtin candidates:
2788 1) bool-taking candidates. These are the same regardless of the input.
2789 2) pointer-pair taking candidates. These are generated for each type
2790 one of the input types converts to.
2791 3) arithmetic candidates. According to the standard, we should generate
2792 all of these, but I'm trying not to...
2794 Here we generate a superset of the possible candidates for this particular
2795 case. That is a subset of the full set the standard defines, plus some
2796 other cases which the standard disallows. add_builtin_candidate will
2797 filter out the invalid set. */
2799 static void
2800 add_builtin_candidates (struct z_candidate **candidates, enum tree_code code,
2801 enum tree_code code2, tree fnname, tree *args,
2802 int flags, tsubst_flags_t complain)
2804 int ref1, i;
2805 int enum_p = 0;
2806 tree type, argtypes[3], t;
2807 /* TYPES[i] is the set of possible builtin-operator parameter types
2808 we will consider for the Ith argument. */
2809 vec<tree, va_gc> *types[2];
2810 unsigned ix;
2812 for (i = 0; i < 3; ++i)
2814 if (args[i])
2815 argtypes[i] = unlowered_expr_type (args[i]);
2816 else
2817 argtypes[i] = NULL_TREE;
2820 switch (code)
2822 /* 4 For every pair T, VQ), where T is an arithmetic or enumeration type,
2823 and VQ is either volatile or empty, there exist candidate operator
2824 functions of the form
2825 VQ T& operator++(VQ T&); */
2827 case POSTINCREMENT_EXPR:
2828 case PREINCREMENT_EXPR:
2829 case POSTDECREMENT_EXPR:
2830 case PREDECREMENT_EXPR:
2831 case MODIFY_EXPR:
2832 ref1 = 1;
2833 break;
2835 /* 24There also exist candidate operator functions of the form
2836 bool operator!(bool);
2837 bool operator&&(bool, bool);
2838 bool operator||(bool, bool); */
2840 case TRUTH_NOT_EXPR:
2841 build_builtin_candidate
2842 (candidates, fnname, boolean_type_node,
2843 NULL_TREE, args, argtypes, flags, complain);
2844 return;
2846 case TRUTH_ORIF_EXPR:
2847 case TRUTH_ANDIF_EXPR:
2848 build_builtin_candidate
2849 (candidates, fnname, boolean_type_node,
2850 boolean_type_node, args, argtypes, flags, complain);
2851 return;
2853 case ADDR_EXPR:
2854 case COMPOUND_EXPR:
2855 case COMPONENT_REF:
2856 return;
2858 case COND_EXPR:
2859 case EQ_EXPR:
2860 case NE_EXPR:
2861 case LT_EXPR:
2862 case LE_EXPR:
2863 case GT_EXPR:
2864 case GE_EXPR:
2865 enum_p = 1;
2866 /* Fall through. */
2868 default:
2869 ref1 = 0;
2872 types[0] = make_tree_vector ();
2873 types[1] = make_tree_vector ();
2875 for (i = 0; i < 2; ++i)
2877 if (! args[i])
2879 else if (MAYBE_CLASS_TYPE_P (argtypes[i]))
2881 tree convs;
2883 if (i == 0 && code == MODIFY_EXPR && code2 == NOP_EXPR)
2884 return;
2886 convs = lookup_conversions (argtypes[i]);
2888 if (code == COND_EXPR)
2890 if (real_lvalue_p (args[i]))
2891 vec_safe_push (types[i], build_reference_type (argtypes[i]));
2893 vec_safe_push (types[i], TYPE_MAIN_VARIANT (argtypes[i]));
2896 else if (! convs)
2897 return;
2899 for (; convs; convs = TREE_CHAIN (convs))
2901 type = TREE_TYPE (convs);
2903 if (i == 0 && ref1
2904 && (TREE_CODE (type) != REFERENCE_TYPE
2905 || CP_TYPE_CONST_P (TREE_TYPE (type))))
2906 continue;
2908 if (code == COND_EXPR && TREE_CODE (type) == REFERENCE_TYPE)
2909 vec_safe_push (types[i], type);
2911 type = non_reference (type);
2912 if (i != 0 || ! ref1)
2914 type = cv_unqualified (type_decays_to (type));
2915 if (enum_p && TREE_CODE (type) == ENUMERAL_TYPE)
2916 vec_safe_push (types[i], type);
2917 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
2918 type = type_promotes_to (type);
2921 if (! vec_member (type, types[i]))
2922 vec_safe_push (types[i], type);
2925 else
2927 if (code == COND_EXPR && real_lvalue_p (args[i]))
2928 vec_safe_push (types[i], build_reference_type (argtypes[i]));
2929 type = non_reference (argtypes[i]);
2930 if (i != 0 || ! ref1)
2932 type = cv_unqualified (type_decays_to (type));
2933 if (enum_p && UNSCOPED_ENUM_P (type))
2934 vec_safe_push (types[i], type);
2935 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
2936 type = type_promotes_to (type);
2938 vec_safe_push (types[i], type);
2942 /* Run through the possible parameter types of both arguments,
2943 creating candidates with those parameter types. */
2944 FOR_EACH_VEC_ELT_REVERSE (*(types[0]), ix, t)
2946 unsigned jx;
2947 tree u;
2949 if (!types[1]->is_empty ())
2950 FOR_EACH_VEC_ELT_REVERSE (*(types[1]), jx, u)
2951 add_builtin_candidate
2952 (candidates, code, code2, fnname, t,
2953 u, args, argtypes, flags, complain);
2954 else
2955 add_builtin_candidate
2956 (candidates, code, code2, fnname, t,
2957 NULL_TREE, args, argtypes, flags, complain);
2960 release_tree_vector (types[0]);
2961 release_tree_vector (types[1]);
2965 /* If TMPL can be successfully instantiated as indicated by
2966 EXPLICIT_TARGS and ARGLIST, adds the instantiation to CANDIDATES.
2968 TMPL is the template. EXPLICIT_TARGS are any explicit template
2969 arguments. ARGLIST is the arguments provided at the call-site.
2970 This does not change ARGLIST. The RETURN_TYPE is the desired type
2971 for conversion operators. If OBJ is NULL_TREE, FLAGS and CTYPE are
2972 as for add_function_candidate. If an OBJ is supplied, FLAGS and
2973 CTYPE are ignored, and OBJ is as for add_conv_candidate. */
2975 static struct z_candidate*
2976 add_template_candidate_real (struct z_candidate **candidates, tree tmpl,
2977 tree ctype, tree explicit_targs, tree first_arg,
2978 const vec<tree, va_gc> *arglist, tree return_type,
2979 tree access_path, tree conversion_path,
2980 int flags, tree obj, unification_kind_t strict,
2981 tsubst_flags_t complain)
2983 int ntparms = DECL_NTPARMS (tmpl);
2984 tree targs = make_tree_vec (ntparms);
2985 unsigned int len = vec_safe_length (arglist);
2986 unsigned int nargs = (first_arg == NULL_TREE ? 0 : 1) + len;
2987 unsigned int skip_without_in_chrg = 0;
2988 tree first_arg_without_in_chrg = first_arg;
2989 tree *args_without_in_chrg;
2990 unsigned int nargs_without_in_chrg;
2991 unsigned int ia, ix;
2992 tree arg;
2993 struct z_candidate *cand;
2994 tree fn;
2995 struct rejection_reason *reason = NULL;
2996 int errs;
2998 /* We don't do deduction on the in-charge parameter, the VTT
2999 parameter or 'this'. */
3000 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (tmpl))
3002 if (first_arg_without_in_chrg != NULL_TREE)
3003 first_arg_without_in_chrg = NULL_TREE;
3004 else
3005 ++skip_without_in_chrg;
3008 if ((DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (tmpl)
3009 || DECL_BASE_CONSTRUCTOR_P (tmpl))
3010 && CLASSTYPE_VBASECLASSES (DECL_CONTEXT (tmpl)))
3012 if (first_arg_without_in_chrg != NULL_TREE)
3013 first_arg_without_in_chrg = NULL_TREE;
3014 else
3015 ++skip_without_in_chrg;
3018 if (len < skip_without_in_chrg)
3019 return NULL;
3021 nargs_without_in_chrg = ((first_arg_without_in_chrg != NULL_TREE ? 1 : 0)
3022 + (len - skip_without_in_chrg));
3023 args_without_in_chrg = XALLOCAVEC (tree, nargs_without_in_chrg);
3024 ia = 0;
3025 if (first_arg_without_in_chrg != NULL_TREE)
3027 args_without_in_chrg[ia] = first_arg_without_in_chrg;
3028 ++ia;
3030 for (ix = skip_without_in_chrg;
3031 vec_safe_iterate (arglist, ix, &arg);
3032 ++ix)
3034 args_without_in_chrg[ia] = arg;
3035 ++ia;
3037 gcc_assert (ia == nargs_without_in_chrg);
3039 errs = errorcount+sorrycount;
3040 fn = fn_type_unification (tmpl, explicit_targs, targs,
3041 args_without_in_chrg,
3042 nargs_without_in_chrg,
3043 return_type, strict, flags, false,
3044 complain & tf_decltype);
3046 if (fn == error_mark_node)
3048 /* Don't repeat unification later if it already resulted in errors. */
3049 if (errorcount+sorrycount == errs)
3050 reason = template_unification_rejection (tmpl, explicit_targs,
3051 targs, args_without_in_chrg,
3052 nargs_without_in_chrg,
3053 return_type, strict, flags);
3054 else
3055 reason = template_unification_error_rejection ();
3056 goto fail;
3059 /* In [class.copy]:
3061 A member function template is never instantiated to perform the
3062 copy of a class object to an object of its class type.
3064 It's a little unclear what this means; the standard explicitly
3065 does allow a template to be used to copy a class. For example,
3068 struct A {
3069 A(A&);
3070 template <class T> A(const T&);
3072 const A f ();
3073 void g () { A a (f ()); }
3075 the member template will be used to make the copy. The section
3076 quoted above appears in the paragraph that forbids constructors
3077 whose only parameter is (a possibly cv-qualified variant of) the
3078 class type, and a logical interpretation is that the intent was
3079 to forbid the instantiation of member templates which would then
3080 have that form. */
3081 if (DECL_CONSTRUCTOR_P (fn) && nargs == 2)
3083 tree arg_types = FUNCTION_FIRST_USER_PARMTYPE (fn);
3084 if (arg_types && same_type_p (TYPE_MAIN_VARIANT (TREE_VALUE (arg_types)),
3085 ctype))
3087 reason = invalid_copy_with_fn_template_rejection ();
3088 goto fail;
3092 if (obj != NULL_TREE)
3093 /* Aha, this is a conversion function. */
3094 cand = add_conv_candidate (candidates, fn, obj, first_arg, arglist,
3095 access_path, conversion_path, complain);
3096 else
3097 cand = add_function_candidate (candidates, fn, ctype,
3098 first_arg, arglist, access_path,
3099 conversion_path, flags, complain);
3100 if (DECL_TI_TEMPLATE (fn) != tmpl)
3101 /* This situation can occur if a member template of a template
3102 class is specialized. Then, instantiate_template might return
3103 an instantiation of the specialization, in which case the
3104 DECL_TI_TEMPLATE field will point at the original
3105 specialization. For example:
3107 template <class T> struct S { template <class U> void f(U);
3108 template <> void f(int) {}; };
3109 S<double> sd;
3110 sd.f(3);
3112 Here, TMPL will be template <class U> S<double>::f(U).
3113 And, instantiate template will give us the specialization
3114 template <> S<double>::f(int). But, the DECL_TI_TEMPLATE field
3115 for this will point at template <class T> template <> S<T>::f(int),
3116 so that we can find the definition. For the purposes of
3117 overload resolution, however, we want the original TMPL. */
3118 cand->template_decl = build_template_info (tmpl, targs);
3119 else
3120 cand->template_decl = DECL_TEMPLATE_INFO (fn);
3121 cand->explicit_targs = explicit_targs;
3123 return cand;
3124 fail:
3125 return add_candidate (candidates, tmpl, first_arg, arglist, nargs, NULL,
3126 access_path, conversion_path, 0, reason, flags);
3130 static struct z_candidate *
3131 add_template_candidate (struct z_candidate **candidates, tree tmpl, tree ctype,
3132 tree explicit_targs, tree first_arg,
3133 const vec<tree, va_gc> *arglist, tree return_type,
3134 tree access_path, tree conversion_path, int flags,
3135 unification_kind_t strict, tsubst_flags_t complain)
3137 return
3138 add_template_candidate_real (candidates, tmpl, ctype,
3139 explicit_targs, first_arg, arglist,
3140 return_type, access_path, conversion_path,
3141 flags, NULL_TREE, strict, complain);
3145 static struct z_candidate *
3146 add_template_conv_candidate (struct z_candidate **candidates, tree tmpl,
3147 tree obj, tree first_arg,
3148 const vec<tree, va_gc> *arglist,
3149 tree return_type, tree access_path,
3150 tree conversion_path, tsubst_flags_t complain)
3152 return
3153 add_template_candidate_real (candidates, tmpl, NULL_TREE, NULL_TREE,
3154 first_arg, arglist, return_type, access_path,
3155 conversion_path, 0, obj, DEDUCE_CONV,
3156 complain);
3159 /* The CANDS are the set of candidates that were considered for
3160 overload resolution. Return the set of viable candidates, or CANDS
3161 if none are viable. If any of the candidates were viable, set
3162 *ANY_VIABLE_P to true. STRICT_P is true if a candidate should be
3163 considered viable only if it is strictly viable. */
3165 static struct z_candidate*
3166 splice_viable (struct z_candidate *cands,
3167 bool strict_p,
3168 bool *any_viable_p)
3170 struct z_candidate *viable;
3171 struct z_candidate **last_viable;
3172 struct z_candidate **cand;
3173 bool found_strictly_viable = false;
3175 /* Be strict inside templates, since build_over_call won't actually
3176 do the conversions to get pedwarns. */
3177 if (processing_template_decl)
3178 strict_p = true;
3180 viable = NULL;
3181 last_viable = &viable;
3182 *any_viable_p = false;
3184 cand = &cands;
3185 while (*cand)
3187 struct z_candidate *c = *cand;
3188 if (!strict_p
3189 && (c->viable == 1 || TREE_CODE (c->fn) == TEMPLATE_DECL))
3191 /* Be strict in the presence of a viable candidate. Also if
3192 there are template candidates, so that we get deduction errors
3193 for them instead of silently preferring a bad conversion. */
3194 strict_p = true;
3195 if (viable && !found_strictly_viable)
3197 /* Put any spliced near matches back onto the main list so
3198 that we see them if there is no strict match. */
3199 *any_viable_p = false;
3200 *last_viable = cands;
3201 cands = viable;
3202 viable = NULL;
3203 last_viable = &viable;
3207 if (strict_p ? c->viable == 1 : c->viable)
3209 *last_viable = c;
3210 *cand = c->next;
3211 c->next = NULL;
3212 last_viable = &c->next;
3213 *any_viable_p = true;
3214 if (c->viable == 1)
3215 found_strictly_viable = true;
3217 else
3218 cand = &c->next;
3221 return viable ? viable : cands;
3224 static bool
3225 any_strictly_viable (struct z_candidate *cands)
3227 for (; cands; cands = cands->next)
3228 if (cands->viable == 1)
3229 return true;
3230 return false;
3233 /* OBJ is being used in an expression like "OBJ.f (...)". In other
3234 words, it is about to become the "this" pointer for a member
3235 function call. Take the address of the object. */
3237 static tree
3238 build_this (tree obj)
3240 /* In a template, we are only concerned about the type of the
3241 expression, so we can take a shortcut. */
3242 if (processing_template_decl)
3243 return build_address (obj);
3245 return cp_build_addr_expr (obj, tf_warning_or_error);
3248 /* Returns true iff functions are equivalent. Equivalent functions are
3249 not '==' only if one is a function-local extern function or if
3250 both are extern "C". */
3252 static inline int
3253 equal_functions (tree fn1, tree fn2)
3255 if (TREE_CODE (fn1) != TREE_CODE (fn2))
3256 return 0;
3257 if (TREE_CODE (fn1) == TEMPLATE_DECL)
3258 return fn1 == fn2;
3259 if (DECL_LOCAL_FUNCTION_P (fn1) || DECL_LOCAL_FUNCTION_P (fn2)
3260 || DECL_EXTERN_C_FUNCTION_P (fn1))
3261 return decls_match (fn1, fn2);
3262 return fn1 == fn2;
3265 /* Print information about a candidate being rejected due to INFO. */
3267 static void
3268 print_conversion_rejection (location_t loc, struct conversion_info *info)
3270 tree from = info->from;
3271 if (!TYPE_P (from))
3272 from = lvalue_type (from);
3273 if (info->n_arg == -1)
3275 /* Conversion of implicit `this' argument failed. */
3276 if (!TYPE_P (info->from))
3277 /* A bad conversion for 'this' must be discarding cv-quals. */
3278 inform (loc, " passing %qT as %<this%> "
3279 "argument discards qualifiers",
3280 from);
3281 else
3282 inform (loc, " no known conversion for implicit "
3283 "%<this%> parameter from %qT to %qT",
3284 from, info->to_type);
3286 else if (!TYPE_P (info->from))
3288 if (info->n_arg >= 0)
3289 inform (loc, " conversion of argument %d would be ill-formed:",
3290 info->n_arg + 1);
3291 perform_implicit_conversion (info->to_type, info->from,
3292 tf_warning_or_error);
3294 else if (info->n_arg == -2)
3295 /* Conversion of conversion function return value failed. */
3296 inform (loc, " no known conversion from %qT to %qT",
3297 from, info->to_type);
3298 else
3299 inform (loc, " no known conversion for argument %d from %qT to %qT",
3300 info->n_arg + 1, from, info->to_type);
3303 /* Print information about a candidate with WANT parameters and we found
3304 HAVE. */
3306 static void
3307 print_arity_information (location_t loc, unsigned int have, unsigned int want)
3309 inform_n (loc, want,
3310 " candidate expects %d argument, %d provided",
3311 " candidate expects %d arguments, %d provided",
3312 want, have);
3315 /* Print information about one overload candidate CANDIDATE. MSGSTR
3316 is the text to print before the candidate itself.
3318 NOTE: Unlike most diagnostic functions in GCC, MSGSTR is expected
3319 to have been run through gettext by the caller. This wart makes
3320 life simpler in print_z_candidates and for the translators. */
3322 static void
3323 print_z_candidate (location_t loc, const char *msgstr,
3324 struct z_candidate *candidate)
3326 const char *msg = (msgstr == NULL
3327 ? ""
3328 : ACONCAT ((msgstr, " ", NULL)));
3329 location_t cloc = location_of (candidate->fn);
3331 if (identifier_p (candidate->fn))
3333 cloc = loc;
3334 if (candidate->num_convs == 3)
3335 inform (cloc, "%s%D(%T, %T, %T) <built-in>", msg, candidate->fn,
3336 candidate->convs[0]->type,
3337 candidate->convs[1]->type,
3338 candidate->convs[2]->type);
3339 else if (candidate->num_convs == 2)
3340 inform (cloc, "%s%D(%T, %T) <built-in>", msg, candidate->fn,
3341 candidate->convs[0]->type,
3342 candidate->convs[1]->type);
3343 else
3344 inform (cloc, "%s%D(%T) <built-in>", msg, candidate->fn,
3345 candidate->convs[0]->type);
3347 else if (TYPE_P (candidate->fn))
3348 inform (cloc, "%s%T <conversion>", msg, candidate->fn);
3349 else if (candidate->viable == -1)
3350 inform (cloc, "%s%#D <near match>", msg, candidate->fn);
3351 else if (DECL_DELETED_FN (candidate->fn))
3352 inform (cloc, "%s%#D <deleted>", msg, candidate->fn);
3353 else
3354 inform (cloc, "%s%#D", msg, candidate->fn);
3355 /* Give the user some information about why this candidate failed. */
3356 if (candidate->reason != NULL)
3358 struct rejection_reason *r = candidate->reason;
3360 switch (r->code)
3362 case rr_arity:
3363 print_arity_information (cloc, r->u.arity.actual,
3364 r->u.arity.expected);
3365 break;
3366 case rr_arg_conversion:
3367 print_conversion_rejection (cloc, &r->u.conversion);
3368 break;
3369 case rr_bad_arg_conversion:
3370 print_conversion_rejection (cloc, &r->u.bad_conversion);
3371 break;
3372 case rr_explicit_conversion:
3373 inform (cloc, " return type %qT of explicit conversion function "
3374 "cannot be converted to %qT with a qualification "
3375 "conversion", r->u.conversion.from,
3376 r->u.conversion.to_type);
3377 break;
3378 case rr_template_conversion:
3379 inform (cloc, " conversion from return type %qT of template "
3380 "conversion function specialization to %qT is not an "
3381 "exact match", r->u.conversion.from,
3382 r->u.conversion.to_type);
3383 break;
3384 case rr_template_unification:
3385 /* We use template_unification_error_rejection if unification caused
3386 actual non-SFINAE errors, in which case we don't need to repeat
3387 them here. */
3388 if (r->u.template_unification.tmpl == NULL_TREE)
3390 inform (cloc, " substitution of deduced template arguments "
3391 "resulted in errors seen above");
3392 break;
3394 /* Re-run template unification with diagnostics. */
3395 inform (cloc, " template argument deduction/substitution failed:");
3396 fn_type_unification (r->u.template_unification.tmpl,
3397 r->u.template_unification.explicit_targs,
3398 (make_tree_vec
3399 (r->u.template_unification.num_targs)),
3400 r->u.template_unification.args,
3401 r->u.template_unification.nargs,
3402 r->u.template_unification.return_type,
3403 r->u.template_unification.strict,
3404 r->u.template_unification.flags,
3405 true, false);
3406 break;
3407 case rr_invalid_copy:
3408 inform (cloc,
3409 " a constructor taking a single argument of its own "
3410 "class type is invalid");
3411 break;
3412 case rr_none:
3413 default:
3414 /* This candidate didn't have any issues or we failed to
3415 handle a particular code. Either way... */
3416 gcc_unreachable ();
3421 static void
3422 print_z_candidates (location_t loc, struct z_candidate *candidates)
3424 struct z_candidate *cand1;
3425 struct z_candidate **cand2;
3426 int n_candidates;
3428 if (!candidates)
3429 return;
3431 /* Remove non-viable deleted candidates. */
3432 cand1 = candidates;
3433 for (cand2 = &cand1; *cand2; )
3435 if (TREE_CODE ((*cand2)->fn) == FUNCTION_DECL
3436 && !(*cand2)->viable
3437 && DECL_DELETED_FN ((*cand2)->fn))
3438 *cand2 = (*cand2)->next;
3439 else
3440 cand2 = &(*cand2)->next;
3442 /* ...if there are any non-deleted ones. */
3443 if (cand1)
3444 candidates = cand1;
3446 /* There may be duplicates in the set of candidates. We put off
3447 checking this condition as long as possible, since we have no way
3448 to eliminate duplicates from a set of functions in less than n^2
3449 time. Now we are about to emit an error message, so it is more
3450 permissible to go slowly. */
3451 for (cand1 = candidates; cand1; cand1 = cand1->next)
3453 tree fn = cand1->fn;
3454 /* Skip builtin candidates and conversion functions. */
3455 if (!DECL_P (fn))
3456 continue;
3457 cand2 = &cand1->next;
3458 while (*cand2)
3460 if (DECL_P ((*cand2)->fn)
3461 && equal_functions (fn, (*cand2)->fn))
3462 *cand2 = (*cand2)->next;
3463 else
3464 cand2 = &(*cand2)->next;
3468 for (n_candidates = 0, cand1 = candidates; cand1; cand1 = cand1->next)
3469 n_candidates++;
3471 for (; candidates; candidates = candidates->next)
3472 print_z_candidate (loc, "candidate:", candidates);
3475 /* USER_SEQ is a user-defined conversion sequence, beginning with a
3476 USER_CONV. STD_SEQ is the standard conversion sequence applied to
3477 the result of the conversion function to convert it to the final
3478 desired type. Merge the two sequences into a single sequence,
3479 and return the merged sequence. */
3481 static conversion *
3482 merge_conversion_sequences (conversion *user_seq, conversion *std_seq)
3484 conversion **t;
3485 bool bad = user_seq->bad_p;
3487 gcc_assert (user_seq->kind == ck_user);
3489 /* Find the end of the second conversion sequence. */
3490 for (t = &std_seq; (*t)->kind != ck_identity; t = &((*t)->u.next))
3492 /* The entire sequence is a user-conversion sequence. */
3493 (*t)->user_conv_p = true;
3494 if (bad)
3495 (*t)->bad_p = true;
3498 /* Replace the identity conversion with the user conversion
3499 sequence. */
3500 *t = user_seq;
3502 return std_seq;
3505 /* Handle overload resolution for initializing an object of class type from
3506 an initializer list. First we look for a suitable constructor that
3507 takes a std::initializer_list; if we don't find one, we then look for a
3508 non-list constructor.
3510 Parameters are as for add_candidates, except that the arguments are in
3511 the form of a CONSTRUCTOR (the initializer list) rather than a vector, and
3512 the RETURN_TYPE parameter is replaced by TOTYPE, the desired type. */
3514 static void
3515 add_list_candidates (tree fns, tree first_arg,
3516 tree init_list, tree totype,
3517 tree explicit_targs, bool template_only,
3518 tree conversion_path, tree access_path,
3519 int flags,
3520 struct z_candidate **candidates,
3521 tsubst_flags_t complain)
3523 vec<tree, va_gc> *args;
3525 gcc_assert (*candidates == NULL);
3527 /* We're looking for a ctor for list-initialization. */
3528 flags |= LOOKUP_LIST_INIT_CTOR;
3529 /* And we don't allow narrowing conversions. We also use this flag to
3530 avoid the copy constructor call for copy-list-initialization. */
3531 flags |= LOOKUP_NO_NARROWING;
3533 /* Always use the default constructor if the list is empty (DR 990). */
3534 if (CONSTRUCTOR_NELTS (init_list) == 0
3535 && TYPE_HAS_DEFAULT_CONSTRUCTOR (totype))
3537 /* If the class has a list ctor, try passing the list as a single
3538 argument first, but only consider list ctors. */
3539 else if (TYPE_HAS_LIST_CTOR (totype))
3541 flags |= LOOKUP_LIST_ONLY;
3542 args = make_tree_vector_single (init_list);
3543 add_candidates (fns, first_arg, args, NULL_TREE,
3544 explicit_targs, template_only, conversion_path,
3545 access_path, flags, candidates, complain);
3546 if (any_strictly_viable (*candidates))
3547 return;
3550 args = ctor_to_vec (init_list);
3552 /* We aren't looking for list-ctors anymore. */
3553 flags &= ~LOOKUP_LIST_ONLY;
3554 /* We allow more user-defined conversions within an init-list. */
3555 flags &= ~LOOKUP_NO_CONVERSION;
3557 add_candidates (fns, first_arg, args, NULL_TREE,
3558 explicit_targs, template_only, conversion_path,
3559 access_path, flags, candidates, complain);
3562 /* Returns the best overload candidate to perform the requested
3563 conversion. This function is used for three the overloading situations
3564 described in [over.match.copy], [over.match.conv], and [over.match.ref].
3565 If TOTYPE is a REFERENCE_TYPE, we're trying to find a direct binding as
3566 per [dcl.init.ref], so we ignore temporary bindings. */
3568 static struct z_candidate *
3569 build_user_type_conversion_1 (tree totype, tree expr, int flags,
3570 tsubst_flags_t complain)
3572 struct z_candidate *candidates, *cand;
3573 tree fromtype;
3574 tree ctors = NULL_TREE;
3575 tree conv_fns = NULL_TREE;
3576 conversion *conv = NULL;
3577 tree first_arg = NULL_TREE;
3578 vec<tree, va_gc> *args = NULL;
3579 bool any_viable_p;
3580 int convflags;
3582 if (!expr)
3583 return NULL;
3585 fromtype = TREE_TYPE (expr);
3587 /* We represent conversion within a hierarchy using RVALUE_CONV and
3588 BASE_CONV, as specified by [over.best.ics]; these become plain
3589 constructor calls, as specified in [dcl.init]. */
3590 gcc_assert (!MAYBE_CLASS_TYPE_P (fromtype) || !MAYBE_CLASS_TYPE_P (totype)
3591 || !DERIVED_FROM_P (totype, fromtype));
3593 if (MAYBE_CLASS_TYPE_P (totype))
3594 /* Use lookup_fnfields_slot instead of lookup_fnfields to avoid
3595 creating a garbage BASELINK; constructors can't be inherited. */
3596 ctors = lookup_fnfields_slot (totype, complete_ctor_identifier);
3598 if (MAYBE_CLASS_TYPE_P (fromtype))
3600 tree to_nonref = non_reference (totype);
3601 if (same_type_ignoring_top_level_qualifiers_p (to_nonref, fromtype) ||
3602 (CLASS_TYPE_P (to_nonref) && CLASS_TYPE_P (fromtype)
3603 && DERIVED_FROM_P (to_nonref, fromtype)))
3605 /* [class.conv.fct] A conversion function is never used to
3606 convert a (possibly cv-qualified) object to the (possibly
3607 cv-qualified) same object type (or a reference to it), to a
3608 (possibly cv-qualified) base class of that type (or a
3609 reference to it)... */
3611 else
3612 conv_fns = lookup_conversions (fromtype);
3615 candidates = 0;
3616 flags |= LOOKUP_NO_CONVERSION;
3617 if (BRACE_ENCLOSED_INITIALIZER_P (expr))
3618 flags |= LOOKUP_NO_NARROWING;
3620 /* It's OK to bind a temporary for converting constructor arguments, but
3621 not in converting the return value of a conversion operator. */
3622 convflags = ((flags & LOOKUP_NO_TEMP_BIND) | LOOKUP_NO_CONVERSION
3623 | (flags & LOOKUP_NO_NARROWING));
3624 flags &= ~LOOKUP_NO_TEMP_BIND;
3626 if (ctors)
3628 int ctorflags = flags;
3630 first_arg = build_dummy_object (totype);
3632 /* We should never try to call the abstract or base constructor
3633 from here. */
3634 gcc_assert (!DECL_HAS_IN_CHARGE_PARM_P (OVL_CURRENT (ctors))
3635 && !DECL_HAS_VTT_PARM_P (OVL_CURRENT (ctors)));
3637 if (BRACE_ENCLOSED_INITIALIZER_P (expr))
3639 /* List-initialization. */
3640 add_list_candidates (ctors, first_arg, expr, totype, NULL_TREE,
3641 false, TYPE_BINFO (totype), TYPE_BINFO (totype),
3642 ctorflags, &candidates, complain);
3644 else
3646 args = make_tree_vector_single (expr);
3647 add_candidates (ctors, first_arg, args, NULL_TREE, NULL_TREE, false,
3648 TYPE_BINFO (totype), TYPE_BINFO (totype),
3649 ctorflags, &candidates, complain);
3652 for (cand = candidates; cand; cand = cand->next)
3654 cand->second_conv = build_identity_conv (totype, NULL_TREE);
3656 /* If totype isn't a reference, and LOOKUP_NO_TEMP_BIND isn't
3657 set, then this is copy-initialization. In that case, "The
3658 result of the call is then used to direct-initialize the
3659 object that is the destination of the copy-initialization."
3660 [dcl.init]
3662 We represent this in the conversion sequence with an
3663 rvalue conversion, which means a constructor call. */
3664 if (TREE_CODE (totype) != REFERENCE_TYPE
3665 && !(convflags & LOOKUP_NO_TEMP_BIND))
3666 cand->second_conv
3667 = build_conv (ck_rvalue, totype, cand->second_conv);
3671 if (conv_fns)
3672 first_arg = expr;
3674 for (; conv_fns; conv_fns = TREE_CHAIN (conv_fns))
3676 tree conversion_path = TREE_PURPOSE (conv_fns);
3677 struct z_candidate *old_candidates;
3679 /* If we are called to convert to a reference type, we are trying to
3680 find a direct binding, so don't even consider temporaries. If
3681 we don't find a direct binding, the caller will try again to
3682 look for a temporary binding. */
3683 if (TREE_CODE (totype) == REFERENCE_TYPE)
3684 convflags |= LOOKUP_NO_TEMP_BIND;
3686 old_candidates = candidates;
3687 add_candidates (TREE_VALUE (conv_fns), first_arg, NULL, totype,
3688 NULL_TREE, false,
3689 conversion_path, TYPE_BINFO (fromtype),
3690 flags, &candidates, complain);
3692 for (cand = candidates; cand != old_candidates; cand = cand->next)
3694 tree rettype = TREE_TYPE (TREE_TYPE (cand->fn));
3695 conversion *ics
3696 = implicit_conversion (totype,
3697 rettype,
3699 /*c_cast_p=*/false, convflags,
3700 complain);
3702 /* If LOOKUP_NO_TEMP_BIND isn't set, then this is
3703 copy-initialization. In that case, "The result of the
3704 call is then used to direct-initialize the object that is
3705 the destination of the copy-initialization." [dcl.init]
3707 We represent this in the conversion sequence with an
3708 rvalue conversion, which means a constructor call. But
3709 don't add a second rvalue conversion if there's already
3710 one there. Which there really shouldn't be, but it's
3711 harmless since we'd add it here anyway. */
3712 if (ics && MAYBE_CLASS_TYPE_P (totype) && ics->kind != ck_rvalue
3713 && !(convflags & LOOKUP_NO_TEMP_BIND))
3714 ics = build_conv (ck_rvalue, totype, ics);
3716 cand->second_conv = ics;
3718 if (!ics)
3720 cand->viable = 0;
3721 cand->reason = arg_conversion_rejection (NULL_TREE, -2,
3722 rettype, totype);
3724 else if (DECL_NONCONVERTING_P (cand->fn)
3725 && ics->rank > cr_exact)
3727 /* 13.3.1.5: For direct-initialization, those explicit
3728 conversion functions that are not hidden within S and
3729 yield type T or a type that can be converted to type T
3730 with a qualification conversion (4.4) are also candidate
3731 functions. */
3732 /* 13.3.1.6 doesn't have a parallel restriction, but it should;
3733 I've raised this issue with the committee. --jason 9/2011 */
3734 cand->viable = -1;
3735 cand->reason = explicit_conversion_rejection (rettype, totype);
3737 else if (cand->viable == 1 && ics->bad_p)
3739 cand->viable = -1;
3740 cand->reason
3741 = bad_arg_conversion_rejection (NULL_TREE, -2,
3742 rettype, totype);
3744 else if (primary_template_instantiation_p (cand->fn)
3745 && ics->rank > cr_exact)
3747 /* 13.3.3.1.2: If the user-defined conversion is specified by
3748 a specialization of a conversion function template, the
3749 second standard conversion sequence shall have exact match
3750 rank. */
3751 cand->viable = -1;
3752 cand->reason = template_conversion_rejection (rettype, totype);
3757 candidates = splice_viable (candidates, false, &any_viable_p);
3758 if (!any_viable_p)
3760 if (args)
3761 release_tree_vector (args);
3762 return NULL;
3765 cand = tourney (candidates, complain);
3766 if (cand == 0)
3768 if (complain & tf_error)
3770 error ("conversion from %qT to %qT is ambiguous",
3771 fromtype, totype);
3772 print_z_candidates (location_of (expr), candidates);
3775 cand = candidates; /* any one will do */
3776 cand->second_conv = build_ambiguous_conv (totype, expr);
3777 cand->second_conv->user_conv_p = true;
3778 if (!any_strictly_viable (candidates))
3779 cand->second_conv->bad_p = true;
3780 /* If there are viable candidates, don't set ICS_BAD_FLAG; an
3781 ambiguous conversion is no worse than another user-defined
3782 conversion. */
3784 return cand;
3787 tree convtype;
3788 if (!DECL_CONSTRUCTOR_P (cand->fn))
3789 convtype = non_reference (TREE_TYPE (TREE_TYPE (cand->fn)));
3790 else if (cand->second_conv->kind == ck_rvalue)
3791 /* DR 5: [in the first step of copy-initialization]...if the function
3792 is a constructor, the call initializes a temporary of the
3793 cv-unqualified version of the destination type. */
3794 convtype = cv_unqualified (totype);
3795 else
3796 convtype = totype;
3797 /* Build the user conversion sequence. */
3798 conv = build_conv
3799 (ck_user,
3800 convtype,
3801 build_identity_conv (TREE_TYPE (expr), expr));
3802 conv->cand = cand;
3803 if (cand->viable == -1)
3804 conv->bad_p = true;
3806 /* Remember that this was a list-initialization. */
3807 if (flags & LOOKUP_NO_NARROWING)
3808 conv->check_narrowing = true;
3810 /* Combine it with the second conversion sequence. */
3811 cand->second_conv = merge_conversion_sequences (conv,
3812 cand->second_conv);
3814 return cand;
3817 /* Wrapper for above. */
3819 tree
3820 build_user_type_conversion (tree totype, tree expr, int flags,
3821 tsubst_flags_t complain)
3823 struct z_candidate *cand;
3824 tree ret;
3826 bool subtime = timevar_cond_start (TV_OVERLOAD);
3827 cand = build_user_type_conversion_1 (totype, expr, flags, complain);
3829 if (cand)
3831 if (cand->second_conv->kind == ck_ambig)
3832 ret = error_mark_node;
3833 else
3835 expr = convert_like (cand->second_conv, expr, complain);
3836 ret = convert_from_reference (expr);
3839 else
3840 ret = NULL_TREE;
3842 timevar_cond_stop (TV_OVERLOAD, subtime);
3843 return ret;
3846 /* Subroutine of convert_nontype_argument.
3848 EXPR is an argument for a template non-type parameter of integral or
3849 enumeration type. Do any necessary conversions (that are permitted for
3850 non-type arguments) to convert it to the parameter type.
3852 If conversion is successful, returns the converted expression;
3853 otherwise, returns error_mark_node. */
3855 tree
3856 build_integral_nontype_arg_conv (tree type, tree expr, tsubst_flags_t complain)
3858 conversion *conv;
3859 void *p;
3860 tree t;
3861 location_t loc = EXPR_LOC_OR_LOC (expr, input_location);
3863 if (error_operand_p (expr))
3864 return error_mark_node;
3866 gcc_assert (INTEGRAL_OR_ENUMERATION_TYPE_P (type));
3868 /* Get the high-water mark for the CONVERSION_OBSTACK. */
3869 p = conversion_obstack_alloc (0);
3871 conv = implicit_conversion (type, TREE_TYPE (expr), expr,
3872 /*c_cast_p=*/false,
3873 LOOKUP_IMPLICIT, complain);
3875 /* for a non-type template-parameter of integral or
3876 enumeration type, integral promotions (4.5) and integral
3877 conversions (4.7) are applied. */
3878 /* It should be sufficient to check the outermost conversion step, since
3879 there are no qualification conversions to integer type. */
3880 if (conv)
3881 switch (conv->kind)
3883 /* A conversion function is OK. If it isn't constexpr, we'll
3884 complain later that the argument isn't constant. */
3885 case ck_user:
3886 /* The lvalue-to-rvalue conversion is OK. */
3887 case ck_rvalue:
3888 case ck_identity:
3889 break;
3891 case ck_std:
3892 t = next_conversion (conv)->type;
3893 if (INTEGRAL_OR_ENUMERATION_TYPE_P (t))
3894 break;
3896 if (complain & tf_error)
3897 error_at (loc, "conversion from %qT to %qT not considered for "
3898 "non-type template argument", t, type);
3899 /* and fall through. */
3901 default:
3902 conv = NULL;
3903 break;
3906 if (conv)
3907 expr = convert_like (conv, expr, complain);
3908 else
3909 expr = error_mark_node;
3911 /* Free all the conversions we allocated. */
3912 obstack_free (&conversion_obstack, p);
3914 return expr;
3917 /* Do any initial processing on the arguments to a function call. */
3919 static vec<tree, va_gc> *
3920 resolve_args (vec<tree, va_gc> *args, tsubst_flags_t complain)
3922 unsigned int ix;
3923 tree arg;
3925 FOR_EACH_VEC_SAFE_ELT (args, ix, arg)
3927 if (error_operand_p (arg))
3928 return NULL;
3929 else if (VOID_TYPE_P (TREE_TYPE (arg)))
3931 if (complain & tf_error)
3932 error ("invalid use of void expression");
3933 return NULL;
3935 else if (invalid_nonstatic_memfn_p (arg, complain))
3936 return NULL;
3938 return args;
3941 /* Perform overload resolution on FN, which is called with the ARGS.
3943 Return the candidate function selected by overload resolution, or
3944 NULL if the event that overload resolution failed. In the case
3945 that overload resolution fails, *CANDIDATES will be the set of
3946 candidates considered, and ANY_VIABLE_P will be set to true or
3947 false to indicate whether or not any of the candidates were
3948 viable.
3950 The ARGS should already have gone through RESOLVE_ARGS before this
3951 function is called. */
3953 static struct z_candidate *
3954 perform_overload_resolution (tree fn,
3955 const vec<tree, va_gc> *args,
3956 struct z_candidate **candidates,
3957 bool *any_viable_p, tsubst_flags_t complain)
3959 struct z_candidate *cand;
3960 tree explicit_targs;
3961 int template_only;
3963 bool subtime = timevar_cond_start (TV_OVERLOAD);
3965 explicit_targs = NULL_TREE;
3966 template_only = 0;
3968 *candidates = NULL;
3969 *any_viable_p = true;
3971 /* Check FN. */
3972 gcc_assert (TREE_CODE (fn) == FUNCTION_DECL
3973 || TREE_CODE (fn) == TEMPLATE_DECL
3974 || TREE_CODE (fn) == OVERLOAD
3975 || TREE_CODE (fn) == TEMPLATE_ID_EXPR);
3977 if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
3979 explicit_targs = TREE_OPERAND (fn, 1);
3980 fn = TREE_OPERAND (fn, 0);
3981 template_only = 1;
3984 /* Add the various candidate functions. */
3985 add_candidates (fn, NULL_TREE, args, NULL_TREE,
3986 explicit_targs, template_only,
3987 /*conversion_path=*/NULL_TREE,
3988 /*access_path=*/NULL_TREE,
3989 LOOKUP_NORMAL,
3990 candidates, complain);
3992 *candidates = splice_viable (*candidates, false, any_viable_p);
3993 if (*any_viable_p)
3994 cand = tourney (*candidates, complain);
3995 else
3996 cand = NULL;
3998 timevar_cond_stop (TV_OVERLOAD, subtime);
3999 return cand;
4002 /* Print an error message about being unable to build a call to FN with
4003 ARGS. ANY_VIABLE_P indicates whether any candidate functions could
4004 be located; CANDIDATES is a possibly empty list of such
4005 functions. */
4007 static void
4008 print_error_for_call_failure (tree fn, vec<tree, va_gc> *args,
4009 struct z_candidate *candidates)
4011 tree name = DECL_NAME (OVL_CURRENT (fn));
4012 location_t loc = location_of (name);
4014 if (!any_strictly_viable (candidates))
4015 error_at (loc, "no matching function for call to %<%D(%A)%>",
4016 name, build_tree_list_vec (args));
4017 else
4018 error_at (loc, "call of overloaded %<%D(%A)%> is ambiguous",
4019 name, build_tree_list_vec (args));
4020 if (candidates)
4021 print_z_candidates (loc, candidates);
4024 /* Return an expression for a call to FN (a namespace-scope function,
4025 or a static member function) with the ARGS. This may change
4026 ARGS. */
4028 tree
4029 build_new_function_call (tree fn, vec<tree, va_gc> **args, bool koenig_p,
4030 tsubst_flags_t complain)
4032 struct z_candidate *candidates, *cand;
4033 bool any_viable_p;
4034 void *p;
4035 tree result;
4037 if (args != NULL && *args != NULL)
4039 *args = resolve_args (*args, complain);
4040 if (*args == NULL)
4041 return error_mark_node;
4044 if (flag_tm)
4045 tm_malloc_replacement (fn);
4047 /* If this function was found without using argument dependent
4048 lookup, then we want to ignore any undeclared friend
4049 functions. */
4050 if (!koenig_p)
4052 tree orig_fn = fn;
4054 fn = remove_hidden_names (fn);
4055 if (!fn)
4057 if (complain & tf_error)
4058 print_error_for_call_failure (orig_fn, *args, NULL);
4059 return error_mark_node;
4063 /* Get the high-water mark for the CONVERSION_OBSTACK. */
4064 p = conversion_obstack_alloc (0);
4066 cand = perform_overload_resolution (fn, *args, &candidates, &any_viable_p,
4067 complain);
4069 if (!cand)
4071 if (complain & tf_error)
4073 if (!any_viable_p && candidates && ! candidates->next
4074 && (TREE_CODE (candidates->fn) == FUNCTION_DECL))
4075 return cp_build_function_call_vec (candidates->fn, args, complain);
4076 if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
4077 fn = TREE_OPERAND (fn, 0);
4078 print_error_for_call_failure (fn, *args, candidates);
4080 result = error_mark_node;
4082 else
4084 int flags = LOOKUP_NORMAL;
4085 /* If fn is template_id_expr, the call has explicit template arguments
4086 (e.g. func<int>(5)), communicate this info to build_over_call
4087 through flags so that later we can use it to decide whether to warn
4088 about peculiar null pointer conversion. */
4089 if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
4090 flags |= LOOKUP_EXPLICIT_TMPL_ARGS;
4091 result = build_over_call (cand, flags, complain);
4094 /* Free all the conversions we allocated. */
4095 obstack_free (&conversion_obstack, p);
4097 return result;
4100 /* Build a call to a global operator new. FNNAME is the name of the
4101 operator (either "operator new" or "operator new[]") and ARGS are
4102 the arguments provided. This may change ARGS. *SIZE points to the
4103 total number of bytes required by the allocation, and is updated if
4104 that is changed here. *COOKIE_SIZE is non-NULL if a cookie should
4105 be used. If this function determines that no cookie should be
4106 used, after all, *COOKIE_SIZE is set to NULL_TREE. If SIZE_CHECK
4107 is not NULL_TREE, it is evaluated before calculating the final
4108 array size, and if it fails, the array size is replaced with
4109 (size_t)-1 (usually triggering a std::bad_alloc exception). If FN
4110 is non-NULL, it will be set, upon return, to the allocation
4111 function called. */
4113 tree
4114 build_operator_new_call (tree fnname, vec<tree, va_gc> **args,
4115 tree *size, tree *cookie_size, tree size_check,
4116 tree *fn, tsubst_flags_t complain)
4118 tree original_size = *size;
4119 tree fns;
4120 struct z_candidate *candidates;
4121 struct z_candidate *cand;
4122 bool any_viable_p;
4124 if (fn)
4125 *fn = NULL_TREE;
4126 /* Set to (size_t)-1 if the size check fails. */
4127 if (size_check != NULL_TREE)
4129 tree errval = TYPE_MAX_VALUE (sizetype);
4130 if (cxx_dialect >= cxx11 && flag_exceptions)
4131 errval = throw_bad_array_new_length ();
4132 *size = fold_build3 (COND_EXPR, sizetype, size_check,
4133 original_size, errval);
4135 vec_safe_insert (*args, 0, *size);
4136 *args = resolve_args (*args, complain);
4137 if (*args == NULL)
4138 return error_mark_node;
4140 /* Based on:
4142 [expr.new]
4144 If this lookup fails to find the name, or if the allocated type
4145 is not a class type, the allocation function's name is looked
4146 up in the global scope.
4148 we disregard block-scope declarations of "operator new". */
4149 fns = lookup_function_nonclass (fnname, *args, /*block_p=*/false);
4151 /* Figure out what function is being called. */
4152 cand = perform_overload_resolution (fns, *args, &candidates, &any_viable_p,
4153 complain);
4155 /* If no suitable function could be found, issue an error message
4156 and give up. */
4157 if (!cand)
4159 if (complain & tf_error)
4160 print_error_for_call_failure (fns, *args, candidates);
4161 return error_mark_node;
4164 /* If a cookie is required, add some extra space. Whether
4165 or not a cookie is required cannot be determined until
4166 after we know which function was called. */
4167 if (*cookie_size)
4169 bool use_cookie = true;
4170 tree arg_types;
4172 arg_types = TYPE_ARG_TYPES (TREE_TYPE (cand->fn));
4173 /* Skip the size_t parameter. */
4174 arg_types = TREE_CHAIN (arg_types);
4175 /* Check the remaining parameters (if any). */
4176 if (arg_types
4177 && TREE_CHAIN (arg_types) == void_list_node
4178 && same_type_p (TREE_VALUE (arg_types),
4179 ptr_type_node))
4180 use_cookie = false;
4181 /* If we need a cookie, adjust the number of bytes allocated. */
4182 if (use_cookie)
4184 /* Update the total size. */
4185 *size = size_binop (PLUS_EXPR, original_size, *cookie_size);
4186 /* Set to (size_t)-1 if the size check fails. */
4187 gcc_assert (size_check != NULL_TREE);
4188 *size = fold_build3 (COND_EXPR, sizetype, size_check,
4189 *size, TYPE_MAX_VALUE (sizetype));
4190 /* Update the argument list to reflect the adjusted size. */
4191 (**args)[0] = *size;
4193 else
4194 *cookie_size = NULL_TREE;
4197 /* Tell our caller which function we decided to call. */
4198 if (fn)
4199 *fn = cand->fn;
4201 /* Build the CALL_EXPR. */
4202 return build_over_call (cand, LOOKUP_NORMAL, complain);
4205 /* Build a new call to operator(). This may change ARGS. */
4207 static tree
4208 build_op_call_1 (tree obj, vec<tree, va_gc> **args, tsubst_flags_t complain)
4210 struct z_candidate *candidates = 0, *cand;
4211 tree fns, convs, first_mem_arg = NULL_TREE;
4212 tree type = TREE_TYPE (obj);
4213 bool any_viable_p;
4214 tree result = NULL_TREE;
4215 void *p;
4217 if (error_operand_p (obj))
4218 return error_mark_node;
4220 obj = prep_operand (obj);
4222 if (TYPE_PTRMEMFUNC_P (type))
4224 if (complain & tf_error)
4225 /* It's no good looking for an overloaded operator() on a
4226 pointer-to-member-function. */
4227 error ("pointer-to-member function %E cannot be called without an object; consider using .* or ->*", obj);
4228 return error_mark_node;
4231 if (TYPE_BINFO (type))
4233 fns = lookup_fnfields (TYPE_BINFO (type), ansi_opname (CALL_EXPR), 1);
4234 if (fns == error_mark_node)
4235 return error_mark_node;
4237 else
4238 fns = NULL_TREE;
4240 if (args != NULL && *args != NULL)
4242 *args = resolve_args (*args, complain);
4243 if (*args == NULL)
4244 return error_mark_node;
4247 /* Get the high-water mark for the CONVERSION_OBSTACK. */
4248 p = conversion_obstack_alloc (0);
4250 if (fns)
4252 first_mem_arg = obj;
4254 add_candidates (BASELINK_FUNCTIONS (fns),
4255 first_mem_arg, *args, NULL_TREE,
4256 NULL_TREE, false,
4257 BASELINK_BINFO (fns), BASELINK_ACCESS_BINFO (fns),
4258 LOOKUP_NORMAL, &candidates, complain);
4261 convs = lookup_conversions (type);
4263 for (; convs; convs = TREE_CHAIN (convs))
4265 tree fns = TREE_VALUE (convs);
4266 tree totype = TREE_TYPE (convs);
4268 if (TYPE_PTRFN_P (totype)
4269 || TYPE_REFFN_P (totype)
4270 || (TREE_CODE (totype) == REFERENCE_TYPE
4271 && TYPE_PTRFN_P (TREE_TYPE (totype))))
4272 for (; fns; fns = OVL_NEXT (fns))
4274 tree fn = OVL_CURRENT (fns);
4276 if (DECL_NONCONVERTING_P (fn))
4277 continue;
4279 if (TREE_CODE (fn) == TEMPLATE_DECL)
4280 add_template_conv_candidate
4281 (&candidates, fn, obj, NULL_TREE, *args, totype,
4282 /*access_path=*/NULL_TREE,
4283 /*conversion_path=*/NULL_TREE, complain);
4284 else
4285 add_conv_candidate (&candidates, fn, obj, NULL_TREE,
4286 *args, /*conversion_path=*/NULL_TREE,
4287 /*access_path=*/NULL_TREE, complain);
4291 /* Be strict here because if we choose a bad conversion candidate, the
4292 errors we get won't mention the call context. */
4293 candidates = splice_viable (candidates, true, &any_viable_p);
4294 if (!any_viable_p)
4296 if (complain & tf_error)
4298 error ("no match for call to %<(%T) (%A)%>", TREE_TYPE (obj),
4299 build_tree_list_vec (*args));
4300 print_z_candidates (location_of (TREE_TYPE (obj)), candidates);
4302 result = error_mark_node;
4304 else
4306 cand = tourney (candidates, complain);
4307 if (cand == 0)
4309 if (complain & tf_error)
4311 error ("call of %<(%T) (%A)%> is ambiguous",
4312 TREE_TYPE (obj), build_tree_list_vec (*args));
4313 print_z_candidates (location_of (TREE_TYPE (obj)), candidates);
4315 result = error_mark_node;
4317 /* Since cand->fn will be a type, not a function, for a conversion
4318 function, we must be careful not to unconditionally look at
4319 DECL_NAME here. */
4320 else if (TREE_CODE (cand->fn) == FUNCTION_DECL
4321 && DECL_OVERLOADED_OPERATOR_P (cand->fn) == CALL_EXPR)
4322 result = build_over_call (cand, LOOKUP_NORMAL, complain);
4323 else
4325 obj = convert_like_with_context (cand->convs[0], obj, cand->fn, -1,
4326 complain);
4327 obj = convert_from_reference (obj);
4328 result = cp_build_function_call_vec (obj, args, complain);
4332 /* Free all the conversions we allocated. */
4333 obstack_free (&conversion_obstack, p);
4335 return result;
4338 /* Wrapper for above. */
4340 tree
4341 build_op_call (tree obj, vec<tree, va_gc> **args, tsubst_flags_t complain)
4343 tree ret;
4344 bool subtime = timevar_cond_start (TV_OVERLOAD);
4345 ret = build_op_call_1 (obj, args, complain);
4346 timevar_cond_stop (TV_OVERLOAD, subtime);
4347 return ret;
4350 /* Called by op_error to prepare format strings suitable for the error
4351 function. It concatenates a prefix (controlled by MATCH), ERRMSG,
4352 and a suffix (controlled by NTYPES). */
4354 static const char *
4355 op_error_string (const char *errmsg, int ntypes, bool match)
4357 const char *msg;
4359 const char *msgp = concat (match ? G_("ambiguous overload for ")
4360 : G_("no match for "), errmsg, NULL);
4362 if (ntypes == 3)
4363 msg = concat (msgp, G_(" (operand types are %qT, %qT, and %qT)"), NULL);
4364 else if (ntypes == 2)
4365 msg = concat (msgp, G_(" (operand types are %qT and %qT)"), NULL);
4366 else
4367 msg = concat (msgp, G_(" (operand type is %qT)"), NULL);
4369 return msg;
4372 static void
4373 op_error (location_t loc, enum tree_code code, enum tree_code code2,
4374 tree arg1, tree arg2, tree arg3, bool match)
4376 const char *opname;
4378 if (code == MODIFY_EXPR)
4379 opname = assignment_operator_name_info[code2].name;
4380 else
4381 opname = operator_name_info[code].name;
4383 switch (code)
4385 case COND_EXPR:
4386 if (flag_diagnostics_show_caret)
4387 error_at (loc, op_error_string (G_("ternary %<operator?:%>"),
4388 3, match),
4389 TREE_TYPE (arg1), TREE_TYPE (arg2), TREE_TYPE (arg3));
4390 else
4391 error_at (loc, op_error_string (G_("ternary %<operator?:%> "
4392 "in %<%E ? %E : %E%>"), 3, match),
4393 arg1, arg2, arg3,
4394 TREE_TYPE (arg1), TREE_TYPE (arg2), TREE_TYPE (arg3));
4395 break;
4397 case POSTINCREMENT_EXPR:
4398 case POSTDECREMENT_EXPR:
4399 if (flag_diagnostics_show_caret)
4400 error_at (loc, op_error_string (G_("%<operator%s%>"), 1, match),
4401 opname, TREE_TYPE (arg1));
4402 else
4403 error_at (loc, op_error_string (G_("%<operator%s%> in %<%E%s%>"),
4404 1, match),
4405 opname, arg1, opname, TREE_TYPE (arg1));
4406 break;
4408 case ARRAY_REF:
4409 if (flag_diagnostics_show_caret)
4410 error_at (loc, op_error_string (G_("%<operator[]%>"), 2, match),
4411 TREE_TYPE (arg1), TREE_TYPE (arg2));
4412 else
4413 error_at (loc, op_error_string (G_("%<operator[]%> in %<%E[%E]%>"),
4414 2, match),
4415 arg1, arg2, TREE_TYPE (arg1), TREE_TYPE (arg2));
4416 break;
4418 case REALPART_EXPR:
4419 case IMAGPART_EXPR:
4420 if (flag_diagnostics_show_caret)
4421 error_at (loc, op_error_string (G_("%qs"), 1, match),
4422 opname, TREE_TYPE (arg1));
4423 else
4424 error_at (loc, op_error_string (G_("%qs in %<%s %E%>"), 1, match),
4425 opname, opname, arg1, TREE_TYPE (arg1));
4426 break;
4428 default:
4429 if (arg2)
4430 if (flag_diagnostics_show_caret)
4431 error_at (loc, op_error_string (G_("%<operator%s%>"), 2, match),
4432 opname, TREE_TYPE (arg1), TREE_TYPE (arg2));
4433 else
4434 error_at (loc, op_error_string (G_("%<operator%s%> in %<%E %s %E%>"),
4435 2, match),
4436 opname, arg1, opname, arg2,
4437 TREE_TYPE (arg1), TREE_TYPE (arg2));
4438 else
4439 if (flag_diagnostics_show_caret)
4440 error_at (loc, op_error_string (G_("%<operator%s%>"), 1, match),
4441 opname, TREE_TYPE (arg1));
4442 else
4443 error_at (loc, op_error_string (G_("%<operator%s%> in %<%s%E%>"),
4444 1, match),
4445 opname, opname, arg1, TREE_TYPE (arg1));
4446 break;
4450 /* Return the implicit conversion sequence that could be used to
4451 convert E1 to E2 in [expr.cond]. */
4453 static conversion *
4454 conditional_conversion (tree e1, tree e2, tsubst_flags_t complain)
4456 tree t1 = non_reference (TREE_TYPE (e1));
4457 tree t2 = non_reference (TREE_TYPE (e2));
4458 conversion *conv;
4459 bool good_base;
4461 /* [expr.cond]
4463 If E2 is an lvalue: E1 can be converted to match E2 if E1 can be
4464 implicitly converted (clause _conv_) to the type "lvalue reference to
4465 T2", subject to the constraint that in the conversion the
4466 reference must bind directly (_dcl.init.ref_) to an lvalue.
4468 If E2 is an xvalue: E1 can be converted to match E2 if E1 can be
4469 implicitly converted to the type "rvalue reference to T2", subject to
4470 the constraint that the reference must bind directly. */
4471 if (lvalue_or_rvalue_with_address_p (e2))
4473 tree rtype = cp_build_reference_type (t2, !real_lvalue_p (e2));
4474 conv = implicit_conversion (rtype,
4477 /*c_cast_p=*/false,
4478 LOOKUP_NO_TEMP_BIND|LOOKUP_NO_RVAL_BIND
4479 |LOOKUP_ONLYCONVERTING,
4480 complain);
4481 if (conv && !conv->bad_p)
4482 return conv;
4485 /* If E2 is a prvalue or if neither of the conversions above can be done
4486 and at least one of the operands has (possibly cv-qualified) class
4487 type: */
4488 if (!CLASS_TYPE_P (t1) && !CLASS_TYPE_P (t2))
4489 return NULL;
4491 /* [expr.cond]
4493 If E1 and E2 have class type, and the underlying class types are
4494 the same or one is a base class of the other: E1 can be converted
4495 to match E2 if the class of T2 is the same type as, or a base
4496 class of, the class of T1, and the cv-qualification of T2 is the
4497 same cv-qualification as, or a greater cv-qualification than, the
4498 cv-qualification of T1. If the conversion is applied, E1 is
4499 changed to an rvalue of type T2 that still refers to the original
4500 source class object (or the appropriate subobject thereof). */
4501 if (CLASS_TYPE_P (t1) && CLASS_TYPE_P (t2)
4502 && ((good_base = DERIVED_FROM_P (t2, t1)) || DERIVED_FROM_P (t1, t2)))
4504 if (good_base && at_least_as_qualified_p (t2, t1))
4506 conv = build_identity_conv (t1, e1);
4507 if (!same_type_p (TYPE_MAIN_VARIANT (t1),
4508 TYPE_MAIN_VARIANT (t2)))
4509 conv = build_conv (ck_base, t2, conv);
4510 else
4511 conv = build_conv (ck_rvalue, t2, conv);
4512 return conv;
4514 else
4515 return NULL;
4517 else
4518 /* [expr.cond]
4520 Otherwise: E1 can be converted to match E2 if E1 can be implicitly
4521 converted to the type that expression E2 would have if E2 were
4522 converted to an rvalue (or the type it has, if E2 is an rvalue). */
4523 return implicit_conversion (t2, t1, e1, /*c_cast_p=*/false,
4524 LOOKUP_IMPLICIT, complain);
4527 /* Implement [expr.cond]. ARG1, ARG2, and ARG3 are the three
4528 arguments to the conditional expression. */
4530 static tree
4531 build_conditional_expr_1 (location_t loc, tree arg1, tree arg2, tree arg3,
4532 tsubst_flags_t complain)
4534 tree arg2_type;
4535 tree arg3_type;
4536 tree result = NULL_TREE;
4537 tree result_type = NULL_TREE;
4538 bool lvalue_p = true;
4539 struct z_candidate *candidates = 0;
4540 struct z_candidate *cand;
4541 void *p;
4542 tree orig_arg2, orig_arg3;
4544 /* As a G++ extension, the second argument to the conditional can be
4545 omitted. (So that `a ? : c' is roughly equivalent to `a ? a :
4546 c'.) If the second operand is omitted, make sure it is
4547 calculated only once. */
4548 if (!arg2)
4550 if (complain & tf_error)
4551 pedwarn (loc, OPT_Wpedantic,
4552 "ISO C++ forbids omitting the middle term of a ?: expression");
4554 /* Make sure that lvalues remain lvalues. See g++.oliva/ext1.C. */
4555 if (real_lvalue_p (arg1))
4556 arg2 = arg1 = stabilize_reference (arg1);
4557 else
4558 arg2 = arg1 = save_expr (arg1);
4561 /* If something has already gone wrong, just pass that fact up the
4562 tree. */
4563 if (error_operand_p (arg1)
4564 || error_operand_p (arg2)
4565 || error_operand_p (arg3))
4566 return error_mark_node;
4568 orig_arg2 = arg2;
4569 orig_arg3 = arg3;
4571 if (VECTOR_INTEGER_TYPE_P (TREE_TYPE (arg1)))
4573 arg1 = force_rvalue (arg1, complain);
4574 arg2 = force_rvalue (arg2, complain);
4575 arg3 = force_rvalue (arg3, complain);
4577 /* force_rvalue can return error_mark on valid arguments. */
4578 if (error_operand_p (arg1)
4579 || error_operand_p (arg2)
4580 || error_operand_p (arg3))
4581 return error_mark_node;
4583 tree arg1_type = TREE_TYPE (arg1);
4584 arg2_type = TREE_TYPE (arg2);
4585 arg3_type = TREE_TYPE (arg3);
4587 if (TREE_CODE (arg2_type) != VECTOR_TYPE
4588 && TREE_CODE (arg3_type) != VECTOR_TYPE)
4590 /* Rely on the error messages of the scalar version. */
4591 tree scal = build_conditional_expr_1 (loc, integer_one_node,
4592 orig_arg2, orig_arg3, complain);
4593 if (scal == error_mark_node)
4594 return error_mark_node;
4595 tree stype = TREE_TYPE (scal);
4596 tree ctype = TREE_TYPE (arg1_type);
4597 if (TYPE_SIZE (stype) != TYPE_SIZE (ctype)
4598 || (!INTEGRAL_TYPE_P (stype) && !SCALAR_FLOAT_TYPE_P (stype)))
4600 if (complain & tf_error)
4601 error_at (loc, "inferred scalar type %qT is not an integer or "
4602 "floating point type of the same size as %qT", stype,
4603 COMPARISON_CLASS_P (arg1)
4604 ? TREE_TYPE (TREE_TYPE (TREE_OPERAND (arg1, 0)))
4605 : ctype);
4606 return error_mark_node;
4609 tree vtype = build_opaque_vector_type (stype,
4610 TYPE_VECTOR_SUBPARTS (arg1_type));
4611 /* We could pass complain & tf_warning to unsafe_conversion_p,
4612 but the warnings (like Wsign-conversion) have already been
4613 given by the scalar build_conditional_expr_1. We still check
4614 unsafe_conversion_p to forbid truncating long long -> float. */
4615 if (unsafe_conversion_p (loc, stype, arg2, false))
4617 if (complain & tf_error)
4618 error_at (loc, "conversion of scalar %qT to vector %qT "
4619 "involves truncation", arg2_type, vtype);
4620 return error_mark_node;
4622 if (unsafe_conversion_p (loc, stype, arg3, false))
4624 if (complain & tf_error)
4625 error_at (loc, "conversion of scalar %qT to vector %qT "
4626 "involves truncation", arg3_type, vtype);
4627 return error_mark_node;
4630 arg2 = cp_convert (stype, arg2, complain);
4631 arg2 = save_expr (arg2);
4632 arg2 = build_vector_from_val (vtype, arg2);
4633 arg2_type = vtype;
4634 arg3 = cp_convert (stype, arg3, complain);
4635 arg3 = save_expr (arg3);
4636 arg3 = build_vector_from_val (vtype, arg3);
4637 arg3_type = vtype;
4640 if ((TREE_CODE (arg2_type) == VECTOR_TYPE)
4641 != (TREE_CODE (arg3_type) == VECTOR_TYPE))
4643 enum stv_conv convert_flag =
4644 scalar_to_vector (loc, VEC_COND_EXPR, arg2, arg3,
4645 complain & tf_error);
4647 switch (convert_flag)
4649 case stv_error:
4650 return error_mark_node;
4651 case stv_firstarg:
4653 arg2 = save_expr (arg2);
4654 arg2 = convert (TREE_TYPE (arg3_type), arg2);
4655 arg2 = build_vector_from_val (arg3_type, arg2);
4656 arg2_type = TREE_TYPE (arg2);
4657 break;
4659 case stv_secondarg:
4661 arg3 = save_expr (arg3);
4662 arg3 = convert (TREE_TYPE (arg2_type), arg3);
4663 arg3 = build_vector_from_val (arg2_type, arg3);
4664 arg3_type = TREE_TYPE (arg3);
4665 break;
4667 default:
4668 break;
4672 if (!same_type_p (arg2_type, arg3_type)
4673 || TYPE_VECTOR_SUBPARTS (arg1_type)
4674 != TYPE_VECTOR_SUBPARTS (arg2_type)
4675 || TYPE_SIZE (arg1_type) != TYPE_SIZE (arg2_type))
4677 if (complain & tf_error)
4678 error_at (loc,
4679 "incompatible vector types in conditional expression: "
4680 "%qT, %qT and %qT", TREE_TYPE (arg1),
4681 TREE_TYPE (orig_arg2), TREE_TYPE (orig_arg3));
4682 return error_mark_node;
4685 if (!COMPARISON_CLASS_P (arg1))
4686 arg1 = cp_build_binary_op (loc, NE_EXPR, arg1,
4687 build_zero_cst (arg1_type), complain);
4688 return fold_build3 (VEC_COND_EXPR, arg2_type, arg1, arg2, arg3);
4691 /* [expr.cond]
4693 The first expression is implicitly converted to bool (clause
4694 _conv_). */
4695 arg1 = perform_implicit_conversion_flags (boolean_type_node, arg1, complain,
4696 LOOKUP_NORMAL);
4697 if (error_operand_p (arg1))
4698 return error_mark_node;
4700 /* [expr.cond]
4702 If either the second or the third operand has type (possibly
4703 cv-qualified) void, then the lvalue-to-rvalue (_conv.lval_),
4704 array-to-pointer (_conv.array_), and function-to-pointer
4705 (_conv.func_) standard conversions are performed on the second
4706 and third operands. */
4707 arg2_type = unlowered_expr_type (arg2);
4708 arg3_type = unlowered_expr_type (arg3);
4709 if (VOID_TYPE_P (arg2_type) || VOID_TYPE_P (arg3_type))
4711 /* Do the conversions. We don't these for `void' type arguments
4712 since it can't have any effect and since decay_conversion
4713 does not handle that case gracefully. */
4714 if (!VOID_TYPE_P (arg2_type))
4715 arg2 = decay_conversion (arg2, complain);
4716 if (!VOID_TYPE_P (arg3_type))
4717 arg3 = decay_conversion (arg3, complain);
4718 arg2_type = TREE_TYPE (arg2);
4719 arg3_type = TREE_TYPE (arg3);
4721 /* [expr.cond]
4723 One of the following shall hold:
4725 --The second or the third operand (but not both) is a
4726 throw-expression (_except.throw_); the result is of the
4727 type of the other and is an rvalue.
4729 --Both the second and the third operands have type void; the
4730 result is of type void and is an rvalue.
4732 We must avoid calling force_rvalue for expressions of type
4733 "void" because it will complain that their value is being
4734 used. */
4735 if (TREE_CODE (arg2) == THROW_EXPR
4736 && TREE_CODE (arg3) != THROW_EXPR)
4738 if (!VOID_TYPE_P (arg3_type))
4740 arg3 = force_rvalue (arg3, complain);
4741 if (arg3 == error_mark_node)
4742 return error_mark_node;
4744 arg3_type = TREE_TYPE (arg3);
4745 result_type = arg3_type;
4747 else if (TREE_CODE (arg2) != THROW_EXPR
4748 && TREE_CODE (arg3) == THROW_EXPR)
4750 if (!VOID_TYPE_P (arg2_type))
4752 arg2 = force_rvalue (arg2, complain);
4753 if (arg2 == error_mark_node)
4754 return error_mark_node;
4756 arg2_type = TREE_TYPE (arg2);
4757 result_type = arg2_type;
4759 else if (VOID_TYPE_P (arg2_type) && VOID_TYPE_P (arg3_type))
4760 result_type = void_type_node;
4761 else
4763 if (complain & tf_error)
4765 if (VOID_TYPE_P (arg2_type))
4766 error_at (EXPR_LOC_OR_LOC (arg3, loc),
4767 "second operand to the conditional operator "
4768 "is of type %<void%>, but the third operand is "
4769 "neither a throw-expression nor of type %<void%>");
4770 else
4771 error_at (EXPR_LOC_OR_LOC (arg2, loc),
4772 "third operand to the conditional operator "
4773 "is of type %<void%>, but the second operand is "
4774 "neither a throw-expression nor of type %<void%>");
4776 return error_mark_node;
4779 lvalue_p = false;
4780 goto valid_operands;
4782 /* [expr.cond]
4784 Otherwise, if the second and third operand have different types,
4785 and either has (possibly cv-qualified) class type, or if both are
4786 glvalues of the same value category and the same type except for
4787 cv-qualification, an attempt is made to convert each of those operands
4788 to the type of the other. */
4789 else if (!same_type_p (arg2_type, arg3_type)
4790 && (CLASS_TYPE_P (arg2_type) || CLASS_TYPE_P (arg3_type)
4791 || (same_type_ignoring_top_level_qualifiers_p (arg2_type,
4792 arg3_type)
4793 && lvalue_or_rvalue_with_address_p (arg2)
4794 && lvalue_or_rvalue_with_address_p (arg3)
4795 && real_lvalue_p (arg2) == real_lvalue_p (arg3))))
4797 conversion *conv2;
4798 conversion *conv3;
4799 bool converted = false;
4801 /* Get the high-water mark for the CONVERSION_OBSTACK. */
4802 p = conversion_obstack_alloc (0);
4804 conv2 = conditional_conversion (arg2, arg3, complain);
4805 conv3 = conditional_conversion (arg3, arg2, complain);
4807 /* [expr.cond]
4809 If both can be converted, or one can be converted but the
4810 conversion is ambiguous, the program is ill-formed. If
4811 neither can be converted, the operands are left unchanged and
4812 further checking is performed as described below. If exactly
4813 one conversion is possible, that conversion is applied to the
4814 chosen operand and the converted operand is used in place of
4815 the original operand for the remainder of this section. */
4816 if ((conv2 && !conv2->bad_p
4817 && conv3 && !conv3->bad_p)
4818 || (conv2 && conv2->kind == ck_ambig)
4819 || (conv3 && conv3->kind == ck_ambig))
4821 if (complain & tf_error)
4823 error_at (loc, "operands to ?: have different types %qT and %qT",
4824 arg2_type, arg3_type);
4825 if (conv2 && !conv2->bad_p && conv3 && !conv3->bad_p)
4826 inform (loc, " and each type can be converted to the other");
4827 else if (conv2 && conv2->kind == ck_ambig)
4828 convert_like (conv2, arg2, complain);
4829 else
4830 convert_like (conv3, arg3, complain);
4832 result = error_mark_node;
4834 else if (conv2 && !conv2->bad_p)
4836 arg2 = convert_like (conv2, arg2, complain);
4837 arg2 = convert_from_reference (arg2);
4838 arg2_type = TREE_TYPE (arg2);
4839 /* Even if CONV2 is a valid conversion, the result of the
4840 conversion may be invalid. For example, if ARG3 has type
4841 "volatile X", and X does not have a copy constructor
4842 accepting a "volatile X&", then even if ARG2 can be
4843 converted to X, the conversion will fail. */
4844 if (error_operand_p (arg2))
4845 result = error_mark_node;
4846 converted = true;
4848 else if (conv3 && !conv3->bad_p)
4850 arg3 = convert_like (conv3, arg3, complain);
4851 arg3 = convert_from_reference (arg3);
4852 arg3_type = TREE_TYPE (arg3);
4853 if (error_operand_p (arg3))
4854 result = error_mark_node;
4855 converted = true;
4858 /* Free all the conversions we allocated. */
4859 obstack_free (&conversion_obstack, p);
4861 if (result)
4862 return result;
4864 /* If, after the conversion, both operands have class type,
4865 treat the cv-qualification of both operands as if it were the
4866 union of the cv-qualification of the operands.
4868 The standard is not clear about what to do in this
4869 circumstance. For example, if the first operand has type
4870 "const X" and the second operand has a user-defined
4871 conversion to "volatile X", what is the type of the second
4872 operand after this step? Making it be "const X" (matching
4873 the first operand) seems wrong, as that discards the
4874 qualification without actually performing a copy. Leaving it
4875 as "volatile X" seems wrong as that will result in the
4876 conditional expression failing altogether, even though,
4877 according to this step, the one operand could be converted to
4878 the type of the other. */
4879 if (converted
4880 && CLASS_TYPE_P (arg2_type)
4881 && cp_type_quals (arg2_type) != cp_type_quals (arg3_type))
4882 arg2_type = arg3_type =
4883 cp_build_qualified_type (arg2_type,
4884 cp_type_quals (arg2_type)
4885 | cp_type_quals (arg3_type));
4888 /* [expr.cond]
4890 If the second and third operands are glvalues of the same value
4891 category and have the same type, the result is of that type and
4892 value category. */
4893 if (((real_lvalue_p (arg2) && real_lvalue_p (arg3))
4894 || (xvalue_p (arg2) && xvalue_p (arg3)))
4895 && same_type_p (arg2_type, arg3_type))
4897 result_type = arg2_type;
4898 arg2 = mark_lvalue_use (arg2);
4899 arg3 = mark_lvalue_use (arg3);
4900 goto valid_operands;
4903 /* [expr.cond]
4905 Otherwise, the result is an rvalue. If the second and third
4906 operand do not have the same type, and either has (possibly
4907 cv-qualified) class type, overload resolution is used to
4908 determine the conversions (if any) to be applied to the operands
4909 (_over.match.oper_, _over.built_). */
4910 lvalue_p = false;
4911 if (!same_type_p (arg2_type, arg3_type)
4912 && (CLASS_TYPE_P (arg2_type) || CLASS_TYPE_P (arg3_type)))
4914 tree args[3];
4915 conversion *conv;
4916 bool any_viable_p;
4918 /* Rearrange the arguments so that add_builtin_candidate only has
4919 to know about two args. In build_builtin_candidate, the
4920 arguments are unscrambled. */
4921 args[0] = arg2;
4922 args[1] = arg3;
4923 args[2] = arg1;
4924 add_builtin_candidates (&candidates,
4925 COND_EXPR,
4926 NOP_EXPR,
4927 ansi_opname (COND_EXPR),
4928 args,
4929 LOOKUP_NORMAL, complain);
4931 /* [expr.cond]
4933 If the overload resolution fails, the program is
4934 ill-formed. */
4935 candidates = splice_viable (candidates, false, &any_viable_p);
4936 if (!any_viable_p)
4938 if (complain & tf_error)
4939 error_at (loc, "operands to ?: have different types %qT and %qT",
4940 arg2_type, arg3_type);
4941 return error_mark_node;
4943 cand = tourney (candidates, complain);
4944 if (!cand)
4946 if (complain & tf_error)
4948 op_error (loc, COND_EXPR, NOP_EXPR, arg1, arg2, arg3, FALSE);
4949 print_z_candidates (loc, candidates);
4951 return error_mark_node;
4954 /* [expr.cond]
4956 Otherwise, the conversions thus determined are applied, and
4957 the converted operands are used in place of the original
4958 operands for the remainder of this section. */
4959 conv = cand->convs[0];
4960 arg1 = convert_like (conv, arg1, complain);
4961 conv = cand->convs[1];
4962 arg2 = convert_like (conv, arg2, complain);
4963 arg2_type = TREE_TYPE (arg2);
4964 conv = cand->convs[2];
4965 arg3 = convert_like (conv, arg3, complain);
4966 arg3_type = TREE_TYPE (arg3);
4969 /* [expr.cond]
4971 Lvalue-to-rvalue (_conv.lval_), array-to-pointer (_conv.array_),
4972 and function-to-pointer (_conv.func_) standard conversions are
4973 performed on the second and third operands.
4975 We need to force the lvalue-to-rvalue conversion here for class types,
4976 so we get TARGET_EXPRs; trying to deal with a COND_EXPR of class rvalues
4977 that isn't wrapped with a TARGET_EXPR plays havoc with exception
4978 regions. */
4980 arg2 = force_rvalue (arg2, complain);
4981 if (!CLASS_TYPE_P (arg2_type))
4982 arg2_type = TREE_TYPE (arg2);
4984 arg3 = force_rvalue (arg3, complain);
4985 if (!CLASS_TYPE_P (arg3_type))
4986 arg3_type = TREE_TYPE (arg3);
4988 if (arg2 == error_mark_node || arg3 == error_mark_node)
4989 return error_mark_node;
4991 /* [expr.cond]
4993 After those conversions, one of the following shall hold:
4995 --The second and third operands have the same type; the result is of
4996 that type. */
4997 if (same_type_p (arg2_type, arg3_type))
4998 result_type = arg2_type;
4999 /* [expr.cond]
5001 --The second and third operands have arithmetic or enumeration
5002 type; the usual arithmetic conversions are performed to bring
5003 them to a common type, and the result is of that type. */
5004 else if ((ARITHMETIC_TYPE_P (arg2_type)
5005 || UNSCOPED_ENUM_P (arg2_type))
5006 && (ARITHMETIC_TYPE_P (arg3_type)
5007 || UNSCOPED_ENUM_P (arg3_type)))
5009 /* In this case, there is always a common type. */
5010 result_type = type_after_usual_arithmetic_conversions (arg2_type,
5011 arg3_type);
5012 if (complain & tf_warning)
5013 do_warn_double_promotion (result_type, arg2_type, arg3_type,
5014 "implicit conversion from %qT to %qT to "
5015 "match other result of conditional",
5016 loc);
5018 if (TREE_CODE (arg2_type) == ENUMERAL_TYPE
5019 && TREE_CODE (arg3_type) == ENUMERAL_TYPE)
5021 if (TREE_CODE (orig_arg2) == CONST_DECL
5022 && TREE_CODE (orig_arg3) == CONST_DECL
5023 && DECL_CONTEXT (orig_arg2) == DECL_CONTEXT (orig_arg3))
5024 /* Two enumerators from the same enumeration can have different
5025 types when the enumeration is still being defined. */;
5026 else if (complain & tf_warning)
5027 warning_at (loc, OPT_Wenum_compare, "enumeral mismatch in "
5028 "conditional expression: %qT vs %qT",
5029 arg2_type, arg3_type);
5031 else if (extra_warnings
5032 && ((TREE_CODE (arg2_type) == ENUMERAL_TYPE
5033 && !same_type_p (arg3_type, type_promotes_to (arg2_type)))
5034 || (TREE_CODE (arg3_type) == ENUMERAL_TYPE
5035 && !same_type_p (arg2_type,
5036 type_promotes_to (arg3_type)))))
5038 if (complain & tf_warning)
5039 warning_at (loc, OPT_Wextra, "enumeral and non-enumeral type in "
5040 "conditional expression");
5043 arg2 = perform_implicit_conversion (result_type, arg2, complain);
5044 arg3 = perform_implicit_conversion (result_type, arg3, complain);
5046 /* [expr.cond]
5048 --The second and third operands have pointer type, or one has
5049 pointer type and the other is a null pointer constant; pointer
5050 conversions (_conv.ptr_) and qualification conversions
5051 (_conv.qual_) are performed to bring them to their composite
5052 pointer type (_expr.rel_). The result is of the composite
5053 pointer type.
5055 --The second and third operands have pointer to member type, or
5056 one has pointer to member type and the other is a null pointer
5057 constant; pointer to member conversions (_conv.mem_) and
5058 qualification conversions (_conv.qual_) are performed to bring
5059 them to a common type, whose cv-qualification shall match the
5060 cv-qualification of either the second or the third operand.
5061 The result is of the common type. */
5062 else if ((null_ptr_cst_p (arg2)
5063 && TYPE_PTR_OR_PTRMEM_P (arg3_type))
5064 || (null_ptr_cst_p (arg3)
5065 && TYPE_PTR_OR_PTRMEM_P (arg2_type))
5066 || (TYPE_PTR_P (arg2_type) && TYPE_PTR_P (arg3_type))
5067 || (TYPE_PTRDATAMEM_P (arg2_type) && TYPE_PTRDATAMEM_P (arg3_type))
5068 || (TYPE_PTRMEMFUNC_P (arg2_type) && TYPE_PTRMEMFUNC_P (arg3_type)))
5070 result_type = composite_pointer_type (arg2_type, arg3_type, arg2,
5071 arg3, CPO_CONDITIONAL_EXPR,
5072 complain);
5073 if (result_type == error_mark_node)
5074 return error_mark_node;
5075 arg2 = perform_implicit_conversion (result_type, arg2, complain);
5076 arg3 = perform_implicit_conversion (result_type, arg3, complain);
5079 if (!result_type)
5081 if (complain & tf_error)
5082 error_at (loc, "operands to ?: have different types %qT and %qT",
5083 arg2_type, arg3_type);
5084 return error_mark_node;
5087 if (arg2 == error_mark_node || arg3 == error_mark_node)
5088 return error_mark_node;
5090 valid_operands:
5091 result = build3 (COND_EXPR, result_type, arg1, arg2, arg3);
5092 if (!cp_unevaluated_operand)
5093 /* Avoid folding within decltype (c++/42013) and noexcept. */
5094 result = fold_if_not_in_template (result);
5096 /* We can't use result_type below, as fold might have returned a
5097 throw_expr. */
5099 if (!lvalue_p)
5101 /* Expand both sides into the same slot, hopefully the target of
5102 the ?: expression. We used to check for TARGET_EXPRs here,
5103 but now we sometimes wrap them in NOP_EXPRs so the test would
5104 fail. */
5105 if (CLASS_TYPE_P (TREE_TYPE (result)))
5106 result = get_target_expr_sfinae (result, complain);
5107 /* If this expression is an rvalue, but might be mistaken for an
5108 lvalue, we must add a NON_LVALUE_EXPR. */
5109 result = rvalue (result);
5111 else
5112 result = force_paren_expr (result);
5114 return result;
5117 /* Wrapper for above. */
5119 tree
5120 build_conditional_expr (location_t loc, tree arg1, tree arg2, tree arg3,
5121 tsubst_flags_t complain)
5123 tree ret;
5124 bool subtime = timevar_cond_start (TV_OVERLOAD);
5125 ret = build_conditional_expr_1 (loc, arg1, arg2, arg3, complain);
5126 timevar_cond_stop (TV_OVERLOAD, subtime);
5127 return ret;
5130 /* OPERAND is an operand to an expression. Perform necessary steps
5131 required before using it. If OPERAND is NULL_TREE, NULL_TREE is
5132 returned. */
5134 static tree
5135 prep_operand (tree operand)
5137 if (operand)
5139 if (CLASS_TYPE_P (TREE_TYPE (operand))
5140 && CLASSTYPE_TEMPLATE_INSTANTIATION (TREE_TYPE (operand)))
5141 /* Make sure the template type is instantiated now. */
5142 instantiate_class_template (TYPE_MAIN_VARIANT (TREE_TYPE (operand)));
5145 return operand;
5148 /* Add each of the viable functions in FNS (a FUNCTION_DECL or
5149 OVERLOAD) to the CANDIDATES, returning an updated list of
5150 CANDIDATES. The ARGS are the arguments provided to the call;
5151 if FIRST_ARG is non-null it is the implicit object argument,
5152 otherwise the first element of ARGS is used if needed. The
5153 EXPLICIT_TARGS are explicit template arguments provided.
5154 TEMPLATE_ONLY is true if only template functions should be
5155 considered. CONVERSION_PATH, ACCESS_PATH, and FLAGS are as for
5156 add_function_candidate. */
5158 static void
5159 add_candidates (tree fns, tree first_arg, const vec<tree, va_gc> *args,
5160 tree return_type,
5161 tree explicit_targs, bool template_only,
5162 tree conversion_path, tree access_path,
5163 int flags,
5164 struct z_candidate **candidates,
5165 tsubst_flags_t complain)
5167 tree ctype;
5168 const vec<tree, va_gc> *non_static_args;
5169 bool check_list_ctor;
5170 bool check_converting;
5171 unification_kind_t strict;
5172 tree fn;
5174 if (!fns)
5175 return;
5177 /* Precalculate special handling of constructors and conversion ops. */
5178 fn = OVL_CURRENT (fns);
5179 if (DECL_CONV_FN_P (fn))
5181 check_list_ctor = false;
5182 check_converting = !!(flags & LOOKUP_ONLYCONVERTING);
5183 if (flags & LOOKUP_NO_CONVERSION)
5184 /* We're doing return_type(x). */
5185 strict = DEDUCE_CONV;
5186 else
5187 /* We're doing x.operator return_type(). */
5188 strict = DEDUCE_EXACT;
5189 /* [over.match.funcs] For conversion functions, the function
5190 is considered to be a member of the class of the implicit
5191 object argument for the purpose of defining the type of
5192 the implicit object parameter. */
5193 ctype = TYPE_MAIN_VARIANT (TREE_TYPE (first_arg));
5195 else
5197 if (DECL_CONSTRUCTOR_P (fn))
5199 check_list_ctor = !!(flags & LOOKUP_LIST_ONLY);
5200 /* For list-initialization we consider explicit constructors
5201 and complain if one is chosen. */
5202 check_converting
5203 = ((flags & (LOOKUP_ONLYCONVERTING|LOOKUP_LIST_INIT_CTOR))
5204 == LOOKUP_ONLYCONVERTING);
5206 else
5208 check_list_ctor = false;
5209 check_converting = false;
5211 strict = DEDUCE_CALL;
5212 ctype = conversion_path ? BINFO_TYPE (conversion_path) : NULL_TREE;
5215 if (first_arg)
5216 non_static_args = args;
5217 else
5218 /* Delay creating the implicit this parameter until it is needed. */
5219 non_static_args = NULL;
5221 for (; fns; fns = OVL_NEXT (fns))
5223 tree fn_first_arg;
5224 const vec<tree, va_gc> *fn_args;
5226 fn = OVL_CURRENT (fns);
5228 if (check_converting && DECL_NONCONVERTING_P (fn))
5229 continue;
5230 if (check_list_ctor && !is_list_ctor (fn))
5231 continue;
5233 /* Figure out which set of arguments to use. */
5234 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
5236 /* If this function is a non-static member and we didn't get an
5237 implicit object argument, move it out of args. */
5238 if (first_arg == NULL_TREE)
5240 unsigned int ix;
5241 tree arg;
5242 vec<tree, va_gc> *tempvec;
5243 vec_alloc (tempvec, args->length () - 1);
5244 for (ix = 1; args->iterate (ix, &arg); ++ix)
5245 tempvec->quick_push (arg);
5246 non_static_args = tempvec;
5247 first_arg = (*args)[0];
5250 fn_first_arg = first_arg;
5251 fn_args = non_static_args;
5253 else
5255 /* Otherwise, just use the list of arguments provided. */
5256 fn_first_arg = NULL_TREE;
5257 fn_args = args;
5260 if (TREE_CODE (fn) == TEMPLATE_DECL)
5261 add_template_candidate (candidates,
5263 ctype,
5264 explicit_targs,
5265 fn_first_arg,
5266 fn_args,
5267 return_type,
5268 access_path,
5269 conversion_path,
5270 flags,
5271 strict,
5272 complain);
5273 else if (!template_only)
5274 add_function_candidate (candidates,
5276 ctype,
5277 fn_first_arg,
5278 fn_args,
5279 access_path,
5280 conversion_path,
5281 flags,
5282 complain);
5286 static tree
5287 build_new_op_1 (location_t loc, enum tree_code code, int flags, tree arg1,
5288 tree arg2, tree arg3, tree *overload, tsubst_flags_t complain)
5290 struct z_candidate *candidates = 0, *cand;
5291 vec<tree, va_gc> *arglist;
5292 tree fnname;
5293 tree args[3];
5294 tree result = NULL_TREE;
5295 bool result_valid_p = false;
5296 enum tree_code code2 = NOP_EXPR;
5297 enum tree_code code_orig_arg1 = ERROR_MARK;
5298 enum tree_code code_orig_arg2 = ERROR_MARK;
5299 conversion *conv;
5300 void *p;
5301 bool strict_p;
5302 bool any_viable_p;
5304 if (error_operand_p (arg1)
5305 || error_operand_p (arg2)
5306 || error_operand_p (arg3))
5307 return error_mark_node;
5309 if (code == MODIFY_EXPR)
5311 code2 = TREE_CODE (arg3);
5312 arg3 = NULL_TREE;
5313 fnname = ansi_assopname (code2);
5315 else
5316 fnname = ansi_opname (code);
5318 arg1 = prep_operand (arg1);
5320 bool memonly = false;
5321 switch (code)
5323 case NEW_EXPR:
5324 case VEC_NEW_EXPR:
5325 case VEC_DELETE_EXPR:
5326 case DELETE_EXPR:
5327 /* Use build_op_new_call and build_op_delete_call instead. */
5328 gcc_unreachable ();
5330 case CALL_EXPR:
5331 /* Use build_op_call instead. */
5332 gcc_unreachable ();
5334 case TRUTH_ORIF_EXPR:
5335 case TRUTH_ANDIF_EXPR:
5336 case TRUTH_AND_EXPR:
5337 case TRUTH_OR_EXPR:
5338 /* These are saved for the sake of warn_logical_operator. */
5339 code_orig_arg1 = TREE_CODE (arg1);
5340 code_orig_arg2 = TREE_CODE (arg2);
5341 break;
5342 case GT_EXPR:
5343 case LT_EXPR:
5344 case GE_EXPR:
5345 case LE_EXPR:
5346 case EQ_EXPR:
5347 case NE_EXPR:
5348 /* These are saved for the sake of maybe_warn_bool_compare. */
5349 code_orig_arg1 = TREE_CODE (TREE_TYPE (arg1));
5350 code_orig_arg2 = TREE_CODE (TREE_TYPE (arg2));
5351 break;
5353 /* =, ->, [], () must be non-static member functions. */
5354 case MODIFY_EXPR:
5355 if (code2 != NOP_EXPR)
5356 break;
5357 case COMPONENT_REF:
5358 case ARRAY_REF:
5359 memonly = true;
5360 break;
5362 default:
5363 break;
5366 arg2 = prep_operand (arg2);
5367 arg3 = prep_operand (arg3);
5369 if (code == COND_EXPR)
5370 /* Use build_conditional_expr instead. */
5371 gcc_unreachable ();
5372 else if (! OVERLOAD_TYPE_P (TREE_TYPE (arg1))
5373 && (! arg2 || ! OVERLOAD_TYPE_P (TREE_TYPE (arg2))))
5374 goto builtin;
5376 if (code == POSTINCREMENT_EXPR || code == POSTDECREMENT_EXPR)
5377 arg2 = integer_zero_node;
5379 vec_alloc (arglist, 3);
5380 arglist->quick_push (arg1);
5381 if (arg2 != NULL_TREE)
5382 arglist->quick_push (arg2);
5383 if (arg3 != NULL_TREE)
5384 arglist->quick_push (arg3);
5386 /* Get the high-water mark for the CONVERSION_OBSTACK. */
5387 p = conversion_obstack_alloc (0);
5389 /* Add namespace-scope operators to the list of functions to
5390 consider. */
5391 if (!memonly)
5392 add_candidates (lookup_function_nonclass (fnname, arglist,
5393 /*block_p=*/true),
5394 NULL_TREE, arglist, NULL_TREE,
5395 NULL_TREE, false, NULL_TREE, NULL_TREE,
5396 flags, &candidates, complain);
5398 args[0] = arg1;
5399 args[1] = arg2;
5400 args[2] = NULL_TREE;
5402 /* Add class-member operators to the candidate set. */
5403 if (CLASS_TYPE_P (TREE_TYPE (arg1)))
5405 tree fns;
5407 fns = lookup_fnfields (TREE_TYPE (arg1), fnname, 1);
5408 if (fns == error_mark_node)
5410 result = error_mark_node;
5411 goto user_defined_result_ready;
5413 if (fns)
5414 add_candidates (BASELINK_FUNCTIONS (fns),
5415 NULL_TREE, arglist, NULL_TREE,
5416 NULL_TREE, false,
5417 BASELINK_BINFO (fns),
5418 BASELINK_ACCESS_BINFO (fns),
5419 flags, &candidates, complain);
5421 /* Per 13.3.1.2/3, 2nd bullet, if no operand has a class type, then
5422 only non-member functions that have type T1 or reference to
5423 cv-qualified-opt T1 for the first argument, if the first argument
5424 has an enumeration type, or T2 or reference to cv-qualified-opt
5425 T2 for the second argument, if the the second argument has an
5426 enumeration type. Filter out those that don't match. */
5427 else if (! arg2 || ! CLASS_TYPE_P (TREE_TYPE (arg2)))
5429 struct z_candidate **candp, **next;
5431 for (candp = &candidates; *candp; candp = next)
5433 tree parmlist, parmtype;
5434 int i, nargs = (arg2 ? 2 : 1);
5436 cand = *candp;
5437 next = &cand->next;
5439 parmlist = TYPE_ARG_TYPES (TREE_TYPE (cand->fn));
5441 for (i = 0; i < nargs; ++i)
5443 parmtype = TREE_VALUE (parmlist);
5445 if (TREE_CODE (parmtype) == REFERENCE_TYPE)
5446 parmtype = TREE_TYPE (parmtype);
5447 if (TREE_CODE (TREE_TYPE (args[i])) == ENUMERAL_TYPE
5448 && (same_type_ignoring_top_level_qualifiers_p
5449 (TREE_TYPE (args[i]), parmtype)))
5450 break;
5452 parmlist = TREE_CHAIN (parmlist);
5455 /* No argument has an appropriate type, so remove this
5456 candidate function from the list. */
5457 if (i == nargs)
5459 *candp = cand->next;
5460 next = candp;
5465 add_builtin_candidates (&candidates, code, code2, fnname, args,
5466 flags, complain);
5468 switch (code)
5470 case COMPOUND_EXPR:
5471 case ADDR_EXPR:
5472 /* For these, the built-in candidates set is empty
5473 [over.match.oper]/3. We don't want non-strict matches
5474 because exact matches are always possible with built-in
5475 operators. The built-in candidate set for COMPONENT_REF
5476 would be empty too, but since there are no such built-in
5477 operators, we accept non-strict matches for them. */
5478 strict_p = true;
5479 break;
5481 default:
5482 strict_p = false;
5483 break;
5486 candidates = splice_viable (candidates, strict_p, &any_viable_p);
5487 if (!any_viable_p)
5489 switch (code)
5491 case POSTINCREMENT_EXPR:
5492 case POSTDECREMENT_EXPR:
5493 /* Don't try anything fancy if we're not allowed to produce
5494 errors. */
5495 if (!(complain & tf_error))
5496 return error_mark_node;
5498 /* Look for an `operator++ (int)'. Pre-1985 C++ didn't
5499 distinguish between prefix and postfix ++ and
5500 operator++() was used for both, so we allow this with
5501 -fpermissive. */
5502 else
5504 const char *msg = (flag_permissive)
5505 ? G_("no %<%D(int)%> declared for postfix %qs,"
5506 " trying prefix operator instead")
5507 : G_("no %<%D(int)%> declared for postfix %qs");
5508 permerror (loc, msg, fnname, operator_name_info[code].name);
5511 if (!flag_permissive)
5512 return error_mark_node;
5514 if (code == POSTINCREMENT_EXPR)
5515 code = PREINCREMENT_EXPR;
5516 else
5517 code = PREDECREMENT_EXPR;
5518 result = build_new_op_1 (loc, code, flags, arg1, NULL_TREE,
5519 NULL_TREE, overload, complain);
5520 break;
5522 /* The caller will deal with these. */
5523 case ADDR_EXPR:
5524 case COMPOUND_EXPR:
5525 case COMPONENT_REF:
5526 result = NULL_TREE;
5527 result_valid_p = true;
5528 break;
5530 default:
5531 if (complain & tf_error)
5533 /* If one of the arguments of the operator represents
5534 an invalid use of member function pointer, try to report
5535 a meaningful error ... */
5536 if (invalid_nonstatic_memfn_p (arg1, tf_error)
5537 || invalid_nonstatic_memfn_p (arg2, tf_error)
5538 || invalid_nonstatic_memfn_p (arg3, tf_error))
5539 /* We displayed the error message. */;
5540 else
5542 /* ... Otherwise, report the more generic
5543 "no matching operator found" error */
5544 op_error (loc, code, code2, arg1, arg2, arg3, FALSE);
5545 print_z_candidates (loc, candidates);
5548 result = error_mark_node;
5549 break;
5552 else
5554 cand = tourney (candidates, complain);
5555 if (cand == 0)
5557 if (complain & tf_error)
5559 op_error (loc, code, code2, arg1, arg2, arg3, TRUE);
5560 print_z_candidates (loc, candidates);
5562 result = error_mark_node;
5564 else if (TREE_CODE (cand->fn) == FUNCTION_DECL)
5566 if (overload)
5567 *overload = cand->fn;
5569 if (resolve_args (arglist, complain) == NULL)
5570 result = error_mark_node;
5571 else
5572 result = build_over_call (cand, LOOKUP_NORMAL, complain);
5574 else
5576 /* Give any warnings we noticed during overload resolution. */
5577 if (cand->warnings && (complain & tf_warning))
5579 struct candidate_warning *w;
5580 for (w = cand->warnings; w; w = w->next)
5581 joust (cand, w->loser, 1, complain);
5584 /* Check for comparison of different enum types. */
5585 switch (code)
5587 case GT_EXPR:
5588 case LT_EXPR:
5589 case GE_EXPR:
5590 case LE_EXPR:
5591 case EQ_EXPR:
5592 case NE_EXPR:
5593 if (TREE_CODE (TREE_TYPE (arg1)) == ENUMERAL_TYPE
5594 && TREE_CODE (TREE_TYPE (arg2)) == ENUMERAL_TYPE
5595 && (TYPE_MAIN_VARIANT (TREE_TYPE (arg1))
5596 != TYPE_MAIN_VARIANT (TREE_TYPE (arg2)))
5597 && (complain & tf_warning))
5599 warning (OPT_Wenum_compare,
5600 "comparison between %q#T and %q#T",
5601 TREE_TYPE (arg1), TREE_TYPE (arg2));
5603 break;
5604 default:
5605 break;
5608 /* We need to strip any leading REF_BIND so that bitfields
5609 don't cause errors. This should not remove any important
5610 conversions, because builtins don't apply to class
5611 objects directly. */
5612 conv = cand->convs[0];
5613 if (conv->kind == ck_ref_bind)
5614 conv = next_conversion (conv);
5615 arg1 = convert_like (conv, arg1, complain);
5617 if (arg2)
5619 conv = cand->convs[1];
5620 if (conv->kind == ck_ref_bind)
5621 conv = next_conversion (conv);
5622 else
5623 arg2 = decay_conversion (arg2, complain);
5625 /* We need to call warn_logical_operator before
5626 converting arg2 to a boolean_type, but after
5627 decaying an enumerator to its value. */
5628 if (complain & tf_warning)
5629 warn_logical_operator (loc, code, boolean_type_node,
5630 code_orig_arg1, arg1,
5631 code_orig_arg2, arg2);
5633 arg2 = convert_like (conv, arg2, complain);
5635 if (arg3)
5637 conv = cand->convs[2];
5638 if (conv->kind == ck_ref_bind)
5639 conv = next_conversion (conv);
5640 arg3 = convert_like (conv, arg3, complain);
5646 user_defined_result_ready:
5648 /* Free all the conversions we allocated. */
5649 obstack_free (&conversion_obstack, p);
5651 if (result || result_valid_p)
5652 return result;
5654 builtin:
5655 switch (code)
5657 case MODIFY_EXPR:
5658 return cp_build_modify_expr (arg1, code2, arg2, complain);
5660 case INDIRECT_REF:
5661 return cp_build_indirect_ref (arg1, RO_UNARY_STAR, complain);
5663 case TRUTH_ANDIF_EXPR:
5664 case TRUTH_ORIF_EXPR:
5665 case TRUTH_AND_EXPR:
5666 case TRUTH_OR_EXPR:
5667 warn_logical_operator (loc, code, boolean_type_node,
5668 code_orig_arg1, arg1, code_orig_arg2, arg2);
5669 /* Fall through. */
5670 case GT_EXPR:
5671 case LT_EXPR:
5672 case GE_EXPR:
5673 case LE_EXPR:
5674 case EQ_EXPR:
5675 case NE_EXPR:
5676 if ((code_orig_arg1 == BOOLEAN_TYPE)
5677 ^ (code_orig_arg2 == BOOLEAN_TYPE))
5678 maybe_warn_bool_compare (loc, code, arg1, arg2);
5679 /* Fall through. */
5680 case PLUS_EXPR:
5681 case MINUS_EXPR:
5682 case MULT_EXPR:
5683 case TRUNC_DIV_EXPR:
5684 case MAX_EXPR:
5685 case MIN_EXPR:
5686 case LSHIFT_EXPR:
5687 case RSHIFT_EXPR:
5688 case TRUNC_MOD_EXPR:
5689 case BIT_AND_EXPR:
5690 case BIT_IOR_EXPR:
5691 case BIT_XOR_EXPR:
5692 return cp_build_binary_op (loc, code, arg1, arg2, complain);
5694 case UNARY_PLUS_EXPR:
5695 case NEGATE_EXPR:
5696 case BIT_NOT_EXPR:
5697 case TRUTH_NOT_EXPR:
5698 case PREINCREMENT_EXPR:
5699 case POSTINCREMENT_EXPR:
5700 case PREDECREMENT_EXPR:
5701 case POSTDECREMENT_EXPR:
5702 case REALPART_EXPR:
5703 case IMAGPART_EXPR:
5704 case ABS_EXPR:
5705 return cp_build_unary_op (code, arg1, candidates != 0, complain);
5707 case ARRAY_REF:
5708 return cp_build_array_ref (input_location, arg1, arg2, complain);
5710 case MEMBER_REF:
5711 return build_m_component_ref (cp_build_indirect_ref (arg1, RO_ARROW_STAR,
5712 complain),
5713 arg2, complain);
5715 /* The caller will deal with these. */
5716 case ADDR_EXPR:
5717 case COMPONENT_REF:
5718 case COMPOUND_EXPR:
5719 return NULL_TREE;
5721 default:
5722 gcc_unreachable ();
5724 return NULL_TREE;
5727 /* Wrapper for above. */
5729 tree
5730 build_new_op (location_t loc, enum tree_code code, int flags,
5731 tree arg1, tree arg2, tree arg3,
5732 tree *overload, tsubst_flags_t complain)
5734 tree ret;
5735 bool subtime = timevar_cond_start (TV_OVERLOAD);
5736 ret = build_new_op_1 (loc, code, flags, arg1, arg2, arg3,
5737 overload, complain);
5738 timevar_cond_stop (TV_OVERLOAD, subtime);
5739 return ret;
5742 /* Returns true iff T, an element of an OVERLOAD chain, is a usual
5743 deallocation function (3.7.4.2 [basic.stc.dynamic.deallocation]). */
5745 bool
5746 non_placement_deallocation_fn_p (tree t)
5748 /* A template instance is never a usual deallocation function,
5749 regardless of its signature. */
5750 if (TREE_CODE (t) == TEMPLATE_DECL
5751 || primary_template_instantiation_p (t))
5752 return false;
5754 /* If a class T has a member deallocation function named operator delete
5755 with exactly one parameter, then that function is a usual
5756 (non-placement) deallocation function. If class T does not declare
5757 such an operator delete but does declare a member deallocation
5758 function named operator delete with exactly two parameters, the second
5759 of which has type std::size_t (18.2), then this function is a usual
5760 deallocation function. */
5761 bool global = DECL_NAMESPACE_SCOPE_P (t);
5762 t = FUNCTION_ARG_CHAIN (t);
5763 if (t == void_list_node
5764 || (t && same_type_p (TREE_VALUE (t), size_type_node)
5765 && (!global || flag_sized_deallocation)
5766 && TREE_CHAIN (t) == void_list_node))
5767 return true;
5768 return false;
5771 /* Build a call to operator delete. This has to be handled very specially,
5772 because the restrictions on what signatures match are different from all
5773 other call instances. For a normal delete, only a delete taking (void *)
5774 or (void *, size_t) is accepted. For a placement delete, only an exact
5775 match with the placement new is accepted.
5777 CODE is either DELETE_EXPR or VEC_DELETE_EXPR.
5778 ADDR is the pointer to be deleted.
5779 SIZE is the size of the memory block to be deleted.
5780 GLOBAL_P is true if the delete-expression should not consider
5781 class-specific delete operators.
5782 PLACEMENT is the corresponding placement new call, or NULL_TREE.
5784 If this call to "operator delete" is being generated as part to
5785 deallocate memory allocated via a new-expression (as per [expr.new]
5786 which requires that if the initialization throws an exception then
5787 we call a deallocation function), then ALLOC_FN is the allocation
5788 function. */
5790 tree
5791 build_op_delete_call (enum tree_code code, tree addr, tree size,
5792 bool global_p, tree placement,
5793 tree alloc_fn, tsubst_flags_t complain)
5795 tree fn = NULL_TREE;
5796 tree fns, fnname, type, t;
5798 if (addr == error_mark_node)
5799 return error_mark_node;
5801 type = strip_array_types (TREE_TYPE (TREE_TYPE (addr)));
5803 fnname = ansi_opname (code);
5805 if (CLASS_TYPE_P (type)
5806 && COMPLETE_TYPE_P (complete_type (type))
5807 && !global_p)
5808 /* In [class.free]
5810 If the result of the lookup is ambiguous or inaccessible, or if
5811 the lookup selects a placement deallocation function, the
5812 program is ill-formed.
5814 Therefore, we ask lookup_fnfields to complain about ambiguity. */
5816 fns = lookup_fnfields (TYPE_BINFO (type), fnname, 1);
5817 if (fns == error_mark_node)
5818 return error_mark_node;
5820 else
5821 fns = NULL_TREE;
5823 if (fns == NULL_TREE)
5824 fns = lookup_name_nonclass (fnname);
5826 /* Strip const and volatile from addr. */
5827 addr = cp_convert (ptr_type_node, addr, complain);
5829 if (placement)
5831 /* "A declaration of a placement deallocation function matches the
5832 declaration of a placement allocation function if it has the same
5833 number of parameters and, after parameter transformations (8.3.5),
5834 all parameter types except the first are identical."
5836 So we build up the function type we want and ask instantiate_type
5837 to get it for us. */
5838 t = FUNCTION_ARG_CHAIN (alloc_fn);
5839 t = tree_cons (NULL_TREE, ptr_type_node, t);
5840 t = build_function_type (void_type_node, t);
5842 fn = instantiate_type (t, fns, tf_none);
5843 if (fn == error_mark_node)
5844 return NULL_TREE;
5846 if (BASELINK_P (fn))
5847 fn = BASELINK_FUNCTIONS (fn);
5849 /* "If the lookup finds the two-parameter form of a usual deallocation
5850 function (3.7.4.2) and that function, considered as a placement
5851 deallocation function, would have been selected as a match for the
5852 allocation function, the program is ill-formed." */
5853 if (non_placement_deallocation_fn_p (fn))
5855 /* But if the class has an operator delete (void *), then that is
5856 the usual deallocation function, so we shouldn't complain
5857 about using the operator delete (void *, size_t). */
5858 for (t = BASELINK_P (fns) ? BASELINK_FUNCTIONS (fns) : fns;
5859 t; t = OVL_NEXT (t))
5861 tree elt = OVL_CURRENT (t);
5862 if (non_placement_deallocation_fn_p (elt)
5863 && FUNCTION_ARG_CHAIN (elt) == void_list_node)
5864 goto ok;
5866 if (complain & tf_error)
5868 permerror (0, "non-placement deallocation function %q+D", fn);
5869 permerror (input_location, "selected for placement delete");
5871 else
5872 return error_mark_node;
5873 ok:;
5876 else
5877 /* "Any non-placement deallocation function matches a non-placement
5878 allocation function. If the lookup finds a single matching
5879 deallocation function, that function will be called; otherwise, no
5880 deallocation function will be called." */
5881 for (t = BASELINK_P (fns) ? BASELINK_FUNCTIONS (fns) : fns;
5882 t; t = OVL_NEXT (t))
5884 tree elt = OVL_CURRENT (t);
5885 if (non_placement_deallocation_fn_p (elt))
5887 fn = elt;
5888 /* "If a class T has a member deallocation function named
5889 operator delete with exactly one parameter, then that
5890 function is a usual (non-placement) deallocation
5891 function. If class T does not declare such an operator
5892 delete but does declare a member deallocation function named
5893 operator delete with exactly two parameters, the second of
5894 which has type std::size_t (18.2), then this function is a
5895 usual deallocation function."
5897 So in a class (void*) beats (void*, size_t). */
5898 if (DECL_CLASS_SCOPE_P (fn))
5900 if (FUNCTION_ARG_CHAIN (fn) == void_list_node)
5901 break;
5903 /* At global scope (in C++14 and above) the rules are different:
5905 If deallocation function lookup finds both a usual
5906 deallocation function with only a pointer parameter and a
5907 usual deallocation function with both a pointer parameter
5908 and a size parameter, the function to be called is selected
5909 as follows:
5911 * If the type is complete and if, for the second alternative
5912 (delete array) only, the operand is a pointer to a class
5913 type with a non-trivial destructor or a (possibly
5914 multi-dimensional) array thereof, the function with two
5915 parameters is selected.
5917 * Otherwise, it is unspecified which of the two deallocation
5918 functions is selected. */
5919 else
5921 bool want_size = COMPLETE_TYPE_P (type);
5922 if (code == VEC_DELETE_EXPR
5923 && !TYPE_VEC_NEW_USES_COOKIE (type))
5924 /* We need a cookie to determine the array size. */
5925 want_size = false;
5926 bool have_size = (FUNCTION_ARG_CHAIN (fn) != void_list_node);
5927 if (want_size == have_size)
5928 break;
5933 /* If we have a matching function, call it. */
5934 if (fn)
5936 gcc_assert (TREE_CODE (fn) == FUNCTION_DECL);
5938 /* If the FN is a member function, make sure that it is
5939 accessible. */
5940 if (BASELINK_P (fns))
5941 perform_or_defer_access_check (BASELINK_BINFO (fns), fn, fn,
5942 complain);
5944 /* Core issue 901: It's ok to new a type with deleted delete. */
5945 if (DECL_DELETED_FN (fn) && alloc_fn)
5946 return NULL_TREE;
5948 if (placement)
5950 /* The placement args might not be suitable for overload
5951 resolution at this point, so build the call directly. */
5952 int nargs = call_expr_nargs (placement);
5953 tree *argarray = XALLOCAVEC (tree, nargs);
5954 int i;
5955 argarray[0] = addr;
5956 for (i = 1; i < nargs; i++)
5957 argarray[i] = CALL_EXPR_ARG (placement, i);
5958 mark_used (fn);
5959 return build_cxx_call (fn, nargs, argarray, complain);
5961 else
5963 tree ret;
5964 vec<tree, va_gc> *args = make_tree_vector ();
5965 args->quick_push (addr);
5966 if (FUNCTION_ARG_CHAIN (fn) != void_list_node)
5967 args->quick_push (size);
5968 ret = cp_build_function_call_vec (fn, &args, complain);
5969 release_tree_vector (args);
5970 return ret;
5974 /* [expr.new]
5976 If no unambiguous matching deallocation function can be found,
5977 propagating the exception does not cause the object's memory to
5978 be freed. */
5979 if (alloc_fn)
5981 if ((complain & tf_warning)
5982 && !placement)
5983 warning (0, "no corresponding deallocation function for %qD",
5984 alloc_fn);
5985 return NULL_TREE;
5988 if (complain & tf_error)
5989 error ("no suitable %<operator %s%> for %qT",
5990 operator_name_info[(int)code].name, type);
5991 return error_mark_node;
5994 /* If the current scope isn't allowed to access DECL along
5995 BASETYPE_PATH, give an error. The most derived class in
5996 BASETYPE_PATH is the one used to qualify DECL. DIAG_DECL is
5997 the declaration to use in the error diagnostic. */
5999 bool
6000 enforce_access (tree basetype_path, tree decl, tree diag_decl,
6001 tsubst_flags_t complain)
6003 gcc_assert (TREE_CODE (basetype_path) == TREE_BINFO);
6005 if (!accessible_p (basetype_path, decl, true))
6007 if (complain & tf_error)
6009 if (TREE_PRIVATE (decl))
6010 error ("%q+#D is private", diag_decl);
6011 else if (TREE_PROTECTED (decl))
6012 error ("%q+#D is protected", diag_decl);
6013 else
6014 error ("%q+#D is inaccessible", diag_decl);
6015 error ("within this context");
6017 return false;
6020 return true;
6023 /* Initialize a temporary of type TYPE with EXPR. The FLAGS are a
6024 bitwise or of LOOKUP_* values. If any errors are warnings are
6025 generated, set *DIAGNOSTIC_FN to "error" or "warning",
6026 respectively. If no diagnostics are generated, set *DIAGNOSTIC_FN
6027 to NULL. */
6029 static tree
6030 build_temp (tree expr, tree type, int flags,
6031 diagnostic_t *diagnostic_kind, tsubst_flags_t complain)
6033 int savew, savee;
6034 vec<tree, va_gc> *args;
6036 savew = warningcount + werrorcount, savee = errorcount;
6037 args = make_tree_vector_single (expr);
6038 expr = build_special_member_call (NULL_TREE, complete_ctor_identifier,
6039 &args, type, flags, complain);
6040 release_tree_vector (args);
6041 if (warningcount + werrorcount > savew)
6042 *diagnostic_kind = DK_WARNING;
6043 else if (errorcount > savee)
6044 *diagnostic_kind = DK_ERROR;
6045 else
6046 *diagnostic_kind = DK_UNSPECIFIED;
6047 return expr;
6050 /* Perform warnings about peculiar, but valid, conversions from/to NULL.
6051 EXPR is implicitly converted to type TOTYPE.
6052 FN and ARGNUM are used for diagnostics. */
6054 static void
6055 conversion_null_warnings (tree totype, tree expr, tree fn, int argnum)
6057 /* Issue warnings about peculiar, but valid, uses of NULL. */
6058 if (expr == null_node && TREE_CODE (totype) != BOOLEAN_TYPE
6059 && ARITHMETIC_TYPE_P (totype))
6061 source_location loc =
6062 expansion_point_location_if_in_system_header (input_location);
6064 if (fn)
6065 warning_at (loc, OPT_Wconversion_null,
6066 "passing NULL to non-pointer argument %P of %qD",
6067 argnum, fn);
6068 else
6069 warning_at (loc, OPT_Wconversion_null,
6070 "converting to non-pointer type %qT from NULL", totype);
6073 /* Issue warnings if "false" is converted to a NULL pointer */
6074 else if (TREE_CODE (TREE_TYPE (expr)) == BOOLEAN_TYPE
6075 && TYPE_PTR_P (totype))
6077 if (fn)
6078 warning_at (input_location, OPT_Wconversion_null,
6079 "converting %<false%> to pointer type for argument %P "
6080 "of %qD", argnum, fn);
6081 else
6082 warning_at (input_location, OPT_Wconversion_null,
6083 "converting %<false%> to pointer type %qT", totype);
6087 /* We gave a diagnostic during a conversion. If this was in the second
6088 standard conversion sequence of a user-defined conversion sequence, say
6089 which user-defined conversion. */
6091 static void
6092 maybe_print_user_conv_context (conversion *convs)
6094 if (convs->user_conv_p)
6095 for (conversion *t = convs; t; t = next_conversion (t))
6096 if (t->kind == ck_user)
6098 print_z_candidate (0, " after user-defined conversion:",
6099 t->cand);
6100 break;
6104 /* Perform the conversions in CONVS on the expression EXPR. FN and
6105 ARGNUM are used for diagnostics. ARGNUM is zero based, -1
6106 indicates the `this' argument of a method. INNER is nonzero when
6107 being called to continue a conversion chain. It is negative when a
6108 reference binding will be applied, positive otherwise. If
6109 ISSUE_CONVERSION_WARNINGS is true, warnings about suspicious
6110 conversions will be emitted if appropriate. If C_CAST_P is true,
6111 this conversion is coming from a C-style cast; in that case,
6112 conversions to inaccessible bases are permitted. */
6114 static tree
6115 convert_like_real (conversion *convs, tree expr, tree fn, int argnum,
6116 int inner, bool issue_conversion_warnings,
6117 bool c_cast_p, tsubst_flags_t complain)
6119 tree totype = convs->type;
6120 diagnostic_t diag_kind;
6121 int flags;
6122 location_t loc = EXPR_LOC_OR_LOC (expr, input_location);
6124 if (convs->bad_p && !(complain & tf_error))
6125 return error_mark_node;
6127 if (convs->bad_p
6128 && convs->kind != ck_user
6129 && convs->kind != ck_list
6130 && convs->kind != ck_ambig
6131 && (convs->kind != ck_ref_bind
6132 || (convs->user_conv_p && next_conversion (convs)->bad_p))
6133 && (convs->kind != ck_rvalue
6134 || SCALAR_TYPE_P (totype))
6135 && convs->kind != ck_base)
6137 bool complained = false;
6138 conversion *t = convs;
6140 /* Give a helpful error if this is bad because of excess braces. */
6141 if (BRACE_ENCLOSED_INITIALIZER_P (expr)
6142 && SCALAR_TYPE_P (totype)
6143 && CONSTRUCTOR_NELTS (expr) > 0
6144 && BRACE_ENCLOSED_INITIALIZER_P (CONSTRUCTOR_ELT (expr, 0)->value))
6146 complained = permerror (loc, "too many braces around initializer "
6147 "for %qT", totype);
6148 while (BRACE_ENCLOSED_INITIALIZER_P (expr)
6149 && CONSTRUCTOR_NELTS (expr) == 1)
6150 expr = CONSTRUCTOR_ELT (expr, 0)->value;
6153 /* Give a helpful error if this is bad because a conversion to bool
6154 from std::nullptr_t requires direct-initialization. */
6155 if (NULLPTR_TYPE_P (TREE_TYPE (expr))
6156 && TREE_CODE (totype) == BOOLEAN_TYPE)
6157 complained = permerror (loc, "converting to %qT from %qT requires "
6158 "direct-initialization",
6159 totype, TREE_TYPE (expr));
6161 for (; t ; t = next_conversion (t))
6163 if (t->kind == ck_user && t->cand->reason)
6165 complained = permerror (loc, "invalid user-defined conversion "
6166 "from %qT to %qT", TREE_TYPE (expr),
6167 totype);
6168 if (complained)
6169 print_z_candidate (loc, "candidate is:", t->cand);
6170 expr = convert_like_real (t, expr, fn, argnum, 1,
6171 /*issue_conversion_warnings=*/false,
6172 /*c_cast_p=*/false,
6173 complain);
6174 if (convs->kind == ck_ref_bind)
6175 expr = convert_to_reference (totype, expr, CONV_IMPLICIT,
6176 LOOKUP_NORMAL, NULL_TREE,
6177 complain);
6178 else
6179 expr = cp_convert (totype, expr, complain);
6180 if (complained && fn)
6181 inform (DECL_SOURCE_LOCATION (fn),
6182 " initializing argument %P of %qD", argnum, fn);
6183 return expr;
6185 else if (t->kind == ck_user || !t->bad_p)
6187 expr = convert_like_real (t, expr, fn, argnum, 1,
6188 /*issue_conversion_warnings=*/false,
6189 /*c_cast_p=*/false,
6190 complain);
6191 break;
6193 else if (t->kind == ck_ambig)
6194 return convert_like_real (t, expr, fn, argnum, 1,
6195 /*issue_conversion_warnings=*/false,
6196 /*c_cast_p=*/false,
6197 complain);
6198 else if (t->kind == ck_identity)
6199 break;
6201 if (!complained)
6202 complained = permerror (loc, "invalid conversion from %qT to %qT",
6203 TREE_TYPE (expr), totype);
6204 if (complained && fn)
6205 inform (DECL_SOURCE_LOCATION (fn),
6206 " initializing argument %P of %qD", argnum, fn);
6208 return cp_convert (totype, expr, complain);
6211 if (issue_conversion_warnings && (complain & tf_warning))
6212 conversion_null_warnings (totype, expr, fn, argnum);
6214 switch (convs->kind)
6216 case ck_user:
6218 struct z_candidate *cand = convs->cand;
6219 tree convfn = cand->fn;
6220 unsigned i;
6222 /* When converting from an init list we consider explicit
6223 constructors, but actually trying to call one is an error. */
6224 if (DECL_NONCONVERTING_P (convfn) && DECL_CONSTRUCTOR_P (convfn)
6225 /* Unless this is for direct-list-initialization. */
6226 && !DIRECT_LIST_INIT_P (expr))
6228 if (!(complain & tf_error))
6229 return error_mark_node;
6230 error ("converting to %qT from initializer list would use "
6231 "explicit constructor %qD", totype, convfn);
6234 /* If we're initializing from {}, it's value-initialization. */
6235 if (BRACE_ENCLOSED_INITIALIZER_P (expr)
6236 && CONSTRUCTOR_NELTS (expr) == 0
6237 && TYPE_HAS_DEFAULT_CONSTRUCTOR (totype))
6239 bool direct = CONSTRUCTOR_IS_DIRECT_INIT (expr);
6240 expr = build_value_init (totype, complain);
6241 expr = get_target_expr_sfinae (expr, complain);
6242 if (expr != error_mark_node)
6244 TARGET_EXPR_LIST_INIT_P (expr) = true;
6245 TARGET_EXPR_DIRECT_INIT_P (expr) = direct;
6247 return expr;
6250 expr = mark_rvalue_use (expr);
6252 /* Set user_conv_p on the argument conversions, so rvalue/base
6253 handling knows not to allow any more UDCs. */
6254 for (i = 0; i < cand->num_convs; ++i)
6255 cand->convs[i]->user_conv_p = true;
6257 expr = build_over_call (cand, LOOKUP_NORMAL, complain);
6259 /* If this is a constructor or a function returning an aggr type,
6260 we need to build up a TARGET_EXPR. */
6261 if (DECL_CONSTRUCTOR_P (convfn))
6263 expr = build_cplus_new (totype, expr, complain);
6265 /* Remember that this was list-initialization. */
6266 if (convs->check_narrowing && expr != error_mark_node)
6267 TARGET_EXPR_LIST_INIT_P (expr) = true;
6270 return expr;
6272 case ck_identity:
6273 if (BRACE_ENCLOSED_INITIALIZER_P (expr))
6275 int nelts = CONSTRUCTOR_NELTS (expr);
6276 if (nelts == 0)
6277 expr = build_value_init (totype, complain);
6278 else if (nelts == 1)
6279 expr = CONSTRUCTOR_ELT (expr, 0)->value;
6280 else
6281 gcc_unreachable ();
6283 expr = mark_rvalue_use (expr);
6285 if (type_unknown_p (expr))
6286 expr = instantiate_type (totype, expr, complain);
6287 /* Convert a constant to its underlying value, unless we are
6288 about to bind it to a reference, in which case we need to
6289 leave it as an lvalue. */
6290 if (inner >= 0)
6292 expr = scalar_constant_value (expr);
6293 if (expr == null_node && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (totype))
6294 /* If __null has been converted to an integer type, we do not
6295 want to warn about uses of EXPR as an integer, rather than
6296 as a pointer. */
6297 expr = build_int_cst (totype, 0);
6299 return expr;
6300 case ck_ambig:
6301 /* We leave bad_p off ck_ambig because overload resolution considers
6302 it valid, it just fails when we try to perform it. So we need to
6303 check complain here, too. */
6304 if (complain & tf_error)
6306 /* Call build_user_type_conversion again for the error. */
6307 build_user_type_conversion (totype, convs->u.expr, LOOKUP_NORMAL,
6308 complain);
6309 if (fn)
6310 inform (input_location, " initializing argument %P of %q+D",
6311 argnum, fn);
6313 return error_mark_node;
6315 case ck_list:
6317 /* Conversion to std::initializer_list<T>. */
6318 tree elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (totype), 0);
6319 tree new_ctor = build_constructor (init_list_type_node, NULL);
6320 unsigned len = CONSTRUCTOR_NELTS (expr);
6321 tree array, val, field;
6322 vec<constructor_elt, va_gc> *vec = NULL;
6323 unsigned ix;
6325 /* Convert all the elements. */
6326 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expr), ix, val)
6328 tree sub = convert_like_real (convs->u.list[ix], val, fn, argnum,
6329 1, false, false, complain);
6330 if (sub == error_mark_node)
6331 return sub;
6332 if (!BRACE_ENCLOSED_INITIALIZER_P (val)
6333 && !check_narrowing (TREE_TYPE (sub), val, complain))
6334 return error_mark_node;
6335 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_ctor), NULL_TREE, sub);
6336 if (!TREE_CONSTANT (sub))
6337 TREE_CONSTANT (new_ctor) = false;
6339 /* Build up the array. */
6340 elttype = cp_build_qualified_type
6341 (elttype, cp_type_quals (elttype) | TYPE_QUAL_CONST);
6342 array = build_array_of_n_type (elttype, len);
6343 array = finish_compound_literal (array, new_ctor, complain);
6344 /* Take the address explicitly rather than via decay_conversion
6345 to avoid the error about taking the address of a temporary. */
6346 array = cp_build_addr_expr (array, complain);
6347 array = cp_convert (build_pointer_type (elttype), array, complain);
6348 if (array == error_mark_node)
6349 return error_mark_node;
6351 /* Build up the initializer_list object. */
6352 totype = complete_type (totype);
6353 field = next_initializable_field (TYPE_FIELDS (totype));
6354 CONSTRUCTOR_APPEND_ELT (vec, field, array);
6355 field = next_initializable_field (DECL_CHAIN (field));
6356 CONSTRUCTOR_APPEND_ELT (vec, field, size_int (len));
6357 new_ctor = build_constructor (totype, vec);
6358 return get_target_expr_sfinae (new_ctor, complain);
6361 case ck_aggr:
6362 if (TREE_CODE (totype) == COMPLEX_TYPE)
6364 tree real = CONSTRUCTOR_ELT (expr, 0)->value;
6365 tree imag = CONSTRUCTOR_ELT (expr, 1)->value;
6366 real = perform_implicit_conversion (TREE_TYPE (totype),
6367 real, complain);
6368 imag = perform_implicit_conversion (TREE_TYPE (totype),
6369 imag, complain);
6370 expr = build2 (COMPLEX_EXPR, totype, real, imag);
6371 return fold_if_not_in_template (expr);
6373 expr = reshape_init (totype, expr, complain);
6374 expr = get_target_expr_sfinae (digest_init (totype, expr, complain),
6375 complain);
6376 if (expr != error_mark_node)
6377 TARGET_EXPR_LIST_INIT_P (expr) = true;
6378 return expr;
6380 default:
6381 break;
6384 expr = convert_like_real (next_conversion (convs), expr, fn, argnum,
6385 convs->kind == ck_ref_bind ? -1 : 1,
6386 convs->kind == ck_ref_bind ? issue_conversion_warnings : false,
6387 c_cast_p,
6388 complain);
6389 if (expr == error_mark_node)
6390 return error_mark_node;
6392 switch (convs->kind)
6394 case ck_rvalue:
6395 expr = decay_conversion (expr, complain);
6396 if (expr == error_mark_node)
6397 return error_mark_node;
6399 if (! MAYBE_CLASS_TYPE_P (totype))
6400 return expr;
6401 /* Else fall through. */
6402 case ck_base:
6403 if (convs->kind == ck_base && !convs->need_temporary_p)
6405 /* We are going to bind a reference directly to a base-class
6406 subobject of EXPR. */
6407 /* Build an expression for `*((base*) &expr)'. */
6408 expr = convert_to_base (expr, totype,
6409 !c_cast_p, /*nonnull=*/true, complain);
6410 return expr;
6413 /* Copy-initialization where the cv-unqualified version of the source
6414 type is the same class as, or a derived class of, the class of the
6415 destination [is treated as direct-initialization]. [dcl.init] */
6416 flags = LOOKUP_NORMAL|LOOKUP_ONLYCONVERTING;
6417 if (convs->user_conv_p)
6418 /* This conversion is being done in the context of a user-defined
6419 conversion (i.e. the second step of copy-initialization), so
6420 don't allow any more. */
6421 flags |= LOOKUP_NO_CONVERSION;
6422 if (convs->rvaluedness_matches_p)
6423 flags |= LOOKUP_PREFER_RVALUE;
6424 if (TREE_CODE (expr) == TARGET_EXPR
6425 && TARGET_EXPR_LIST_INIT_P (expr))
6426 /* Copy-list-initialization doesn't actually involve a copy. */
6427 return expr;
6428 expr = build_temp (expr, totype, flags, &diag_kind, complain);
6429 if (diag_kind && complain)
6431 maybe_print_user_conv_context (convs);
6432 if (fn)
6433 inform (DECL_SOURCE_LOCATION (fn),
6434 " initializing argument %P of %qD", argnum, fn);
6437 return build_cplus_new (totype, expr, complain);
6439 case ck_ref_bind:
6441 tree ref_type = totype;
6443 if (convs->bad_p && !next_conversion (convs)->bad_p)
6445 tree extype = TREE_TYPE (expr);
6446 if (TYPE_REF_IS_RVALUE (ref_type)
6447 && real_lvalue_p (expr))
6448 error_at (loc, "cannot bind %qT lvalue to %qT",
6449 extype, totype);
6450 else if (!TYPE_REF_IS_RVALUE (ref_type) && !real_lvalue_p (expr)
6451 && !CP_TYPE_CONST_NON_VOLATILE_P (TREE_TYPE (ref_type)))
6452 error_at (loc, "invalid initialization of non-const reference of "
6453 "type %qT from an rvalue of type %qT", totype, extype);
6454 else if (!reference_compatible_p (TREE_TYPE (totype), extype))
6455 error_at (loc, "binding %qT to reference of type %qT "
6456 "discards qualifiers", extype, totype);
6457 else
6458 gcc_unreachable ();
6459 maybe_print_user_conv_context (convs);
6460 if (fn)
6461 inform (input_location,
6462 " initializing argument %P of %q+D", argnum, fn);
6463 return error_mark_node;
6466 /* If necessary, create a temporary.
6468 VA_ARG_EXPR and CONSTRUCTOR expressions are special cases
6469 that need temporaries, even when their types are reference
6470 compatible with the type of reference being bound, so the
6471 upcoming call to cp_build_addr_expr doesn't fail. */
6472 if (convs->need_temporary_p
6473 || TREE_CODE (expr) == CONSTRUCTOR
6474 || TREE_CODE (expr) == VA_ARG_EXPR)
6476 /* Otherwise, a temporary of type "cv1 T1" is created and
6477 initialized from the initializer expression using the rules
6478 for a non-reference copy-initialization (8.5). */
6480 tree type = TREE_TYPE (ref_type);
6481 cp_lvalue_kind lvalue = real_lvalue_p (expr);
6483 gcc_assert (same_type_ignoring_top_level_qualifiers_p
6484 (type, next_conversion (convs)->type));
6485 if (!CP_TYPE_CONST_NON_VOLATILE_P (type)
6486 && !TYPE_REF_IS_RVALUE (ref_type))
6488 /* If the reference is volatile or non-const, we
6489 cannot create a temporary. */
6490 if (lvalue & clk_bitfield)
6491 error_at (loc, "cannot bind bitfield %qE to %qT",
6492 expr, ref_type);
6493 else if (lvalue & clk_packed)
6494 error_at (loc, "cannot bind packed field %qE to %qT",
6495 expr, ref_type);
6496 else
6497 error_at (loc, "cannot bind rvalue %qE to %qT",
6498 expr, ref_type);
6499 return error_mark_node;
6501 /* If the source is a packed field, and we must use a copy
6502 constructor, then building the target expr will require
6503 binding the field to the reference parameter to the
6504 copy constructor, and we'll end up with an infinite
6505 loop. If we can use a bitwise copy, then we'll be
6506 OK. */
6507 if ((lvalue & clk_packed)
6508 && CLASS_TYPE_P (type)
6509 && type_has_nontrivial_copy_init (type))
6511 error_at (loc, "cannot bind packed field %qE to %qT",
6512 expr, ref_type);
6513 return error_mark_node;
6515 if (lvalue & clk_bitfield)
6517 expr = convert_bitfield_to_declared_type (expr);
6518 expr = fold_convert (type, expr);
6520 expr = build_target_expr_with_type (expr, type, complain);
6523 /* Take the address of the thing to which we will bind the
6524 reference. */
6525 expr = cp_build_addr_expr (expr, complain);
6526 if (expr == error_mark_node)
6527 return error_mark_node;
6529 /* Convert it to a pointer to the type referred to by the
6530 reference. This will adjust the pointer if a derived to
6531 base conversion is being performed. */
6532 expr = cp_convert (build_pointer_type (TREE_TYPE (ref_type)),
6533 expr, complain);
6534 /* Convert the pointer to the desired reference type. */
6535 return build_nop (ref_type, expr);
6538 case ck_lvalue:
6539 return decay_conversion (expr, complain);
6541 case ck_qual:
6542 /* Warn about deprecated conversion if appropriate. */
6543 string_conv_p (totype, expr, 1);
6544 break;
6546 case ck_ptr:
6547 if (convs->base_p)
6548 expr = convert_to_base (expr, totype, !c_cast_p,
6549 /*nonnull=*/false, complain);
6550 return build_nop (totype, expr);
6552 case ck_pmem:
6553 return convert_ptrmem (totype, expr, /*allow_inverse_p=*/false,
6554 c_cast_p, complain);
6556 default:
6557 break;
6560 if (convs->check_narrowing
6561 && !check_narrowing (totype, expr, complain))
6562 return error_mark_node;
6564 if (issue_conversion_warnings)
6565 expr = cp_convert_and_check (totype, expr, complain);
6566 else
6567 expr = cp_convert (totype, expr, complain);
6569 return expr;
6572 /* ARG is being passed to a varargs function. Perform any conversions
6573 required. Return the converted value. */
6575 tree
6576 convert_arg_to_ellipsis (tree arg, tsubst_flags_t complain)
6578 tree arg_type;
6579 location_t loc = EXPR_LOC_OR_LOC (arg, input_location);
6581 /* [expr.call]
6583 The lvalue-to-rvalue, array-to-pointer, and function-to-pointer
6584 standard conversions are performed. */
6585 arg = decay_conversion (arg, complain);
6586 arg_type = TREE_TYPE (arg);
6587 /* [expr.call]
6589 If the argument has integral or enumeration type that is subject
6590 to the integral promotions (_conv.prom_), or a floating point
6591 type that is subject to the floating point promotion
6592 (_conv.fpprom_), the value of the argument is converted to the
6593 promoted type before the call. */
6594 if (TREE_CODE (arg_type) == REAL_TYPE
6595 && (TYPE_PRECISION (arg_type)
6596 < TYPE_PRECISION (double_type_node))
6597 && !DECIMAL_FLOAT_MODE_P (TYPE_MODE (arg_type)))
6599 if ((complain & tf_warning)
6600 && warn_double_promotion && !c_inhibit_evaluation_warnings)
6601 warning_at (loc, OPT_Wdouble_promotion,
6602 "implicit conversion from %qT to %qT when passing "
6603 "argument to function",
6604 arg_type, double_type_node);
6605 arg = convert_to_real (double_type_node, arg);
6607 else if (NULLPTR_TYPE_P (arg_type))
6608 arg = null_pointer_node;
6609 else if (INTEGRAL_OR_ENUMERATION_TYPE_P (arg_type))
6611 if (SCOPED_ENUM_P (arg_type))
6613 tree prom = cp_convert (ENUM_UNDERLYING_TYPE (arg_type), arg,
6614 complain);
6615 prom = cp_perform_integral_promotions (prom, complain);
6616 if (abi_version_crosses (6)
6617 && TYPE_MODE (TREE_TYPE (prom)) != TYPE_MODE (arg_type)
6618 && (complain & tf_warning))
6619 warning_at (loc, OPT_Wabi, "scoped enum %qT passed through ... as "
6620 "%qT before -fabi-version=6, %qT after", arg_type,
6621 TREE_TYPE (prom), ENUM_UNDERLYING_TYPE (arg_type));
6622 if (!abi_version_at_least (6))
6623 arg = prom;
6625 else
6626 arg = cp_perform_integral_promotions (arg, complain);
6629 arg = require_complete_type_sfinae (arg, complain);
6630 arg_type = TREE_TYPE (arg);
6632 if (arg != error_mark_node
6633 /* In a template (or ill-formed code), we can have an incomplete type
6634 even after require_complete_type_sfinae, in which case we don't know
6635 whether it has trivial copy or not. */
6636 && COMPLETE_TYPE_P (arg_type))
6638 /* Build up a real lvalue-to-rvalue conversion in case the
6639 copy constructor is trivial but not callable. */
6640 if (!cp_unevaluated_operand && CLASS_TYPE_P (arg_type))
6641 force_rvalue (arg, complain);
6643 /* [expr.call] 5.2.2/7:
6644 Passing a potentially-evaluated argument of class type (Clause 9)
6645 with a non-trivial copy constructor or a non-trivial destructor
6646 with no corresponding parameter is conditionally-supported, with
6647 implementation-defined semantics.
6649 We support it as pass-by-invisible-reference, just like a normal
6650 value parameter.
6652 If the call appears in the context of a sizeof expression,
6653 it is not potentially-evaluated. */
6654 if (cp_unevaluated_operand == 0
6655 && (type_has_nontrivial_copy_init (arg_type)
6656 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (arg_type)))
6658 if (complain & tf_warning)
6659 warning (OPT_Wconditionally_supported,
6660 "passing objects of non-trivially-copyable "
6661 "type %q#T through %<...%> is conditionally supported",
6662 arg_type);
6663 return cp_build_addr_expr (arg, complain);
6667 return arg;
6670 /* va_arg (EXPR, TYPE) is a builtin. Make sure it is not abused. */
6672 tree
6673 build_x_va_arg (source_location loc, tree expr, tree type)
6675 if (processing_template_decl)
6677 tree r = build_min (VA_ARG_EXPR, type, expr);
6678 SET_EXPR_LOCATION (r, loc);
6679 return r;
6682 type = complete_type_or_else (type, NULL_TREE);
6684 if (expr == error_mark_node || !type)
6685 return error_mark_node;
6687 expr = mark_lvalue_use (expr);
6689 if (TREE_CODE (type) == REFERENCE_TYPE)
6691 error ("cannot receive reference type %qT through %<...%>", type);
6692 return error_mark_node;
6695 if (type_has_nontrivial_copy_init (type)
6696 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
6698 /* conditionally-supported behavior [expr.call] 5.2.2/7. Let's treat
6699 it as pass by invisible reference. */
6700 warning_at (loc, OPT_Wconditionally_supported,
6701 "receiving objects of non-trivially-copyable type %q#T "
6702 "through %<...%> is conditionally-supported", type);
6704 tree ref = cp_build_reference_type (type, false);
6705 expr = build_va_arg (loc, expr, ref);
6706 return convert_from_reference (expr);
6709 return build_va_arg (loc, expr, type);
6712 /* TYPE has been given to va_arg. Apply the default conversions which
6713 would have happened when passed via ellipsis. Return the promoted
6714 type, or the passed type if there is no change. */
6716 tree
6717 cxx_type_promotes_to (tree type)
6719 tree promote;
6721 /* Perform the array-to-pointer and function-to-pointer
6722 conversions. */
6723 type = type_decays_to (type);
6725 promote = type_promotes_to (type);
6726 if (same_type_p (type, promote))
6727 promote = type;
6729 return promote;
6732 /* ARG is a default argument expression being passed to a parameter of
6733 the indicated TYPE, which is a parameter to FN. PARMNUM is the
6734 zero-based argument number. Do any required conversions. Return
6735 the converted value. */
6737 static GTY(()) vec<tree, va_gc> *default_arg_context;
6738 void
6739 push_defarg_context (tree fn)
6740 { vec_safe_push (default_arg_context, fn); }
6742 void
6743 pop_defarg_context (void)
6744 { default_arg_context->pop (); }
6746 tree
6747 convert_default_arg (tree type, tree arg, tree fn, int parmnum,
6748 tsubst_flags_t complain)
6750 int i;
6751 tree t;
6753 /* See through clones. */
6754 fn = DECL_ORIGIN (fn);
6756 /* Detect recursion. */
6757 FOR_EACH_VEC_SAFE_ELT (default_arg_context, i, t)
6758 if (t == fn)
6760 if (complain & tf_error)
6761 error ("recursive evaluation of default argument for %q#D", fn);
6762 return error_mark_node;
6765 /* If the ARG is an unparsed default argument expression, the
6766 conversion cannot be performed. */
6767 if (TREE_CODE (arg) == DEFAULT_ARG)
6769 if (complain & tf_error)
6770 error ("call to %qD uses the default argument for parameter %P, which "
6771 "is not yet defined", fn, parmnum);
6772 return error_mark_node;
6775 push_defarg_context (fn);
6777 if (fn && DECL_TEMPLATE_INFO (fn))
6778 arg = tsubst_default_argument (fn, type, arg, complain);
6780 /* Due to:
6782 [dcl.fct.default]
6784 The names in the expression are bound, and the semantic
6785 constraints are checked, at the point where the default
6786 expressions appears.
6788 we must not perform access checks here. */
6789 push_deferring_access_checks (dk_no_check);
6790 /* We must make a copy of ARG, in case subsequent processing
6791 alters any part of it. */
6792 arg = break_out_target_exprs (arg);
6793 arg = convert_for_initialization (0, type, arg, LOOKUP_IMPLICIT,
6794 ICR_DEFAULT_ARGUMENT, fn, parmnum,
6795 complain);
6796 arg = convert_for_arg_passing (type, arg, complain);
6797 pop_deferring_access_checks();
6799 pop_defarg_context ();
6801 return arg;
6804 /* Returns the type which will really be used for passing an argument of
6805 type TYPE. */
6807 tree
6808 type_passed_as (tree type)
6810 /* Pass classes with copy ctors by invisible reference. */
6811 if (TREE_ADDRESSABLE (type))
6813 type = build_reference_type (type);
6814 /* There are no other pointers to this temporary. */
6815 type = cp_build_qualified_type (type, TYPE_QUAL_RESTRICT);
6817 else if (targetm.calls.promote_prototypes (type)
6818 && INTEGRAL_TYPE_P (type)
6819 && COMPLETE_TYPE_P (type)
6820 && tree_int_cst_lt (TYPE_SIZE (type), TYPE_SIZE (integer_type_node)))
6821 type = integer_type_node;
6823 return type;
6826 /* Actually perform the appropriate conversion. */
6828 tree
6829 convert_for_arg_passing (tree type, tree val, tsubst_flags_t complain)
6831 tree bitfield_type;
6833 /* If VAL is a bitfield, then -- since it has already been converted
6834 to TYPE -- it cannot have a precision greater than TYPE.
6836 If it has a smaller precision, we must widen it here. For
6837 example, passing "int f:3;" to a function expecting an "int" will
6838 not result in any conversion before this point.
6840 If the precision is the same we must not risk widening. For
6841 example, the COMPONENT_REF for a 32-bit "long long" bitfield will
6842 often have type "int", even though the C++ type for the field is
6843 "long long". If the value is being passed to a function
6844 expecting an "int", then no conversions will be required. But,
6845 if we call convert_bitfield_to_declared_type, the bitfield will
6846 be converted to "long long". */
6847 bitfield_type = is_bitfield_expr_with_lowered_type (val);
6848 if (bitfield_type
6849 && TYPE_PRECISION (TREE_TYPE (val)) < TYPE_PRECISION (type))
6850 val = convert_to_integer (TYPE_MAIN_VARIANT (bitfield_type), val);
6852 if (val == error_mark_node)
6854 /* Pass classes with copy ctors by invisible reference. */
6855 else if (TREE_ADDRESSABLE (type))
6856 val = build1 (ADDR_EXPR, build_reference_type (type), val);
6857 else if (targetm.calls.promote_prototypes (type)
6858 && INTEGRAL_TYPE_P (type)
6859 && COMPLETE_TYPE_P (type)
6860 && tree_int_cst_lt (TYPE_SIZE (type), TYPE_SIZE (integer_type_node)))
6861 val = cp_perform_integral_promotions (val, complain);
6862 if ((complain & tf_warning)
6863 && warn_suggest_attribute_format)
6865 tree rhstype = TREE_TYPE (val);
6866 const enum tree_code coder = TREE_CODE (rhstype);
6867 const enum tree_code codel = TREE_CODE (type);
6868 if ((codel == POINTER_TYPE || codel == REFERENCE_TYPE)
6869 && coder == codel
6870 && check_missing_format_attribute (type, rhstype))
6871 warning (OPT_Wsuggest_attribute_format,
6872 "argument of function call might be a candidate for a format attribute");
6874 return val;
6877 /* Returns true iff FN is a function with magic varargs, i.e. ones for
6878 which no conversions at all should be done. This is true for some
6879 builtins which don't act like normal functions. */
6881 bool
6882 magic_varargs_p (tree fn)
6884 if (flag_cilkplus && is_cilkplus_reduce_builtin (fn) != BUILT_IN_NONE)
6885 return true;
6887 if (DECL_BUILT_IN (fn))
6888 switch (DECL_FUNCTION_CODE (fn))
6890 case BUILT_IN_CLASSIFY_TYPE:
6891 case BUILT_IN_CONSTANT_P:
6892 case BUILT_IN_NEXT_ARG:
6893 case BUILT_IN_VA_START:
6894 return true;
6896 default:;
6897 return lookup_attribute ("type generic",
6898 TYPE_ATTRIBUTES (TREE_TYPE (fn))) != 0;
6901 return false;
6904 /* Returns the decl of the dispatcher function if FN is a function version. */
6906 tree
6907 get_function_version_dispatcher (tree fn)
6909 tree dispatcher_decl = NULL;
6911 gcc_assert (TREE_CODE (fn) == FUNCTION_DECL
6912 && DECL_FUNCTION_VERSIONED (fn));
6914 gcc_assert (targetm.get_function_versions_dispatcher);
6915 dispatcher_decl = targetm.get_function_versions_dispatcher (fn);
6917 if (dispatcher_decl == NULL)
6919 error_at (input_location, "use of multiversioned function "
6920 "without a default");
6921 return NULL;
6924 retrofit_lang_decl (dispatcher_decl);
6925 gcc_assert (dispatcher_decl != NULL);
6926 return dispatcher_decl;
6929 /* fn is a function version dispatcher that is marked used. Mark all the
6930 semantically identical function versions it will dispatch as used. */
6932 void
6933 mark_versions_used (tree fn)
6935 struct cgraph_node *node;
6936 struct cgraph_function_version_info *node_v;
6937 struct cgraph_function_version_info *it_v;
6939 gcc_assert (TREE_CODE (fn) == FUNCTION_DECL);
6941 node = cgraph_node::get (fn);
6942 if (node == NULL)
6943 return;
6945 gcc_assert (node->dispatcher_function);
6947 node_v = node->function_version ();
6948 if (node_v == NULL)
6949 return;
6951 /* All semantically identical versions are chained. Traverse and mark each
6952 one of them as used. */
6953 it_v = node_v->next;
6954 while (it_v != NULL)
6956 mark_used (it_v->this_node->decl);
6957 it_v = it_v->next;
6961 /* Build a call to "the copy constructor" for the type of A, even if it
6962 wouldn't be selected by normal overload resolution. Used for
6963 diagnostics. */
6965 static tree
6966 call_copy_ctor (tree a, tsubst_flags_t complain)
6968 tree ctype = TYPE_MAIN_VARIANT (TREE_TYPE (a));
6969 tree binfo = TYPE_BINFO (ctype);
6970 tree copy = get_copy_ctor (ctype, complain);
6971 copy = build_baselink (binfo, binfo, copy, NULL_TREE);
6972 tree ob = build_dummy_object (ctype);
6973 vec<tree, va_gc>* args = make_tree_vector_single (a);
6974 tree r = build_new_method_call (ob, copy, &args, NULL_TREE,
6975 LOOKUP_NORMAL, NULL, complain);
6976 release_tree_vector (args);
6977 return r;
6980 /* Subroutine of the various build_*_call functions. Overload resolution
6981 has chosen a winning candidate CAND; build up a CALL_EXPR accordingly.
6982 ARGS is a TREE_LIST of the unconverted arguments to the call. FLAGS is a
6983 bitmask of various LOOKUP_* flags which apply to the call itself. */
6985 static tree
6986 build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain)
6988 tree fn = cand->fn;
6989 const vec<tree, va_gc> *args = cand->args;
6990 tree first_arg = cand->first_arg;
6991 conversion **convs = cand->convs;
6992 conversion *conv;
6993 tree parm = TYPE_ARG_TYPES (TREE_TYPE (fn));
6994 int parmlen;
6995 tree val;
6996 int i = 0;
6997 int j = 0;
6998 unsigned int arg_index = 0;
6999 int is_method = 0;
7000 int nargs;
7001 tree *argarray;
7002 bool already_used = false;
7004 /* In a template, there is no need to perform all of the work that
7005 is normally done. We are only interested in the type of the call
7006 expression, i.e., the return type of the function. Any semantic
7007 errors will be deferred until the template is instantiated. */
7008 if (processing_template_decl)
7010 tree expr, addr;
7011 tree return_type;
7012 const tree *argarray;
7013 unsigned int nargs;
7015 return_type = TREE_TYPE (TREE_TYPE (fn));
7016 nargs = vec_safe_length (args);
7017 if (first_arg == NULL_TREE)
7018 argarray = args->address ();
7019 else
7021 tree *alcarray;
7022 unsigned int ix;
7023 tree arg;
7025 ++nargs;
7026 alcarray = XALLOCAVEC (tree, nargs);
7027 alcarray[0] = build_this (first_arg);
7028 FOR_EACH_VEC_SAFE_ELT (args, ix, arg)
7029 alcarray[ix + 1] = arg;
7030 argarray = alcarray;
7033 addr = build_addr_func (fn, complain);
7034 if (addr == error_mark_node)
7035 return error_mark_node;
7036 expr = build_call_array_loc (input_location, return_type,
7037 addr, nargs, argarray);
7038 if (TREE_THIS_VOLATILE (fn) && cfun)
7039 current_function_returns_abnormally = 1;
7040 return convert_from_reference (expr);
7043 /* Give any warnings we noticed during overload resolution. */
7044 if (cand->warnings && (complain & tf_warning))
7046 struct candidate_warning *w;
7047 for (w = cand->warnings; w; w = w->next)
7048 joust (cand, w->loser, 1, complain);
7051 /* Make =delete work with SFINAE. */
7052 if (DECL_DELETED_FN (fn) && !(complain & tf_error))
7053 return error_mark_node;
7055 if (DECL_FUNCTION_MEMBER_P (fn))
7057 tree access_fn;
7058 /* If FN is a template function, two cases must be considered.
7059 For example:
7061 struct A {
7062 protected:
7063 template <class T> void f();
7065 template <class T> struct B {
7066 protected:
7067 void g();
7069 struct C : A, B<int> {
7070 using A::f; // #1
7071 using B<int>::g; // #2
7074 In case #1 where `A::f' is a member template, DECL_ACCESS is
7075 recorded in the primary template but not in its specialization.
7076 We check access of FN using its primary template.
7078 In case #2, where `B<int>::g' has a DECL_TEMPLATE_INFO simply
7079 because it is a member of class template B, DECL_ACCESS is
7080 recorded in the specialization `B<int>::g'. We cannot use its
7081 primary template because `B<T>::g' and `B<int>::g' may have
7082 different access. */
7083 if (DECL_TEMPLATE_INFO (fn)
7084 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (fn)))
7085 access_fn = DECL_TI_TEMPLATE (fn);
7086 else
7087 access_fn = fn;
7088 if (!perform_or_defer_access_check (cand->access_path, access_fn,
7089 fn, complain))
7090 return error_mark_node;
7093 /* If we're checking for implicit delete, don't bother with argument
7094 conversions. */
7095 if (flags & LOOKUP_SPECULATIVE)
7097 if (DECL_DELETED_FN (fn))
7099 if (complain & tf_error)
7100 mark_used (fn);
7101 return error_mark_node;
7103 if (cand->viable == 1)
7104 return fn;
7105 else if (!(complain & tf_error))
7106 /* Reject bad conversions now. */
7107 return error_mark_node;
7108 /* else continue to get conversion error. */
7111 /* N3276 magic doesn't apply to nested calls. */
7112 int decltype_flag = (complain & tf_decltype);
7113 complain &= ~tf_decltype;
7115 /* Find maximum size of vector to hold converted arguments. */
7116 parmlen = list_length (parm);
7117 nargs = vec_safe_length (args) + (first_arg != NULL_TREE ? 1 : 0);
7118 if (parmlen > nargs)
7119 nargs = parmlen;
7120 argarray = XALLOCAVEC (tree, nargs);
7122 /* The implicit parameters to a constructor are not considered by overload
7123 resolution, and must be of the proper type. */
7124 if (DECL_CONSTRUCTOR_P (fn))
7126 tree object_arg;
7127 if (first_arg != NULL_TREE)
7129 object_arg = first_arg;
7130 first_arg = NULL_TREE;
7132 else
7134 object_arg = (*args)[arg_index];
7135 ++arg_index;
7137 argarray[j++] = build_this (object_arg);
7138 parm = TREE_CHAIN (parm);
7139 /* We should never try to call the abstract constructor. */
7140 gcc_assert (!DECL_HAS_IN_CHARGE_PARM_P (fn));
7142 if (DECL_HAS_VTT_PARM_P (fn))
7144 argarray[j++] = (*args)[arg_index];
7145 ++arg_index;
7146 parm = TREE_CHAIN (parm);
7149 /* Bypass access control for 'this' parameter. */
7150 else if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
7152 tree parmtype = TREE_VALUE (parm);
7153 tree arg = build_this (first_arg != NULL_TREE
7154 ? first_arg
7155 : (*args)[arg_index]);
7156 tree argtype = TREE_TYPE (arg);
7157 tree converted_arg;
7158 tree base_binfo;
7160 if (convs[i]->bad_p)
7162 if (complain & tf_error)
7164 if (permerror (input_location, "passing %qT as %<this%> "
7165 "argument discards qualifiers",
7166 TREE_TYPE (argtype)))
7167 inform (DECL_SOURCE_LOCATION (fn), " in call to %qD", fn);
7169 else
7170 return error_mark_node;
7173 /* See if the function member or the whole class type is declared
7174 final and the call can be devirtualized. */
7175 if (DECL_FINAL_P (fn)
7176 || CLASSTYPE_FINAL (TYPE_METHOD_BASETYPE (TREE_TYPE (fn))))
7177 flags |= LOOKUP_NONVIRTUAL;
7179 /* [class.mfct.nonstatic]: If a nonstatic member function of a class
7180 X is called for an object that is not of type X, or of a type
7181 derived from X, the behavior is undefined.
7183 So we can assume that anything passed as 'this' is non-null, and
7184 optimize accordingly. */
7185 gcc_assert (TYPE_PTR_P (parmtype));
7186 /* Convert to the base in which the function was declared. */
7187 gcc_assert (cand->conversion_path != NULL_TREE);
7188 converted_arg = build_base_path (PLUS_EXPR,
7189 arg,
7190 cand->conversion_path,
7191 1, complain);
7192 /* Check that the base class is accessible. */
7193 if (!accessible_base_p (TREE_TYPE (argtype),
7194 BINFO_TYPE (cand->conversion_path), true))
7196 if (complain & tf_error)
7197 error ("%qT is not an accessible base of %qT",
7198 BINFO_TYPE (cand->conversion_path),
7199 TREE_TYPE (argtype));
7200 else
7201 return error_mark_node;
7203 /* If fn was found by a using declaration, the conversion path
7204 will be to the derived class, not the base declaring fn. We
7205 must convert from derived to base. */
7206 base_binfo = lookup_base (TREE_TYPE (TREE_TYPE (converted_arg)),
7207 TREE_TYPE (parmtype), ba_unique,
7208 NULL, complain);
7209 converted_arg = build_base_path (PLUS_EXPR, converted_arg,
7210 base_binfo, 1, complain);
7212 argarray[j++] = converted_arg;
7213 parm = TREE_CHAIN (parm);
7214 if (first_arg != NULL_TREE)
7215 first_arg = NULL_TREE;
7216 else
7217 ++arg_index;
7218 ++i;
7219 is_method = 1;
7222 gcc_assert (first_arg == NULL_TREE);
7223 for (; arg_index < vec_safe_length (args) && parm;
7224 parm = TREE_CHAIN (parm), ++arg_index, ++i)
7226 tree type = TREE_VALUE (parm);
7227 tree arg = (*args)[arg_index];
7228 bool conversion_warning = true;
7230 conv = convs[i];
7232 /* If the argument is NULL and used to (implicitly) instantiate a
7233 template function (and bind one of the template arguments to
7234 the type of 'long int'), we don't want to warn about passing NULL
7235 to non-pointer argument.
7236 For example, if we have this template function:
7238 template<typename T> void func(T x) {}
7240 we want to warn (when -Wconversion is enabled) in this case:
7242 void foo() {
7243 func<int>(NULL);
7246 but not in this case:
7248 void foo() {
7249 func(NULL);
7252 if (arg == null_node
7253 && DECL_TEMPLATE_INFO (fn)
7254 && cand->template_decl
7255 && !(flags & LOOKUP_EXPLICIT_TMPL_ARGS))
7256 conversion_warning = false;
7258 /* Warn about initializer_list deduction that isn't currently in the
7259 working draft. */
7260 if (cxx_dialect > cxx98
7261 && flag_deduce_init_list
7262 && cand->template_decl
7263 && is_std_init_list (non_reference (type))
7264 && BRACE_ENCLOSED_INITIALIZER_P (arg))
7266 tree tmpl = TI_TEMPLATE (cand->template_decl);
7267 tree realparm = chain_index (j, DECL_ARGUMENTS (cand->fn));
7268 tree patparm = get_pattern_parm (realparm, tmpl);
7269 tree pattype = TREE_TYPE (patparm);
7270 if (PACK_EXPANSION_P (pattype))
7271 pattype = PACK_EXPANSION_PATTERN (pattype);
7272 pattype = non_reference (pattype);
7274 if (TREE_CODE (pattype) == TEMPLATE_TYPE_PARM
7275 && (cand->explicit_targs == NULL_TREE
7276 || (TREE_VEC_LENGTH (cand->explicit_targs)
7277 <= TEMPLATE_TYPE_IDX (pattype))))
7279 pedwarn (input_location, 0, "deducing %qT as %qT",
7280 non_reference (TREE_TYPE (patparm)),
7281 non_reference (type));
7282 pedwarn (input_location, 0, " in call to %q+D", cand->fn);
7283 pedwarn (input_location, 0,
7284 " (you can disable this with -fno-deduce-init-list)");
7287 val = convert_like_with_context (conv, arg, fn, i - is_method,
7288 conversion_warning
7289 ? complain
7290 : complain & (~tf_warning));
7292 val = convert_for_arg_passing (type, val, complain);
7294 if (val == error_mark_node)
7295 return error_mark_node;
7296 else
7297 argarray[j++] = val;
7300 /* Default arguments */
7301 for (; parm && parm != void_list_node; parm = TREE_CHAIN (parm), i++)
7303 if (TREE_VALUE (parm) == error_mark_node)
7304 return error_mark_node;
7305 argarray[j++] = convert_default_arg (TREE_VALUE (parm),
7306 TREE_PURPOSE (parm),
7307 fn, i - is_method,
7308 complain);
7311 /* Ellipsis */
7312 for (; arg_index < vec_safe_length (args); ++arg_index)
7314 tree a = (*args)[arg_index];
7315 if (magic_varargs_p (fn))
7316 /* Do no conversions for magic varargs. */
7317 a = mark_type_use (a);
7318 else if (DECL_CONSTRUCTOR_P (fn)
7319 && same_type_ignoring_top_level_qualifiers_p (DECL_CONTEXT (fn),
7320 TREE_TYPE (a)))
7322 /* Avoid infinite recursion trying to call A(...). */
7323 if (complain & tf_error)
7324 /* Try to call the actual copy constructor for a good error. */
7325 call_copy_ctor (a, complain);
7326 return error_mark_node;
7328 else
7329 a = convert_arg_to_ellipsis (a, complain);
7330 argarray[j++] = a;
7333 gcc_assert (j <= nargs);
7334 nargs = j;
7336 check_function_arguments (TREE_TYPE (fn), nargs, argarray);
7338 /* Avoid actually calling copy constructors and copy assignment operators,
7339 if possible. */
7341 if (! flag_elide_constructors)
7342 /* Do things the hard way. */;
7343 else if (cand->num_convs == 1
7344 && (DECL_COPY_CONSTRUCTOR_P (fn)
7345 || DECL_MOVE_CONSTRUCTOR_P (fn))
7346 /* It's unsafe to elide the constructor when handling
7347 a noexcept-expression, it may evaluate to the wrong
7348 value (c++/53025). */
7349 && cp_noexcept_operand == 0)
7351 tree targ;
7352 tree arg = argarray[num_artificial_parms_for (fn)];
7353 tree fa;
7354 bool trivial = trivial_fn_p (fn);
7356 /* Pull out the real argument, disregarding const-correctness. */
7357 targ = arg;
7358 while (CONVERT_EXPR_P (targ)
7359 || TREE_CODE (targ) == NON_LVALUE_EXPR)
7360 targ = TREE_OPERAND (targ, 0);
7361 if (TREE_CODE (targ) == ADDR_EXPR)
7363 targ = TREE_OPERAND (targ, 0);
7364 if (!same_type_ignoring_top_level_qualifiers_p
7365 (TREE_TYPE (TREE_TYPE (arg)), TREE_TYPE (targ)))
7366 targ = NULL_TREE;
7368 else
7369 targ = NULL_TREE;
7371 if (targ)
7372 arg = targ;
7373 else
7374 arg = cp_build_indirect_ref (arg, RO_NULL, complain);
7376 /* [class.copy]: the copy constructor is implicitly defined even if
7377 the implementation elided its use. */
7378 if (!trivial || DECL_DELETED_FN (fn))
7380 mark_used (fn);
7381 already_used = true;
7384 /* If we're creating a temp and we already have one, don't create a
7385 new one. If we're not creating a temp but we get one, use
7386 INIT_EXPR to collapse the temp into our target. Otherwise, if the
7387 ctor is trivial, do a bitwise copy with a simple TARGET_EXPR for a
7388 temp or an INIT_EXPR otherwise. */
7389 fa = argarray[0];
7390 if (is_dummy_object (fa))
7392 if (TREE_CODE (arg) == TARGET_EXPR)
7393 return arg;
7394 else if (trivial)
7395 return force_target_expr (DECL_CONTEXT (fn), arg, complain);
7397 else if (TREE_CODE (arg) == TARGET_EXPR || trivial)
7399 tree to = stabilize_reference (cp_build_indirect_ref (fa, RO_NULL,
7400 complain));
7402 val = build2 (INIT_EXPR, DECL_CONTEXT (fn), to, arg);
7403 return val;
7406 else if (DECL_OVERLOADED_OPERATOR_P (fn) == NOP_EXPR
7407 && trivial_fn_p (fn)
7408 && !DECL_DELETED_FN (fn))
7410 tree to = stabilize_reference
7411 (cp_build_indirect_ref (argarray[0], RO_NULL, complain));
7412 tree type = TREE_TYPE (to);
7413 tree as_base = CLASSTYPE_AS_BASE (type);
7414 tree arg = argarray[1];
7416 if (is_really_empty_class (type))
7418 /* Avoid copying empty classes. */
7419 val = build2 (COMPOUND_EXPR, void_type_node, to, arg);
7420 TREE_NO_WARNING (val) = 1;
7421 val = build2 (COMPOUND_EXPR, type, val, to);
7422 TREE_NO_WARNING (val) = 1;
7424 else if (tree_int_cst_equal (TYPE_SIZE (type), TYPE_SIZE (as_base)))
7426 arg = cp_build_indirect_ref (arg, RO_NULL, complain);
7427 val = build2 (MODIFY_EXPR, TREE_TYPE (to), to, arg);
7429 else
7431 /* We must only copy the non-tail padding parts. */
7432 tree arg0, arg2, t;
7433 tree array_type, alias_set;
7435 arg2 = TYPE_SIZE_UNIT (as_base);
7436 arg0 = cp_build_addr_expr (to, complain);
7438 array_type = build_array_type (char_type_node,
7439 build_index_type
7440 (size_binop (MINUS_EXPR,
7441 arg2, size_int (1))));
7442 alias_set = build_int_cst (build_pointer_type (type), 0);
7443 t = build2 (MODIFY_EXPR, void_type_node,
7444 build2 (MEM_REF, array_type, arg0, alias_set),
7445 build2 (MEM_REF, array_type, arg, alias_set));
7446 val = build2 (COMPOUND_EXPR, TREE_TYPE (to), t, to);
7447 TREE_NO_WARNING (val) = 1;
7450 return val;
7452 else if (DECL_DESTRUCTOR_P (fn)
7453 && trivial_fn_p (fn)
7454 && !DECL_DELETED_FN (fn))
7455 return fold_convert (void_type_node, argarray[0]);
7456 /* FIXME handle trivial default constructor, too. */
7458 /* For calls to a multi-versioned function, overload resolution
7459 returns the function with the highest target priority, that is,
7460 the version that will checked for dispatching first. If this
7461 version is inlinable, a direct call to this version can be made
7462 otherwise the call should go through the dispatcher. */
7464 if (DECL_FUNCTION_VERSIONED (fn)
7465 && (current_function_decl == NULL
7466 || !targetm.target_option.can_inline_p (current_function_decl, fn)))
7468 fn = get_function_version_dispatcher (fn);
7469 if (fn == NULL)
7470 return NULL;
7471 if (!already_used)
7472 mark_versions_used (fn);
7475 if (!already_used
7476 && !mark_used (fn))
7477 return error_mark_node;
7479 if (DECL_VINDEX (fn) && (flags & LOOKUP_NONVIRTUAL) == 0
7480 /* Don't mess with virtual lookup in instantiate_non_dependent_expr;
7481 virtual functions can't be constexpr. */
7482 && !in_template_function ())
7484 tree t;
7485 tree binfo = lookup_base (TREE_TYPE (TREE_TYPE (argarray[0])),
7486 DECL_CONTEXT (fn),
7487 ba_any, NULL, complain);
7488 gcc_assert (binfo && binfo != error_mark_node);
7490 argarray[0] = build_base_path (PLUS_EXPR, argarray[0], binfo, 1,
7491 complain);
7492 if (TREE_SIDE_EFFECTS (argarray[0]))
7493 argarray[0] = save_expr (argarray[0]);
7494 t = build_pointer_type (TREE_TYPE (fn));
7495 if (DECL_CONTEXT (fn) && TYPE_JAVA_INTERFACE (DECL_CONTEXT (fn)))
7496 fn = build_java_interface_fn_ref (fn, argarray[0]);
7497 else
7498 fn = build_vfn_ref (argarray[0], DECL_VINDEX (fn));
7499 TREE_TYPE (fn) = t;
7501 else
7503 fn = build_addr_func (fn, complain);
7504 if (fn == error_mark_node)
7505 return error_mark_node;
7508 tree call = build_cxx_call (fn, nargs, argarray, complain|decltype_flag);
7509 if (TREE_CODE (call) == CALL_EXPR
7510 && (cand->flags & LOOKUP_LIST_INIT_CTOR))
7511 CALL_EXPR_LIST_INIT_P (call) = true;
7512 return call;
7515 /* Build and return a call to FN, using NARGS arguments in ARGARRAY.
7516 This function performs no overload resolution, conversion, or other
7517 high-level operations. */
7519 tree
7520 build_cxx_call (tree fn, int nargs, tree *argarray,
7521 tsubst_flags_t complain)
7523 tree fndecl;
7524 int optimize_sav;
7526 /* Remember roughly where this call is. */
7527 location_t loc = EXPR_LOC_OR_LOC (fn, input_location);
7528 fn = build_call_a (fn, nargs, argarray);
7529 SET_EXPR_LOCATION (fn, loc);
7531 fndecl = get_callee_fndecl (fn);
7533 /* Check that arguments to builtin functions match the expectations. */
7534 if (fndecl
7535 && DECL_BUILT_IN (fndecl)
7536 && DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_NORMAL
7537 && !check_builtin_function_arguments (fndecl, nargs, argarray))
7538 return error_mark_node;
7540 /* If it is a built-in array notation function, then the return type of
7541 the function is the element type of the array passed in as array
7542 notation (i.e. the first parameter of the function). */
7543 if (flag_cilkplus && TREE_CODE (fn) == CALL_EXPR)
7545 enum built_in_function bif =
7546 is_cilkplus_reduce_builtin (CALL_EXPR_FN (fn));
7547 if (bif == BUILT_IN_CILKPLUS_SEC_REDUCE_ADD
7548 || bif == BUILT_IN_CILKPLUS_SEC_REDUCE_MUL
7549 || bif == BUILT_IN_CILKPLUS_SEC_REDUCE_MAX
7550 || bif == BUILT_IN_CILKPLUS_SEC_REDUCE_MIN
7551 || bif == BUILT_IN_CILKPLUS_SEC_REDUCE
7552 || bif == BUILT_IN_CILKPLUS_SEC_REDUCE_MUTATING)
7554 if (call_expr_nargs (fn) == 0)
7556 error_at (EXPR_LOCATION (fn), "Invalid builtin arguments");
7557 return error_mark_node;
7559 /* for bif == BUILT_IN_CILKPLUS_SEC_REDUCE_ALL_ZERO or
7560 BUILT_IN_CILKPLUS_SEC_REDUCE_ANY_ZERO or
7561 BUILT_IN_CILKPLUS_SEC_REDUCE_ANY_NONZERO or
7562 BUILT_IN_CILKPLUS_SEC_REDUCE_ALL_NONZERO or
7563 BUILT_IN_CILKPLUS_SEC_REDUCE_MIN_IND or
7564 BUILT_IN_CILKPLUS_SEC_REDUCE_MAX_IND
7565 The pre-defined return-type is the correct one. */
7566 tree array_ntn = CALL_EXPR_ARG (fn, 0);
7567 TREE_TYPE (fn) = TREE_TYPE (array_ntn);
7568 return fn;
7572 /* Some built-in function calls will be evaluated at compile-time in
7573 fold (). Set optimize to 1 when folding __builtin_constant_p inside
7574 a constexpr function so that fold_builtin_1 doesn't fold it to 0. */
7575 optimize_sav = optimize;
7576 if (!optimize && fndecl && DECL_IS_BUILTIN_CONSTANT_P (fndecl)
7577 && current_function_decl
7578 && DECL_DECLARED_CONSTEXPR_P (current_function_decl))
7579 optimize = 1;
7580 fn = fold_if_not_in_template (fn);
7581 optimize = optimize_sav;
7583 if (VOID_TYPE_P (TREE_TYPE (fn)))
7584 return fn;
7586 /* 5.2.2/11: If a function call is a prvalue of object type: if the
7587 function call is either the operand of a decltype-specifier or the
7588 right operand of a comma operator that is the operand of a
7589 decltype-specifier, a temporary object is not introduced for the
7590 prvalue. The type of the prvalue may be incomplete. */
7591 if (!(complain & tf_decltype))
7593 fn = require_complete_type_sfinae (fn, complain);
7594 if (fn == error_mark_node)
7595 return error_mark_node;
7597 if (MAYBE_CLASS_TYPE_P (TREE_TYPE (fn)))
7598 fn = build_cplus_new (TREE_TYPE (fn), fn, complain);
7600 return convert_from_reference (fn);
7603 static GTY(()) tree java_iface_lookup_fn;
7605 /* Make an expression which yields the address of the Java interface
7606 method FN. This is achieved by generating a call to libjava's
7607 _Jv_LookupInterfaceMethodIdx(). */
7609 static tree
7610 build_java_interface_fn_ref (tree fn, tree instance)
7612 tree lookup_fn, method, idx;
7613 tree klass_ref, iface, iface_ref;
7614 int i;
7616 if (!java_iface_lookup_fn)
7618 tree ftype = build_function_type_list (ptr_type_node,
7619 ptr_type_node, ptr_type_node,
7620 java_int_type_node, NULL_TREE);
7621 java_iface_lookup_fn
7622 = add_builtin_function ("_Jv_LookupInterfaceMethodIdx", ftype,
7623 0, NOT_BUILT_IN, NULL, NULL_TREE);
7626 /* Look up the pointer to the runtime java.lang.Class object for `instance'.
7627 This is the first entry in the vtable. */
7628 klass_ref = build_vtbl_ref (cp_build_indirect_ref (instance, RO_NULL,
7629 tf_warning_or_error),
7630 integer_zero_node);
7632 /* Get the java.lang.Class pointer for the interface being called. */
7633 iface = DECL_CONTEXT (fn);
7634 iface_ref = lookup_field (iface, get_identifier ("class$"), 0, false);
7635 if (!iface_ref || !VAR_P (iface_ref)
7636 || DECL_CONTEXT (iface_ref) != iface)
7638 error ("could not find class$ field in java interface type %qT",
7639 iface);
7640 return error_mark_node;
7642 iface_ref = build_address (iface_ref);
7643 iface_ref = convert (build_pointer_type (iface), iface_ref);
7645 /* Determine the itable index of FN. */
7646 i = 1;
7647 for (method = TYPE_METHODS (iface); method; method = DECL_CHAIN (method))
7649 if (!DECL_VIRTUAL_P (method))
7650 continue;
7651 if (fn == method)
7652 break;
7653 i++;
7655 idx = build_int_cst (NULL_TREE, i);
7657 lookup_fn = build1 (ADDR_EXPR,
7658 build_pointer_type (TREE_TYPE (java_iface_lookup_fn)),
7659 java_iface_lookup_fn);
7660 return build_call_nary (ptr_type_node, lookup_fn,
7661 3, klass_ref, iface_ref, idx);
7664 /* Returns the value to use for the in-charge parameter when making a
7665 call to a function with the indicated NAME.
7667 FIXME:Can't we find a neater way to do this mapping? */
7669 tree
7670 in_charge_arg_for_name (tree name)
7672 if (name == base_ctor_identifier
7673 || name == base_dtor_identifier)
7674 return integer_zero_node;
7675 else if (name == complete_ctor_identifier)
7676 return integer_one_node;
7677 else if (name == complete_dtor_identifier)
7678 return integer_two_node;
7679 else if (name == deleting_dtor_identifier)
7680 return integer_three_node;
7682 /* This function should only be called with one of the names listed
7683 above. */
7684 gcc_unreachable ();
7685 return NULL_TREE;
7688 /* Build a call to a constructor, destructor, or an assignment
7689 operator for INSTANCE, an expression with class type. NAME
7690 indicates the special member function to call; *ARGS are the
7691 arguments. ARGS may be NULL. This may change ARGS. BINFO
7692 indicates the base of INSTANCE that is to be passed as the `this'
7693 parameter to the member function called.
7695 FLAGS are the LOOKUP_* flags to use when processing the call.
7697 If NAME indicates a complete object constructor, INSTANCE may be
7698 NULL_TREE. In this case, the caller will call build_cplus_new to
7699 store the newly constructed object into a VAR_DECL. */
7701 tree
7702 build_special_member_call (tree instance, tree name, vec<tree, va_gc> **args,
7703 tree binfo, int flags, tsubst_flags_t complain)
7705 tree fns;
7706 /* The type of the subobject to be constructed or destroyed. */
7707 tree class_type;
7708 vec<tree, va_gc> *allocated = NULL;
7709 tree ret;
7711 gcc_assert (name == complete_ctor_identifier
7712 || name == base_ctor_identifier
7713 || name == complete_dtor_identifier
7714 || name == base_dtor_identifier
7715 || name == deleting_dtor_identifier
7716 || name == ansi_assopname (NOP_EXPR));
7717 if (TYPE_P (binfo))
7719 /* Resolve the name. */
7720 if (!complete_type_or_maybe_complain (binfo, NULL_TREE, complain))
7721 return error_mark_node;
7723 binfo = TYPE_BINFO (binfo);
7726 gcc_assert (binfo != NULL_TREE);
7728 class_type = BINFO_TYPE (binfo);
7730 /* Handle the special case where INSTANCE is NULL_TREE. */
7731 if (name == complete_ctor_identifier && !instance)
7732 instance = build_dummy_object (class_type);
7733 else
7735 if (name == complete_dtor_identifier
7736 || name == base_dtor_identifier
7737 || name == deleting_dtor_identifier)
7738 gcc_assert (args == NULL || vec_safe_is_empty (*args));
7740 /* Convert to the base class, if necessary. */
7741 if (!same_type_ignoring_top_level_qualifiers_p
7742 (TREE_TYPE (instance), BINFO_TYPE (binfo)))
7744 if (name != ansi_assopname (NOP_EXPR))
7745 /* For constructors and destructors, either the base is
7746 non-virtual, or it is virtual but we are doing the
7747 conversion from a constructor or destructor for the
7748 complete object. In either case, we can convert
7749 statically. */
7750 instance = convert_to_base_statically (instance, binfo);
7751 else
7752 /* However, for assignment operators, we must convert
7753 dynamically if the base is virtual. */
7754 instance = build_base_path (PLUS_EXPR, instance,
7755 binfo, /*nonnull=*/1, complain);
7759 gcc_assert (instance != NULL_TREE);
7761 fns = lookup_fnfields (binfo, name, 1);
7763 /* When making a call to a constructor or destructor for a subobject
7764 that uses virtual base classes, pass down a pointer to a VTT for
7765 the subobject. */
7766 if ((name == base_ctor_identifier
7767 || name == base_dtor_identifier)
7768 && CLASSTYPE_VBASECLASSES (class_type))
7770 tree vtt;
7771 tree sub_vtt;
7773 /* If the current function is a complete object constructor
7774 or destructor, then we fetch the VTT directly.
7775 Otherwise, we look it up using the VTT we were given. */
7776 vtt = DECL_CHAIN (CLASSTYPE_VTABLES (current_class_type));
7777 vtt = decay_conversion (vtt, complain);
7778 if (vtt == error_mark_node)
7779 return error_mark_node;
7780 vtt = build3 (COND_EXPR, TREE_TYPE (vtt),
7781 build2 (EQ_EXPR, boolean_type_node,
7782 current_in_charge_parm, integer_zero_node),
7783 current_vtt_parm,
7784 vtt);
7785 if (BINFO_SUBVTT_INDEX (binfo))
7786 sub_vtt = fold_build_pointer_plus (vtt, BINFO_SUBVTT_INDEX (binfo));
7787 else
7788 sub_vtt = vtt;
7790 if (args == NULL)
7792 allocated = make_tree_vector ();
7793 args = &allocated;
7796 vec_safe_insert (*args, 0, sub_vtt);
7799 ret = build_new_method_call (instance, fns, args,
7800 TYPE_BINFO (BINFO_TYPE (binfo)),
7801 flags, /*fn=*/NULL,
7802 complain);
7804 if (allocated != NULL)
7805 release_tree_vector (allocated);
7807 if ((complain & tf_error)
7808 && (flags & LOOKUP_DELEGATING_CONS)
7809 && name == complete_ctor_identifier
7810 && TREE_CODE (ret) == CALL_EXPR
7811 && (DECL_ABSTRACT_ORIGIN (TREE_OPERAND (CALL_EXPR_FN (ret), 0))
7812 == current_function_decl))
7813 error ("constructor delegates to itself");
7815 return ret;
7818 /* Return the NAME, as a C string. The NAME indicates a function that
7819 is a member of TYPE. *FREE_P is set to true if the caller must
7820 free the memory returned.
7822 Rather than go through all of this, we should simply set the names
7823 of constructors and destructors appropriately, and dispense with
7824 ctor_identifier, dtor_identifier, etc. */
7826 static char *
7827 name_as_c_string (tree name, tree type, bool *free_p)
7829 char *pretty_name;
7831 /* Assume that we will not allocate memory. */
7832 *free_p = false;
7833 /* Constructors and destructors are special. */
7834 if (IDENTIFIER_CTOR_OR_DTOR_P (name))
7836 pretty_name
7837 = CONST_CAST (char *, identifier_to_locale (IDENTIFIER_POINTER (constructor_name (type))));
7838 /* For a destructor, add the '~'. */
7839 if (name == complete_dtor_identifier
7840 || name == base_dtor_identifier
7841 || name == deleting_dtor_identifier)
7843 pretty_name = concat ("~", pretty_name, NULL);
7844 /* Remember that we need to free the memory allocated. */
7845 *free_p = true;
7848 else if (IDENTIFIER_TYPENAME_P (name))
7850 pretty_name = concat ("operator ",
7851 type_as_string_translate (TREE_TYPE (name),
7852 TFF_PLAIN_IDENTIFIER),
7853 NULL);
7854 /* Remember that we need to free the memory allocated. */
7855 *free_p = true;
7857 else
7858 pretty_name = CONST_CAST (char *, identifier_to_locale (IDENTIFIER_POINTER (name)));
7860 return pretty_name;
7863 /* Build a call to "INSTANCE.FN (ARGS)". If FN_P is non-NULL, it will
7864 be set, upon return, to the function called. ARGS may be NULL.
7865 This may change ARGS. */
7867 static tree
7868 build_new_method_call_1 (tree instance, tree fns, vec<tree, va_gc> **args,
7869 tree conversion_path, int flags,
7870 tree *fn_p, tsubst_flags_t complain)
7872 struct z_candidate *candidates = 0, *cand;
7873 tree explicit_targs = NULL_TREE;
7874 tree basetype = NULL_TREE;
7875 tree access_binfo, binfo;
7876 tree optype;
7877 tree first_mem_arg = NULL_TREE;
7878 tree name;
7879 bool skip_first_for_error;
7880 vec<tree, va_gc> *user_args;
7881 tree call;
7882 tree fn;
7883 int template_only = 0;
7884 bool any_viable_p;
7885 tree orig_instance;
7886 tree orig_fns;
7887 vec<tree, va_gc> *orig_args = NULL;
7888 void *p;
7890 gcc_assert (instance != NULL_TREE);
7892 /* We don't know what function we're going to call, yet. */
7893 if (fn_p)
7894 *fn_p = NULL_TREE;
7896 if (error_operand_p (instance)
7897 || !fns || error_operand_p (fns))
7898 return error_mark_node;
7900 if (!BASELINK_P (fns))
7902 if (complain & tf_error)
7903 error ("call to non-function %qD", fns);
7904 return error_mark_node;
7907 orig_instance = instance;
7908 orig_fns = fns;
7910 /* Dismantle the baselink to collect all the information we need. */
7911 if (!conversion_path)
7912 conversion_path = BASELINK_BINFO (fns);
7913 access_binfo = BASELINK_ACCESS_BINFO (fns);
7914 binfo = BASELINK_BINFO (fns);
7915 optype = BASELINK_OPTYPE (fns);
7916 fns = BASELINK_FUNCTIONS (fns);
7917 if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
7919 explicit_targs = TREE_OPERAND (fns, 1);
7920 fns = TREE_OPERAND (fns, 0);
7921 template_only = 1;
7923 gcc_assert (TREE_CODE (fns) == FUNCTION_DECL
7924 || TREE_CODE (fns) == TEMPLATE_DECL
7925 || TREE_CODE (fns) == OVERLOAD);
7926 fn = get_first_fn (fns);
7927 name = DECL_NAME (fn);
7929 basetype = TYPE_MAIN_VARIANT (TREE_TYPE (instance));
7930 gcc_assert (CLASS_TYPE_P (basetype));
7932 if (processing_template_decl)
7934 orig_args = args == NULL ? NULL : make_tree_vector_copy (*args);
7935 instance = build_non_dependent_expr (instance);
7936 if (args != NULL)
7937 make_args_non_dependent (*args);
7940 user_args = args == NULL ? NULL : *args;
7941 /* Under DR 147 A::A() is an invalid constructor call,
7942 not a functional cast. */
7943 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (fn))
7945 if (! (complain & tf_error))
7946 return error_mark_node;
7948 if (permerror (input_location,
7949 "cannot call constructor %<%T::%D%> directly",
7950 basetype, name))
7951 inform (input_location, "for a function-style cast, remove the "
7952 "redundant %<::%D%>", name);
7953 call = build_functional_cast (basetype, build_tree_list_vec (user_args),
7954 complain);
7955 return call;
7958 /* Figure out whether to skip the first argument for the error
7959 message we will display to users if an error occurs. We don't
7960 want to display any compiler-generated arguments. The "this"
7961 pointer hasn't been added yet. However, we must remove the VTT
7962 pointer if this is a call to a base-class constructor or
7963 destructor. */
7964 skip_first_for_error = false;
7965 if (IDENTIFIER_CTOR_OR_DTOR_P (name))
7967 /* Callers should explicitly indicate whether they want to construct
7968 the complete object or just the part without virtual bases. */
7969 gcc_assert (name != ctor_identifier);
7970 /* Similarly for destructors. */
7971 gcc_assert (name != dtor_identifier);
7972 /* Remove the VTT pointer, if present. */
7973 if ((name == base_ctor_identifier || name == base_dtor_identifier)
7974 && CLASSTYPE_VBASECLASSES (basetype))
7975 skip_first_for_error = true;
7978 /* Process the argument list. */
7979 if (args != NULL && *args != NULL)
7981 *args = resolve_args (*args, complain);
7982 if (*args == NULL)
7983 return error_mark_node;
7986 /* Consider the object argument to be used even if we end up selecting a
7987 static member function. */
7988 instance = mark_type_use (instance);
7990 /* It's OK to call destructors and constructors on cv-qualified objects.
7991 Therefore, convert the INSTANCE to the unqualified type, if
7992 necessary. */
7993 if (DECL_DESTRUCTOR_P (fn)
7994 || DECL_CONSTRUCTOR_P (fn))
7996 if (!same_type_p (basetype, TREE_TYPE (instance)))
7998 instance = build_this (instance);
7999 instance = build_nop (build_pointer_type (basetype), instance);
8000 instance = build_fold_indirect_ref (instance);
8003 if (DECL_DESTRUCTOR_P (fn))
8004 name = complete_dtor_identifier;
8006 /* For the overload resolution we need to find the actual `this`
8007 that would be captured if the call turns out to be to a
8008 non-static member function. Do not actually capture it at this
8009 point. */
8010 first_mem_arg = maybe_resolve_dummy (instance, false);
8012 /* Get the high-water mark for the CONVERSION_OBSTACK. */
8013 p = conversion_obstack_alloc (0);
8015 /* If CONSTRUCTOR_IS_DIRECT_INIT is set, this was a T{ } form
8016 initializer, not T({ }). */
8017 if (DECL_CONSTRUCTOR_P (fn) && args != NULL && !vec_safe_is_empty (*args)
8018 && DIRECT_LIST_INIT_P ((**args)[0]))
8020 tree init_list = (**args)[0];
8021 tree init = NULL_TREE;
8023 gcc_assert ((*args)->length () == 1
8024 && !(flags & LOOKUP_ONLYCONVERTING));
8026 /* If the initializer list has no elements and T is a class type with
8027 a default constructor, the object is value-initialized. Handle
8028 this here so we don't need to handle it wherever we use
8029 build_special_member_call. */
8030 if (CONSTRUCTOR_NELTS (init_list) == 0
8031 && TYPE_HAS_DEFAULT_CONSTRUCTOR (basetype)
8032 /* For a user-provided default constructor, use the normal
8033 mechanisms so that protected access works. */
8034 && type_has_non_user_provided_default_constructor (basetype)
8035 && !processing_template_decl)
8036 init = build_value_init (basetype, complain);
8038 /* If BASETYPE is an aggregate, we need to do aggregate
8039 initialization. */
8040 else if (CP_AGGREGATE_TYPE_P (basetype))
8041 init = digest_init (basetype, init_list, complain);
8043 if (init)
8045 if (is_dummy_object (instance))
8046 return get_target_expr_sfinae (init, complain);
8047 init = build2 (INIT_EXPR, TREE_TYPE (instance), instance, init);
8048 TREE_SIDE_EFFECTS (init) = true;
8049 return init;
8052 /* Otherwise go ahead with overload resolution. */
8053 add_list_candidates (fns, first_mem_arg, init_list,
8054 basetype, explicit_targs, template_only,
8055 conversion_path, access_binfo, flags,
8056 &candidates, complain);
8058 else
8060 add_candidates (fns, first_mem_arg, user_args, optype,
8061 explicit_targs, template_only, conversion_path,
8062 access_binfo, flags, &candidates, complain);
8064 any_viable_p = false;
8065 candidates = splice_viable (candidates, false, &any_viable_p);
8067 if (!any_viable_p)
8069 if (complain & tf_error)
8071 if (!COMPLETE_OR_OPEN_TYPE_P (basetype))
8072 cxx_incomplete_type_error (instance, basetype);
8073 else if (optype)
8074 error ("no matching function for call to %<%T::operator %T(%A)%#V%>",
8075 basetype, optype, build_tree_list_vec (user_args),
8076 TREE_TYPE (instance));
8077 else
8079 char *pretty_name;
8080 bool free_p;
8081 tree arglist;
8083 pretty_name = name_as_c_string (name, basetype, &free_p);
8084 arglist = build_tree_list_vec (user_args);
8085 if (skip_first_for_error)
8086 arglist = TREE_CHAIN (arglist);
8087 error ("no matching function for call to %<%T::%s(%A)%#V%>",
8088 basetype, pretty_name, arglist,
8089 TREE_TYPE (instance));
8090 if (free_p)
8091 free (pretty_name);
8093 print_z_candidates (location_of (name), candidates);
8095 call = error_mark_node;
8097 else
8099 cand = tourney (candidates, complain);
8100 if (cand == 0)
8102 char *pretty_name;
8103 bool free_p;
8104 tree arglist;
8106 if (complain & tf_error)
8108 pretty_name = name_as_c_string (name, basetype, &free_p);
8109 arglist = build_tree_list_vec (user_args);
8110 if (skip_first_for_error)
8111 arglist = TREE_CHAIN (arglist);
8112 if (!any_strictly_viable (candidates))
8113 error ("no matching function for call to %<%s(%A)%>",
8114 pretty_name, arglist);
8115 else
8116 error ("call of overloaded %<%s(%A)%> is ambiguous",
8117 pretty_name, arglist);
8118 print_z_candidates (location_of (name), candidates);
8119 if (free_p)
8120 free (pretty_name);
8122 call = error_mark_node;
8124 else
8126 fn = cand->fn;
8127 call = NULL_TREE;
8129 if (!(flags & LOOKUP_NONVIRTUAL)
8130 && DECL_PURE_VIRTUAL_P (fn)
8131 && instance == current_class_ref
8132 && (complain & tf_warning))
8134 /* This is not an error, it is runtime undefined
8135 behavior. */
8136 if (!current_function_decl)
8137 warning (0, "pure virtual %q#D called from "
8138 "non-static data member initializer", fn);
8139 else if (DECL_CONSTRUCTOR_P (current_function_decl)
8140 || DECL_DESTRUCTOR_P (current_function_decl))
8141 warning (0, (DECL_CONSTRUCTOR_P (current_function_decl)
8142 ? "pure virtual %q#D called from constructor"
8143 : "pure virtual %q#D called from destructor"),
8144 fn);
8147 if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE
8148 && !DECL_CONSTRUCTOR_P (fn)
8149 && is_dummy_object (instance))
8151 instance = maybe_resolve_dummy (instance, true);
8152 if (instance == error_mark_node)
8153 call = error_mark_node;
8154 else if (!is_dummy_object (instance))
8156 /* We captured 'this' in the current lambda now that
8157 we know we really need it. */
8158 cand->first_arg = instance;
8160 else
8162 if (complain & tf_error)
8163 error ("cannot call member function %qD without object",
8164 fn);
8165 call = error_mark_node;
8169 if (call != error_mark_node)
8171 /* Optimize away vtable lookup if we know that this
8172 function can't be overridden. We need to check if
8173 the context and the type where we found fn are the same,
8174 actually FN might be defined in a different class
8175 type because of a using-declaration. In this case, we
8176 do not want to perform a non-virtual call. */
8177 if (DECL_VINDEX (fn) && ! (flags & LOOKUP_NONVIRTUAL)
8178 && same_type_ignoring_top_level_qualifiers_p
8179 (DECL_CONTEXT (fn), BINFO_TYPE (binfo))
8180 && resolves_to_fixed_type_p (instance, 0))
8181 flags |= LOOKUP_NONVIRTUAL;
8182 if (explicit_targs)
8183 flags |= LOOKUP_EXPLICIT_TMPL_ARGS;
8184 /* Now we know what function is being called. */
8185 if (fn_p)
8186 *fn_p = fn;
8187 /* Build the actual CALL_EXPR. */
8188 call = build_over_call (cand, flags, complain);
8189 /* In an expression of the form `a->f()' where `f' turns
8190 out to be a static member function, `a' is
8191 none-the-less evaluated. */
8192 if (TREE_CODE (TREE_TYPE (fn)) != METHOD_TYPE
8193 && !is_dummy_object (instance)
8194 && TREE_SIDE_EFFECTS (instance))
8195 call = build2 (COMPOUND_EXPR, TREE_TYPE (call),
8196 instance, call);
8197 else if (call != error_mark_node
8198 && DECL_DESTRUCTOR_P (cand->fn)
8199 && !VOID_TYPE_P (TREE_TYPE (call)))
8200 /* An explicit call of the form "x->~X()" has type
8201 "void". However, on platforms where destructors
8202 return "this" (i.e., those where
8203 targetm.cxx.cdtor_returns_this is true), such calls
8204 will appear to have a return value of pointer type
8205 to the low-level call machinery. We do not want to
8206 change the low-level machinery, since we want to be
8207 able to optimize "delete f()" on such platforms as
8208 "operator delete(~X(f()))" (rather than generating
8209 "t = f(), ~X(t), operator delete (t)"). */
8210 call = build_nop (void_type_node, call);
8215 if (processing_template_decl && call != error_mark_node)
8217 bool cast_to_void = false;
8219 if (TREE_CODE (call) == COMPOUND_EXPR)
8220 call = TREE_OPERAND (call, 1);
8221 else if (TREE_CODE (call) == NOP_EXPR)
8223 cast_to_void = true;
8224 call = TREE_OPERAND (call, 0);
8226 if (INDIRECT_REF_P (call))
8227 call = TREE_OPERAND (call, 0);
8228 call = (build_min_non_dep_call_vec
8229 (call,
8230 build_min (COMPONENT_REF, TREE_TYPE (CALL_EXPR_FN (call)),
8231 orig_instance, orig_fns, NULL_TREE),
8232 orig_args));
8233 SET_EXPR_LOCATION (call, input_location);
8234 call = convert_from_reference (call);
8235 if (cast_to_void)
8236 call = build_nop (void_type_node, call);
8239 /* Free all the conversions we allocated. */
8240 obstack_free (&conversion_obstack, p);
8242 if (orig_args != NULL)
8243 release_tree_vector (orig_args);
8245 return call;
8248 /* Wrapper for above. */
8250 tree
8251 build_new_method_call (tree instance, tree fns, vec<tree, va_gc> **args,
8252 tree conversion_path, int flags,
8253 tree *fn_p, tsubst_flags_t complain)
8255 tree ret;
8256 bool subtime = timevar_cond_start (TV_OVERLOAD);
8257 ret = build_new_method_call_1 (instance, fns, args, conversion_path, flags,
8258 fn_p, complain);
8259 timevar_cond_stop (TV_OVERLOAD, subtime);
8260 return ret;
8263 /* Returns true iff standard conversion sequence ICS1 is a proper
8264 subsequence of ICS2. */
8266 static bool
8267 is_subseq (conversion *ics1, conversion *ics2)
8269 /* We can assume that a conversion of the same code
8270 between the same types indicates a subsequence since we only get
8271 here if the types we are converting from are the same. */
8273 while (ics1->kind == ck_rvalue
8274 || ics1->kind == ck_lvalue)
8275 ics1 = next_conversion (ics1);
8277 while (1)
8279 while (ics2->kind == ck_rvalue
8280 || ics2->kind == ck_lvalue)
8281 ics2 = next_conversion (ics2);
8283 if (ics2->kind == ck_user
8284 || ics2->kind == ck_ambig
8285 || ics2->kind == ck_aggr
8286 || ics2->kind == ck_list
8287 || ics2->kind == ck_identity)
8288 /* At this point, ICS1 cannot be a proper subsequence of
8289 ICS2. We can get a USER_CONV when we are comparing the
8290 second standard conversion sequence of two user conversion
8291 sequences. */
8292 return false;
8294 ics2 = next_conversion (ics2);
8296 if (ics2->kind == ics1->kind
8297 && same_type_p (ics2->type, ics1->type)
8298 && same_type_p (next_conversion (ics2)->type,
8299 next_conversion (ics1)->type))
8300 return true;
8304 /* Returns nonzero iff DERIVED is derived from BASE. The inputs may
8305 be any _TYPE nodes. */
8307 bool
8308 is_properly_derived_from (tree derived, tree base)
8310 if (!CLASS_TYPE_P (derived) || !CLASS_TYPE_P (base))
8311 return false;
8313 /* We only allow proper derivation here. The DERIVED_FROM_P macro
8314 considers every class derived from itself. */
8315 return (!same_type_ignoring_top_level_qualifiers_p (derived, base)
8316 && DERIVED_FROM_P (base, derived));
8319 /* We build the ICS for an implicit object parameter as a pointer
8320 conversion sequence. However, such a sequence should be compared
8321 as if it were a reference conversion sequence. If ICS is the
8322 implicit conversion sequence for an implicit object parameter,
8323 modify it accordingly. */
8325 static void
8326 maybe_handle_implicit_object (conversion **ics)
8328 if ((*ics)->this_p)
8330 /* [over.match.funcs]
8332 For non-static member functions, the type of the
8333 implicit object parameter is "reference to cv X"
8334 where X is the class of which the function is a
8335 member and cv is the cv-qualification on the member
8336 function declaration. */
8337 conversion *t = *ics;
8338 tree reference_type;
8340 /* The `this' parameter is a pointer to a class type. Make the
8341 implicit conversion talk about a reference to that same class
8342 type. */
8343 reference_type = TREE_TYPE (t->type);
8344 reference_type = build_reference_type (reference_type);
8346 if (t->kind == ck_qual)
8347 t = next_conversion (t);
8348 if (t->kind == ck_ptr)
8349 t = next_conversion (t);
8350 t = build_identity_conv (TREE_TYPE (t->type), NULL_TREE);
8351 t = direct_reference_binding (reference_type, t);
8352 t->this_p = 1;
8353 t->rvaluedness_matches_p = 0;
8354 *ics = t;
8358 /* If *ICS is a REF_BIND set *ICS to the remainder of the conversion,
8359 and return the initial reference binding conversion. Otherwise,
8360 leave *ICS unchanged and return NULL. */
8362 static conversion *
8363 maybe_handle_ref_bind (conversion **ics)
8365 if ((*ics)->kind == ck_ref_bind)
8367 conversion *old_ics = *ics;
8368 *ics = next_conversion (old_ics);
8369 (*ics)->user_conv_p = old_ics->user_conv_p;
8370 return old_ics;
8373 return NULL;
8376 /* Compare two implicit conversion sequences according to the rules set out in
8377 [over.ics.rank]. Return values:
8379 1: ics1 is better than ics2
8380 -1: ics2 is better than ics1
8381 0: ics1 and ics2 are indistinguishable */
8383 static int
8384 compare_ics (conversion *ics1, conversion *ics2)
8386 tree from_type1;
8387 tree from_type2;
8388 tree to_type1;
8389 tree to_type2;
8390 tree deref_from_type1 = NULL_TREE;
8391 tree deref_from_type2 = NULL_TREE;
8392 tree deref_to_type1 = NULL_TREE;
8393 tree deref_to_type2 = NULL_TREE;
8394 conversion_rank rank1, rank2;
8396 /* REF_BINDING is nonzero if the result of the conversion sequence
8397 is a reference type. In that case REF_CONV is the reference
8398 binding conversion. */
8399 conversion *ref_conv1;
8400 conversion *ref_conv2;
8402 /* Compare badness before stripping the reference conversion. */
8403 if (ics1->bad_p > ics2->bad_p)
8404 return -1;
8405 else if (ics1->bad_p < ics2->bad_p)
8406 return 1;
8408 /* Handle implicit object parameters. */
8409 maybe_handle_implicit_object (&ics1);
8410 maybe_handle_implicit_object (&ics2);
8412 /* Handle reference parameters. */
8413 ref_conv1 = maybe_handle_ref_bind (&ics1);
8414 ref_conv2 = maybe_handle_ref_bind (&ics2);
8416 /* List-initialization sequence L1 is a better conversion sequence than
8417 list-initialization sequence L2 if L1 converts to
8418 std::initializer_list<X> for some X and L2 does not. */
8419 if (ics1->kind == ck_list && ics2->kind != ck_list)
8420 return 1;
8421 if (ics2->kind == ck_list && ics1->kind != ck_list)
8422 return -1;
8424 /* [over.ics.rank]
8426 When comparing the basic forms of implicit conversion sequences (as
8427 defined in _over.best.ics_)
8429 --a standard conversion sequence (_over.ics.scs_) is a better
8430 conversion sequence than a user-defined conversion sequence
8431 or an ellipsis conversion sequence, and
8433 --a user-defined conversion sequence (_over.ics.user_) is a
8434 better conversion sequence than an ellipsis conversion sequence
8435 (_over.ics.ellipsis_). */
8436 /* Use BAD_CONVERSION_RANK because we already checked for a badness
8437 mismatch. If both ICS are bad, we try to make a decision based on
8438 what would have happened if they'd been good. This is not an
8439 extension, we'll still give an error when we build up the call; this
8440 just helps us give a more helpful error message. */
8441 rank1 = BAD_CONVERSION_RANK (ics1);
8442 rank2 = BAD_CONVERSION_RANK (ics2);
8444 if (rank1 > rank2)
8445 return -1;
8446 else if (rank1 < rank2)
8447 return 1;
8449 if (ics1->ellipsis_p)
8450 /* Both conversions are ellipsis conversions. */
8451 return 0;
8453 /* User-defined conversion sequence U1 is a better conversion sequence
8454 than another user-defined conversion sequence U2 if they contain the
8455 same user-defined conversion operator or constructor and if the sec-
8456 ond standard conversion sequence of U1 is better than the second
8457 standard conversion sequence of U2. */
8459 /* Handle list-conversion with the same code even though it isn't always
8460 ranked as a user-defined conversion and it doesn't have a second
8461 standard conversion sequence; it will still have the desired effect.
8462 Specifically, we need to do the reference binding comparison at the
8463 end of this function. */
8465 if (ics1->user_conv_p || ics1->kind == ck_list || ics1->kind == ck_aggr)
8467 conversion *t1;
8468 conversion *t2;
8470 for (t1 = ics1; t1->kind != ck_user; t1 = next_conversion (t1))
8471 if (t1->kind == ck_ambig || t1->kind == ck_aggr
8472 || t1->kind == ck_list)
8473 break;
8474 for (t2 = ics2; t2->kind != ck_user; t2 = next_conversion (t2))
8475 if (t2->kind == ck_ambig || t2->kind == ck_aggr
8476 || t2->kind == ck_list)
8477 break;
8479 if (t1->kind != t2->kind)
8480 return 0;
8481 else if (t1->kind == ck_user)
8483 if (t1->cand->fn != t2->cand->fn)
8484 return 0;
8486 else
8488 /* For ambiguous or aggregate conversions, use the target type as
8489 a proxy for the conversion function. */
8490 if (!same_type_ignoring_top_level_qualifiers_p (t1->type, t2->type))
8491 return 0;
8494 /* We can just fall through here, after setting up
8495 FROM_TYPE1 and FROM_TYPE2. */
8496 from_type1 = t1->type;
8497 from_type2 = t2->type;
8499 else
8501 conversion *t1;
8502 conversion *t2;
8504 /* We're dealing with two standard conversion sequences.
8506 [over.ics.rank]
8508 Standard conversion sequence S1 is a better conversion
8509 sequence than standard conversion sequence S2 if
8511 --S1 is a proper subsequence of S2 (comparing the conversion
8512 sequences in the canonical form defined by _over.ics.scs_,
8513 excluding any Lvalue Transformation; the identity
8514 conversion sequence is considered to be a subsequence of
8515 any non-identity conversion sequence */
8517 t1 = ics1;
8518 while (t1->kind != ck_identity)
8519 t1 = next_conversion (t1);
8520 from_type1 = t1->type;
8522 t2 = ics2;
8523 while (t2->kind != ck_identity)
8524 t2 = next_conversion (t2);
8525 from_type2 = t2->type;
8528 /* One sequence can only be a subsequence of the other if they start with
8529 the same type. They can start with different types when comparing the
8530 second standard conversion sequence in two user-defined conversion
8531 sequences. */
8532 if (same_type_p (from_type1, from_type2))
8534 if (is_subseq (ics1, ics2))
8535 return 1;
8536 if (is_subseq (ics2, ics1))
8537 return -1;
8540 /* [over.ics.rank]
8542 Or, if not that,
8544 --the rank of S1 is better than the rank of S2 (by the rules
8545 defined below):
8547 Standard conversion sequences are ordered by their ranks: an Exact
8548 Match is a better conversion than a Promotion, which is a better
8549 conversion than a Conversion.
8551 Two conversion sequences with the same rank are indistinguishable
8552 unless one of the following rules applies:
8554 --A conversion that does not a convert a pointer, pointer to member,
8555 or std::nullptr_t to bool is better than one that does.
8557 The ICS_STD_RANK automatically handles the pointer-to-bool rule,
8558 so that we do not have to check it explicitly. */
8559 if (ics1->rank < ics2->rank)
8560 return 1;
8561 else if (ics2->rank < ics1->rank)
8562 return -1;
8564 to_type1 = ics1->type;
8565 to_type2 = ics2->type;
8567 /* A conversion from scalar arithmetic type to complex is worse than a
8568 conversion between scalar arithmetic types. */
8569 if (same_type_p (from_type1, from_type2)
8570 && ARITHMETIC_TYPE_P (from_type1)
8571 && ARITHMETIC_TYPE_P (to_type1)
8572 && ARITHMETIC_TYPE_P (to_type2)
8573 && ((TREE_CODE (to_type1) == COMPLEX_TYPE)
8574 != (TREE_CODE (to_type2) == COMPLEX_TYPE)))
8576 if (TREE_CODE (to_type1) == COMPLEX_TYPE)
8577 return -1;
8578 else
8579 return 1;
8582 if (TYPE_PTR_P (from_type1)
8583 && TYPE_PTR_P (from_type2)
8584 && TYPE_PTR_P (to_type1)
8585 && TYPE_PTR_P (to_type2))
8587 deref_from_type1 = TREE_TYPE (from_type1);
8588 deref_from_type2 = TREE_TYPE (from_type2);
8589 deref_to_type1 = TREE_TYPE (to_type1);
8590 deref_to_type2 = TREE_TYPE (to_type2);
8592 /* The rules for pointers to members A::* are just like the rules
8593 for pointers A*, except opposite: if B is derived from A then
8594 A::* converts to B::*, not vice versa. For that reason, we
8595 switch the from_ and to_ variables here. */
8596 else if ((TYPE_PTRDATAMEM_P (from_type1) && TYPE_PTRDATAMEM_P (from_type2)
8597 && TYPE_PTRDATAMEM_P (to_type1) && TYPE_PTRDATAMEM_P (to_type2))
8598 || (TYPE_PTRMEMFUNC_P (from_type1)
8599 && TYPE_PTRMEMFUNC_P (from_type2)
8600 && TYPE_PTRMEMFUNC_P (to_type1)
8601 && TYPE_PTRMEMFUNC_P (to_type2)))
8603 deref_to_type1 = TYPE_PTRMEM_CLASS_TYPE (from_type1);
8604 deref_to_type2 = TYPE_PTRMEM_CLASS_TYPE (from_type2);
8605 deref_from_type1 = TYPE_PTRMEM_CLASS_TYPE (to_type1);
8606 deref_from_type2 = TYPE_PTRMEM_CLASS_TYPE (to_type2);
8609 if (deref_from_type1 != NULL_TREE
8610 && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_from_type1))
8611 && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_from_type2)))
8613 /* This was one of the pointer or pointer-like conversions.
8615 [over.ics.rank]
8617 --If class B is derived directly or indirectly from class A,
8618 conversion of B* to A* is better than conversion of B* to
8619 void*, and conversion of A* to void* is better than
8620 conversion of B* to void*. */
8621 if (VOID_TYPE_P (deref_to_type1)
8622 && VOID_TYPE_P (deref_to_type2))
8624 if (is_properly_derived_from (deref_from_type1,
8625 deref_from_type2))
8626 return -1;
8627 else if (is_properly_derived_from (deref_from_type2,
8628 deref_from_type1))
8629 return 1;
8631 else if (VOID_TYPE_P (deref_to_type1)
8632 || VOID_TYPE_P (deref_to_type2))
8634 if (same_type_p (deref_from_type1, deref_from_type2))
8636 if (VOID_TYPE_P (deref_to_type2))
8638 if (is_properly_derived_from (deref_from_type1,
8639 deref_to_type1))
8640 return 1;
8642 /* We know that DEREF_TO_TYPE1 is `void' here. */
8643 else if (is_properly_derived_from (deref_from_type1,
8644 deref_to_type2))
8645 return -1;
8648 else if (RECORD_OR_UNION_CODE_P (TREE_CODE (deref_to_type1))
8649 && RECORD_OR_UNION_CODE_P (TREE_CODE (deref_to_type2)))
8651 /* [over.ics.rank]
8653 --If class B is derived directly or indirectly from class A
8654 and class C is derived directly or indirectly from B,
8656 --conversion of C* to B* is better than conversion of C* to
8659 --conversion of B* to A* is better than conversion of C* to
8660 A* */
8661 if (same_type_p (deref_from_type1, deref_from_type2))
8663 if (is_properly_derived_from (deref_to_type1,
8664 deref_to_type2))
8665 return 1;
8666 else if (is_properly_derived_from (deref_to_type2,
8667 deref_to_type1))
8668 return -1;
8670 else if (same_type_p (deref_to_type1, deref_to_type2))
8672 if (is_properly_derived_from (deref_from_type2,
8673 deref_from_type1))
8674 return 1;
8675 else if (is_properly_derived_from (deref_from_type1,
8676 deref_from_type2))
8677 return -1;
8681 else if (CLASS_TYPE_P (non_reference (from_type1))
8682 && same_type_p (from_type1, from_type2))
8684 tree from = non_reference (from_type1);
8686 /* [over.ics.rank]
8688 --binding of an expression of type C to a reference of type
8689 B& is better than binding an expression of type C to a
8690 reference of type A&
8692 --conversion of C to B is better than conversion of C to A, */
8693 if (is_properly_derived_from (from, to_type1)
8694 && is_properly_derived_from (from, to_type2))
8696 if (is_properly_derived_from (to_type1, to_type2))
8697 return 1;
8698 else if (is_properly_derived_from (to_type2, to_type1))
8699 return -1;
8702 else if (CLASS_TYPE_P (non_reference (to_type1))
8703 && same_type_p (to_type1, to_type2))
8705 tree to = non_reference (to_type1);
8707 /* [over.ics.rank]
8709 --binding of an expression of type B to a reference of type
8710 A& is better than binding an expression of type C to a
8711 reference of type A&,
8713 --conversion of B to A is better than conversion of C to A */
8714 if (is_properly_derived_from (from_type1, to)
8715 && is_properly_derived_from (from_type2, to))
8717 if (is_properly_derived_from (from_type2, from_type1))
8718 return 1;
8719 else if (is_properly_derived_from (from_type1, from_type2))
8720 return -1;
8724 /* [over.ics.rank]
8726 --S1 and S2 differ only in their qualification conversion and yield
8727 similar types T1 and T2 (_conv.qual_), respectively, and the cv-
8728 qualification signature of type T1 is a proper subset of the cv-
8729 qualification signature of type T2 */
8730 if (ics1->kind == ck_qual
8731 && ics2->kind == ck_qual
8732 && same_type_p (from_type1, from_type2))
8734 int result = comp_cv_qual_signature (to_type1, to_type2);
8735 if (result != 0)
8736 return result;
8739 /* [over.ics.rank]
8741 --S1 and S2 are reference bindings (_dcl.init.ref_) and neither refers
8742 to an implicit object parameter of a non-static member function
8743 declared without a ref-qualifier, and either S1 binds an lvalue
8744 reference to an lvalue and S2 binds an rvalue reference or S1 binds an
8745 rvalue reference to an rvalue and S2 binds an lvalue reference (C++0x
8746 draft standard, 13.3.3.2)
8748 --S1 and S2 are reference bindings (_dcl.init.ref_), and the
8749 types to which the references refer are the same type except for
8750 top-level cv-qualifiers, and the type to which the reference
8751 initialized by S2 refers is more cv-qualified than the type to
8752 which the reference initialized by S1 refers.
8754 DR 1328 [over.match.best]: the context is an initialization by
8755 conversion function for direct reference binding (13.3.1.6) of a
8756 reference to function type, the return type of F1 is the same kind of
8757 reference (i.e. lvalue or rvalue) as the reference being initialized,
8758 and the return type of F2 is not. */
8760 if (ref_conv1 && ref_conv2)
8762 if (!ref_conv1->this_p && !ref_conv2->this_p
8763 && (ref_conv1->rvaluedness_matches_p
8764 != ref_conv2->rvaluedness_matches_p)
8765 && (same_type_p (ref_conv1->type, ref_conv2->type)
8766 || (TYPE_REF_IS_RVALUE (ref_conv1->type)
8767 != TYPE_REF_IS_RVALUE (ref_conv2->type))))
8769 if (ref_conv1->bad_p
8770 && !same_type_p (TREE_TYPE (ref_conv1->type),
8771 TREE_TYPE (ref_conv2->type)))
8772 /* Don't prefer a bad conversion that drops cv-quals to a bad
8773 conversion with the wrong rvalueness. */
8774 return 0;
8775 return (ref_conv1->rvaluedness_matches_p
8776 - ref_conv2->rvaluedness_matches_p);
8779 if (same_type_ignoring_top_level_qualifiers_p (to_type1, to_type2))
8781 int q1 = cp_type_quals (TREE_TYPE (ref_conv1->type));
8782 int q2 = cp_type_quals (TREE_TYPE (ref_conv2->type));
8783 if (ref_conv1->bad_p)
8785 /* Prefer the one that drops fewer cv-quals. */
8786 tree ftype = next_conversion (ref_conv1)->type;
8787 int fquals = cp_type_quals (ftype);
8788 q1 ^= fquals;
8789 q2 ^= fquals;
8791 return comp_cv_qualification (q2, q1);
8795 /* Neither conversion sequence is better than the other. */
8796 return 0;
8799 /* The source type for this standard conversion sequence. */
8801 static tree
8802 source_type (conversion *t)
8804 for (;; t = next_conversion (t))
8806 if (t->kind == ck_user
8807 || t->kind == ck_ambig
8808 || t->kind == ck_identity)
8809 return t->type;
8811 gcc_unreachable ();
8814 /* Note a warning about preferring WINNER to LOSER. We do this by storing
8815 a pointer to LOSER and re-running joust to produce the warning if WINNER
8816 is actually used. */
8818 static void
8819 add_warning (struct z_candidate *winner, struct z_candidate *loser)
8821 candidate_warning *cw = (candidate_warning *)
8822 conversion_obstack_alloc (sizeof (candidate_warning));
8823 cw->loser = loser;
8824 cw->next = winner->warnings;
8825 winner->warnings = cw;
8828 /* Compare two candidates for overloading as described in
8829 [over.match.best]. Return values:
8831 1: cand1 is better than cand2
8832 -1: cand2 is better than cand1
8833 0: cand1 and cand2 are indistinguishable */
8835 static int
8836 joust (struct z_candidate *cand1, struct z_candidate *cand2, bool warn,
8837 tsubst_flags_t complain)
8839 int winner = 0;
8840 int off1 = 0, off2 = 0;
8841 size_t i;
8842 size_t len;
8844 /* Candidates that involve bad conversions are always worse than those
8845 that don't. */
8846 if (cand1->viable > cand2->viable)
8847 return 1;
8848 if (cand1->viable < cand2->viable)
8849 return -1;
8851 /* If we have two pseudo-candidates for conversions to the same type,
8852 or two candidates for the same function, arbitrarily pick one. */
8853 if (cand1->fn == cand2->fn
8854 && (IS_TYPE_OR_DECL_P (cand1->fn)))
8855 return 1;
8857 /* Prefer a non-deleted function over an implicitly deleted move
8858 constructor or assignment operator. This differs slightly from the
8859 wording for issue 1402 (which says the move op is ignored by overload
8860 resolution), but this way produces better error messages. */
8861 if (TREE_CODE (cand1->fn) == FUNCTION_DECL
8862 && TREE_CODE (cand2->fn) == FUNCTION_DECL
8863 && DECL_DELETED_FN (cand1->fn) != DECL_DELETED_FN (cand2->fn))
8865 if (DECL_DELETED_FN (cand1->fn) && DECL_DEFAULTED_FN (cand1->fn)
8866 && move_fn_p (cand1->fn))
8867 return -1;
8868 if (DECL_DELETED_FN (cand2->fn) && DECL_DEFAULTED_FN (cand2->fn)
8869 && move_fn_p (cand2->fn))
8870 return 1;
8873 /* a viable function F1
8874 is defined to be a better function than another viable function F2 if
8875 for all arguments i, ICSi(F1) is not a worse conversion sequence than
8876 ICSi(F2), and then */
8878 /* for some argument j, ICSj(F1) is a better conversion sequence than
8879 ICSj(F2) */
8881 /* For comparing static and non-static member functions, we ignore
8882 the implicit object parameter of the non-static function. The
8883 standard says to pretend that the static function has an object
8884 parm, but that won't work with operator overloading. */
8885 len = cand1->num_convs;
8886 if (len != cand2->num_convs)
8888 int static_1 = DECL_STATIC_FUNCTION_P (cand1->fn);
8889 int static_2 = DECL_STATIC_FUNCTION_P (cand2->fn);
8891 if (DECL_CONSTRUCTOR_P (cand1->fn)
8892 && is_list_ctor (cand1->fn) != is_list_ctor (cand2->fn))
8893 /* We're comparing a near-match list constructor and a near-match
8894 non-list constructor. Just treat them as unordered. */
8895 return 0;
8897 gcc_assert (static_1 != static_2);
8899 if (static_1)
8900 off2 = 1;
8901 else
8903 off1 = 1;
8904 --len;
8908 for (i = 0; i < len; ++i)
8910 conversion *t1 = cand1->convs[i + off1];
8911 conversion *t2 = cand2->convs[i + off2];
8912 int comp = compare_ics (t1, t2);
8914 if (comp != 0)
8916 if ((complain & tf_warning)
8917 && warn_sign_promo
8918 && (CONVERSION_RANK (t1) + CONVERSION_RANK (t2)
8919 == cr_std + cr_promotion)
8920 && t1->kind == ck_std
8921 && t2->kind == ck_std
8922 && TREE_CODE (t1->type) == INTEGER_TYPE
8923 && TREE_CODE (t2->type) == INTEGER_TYPE
8924 && (TYPE_PRECISION (t1->type)
8925 == TYPE_PRECISION (t2->type))
8926 && (TYPE_UNSIGNED (next_conversion (t1)->type)
8927 || (TREE_CODE (next_conversion (t1)->type)
8928 == ENUMERAL_TYPE)))
8930 tree type = next_conversion (t1)->type;
8931 tree type1, type2;
8932 struct z_candidate *w, *l;
8933 if (comp > 0)
8934 type1 = t1->type, type2 = t2->type,
8935 w = cand1, l = cand2;
8936 else
8937 type1 = t2->type, type2 = t1->type,
8938 w = cand2, l = cand1;
8940 if (warn)
8942 warning (OPT_Wsign_promo, "passing %qT chooses %qT over %qT",
8943 type, type1, type2);
8944 warning (OPT_Wsign_promo, " in call to %qD", w->fn);
8946 else
8947 add_warning (w, l);
8950 if (winner && comp != winner)
8952 winner = 0;
8953 goto tweak;
8955 winner = comp;
8959 /* warn about confusing overload resolution for user-defined conversions,
8960 either between a constructor and a conversion op, or between two
8961 conversion ops. */
8962 if ((complain & tf_warning)
8963 && winner && warn_conversion && cand1->second_conv
8964 && (!DECL_CONSTRUCTOR_P (cand1->fn) || !DECL_CONSTRUCTOR_P (cand2->fn))
8965 && winner != compare_ics (cand1->second_conv, cand2->second_conv))
8967 struct z_candidate *w, *l;
8968 bool give_warning = false;
8970 if (winner == 1)
8971 w = cand1, l = cand2;
8972 else
8973 w = cand2, l = cand1;
8975 /* We don't want to complain about `X::operator T1 ()'
8976 beating `X::operator T2 () const', when T2 is a no less
8977 cv-qualified version of T1. */
8978 if (DECL_CONTEXT (w->fn) == DECL_CONTEXT (l->fn)
8979 && !DECL_CONSTRUCTOR_P (w->fn) && !DECL_CONSTRUCTOR_P (l->fn))
8981 tree t = TREE_TYPE (TREE_TYPE (l->fn));
8982 tree f = TREE_TYPE (TREE_TYPE (w->fn));
8984 if (TREE_CODE (t) == TREE_CODE (f) && POINTER_TYPE_P (t))
8986 t = TREE_TYPE (t);
8987 f = TREE_TYPE (f);
8989 if (!comp_ptr_ttypes (t, f))
8990 give_warning = true;
8992 else
8993 give_warning = true;
8995 if (!give_warning)
8996 /*NOP*/;
8997 else if (warn)
8999 tree source = source_type (w->convs[0]);
9000 if (! DECL_CONSTRUCTOR_P (w->fn))
9001 source = TREE_TYPE (source);
9002 if (warning (OPT_Wconversion, "choosing %qD over %qD", w->fn, l->fn)
9003 && warning (OPT_Wconversion, " for conversion from %qT to %qT",
9004 source, w->second_conv->type))
9006 inform (input_location, " because conversion sequence for the argument is better");
9009 else
9010 add_warning (w, l);
9013 if (winner)
9014 return winner;
9016 /* DR 495 moved this tiebreaker above the template ones. */
9017 /* or, if not that,
9018 the context is an initialization by user-defined conversion (see
9019 _dcl.init_ and _over.match.user_) and the standard conversion
9020 sequence from the return type of F1 to the destination type (i.e.,
9021 the type of the entity being initialized) is a better conversion
9022 sequence than the standard conversion sequence from the return type
9023 of F2 to the destination type. */
9025 if (cand1->second_conv)
9027 winner = compare_ics (cand1->second_conv, cand2->second_conv);
9028 if (winner)
9029 return winner;
9032 /* or, if not that,
9033 F1 is a non-template function and F2 is a template function
9034 specialization. */
9036 if (!cand1->template_decl && cand2->template_decl)
9037 return 1;
9038 else if (cand1->template_decl && !cand2->template_decl)
9039 return -1;
9041 /* or, if not that,
9042 F1 and F2 are template functions and the function template for F1 is
9043 more specialized than the template for F2 according to the partial
9044 ordering rules. */
9046 if (cand1->template_decl && cand2->template_decl)
9048 winner = more_specialized_fn
9049 (TI_TEMPLATE (cand1->template_decl),
9050 TI_TEMPLATE (cand2->template_decl),
9051 /* [temp.func.order]: The presence of unused ellipsis and default
9052 arguments has no effect on the partial ordering of function
9053 templates. add_function_candidate() will not have
9054 counted the "this" argument for constructors. */
9055 cand1->num_convs + DECL_CONSTRUCTOR_P (cand1->fn));
9056 if (winner)
9057 return winner;
9060 /* Check whether we can discard a builtin candidate, either because we
9061 have two identical ones or matching builtin and non-builtin candidates.
9063 (Pedantically in the latter case the builtin which matched the user
9064 function should not be added to the overload set, but we spot it here.
9066 [over.match.oper]
9067 ... the builtin candidates include ...
9068 - do not have the same parameter type list as any non-template
9069 non-member candidate. */
9071 if (identifier_p (cand1->fn) || identifier_p (cand2->fn))
9073 for (i = 0; i < len; ++i)
9074 if (!same_type_p (cand1->convs[i]->type,
9075 cand2->convs[i]->type))
9076 break;
9077 if (i == cand1->num_convs)
9079 if (cand1->fn == cand2->fn)
9080 /* Two built-in candidates; arbitrarily pick one. */
9081 return 1;
9082 else if (identifier_p (cand1->fn))
9083 /* cand1 is built-in; prefer cand2. */
9084 return -1;
9085 else
9086 /* cand2 is built-in; prefer cand1. */
9087 return 1;
9091 /* For candidates of a multi-versioned function, make the version with
9092 the highest priority win. This version will be checked for dispatching
9093 first. If this version can be inlined into the caller, the front-end
9094 will simply make a direct call to this function. */
9096 if (TREE_CODE (cand1->fn) == FUNCTION_DECL
9097 && DECL_FUNCTION_VERSIONED (cand1->fn)
9098 && TREE_CODE (cand2->fn) == FUNCTION_DECL
9099 && DECL_FUNCTION_VERSIONED (cand2->fn))
9101 tree f1 = TREE_TYPE (cand1->fn);
9102 tree f2 = TREE_TYPE (cand2->fn);
9103 tree p1 = TYPE_ARG_TYPES (f1);
9104 tree p2 = TYPE_ARG_TYPES (f2);
9106 /* Check if cand1->fn and cand2->fn are versions of the same function. It
9107 is possible that cand1->fn and cand2->fn are function versions but of
9108 different functions. Check types to see if they are versions of the same
9109 function. */
9110 if (compparms (p1, p2)
9111 && same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
9113 /* Always make the version with the higher priority, more
9114 specialized, win. */
9115 gcc_assert (targetm.compare_version_priority);
9116 if (targetm.compare_version_priority (cand1->fn, cand2->fn) >= 0)
9117 return 1;
9118 else
9119 return -1;
9123 /* If the two function declarations represent the same function (this can
9124 happen with declarations in multiple scopes and arg-dependent lookup),
9125 arbitrarily choose one. But first make sure the default args we're
9126 using match. */
9127 if (DECL_P (cand1->fn) && DECL_P (cand2->fn)
9128 && equal_functions (cand1->fn, cand2->fn))
9130 tree parms1 = TYPE_ARG_TYPES (TREE_TYPE (cand1->fn));
9131 tree parms2 = TYPE_ARG_TYPES (TREE_TYPE (cand2->fn));
9133 gcc_assert (!DECL_CONSTRUCTOR_P (cand1->fn));
9135 for (i = 0; i < len; ++i)
9137 /* Don't crash if the fn is variadic. */
9138 if (!parms1)
9139 break;
9140 parms1 = TREE_CHAIN (parms1);
9141 parms2 = TREE_CHAIN (parms2);
9144 if (off1)
9145 parms1 = TREE_CHAIN (parms1);
9146 else if (off2)
9147 parms2 = TREE_CHAIN (parms2);
9149 for (; parms1; ++i)
9151 if (!cp_tree_equal (TREE_PURPOSE (parms1),
9152 TREE_PURPOSE (parms2)))
9154 if (warn)
9156 if (complain & tf_error)
9158 if (permerror (input_location,
9159 "default argument mismatch in "
9160 "overload resolution"))
9162 inform (input_location,
9163 " candidate 1: %q+#F", cand1->fn);
9164 inform (input_location,
9165 " candidate 2: %q+#F", cand2->fn);
9168 else
9169 return 0;
9171 else
9172 add_warning (cand1, cand2);
9173 break;
9175 parms1 = TREE_CHAIN (parms1);
9176 parms2 = TREE_CHAIN (parms2);
9179 return 1;
9182 tweak:
9184 /* Extension: If the worst conversion for one candidate is worse than the
9185 worst conversion for the other, take the first. */
9186 if (!pedantic && (complain & tf_warning_or_error))
9188 conversion_rank rank1 = cr_identity, rank2 = cr_identity;
9189 struct z_candidate *w = 0, *l = 0;
9191 for (i = 0; i < len; ++i)
9193 if (CONVERSION_RANK (cand1->convs[i+off1]) > rank1)
9194 rank1 = CONVERSION_RANK (cand1->convs[i+off1]);
9195 if (CONVERSION_RANK (cand2->convs[i + off2]) > rank2)
9196 rank2 = CONVERSION_RANK (cand2->convs[i + off2]);
9198 if (rank1 < rank2)
9199 winner = 1, w = cand1, l = cand2;
9200 if (rank1 > rank2)
9201 winner = -1, w = cand2, l = cand1;
9202 if (winner)
9204 /* Don't choose a deleted function over ambiguity. */
9205 if (DECL_P (w->fn) && DECL_DELETED_FN (w->fn))
9206 return 0;
9207 if (warn)
9209 pedwarn (input_location, 0,
9210 "ISO C++ says that these are ambiguous, even "
9211 "though the worst conversion for the first is better than "
9212 "the worst conversion for the second:");
9213 print_z_candidate (input_location, _("candidate 1:"), w);
9214 print_z_candidate (input_location, _("candidate 2:"), l);
9216 else
9217 add_warning (w, l);
9218 return winner;
9222 gcc_assert (!winner);
9223 return 0;
9226 /* Given a list of candidates for overloading, find the best one, if any.
9227 This algorithm has a worst case of O(2n) (winner is last), and a best
9228 case of O(n/2) (totally ambiguous); much better than a sorting
9229 algorithm. */
9231 static struct z_candidate *
9232 tourney (struct z_candidate *candidates, tsubst_flags_t complain)
9234 struct z_candidate *champ = candidates, *challenger;
9235 int fate;
9236 int champ_compared_to_predecessor = 0;
9238 /* Walk through the list once, comparing each current champ to the next
9239 candidate, knocking out a candidate or two with each comparison. */
9241 for (challenger = champ->next; challenger; )
9243 fate = joust (champ, challenger, 0, complain);
9244 if (fate == 1)
9245 challenger = challenger->next;
9246 else
9248 if (fate == 0)
9250 champ = challenger->next;
9251 if (champ == 0)
9252 return NULL;
9253 champ_compared_to_predecessor = 0;
9255 else
9257 champ = challenger;
9258 champ_compared_to_predecessor = 1;
9261 challenger = champ->next;
9265 /* Make sure the champ is better than all the candidates it hasn't yet
9266 been compared to. */
9268 for (challenger = candidates;
9269 challenger != champ
9270 && !(champ_compared_to_predecessor && challenger->next == champ);
9271 challenger = challenger->next)
9273 fate = joust (champ, challenger, 0, complain);
9274 if (fate != 1)
9275 return NULL;
9278 return champ;
9281 /* Returns nonzero if things of type FROM can be converted to TO. */
9283 bool
9284 can_convert (tree to, tree from, tsubst_flags_t complain)
9286 tree arg = NULL_TREE;
9287 /* implicit_conversion only considers user-defined conversions
9288 if it has an expression for the call argument list. */
9289 if (CLASS_TYPE_P (from) || CLASS_TYPE_P (to))
9290 arg = build1 (CAST_EXPR, from, NULL_TREE);
9291 return can_convert_arg (to, from, arg, LOOKUP_IMPLICIT, complain);
9294 /* Returns nonzero if things of type FROM can be converted to TO with a
9295 standard conversion. */
9297 bool
9298 can_convert_standard (tree to, tree from, tsubst_flags_t complain)
9300 return can_convert_arg (to, from, NULL_TREE, LOOKUP_IMPLICIT, complain);
9303 /* Returns nonzero if ARG (of type FROM) can be converted to TO. */
9305 bool
9306 can_convert_arg (tree to, tree from, tree arg, int flags,
9307 tsubst_flags_t complain)
9309 conversion *t;
9310 void *p;
9311 bool ok_p;
9313 /* Get the high-water mark for the CONVERSION_OBSTACK. */
9314 p = conversion_obstack_alloc (0);
9315 /* We want to discard any access checks done for this test,
9316 as we might not be in the appropriate access context and
9317 we'll do the check again when we actually perform the
9318 conversion. */
9319 push_deferring_access_checks (dk_deferred);
9321 t = implicit_conversion (to, from, arg, /*c_cast_p=*/false,
9322 flags, complain);
9323 ok_p = (t && !t->bad_p);
9325 /* Discard the access checks now. */
9326 pop_deferring_access_checks ();
9327 /* Free all the conversions we allocated. */
9328 obstack_free (&conversion_obstack, p);
9330 return ok_p;
9333 /* Like can_convert_arg, but allows dubious conversions as well. */
9335 bool
9336 can_convert_arg_bad (tree to, tree from, tree arg, int flags,
9337 tsubst_flags_t complain)
9339 conversion *t;
9340 void *p;
9342 /* Get the high-water mark for the CONVERSION_OBSTACK. */
9343 p = conversion_obstack_alloc (0);
9344 /* Try to perform the conversion. */
9345 t = implicit_conversion (to, from, arg, /*c_cast_p=*/false,
9346 flags, complain);
9347 /* Free all the conversions we allocated. */
9348 obstack_free (&conversion_obstack, p);
9350 return t != NULL;
9353 /* Convert EXPR to TYPE. Return the converted expression.
9355 Note that we allow bad conversions here because by the time we get to
9356 this point we are committed to doing the conversion. If we end up
9357 doing a bad conversion, convert_like will complain. */
9359 tree
9360 perform_implicit_conversion_flags (tree type, tree expr,
9361 tsubst_flags_t complain, int flags)
9363 conversion *conv;
9364 void *p;
9365 location_t loc = EXPR_LOC_OR_LOC (expr, input_location);
9367 if (error_operand_p (expr))
9368 return error_mark_node;
9370 /* Get the high-water mark for the CONVERSION_OBSTACK. */
9371 p = conversion_obstack_alloc (0);
9373 conv = implicit_conversion (type, TREE_TYPE (expr), expr,
9374 /*c_cast_p=*/false,
9375 flags, complain);
9377 if (!conv)
9379 if (complain & tf_error)
9381 /* If expr has unknown type, then it is an overloaded function.
9382 Call instantiate_type to get good error messages. */
9383 if (TREE_TYPE (expr) == unknown_type_node)
9384 instantiate_type (type, expr, complain);
9385 else if (invalid_nonstatic_memfn_p (expr, complain))
9386 /* We gave an error. */;
9387 else
9388 error_at (loc, "could not convert %qE from %qT to %qT", expr,
9389 TREE_TYPE (expr), type);
9391 expr = error_mark_node;
9393 else if (processing_template_decl && conv->kind != ck_identity)
9395 /* In a template, we are only concerned about determining the
9396 type of non-dependent expressions, so we do not have to
9397 perform the actual conversion. But for initializers, we
9398 need to be able to perform it at instantiation
9399 (or instantiate_non_dependent_expr) time. */
9400 expr = build1 (IMPLICIT_CONV_EXPR, type, expr);
9401 if (!(flags & LOOKUP_ONLYCONVERTING))
9402 IMPLICIT_CONV_EXPR_DIRECT_INIT (expr) = true;
9404 else
9405 expr = convert_like (conv, expr, complain);
9407 /* Free all the conversions we allocated. */
9408 obstack_free (&conversion_obstack, p);
9410 return expr;
9413 tree
9414 perform_implicit_conversion (tree type, tree expr, tsubst_flags_t complain)
9416 return perform_implicit_conversion_flags (type, expr, complain,
9417 LOOKUP_IMPLICIT);
9420 /* Convert EXPR to TYPE (as a direct-initialization) if that is
9421 permitted. If the conversion is valid, the converted expression is
9422 returned. Otherwise, NULL_TREE is returned, except in the case
9423 that TYPE is a class type; in that case, an error is issued. If
9424 C_CAST_P is true, then this direct-initialization is taking
9425 place as part of a static_cast being attempted as part of a C-style
9426 cast. */
9428 tree
9429 perform_direct_initialization_if_possible (tree type,
9430 tree expr,
9431 bool c_cast_p,
9432 tsubst_flags_t complain)
9434 conversion *conv;
9435 void *p;
9437 if (type == error_mark_node || error_operand_p (expr))
9438 return error_mark_node;
9439 /* [dcl.init]
9441 If the destination type is a (possibly cv-qualified) class type:
9443 -- If the initialization is direct-initialization ...,
9444 constructors are considered. ... If no constructor applies, or
9445 the overload resolution is ambiguous, the initialization is
9446 ill-formed. */
9447 if (CLASS_TYPE_P (type))
9449 vec<tree, va_gc> *args = make_tree_vector_single (expr);
9450 expr = build_special_member_call (NULL_TREE, complete_ctor_identifier,
9451 &args, type, LOOKUP_NORMAL, complain);
9452 release_tree_vector (args);
9453 return build_cplus_new (type, expr, complain);
9456 /* Get the high-water mark for the CONVERSION_OBSTACK. */
9457 p = conversion_obstack_alloc (0);
9459 conv = implicit_conversion (type, TREE_TYPE (expr), expr,
9460 c_cast_p,
9461 LOOKUP_NORMAL, complain);
9462 if (!conv || conv->bad_p)
9463 expr = NULL_TREE;
9464 else
9465 expr = convert_like_real (conv, expr, NULL_TREE, 0, 0,
9466 /*issue_conversion_warnings=*/false,
9467 c_cast_p,
9468 complain);
9470 /* Free all the conversions we allocated. */
9471 obstack_free (&conversion_obstack, p);
9473 return expr;
9476 /* When initializing a reference that lasts longer than a full-expression,
9477 this special rule applies:
9479 [class.temporary]
9481 The temporary to which the reference is bound or the temporary
9482 that is the complete object to which the reference is bound
9483 persists for the lifetime of the reference.
9485 The temporaries created during the evaluation of the expression
9486 initializing the reference, except the temporary to which the
9487 reference is bound, are destroyed at the end of the
9488 full-expression in which they are created.
9490 In that case, we store the converted expression into a new
9491 VAR_DECL in a new scope.
9493 However, we want to be careful not to create temporaries when
9494 they are not required. For example, given:
9496 struct B {};
9497 struct D : public B {};
9498 D f();
9499 const B& b = f();
9501 there is no need to copy the return value from "f"; we can just
9502 extend its lifetime. Similarly, given:
9504 struct S {};
9505 struct T { operator S(); };
9506 T t;
9507 const S& s = t;
9509 we can extend the lifetime of the return value of the conversion
9510 operator.
9512 The next several functions are involved in this lifetime extension. */
9514 /* DECL is a VAR_DECL or FIELD_DECL whose type is a REFERENCE_TYPE. The
9515 reference is being bound to a temporary. Create and return a new
9516 VAR_DECL with the indicated TYPE; this variable will store the value to
9517 which the reference is bound. */
9519 tree
9520 make_temporary_var_for_ref_to_temp (tree decl, tree type)
9522 tree var;
9524 /* Create the variable. */
9525 var = create_temporary_var (type);
9527 /* Register the variable. */
9528 if (VAR_P (decl)
9529 && (TREE_STATIC (decl) || DECL_THREAD_LOCAL_P (decl)))
9531 /* Namespace-scope or local static; give it a mangled name. */
9532 /* FIXME share comdat with decl? */
9533 tree name;
9535 TREE_STATIC (var) = TREE_STATIC (decl);
9536 set_decl_tls_model (var, DECL_TLS_MODEL (decl));
9537 name = mangle_ref_init_variable (decl);
9538 DECL_NAME (var) = name;
9539 SET_DECL_ASSEMBLER_NAME (var, name);
9540 var = pushdecl_top_level (var);
9542 else
9543 /* Create a new cleanup level if necessary. */
9544 maybe_push_cleanup_level (type);
9546 return var;
9549 /* EXPR is the initializer for a variable DECL of reference or
9550 std::initializer_list type. Create, push and return a new VAR_DECL
9551 for the initializer so that it will live as long as DECL. Any
9552 cleanup for the new variable is returned through CLEANUP, and the
9553 code to initialize the new variable is returned through INITP. */
9555 static tree
9556 set_up_extended_ref_temp (tree decl, tree expr, vec<tree, va_gc> **cleanups,
9557 tree *initp)
9559 tree init;
9560 tree type;
9561 tree var;
9563 /* Create the temporary variable. */
9564 type = TREE_TYPE (expr);
9565 var = make_temporary_var_for_ref_to_temp (decl, type);
9566 layout_decl (var, 0);
9567 /* If the rvalue is the result of a function call it will be
9568 a TARGET_EXPR. If it is some other construct (such as a
9569 member access expression where the underlying object is
9570 itself the result of a function call), turn it into a
9571 TARGET_EXPR here. It is important that EXPR be a
9572 TARGET_EXPR below since otherwise the INIT_EXPR will
9573 attempt to make a bitwise copy of EXPR to initialize
9574 VAR. */
9575 if (TREE_CODE (expr) != TARGET_EXPR)
9576 expr = get_target_expr (expr);
9578 if (TREE_CODE (decl) == FIELD_DECL
9579 && extra_warnings && !TREE_NO_WARNING (decl))
9581 warning (OPT_Wextra, "a temporary bound to %qD only persists "
9582 "until the constructor exits", decl);
9583 TREE_NO_WARNING (decl) = true;
9586 /* Recursively extend temps in this initializer. */
9587 TARGET_EXPR_INITIAL (expr)
9588 = extend_ref_init_temps (decl, TARGET_EXPR_INITIAL (expr), cleanups);
9590 /* Any reference temp has a non-trivial initializer. */
9591 DECL_NONTRIVIALLY_INITIALIZED_P (var) = true;
9593 /* If the initializer is constant, put it in DECL_INITIAL so we get
9594 static initialization and use in constant expressions. */
9595 init = maybe_constant_init (expr);
9596 if (TREE_CONSTANT (init))
9598 if (literal_type_p (type) && CP_TYPE_CONST_NON_VOLATILE_P (type))
9600 /* 5.19 says that a constant expression can include an
9601 lvalue-rvalue conversion applied to "a glvalue of literal type
9602 that refers to a non-volatile temporary object initialized
9603 with a constant expression". Rather than try to communicate
9604 that this VAR_DECL is a temporary, just mark it constexpr.
9606 Currently this is only useful for initializer_list temporaries,
9607 since reference vars can't appear in constant expressions. */
9608 DECL_DECLARED_CONSTEXPR_P (var) = true;
9609 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (var) = true;
9610 TREE_CONSTANT (var) = true;
9612 DECL_INITIAL (var) = init;
9613 init = NULL_TREE;
9615 else
9616 /* Create the INIT_EXPR that will initialize the temporary
9617 variable. */
9618 init = split_nonconstant_init (var, expr);
9619 if (at_function_scope_p ())
9621 add_decl_expr (var);
9623 if (TREE_STATIC (var))
9624 init = add_stmt_to_compound (init, register_dtor_fn (var));
9625 else
9627 tree cleanup = cxx_maybe_build_cleanup (var, tf_warning_or_error);
9628 if (cleanup)
9629 vec_safe_push (*cleanups, cleanup);
9632 /* We must be careful to destroy the temporary only
9633 after its initialization has taken place. If the
9634 initialization throws an exception, then the
9635 destructor should not be run. We cannot simply
9636 transform INIT into something like:
9638 (INIT, ({ CLEANUP_STMT; }))
9640 because emit_local_var always treats the
9641 initializer as a full-expression. Thus, the
9642 destructor would run too early; it would run at the
9643 end of initializing the reference variable, rather
9644 than at the end of the block enclosing the
9645 reference variable.
9647 The solution is to pass back a cleanup expression
9648 which the caller is responsible for attaching to
9649 the statement tree. */
9651 else
9653 rest_of_decl_compilation (var, /*toplev=*/1, at_eof);
9654 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
9656 if (DECL_THREAD_LOCAL_P (var))
9657 tls_aggregates = tree_cons (NULL_TREE, var,
9658 tls_aggregates);
9659 else
9660 static_aggregates = tree_cons (NULL_TREE, var,
9661 static_aggregates);
9663 else
9664 /* Check whether the dtor is callable. */
9665 cxx_maybe_build_cleanup (var, tf_warning_or_error);
9667 /* Avoid -Wunused-variable warning (c++/38958). */
9668 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
9669 && TREE_CODE (decl) == VAR_DECL)
9670 TREE_USED (decl) = DECL_READ_P (decl) = true;
9672 *initp = init;
9673 return var;
9676 /* Convert EXPR to the indicated reference TYPE, in a way suitable for
9677 initializing a variable of that TYPE. */
9679 tree
9680 initialize_reference (tree type, tree expr,
9681 int flags, tsubst_flags_t complain)
9683 conversion *conv;
9684 void *p;
9685 location_t loc = EXPR_LOC_OR_LOC (expr, input_location);
9687 if (type == error_mark_node || error_operand_p (expr))
9688 return error_mark_node;
9690 /* Get the high-water mark for the CONVERSION_OBSTACK. */
9691 p = conversion_obstack_alloc (0);
9693 conv = reference_binding (type, TREE_TYPE (expr), expr, /*c_cast_p=*/false,
9694 flags, complain);
9695 if (!conv || conv->bad_p)
9697 if (complain & tf_error)
9699 if (conv)
9700 convert_like (conv, expr, complain);
9701 else if (!CP_TYPE_CONST_P (TREE_TYPE (type))
9702 && !TYPE_REF_IS_RVALUE (type)
9703 && !real_lvalue_p (expr))
9704 error_at (loc, "invalid initialization of non-const reference of "
9705 "type %qT from an rvalue of type %qT",
9706 type, TREE_TYPE (expr));
9707 else
9708 error_at (loc, "invalid initialization of reference of type "
9709 "%qT from expression of type %qT", type,
9710 TREE_TYPE (expr));
9712 return error_mark_node;
9715 if (conv->kind == ck_ref_bind)
9716 /* Perform the conversion. */
9717 expr = convert_like (conv, expr, complain);
9718 else if (conv->kind == ck_ambig)
9719 /* We gave an error in build_user_type_conversion_1. */
9720 expr = error_mark_node;
9721 else
9722 gcc_unreachable ();
9724 /* Free all the conversions we allocated. */
9725 obstack_free (&conversion_obstack, p);
9727 return expr;
9730 /* Subroutine of extend_ref_init_temps. Possibly extend one initializer,
9731 which is bound either to a reference or a std::initializer_list. */
9733 static tree
9734 extend_ref_init_temps_1 (tree decl, tree init, vec<tree, va_gc> **cleanups)
9736 tree sub = init;
9737 tree *p;
9738 STRIP_NOPS (sub);
9739 if (TREE_CODE (sub) == COMPOUND_EXPR)
9741 TREE_OPERAND (sub, 1)
9742 = extend_ref_init_temps_1 (decl, TREE_OPERAND (sub, 1), cleanups);
9743 return init;
9745 if (TREE_CODE (sub) != ADDR_EXPR)
9746 return init;
9747 /* Deal with binding to a subobject. */
9748 for (p = &TREE_OPERAND (sub, 0); TREE_CODE (*p) == COMPONENT_REF; )
9749 p = &TREE_OPERAND (*p, 0);
9750 if (TREE_CODE (*p) == TARGET_EXPR)
9752 tree subinit = NULL_TREE;
9753 *p = set_up_extended_ref_temp (decl, *p, cleanups, &subinit);
9754 recompute_tree_invariant_for_addr_expr (sub);
9755 if (init != sub)
9756 init = fold_convert (TREE_TYPE (init), sub);
9757 if (subinit)
9758 init = build2 (COMPOUND_EXPR, TREE_TYPE (init), subinit, init);
9760 return init;
9763 /* INIT is part of the initializer for DECL. If there are any
9764 reference or initializer lists being initialized, extend their
9765 lifetime to match that of DECL. */
9767 tree
9768 extend_ref_init_temps (tree decl, tree init, vec<tree, va_gc> **cleanups)
9770 tree type = TREE_TYPE (init);
9771 if (processing_template_decl)
9772 return init;
9773 if (TREE_CODE (type) == REFERENCE_TYPE)
9774 init = extend_ref_init_temps_1 (decl, init, cleanups);
9775 else if (is_std_init_list (type))
9777 /* The temporary array underlying a std::initializer_list
9778 is handled like a reference temporary. */
9779 tree ctor = init;
9780 if (TREE_CODE (ctor) == TARGET_EXPR)
9781 ctor = TARGET_EXPR_INITIAL (ctor);
9782 if (TREE_CODE (ctor) == CONSTRUCTOR)
9784 tree array = CONSTRUCTOR_ELT (ctor, 0)->value;
9785 array = extend_ref_init_temps_1 (decl, array, cleanups);
9786 CONSTRUCTOR_ELT (ctor, 0)->value = array;
9789 else if (TREE_CODE (init) == CONSTRUCTOR)
9791 unsigned i;
9792 constructor_elt *p;
9793 vec<constructor_elt, va_gc> *elts = CONSTRUCTOR_ELTS (init);
9794 FOR_EACH_VEC_SAFE_ELT (elts, i, p)
9795 p->value = extend_ref_init_temps (decl, p->value, cleanups);
9798 return init;
9801 /* Returns true iff an initializer for TYPE could contain temporaries that
9802 need to be extended because they are bound to references or
9803 std::initializer_list. */
9805 bool
9806 type_has_extended_temps (tree type)
9808 type = strip_array_types (type);
9809 if (TREE_CODE (type) == REFERENCE_TYPE)
9810 return true;
9811 if (CLASS_TYPE_P (type))
9813 if (is_std_init_list (type))
9814 return true;
9815 for (tree f = next_initializable_field (TYPE_FIELDS (type));
9816 f; f = next_initializable_field (DECL_CHAIN (f)))
9817 if (type_has_extended_temps (TREE_TYPE (f)))
9818 return true;
9820 return false;
9823 /* Returns true iff TYPE is some variant of std::initializer_list. */
9825 bool
9826 is_std_init_list (tree type)
9828 /* Look through typedefs. */
9829 if (!TYPE_P (type))
9830 return false;
9831 if (cxx_dialect == cxx98)
9832 return false;
9833 type = TYPE_MAIN_VARIANT (type);
9834 return (CLASS_TYPE_P (type)
9835 && CP_TYPE_CONTEXT (type) == std_node
9836 && strcmp (TYPE_NAME_STRING (type), "initializer_list") == 0);
9839 /* Returns true iff DECL is a list constructor: i.e. a constructor which
9840 will accept an argument list of a single std::initializer_list<T>. */
9842 bool
9843 is_list_ctor (tree decl)
9845 tree args = FUNCTION_FIRST_USER_PARMTYPE (decl);
9846 tree arg;
9848 if (!args || args == void_list_node)
9849 return false;
9851 arg = non_reference (TREE_VALUE (args));
9852 if (!is_std_init_list (arg))
9853 return false;
9855 args = TREE_CHAIN (args);
9857 if (args && args != void_list_node && !TREE_PURPOSE (args))
9858 /* There are more non-defaulted parms. */
9859 return false;
9861 return true;
9864 #include "gt-cp-call.h"